GitHub Actions Workflows¶
Complete guide for GitHub Actions workflows in this project.
Workflows Overview¶
1. Test Workflow (.github/workflows/test.yml)¶
Purpose: Run tests and build verification on pull requests
Triggers:
- Pull requests to
mainbranch
Jobs:
- test: Run pytest test suite with Python 3.12
- build-test: Build and test binaries on all platforms (Linux, macOS Intel, macOS ARM, Windows)
Example:
2. Release Workflow (.github/workflows/release.yml)¶
Purpose: Automated versioning and release creation
Triggers:
- Push to
mainbranch - Manual trigger via GitHub UI
Jobs:
- test - Run full test suite
- check-version - Analyze commits to determine if release is needed
- build-binaries - Build standalone binaries for all platforms
- create-release - Create GitHub Release with semantic versioning
- upload-assets - Upload binaries and checksums to release
- notify-telegram - Send notification (optional)
Example:
git commit -m "feat: add new feature"
git push origin main
# → Triggers release workflow
# → Creates release v1.1.0 with binaries
Build Matrix¶
The workflows use a matrix strategy to build for multiple platforms in parallel:
matrix:
include:
- os: ubuntu-latest # Linux amd64
- os: macos-latest # macOS Intel
- os: macos-14 # macOS Apple Silicon
- os: windows-latest # Windows amd64
Artifacts¶
Test Workflow¶
- Binary artifacts for verification (not published)
Release Workflow¶
devo-linux-amd64- Linux binarydevo-darwin-amd64- macOS Intel binarydevo-darwin-arm64- macOS Apple Silicon binarydevo-windows-amd64.zip- Windows binary (ZIP package)SHA256SUMS- Checksums for all binaries
GitHub Release¶
When commits are pushed to main, the workflow:
- Analyzes commits using python-semantic-release
- Determines if new release is needed
- Calculates next version number
- Builds all binaries
- Creates git tag and GitHub release
- Uploads binaries and checksums
- Updates CHANGELOG.md
Release includes:
- All platform binaries
- SHA256SUMS file
- Auto-generated release notes from commits
Manual Workflow Trigger¶
You can manually trigger the release workflow:
- Go to Actions tab
- Select Release workflow
- Click Run workflow
- Select branch (main)
- Click Run workflow button
Secrets and Permissions¶
Required Permissions¶
The workflow needs:
contents: write- To create releases and push tagsissues: write- For semantic-releasepull-requests: write- For semantic-release
These are automatically granted by GitHub.
Optional Secrets (for Telegram notifications)¶
TELEGRAM_BOT_TOKEN- Your Telegram bot tokenTELEGRAM_CHAT_ID- Your Telegram chat ID (configured as variable)
Telegram Notifications¶
The release workflow can send notifications to Telegram when a release completes or fails.
Setup Instructions¶
- Create a Telegram Bot
- Open Telegram and search for
@BotFather - Send
/newbotcommand - Follow instructions to create your bot
-
Save the bot token
-
Get Your Chat ID
- Send a message to your bot
- Visit:
https://api.telegram.org/bot<YOUR_BOT_TOKEN>/getUpdates -
Find your
chat_idin the response -
Configure GitHub Secrets and Variables
- Go to repository Settings → Secrets and variables → Actions
- Add secret:
TELEGRAM_BOT_TOKEN - Add variable:
TELEGRAM_CHAT_ID
Notification Types¶
- Success: Release created successfully with version and links
- Failure: Build or release failed with error details
- No Release: Tests passed but no new release needed
Disable Notifications¶
To disable notifications, simply don't set the TELEGRAM_BOT_TOKEN and TELEGRAM_CHAT_ID. The workflow will skip notification steps automatically.
Workflow Status Badges¶
Add status badges to your README:


Monitoring Workflows¶
View Workflow Runs¶
- Go to Actions tab
- See all workflow runs
- Click on a run to see details
View Logs¶
- Click on a workflow run
- Click on a job (e.g., "Build linux-amd64")
- Expand steps to see logs
Download Artifacts¶
- Go to a completed workflow run
- Scroll to Artifacts section
- Click to download
Troubleshooting¶
Workflow not triggering¶
Check:
- Workflow file is in
.github/workflows/ - YAML syntax is valid
- Branch matches trigger conditions
Build fails on specific platform¶
Check:
- Build script works locally on that platform
- Dependencies are correctly installed
- Python version matches (3.12)
Release not created¶
Check:
- Commits follow conventional format (feat:, fix:, etc.)
- Commits exist since last release
GITHUB_TOKENhas write permissions
Binary doesn't work¶
Check:
- Downloaded correct platform binary
- Binary has execute permissions (Linux/macOS)
- AWS credentials are configured
Best Practices¶
- Always run tests before building - Prevents building broken code
- Use matrix for multi-platform builds - Parallel execution
- Generate checksums - Security verification
- Auto-generate release notes - Consistent format
- Use conventional commits - Enables automatic versioning
See Also¶
- CI/CD Overview - Workflow strategy
- Semantic Release - Automated versioning