You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
headlesslab/.github: SECURITY.md and the satellites' reusable workflow #37
Spec: #33 (Baseline release). Section numbers refer to its Implementation Decisions.
What to build
The organisation's community repository exists, so every headlesslab repository without its own policy shows one SECURITY.md, and the five Satellite modules can each run CI by calling one reusable workflow. Spec section 16; ticket #31.
Acceptance criteria
Repository headlesslab/.github with SECURITY.md: supported = the latest Milestone release and its release candidate; fixes ship as patch releases; reports through GitHub private vulnerability reporting; advisories published as GHSA with a CVE requested; acknowledgement within 7 days; no bounty. It appears as the default security policy on a repository without its own.
A reusable workflow_call workflow: build and test with -race on Go 1.21.x and stable on ubuntu-latest; an input adds windows-latest and macos-latest; vet; golangci-lint at a pinned version with upstream rod's configuration (caller-provided or defaulted); govulncheck on the stable job; a coverage ratchet with a threshold input that fails below it; GOTOOLCHAIN=local; every action SHA-pinned; permissions: contents: read.
A documented Dependabot template for satellites: github-actions weekly, gomod security updates only.
Smoke test: a tiny Go module inside the repository calls the workflow on push and is green.
SECURITY.md: supported = the latest Milestone release and its release candidate (stated for wand; for the other modules, their latest release), fixes as patch releases, reports through GitHub private vulnerability reporting, advisories as GHSA with a CVE requested, acknowledgement within 7 days, no bounty. Verified as the default policy: https://github.com/headlesslab/wand/security/policy renders it although wand has no SECURITY.md.
Reusable workflow.github/workflows/go.yml (workflow_call): test on ubuntu-latest at the module's Go floor (read from go.mod via setup-go's go-version-file, so go 1.21 ran on go1.21.13) and at stable (go1.27.1); input cross-platform: true adds windows-latest and macos-latest at stable; go build, go vet, go test -race -count=1 -covermode=atomic; lint with golangci-lint v2.13.2 through its official action, using the module's own .golangci.* when present and otherwise the default configuration checked out from this repository at the caller's pinned commit (job.workflow_repository / job.workflow_sha, guarded so an empty value fails the job); govulncheck ./... with x/vuln v1.7.0 on the stable job; coverage ratchet on the ubuntu/stable cell, input coverage-threshold (required number), fails below it; GOTOOLCHAIN=local workflow-wide; permissions: contents: read; persist-credentials: false; every action pinned to a full commit SHA with a version comment (checkout v7.0.1, setup-go v7.0.0, golangci-lint-action v9.3.0).
Dependabot template: documented in the README (github-actions weekly; gomod with open-pull-requests-limit: 0, i.e. security updates only; the security-update switch itself is a repository setting for Repository settings script applied to wand and the satellites #57's script). The repository's own .github/dependabot.yml is the same file pointed at /smoke.
Smoke test: smoke/ (one function, 100 % coverage) calls the workflow on every push and pull request with working-directory: smoke, coverage-threshold: 100, cross-platform: true; all six jobs green (ubuntu floor/stable, windows stable, macos stable, lint, govulncheck).
Decisions worth knowing
golangci-lint v2, not v1. Upstream's .golangci.yml is v1-schema and v1 is unmaintained and does not read Go 1.25+ export data. The default .golangci.yml is upstream's file run through golangci-lint migrate at v2.13.2 with three commented hand edits (run.relative-path-mode: wd to keep v1 path semantics; wsl/wsl_v5 both disabled as upstream disabled wsl; deprecated gomodguard disabled in favour of gomodguard_v2). default: all means linters added since upstream froze are on; a satellite that needs relief commits its own .golangci.yml. wand's own .golangci.yml is still v1 and is wand's CI ticket's concern.
Windows and macOS run stable only, matching wand's Tier 1 layout (spec §13); the floor is exercised on ubuntu-latest.
Callers pin uses: headlesslab/.github/.github/workflows/go.yml@<sha> # main; Dependabot's github-actions updater moves a SHA pinned to a branch commit to that branch's head (dependabot-core latest_commit_for_pinned_ref). Resulting check names for rulesets: go / test (ubuntu-latest, floor), go / test (ubuntu-latest, stable), go / lint, go / govulncheck (+ the two stable cells with cross-platform).
Activity
Fly-Playgroud commentedon Sep 5, 2026
Resolution. Repository headlesslab/.github exists (public,
mainat 0b6cd15, five commits), and the smoke run is green: https://github.com/headlesslab/.github/actions/runs/33978217343.Acceptance criteria
SECURITY.md: supported = the latest Milestone release and its release candidate (stated for wand; for the other modules, their latest release), fixes as patch releases, reports through GitHub private vulnerability reporting, advisories as GHSA with a CVE requested, acknowledgement within 7 days, no bounty. Verified as the default policy: https://github.com/headlesslab/wand/security/policy renders it although wand has noSECURITY.md..github/workflows/go.yml(workflow_call):testonubuntu-latestat the module's Go floor (read fromgo.modvia setup-go'sgo-version-file, sogo 1.21ran on go1.21.13) and at stable (go1.27.1); inputcross-platform: trueaddswindows-latestandmacos-latestat stable;go build,go vet,go test -race -count=1 -covermode=atomic;lintwith golangci-lint v2.13.2 through its official action, using the module's own.golangci.*when present and otherwise the default configuration checked out from this repository at the caller's pinned commit (job.workflow_repository/job.workflow_sha, guarded so an empty value fails the job);govulncheck ./...with x/vuln v1.7.0 on the stable job; coverage ratchet on the ubuntu/stable cell, inputcoverage-threshold(required number), fails below it;GOTOOLCHAIN=localworkflow-wide;permissions: contents: read;persist-credentials: false; every action pinned to a full commit SHA with a version comment (checkout v7.0.1, setup-go v7.0.0, golangci-lint-action v9.3.0).github-actionsweekly;gomodwithopen-pull-requests-limit: 0, i.e. security updates only; the security-update switch itself is a repository setting for Repository settings script applied to wand and the satellites #57's script). The repository's own.github/dependabot.ymlis the same file pointed at/smoke.smoke/(one function, 100 % coverage) calls the workflow on every push and pull request withworking-directory: smoke,coverage-threshold: 100,cross-platform: true; all six jobs green (ubuntu floor/stable, windows stable, macos stable, lint, govulncheck).Decisions worth knowing
.golangci.ymlis v1-schema and v1 is unmaintained and does not read Go 1.25+ export data. The default.golangci.ymlis upstream's file run throughgolangci-lint migrateat v2.13.2 with three commented hand edits (run.relative-path-mode: wdto keep v1 path semantics;wsl/wsl_v5both disabled as upstream disabledwsl; deprecatedgomodguarddisabled in favour ofgomodguard_v2).default: allmeans linters added since upstream froze are on; a satellite that needs relief commits its own.golangci.yml. wand's own.golangci.ymlis still v1 and is wand's CI ticket's concern.ubuntu-latest.uses: headlesslab/.github/.github/workflows/go.yml@<sha> # main; Dependabot's github-actions updater moves a SHA pinned to a branch commit to that branch's head (dependabot-corelatest_commit_for_pinned_ref). Resulting check names for rulesets:go / test (ubuntu-latest, floor),go / test (ubuntu-latest, stable),go / lint,go / govulncheck(+ the two stable cells withcross-platform)..githubrepository's own settings (rulesets, Dependabot security updates, SHA-pin policy) wait for Repository settings script applied to wand and the satellites #57's script; the satellites' callers are written by Four snapshot satellites: eventbus, lazyjson, seqdiff, leakcheck #38 and fetch satellite: generic archive fetcher with its own suite #39.Fly-Playgroud commentedon Sep 5, 2026
Resolved above; repository, workflow, template and green smoke run are linked in the resolution comment.