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