Skip to content

Commit d6b8e0e

Browse files
committed
Shard vars file between multiple plugin configurations
By hashing the `BUILDKITE_PLUGIN_CONFIGURATION` envvar, we can effectively disambiguate multiple instances of the `metahook` plugin within a single pipeline. This allows us to seprate the `vars` file, as it otherwise can get confused if you have multiple invocations of the plugin that each use different hooks.
1 parent d3dc683 commit d6b8e0e

File tree

3 files changed

+14
-3
lines changed

3 files changed

+14
-3
lines changed

hooks/environment

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,17 @@
22
set -euo pipefail
33

44
# If users add multiple `metahook` instances, we'll just store our `vars` in the same directory.
5+
# We store the `vars` in a file that is namespaced by a hash of the plugin configuration, which
6+
# allows us to avoid having multiple metahook instances clobber eachother.
57
if [[ ! -v "BUILDKITE_METAHOOK_HOOKS_PATH" ]]; then
68
export BUILDKITE_METAHOOK_HOOKS_PATH="$(mktemp -d)"
7-
env | sort | grep "BUILDKITE_PLUGIN_METAHOOK" | uniq >"${BUILDKITE_METAHOOK_HOOKS_PATH}/vars"
89
fi
910

10-
if grep -E 'BUILDKITE_PLUGIN_METAHOOK_.+(\.BAT|\.CMD)=' "${BUILDKITE_METAHOOK_HOOKS_PATH}/vars"; then
11+
PLUGIN_CONFIG_HASH=$(cksum <<<"${BUILDKITE_PLUGIN_CONFIGURATION}" | awk '{ print $1 }')
12+
VARS_FILENAME="vars-${PLUGIN_CONFIG_HASH}"
13+
env | sort | grep "BUILDKITE_PLUGIN_METAHOOK" | uniq >"${BUILDKITE_METAHOOK_HOOKS_PATH}/${VARS_FILENAME}"
14+
15+
if grep -E 'BUILDKITE_PLUGIN_METAHOOK_.+(\.BAT|\.CMD)=' "${BUILDKITE_METAHOOK_HOOKS_PATH}/${VARS_FILENAME}"; then
1116
echo "Sorry, we had to remove Windows Batch file support in 0.4.0."
1217
echo "Please refer to https://github.com/improbable-eng/metahook-buildkite-plugin/tree/master/changelog.md#0.4.0"
1318
echo ""

hooks/pre-exit

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
#!/usr/bin/env bash
22
set -euo pipefail
33

4+
PLUGIN_CONFIG_HASH=$(cksum <<<"${BUILDKITE_PLUGIN_CONFIGURATION}" | awk '{ print $1 }')
5+
VARS_FILENAME="vars-${PLUGIN_CONFIG_HASH}"
46
cleanup() {
5-
rm -rf "${BUILDKITE_METAHOOK_HOOKS_PATH}"
7+
# Delete our `vars` directory, then if the directory itself is empty, delete that too
8+
rm -rf "${BUILDKITE_METAHOOK_HOOKS_PATH}/${VARS_FILENAME}"
9+
rmdir "${BUILDKITE_METAHOOK_HOOKS_PATH}" 2>/dev/null || true
610
}
711
trap cleanup EXIT
812

hooks/run-hook.sh

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ hook_name="${1:?1st arg needs to be hook name}"
55
upperd="$(echo "${hook_name}" | tr "[:lower:]" "[:upper:]" | sed "s:-:_:")"
66
var_name="BUILDKITE_PLUGIN_METAHOOK_${upperd}"
77

8+
PLUGIN_CONFIG_HASH=$(cksum <<<"${BUILDKITE_PLUGIN_CONFIGURATION}" | awk '{ print $1 }')
9+
VARS_FILENAME="vars-${PLUGIN_CONFIG_HASH}"
810
if grep -q "${var_name}" <"${BUILDKITE_METAHOOK_HOOKS_PATH}/vars"; then
911
hook_file="${BUILDKITE_METAHOOK_HOOKS_PATH}/${hook_name}"
1012

0 commit comments

Comments
 (0)