Skip to content

feat: add Forgejo backend#7469

Merged
jdx merged 2 commits intojdx:mainfrom
roele:issues/6290
Jan 5, 2026
Merged

feat: add Forgejo backend#7469
jdx merged 2 commits intojdx:mainfrom
roele:issues/6290

Conversation

@roele
Copy link
Contributor

@roele roele commented Dec 21, 2025

First draft to add support for Forgejo as mentioned in #6290


Note

Adds first-class support for installing tools from Forgejo releases, aligned with GitHub/GitLab behavior.

  • New forgejo backend wired into UnifiedGitBackend: version listing, asset resolution (pattern or autodetect), and download/install with lockfile population (URL/checksum)
  • New src/forgejo.rs module: release/asset APIs with caching, pagination, and auth headers via FORGEJO_TOKEN/MISE_FORGEJO_ENTERPRISE_TOKEN; default API https://codeberg.org/api/v1
  • Backend plumbing: BackendType::Forgejo, factory routing to unified backend, default web URL derivation, headers selection, and enterprise API handling
  • Security: skip GitHub attestations/SLSA verification for Forgejo
  • Docs: add docs/dev-tools/backends/forgejo.md and sidebar/index entries
  • Tests: e2e/backend/test_forgejo verifies install, platform-specific URLs, and mise.lock checksum/URL generation

Written by Cursor Bugbot for commit 881fffb. This will update automatically on new commits. Configure here.

