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 code_navigation: stage: test image: sourcegraph/lsif-go:latest allow_failure: true # recommended script: - lsif-go --no-animation - ls -lh dump.lsif artifacts: reports: lsif: dump.lsif 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: - export PATH="$PATH:$GOPATH/bin" - 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: coverage_report: coverage_format: cobertura path: 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}"