4.6 KiB
| title | linkTitle | date | description | tags | categories | weight | |||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Forgejo Integration, Extension, and Community Collaboration | Forgejo Software Forge | 2025-11-17 | Summary of the project's work integrating GARM with Forgejo and contributing key features back to the community. |
|
|
10 |
{{% alert title="Draft" color="warning" %}} Editorial Status: This page is currently being developed.
- Jira Ticket: TICKET-6731
- Assignee: Daniel
- Status: Draft
- Last Updated: 2025-11-17
- TODO:
- Add concrete quick start steps
- Include prerequisites and access information
- Create first application tutorial
- Review/Feedback:
- Stephan:
- in general:
- some parts are worth to go th 'Governance'
- perhaps we should remove the emojis?
- perhaps we should avoid the impression that the text was copy/pated from AI
- some details/further ideas:
- where is it, this Forgejo? Why is it called 'edp.buildth.ing'?
- what are the components we use - package managament, actions, ...
- Friendly users? organisations? Public/private stuff?
- App Management discussions (we don't!)?
- what about code snippets how forgejo is deployed? SSO? user base? Federation options?
- storages, Redis, Postgres ... deployment options ... helm charts ...
- Migrations we did, where is the migration code?
- git POSIX filesystem concurrency discussion, S/3 bucket
- what is our general experience?
- repository centric domain data model
- how did we develop? which version did we take first? how did we upgrade?
- which development flows did we use? which pipleines?
- provide codeberg links for the PRs
- provide architecture drawings and repo links for the cache registry thing
- provide a hight level actions arch diagram from the perspective of forgejo - link to the GARM component here {{% /alert %}}
- where is it, this Forgejo? Why is it called 'edp.buildth.ing'?
- in general:
- Stephan:
🧾 Result short description / cognitions
Here is the management summary of the work package results:
-
📈 Strategic Selection: We chose Forgejo as the project's self-hosted Git service. This decision was based on several key strategic factors:
- EU-Based & Data Sovereignty: The project is stewarded by Codeberg e.V., a non-profit based in Berlin, Germany. This is a massive win for our "funding agency" stakeholders, as it aligns with GDPR, compliance, and data sovereignty goals. It's governed by EU laws, not a US tech entity.
- True Open Source (GPL v3+): Forgejo is a community-driven fork of Gitea, created to guarantee it stays 100% free and open-source (FOSS).
- License Protects Our Contributions: It uses the GPL v3+ "copyleft" license. This is perfect for our collaboration goal. It legally ensures that the features we contribute back (like GARM support) can never be taken and locked into a proprietary, closed-source product by anyone. It protects our work and keeps the community open.
-
⚙️ Core Use Case: Forgejo is used for all project source code versioning and as the backbone for our CI/CD (Continuous Integration/Continuous Deployment) pipelines.
-
🛠️ Key Extension (GARM Support): The main technical achievement was integrating GARM (GitHub Actions Runner Manager). This was not supported by Forgejo out-of-the-box.
-
✨ Required Enhancements: To make GARM work, our team developed and implemented several critical features:
- Webhook support for workflow events (to tell runners when to start).
- Support for ephemeral runners (for secure, clean-slate builds every time).
- GitHub API-compatible endpoints (to allow the runners to register themselves correctly).
-
💖 Community Contribution: We didn't just keep this for ourselves! We contributed all these features directly back to the upstream Forgejo community. This wasn't just a code-dump; we actively collaborated via issues, feature requests, and pull requests (PRs) on codeberg.org.
-
🚀 Bonus Functionality: We also implemented artifact caching. This configures Forgejo to act as a pull-through proxy for remote container registries (like Docker Hub), which seriously speeds up our build times and saves bandwidth.