Create new Node.js patch #26
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Create new Node.js patch | |
on: | |
workflow_dispatch: | |
inputs: | |
nodeVersion: | |
description: 'Node.js version (e.g. 20.11.0)' | |
default: '' | |
type: string | |
required: true | |
patchFile: | |
description: 'Patch version to use (e.g. 20.11.0). Leave empty to use the matching major patch' | |
default: '' | |
type: string | |
required: false | |
jobs: | |
build: | |
permissions: | |
contents: write | |
pull-requests: write | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Checkout nodejs and create new patch | |
run: | | |
# find the patch file by checking the patch file matching major version input node version | |
MAJOR_VERSION=$(echo ${{ inputs.nodeVersion }} | cut -d'.' -f1) | |
echo "Node.js major version: $MAJOR_VERSION" | |
if [ -z "${{ inputs.patchFile }}" ]; then | |
PATCH_FILE=$(ls patches/node.v$MAJOR_VERSION.*.patch) | |
else | |
PATCH_FILE=patches/node.v${{ inputs.patchFile }}.cpp.patch | |
fi | |
# extract patch version from PATCH_FILE. E.g. node.v20.11.1.cpp.patch --> 20.11.1 | |
PATCH_VERSION=$(echo $PATCH_FILE | grep -oP 'node.v\K[0-9]+\.[0-9]+\.[0-9]+') | |
echo "Patch file: $PATCH_FILE" | |
# check if patch file exists | |
if [ ! -f "$PATCH_FILE" ]; then | |
echo "No patch file found for Node.js version ${{ inputs.nodeVersion }}" | |
exit 1 | |
fi | |
cd .. | |
echo "Cloning Node.js repository" | |
git clone -b v${{ inputs.nodeVersion }} --single-branch https://github.com/nodejs/node.git | |
cd node | |
# apply the patch, if there are conflicts exit with error | |
echo "Applying patch $PATCH_FILE" | |
git apply --check ../pkg-fetch/$PATCH_FILE | |
if [ $? -ne 0 ]; then | |
echo "Patch $PATCH_FILE does not apply cleanly" | |
exit 1 | |
fi | |
echo "Patch $PATCH_FILE applies cleanly, creating new patch file" | |
git apply ../pkg-fetch/$PATCH_FILE | |
# delete old patch file and create new one | |
rm -rf ../pkg-fetch/$PATCH_FILE | |
git add -A | |
git diff --staged --src-prefix=node/ --dst-prefix=node/ > ../pkg-fetch/patches/node.v${{ inputs.nodeVersion }}.cpp.patch | |
# Update patches.json | |
echo "Updating patches.json" | |
cd ../pkg-fetch/patches | |
sed -i "s/\"v$PATCH_VERSION\": \[\"node.v$PATCH_VERSION.cpp.patch\"\]/\"v${{ inputs.nodeVersion }}\": \[\"node.v${{ inputs.nodeVersion }}.cpp.patch\"\]/" patches.json | |
- name: Create Pull Request | |
uses: peter-evans/create-pull-request@v4 | |
with: | |
token: ${{ secrets.GITHUB_TOKEN }} | |
commit-message: "feat: add v${{ inputs.nodeVersion }} patch" | |
title: "feat: add v${{ inputs.nodeVersion }} patch" | |
body: "This PR bumps the Node.js patch version to v${{ inputs.nodeVersion }}" | |
branch: "nodejs-v${{ inputs.nodeVersion }}" | |
base: "main" | |
delete-branch: true | |
labels: "enhancement, nodejs" | |
draft: false | |