This document describes the release process for DedPaste, including our implementation of GitHub's Immutable Releases feature for enhanced supply chain security.
DedPaste uses an automated release workflow that creates immutable, cryptographically attested releases. This ensures that all release artifacts are tamper-proof and verifiable.
When a pull request is merged to the main branch:
-
Auto Version Bump workflow analyzes the PR:
- Checks PR labels (
major,minor,patch) - Analyzes commit messages for conventional commit patterns
- Determines the appropriate version bump
- Checks PR labels (
-
Conventional commit patterns:
feat:orfeat(scope):→ Minor version bumpfix:orfix(scope):→ Patch version bumpBREAKING CHANGE:orfeat!:→ Major version bump
-
Updates
package.jsonwith the new version -
Triggers the release workflow
The Release with SBOM and Notes workflow:
-
Builds the project
- Compiles TypeScript files
- Runs tests
- Generates build artifacts
-
Generates SBOM
- Creates a Software Bill of Materials (SBOM) in CycloneDX format
- Documents all dependencies and their versions
-
Creates release notes
- Lists all commits since the last release
- Links to relevant pull requests
- Includes SBOM information
- Adds verification instructions
-
Publishes the release
- Creates a GitHub release with the tag
vX.Y.Z - Attaches the SBOM file
- Includes detailed release notes
- Creates a GitHub release with the tag
-
Generates build provenance attestations 🔐
- Creates cryptographic attestations for all release artifacts
- Signs attestations using GitHub's Sigstore integration
- Ensures artifacts are immutable and verifiable
-
Publishes to NPM
- Publishes the package with provenance
- Uses OIDC Trusted Publishers for secure authentication
Immutable releases are a security feature that makes release artifacts tamper-proof:
- Immutable assets: Once published, release artifacts cannot be modified, added, or deleted
- Protected tags: Git tags are locked to specific commits and cannot be moved
- Cryptographic attestations: Each release includes signed build provenance attestations
- Verifiable provenance: Anyone can verify that artifacts were built by the official workflow
Our release workflow automatically:
-
Generates build provenance attestations for:
- SBOM file (
bom.json) - Build artifacts (
dist/*)
- SBOM file (
-
Signs attestations using GitHub's Sigstore integration
- Uses the GitHub Actions OIDC token
- Creates tamper-evident signatures
- Links artifacts to specific workflow runs and commits
-
Publishes releases with attestations
- Release immutability is enabled in this repository (Settings → Code and automation → Releases)
- All releases are immutable: artifacts cannot be modified after publication
- Tags cannot be moved or deleted
Anyone can verify the authenticity and integrity of our releases using the GitHub CLI:
# Install GitHub CLI if needed
# See: https://cli.github.com/
# Verify the SBOM file
gh attestation verify bom.json --owner anoncam --repo dedpaste
# Verify build artifacts
gh attestation verify <artifact-path> --owner anoncam --repo dedpaste
# Download and verify a release artifact
gh release download v1.24.0 --pattern "bom.json" --repo anoncam/dedpaste
gh attestation verify bom.json --owner anoncam --repo dedpasteVerification confirms:
- ✅ Artifact was built by the official GitHub Actions workflow
- ✅ Artifact has not been tampered with since publication
- ✅ Artifact is linked to specific commits and workflow runs
- ✅ Build process is traceable and transparent
-
Supply Chain Security
- Prevents tampering with release artifacts
- Protects against malicious code injection
- Ensures artifacts match the source code
-
Transparency
- Complete build provenance tracking
- Verifiable connection between code and artifacts
- Audit trail for all releases
-
Trust
- Users can verify authenticity of downloads
- Cryptographic proof of origin
- Compliance with security best practices
If needed, maintainers can trigger a release manually:
- Go to the Actions tab
- Select "Release with SBOM and Notes" workflow
- Click "Run workflow"
- Optionally specify a version to force release
If a release already exists for a version, the workflow will skip creating a duplicate. Check:
- Existing releases: https://github.com/anoncam/dedpaste/releases
- Workflow logs in the Actions tab
If attestation generation fails:
- Check that
id-token: writeandattestations: writepermissions are set - Verify the workflow is running on a public repository
- Check GitHub Actions logs for detailed error messages
If NPM publishing fails:
- Verify the version doesn't already exist on NPM
- Check that OIDC Trusted Publishers are configured correctly
- Review npm provenance documentation
- Never manually modify releases: All releases should be created by the automated workflow
- Verify downloads: Always verify release artifacts using
gh attestation verify - Report issues: If you find any security concerns, please report them responsibly