ci: automate running 'go mod tidy' #797
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# SPDX-FileCopyrightText: 2023 Siemens AG | |
# | |
# SPDX-License-Identifier: Apache-2.0 | |
# | |
# Author: Michael Adler <michael.adler@siemens.com> | |
--- | |
name: CI | |
on: [push, pull_request, workflow_dispatch] | |
jobs: | |
build: | |
name: Build | |
runs-on: ubuntu-latest | |
container: golang:1.22.5@sha256:fcae9e0e7313c6467a7c6632ebb5e5fab99bd39bd5eb6ee34a211353e647827a | |
strategy: | |
matrix: | |
# even though Windows is not officially supported, we want it to at least compile successfully | |
goos: [linux, windows] | |
steps: | |
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4 | |
- name: Setup Golang caches | |
uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4 | |
with: | |
path: | | |
~/.cache/go-build | |
~/go/pkg/mod | |
key: ${{ runner.os }}-golang-${{ hashFiles('**/go.sum') }} | |
restore-keys: | | |
${{ runner.os }}-golang- | |
- name: Disable git security features | |
run: git config --global safe.directory '*' | |
- run: .ci/setup-build.sh | |
- name: build for ${{ matrix.goos }} | |
run: just build | |
env: | |
GOOS: ${{ matrix.goos }} | |
test: | |
name: Test | |
runs-on: ubuntu-latest | |
container: golang:1.22.5@sha256:fcae9e0e7313c6467a7c6632ebb5e5fab99bd39bd5eb6ee34a211353e647827a | |
steps: | |
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4 | |
- name: Setup Golang caches | |
uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4 | |
with: | |
path: | | |
~/.cache/go-build | |
~/go/pkg/mod | |
key: ${{ runner.os }}-golang-${{ hashFiles('**/go.sum') }} | |
restore-keys: | | |
${{ runner.os }}-golang- | |
- run: make test | |
- name: Upload coverage to Codecov | |
uses: codecov/codecov-action@e28ff129e5465c2c0dcc6f003fc735cb6ae0c673 # v4 | |
with: | |
token: ${{ secrets.CODECOV_TOKEN }} | |
files: coverage.out | |
test-postgres: | |
runs-on: ubuntu-latest | |
name: Test PostgreSQL | |
container: golang:1.22.5@sha256:fcae9e0e7313c6467a7c6632ebb5e5fab99bd39bd5eb6ee34a211353e647827a | |
services: | |
postgres: | |
image: postgres:16@sha256:0aafd2ae7e6c391f39fb6b7621632d79f54068faebc726caf469e87bd1d301c0 | |
env: | |
# see https://hub.docker.com/_/postgres | |
POSTGRES_HOST: postgres | |
POSTGRES_PORT: 5432 | |
POSTGRES_DB: wfx | |
POSTGRES_USER: wfx | |
POSTGRES_PASSWORD: secret | |
POSTGRES_HOST_AUTH_METHOD: trust | |
# Set health checks to wait until postgres has started | |
options: >- | |
--health-cmd pg_isready | |
--health-interval 3s | |
--health-timeout 5s | |
--health-retries 20 | |
steps: | |
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4 | |
- name: Setup Golang caches | |
uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4 | |
with: | |
path: | | |
~/.cache/go-build | |
~/go/pkg/mod | |
key: ${{ runner.os }}-golang-${{ hashFiles('**/go.sum') }} | |
restore-keys: | | |
${{ runner.os }}-golang- | |
- run: .ci/setup-postgres.sh | |
- run: just postgres-integration-test | |
env: | |
PGHOST: postgres | |
PGPORT: 5432 | |
PGDATABASE: wfx | |
PGUSER: wfx | |
PGPASSWORD: secret | |
PGSSLMODE: disable | |
- name: Upload coverage to Codecov | |
# note: v4 is buggy and fails to upload this report | |
uses: codecov/codecov-action@e28ff129e5465c2c0dcc6f003fc735cb6ae0c673 # v4 | |
with: | |
token: ${{ secrets.CODECOV_TOKEN }} | |
files: coverage.out | |
test-mysql: | |
runs-on: ubuntu-latest | |
name: Test MySQL | |
container: golang:1.22.5@sha256:fcae9e0e7313c6467a7c6632ebb5e5fab99bd39bd5eb6ee34a211353e647827a | |
services: | |
mysql: | |
image: mysql:8-debian@sha256:49f4fcb0087318aa1c222c7e8ceacbb541cdc457c6307d45e6ee4313f4902e33 | |
env: | |
# see https://hub.docker.com/_/mysql | |
MYSQL_DATABASE: wfx | |
MYSQL_ROOT_PASSWORD: root | |
MYSQL_USER: wfx | |
MYSQL_PASSWORD: secret | |
MYSQL_HOST: mysql | |
# Set health checks to wait until mysql has started | |
options: >- | |
--health-cmd="mysqladmin ping --silent" | |
--health-interval 3s | |
--health-timeout 5s | |
--health-retries 20 | |
steps: | |
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4 | |
- name: Setup Golang caches | |
uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4 | |
with: | |
path: | | |
~/.cache/go-build | |
~/go/pkg/mod | |
key: ${{ runner.os }}-golang-${{ hashFiles('**/go.sum') }} | |
restore-keys: | | |
${{ runner.os }}-golang- | |
- run: .ci/setup-mysql.sh | |
- run: just mysql-integration-test | |
env: | |
MYSQL_DATABASE: wfx | |
MYSQL_ROOT_PASSWORD: root | |
MYSQL_USER: wfx | |
MYSQL_PASSWORD: secret | |
MYSQL_HOST: mysql | |
- name: Upload coverage to Codecov | |
# note: v4 is buggy and fails to upload this report | |
uses: codecov/codecov-action@e28ff129e5465c2c0dcc6f003fc735cb6ae0c673 # v4 | |
with: | |
token: ${{ secrets.CODECOV_TOKEN }} | |
files: coverage.out | |
cli-tests: | |
name: CLI Tests | |
runs-on: ubuntu-latest | |
container: golang:1.22.5@sha256:fcae9e0e7313c6467a7c6632ebb5e5fab99bd39bd5eb6ee34a211353e647827a | |
services: | |
mysql: | |
image: mysql:8-debian@sha256:49f4fcb0087318aa1c222c7e8ceacbb541cdc457c6307d45e6ee4313f4902e33 | |
env: | |
# see https://hub.docker.com/_/mysql | |
MYSQL_DATABASE: wfx | |
MYSQL_ROOT_PASSWORD: root | |
MYSQL_USER: wfx | |
MYSQL_PASSWORD: secret | |
MYSQL_HOST: mysql | |
# Set health checks to wait until mysql has started | |
options: >- | |
--health-cmd="mysqladmin ping --silent" | |
--health-interval 3s | |
--health-timeout 5s | |
--health-retries 20 | |
postgres: | |
image: postgres:16@sha256:0aafd2ae7e6c391f39fb6b7621632d79f54068faebc726caf469e87bd1d301c0 | |
env: | |
# see https://hub.docker.com/_/postgres | |
POSTGRES_HOST: postgres | |
POSTGRES_PORT: 5432 | |
POSTGRES_DB: wfx | |
POSTGRES_USER: wfx | |
POSTGRES_PASSWORD: secret | |
POSTGRES_HOST_AUTH_METHOD: trust | |
# Set health checks to wait until postgres has started | |
options: >- | |
--health-cmd pg_isready | |
--health-interval 3s | |
--health-timeout 5s | |
--health-retries 20 | |
steps: | |
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4 | |
with: | |
submodules: "true" | |
- name: Setup Golang caches | |
uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4 | |
with: | |
path: | | |
~/.cache/go-build | |
~/go/pkg/mod | |
key: ${{ runner.os }}-golang-${{ hashFiles('**/go.sum') }} | |
restore-keys: | | |
${{ runner.os }}-golang- | |
- run: .ci/setup-cli-tests.sh | |
- name: Disable git security features | |
run: git config --global safe.directory '*' | |
- name: build wfx | |
run: make | |
- name: install wfx | |
run: make install | |
- name: run tests | |
env: | |
PGHOST: postgres | |
PGPORT: 5432 | |
PGUSER: wfx | |
PGPASSWORD: secret | |
PGDATABASE: wfx | |
MYSQL_DATABASE: wfx | |
MYSQL_ROOT_PASSWORD: root | |
MYSQL_USER: wfx | |
MYSQL_PASSWORD: secret | |
MYSQL_HOST: mysql | |
working-directory: test | |
run: bats . | |
lint: | |
runs-on: ubuntu-latest | |
name: Lint | |
container: golang:1.22.5@sha256:fcae9e0e7313c6467a7c6632ebb5e5fab99bd39bd5eb6ee34a211353e647827a | |
steps: | |
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4 | |
- name: Disable git security features | |
run: git config --global safe.directory '*' | |
- run: .ci/setup-lint.sh | |
- run: just lint | |
reuse: | |
runs-on: ubuntu-latest | |
name: Reuse | |
container: fsfe/reuse:4.0.3@sha256:7e0ca22c55f73947d9ebc77deacc79357deff0c6abc63acdd87222f633718919 | |
steps: | |
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4 | |
- run: reuse lint || true # just a warning | |
generate: | |
name: Generate Code | |
runs-on: ubuntu-latest | |
container: golang:1.22.5@sha256:fcae9e0e7313c6467a7c6632ebb5e5fab99bd39bd5eb6ee34a211353e647827a | |
steps: | |
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4 | |
- name: Install packages | |
run: .ci/setup-generate.sh | |
- name: Disable git security features | |
run: git config --global safe.directory '*' | |
- run: just generate | |
- run: git diff --exit-code |