Release Workflow Documentation
February 18, 2026 ยท View on GitHub
This document describes the automated release workflow for the Hack23 homepage.
Overview
The release workflow implements a comprehensive CI/CD pipeline with:
- ๐ Supply Chain Security: SLSA Build Level 3 attestations
- ๐ฆ SBOM: Software Bill of Materials generation
- ๐ Documentation as Code: Automated report generation
- ๐ Dual Deployment: GitHub Pages + S3/CloudFront
- โ Quality Assurance: Automated validation and audits
Workflow Structure
1. Prepare Job
Purpose: Generate documentation and prepare release artifacts
Actions:
- Extract version from git tag or workflow input
- Generate HTML validation reports
- Run Lighthouse audits (performance, accessibility, SEO)
- Create accessibility compliance reports (WCAG 2.1 AA)
- Generate security report summaries
- Commit all documentation to
docs/directory
Documentation Generated:
docs/html-validation.txt- HTML validation resultsdocs/lighthouse-*.html- Lighthouse audit reportsdocs/accessibility-report.html- WCAG 2.1 AA compliancedocs/security-report.html- Security scan summarydocs/RELEASE_SUMMARY.md- Release metadatadocs/version.txt- Version and timestamp
2. Build Job
Purpose: Create release package with supply chain security attestations
Actions:
- Minify HTML, CSS, and JavaScript
- Create ZIP archive of website
- Generate SBOM in SPDX format
- Create build provenance attestation
- Create SBOM attestation
- Upload all artifacts
Artifacts Created:
homepage-vX.Y.Z.zip- Complete website packagehomepage-vX.Y.Z.spdx.json- Software Bill of Materialshomepage-vX.Y.Z.zip.intoto.jsonl- Build provenance attestationhomepage-vX.Y.Z.spdx.json.intoto.jsonl- SBOM attestation
3. Release Job
Purpose: Publish release and deploy to production
Actions:
- Download all artifacts
- Generate release notes with release-drafter
- Create GitHub Release with all artifacts
- Deploy to GitHub Pages (backup)
- Create deployment summary
Deployment Targets:
- GitHub Pages:
https://hack23.github.io/homepage/(automated backup) - S3/CloudFront:
https://hack23.com(via main.yml workflow on master)
Triggering a Release
Method 1: Create and Push a Tag
# Create a tag
git tag v1.0.0
# Push the tag to trigger release
git push origin v1.0.0
Method 2: Manual Workflow Dispatch
- Go to Actions tab in GitHub
- Select "Build, Attest and Release" workflow
- Click "Run workflow"
- Enter version (e.g.,
v1.0.0) - Select if pre-release
- Click "Run workflow"
Versioning Strategy
Follow Semantic Versioning (SemVer):
- Major (vX.0.0): Breaking changes, major redesigns
- Minor (v1.X.0): New features, new pages, significant enhancements
- Patch (v1.0.X): Bug fixes, typo corrections, minor updates
Examples:
v1.0.0- Initial releasev1.1.0- Add new blog post or service pagev1.1.1- Fix typo or broken linkv2.0.0- Complete redesign
Supply Chain Security
Verifying Release Artifacts
# Install GitHub CLI if not already installed
# https://cli.github.com/
# Verify the build provenance attestation
gh attestation verify homepage-v1.0.0.zip --owner Hack23
# View the SBOM
gh release download v1.0.0 -R Hack23/homepage -p "*.spdx.json"
cat homepage-v1.0.0.spdx.json | jq
SLSA Build Level 3
The release workflow achieves SLSA Build Level 3 by:
- โ Build as Code: Workflow defined in version control
- โ Provenance: Cryptographic attestation of build process
- โ Isolation: Jobs run in isolated environments
- โ Parameterless: Build is reproducible from source
- โ Ephemeral: Build environment is ephemeral
- โ Non-falsifiable: Uses GitHub's OIDC for signing
Documentation as Code
All documentation is automatically generated and committed to the repository:
docs/
โโโ index.html # Documentation viewer
โโโ README.md # Documentation overview
โโโ WORKFLOW_DOCUMENTATION.md # This file
โโโ VERSION.txt # Current version
โโโ version.txt # Release metadata
โโโ html-validation.txt # HTML validation results
โโโ lighthouse-*.html # Lighthouse reports
โโโ lighthouse-*.json # Lighthouse data
โโโ accessibility-report.html # WCAG 2.1 AA compliance
โโโ security-report.html # Security summary
โโโ RELEASE_SUMMARY.md # Release overview
Workflow Permissions
The workflow follows the principle of least privilege:
# Top-level: read-only by default
permissions: read-all
# Prepare job: write to commit docs
permissions:
contents: write
# Build job: attestation generation
permissions:
contents: read
id-token: write
attestations: write
# Release job: create releases
permissions:
contents: write
id-token: write
Security Features
- Step Security Harden Runner: Audits egress traffic
- Pinned Action Versions: SHA-pinned for supply chain security
- Minimal Permissions: Principle of least privilege
- SBOM Generation: Complete dependency inventory
- Attestations: Cryptographic proof of build process
- Code Scanning: Automated vulnerability detection
Integration with Existing Workflows
The release workflow complements the existing main.yml workflow:
-
main.yml: Continuous deployment on every push to master
- Deploys to S3/CloudFront
- Runs Lighthouse audits
- Performs security scans (OWASP ZAP)
-
release.yml: Versioned releases with attestations
- Creates tagged releases
- Generates SBOM and attestations
- Commits documentation
- Deploys to GitHub Pages
Troubleshooting
Release Workflow Fails
- Check workflow run logs in Actions tab
- Verify tag format matches
v*pattern - Ensure GITHUB_TOKEN has necessary permissions
- Check artifact upload/download steps
Documentation Not Generated
- Verify npm packages are installed correctly
- Check HTML validation step logs
- Ensure docs/ directory is not in .gitignore
Attestation Generation Fails
- Verify
id-token: writepermission is set - Check GitHub's OIDC configuration
- Ensure artifact exists before attestation
Best Practices
- Always test in a feature branch first
- Use pre-release tags for testing (e.g.,
v1.0.0-beta.1) - Review generated documentation before final release
- Verify attestations after release
- Update CHANGELOG.md for major releases
Example Release Process
# 1. Prepare for release
git checkout master
git pull origin master
# 2. Test the release workflow with a pre-release tag
git tag v1.0.0-rc.1
git push origin v1.0.0-rc.1
# 3. Verify the release in GitHub
# - Check Actions tab for workflow success
# - Review generated documentation in docs/
# - Verify attestations
# 4. Create final release
git tag v1.0.0
git push origin v1.0.0
# 5. Verify deployment
# - Check https://hack23.github.io/homepage/
# - Check https://hack23.com (after main.yml runs)
References
Support
For issues or questions:
- Open an issue in the repository
- Review workflow logs in Actions tab
- Consult the main README.md