Forgejo monthly report - August 2025
The monthly report is meant to provide a good overview of what has changed in Forgejo in the past month. If you would like to help, please get in touch in the chatroom or participate in the ongoing discussions.
Releases
Forgejo security release
The security team has been busy with the fixes that were announced and published in Forgejo v11.0.4 and v12.0.2.
When preparing multiple pull request in advance and in secret, the challenge is to make sure that no unexpected conflicts will arise when they are added to the Forgejo repository, shortly before the release is published. And also to account for the time it takes for the CI to verify a total of 26 pull requests (including backports) knowing each run takes around 30 minutes. It turned out to be around 12 hours of real time, including delays due to errors. There were a few issues (two pull requests required manual merges, some trivial conflict resolution were missed) but their resolution was not too time consuming.
A decision on when and why security releases should be published, has to strike a balance between:
- the severity and impact of each vulnerability (e.g. for web endpoints vulnerable to manually crafted identifiers the impact and severity is higher than for this cross-site scripting (XSS) vulnerability).
- the frequency of security releases because they can be exhausting for Forgejo admins when there are too many.
- the risk of regressions when backporting the fix because it is done in secret and does not benefit from the wider panel of reviewers as the backport worked on publicly.
- the attention it requires from Forgejo admins when the vulnerability is difficult to understand, even when the release notes are crystal clear.
For these releases, the decision was made to publish an unusually large number of security fixes (nine) in a single release because:
- the severity of each of them is not too high (e.g. compared to the release fixing web endpoints vulnerable to manually crafted identifiers that was published last year).
- spreading them on two or three security release would be more work for the Forgejo admins.
- only three manual backports out of eighteen are conflicting and the resolution is trivial which reduces the risk of regressions.
The release notes were unified and worded so that the fix is explained first (present tense) and the vulnerability is explained last (past tense) in the hope that it makes them quicker to evaluate and understand.
Helm chart
Helm chart v14 was released on 22. August. This release removes the PostgreSQL and Valkey sub charts. This means that if you are using them, please check the migration guide before upgrading.
As usual, a new minor version (v14.0.1) was also published as the corresponding release to the Forgejo v12.0.2 security release.
Forgejo runner v10
As the year long effort to fix security issues came to an end, the warning about the Forgejo runner being insecure was removed. Security issues are now expected to be reported as per the Forgejo security policy.
The Forgejo security team organized itself with the necessary infrastructure to prepare security fixes under embargo in a private repository. The first of which was announced 22 August and published 1 September.
A regression in v10.0.0 was discovered minutes after it was published. Luckily it as an easy fix and v10.0.1 was published an hour later. The post-mortem of this unfortunate event is rather simple: despite very thorough reviews and extensive automated testing, bugs happen.
Discussions
AI usage in the context of Forgejo
As announced in the previous monthly report, a discussion about how to handle AI contributions began in the Forgejo space at the end of June. A vote was held on the proposals that emerged, and the documentation of the results is currently in progress.
Drafts have been created for the governance and Code of Conduct additions. Only minor details are left to be discussed as part of the documentation and implementation process.
Forgejo runner
As the runner becomes more stable and usable outside the context of the Forgejo project itself, it needs more contributors and a healthy momentum. A discussion started on how to achieve that and at the same time a significant effort was made that successfully increased the activity and allowed new contributors to be onboarded. Maintaining this momentum will be the main challenge of the coming months.
Although features are not the priority, there was an exception: reusable workflows. They were partially implemented and not supported until Forgejo runner v9.1.0 released this month. The main reason for this exception is that, although undocumented and partially working, it was used and bug reports were received. The difficult choice was between removing support for the partial implementation, thus breaking existing workflows that managed to find a happy path or completing the implementation so it could be supported.
Schema validation of actions and workflows
As expected, the schema validation introduced in Forgejo runner v8.0.0 caused some legitimate workflow to fail and the schemas had to be fixed. As of Forgejo runner 9.1.1, all known issues were fixed and there has been no report of unexpected validation failures in the past two weeks.
While investigating a validation error, a bug in the Go YAML package was discovered and reported. Until a fix is available, a simple workaround can be applied: remove the leading empty line. On that occasion it was also discovered that invalid scheduled workflows could block other scheduled workflows and a fix was backported to Forgejo v12 released 31 August.
Codebase re-organization
The activity in Netkos ACT has been low since the beginning of 2024. The main contributor also created a fork but it did not receive much attention in the past six months. In that context a cooperation with an actively maintained codebase seems unlikely.
As all commits from Nektos or Gitea were either ported or cherry-picked in Forgejo, it appeared that it would be easier to maintain a single codebase rather than two separate repositories (runner and ACT). The two repositories were merged on 28 July and the former ACT repository was archived.
actions/artifact@v4 support
The actions/artifact@v4 is used to add files to a job run. It relies on an ad-hoc protocol that is different from anything else and was introduced in Forgejo at the beginning of 2024. It is very useful and frequently used.
Unfortunately the choice to support it by implementing the protocol means that Forgejo is forced to chase and reverse engineer the GitHub server implementation for which only the client side is available under a Free Software license.
Two concrete side effect of that decision are:
- the need to maintain a fork of the action that disables GitHub specific verification preventing it from running on GitHub Enterprise and therefore any self-hosted forge.
- the need to introduce breaking changes with Forgejo v13 to fix some bugs.
Licensing
A discussion started to change the license of the runner to GPLv3+. It is in line with the licensing agreement of the Forgejo project and no concerns were raised. But, as it is an important decision, it takes a few weeks to be merged and implemented.
Federation
For a high-level overview, check out the federation roadmap.
The work to implement federated user following continued (see the merged pull requests 1, 2). The latest pull request is still in review as preliminary manual testing using Mastodon instead of GtS discovered a bug.
Collecting test coverage for the implementation of federation requires obtaining data from both the Forgejo repository (unit and integration tests) and the end-to-end repository (where GtS is run alongside Forgejo and plays a realistic scenario). When running out of a pull request end-to-end tests now upload coverage data as artifacts to the CI run. They can then be downloaded and manually merged out of a new workflow run of the tests that also uploads the result as an artifact. This would benefit from being automated to be more generally useful but it already allowed for verifying which parts of the federation codebase deserve more testing.
Other
Blog post and talk about Federation
On 14 August 2025, a blog post explained how to experiment with the current implementation of user following.
On 16 August 2025, Jerger held a talk (in German) about federated forgejo at the FrOSCon in Bonn, Germany.
It provided insights into the engine room, security considerations, challenges, and the way forward.
FFmpeg using Forgejo
FFmpeg announced in a recent news article that they started to accept contributions via their Forgejo instance available at code.ffmpeg.org. We are pleased by such announcements because they show the results of our daily work.
Matrix security disclosure
On 16 July 2025, Matrix announced in a predisclosure that a security vulnerability had been found in the current room versions and that it had been fixed. For us, this means that all rooms on Matrix must be updated.
As announced in the last monthly report we planned to do the upgrade shortly after the security fix was released. However, the publication and adoption of the security fix didn’t go as we expected. As a result, only one room has been updated so far.
We are monitoring the adoption of the security fix and plan to complete the remaining updates soon. An announcement will be made in every room before it is updated.
We Forge
Forgejo is a community of people who contribute in an inclusive environment. We forge on an equal footing, by reporting a bug, voicing an idea in the chatroom or implementing a new feature. The following list of contributors is intended to reflect this diversity and to acknowledge all the contributions made over the past month. If you are missing, please ask for an update.
- https://codeberg.org/0ko
- https://codeberg.org/achyrva
- https://codeberg.org/ada4a
- https://codeberg.org/addisoncrump
- https://codeberg.org/adr1enbe4udou1n
- https://codeberg.org/adriand
- https://codeberg.org/Adrianyyy
- https://codeberg.org/alex265
- https://codeberg.org/Alex619829
- https://codeberg.org/alextecplayz
- https://codeberg.org/aloxlamm
- https://codeberg.org/amartinz
- https://codeberg.org/amoroso
- https://codeberg.org/andrewrk
- https://codeberg.org/AnsisMalins
- https://codeberg.org/apteryx
- https://codeberg.org/Artiman
- https://codeberg.org/artnay
- https://codeberg.org/ashimokawa
- https://codeberg.org/Atalanttore
- https://codeberg.org/atticus-sullivan
- https://codeberg.org/AverageHelper
- https://codeberg.org/axka
- https://codeberg.org/bagder
- https://codeberg.org/bartavi
- https://codeberg.org/BaumiCoder
- https://codeberg.org/becm
- https://codeberg.org/Beowulf
- https://codeberg.org/bespinas
- https://codeberg.org/bkil
- https://codeberg.org/bodsch
- https://codeberg.org/bojidar-bg
- https://codeberg.org/brano
- https://codeberg.org/brigsi
- https://codeberg.org/brook
- https://codeberg.org/BtbN
- https://codeberg.org/chavacava
- https://codeberg.org/chlorine
- https://codeberg.org/Chucky2401
- https://codeberg.org/ClemaX
- https://codeberg.org/cmuench
- https://codeberg.org/consteval
- https://codeberg.org/Crizomb
- https://codeberg.org/Crown0815
- https://codeberg.org/CSDUMMI
- https://codeberg.org/cybra
- https://codeberg.org/dallyger
- https://codeberg.org/dani-schroeter
- https://codeberg.org/danielep
- https://codeberg.org/darkswordreams
- https://codeberg.org/Daschi
- https://codeberg.org/dawe
- https://codeberg.org/dbushell
- https://codeberg.org/denn_moe
- https://codeberg.org/dharsanb
- https://codeberg.org/diraneyya
- https://codeberg.org/Dirk
- https://codeberg.org/dmowitz
- https://codeberg.org/dnsnet-mdrescher
- https://codeberg.org/dovah-kiin
- https://codeberg.org/drewcassidy
- https://codeberg.org/DrRac27
- https://codeberg.org/drweissbrot
- https://codeberg.org/dss
- https://codeberg.org/dvonessen
- https://codeberg.org/earl-warren
- https://codeberg.org/Edgarsons
- https://codeberg.org/EifionLlwyd
- https://codeberg.org/eli-schwartz
- https://codeberg.org/eludendil
- https://codeberg.org/Ember
- https://codeberg.org/Empyrean
- https://codeberg.org/ernest314
- https://codeberg.org/ewin
- https://codeberg.org/f00
- https://codeberg.org/famfo
- https://codeberg.org/fiesh
- https://codeberg.org/Fjuro
- https://codeberg.org/fkiraly
- https://codeberg.org/floss4good
- https://codeberg.org/fnetX
- https://codeberg.org/fogti
- https://codeberg.org/fpedrei
- https://codeberg.org/fr0zi
- https://codeberg.org/Frankkkkk
- https://codeberg.org/freelock
- https://codeberg.org/fsievers
- https://codeberg.org/GGORG
- https://codeberg.org/Gnaaarwhal
- https://codeberg.org/greghellings
- https://codeberg.org/gridhead
- https://codeberg.org/Gusted
- https://codeberg.org/hailey
- https://codeberg.org/hails
- https://codeberg.org/halvin
- https://codeberg.org/HankB
- https://codeberg.org/HarHarLinks
- https://codeberg.org/hazy
- https://codeberg.org/hb0nd
- https://codeberg.org/Hill-98
- https://codeberg.org/Hiraku
- https://codeberg.org/holtwick
- https://codeberg.org/iago
- https://codeberg.org/ikks
- https://codeberg.org/infinoid
- https://codeberg.org/itinerare
- https://codeberg.org/JakobDev
- https://codeberg.org/jank1619
- https://codeberg.org/janw
- https://codeberg.org/jelu
- https://codeberg.org/jerger
- https://codeberg.org/JL710
- https://codeberg.org/JohnMoon-VTS
- https://codeberg.org/johnnyjayjay
- https://codeberg.org/jorams
- https://codeberg.org/jrtcdbrg
- https://codeberg.org/js
- https://codeberg.org/JSylvia007
- https://codeberg.org/justbispo
- https://codeberg.org/jutty
- https://codeberg.org/KaKi87
- https://codeberg.org/kampka
- https://codeberg.org/kavash
- https://codeberg.org/kbruen
- https://codeberg.org/kerbless
- https://codeberg.org/kevincox
- https://codeberg.org/kita
- https://codeberg.org/kot
- https://codeberg.org/kpfleming
- https://codeberg.org/laosb
- https://codeberg.org/Laxystem
- https://codeberg.org/LecrisUT
- https://codeberg.org/lenikadali
- https://codeberg.org/lever1209
- https://codeberg.org/lfavole
- https://codeberg.org/lgierth
- https://codeberg.org/lord_of_the_dumpster
- https://codeberg.org/LordMZTE
- https://codeberg.org/Lunar8982
- https://codeberg.org/LWFlouisa
- https://codeberg.org/Lzebulon
- https://codeberg.org/mactynow
- https://codeberg.org/MaddinM
- https://codeberg.org/mahlzahn
- https://codeberg.org/Maks1mS
- https://codeberg.org/MalcolmMielle
- https://codeberg.org/margau
- https://codeberg.org/martinwguy
- https://codeberg.org/matrss
- https://codeberg.org/megakeegman
- https://codeberg.org/mengzhuo
- https://codeberg.org/MerlijnWajer
- https://codeberg.org/mfenniak
- https://codeberg.org/mfocko
- https://codeberg.org/mfxa
- https://codeberg.org/micw
- https://codeberg.org/MinimalMatt
- https://codeberg.org/mlncn
- https://codeberg.org/mnalis
- https://codeberg.org/mokapot
- https://codeberg.org/moritzdietz
- https://codeberg.org/msfjarvis
- https://codeberg.org/msrd0
- https://codeberg.org/Mynacol
- https://codeberg.org/mysticmode
- https://codeberg.org/n0toose
- https://codeberg.org/nasmevka
- https://codeberg.org/neox-libre
- https://codeberg.org/NickP
- https://codeberg.org/Nightfirecat
- https://codeberg.org/nnuuvv
- https://codeberg.org/nrb
- https://codeberg.org/oatbiscuits
- https://codeberg.org/oliverpool
- https://codeberg.org/omenos
- https://codeberg.org/oscarotero
- https://codeberg.org/Outbreak2096
- https://codeberg.org/paspflue
- https://codeberg.org/pat-s
- https://codeberg.org/patdyn
- https://codeberg.org/paultag
- https://codeberg.org/pboguslawski
- https://codeberg.org/pennersr
- https://codeberg.org/Pneuma
- https://codeberg.org/poVoq
- https://codeberg.org/privacy1st
- https://codeberg.org/PrivateNoob
- https://codeberg.org/programmerjake
- https://codeberg.org/psii
- https://codeberg.org/r-pufky
- https://codeberg.org/RaphGL
- https://codeberg.org/rdfm
- https://codeberg.org/redbeard
- https://codeberg.org/renken
- https://codeberg.org/Rirusha
- https://codeberg.org/RMM
- https://codeberg.org/rmoriz
- https://codeberg.org/RokeJulianLockhart
- https://codeberg.org/rolandd
- https://codeberg.org/ruuda
- https://codeberg.org/s1m
- https://codeberg.org/salif
- https://codeberg.org/sclu1034
- https://codeberg.org/scMarkus
- https://codeberg.org/sdht0
- https://codeberg.org/senekor
- https://codeberg.org/Shuroii
- https://codeberg.org/sirhectorin
- https://codeberg.org/Skyper
- https://codeberg.org/slatian
- https://codeberg.org/smartclip_tim
- https://codeberg.org/snematoda
- https://codeberg.org/soc
- https://codeberg.org/SomeTr
- https://codeberg.org/Squel
- https://codeberg.org/stratself
- https://codeberg.org/Sylphrena
- https://codeberg.org/szethh
- https://codeberg.org/tacaly
- https://codeberg.org/tcpipuk
- https://codeberg.org/techokami
- https://codeberg.org/thezzisu
- https://codeberg.org/thibaulltt
- https://codeberg.org/thisismissem
- https://codeberg.org/tofkamp
- https://codeberg.org/toras9000
- https://codeberg.org/tragivictoria
- https://codeberg.org/transitory
- https://codeberg.org/tuaris
- https://codeberg.org/tuxmaster
- https://codeberg.org/urda
- https://codeberg.org/valpackett
- https://codeberg.org/vandenoever
- https://codeberg.org/viceice
- https://codeberg.org/volkmnv
- https://codeberg.org/vpotyarkin
- https://codeberg.org/vtmocanu
- https://codeberg.org/waldyrious
- https://codeberg.org/wetneb
- https://codeberg.org/wickedsmoke
- https://codeberg.org/woodruffw
- https://codeberg.org/wucke13
- https://codeberg.org/Wuzzy
- https://codeberg.org/xlionjuan
- https://codeberg.org/xtex
- https://codeberg.org/zaid1442011
- https://codeberg.org/zhaofengli