From fcb56a73372866793201a97b065faa59d53c07a9 Mon Sep 17 00:00:00 2001 From: Daniel Loureiro Date: Sun, 8 Dec 2024 19:50:32 +0000 Subject: [PATCH 1/6] :recycle: refactor(bash-aliases): clean up code and remove unnecessary 'CI' env var - Removed the 'CI' environment variable from the bash-aliases feature as it was unnecessary. - Moved the RC snippet to 'scripts/rc_snippet.sh' for better organization. - Bumped the feature version in 'devcontainer-feature.json' to accommodate these changes. --- src/bash-aliases/devcontainer-feature.json | 2 +- src/bash-aliases/install.sh | 24 ++++------------------ src/bash-aliases/scripts/rc_snippet.sh | 13 ++++++++++++ test/bash-aliases/setup.sh | 3 +-- test/bash-aliases/test.sh | 3 +-- 5 files changed, 20 insertions(+), 25 deletions(-) create mode 100644 src/bash-aliases/scripts/rc_snippet.sh diff --git a/src/bash-aliases/devcontainer-feature.json b/src/bash-aliases/devcontainer-feature.json index c970b3d..1eff2aa 100644 --- a/src/bash-aliases/devcontainer-feature.json +++ b/src/bash-aliases/devcontainer-feature.json @@ -1,6 +1,6 @@ { "id": "bash-aliases", - "version": "1.0.3", + "version": "1.0.4", "name": "Bash Aliases", "description": "Loads custom bash aliases from your project's `.devcontainer/etc/bash-aliases` directory.", "dependsOn": { diff --git a/src/bash-aliases/install.sh b/src/bash-aliases/install.sh index 576ac98..4d60290 100644 --- a/src/bash-aliases/install.sh +++ b/src/bash-aliases/install.sh @@ -5,6 +5,8 @@ UPDATE_RC="${UPDATE_RC:-"true"}" set -eux export DEBIAN_FRONTEND=noninteractive +FEATURE_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" + if [ "$(id -u)" -ne 0 ]; then echo -e 'Script must be run as root. Use sudo, su, or add "USER root" to your Dockerfile before running this script.' exit 1 @@ -22,26 +24,8 @@ updaterc() { fi } -# Bash-aliases loader -SNIPPET_CONTENT=$(cat <<'EOF' -# Only runs on terminal from inside vscode editor, or in CI -if [[ ( -t 1 && "${TERM_PROGRAM}" = "vscode" ) || "${CI}" = "true" ]]; then - ALIASES_FOLDER="$PWD/.devcontainer/etc/bash-aliases" - - # Dynamically load all *.sh files from ALIASES_FOLDER - if [ -d "$ALIASES_FOLDER" ]; then - for file in "$ALIASES_FOLDER/"*.sh; do - if [ -e "$file" ] && [ -r "$file" ]; then - source "$file" - fi - done - fi -fi -EOF -) - -# Install loader echo "Installing Loader..." -updaterc "${SNIPPET_CONTENT}" +rc_content="$(cat "${FEATURE_DIR}/scripts/rc_snippet.sh")" +updaterc "${rc_content}" echo "Done!" diff --git a/src/bash-aliases/scripts/rc_snippet.sh b/src/bash-aliases/scripts/rc_snippet.sh new file mode 100644 index 0000000..bfb559a --- /dev/null +++ b/src/bash-aliases/scripts/rc_snippet.sh @@ -0,0 +1,13 @@ +# Only runs on terminal from inside vscode editor +if [ -t 1 ] && [ "${TERM_PROGRAM}" = "vscode" ]; then + ALIASES_FOLDER="$PWD/.devcontainer/etc/bash-aliases" + + # Dynamically load all *.sh files from ALIASES_FOLDER + if [ -d "$ALIASES_FOLDER" ]; then + for file in "$ALIASES_FOLDER/"*.sh; do + if [ -e "$file" ] && [ -r "$file" ]; then + source "$file" + fi + done + fi +fi diff --git a/test/bash-aliases/setup.sh b/test/bash-aliases/setup.sh index d889651..4c55e57 100644 --- a/test/bash-aliases/setup.sh +++ b/test/bash-aliases/setup.sh @@ -2,6 +2,5 @@ set -euo pipefail -# Simulate VS Code terminal and CI environment +# Simulate VS Code terminal export TERM_PROGRAM="vscode" -export CI="true" diff --git a/test/bash-aliases/test.sh b/test/bash-aliases/test.sh index 4bd85c1..40ed03c 100644 --- a/test/bash-aliases/test.sh +++ b/test/bash-aliases/test.sh @@ -30,10 +30,9 @@ for file in ./cases/*.sh; do continue fi - title="$(get_title "$file")" - source ./cases/__before.sh + title="$(get_title "$file")" check "[$title]" zsh -i "$file" done From 6af65879ca2ebf2613f09ae6d62ecf50e23e4a5d Mon Sep 17 00:00:00 2001 From: Daniel Loureiro Date: Sun, 8 Dec 2024 20:02:16 +0000 Subject: [PATCH 2/6] :bug: fix(bash-aliases): remove leftover 'CI' env var reference from '00-test-setup.sh' - Removed the remaining reference to the 'CI' environment variable in `00-test-setup.sh`. - This fix ensures that the test setup script no longer relies on the unnecessary 'CI' variable. --- test/bash-aliases/cases/00-test-setup.sh | 2 -- 1 file changed, 2 deletions(-) diff --git a/test/bash-aliases/cases/00-test-setup.sh b/test/bash-aliases/cases/00-test-setup.sh index a13db37..d9fe1d9 100644 --- a/test/bash-aliases/cases/00-test-setup.sh +++ b/test/bash-aliases/cases/00-test-setup.sh @@ -11,12 +11,10 @@ check "Environment Info" echo "\ USER: $USER\n\ HOME: $HOME\n\ TERM_PROGRAM: $TERM_PROGRAM\n\ - CI: $CI\n\ ALIASES_DIR: $ALIASES_DIR\n" # Environment Vars check "TERM_PROGRAM is vscode" test "$TERM_PROGRAM" = "vscode" -check "CI is true" test "$CI" = "true" check "ALIASES_DIR is set" test -n "$ALIASES_DIR" # Aliases directory From 076babdd017b719ff2c417fd41c4a0eb09aa1051 Mon Sep 17 00:00:00 2001 From: Daniel Loureiro Date: Sun, 8 Dec 2024 20:03:34 +0000 Subject: [PATCH 3/6] =?UTF-8?q?=E2=9C=A8=20feat(uv):=20move=20shell=20conf?= =?UTF-8?q?ig=20to=20rc=5Fsnippet.sh?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Move terminal configuration from install.sh to a dedicated rc_snippet.sh file, following the pattern used in bash-aliases feature. This improves code organization and maintainability. The shell config now: - Checks if running in VS Code terminal - Sets UV_CACHE_DIR to project's directory - Creates the cache directory if needed --- src/uv/install.sh | 14 +++++--------- src/uv/scripts/rc_snippet.sh | 5 +++++ 2 files changed, 10 insertions(+), 9 deletions(-) create mode 100644 src/uv/scripts/rc_snippet.sh diff --git a/src/uv/install.sh b/src/uv/install.sh index f3fff2c..e257107 100644 --- a/src/uv/install.sh +++ b/src/uv/install.sh @@ -5,6 +5,8 @@ USERNAME="${USERNAME:-"${_REMOTE_USER:-"automatic"}"}" UPDATE_RC="${UPDATE_RC:-"true"}" UV_INSTALL_DIR="${UV_INSTALL_DIR:-"~/.local/bin"}" +FEATURE_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" + set -eux export DEBIAN_FRONTEND=noninteractive @@ -66,20 +68,14 @@ if ! uv --version &> /dev/null ; then # Install dependencies check_packages curl unzip tar ca-certificates - UV_CACHE_SCRIPT="$(cat << 'EOF' -if [[ ( -t 1 && "${TERM_PROGRAM}" = "vscode" ) || "${CI}" = "true" ]]; then - export UV_CACHE_DIR="$PWD/.uv_cache" - mkdir -p "$UV_CACHE_DIR" -fi -EOF -)" - updaterc "${UV_CACHE_SCRIPT}" + rc_content="$(cat "${FEATURE_DIR}/scripts/rc_snippet.sh")" + updaterc "${rc_content}" mkdir -p $UV_INSTALL_DIR chown -R "${USERNAME}:${USERNAME}" "${UV_INSTALL_DIR}" chmod -R g+r+w "${UV_INSTALL_DIR}" - find "${UV_INSTALL_DIR}" -type d -print0 | xargs -n 1 -0 chmod g+s + echo "Installing UV..." UV_VERSION=$VERSION diff --git a/src/uv/scripts/rc_snippet.sh b/src/uv/scripts/rc_snippet.sh new file mode 100644 index 0000000..333aa3a --- /dev/null +++ b/src/uv/scripts/rc_snippet.sh @@ -0,0 +1,5 @@ +# Only runs on terminal from inside vscode editor +if [ -t 1 ] && [ "${TERM_PROGRAM}" = "vscode" ]; then + export UV_CACHE_DIR="$PWD/.uv_cache" + mkdir -p "$UV_CACHE_DIR" +fi From 6ac279f7dc5867c83b2b3709e2a6aa4109062e61 Mon Sep 17 00:00:00 2001 From: Daniel Loureiro Date: Sun, 8 Dec 2024 20:07:56 +0000 Subject: [PATCH 4/6] =?UTF-8?q?=F0=9F=94=96=20chore(uv):=20bump=20version?= =?UTF-8?q?=20to=201.0.4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bump version after moving shell configuration to rc_snippet.sh and improving terminal integration. --- src/uv/devcontainer-feature.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/uv/devcontainer-feature.json b/src/uv/devcontainer-feature.json index f8c872b..9c787c6 100644 --- a/src/uv/devcontainer-feature.json +++ b/src/uv/devcontainer-feature.json @@ -1,6 +1,6 @@ { "id": "uv", - "version": "1.0.3", + "version": "1.0.4", "name": "UV", "description": "A fast Python package manager written in Rust. Replaces pip, poetry, virtualenv, and more.", "options": { From 7955d1f1db64ecae3753574d26c80dfcf9a23d6d Mon Sep 17 00:00:00 2001 From: Daniel Loureiro Date: Sun, 8 Dec 2024 20:31:17 +0000 Subject: [PATCH 5/6] =?UTF-8?q?=F0=9F=94=A8=20test(bash-aliases):=20switch?= =?UTF-8?q?=20test=20suite=20from=20zsh=20to=20bash?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change test script interpreter from zsh to bash to improve compatibility, as bash is more commonly available on Linux systems. Changes: - Modified shebang in test scripts from #!/bin/zsh to #!/bin/bash - Updated test commands to use bash -ic instead of zsh -ic - Kept test functionality identical while using more portable shell --- test/bash-aliases/cases/00-test-setup.sh | 2 +- test/bash-aliases/cases/10-test-alias.sh | 2 +- .../cases/20-test-no-aliases-folder.sh | 14 +++++++------- test/bash-aliases/cases/__before.sh | 2 +- test/bash-aliases/setup.sh | 2 +- test/bash-aliases/test.sh | 4 ++-- 6 files changed, 13 insertions(+), 13 deletions(-) diff --git a/test/bash-aliases/cases/00-test-setup.sh b/test/bash-aliases/cases/00-test-setup.sh index d9fe1d9..2ba2eac 100644 --- a/test/bash-aliases/cases/00-test-setup.sh +++ b/test/bash-aliases/cases/00-test-setup.sh @@ -1,4 +1,4 @@ -#!/bin/zsh +#!/bin/bash set -euo pipefail diff --git a/test/bash-aliases/cases/10-test-alias.sh b/test/bash-aliases/cases/10-test-alias.sh index ef44764..2d0eace 100644 --- a/test/bash-aliases/cases/10-test-alias.sh +++ b/test/bash-aliases/cases/10-test-alias.sh @@ -1,4 +1,4 @@ -#!/bin/zsh +#!/bin/bash set -euo pipefail diff --git a/test/bash-aliases/cases/20-test-no-aliases-folder.sh b/test/bash-aliases/cases/20-test-no-aliases-folder.sh index 357284d..015fe30 100644 --- a/test/bash-aliases/cases/20-test-no-aliases-folder.sh +++ b/test/bash-aliases/cases/20-test-no-aliases-folder.sh @@ -1,4 +1,4 @@ -#!/bin/zsh +#!/bin/bash set -euo pipefail @@ -6,14 +6,14 @@ set -euo pipefail source dev-container-features-test-lib # Tests before removing aliases directory -check "directory exists" ls -lha "$ALIASES_DIR" -check "testalias exists" zsh -ic "command -v testalias" -check "testalias works" zsh -ic "testalias" -check "testalias result" zsh -ic "test \"\$(testalias)\" = 'Hello, World!'" +check "directory exists" bash -ic "test -d '$ALIASES_DIR'" +check "testalias exists" bash -ic 'command -v testalias' +check "testalias works" bash -ic 'testalias' +check "testalias result" bash -ic 'test "$(testalias)" = "Hello, World!"' # Remove aliases directory rm -rf "$ALIASES_DIR" # Tests after removing aliases directory -check "directory should NOT exist" test ! -d "$ALIASES_DIR" -check "testalias should NOT exist" test ! -n "$(zsh -ic 'command -v testalias')" +check "directory should NOT exist" bash -ic "test ! -f '$ALIASES_DIR'" +check "testalias should NOT exist" bash -ic 'test ! "$(command -v testalias)"' diff --git a/test/bash-aliases/cases/__before.sh b/test/bash-aliases/cases/__before.sh index a3c093e..56d4686 100644 --- a/test/bash-aliases/cases/__before.sh +++ b/test/bash-aliases/cases/__before.sh @@ -1,4 +1,4 @@ -#!/bin/zsh +#!/bin/bash ## # This file runs before each test case. diff --git a/test/bash-aliases/setup.sh b/test/bash-aliases/setup.sh index 4c55e57..c777fd9 100644 --- a/test/bash-aliases/setup.sh +++ b/test/bash-aliases/setup.sh @@ -1,4 +1,4 @@ -#!/bin/zsh +#!/bin/bash set -euo pipefail diff --git a/test/bash-aliases/test.sh b/test/bash-aliases/test.sh index 40ed03c..3590dbb 100644 --- a/test/bash-aliases/test.sh +++ b/test/bash-aliases/test.sh @@ -1,4 +1,4 @@ -#!/bin/zsh +#!/bin/bash set -euo pipefail @@ -33,7 +33,7 @@ for file in ./cases/*.sh; do source ./cases/__before.sh title="$(get_title "$file")" - check "[$title]" zsh -i "$file" + check "[$title]" bash -i "$file" done # Report result From f357801a8a7852c0abd14a9164d7156efcf8f5ed Mon Sep 17 00:00:00 2001 From: Daniel Loureiro Date: Sun, 8 Dec 2024 20:46:42 +0000 Subject: [PATCH 6/6] =?UTF-8?q?=F0=9F=90=9B=20fix(bash-aliases):=20restore?= =?UTF-8?q?=20CI=20env=20var=20check?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Re-add CI environment variable check in rc_snippet.sh as it's needed for test execution. The tests run in CI without the vscode terminal. Changes: - Restored CI check in rc_snippet.sh condition - Updated setup.sh to simulate both vscode and CI environments - Updated 00-test-setup.sh to verify CI env var --- src/bash-aliases/scripts/rc_snippet.sh | 4 ++-- test/bash-aliases/cases/00-test-setup.sh | 2 ++ test/bash-aliases/setup.sh | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/bash-aliases/scripts/rc_snippet.sh b/src/bash-aliases/scripts/rc_snippet.sh index bfb559a..5c04459 100644 --- a/src/bash-aliases/scripts/rc_snippet.sh +++ b/src/bash-aliases/scripts/rc_snippet.sh @@ -1,5 +1,5 @@ -# Only runs on terminal from inside vscode editor -if [ -t 1 ] && [ "${TERM_PROGRAM}" = "vscode" ]; then +# Only runs on terminal from inside vscode editor, or in CI +if [[ ( -t 1 && "${TERM_PROGRAM}" = "vscode" ) || "${CI}" = "true" ]]; then ALIASES_FOLDER="$PWD/.devcontainer/etc/bash-aliases" # Dynamically load all *.sh files from ALIASES_FOLDER diff --git a/test/bash-aliases/cases/00-test-setup.sh b/test/bash-aliases/cases/00-test-setup.sh index 2ba2eac..006e3b7 100644 --- a/test/bash-aliases/cases/00-test-setup.sh +++ b/test/bash-aliases/cases/00-test-setup.sh @@ -11,10 +11,12 @@ check "Environment Info" echo "\ USER: $USER\n\ HOME: $HOME\n\ TERM_PROGRAM: $TERM_PROGRAM\n\ + CI: $CI\n\ ALIASES_DIR: $ALIASES_DIR\n" # Environment Vars check "TERM_PROGRAM is vscode" test "$TERM_PROGRAM" = "vscode" +check "CI is true" test "$CI" = "true" check "ALIASES_DIR is set" test -n "$ALIASES_DIR" # Aliases directory diff --git a/test/bash-aliases/setup.sh b/test/bash-aliases/setup.sh index c777fd9..8b5347b 100644 --- a/test/bash-aliases/setup.sh +++ b/test/bash-aliases/setup.sh @@ -2,5 +2,6 @@ set -euo pipefail -# Simulate VS Code terminal +# Simulate VS Code terminal and CI environment export TERM_PROGRAM="vscode" +export CI="true"