跳到主要内容

Gitea 1.27.0 发布

· 阅读需 49 分钟
bircni
Technical Oversight Committee
本文由 AI 翻译,如有歧义请以 英文原文 为准。
1.27.0Release

我们很高兴宣布 Gitea 最新版本 v1.27.0 正式发布。

Gitea 1.27.0 带来了令人振奋的新功能、性能改进以及质量提升。同时,该版本还包含了大量安全修复,因此我们强烈建议您尽快升级——详情请参阅安全部分。以下是 Gitea 1.27 中一些值得注意的变更和功能;完整列表请查看完整发布说明

我们非常感谢众多为项目做出贡献的人,包括提交代码补丁、报告工单、翻译以及以各种方式支持我们的人。

将 Gitea 1.27 与 Gitea Runner 2.0.0 搭配使用

此版本中的多个 Actions 功能需要与 runner 协商能力。要获取作业摘要、过渡性的 Cancelling 作业状态以及正确的 continue-on-error 聚合,请将您的 runner 升级到 Gitea Runner 2.0.0。Gitea 与旧版 runner 保持兼容——当 runner 未声明支持某项功能时,Gitea 会直接跳过该功能。需要新版 runner 的功能点将在下文用 🔧 需要 Gitea Runner 2.0.0 标注。

安全

