From dbc32d2704745052d1e4508f710f90c35528bc01 Mon Sep 17 00:00:00 2001 From: Markus Zhang Date: Sun, 16 Feb 2025 14:51:14 +0000 Subject: [PATCH] [CHANGE] New feature "mise-rust" --- .github/workflows/test.yaml | 2 + src/mise-rust/README.md | 25 +++++++++++ src/mise-rust/devcontainer-feature.json | 21 +++++++++ src/mise-rust/install.sh | 45 ++++++++++++++++++++ test/mise-rust/rust1.80.sh | 9 ++++ test/mise-rust/rust1.84_rust1.80_rust1.70.sh | 15 +++++++ test/mise-rust/scenarios.json | 19 +++++++++ test/mise-rust/test.sh | 14 ++++++ 8 files changed, 150 insertions(+) create mode 100644 src/mise-rust/README.md create mode 100644 src/mise-rust/devcontainer-feature.json create mode 100755 src/mise-rust/install.sh create mode 100644 test/mise-rust/rust1.80.sh create mode 100644 test/mise-rust/rust1.84_rust1.80_rust1.70.sh create mode 100644 test/mise-rust/scenarios.json create mode 100644 test/mise-rust/test.sh diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 55edc9c..ebf50ff 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -20,6 +20,7 @@ jobs: - mise-golang - mise-node - mise-python + - mise-rust - vault baseImage: - debian:latest @@ -68,6 +69,7 @@ jobs: - mise-golang - mise-node - mise-python + - mise-rust - vault steps: - uses: actions/checkout@v4 diff --git a/src/mise-rust/README.md b/src/mise-rust/README.md new file mode 100644 index 0000000..4a851a6 --- /dev/null +++ b/src/mise-rust/README.md @@ -0,0 +1,25 @@ + +# Rust (mise) (mise-rust) + +Installs Rust via mise-en-place version manager. + +## Example Usage + +```json +"features": { + "ghcr.io/RouL/devcontainer-features/mise-rust: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-rust/devcontainer-feature.json). Add additional notes to a `NOTES.md`._ diff --git a/src/mise-rust/devcontainer-feature.json b/src/mise-rust/devcontainer-feature.json new file mode 100644 index 0000000..f576ff7 --- /dev/null +++ b/src/mise-rust/devcontainer-feature.json @@ -0,0 +1,21 @@ +{ + "id": "mise-rust", + "version": "1.0.0", + "name": "Rust (mise)", + "description": "Installs Rust 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-rust/install.sh b/src/mise-rust/install.sh new file mode 100755 index 0000000..f6a727e --- /dev/null +++ b/src/mise-rust/install.sh @@ -0,0 +1,45 @@ +#!/usr/bin/bash +set -e + +USERNAME="${USERNAME:-"${_REMOTE_USER:-"automatic"}"}" +VERSION="${VERSION:-latest}" + +REQUIRED_PACKAGES="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 rust@${VERSION}" +} + +echo "(*) Installing Rust (${VERSION}) via mise as default..." + +install + +for extraVersion in $EXTRA_VERSIONS +do + echo "(*) Installung Rust (${extraVersion}) via mise" + su ${USERNAME} -c "mise install rust@${extraVersion}" +done + +# Clean up +rm -rf /var/lib/apt/lists/* + +echo "Done!" diff --git a/test/mise-rust/rust1.80.sh b/test/mise-rust/rust1.80.sh new file mode 100644 index 0000000..787d8c0 --- /dev/null +++ b/test/mise-rust/rust1.80.sh @@ -0,0 +1,9 @@ +#!/bin/bash +set -e + +source dev-container-features-test-lib + +check "check default rustc == 1.80.*" bash -c "rustc --version | grep -E '^rustc 1\\.80\\.'" +check "check default cargo == 1.80.*" bash -c "cargo --version | grep -E '^cargo 1\\.80\\.'" + +reportResults diff --git a/test/mise-rust/rust1.84_rust1.80_rust1.70.sh b/test/mise-rust/rust1.84_rust1.80_rust1.70.sh new file mode 100644 index 0000000..884ce47 --- /dev/null +++ b/test/mise-rust/rust1.84_rust1.80_rust1.70.sh @@ -0,0 +1,15 @@ +#!/bin/bash +set -e + +source dev-container-features-test-lib + +check "check default rustc == 1.84.*" bash -c "rustc --version | grep -E '^rustc 1\\.84\\.'" +check "check default cargo == 1.84.*" bash -c "cargo --version | grep -E '^cargo 1\\.84\\.'" + +check "check rustc 1.80.*" bash -c "mise exec rust@1.80 -- rustc --version | grep -E '^rustc 1\\.80\\.'" +check "check cargo 1.80.*" bash -c "mise exec rust@1.80 -- cargo --version | grep -E '^cargo 1\\.80\\.'" + +check "check rustc 1.70.*" bash -c "mise exec rust@1.70 -- rustc --version | grep -E '^rustc 1\\.70\\.'" +check "check cargo 1.70.*" bash -c "mise exec rust@1.70 -- cargo --version | grep -E '^cargo 1\\.70\\.'" + +reportResults diff --git a/test/mise-rust/scenarios.json b/test/mise-rust/scenarios.json new file mode 100644 index 0000000..0fc4b9a --- /dev/null +++ b/test/mise-rust/scenarios.json @@ -0,0 +1,19 @@ +{ + "rust1.80": { + "image": "mcr.microsoft.com/devcontainers/base:ubuntu", + "features": { + "mise-rust": { + "version": "1.80" + } + } + }, + "rust1.84_rust1.80_rust1.70": { + "image": "mcr.microsoft.com/devcontainers/base:ubuntu", + "features": { + "mise-rust": { + "version": "1.84", + "extra_versions": "1.80 1.70" + } + } + } +} diff --git a/test/mise-rust/test.sh b/test/mise-rust/test.sh new file mode 100644 index 0000000..60cae15 --- /dev/null +++ b/test/mise-rust/test.sh @@ -0,0 +1,14 @@ +#!/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/rust-lang/rust/releases/latest | jq --raw-output '.tag_name')" + +source dev-container-features-test-lib + +check "check default rustc == latest ($CURRENT_VERSION)" bash -c "rustc --version | grep -E '^rustc ${CURRENT_VERSION//\./\\.} '" +check "check default cargo == latest ($CURRENT_VERSION)" bash -c "cargo --version | grep -E '^cargo ${CURRENT_VERSION//\./\\.} '" + +reportResults