什么是包包
包(https://packit.dev/) 是一个 CLI 工具,可帮助您将上游项目自动维护到 Fedora 操作系统。 但它的真正含义是什么?
作为开发人员,您可能希望在 Fedora. 如果你过去做过,你就会知道这不是一件容易的事。 如果你还没有让我重申:这不是一件容易的事。
这正是 packit 可以提供帮助的地方:一旦你有你的包裹 Fedora,您可以在上游维护您的 SPEC 文件,并且只需一个额外的配置文件,packit 将帮助您更新您的包 Fedora 当您在上游更新源代码时。
此外,packit 可以将下游对 SPEC 文件的更改同步回上游存储库。 如果您的包的 SPEC 文件在 Fedora 存储库,您希望将其同步到您的上游项目中。
Packit 还提供了一种基于上游存储库检出构建 SRPM 包的方法,可用于在 COPR 中构建 RPM 包。
最后但同样重要的是,packit 提供了一个状态命令。 此命令提供有关上游和下游存储库的信息,例如拉取请求、发布等。
Packit 还提供另外两个命令:build 和 create-update。
命令 packit build 执行项目的生产构建 Fedora 构建系统——koji。 你可以 Fedora 您想要使用选项 -dist-git-branch 构建的版本。 命令 packit create-updates 使用选项 -dist-git-branch 为特定分支创建 Bodhi 更新。
安装
你可以安装packit Fedora 使用 dnf:
sudo dnf install -y packit
配置
对于演示用例,我选择了上游存储库 科林 (https://github.com/user-cont/colin). Colin 是一个检查容器、dockerfile 和容器镜像的通用规则和最佳实践的工具。
首先,克隆 科林 git仓库:
$ git clone https://github.com/user-cont/colin.git
$ cd colin
Packit 期望在您的 git 存储库的根目录中运行。
包(https://github.com/packit-service/packit/) 需要有关您项目的信息,这些信息必须存储在 .packit.yaml 文件中的上游存储库中(https://github.com/packit-service/packit/blob/master/docs/configuration.md#projects-configuration-file)。
查看 colin 的 packit 配置文件:
$ cat .packit.yaml
specfile_path: colin.spec
synced_files:
-.packit.yaml
- colin.spec
upstream_project_name: colin
downstream_package_name: colin
这些值是什么意思?
- specfile_path – 上游存储库中规范文件的相对路径(强制)
- synced_files – 上游 repo 中文件的相对路径列表,这些文件在更新期间将被复制到 dist-git
- upstream_project_name – 上游存储库的名称(例如在 PyPI 中); 这用于 %prep 部分
- 下游包名称 – 包的名称 Fedora (强制的)
有关详细信息,请参阅 packit 配置文档(https://github.com/packit-service/packit/blob/master/docs/configuration.md)
包包能做什么?
使用 packit 的先决条件是您位于上游项目的 git checkout 的工作目录中。
在运行任何 packit 命令之前,您需要执行几个操作。 这些操作对于将 PR 提交到上游或下游存储库并访问 Fedora dist-git 存储库。
导出 GitHub 令牌取自 https://github.com/settings/tokens:
$ export GITHUB_TOKEN=<YOUR_TOKEN>
获取所需的 Kerberos 票证 Fedora 账户系统(FAS):
$ kinit <yourname>@FEDORAPROJECT.ORG
导出您的 Pagure API 密钥,取自 https://src.fedoraproject.org/settings#nav-api-tab:
$ export PAGURE_USER_TOKEN=<PAGURE_USER_TOKEN>
Packit 还需要一个 fork 令牌来创建拉取请求。 令牌取自 https://src.fedoraproject.org/fork/YOU/rpms/PACKAGE/settings#apikeys-tab
通过运行来做到这一点:
$ export PAGURE_FORK_TOKEN=<PAGURE_FORK_TOKEN>
或者将这些令牌存储在 ~/.config/packit.yaml 文件:
$ cat ~/.config/packit.yaml
github_token: <GITHUB_TOKEN>
pagure_user_token: <PAGURE_USER_TOKEN>
pagure_fork_token: <PAGURE_FORK_TOKEN>
提出一个新的上游版本 Fedora
第一个用例的命令称为 提议更新 (https://github.com/jpopelka/packit/blob/master/docs/propose_update.md)。 该命令在 Fedora dist-git 存储库使用选定的或最新的上游版本。
$ packit propose-update
INFO: Running 'anitya' versioneer
Version in upstream registries is '0.3.1'.
Version in spec file is '0.3.0'.
WARNING Version in spec file is outdated
Picking version of the latest release from the upstream registry.
Checking out upstream version 0.3.1
Using 'master' dist-git branch
Copying /home/vagrant/colin/colin.spec to /tmp/tmptfwr123c/colin.spec.
Archive colin-0.3.0.tar.gz found in lookaside cache (skipping upload).
INFO: Downloading file from URL https://files.pythonhosted.org/packages/source/c/colin/colin-0.3.0.tar.gz
100%[=============================>] 3.18M eta 00:00:00
Downloaded archive: '/tmp/tmptfwr123c/colin-0.3.0.tar.gz'
About to upload to lookaside cache
won't be doing kinit, no credentials provided
PR created: https://src.fedoraproject.org/rpms/colin/pull-request/14
命令完成后,您可以在 Fedora 基于最新上游版本的 Pagure 实例。 一旦你审查它,它可以被合并。
将下游更改同步回上游存储库
另一个用例是将下游更改同步到上游项目存储库。
用于此目的的命令称为 从下游同步 (https://github.com/jpopelka/packit/blob/master/docs/sync-from-downstream.md)。 同步到上游存储库的文件在 packit.yaml 配置文件的 synced_files 值下提到。
$ packit sync-from-downstream
upstream active branch master
using "master" dist-git branch
Copying /tmp/tmplvxqtvbb/colin.spec to /home/vagrant/colin/colin.spec.
Creating remote fork-ssh with URL [email protected]:phracek/colin.git.
Pushing to remote fork-ssh using branch master-downstream-sync.
PR created: https://github.com/user-cont/colin/pull/229
packit 完成后,您可以看到从 Fedora 上游存储库中的 dist-git 存储库。 这可能很有用,例如,当发布工程执行大规模重建并更新您的 SPEC 文件时 Fedora dist-git 存储库。
获取上游项目的状态
如果您是开发人员,您可能希望从上游和下游存储库中获取有关最新版本、标签、拉取请求等的所有信息。 Packit 提供 地位 为此目的的命令。
$ packit status
Downstream PRs:
ID Title URL
---- -------------------------------- ---------------------------------------------------------
14 Update to upstream release 0.3.1 https://src.fedoraproject.org//rpms/colin/pull-request/14
12 Upstream pr: 226 https://src.fedoraproject.org//rpms/colin/pull-request/12
11 Upstream pr: 226 https://src.fedoraproject.org//rpms/colin/pull-request/11
8 Upstream pr: 226 https://src.fedoraproject.org//rpms/colin/pull-request/8
Dist-git versions:
f27: 0.2.0
f28: 0.2.0
f29: 0.2.0
f30: 0.2.0
master: 0.2.0
GitHub upstream releases:
0.3.1
0.3.0
0.2.1
0.2.0
0.1.0
Latest builds:
f27: colin-0.2.0-1.fc27
f28: colin-0.3.1-1.fc28
f29: colin-0.3.1-1.fc29
f30: colin-0.3.1-2.fc30
Latest bodhi updates:
Update Karma status
------------------ ------- --------
colin-0.3.1-1.fc29 1 stable
colin-0.3.1-1.fc28 1 stable
colin-0.3.0-2.fc28 0 obsolete
创建 SRPM
最后一个 packit 用例是基于上游项目的 git checkout 生成一个 SRPM 包。 用于 SRPM 生成的 packit 命令是 转速.
$ packit srpm
Version in spec file is '0.3.1.37.g00bb80e'.
SRPM: /home/phracek/work/colin/colin-0.3.1.37.g00bb80e-1.fc29.src.rpm
打包即服务
在夏天,packit 背后的人想将 packit 作为服务引入(https://github.com/packit-service/packit-service)。 在这种情况下,packit GitHub 应用程序将安装到上游存储库中,packit 将根据从 GitHub 或 fedmsg 接收到的事件自动执行所有操作。