GitHub 自动更新依赖

本篇教程介绍了在 GitHub 中自动更新依赖(包括但不限与包管理器为 pip, npm 等)的方法。

Dependabot

Dependabot 是 GitHub 官方的一款依赖更新工具,在配置好后,它会自动定期(周期可以自己配置)从包管理器中扫描最新依赖,与工程中使用的依赖进行比对,如果发现版本的升级,则提出一个 Pull Request 以用于更新依赖。

配置 Dependabot 的方法很简单,只需合理地编辑 .github/dependabot.yml 文件,官方参考文档在此

例如,项目的包管理器使用 pip,要求每周扫描一次更新,就可以按照如下进行配置:

1
2
3
4
5
6
version: 2
updates:
- package-ecosystem: pip
directory: /
schedule:
interval: weekly

Auto Merge

在提出 Pull Request 后,就需要使用 GitHub Actions 执行 CI 以合并分支,编辑 .github/workflows/auto-merge.yml 文件如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
name: Dependabot Auto Merge
on:
pull_request:
types: [ labeled, edited ]

jobs:
dependabot:
name: Dependabot
runs-on: ubuntu-latest
permissions: write-all
if: ${{ github.actor == 'dependabot[bot]' && github.event_name == 'pull_request'}}
steps:
- name: Enable auto-merge for Dependabot PRs
run: gh pr merge --auto --merge "$PR_URL"
env:
PR_URL: ${{ github.event.pull_request.html_url }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

按照自动化运维的规范,应先进行测试再合并,以保证代码能适应新版本的依赖。自动化测试的代码应添加在 steps 的第一步(因为第一步也就是唯一的步骤就是合并分支)之前,确保能通过测试后,就可以放心进行分支的合并了。否则,应该 throw 一个错误出来,供开发人员查阅。

优点与缺点

优点是这种操作节约了时间,并可以持续确保依赖的最新性,非常适合模板的仓库,因为模板的仓库不是最新就没有意义了,没有人愿意从一段旧代码开始自己的工作。

缺点是如果测试不够规范,将会产生一些安全问题,包括但不限于有些开发人员在新版本的依赖中故意引入缺陷等行为。所以对于稍大规模的项目,仍然建议人工审查 Pull Request,尤其是这种由自动化方式创建的 Pull Request,它们的恶意行为最不易被察觉。

GitHub 自动更新依赖

https://mmdjiji.com/2023/01/3/

作者

吉吉

发布于

2023-01-31

更新于

2024-03-05

许可协议