110 lines
2.5 KiB
Bash
Executable File
110 lines
2.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# metadata-update.sh - Update NWA metadata in package.json and Markdown files
|
|
set -euo pipefail
|
|
|
|
# -----------------------------
|
|
# Resolve paths
|
|
# -----------------------------
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
NWA_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
META_FILE="$NWA_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 \
|
|
# --slurpfile 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_package_json() {
|
|
local file="$1"
|
|
local tmp
|
|
tmp="$(mktemp)"
|
|
|
|
jq \
|
|
--slurpfile meta_file "$META_FILE" \
|
|
'
|
|
($meta_file[0]) as $meta
|
|
| . 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="$NWA_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" |