From e2887624e92fd89da4ae868d94847fa85be92a81 Mon Sep 17 00:00:00 2001 From: Markus Zhang Date: Sun, 16 Feb 2025 16:12:19 +0000 Subject: [PATCH] [CHANGE] New feature "mise-ruby" --- .github/workflows/test.yaml | 2 + src/mise-ruby/README.md | 25 +++++++++++++ src/mise-ruby/devcontainer-feature.json | 21 +++++++++++ src/mise-ruby/install.sh | 45 +++++++++++++++++++++++ test/mise-bun/test.sh | 2 +- test/mise-ruby/ruby3.3.sh | 8 ++++ test/mise-ruby/ruby3.4_ruby3.3_ruby3.2.sh | 10 +++++ test/mise-ruby/scenarios.json | 19 ++++++++++ test/mise-ruby/test.sh | 15 ++++++++ 9 files changed, 146 insertions(+), 1 deletion(-) create mode 100644 src/mise-ruby/README.md create mode 100644 src/mise-ruby/devcontainer-feature.json create mode 100755 src/mise-ruby/install.sh create mode 100644 test/mise-ruby/ruby3.3.sh create mode 100644 test/mise-ruby/ruby3.4_ruby3.3_ruby3.2.sh create mode 100644 test/mise-ruby/scenarios.json create mode 100644 test/mise-ruby/test.sh diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index d3227e4..400b6be 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -21,6 +21,7 @@ jobs: - mise-golang - mise-node - mise-python + - mise-ruby - mise-rust - vault baseImage: @@ -71,6 +72,7 @@ jobs: - mise-golang - mise-node - mise-python + - mise-ruby - mise-rust - vault steps: diff --git a/src/mise-ruby/README.md b/src/mise-ruby/README.md new file mode 100644 index 0000000..d175fc0 --- /dev/null +++ b/src/mise-ruby/README.md @@ -0,0 +1,25 @@ + +# Ruby (mise) (mise-ruby) + +Installs Ruby via mise-en-place version manager. + +## Example Usage + +```json +"features": { + "ghcr.io/RouL/devcontainer-features/mise-ruby:1": {} +} +``` + +## Options + +| Options Id | Description | Type | Default Value | +|-----|-----|-----|-----| +| version | Version to be installed as default. | string | latest | +| 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-ruby/devcontainer-feature.json). Add additional notes to a `NOTES.md`._ diff --git a/src/mise-ruby/devcontainer-feature.json b/src/mise-ruby/devcontainer-feature.json new file mode 100644 index 0000000..184e45b --- /dev/null +++ b/src/mise-ruby/devcontainer-feature.json @@ -0,0 +1,21 @@ +{ + "id": "mise-ruby", + "version": "1.0.0", + "name": "Ruby (mise)", + "description": "Installs Ruby 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": "latest" + }, + "extra_versions": { + "description": "Additional versions to be installed. (space separated)", + "type": "string", + "default": "" + } + } +} diff --git a/src/mise-ruby/install.sh b/src/mise-ruby/install.sh new file mode 100755 index 0000000..256bda4 --- /dev/null +++ b/src/mise-ruby/install.sh @@ -0,0 +1,45 @@ +#!/usr/bin/bash +set -e + +USERNAME="${USERNAME:-"${_REMOTE_USER:-"automatic"}"}" +VERSION="${VERSION:-latest}" + +REQUIRED_PACKAGES="build-essential git ca-certificates autoconf patch libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libgmp-dev libncurses5-dev libffi-dev libgdbm6 libgdbm-dev libdb-dev uuid-dev libffi-dev" + +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 ruby@${VERSION}" +} + +echo "(*) Installing Ruby (${VERSION}) via mise as default..." + +install + +for extraVersion in $EXTRA_VERSIONS +do + echo "(*) Installung Ruby (${extraVersion}) via mise" + su ${USERNAME} -c "mise install ruby@${extraVersion}" +done + +# Clean up +rm -rf /var/lib/apt/lists/* + +echo "Done!" diff --git a/test/mise-bun/test.sh b/test/mise-bun/test.sh index 91f5ddb..9cc8feb 100644 --- a/test/mise-bun/test.sh +++ b/test/mise-bun/test.sh @@ -9,6 +9,6 @@ CURRENT_VERSION="${CURRENT_VERSION#bun-v}" source dev-container-features-test-lib -check "check default bun == latest ($CURRENT_VERSION)" bash -c "bun --version | grep -E '^${CURRENT_VERSION//\./\\.}$'" +check "check default bun == latest ($CURRENT_VERSION)" bash -c "bun --version | grep -E '^${CURRENT_VERSION//\./\\.}\$'" reportResults diff --git a/test/mise-ruby/ruby3.3.sh b/test/mise-ruby/ruby3.3.sh new file mode 100644 index 0000000..b3d1ce3 --- /dev/null +++ b/test/mise-ruby/ruby3.3.sh @@ -0,0 +1,8 @@ +#!/bin/bash +set -e + +source dev-container-features-test-lib + +check "check default ruby == 3.3.*" bash -c "ruby --version | grep -E '^ruby 3\\.3\\.'" + +reportResults diff --git a/test/mise-ruby/ruby3.4_ruby3.3_ruby3.2.sh b/test/mise-ruby/ruby3.4_ruby3.3_ruby3.2.sh new file mode 100644 index 0000000..b1d85d6 --- /dev/null +++ b/test/mise-ruby/ruby3.4_ruby3.3_ruby3.2.sh @@ -0,0 +1,10 @@ +#!/bin/bash +set -e + +source dev-container-features-test-lib + +check "check default ruby == 3.4.*" bash -c "ruby --version | grep -E '^ruby 3\\.4\\.'" +check "check ruby 3.3.*" bash -c "mise exec ruby@3.3 -- ruby --version | grep -E '^ruby 3\\.3\\.'" +check "check ruby 3.2.*" bash -c "mise exec ruby@3.2 -- ruby --version | grep -E '^ruby 3\\.2\\.'" + +reportResults diff --git a/test/mise-ruby/scenarios.json b/test/mise-ruby/scenarios.json new file mode 100644 index 0000000..117ad5f --- /dev/null +++ b/test/mise-ruby/scenarios.json @@ -0,0 +1,19 @@ +{ + "ruby3.3": { + "image": "mcr.microsoft.com/devcontainers/base:ubuntu", + "features": { + "mise-ruby": { + "version": "3.3" + } + } + }, + "ruby3.4_ruby3.3_ruby3.2": { + "image": "mcr.microsoft.com/devcontainers/base:ubuntu", + "features": { + "mise-ruby": { + "version": "3.4", + "extra_versions": "3.3 3.2" + } + } + } +} diff --git a/test/mise-ruby/test.sh b/test/mise-ruby/test.sh new file mode 100644 index 0000000..502b859 --- /dev/null +++ b/test/mise-ruby/test.sh @@ -0,0 +1,15 @@ +#!/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/ruby/ruby/releases/latest | jq --raw-output '.tag_name')" +CURRENT_VERSION="${CURRENT_VERSION//_/.}" +CURRENT_VERSION="${CURRENT_VERSION#v}" + +source dev-container-features-test-lib + +check "check default ruby == latest ($CURRENT_VERSION)" bash -c "ruby --version | grep -E '^ruby ${CURRENT_VERSION//\./\\.} '" + +reportResults