Skip to content
Snippets Groups Projects
.gitlab-ci.yml 4 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 ./)"
    
      except:
        - tags                               # do not run for releases
    
    Nicola Jordan's avatar
    Nicola Jordan committed
    
    vet:
      stage: build
      script:
        - go vet -json ./... | tee vet-report.json
      artifacts:
        when: always
        paths:
          - vet-report.json
        expire_in: 1 hour
    
      except:
        - tags                               # do not run for releases
    
    Nicola Jordan's avatar
    Nicola Jordan committed
    
    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
    
      except:
        - tags                               # do not run for releases
    
    Nicola Jordan's avatar
    Nicola Jordan committed
    
    staticcheck:
      stage: build
      script:
        - go install honnef.co/go/tools/cmd/staticcheck@latest # ideally we should version pin
        - staticcheck ./...
    
      except:
        - tags                               # do not run for releases
    
    Nicola Jordan's avatar
    Nicola Jordan committed
    
    golint:
      stage: build
      script:
        - go install golang.org/x/lint/golint@latest # ideally we should version pin
        - golint -set_exit_status ./...
    
      except:
        - tags                               # do not run for releases
    
    Nicola Jordan's avatar
    Nicola Jordan committed
    
    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
    
      except:
        - tags                               # do not run for releases
    
    Nicola Jordan's avatar
    Nicola Jordan committed
    
    # 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
    
      except:
        - tags                               # do not run for releases
    
    Nicola Jordan's avatar
    Nicola Jordan committed
    
    
    # to create a new release, do a release
    generate_executables:
    
      stage: release
      rules:
    
        - if: $CI_COMMIT_TAG                 # Run this job when a tag is created
      before_script:
      - echo ARTIFACT_JOB_ID=$CI_JOB_ID >> executable_artifacts.env
    
      script:
        - ./go-executable-build.sh boilr boilr.go
      artifacts:
        paths:
    
          - builds/boilr-darwin-amd64
          - builds/boilr-darwin-arm64
          - builds/boilr-linux-amd64
          - builds/boilr-linux-386
          - builds/boilr-windows-386.exe
          - builds/boilr-windows-amd64.exe
        reports:
          # To ensure we've access to this file in the next stage
          dotenv: executable_artifacts.env
    
    
    release_job:
      stage: release
      image: registry.gitlab.com/gitlab-org/release-cli:latest
      rules:
        - if: $CI_COMMIT_TAG                 # Run this job when a tag is created
      needs:
        - job: release_artifacts_job
          artifacts: true
      script:
        - echo "running release_job"
        - echo "creating release $CI_COMMIT_TAG"
      release:                               # See https://docs.gitlab.com/ee/ci/yaml/#release for available properties
        tag_name: '$CI_COMMIT_TAG'
        description: '$CI_COMMIT_TAG'
    
    Nicola Jordan's avatar
    Nicola Jordan committed
        assets:
          links:
            - name: 'Linux amd64'
              url: 'https://gitlab.ost.ch/ifs/boilr/-/jobs/${ARTIFACT_JOB_ID}/artifacts/file/builds/boilr-linux-amd64'
            - name: 'Linux (32-bit))'
              url: 'https://gitlab.ost.ch/ifs/boilr/-/jobs/${ARTIFACT_JOB_ID}/artifacts/file/builds/boilr-linux-386'
            - name: 'Mac M1/M2 Executable'
              url: 'https://gitlab.ost.ch/ifs/boilr/-/jobs/${ARTIFACT_JOB_ID}/artifacts/file/builds/boilr-darwin-arm64'
            - name: 'Mac (Intel)'
              url: 'https://gitlab.ost.ch/ifs/boilr/-/jobs/${ARTIFACT_JOB_ID}/artifacts/file/builds/boilr-darwin-amd64'
            - name: 'Windows 32-bit'
              url: 'https://gitlab.ost.ch/ifs/boilr/-/jobs/${ARTIFACT_JOB_ID}/artifacts/file/builds/boilr-windows-386.exe'
            - name: 'Windows 64-bit'
              url: 'https://gitlab.ost.ch/ifs/boilr/-/jobs/${ARTIFACT_JOB_ID}/artifacts/file/builds/boilr-windows-amd64.exe'