Skip to content

build

build #118

Workflow file for this run

name: build
permissions: {} # no need any permissions
on:
push:
branches: [main]
pull_request:
branches: [main]
schedule:
- cron: '0 10 * * 1' # run "At 10:00 on Monday"
workflow_call:
inputs:
skipTests:
description: 'Skip tests, useful when there is a dedicated CI job for tests'
default: false
required: false
type: boolean
skipGenerate:
description: 'Skip "go generate"'
default: true
required: false
type: boolean
buildTags:
description: 'Build tags to use. Default is "1" which works as no-op'
default: '1'
required: false
type: string
groupSuffix:
description: 'Concurrency group suffix to allow multiple jobs'
default: ''
required: false
type: string
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}${{ inputs.groupSuffix }}
cancel-in-progress: true
jobs:
run:
name: Build
runs-on: ubuntu-latest
timeout-minutes: 5
strategy:
fail-fast: true
matrix:
go: ['stable', 'oldstable']
steps:
- name: Check out code
uses: actions/checkout@v4
- name: Install Go
uses: actions/setup-go@v5
with:
go-version: ${{ matrix.go }}
check-latest: true
- name: Go Format
run: gofmt -s -w . && git diff --exit-code
- name: Go Tidy
run: go mod tidy && git diff --exit-code
- name: Go Mod
run: go mod download
- name: Go Mod Verify
run: go mod verify
- name: Go Generate
if: ${{ !inputs.skipGenerate }}
run: go generate ./... && git diff --exit-code
- name: Go Build
run: go build -o=/dev/null -tags=${{ inputs.buildTags }} ./...
- name: Go Vet
run: go vet ./...
- name: Go Compile Tests
if: ${{ inputs.skipTests }}
run: go test -exec=/bin/true -tags=${{ inputs.buildTags }} ./...
- name: Go Test
if: ${{ !inputs.skipTests }}
run: go test -v -shuffle=on -tags=${{ inputs.buildTags }} -race -count=1 -coverprofile=coverage.txt ./...
- name: Go Benchmark
if: ${{ !inputs.skipTests }}
run: go test -v -shuffle=on -tags=${{ inputs.buildTags }} -run=^$ -bench=. -benchtime=1x ./...
- name: Upload Coverage
if: ${{ !inputs.skipTests }}
uses: codecov/codecov-action@v4
continue-on-error: true
with:
token: ${{secrets.CODECOV_TOKEN}}
file: ./coverage.txt
fail_ci_if_error: false