This repository manages the automated release process for the SOL audio recording device ecosystem. It aggregates build artifacts from multiple component repositories into unified release packages for device deployment.
The SOL Release repository serves as the central hub for creating combined releases that include:
- sol-software: Core device application and UI
- sol-server: Web server and API
- sol-utils: System utilities and management tools
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ sol-software │ │ sol-server │ │ sol-utils │
│ Repository │ │ Repository │ │ Repository │
└────────┬────────┘ └────────┬────────┘ └────────┬────────┘
│ │ │
│ Repository │ Repository │ Repository
│ Dispatch │ Dispatch │ Dispatch
│ │ │
└───────────────────────┴─────────────────────────┘
│
▼
┌────────────────────────┐
│ sol-release │
│ GitHub Actions │
│ Workflow │
└────────────────────────┘
│
▼
┌────────────────────────┐
│ Download Latest │
│ Releases from Each │
│ Component │
└────────────────────────┘
│
▼
┌────────────────────────┐
│ Aggregate Artifacts │
│ Create metadata.json │
│ Package into ZIP │
└────────────────────────┘
│
▼
┌────────────────────────┐
│ Create GitHub │
│ Pre-Release with │
│ Combined Package │
└────────────────────────┘
When any component repository creates a new release, it automatically triggers the combined release workflow via repository dispatch:
# Example from component repository
- name: Trigger combined release
uses: peter-evans/repository-dispatch@v2
with:
token: ${{ secrets.RELEASE_TOKEN }}
repository: eveningsco/sol-release
event-type: sol_software_release
client-payload: '{"branch": "${{ github.ref_name }}", "commit_sha": "${{ github.sha }}", "tag_name": "${{ steps.create_release.outputs.tag }}"}'The workflow can also be triggered manually through the GitHub Actions UI:
- Navigate to the Actions tab
- Select "Create Combined Release"
- Click "Run workflow"
Each combined release includes:
sol-server.zip- Bun compiled server applicationsol_software- Main device applicationsol_update_gui- Graphical update interfacesol_update_backend- Update backend servicesol_update_manager- Automatic update checkersol_update_manager_gui- Update manager GUImass_gadget_watchdog- USB gadget monitorupdate_version_info- Version information updatergpio_shutdown_trigger- GPIO shutdown handleroff_mass_gadget/on_mass_gadget- USB mass storage togglesexpand_exfat- Partition expanderprovision- System provisioning scriptmp2624- Battery charger utility
- Core services:
sol-server.service,sol_software.service - Monitoring:
sol-connectivity.service,mass_gadget_watchdog.service - Updates:
sol_update_manager.service,update_version_info.service - Hardware:
fbcp.service,mp2624_watchdog.service - Logging:
filebeat.service
filebeat.yml- Log shipping configuration
- Individual logrotate configs for each service
metadata.json- Combined release information including:- Release version and build date
- Component versions and commit SHAs
- Branch and PR information
- Build timestamps
The following secrets must be configured:
RELEASE_TOKEN: Personal access token with repo access to component repositoriesGITHUB_TOKEN: Automatically provided by GitHub Actions
The workflow requires:
- Write access to create releases
- Read access to component repositories
- API access for downloading release assets
- Fork Testing: Fork the repository and update component repository URLs
- Local Testing: Use
acttool to test GitHub Actions locally - Manual Trigger: Use workflow_dispatch for testing
-
Update workflow triggers:
on: repository_dispatch: types: [...existing..., new_component_release]
-
Add download step following existing pattern
-
Update metadata merging logic
-
Add files to release body generation
Common issues and solutions:
- Missing assets: Check component release includes all required files
- Permission errors: Verify RELEASE_TOKEN has appropriate access
- Workflow not triggering: Ensure repository dispatch event types match
- Download failures: Check asset IDs in workflow logs
- Format:
Release-MMDDYYYY_HH-MM-SS - Example:
Release-01252025_14-30-45 - All releases are created as pre-releases
- Automatic cleanup maintains only the 5 most recent releases
- Component repositories build and test their artifacts
- On successful build, they create a GitHub release
- Release creation triggers repository dispatch to sol-release
- sol-release workflow downloads all latest component releases
- Artifacts are organized and packaged into a single ZIP
- Combined release is created with comprehensive metadata
- SOL devices check for and download these combined releases
When modifying the release process:
- Test changes thoroughly in a fork
- Ensure backward compatibility
- Update documentation
- Consider impact on deployed devices
This project is part of the SOL audio recording device ecosystem.