ci: add a check workflow and run Dependabot auto-merge on GitHub only
The repository had no test workflow. CI runs vet, staticcheck, tests with and without the race detector, and checks generated code and mocks, in an Arch container on Forgejo and GitHub. The Dependabot workflow calls a reusable workflow that only exists on GitHub.
- commit
- 51e0a11b6a4756047aab6e7c891daccf0c34a0b2
- author
- brice · · 2026-10-15 02:21 UTC
- parent
- 648b1ef
- signature
- GPG Verified
CD88F9E564E0102646FB6077A1A07C7C7C3E349D· arch-gpg Verified for the committer email
2 files · +41 -1
A .github/workflows/ci.yml +39 -0
| @@ -0,0 +1,39 @@ | |||
| 1 | + | name: CI | |
| 2 | + | on: | |
| 3 | + | push: | |
| 4 | + | branches: [main] | |
| 5 | + | pull_request: | |
| 6 | + | permissions: | |
| 7 | + | contents: read | |
| 8 | + | concurrency: | |
| 9 | + | group: ci-${{ github.ref }} | |
| 10 | + | cancel-in-progress: true | |
| 11 | + | jobs: | |
| 12 | + | # Runs as root in an Arch container, on Forgejo and GitHub alike. Arch | |
| 13 | + | # ships the libpipewire the bindings are generated against; gcc is for the | |
| 14 | + | # race detector. The integration tests need a running PipeWire and are run | |
| 15 | + | # by hand (go test -tags integration ./integration/). | |
| 16 | + | check: | |
| 17 | + | runs-on: ubuntu-latest | |
| 18 | + | container: | |
| 19 | + | image: archlinux:latest | |
| 20 | + | options: --init | |
| 21 | + | steps: | |
| 22 | + | - run: pacman -Syu --noconfirm --needed git go gcc pipewire | |
| 23 | + | - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| 24 | + | with: | |
| 25 | + | persist-credentials: false | |
| 26 | + | - run: | | |
| 27 | + | git config --global --add safe.directory "$GITHUB_WORKSPACE" | |
| 28 | + | test "$(go env GOVERSION | cut -d. -f1-2)" = "go$(sed -n 's/^go \([0-9]*\.[0-9]*\).*/\1/p' go.mod)" | |
| 29 | + | - run: test -z "$(gofmt -l spa pipewire integration internal/core internal/ports)" | |
| 30 | + | - run: CGO_ENABLED=0 go vet ./... | |
| 31 | + | - run: CGO_ENABLED=0 go vet -tags integration ./integration/ | |
| 32 | + | - run: go run honnef.co/go/tools/cmd/staticcheck@2026.2.2 ./... | |
| 33 | + | - run: CGO_ENABLED=0 go test -count=1 ./... | |
| 34 | + | - run: CGO_ENABLED=1 go test -race -count=1 ./... | |
| 35 | + | - name: generated code is current | |
| 36 | + | run: | | |
| 37 | + | go install github.com/vektra/mockery/v3@v3.8.1 | |
| 38 | + | PATH="$HOME/go/bin:$PATH" GOWORK=off go generate ./... | |
| 39 | + | git diff --exit-code | |
| @@ -0,0 +1,39 @@ | |||||
| 1 | + | name: CI | |||
| 2 | + | on: | |||
| 3 | + | push: | |||
| 4 | + | branches: [main] | |||
| 5 | + | pull_request: | |||
| 6 | + | permissions: | |||
| 7 | + | contents: read | |||
| 8 | + | concurrency: | |||
| 9 | + | group: ci-${{ github.ref }} | |||
| 10 | + | cancel-in-progress: true | |||
| 11 | + | jobs: | |||
| 12 | + | # Runs as root in an Arch container, on Forgejo and GitHub alike. Arch | |||
| 13 | + | # ships the libpipewire the bindings are generated against; gcc is for the | |||
| 14 | + | # race detector. The integration tests need a running PipeWire and are run | |||
| 15 | + | # by hand (go test -tags integration ./integration/). | |||
| 16 | + | check: | |||
| 17 | + | runs-on: ubuntu-latest | |||
| 18 | + | container: | |||
| 19 | + | image: archlinux:latest | |||
| 20 | + | options: --init | |||
| 21 | + | steps: | |||
| 22 | + | - run: pacman -Syu --noconfirm --needed git go gcc pipewire | |||
| 23 | + | - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |||
| 24 | + | with: | |||
| 25 | + | persist-credentials: false | |||
| 26 | + | - run: | | |||
| 27 | + | git config --global --add safe.directory "$GITHUB_WORKSPACE" | |||
| 28 | + | test "$(go env GOVERSION | cut -d. -f1-2)" = "go$(sed -n 's/^go \([0-9]*\.[0-9]*\).*/\1/p' go.mod)" | |||
| 29 | + | - run: test -z "$(gofmt -l spa pipewire integration internal/core internal/ports)" | |||
| 30 | + | - run: CGO_ENABLED=0 go vet ./... | |||
| 31 | + | - run: CGO_ENABLED=0 go vet -tags integration ./integration/ | |||
| 32 | + | - run: go run honnef.co/go/tools/cmd/staticcheck@2026.2.2 ./... | |||
| 33 | + | - run: CGO_ENABLED=0 go test -count=1 ./... | |||
| 34 | + | - run: CGO_ENABLED=1 go test -race -count=1 ./... | |||
| 35 | + | - name: generated code is current | |||
| 36 | + | run: | | |||
| 37 | + | go install github.com/vektra/mockery/v3@v3.8.1 | |||
| 38 | + | PATH="$HOME/go/bin:$PATH" GOWORK=off go generate ./... | |||
| 39 | + | git diff --exit-code | |||
M .github/workflows/dependabot-auto-merge.yml +2 -1
| @@ -4,7 +4,8 @@ on: pull_request | |||
| 4 | 4 | ||
| 5 | 5 | jobs: | |
| 6 | 6 | auto-merge: | |
| 7 | - | if: github.event.pull_request.user.login == 'dependabot[bot]' | |
| 7 | + | # Dependabot runs on GitHub only; the reusable workflow is not on Forgejo. | |
| 8 | + | if: github.server_url == 'https://github.com' && github.event.pull_request.user.login == 'dependabot[bot]' | |
| 8 | 9 | permissions: | |
| 9 | 10 | contents: write | |
| 10 | 11 | pull-requests: write | |
| @@ -4,7 +4,8 @@ on: pull_request | |||||
| 4 | 4 | ||||
| 5 | jobs: | 5 | jobs: | ||
| 6 | auto-merge: | 6 | auto-merge: | ||
| 7 | - | if: github.event.pull_request.user.login == 'dependabot[bot]' | 7 | + | # Dependabot runs on GitHub only; the reusable workflow is not on Forgejo. |
| 8 | + | if: github.server_url == 'https://github.com' && github.event.pull_request.user.login == 'dependabot[bot]' | |||
| 8 | permissions: | 9 | permissions: | ||
| 9 | contents: write | 10 | contents: write | ||
| 10 | pull-requests: write | 11 | pull-requests: write | ||