多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

HTTPie 在 Fedora 上的打包流程:从 Packit 自动化到 RPM 构建、测试与发布

HTTPie 在 Fedora 上的打包流程:从 Packit 自动化到 RPM 构建、测试与发布 HTTPie 在 Fedora 上的打包流程从 Packit 自动化到 RPM 构建、测试与发布【免费下载链接】cli HTTPie CLI — modern, user-friendly command-line HTTP client for the API era. JSON support, colors, sessions, downloads, plugins more.项目地址: https://gitcode.com/gh_mirrors/cl/cliHTTPie 是面向 API 时代的现代化命令行 HTTP 客户端官方仓库在docs/packaging/linux-fedora/README.md中专门维护了一份面向 Fedora 发行版打包者的技术文档。本文以该文档为核心结合仓库中的.packit.yaml配置、httpie.spec.txtRPM 规范文件以及源码中的入口点、测试与 man page 生成逻辑完整讲解 HTTPie 在 Fedora 生态中上游发版 → Packit 自动提案 → 维护者审查 → rawhide 与稳定分支发布的全链路帮助你理解 RPM 打包者如何工作以及作为 HTTPie 用户如何通过dnf安装与升级。文档定位与适用读者这份文档面向两类人群HTTPie 的 Fedora 使用者只需关心dnf install httpie的安装与升级命令Fedora 打包维护者RPM packager需要了解如何为最新版 HTTPie 创建补丁、搭建构建环境、安装开发工具、完成本地测试再提交给 Fedora 下游src.fedoraproject.org/rpms/httpie。文档同时给出了 Fedora 侧打包工作的当前维护者信息以及整个上游发布 → 下游同步的自动化协作机制。它是 docs/packaging/README.md 所述发行版分发环节中针对 Fedora/RHEL 系发行版的具体实现说明同一表格中还覆盖了 Arch、CentOS、Debian、Homebrew、Snapcraft 与 Chocolatey 等渠道。整体流程Packit 驱动的自动化提案文档指出HTTPie 仓库根目录添加了一个 .packit.yaml 本地配置文件它解锁了对 Pull Request 和新 release 的实时 Fedora 检查使上游项目与 Fedora 打包仓库之间的同步几乎全自动上游HTTPie 官方仓库发布一个新版本Packit检测到 release 事件自动在 Fedora 的 HTTPie RPM 仓库src.fedoraproject.org/rpms/httpie打开一个下游 PRFedora 维护者通常是 Miro Hrončok审查并合并、构建所有构建产物可通过 Fedora Bodhi 系统的updates页面追踪用户反馈。也就是说维护者一侧无事可做——Packit 承担了从新 release 到打开 PR 的全部机械性工作人工只保留审查与合并这一道质量关卡。这与 docs/packaging/README.md 中先发 PyPI再按各自渠道推送的整体发布节奏互补Packit 监听的是 GitHub release 事件而非 PyPI 发布。.packit.yaml 关键配置解读仓库根目录的 .packit.yaml 内容如下# See the documentation for more information: # https://packit.dev/docs/configuration/ specfile_path: httpie.spec actions: # get the current Fedora Rawhide specfile: post-upstream-clone: wget https://src.fedoraproject.org/rpms/httpie/raw/rawhide/f/httpie.spec -O httpie.spec # Use this when the latest spec is not up-to-date. # post-upstream-clone: cp docs/packaging/linux-fedora/httpie.spec.txt httpie.spec jobs: - job: propose_downstream trigger: release metadata: dist_git_branches: - rawhidespecfile_path: httpie.specPackit 打包时使用的 RPM spec 文件路径actions.post-upstream-clone克隆上游仓库后直接从 Fedora rawhide 分支抓取最新版 spec 文件作为打包基准确保打包始终跟随 Fedora 侧的最新规范演进被注释的备选动作如果 rawhide 最新 spec 尚未跟上版本可回退到仓库内置快照 docs/packaging/linux-fedora/httpie.spec.txtjobspropose_downstream任务在release事件触发目标是 rawhideFedora 开发分支——这正是文档描述的新 release 自动打开 PR的实现源头。仓库内还提供了docs/packaging/linux-fedora/update.sh脚本用于手动刷新这份内置 spec 快照它调用 HTTPie 自身的https --download功能从 Fedora rawhide 拉取httpie.spec覆盖写入httpie.spec.txt保证仓库内的参考规范与 Fedora 上游保持一致。用户视角安装与升级文档通过与维护者 Q/A的形式给出了用户最关心的操作答案。Q安装最新稳定版的命令是什么A假设最新稳定版已经传播到 Fedora 仓库# Note that yum is an alias to dnf. $ sudo dnf install httpieQdnf/yum upgrade会自动升级到最新版吗A是的前提同上最新版本已进入 Fedora 仓库。Q新版本会自动 backport回溯移植到旧分支吗A不会。backport 是逐分支人工决策的过程详见下节。这条命令与 docs/installation/methods.yml 中dnf工具条目的记录一致install: dnf install httpie、upgrade: dnf upgrade httpie后者是官方安装文档所用安装方法数据库的 Fedora 条目二者相互印证。从发布到用户手中的版本传播路径文档完整描述了新版本从 GitHub 发布到 Fedora 稳定版用户的五个阶段新 HTTPie release 在 GitHub 创建为 FedorarawhideFedora 开发版本自动创建 PRFedora 打包者通常是 Miro对 PR 做 sanity check合理性检查合并并构建HTTPie 在24 小时内更新到 rawhide偶尔因无关问题延迟打包者判断该升级是否适合稳定版 Fedora文档撰写时的 35、34、33适合则合并相应改动若通过新版本进入updates-testing仓库等待用户反馈约1 周后广泛发布。这条路径说明了一个重要事实最新版本在不同 Fedora 分支的出现时间是不同的rawhide 最快、稳定分支次之且是否 backport 由打包者按版本兼容性决定。对用户而言若在稳定版上等不及可以主动使用updates-testing仓库或直接等待约一周的正式推送。深入 RPM 构建httpie.spec.txt 逐段解析仓库内置的 docs/packaging/linux-fedora/httpie.spec.txt 是 Fedora RPM 打包的规范文件快照版本对应 HTTPie 3.1.0是理解整个打包机制的施工图纸。逐段解读如下头部元数据Name: httpie Version: 3.1.0 Release: 1%{?dist} Summary: A Curl-like tool for humans License: BSD URL: https://httpie.org/ Source0: https://github.com/httpie/cli/archive/%{version}/%{name}-%{version}.tar.gz BuildArch: noarch BuildRequires: python3-devel BuildRequires: pyproject-rpm-macros BuildRequires: help2manBuildArch: noarchHTTPie 是纯 Python 包构建产物不依赖 CPU 架构因此 RPM 标记为noarch与 setup.cfg 中Programming Language :: Python :: 3 :: Only的分类器一致BuildRequires: python3-devel与pyproject-rpm-macrosFedora 现代化 Python 打包体系PEP 517/518的标准构建依赖BuildRequires: help2man用于在构建时生成 man page。构建、安装与测试宏%prep %autosetup -p1 %generate_buildrequires %pyproject_buildrequires -rx test %build %pyproject_wheel %install %pyproject_install %pyproject_save_files httpie%autosetup -p1解压源码并自动应用补丁%pyproject_buildrequires -rx test自动探测构建/运行时依赖其中-x test表示同时纳入测试 extra 依赖——对应 setup.cfg 中[options.extras_require]的test pytest, pytest-httpbin, responses, pytest-mock, werkzeug2.1.0这些正是 RPM 构建阶段跑测试所需的依赖%pyproject_wheel/%pyproject_install标准的 PEP 517 wheel 构建与安装%pyproject_save_files httpie自动记录httpiePython 包产生的文件清单。命令行入口与补全脚本# Bash completion mkdir -p %{buildroot}%{_datadir}/bash-completion/completions cp -a extras/httpie-completion.bash %{buildroot}%{_datadir}/bash-completion/completions/http ln -s ./http %{buildroot}%{_datadir}/bash-completion/completions/https # Fish completion mkdir -p %{buildroot}%{_datadir}/fish/vendor_completions.d/ cp -a extras/httpie-completion.fish %{buildroot}%{_datadir}/fish/vendor_completions.d/http.fish ln -s ./http.fish %{buildroot}%{_datadir}/fish/vendor_completions.d/https.fish打包时把仓库中的 extras/httpie-completion.bash 与 extras/httpie-completion.fish 分别安装到 Bash 与 Fish 的补全目录并为https创建符号链接复用http的补全二者是同一 CLI 的别名。man page 生成# Generate man pages for everything export PYTHONPATH%{buildroot}%{python3_sitelib} mkdir -p %{buildroot}%{_mandir}/man1 help2man %{buildroot}%{_bindir}/http %{buildroot}%{_mandir}/man1/http.1 help2man %{buildroot}%{_bindir}/https %{buildroot}%{_mandir}/man1/https.1 help2man %{buildroot}%{_bindir}/httpie %{buildroot}%{_mandir}/man1/httpie.1help2man通过解析--help输出生成 man page。值得注意的是当前仓库还有一条更现代的路径extras/scripts/generate_man_pages.py直接从 CLI 解析器声明httpie.cli.definition与httpie.manager.cli生成三份 man pageextras/man/http.1、extras/man/https.1、[extras/man/httpie.1)并随 wheel 通过 setup.cfg 的[options.data_files]share/man/man1安装——spec 中help2man方案与仓库内的源码生成方案共同保证了man http/man httpie可用。构建期测试与文件清单%check %pytest -v %files -f %{pyproject_files} %doc README.md %license LICENSE %{_bindir}/http %{_bindir}/https %{_bindir}/httpie %{_mandir}/man1/http.1* %{_mandir}/man1/https.1* %{_mandir}/man1/httpie.1* # we co-own the entire directory structures for bash/fish completion to avoid a dependency %{_datadir}/bash-completion/ %{_datadir}/fish/%check阶段在构建时直接运行仓库完整测试套件tests/目录下的test_*.py确保进入 Fedora 的每个版本都通过了上游测试spec 变更日志中 2021 年 2.4.0-2 条目即记录了Run tests on build time这一策略%files清单包含三个可执行文件http/https/httpie、man page 与补全目录。其中http、https、httpie三个命令在 setup.cfg 的[options.entry_points] console_scripts中定义分别指向httpie.__main__:main与httpie.manager.__main__:main。版本变更史%changelog的工程启示spec 文件底部的%changelog记录了 HTTPie RPM 从 2012 年0.2.5到 2022 年3.1.0的完整演变其中几个关键条目揭示了打包工程的演进脉络2013 年起用help2man生成 man page并针对 RHEL 的 help2man 差异做过条件处理2016 年移除 Python 2 专属子包Fedora 全面转向 Python 32020–2021 年改用%autosetup、pyproject-rpm-macros等现代 Python 构建宏并补上 help2man 运行所需依赖2021 年加入 Bash/Fish 补全并在构建期跑测试每次版本升级都附带对应的 Red Hat Bugzillarhbz引用形成版本 → 缺陷的可追踪链条。作为打包者本地复现与验证路径文档虽以自动化为基调但也明确了打包者需要做的质量动作。综合文档与仓库结构一个完整的本地验证路径是准备环境安装dnf builddep或dnf-builddep所需的构建依赖即 spec 头部的python3-devel、pyproject-rpm-macros、help2man准备源码参照Source0获取对应版本 tarball或直接克隆本仓库并切换到目标 tag跑通构建按 spec 的%prep → %build → %install → %check顺序执行重点确认%pyproject_buildrequires -rx test探测到的依赖与 setup.cfg 的install_requires一致包括requests[socks]、Pygments、rich等运行时依赖验证产物检查/usr/bin/http、/usr/bin/https、/usr/bin/httpie三个入口、man pageman http以及 Bash/Fish 补全是否随包正确安装跑测试对应%check阶段等价于在仓库根目录执行pytest -vpytest.ini 与 setup.cfg 的[tool:pytest]已配置testpaths httpie tests覆盖 HTTP 请求、JSON/XML 输出、会话、Cookie、下载、认证、SSL、重定向等模块提交下游审查通过后为 rawhide 合并 PR、构建再按稳定分支是否 backport的决策流程推进。对于希望快速了解 spec 最新形态的人update.sh 展示了如何用https --download从 Fedora rawhide 拉取权威 spec保持仓库快照与 Fedora 侧同步。关键结论与注意事项自动化边界Packit 只自动完成新 release → 打开 rawhide PR审查、合并、构建、backport 决策全部保留人工稳定分支是否跟进由打包者按版本判断无自动 backport。时效性文档与 spec 快照反映的是 2022 年rawhide 为 Fedora 36、稳定分支为 35/34/33、spec 版本 3.1.0的状态而仓库当前httpie/__init__.py中__version__ 3.2.4、__date__ 2024-11-01说明本仓库对应版本已远超 spec 快照——实际打包始终以 Fedora rawhide 实时 spec 为准这正是.packit.yaml中post-upstream-clone直接抓取 rawhide spec 的原因。版本分发节奏稳定版 Fedora 用户通过sudo dnf install httpie获得的是经过 rawhide 验证、并在updates-testing中经过约一周用户反馈的版本若需要严格最新版可关注 rawhide 分支或updates-testing仓库。通过本文你既掌握了 Fedora 用户侧dnf install httpie的安装升级方式也理解了从 GitHub release 到 Fedora 稳定仓库之间 Packit 自动化 人工把关的完整管线还获得了对 httpie.spec.txt 逐行级的 RPM 构建知识——无论你是想参与 Fedora 打包还是仅仅想搞清我装的是哪个版本、它怎么来到我机器上这份文档与仓库都能给你确定性的答案。【免费下载链接】cli HTTPie CLI — modern, user-friendly command-line HTTP client for the API era. JSON support, colors, sessions, downloads, plugins more.项目地址: https://gitcode.com/gh_mirrors/cl/cli创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表