I've created a complete release management system for your OrbitLab project! Here's what you now have:
File: .github/workflows/release.yml
- Triggers: Automatically when you push a version tag (e.g.,
v1.0.0) - Builds: Windows .exe + macOS .zip
- Publishes: Automatically creates GitHub release with binaries
- Time: ~5-15 minutes per release
| File | Purpose | When to Use |
|---|---|---|
QUICK_START_RELEASE.md |
Fast-track guide | START HERE for your first release |
RELEASE_GUIDE.md |
Comprehensive guide | Deep dive into best practices |
CHANGELOG.md |
Track changes | Update before each release |
build_local.py |
Local build script | Test builds before release |
version.txt |
Version tracking | Reference current version |
RELEASE_SUMMARY.md |
This file! | Overview of everything |
- GitHub Actions workflow - Automated cloud builds
- Local build script - Test on your machine
- PyInstaller configuration - Ready to use
# 1. Finish your splash screen feature
# (code, test, commit)
# 2. Update CHANGELOG.md
# Move items from [Unreleased] to [1.0.0]
# 3. Create and push tag
git tag -a v1.0.0 -m "First stable release"
git push origin v1.0.0
# 4. Wait for GitHub Actions (5-15 min)
# Go to GitHub → Actions tab → watch build
# 5. Publish release
# Go to GitHub → Releases → Edit draft → Publish
# Done! 🎉- QUICK_START_RELEASE.md ← Start here!
- CHANGELOG.md ← Update this before release
- RELEASE_GUIDE.md ← Read for deeper understanding
- README.md ← Updated with download links
v1.0.0 = MAJOR.MINOR.PATCH
MAJOR (1.x.x) - Breaking changes
MINOR (x.1.x) - New features
PATCH (x.x.1) - Bug fixes
For your first release:
v1.0.0if you consider it stable and readyv0.1.0if you want to signal it's still experimental
- Feature complete
- Tested on target platforms
- CHANGELOG.md updated
- Version number decided
- Tag created and pushed
- GitHub Actions completed
- Release notes reviewed
- Release published
✅ Windows - Single .exe file (PyInstaller) ✅ macOS - .zip with .app bundle (PyInstaller) ✅ Linux - Source installation (most Linux users prefer this)
- Triggers when you push a tag like
v1.0.0 - Spins up Windows and macOS virtual machines
- Installs Python and dependencies
- Builds executables using PyInstaller
- Creates GitHub release draft
- Uploads binaries automatically
- Generates release notes from commits
Windows:
pyinstaller --onefile --windowed \
--name OrbitalSimulator-v1.0.0-windows \
--icon=assets/earth_sprite.png \
--add-data "assets;assets" \
src/main.pymacOS:
pyinstaller --onefile --windowed \
--name OrbitalSimulator-v1.0.0-macos \
--icon=assets/earth_sprite.png \
--add-data "assets:assets" \
src/main.pyWhy: Unsigned executables trigger SmartScreen Solutions:
- Code signing ($200/year) - Professional solution
- User instructions (Free) - Tell users to click "More info" → "Run anyway"
- VirusTotal scan (Free) - Upload and share clean scan results
Why: App isn't notarized by Apple Solutions:
- Notarization ($99/year Apple Developer) - Professional solution
- User instructions (Free) - Tell users to right-click → Open
Why: PyInstaller bundles Python + all libraries This is normal! Modern apps are this size. Users won't mind.
| Aspect | Manual Build | GitHub Actions |
|---|---|---|
| Setup time | 5 minutes | 30 minutes (one-time) |
| Build time | 2-5 minutes | 5-15 minutes |
| Platforms | Only your OS | Windows + macOS |
| Consistency | Varies | Always same |
| Effort per release | High | Very low |
| Best for | Testing | Production releases |
Recommendation: Test locally, release with GitHub Actions.
- https://semver.org/
- Clear rules for version numbers
- https://keepachangelog.com/
- Standard format for CHANGELOG.md
- https://pyinstaller.org/
- How to bundle Python apps
- https://docs.github.com/en/repositories/releasing-projects-on-github
- Official GitHub documentation
- https://docs.github.com/en/actions
- Automate your workflows
- Monitor GitHub Issues for bug reports
- Respond to user feedback
- Fix critical bugs → v1.0.1
- Plan v1.1.0 features based on feedback
- Improve documentation based on user questions
- Consider adding more platforms (Linux AppImage?)
- Build a community around your project
- Accept pull requests from contributors
- Consider continuous deployment for beta releases
git tag -a v1.0.0-beta.1 -m "Beta release for testing"Mark as "pre-release" on GitHub - users know it's experimental.
- Morning coffee ☕
- Review CHANGELOG
- Test build locally
- Push tag
- Write great release notes
- Celebrate! 🎉
Future enhancements:
- Auto-update CHANGELOG from commit messages
- Auto-increment version numbers
- Deploy to other platforms (Steam, itch.io)
Good release notes = happy users
- What's new (features)
- What's fixed (bugs)
- What's changed (breaking changes)
- How to install (clear instructions)
Here's exactly what will happen:
# You finish splash screen
git add src/main.py assets/splash.png
git commit -m "feat: add beautiful splash screen"
# Update CHANGELOG.md
# [1.0.0] - 2026-01-17
# ### Added
# - Beautiful splash screen on startup
git add CHANGELOG.md
git commit -m "docs: update changelog for v1.0.0"
git push origin main
# Create release
git tag -a v1.0.0 -m "Release v1.0.0 - First stable release"
git push origin v1.0.0
# GitHub Actions starts building...
# 5 minutes later: Windows build done ✅
# 10 minutes later: macOS build done ✅
# 12 minutes later: Release created ✅
# You review and publish
# Users can now download!If you run into issues:
- Check logs - GitHub Actions tab shows detailed logs
- Read docs - RELEASE_GUIDE.md has troubleshooting
- Search issues - PyInstaller has great community support
- Ask questions - GitHub Discussions or Stack Overflow
You now have a professional-grade release system that:
- ✅ Builds automatically
- ✅ Supports multiple platforms
- ✅ Follows best practices
- ✅ Is fully documented
- ✅ Scales with your project
When you're ready to release:
- Read
QUICK_START_RELEASE.md - Follow the steps
- Ship your software! 🚀
Good luck with your release! You've got this! 🎉