image: golang:latest stages: - test - build - release variables: GOPATH: "${CI_PROJECT_DIR}/.gocache" GOLANGCI_LINT_CACHE: "${GOPATH}/golangci-lint_cache" GOCACHE: "${GOPATH}/go-build" .cache: &depscache key: $CI_COMMIT_REF_SLUG paths: - $CI_PROJECT_DIR/.gocache lint: stage: test image: golangci/golangci-lint:latest script: - golangci-lint cache status - golangci-lint run --timeout 5m --out-format junit-xml > lint.junit.xml cache: <<: *depscache policy: pull-push artifacts: reports: junit: lint.junit.xml tests: stage: test script: - go install gotest.tools/gotestsum@latest - gotestsum --junitfile tests.junit.xml -- -coverprofile=coverage.txt -covermode atomic -race ./... after_script: - export PATH="$PATH:$GOPATH/bin" - go install github.com/boumenot/gocover-cobertura@latest - gocover-cobertura < coverage.txt > coverage.xml - go tool cover -func=coverage.txt | grep "total:" coverage: '/total:\s+\(statements\)\s+(\d+.\d+\%)/' cache: <<: *depscache policy: pull-push artifacts: reports: cobertura: coverage.xml junit: tests.junit.xml release: stage: release image: registry.gitlab.com/gitlab-org/release-cli:latest rules: - if: $CI_COMMIT_TAG script: - | release-cli create \ --name "${CI_COMMIT_TAG}" \ --tag-name "${CI_COMMIT_TAG}" \ --milestone "${CI_COMMIT_TAG}"