kit

kit
git clone https://git.ryansepassi.com/git/kit.git
Log | Files | Refs | README

run.sh (6401B)


      1 #!/bin/sh
      2 set -u
      3 
      4 usage() {
      5     cat <<'EOF'
      6 Usage: test/audit/release/run.sh (--dist DIR | --kit FILE) [options]
      7 
      8 Required (exactly one):
      9   --dist DIR          shipped distribution root; uses DIR/bin/kit
     10   --kit FILE          exact Kit binary to audit
     11 
     12 Selection:
     13   --module GLOBS      comma-separated module globs
     14   --command GLOBS     comma-separated command globs
     15   --workflow GLOBS    comma-separated workflow globs
     16   --target GLOBS      comma-separated target globs
     17   --arch GLOBS        comma-separated architecture globs
     18   --format GLOBS      comma-separated format globs
     19   --severity GLOBS    comma-separated severities (p0,p1,p2,p3)
     20 
     21 Output:
     22   --out DIR           artifact root (default: build/audit/release-acceptance)
     23   --run-id NAME       run directory name (default: UTC timestamp plus PID)
     24 
     25 Other:
     26   -h, --help          show this help
     27 
     28 No compiler fallback exists. Existing run directories are never overwritten.
     29 The command exits 1 when any selected case is FAIL or BLOCKED, 0 otherwise,
     30 and 2 for harness usage/setup errors.
     31 EOF
     32 }
     33 
     34 SCRIPT_DIR=$(CDPATH= cd "$(dirname "$0")" && pwd -P) || exit 2
     35 REPO_ROOT=$(CDPATH= cd "$SCRIPT_DIR/../../.." && pwd -P) || exit 2
     36 
     37 DIST_ARG=
     38 KIT_ARG=
     39 OUT_ARG=$REPO_ROOT/build/audit/release-acceptance
     40 RUN_ID=
     41 HARNESS_FILTER_MODULE=
     42 HARNESS_FILTER_COMMAND=
     43 HARNESS_FILTER_WORKFLOW=
     44 HARNESS_FILTER_TARGET=
     45 HARNESS_FILTER_ARCH=
     46 HARNESS_FILTER_FORMAT=
     47 HARNESS_FILTER_SEVERITY=
     48 
     49 while [ "$#" -gt 0 ]; do
     50     case "$1" in
     51         --dist|--kit|--out|--run-id|--module|--command|--workflow|--target|--arch|--format|--severity)
     52             audit_option=$1
     53             shift
     54             if [ "$#" -eq 0 ]; then
     55                 printf 'audit: %s requires an argument\n' "$audit_option" >&2
     56                 usage >&2
     57                 exit 2
     58             fi
     59             audit_value=$1
     60             case "$audit_option" in
     61                 --dist) DIST_ARG=$audit_value ;;
     62                 --kit) KIT_ARG=$audit_value ;;
     63                 --out) OUT_ARG=$audit_value ;;
     64                 --run-id) RUN_ID=$audit_value ;;
     65                 --module) HARNESS_FILTER_MODULE=$audit_value ;;
     66                 --command) HARNESS_FILTER_COMMAND=$audit_value ;;
     67                 --workflow) HARNESS_FILTER_WORKFLOW=$audit_value ;;
     68                 --target) HARNESS_FILTER_TARGET=$audit_value ;;
     69                 --arch) HARNESS_FILTER_ARCH=$audit_value ;;
     70                 --format) HARNESS_FILTER_FORMAT=$audit_value ;;
     71                 --severity) HARNESS_FILTER_SEVERITY=$audit_value ;;
     72             esac
     73             ;;
     74         -h|--help)
     75             usage
     76             exit 0
     77             ;;
     78         *)
     79             printf 'audit: unknown option: %s\n' "$1" >&2
     80             usage >&2
     81             exit 2
     82             ;;
     83     esac
     84     shift
     85 done
     86 
     87 if { [ -n "$DIST_ARG" ] && [ -n "$KIT_ARG" ]; } || \
     88    { [ -z "$DIST_ARG" ] && [ -z "$KIT_ARG" ]; }; then
     89     printf 'audit: pass exactly one of --dist DIR or --kit FILE\n' >&2
     90     usage >&2
     91     exit 2
     92 fi
     93 
     94 HARNESS_DIST=
     95 if [ -n "$DIST_ARG" ]; then
     96     if [ ! -d "$DIST_ARG" ]; then
     97         printf 'audit: distribution directory does not exist: %s\n' "$DIST_ARG" >&2
     98         exit 2
     99     fi
    100     HARNESS_DIST=$(CDPATH= cd "$DIST_ARG" && pwd -P) || exit 2
    101     HARNESS_KIT=$HARNESS_DIST/bin/kit
    102 else
    103     if [ ! -f "$KIT_ARG" ]; then
    104         printf 'audit: Kit binary does not exist: %s\n' "$KIT_ARG" >&2
    105         exit 2
    106     fi
    107     audit_kit_dir=$(CDPATH= cd "$(dirname "$KIT_ARG")" && pwd -P) || exit 2
    108     HARNESS_KIT=$audit_kit_dir/$(basename "$KIT_ARG")
    109 fi
    110 
    111 if [ ! -x "$HARNESS_KIT" ]; then
    112     printf 'audit: Kit binary is not executable: %s\n' "$HARNESS_KIT" >&2
    113     exit 2
    114 fi
    115 
    116 mkdir -p "$OUT_ARG" || exit 2
    117 HARNESS_OUT_ROOT=$(CDPATH= cd "$OUT_ARG" && pwd -P) || exit 2
    118 if [ -z "$RUN_ID" ]; then
    119     RUN_ID=$(date -u '+%Y%m%dT%H%M%SZ')-$$
    120 fi
    121 case "$RUN_ID" in
    122     ''|*/*|.|..) printf 'audit: invalid --run-id: %s\n' "$RUN_ID" >&2; exit 2 ;;
    123 esac
    124 
    125 HARNESS_RUN_DIR=$HARNESS_OUT_ROOT/$RUN_ID
    126 if [ -e "$HARNESS_RUN_DIR" ]; then
    127     printf 'audit: refusing to overwrite existing run: %s\n' "$HARNESS_RUN_DIR" >&2
    128     exit 2
    129 fi
    130 mkdir -p "$HARNESS_RUN_DIR/cases" || exit 2
    131 
    132 if [ -n "$HARNESS_DIST" ]; then
    133     HARNESS_PATH=$HARNESS_DIST/bin:/usr/bin:/bin
    134 else
    135     HARNESS_PATH=$(dirname "$HARNESS_KIT"):/usr/bin:/bin
    136 fi
    137 
    138 HARNESS_SUMMARY_TSV=$HARNESS_RUN_DIR/summary.tsv
    139 printf 'state\tseverity\tmodule\tcommand\tworkflow\ttarget\tarch\tformat\tcase\treason\n' \
    140     > "$HARNESS_SUMMARY_TSV"
    141 
    142 {
    143     printf 'kit=%s\n' "$HARNESS_KIT"
    144     printf 'dist=%s\n' "$HARNESS_DIST"
    145     printf 'path=%s\n' "$HARNESS_PATH"
    146     printf 'filter.module=%s\n' "$HARNESS_FILTER_MODULE"
    147     printf 'filter.command=%s\n' "$HARNESS_FILTER_COMMAND"
    148     printf 'filter.workflow=%s\n' "$HARNESS_FILTER_WORKFLOW"
    149     printf 'filter.target=%s\n' "$HARNESS_FILTER_TARGET"
    150     printf 'filter.arch=%s\n' "$HARNESS_FILTER_ARCH"
    151     printf 'filter.format=%s\n' "$HARNESS_FILTER_FORMAT"
    152     printf 'filter.severity=%s\n' "$HARNESS_FILTER_SEVERITY"
    153 } > "$HARNESS_RUN_DIR/run.metadata"
    154 
    155 . "$SCRIPT_DIR/lib/harness.sh"
    156 
    157 HARNESS_MODULES_RAN=0
    158 for audit_module_file in "$SCRIPT_DIR"/modules/*.sh; do
    159     [ -f "$audit_module_file" ] || continue
    160     audit_module_name=$(basename "$audit_module_file" .sh)
    161     case "$audit_module_name" in
    162         *[!a-z0-9_]*) printf 'audit: invalid module filename: %s\n' "$audit_module_file" >&2; exit 2 ;;
    163     esac
    164     audit_match_filter "$audit_module_name" "$HARNESS_FILTER_MODULE" || continue
    165     . "$audit_module_file"
    166     HARNESS_MODULES_RAN=$((HARNESS_MODULES_RAN + 1))
    167     audit_module_function=audit_module_$audit_module_name
    168     "$audit_module_function"
    169 done
    170 
    171 if [ "$HARNESS_MODULES_RAN" -eq 0 ]; then
    172     printf 'audit: no module matched --module=%s\n' "$HARNESS_FILTER_MODULE" >&2
    173     exit 2
    174 fi
    175 
    176 {
    177     printf 'Kit release acceptance: %s\n' "$RUN_ID"
    178     printf 'Kit: %s\n' "$HARNESS_KIT"
    179     printf 'Selected: %s\n' "$HARNESS_SELECTED"
    180     printf 'PASS: %s\n' "$HARNESS_PASS"
    181     printf 'FAIL: %s\n' "$HARNESS_FAIL"
    182     printf 'BLOCKED: %s\n' "$HARNESS_BLOCKED"
    183     printf 'NOT_APPLICABLE: %s\n' "$HARNESS_NOT_APPLICABLE"
    184     printf 'Details: %s\n' "$HARNESS_SUMMARY_TSV"
    185 } > "$HARNESS_RUN_DIR/summary.txt"
    186 
    187 cat "$HARNESS_RUN_DIR/summary.txt"
    188 
    189 if [ "$HARNESS_SELECTED" -eq 0 ]; then
    190     printf 'audit: no cases matched the requested filters\n' >&2
    191     exit 2
    192 fi
    193 
    194 if [ "$HARNESS_FAIL" -ne 0 ] || [ "$HARNESS_BLOCKED" -ne 0 ]; then
    195     exit 1
    196 fi
    197 exit 0