stages: - lint - test - clean - build - deploy lint: image: golangci/golangci-lint:v1.52-alpine stage: lint before_script: - go install github.com/vektra/mockery/v2@v2.26.0 - go install github.com/deepmap/oapi-codegen/cmd/oapi-codegen@v1.12.4 script: - go generate ./internal/... - golangci-lint version - golangci-lint run ./internal/... test: image: golang:1.20.3-alpine stage: test coverage: /\(statements\)(?:\s+)?(\d+(?:\.\d+)?%)/ script: - CGO_ENABLED=0 go test ./internal/... -coverprofile=coverage.out - go tool cover -html=coverage.out -o coverage.html - go tool cover -func coverage.out artifacts: expire_in: "3 days" paths: - coverage.html clean-old: stage: clean image: name: docker/compose:1.28.0 entrypoint: [""] allow_failure: true variables: PRODUCTION_BRANCH: main STAGING_BRANCH: "staging" DEPLOY_TO: "staging" rules: - if: $CI_COMMIT_BRANCH == $PRODUCTION_BRANCH || $CI_COMMIT_BRANCH == $STAGING_BRANCH when: on_success before_script: - echo DEPLOY_TO = $DEPLOY_TO script: - docker-compose -f deployments/$DEPLOY_TO/docker-compose.yaml down --volumes --rmi local build-app: stage: build image: name: gcr.io/kaniko-project/executor:debug entrypoint: [""] variables: DOCKER_BUILD_PATH: "./Dockerfile" STAGING_BRANCH: "staging" PRODUCTION_BRANCH: "main" rules: - if: $CI_COMMIT_BRANCH == $PRODUCTION_BRANCH || $CI_COMMIT_BRANCH == $STAGING_BRANCH when: on_success before_script: - echo PRODUCTION_BRANCH = $PRODUCTION_BRANCH - echo STAGING_BRANCH = $STAGING_BRANCH - echo CI_REGISTRY = $CI_REGISTRY - echo CI_REGISTRY_USER = $CI_REGISTRY_USER - echo CI_PROJECT_DIR = $CI_PROJECT_DIR - echo CI_REGISTRY_IMAGE = $CI_REGISTRY_IMAGE - echo CI_COMMIT_REF_SLUG = $CI_COMMIT_REF_SLUG - echo DOCKER_BUILD_PATH = $DOCKER_BUILD_PATH - echo CI_PIPELINE_ID = $CI_PIPELINE_ID script: - mkdir -p /kaniko/.docker - echo "{\"auths\":{\"$CI_REGISTRY\":{\"username\":\"$CI_REGISTRY_USER\",\"password\":\"$CI_REGISTRY_PASSWORD\"}}}" > /kaniko/.docker/config.json - | /kaniko/executor --context $CI_PROJECT_DIR \ --cache=true --cache-repo=$CI_REGISTRY_IMAGE \ --dockerfile $CI_PROJECT_DIR/$DOCKER_BUILD_PATH --target production \ --destination $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG.$CI_PIPELINE_ID deploy-to-staging: stage: deploy image: name: docker/compose:1.28.0 entrypoint: [""] variables: DEPLOY_TO: "staging" BRANCH: "staging" rules: - if: $CI_COMMIT_BRANCH == $BRANCH before_script: - echo CI_PROJECT_NAME = $CI_PROJECT_NAME - echo CI_REGISTRY = $CI_REGISTRY - echo REGISTRY_USER = $REGISTRY_USER - echo REGISTRY_TOKEN = $REGISTRY_TOKEN - echo DEPLOY_TO = $DEPLOY_TO - echo BRANCH = $BRANCH script: - docker login -u $REGISTRY_USER -p $REGISTRY_TOKEN $CI_REGISTRY - docker-compose -f deployments/$DEPLOY_TO/docker-compose.yaml up -d