5d8057473b
The gofmt gate listed packages by hand and missed pack, zim, and viewer, so a formatting slip in the newer code would sail through. Check the whole module instead. Add a macOS job that compiles the -tags webview viewer, the cgo path the pure-Go CI never builds; the viewer code is identical across platforms, so one compile guards it. Also note the new base-OS detection in the docs.
122 lines
3.6 KiB
YAML
122 lines
3.6 KiB
YAML
name: ci
|
|
|
|
on:
|
|
push:
|
|
branches: [main]
|
|
pull_request:
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
# Cancel an in-flight run when a branch is pushed again.
|
|
concurrency:
|
|
group: ci-${{ github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
jobs:
|
|
# Build and test on Linux and macOS with the race detector on. gofmt and vet
|
|
# run here too so a formatting slip fails fast on both platforms. The full
|
|
# suite includes Chrome-driven end-to-end tests, so the runners install a
|
|
# browser first; tests that find none skip themselves, so the job still passes
|
|
# if a future runner image drops Chrome.
|
|
test:
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
os: [ubuntu-latest, macos-latest]
|
|
runs-on: ${{ matrix.os }}
|
|
steps:
|
|
- uses: actions/checkout@v5
|
|
- uses: actions/setup-go@v6
|
|
with:
|
|
go-version-file: go.mod
|
|
check-latest: true
|
|
cache: true
|
|
- name: install chromium (linux)
|
|
if: matrix.os == 'ubuntu-latest'
|
|
uses: browser-actions/setup-chrome@v1
|
|
id: chrome
|
|
- name: gofmt
|
|
run: |
|
|
unformatted=$(gofmt -s -l .)
|
|
if [ -n "$unformatted" ]; then
|
|
echo "These files need gofmt -s -w:"
|
|
echo "$unformatted"
|
|
exit 1
|
|
fi
|
|
- name: go vet
|
|
run: go vet ./...
|
|
- name: build
|
|
run: go build ./...
|
|
- name: test
|
|
env:
|
|
KAGE_CHROME: ${{ steps.chrome.outputs.chrome-path }}
|
|
run: go test -race -count=1 -coverprofile=coverage.out ./...
|
|
- name: coverage summary
|
|
if: matrix.os == 'ubuntu-latest'
|
|
run: go tool cover -func=coverage.out | tail -1
|
|
|
|
# golangci-lint bundles staticcheck, govet, ineffassign, errcheck, unused and
|
|
# more, so it is the main quality gate.
|
|
lint:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v5
|
|
- uses: actions/setup-go@v6
|
|
with:
|
|
go-version-file: go.mod
|
|
check-latest: true
|
|
cache: true
|
|
- uses: golangci/golangci-lint-action@v8
|
|
with:
|
|
version: latest
|
|
|
|
# Scan the module and its dependencies for known vulnerabilities.
|
|
govulncheck:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v5
|
|
- uses: actions/setup-go@v6
|
|
with:
|
|
go-version-file: go.mod
|
|
check-latest: true
|
|
cache: true
|
|
- name: govulncheck
|
|
run: |
|
|
go install golang.org/x/vuln/cmd/govulncheck@latest
|
|
govulncheck ./...
|
|
|
|
# Confirm go.mod and go.sum are tidy: a PR that adds an import without running
|
|
# go mod tidy fails here instead of breaking a later release.
|
|
tidy:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v5
|
|
- uses: actions/setup-go@v6
|
|
with:
|
|
go-version-file: go.mod
|
|
check-latest: true
|
|
cache: true
|
|
- name: go mod tidy is clean
|
|
run: |
|
|
go mod tidy
|
|
git diff --exit-code -- go.mod go.sum
|
|
|
|
# Compile the optional native-window viewer (-tags webview, cgo) so that path
|
|
# keeps building. The default CI build is pure Go and never touches it. The
|
|
# viewer code is the same Go on every OS, only the system WebView library
|
|
# differs, so a macOS compile (WebKit ships in the SDK) catches our
|
|
# regressions without the WebKitGTK version juggling Linux runners need. It is
|
|
# build-only: actually opening a window needs a display.
|
|
webview:
|
|
runs-on: macos-latest
|
|
steps:
|
|
- uses: actions/checkout@v5
|
|
- uses: actions/setup-go@v6
|
|
with:
|
|
go-version-file: go.mod
|
|
check-latest: true
|
|
cache: true
|
|
- name: build webview viewer
|
|
run: CGO_ENABLED=1 go build -tags webview ./cmd/kage
|