nwa/tools/metadata-update.sh

91 lines
2.1 KiB
Bash
Executable File

#!/usr/bin/env bash
# metadata-update.sh - Update SDL metadata in package.json and Markdown files
set -euo pipefail
# -----------------------------
# Resolve paths
# -----------------------------
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
SDL_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
META_FILE="$SDL_ROOT/metadata.json"
command -v jq >/dev/null || { echo "jq required"; exit 1; }
command -v sed >/dev/null || { echo "sed required"; exit 1; }
# -----------------------------
# Helpers
# -----------------------------
get_meta() {
jq -r ".METADATA.$1" "$META_FILE"
}
escape_regex() {
printf '%s' "$1" | sed -e 's/[][\/.^$*+?{}|()]/\\&/g'
}
# -----------------------------
# Update package.json
# -----------------------------
update_package_json() {
local file="$1"
local tmp
tmp="$(mktemp)"
jq \
--argfile meta "$META_FILE" \
'
. as $pkg
| ($meta.META_MAPS["package.json"] | to_entries) as $maps
| reduce $maps[] as $m ($pkg;
.[$m.key] = $meta.METADATA[$m.value]
)
' "$file" > "$tmp"
mv "$tmp" "$file"
echo "Updated $file"
}
# -----------------------------
# Update Markdown metadata table
# -----------------------------
update_markdown() {
local file="$1"
jq -r '.META_MAPS["*.md"] | to_entries[] | "\(.key)|\(.value)"' "$META_FILE" |
while IFS='|' read -r label meta_key; do
value="$(get_meta "$meta_key")"
esc_label="$(escape_regex "$label")"
sed -i -E \
"s#^\\|[[:space:]]*${esc_label}[[:space:]]*\\|[[:space:]]*[^|]*\\|#| ${label} | $value |#" \
"$file"
done
echo "Updated $file"
}
# -----------------------------
# Main
# -----------------------------
jq -r '.MANIFEST[]' "$META_FILE" | while read -r rel_path; do
file="$SDL_ROOT/$rel_path"
if [[ ! -f "$file" ]]; then
echo "WARN: $rel_path not found, skipping"
continue
fi
case "$(basename "$file")" in
package.json)
update_package_json "$file"
;;
*.md)
update_markdown "$file"
;;
*)
echo "WARN: No handler for $rel_path"
;;
esac
done
echo "Metadata update complete"