From 0a46fe16510f3d6bb9421f4cf4cd8ab0ee495863 Mon Sep 17 00:00:00 2001 From: Marco Ippolito Date: Mon, 17 Apr 2023 18:49:03 +0200 Subject: [PATCH] tools: automate v8 patch update --- .github/workflows/update-v8.yml | 63 +++++++++++++++++++++++++++ tools/dep_updaters/update-v8-patch.sh | 35 +++++++++++++++ 2 files changed, 98 insertions(+) create mode 100644 .github/workflows/update-v8.yml create mode 100755 tools/dep_updaters/update-v8-patch.sh diff --git a/.github/workflows/update-v8.yml b/.github/workflows/update-v8.yml new file mode 100644 index 00000000000000..2676f3423ebe2b --- /dev/null +++ b/.github/workflows/update-v8.yml @@ -0,0 +1,63 @@ +name: V8 update +on: + schedule: + # Run once a week at 00:05 AM UTC on Sunday. + - cron: 5 0 * * 0 + + workflow_dispatch: + inputs: + id: + description: The ID of the job to run + required: true + default: all + type: choice + options: + - all + - patch +permissions: + contents: read + +jobs: + v8-update: + if: github.repository == 'nodejs/node' + runs-on: ubuntu-latest + strategy: + fail-fast: false # Prevent other jobs from aborting if one fails + matrix: + include: + - id: patch + subsystem: deps + label: dependencies + run: | + ./tools/dep_updaters/update-v8-patch.sh > temp-output + cat temp-output + tail -n1 temp-output | grep "NEW_VERSION=" >> "$GITHUB_ENV" || true + rm temp-output + steps: + - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 + if: github.event_name == 'schedule' || inputs.id == 'all' || inputs.id == matrix.id + with: + persist-credentials: false + - uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 # v3.3.1 + with: + path: ~/.update-v8/v8 + - run: ${{ matrix.run }} + if: github.event_name == 'schedule' || inputs.id == 'all' || inputs.id == matrix.id + - name: Generate commit message if not set + if: env.COMMIT_MSG == '' && (github.event_name == 'schedule' || inputs.id == 'all' || inputs.id == matrix.id) + run: | + echo "COMMIT_MSG=${{ matrix.subsystem }}: update v8 to ${{ env.NEW_VERSION }}" >> "$GITHUB_ENV" + - uses: gr2m/create-or-update-pull-request-action@77596e3166f328b24613f7082ab30bf2d93079d5 + if: github.event_name == 'schedule' || inputs.id == 'all' || inputs.id == matrix.id + # Creates a PR or update the Action's existing PR, or + # no-op if the base branch is already up-to-date. + env: + GITHUB_TOKEN: ${{ secrets.GH_USER_TOKEN }} + with: + author: Node.js GitHub Bot + body: This is an automated update of v8 to ${{ env.NEW_VERSION }}. + branch: actions/update-v8-${{ matrix.id }} # Custom branch *just* for this Action. + commit-message: ${{ env.COMMIT_MSG }} + labels: ${{ matrix.label }} + title: '${{ matrix.subsystem }}: update v8 to ${{ env.NEW_VERSION }}' + update-pull-request-title-and-body: true diff --git a/tools/dep_updaters/update-v8-patch.sh b/tools/dep_updaters/update-v8-patch.sh new file mode 100755 index 00000000000000..fcfa7d196bdc02 --- /dev/null +++ b/tools/dep_updaters/update-v8-patch.sh @@ -0,0 +1,35 @@ +#!/bin/sh +set -e +# Shell script to update v8 patch update + +BASE_DIR=$(cd "$(dirname "$0")/../.." && pwd) + +cd "$BASE_DIR" + +IS_UP_TO_DATE=$(git node v8 minor | grep "V8 is up-to-date") + +if [ -n "$IS_UP_TO_DATE" ]; then + echo "Skipped because V8 is on the latest version." + exit 0 +fi + +DEPS_DIR="$BASE_DIR/deps" + +CURRENT_MAJOR_VERSION=$(grep "#define V8_MAJOR_VERSION" "$DEPS_DIR/v8/include/v8-version.h" | cut -d ' ' -f3) +CURRENT_MINOR_VERSION=$(grep "#define V8_MINOR_VERSION" "$DEPS_DIR/v8/include/v8-version.h" | cut -d ' ' -f3) +CURRENT_BUILD_VERSION=$(grep "#define V8_BUILD_NUMBER" "$DEPS_DIR/v8/include/v8-version.h" | cut -d ' ' -f3) +CURRENT_PATCH_VERSION=$(grep "#define V8_PATCH_LEVEL" "$DEPS_DIR/v8/include/v8-version.h" | cut -d ' ' -f3) + +NEW_VERSION="$CURRENT_MAJOR_VERSION.$CURRENT_MINOR_VERSION.$CURRENT_BUILD_VERSION.$CURRENT_PATCH_VERSION" + +echo "All done!" +echo "" +echo "Please git add v8, commit the new version:" +echo "" +echo "$ git add -A deps/v8" +echo "$ git commit -m \"deps: update v8 to $NEW_VERSION\"" +echo "" + +# The last line of the script should always print the new version, +# as we need to add it to $GITHUB_ENV variable. +echo "NEW_VERSION=$NEW_VERSION"