Skip to content

Commit ce7096c

Browse files
committed
Implemented expand-download-vars option in pre-command hook
1 parent 7c1d3b6 commit ce7096c

1 file changed

Lines changed: 46 additions & 38 deletions

File tree

hooks/pre-command

Lines changed: 46 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -14,23 +14,33 @@ compress=()
1414

1515
COMPRESSED="false"
1616
SINGULAR_DOWNLOAD_OBJECT="false"
17-
RELOCATION="false"
1817
MULTIPLE_DOWNLOADS="false"
1918

19+
# expand variables in the variable name referenced
20+
# DANGEROUS due to the use of eval
21+
# assumes that the environment variable name exists
22+
expand_vars() {
23+
if [[ ${BUILDKITE_PLUGIN_ARTIFACTS_EXPAND_DOWNLOAD_VARS:-false} != "false" ]]; then
24+
# expand the variable
25+
eval echo "${!1}"
26+
else
27+
echo "${!1}"
28+
fi
29+
}
30+
2031
if [[ -n "${BUILDKITE_PLUGIN_ARTIFACTS_DOWNLOAD:-}" ]] || { [[ -n "${BUILDKITE_PLUGIN_ARTIFACTS_DOWNLOAD_FROM:-}" ]] && [[ -n "${BUILDKITE_PLUGIN_ARTIFACTS_DOWNLOAD_TO:-}" ]]; }; then
2132
SINGULAR_DOWNLOAD_OBJECT="true"
2233
if [[ -n "${BUILDKITE_PLUGIN_ARTIFACTS_DOWNLOAD:-}" ]] ; then
23-
paths+=("$BUILDKITE_PLUGIN_ARTIFACTS_DOWNLOAD")
34+
paths+=("$(expand_vars BUILDKITE_PLUGIN_ARTIFACTS_DOWNLOAD)")
2435
elif [[ -n "${BUILDKITE_PLUGIN_ARTIFACTS_DOWNLOAD_FROM:-}" ]] && [[ -n "${BUILDKITE_PLUGIN_ARTIFACTS_DOWNLOAD_TO:-}" ]] ; then
25-
RELOCATION="true"
26-
paths+=("$BUILDKITE_PLUGIN_ARTIFACTS_DOWNLOAD_FROM")
36+
paths+=("$(expand_vars BUILDKITE_PLUGIN_ARTIFACTS_DOWNLOAD_FROM)")
2737
fi
2838
fi
2939

3040
while IFS='=' read -r path _ ; do
3141
if [[ $path =~ ^(BUILDKITE_PLUGIN_ARTIFACTS_DOWNLOAD_[0-9]+)$ ]] || [[ $path =~ ^(BUILDKITE_PLUGIN_ARTIFACTS_DOWNLOAD_[0-9]+_FROM)$ ]]; then
3242
MULTIPLE_DOWNLOADS="true"
33-
paths+=("${!path}")
43+
paths+=("$(expand_vars "${path}")")
3444
fi
3545
done < <(env | sort)
3646

@@ -87,25 +97,28 @@ handle_relocation() {
8797
source_env_var="BUILDKITE_PLUGIN_ARTIFACTS_DOWNLOAD_${var_string}FROM"
8898
dest_env_var="BUILDKITE_PLUGIN_ARTIFACTS_DOWNLOAD_${var_string}TO"
8999
if [[ -n "${!dest_env_var:-}" ]]; then
90-
if ! [[ -d $(dirname "${!dest_env_var}") ]]; then
91-
mkdir -p "$(dirname "${!dest_env_var}")"
100+
SOURCE_FILE="$(expand_vars "${source_env_var}")"
101+
DEST_FILE="$(expand_vars "${dest_env_var}")"
102+
if ! [[ -d "$(dirname "${DEST_FILE}")" ]]; then
103+
mkdir -p "$(dirname "${DEST_FILE}")"
92104
fi
93105

94-
if [[ ! -e "${!source_env_var}" ]] && [[ ${BUILDKITE_PLUGIN_ARTIFACTS_IGNORE_MISSING:-"false"} != "false" ]]; then
95-
echo "Ignoring missing file ${!source_env_var} for relocation"
106+
if [[ ! -e "${SOURCE_FILE}" ]] && [[ ${BUILDKITE_PLUGIN_ARTIFACTS_IGNORE_MISSING:-"false"} != "false" ]]; then
107+
echo "Ignoring missing file ${SOURCE_FILE} for relocation"
96108
else
97-
echo "~~~ Moving [${!source_env_var}] to [${!dest_env_var}]..."
98-
mv "${!source_env_var}" "${!dest_env_var}"
109+
echo "~~~ Moving [${SOURCE_FILE}] to [${DEST_FILE}]..."
110+
mv "${SOURCE_FILE}" "${DEST_FILE}"
99111
fi
100112
fi
101113
}
102114

