-
Notifications
You must be signed in to change notification settings - Fork 64
fix(devcontainers-cli): add PNPM_HOME for pnpm package manager #433
Changes from 2 commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -12,12 +12,12 @@ if ! command -v docker > /dev/null 2>&1; then | |
| fi | ||
|
|
||
| # Determine the package manager to use: npm, pnpm, or yarn | ||
|
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Changed the ordering to use PNPM as a last option, if NPM is installed too. |
||
| 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,9 +26,16 @@ fi | |
| echo "Installing @devcontainers/cli using $PACKAGE_MANAGER..." | ||
|
|
||
| # Install @devcontainers/cli using the selected package manager | ||
| if [ "$PACKAGE_MANAGER" = "npm" ] || [ "$PACKAGE_MANAGER" = "pnpm" ]; then | ||
| 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 | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This comment could better explain why we need to do this, for posterity. |
||
| if [ -z "$PNPM_HOME" ]; then | ||
| export PNPM_HOME="$CODER_SCRIPT_BIN_DIR" | ||
| fi | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Just for my education, how does that work? What is
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Typically |
||
| $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)!" | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. It'd be nice to factor out this repetition, might I suggest the following? install() {
if [ "$PACKAGE_MANAGER" = "npm" ]; then
npm install -g @devcontainers/cli
elif [ "$PACKAGE_MANAGER" = "pnpm" ]; then
# <reason we set this>
if [ -z "$PNPM_HOME" ]; then
PNPM_HOME="$CODER_SCRIPT_BIN_DIR"
export PNPM_HOME
fi
pnpm add -g @devcontainers/cli
elif [ "$PACKAGE_MANAGER" = "yarn" ]; then
yarn global add @devcontainers/cli
fi
}
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 Adds a bit more detail and validates the binary is present. |
||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Purely testing purpose, done to not rely on NPM.