-
Notifications
You must be signed in to change notification settings - Fork 211
建议使用 GitHub Actions 自动为 Release 添加 GPG 签名(附完整自动化方案) #57
Copy link
Copy link
Open
Description
你好,我是 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
- 打开 https://github.com/yan5xu/ququ/settings/secrets/actions
- 点击 New repository secret,添加:
- 名称:
GPG_PRIVATE_KEY - 值:复制
private.key文件的全部内容粘贴进去
- 名称:
- 如果生成密钥时设置了密码,再添加一个 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 的安全性贡献一份力量。
如果有任何问题,我可以提供进一步帮助。
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels