image: golang:latest stages: - build - release format: stage: build script: - test -z "$(gofmt -l ./)" vet: stage: build script: - go vet -json ./... | tee vet-report.json artifacts: when: always paths: - vet-report.json expire_in: 1 hour test: stage: build script: - go test -coverprofile=coverage.out -json ./... | tee test-report.json artifacts: when: always paths: - test-report.json - coverage.out expire_in: 1 hour staticcheck: stage: build script: - go install honnef.co/go/tools/cmd/staticcheck@latest # ideally we should version pin - staticcheck ./... golint: stage: build script: - go install golang.org/x/lint/golint@latest # ideally we should version pin - golint -set_exit_status ./... build: stage: build script: - go build ./... artifacts: # instead of manually adding i.e. the built binaries, we can instead just # grab anything not tracked in Git untracked: true expire_in: 1 hour # sonar instance needs to be running on localhost:9000 for this to work! sonarcloud-check: stage: build needs: - job: test artifacts: true - job: vet artifacts: true image: name: sonarsource/sonar-scanner-cli:latest entrypoint: [""] variables: SONAR_USER_HOME: "${CI_PROJECT_DIR}/.sonar" GIT_DEPTH: "0" cache: key: "${CI_JOB_NAME}" paths: - .sonar/cache script: - sonar-scanner release_job: stage: release rules: - if: $CI_COMMIT_TAG # Run this job when a tag is created script: - ./go-executable-build.sh boilr boilr.go release: # See https://docs.gitlab.com/ee/ci/yaml/#release for available properties tag_name: '$CI_COMMIT_TAG' description: '$CI_COMMIT_TAG' artifacts: paths: - build/*