推广官方Arch Linux版本并同步
项目描述
此项目允许在Arch Linux的Gitlab实例中推广和同步现有项目的发布。
项目(例如 项目)的发布可能包含几种发布类型(例如 image_a 和 image_b),它们分别处理。
推广包括 - 每个发布类型 - 对相关工件(可选)的PGP签名、一个托盘文件(可选)以及一个JSON有效载荷,该有效载荷可以被 archweb 使用来显示每种发布类型的信息。
可以将项目与本地目录进行同步,同步的版本数量最多可配置(每个版本由其配置的发布类型组成)。
需求
Arch-release-promotion 基于Python。所有特定语言的需求都在其 pyproject.toml 中指定。
此外,arch-release-promotion 需要 gnupg 来处理分离的PGP签名。
使用
安装后,请参考 arch-release-promotion -h 和 arch-release-sync -h 的输出。
配置
命令行工具 arch-release-promotion 和 arch-release-sync 使用两个配置源
makepkg.conf 从其在同一优先级的位置读取,与 makepkg 相同。以下所有内容也可以通过环境变量传递给工具
GPGKEY 被识别用于确定用于签名的PGP密钥
PACKAGER 被识别用于确定谁在签名,对于 WKD 查找非常重要
MIRRORLIST_URL(不被 makepkg 使用)在生成种子文件时用于添加 webseeds(默认为 "https://archlinux.org.cn/mirrorlist/?country=all&protocol=http&protocol=https")
GITLAB_URL(不被 makepkg 使用)用于连接到 GitLab 实例以选择、下载和推广项目的版本(默认为 "https://gitlab.archlinux.org")
PRIVATE_TOKEN(不被 makepkg 使用)用于对 GitLab 实例进行身份验证。需要提供目标项目的写入访问权限的 个人访问令牌。
projects.toml 是一个配置文件,它为项目及其版本提供配置。配置文件从 /etc/arch-release-promotion/projects.toml 和 $XDG_CONFIG_HOME/arch-release-promotion/projects.toml(如果未设置 $XDG_CONFIG_HOME,则默认为 $HOME/.config/arch-release-promotion/projects.toml)读取并按降序合并。请参考 examples/example.toml 以了解有关可用选项的更多信息
Openmetrics
如果上游项目提供基于 openmetrics 的指标文件,则可以从其中使用数据作为 JSON 有效负载的附加信息。
以下指标被考虑。
版本指标
例如,可以从 version_info 指标类型 info(定义一个 name、description 和 version 标签)中导出关于软件包的描述和版本信息。
为了考虑这些指标,必须通过向项目的版本添加一个 version_metrics 列表(要查找的名称列表)来配置。
# TYPE version_info info
# HELP version_info Package description and version information
version_info{name="my-package",description="Version of my-package used for build",version="1.0.0-1"} 1
上述指标条目将产生以下 JSON 表示形式
"version_metrics": [
{
"name": "my-package",
"description": "Version of my-package used for build",
"version": "1.0.0-1"
}
]
大小指标
可以从 artifact_bytes 指标类型 gauge(定义一个 name 和一个 description 标签)中导出以 MebiBytes(MiB)为单位的工件大小信息和描述。
要考虑的指标必须通过添加一个size_metrics列表(一个要查找的名称列表)到项目的发布版本来进行配置。
# TYPE artifact_bytes gauge
# HELP artifact_bytes Artifact sizes in Bytes
artifact_bytes{name="foo",description="Size of foo in MiB"} 832
上述指标条目将产生以下 JSON 表示形式
"size_metrics": [
{
"name": "foo",
"description": "Size of foo in MiB",
"size": 832
}
]
数量指标
有关某物(例如,包)的数量和描述可以从类型为summary的data_count指标中得出,这些指标定义了一个name和description标签。
要考虑的指标必须通过添加一个amount_metrics列表(一个要查找的名称列表)到项目的发布版本来进行配置。
# TYPE data_count summary
# HELP data_count The amount of something used in some context
data_count{name="foo",description="The amount of packages in foo"} 369
上述指标条目将产生以下 JSON 表示形式
"amount_metrics": [
{
"name": "foo",
"description": "The amount of packages in foo",
"amount": 369
}
]
推广工件
推广工件是一个ZIP压缩文件(promotion.zip),在将其链接添加到推广的发布版之前,需要将其上传到项目中。
该文件包含每个项目提供的发布类型的一个目录。在每个发布类型目录中,有一个包含任何已设置用于脱签文件的签名的目录(<release_type>-<version>/),以及一个可选的种子文件(<release_type>-<version>.json),它是为发布类型的构建工件和推广工件中包含的脱签签名而创建的。
example
├── example-0.1.0
│ └── artifact.tar.gz.sig
├── example-0.1.0.json
└── example-0.1.0.torrent
JSON有效负载
发布的推广包括一个或多个JSON有效负载,描述了发布中的每个发布类型。
{
"amount_metrics": [
{
"name": "foo",
"description": "The amount of packages in foo",
"size": 369
}
],
"developer": "Foobar McFooface <foobar@mcfooface.com>",
"files": ["something.txt", "something.txt.sig"],
"name": "foo",
"pgp_public_key": "SOMEONESPGPKEYID",
"size_metrics": [
{
"name": "foo",
"description": "Size of foo in MiB",
"size": 832
}
],
"torrent_file": "foo-0.1.0.torrent",
"version_metrics": [
{
"name": "my-package",
"description": "Version of my-package used for build",
"version": "1.0.0-1"
}
],
"version": "0.1.0"
}
amount_metrics:一个描述某物数量的对象列表(可选)。列表取决于项目的配置是否定义了amount_metrics以及这些指标是否在特定发布版中可用。
developer:推广(和可选地签名工件)的人员的全uid。
files:发布类型中的文件列表。
name:发布类型的名称。
pgp_public_key:发布类型中签名文件的PGP密钥ID。
size_metrics:一个描述某物大小的对象列表(可选)。列表取决于项目的配置是否定义了size_metrics以及这些指标是否在特定发布版中可用。
torrent_file(可选):为发布类型创建的种子文件的名称。值取决于发布类型的配置是否将create_torrent设置为True。
version_metrics:一个描述某物版本的对象列表(可选)。列表取决于项目的配置是否定义了version_metrics以及这些指标是否在特定发布版中可用。
version:发布类型的版本。
同步
通过从远程检索项目的推广发布列表来工作,实现发布版本的同步。对于每个推广发布版本,下载推广工件并使用它来确定所有配置的发布类型是否完全同步。
位置和清理
每个发布版本的每个发布类型都同步到一个本地目录。该目录和同步的发布版本的最大数量可以在全局或按项目进行配置。
sync_dir
├── example_a
│ ├── example_a-0.1.0
│ │ ├── foo.txt
│ │ └── foo.txt.sig
│ ├── example_a-0.1.0.json
│ ├── example_a-0.1.0.torrent
│ └── latest -> example_a-0.1.0
└── example_b
├── example_b-0.1.0
│ ├── bar.txt
│ └── bar.txt.sig
├── example_b-0.1.0.json
├── example_b-0.1.0.torrent
└── latest -> example_b-0.1.0
创建一个指向每个发布类型的当前最新版本的latest符号链接。
任何不属于当前同步发布版本发布类型版本的文件和目录都将从同步目录中删除。
如果目标目录中的文件引入了更改(由于同步操作),可以在全局或按项目配置的文件中写入Unix时间戳(文件所在的目录必须存在)。
系统集成
对于基于systemd的系统,提供了示例systemd系统服务和定时器文件,位于examples/systemd/。提供的服务文件依赖于用户arch-release-sync,可能使用sysusers.d集成在examples/sysusers.d/中创建。
许可证
Arch-release-promotion遵循GPL-3.0-or-later许可证条款(见LICENSE)。
项目详情
arch_release_promotion-0.3.0.post0.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 8a5666b76c0c3133991fd8886d3fbd3103294f81f9526974083e524b513d864f |
|
MD5 | 2f12c66daf62da286e130a94ecfda603 |
|
BLAKE2b-256 | 73e63186f3d8cb5e252321031eb32e10125a33b4eb0ec1537decc23a2dd4841b |
arch_release_promotion-0.3.0.post0-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 66fb546736fea271f6dfe9c66d2d8dc24e5bf4e221fd3d4686ae964b970e7a8b |
|
MD5 | 6f2307f05f899fe598eb1c045b1651fe |
|
BLAKE2b-256 | 8ef71f732e85675dd9fc923921fcdfc2bdf13de007caa9a404c4d183b4ba78c5 |