Skip to content
Snippets Groups Projects
.gitlab-ci.yml 1.85 KiB
Newer Older
  • Learn to ignore specific revisions
  • Nicola Jordan's avatar
    Nicola Jordan committed
    image: golang:latest
    
    stages:
      - build
    
    Nicola Jordan's avatar
    Nicola Jordan committed
    
    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, through the UI of gitlab
    
      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/*