diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index bc693af..df77d34 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -17,6 +17,7 @@ jobs: - bitwarden-cli - bitwarden-secrets-manager - mise + - mise-node - mise-python - vault baseImage: @@ -63,6 +64,7 @@ jobs: - bitwarden-secrets-manager - kamal - mise + - mise-node - mise-python - vault steps: diff --git a/src/mise-node/README.md b/src/mise-node/README.md new file mode 100644 index 0000000..ab1d85f --- /dev/null +++ b/src/mise-node/README.md @@ -0,0 +1,25 @@ + +# Node.js (mise) (mise-node) + +Installs Node.js via mise-en-place version manager. + +## Example Usage + +```json +"features": { + "ghcr.io/RouL/devcontainer-features/mise-node:1": {} +} +``` + +## Options + +| Options Id | Description | Type | Default Value | +|-----|-----|-----|-----| +| version | Version to be installed as default. | string | lts | +| extra_versions | Additional versions to be installed. (space separated) | string | - | + + + +--- + +_Note: This file was auto-generated from the [devcontainer-feature.json](https://github.com/RouL/devcontainer-features/blob/main/src/mise-node/devcontainer-feature.json). Add additional notes to a `NOTES.md`._ diff --git a/src/mise-node/devcontainer-feature.json b/src/mise-node/devcontainer-feature.json new file mode 100644 index 0000000..f59f1a7 --- /dev/null +++ b/src/mise-node/devcontainer-feature.json @@ -0,0 +1,21 @@ +{ + "id": "mise-node", + "version": "1.0.0", + "name": "Node.js (mise)", + "description": "Installs Node.js via mise-en-place version manager.", + "dependsOn": { + "ghcr.io/RouL/devcontainer-features/mise:latest": {} + }, + "options": { + "version": { + "description": "Version to be installed as default.", + "type": "string", + "default": "lts" + }, + "extra_versions": { + "description": "Additional versions to be installed. (space separated)", + "type": "string", + "default": "" + } + } +} diff --git a/src/mise-node/install.sh b/src/mise-node/install.sh new file mode 100755 index 0000000..6f6e56a --- /dev/null +++ b/src/mise-node/install.sh @@ -0,0 +1,45 @@ +#!/usr/bin/bash +set -e + +USERNAME="${USERNAME:-"${_REMOTE_USER:-"automatic"}"}" +VERSION="${VERSION:-lts}" + +REQUIRED_PACKAGES="build-essential git ca-certificates" + +apt_get_update() +{ + if [ "$(find /var/lib/apt/lists/* | wc -l)" = "0" ]; then + echo "Running apt-get update..." + apt-get update -y + fi +} + +check_packages() { + if ! dpkg -s "$@" > /dev/null 2>&1; then + apt_get_update + apt-get -y install --no-install-recommends "$@" + fi +} + +export DEBIAN_FRONTEND=noninteractive + +check_packages $REQUIRED_PACKAGES + +install() { + su ${USERNAME} -c "mise use --global node@${VERSION}" +} + +echo "(*) Installing Node (${VERSION}) via mise as default..." + +install + +for extraVersion in $EXTRA_VERSIONS +do + echo "(*) Installung Node (${extraVersion}) via mise" + su ${USERNAME} -c "mise install node@${VERSION}" +done + +# Clean up +rm -rf /var/lib/apt/lists/* + +echo "Done!" diff --git a/test/mise-node/node20.sh b/test/mise-node/node20.sh new file mode 100644 index 0000000..bbbee8c --- /dev/null +++ b/test/mise-node/node20.sh @@ -0,0 +1,8 @@ +#!/bin/bash +set -e + +source dev-container-features-test-lib + +check "check default node == 20.*" bash -c "node --version | grep -E '^v20\\.'" + +reportResults diff --git a/test/mise-node/node23_node22_node20.sh b/test/mise-node/node23_node22_node20.sh new file mode 100644 index 0000000..55412e4 --- /dev/null +++ b/test/mise-node/node23_node22_node20.sh @@ -0,0 +1,10 @@ +#!/bin/bash +set -e + +source dev-container-features-test-lib + +check "check default node == 23.*" bash -c "node --version | grep -E '^v23\\.'" +check "check node@22" bash -c "mise exec node@22 -- node --version | grep -E '^v22\\.'" +check "check node@20" bash -c "mise exec node@20 -- node --version | grep -E '^v20\\.'" + +reportResults diff --git a/test/mise-node/scenarios.json b/test/mise-node/scenarios.json new file mode 100644 index 0000000..913b801 --- /dev/null +++ b/test/mise-node/scenarios.json @@ -0,0 +1,19 @@ +{ + "node20": { + "image": "mcr.microsoft.com/devcontainers/base:ubuntu", + "features": { + "mise-node": { + "version": "20" + } + } + }, + "node23_node22_node20": { + "image": "mcr.microsoft.com/devcontainers/base:ubuntu", + "features": { + "mise-node": { + "version": "23", + "extra_versions": "22 20" + } + } + } +} diff --git a/test/mise-node/test.sh b/test/mise-node/test.sh new file mode 100644 index 0000000..bc79146 --- /dev/null +++ b/test/mise-node/test.sh @@ -0,0 +1,8 @@ +#!/bin/bash +set -e + +source dev-container-features-test-lib + +check "check default node" bash -c "node --version | grep -E '^v[1-9][0-9]*\\.'" + +reportResults diff --git a/test/mise-python/test.sh b/test/mise-python/test.sh index 3ddf50c..7fd6388 100644 --- a/test/mise-python/test.sh +++ b/test/mise-python/test.sh @@ -1,12 +1,6 @@ #!/bin/bash set -e -sudo apt-get update -y > /dev/null -sudo apt-get install -y curl jq ca-certificates > /dev/null - -CURRENT_VERSION="$(curl -L --no-progress-meter https://api.github.com/repos/jdx/mise/releases/latest | jq --raw-output '.tag_name')" -CURRENT_VERSION="${CURRENT_VERSION#v}" - source dev-container-features-test-lib check "check default python" bash -c "python --version | grep -E '^Python '"