image: registry.gitlab.fpcomplete.com/fpco/default-build-image:7293 cache: key: "$CI_BUILD_NAME" paths: - .stack-work/ - .stack-root/ - static/combined/ stages: - build - deploy variables: STACK_ROOT: "${CI_PROJECT_DIR}/.stack-root" DEPLOYMENT_IMAGE: "${CI_REGISTRY_IMAGE}:${CI_BUILD_REF_SLUG}_${CI_PIPELINE_ID}" DEPLOYMENT_NAME: "stackage-server-prod" HOOGLE_DEPLOYMENT_NAME: "stackage-server-hoogle-prod" CRON_DEPLOYMENT_NAME: "stackage-server-cron-prod" DEPLOYMENT_APP: "stackage-server-prod" CRON_DEPLOYMENT_APP: "stackage-server-cron-prod" HOOGLE_DEPLOYMENT_APP: "stackage-server-hoogle-prod" KUBECONFIG: /etc/deploy/kubeconfig.yaml build: stage: build script: # Clear *_TOKEN variables during code build so that compile-time code can't access them - apt-get update && apt-get install -y --no-install-recommends libpq-dev git rsync - CI_BUILD_TOKEN="" KUBECONFIG_YAML="" KUBE_TOKEN="" PROD_KUBE_TOKEN="" PROD_DOCKER_PASSWORD="" etc/scripts/stage_docker.sh --install-ghc --test - docker build -t "${DEPLOYMENT_IMAGE}" etc/docker - docker login -u gitlab-ci-token -p "${CI_BUILD_TOKEN}" "${CI_REGISTRY}" - docker push "${DEPLOYMENT_IMAGE}" - | if [[ "$CI_BUILD_REF_NAME" == "master" ]]; then docker tag "${DEPLOYMENT_IMAGE}" "${CI_REGISTRY_IMAGE}:latest" docker push "${CI_REGISTRY_IMAGE}:latest" fi if [[ "$CI_BUILD_REF_NAME" == "ci-cron" ]]; then docker tag "${DEPLOYMENT_IMAGE}" "${CI_REGISTRY_IMAGE}:ci-cron" docker push "${CI_REGISTRY_IMAGE}:ci-cron" fi deploy_prod: stage: deploy only: - master # when: manual environment: name: production url: https://www.stackage.org/ variables: CRON_DEPLOYMENT_NAME: "stackage-server-cron-prod" DEPLOYMENT_NAME: "stackage-server-prod" HOOGLE_DEPLOYMENT_NAME: "stackage-server-hoogle-prod" KUBE_NAMESPACE: "${PROD_KUBE_NAMESPACE}" PROD_DEPLOYMENT_IMAGE: "fpco/stackage-server-prod:${CI_BUILD_REF_SLUG}_${CI_PIPELINE_ID}" script: - mkdir -p /etc/deploy - echo "${KUBECONFIG_YAML}" > /etc/deploy/kubeconfig.enc - base64 -d ${KUBECONFIG} - kubectl set image "deployment/stackage-server-prod" stackage-server="$DEPLOYMENT_IMAGE" - kubectl set image "deployment/stackage-server-cron-prod" stackage-server-cron="$DEPLOYMENT_IMAGE" - kubectl set image "deployment/stackage-server-hoogle-prod" stackage-server-hoogle="$DEPLOYMENT_IMAGE" - kubectl rollout status "deployment/stackage-server-prod" - kubectl rollout status "deployment/stackage-server-hoogle-prod" - kubectl rollout status "deployment/stackage-server-cron-prod"