variables: DOCKER_TLS_CERTDIR: "/certs" CONTAINER_IMAGE: "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG-$CI_COMMIT_SHORT_SHA" RAILS_ENV: "production" stages: - build - test - deploy before_script: - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY build: stage: build script: - docker build -t $CONTAINER_IMAGE . - docker push $CONTAINER_IMAGE only: - main - merge_requests test: stage: test services: - postgres:latest variables: POSTGRES_DB: "rails_test" POSTGRES_USER: "postgres" POSTGRES_PASSWORD: "password" DATABASE_URL: "postgresql://postgres:password@postgres:5432/rails_test" script: - docker run --rm $CONTAINER_IMAGE bin/rails db:create db:migrate RAILS_ENV=test - docker run --rm $CONTAINER_IMAGE bin/rails test only: - main - merge_requests deploy: stage: deploy script: - echo "Deploying to production..." # Add your deployment commands here # For example, if using Kubernetes: # - kubectl set image deployment/rails-app rails-app=$CONTAINER_IMAGE only: - main