Unverified Commit 805ce775 authored by Kaniska's avatar Kaniska Committed by GitHub

[rust] - Introducing new options to install components (#1404)

* [rust] - Introducing new options to install components

* Fix for testing with rockylinux and addition in tests

* Correcting based on review comments.

* Further changes in the input

* correcting code comment

* Correcting based on review comment

* Correcting based on review comment.

* To rerun the test
parent a69dd5c8
...@@ -18,6 +18,7 @@ Installs Rust, common Rust utilities, and their required dependencies ...@@ -18,6 +18,7 @@ Installs Rust, common Rust utilities, and their required dependencies
| version | Select or enter a version of Rust to install. | string | latest | | version | Select or enter a version of Rust to install. | string | latest |
| profile | Select a rustup install profile. | string | minimal | | profile | Select a rustup install profile. | string | minimal |
| targets | Optional comma separated list of additional Rust targets to install. | string | - | | targets | Optional comma separated list of additional Rust targets to install. | string | - |
| components | Optional comma separeated list of rust components to be installed based on input. | string | rust-analyzer,rust-src,rustfmt,clippy |
## Customizations ## Customizations
......
{ {
"id": "rust", "id": "rust",
"version": "1.4.0", "version": "1.5.0",
"name": "Rust", "name": "Rust",
"documentationURL": "https://github.com/devcontainers/features/tree/main/src/rust", "documentationURL": "https://github.com/devcontainers/features/tree/main/src/rust",
"description": "Installs Rust, common Rust utilities, and their required dependencies", "description": "Installs Rust, common Rust utilities, and their required dependencies",
...@@ -57,6 +57,17 @@ ...@@ -57,6 +57,17 @@
"armv7-unknown-linux-gnueabihf", "armv7-unknown-linux-gnueabihf",
"x86_64-unknown-redox,x86_64-unknown-uefi" "x86_64-unknown-redox,x86_64-unknown-uefi"
] ]
},
"components": {
"type": "string",
"default": "rust-analyzer,rust-src,rustfmt,clippy",
"description": "Optional, comma separated list of Rust components to be installed",
"proposals": [
"rust-analyzer,rust-src,rustfmt,clippy",
"rust-analyzer,rust-src",
"rustfmt,clippy,rust-docs",
"llvm-tools-preview,rust-src,rustfmt"
]
} }
}, },
"customizations": { "customizations": {
......
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
RUST_VERSION="${VERSION:-"latest"}" RUST_VERSION="${VERSION:-"latest"}"
RUSTUP_PROFILE="${PROFILE:-"minimal"}" RUSTUP_PROFILE="${PROFILE:-"minimal"}"
RUSTUP_TARGETS="${TARGETS:-""}" RUSTUP_TARGETS="${TARGETS:-""}"
IFS=',' read -ra components <<< "${COMPONENTS:-rust-analyzer,rust-src,rustfmt,clippy}"
export CARGO_HOME="${CARGO_HOME:-"/usr/local/cargo"}" export CARGO_HOME="${CARGO_HOME:-"/usr/local/cargo"}"
export RUSTUP_HOME="${RUSTUP_HOME:-"/usr/local/rustup"}" export RUSTUP_HOME="${RUSTUP_HOME:-"/usr/local/rustup"}"
...@@ -394,8 +395,19 @@ if [ "${UPDATE_RUST}" = "true" ]; then ...@@ -394,8 +395,19 @@ if [ "${UPDATE_RUST}" = "true" ]; then
echo "Updating Rust..." echo "Updating Rust..."
rustup update 2>&1 rustup update 2>&1
fi fi
echo "Installing common Rust dependencies..." # Install Rust components
rustup component add rust-analyzer rust-src rustfmt clippy 2>&1 echo "Installing Rust components..."
for component in "${components[@]}"; do
# Trim leading and trailing whitespace
component="${component#"${component%%[![:space:]]*}"}" && component="${component%"${component##*[![:space:]]}"}"
if [ -n "${component}" ]; then
echo "Installing Rust component: ${component}"
if ! rustup component add "${component}" 2>&1; then
echo "Warning: Failed to install component '${component}'. It may not be available for this toolchain." >&2
exit 1
fi
fi
done
if [ -n "${RUSTUP_TARGETS}" ]; then if [ -n "${RUSTUP_TARGETS}" ]; then
IFS=',' read -ra targets <<< "${RUSTUP_TARGETS}" IFS=',' read -ra targets <<< "${RUSTUP_TARGETS}"
......
...@@ -5,11 +5,27 @@ set -e ...@@ -5,11 +5,27 @@ set -e
# Optional: Import test library # Optional: Import test library
source dev-container-features-test-lib source dev-container-features-test-lib
# Helper function to check component is installed
check_component_installed() {
local component=$1
if rustup component list | grep -q "${component}.*installed"; then
return 0 # Component is installed (success)
else
return 1 # Component is not installed (failure)
fi
}
# Definition specific tests # Definition specific tests
check "cargo version" cargo --version check "cargo version" cargo --version
check "rustc version" rustc --version check "rustc version" rustc --version
check "correct rust version" rustup target list | grep aarch64-unknown-linux-gnu check "correct rust version" rustup target list | grep aarch64-unknown-linux-gnu
# Check that all specified extended components are installed
check "rust-analyzer is installed" check_component_installed "rust-analyzer"
check "rust-src is installed" check_component_installed "rust-src"
check "rustfmt is installed" check_component_installed "rustfmt"
check "clippy is installed" check_component_installed "clippy"
check "rust-docs is installed" check_component_installed "rust-docs"
# Report result # Report result
reportResults reportResults
......
...@@ -5,11 +5,27 @@ set -e ...@@ -5,11 +5,27 @@ set -e
# Optional: Import test library # Optional: Import test library
source dev-container-features-test-lib source dev-container-features-test-lib
# Helper function to check component is installed
check_component_installed() {
local component=$1
if rustup component list | grep -q "${component}.*installed"; then
return 0 # Component is installed (success)
else
return 1 # Component is not installed (failure)
fi
}
# Definition specific tests # Definition specific tests
check "cargo version" cargo --version check "cargo version" cargo --version
check "rustc version" rustc --version check "rustc version" rustc --version
check "correct rust version" rustup target list | grep aarch64-unknown-linux-gnu check "correct rust version" rustup target list | grep aarch64-unknown-linux-gnu
# Check that all specified extended components are installed
check "rust-analyzer is installed" check_component_installed "rust-analyzer"
check "rust-src is installed" check_component_installed "rust-src"
check "rustfmt is installed" check_component_installed "rustfmt"
check "clippy is installed" check_component_installed "clippy"
check "rust-docs is installed" check_component_installed "rust-docs"
# Report result # Report result
reportResults reportResults
......
...@@ -5,11 +5,27 @@ set -e ...@@ -5,11 +5,27 @@ set -e
# Optional: Import test library # Optional: Import test library
source dev-container-features-test-lib source dev-container-features-test-lib
# Helper function to check component is installed
check_component_installed() {
local component=$1
if rustup component list | grep -q "${component}.*installed"; then
return 0 # Component is installed (success)
else
return 1 # Component is not installed (failure)
fi
}
# Definition specific tests # Definition specific tests
check "cargo version" cargo --version check "cargo version" cargo --version
check "rustc version" rustc --version check "rustc version" rustc --version
check "correct rust version" rustup target list | grep aarch64-unknown-linux-gnu check "correct rust version" rustup target list | grep aarch64-unknown-linux-gnu
# Check that all specified extended components are installed
check "rust-analyzer is installed" check_component_installed "rust-analyzer"
check "rust-src is installed" check_component_installed "rust-src"
check "rustfmt is installed" check_component_installed "rustfmt"
check "clippy is installed" check_component_installed "clippy"
check "rust-docs is installed" check_component_installed "rust-docs"
# Report result # Report result
reportResults reportResults
......
#!/bin/bash
set -e
# Optional: Import test library
source dev-container-features-test-lib
# Helper function to check component is installed
check_component_installed() {
local component=$1
if rustup component list | grep -q "${component}.*installed"; then
return 0 # Component is installed (success)
else
return 1 # Component is not installed (failure)
fi
}
# Helper function to check component is NOT installed
check_component_not_installed() {
local component=$1
if rustup component list | grep -q "${component}.*installed"; then
return 1 # Component is installed (failure)
else
return 0 # Component is not installed (success)
fi
}
# Definition specific tests
check "cargo version" cargo --version
check "rustc version" rustc --version
check "correct rust version" rustup target list | grep aarch64-unknown-linux-gnu
# Check that specified custom components are installed
check "rust-analyzer is installed" check_component_installed "rust-analyzer"
check "rust-src is installed" check_component_installed "rust-src"
check "rustfmt is installed" check_component_installed "rustfmt"
# Check that clippy NOT installed
check "clippy not installed" check_component_not_installed "clippy"
# Report result
reportResults
#!/bin/bash
set -e
# Optional: Import test library
source dev-container-features-test-lib
# Helper function to check component is installed
check_component_installed() {
local component=$1
if rustup component list | grep -q "${component}.*installed"; then
return 0 # Component is installed (success)
else
return 1 # Component is not installed (failure)
fi
}
# Definition specific tests
check "cargo version" cargo --version
check "rustc version" rustc --version
check "correct rust version" rustup target list | grep aarch64-unknown-linux-gnu
# Check that default components are installed
check "rust-analyzer is installed" check_component_installed "rust-analyzer"
check "rust-src is installed" check_component_installed "rust-src"
check "rustfmt is installed" check_component_installed "rustfmt"
check "clippy is installed" check_component_installed "clippy"
# Report result
reportResults
#!/bin/bash
set -e
# Optional: Import test library
source dev-container-features-test-lib
# Helper function to check component is installed
check_component_installed() {
local component=$1
if rustup component list | grep -q "${component}.*installed"; then
return 0 # Component is installed (success)
else
return 1 # Component is not installed (failure)
fi
}
# Helper function to check component is NOT installed
check_component_not_installed() {
local component=$1
if rustup component list | grep -q "${component}.*installed"; then
return 1 # Component is installed (failure)
else
return 0 # Component is not installed (success)
fi
}
# Definition specific tests
check "cargo version" cargo --version
check "rustc version" rustc --version
check "correct rust version" rustup target list | grep aarch64-unknown-linux-gnu
# Check that no additional components are installed when empty list is provided
# Only the basic rust toolchain should be available
check "basic rust toolchain" rustc --version
# Verify that default components are automatically installed
check "rust-analyzer is installed" check_component_installed "rust-analyzer"
check "rust-src is installed" check_component_installed "rust-src"
check "rustfmt is installed" check_component_installed "rustfmt"
check "clippy is installed" check_component_installed "clippy"
# Report result
reportResults
#!/bin/bash
set -e
# Optional: Import test library
source dev-container-features-test-lib
# Helper function to check component is installed
check_component_installed() {
local component=$1
if rustup component list | grep -q "${component}.*installed"; then
return 0 # Component is installed (success)
else
return 1 # Component is not installed (failure)
fi
}
# Definition specific tests
check "cargo version" cargo --version
check "rustc version" rustc --version
check "correct rust version" rustup target list | grep aarch64-unknown-linux-gnu
# Check that all specified extended components are installed
check "rust-analyzer is installed" check_component_installed "rust-analyzer"
check "rust-src is installed" check_component_installed "rust-src"
check "rustfmt is installed" check_component_installed "rustfmt"
check "clippy is installed" check_component_installed "clippy"
check "rust-docs is installed" check_component_installed "rust-docs"
# Report result
reportResults
...@@ -5,11 +5,27 @@ set -e ...@@ -5,11 +5,27 @@ set -e
# Optional: Import test library # Optional: Import test library
source dev-container-features-test-lib source dev-container-features-test-lib
# Helper function to check component is installed
check_component_installed() {
local component=$1
if rustup component list | grep -q "${component}.*installed"; then
return 0 # Component is installed (success)
else
return 1 # Component is not installed (failure)
fi
}
# Definition specific tests # Definition specific tests
check "cargo version" cargo --version check "cargo version" cargo --version
check "rustc version" rustc --version check "rustc version" rustc --version
check "correct rust version" rustup target list | grep aarch64-unknown-linux-gnu check "correct rust version" rustup target list | grep aarch64-unknown-linux-gnu
# Check that all specified extended components are installed
check "rust-analyzer is installed" check_component_installed "rust-analyzer"
check "rust-src is installed" check_component_installed "rust-src"
check "rustfmt is installed" check_component_installed "rustfmt"
check "clippy is installed" check_component_installed "clippy"
check "rust-docs is installed" check_component_installed "rust-docs"
# Report result # Report result
reportResults reportResults
......
...@@ -5,11 +5,27 @@ set -e ...@@ -5,11 +5,27 @@ set -e
# Optional: Import test library # Optional: Import test library
source dev-container-features-test-lib source dev-container-features-test-lib
# Helper function to check component is installed
check_component_installed() {
local component=$1
if rustup component list | grep -q "${component}.*installed"; then
return 0 # Component is installed (success)
else
return 1 # Component is not installed (failure)
fi
}
# Definition specific tests # Definition specific tests
check "cargo version" cargo --version check "cargo version" cargo --version
check "rustc version" rustc --version check "rustc version" rustc --version
check "correct rust version" rustup target list | grep aarch64-unknown-linux-gnu check "correct rust version" rustup target list | grep aarch64-unknown-linux-gnu
# Check that all specified extended components are installed
check "rust-analyzer is installed" check_component_installed "rust-analyzer"
check "rust-src is installed" check_component_installed "rust-src"
check "rustfmt is installed" check_component_installed "rustfmt"
check "clippy is installed" check_component_installed "clippy"
check "rust-docs is installed" check_component_installed "rust-docs"
# Report result # Report result
reportResults reportResults
......
#!/bin/bash
set -e
# Optional: Import test library
source dev-container-features-test-lib
# Helper function to check component is installed
check_component_installed() {
local component=$1
if rustup component list | grep -q "${component}.*installed"; then
return 0 # Component is installed (success)
else
return 1 # Component is not installed (failure)
fi
}
# Helper function to check component is NOT installed
check_component_not_installed() {
local component=$1
if rustup component list | grep -q "${component}.*installed"; then
return 1 # Component is installed (failure)
else
return 0 # Component is not installed (success)
fi
}
# Definition specific tests
check "cargo version" cargo --version
check "rustc version" rustc --version
check "correct rust version" rustup target list | grep aarch64-unknown-linux-gnu
# Check that only specified minimal components are installed
check "rust-analyzer is installed" check_component_installed "rust-analyzer"
check "rust-src is installed" check_component_installed "rust-src"
# Check that other default components are NOT installed
check "rustfmt not installed" check_component_not_installed "rustfmt"
check "clippy not installed" check_component_not_installed "clippy"
# Report result
reportResults
...@@ -5,11 +5,27 @@ set -e ...@@ -5,11 +5,27 @@ set -e
# Optional: Import test library # Optional: Import test library
source dev-container-features-test-lib source dev-container-features-test-lib
# Helper function to check component is installed
check_component_installed() {
local component=$1
if rustup component list | grep -q "${component}.*installed"; then
return 0 # Component is installed (success)
else
return 1 # Component is not installed (failure)
fi
}
# Definition specific tests # Definition specific tests
check "cargo version" cargo --version check "cargo version" cargo --version
check "rustc version" rustc --version check "rustc version" rustc --version
check "correct rust version" rustup target list | grep aarch64-unknown-linux-gnu check "correct rust version" rustup target list | grep aarch64-unknown-linux-gnu
# Check that all specified extended components are installed
check "rust-analyzer is installed" check_component_installed "rust-analyzer"
check "rust-src is installed" check_component_installed "rust-src"
check "rustfmt is installed" check_component_installed "rustfmt"
check "clippy is installed" check_component_installed "clippy"
check "rust-docs is installed" check_component_installed "rust-docs"
# Report result # Report result
reportResults reportResults
......
...@@ -5,11 +5,27 @@ set -e ...@@ -5,11 +5,27 @@ set -e
# Optional: Import test library # Optional: Import test library
source dev-container-features-test-lib source dev-container-features-test-lib
# Helper function to check component is installed
check_component_installed() {
local component=$1
if rustup component list | grep -q "${component}.*installed"; then
return 0 # Component is installed (success)
else
return 1 # Component is not installed (failure)
fi
}
# Definition specific tests # Definition specific tests
check "cargo version" cargo --version check "cargo version" cargo --version
check "rustc version" rustc --version check "rustc version" rustc --version
check "correct rust version" rustup target list | grep aarch64-unknown-linux-gnu check "correct rust version" rustup target list | grep aarch64-unknown-linux-gnu
# Check that all specified extended components are installed
check "rust-analyzer is installed" check_component_installed "rust-analyzer"
check "rust-src is installed" check_component_installed "rust-src"
check "rustfmt is installed" check_component_installed "rustfmt"
check "clippy is installed" check_component_installed "clippy"
check "rust-docs is installed" check_component_installed "rust-docs"
# Report result # Report result
reportResults reportResults
......
...@@ -16,12 +16,62 @@ ...@@ -16,12 +16,62 @@
} }
} }
}, },
"rust_with_default_components": {
"image": "ubuntu:noble",
"features": {
"rust": {
"version": "latest",
"targets": "aarch64-unknown-linux-gnu"
}
}
},
"rust_with_custom_components": {
"image": "ubuntu:noble",
"features": {
"rust": {
"version": "latest",
"targets": "aarch64-unknown-linux-gnu",
"components": "rust-analyzer,rust-src,rustfmt"
}
}
},
"rust_with_minimal_components": {
"image": "ubuntu:noble",
"features": {
"rust": {
"version": "latest",
"targets": "aarch64-unknown-linux-gnu",
"components": "rust-analyzer,rust-src"
}
}
},
"rust_with_extended_components": {
"image": "ubuntu:noble",
"features": {
"rust": {
"version": "latest",
"targets": "aarch64-unknown-linux-gnu",
"components": "rust-analyzer,rust-src,rustfmt,clippy,rust-docs"
}
}
},
"rust_with_empty_components": {
"image": "ubuntu:noble",
"features": {
"rust": {
"version": "latest",
"targets": "aarch64-unknown-linux-gnu",
"components": ""
}
}
},
"rust_with_centos": { "rust_with_centos": {
"image": "centos:centos7", "image": "centos:centos7",
"features": { "features": {
"rust": { "rust": {
"version": "latest", "version": "latest",
"targets": "aarch64-unknown-linux-gnu" "targets": "aarch64-unknown-linux-gnu",
"components": "rust-analyzer,rust-src,rustfmt,clippy,rust-docs"
} }
} }
}, },
...@@ -30,7 +80,8 @@ ...@@ -30,7 +80,8 @@
"features": { "features": {
"rust": { "rust": {
"version": "latest", "version": "latest",
"targets": "aarch64-unknown-linux-gnu" "targets": "aarch64-unknown-linux-gnu",
"components": "rust-analyzer,rust-src,rustfmt,clippy,rust-docs"
} }
} }
}, },
...@@ -39,7 +90,8 @@ ...@@ -39,7 +90,8 @@
"features": { "features": {
"rust": { "rust": {
"version": "latest", "version": "latest",
"targets": "aarch64-unknown-linux-gnu" "targets": "aarch64-unknown-linux-gnu",
"components": "rust-analyzer,rust-src,rustfmt,clippy,rust-docs"
} }
} }
}, },
...@@ -48,7 +100,8 @@ ...@@ -48,7 +100,8 @@
"features": { "features": {
"rust": { "rust": {
"version": "latest", "version": "latest",
"targets": "aarch64-unknown-linux-gnu" "targets": "aarch64-unknown-linux-gnu",
"components": "rust-analyzer,rust-src,rustfmt,clippy,rust-docs"
} }
} }
}, },
...@@ -57,7 +110,8 @@ ...@@ -57,7 +110,8 @@
"features": { "features": {
"rust": { "rust": {
"version": "latest", "version": "latest",
"targets": "aarch64-unknown-linux-gnu" "targets": "aarch64-unknown-linux-gnu",
"components": "rust-analyzer,rust-src,rustfmt,clippy,rust-docs"
} }
} }
}, },
...@@ -66,7 +120,8 @@ ...@@ -66,7 +120,8 @@
"features": { "features": {
"rust": { "rust": {
"version": "latest", "version": "latest",
"targets": "aarch64-unknown-linux-gnu" "targets": "aarch64-unknown-linux-gnu",
"components": "rust-analyzer,rust-src,rustfmt,clippy,rust-docs"
} }
} }
}, },
...@@ -75,7 +130,8 @@ ...@@ -75,7 +130,8 @@
"features": { "features": {
"rust": { "rust": {
"version": "latest", "version": "latest",
"targets": "aarch64-unknown-linux-gnu" "targets": "aarch64-unknown-linux-gnu",
"components": "rust-analyzer,rust-src,rustfmt,clippy,rust-docs"
} }
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment