From 2926f73c444d277b63b557c5327ed4dc125724d2 Mon Sep 17 00:00:00 2001 From: George Cover <5285122+TheOptimist@users.noreply.github.com> Date: Mon, 31 Mar 2025 11:24:22 -0400 Subject: [PATCH 1/5] fix(npm-packages): handle scoped npm packages with format @package or @package@version --- src/npm-packages/devcontainer-feature.json | 2 +- src/npm-packages/install.sh | 15 +++++++++------ test/npm-packages/scenarios.json | 2 +- test/npm-packages/test_debian_versions.sh | 2 ++ 4 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/npm-packages/devcontainer-feature.json b/src/npm-packages/devcontainer-feature.json index 7c38a762f..2981e9c8f 100644 --- a/src/npm-packages/devcontainer-feature.json +++ b/src/npm-packages/devcontainer-feature.json @@ -1,6 +1,6 @@ { "id": "npm-packages", - "version": "1.0.0", + "version": "1.0.1", "name": "npm-packages", "documentationURL": "http://github.com/devcontainers-extra/features/tree/main/src/npm-packages", "description": "", diff --git a/src/npm-packages/install.sh b/src/npm-packages/install.sh index 6600bad1d..e444d2e70 100755 --- a/src/npm-packages/install.sh +++ b/src/npm-packages/install.sh @@ -16,13 +16,16 @@ IFS=',' read -ra PACKAGE_ARRAY <<<"$PACKAGES" # Iterate through each package for package in "${PACKAGE_ARRAY[@]}"; do - # Check if package contains version - if [[ $package == *@* ]]; then - # Split package into name and version - name=${package%@*} - version=${package#*@} + # Use regex to match valid npm package identifier + # unscoped, unscoped@version, @scoped, @scoped@version + if [[ $package =~ ^(@?[^@]+?)(@(.+?))?$ ]]; then + name="${BASH_REMATCH[1]}" + version="${BASH_REMATCH[3]}" + # Bash doesn't have non-capturing groups so @version portion can + # only be made optional inside a group, then a nested group captures + # the version number itself. else - # Package without version + # Fallback for any invalid package identifiers name=$package version="" fi diff --git a/test/npm-packages/scenarios.json b/test/npm-packages/scenarios.json index d5363099d..2cafeb867 100644 --- a/test/npm-packages/scenarios.json +++ b/test/npm-packages/scenarios.json @@ -3,7 +3,7 @@ "image": "mcr.microsoft.com/devcontainers/base:debian", "features": { "npm-packages": { - "packages": "eslint@9.20.1,nodemon,prettier@3.5.2" + "packages": "eslint@9.20.1,nodemon,prettier@3.5.2,@moonrepo/cli@1.34.0,@biomejs/biome" } } } diff --git a/test/npm-packages/test_debian_versions.sh b/test/npm-packages/test_debian_versions.sh index 4463caa7e..9dc17bdec 100755 --- a/test/npm-packages/test_debian_versions.sh +++ b/test/npm-packages/test_debian_versions.sh @@ -7,5 +7,7 @@ source dev-container-features-test-lib check "eslint version is equal to 9.20.1" bash -c "eslint --version | grep 'v9.20.1'" check "nodemon is installed" nodemon --version check "prettier version is equal to 3.5.2" bash -c "prettier --version | grep '3.5.2'" +check "@moonrepo/cli version is equal to 1.34.0" bash -c "moonrepo --version | grep 1.34.0" +check "@biomejs/biome is installed" biome --version reportResults From f28a554285c77f5a0929081e633a6328a1ebe937 Mon Sep 17 00:00:00 2001 From: George Cover <5285122+TheOptimist@users.noreply.github.com> Date: Mon, 31 Mar 2025 11:53:20 -0400 Subject: [PATCH 2/5] fix(npm-packages): fix test for scoped npm package installation --- test/npm-packages/test_debian_versions.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/npm-packages/test_debian_versions.sh b/test/npm-packages/test_debian_versions.sh index 9dc17bdec..8f1ea81bd 100755 --- a/test/npm-packages/test_debian_versions.sh +++ b/test/npm-packages/test_debian_versions.sh @@ -7,7 +7,7 @@ source dev-container-features-test-lib check "eslint version is equal to 9.20.1" bash -c "eslint --version | grep 'v9.20.1'" check "nodemon is installed" nodemon --version check "prettier version is equal to 3.5.2" bash -c "prettier --version | grep '3.5.2'" -check "@moonrepo/cli version is equal to 1.34.0" bash -c "moonrepo --version | grep 1.34.0" +check "@moonrepo/cli version is equal to 1.34.0" bash -c "moon --version | grep 1.34.0" check "@biomejs/biome is installed" biome --version reportResults From ba63cefb295848ed5ae8365ecadf395962a6cb98 Mon Sep 17 00:00:00 2001 From: George Cover <5285122+TheOptimist@users.noreply.github.com> Date: Mon, 31 Mar 2025 11:59:48 -0400 Subject: [PATCH 3/5] fix(npm-packages): correcting grep check with quotes --- test/npm-packages/test_debian_versions.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/npm-packages/test_debian_versions.sh b/test/npm-packages/test_debian_versions.sh index 8f1ea81bd..297fb58c0 100755 --- a/test/npm-packages/test_debian_versions.sh +++ b/test/npm-packages/test_debian_versions.sh @@ -7,7 +7,7 @@ source dev-container-features-test-lib check "eslint version is equal to 9.20.1" bash -c "eslint --version | grep 'v9.20.1'" check "nodemon is installed" nodemon --version check "prettier version is equal to 3.5.2" bash -c "prettier --version | grep '3.5.2'" -check "@moonrepo/cli version is equal to 1.34.0" bash -c "moon --version | grep 1.34.0" +check "@moonrepo/cli version is equal to 1.34.0" bash -c "moon --version | grep '1.34.0'" check "@biomejs/biome is installed" biome --version reportResults From b7804de2db23c58e1ee401e9f67079aa1e36cfde Mon Sep 17 00:00:00 2001 From: George Cover <5285122+TheOptimist@users.noreply.github.com> Date: Mon, 31 Mar 2025 13:31:55 -0400 Subject: [PATCH 4/5] Update test/npm-packages/scenarios.json Co-authored-by: Arek Kalandyk <36413794+koralowiec@users.noreply.github.com> Signed-off-by: George Cover <5285122+TheOptimist@users.noreply.github.com> --- test/npm-packages/scenarios.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/npm-packages/scenarios.json b/test/npm-packages/scenarios.json index 2cafeb867..d9581aec6 100644 --- a/test/npm-packages/scenarios.json +++ b/test/npm-packages/scenarios.json @@ -3,7 +3,7 @@ "image": "mcr.microsoft.com/devcontainers/base:debian", "features": { "npm-packages": { - "packages": "eslint@9.20.1,nodemon,prettier@3.5.2,@moonrepo/cli@1.34.0,@biomejs/biome" + "packages": "eslint@9.20.1,nodemon,prettier@3.5.2,@angular/cli@19.2.1,@biomejs/biome" } } } From 652e968bd26a960f8beae1d3ea09628af731125a Mon Sep 17 00:00:00 2001 From: George Cover <5285122+TheOptimist@users.noreply.github.com> Date: Mon, 31 Mar 2025 13:32:00 -0400 Subject: [PATCH 5/5] Update test/npm-packages/test_debian_versions.sh Co-authored-by: Arek Kalandyk <36413794+koralowiec@users.noreply.github.com> Signed-off-by: George Cover <5285122+TheOptimist@users.noreply.github.com> --- test/npm-packages/test_debian_versions.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/npm-packages/test_debian_versions.sh b/test/npm-packages/test_debian_versions.sh index 297fb58c0..cb688c17d 100755 --- a/test/npm-packages/test_debian_versions.sh +++ b/test/npm-packages/test_debian_versions.sh @@ -7,7 +7,7 @@ source dev-container-features-test-lib check "eslint version is equal to 9.20.1" bash -c "eslint --version | grep 'v9.20.1'" check "nodemon is installed" nodemon --version check "prettier version is equal to 3.5.2" bash -c "prettier --version | grep '3.5.2'" -check "@moonrepo/cli version is equal to 1.34.0" bash -c "moon --version | grep '1.34.0'" +check "@angular/cli version is equal to 19.2.1" bash -c "ng --version | grep '19.2.1'" check "@biomejs/biome is installed" biome --version reportResults