Skip to content
This repository was archived by the owner on Nov 30, 2023. It is now read-only.

Commit bb5d51f

Browse files
authored
Use a marker file to not run a feature script with the same arguments twice (#1100)
1 parent 8fe5a6f commit bb5d51f

File tree

4 files changed

+65
-6
lines changed

4 files changed

+65
-6
lines changed

script-library/container-features/src/feature-scripts.env

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ _VSC_INSTALL_DOCKER_FROM_DOCKER="docker-debian.sh true /var/run/docker-host.sock
33
_VSC_INSTALL_KUBECTL_HELM_MINIKUBE="kubectl-helm-debian.sh ${_BUILD_ARG_KUBECTL_HELM_MINIKUBE_VERSION:-latest} ${_BUILD_ARG_KUBECTL_HELM_MINIKUBE_HELM:-latest} ${_BUILD_ARG_KUBECTL_HELM_MINIKUBE_MINIKUBE:-latest}"
44
_VSC_INSTALL_TERRAFORM="terraform-debian.sh ${_BUILD_ARG_TERRAFORM_VERSION:-latest} ${_BUILD_ARG_TERRAFORM_TFLINT:-latest} ${_BUILD_ARG_TERRAFORM_TERRAGRUNT:-latest}"
55
_VSC_INSTALL_GIT="git-from-src-debian.sh ${_BUILD_ARG_GIT_VERSION:-latest} ${_BUILD_ARG_GIT_PPA:-true}"
6-
_VSC_INSTALL_GIT_LFS=git-lfs-debian.sh
6+
_VSC_INSTALL_GIT_LFS="git-lfs-debian.sh ${_BUILD_ARG_GIT_LFS_VERSION:-latest}"
77
_VSC_INSTALL_GITHUB_CLI="github-debian.sh ${_BUILD_ARG_GITHUB_CLI_VERSION:-latest}"
88
_VSC_INSTALL_AZURE_CLI="azcli-debian.sh ${_BUILD_ARG_AZURE_CLI_VERSION:-latest}"
99
_VSC_INSTALL_SSH=sshd-debian.sh

script-library/container-features/src/install.sh

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,16 +26,27 @@ set +a
2626
chmod +x *.sh
2727

2828
# Execute option scripts if correct environment variable is set to "true"
29+
feature_marker_path="/usr/local/etc/vscode-dev-containers/features"
30+
mkdir -p "${feature_marker_path}"
2931
while IFS= read -r feature_line; do
3032
# Extract the env var part of the line
3133
feature_var_name="${feature_line%%=*}"
3234
if [ ! -z "${!feature_var_name}" ]; then
3335
# If a value is set for the env var, execute the script
3436
feature_script_and_args="${feature_line##*=}"
3537
feature_script_and_args="${feature_script_and_args%\"}"
36-
# Execute the script line - but do not quote so arguments can be included in the
37-
echo "${feature_script_and_args#\"}"
38-
eval "./${feature_script_and_args#\"}"
38+
script_command="$(eval echo "${feature_script_and_args#\"}")"
39+
echo "(*) Script: ${script_command}"
40+
41+
# Check if script with same args has already been run
42+
feature_marker="${feature_marker_path}/${feature_var_name}";
43+
if [ -e "${feature_marker}" ] && [ "${script_command}" = "$(cat ${feature_marker})" ]; then
44+
echo "(*) Skipping. Script already run with same arguments."
45+
else
46+
# Execute script and create a marker with the script args
47+
echo "${script_command}" > "${feature_marker}"
48+
./${script_command}
49+
fi
3950
fi
4051
done < ./feature-scripts.env
4152

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,49 @@
1-
_VSC_JAVA_VERSION=8
1+
_VSC_INSTALL_NODE=true
2+
_BUILD_ARG_NODE_VERSION=14
3+
_BUILD_ARG_NODE_NODEGYPDEPENDENCIES=false
4+
_VSC_INSTALL_DOCKER_IN_DOCKER=true
5+
_BUILD_ARG_DOCKER_IN_DOCKER_VERSION=latest
6+
_BUILD_ARG_DOCKER_IN_DOCKER_MOBY=false
7+
_VSC_INSTALL_DOCKER_FROM_DOCKER=true
8+
_BUILD_ARG_DOCKER_FROM_DOCKER_VERSION=latest
9+
_BUILD_ARG_DOCKER_FROM_DOCKER_MOBY=false
10+
_VSC_INSTALL_KUBECTL_HELM_MINIKUBE=true
11+
_BUILD_ARG_KUBECTL_HELM_MINIKUBE_VERSION=latest
12+
_BUILD_ARG_KUBECTL_HELM_MINIKUBE_HELM=latest
13+
_BUILD_ARG_KUBECTL_HELM_MINIKUBE_MINIKUBE=latest
14+
_VSC_INSTALL_TERRAFORM=true
15+
_BUILD_ARG_TERRAFORM_VERSION=latest
16+
_BUILD_ARG_TERRAFORM_TFLINT=latest
17+
_BUILD_ARG_TERRAFORM_TERRAGRUNT=latest
18+
_VSC_INSTALL_GIT=true
19+
_BUILD_ARG_GIT_VERSION=os-provided
20+
_BUILD_ARG_GIT_PPA=false
21+
_VSC_INSTALL_GIT_LFS=true
22+
_BUILD_ARG_GIT_LFS_VERSION=latest
23+
_VSC_INSTALL_GITHUB_CLI=true
24+
_BUILD_ARG_GITHUB_CLI_VERSION=latest
25+
_VSC_INSTALL_AZURE_CLI=true
26+
_BUILD_ARG_AZURE_CLI_VERSION=latest
27+
_VSC_INSTALL_SSH=true
28+
#_VSC_INSTALL_HOMEBREW=true
29+
_VSC_INSTALL_NODE=true
30+
_BUILD_ARG_NODE_VERSION=lts
31+
_BUILD_ARG_NODE_NODEGYPDEPENDENCIES=false
32+
_VSC_INSTALL_PYTHON=true
33+
_BUILD_ARG_PYTHON_VERSION=os-provided
34+
_VSC_INSTALL_GOLANG=true
35+
_BUILD_ARG_GOLANG_VERSION=latest
36+
_VSC_INSTALL_JAVA=true
37+
_BUILD_ARG_JAVA_VERSION=latest
38+
_VSC_INSTALL_GRADLE=
39+
_BUILD_ARG_GRADLE_VERSION=latest
40+
_VSC_INSTALL_MAVEN=true
41+
_BUILD_ARG_MAVEN_VERSION=latest
42+
_VSC_INSTALL_RUBY=true
43+
_BUILD_ARG_RUBY_VERSION=latest
44+
_VSC_INSTALL_RUST=true
45+
_BUILD_ARG_RUST_VERSION=latest
46+
_BUILD_ARG_RUST_PROFILE=minimal
47+
_VSC_INSTALL_POWERSHELL=true
48+
_BUILD_ARG_POWERSHELL_VERSION=latest
49+
_VSC_INSTALL_DESKTOP_LITE=true

script-library/container-features/test.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#!/usr/bin/env bash
2-
IMAGE_TO_TEST="${1:-"mcr.microsoft.com/vscode/devcontainers/base:buster"}"
2+
IMAGE_TO_TEST="${1:-"mcr.microsoft.com/vscode/devcontainers/base:bullseye"}"
33
PLATFORMS="${2:-""}"
44
SCRIPT_DIR="$(cd $(dirname "${BASH_SOURCE[0]}") && pwd)"
55

0 commit comments

Comments
 (0)