From 9a0af2c4abf5debf67aaf67d4fc8152a748518b9 Mon Sep 17 00:00:00 2001 From: defelmnq Date: Thu, 17 Apr 2025 16:00:14 +0200 Subject: [PATCH 1/3] add PNPM_HOME on pnpm --- devcontainers-cli/main.test.ts | 4 ++-- devcontainers-cli/run.sh | 17 ++++++++++++----- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/devcontainers-cli/main.test.ts b/devcontainers-cli/main.test.ts index 8872f181..75e703ca 100644 --- a/devcontainers-cli/main.test.ts +++ b/devcontainers-cli/main.test.ts @@ -30,7 +30,7 @@ const executeScriptInContainerWithPackageManager = async ( await execContainer(id, [ shell, "-c", - "apk add nodejs npm && npm install -g pnpm", + `wget -qO- https://get.pnpm.io/install.sh | ENV="$HOME/.shrc" SHELL="$(which sh)" sh -`, ]); } else if (packageManager === "yarn") { await execContainer(id, [ @@ -86,7 +86,7 @@ describe("devcontainers-cli", async () => { expect(output.stdout[output.stdout.length - 1]).toEqual( "🥳 @devcontainers/cli has been installed into /usr/local/bin/devcontainer!", ); - }); + }, 15000); it("installs devcontainers-cli with yarn", async () => { const state = await runTerraformApply(import.meta.dir, { diff --git a/devcontainers-cli/run.sh b/devcontainers-cli/run.sh index dce7a20e..68de6737 100755 --- a/devcontainers-cli/run.sh +++ b/devcontainers-cli/run.sh @@ -12,12 +12,12 @@ if ! command -v docker > /dev/null 2>&1; then fi # Determine the package manager to use: npm, pnpm, or yarn -if command -v pnpm > /dev/null 2>&1; then - PACKAGE_MANAGER="pnpm" -elif command -v yarn > /dev/null 2>&1; then +if command -v yarn > /dev/null 2>&1; then PACKAGE_MANAGER="yarn" elif command -v npm > /dev/null 2>&1; then PACKAGE_MANAGER="npm" +elif command -v pnpm > /dev/null 2>&1; then + PACKAGE_MANAGER="pnpm" else echo "ERROR: No supported package manager (npm, pnpm, yarn) is installed. Please install one first." 1>&2 exit 1 @@ -26,8 +26,15 @@ fi echo "Installing @devcontainers/cli using $PACKAGE_MANAGER..." # Install @devcontainers/cli using the selected package manager -if [ "$PACKAGE_MANAGER" = "npm" ] || [ "$PACKAGE_MANAGER" = "pnpm" ]; then - $PACKAGE_MANAGER install -g @devcontainers/cli \ +if [ "$PACKAGE_MANAGER" = "npm" ]; then + $PACKAGE_MANAGER install -g @devcontainers/cli \ + && echo "🥳 @devcontainers/cli has been installed into $(which devcontainer)!" +elif [ "$PACKAGE_MANAGER" = "pnpm" ]; then + # if PNPM_HOME is not set, set it to the bin directory of the script + if [ -z "$PNPM_HOME" ]; then + export PNPM_HOME="$CODER_SCRIPT_BIN_DIR" + fi + $PACKAGE_MANAGER add -g @devcontainers/cli \ && echo "🥳 @devcontainers/cli has been installed into $(which devcontainer)!" elif [ "$PACKAGE_MANAGER" = "yarn" ]; then $PACKAGE_MANAGER global add @devcontainers/cli \ From 1adf7aad4808637e71612bf5779c6ea6029cddcf Mon Sep 17 00:00:00 2001 From: defelmnq Date: Thu, 17 Apr 2025 16:09:51 +0200 Subject: [PATCH 2/3] format --- devcontainers-cli/run.sh | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/devcontainers-cli/run.sh b/devcontainers-cli/run.sh index 68de6737..10e8c3cc 100755 --- a/devcontainers-cli/run.sh +++ b/devcontainers-cli/run.sh @@ -27,14 +27,14 @@ echo "Installing @devcontainers/cli using $PACKAGE_MANAGER..." # Install @devcontainers/cli using the selected package manager if [ "$PACKAGE_MANAGER" = "npm" ]; then - $PACKAGE_MANAGER install -g @devcontainers/cli \ + $PACKAGE_MANAGER install -g @devcontainers/cli \ && echo "🥳 @devcontainers/cli has been installed into $(which devcontainer)!" elif [ "$PACKAGE_MANAGER" = "pnpm" ]; then - # if PNPM_HOME is not set, set it to the bin directory of the script - if [ -z "$PNPM_HOME" ]; then - export PNPM_HOME="$CODER_SCRIPT_BIN_DIR" - fi - $PACKAGE_MANAGER add -g @devcontainers/cli \ + # if PNPM_HOME is not set, set it to the bin directory of the script + if [ -z "$PNPM_HOME" ]; then + export PNPM_HOME="$CODER_SCRIPT_BIN_DIR" + fi + $PACKAGE_MANAGER add -g @devcontainers/cli \ && echo "🥳 @devcontainers/cli has been installed into $(which devcontainer)!" elif [ "$PACKAGE_MANAGER" = "yarn" ]; then $PACKAGE_MANAGER global add @devcontainers/cli \ From 5e147bb262674f9b79a16accc1f58f529d2fead8 Mon Sep 17 00:00:00 2001 From: defelmnq Date: Fri, 18 Apr 2025 19:02:37 +0200 Subject: [PATCH 3/3] update script with maf suggestions --- devcontainers-cli/README.md | 2 +- devcontainers-cli/main.test.ts | 4 ++-- devcontainers-cli/run.sh | 42 ++++++++++++++++++++++------------ 3 files changed, 30 insertions(+), 18 deletions(-) diff --git a/devcontainers-cli/README.md b/devcontainers-cli/README.md index 5ed3aed8..11961cd7 100644 --- a/devcontainers-cli/README.md +++ b/devcontainers-cli/README.md @@ -16,7 +16,7 @@ The devcontainers-cli module provides an easy way to install [`@devcontainers/cl ```tf module "devcontainers-cli" { source = "registry.coder.com/modules/devcontainers-cli/coder" - version = "1.0.0" + version = "1.0.1" agent_id = coder_agent.example.id } ``` diff --git a/devcontainers-cli/main.test.ts b/devcontainers-cli/main.test.ts index 75e703ca..85686c46 100644 --- a/devcontainers-cli/main.test.ts +++ b/devcontainers-cli/main.test.ts @@ -106,7 +106,7 @@ describe("devcontainers-cli", async () => { expect(output.stdout[output.stdout.length - 1]).toEqual( "🥳 @devcontainers/cli has been installed into /usr/local/bin/devcontainer!", ); - }); + }, 15000); it("displays warning if docker is not installed", async () => { const state = await runTerraformApply(import.meta.dir, { @@ -126,5 +126,5 @@ describe("devcontainers-cli", async () => { expect(output.stdout[output.stdout.length - 1]).toEqual( "🥳 @devcontainers/cli has been installed into /usr/local/bin/devcontainer!", ); - }); + }, 15000); }); diff --git a/devcontainers-cli/run.sh b/devcontainers-cli/run.sh index 10e8c3cc..03aac17f 100755 --- a/devcontainers-cli/run.sh +++ b/devcontainers-cli/run.sh @@ -23,22 +23,34 @@ else exit 1 fi -echo "Installing @devcontainers/cli using $PACKAGE_MANAGER..." - -# Install @devcontainers/cli using the selected package manager -if [ "$PACKAGE_MANAGER" = "npm" ]; then - $PACKAGE_MANAGER install -g @devcontainers/cli \ - && echo "🥳 @devcontainers/cli has been installed into $(which devcontainer)!" -elif [ "$PACKAGE_MANAGER" = "pnpm" ]; then - # if PNPM_HOME is not set, set it to the bin directory of the script - if [ -z "$PNPM_HOME" ]; then - export PNPM_HOME="$CODER_SCRIPT_BIN_DIR" +install() { + echo "Installing @devcontainers/cli using $PACKAGE_MANAGER..." + if [ "$PACKAGE_MANAGER" = "npm" ]; then + npm install -g @devcontainers/cli + elif [ "$PACKAGE_MANAGER" = "pnpm" ]; then + # Check if PNPM_HOME is set, if not, set it to the script's bin directory + # pnpm needs this to be set to install binaries + # coder agent ensures this part is part of the PATH + # so that the devcontainer command is available + if [ -z "$PNPM_HOME" ]; then + PNPM_HOME="$CODER_SCRIPT_BIN_DIR" + export M_HOME + fi + pnpm add -g @devcontainers/cli + elif [ "$PACKAGE_MANAGER" = "yarn" ]; then + yarn global add @devcontainers/cli fi - $PACKAGE_MANAGER add -g @devcontainers/cli \ - && echo "🥳 @devcontainers/cli has been installed into $(which devcontainer)!" -elif [ "$PACKAGE_MANAGER" = "yarn" ]; then - $PACKAGE_MANAGER global add @devcontainers/cli \ - && echo "🥳 @devcontainers/cli has been installed into $(which devcontainer)!" +} + +if ! install; then + echo "Failed to install @devcontainers/cli" >&2 + exit 1 +fi + +if ! command -v devcontainer > /dev/null 2>&1; then + echo "Installation completed but 'devcontainer' command not found in PATH" >&2 + exit 1 fi +echo "🥳 @devcontainers/cli has been installed into $(which devcontainer)!" exit 0