如何自动保持 repo 包依赖项的更新

2025-05-25

如何自动保持 repo 包依赖项的更新

照片由Andrea De SantisUnsplash上拍摄

TL;DR

了解如何实现 dependabot 来自动更新您的依赖项,打开一个已更新 dep 的 pr,在此拉取请求中运行测试,并在成功时自动合并。

开发人员的日常任务

开发人员的工作通常让人联想到好莱坞电影里那些聪明人或黑客在打字,屏幕上却只能看到各种绿色代码的场景。又或者,在一个漆黑的房间里,只有显示器的灯光才能看到。

但是,开发人员的工作和大多数工作一样。每天都会遇到问题需要解决,需要理解日常任务,并思考解决问题的最佳方法。而且,就像任何其他工作一样,开发人员的日常任务也会占用我们一天的时间。

你可以把开发者的日常工作比作开餐馆。每天你走进餐厅,必须:打开窗户,打开灯,清理地板,洗碗,拉开椅子,等等,正如我所说:这些都是日常任务。

更新软件包的依赖关系是日常任务之一。而且,随着项目逐渐壮大,手动维护变得越来越困难。

自动化

使用 GitHub 操作任务更容易抽象,并且通过此任务让我们创建:

  • Dependabot 配置将每天打开一个新的拉取请求来更新特定的依赖关系。
  • 负责从此拉取请求中的应用程序运行测试的 GitHub 操作已打开
  • 如果拉取请求内部的检查结果成功,Github 操作将负责合并此拉取请求。

自动化流程描述

这些流程协同工作。因此,编写测试以确保 Dependabot 每天正常运行非常重要,并且这些测试还负责识别更新中的问题。

Dependabot 配置

让我们添加一个配置来每天运行一个 dependabot 来查找应用程序内部依赖项的更新。

  • 您的项目根目录下可能会有一个名为 的文件夹.github。如果没有,请立即手动创建。
  • 在其中创建一个新文件并将其命名为 dependabot.yml
  • 放置下面的代码
version: 2
updates:
  - package-ecosystem: npm
    directory: '/'
    schedule:
      interval: daily
      time: '01:00'
    open-pull-requests-limit: 10
Enter fullscreen mode Exit fullscreen mode

这个 yml 文件将为 dependabot 设置配置:

  • 它每天打开一个拉取请求
  • 间隔时间为 01:00
  • 最大限制为 100
  • Dependabot 的每次拉取请求都会给所有者存储库带来新的通知

工作流文件夹

在创建 GitHub 操作之前,如果工作流文件夹尚不存在,则需要创建它。

  • 在里面.github创建一个新文件夹并命名为工作流

测试 GitHub 操作

重要提示:此流程负责运行您的应用程序测试。因此,预计已配置好 Jest 环境。如果您还没有配置,现在就可以开始编写测试了。

让我们创建 GitHub 操作,负责运行每个打开的拉取请求内的存储库中的所有测试。

  • 在工作流文件夹中创建一个新文件并命名为test.yml
  • 放置下面的代码
name: tests

on:
  push:
    branches:
      - main
  pull_request:
    branches:
      - main

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v2
      - name: Setup Node.js
        uses: actions/setup-node@v2
        with:
          node-version: "14"
      - run: yarn
      - run: yarn jest
Enter fullscreen mode Exit fullscreen mode

该 yml 文件将设置一个新的操作来负责:

  • 运行每个拉取请求内的所有测试,这些测试将合并到主分支上。
  • 它将运行 yarn 命令来安装所有依赖项。
  • 然后将运行 yarn jest 来运行所有测试。

Dependabot 自动合并 GitHub 操作

让我们创建一个 GitHub 操作,负责自动合并 Dependabot 提交的拉取请求。当所有检查都通过后,此操作将自动合并。

  • 在工作流中创建一个新文件并命名为auto-merge.yml
  • 放置下面的代码
name: auto-merge

on:
  pull_request_target:
    branches:
      - main

jobs:
  auto-merge:
    runs-on: ubuntu-latest
    if: github.actor == 'dependabot[bot]'
    steps:
      - uses: ahmadnassri/action-dependabot-auto-merge@v2.4
        with:
          github-token: ${{ secrets.AUTOMERGE_TOKEN }}
          command: 'squash and merge'
          target: minor
Enter fullscreen mode Exit fullscreen mode

该 yml 文件将设置一个新的操作来负责:

  • 当拉取请求参与者为“dependabot[bot]”时
  • 它将使用 ahmadnassri/action-dependabot-auto-merge@v2.4
  • 如果拉取请求的检查结果为绿色,它将运行“压缩并合并”
  • 仅适用于从目标次要目标更新依赖项的拉取请求
  • 您无需浪费时间查看软件包依赖项通知

.github文件夹应如下所示:
github文件夹打印

在新的拉取请求中更新这些更改并开始观察奇迹发生。

来自 GitHub 上的拉取请求列表页面的打印

拉取请求详情 github 页面 打印

上面打印的这个拉取请求:https://github.com/daniloab/graphql-real-world-server/pull/115

使用这个拉取请求作为如何实现此博客文章的示例https://github.com/daniloab/graphql-real-world-server/pull/69

欢迎来到自动化

现在,您的应用程序已经具有新的自动化功能来帮助您完成日常任务,并且利用您需要投入手动执行这些任务的时间,您可以开始在应用程序中投资新的东西。

为什么要实现自动化

你需要编写更多测试,才能减少编写测试的时间。你需要每天更新应用程序的依赖项,否则你的应用程序很快就会变得老旧,而且比你想象的要快。

如果对此流程有任何疑问或见解,请随时在Twitter上致电我的 DM 。

在 Patreon 上支持我https://www.patreon.com/daniloab以帮助我完成开源工作。

加入我的 discord 即可免费获得有关我的所有内容的指导。

文章来源:https://dev.to/daniloab/using-github-actions-to-improve-your-developer-experience-29n7
PREV
介绍 cssgr.id - 一个交互式 CSS 网格样板代码生成器
NEXT
我如何学习任何类型的新技术(作为高级开发人员)