#!/usr/bin/env bash set -euo pipefail usage() { printf '%s\n' \ 'usage:' \ ' finalize-task-policy.sh pair ' \ ' finalize-task-policy.sh build ' \ ' finalize-task-policy.sh review ' >&2 exit 2 } script_dir=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd) formatter="$script_dir/finalize-task-route.sh" field() { local output=$1 local key=$2 local value value=$(sed -n "s/^${key}=//p" <<<"$output") if [[ -z "$value" ]]; then printf 'missing formatter field: %s\n' "$key" >&2 exit 3 fi printf '%s\n' "$value" } finalize_build() { local base_lane=$1 local risk_triggered=$2 shift 2 local scores=("$@") local base local final case "$risk_triggered" in true|false) ;; *) usage ;; esac base=$("$formatter" build "$base_lane" "${scores[@]}") BUILD_BASE_LANE=$(field "$base" lane) BUILD_BASE_GRADE=$(field "$base" grade) BUILD_RISK_TRIGGERED=$risk_triggered if [[ "$risk_triggered" == true ]]; then BUILD_FLOOR=G07 final=$("$formatter" build cloud "${scores[@]}" 7) else BUILD_FLOOR=none final=$base fi BUILD_LANE=$(field "$final" lane) BUILD_GRADE=$(field "$final" grade) BUILD_FILENAME=$(field "$final" filename) } finalize_review() { local base_lane=$1 local floor_number=$2 shift 2 local scores=("$@") local base local final base=$("$formatter" review "$base_lane" "${scores[@]}") REVIEW_BASE_LANE=$(field "$base" lane) REVIEW_BASE_GRADE=$(field "$base" grade) REVIEW_FLOOR=$(printf 'G%02d' "$floor_number") final=$("$formatter" review cloud "${scores[@]}" "$floor_number") REVIEW_LANE=$(field "$final" lane) REVIEW_GRADE=$(field "$final" grade) REVIEW_FILENAME=$(field "$final" filename) } emit_build() { printf 'build_base_lane=%s\n' "$BUILD_BASE_LANE" printf 'build_base_grade=%s\n' "$BUILD_BASE_GRADE" printf 'build_risk_triggered=%s\n' "$BUILD_RISK_TRIGGERED" printf 'build_floor=%s\n' "$BUILD_FLOOR" printf 'build_lane=%s\n' "$BUILD_LANE" printf 'build_grade=%s\n' "$BUILD_GRADE" printf 'build_filename=%s\n' "$BUILD_FILENAME" } emit_review() { printf 'review_base_lane=%s\n' "$REVIEW_BASE_LANE" printf 'review_base_grade=%s\n' "$REVIEW_BASE_GRADE" printf 'review_floor=%s\n' "$REVIEW_FLOOR" printf 'review_lane=%s\n' "$REVIEW_LANE" printf 'review_grade=%s\n' "$REVIEW_GRADE" printf 'review_filename=%s\n' "$REVIEW_FILENAME" } mode=${1:-} case "$mode" in pair) [[ $# -eq 14 ]] || usage finalize_build "$2" "$3" "${@:4:5}" if [[ "$BUILD_GRADE" == G09 || "$BUILD_GRADE" == G10 ]]; then review_floor=10 else review_floor=9 fi finalize_review "$9" "$review_floor" "${@:10:5}" ;; build) [[ $# -eq 8 ]] || usage finalize_build "$2" "$3" "${@:4:5}" ;; review) [[ $# -eq 7 ]] || usage finalize_review "$2" 9 "${@:3:5}" ;; *) usage ;; esac printf 'finalizer=finalize-task-policy.sh\n' printf 'finalizer_mode=%s\n' "$mode" case "$mode" in pair) emit_build emit_review ;; build) emit_build ;; review) emit_review ;; esac