Skip to content

建议使用 GitHub Actions 自动为 Release 添加 GPG 签名(附完整自动化方案) #57

@DslsDZC

Description

@DslsDZC

你好,我是 Arch Linux 用户,正在为 QuQu 准备 AUR 包。为了提升用户安装时的安全性,AUR 包可以启用 validpgpkeys 验证来源真实性,但这需要上游提供 .asc 签名文件。

我准备了一套完全自动化的 GitHub Actions 配置,你只需要花 2 分钟配置两个 Secrets,之后每次创建 Release 都会自动完成签名。下面是完整步骤。

第一步:在本地生成 GPG 密钥(只需执行一次)

在终端运行以下命令(将姓名和邮箱换成你自己的):

gpg --quick-generate-key "yan5xu <yan5xu@example.com>" rsa4096 default 1y

然后获取密钥 ID 并导出私钥:

gpg --list-secret-keys --keyid-format LONG
# 输出示例:sec   rsa4096/3AA5C34371567BD2  (密钥 ID 是 / 后面的部分)
gpg --export-secret-key --armor 3AA5C34371567BD2 > private.key

第二步:将私钥添加到 GitHub Secrets

  1. 打开 https://github.com/yan5xu/ququ/settings/secrets/actions
  2. 点击 New repository secret,添加:
    • 名称:GPG_PRIVATE_KEY
    • 值:复制 private.key 文件的全部内容粘贴进去
  3. 如果生成密钥时设置了密码,再添加一个 secret:
    • 名称:GPG_PASSPHRASE
    • 值:你的密码(如果无密码,留空字符串 ""

第三步:创建 GitHub Actions 工作流文件

在项目根目录创建 .github/workflows/sign-release.yml,内容如下:

name: Sign Release

on:
  release:
    types: [published]

jobs:
  sign:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Download source tarball
        run: |
          curl -L -o ququ-${{ github.event.release.tag_name }}.tar.gz \
            https://github.com/${{ github.repository }}/archive/refs/tags/${{ github.event.release.tag_name }}.tar.gz

      - name: Import GPG key
        uses: crazy-max/ghaction-import-gpg@v6
        with:
          gpg_private_key: ${{ secrets.GPG_PRIVATE_KEY }}
          passphrase: ${{ secrets.GPG_PASSPHRASE }}

      - name: Sign tarball
        run: |
          gpg --detach-sign --armor ququ-${{ github.event.release.tag_name }}.tar.gz

      - name: Upload signature to release
        uses: softprops/action-gh-release@v2
        with:
          files: ququ-${{ github.event.release.tag_name }}.tar.gz.asc

第四步:提交文件并测试

将上述文件提交到 GitHub 仓库。之后当你创建新的 Release(例如 v1.0.2)时,GitHub Actions 会自动:

  • 下载对应的源码压缩包
  • 用你的 GPG 私钥签名
  • 将生成的 .asc 签名文件上传到 Release 页面

这样无需任何手动操作,所有未来的发布版本都会自动附带 GPG 签名。

完成后

AUR 包的 PKGBUILD 就可以使用 validpgpkeys 进行签名验证,用户安装时会更安全。感谢你的项目,也希望能为 QuQu 的安全性贡献一份力量。

如果有任何问题,我可以提供进一步帮助。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions