Problem
The current workflow assumes unstable channel packages come from GitHub releases, but main branch pushes don't automatically create releases. This creates a gap between the unstable channel workflow and actual package availability.
Proposed Solution
Implement automatic pre-release creation in package repositories:
On push to main
Package repository workflows should:
- Build the package with version from the commit (e.g., v1.2.3)
- Create a GitHub release with that version tag (e.g.,
v1.2.3)
- Mark the release as a pre-release using GitHub's pre-release flag
- Attach the .deb artifact to the release
- Send repository_dispatch to apt.hatlabs.fi with
channel: "unstable"
Tagging Convention
- Use normal semantic versioning for tags:
v1.2.3, v1.2.4, etc.
- No special tag format required - the pre-release flag is what distinguishes them
- Release title can mention "Automatic pre-release" for clarity
- Each push to main creates a new versioned pre-release
Full Rebuild Support
The apt.hatlabs.fi workflow can perform full rebuilds of unstable distributions by:
- Querying for the latest release (including pre-releases)
- Comparing version numbers to determine newest
- Using artifacts from the latest pre-release OR latest stable release (whichever is newer)
Benefits
- Standard versioning - Same tag format as stable releases
- Version tracking - Each unstable build has a proper version
- Rollback capability - Can reference specific unstable versions
- Full rebuild support - Scheduled/manual rebuilds can populate unstable channels
- Cleaner workflow - apt.hatlabs.fi treats all releases uniformly
Implementation Example
name: Build Unstable
on:
push:
branches: [main]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Get version
id: version
run: echo "version=$(cat VERSION)" >> $GITHUB_OUTPUT
- name: Build package
run: # ... build .deb with version from step above
- name: Create pre-release
uses: softprops/action-gh-release@v1
with:
tag_name: v${{ steps.version.outputs.version }}
name: v${{ steps.version.outputs.version }} (Automatic pre-release)
prerelease: true
files: "*.deb"
- name: Trigger APT repo update
run: |
curl -X POST \
-H "Authorization: token ${{ secrets.REPO_DISPATCH_TOKEN }}" \
https://api.github.com/repos/hatlabs/apt.hatlabs.fi/dispatches \
-d '{"event_type":"package-updated","client_payload":{"distro":"trixie","channel":"unstable"}}'
Migration Path
- Update one package repository as proof of concept
- Verify apt.hatlabs.fi workflow handles pre-releases correctly
- Test full rebuild mode with pre-releases
- Roll out to all package repositories
- Document the pattern for new repositories
Related Issues
Acceptance Criteria
🔧 Implementation Requirements
MANDATORY: Follow halos-distro/docs/DEVELOPMENT_WORKFLOW.md during implementation.
See the complete workflow at: https://github.com/hatlabs/halos-distro/blob/main/docs/DEVELOPMENT_WORKFLOW.md
✅ Implementation Checklist
Track your progress through the mandatory development workflow:
□ Phase 1: EXPLORE (No Coding!)
□ Phase 2: PLAN
□ Phase 3: TEST (TDD)
□ Phase 4: IMPLEMENT
□ Phase 5: VERIFY
□ Phase 6: COMMIT
Problem
The current workflow assumes unstable channel packages come from GitHub releases, but main branch pushes don't automatically create releases. This creates a gap between the unstable channel workflow and actual package availability.
Proposed Solution
Implement automatic pre-release creation in package repositories:
On push to main
Package repository workflows should:
v1.2.3)channel: "unstable"Tagging Convention
v1.2.3,v1.2.4, etc.Full Rebuild Support
The apt.hatlabs.fi workflow can perform full rebuilds of unstable distributions by:
Benefits
Implementation Example
Migration Path
Related Issues
Acceptance Criteria
🔧 Implementation Requirements
MANDATORY: Follow
halos-distro/docs/DEVELOPMENT_WORKFLOW.mdduring implementation.See the complete workflow at: https://github.com/hatlabs/halos-distro/blob/main/docs/DEVELOPMENT_WORKFLOW.md
✅ Implementation Checklist
Track your progress through the mandatory development workflow:
□ Phase 1: EXPLORE (No Coding!)
/docs/SPEC.mdrelevant sections (if applicable)/docs/ARCHITECTURE.mdrelevant sections (if applicable)Task tool with subagent_type=Explorefor complex navigation□ Phase 2: PLAN
think hardto evaluate approaches□ Phase 3: TEST (TDD)
git commit -m "test: add X tests"□ Phase 4: IMPLEMENT
□ Phase 5: VERIFY
□ Phase 6: COMMIT
git commit -m "feat: implement X\n\nFixes #12"