name: Go

on:
  push:
    branches:
      - master
  pull_request:
    branches:
      - master

jobs:
  unit:
    runs-on: ubuntu-latest
    steps:
      - uses: styfle/cancel-workflow-action@0.10.0
      - uses: actions/setup-go@v1
        with:
          go-version: '1.18.x'
      - name: Cache Golang Packages
        uses: actions/cache@v1
        with:
          path: ~/go/pkg/mod
          key: ${{ runner.os }}-golang-${{ hashFiles('go.sum') }}
          restore-keys: |
            ${{ runner.os }}-golang-
      - name: checkout
        uses: actions/checkout@v2
      - name: unit-test
        uses: paambaati/codeclimate-action@v2.6.0
        env:
          CC_TEST_REPORTER_ID: ${{ secrets.CODE_CLIMATE_REPORTER_ID }}
        with:
          coverageCommand: go test ./... -coverprofile cover.out
          coverageLocations: cover.out:gocov
          # truncate package name from file paths in report
          prefix: github.com/SAP/jenkins-library/
  format:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/setup-go@v1
        with:
          go-version: '1.18.x'
      - name: Cache Golang Packages
        uses: actions/cache@v1
        with:
          path: ~/go/pkg/mod
          key: ${{ runner.os }}-golang-format${{ hashFiles('go.sum') }}
          restore-keys: |
            ${{ runner.os }}-golang-format
            ${{ runner.os }}-golang-
      - name: checkout
        uses: actions/checkout@v2
      - name: format
        run: go fmt ./...
      - name: verify
        run: git diff --exit-code
  lint:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/setup-go@v1
        with:
          go-version: '1.18.x'
      - name: checkout
        uses: actions/checkout@v2
        with:
          fetch-depth: 1
      - name: staticcheck
        uses: dominikh/staticcheck-action@v1.2.0
        with:
          cache-key: ${{ runner.os }}-golang-staticcheck
          install-go: false
  generate:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/setup-go@v1
        with:
          go-version: '1.18.x'
      - name: Cache Golang Packages
        uses: actions/cache@v1
        with:
          path: ~/go/pkg/mod
          key: ${{ runner.os }}-golang-generate${{ hashFiles('go.sum') }}
          restore-keys: |
            ${{ runner.os }}-golang-generate
            ${{ runner.os }}-golang-
      - name: checkout
        uses: actions/checkout@v2
      - name: generate
        run: go run pkg/generator/step-metadata.go
      - name: verify
        run: git diff --exit-code
  dependencies:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/setup-go@v1
        with:
          go-version: '1.18.x'
      - name: Cache Golang Packages
        uses: actions/cache@v1
        with:
          path: ~/go/pkg/mod
          key: ${{ runner.os }}-golang-dependencies${{ hashFiles('go.sum') }}
          restore-keys: |
            ${{ runner.os }}-golang-dependencies
            ${{ runner.os }}-golang-
      - name: checkout
        uses: actions/checkout@v2
      - name: cleanup dependencies
        run: go mod tidy
      - name: verify
        run: git diff --name-only --exit-code
