.github/workflows/ci.yml

Summary

Maintainability
Test Coverage
---
name: CI
on: [push]

jobs:
  lint:
    name: Lint
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: golangci-lint
        uses: golangci/golangci-lint-action@v2
        with:
          version: v1.43
        env:
          VERBOSE: "true"

  tidy:
    name: Tidy
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-go@v2
        with:
          go-version: 1.15
      - uses: actions/cache@v2
        with:
          path: ~/go/pkg/mod
          key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}
          restore-keys: |
            ${{ runner.os }}-go-
      - name: Check if mods are tidy
        run: make check-tidy

  benchmark:
    name: Benchmarks
    runs-on: ubuntu-latest
    if: github.ref != 'refs/heads/master'
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-go@v2
        with:
          go-version: 1.15
      - uses: actions/cache@v2
        with:
          path: ~/go/pkg/mod
          key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}
          restore-keys: |
            ${{ runner.os }}-go-
      - name: Run benchmarks
        run: make bench | tee output.raw
      - name: Fix benchmark names
        run: >-
          perl -pe 's/^(Benchmark.+?)\/(\S+)(-\d+)(\s+)/\1__\2\4/' output.raw |
          tr '=-' '_' | tee output.txt
      - name: Announce benchmark result
        uses: rhysd/github-action-benchmark@v1
        with:
          tool: "go"
          output-file-path: output.txt
          fail-on-alert: true
          comment-on-alert: true
          github-token: ${{ secrets.GITHUB_TOKEN }}
          auto-push: false

  cov:
    name: Coverage
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-go@v2
        with:
          go-version: 1.15
      - uses: actions/cache@v2
        with:
          path: ~/go/pkg/mod
          key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}
          restore-keys: |
            ${{ runner.os }}-go-
      - name: Publish coverage
        uses: paambaati/codeclimate-action@v2.7.4
        env:
          VERBOSE: "true"
          GOMAXPROCS: 4
          CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }}
        with:
          coverageCommand: make cov
          prefix: github.com/${{ github.repository }}
          coverageLocations: |
            ${{ github.workspace }}/coverage.out:gocov

  test:
    name: Test
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-go@v2
        with:
          go-version: 1.15
      - uses: actions/cache@v2
        with:
          path: ~/go/pkg/mod
          key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}
          restore-keys: |
            ${{ runner.os }}-go-
      - name: Run tests
        run: make test
        env:
          VERBOSE: "true"

  benchmark-store:
    name: Store benchmarks
    runs-on: ubuntu-latest
    if: github.ref == 'refs/heads/master'
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-go@v2
        with:
          go-version: 1.15
      - uses: actions/cache@v2
        with:
          path: ~/go/pkg/mod
          key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}
          restore-keys: |
            ${{ runner.os }}-go-
      - name: Run benchmarks
        run: make bench | tee output.raw
      - name: Fix benchmark names
        run: >-
          perl -pe 's/^(Benchmark.+?)\/(\S+)(-\d+)(\s+)/\1__\2\4/' output.raw |
          tr '=-' '_' | tee output.txt
      - name: Store benchmark result
        uses: rhysd/github-action-benchmark@v1
        with:
          tool: "go"
          output-file-path: output.txt
          github-token: ${{ secrets.GH_PUSH_TOKEN }}
          comment-on-alert: true
          auto-push: true