Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore(NODE-6401): migrate node download script to drivers-tools #718

Merged
merged 6 commits into from
Oct 15, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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/