#!/bin/bash
has_frontmatter() {
local file="$1"
[ ! -f "$file" ] && return 1
head -1 "$file" | grep -q "^---$" || return 1
sed -n '/^---$/,/^---$/p' "$file" | grep -qE "_harness_(version|template):"
}
get_frontmatter_version() {
local file="$1"
[ ! -f "$file" ] && echo "" && return 1
local version=""
if [[ "$file" == *.json ]] || [[ "$file" == *.json.template ]]; then
if command -v jq >/dev/null 2>&1; then
version=$(jq -r '._harness_version // empty' "$file" 2>/dev/null)
fi
echo "$version"
return 0
fi
if ! head -1 "$file" | grep -q "^---$"; then
echo ""
return 1
fi
version=$(sed -n '/^---$/,/^---$/p' "$file" | grep "_harness_version:" | head -1 | sed 's/.*: *"//' | sed 's/".*//')
echo "$version"
}
get_frontmatter_template() {
local file="$1"
[ ! -f "$file" ] && echo "" && return 1
local template=""
if [[ "$file" == *.json ]] || [[ "$file" == *.json.template ]]; then
if command -v jq >/dev/null 2>&1; then
template=$(jq -r '._harness_template // empty' "$file" 2>/dev/null)
fi
echo "$template"
return 0
fi
if ! head -1 "$file" | grep -q "^---$"; then
echo ""
return 1
fi
template=$(sed -n '/^---$/,/^---$/p' "$file" | grep "_harness_template:" | head -1 | sed 's/.*: *"//' | sed 's/".*//')
echo "$template"
}
get_file_version() {
local file="$1"
local fallback_registry="$2"
local version
version=$(get_frontmatter_version "$file")
if [ -n "$version" ]; then
echo "$version"
return 0
fi
if [ -n "$fallback_registry" ] && [ -f "$fallback_registry" ]; then
if command -v jq >/dev/null 2>&1; then
version=$(jq -r ".files[\"$file\"].templateVersion // empty" "$fallback_registry" 2>/dev/null)
if [ -n "$version" ]; then
echo "$version"
return 0
fi
fi
fi
echo "unknown"
return 1
}
get_yaml_comment_version() {
local file="$1"
[ ! -f "$file" ] && echo "" && return 1
local version
version=$(grep "# _harness_version:" "$file" | head -1 | sed 's/.*: *"//' | sed 's/".*//')
echo "$version"
}