Skip to content

Commit be31ffc

Browse files
committed
feat: wip injection script
1 parent 70f162b commit be31ffc

File tree

1 file changed

+48
-0
lines changed

1 file changed

+48
-0
lines changed

script/inject-version.sh

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
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"

0 commit comments

Comments
 (0)