Skip to content

Commit 1e658f9

Browse files
committed
fix: simplify proviso
1 parent 5ead0a3 commit 1e658f9

File tree

2 files changed

+45
-19
lines changed

2 files changed

+45
-19
lines changed

Diff for: VERSION

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
0.23.0
1+
0.24.0-dev

Diff for: discover/_eval.sh

+44-18
Original file line numberDiff line numberDiff line change
@@ -71,20 +71,41 @@ function provision() {
7171
by_action=$($jq --slurp '.[] | group_by(.action) | map({key: .[0].action, value: .}) | from_entries' <<<"${EVAL}")
7272

7373
for action in $($jq --raw-output '.|keys[]' <<<"$by_action"); do
74-
actions=$($jq ".${action}" <<<"${by_action}")
75-
proviso=$($jq --raw-output ".${action}[0].proviso|strings" <<<"${by_action}")
76-
if [[ -n $proviso ]]; then
77-
echo "::debug::Running ${proviso##*/}"
78-
# this trick doesn't require proviso to be executable, as created by builtins.toFile
79-
function _proviso() { . "$proviso"; }
80-
provisioned="$(_proviso "$actions")"
81-
unset -f _proviso
82-
echo "::debug::Provisioned after proviso check: $provisioned"
83-
else
84-
echo "::debug::No proviso on action, passing all actions through."
85-
provisioned="$actions"
74+
readarray -t actions < <($jq --raw-output ".${action}[] | @base64" <<<"${by_action}")
75+
echo "Check proviso for all ${#actions[@]} '$action' action(s) ..."
76+
# this trick doesn't require proviso to be executable, as created by builtins.toFile
77+
function _proviso() {
78+
_jq() { echo "${2}" | command base64 --decode | command jq --compact-output --raw-output "${1}"; }
79+
local action="$1"
80+
>&2 echo -n "... checking $(_jq '"//\(.cell)/\(.block)/\(.name):\(.action)"' $action)"
81+
local proviso=$(_jq '.proviso|strings' $action)
82+
if [[ -n $proviso ]]; then
83+
cmd=(bash -o errexit -o nounset -o pipefail "$proviso" "$(_jq '.' $action)")
84+
if ${cmd[@]}; then
85+
>&2 echo " - take it."
86+
echo "$action"
87+
else
88+
>&2 echo " - drop it."
89+
fi
90+
else
91+
>&2 echo " - take it (no proviso)."
92+
echo "$action"
93+
fi
94+
}
95+
export -f _proviso
96+
readarray -t args < <(
97+
parallel -j0 _proviso ::: "${actions[@]}"
98+
# for a in ${actions[@]}; do _proviso "$a"; done
99+
)
100+
echo "Continue with ${#args[@]} '$action' action(s)."
101+
if [[ ${#args[@]} -ne 0 ]]; then
102+
PROVISIONED="$(
103+
$jq '. + ($ARGS.positional | map(@base64d|fromjson))' \
104+
--args "${args[@]}" \
105+
<<<"$PROVISIONED"
106+
)"
86107
fi
87-
PROVISIONED="$($jq '. + $new' --argjson new "$provisioned" <<<"$PROVISIONED")"
108+
unset -f _proviso
88109
done
89110
}
90111

@@ -112,6 +133,10 @@ function output() {
112133
| from_entries' <<<"$PROVISIONED"
113134
)"
114135

136+
base64 <<<"$json" | tr -d '\n'
137+
echo
138+
echo "(base64)"
139+
115140
delim=$RANDOM
116141

117142
printf "%s\n" \
@@ -122,22 +147,23 @@ function output() {
122147
>>"$GITHUB_OUTPUT"
123148
}
124149

125-
echo "::group::🔎 Start Discovery ..."
150+
echo "::group::📓 Evaluate ..."
126151
eval_fn
127-
provision
128152
echo "::endgroup::"
129153

130154
echo "::group::✨ Find potential targets ..."
131155
echo "${EVAL}" | jq -r '.[] | "//\(.cell)/\(.block)/\(.name):\(.action)"'
132156
echo "::endgroup::"
133157

134-
echo "::group::🌲️ Recycle previous work ..."
135-
echo "... and only procede with these:"
158+
echo "::group::🔎 Check for proviso ..."
159+
provision
160+
echo "::endgroup::"
161+
162+
echo "::group::🌲️ Save work and only proceed with ..."
136163
echo "${PROVISIONED}" | jq -r '.[] | "//\(.cell)/\(.block)/\(.name):\(.action)"'
137164
echo "::endgroup::"
138165

139166
echo "::group::📞️ Inform the build matrix ..."
140-
echo "... to tap the wire, enable debug logs :-)"
141167
output
142168
echo "::endgroup::"
143169

0 commit comments

Comments
 (0)