From f32eb2cc7a7371633139b1d6dfd87cd13efe1cd0 Mon Sep 17 00:00:00 2001 From: Mathiyarasy <157102811+Mathiyarasy@users.noreply.github.com> Date: Sun, 1 Jun 2025 15:00:34 +0000 Subject: [PATCH 1/9] Based on nvmrc file --- src/node/devcontainer-feature.json | 5 ++++ src/node/install.sh | 20 +++++++++++++- test/node/scenarios.json | 10 +++++++ test/node/test_node_project.sh | 27 +++++++++++++++++++ test/node/test_node_project/DockerFile | 3 +++ .../node/test_node_project/sample-node/.nvmrc | 1 + .../sample-node/src/hello.js | 1 + 7 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 test/node/test_node_project.sh create mode 100644 test/node/test_node_project/DockerFile create mode 100644 test/node/test_node_project/sample-node/.nvmrc create mode 100644 test/node/test_node_project/sample-node/src/hello.js diff --git a/src/node/devcontainer-feature.json b/src/node/devcontainer-feature.json index b8d699def..31b66ba38 100644 --- a/src/node/devcontainer-feature.json +++ b/src/node/devcontainer-feature.json @@ -55,6 +55,11 @@ "type": "boolean", "default": true, "description": "On Debian and Ubuntu systems, you have the option to install Yarn globally via APT. If you choose not to use this option, Yarn will be set up using Corepack instead. This choice is specific to Debian and Ubuntu; for other Linux distributions, Yarn is always installed using Corepack, with a fallback to installation via NPM if an error occurs." + }, + "findProjectNodeVersion":{ + "type": "boolean", + "default": false, + "description": "To get the Node version values from project root" } }, "customizations": { diff --git a/src/node/install.sh b/src/node/install.sh index 46d448440..0e442d62e 100755 --- a/src/node/install.sh +++ b/src/node/install.sh @@ -13,7 +13,7 @@ export NVM_VERSION="${NVMVERSION:-"latest"}" export NVM_DIR="${NVMINSTALLPATH:-"/usr/local/share/nvm"}" INSTALL_TOOLS_FOR_NODE_GYP="${NODEGYPDEPENDENCIES:-true}" export INSTALL_YARN_USING_APT="${INSTALLYARNUSINGAPT:-true}" # only concerns Debian-based systems - +export FIND_PROJECT_NODE_VERSION="${FINDPROJECTNODEVERSION:-true}" # Comma-separated list of node versions to be installed (with nvm) # alongside NODE_VERSION, but not set as default. ADDITIONAL_VERSIONS="${ADDITIONALVERSIONS:-""}" @@ -287,6 +287,24 @@ if ! type git > /dev/null 2>&1; then check_packages git fi +# Use the nvmrc file is it exists to determine the node version +echo "FIND_PROJECT_NODE_VERSION: ${FIND_PROJECT_NODE_VERSION}" +if [[ "${FIND_PROJECT_NODE_VERSION}" == "true" ]]; then + echo "Finding Node version from .nvmrc file..." + NVMRC_PATH=$(find . -type f -name ".nvmrc" | head -n 1) + if [ -n "$NVMRC_PATH" ]; then + NODE_VERSION_NVMRC=$(<"$NVMRC_PATH" xargs) + if [ -n "$NODE_VERSION_NVMRC" ]; then + echo "Using Node version from .nvmrc file in $NVMRC_PATH: $NODE_VERSION_NVMRC" + NODE_VERSION="${NODE_VERSION_NVMRC}" + else + echo "$NVMRC_PATH file is empty. No Node version specified. Using the default: ${NODE_VERSION}." + fi + else + echo "No .nvmrc file found. Using the default Node version: ${NODE_VERSION}." + fi +fi + # Adjust node version if required if [ "${NODE_VERSION}" = "none" ]; then export NODE_VERSION= diff --git a/test/node/scenarios.json b/test/node/scenarios.json index df03128d6..c06cdca43 100644 --- a/test/node/scenarios.json +++ b/test/node/scenarios.json @@ -199,5 +199,15 @@ "installYarnUsingApt": false } } + }, + "test_node_project": { + "build": { + "dockerfile": "DockerFile" + }, + "features": { + "node": { + "findProjectNodeVersion": false + } + } } } \ No newline at end of file diff --git a/test/node/test_node_project.sh b/test/node/test_node_project.sh new file mode 100644 index 000000000..9ce1502cd --- /dev/null +++ b/test/node/test_node_project.sh @@ -0,0 +1,27 @@ +#!/bin/bash + +set -e + +# Optional: Import test library +source dev-container-features-test-lib + +cd test_node_project/sample-node + +# Check that .nvmrc exists +if [ ! -f .nvmrc ]; then + echo ".nvmrc file not found!" + exit 1 +fi + +# Read the version from .nvmrc and compare with current node version +NVMRC_VERSION=$(cat .nvmrc | tr -d 'v') +NODE_VERSION=$(node -v | cut -d . -f 1 | tr -d 'v') + +if [ "$NVMRC_VERSION" != "$NODE_VERSION" ]; then + echo "Node version mismatch: .nvmrc specifies $NVMRC_VERSION, but current node is $NODE_VERSION" + exit 1 +fi + +echo ".nvmrc is used and matches the current Node.js version." +# Report result +reportResults \ No newline at end of file diff --git a/test/node/test_node_project/DockerFile b/test/node/test_node_project/DockerFile new file mode 100644 index 000000000..85c474917 --- /dev/null +++ b/test/node/test_node_project/DockerFile @@ -0,0 +1,3 @@ +FROM debian:11 + +COPY sample-node /tmp/dev-container-features/node_0/sample-node diff --git a/test/node/test_node_project/sample-node/.nvmrc b/test/node/test_node_project/sample-node/.nvmrc new file mode 100644 index 000000000..2edeafb09 --- /dev/null +++ b/test/node/test_node_project/sample-node/.nvmrc @@ -0,0 +1 @@ +20 \ No newline at end of file diff --git a/test/node/test_node_project/sample-node/src/hello.js b/test/node/test_node_project/sample-node/src/hello.js new file mode 100644 index 000000000..f08659b5e --- /dev/null +++ b/test/node/test_node_project/sample-node/src/hello.js @@ -0,0 +1 @@ +console.log('Hello from Node.js!'); \ No newline at end of file From f81c735c7053ba823dd65b65cd91ea9ae60fec72 Mon Sep 17 00:00:00 2001 From: Mathiyarasy <157102811+Mathiyarasy@users.noreply.github.com> Date: Sun, 1 Jun 2025 15:42:27 +0000 Subject: [PATCH 2/9] nodeversion path --- src/node/install.sh | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/node/install.sh b/src/node/install.sh index 0e442d62e..6847ce806 100755 --- a/src/node/install.sh +++ b/src/node/install.sh @@ -287,12 +287,21 @@ if ! type git > /dev/null 2>&1; then check_packages git fi -# Use the nvmrc file is it exists to determine the node version +# Determine the Node.js version using the .nvmrc or .node-version file if present. echo "FIND_PROJECT_NODE_VERSION: ${FIND_PROJECT_NODE_VERSION}" if [[ "${FIND_PROJECT_NODE_VERSION}" == "true" ]]; then - echo "Finding Node version from .nvmrc file..." + echo "Finding Node version from .nvmrc or .node-version file..." + NODE_VERSION_PATH=$(find . -type f -name ".node-version" | head -n 1) NVMRC_PATH=$(find . -type f -name ".nvmrc" | head -n 1) - if [ -n "$NVMRC_PATH" ]; then + if [ -n "$NODE_VERSION_PATH" ]; then + NODE_VERSION_NODE_VERSION_FILE=$(<"$NODE_VERSION_PATH" xargs) + if [ -n "$NODE_VERSION_NODE_VERSION_FILE" ]; then + echo "Using Node version from .node-version file in $NODE_VERSION_PATH: $NODE_VERSION_NODE_VERSION_FILE" + NODE_VERSION="${NODE_VERSION_NODE_VERSION_FILE}" + else + echo "$NODE_VERSION_PATH file is empty. No Node version specified. Using the default: ${NODE_VERSION}." + fi + elif [ -n "$NVMRC_PATH" ]; then NODE_VERSION_NVMRC=$(<"$NVMRC_PATH" xargs) if [ -n "$NODE_VERSION_NVMRC" ]; then echo "Using Node version from .nvmrc file in $NVMRC_PATH: $NODE_VERSION_NVMRC" @@ -301,7 +310,7 @@ if [[ "${FIND_PROJECT_NODE_VERSION}" == "true" ]]; then echo "$NVMRC_PATH file is empty. No Node version specified. Using the default: ${NODE_VERSION}." fi else - echo "No .nvmrc file found. Using the default Node version: ${NODE_VERSION}." + echo "No .node-version or .nvmrc file found. Using the default Node version: ${NODE_VERSION}." fi fi From 0af147a3bdb86c34866dfde589ae2705aff7e194 Mon Sep 17 00:00:00 2001 From: Mathiyarasy <157102811+Mathiyarasy@users.noreply.github.com> Date: Sun, 1 Jun 2025 18:39:31 +0000 Subject: [PATCH 3/9] update test cases --- test/node/scenarios.json | 26 +++++++++++++++--- .../node/test_node_project/sample-node/.nvmrc | 1 - test/node/test_node_project_nodev.sh | 27 +++++++++++++++++++ .../DockerFile | 0 .../sample-node/.node-version | 1 + .../sample-node/src/hello.js | 0 test/node/test_node_project_nvm_nodev.sh | 27 +++++++++++++++++++ .../test_node_project_nvm_nodev/DockerFile | 3 +++ .../sample-node/.node-version | 1 + .../sample-node/.nvmrc | 1 + .../sample-node/src/hello.js | 1 + ..._project.sh => test_node_project_nvmrc.sh} | 4 +-- test/node/test_node_project_nvmrc/DockerFile | 3 +++ .../sample-node/.nvmrc | 1 + .../sample-node/src/hello.js | 1 + 15 files changed, 91 insertions(+), 6 deletions(-) delete mode 100644 test/node/test_node_project/sample-node/.nvmrc create mode 100644 test/node/test_node_project_nodev.sh rename test/node/{test_node_project => test_node_project_nodev}/DockerFile (100%) create mode 100644 test/node/test_node_project_nodev/sample-node/.node-version rename test/node/{test_node_project => test_node_project_nodev}/sample-node/src/hello.js (100%) create mode 100644 test/node/test_node_project_nvm_nodev.sh create mode 100644 test/node/test_node_project_nvm_nodev/DockerFile create mode 100644 test/node/test_node_project_nvm_nodev/sample-node/.node-version create mode 100644 test/node/test_node_project_nvm_nodev/sample-node/.nvmrc create mode 100644 test/node/test_node_project_nvm_nodev/sample-node/src/hello.js rename test/node/{test_node_project.sh => test_node_project_nvmrc.sh} (86%) create mode 100644 test/node/test_node_project_nvmrc/DockerFile create mode 100644 test/node/test_node_project_nvmrc/sample-node/.nvmrc create mode 100644 test/node/test_node_project_nvmrc/sample-node/src/hello.js diff --git a/test/node/scenarios.json b/test/node/scenarios.json index c06cdca43..db0439dbd 100644 --- a/test/node/scenarios.json +++ b/test/node/scenarios.json @@ -82,7 +82,7 @@ "features": { "node": { "version": "16", - "pnpmVersion":"8.8.0" + "pnpmVersion": "8.8.0" } } }, @@ -200,13 +200,33 @@ } } }, - "test_node_project": { + "test_node_project_nvmrc": { + "build": { + "dockerfile": "DockerFile" + }, + "features": { + "node": { + "findProjectNodeVersion": true + } + } + }, + "test_node_project_nodev": { + "build": { + "dockerfile": "DockerFile" + }, + "features": { + "node": { + "findProjectNodeVersion": true + } + } + }, + "test_node_project_nvm_nodev": { "build": { "dockerfile": "DockerFile" }, "features": { "node": { - "findProjectNodeVersion": false + "findProjectNodeVersion": true } } } diff --git a/test/node/test_node_project/sample-node/.nvmrc b/test/node/test_node_project/sample-node/.nvmrc deleted file mode 100644 index 2edeafb09..000000000 --- a/test/node/test_node_project/sample-node/.nvmrc +++ /dev/null @@ -1 +0,0 @@ -20 \ No newline at end of file diff --git a/test/node/test_node_project_nodev.sh b/test/node/test_node_project_nodev.sh new file mode 100644 index 000000000..2798bea5d --- /dev/null +++ b/test/node/test_node_project_nodev.sh @@ -0,0 +1,27 @@ +#!/bin/bash + +set -e + +# Optional: Import test library +source dev-container-features-test-lib + +cd test_node_project_nodev/sample-node + +# Check that .nvmrc exists +if [ ! -f .node-version ]; then + echo ".node-version file not found!" + exit 1 +fi + +# Read the version from .nvmrc and compare with current node version +N_VERSION=$(cat .node-version | tr -d 'v') +NODE_VERSION=$(node -v | tr -d 'v') + +if [ "$N_VERSION" != "$NODE_VERSION" ]; then + echo "Node version mismatch: .node-version specifies $N_VERSION, but current node is $NODE_VERSION" + exit 1 +fi + +echo ".node-version is used and matches the current Node.js version." +# Report result +reportResults \ No newline at end of file diff --git a/test/node/test_node_project/DockerFile b/test/node/test_node_project_nodev/DockerFile similarity index 100% rename from test/node/test_node_project/DockerFile rename to test/node/test_node_project_nodev/DockerFile diff --git a/test/node/test_node_project_nodev/sample-node/.node-version b/test/node/test_node_project_nodev/sample-node/.node-version new file mode 100644 index 000000000..0d215b0fb --- /dev/null +++ b/test/node/test_node_project_nodev/sample-node/.node-version @@ -0,0 +1 @@ +20.19.2 \ No newline at end of file diff --git a/test/node/test_node_project/sample-node/src/hello.js b/test/node/test_node_project_nodev/sample-node/src/hello.js similarity index 100% rename from test/node/test_node_project/sample-node/src/hello.js rename to test/node/test_node_project_nodev/sample-node/src/hello.js diff --git a/test/node/test_node_project_nvm_nodev.sh b/test/node/test_node_project_nvm_nodev.sh new file mode 100644 index 000000000..f76f77de0 --- /dev/null +++ b/test/node/test_node_project_nvm_nodev.sh @@ -0,0 +1,27 @@ +#!/bin/bash + +set -e + +# Optional: Import test library +source dev-container-features-test-lib + +cd test_node_project_nvm_nodev/sample-node + +# Check that .node-version exists +if [ ! -f .node-version ]; then + echo ".node-version file not found!" + exit 1 +fi + +# Read the version from .node-version and compare with current node version +N_VERSION=$(cat .node-version | tr -d 'v') +NODE_VERSION=$(node -v | tr -d 'v') + +if [ "$N_VERSION" != "$NODE_VERSION" ]; then + echo "Node version mismatch: .nvmrc specifies $N_VERSION, but current node is $NODE_VERSION" + exit 1 +fi + +echo ".node-version is used and matches the current Node.js version." +# Report result +reportResults \ No newline at end of file diff --git a/test/node/test_node_project_nvm_nodev/DockerFile b/test/node/test_node_project_nvm_nodev/DockerFile new file mode 100644 index 000000000..85c474917 --- /dev/null +++ b/test/node/test_node_project_nvm_nodev/DockerFile @@ -0,0 +1,3 @@ +FROM debian:11 + +COPY sample-node /tmp/dev-container-features/node_0/sample-node diff --git a/test/node/test_node_project_nvm_nodev/sample-node/.node-version b/test/node/test_node_project_nvm_nodev/sample-node/.node-version new file mode 100644 index 000000000..0d215b0fb --- /dev/null +++ b/test/node/test_node_project_nvm_nodev/sample-node/.node-version @@ -0,0 +1 @@ +20.19.2 \ No newline at end of file diff --git a/test/node/test_node_project_nvm_nodev/sample-node/.nvmrc b/test/node/test_node_project_nvm_nodev/sample-node/.nvmrc new file mode 100644 index 000000000..ee57e7f61 --- /dev/null +++ b/test/node/test_node_project_nvm_nodev/sample-node/.nvmrc @@ -0,0 +1 @@ +22.9.0 \ No newline at end of file diff --git a/test/node/test_node_project_nvm_nodev/sample-node/src/hello.js b/test/node/test_node_project_nvm_nodev/sample-node/src/hello.js new file mode 100644 index 000000000..f08659b5e --- /dev/null +++ b/test/node/test_node_project_nvm_nodev/sample-node/src/hello.js @@ -0,0 +1 @@ +console.log('Hello from Node.js!'); \ No newline at end of file diff --git a/test/node/test_node_project.sh b/test/node/test_node_project_nvmrc.sh similarity index 86% rename from test/node/test_node_project.sh rename to test/node/test_node_project_nvmrc.sh index 9ce1502cd..25f76af5a 100644 --- a/test/node/test_node_project.sh +++ b/test/node/test_node_project_nvmrc.sh @@ -5,7 +5,7 @@ set -e # Optional: Import test library source dev-container-features-test-lib -cd test_node_project/sample-node +cd test_node_project_nvmrc/sample-node # Check that .nvmrc exists if [ ! -f .nvmrc ]; then @@ -15,7 +15,7 @@ fi # Read the version from .nvmrc and compare with current node version NVMRC_VERSION=$(cat .nvmrc | tr -d 'v') -NODE_VERSION=$(node -v | cut -d . -f 1 | tr -d 'v') +NODE_VERSION=$(node -v | tr -d 'v') if [ "$NVMRC_VERSION" != "$NODE_VERSION" ]; then echo "Node version mismatch: .nvmrc specifies $NVMRC_VERSION, but current node is $NODE_VERSION" diff --git a/test/node/test_node_project_nvmrc/DockerFile b/test/node/test_node_project_nvmrc/DockerFile new file mode 100644 index 000000000..85c474917 --- /dev/null +++ b/test/node/test_node_project_nvmrc/DockerFile @@ -0,0 +1,3 @@ +FROM debian:11 + +COPY sample-node /tmp/dev-container-features/node_0/sample-node diff --git a/test/node/test_node_project_nvmrc/sample-node/.nvmrc b/test/node/test_node_project_nvmrc/sample-node/.nvmrc new file mode 100644 index 000000000..ee57e7f61 --- /dev/null +++ b/test/node/test_node_project_nvmrc/sample-node/.nvmrc @@ -0,0 +1 @@ +22.9.0 \ No newline at end of file diff --git a/test/node/test_node_project_nvmrc/sample-node/src/hello.js b/test/node/test_node_project_nvmrc/sample-node/src/hello.js new file mode 100644 index 000000000..f08659b5e --- /dev/null +++ b/test/node/test_node_project_nvmrc/sample-node/src/hello.js @@ -0,0 +1 @@ +console.log('Hello from Node.js!'); \ No newline at end of file From b53b4f5e422e0cfd703f8471be5d06a7bfff2705 Mon Sep 17 00:00:00 2001 From: Mathiyarasy <157102811+Mathiyarasy@users.noreply.github.com> Date: Mon, 2 Jun 2025 09:53:09 +0000 Subject: [PATCH 4/9] Change default to false --- src/node/install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/node/install.sh b/src/node/install.sh index 6847ce806..61645f206 100755 --- a/src/node/install.sh +++ b/src/node/install.sh @@ -13,7 +13,7 @@ export NVM_VERSION="${NVMVERSION:-"latest"}" export NVM_DIR="${NVMINSTALLPATH:-"/usr/local/share/nvm"}" INSTALL_TOOLS_FOR_NODE_GYP="${NODEGYPDEPENDENCIES:-true}" export INSTALL_YARN_USING_APT="${INSTALLYARNUSINGAPT:-true}" # only concerns Debian-based systems -export FIND_PROJECT_NODE_VERSION="${FINDPROJECTNODEVERSION:-true}" +export FIND_PROJECT_NODE_VERSION="${FINDPROJECTNODEVERSION:-false}" # if true, will look for .nvmrc or .node-version files in the project root to determine the Node.js version # Comma-separated list of node versions to be installed (with nvm) # alongside NODE_VERSION, but not set as default. ADDITIONAL_VERSIONS="${ADDITIONALVERSIONS:-""}" From 95fa5bc60625aa9ed8b6a6edc739ca620d703162 Mon Sep 17 00:00:00 2001 From: Mathiyarasy <157102811+Mathiyarasy@users.noreply.github.com> Date: Mon, 2 Jun 2025 10:56:20 +0000 Subject: [PATCH 5/9] introduce none condition check --- src/node/install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/node/install.sh b/src/node/install.sh index 61645f206..24bcc2d20 100755 --- a/src/node/install.sh +++ b/src/node/install.sh @@ -289,7 +289,7 @@ fi # Determine the Node.js version using the .nvmrc or .node-version file if present. echo "FIND_PROJECT_NODE_VERSION: ${FIND_PROJECT_NODE_VERSION}" -if [[ "${FIND_PROJECT_NODE_VERSION}" == "true" ]]; then +if [[ "${FIND_PROJECT_NODE_VERSION}" == "true" && "${NODE_VERSION}" != "none" ]]; then echo "Finding Node version from .nvmrc or .node-version file..." NODE_VERSION_PATH=$(find . -type f -name ".node-version" | head -n 1) NVMRC_PATH=$(find . -type f -name ".nvmrc" | head -n 1) From 97d81bd8f9f9c8e4dc79e53b25707c5a024ccfc9 Mon Sep 17 00:00:00 2001 From: Mathiyarasy <157102811+Mathiyarasy@users.noreply.github.com> Date: Tue, 3 Jun 2025 08:55:44 +0000 Subject: [PATCH 6/9] remove flag and an new option in version --- src/node/devcontainer-feature.json | 8 ++------ src/node/install.sh | 6 +++--- test/node/scenarios.json | 6 +++--- 3 files changed, 8 insertions(+), 12 deletions(-) diff --git a/src/node/devcontainer-feature.json b/src/node/devcontainer-feature.json index 31b66ba38..314a0a283 100644 --- a/src/node/devcontainer-feature.json +++ b/src/node/devcontainer-feature.json @@ -13,7 +13,8 @@ "none", "18", "16", - "14" + "14", + "project-file" // This will read the Node version from .node-version or .nvmrc in the project ], "default": "lts", "description": "Select or enter a Node.js version to install" @@ -55,11 +56,6 @@ "type": "boolean", "default": true, "description": "On Debian and Ubuntu systems, you have the option to install Yarn globally via APT. If you choose not to use this option, Yarn will be set up using Corepack instead. This choice is specific to Debian and Ubuntu; for other Linux distributions, Yarn is always installed using Corepack, with a fallback to installation via NPM if an error occurs." - }, - "findProjectNodeVersion":{ - "type": "boolean", - "default": false, - "description": "To get the Node version values from project root" } }, "customizations": { diff --git a/src/node/install.sh b/src/node/install.sh index 24bcc2d20..a836073ef 100755 --- a/src/node/install.sh +++ b/src/node/install.sh @@ -13,7 +13,6 @@ export NVM_VERSION="${NVMVERSION:-"latest"}" export NVM_DIR="${NVMINSTALLPATH:-"/usr/local/share/nvm"}" INSTALL_TOOLS_FOR_NODE_GYP="${NODEGYPDEPENDENCIES:-true}" export INSTALL_YARN_USING_APT="${INSTALLYARNUSINGAPT:-true}" # only concerns Debian-based systems -export FIND_PROJECT_NODE_VERSION="${FINDPROJECTNODEVERSION:-false}" # if true, will look for .nvmrc or .node-version files in the project root to determine the Node.js version # Comma-separated list of node versions to be installed (with nvm) # alongside NODE_VERSION, but not set as default. ADDITIONAL_VERSIONS="${ADDITIONALVERSIONS:-""}" @@ -288,11 +287,12 @@ if ! type git > /dev/null 2>&1; then fi # Determine the Node.js version using the .nvmrc or .node-version file if present. -echo "FIND_PROJECT_NODE_VERSION: ${FIND_PROJECT_NODE_VERSION}" -if [[ "${FIND_PROJECT_NODE_VERSION}" == "true" && "${NODE_VERSION}" != "none" ]]; then +if [[ "${NODE_VERSION}" == "project-file" ]]; then echo "Finding Node version from .nvmrc or .node-version file..." NODE_VERSION_PATH=$(find . -type f -name ".node-version" | head -n 1) NVMRC_PATH=$(find . -type f -name ".nvmrc" | head -n 1) + # Used as the default when no file exists or if the file is empty + NODE_VERSION="lts" if [ -n "$NODE_VERSION_PATH" ]; then NODE_VERSION_NODE_VERSION_FILE=$(<"$NODE_VERSION_PATH" xargs) if [ -n "$NODE_VERSION_NODE_VERSION_FILE" ]; then diff --git a/test/node/scenarios.json b/test/node/scenarios.json index db0439dbd..e11a0cf22 100644 --- a/test/node/scenarios.json +++ b/test/node/scenarios.json @@ -206,7 +206,7 @@ }, "features": { "node": { - "findProjectNodeVersion": true + "version": "project-file" } } }, @@ -216,7 +216,7 @@ }, "features": { "node": { - "findProjectNodeVersion": true + "version": "project-file" } } }, @@ -226,7 +226,7 @@ }, "features": { "node": { - "findProjectNodeVersion": true + "version": "project-file" } } } From c10318451797b818c18e39cf60e2c2f242a25ae8 Mon Sep 17 00:00:00 2001 From: Mathiyarasy <157102811+Mathiyarasy@users.noreply.github.com> Date: Tue, 3 Jun 2025 10:29:27 +0000 Subject: [PATCH 7/9] Remove hardcoded node lts version from test scripts --- test/node/install_additional_node.sh | 15 ++++++++++++--- .../install_additional_node_on_rhel_family.sh | 14 +++++++++++--- 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/test/node/install_additional_node.sh b/test/node/install_additional_node.sh index 57d615a0a..8cc2eca32 100644 --- a/test/node/install_additional_node.sh +++ b/test/node/install_additional_node.sh @@ -5,11 +5,20 @@ set -e # Optional: Import test library source dev-container-features-test-lib -# 'lts' is now some version of node 20... -check "version_on_path" node -v | grep 20 +# Install jq if not already installed +if ! type jq >/dev/null 2>&1; then + apt-get update && apt-get install -y jq +fi + +#Get the latest LTS version of Node.js +LATEST_LTS_VERSION=$(curl -s https://nodejs.org/dist/index.json | jq -r '[.[] | select(.lts != false)][0].version') + + +# 'lts' is fetched instead of hardcoded to a specific version +check "version_on_path" node -v | grep "$LATEST_LTS_VERSION" check "pnpm" bash -c "pnpm -v | grep 8.8.0" -check "v20_installed" ls -1 /usr/local/share/nvm/versions/node | grep 20 +check "lts_installed" ls -1 /usr/local/share/nvm/versions/node | grep "$LATEST_LTS_VERSION" check "v14_installed" ls -1 /usr/local/share/nvm/versions/node | grep 14.19.3 check "v17_installed" ls -1 /usr/local/share/nvm/versions/node | grep 17.9.1 diff --git a/test/node/install_additional_node_on_rhel_family.sh b/test/node/install_additional_node_on_rhel_family.sh index 3300f7f1a..339ce0267 100644 --- a/test/node/install_additional_node_on_rhel_family.sh +++ b/test/node/install_additional_node_on_rhel_family.sh @@ -5,11 +5,19 @@ set -e # Optional: Import test library source dev-container-features-test-lib -# 'lts' is now some version of node 20... -check "version_on_path" node -v | grep 20 +# Install jq if not already installed +if ! type jq >/dev/null 2>&1; then + yum install -y jq +fi + +#Get the latest LTS version of Node.js +LATEST_LTS_VERSION=$(curl -s https://nodejs.org/dist/index.json | jq -r '[.[] | select(.lts != false)][0].version') + +# 'lts' is fetched instead of hardcoded to a specific version +check "version_on_path" node -v | grep "$LATEST_LTS_VERSION" check "pnpm" bash -c "pnpm -v | grep 6.16.0" -check "v20_installed" ls -1 /usr/local/share/nvm/versions/node | grep 20 +check "lts_installed" ls -1 /usr/local/share/nvm/versions/node | grep "$LATEST_LTS_VERSION" check "v14_installed" ls -1 /usr/local/share/nvm/versions/node | grep 14.19.3 check "v17_installed" ls -1 /usr/local/share/nvm/versions/node | grep 17.9.1 From 7a45e541aa5288e5b4d3c0e211424c9d89a9ea7a Mon Sep 17 00:00:00 2001 From: Mathiyarasy <157102811+Mathiyarasy@users.noreply.github.com> Date: Tue, 3 Jun 2025 12:45:03 +0000 Subject: [PATCH 8/9] update version --- src/node/devcontainer-feature.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/node/devcontainer-feature.json b/src/node/devcontainer-feature.json index 314a0a283..e963031c4 100644 --- a/src/node/devcontainer-feature.json +++ b/src/node/devcontainer-feature.json @@ -1,6 +1,6 @@ { "id": "node", - "version": "1.6.2", + "version": "1.6.3", "name": "Node.js (via nvm), yarn and pnpm", "documentationURL": "https://github.com/devcontainers/features/tree/main/src/node", "description": "Installs Node.js, nvm, yarn, pnpm, and needed dependencies.", From c7c3f4cceb3d77edc03b3171c7926d00216dbff2 Mon Sep 17 00:00:00 2001 From: Mathiyarasy <157102811+Mathiyarasy@users.noreply.github.com> Date: Mon, 9 Jun 2025 14:10:07 +0000 Subject: [PATCH 9/9] remove find --- src/node/install.sh | 37 ++++++++----------- test/node/test_node_project_nodev.sh | 2 +- .../{sample-node => }/.node-version | 0 test/node/test_node_project_nodev/DockerFile | 2 +- .../sample-node/src/hello.js | 1 - test/node/test_node_project_nvm_nodev.sh | 2 +- .../{sample-node => }/.node-version | 0 .../{sample-node => }/.nvmrc | 0 .../test_node_project_nvm_nodev/DockerFile | 3 +- .../sample-node/src/hello.js | 1 - test/node/test_node_project_nvmrc.sh | 2 +- .../{sample-node => }/.nvmrc | 0 test/node/test_node_project_nvmrc/DockerFile | 2 +- .../sample-node/src/hello.js | 1 - 14 files changed, 23 insertions(+), 30 deletions(-) rename test/node/test_node_project_nodev/{sample-node => }/.node-version (100%) delete mode 100644 test/node/test_node_project_nodev/sample-node/src/hello.js rename test/node/test_node_project_nvm_nodev/{sample-node => }/.node-version (100%) rename test/node/test_node_project_nvm_nodev/{sample-node => }/.nvmrc (100%) delete mode 100644 test/node/test_node_project_nvm_nodev/sample-node/src/hello.js rename test/node/test_node_project_nvmrc/{sample-node => }/.nvmrc (100%) delete mode 100644 test/node/test_node_project_nvmrc/sample-node/src/hello.js diff --git a/src/node/install.sh b/src/node/install.sh index a836073ef..572311d5a 100755 --- a/src/node/install.sh +++ b/src/node/install.sh @@ -289,28 +289,23 @@ fi # Determine the Node.js version using the .nvmrc or .node-version file if present. if [[ "${NODE_VERSION}" == "project-file" ]]; then echo "Finding Node version from .nvmrc or .node-version file..." - NODE_VERSION_PATH=$(find . -type f -name ".node-version" | head -n 1) - NVMRC_PATH=$(find . -type f -name ".nvmrc" | head -n 1) - # Used as the default when no file exists or if the file is empty - NODE_VERSION="lts" - if [ -n "$NODE_VERSION_PATH" ]; then - NODE_VERSION_NODE_VERSION_FILE=$(<"$NODE_VERSION_PATH" xargs) - if [ -n "$NODE_VERSION_NODE_VERSION_FILE" ]; then - echo "Using Node version from .node-version file in $NODE_VERSION_PATH: $NODE_VERSION_NODE_VERSION_FILE" - NODE_VERSION="${NODE_VERSION_NODE_VERSION_FILE}" - else - echo "$NODE_VERSION_PATH file is empty. No Node version specified. Using the default: ${NODE_VERSION}." - fi - elif [ -n "$NVMRC_PATH" ]; then - NODE_VERSION_NVMRC=$(<"$NVMRC_PATH" xargs) - if [ -n "$NODE_VERSION_NVMRC" ]; then - echo "Using Node version from .nvmrc file in $NVMRC_PATH: $NODE_VERSION_NVMRC" - NODE_VERSION="${NODE_VERSION_NVMRC}" - else - echo "$NVMRC_PATH file is empty. No Node version specified. Using the default: ${NODE_VERSION}." + NODE_VERSION_FOUND="" + for version_file in ".node-version" ".nvmrc"; do + if [[ -f "$version_file" && -s "$version_file" ]]; then + file_version=$(tr -d '[:space:]' < "$version_file") + if [[ -n "$file_version" ]]; then + echo "Using Node version from $version_file: $file_version" + NODE_VERSION="$file_version" + NODE_VERSION_FOUND="yes" + break + else + echo "$version_file exists but contains only whitespace. Continuing search..." + fi fi - else - echo "No .node-version or .nvmrc file found. Using the default Node version: ${NODE_VERSION}." + done + if [[ -z "$NODE_VERSION_FOUND" ]]; then + NODE_VERSION="lts" + echo "No Node version found in .nvmrc or .node-version. Using default: lts" fi fi diff --git a/test/node/test_node_project_nodev.sh b/test/node/test_node_project_nodev.sh index 2798bea5d..cff7bdcd8 100644 --- a/test/node/test_node_project_nodev.sh +++ b/test/node/test_node_project_nodev.sh @@ -5,7 +5,7 @@ set -e # Optional: Import test library source dev-container-features-test-lib -cd test_node_project_nodev/sample-node +cd test_node_project_nodev # Check that .nvmrc exists if [ ! -f .node-version ]; then diff --git a/test/node/test_node_project_nodev/sample-node/.node-version b/test/node/test_node_project_nodev/.node-version similarity index 100% rename from test/node/test_node_project_nodev/sample-node/.node-version rename to test/node/test_node_project_nodev/.node-version diff --git a/test/node/test_node_project_nodev/DockerFile b/test/node/test_node_project_nodev/DockerFile index 85c474917..59d170198 100644 --- a/test/node/test_node_project_nodev/DockerFile +++ b/test/node/test_node_project_nodev/DockerFile @@ -1,3 +1,3 @@ FROM debian:11 -COPY sample-node /tmp/dev-container-features/node_0/sample-node +COPY .node-version /tmp/dev-container-features/node_0/.node-version diff --git a/test/node/test_node_project_nodev/sample-node/src/hello.js b/test/node/test_node_project_nodev/sample-node/src/hello.js deleted file mode 100644 index f08659b5e..000000000 --- a/test/node/test_node_project_nodev/sample-node/src/hello.js +++ /dev/null @@ -1 +0,0 @@ -console.log('Hello from Node.js!'); \ No newline at end of file diff --git a/test/node/test_node_project_nvm_nodev.sh b/test/node/test_node_project_nvm_nodev.sh index f76f77de0..386d90db0 100644 --- a/test/node/test_node_project_nvm_nodev.sh +++ b/test/node/test_node_project_nvm_nodev.sh @@ -5,7 +5,7 @@ set -e # Optional: Import test library source dev-container-features-test-lib -cd test_node_project_nvm_nodev/sample-node +cd test_node_project_nvm_nodev # Check that .node-version exists if [ ! -f .node-version ]; then diff --git a/test/node/test_node_project_nvm_nodev/sample-node/.node-version b/test/node/test_node_project_nvm_nodev/.node-version similarity index 100% rename from test/node/test_node_project_nvm_nodev/sample-node/.node-version rename to test/node/test_node_project_nvm_nodev/.node-version diff --git a/test/node/test_node_project_nvm_nodev/sample-node/.nvmrc b/test/node/test_node_project_nvm_nodev/.nvmrc similarity index 100% rename from test/node/test_node_project_nvm_nodev/sample-node/.nvmrc rename to test/node/test_node_project_nvm_nodev/.nvmrc diff --git a/test/node/test_node_project_nvm_nodev/DockerFile b/test/node/test_node_project_nvm_nodev/DockerFile index 85c474917..31e32808f 100644 --- a/test/node/test_node_project_nvm_nodev/DockerFile +++ b/test/node/test_node_project_nvm_nodev/DockerFile @@ -1,3 +1,4 @@ FROM debian:11 -COPY sample-node /tmp/dev-container-features/node_0/sample-node +COPY .nvmrc .node-version /tmp/dev-container-features/node_0/ + diff --git a/test/node/test_node_project_nvm_nodev/sample-node/src/hello.js b/test/node/test_node_project_nvm_nodev/sample-node/src/hello.js deleted file mode 100644 index f08659b5e..000000000 --- a/test/node/test_node_project_nvm_nodev/sample-node/src/hello.js +++ /dev/null @@ -1 +0,0 @@ -console.log('Hello from Node.js!'); \ No newline at end of file diff --git a/test/node/test_node_project_nvmrc.sh b/test/node/test_node_project_nvmrc.sh index 25f76af5a..c4ad8a90b 100644 --- a/test/node/test_node_project_nvmrc.sh +++ b/test/node/test_node_project_nvmrc.sh @@ -5,7 +5,7 @@ set -e # Optional: Import test library source dev-container-features-test-lib -cd test_node_project_nvmrc/sample-node +cd test_node_project_nvmrc # Check that .nvmrc exists if [ ! -f .nvmrc ]; then diff --git a/test/node/test_node_project_nvmrc/sample-node/.nvmrc b/test/node/test_node_project_nvmrc/.nvmrc similarity index 100% rename from test/node/test_node_project_nvmrc/sample-node/.nvmrc rename to test/node/test_node_project_nvmrc/.nvmrc diff --git a/test/node/test_node_project_nvmrc/DockerFile b/test/node/test_node_project_nvmrc/DockerFile index 85c474917..9a9a9ab87 100644 --- a/test/node/test_node_project_nvmrc/DockerFile +++ b/test/node/test_node_project_nvmrc/DockerFile @@ -1,3 +1,3 @@ FROM debian:11 -COPY sample-node /tmp/dev-container-features/node_0/sample-node +COPY .nvmrc /tmp/dev-container-features/node_0/.nvmrc \ No newline at end of file diff --git a/test/node/test_node_project_nvmrc/sample-node/src/hello.js b/test/node/test_node_project_nvmrc/sample-node/src/hello.js deleted file mode 100644 index f08659b5e..000000000 --- a/test/node/test_node_project_nvmrc/sample-node/src/hello.js +++ /dev/null @@ -1 +0,0 @@ -console.log('Hello from Node.js!'); \ No newline at end of file