批量迁移 GitHub Actions 从 Node 20 到 Node 24

发布: (2026年1月16日 GMT+8 01:08)
4 min read
原文: Dev.to

Source: Dev.to

如果你管理 GitHub 组织,你一定很熟悉这种情形:GitHub 宣布 Node.js 版本将被弃用,结果你的收件箱瞬间被警告塞满。

随着 Node 20 进入维护模式,你可能有数十个 .github/workflows 文件需要升级版本。你可以克隆每个仓库,编辑 YAML,提交、推送并打开 PR……五十次。

或者,你可以使用 multi-gitter 一次性完成所有操作。

一次性解决方案

multi-gitter 是一个开源工具,允许你在组织内的每个仓库中上下文地运行脚本。它会自动处理克隆、分支、提交和 PR 创建。

以下是在不到 3 分钟内为整个组织升级 Node 版本的方法。

1. 脚本

首先,创建一个名为 bump-node.sh 的简单脚本。该脚本将在每个仓库内部运行。我们将使用 sed 在工作流文件中查找并替换版本号。

脚本会自动处理 macOS(BSD sed)和 Linux(GNU sed)之间的语法差异。

#!/bin/bash

TARGET_DIR=".github/workflows"
SEARCH="node-version: 20"
REPLACE="node-version: 24"

# If the directory doesn't exist, stop here.
if [ ! -d "$TARGET_DIR" ]; then
    exit 0
fi

# Find YAML files and replace the version string
# We use a conditional check to ensure this works on both macOS and Linux
# "sed --version" returns 0 on GNU (Linux), but fails on BSD (macOS).
if sed --version >/dev/null 2>&1; then
    # Linux (standard GNU sed)
    find "$TARGET_DIR" -name "*.yml" -o -name "*.yaml" | xargs -I {} sed -i "s/$SEARCH/$REPLACE/g" {}
else
    # macOS (BSD sed)
    find "$TARGET_DIR" -name "*.yml" -o -name "*.yaml" | xargs -I {} sed -i '' "s/$SEARCH/$REPLACE/g" {}
fi

确保为其赋予执行权限:

chmod +x ./bump-node.sh

2. 命令

在你的组织(例如 my-company-org)中运行 multi-gitter 来执行此脚本。

multi-gitter run ./bump-node.sh \
  --org my-company-org \
  --branch upgrade-to-node-24 \
  --pr-title "Upgrade node version from 20 to 24" \
  --pr-body "Bumping node version to 24 in GitHub action due to deprecation."

3. 结果

multi-gitter 会遍历你的仓库。如果脚本产生了更改(即它找到了需要更新的文件),该工具会自动:

  • Fork/克隆仓库。
  • 将更改推送到 upgrade-to-node-24 分支。
  • 使用你的描述打开一个 Pull Request。

你甚至可以使用 --interactive 标志,在 PR 创建之前在终端中审查更改。

为什么这很重要

像版本升级这样的维护任务不应占用你的冲刺时间。通过将整个 GitHub 组织视为一个单一的 monorepo 来进行这些更改,你可以节省大量的上下文切换时间。

前往 GitHub 上的 multi-gitter 查看安装方法并获取更多批量管理仓库的方案。

Back to Blog

相关文章

阅读更多 »

Rapg:基于 TUI 的密钥管理器

我们都有这种经历。你加入一个新项目,首先听到的就是:“在 Slack 的置顶消息里查找 .env 文件”。或者你有多个 .env …

技术是赋能者,而非救世主

为什么思考的清晰度比你使用的工具更重要。Technology 常被视为一种魔法开关——只要打开,它就能让一切改善。新的 software,...

踏入 agentic coding

使用 Copilot Agent 的经验 我主要使用 GitHub Copilot 进行 inline edits 和 PR reviews,让我的大脑完成大部分思考。最近我决定 t...