From 0b78ac53ad67009214200326c9abacf0a64f3bc9 Mon Sep 17 00:00:00 2001 From: Marco Ippolito Date: Sat, 25 Mar 2023 15:26:01 +0100 Subject: [PATCH] tools: standardize update-llhttp.sh PR-URL: https://github.com/nodejs/node/pull/47198 Refs: https://github.com/nodejs/security-wg/issues/828 Reviewed-By: Rafael Gonzaga Reviewed-By: Matteo Collina Reviewed-By: Paolo Insogna Reviewed-By: Tierney Cyren --- .github/workflows/tools.yml | 13 ++--- doc/contributing/maintaining-http.md | 2 +- tools/dep_updaters/update-llhttp.sh | 83 ++++++++++++++++++++++++++++ tools/update-llhttp.sh | 63 --------------------- 4 files changed, 88 insertions(+), 73 deletions(-) create mode 100755 tools/dep_updaters/update-llhttp.sh delete mode 100755 tools/update-llhttp.sh diff --git a/.github/workflows/tools.yml b/.github/workflows/tools.yml index c8fbd5b4eddd53..0b4e8c9f79ec86 100644 --- a/.github/workflows/tools.yml +++ b/.github/workflows/tools.yml @@ -150,15 +150,10 @@ jobs: subsystem: deps label: dependencies run: | - NEW_VERSION=$(gh api repos/nodejs/llhttp/releases/latest -q '.tag_name|ltrimstr("release/v")') - CURRENT_MAJOR_VERSION=$(grep "#define LLHTTP_VERSION_MAJOR" ./deps/llhttp/include/llhttp.h | sed -n "s/^.*MAJOR \(.*\)/\1/p") - CURRENT_MINOR_VERSION=$(grep "#define LLHTTP_VERSION_MINOR" ./deps/llhttp/include/llhttp.h | sed -n "s/^.*MINOR \(.*\)/\1/p") - CURRENT_PATCH_VERSION=$(grep "#define LLHTTP_VERSION_PATCH" ./deps/llhttp/include/llhttp.h | sed -n "s/^.*PATCH \(.*\)/\1/p") - CURRENT_VERSION="$CURRENT_MAJOR_VERSION.$CURRENT_MINOR_VERSION.$CURRENT_PATCH_VERSION" - if [ "$NEW_VERSION" != "$CURRENT_VERSION" ]; then - echo "NEW_VERSION=$NEW_VERSION" >> $GITHUB_ENV - ./tools/update-llhttp.sh "$NEW_VERSION" - fi + ./tools/dep_updaters/update-llhttp.sh > temp-output + cat temp-output + tail -n1 temp-output | grep "NEW_VERSION=" >> "$GITHUB_ENV" || true + rm temp-output - id: c-ares subsystem: deps label: dependencies diff --git a/doc/contributing/maintaining-http.md b/doc/contributing/maintaining-http.md index dab06fdc6ed84a..88d6fdb6ee55e5 100644 --- a/doc/contributing/maintaining-http.md +++ b/doc/contributing/maintaining-http.md @@ -79,7 +79,7 @@ repository. Updates are pulled into Node.js under [deps/llhttp](https://github.com/nodejs/node/tree/HEAD/deps/llhttp). In order to update Node.js with a new version of llhttp you can use the -`tools/update-llhttp.sh` script. +`tools/dep_updaters/update-llhttp.sh` script. The contents of the `deps/llhttp` folder should look like the following: diff --git a/tools/dep_updaters/update-llhttp.sh b/tools/dep_updaters/update-llhttp.sh new file mode 100755 index 00000000000000..9c46536f205b40 --- /dev/null +++ b/tools/dep_updaters/update-llhttp.sh @@ -0,0 +1,83 @@ +#!/bin/sh +set -e + +# Shell script to update llhttp in the source tree to specific version + +BASE_DIR=$(cd "$(dirname "$0")/../.." && pwd) +DEPS_DIR="${BASE_DIR}/deps" + +[ -z "$NODE" ] && NODE="$BASE_DIR/out/Release/node" +[ -x "$NODE" ] || NODE=$(command -v node) + +NEW_VERSION="$("$NODE" --input-type=module <<'EOF' +const res = await fetch('https://api.github.com/repos/nodejs/llhttp/releases/latest'); +if (!res.ok) throw new Error(`FetchError: ${res.status} ${res.statusText}`, { cause: res }); +const { tag_name } = await res.json(); +console.log(tag_name.replace('release/v', '')); +EOF +)" + +CURRENT_MAJOR_VERSION=$(grep "#define LLHTTP_VERSION_MAJOR" ./deps/llhttp/include/llhttp.h | sed -n "s/^.*MAJOR \(.*\)/\1/p") +CURRENT_MINOR_VERSION=$(grep "#define LLHTTP_VERSION_MINOR" ./deps/llhttp/include/llhttp.h | sed -n "s/^.*MINOR \(.*\)/\1/p") +CURRENT_PATCH_VERSION=$(grep "#define LLHTTP_VERSION_PATCH" ./deps/llhttp/include/llhttp.h | sed -n "s/^.*PATCH \(.*\)/\1/p") +CURRENT_VERSION="$CURRENT_MAJOR_VERSION.$CURRENT_MINOR_VERSION.$CURRENT_PATCH_VERSION" + +echo "Comparing $NEW_VERSION with $CURRENT_VERSION" + +if [ "$NEW_VERSION" = "$CURRENT_VERSION" ]; then + echo "Skipped because llhttp is on the latest version." + exit 0 +fi + +cleanup () { + EXIT_CODE=$? + [ -d "$WORKSPACE" ] && rm -rf "$WORKSPACE" + exit $EXIT_CODE +} + +echo "Making temporary workspace ..." +WORKSPACE=$(mktemp -d 2> /dev/null || mktemp -d -t 'tmp') +trap cleanup INT TERM EXIT + +cd "$WORKSPACE" + +if echo "$NEW_VERSION" | grep -qs "/" ; then # Download a release + REPO="git@github.com:$NEW_VERSION.git" + BRANCH=$2 + [ -z "$BRANCH" ] && BRANCH=main + + echo "Cloning llhttp source archive $REPO ..." + git clone "$REPO" llhttp + cd llhttp + echo "Checking out branch $BRANCH ..." + git checkout "$BRANCH" + + echo "Building llhtttp ..." + npm install + make release + + echo "Copying llhtttp release ..." + rm -rf "$DEPS_DIR/llhttp" + cp -a release "$DEPS_DIR/llhttp" +else + echo "Download llhttp release $NEW_VERSION ..." + curl -sL -o llhttp.tar.gz "https://github.com/nodejs/llhttp/archive/refs/tags/release/v$NEW_VERSION.tar.gz" + gzip -dc llhttp.tar.gz | tar xf - + + echo "Copying llhtttp release ..." + rm -rf "$DEPS_DIR/llhttp" + cp -a "llhttp-release-v$NEW_VERSION" "$DEPS_DIR/llhttp" +fi + +echo "" +echo "All done!" +echo "" +echo "Please git add llhttp, commit the new version:" +echo "" +echo "$ git add -A deps/llhttp" +echo "$ git commit -m \"deps: update llhttp 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" diff --git a/tools/update-llhttp.sh b/tools/update-llhttp.sh deleted file mode 100755 index 12772e18e23eb9..00000000000000 --- a/tools/update-llhttp.sh +++ /dev/null @@ -1,63 +0,0 @@ -#!/bin/sh -set -e - -# Shell script to update llhttp in the source tree to specific version - -BASE_DIR=$(cd "$(dirname "$0")/.." && pwd) -DEPS_DIR="${BASE_DIR}/deps" -LLHTTP_VERSION="$1" - -if [ "$#" -le 0 ]; then - echo "Error: Please provide an llhttp version to update to." - echo "Error: To download directly from GitHub, use the organization/repository syntax, without the .git suffix." - exit 1 -fi - -cleanup () { - EXIT_CODE=$? - [ -d "$WORKSPACE" ] && rm -rf "$WORKSPACE" - exit $EXIT_CODE -} - -echo "Making temporary workspace ..." -WORKSPACE=$(mktemp -d 2> /dev/null || mktemp -d -t 'tmp') -trap cleanup INT TERM EXIT - -cd "$WORKSPACE" - -if echo "$LLHTTP_VERSION" | grep -qs "/" ; then # Download a release - REPO="git@github.com:$LLHTTP_VERSION.git" - BRANCH=$2 - [ -z "$BRANCH" ] && BRANCH=main - - echo "Cloning llhttp source archive $REPO ..." - git clone "$REPO" llhttp - cd llhttp - echo "Checking out branch $BRANCH ..." - git checkout "$BRANCH" - - echo "Building llhtttp ..." - npm install - make release - - echo "Copying llhtttp release ..." - rm -rf "$DEPS_DIR/llhttp" - cp -a release "$DEPS_DIR/llhttp" -else - echo "Download llhttp release $LLHTTP_VERSION ..." - curl -sL -o llhttp.tar.gz "https://github.com/nodejs/llhttp/archive/refs/tags/release/v$LLHTTP_VERSION.tar.gz" - gzip -dc llhttp.tar.gz | tar xf - - - echo "Copying llhtttp release ..." - rm -rf "$DEPS_DIR/llhttp" - cp -a "llhttp-release-v$LLHTTP_VERSION" "$DEPS_DIR/llhttp" -fi - -echo "" -echo "All done!" -echo "" -echo "Please git add llhttp, commit the new version:" -echo "" -echo "$ git add -A deps/llhttp" -echo "$ git commit -m \"deps: update llhttp to $LLHTTP_VERSION\"" -echo ""