Forgejo 软件包注册表与清理规则

支持的包管理器

当前支持以下包管理器:

名称 语言 软件包客户端
Alpine — apk
ALT — apt-rpm
Arch — pacman
Cargo Rust cargo
Chef — knife
Composer PHP composer
Conan C++ conan
Conda — conda
Container — 任意兼容 OCI 的客户端
CRAN R —
Debian — apt
Generic — 任意 HTTP 客户端
Go Go go
Helm — 任意 HTTP 客户端、cm-push
Maven Java mvn、gradle
npm JavaScript npm、yarn、pnpm
NuGet .NET nuget
Pub Dart dart、flutter
PyPI Python pip、twine
RPM — yum、dnf
RubyGems Ruby gem、Bundler
Swift Swift swift
Vagrant — vagrant

以下说明仅适用于软件包功能未被全局禁用的情况。

仓库与软件包

软件包始终属于某个所有者,即用户或组织,而不是某个代码仓库。

要将已经上传的软件包关联到仓库,打开该软件包的设置页面,并选择目标仓库。关联的是整个软件包,而不只是某个版本。

关联后,软件包会出现在仓库的软件包列表中;软件包页面也会显示仓库链接和仓库议题链接。

访问限制

权限 所有者是用户 所有者是组织
读取 用户公开时为公开访问,否则仅该用户可读 组织公开时为公开访问,否则仅组织成员可读
写入 仅所有者 在组织中具有管理员或写入权限的成员

还可以通过 service.REQUIRE_SIGNIN_VIEW 设置,在整个实例范围限制公开访问。

注意:这些访问限制可能发生变化;后续将通过专门的组织团队权限,提供更细粒度控制。

创建或上传软件包

根据软件包类型,使用相应包管理器。具体步骤见各包管理器的文档子页面。

查看软件包

  1. 进入仓库。
  2. 在导航栏选择“Packages”。

点击软件包名称,可以查看详细信息。

下载软件包

  1. 在导航栏选择“Packages”。
  2. 点击软件包名称,进入详情。
  3. 在“Assets”区域,点击要下载的软件包文件名称。

将软件包关联到仓库

  1. 在用户或组织页面的导航栏选择“Packages”。
  2. 点击软件包名称,进入详情。
  3. 在右侧进入“Settings”。
  4. 从下拉列表选择要关联的仓库。

删除软件包

软件包发布到注册表后不能编辑,必须删除后重新创建。

删除步骤:

  1. 在导航栏选择“Packages”。
  2. 点击软件包名称,进入详情。
  3. 在右侧进入“Settings”。
  4. 在危险操作区域点击“Delete package”,永久删除软件包。

禁用软件包注册表

软件包注册表默认自动启用。要对单个仓库禁用:

  1. 在导航栏进入“Settings”。
  2. 关闭“Enable Repository Packages Registry”。

禁用注册表不会删除已发布的软件包。

去重

软件包注册表内置上传 blob 去重机制。两个完全相同的文件上传后,文件系统只保存一份 blob,避免重复占用空间。

如果两个软件包包含相同文件,它们在界面上仍显示相同大小,但实际文件系统只需保存一份数据,占用总计显示大小的一半。

删除软件包时,只会移除它对底层 blob 的引用。blob 不会立即删除,因此仍占磁盘空间。新上传的软件包可以再次引用已有 blob。

未被引用的 blob 由清理任务删除。配置项 OLDER_THAN 决定未引用 blob 在删除之前保留多久。

清理规则

没有清理时,注册表会随着时间不断增长。建议删除不需要的软件包,并设置清理规则,自动管理空间使用。

每位软件包所有者,即用户或组织,负责管理应用到自己软件包的清理规则。

设置 说明
Enabled 开启或关闭规则
Type 每条规则管理一种指定软件包类型
Apply pattern to full package name 开启后,下面的模式作用于完整名称 package/version;否则仅作用于版本 version
Keep the most recent 每个软件包始终保留多少个最新版本
Keep versions matching 决定保留哪些版本的正则表达式。空模式不保留任何版本,.+ 保留所有版本。容器注册表即使未配置,也始终保留 latest 版本
Remove versions older than 只删除超过指定天数的版本
Remove versions matching 决定删除哪些版本的正则表达式。如果其他设置没有限制,空模式或 .+ 都会匹配所有软件包并删除

每条清理规则都可以预览受影响的软件包,帮助确认配置是否符合预期。

正则表达式示例

系统会自动在模式两端加上 \A 与 \z 锚点。不必、也不要在模式中包含 \A、\z、^ 或 $。

模式不区分大小写,与 Forgejo 软件包注册表的行为保持一致。

模式 说明
.* 匹配所有可能版本
v.+ 匹配以 v 开头的版本
release 只匹配名称恰好为 release 的版本
release.* 匹配名为 release 或以 release 开头的版本
.+-temp-.+ 匹配包含 -temp- 的版本
v.+\|release 匹配以 v 开头或名称为 release 的版本
package/v.+\|other/release 匹配 package 软件包中以 v 开头的版本,或 other 软件包的 release 版本。需要开启“Apply pattern to full package name”

清理规则如何运行

清理规则属于定期运行的清理任务,其流程是:

  1. 收集该所有者注册表中指定类型的所有软件包。
  2. 收集每个软件包的全部版本。
  3. 按“Keep the most recent”排除需要保留的最新若干版本。
  4. 排除匹配“Keep versions matching”的版本。
  5. 排除比“Remove versions older than”更近的版本。
  6. 排除不匹配“Remove versions matching”的版本。
  7. 删除余下版本。

原文:Package Registry。作者/维护方:Forgejo 文档维护者。本文为中文翻译,代码及命令保留原文。

本页原文按 Apache-2.0 许可证提供,派生自 Gitea 原始文档。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容