此版本修复了以下安全漏洞,请尽快升级。

  • CVE-2026-58443:仅限公共仓库的令牌可以更新私有合并请求的源分支。已由 #38406 修复。感谢 @ohxorud-dev 报告此问题,以及 @bircni 提供补丁。
  • CVE-2026-58433:团队-仓库关联端点绕过了 RepoAdminChangeTeamAccess 组织设置。已由 #38324 修复。感谢 @de3erve 报告此问题,以及 @bircni 提供补丁。
  • CVE-2026-58435:通过 LFS 部署密钥实现权限提升。已由 #38322 修复。感谢 @adrian-doyensec 报告此问题,以及 @bircni 提供补丁。
  • CVE-2026-58436:通过 Accept-Language 标头的二次时间解析造成的未认证拒绝服务。已由 #38323 修复。感谢 @tonghuaroot 报告此问题,以及 @bircni 提供补丁。
  • CVE-2026-58437:可通过 Git 推送选项操纵仓库可见性。已由 #38323 修复。感谢 @prakhar0x01 报告此问题,以及 @bircni 提供补丁。
  • CVE-2026-58439:分支保护绕过 — 重新指定合并请求目标会保留过时的 official 审批标记。已由 #38319 修复。感谢 @yonatan-pl 报告此问题,以及 @bircni 提供补丁。
  • CVE-2026-54481:内部 API HTTP 客户端不再跳过 TLS 证书验证。已由 #38406 修复。感谢 @sanil18 报告此问题,以及 @bircni 提供补丁。
  • CVE-2026-55987:在未签发刷新令牌的认证来源上,OAuth2 登录可能重新激活已被管理员停用的账户。已由 #38406 修复。感谢 @khoadb175 报告此问题,以及 @bircni 提供补丁。
  • CVE-2026-57894:仓库迁移在 URL 允许/阻止验证后仍跟随 Git HTTP 重定向,可能导致内部仓库外泄。已由 #38320 修复。感谢 @cyberlanc3r 报告此问题,以及 @bircni 提供补丁。
  • CVE-2026-58314:仓库迁移中存在的两个 SSRF 问题。已由 #38406 修复。感谢 @xclow3n 报告此问题,以及 @bircni 提供补丁。
  • CVE-2026-59765:通过迁移资源下载进行的 SSRF 攻击,绕过了主机匹配器,可读取内部文件和云元数据。已由 #38406 修复。感谢 @tikket1@theluckystrike@Letian-aarch64@JebeenLee@JLLeitschuh@pick@noobx123 报告此问题,以及 @bircni 提供补丁。
  • CVE-2026-58416:Fork 仓库的合并请求 Actions 任务可通过协作所有者的分支读取第三方私有仓库。已由 #38214 修复。感谢 @CassianStarck 报告此问题,以及 @bircni 提供补丁。
  • CVE-2026-58420:迁移恢复中通过 file:// URI 进行的本地文件包含。已由 #38215 修复。感谢 @isa0-gh 报告此问题,以及 @bircni 提供补丁。
  • CVE-2026-58425:OAuth 令牌自省返回了发给其他客户端的令牌元数据。已由 #38042 修复。感谢 @bl4cksku11 报告此问题,以及 @lunny 提供补丁。
  • CVE-2026-58427:可通过 /members API 端点泄露私有组织成员列表。已由 #38213 修复。感谢 @Razzlemouse 报告此问题,以及 @bircni 提供补丁。
  • CVE-2026-58428:发布附件扩展名允许列表可通过 Web 发布编辑表单绕过。已由 #38314 修复。感谢 @bl4cksku11 报告此问题,以及 @lunny 提供补丁。
  • CVE-2026-58429:仅限公共范围的个人访问令牌可能绕过组织和权限端点的范围限制。已由 #38323 修复。感谢 @Pcat2003 报告此问题,以及 @bircni 提供补丁。
  • CVE-2026-58431:公共范围 API 令牌限制未在团队 API 路由上强制执行。已由 #38323 修复。感谢 @rmb122 报告此问题,以及 @bircni 提供补丁。
  • CVE-2026-58432:缺少授权检查,允许通过用户控制的键访问敏感资源。已由 #38318 修复。感谢 @z3r0s6 报告此问题,以及 @bircni 提供补丁。
  • CVE-2026-58438:在移除工单依赖项时存在跨仓库 IDOR,攻击者可以篡改并评论其无权访问的私有仓库。已由 #38324 修复。感谢 @de3erve 报告此问题,以及 @bircni 提供补丁。
  • CVE-2026-58440:在协作者的仓库访问权限被撤销后,该协作者创建的 Webhook 仍会触发。已由 #38324 修复。感谢 @sec-reex 报告此问题,以及 @bircni 提供补丁。
  • CVE-2026-58441:restore-repo 中通过未净化的克隆 URL 进行的 SSRF。已由 #38324 修复。感谢 @yoojoon2 报告此问题,以及 @bircni 提供补丁。
  • CVE-2026-58442:通过多应答 DNS 允许列表绕过实现的仓库迁移 SSRF。已由 #38324 修复。感谢 @Tomer-PL 报告此问题,以及 @bircni 提供补丁。
  • CVE-2026-58444:仓库首页上的个人访问令牌范围强制执行绕过,可能泄露私有仓库内容。已由 #38406 修复。感谢 @StarPlatinu 报告此问题,以及 @bircni 提供补丁。
  • CVE-2026-42931:npm 软件包标签端点中无限制的请求体读取导致拒绝服务。已由 #38406 修复。感谢 @Tricta 报告此问题,以及 @bircni 提供补丁。
  • CVE-2026-50105:RSS/Atom 提处理程序绕过了 API 令牌范围和公共范围限制。已由 #38406 修复。感谢 @CassianStarck 报告此问题,以及 @bircni 提供补丁。
  • CVE-2026-55982:OIDC userinfo 端点返回身份声明时未强制执行 API 令牌范围。已由 #38406 修复。感谢 @ybsun0215 报告此问题,以及 @bircni 提供补丁。
  • CVE-2026-55986:电子邮件管理 API 绕过了管理凭据功能限制。已由 #38406 修复。感谢 @martijnperdaan52 报告此问题,以及 @bircni 提供补丁。
  • CVE-2026-56443:对具有受限可见性的所有者存在残留的公共范围令牌绕过。已由 #38323 修复。感谢 @JebeenLee@alecclyde 报告此问题,以及 @bircni 提供补丁。
  • CVE-2026-56654:通过 API 中的访问令牌范围升级实现权限提升。已由 #38406 修复。感谢 @AdamKorcz@ohxorud-dev 报告此问题,以及 @bircni 提供补丁。
  • CVE-2026-56657:SSH 密钥解析器中的拒绝服务。已由 #38406 修复。感谢 @AdamKorcz 报告此问题,以及 @bircni 提供补丁。
  • CVE-2026-56755:Debian 软件包上传中的二次字符串拼接导致拒绝服务。已由 #38406 修复。感谢 @AdamKorcz 报告此问题,以及 @bircni 提供补丁。
  • CVE-2026-57886:重新关联跨仓库工单和评论文本附件可能泄露私有附件内容。已由 #38406 修复。感谢 @zulloper 报告此问题,以及 @bircni 提供补丁。
  • CVE-2026-57897:通过组织级别的 Actions 运行/任务 API 泄露跨仓库信息。已由 #38406 修复。感谢 @prakhar0x01 报告此问题,以及 @bircni 提供补丁。
  • CVE-2026-58507:通过 go-get 元数据端点暴露私有仓库存在性。已由 #38406 修复。感谢 @prakhar0x01 报告此问题,以及 @bircni 提供补丁。
  • CVE-2026-58508:迁移/镜像中的两个 SSRF 问题(DNS 重绑定和缺少重新验证)。已由 #38406 修复。感谢 @AmerMrkaljevic 报告此问题,以及 @bircni 提供补丁。
  • CVE-2026-58510:仓库监视清理修复未应用于 API EditRepo 路径,导致仓库变为私有时仍残留监视记录。已由 #38406 修复。感谢 @eddieran 报告此问题,以及 @bircni 提供补丁。
  • CVE-2026-59763:Arch 软件包文件元数据无限制可能导致软件包上传时的资源放大。已由 #38406 修复。感谢 @kkkh1 报告此问题,以及 @bircni 提供补丁。
  • CVE-2026-23603:OAuth2 头像同步中的 Blind SSRF,通过未经验证的 OIDC picture 声明实现。已由 #38406 修复。感谢 @alimezar 报告此问题,同时来自 @cwanglab@Vext-Labs@Medoedus@ffulbtech@theluckystrike@prakhar0x01@AnuragBathani@khoadb175 也提供了报告,以及 @bircni 提供补丁。
  • CVE-2026-58417:REST API 暴露了私有组织的成员信息。已由 #38145 修复。感谢 @maluff@Sai2r@mgelde 报告此问题,以及 @bircni 提供补丁。
  • CVE-2026-58434:在访问权限被撤销后,私有仓库元数据仍可访问。已由 #38321 修复。感谢 @ybsun0215 报告此问题,以及 @bircni 提供补丁。
  • CVE-2026-58445:删除工单标签 API 中存在跨仓库标签 ID 枚举 Oracle。已由 #38406 修复。感谢 @CassianStarck 报告此问题,以及 @bircni 提供补丁。
  • CVE-2026-55984:AddTime API 中的空指针解引用可导致经过身份验证的拒绝服务。已由 #38406 修复。感谢 @martijnperdaan52 报告此问题,以及 @bircni 提供补丁。
  • CVE-2026-56750:记住我的令牌未正确失效,允许会话复用。已由 #38406 修复。感谢 @AdamKorcz 报告此问题,以及 @bircni 提供补丁。
  • CVE-2026-58511:Webhook 授权标头通过 API 以明文形式返回。已由 #38406 修复。感谢 @theluckystrike@APhuongKMA 报告此问题,以及 @bircni 提供补丁。

