Skip to content

Commit 30ac696

Browse files
authored
docs: add release verification instructions to README (#75)
## Summary Adds a "Verifying releases" section to README documenting how to verify Docker image provenance attestations using the GitHub CLI (`gh attestation verify`), including verification by tag and by digest. Also documents signed git tag verification. Satisfies OSPS-DO-03.01 — project documentation must contain instructions to verify the integrity and authenticity of release assets. ## Test plan - [ ] `gh attestation verify oci://ghcr.io/paradoxbound/bookstack-mcp:2.6.0 --owner paradoxbound` succeeds - [ ] README renders correctly on GitHub 🤖 Generated with [Claude Code](https://claude.com/claude-code) Signed-off-by: Paradoxbound <paradoxbound@users.noreply.github.com> Co-authored-by: Paradoxbound <paradoxbound@users.noreply.github.com>
1 parent f17bc07 commit 30ac696

1 file changed

Lines changed: 34 additions & 0 deletions

File tree

README.md

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -335,6 +335,40 @@ Dependencies are declared in `packages/core/package.json` and `packages/stdio/pa
335335
- [OSV Scanner](https://github.com/google/osv-scanner) and [Trivy](https://github.com/aquasecurity/trivy) scan for known CVEs in both npm dependencies and the Docker image on every build
336336
- The Docker runtime image runs `apk upgrade --no-cache` at build time to apply the latest Alpine OS package patches regardless of the pinned base image digest
337337

338+
## Verifying releases
339+
340+
Every Docker image published to GHCR has a [SLSA Level 2 provenance attestation](https://slsa.dev/) generated by GitHub Actions. You can verify that an image was built from this repository's official pipeline using the GitHub CLI:
341+
342+
```bash
343+
gh attestation verify \
344+
oci://ghcr.io/paradoxbound/bookstack-mcp:2.6.0 \
345+
--owner paradoxbound
346+
```
347+
348+
A successful verification confirms:
349+
- The image was built by a GitHub Actions workflow in this repository
350+
- The exact source commit that produced it
351+
- It has not been tampered with after publication
352+
353+
To verify a specific digest rather than a tag:
354+
355+
```bash
356+
# Get the digest first
357+
docker pull ghcr.io/paradoxbound/bookstack-mcp:2.6.0
358+
docker inspect ghcr.io/paradoxbound/bookstack-mcp:2.6.0 --format '{{index .RepoDigests 0}}'
359+
360+
# Verify by digest
361+
gh attestation verify \
362+
oci://ghcr.io/paradoxbound/bookstack-mcp@sha256:<digest> \
363+
--owner paradoxbound
364+
```
365+
366+
Source releases are signed git tags — you can verify the tag signature with:
367+
368+
```bash
369+
git tag --verify v2.6.0
370+
```
371+
338372
## Contributing
339373

340374
See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines on making changes, running tests, and the DCO sign-off requirement.

0 commit comments

Comments
 (0)