103115
if [[ -n "${BUILDKITE_PLUGIN_ARTIFACTS_COMPRESSED:-}" ]]; then
104116
COMPRESSED="true"
105-
if [[ "${BUILDKITE_PLUGIN_ARTIFACTS_COMPRESSED}" =~ .*\.zip ]]; then
106-
compress+=("unzip" "${BUILDKITE_PLUGIN_ARTIFACTS_COMPRESSED}")
107-
elif [[ "${BUILDKITE_PLUGIN_ARTIFACTS_COMPRESSED}" =~ .*\.tgz ]]; then
108-
compress+=("tar" "xzf" "${BUILDKITE_PLUGIN_ARTIFACTS_COMPRESSED}")
117+
COMPRESSED_FILENAME="$(expand_vars BUILDKITE_PLUGIN_ARTIFACTS_COMPRESSED)"
118+
if [[ "${COMPRESSED_FILENAME}" =~ .*\.zip ]]; then
119+
compress+=("unzip" "${COMPRESSED_FILENAME}")
120+
elif [[ "${COMPRESSED_FILENAME}" =~ .*\.tgz ]]; then
121+
compress+=("tar" "xzf" "${COMPRESSED_FILENAME}")
109122
else
110123
echo "+++ 🚨 The inferred compression file format for the artifact is not currently supported"
111124
exit 1
@@ -115,16 +128,14 @@ fi
115128
workdir="${BUILDKITE_PLUGIN_ARTIFACTS_WORKDIR:-.}"
116129

117130
if [[ "${COMPRESSED}" == "true" ]]; then
118-
if ! bk_agent "${step_option}" "${build_option}" "${BUILDKITE_PLUGIN_ARTIFACTS_COMPRESSED}" "${workdir}"; then
119-
handle_bk_error "${BUILDKITE_PLUGIN_ARTIFACTS_COMPRESSED}"
131+
if ! bk_agent "${step_option}" "${build_option}" "${COMPRESSED_FILENAME}" "${workdir}"; then
132+
handle_bk_error "${COMPRESSED_FILENAME}"
120133
else
121-
echo "~~~ Uncompressing ${paths[*]} from ${BUILDKITE_PLUGIN_ARTIFACTS_COMPRESSED}"
134+
echo "~~~ Uncompressing ${paths[*]} from ${COMPRESSED_FILENAME}"
122135
"${compress[@]}" "${paths[@]}"
123136

124137
# single relocation
125-
if [[ -n "${BUILDKITE_PLUGIN_ARTIFACTS_DOWNLOAD_TO:-}" ]]; then
126-
handle_relocation ""
127-
fi
138+
handle_relocation ""
128139

129140
# multiple relocations
130141
index=0
@@ -135,35 +146,32 @@ if [[ "${COMPRESSED}" == "true" ]]; then
135146
fi
136147

137148
elif [[ "${SINGULAR_DOWNLOAD_OBJECT}" == "true" ]]; then
138-
if [[ "${RELOCATION}" == "true" ]]; then
139-
source="${BUILDKITE_PLUGIN_ARTIFACTS_DOWNLOAD_FROM}"
140-
else
141-
source="${paths[*]}"
142-
fi
149+
source="${paths[*]}"
143150

144151
if ! bk_agent "${step_option}" "${build_option}" "${source}" "${workdir}"; then
145152
handle_bk_error "${source}"
146153
else
147-
if [[ -n "${BUILDKITE_PLUGIN_ARTIFACTS_DOWNLOAD_TO:-}" ]]; then
148-
handle_relocation ""
149-
fi
154+
handle_relocation ""
150155
fi
151156
elif [[ "${MULTIPLE_DOWNLOADS}" == "true" ]]; then
152157
index=0
153158

154159
for path in "${paths[@]}"; do
155-
source_env_var="BUILDKITE_PLUGIN_ARTIFACTS_DOWNLOAD_${index}_FROM"
156-
dest_env_var="BUILDKITE_PLUGIN_ARTIFACTS_DOWNLOAD_${index}_TO"
157-
step_env_var="BUILDKITE_PLUGIN_ARTIFACTS_DOWNLOAD_${index}_STEP"
158-
build_env_var="BUILDKITE_PLUGIN_ARTIFACTS_DOWNLOAD_${index}_BUILD"
159-
160-
# finally get the artifact to download
161-
if [ -n "${!source_env_var:-}" ] && [ -n "${!dest_env_var:-}" ]; then
162-
source="${!source_env_var}"
160+
env_var_base="BUILDKITE_PLUGIN_ARTIFACTS_DOWNLOAD_${index}"
161+
dest_env_var="${env_var_base}_TO"
162+
step_env_var="${env_var_base}_STEP"
163+
build_env_var="${env_var_base}_BUILD"
164+
165+
# could use $path directly, but would break the ordering because 0,1,10,11,2,20,3 :(
166+
# may be solved by using sort -V but it is GNU-specific
167+
if [ -z "${!env_var_base:-}" ]; then
168+
source_env_var="${env_var_base}_FROM"
163169
else
164-
source="${path}"
170+
source_env_var="${env_var_base}"
165171
fi
166172

173+
source="$(expand_vars "${source_env_var}")"
174+
167175
if ! bk_agent "${!step_env_var:-${step_option}}" "${!build_env_var:-${build_option}}" "${source}" "${workdir}"; then
168176
handle_bk_error "${source}"
169177
else

0 commit comments

Comments
 (0)