From 8a6fa1d7f04593ae01586893170ca209a9ecc6cc Mon Sep 17 00:00:00 2001 From: Neal Beeken Date: Fri, 20 Sep 2024 15:13:06 -0400 Subject: [PATCH 1/6] chore(NODE-5845): migrate node download script to drivers-tools --- .evergreen/config.yml | 2 +- .evergreen/install-dependencies.sh | 109 ++---------------- ...{setup-environment.sh => prepare-shell.sh} | 17 ++- .gitignore | 3 + 4 files changed, 29 insertions(+), 102 deletions(-) rename .evergreen/{setup-environment.sh => prepare-shell.sh} (59%) diff --git a/.evergreen/config.yml b/.evergreen/config.yml index a043c638f..a8dcb3dee 100644 --- a/.evergreen/config.yml +++ b/.evergreen/config.yml @@ -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 diff --git a/.evergreen/install-dependencies.sh b/.evergreen/install-dependencies.sh index 66ad117fd..32943f29b 100755 --- a/.evergreen/install-dependencies.sh +++ b/.evergreen/install-dependencies.sh @@ -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..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 diff --git a/.evergreen/setup-environment.sh b/.evergreen/prepare-shell.sh similarity index 59% rename from .evergreen/setup-environment.sh rename to .evergreen/prepare-shell.sh index 241839df6..4b0c38de2 100644 --- a/.evergreen/setup-environment.sh +++ b/.evergreen/prepare-shell.sh @@ -1,5 +1,21 @@ #! /usr/bin/env bash +# Only set errexit and xtrace if shell is NOT interactive +[[ $- == *i* ]] || set -o xtrace +[[ $- == *i* ]] || set -o errexit + +export PROJECT_DIRECTORY="$(pwd)" +export DRIVERS_TOOLS="$PROJECT_DIRECTORY/.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 @@ -11,7 +27,6 @@ if [ "${is_patch}" = "true" ]; then else CURRENT_VERSION=latest fi -export PROJECT_DIRECTORY="$(pwd)" cat < expansion.yml CURRENT_VERSION: "$CURRENT_VERSION" diff --git a/.gitignore b/.gitignore index b2ee050b8..edd0d9b74 100644 --- a/.gitignore +++ b/.gitignore @@ -34,3 +34,6 @@ docs/public benchmarks.json customBenchmarkResults.json + +expansion.yml +.drivers-tools/ From bf4370415f53d09776b430c49e1dd3abb020c39a Mon Sep 17 00:00:00 2001 From: Neal Beeken Date: Fri, 20 Sep 2024 15:31:18 -0400 Subject: [PATCH 2/6] chore: use drivers-tools init-env script --- .evergreen/init-node-and-npm-env.sh | 21 --------------------- .evergreen/run-big-endian-test.sh | 2 +- .evergreen/run-bundling-test.sh | 2 +- .evergreen/run-checks.sh | 2 +- .evergreen/run-custom-benchmarks.sh | 2 +- .evergreen/run-eslint-plugin-test.sh | 2 +- .evergreen/run-granular-benchmarks.sh | 2 +- .evergreen/run-spec-benchmarks.sh | 2 +- .evergreen/run-tests.sh | 2 +- .evergreen/run-typescript.sh | 2 +- 10 files changed, 9 insertions(+), 30 deletions(-) delete mode 100644 .evergreen/init-node-and-npm-env.sh diff --git a/.evergreen/init-node-and-npm-env.sh b/.evergreen/init-node-and-npm-env.sh deleted file mode 100644 index b3cecf54e..000000000 --- a/.evergreen/init-node-and-npm-env.sh +++ /dev/null @@ -1,21 +0,0 @@ -#! /usr/bin/env bash -## -## This script add the location of `npm` and `node` to the path. -## This is necessary because evergreen uses separate bash scripts for -## different functions in a given CI run but doesn't persist the environment -## across them. So we manually invoke this script everywhere we need -## access to `npm`, `node`, or need to install something globally from -## npm. - -NODE_ARTIFACTS_PATH="${PROJECT_DIRECTORY}/node-artifacts" -if [[ "$OS" == "Windows_NT" ]]; then - NODE_ARTIFACTS_PATH=$(cygpath --unix "$NODE_ARTIFACTS_PATH") -fi - -export NODE_ARTIFACTS_PATH -# npm uses this environment variable to determine where to install global packages -export npm_global_prefix=$NODE_ARTIFACTS_PATH/npm_global -export PATH="$npm_global_prefix/bin:$NODE_ARTIFACTS_PATH/nodejs/bin:$PATH" -hash -r - -export NODE_OPTIONS="--trace-deprecation --trace-warnings" diff --git a/.evergreen/run-big-endian-test.sh b/.evergreen/run-big-endian-test.sh index 3b37d132e..4f47a8c72 100644 --- a/.evergreen/run-big-endian-test.sh +++ b/.evergreen/run-big-endian-test.sh @@ -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 diff --git a/.evergreen/run-bundling-test.sh b/.evergreen/run-bundling-test.sh index f0b61e631..379a93d61 100644 --- a/.evergreen/run-bundling-test.sh +++ b/.evergreen/run-bundling-test.sh @@ -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 diff --git a/.evergreen/run-checks.sh b/.evergreen/run-checks.sh index 65443ed1f..567827d90 100644 --- a/.evergreen/run-checks.sh +++ b/.evergreen/run-checks.sh @@ -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 diff --git a/.evergreen/run-custom-benchmarks.sh b/.evergreen/run-custom-benchmarks.sh index 2984cb356..14271ca81 100644 --- a/.evergreen/run-custom-benchmarks.sh +++ b/.evergreen/run-custom-benchmarks.sh @@ -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 diff --git a/.evergreen/run-eslint-plugin-test.sh b/.evergreen/run-eslint-plugin-test.sh index c0c6693ff..ae806a568 100644 --- a/.evergreen/run-eslint-plugin-test.sh +++ b/.evergreen/run-eslint-plugin-test.sh @@ -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 diff --git a/.evergreen/run-granular-benchmarks.sh b/.evergreen/run-granular-benchmarks.sh index f13097f24..2b384ba94 100644 --- a/.evergreen/run-granular-benchmarks.sh +++ b/.evergreen/run-granular-benchmarks.sh @@ -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 diff --git a/.evergreen/run-spec-benchmarks.sh b/.evergreen/run-spec-benchmarks.sh index 5ce908336..6d76eedb7 100644 --- a/.evergreen/run-spec-benchmarks.sh +++ b/.evergreen/run-spec-benchmarks.sh @@ -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 diff --git a/.evergreen/run-tests.sh b/.evergreen/run-tests.sh index e834056c2..5c8088874 100755 --- a/.evergreen/run-tests.sh +++ b/.evergreen/run-tests.sh @@ -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") diff --git a/.evergreen/run-typescript.sh b/.evergreen/run-typescript.sh index 30f3ca463..ed65684ab 100644 --- a/.evergreen/run-typescript.sh +++ b/.evergreen/run-typescript.sh @@ -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 From 6cc0256a3a48f94dbd7cb021b92e0d791982f29e Mon Sep 17 00:00:00 2001 From: Neal Beeken Date: Thu, 26 Sep 2024 17:48:20 -0400 Subject: [PATCH 3/6] chore: put DRIVERS_TOOLS back above repo --- .evergreen/prepare-shell.sh | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.evergreen/prepare-shell.sh b/.evergreen/prepare-shell.sh index 4b0c38de2..9ebf945ee 100644 --- a/.evergreen/prepare-shell.sh +++ b/.evergreen/prepare-shell.sh @@ -4,9 +4,10 @@ [[ $- == *i* ]] || set -o xtrace [[ $- == *i* ]] || set -o errexit -export PROJECT_DIRECTORY="$(pwd)" -export DRIVERS_TOOLS="$PROJECT_DIRECTORY/.drivers-tools" - +PROJECT_DIRECTORY="$(pwd)" +DRIVERS_TOOLS=$(cd .. && echo "$(pwd)/drivers-tools") +export PROJECT_DIRECTORY +export DRIVERS_TOOLS if [ ! -d "$DRIVERS_TOOLS" ]; then From cf2fdf48a6034e74db5b42749ca707fbbde6b23d Mon Sep 17 00:00:00 2001 From: Neal Beeken Date: Fri, 27 Sep 2024 13:38:39 -0400 Subject: [PATCH 4/6] chore: driver_tools init --- .evergreen/install-dependencies.sh | 2 +- .evergreen/run-big-endian-test.sh | 2 +- .evergreen/run-bundling-test.sh | 2 +- .evergreen/run-checks.sh | 2 +- .evergreen/run-custom-benchmarks.sh | 2 +- .evergreen/run-eslint-plugin-test.sh | 2 +- .evergreen/run-granular-benchmarks.sh | 2 +- .evergreen/run-spec-benchmarks.sh | 2 +- .evergreen/run-tests.sh | 2 +- .evergreen/run-typescript.sh | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.evergreen/install-dependencies.sh b/.evergreen/install-dependencies.sh index 32943f29b..d36fb1fab 100755 --- a/.evergreen/install-dependencies.sh +++ b/.evergreen/install-dependencies.sh @@ -10,7 +10,7 @@ export NODE_LTS_VERSION=${NODE_LTS_VERSION:-16} # a version lower than latest to support EOL Node versions. export NPM_VERSION=${NPM_VERSION:-latest} -source ./.drivers-tools/.evergreen/install-node.sh +source $DRIVERS_TOOLS/.evergreen/install-node.sh npm install "${NPM_OPTIONS}" diff --git a/.evergreen/run-big-endian-test.sh b/.evergreen/run-big-endian-test.sh index 4f47a8c72..a1cc82404 100644 --- a/.evergreen/run-big-endian-test.sh +++ b/.evergreen/run-big-endian-test.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -source ./.drivers-tools/.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 diff --git a/.evergreen/run-bundling-test.sh b/.evergreen/run-bundling-test.sh index 379a93d61..85bb52491 100644 --- a/.evergreen/run-bundling-test.sh +++ b/.evergreen/run-bundling-test.sh @@ -1,6 +1,6 @@ #! /usr/bin/env bash -source ./.drivers-tools/.evergreen/init-node-and-npm-env.sh +source $DRIVERS_TOOLS/.evergreen/init-node-and-npm-env.sh set -o xtrace set -o errexit diff --git a/.evergreen/run-checks.sh b/.evergreen/run-checks.sh index 567827d90..44930932a 100644 --- a/.evergreen/run-checks.sh +++ b/.evergreen/run-checks.sh @@ -1,6 +1,6 @@ #!/bin/bash set -o errexit # Exit the script with error if any of the commands fail -source ./.drivers-tools/.evergreen/init-node-and-npm-env.sh +source $DRIVERS_TOOLS/.evergreen/init-node-and-npm-env.sh npm run check:lint diff --git a/.evergreen/run-custom-benchmarks.sh b/.evergreen/run-custom-benchmarks.sh index 14271ca81..92920ee32 100644 --- a/.evergreen/run-custom-benchmarks.sh +++ b/.evergreen/run-custom-benchmarks.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash -source ./.drivers-tools/.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 diff --git a/.evergreen/run-eslint-plugin-test.sh b/.evergreen/run-eslint-plugin-test.sh index ae806a568..10c085157 100644 --- a/.evergreen/run-eslint-plugin-test.sh +++ b/.evergreen/run-eslint-plugin-test.sh @@ -2,7 +2,7 @@ set -o errexit -source ./.drivers-tools/.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 diff --git a/.evergreen/run-granular-benchmarks.sh b/.evergreen/run-granular-benchmarks.sh index 2b384ba94..ae8399bc2 100644 --- a/.evergreen/run-granular-benchmarks.sh +++ b/.evergreen/run-granular-benchmarks.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash -source ./.drivers-tools/.evergreen/init-node-and-npm-env.sh +source $DRIVERS_TOOLS/.evergreen/init-node-and-npm-env.sh set -o xtrace WARMUP=$WARMUP ITERATIONS=$ITERATIONS diff --git a/.evergreen/run-spec-benchmarks.sh b/.evergreen/run-spec-benchmarks.sh index 6d76eedb7..dd85250b4 100644 --- a/.evergreen/run-spec-benchmarks.sh +++ b/.evergreen/run-spec-benchmarks.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -source ./.drivers-tools/.evergreen/init-node-and-npm-env.sh +source $DRIVERS_TOOLS/.evergreen/init-node-and-npm-env.sh npm run check:spec-bench diff --git a/.evergreen/run-tests.sh b/.evergreen/run-tests.sh index 5c8088874..4cacd41e9 100755 --- a/.evergreen/run-tests.sh +++ b/.evergreen/run-tests.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash -source ./.drivers-tools/.evergreen/init-node-and-npm-env.sh +source $DRIVERS_TOOLS/.evergreen/init-node-and-npm-env.sh case "${TEST_TARGET}" in "node") diff --git a/.evergreen/run-typescript.sh b/.evergreen/run-typescript.sh index ed65684ab..d814fd17a 100644 --- a/.evergreen/run-typescript.sh +++ b/.evergreen/run-typescript.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash set -o errexit # Exit the script with error if any of the commands fail -source ./.drivers-tools/.evergreen/init-node-and-npm-env.sh +source $DRIVERS_TOOLS/.evergreen/init-node-and-npm-env.sh set -o xtrace From ae9edc0f9b8131f431f21ea92e31d603d239f005 Mon Sep 17 00:00:00 2001 From: Neal Beeken Date: Fri, 27 Sep 2024 14:17:28 -0400 Subject: [PATCH 5/6] chore: tools in expansion --- .evergreen/prepare-shell.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.evergreen/prepare-shell.sh b/.evergreen/prepare-shell.sh index 9ebf945ee..094becbf0 100644 --- a/.evergreen/prepare-shell.sh +++ b/.evergreen/prepare-shell.sh @@ -33,11 +33,13 @@ cat < 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 From 533b0d6bdb0b112e35b3a8e1d6b63ca5774a9e0e Mon Sep 17 00:00:00 2001 From: Neal Beeken Date: Fri, 27 Sep 2024 14:20:45 -0400 Subject: [PATCH 6/6] chore: expansions env --- .evergreen/config.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.evergreen/config.yml b/.evergreen/config.yml index a8dcb3dee..dd6d751b3 100644 --- a/.evergreen/config.yml +++ b/.evergreen/config.yml @@ -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}" @@ -89,6 +90,7 @@ functions: params: working_dir: src timeout_secs: 60 + add_expansions_to_env: true env: PROJECT_DIRECTORY: ${PROJECT_DIRECTORY} binary: bash @@ -100,6 +102,7 @@ functions: params: working_dir: src binary: bash + add_expansions_to_env: true env: PROJECT_DIRECTORY: ${PROJECT_DIRECTORY} args: