File tree Expand file tree Collapse file tree 1 file changed +48
-0
lines changed Expand file tree Collapse file tree 1 file changed +48
-0
lines changed Original file line number Diff line number Diff line change 1+ #! /usr/bin/env bash
2+ # Usage: ./inject-version.sh <version> [dir]
3+ # Example: ./inject-version.sh 0.4.2 # defaults to ./definitions
4+ # ./inject-version.sh 0.4.2 ./defs
5+
6+ set -euo pipefail
7+ IFS=$' \n\t '
8+
9+ # ---- args & checks ----
10+ [ $# -ge 1 ] || { echo " Usage: $0 <version> [dir]" >&2 ; exit 1; }
11+ V=" $1 "
12+ DIR=" ${2:- definitions} "
13+
14+ command -v jq > /dev/null 2>&1 || { echo " jq is required" >&2 ; exit 1; }
15+ [[ " $V " =~ ^[0-9]+ (\. [0-9]+)* $ ]] || { echo " Invalid version: $V " >&2 ; exit 1; }
16+ [ -d " $DIR " ] || { echo " Folder not found: $DIR " >&2 ; exit 1; }
17+
18+ # ---- process ----
19+ updated=0
20+ skipped=0
21+ while IFS= read -r -d ' ' f; do
22+ # Validate JSON first
23+ if ! jq -e . " $f " > /dev/null 2>&1 ; then
24+ echo " INVALID JSON (skipped): $f " >&2
25+ (( skipped++ ))
26+ continue
27+ fi
28+
29+ # Only modify if top-level is an object
30+ if jq -e ' type=="object"' " $f " > /dev/null 2>&1 ; then
31+ tmp=" $( mktemp --tmpdir=" $( dirname " $f " ) " .inject.XXXXXX) "
32+ # Write to temp first; only replace on success
33+ if jq --arg v " $V " ' .version=$v' " $f " > " $tmp " ; then
34+ mv -f " $tmp " " $f "
35+ echo " updated: $f "
36+ (( updated++ ))
37+ else
38+ echo " ERROR processing: $f " >&2
39+ rm -f " $tmp "
40+ (( skipped++ ))
41+ fi
42+ else
43+ echo " skipped (non-object): $f "
44+ (( skipped++ ))
45+ fi
46+ done < <( find " $DIR " -type f -name ' *.json' -print0)
47+
48+ echo " Done. Updated: $updated Skipped: $skipped "
You can’t perform that action at this time.
0 commit comments