mirror of
https://github.com/Twigpine/zero.git
synced 2026-11-10 17:57:54 -10:00
* fix pinned Go quality toolchain * fix(make): use a POSIX GOTOOLCHAIN prefix for pinned tool targets The Windows_NT branch used cmd.exe syntax (set "..." &&), but GNU Make runs recipes through sh even on Windows (MSYS/Git Bash), where that form fails and breaks make lint-static/deadcode/vulncheck. A plain GOTOOLCHAIN=... prefix works everywhere, so the OS check is gone. Also switch GO_VERSION/GO_TOOLCHAIN to recursive expansion so 'go list -m' only runs when a tool target actually needs it, instead of at parse time for every target. Addresses PR review from CodeRabbit and Copilot. Co-Authored-By: Claude Fable 5 <[email protected]> * fix(build): make pinned-tool targets shell-neutral, fix README drift Address code review on PR #689: - lint-static/deadcode/vulncheck previously set GOTOOLCHAIN via a POSIX `VAR=value cmd` recipe prefix. GNU Make on Windows runs recipes through whatever SHELL is configured, and under a native cmd.exe setup that syntax is invalid — cmd.exe treats the whole "GOTOOLCHAIN=go1.26.5" token as the program to run and fails before go ever executes (reproduced locally: cmd.exe errors with "'MYVAR' is not recognized..." for the equivalent pattern). Switched to a target-specific `export`, which sets the variable in the child process environment via Make itself, before is invoked — works under sh, cmd.exe, and PowerShell alike (verified against all three targets with SHELL := cmd.exe). - README.md's Code Quality and Security Checks section still told contributors to run the raw `go run ...@version` commands this PR identifies as selecting the wrong (older) toolchain and failing to load this Go 1.26.5 module — only CI and AGENTS.md had been updated to the new make targets. Points steps 3-4 at `make lint-static` / `make vulncheck` instead, matching AGENTS.md. Verified end-to-end: `make vulncheck`, `make deadcode`, and `make lint-static` all run successfully and reach their tools (deadcode's advisory report and lint-static's 35 pre-existing findings match the PR's documented baseline). Co-Authored-By: Claude Sonnet 5 <[email protected]> * fix(build): support stock macOS make --------- Co-authored-by: Claude Fable 5 <[email protected]>
155 lines
4.4 KiB
YAML
155 lines
4.4 KiB
YAML
name: CI
|
|
|
|
on:
|
|
pull_request:
|
|
push:
|
|
branches:
|
|
- main
|
|
|
|
jobs:
|
|
smoke:
|
|
name: Smoke (${{ matrix.os }})
|
|
runs-on: ${{ matrix.os }}
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
os:
|
|
- ubuntu-latest
|
|
- macos-latest
|
|
- windows-latest
|
|
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
|
|
with:
|
|
persist-credentials: false
|
|
|
|
- name: Setup Go
|
|
uses: actions/setup-go@40f1582b2485089dde7abd97c1529aa768e1baff
|
|
with:
|
|
go-version-file: go.mod
|
|
cache: true
|
|
|
|
- name: Install Make on Windows
|
|
if: matrix.os == 'windows-latest'
|
|
shell: pwsh
|
|
run: choco install make --no-progress -y
|
|
|
|
- name: Validate quality targets with stock macOS Make
|
|
if: matrix.os == 'macos-latest'
|
|
env:
|
|
GIT_CONFIG_COUNT: 1
|
|
GIT_CONFIG_KEY_0: grep.patternType
|
|
GIT_CONFIG_VALUE_0: fixed
|
|
run: make -n vulncheck
|
|
|
|
- name: Check vulnerabilities through native Windows Make
|
|
if: matrix.os == 'windows-latest'
|
|
shell: cmd
|
|
run: make vulncheck
|
|
|
|
- name: Check dead code through native Windows Make
|
|
if: matrix.os == 'windows-latest'
|
|
continue-on-error: true
|
|
shell: cmd
|
|
run: make deadcode
|
|
|
|
- name: Run static lint through native Windows Make
|
|
if: matrix.os == 'windows-latest'
|
|
continue-on-error: true
|
|
shell: cmd
|
|
run: make lint-static
|
|
|
|
- name: Check formatting
|
|
if: matrix.os == 'ubuntu-latest'
|
|
shell: bash
|
|
run: |
|
|
unformatted="$(gofmt -l .)"
|
|
if [ -n "$unformatted" ]; then
|
|
echo "gofmt needed on:" >&2
|
|
echo "$unformatted" >&2
|
|
exit 1
|
|
fi
|
|
|
|
- name: Vet
|
|
if: matrix.os == 'ubuntu-latest'
|
|
run: go vet ./...
|
|
|
|
- name: Test
|
|
run: go test ./...
|
|
|
|
- name: Build binary
|
|
run: go run ./cmd/zero-release build
|
|
|
|
- name: Smoke binary
|
|
run: go run ./cmd/zero-release smoke
|
|
|
|
performance:
|
|
name: Performance Smoke
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
|
|
with:
|
|
persist-credentials: false
|
|
|
|
- name: Setup Go
|
|
uses: actions/setup-go@40f1582b2485089dde7abd97c1529aa768e1baff
|
|
with:
|
|
go-version-file: go.mod
|
|
cache: true
|
|
|
|
- name: Build binary
|
|
run: go run ./cmd/zero-release build
|
|
|
|
- name: Performance smoke
|
|
run: go run ./cmd/zero-perf-bench --output dist/perf/perf-bench.json --ci
|
|
|
|
- name: Upload performance report
|
|
if: always()
|
|
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
|
|
with:
|
|
name: zero-performance-smoke
|
|
path: dist/perf/perf-bench.json
|
|
if-no-files-found: warn
|
|
|
|
security:
|
|
name: Security & code health
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
|
|
with:
|
|
persist-credentials: false
|
|
|
|
- name: Setup Go
|
|
uses: actions/setup-go@40f1582b2485089dde7abd97c1529aa768e1baff
|
|
with:
|
|
go-version-file: go.mod
|
|
cache: true
|
|
|
|
# Hard gate: fails the build when code reaches a known vulnerability. A stdlib
|
|
# CVE is cleared by a toolchain bump (see go.mod). May also flag a newly
|
|
# published advisory on an unrelated PR — intentional: do not ship known vulns.
|
|
- name: govulncheck
|
|
run: make vulncheck
|
|
|
|
# Advisory: reports functions unreachable from any cmd/* main so dormant
|
|
# code is visible in CI. Non-blocking while the dormant subsystems are
|
|
# still being wired or removed.
|
|
- name: deadcode (advisory)
|
|
continue-on-error: true
|
|
run: make deadcode
|
|
|
|
# Advisory: catches what deadcode's whole-program reachability analysis
|
|
# doesn't, unused private functions/assignments reachable within a
|
|
# package but never actually called, plus staticcheck-style correctness
|
|
# and readability issues. Scoped to a few linters rather than the full
|
|
# default battery, and non-blocking, while the existing findings across
|
|
# the repo are cleaned up incrementally (see #527).
|
|
- name: golangci-lint (advisory)
|
|
continue-on-error: true
|
|
run: make lint-static
|