Node 20에서 Node 24로 GitHub Actions 일괄 마이그레이션
Source: Dev.to
GitHub 조직을 관리한다면, 이런 상황을 잘 아실 겁니다: GitHub가 Node.js 버전 폐지를 발표하면, 갑자기 받은 편지함에 경고가 가득합니다.
Node 20이 유지 관리 모드에 진입하면서 .github/workflows 파일이 수십 개씩 있을 텐데, 모두 버전을 올려야 합니다. 각 레포를 복제하고, YAML을 수정하고, 커밋하고, 푸시하고, PR을 열어야 … 50번을 반복할 수도 있겠죠.
아니면 multi-gitter 로 한 번에 처리할 수 있습니다.
The One-Shot Fix
multi-gitter는 조직 내 모든 레포지토리에서 스크립트를 컨텍스트에 맞게 실행할 수 있게 해 주는 오픈‑소스 도구입니다. 복제, 브랜치 생성, 커밋, PR 생성까지 자동으로 처리해 줍니다.
아래와 같이 3분 안에 전체 조직의 Node 버전을 한 번에 올릴 수 있습니다.
1. The Script
먼저 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. The Command
다음 명령을 실행해 multi-gitter 로 스크립트를 조직 전체에 적용합니다 (예: my-company-org).
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. The Result
multi-gitter 가 레포지토리를 하나씩 순회합니다. 스크립트가 변경을 만들면(즉, 업데이트할 파일을 찾으면) 도구가 자동으로:
- 레포를 포크/클론
upgrade-to-node-24브랜치에 변경 사항 푸시- 설명과 함께 Pull Request 생성
을 수행합니다.
--interactive 플래그를 사용하면 PR이 생성되기 전에 터미널에서 변경 내용을 검토할 수도 있습니다.
Why this matters
버전 업그레이드 같은 유지 보수 작업이 스프린트를 잡아먹게 해서는 안 됩니다. 이러한 변경을 위해 전체 GitHub 조직을 하나의 모노레포처럼 다루면 컨텍스트 전환에 드는 시간을 크게 절감할 수 있습니다.
multi-gitter on GitHub 를 확인해 설치하고, 레포지토리를 대량으로 관리할 수 있는 더 많은 레시피를 살펴보세요.