Skip to content

Commit

Permalink
chore(NODE-6401): migrate node download script to drivers-tools (#718)
Browse files Browse the repository at this point in the history
  • Loading branch information
nbbeeken authored Oct 15, 2024
1 parent 064ba91 commit c08fa56
Show file tree
Hide file tree
Showing 14 changed files with 44 additions and 132 deletions.
5 changes: 4 additions & 1 deletion .evergreen/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ functions:
binary: bash
add_expansions_to_env: true
args:
- .evergreen/setup-environment.sh
- '.evergreen/prepare-shell.sh'
- command: expansions.update
params:
file: src/expansion.yml
Expand Down Expand Up @@ -76,6 +76,7 @@ functions:
params:
working_dir: src
timeout_secs: 60
add_expansions_to_env: true
env:
PROJECT_DIRECTORY: ${PROJECT_DIRECTORY}
TS_VERSION: "${TS_VERSION}"
Expand All @@ -89,6 +90,7 @@ functions:
params:
working_dir: src
timeout_secs: 60
add_expansions_to_env: true
env:
PROJECT_DIRECTORY: ${PROJECT_DIRECTORY}
binary: bash
Expand All @@ -100,6 +102,7 @@ functions:
params:
working_dir: src
binary: bash
add_expansions_to_env: true
env:
PROJECT_DIRECTORY: ${PROJECT_DIRECTORY}
args:
Expand Down
21 changes: 0 additions & 21 deletions .evergreen/init-node-and-npm-env.sh

This file was deleted.

109 changes: 9 additions & 100 deletions .evergreen/install-dependencies.sh
Original file line number Diff line number Diff line change
@@ -1,108 +1,17 @@
#!/usr/bin/env bash
set -o errexit # Exit the script with error if any of the commands fail

NODE_LTS_VERSION=${NODE_LTS_VERSION:-16}
# allowed values:
## a nodejs major version (i.e., 16)
## 'latest'
## a full nodejs version, in the format v<major>.<minor>.patch
export NODE_LTS_VERSION=${NODE_LTS_VERSION:-16}
# npm version can be defined in the environment for cases where we need to install
# a version lower than latest to support EOL Node versions.
NPM_VERSION=${NPM_VERSION:-latest}
export NPM_VERSION=${NPM_VERSION:-latest}

source "${PROJECT_DIRECTORY}/.evergreen/init-node-and-npm-env.sh"

if [[ -z "${npm_global_prefix}" ]]; then echo "npm_global_prefix is unset" && exit 1; fi
if [[ -z "${NODE_ARTIFACTS_PATH}" ]]; then echo "NODE_ARTIFACTS_PATH is unset" && exit 1; fi

CURL_FLAGS=(
--fail # Exit code 1 if request fails
--compressed # Request a compressed response should keep fetching fast
--location # Follow a redirect
--retry 8 # Retry HTTP 408, 429, 500, 502, 503 or 504, 8 times
--silent # Do not print a progress bar
--show-error # Despite the silent flag still print out errors
--max-time 900 # 900 seconds is 15 minutes, evergreen times out at 20
--continue-at - # If a download is interrupted it can figure out where to resume
)

mkdir -p "$NODE_ARTIFACTS_PATH/npm_global"

# Comparisons are all case insensitive
shopt -s nocasematch

# index.tab is a sorted tab separated values file with the following headers
# 0 1 2 3 4 5 6 7 8 9 10
# version date files npm v8 uv zlib openssl modules lts security
curl "${CURL_FLAGS[@]}" "https://nodejs.org/dist/index.tab" --output node_index.tab

while IFS=$'\t' read -r -a row; do
node_index_version="${row[0]}"
node_index_major_version=$(echo $node_index_version | sed -E 's/^v([0-9]+).*$/\1/')
node_index_date="${row[1]}"
node_index_lts="${row[9]}"
[[ "$node_index_version" = "version" ]] && continue # skip tsv header
[[ "$NODE_LTS_VERSION" = "latest" ]] && break # first line is latest
[[ "$NODE_LTS_VERSION" = "$node_index_version" ]] && break # match full version if specified
[[ "$NODE_LTS_VERSION" = "$node_index_major_version" ]] && break # case insensitive compare
done < node_index.tab

if [[ "$OS" = "Windows_NT" ]]; then
operating_system="win"
elif [[ $(uname) = "darwin" ]]; then
operating_system="darwin"
elif [[ $(uname) = "linux" ]]; then
operating_system="linux"
else
echo "Unable to determine operating system: $operating_system"
exit 1
fi

architecture=$(uname -m)
if [[ $architecture = "x86_64" ]]; then
architecture="x64"
elif [[ $architecture = "arm64" ]]; then
architecture="arm64"
elif [[ $architecture = "aarch64" ]]; then
architecture="arm64"
elif [[ $architecture == s390* ]]; then
architecture="s390x"
elif [[ $architecture == ppc* ]]; then
architecture="ppc64le"
else
echo "Unable to determine operating system: $architecture"
exit 1
fi

file_extension="tar.gz"
if [[ "$OS" = "Windows_NT" ]]; then file_extension="zip"; fi

node_directory="node-${node_index_version}-${operating_system}-${architecture}"
node_archive="${node_directory}.${file_extension}"
node_archive_path="$NODE_ARTIFACTS_PATH/${node_archive}"
node_download_url="https://nodejs.org/dist/${node_index_version}/${node_archive}"

echo "Node.js ${node_index_version} for ${operating_system}-${architecture} released on ${node_index_date}"

set -o xtrace

curl "${CURL_FLAGS[@]}" "${node_download_url}" --output "$node_archive_path"

if [[ "$file_extension" = "zip" ]]; then
unzip -q "$node_archive_path" -d "${NODE_ARTIFACTS_PATH}"
mkdir -p "${NODE_ARTIFACTS_PATH}/nodejs"
# Windows "bins" are at the top level
mv "${NODE_ARTIFACTS_PATH}/${node_directory}" "${NODE_ARTIFACTS_PATH}/nodejs/bin"
# Need to add executable flag ourselves
chmod +x "${NODE_ARTIFACTS_PATH}/nodejs/bin/node.exe"
chmod +x "${NODE_ARTIFACTS_PATH}/nodejs/bin/npm"
else
tar -xf "$node_archive_path" -C "${NODE_ARTIFACTS_PATH}"
mv "${NODE_ARTIFACTS_PATH}/${node_directory}" "${NODE_ARTIFACTS_PATH}/nodejs"
fi

if [[ $operating_system != "win" ]]; then
npm install --global npm@$NPM_VERSION
hash -r
fi

echo "npm location: $(which npm)"
echo "npm version: $(npm -v)"
source $DRIVERS_TOOLS/.evergreen/install-node.sh

npm install "${NPM_OPTIONS}"

npm ls
20 changes: 19 additions & 1 deletion .evergreen/setup-environment.sh → .evergreen/prepare-shell.sh
Original file line number Diff line number Diff line change
@@ -1,5 +1,22 @@
#! /usr/bin/env bash

# Only set errexit and xtrace if shell is NOT interactive
[[ $- == *i* ]] || set -o xtrace
[[ $- == *i* ]] || set -o errexit

PROJECT_DIRECTORY="$(pwd)"
DRIVERS_TOOLS=$(cd .. && echo "$(pwd)/drivers-tools")
export PROJECT_DIRECTORY
export DRIVERS_TOOLS


if [ ! -d "$DRIVERS_TOOLS" ]; then
# Only clone driver tools if it does not exist
git clone --depth=1 "https://github.com/mongodb-labs/drivers-evergreen-tools.git" "${DRIVERS_TOOLS}"
fi

echo "installed DRIVERS_TOOLS from commit $(git -C "${DRIVERS_TOOLS}" rev-parse HEAD)"

if [ -z "$NODE_LTS_VERSION" ]; then
echo "NODE_LTS_VERSION environment variable must be specified"
exit 1
Expand All @@ -11,17 +28,18 @@ if [ "${is_patch}" = "true" ]; then
else
CURRENT_VERSION=latest
fi
export PROJECT_DIRECTORY="$(pwd)"

cat <<EOT > expansion.yml
CURRENT_VERSION: "$CURRENT_VERSION"
PROJECT_DIRECTORY: "$PROJECT_DIRECTORY"
NODE_LTS_VERSION: "$NODE_LTS_VERSION"
DRIVERS_TOOLS: "$DRIVERS_TOOLS"
PREPARE_SHELL: |
set -o errexit
set -o xtrace
export PROJECT_DIRECTORY="$PROJECT_DIRECTORY"
export NODE_LTS_VERSION="$NODE_LTS_VERSION"
export DRIVERS_TOOLS="$DRIVERS_TOOLS"
EOT
# See what we've done
cat expansion.yml
2 changes: 1 addition & 1 deletion .evergreen/run-big-endian-test.sh
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#!/usr/bin/env bash

source "${PROJECT_DIRECTORY}/.evergreen/init-node-and-npm-env.sh"
source $DRIVERS_TOOLS/.evergreen/init-node-and-npm-env.sh

npx mocha test/s390x/big_endian.test.ts
2 changes: 1 addition & 1 deletion .evergreen/run-bundling-test.sh
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#! /usr/bin/env bash

source "${PROJECT_DIRECTORY}/.evergreen/init-node-and-npm-env.sh"
source $DRIVERS_TOOLS/.evergreen/init-node-and-npm-env.sh

set -o xtrace
set -o errexit
Expand Down
2 changes: 1 addition & 1 deletion .evergreen/run-checks.sh
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#!/bin/bash
set -o errexit # Exit the script with error if any of the commands fail

source "${PROJECT_DIRECTORY}/.evergreen/init-node-and-npm-env.sh"
source $DRIVERS_TOOLS/.evergreen/init-node-and-npm-env.sh

npm run check:lint
2 changes: 1 addition & 1 deletion .evergreen/run-custom-benchmarks.sh
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#!/usr/bin/env bash

source "${PROJECT_DIRECTORY}/.evergreen/init-node-and-npm-env.sh"
source $DRIVERS_TOOLS/.evergreen/init-node-and-npm-env.sh
set -o xtrace

npm run check:custom-bench
2 changes: 1 addition & 1 deletion .evergreen/run-eslint-plugin-test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

set -o errexit

source "${PROJECT_DIRECTORY}/.evergreen/init-node-and-npm-env.sh"
source $DRIVERS_TOOLS/.evergreen/init-node-and-npm-env.sh

cd etc/eslint/no-bigint-usage
npm install
Expand Down
2 changes: 1 addition & 1 deletion .evergreen/run-granular-benchmarks.sh
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#!/usr/bin/env bash

source "${PROJECT_DIRECTORY}/.evergreen/init-node-and-npm-env.sh"
source $DRIVERS_TOOLS/.evergreen/init-node-and-npm-env.sh
set -o xtrace
WARMUP=$WARMUP
ITERATIONS=$ITERATIONS
Expand Down
2 changes: 1 addition & 1 deletion .evergreen/run-spec-benchmarks.sh
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#!/usr/bin/env bash

source "${PROJECT_DIRECTORY}/.evergreen/init-node-and-npm-env.sh"
source $DRIVERS_TOOLS/.evergreen/init-node-and-npm-env.sh

npm run check:spec-bench
2 changes: 1 addition & 1 deletion .evergreen/run-tests.sh
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#!/usr/bin/env bash

source "${PROJECT_DIRECTORY}/.evergreen/init-node-and-npm-env.sh"
source $DRIVERS_TOOLS/.evergreen/init-node-and-npm-env.sh

case "${TEST_TARGET}" in
"node")
Expand Down
2 changes: 1 addition & 1 deletion .evergreen/run-typescript.sh
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#!/usr/bin/env bash
set -o errexit # Exit the script with error if any of the commands fail

source "${PROJECT_DIRECTORY}/.evergreen/init-node-and-npm-env.sh"
source $DRIVERS_TOOLS/.evergreen/init-node-and-npm-env.sh

set -o xtrace

Expand Down
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -34,3 +34,6 @@ docs/public

benchmarks.json
customBenchmarkResults.json

expansion.yml
.drivers-tools/

0 comments on commit c08fa56

Please sign in to comment.