@@ -14,23 +14,33 @@ compress=()
1414
1515COMPRESSED=" false"
1616SINGULAR_DOWNLOAD_OBJECT=" false"
17- RELOCATION=" false"
1817MULTIPLE_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+
2031if [[ -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
2838fi
2939
3040while 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
3545done < <( 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
103115if [[ -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
115128workdir=" ${BUILDKITE_PLUGIN_ARTIFACTS_WORKDIR:- .} "
116129
117130if [[ " ${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
137148elif [[ " ${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
151156elif [[ " ${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