| #!/bin/bash | |
| # Copyright 2017 The Chromium Authors | |
| # Use of this source code is governed by a BSD-style license that can be | |
| # found in the LICENSE file. | |
| # Script for updating Node binaries. | |
| # 1) Update NODE_VERSION variable below to the desired version. | |
| # 2) Run this script without any flags first to download all the binaries | |
| # locally. | |
| # 3) Authenticate using your @google account by running `gsutil.py config` | |
| # (prerequisite for step #4 below). | |
| # 4) To upload the binaries to the Google Storage bucket, use the | |
| # `--upload` or `-u` flag. This will upload the binaries to | |
| # the Google Storage bucket and update the DEPS file. | |
| # 5) Land a CL with the changes generated by this script. | |
| set -eu | |
| cd "$(dirname "$0")" | |
| BASE_URL="https://nodejs.org/dist" | |
| NODE_VERSION="v24.12.0" | |
| upload=false # Default value | |
| # The script can take a command line flag and check if it is valid. | |
| # If the flag `--upload` | `-u` is passed in, then the script | |
| # uploads the binaries and update the DEPS. | |
| while [[ $# -gt 0 ]]; do | |
| case $1 in | |
| -u|--upload) | |
| upload=true | |
| shift | |
| ;; | |
| *) | |
| echo "Unknown option: $1" | |
| exit 1 | |
| ;; | |
| esac | |
| done | |
| upload_unix(){ | |
| local SUFFIX="$1" | |
| local FOLDER="$2" | |
| local UPLOAD_FILE="${FOLDER}/node-${SUFFIX}.tar.gz" | |
| if [[ -e "${UPLOAD_FILE}" ]]; then | |
| if [[ "$SUFFIX" == "darwin-x64" ]]; then | |
| local PATHNAME="src/third_party/node/mac" | |
| fi | |
| if [[ "$SUFFIX" == "darwin-arm64" ]]; then | |
| local PATHNAME="src/third_party/node/mac_arm64" | |
| fi | |
| if [[ "$SUFFIX" == "linux-x64" ]]; then | |
| local PATHNAME="src/third_party/node/linux" | |
| fi | |
| ./upload_to_gcs_and_update_deps "${UPLOAD_FILE}" "${PATHNAME}" | |
| echo "DONE uploading ${SUFFIX} binaries and updating DEPS file.." | |
| else | |
| echo "Error: File '${UPLOAD_FILE}' does not exist." | |
| echo "Please run ./update_node_binaries to download binaries locally first." | |
| fi | |
| } | |
| upload_win(){ | |
| local FILENAME="node.exe" | |
| local FOLDER="win" | |
| local UPLOAD_FILE="${FOLDER}/${FILENAME}" | |
| if [[ -e "${UPLOAD_FILE}" ]]; then | |
| ./upload_to_gcs_and_update_deps "${UPLOAD_FILE}" src/third_party/node/win | |
| echo "DONE uploading Windows binaries and updating DEPS file.." | |
| else | |
| echo "Error: File '$UPLOAD_FILE' does not exist." | |
| echo "Please run ./update_node_binaries to download binaries locally first." | |
| fi | |
| } | |
| download_unix() { | |
| local SUFFIX="$1" | |
| local FOLDER="$2" | |
| local FILENAME="node-${NODE_VERSION}-${SUFFIX}.tar.gz" | |
| local URL="${BASE_URL}/${NODE_VERSION}/${FILENAME}" | |
| rm -f "${FOLDER}/${FILENAME}" | |
| wget -P "${FOLDER}/" "${URL}" | |
| # Check SHASUMS256 of downloaded binary. | |
| local sha256_expected | |
| sha256_expected="$(grep "$FILENAME" SHASUMS256.txt | cut -d ' ' -f1)" | |
| local sha256_actual | |
| sha256_actual="$(sha256sum "${FOLDER}/${FILENAME}" | cut -d ' ' -f1)" | |
| if [ "${sha256_expected}" != "${sha256_actual}" ]; then | |
| echo "SHA256 mismatch. Exiting..." | |
| exit 1 | |
| fi | |
| # Unpack temporarily, delete npm, npx, corepack and re-pack. | |
| tar xfz "${FOLDER}/${FILENAME}" -C "${FOLDER}/" | |
| rm "${FOLDER}/${FILENAME}" | |
| rm "${FOLDER}/node-${NODE_VERSION}-${SUFFIX}/bin/corepack" | |
| rm -rf "${FOLDER}/node-${NODE_VERSION}-${SUFFIX}/lib/node_modules/corepack" | |
| rm "${FOLDER}/node-${NODE_VERSION}-${SUFFIX}/bin/npm" | |
| rm -rf "${FOLDER}/node-${NODE_VERSION}-${SUFFIX}/lib/node_modules/npm" | |
| rm "${FOLDER}/node-${NODE_VERSION}-${SUFFIX}/bin/npx" | |
| # Drop the version info from the name, since it is redundant and would make | |
| # rolling new versions more involved. | |
| rm -rf "${FOLDER}/node-${SUFFIX}/" | |
| mv "${FOLDER}/node-${NODE_VERSION}-${SUFFIX}/" "${FOLDER}/node-${SUFFIX}/" | |
| tar cfz "${FOLDER}/node-${SUFFIX}.tar.gz" -C "${FOLDER}" "node-${SUFFIX}/" | |
| } | |
| download_win() { | |
| local FILENAME="node.exe" | |
| local FOLDER="win" | |
| local WINDOWS_URL="${BASE_URL}/${NODE_VERSION}/win-x64/${FILENAME}" | |
| rm -f "${FOLDER}/${FILENAME}" | |
| wget -P "${FOLDER}/" "${WINDOWS_URL}" | |
| # Check SHASUMS256 of downloaded binary. | |
| local sha256_expected | |
| sha256_expected="$(grep "win-x64/$FILENAME" SHASUMS256.txt | cut -d ' ' -f1)" | |
| local sha256_actual | |
| sha256_actual="$(sha256sum "${FOLDER}/${FILENAME}" | cut -d ' ' -f1)" | |
| if [ "${sha256_expected}" != "${sha256_actual}" ]; then | |
| echo "SHA256 mismatch. Exiting..." | |
| exit 1 | |
| fi | |
| } | |
| if [[ $upload != true ]]; then | |
| # First download checksum file. | |
| rm -f "SHASUMS256.txt" | |
| wget "https://nodejs.org/dist/${NODE_VERSION}/SHASUMS256.txt" | |
| download_unix "darwin-x64" "mac" | |
| download_unix "darwin-arm64" "mac" | |
| download_unix "linux-x64" "linux" | |
| download_win | |
| echo "To upload the binaries, please run ./update_node_binaries --upload" | |
| else | |
| echo "Uploading to GCS and updating DEPS files..." | |
| upload_unix "darwin-x64" "mac" | |
| upload_unix "darwin-arm64" "mac" | |
| upload_unix "linux-x64" "linux" | |
| upload_win | |
| fi |