tv: &ToolVersion,
file_path: &std::path::Path,
) -> std::result::Result<bool, VerificationStatus> {
if self.is_gitlab() || self.is_forgejo() {
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@jdx we might soon need a refactor to be able to support all the features in each implementation

# Test basic GitLab backend functionality with real tools
cat <<EOF >mise.toml
[tools]
"forgejo:roele/mise-test-fixtures" = { version = "1.0.0", asset_pattern = "hello-world-1.0.0.tar.gz", bin_path = "hello-world-1.0.0/bin", postinstall = "chmod +x \$MISE_TOOL_INSTALL_PATH/hello-world-1.0.0/bin/hello-world" }
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@jdx you probably might want to have your own fixtures repository on codeberg.org similar to gitlab.com?

@roele roele marked this pull request as ready for review December 31, 2025 08:27
Copilot AI review requested due to automatic review settings December 31, 2025 08:27
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR adds support for Forgejo as a new backend to mise, enabling users to install tools from Forgejo releases (such as those hosted on codeberg.org). The implementation follows the same pattern as the existing GitHub and GitLab backends, reusing the UnifiedGitBackend infrastructure.

Key Changes

  • Adds a new forgejo module with API client for Forgejo releases
  • Integrates Forgejo backend type into the backend system
  • Adds environment variables for Forgejo authentication (FORGEJO_TOKEN and MISE_FORGEJO_ENTERPRISE_TOKEN)

Reviewed changes

Copilot reviewed 10 out of 10 changed files in this pull request and generated 5 comments.

Show a summary per file
File Description
src/main.rs Adds the forgejo module declaration
src/forgejo.rs Implements Forgejo API client for fetching releases and assets
src/env.rs Adds environment variables for Forgejo token authentication
src/backend/mod.rs Registers Forgejo backend type in the backend factory
src/backend/github.rs Extends UnifiedGitBackend to handle Forgejo alongside GitHub and GitLab
src/backend/backend_type.rs Adds Forgejo as a new backend type enum variant
e2e/backend/test_forgejo Adds end-to-end tests for Forgejo backend functionality
docs/dev-tools/backends/index.md Adds Forgejo to the list of available backends
docs/dev-tools/backends/forgejo.md Comprehensive documentation for the Forgejo backend
docs/.vitepress/config.ts Adds Forgejo backend to the documentation navigation

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@roele roele force-pushed the issues/6290 branch 2 times, most recently from 92102d0 to fcf4bd9 Compare December 31, 2025 11:29
"forgejo:myorg/mytool" = "latest"
```

## Tool Options
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we should probably move this section out to a component which can be re-used for GitHub, GitLab and Forgejo

@roele roele force-pushed the issues/6290 branch 3 times, most recently from d6b54d4 to 756b9b8 Compare January 1, 2026 12:31
@jdx
Copy link
Owner

jdx commented Jan 4, 2026

Bugbot run

@jdx
Copy link
Owner

jdx commented Jan 5, 2026

bugbot run

@jdx jdx merged commit cfadc11 into jdx:main Jan 5, 2026
35 checks passed
@roele roele deleted the issues/6290 branch January 5, 2026 14:17
jdx pushed a commit that referenced this pull request Jan 7, 2026
### 🚀 Features

- **(hooks)** add tool context env vars to postinstall hooks by @jdx in
[#7521](#7521)
- **(sops)** support standard SOPS environment variables by @yordis in
[#7461](#7461)
- **(tasks)** Add disable_spec_from_run_scripts setting by @iamkroot in
[#7471](#7471)
- **(tasks)** Add task_show_full_cmd setting by @iamkroot in
[#7344](#7344)
- **(tasks)** enable naked task completions and ::: separator by @jdx in
[#7524](#7524)
- add Forgejo backend by @roele in
[#7469](#7469)
- override node bundled npm by specified version of npm by @risu729 in
[#7559](#7559)

### 🐛 Bug Fixes

- **(aqua)** fix tree-sitter bin path regression by @risu729 in
[#7535](#7535)
- **(ci)** exclude subcrate tags from release workflow by @jdx in
[#7517](#7517)
- **(e2e)** remove hardcoded year from version check by @jdx in
[#7584](#7584)
- **(github)** asset matcher does not handle mixed archive/binary assets
properly by @roele in [#7566](#7566)
- **(github)** prioritize .zip on windows by @risu729 in
[#7568](#7568)
- **(github)** prefer .zip over non-archive extensions on linux by
@risu729 in [#7587](#7587)
- **(npm)** always use hoisted installs of bun by @sushichan044 in
[#7542](#7542)
- **(npm)** suppress NPM_CONFIG_UPDATE_NOTIFIER by @risu729 in
[#7556](#7556)
- **(registry)** fix biome test to handle version prefix by @jdx in
[#7585](#7585)
- **(tasks)** load monorepo task dirs without config by @matixlol in
[#7478](#7478)
- force reshim when windows_shim_mode is hardlink by @roele in
[#7537](#7537)
- simple .tar files are not extracted properly by @roele in
[#7567](#7567)
- quiet kerl update output by @iloveitaly in
[#7467](#7467)

### 📚 Documentation

- **(registry)** remove ubi backend from preferred backends list by
@risu729 in [#7555](#7555)
- **(tasks)** remove advanced usage specs sections from toml-tasks.md by
@risu729 in [#7538](#7538)
- fix invalid config section `[aliases]` by @muzimuzhi in
[#7518](#7518)
- Fix path to GitLab backend source by @henrebotha in
[#7529](#7529)
- Fix path to GitLab backend source by @henrebotha in
[#7531](#7531)
- update `mise --version` output by @muzimuzhi in
[#7530](#7530)

### 🧪 Testing

- **(win)** use pester in backend tests by @risu729 in
[#7536](#7536)
- update e2e tests to use `[tool_alias]` instead of `[alias]` by
@muzimuzhi in [#7520](#7520)

### 📦️ Dependency Updates

- update alpine:edge docker digest to ea71a03 by @renovate[bot] in
[#7545](#7545)
- update docker/setup-buildx-action digest to 8d2750c by @renovate[bot]
in [#7546](#7546)
- update ghcr.io/jdx/mise:copr docker digest to 23f4277 by
@renovate[bot] in [#7548](#7548)
- update ghcr.io/jdx/mise:alpine docker digest to 0adc211 by
@renovate[bot] in [#7547](#7547)
- lock file maintenance by @renovate[bot] in
[#7211](#7211)
- lock file maintenance by @renovate[bot] in
[#7572](#7572)
- replace dependency @tsconfig/node18 with @tsconfig/node20 by
@renovate[bot] in [#7543](#7543)
- replace dependency @tsconfig/node20 with @tsconfig/node22 by
@renovate[bot] in [#7544](#7544)

### 📦 Registry

- add zarf by @joonas in [#7525](#7525)
- update aws-vault to maintained fork by @h3y6e in
[#7527](#7527)
- fix claude backend http for windows-x64 by @granstrand in
[#7540](#7540)
- add sqlc by @phm07 in [#7570](#7570)
- use spm backend for swift-package-list by @risu729 in
[#7569](#7569)
- add npm (npm:npm) by @risu729 in
[#7557](#7557)
- add github backend for tmux by @ll-nick in
[#7472](#7472)

### Chore

- **(release)** update Changelog for v2025.12.13 by @muzimuzhi in
[#7522](#7522)

### New Contributors

- @ll-nick made their first contribution in
[#7472](#7472)
- @sushichan044 made their first contribution in
[#7542](#7542)
- @phm07 made their first contribution in
[#7570](#7570)
- @granstrand made their first contribution in
[#7540](#7540)
- @h3y6e made their first contribution in
[#7527](#7527)
- @matixlol made their first contribution in
[#7478](#7478)

## 📦 Aqua Registry Updates

#### New Packages (9)

- [`anomalyco/opencode`](https://github.com/anomalyco/opencode)
- [`astral-sh/ty`](https://github.com/astral-sh/ty)
- [`github/copilot-cli`](https://github.com/github/copilot-cli)
- [`github/gh-ost`](https://github.com/github/gh-ost)
- [`golangci/golines`](https://github.com/golangci/golines)
- [`jamf/Notifier`](https://github.com/jamf/Notifier)
- [`microsoft/vscode/code`](https://github.com/microsoft/vscode/code)
- [`pranshuparmar/witr`](https://github.com/pranshuparmar/witr)
- [`spinel-coop/rv`](https://github.com/spinel-coop/rv)

#### Updated Packages (37)

- [`FiloSottile/age`](https://github.com/FiloSottile/age)
- [`alvinunreal/tmuxai`](https://github.com/alvinunreal/tmuxai)
- [`aquasecurity/starboard`](https://github.com/aquasecurity/starboard)
- [`aristocratos/btop`](https://github.com/aristocratos/btop)
- [`biomejs/biome`](https://github.com/biomejs/biome)
- [`bootandy/dust`](https://github.com/bootandy/dust)
- [`borgbackup/borg`](https://github.com/borgbackup/borg)
- [`bvaisvil/zenith`](https://github.com/bvaisvil/zenith)
- [`cri-o/cri-o`](https://github.com/cri-o/cri-o)
- [`cubefs/cubefs`](https://github.com/cubefs/cubefs)
-
[`domoritz/arrow-tools/csv2arrow`](https://github.com/domoritz/arrow-tools/csv2arrow)
-
[`domoritz/arrow-tools/csv2parquet`](https://github.com/domoritz/arrow-tools/csv2parquet)
-
[`domoritz/arrow-tools/json2arrow`](https://github.com/domoritz/arrow-tools/json2arrow)
-
[`domoritz/arrow-tools/json2parquet`](https://github.com/domoritz/arrow-tools/json2parquet)
- [`fission/fission`](https://github.com/fission/fission)
- [`folbricht/desync`](https://github.com/folbricht/desync)
- [`go-acme/lego`](https://github.com/go-acme/lego)
- [`gohugoio/hugo`](https://github.com/gohugoio/hugo)
-
[`gohugoio/hugo/hugo-extended`](https://github.com/gohugoio/hugo/hugo-extended)
-
[`golang.org/x/perf/cmd/benchstat`](https://github.com/golang.org/x/perf/cmd/benchstat)
- [`gsamokovarov/jump`](https://github.com/gsamokovarov/jump)
-
[`haskell/cabal/cabal-install`](https://github.com/haskell/cabal/cabal-install)
- [`kptdev/kpt`](https://github.com/kptdev/kpt)
- [`kubescape/kubescape`](https://github.com/kubescape/kubescape)
- [`mas-cli/mas`](https://github.com/mas-cli/mas)
- [`maxpert/marmot`](https://github.com/maxpert/marmot)
- [`mistakenelf/fm`](https://github.com/mistakenelf/fm)
- [`psf/black`](https://github.com/psf/black)
- [`redpanda-data/connect`](https://github.com/redpanda-data/connect)
- [`rest-sh/restish`](https://github.com/rest-sh/restish)
- [`saucelabs/forwarder`](https://github.com/saucelabs/forwarder)
- [`sethvargo/ratchet`](https://github.com/sethvargo/ratchet)
- [`stackrox/kube-linter`](https://github.com/stackrox/kube-linter)
- [`steveyegge/beads`](https://github.com/steveyegge/beads)
- [`suzuki-shunsuke/rgo`](https://github.com/suzuki-shunsuke/rgo)
- [`txn2/kubefwd`](https://github.com/txn2/kubefwd)
- [`zyedidia/micro`](https://github.com/zyedidia/micro)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants