Your StreamLib project now has complete release automation! Here's what's ready:
Location: .github/workflows/release.yml
Triggers on: Git tags matching v* (e.g., v0.1.0)
Builds:
- ✅ Windows x64 Static -
stream.lib+ all dependency .lib files - ✅ Windows x64 DLL -
stream.dll+ all runtime DLLs (zlib1.dll, bz2.dll, etc.) - ✅ Linux x64 -
libstream.astatic library - ✅ macOS x64 -
libstream.astatic library - ✅ Source Code - Both .tar.gz and .zip archives
Dependencies Bundled (Windows):
- zlib (compression)
- bzip2 (compression)
- liblzma (compression)
- zstd (compression)
- libarchive (archives)
- All required DLLs (iconv, charset, etc.)
Total Release Assets: 7 files per release
Location: scripts/release.sh
Usage:
./scripts/release.sh 0.1.0
git push origin main v0.1.0Features:
- ✅ Version format validation
- ✅ Working directory checks
- ✅ Automatic version updates
- ✅ Git tag creation
- ✅ Clear instructions
- ✅ Easy rollback
Created:
RELEASE.md- Complete release process guideCHANGELOG.md- Version history starting with v0.1.0scripts/README.md- Quick reference for scriptsRELEASE_SETUP.md- This file
Current version: 0.1.0 (set in CMakeLists.txt)
Project name: streamlib
# 1. Make sure you're on main branch with latest changes
git checkout main
git pull
# 2. Ensure all tests pass
cd build
ctest
cd ..
# 3. Run the release script
./scripts/release.sh 0.1.0
# 4. Review the changes
git log -1
git show v0.1.0
# 5. Push to trigger release
git push origin main v0.1.0If you want to test the release workflow without creating a tag:
- Go to GitHub → Actions tab
- Click "Release Build" workflow
- Click "Run workflow"
- Enter version:
0.1.0 - Click "Run workflow"
This will create the release without needing a git tag.
00:00 Push tag v0.1.0
00:01 GitHub Actions triggers
00:02 Create release job starts
00:03 5 build jobs start in parallel:
- Windows Static
- Windows DLL
- Linux
- macOS
- Source Archives
00:15 All builds complete
00:16 Assets uploaded to release
00:17 Release published automatically
Watch the build:
# In browser
https://github.com/YOUR_USERNAME/streamlib/actions
# Or with GitHub CLI
gh run watch✅ All 5 jobs show green checkmarks ✅ 7 assets attached to release:
- streamlib-0.1.0-source.tar.gz
- streamlib-0.1.0-source.zip
- streamlib-0.1.0-windows-x64-static.zip
- streamlib-0.1.0-windows-x64-dll.zip
- streamlib-0.1.0-linux-x64.tar.gz
- streamlib-0.1.0-macos-x64.tar.gz ✅ Release published on GitHub
streamlib-0.1.0-windows-x64-static.zip
├── include/
│ └── stream.h
├── lib/
│ ├── stream.lib (your library)
│ ├── zlib.lib
│ ├── bz2.lib
│ ├── lzma.lib
│ ├── zstd.lib
│ └── archive.lib
├── examples/
│ └── *.c
├── README.md
└── LICENSE
streamlib-0.1.0-windows-x64-dll.zip
├── include/
│ └── stream.h
├── lib/
│ └── stream.lib (import library)
├── bin/
│ ├── stream.dll (your DLL)
│ ├── zlib1.dll
│ ├── bz2.dll
│ ├── lzma.dll
│ ├── zstd.dll
│ ├── archive.dll
│ ├── liblzma.dll
│ ├── charset.dll
│ └── iconv.dll
├── examples/
│ └── *.c
├── README.md
└── LICENSE
streamlib-0.1.0-linux-x64.tar.gz
├── include/
│ └── stream.h
├── lib/
│ └── libstream.a
├── examples/
│ └── *.c
├── README.md (platform-specific instructions)
└── LICENSE
Making future releases is now super easy:
# For version 0.2.0
./scripts/release.sh 0.2.0
git push origin main v0.2.0
# For version 1.0.0
./scripts/release.sh 1.0.0
git push origin main v1.0.0Just remember to:
- Update CHANGELOG.md with new features
- Run tests
- Run the script
- Push the tag
Before creating v0.1.0:
- Release workflow configured
- Release script created
- Version set to 0.1.0
- CHANGELOG.md created
- Documentation complete
- All tests passing
- CI/CD pipeline green
- Archive creation feature tested
- Ready to publish
- Review CHANGELOG.md - Update if needed
- Run final tests - Make sure everything works
- Check CI/CD - Ensure latest commits pass
- Create release - Run
./scripts/release.sh 0.1.0 - Push tag -
git push origin main v0.1.0 - Wait ~15 minutes - Watch the build in Actions
- Verify release - Check all 7 assets are attached
- Celebrate! 🎉
"Working directory is not clean"
git status
git add .
git commit -m "Prepare for release""Permission denied: ./scripts/release.sh"
chmod +x scripts/release.shWindows builds fail
- Check vcpkg cache in Actions logs
- May need to clear Actions cache and retry
DLLs missing from package
- DLL names may vary between vcpkg versions
- Check actual filenames in vcpkg/installed/x64-windows/bin/
- Release Process: See RELEASE.md
- Workflow Details: See .github/workflows/release.yml
- Script Help: Run
./scripts/release.shwithout arguments
You now have a professional release setup that:
✅ Creates releases with one command ✅ Builds for 3 platforms automatically ✅ Bundles all Windows dependencies ✅ Creates both static and DLL builds ✅ Generates source archives ✅ Publishes everything to GitHub ✅ Takes ~15 minutes total
No manual packaging, no manual uploads, no platform-specific builds needed!
Ready to release? Run: ./scripts/release.sh 0.1.0