Signed-off-by: nopeitsnothing <no@anonymousplanet.org>
5.5 KiB
Development
Overview
This repository now includes an automated workflow that handles PDF generation, verification, and distribution with the following features:
??? Note "How the pipeline works"
1. **Automatic PDF Generation** - Builds both light and dark mode PDFs from MkDocs source
2. **SHA256 Hash Generation** - Creates hash files for integrity verification
3. **GPG Signature Signing** - Signs all PDFs and hash files with repository GPG key
4. **VirusTotal Scanning** - Automatically scans PDFs and updates release notes
5. **Release Automation** - Packages everything into GitHub releases
Workflow Architecture
1. Build PDF Workflow (build-pdf.yml)
Trigger: Push to main, pull requests, or manual dispatch
??? Note "Steps"
- Checkout repository
- Set up Python 3.13 and MkDocs Material
- Install Chromium browser
- Generate both light and dark mode PDFs
- Create SHA256 hash files
- Sign all files with GPG
- Upload artifacts to GitHub Actions
- Publish release
2. VirusTotal Scan Workflow (vt-scan.yml)
Trigger: Push to main, tags, or manual dispatch (runs after build-pdf)
??? Note "Steps"
- Download PDF artifacts from build workflow
- Scan both PDFs with VirusTotal API
- Extract scan results and generate report links
- Update release notes with VT scan status and URLs
File Structure
After a successful build, the repository will contain:
.../
├── export/
│ ├── thgtoa.pdf # Light mode PDF
│ ├── thgtoa-dark.pdf # Dark mode PDF
│ ├── thgtoa.pdf.sig # GPG signature (light)
│ └── thgtoa-dark.pdf.sig # GPG signature (dark)
├── thgtoa.pdf.sha256 # Hash file (light)
├── thgtoa-dark.pdf.sha256 # Hash file (dark)
├── sha256sum-light.txt # Combined hash file
└── scripts/
├── build_guide_pdf.py # PDF generation script
└── verify_pdf.py # Verification utility
Security Features
1. SHA256 Hash Verification
Purpose: Ensure file integrity during download/transit
How it works:
- Each PDF gets a unique SHA256 hash calculated at build time
- Hash stored in
.sha256files alongside the PDFs - Combined
sha256sum-light.txtfor batch verification
Verification command:
sha256sum -c sha256sum-light.txt
2. GPG Signature Verification
Purpose: Verify authenticity and prevent tampering
??? Note "How it works"
- Detached signatures created for each PDF and hash file
- Public keys available in `/pgp/` directory
Verification command:
gpg --import pgp/anonymousplanet-master.asc
gpg --verify export/thgtoa.pdf.sig export/thgtoa.pdf
3. VirusTotal Integration
Purpose: Malware detection and security scanning
??? Note "How it works"
- Automatic scan of all generated PDFs
- Results published in release notes with direct links
- Provides third-party validation of file safety
Usage Examples
Local Development
# Build PDFs locally
python scripts/build_guide_pdf.py --both
# Verify hashes
python scripts/verify_pdf.py --hashes
# Verify signatures (requires GPG installed)
python scripts/verify_pdf.py --signatures
# Full verification with VirusTotal check
export VT_API_KEY=your_api_key
python scripts/verify_pdf.py --all
CI/CD Verification
The workflows automatically verify everything during the build process. To manually trigger:
- Go to Actions tab
- Select "Build guide PDF" or "VirusTotal Scan"
- Click "Run workflow"
- Download artifacts from successful run
Release Process
When you create a tag (e.g., v1.0.0):
- Push the tag:
git push origin v1.0.0 - Build PDF workflow triggers automatically
- VirusTotal scan workflow runs after build completes
- Both workflows update/create GitHub release with:
- Light and dark mode PDFs
- GPG signatures for all files
- Hash files for verification
- Release notes with VT scan results
Troubleshooting
Common Issues
GPG signing fails:
- Check that
GPG_PRIVATE_KEYis in ASCII armor format - Verify passphrase is correct
- Ensure key has signing capability
Hash mismatch after download:
- Re-download the file (corruption during transfer)
- Verify you're using the correct hash file
- Check disk integrity
VirusTotal scan fails:
- Verify
VT_API_KEYis set correctly - Check API quota limits (free tier: 4 requests/minute)
- Ensure PDF files exist before scanning
Debug Mode
Enable verbose output by adding to workflow:
- name: Debug
run: |
echo "Current directory:" && pwd
echo "Files in export:" && ls -la export/
echo "Hash file contents:" && cat sha256sum-light.txt
Best Practices
- Always verify signatures before opening PDFs from untrusted sources
- Check VirusTotal results for any suspicious detections
- Keep GPG keys secure - never commit private keys to repository
- Monitor API usage for VirusTotal to avoid rate limiting
- Test locally before pushing tags to production
Future Enhancements
Potential improvements:
- Multi-signature support (multiple maintainers)
- Automated changelog generation with hashes
- Cross-platform signature verification scripts
- Integration with additional malware scanners
- Automatic mirror updates with verified files
This workflow is designed for security-conscious users who need to verify the authenticity and integrity of downloaded documents.