|
| 1 | +# 25. Codeberg release platform |
| 2 | + |
| 3 | +Date: 2026-01-24 |
| 4 | + |
| 5 | +## Status |
| 6 | + |
| 7 | +Accepted |
| 8 | + |
| 9 | +Complements [24. Codeberg hosting and Woodpecker CI migration](0024-codeberg-hosting-and-woodpecker-ci.md) |
| 10 | + |
| 11 | +## Context |
| 12 | + |
| 13 | +Following the migration to Codeberg for primary development (ADR 0024), we needed to decide where to host and automate software releases. Release distribution has unique considerations beyond general CI/CD: |
| 14 | + |
| 15 | +- **Discoverability**: Users need to find and download releases easily |
| 16 | +- **Automation**: Release builds, artefact generation, and publishing must be automated |
| 17 | +- **Trust and Security**: Checksums, reproducible builds, and secure distribution |
| 18 | +- **Consistency**: Aligning infrastructure with project values (FOSS principles) |
| 19 | + |
| 20 | +**Release Platform Options:** |
| 21 | + |
| 22 | +1. **GitHub Releases**: Established ecosystem, good discoverability, GitHub Actions + GoReleaser integration |
| 23 | +2. **Codeberg Releases**: Aligned with FOSS values, Forgejo/Gitea native, GoReleaser support via Gitea mode |
| 24 | +3. **Hybrid Approach**: CI on Codeberg, releases on GitHub (maintains discoverability) |
| 25 | + |
| 26 | +GoReleaser supports Gitea/Forgejo natively, Codeberg provides a compatible release API, and `go install` works identically for both platforms. |
| 27 | + |
| 28 | +## Decision |
| 29 | + |
| 30 | +We will **perform releases exclusively on Codeberg** using Woodpecker CI and GoReleaser. |
| 31 | + |
| 32 | +**Release Infrastructure:** |
| 33 | + |
| 34 | +- **Automation**: Woodpecker CI (`.woodpecker/release.yaml`) triggers on version tags with quality gates |
| 35 | +- **Build and Publish**: GoReleaser (`.goreleaser.yaml`) builds cross-platform binaries and publishes to Codeberg Releases API |
| 36 | +- **Distribution**: Codeberg Releases at `https://codeberg.org/orien/stackaroo/releases` |
| 37 | + |
| 38 | +We will **not** maintain GitHub releases or mirrors. All releases exclusively on Codeberg. |
| 39 | + |
| 40 | +## Consequences |
| 41 | + |
| 42 | +### Positive |
| 43 | + |
| 44 | +- **Value Consistency**: Release infrastructure fully aligned with FOSS principles |
| 45 | +- **Simplicity**: Single platform for code, CI, issues, and releases |
| 46 | +- **No Platform Fragmentation**: Avoids confusion about canonical release location |
| 47 | +- **Community Support**: Strengthens Codeberg ecosystem by using it fully |
| 48 | +- **Technical Sovereignty**: Complete control via self-hostable Forgejo if needed |
| 49 | +- **Go Module Transparency**: `go install` works identically regardless of hosting |
| 50 | + |
| 51 | +### Negative |
| 52 | + |
| 53 | +- **Discoverability**: Codeberg's smaller user base reduces organic discovery |
| 54 | + - **Mitigation**: Clear documentation, README installation instructions, prominent download links |
| 55 | + |
| 56 | +- **Familiarity**: Some users accustomed to GitHub releases |
| 57 | + - **Mitigation**: Documentation explains Codeberg usage, identical download UX |
| 58 | + |
| 59 | +- **Ecosystem Integration**: Fewer third-party tools integrate with Codeberg |
| 60 | + - **Mitigation**: Most tools use `go install` or direct binary downloads which work fine |
| 61 | + |
| 62 | +- **Search Engine Ranking**: GitHub releases may rank higher in search results |
| 63 | + - **Mitigation**: SEO-optimised documentation, direct links in README |
| 64 | + |
| 65 | +## References |
| 66 | + |
| 67 | +- [Codeberg](https://codeberg.org) |
| 68 | +- [GoReleaser Gitea Support](https://goreleaser.com/customization/gitea/) |
0 commit comments