此版本还包含以下额外的安全强化修复:

  • 被撤销的用户无法再通过用户 starred/times API 端点读取私有仓库对象或工单标题。已由 #38324 修复。感谢 @sec-reex 报告此问题,以及 @bircni 提供补丁。
  • 为软件包添加了私有/内部标签,并修复了 Composer 软件包源权限检查。已由 #37610 修复。感谢 @JoshBolding@sec-reex 报告此问题,以及 @lunny 提供补丁。
  • 通过 API 存储的 AWS 凭证现在已加密。已由 #37679 修复。感谢 @Exgene 提供补丁。
  • 已将 github.com/go-git/go-git/v5 更新至 v5.19.1,以包含上游安全修复 (#37786)。

我们感谢所有负责任地披露这些问题的安全研究人员。

如何更新

您可以从我们的 下载页面 获取。请阅读我们的 安装指南 了解更多安装信息。升级时,请一如既往地备份数据,然后替换二进制文件或 Docker 容器并重启。

特别感谢

我们谨向所有在 Open Collective 上资助项目的支持者致以谢意,是你们的支持让项目得以持续运转。

一如既往,变更按对用户及管理员的重要程度降序排列,最重要的更新会放在最前面。

想要无缝、省心地管理 Git 仓库?无需再找!Gitea Cloud 将彻底改变你的开发体验。

重大破坏性变更

⚠️ 将发布制品签名迁移至 sigstore (#38250)

Gitea 发布制品现在改用 sigstore 签名,替代了先前的 GPG 流程。如果您在部署流水线中验证下载的二进制文件或 Docker 镜像,请将验证步骤更新为基于 sigstore 的流程。

感谢 @TheFox0x7 贡献此变更。

⚠️ 改进了对可复用工作流的支持 (#37478)

使用 uses: 引用的可复用工作流现在由 Gitea 端解析,而非 runner。每个被调用的(子)作业将作为独立的 ActionRunJob 插入,并以独立任务的形式分发,因此被调用方的日志会作为单独的作业条目显示,而不是内联在调用方的“Set up job”步骤中。升级后,请检查依赖可复用工作流行为的工作流。

外部可复用工作流uses: https://other-gitea-instance/OWNER/REPO/.gitea/workflows/test.yaml@REF)不再受支持。如需继续使用,请将相关仓库克隆到本地实例,并在那里引用。

感谢 @Zettat123 贡献此变更。

⚠️ 使用 Content-Security-Policy 脚本随机数 (#37232)

现在,内联脚本通过每个请求唯一的 CSP 随机数来允许执行,而非使用宽松的策略。注入内联 <script> 标签的自定义模板、主题或嵌入内容可能会停止执行,需要更新以携带该随机数。升级后请检查自定义前端设置。

感谢 @wxiaoguang 贡献此变更。

⚠️ 默认发送 X-Content-Type-Options: nosniff (#37354)

所有响应现在都包含 X-Content-Type-Options: nosniff 标头,该标头可防止浏览器对响应进行 MIME 嗅探,从而偏离其声明的 Content-Type。如果反向代理、嵌入或自定义资源依赖于内容嗅探,可在 [security] 下设置 X_CONTENT_TYPE_OPTIONS = unset 以移除该标头,或根据需要覆盖其值。

感谢 @SAY-5 贡献此变更。

主要亮点(Actions)

🚀 可复用工作流现在是一等作业(#37478

通过 uses: 调用的工作流现在由 Gitea 自身解析,不再由 runner 解析。每个被调用的工作流都会展开为独立的作业,这些作业作为独立任务调度:它们在运行侧边栏中拥有自己的条目、自己的日志,并在依赖关系图中拥有自己的节点,嵌套在调用它们的作业下方。被调用方的输出不再内联到调用方的“设置作业”步骤中,因此可复用工作流内部的失败会直接指向失败的作业。嵌套调用(一个可复用工作流调用另一个)以同样方式工作,并且输出、输入和矩阵作业可以跨边界传播。

可复用工作流作业在运行侧边栏和依赖关系图中分别列出 展开的嵌套可复用工作流,每个都有自己的作业和日志

信息

这会改变现有行为——请参阅“破坏性变更”下的“改进了对可复用工作流的支持”。不再支持通过 URL 引用的外部可复用工作流(uses: https://other-instance/OWNER/REPO/...)。

感谢 @Zettat123 贡献了这个功能。

🚀 🔧 作业摘要——GITHUB_STEP_SUMMARY#37500

工作流步骤可以将 Markdown 写入 GITHUB_STEP_SUMMARY,Gitea 会在运行 摘要 视图中进行渲染。摘要存储在数据库中,而不是作为可下载的构件,后续的优化也使摘要界面更加丰富(#37824)。

信息

🔧 需要 Gitea Runner 2.0.0 才能上传摘要。Gitea 会宣告 job-summary 能力;如果使用较旧的 runner,则不会上传任何内容,摘要视图将保持空白。

在 Actions 运行摘要视图上渲染的 Markdown 作业摘要

感谢 @bircni 贡献了这个功能。

🚀 🔧 实现 jobs.<job_id>.continue-on-error#38100

continue-on-error 之前会从 YAML 中解析,但在计算运行总体状态时会被忽略,因此一个被容忍的作业失败仍可能导致整个运行失败。Gitea 现在会为每个作业存储该值,并在汇总工作流运行时将允许的失败视为成功,与 GitHub Actions 行为一致。

信息

🔧 需要 Gitea Runner 2.0.0 才能让 runner 允许作业失败;Gitea 1.27 提供了运行状态汇总功能。

感谢 @bircni 贡献了这个功能。

🚀 🔧 取消工作流时运行收尾/清理步骤(#37275

取消运行现在会执行运行后清理以及 always() / cancelled() 步骤,采用一个过渡性的 正在取消 作业状态,然后才将作业最终标记为已取消。

信息

🔧 需要 Gitea Runner 2.0.0 才能支持过渡性的 正在取消 状态和进行能力协商。使用较旧的 runner,取消功能仍然有效,但没有完整的服务器端语义支持。

感谢 @KalashThakare@bircni@Zettat123 贡献了这个功能。

🚀 组织/用户级别和全局作用域的工作流(#38154

可以在组织/用户级别以及实例范围内定义工作流,这样共享的自动化就无需再复制到每个仓库中。

组织设置中的作用域工作流来源配置 Actions 工作流列表中的所有者及全局作用域工作流

感谢 @Zettat123 贡献了这个功能。

🚀 在管理界面中批量删除、禁用和启用 runner(#37869

现在可以在管理 runner 列表中批量管理多个 runner,而无需逐个操作。

管理 runner 列表中的批量禁用、启用和删除操作

感谢 @bircni 贡献了这个功能。

🚀 工作流状态徽章模态框(#38196

可以从 Actions 界面的模态框中获取工作流状态徽章的 Markdown/HTML 代码片段。

工作流状态徽章模态框,包含 Markdown 和 HTML 代码片段

感谢 @guanzi008 贡献了这个功能。

🚀 在浏览器标签页图标上显示运行状态(#38071

运行视图会将当前作业状态反映到浏览器标签页图标上(并设置描述性的标签页标题,#37870),这样你就可以从其他标签页监视运行情况。

运行状态反映在浏览器标签页图标上

感谢 @bircni 贡献了这个功能。

🚀 列出曾经运行过但已从默认分支中移除的工作流(#37835

那些在默认分支上已不再存在的历史工作流仍然会保留在列表中,这样它们过去的运行就仍然可以被发现。

已从默认分支移除的工作流在 Actions 侧边栏中归入“其他工作流”分组

感谢 @bircni 贡献了这个功能。

主要亮点(代码与仓库)

🚀 Jupyter Notebook (.ipynb) 渲染 (#37433)

Notebook 文件现在在文件视图中会显示格式化后的输出结果,而不再是原始的 JSON。

仓库文件视图中显示包含 Matplotlib 输出的 Jupyter Notebook 渲染效果

感谢 @karthikbhandary2 贡献此功能。

🚀 允许每个工单和合并请求关联多个项目 (#36784)

现在工单和合并请求可以同时归属到多个项目,并新增了列选择器,方便直接从侧边栏将其放入对应列 (#37037)。

工单侧边栏显示一个工单同时属于多个项目 工单侧边栏中的项目列选择器

感谢 @icyavocado@myers 贡献这些功能。

🚀 头像堆叠 (#37594)

现在通过重叠的头像堆叠,可以更紧凑地展示参与人员(如负责人、参与者等列表)。

不同小组规模下的重叠头像堆叠效果

感谢 @bircni 贡献此功能。

🚀 文件提交历史中的“追踪重命名” (#34994)

在文件的提交历史列表中,可以追踪文件的重命名记录,这样历史记录就不会在重命名处中断。

文件提交历史中启用与禁用“包含重命名”的对比

感谢 @Chi-Iroh 贡献此功能。

🚀 Markdown 围栏代码块支持更多语法高亮 (#37154)

现在能够识别并高亮更多围栏代码块的语言/信息字符串。

感谢 @wxiaoguang 贡献此改进。

主要亮点(组织与团队)

🚀 团队可见性,让组织成员也能发现团队(#37680

团队可设为对组织成员可见,这样更方便找到合适的团队并申请加入。

普通成员视角下的组织团队列表

感谢 @bircni 贡献了此功能。

🚀 组织成员页新增搜索栏(#37347

可直接在组织成员页面内对大量成员进行筛选。

组织成员页的搜索栏

感谢 @lunny 贡献了此功能。

🚀 将仓库创建限制拆分为用户与组织两个作用域(#37872

仓库创建限制现在可针对个人账户和组织分别独立设置。

感谢 @Zettat123 贡献了此功能。

主要亮点(API)

🚀/openapi.v1.json 提供 OpenAPI 3.0 规范(#37038

Gitea 以 OpenAPI 3.0 格式发布其 API 描述,供工具和客户端生成使用。

感谢 @myers 贡献此功能。

🚀 令牌自省与自删除端点(#37995

新增 API 端点,可检查当前令牌信息,并允许令牌自我删除。

感谢 @TheFox0x7 贡献此功能。

🚀 工单/合并请求负责人 API(#37330

通过 API 管理工单和合并请求的负责人。

感谢 @lunny 贡献此功能。

🚀 列出某个工作流的运行记录(#37196

GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs 可列出特定工作流的运行记录。

感谢 @bn-zr 贡献此功能。

🚀 服务端分支过滤与原始 diff/patch 比较(#37982)(#37632)(#38148

列出分支的 API 新增了 q 过滤条件,比较功能提供了原始 diff/patch 端点,并且比较操作支持引用后缀。

感谢 @HarshMN2345@grafail@eyupcanakman 贡献这些功能。

其他主要亮点

🚀 OAuth2 重定向 URI 支持自定义 URI 方案(#37356

OAuth2 应用可以注册使用自定义 URI 方案的重定向 URI,这是原生和桌面应用常见的需求。

感谢 @wxiaoguang 贡献此功能。

🚀 自动生成额外的 SSH 主机密钥(#33974

Gitea 可以为内置 SSH 服务器自动生成额外的 SSH 主机密钥。

感谢 @TheFox0x7 贡献此功能。

🚀 支持 OpenSearch 和基于 REST 的搜索客户端(#37411

用 REST API 客户端替代了 olivere/elastic 依赖,在 Elasticsearch 之外新增了对 OpenSearch 的支持。

感谢 @silverwind 贡献此改进。

🚀 Telegram webhook 使用 Bot API 10.1 富文本消息(#38298

Telegram webhook 现在采用更新的 Bot API 富文本消息格式。

感谢 @SudhanshuMatrix 贡献此功能。

以下 Changelog 保留英文原文,未作翻译,请与上游逐字核对。

Changelog

  • BREAKING

    • Feat(actions)!: improve support for reusable workflows (#37478)
    • Use Content-Security-Policy: script nonce (#37232)
  • SECURITY

    • Fix: various security fixes (#38406) (#38426)
    • Fix(security): harden access checks and migration validation (#38324) (#38400)
    • Fix: enforce public-only token scope and harden push options / locale parsing (#38323) (#38399)
    • Fix(pull): re-evaluate review official flag on target branch change (#38319) (#38402)
    • Fix(api): stop leaking private repo metadata after access revocation (#38321) (#38390)
    • Fix(lfs): require proof of possession for cross-repo objects (#38322) (#38389)
    • Fix(mirror): disable HTTP redirects on pull mirror sync (#38320) (#38367)
    • Fix: golang html template url escaping (#38363) (#38369)
    • Fix(release): validate web attachment renames against allowed types (#38314) (#38328)
    • Fix(release): gate draft release attachments on web download endpoints (#38318) (#38325)
    • Fix(deps): update module github.com/go-git/go-git/v5 to v5.19.1 [security] (#37786)
    • Fix(oauth): restrict introspection to the token's client (#38042)
    • Fix(api): don't expose private org membership via public_members (#38145)
    • Fix(actions): deny fork-PR cross-repo access via collaborative owner (#38214)
    • Fix(migrations): prevent path traversal in repository restore (#38215)
  • FEATURES

    • Feat(actions): add workflow status badge modal (#38196)
    • Feat(actions): support owner-level and global scoped workflows (#38154)
    • Feat(api): support ref suffixes in compare (#38148)
    • Feat(actions): implement jobs.<job_id>.continue-on-error (#38100)
    • Feat(actions): show run status on browser tab favicon (#38071)
    • Feat(api): add token introspection and self-deletion endpoint (#37995)
    • Feat(api): add q parameter to list branches API for server-side filtering (#37982)
    • Feat(repo): split repository creation limit into user and org scopes (#37872)
    • Feat(actions): bulk delete, disable and enable runners in admin UI (#37869)
    • Feat(actions): List workflows that were executed once but got removed from the default branch (#37835)
    • Feat(org): add team visibility so org members can discover teams (#37680)
    • Feat: add raw diff/patch endpoint for repository comparisons (#37632)
    • Feat: Add avatar stacks (#37594)
    • Feat(actions): add job summaries (GITHUB_STEP_SUMMARY) (#37500)
    • Feat(web): Add Jupyter Notebook (.ipynb) Rendering Support (#37433)
    • Support for Custom URI Schemes in OAuth2 Redirect URIs (#37356)
    • Feat(orgs): Add search bar for organization members tab page (#37347)
    • Feat(api): Add assignees APIs (#37330)
    • Feat(api): Add GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs (#37196)
    • Serve OpenAPI 3.0 spec at /openapi.v1.json (#37038)
    • Add project column picker to issue and pull request sidebar (#37037)
    • Allow multiple projects per issue and pull requests (#36784)
    • Feat(ui): add "follow rename" to file commit history list (#34994)
    • Feat(ssh): auto generate additional ssh keys (#33974)
  • ENHANCEMENTS

    • Enhance(actions): only create filtered-out workflow commit status for required contexts (#38371) (#38385)
    • Enhance: allow builtin default git config options to be overridden (#38172)
    • Enhance: allow MathML core elements (#38034)
    • Enhance(markup): improve issue title rendering (#37908)
    • Enhance(actions): set descriptive browser tab title on run view (#37870)
    • Enhance: Migrate remaining gopkg.in/yaml.v3 usages to go.yaml.in/yaml/v4 (#37866)
    • Enhance(actions): show workflow name from YAML instead of filename (#37833)
    • Feat(actions): add before/after to PR synchronize event payload (#37827)
    • Enhance(actions): add branch filters to run list (#37826)
    • Enhance(actions): Make Summary UI more beautiful with more infos (#37824)
    • Feat: add copy button to action step header, improve other copy buttons (#37744)
    • Fix(icon): use repo-forked icon to display forks count (#37731)
    • Feat(api): add sort and order query parameters to job list endpoints (#37672)
    • Feat(api): add last_sync to repository API (#37566)
    • Enhance: Adjust Workflow Graph styling (#37497)
    • Improve code editor text selection and clean up lint enablement (#37474)
    • Add mirror auth updates to repo edit API and settings (#37468)
    • Replace olivere/elastic with REST API client, add OpenSearch support (#37411)
    • Feat: Add default PR branch update style setting (#37410)
    • Fix inconsistent disabled styling on logged-out repo header buttons (#37406)
    • Allow fast-forward-only merge when signed commits are required (#37335)
    • Enhance styling in actions page (#37323)
    • Fix: improve actions status icons and texts (#37206)
    • Make Markdown fenced code block work with more syntaxes (#37154)
    • Fix: Sort action run jobs by JobID and Name with matrix examples (#37046)
    • Add API endpoint to reply to pull request review comments (#36683)
  • PERFORMANCE

    • Perf(actions): debounce runner heartbeat writes and throttle task picks (#38281) (#38368)
    • Perf(web): sort the action_run query by a repo-scoped index when possible (#38155)
    • Perf: Various performance regression fixes (#38078)
    • Perf: extend action c_u index to include created_unix for faster dashboard feeds (#38076)
    • Batch-load related data in actions run, job, and task API endpoints (#37032)
  • BUGFIXES

    • Fix(util): reject invalid characters between time-estimate units (#38416) (#38423)
    • Fix: represent a deleted assignee team as a Ghost team (#38413) (#38419)
    • Fix(turnstile): route CAPTCHA verification through the configured proxy (#38412) (#38420)
    • Fix: refresh pull request merge box when the commit status is pending (#38410) (#38411)
    • Fix: actions task state concurrent update (#38405) (#38409)
    • Fix(actions): keep workflow run trailing on one row with long branch names (#38382) (#38403)
    • Fix(web): use locale-aware date formatting for contribution calendar tooltips (#38398) (#38401)
    • Fix: co-author detection (#38392) (#38397)
    • Fix: incorrect co-author detection on commit page (#38386) (#38387)
    • Fix(ui): restore commits table column widths (#38379) (#38383)
    • Fix: minio init check (#38355) (#38361)
    • Fix: org project view assignee list (#38357) (#38360)
    • Fix(actions): release claimed task if context is cancelled during FetchTask (#38343) (#38347)
    • Fix(actions): make runner list pagination order deterministic (#38313) (#38327)
    • Fix: Improve since/until when counting commits for X-Total-Count (#38243) (#38304)
    • Fix(actions): prevent chevron overlap with log text when timestamps are enabled (#38227) (#38307)
    • Fix(workflows): branch protection status checks fail when workflow uses on: paths filter (#38237) (#38302)
    • Fix(oauth2): persist linkAccountData during auto-link 2FA flow (#38274) (#38295)
    • Fix(actions): allow Actions bot to push to protected branches (#38284) (#38293)
    • Fix(actions): include all aggregable run statuses in status filter (#38280) (#38287)
    • Fix(archiver): use serializable repo-archive queue payload (#38273) (#38283)
    • Fix: update npm dependencies, fix misc issues (#38257)
    • Fix(api): respect since/until when counting commits for X-Total-Count (#38204)
    • Fix: codemirror regressions (#38248)
    • Fix(api): support HEAD requests on all API GET endpoints (#38245)
    • Fix(actions): Cleanup workflow status badge code (#38241)
    • Fix(web): Correctly align the "disabled" label on larger workflow names (#38240)
    • Fix(actions): don't swallow HTML entities into linkified URLs (#38239)
    • Fix(packages): accept npm "repository" and "bin" in string form (#38236)
    • Fix(actions): fix 500 error when canceling a canceling task (#38223)
    • Fix(deps): update module golang.org/x/image to v0.43.0 [security] (#38219)
    • Fix(mssql): convert legacy DATETIME columns to DATETIME2 (#38216)
    • Fix(api): deny private org member enumeration via /members (#38213)
    • Fix(actions): ensure all waiting jobs get runners in large workflows (#38200)
    • Fix(deps): update go dependencies (#38194)
    • Fix(deps): update npm dependencies (#38193)
    • Fix(cli): default must-change-password to false for bot users (#38175)
    • Fix(actions): show run index in run view and fix summary graph height (#38165)
    • Fix: csp (#38162)
    • Fix(deps): update npm dependencies (#38123)
    • Fix(mssql): expand legacy issue and comment long-text columns (#38120)
    • Fix(packages): validate debian distribution and component names (#38116)
    • Fix(packages): validate module version in goproxy ParsePackage (#38104)
    • Fix(deps): update dependency esbuild to v0.28.1 [security] (#38097)
    • Fix: git push hook post receive (#38089)
    • Fix(ui): prevent commit status popup overflowing its row (#38081)
    • Fix: validate gem name in rubygems parseMetadataFile (#38061)
    • Fix: commit display name (#38057)
    • Fix: csp regressions (#38047)
    • Fix: api error message (#38031)
    • Fix(deps): update npm dependencies (#38029)
    • Fix: pgsql lint (#38022)
    • Fix(indexer): fix assignee filters in issue search (#38021)
    • Fix: various dropdown problems (#38020)
    • Fix: refactor git error handling and make archive streaming handle non-existing commit id (#38007)
    • Fix: raise git required version to 2.13 (#37996)
    • Fix: remove "no-transfrom" from the cache-control header (#37985)
    • Fix(deps): update module github.com/google/go-github/v87 to v88 (#37971)
    • Fix: use committer time where ever possible as default (#37969)
    • Fix(deps): update npm dependencies, remove nolyfill (#37968)
    • Fix(deps): update go dependencies (#37967)
    • Fix(pull): preserve squash message trailers and additional commit messages (#37954)
    • Fix(deps): update module golang.org/x/image to v0.41.0 [security] (#37904)
    • Fix: support ##[command] log prefix in action run UI (#37882)
    • Fix(deps): update module github.com/google/go-github/v86 to v87 (#37845)
    • Fix(deps): update npm dependencies (#37844)
    • Fix(deps): update go dependencies (#37841)
    • Fix(frontend): resolve Vite assets by manifest source path (#37836)
    • Fix(locales): Replace hardcoded strings (#37788)
    • Fix(packages): render markdown links relative to linked repo (#37676)
    • Fix: persist mirror repository metadata (#37519)
    • Fix cmd tests by mocking builtin paths (#37369)
    • Add form-fetch-action to some forms, fix "fetch action" resp bug (#37305)
    • Feat: execute post run cleanup when workflow is cancelled (#37275)
    • Fix relative-time error and improve global error handler (#37241)
    • Refactor flash message and remove SanitizeHTML template func (#37179)
  • TESTING

    • Test(e2e): fix race in pdf file render test (#38380) (#38381)
    • Test: compare key file contents instead of FileInfo in TestInitKeys (#38330) (#38331)
    • Test: speed up two tests (#37905)
    • Test: Fix random failure test (#37887)
    • Test: fix flaky issue-comment close test (#37880)
    • Test: enable WAL for sqlite integration tests (#37861)
    • Test: fix flaky TestResourceIndex and reduce its runtime (#37847)
    • Test: run TestAPIRepoMigrate offline via a local clone source (#37817)
    • Ci: shard tests and reduce redundant work (#37618)
    • Test(e2e): run playwright via container (#37300)
    • Remove external service dependencies in migration tests (#36866)
  • BUILD

    • Fix(actions): authenticate snapcraft before nightly remote build (#38252)
    • Ci: cap Elasticsearch heap in db-tests (#37816)
    • Build(snap): publish nightly version to snapcraft via actions (#37814)
    • Ci: split pgsql shards into plain jobs, dedupe setup actions (#37802)
    • Ci: narrow files-changed frontend filter (#37749)
    • Ci: add zizmor to lint-actions (#37720)
    • Chore: clean up "contrib" dir (#37690)
    • Fix: snap build (main branch) (#37685)
    • Ci: Also lint json5 files (#37659)
    • Feat(editor): broaden language detection in web code editor (#37619)
    • Build: update pnpm to v11 (#37591)
    • Refactor(deps): migrate from nektos/act fork to gitea/runner (#37557)
    • Refactor: lint bare fill/stroke colors, add vars for git graph color series (#37543)
    • Update go js py dependencies (#37525)
    • Ci: lint PR titles with commitlint (#37498)
    • Chore: upgrade Go version in devcontainer image to 1.26 (#37374)
    • Update GitHub Actions to latest major versions (#37313)
    • Update go js dependencies (#37312)
    • Fail vite build on rolldown warnings via NODE_ENV=test (#37270)
    • Remove htmx (#37224)
    • Replace custom Go formatter with golangci-lint fmt (#37194)
    • Refactor htmx and fetch-action related code (#37186)
    • Integrate renovate bot for all dependency updates (#37050)
    • Build(sign): move to sigstore (#38250)
  • DOCS

    • Docs: update changelog for 1.26.3 & 1.26.4 (#38178)
    • Docs: fix duplicated word in foreachref doc comment (#38161)
    • Docs: Clarify criteria for becoming a merger (#38113)
    • Docs: Publish TOC Election Result 2026 (#38111)
    • Docs: mark openapi3 as autogenerated in attributes (#37963)
    • Docs: add development setup guide (#37960)
  • MISC

    • Revert(sign): restore gpg (#38251)
    • Refactor: replace legacy delete-button with link-action (#38143)
    • Refactor(actions): read runner capabilities from proto field (#38068)
    • Refactor(api): clarify APIError message usage and fix legacy lint error (#38012)
    • Refactor: Use db.Get[] instead of db.GetEngine(ctx).Get(bean) to avoid zero value fetching wrong database record (#37977)
    • Fix(deps): update go dependencies (#37851)
    • Ci: Fix sync PR labels from the conventional-commit title (#37784) (#37825)
    • Ci: tweak files-changed, add free-disk-space (#37819)
    • Fix(deps): update module golang.org/x/crypto to v0.52.0 [security] (#37806)
    • Test(e2e): add comment, release, star, PR and fork tests (#37800)
    • Chore: simplify issue and pull request templates (#37799)
    • Chore: Update giteabot to fix failure when backport (#37789)
    • Fix(api): handle partial failures in push mirror synchronization gracefully (#37782)
    • Fix(deps): update module gitlab.com/gitlab-org/api/client-go/v2 to v2.26.0 (#37771)
    • Ci: split giteabot workflow (#37770)
    • Fix(deps): update npm dependencies (#37768)
    • Refactor(waitgroup): replace Add/Done goroutines with WaitGroup.Go (#37764)
    • Fix(deps): update module google.golang.org/grpc to v1.81.1 (#37762)
    • Ci: fix cache-related issues (#37761)
    • Chore: fix tests (#37760)
    • Fix(deps): update module github.com/google/go-github/v85 to v86 (#37754)
    • Fix(deps): update npm dependencies (#37753)
    • Fix(deps): update go dependencies (#37752)
    • Chore(deps): update action dependencies (#37751)
    • Fix(markup): wrap indented code blocks for the code-copy button (#37748)
    • Chore(db): introduce db.Session and db.EngineMigration interfaces (#37746)
    • Feat(web): also display PR counts in repo list (#37739)
    • Refactor(glob): use strings.Builder for regexp compilation (#37730)
    • Chore(doctor): remove four obsolete doctor check implementations (#37728)
    • Refactor(org): simplify owner-team org repo creation logic (#37727)
    • Refactor: move workflowpattern into modules/actions (#37717)
    • Chore: clean up tests (#37715)
    • Style: misc UI fixes (#37691)
    • Ci: add shellcheck linter (#37682)
    • Fix: catch and fix more lint problems (#37674)
    • Fix(deps): update dependency mermaid to v11.15.0 [security], add e2e test (#37662)
    • Fix(deps): update npm dependencies (#37647)
    • Ci(renovate): update Go import paths on major bumps (#37641)
    • Fix(deps): update go dependencies (major) (#37639)
    • Chore(deps): update action dependencies (major) (#37638)
    • Fix(deps): update module code.gitea.io/sdk/gitea to v0.25.0 (#37637)
    • Fix(deps): update npm dependencies (#37636)
    • Refactor(log): replace log.Critical with log.Error (#37624)
    • Build(deps): bump fast-uri from 3.1.0 to 3.1.2 (#37616)
    • Feat(oauth): Support AWS Cognito OAuth2 provider (#37607)
    • Chore(deps): update action dependencies (#37603)
    • Ci: allow chore type in PR title lint (#37575)
    • Refactor: only reset a database table when the table's data was changed (#37573)
    • Ci: increase renovate frequency and fix RENOVATE_ALLOWED_POST_UPGRADE_COMMANDS (#37565)
    • Refactor: use modernc sqlite driver as default (#37562)
    • Docs: fix 4 typos in CHANGELOG.md (#37549)
    • Fix(deps): update go dependencies (#37541)
    • Chore(deps): update action dependencies (#37540)
    • Refactor pull request view (6) (#37522)
    • Fix: redirect early CLI console logger to stderr (#37507)
    • Refactor "flex-list" to "flex-divided-list" (#37505)
    • Refactor compare diff/pull page (1) (#37481)
    • Refactor pull request view (4) (#37451)
    • Update 1.26.1 changelog in main (#37442)
    • Refactor: use named Permission field in Repository struct instead of anonymous embedding (#37441)
    • Refactor: serve site manifest via /assets/site-manifest.json endpoint (#37405)
    • Remove IsValidExternalURL/IsAPIURL and use IsValidURL at call sites (#37364)
    • Update Block a user form (#37359)
    • Move review request functions to a standalone file (#37358)
    • Feat(security): set X-Content-Type-Options: nosniff by default (#37354)
    • Enable strict TypeScript, add errorMessage helper (#37292)
    • Refactor frontend tw-justify-between layouts to flex-left-right (#37291)
    • Update Nix flake (#37284)
    • Fix Repository transferring page (#37277)
    • Remove SubmitEvent polyfill (#37276)
    • Remove dead code identified by deadcode tool (#37271)
    • Upgrade go-git to v5.18.0 (#37268)
    • Don't add useless labels which will bother changelog generation (#37267)
    • Move heatmap to first-party code (#37262)
    • Tests/integration: simplify code (#37249)
    • Add pagination and search box to org teams list (#37245)
    • Remove error returns from crypto random helpers and callers (#37240)
    • Add ExternalIDClaim option for OAuth2 OIDC auth source (#37229)
    • Refactor: simplify ParseCatFileTreeLine and catBatchParseTreeEntries (#37210)
    • Refactor "htmx" to "fetch action" (#37208)
    • Update go js py dependencies (#37204)
    • Add comment for the design of "user activity time" (#37195)
    • Remove outdated RunUser logic (#37180)
    • Models/fixtures: add "DO NOT add more test data" comment to all yml fixture files (#37150)
    • Update javascript dependencies (#37142)
    • Update go dependencies (#37141)
    • Frontport changelog of v1.26.0-rc0 (#37138)
    • Introduce ActionRunAttempt to represent each execution of a run (#37119)
    • Workflow Artifact Info Hover (#37100)
    • Extend issue context popup beyond markdown content (#36908)
    • Add bulk repository deletion for organizations (#36763)
    • Feat: Add bypass allowlist for branch protection (#36514)

本版本的贡献者

感谢所有帮助完成这个版本的贡献者!