7.9 KiB
Build & Release Workflow
This document explains the automated build and release process for JellyTau.
Overview
The CI/CD pipeline automatically:
- ✅ Runs all tests (frontend + Rust)
- ✅ Builds Linux binaries (AppImage + DEB)
- ✅ Builds Android APK and AAB
- ✅ Creates releases with artifacts
- ✅ Tags releases with version numbers
Workflow Triggers
Automatic Trigger
When you push a version tag:
git tag v1.0.0
git push origin v1.0.0
The workflow automatically:
- Runs tests
- Builds both platforms
- Creates a GitHub release with artifacts
- Tags it as release/prerelease based on version
Manual Trigger
In Gitea Actions UI:
- Go to Actions tab
- Click Build & Release workflow
- Click Run workflow
- Optionally specify a version
- Workflow runs without creating a release
Version Tagging
Format
Version tags follow semantic versioning: v{MAJOR}.{MINOR}.{PATCH}
Examples:
v1.0.0- Release versionv1.0.0-rc1- Release candidate (marked as prerelease)v1.0.0-beta- Beta version (marked as prerelease)v0.1.0-alpha- Alpha version (marked as prerelease)
Creating a Release
# Create and push a version tag
git tag v1.0.0 -m "Release version 1.0.0"
git push origin v1.0.0
# Or create from main branch
git tag -a v1.0.0 -m "Release version 1.0.0" main
git push origin v1.0.0
Release Status
Versions containing rc, beta, or alpha are marked as prerelease:
git tag v1.0.0-rc1 # ⚠️ Prerelease
git tag v1.0.0-beta # ⚠️ Prerelease
git tag v1.0.0-alpha # ⚠️ Prerelease
git tag v1.0.0 # ✅ Full release
Workflow Steps
1. Test Phase
Runs on all tags and manual triggers:
- Frontend tests (
vitest) - Rust tests (
cargo test) - TypeScript type checking
Failure: Stops workflow, no build/release
2. Build Linux Phase
Runs after tests pass:
- Installs system dependencies
- Builds with Tauri
- Generates:
- AppImage - Universal Linux binary
- DEB - Debian/Ubuntu package
Output: artifacts/linux/
3. Build Android Phase
Runs in parallel with Linux build:
- Installs Android SDK/NDK
- Configures Rust for Android targets
- Builds with Tauri
- Generates:
- APK - Android app package (installable)
- AAB - Android App Bundle (for Play Store)
Output: artifacts/android/
4. Create Release Phase
Runs after both builds succeed (only on version tags):
- Prepares release notes
- Downloads build artifacts
- Creates GitHub/Gitea release
- Uploads all artifacts
- Tags as prerelease if applicable
Artifacts
Linux Artifacts
AppImage
- File:
jellytau_*.AppImage - Size: ~100-150 MB
- Use: Run directly on any Linux distro
- Installation:
chmod +x jellytau_*.AppImage ./jellytau_*.AppImage
DEB Package
- File:
jellytau_*.deb - Size: ~80-120 MB
- Use: Install on Debian/Ubuntu/similar
- Installation:
sudo dpkg -i jellytau_*.deb jellytau
Android Artifacts
APK
- File:
jellytau-release.apk - Size: ~60-100 MB
- Use: Direct installation on Android devices
- Installation:
adb install jellytau-release.apk # Or sideload via file manager
AAB (Android App Bundle)
- File:
jellytau-release.aab - Size: ~50-90 MB
- Use: Upload to Google Play Console
- Note: Cannot be installed directly; for Play Store distribution
Release Notes
Release notes are automatically generated with:
- Version number
- Download links
- Installation instructions
- System requirements
- Known issues link
- Changelog reference
Build Matrix
| Platform | OS | Architecture | Format |
|---|---|---|---|
| Linux | Any | x86_64 | AppImage, DEB |
| Android | 8.0+ | arm64, armv7, x86_64 | APK, AAB |
Troubleshooting
Build Fails During Test Phase
- Check test output in Gitea Actions
- Run tests locally:
bun run testandbun run test:rust - Fix failing tests
- Create new tag with fixed code
Linux Build Fails
- Check system dependencies installed
- Verify Tauri configuration
- Check cargo dependencies
- Clear cache: Delete
.cargoandtarget/directories
Android Build Fails
- Check Android SDK/NDK setup
- Verify Java 17 is installed
- Check Rust Android targets:
rustup target list - Clear cache and rebuild
Release Not Created
- Tag must start with
v(e.g.,v1.0.0) - Tests must pass
- Both builds must succeed
- Check workflow logs for errors
GitHub Release vs Gitea
The workflow uses GitHub Actions SDK but is designed for Gitea. For Gitea-native releases:
- Workflow creates artifacts
- Artifacts are available in Actions artifacts
- Download and manually create Gitea release, or
- Set up Gitea API integration to auto-publish
Customization
Change Release Notes Template
Edit .gitea/workflows/build-release.yml, section Prepare release notes:
- name: Prepare release notes
id: release_notes
run: |
# Add your custom release notes format here
echo "Custom notes" > release_notes.md
Add New Platforms
To add macOS or Windows builds:
- Add new
build-{platform}job - Set appropriate
runs-onrunner - Add platform-specific dependencies
- Update artifact upload
- Include in
needs: [build-linux, build-android, build-{platform}]
Change Build Targets
Modify Tauri configuration or add targets:
- name: Build for Linux
run: |
# Add target specification
bun run tauri build -- --target x86_64-unknown-linux-gnu
Monitoring
Check Status
- Go to Actions tab in Gitea
- View Build & Release workflow runs
- Click specific run to see logs
Notifications
Set up notifications for:
- Build failures
- Release creation
- Tag pushes
Performance
Build Times (Approximate)
- Test phase: 5-10 minutes
- Linux build: 10-15 minutes
- Android build: 15-20 minutes
- Total: 30-45 minutes
Caching
Workflow caches:
- Rust dependencies (cargo)
- Bun node_modules
- Android SDK components
Security
Secrets
The workflow uses:
GITHUB_TOKEN- Built-in, no setup needed- No credentials needed for Gitea
Verification
To verify build integrity:
- Download artifacts
- Verify signatures (if implemented)
- Check file hashes
- Test on target platform
Best Practices
Versioning
- Follow semantic versioning:
v{MAJOR}.{MINOR}.{PATCH} - Tag releases in git
- Update CHANGELOG.md before tagging
- Include release notes in tag message
Testing Before Release
# Local testing before release
bun run test # Frontend tests
bun run test:rust # Rust tests
bun run check # Type checking
bun run tauri build # Local build test
Documentation
- Update CHANGELOG.md with changes
- Update README.md with new features
- Document breaking changes
- Add migration guide if needed
Example Release Workflow
# 1. Update version in relevant files (package.json, Cargo.toml, etc.)
vim package.json
vim src-tauri/tauri.conf.json
# 2. Update CHANGELOG
vim CHANGELOG.md
# 3. Commit changes
git add .
git commit -m "Bump version to v1.0.0"
# 4. Create annotated tag
git tag -a v1.0.0 -m "Release version 1.0.0
Features:
- Feature 1
- Feature 2
Fixes:
- Fix 1
- Fix 2"
# 5. Push tag to trigger workflow
git push origin v1.0.0
# 6. Monitor workflow in Gitea Actions
# Wait for tests → Linux build → Android build → Release
# 7. Download artifacts and test
# Visit release page and verify downloads
References
- Tauri Documentation
- Semantic Versioning
- GitHub Release Best Practices
- Android App Bundle
- AppImage Documentation
Last Updated: 2026-02-13