使用 Github Action 更新用于 rpm 打包的 spec 文件

本文最后更新于:2024年11月16日 凌晨

有一些软件包的上游本身就是使用 Github Action 发版的,每次 commit 都会触发 Github Action 去构建并分发新版本,使用构建时的时间日期作为版本号。针对这种包,手动更新费时费力,而规范的 specfile 应当是更新 %changelog 的,因此应当是使用 rpmdev-bumpspec 命令。只不过 rpmdev-bumpspec 需要在 rpm 系发行版或者装有 rpm 系列依赖包的发行版下执行,这不是随随便便一个 Linux 环境就能运行的。

我找到了 netoarmando/rpmdev-bumpspec-action 这个 Github Action,它通过启动一个 Fedora 的 docker 实现了使用 rpmdev-bumpspec 的效果。虽然 release 中只有一个 2021 年构建的 v1 版本,但 Fedora 的版本高低不影响 rpmdev-bumpspec 的效果。但每次 Github Action 执行时都会使用 fedora:latest 的 docker 重新构建一遍,不用担心 fedora 版本过低。

于是我们便解决了最核心的问题——处理 spec 文件。接下来只要补充好头尾的步骤即可。


首先使用 actions/checkout 释出仓库内的文件

- name: Checkout
  uses: actions/checkout@v2
  with:
    fetch-depth: 0

通过 shell 命令获取仓库内 spec 文件的版本号,存入 $GITHUB_ENV

- name: Get Current Version
  run: |
    CURRENT_VERSION=`grep -E '^Version:' *.spec | awk '{print $2}'`
    echo "CURRENT_VERSION=$CURRENT_VERSION" >> $GITHUB_ENV

通过 Github API 获取目标软件的最新版本号,存入 $GITHUB_ENV

- name: Export latest geoip version
  run: |
    NEW_VERSION=`curl -s https://api.github.com/repos/{user_name}/{repo_name}/releases/latest | jq -r '.tag_name' | sed 's/v//g'`
    echo "NEW_VERSION=$NEW_VERSION" >> $GITHUB_ENV

当仓库内 spec 版本号与软件最新版本号不一致时,运行 rpmdev-bumpspec

- name: Run rpmdev-bumpspec action
  if: ${{ env.CURRENT_VERSION != env.NEW_VERSION }}
  uses: netoarmando/rpmdev-bumpspec-action@v1
  with: 
    specfile: '{filename}'
    new: ${{ env.NEW_VERSION }}
    userstring: "username <[email protected]>"

当仓库内 spec 版本号与软件最新版本号不一致时,保存更改,推入仓库。

- name: Commit changes
  if: ${{ env.CURRENT_VERSION != env.NEW_VERSION }}
  run: |
    git config --local user.email "[email protected]"
    git config --local user.name "zhullyb"
    git add .
    git commit -m "upgpkg: v2ray-geoip@${{ env.NEW_VERSION }}"
    git push

(可选)当仓库内 spec 版本号与软件最新版本号不一致时,通过 curl 语句触发 copr 的 webhook,让 copr 进行构建。

- name: trigger copr webhook
  if: ${{ env.CURRENT_VERSION != env.NEW_VERSION }}
  run: |
    curl -X POST ${{ secrets.COPR_HOOK_URL }}v2ray-geoip/

最终的 yml 文件可以参考这里


使用 Github Action 更新用于 rpm 打包的 spec 文件
https://zhul.in/2024/04/29/update-a-rpm-spec-by-github-action/
作者
竹林里有冰
发布于
2024年4月29日
更新于
2024年11月16日
许可协议