Skip to content

feat: --format sarif, and ship linux/arm64 binaries - #4

Merged
calionauta merged 2 commits into
mainfrom
feat/sarif-output
Oct 25, 2026
Merged

calionauta merged 2 commits into
mainfrom
feat/sarif-output

Conversation

@calionauta

Copy link
Copy Markdown
Owner

SARIF is what GitHub code scanning reads: with --format sarif the findings become PR annotations and Security-tab alerts instead of lines in a CI log — the way a linter reaches a team that never opens the log. The rule id is the diagnostic code (the stable contract), severity maps to SARIF's error/warning/note, and the location carries file, line and column, with the suggestion folded into the message.

Also removes the linux/arm64 ignore from goreleaser: the updater already derives the asset name from GOOS/GOARCH, so the only thing missing was the build. linux/arm64 users had no binary and no update path.

  • output is deterministic (rules sorted by id) and results is [], never null
  • tests parse the emitted document instead of matching substrings: envelope, tool descriptor, one result per finding with the right level, location and suggestion
  • no behaviour change to the default text output

deploy added 2 commits October 25, 2026 18:29
Releases were manual: bump the version constant, edit CHANGELOG.md, tag, run
goreleaser. The v0.13.2 incident (shipped with a stale version constant, fixed by
TestFallbackVersionTracksChangelog) is the shape of that risk; this removes the
manual steps instead of only detecting them.

- release-please (config + manifest + workflow): conventional commits on the
  default branch keep one open release PR; merging it bumps the annotated version
  constant, generates the changelog entry, tags, and creates the release
- release.yml builds the binaries; release-please DISPATCHES it because a tag
  created by the workflow token does not trigger the tag-push event
  (anti-recursion) - the same trap that shipped eight gogogo releases without
  assets before the bridge was added
- the manual tag path stays as an escape hatch, and goreleaser check keeps
  running in CI

Generated changelog entries will use release-please's header style from here on;
older entries (Keep a Changelog, hand-written) stay as they are.
SARIF is what GitHub code scanning reads: with `--format sarif` the findings
become PR annotations and Security-tab alerts instead of lines in a CI log, which
is how a linter reaches a team that never opens the log. The rule id is the
diagnostic code (the stable contract), severity maps to SARIF's
error/warning/note, and the location carries file, line and column, plus the
suggestion in the message.

Also removes the goreleaser ignore for linux/arm64: the updater already derives
the asset name from GOOS/GOARCH, so the only thing that was missing was the build.

- output is deterministic (rules sorted by id) and `results` is `[]`, never null
- tests parse the emitted document instead of matching substrings: envelope,
  tool descriptor, one result per finding with the right level, location and
  suggestion
@calionauta
calionauta merged commit 5a61d7b into main Oct 25, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant