website-htmx-rustelo-code/scripts/content/review/migrate-frontmatter.sh
2026-07-10 03:44:13 +01:00

115 lines
No EOL
4.5 KiB
Bash
Executable file
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# Migration script to merge meta.toml content into markdown frontmatter
# Preserves existing frontmatter values, adds missing ones from meta.toml
set -e
echo "🔄 Starting frontmatter migration..."
# Function to process a single markdown file and its corresponding meta.toml
process_markdown_file() {
local md_file="$1"
local meta_file="$2"
if [[ ! -f "$md_file" ]] || [[ ! -f "$meta_file" ]]; then
return 0
fi
echo "📝 Processing: $md_file"
# Extract existing frontmatter
local frontmatter_end=$(grep -n "^---$" "$md_file" | sed -n '2p' | cut -d: -f1)
if [[ -z "$frontmatter_end" ]]; then
echo " ⚠️ No frontmatter found, skipping"
return 0
fi
# Read meta.toml values
local meta_slug=""
local meta_title=""
local meta_published=""
local meta_sort_order=""
local meta_description=""
local meta_css_class=""
local meta_css_style=""
if [[ -f "$meta_file" ]]; then
meta_slug=$(grep '^slug = ' "$meta_file" | sed 's/slug = "\(.*\)"/\1/')
meta_title=$(grep '^title = ' "$meta_file" | sed 's/title = "\(.*\)"/\1/')
meta_published=$(grep '^published = ' "$meta_file" | sed 's/published = \(.*\)/\1/')
meta_sort_order=$(grep '^sort_order = ' "$meta_file" | sed 's/sort_order = \(.*\)/\1/')
meta_description=$(grep '^description = ' "$meta_file" | sed 's/description = "\(.*\)"/\1/')
meta_css_class=$(grep '^css_class = ' "$meta_file" | sed 's/css_class = "\(.*\)"/\1/')
meta_css_style=$(grep '^css_style = ' "$meta_file" | sed 's/css_style = "\(.*\)"/\1/')
fi
# Create backup
cp "$md_file" "$md_file.backup"
# Extract current frontmatter content (between the --- markers)
local current_frontmatter=$(sed -n '2,'$((frontmatter_end-1))'p' "$md_file")
# Check what fields exist in current frontmatter
local has_category_description=$(echo "$current_frontmatter" | grep -q '^category_description:' && echo "yes" || echo "no")
local has_category_published=$(echo "$current_frontmatter" | grep -q '^category_published:' && echo "yes" || echo "no")
local has_sort_order=$(echo "$current_frontmatter" | grep -q '^sort_order:' && echo "yes" || echo "no")
local has_css_class=$(echo "$current_frontmatter" | grep -q '^css_class:' && echo "yes" || echo "no")
local has_css_style=$(echo "$current_frontmatter" | grep -q '^css_style:' && echo "yes" || echo "no")
# Build additional frontmatter fields from meta.toml (only if not already present)
local additional_fields=""
if [[ "$has_category_description" == "no" && -n "$meta_description" ]]; then
additional_fields="${additional_fields}category_description: \"$meta_description\"\n"
fi
if [[ "$has_category_published" == "no" && -n "$meta_published" ]]; then
additional_fields="${additional_fields}category_published: $meta_published\n"
fi
if [[ "$has_sort_order" == "no" && -n "$meta_sort_order" ]]; then
additional_fields="${additional_fields}sort_order: $meta_sort_order\n"
fi
if [[ "$has_css_class" == "no" && -n "$meta_css_class" ]]; then
additional_fields="${additional_fields}css_class: \"$meta_css_class\"\n"
fi
if [[ "$has_css_style" == "no" && -n "$meta_css_style" && "$meta_css_style" != '""' ]]; then
additional_fields="${additional_fields}css_style: \"$meta_css_style\"\n"
fi
# Only modify if we have additional fields to add
if [[ -n "$additional_fields" ]]; then
echo " ✅ Adding fields: category_description, category_published, sort_order, css_class"
# Create new file with enhanced frontmatter
{
echo "---"
echo "$current_frontmatter"
echo -e "$additional_fields"
echo "---"
tail -n +$((frontmatter_end+1)) "$md_file"
} > "$md_file.tmp"
mv "$md_file.tmp" "$md_file"
else
echo " No additional fields needed"
rm "$md_file.backup"
fi
}
# Find all markdown files that have corresponding meta.toml
find site/content -name "*.md" -type f | while read -r md_file; do
# Get directory of the markdown file
dir=$(dirname "$md_file")
meta_file="$dir/meta.toml"
if [[ -f "$meta_file" ]]; then
process_markdown_file "$md_file" "$meta_file"
fi
done
echo "✅ Frontmatter migration completed!"
echo "📋 Backup files created with .backup extension"
echo "🔍 Review changes before removing meta.toml files"