Skip to content

Commit c163915

Browse files
author
Brad Kinnard
committed
ci: attest build provenance on tagged releases
Adds an actions/attest-build-provenance step to the package job that fires on refs/tags/v* pushes. The attestation lets consumers verify the shipped wheel/sdist came from this repo's CI before installing (gh attestation verify ...). PR and main-branch builds remain un-attested to keep the project's attestation feed scoped to actual releases. The README's new Releases section documents the verification command.
1 parent 6239b48 commit c163915

3 files changed

Lines changed: 29 additions & 0 deletions

File tree

.github/workflows/ci.yml

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,13 @@ jobs:
4949

5050
package:
5151
runs-on: ubuntu-latest
52+
# Attestation steps below need to issue an OIDC token and write the
53+
# attestation; both default to off in the workflow-level permissions
54+
# block. Job-scoped overrides keep the rest of the workflow read-only.
55+
permissions:
56+
contents: read
57+
id-token: write
58+
attestations: write
5259
steps:
5360
- uses: actions/checkout@v4
5461

@@ -67,3 +74,14 @@ jobs:
6774
run: |
6875
pip install dist/skillcheck-*.whl
6976
skillcheck --version
77+
78+
- name: Attest build provenance
79+
# Only attest tagged releases. Attestations on every CI run would
80+
# flood the project's attestation feed and are not signed against
81+
# an intended release artifact.
82+
if: startsWith(github.ref, 'refs/tags/v')
83+
uses: actions/attest-build-provenance@v1
84+
with:
85+
subject-path: |
86+
dist/skillcheck-*.whl
87+
dist/skillcheck-*.tar.gz

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
2020

2121
### Added
2222

23+
- Build provenance attestations on tagged releases. The CI `package` job now invokes `actions/attest-build-provenance@v1` against the built wheel and sdist when the ref starts with `refs/tags/v`. Consumers can verify with `gh attestation verify dist/skillcheck-*.whl --owner moonrunnerkc` before installing. Documented in the README's new `## Releases` section.
2324
- `.github/workflows/release-notes.yml`: when a GitHub Release is published, the workflow inspects `CHANGELOG.md`'s `[Unreleased]` block and, if it has un-promoted content for the tag, opens a PR against `main` that moves the block under a `[<tag>] - <today>` heading. No-op when `[Unreleased]` is empty or when the developer already promoted by hand.
2425
- `tests/test_agent_prompts_smoke.py`: snapshot tests that pin SHA-256 digests of each rendered prompt (six combinations: critique/graph x claude/codex/cursor) against `tests/fixtures/valid_basic.md`. Catches accidental edits to prompt scaffolding without requiring an oracle for prompt quality.
2526
- Published JSON Schema (Draft 2020-12) files for the agent IO contracts: `src/skillcheck/schemas/critique-v1.json` and `src/skillcheck/schemas/graph-v1.json`. Both ship with the wheel. `skillcheck.agents.SCHEMAS` maps `"critique-v1"` and `"graph-v1"` to the on-disk paths so callers can validate agent responses before invoking `--ingest-critique` or `--ingest-graph`. The schemas mirror the parser-enforced required fields, severity enum, kind enums, and score ranges; `test_published_schemas.py` guards drift between the schema files and the parsers.

README.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,16 @@ Defaults live in a `skillcheck.toml` discovered upward from the validated path.
115115
- [`docs/case-study-silent-skill-failure.md`](docs/case-study-silent-skill-failure.md): VS Code dirname-mismatch incident.
116116
- [`skills/skillcheck/SKILL.md`](skills/skillcheck/SKILL.md): a SKILL.md that passes every rule.
117117

118+
## Releases
119+
120+
Tagged releases (`v*`) carry a SLSA build provenance attestation issued by `actions/attest-build-provenance@v1`. To verify a release artifact before installing:
121+
122+
```bash
123+
gh attestation verify dist/skillcheck-*.whl --owner moonrunnerkc
124+
```
125+
126+
This confirms the wheel was built by `moonrunnerkc/skillcheck` CI from the source at the tagged commit. Untagged builds (PR and main-branch CI) are not attested.
127+
118128
## License
119129

120130
MIT. See [`LICENSE`](LICENSE).

0 commit comments

Comments
 (0)