Forgejo v16.0 已发布

Lobsters Hottest 产品

摘要

Forgejo v16.0 已发布,引入了重大变更,包括对镜像的SSRF加固、因许可问题移除EXIF剥离,以及容器中受信任代理设置的更改。

<p><a href="https://lobste.rs/s/giyb8x/forgejo_v16_0_is_available">评论</a></p>
查看原文
查看缓存全文

缓存时间: 2026/07/16 11:55

# Forgejo v16.0 现已发布 来源:https://forgejo.org/2026-07-release-v16-0/ Forgejo 16.0 版本 (https://forgejo.org/download/) 于 2026 年 7 月 16 日正式发布。Forgejo 是一个轻量级、由社区开发、可自托管的代码协作平台。 本文精选了部分引入的变更。完整的变更列表请参见发布说明 (https://codeberg.org/forgejo/forgejo/milestone/70071)。 专用测试实例 (https://v16.next.forgejo.org/) 已可用于试用。在升级之前,*强烈建议*按照升级指南 (https://forgejo.org/docs/v16.0/admin/upgrade/) 中的说明进行完整备份,并仔细阅读发布说明 (https://codeberg.org/forgejo/forgejo/src/branch/forgejo/release-notes-published/16.0.0.md) 中的*所有破坏性变更*。如有疑问,请随时在聊天室 (https://matrix.to/#/#forgejo-chat:matrix.org) 寻求帮助。 ## 破坏性变更 https://forgejo.org/2026-07-release-v16-0/#breaking-changes ### 强化镜像功能以防御 SSRF https://forgejo.org/2026-07-release-v16-0/#hardening-mirrors-against-ssrf 管理员可通过配置项 `[migrations].ALLOWED_DOMAINS/LOCKED_DOMAINS/ALLOW_LOCALNETWORKS` 确定 Forgejo 在进行 Git 镜像时可访问的主机。然而,存在一些边缘情况导致这些设置无效。此版本已修复多项此类问题 (https://codeberg.org/forgejo/forgejo/pulls/13129)。 其中一种边缘情况涉及 Git 通过 HTTP(S) 访问仓库,此时 Git 会跟随 HTTP 重定向,从而绕过上述配置项的限制。现已设置 Git 选项 `http.followRedirects=false`,阻止 Git 跟随这些重定向。 涉及已重命名或已转移所有权的远程 Forgejo 仓库的镜像操作会触发重定向,这些重定向现在将被视为错误。必须将这些镜像更新到新的仓库位置。 ### 移除 EXIF 数据剥离功能 https://forgejo.org/2026-07-release-v16-0/#exif-stripping-removed Forgejo v13.0 增加了在上传用户头像时自动去除 EXIF 元数据的功能。不幸的是,这导致了一个许可错误——Forgejo 依赖了一个 AGPL 许可证的库来实现此功能。在寻求其他替代方案的同时,Forgejo 已移除该功能 (https://codeberg.org/forgejo/forgejo/pulls/13105),以确保许可证合规。 ### 容器中的受信任代理设置 https://forgejo.org/2026-07-release-v16-0/#trusted-proxies-setting-in-containers Forgejo 容器默认配置了 `REVERSE_PROXY_TRUSTED_PROXIES = *`。如果 Forgejo 系统管理员将容器环境变量 `FORGEJO__service__ENABLE_REVERSE_PROXY_AUTHENTICATION` 设置为 `true`,*并且*未授权用户能够绕过执行认证的反向代理直接访问 Forgejo,那么未授权用户就可以利用 `X-WebAuth-User` HTTP 头冒充任意用户。 虽然这种配置组合不太常见,但更稳妥的做法是要求系统管理员为 `REVERSE_PROXY_TRUSTED_PROXIES` 选择一个合适的值。即使在容器化环境中,如果使用了防火墙级别的网络策略(例如,使用 Docker 的 iptables 功能 (https://docs.docker.com/engine/network/firewall-iptables/),这也是 2026 年 Docker 安装的常见默认配置),该值仍然可以安全地使用并设置为合理的值。 如果你要升级到 Forgejo v16,并且: - 使用容器化部署(例如 Docker 或 Podman) - **并且** 已将 `[service].ENABLE_REVERSE_PROXY_AUTHENTICATION` 配置选项设置为 `true` - **并且** **没有**覆盖 `[security].REVERSE_PROXY_TRUSTED_PROXIES` 配置选项(容器镜像中默认设置为 `*`) - **并且** Forgejo Web 端口(默认为 `:3000`)暴露给了不受信任的网络,允许绕过反向代理 那么 Forgejo 将不再遵循你的反向代理配置。你必须将 `[security].REVERSE_PROXY_TRUSTED_PROXIES` 设置为你信任的反向代理流量来源的地址列表;例如: - 使用环境变量:`FORGEJO__security__REVERSE_PROXY_TRUSTED_PROXIES=127.0.0.0/8,::1/128,172.16.X.X/X` - 或者在 `app.ini` 配置文件中:`[security] ... REVERSE_PROXY_TRUSTED_PROXIES=127.0.0.0/8,::1/128,172.16.X.X/X ...` ## 新功能 https://forgejo.org/2026-07-release-v16-0/#new-features ### 细粒度的仓库关注设置 https://forgejo.org/2026-07-release-v16-0/#granular-repository-watch-settings Forgejo 在改进通知方面取得了重大进展。现在用户可以选择接收仓库中哪些部分的通知!目前有三个类别:议题(Issues)、拉取请求(Pull requests)和发布(Releases)。然而,重新设计后的通知后端为进一步细化奠定了基础。Forgejo 希望让用户掌控自己的通知,同时又不让他们被过多的选项淹没。如果你对通知控制机制有想法或建议,请加入议题 (https://codeberg.org/forgejo/forgejo/issues) 中的讨论。 仓库关注菜单中细粒度选项的截图 ### 仓库迁移进度 https://forgejo.org/2026-07-release-v16-0/#repository-migration-progress 仓库迁移界面 现在会显示迁移的进度 (https://codeberg.org/forgejo/forgejo/pulls/12738)。它会分批显示从源迁移的议题和拉取请求的进度。这有助于验证长时间运行的迁移是否卡住。 默认批次大小为 45,这是能显示进度的最小项数。 屏幕截图,显示文字:“正在从“仓库 URL”迁移,已迁移 270 个议题” ### 缩小版头像变体 https://forgejo.org/2026-07-release-v16-0/#downsized-avatar-variants 现在,在所有不需要完整尺寸的地方,会生成并提供两种缩小版头像变体 (https://codeberg.org/forgejo/forgejo/pulls/11242),取代原先的大尺寸主头像,从而减少带宽使用并提高加载速度。 ### 更简便的添加团队成员方式 https://forgejo.org/2026-07-release-v16-0/#easier-way-to-add-team-members 向组织添加成员 变得更加简便 (https://codeberg.org/forgejo/forgejo/pulls/11848),这得益于一个可直接在组织成员列表上访问的对话框。这个对话框还允许你将新成员一次性添加到组织的多个团队中。 模态对话框截图,标题为“添加成员”,包含“用户”字段和多个带有团队名称的复选框选项 ### 传入对象的一致性检查 https://forgejo.org/2026-07-release-v16-0/#consistency-check-of-incoming-objects Git 现已配置为 (https://codeberg.org/forgejo/forgejo/pulls/12695) 检查传入对象的各类不一致问题,并拒绝这些对象,以防止仓库进入不一致或损坏状态。 ### 防止在仓库中放置 Git 钩子示例 https://forgejo.org/2026-07-release-v16-0/#prevent-git-hook-examples-in-repositories Forgejo 不再 (https://codeberg.org/forgejo/forgejo/pulls/12335) 在后端仓库中放置 Git 的示例钩子文件。此外,实例级别的 Git 钩子 现在存储在一个集中位置 (https://codeberg.org/forgejo/forgejo/pulls/10397),而不是在每个仓库中重复。这两项变更加起来,每个仓库大约可节省 20 KiB 的存储空间。在大型部署中,节省量可观! 可以根据升级指南 (https://forgejo.org/docs/v16.0/admin/upgrade/#hooks) 删除现有仓库中的示例和重复的自动生成文件。 ### 仓库单元提示 https://forgejo.org/2026-07-release-v16-0/#repository-units-hint 关于添加可用仓库单元的提示最初在 Forgejo v7.0.0 中添加,但由于一个 bug,它没有向新注册的用户显示,只对在实例升级到 Forgejo v7.0.0 之前就已存在的用户显示。此 bug 现已修复 (https://codeberg.org/forgejo/forgejo/pulls/12565)。 虽然这个提示是为初学者设计的,但更有经验的用户可能不希望看到它。现在更容易发现 (https://codeberg.org/forgejo/forgejo/pulls/10397) 在哪里可以禁用这些提示。 请注意,“启用更多”提示只有在某些仓库单元被禁用时才会显示。默认情况下,所有单元都是启用的,因此只有当实例管理员或仓库所有者明确禁用了某些单元时,该提示才会出现。 ## 拉取请求改进 https://forgejo.org/2026-07-release-v16-0/#pull-requests-improvements ### 重新设计的提交视图 https://forgejo.org/2026-07-release-v16-0/#redesigned-commits-view 提交列表 采用了新的布局 (https://codeberg.org/forgejo/forgejo/pulls/7948)。更简洁,更易读,并且对不同屏幕尺寸的响应更好。 目前,这个新布局**仅用于拉取请求页面**,但计划逐步推广到其他包含提交列表的页面。 拉取请求“提交”选项卡的截图,显示按日期分组的各种提交 ### 多行评审 https://forgejo.org/2026-07-release-v16-0/#multi-line-reviews Forgejo 现在支持 (https://codeberg.org/forgejo/forgejo/pulls/12582) 在拉取请求中 对多行文本 (https://forgejo.org/docs/v16.0/user/pull-requests-and-git-flow/#reviews) 添加评审评论。要一次评论多行,请按住 **Shift**,点击要评论范围的第一行旁边的加号按钮,然后向下拖曳到最后一行动,再松开。高亮显示的行将附加到同一评论中。 在拉取请求中放置代码评审评论时,有时会出现评论关联的 diff 错误、没有关联 diff、或者在 UI 中位置错误等令人沮丧的问题,这些问题已在 Forgejo 16 中得到解决。 处理的主要问题包括: - Forgejo 在拉取请求评审中放置评论时,会使用 `git blame` 来确定被评论的代码行是由哪个提交引入的。这使得该评论可以在拉取请求查看的任何提交上显示(如果相关),即使评论最初是在较晚的提交上输入的。但是,当代码行在后续提交中移动时,评论会被错误放置。引入内部 `git blame --reverse` 来跟踪变更到当前的位置,解决了这个问题。 - 改进了根据评审者正在查看的代码来放置评论的实现,而不是根据拉取请求当前的 HEAD。在查看整个拉取请求和查看单个提交时,UI 错误都导致正在查看的内容被错误跟踪。 - 对已删除代码行的评论无法执行 `git blame` 操作,因为该代码行已不在提交中,而是通过被评论的确切代码行来跟踪。这导致当拉取请求中的后续提交移动了文件中的代码行时,这些评论无法正确显示。评论现在使用 `git blame --reverse` 来确定代码行何时被删除,验证该代码行在当前 diff 的相同位置仍然被删除,然后正确放置评论(或将其标记为“过时”)。 更多技术细节,请参阅以下拉取请求: - forgejo!12015 (https://codeberg.org/forgejo/forgejo/pulls/12015): 修复:使用 `git blame --reverse` 重新定位 PR 评审评论,改进评论放置 - forgejo!12054 (https://codeberg.org/forgejo/forgejo/pulls/12054): 修复:根据当前 PR 提交中代码行的存在性,将代码评论标记为 Outdated - forgejo!12107 (https://codeberg.org/forgejo/forgejo/pulls/12107): 修复:在 PR 中评审时,使评论相对于查看的 base 和 head,而不仅仅是查看的 head - forgejo!12055 (https://codeberg.org/forgejo/forgejo/pulls/12055): 修复:在 PR 中评审时,使评论相对于可见代码的提交 - forgejo!12092 (https://codeberg.org/forgejo/forgejo/pulls/12092): 修复:在 PR 视图中,将针对已删除代码行的代码评论显示到正确位置 ## Forgejo Actions 改进 https://forgejo.org/2026-07-release-v16-0/#forgejo-actions-improvements ### 手动工作流运行优先级 https://forgejo.org/2026-07-release-v16-0/#manual-workflow-run-prioritization Forgejo Actions 按触发顺序执行工作流。从 Forgejo v16 开始,可以手动将单个工作流运行标记为高优先级。Forgejo Actions 会优先执行高优先级的工作流运行,然后再执行其他运行。我们希望在未来的 Forgejo 版本中进一步优化此功能。请尝试该功能并反馈 (https://codeberg.org/forgejo/forgejo/issues/12830)。 在 Forgejo v15 中,Forgejo Actions 获得了生成 JWT (https://forgejo.org/2026-04-release-v15-0/#openid-connect-identity) 的能力,外部系统可以验证该 JWT 以进行身份认证。Forgejo v16 带来了该能力的另一面:授权集成 (https://forgejo.org/docs/latest/user/authorized-integrations/),允许 Forgejo 使用 JWT 对 API 和 Git 访问进行身份认证。 授权集成 可以从本地的 Forgejo Actions (https://forgejo.org/docs/latest/user/authorized-integrations/#forgejo-actions-local) 访问,也可以配置为一组规则 (https://forgejo.org/docs/latest/user/authorized-integrations/#generic-jwt),以允许 Forgejo 验证任意的 JWT。 此功能可作为在 Forgejo Actions 中实现 `permissions:` 声明的替代方案。授权集成可用于提升 `${{ forgejo.token }}` 提供的典型权限,无需配置(并在将来轮换)机密访问令牌,不会为工作流作者引入意外授予自身权限的风险,并且能够跨多个 Forgejo 仓库工作。 满足 Forgejo 技术要求 (https://forgejo.org/docs/latest/user/authorized-integrations/#technical-details) 的外部系统,也可以通过用户配置的授权集成直接访问 Forgejo API 和 Git 仓库,而无需在系统间配置任何静态密钥。此类系统的示例包括:Amazon Web Services (https://docs.aws.amazon.com/STS/latest/APIReference/API_GetWebIdentityToken.html)、GitHub Actions (https://docs.github.com/en/actions/concepts/security/openid-connect) 或 GitLab CI/CD (https://docs.gitlab.com/ci/secrets/id_token_authentication/) ### 其他值得注意的增强 https://forgejo.org/2026-07-release-v16-0/#other-notable-enhancements - forgejo!13030 (https://codeberg.org/forgejo/forgejo/pulls/13030):**Forgejo 中条件的评估**:如果可能,Forgejo 会直接评估 `if` 条件,而无需将任务分派给 Forgejo Runner。这加快了工作流的执行速度。 - forgejo!12478 (https://codeberg.org/forgejo/forgejo/pulls/12478):**删除旧的工作流运行**:已完成的工作流运行(包括日志和工件)可以通过 UI 或 HTTP API 删除。出于安全原因,只有仓库管理员或具有 `write:repository` 权限的访问令牌才能删除运行。 - **工作流语法增强**:`cron` 表达式支持 GitHub 的指定时区语法 (https://forgejo.org/docs/latest/user/actions/reference/#onschedule),以及 Forgejo 现有的语法(`cron: CRON_TZ=Europe/Berlin 0 10 * * *`)。 - forgejo!12606 (https://codeberg.org/forgejo/forgejo/pulls/12606):**跳过的检查标记为已跳过**:Forgejo 的早期版本会将其标记为已成功。 ## API 改进 https://forgejo.org/2026-07-release-v16-0/#api-improvements 非常受

相似文章

Forgejo v15.0 已发布

Lobsters Hottest

Forgejo v15.0 于 2026 年 4 月 16 日发布,迎来了第 100 次版本更新。本次发布带来了用户界面优化、安全性增强、仓库级访问令牌支持,以及更强大的 Forgejo Actions 功能(包括可复用工作流扩展和 OpenID Connect 支持)。

Forgejo 月度报告 - 2026年5月

Lobsters Hottest

Forgejo 2026年5月月度报告详细介绍了 v15 LTS 版本、v11 和 v14 的安全更新以及 Forgejo Runner 的更新。v14 支持已结束,v11 支持也即将结束,建议用户升级。

Forge

Lobsters Hottest

Forge 是一个全新的 CLI 与 Go 库,通过统一接口和自动 forge 检测,一次性打通 GitHub、GitLab、Bitbucket 与 Gitea/Forgejo 的交互。

深入剖析我的 Forgejo 配置

Lobsters Hottest

详细指南:如何自托管 Forgejo 实例以替代 GitHub,涵盖技术栈、CI/CD 性能提升及配置。