From bf697e1fa4348b300a371c38da8753e5d6c8bdd3 Mon Sep 17 00:00:00 2001 From: Mathias Fredriksson Date: Fri, 29 Nov 2024 17:22:43 +0200 Subject: [PATCH] fix(update-versions.sh): handle markdown/tf block nesting when updating version (#356) --- update-version.sh | 37 +++++++++++++++++++++++++++++++------ 1 file changed, 31 insertions(+), 6 deletions(-) diff --git a/update-version.sh b/update-version.sh index b062736f..09547f9c 100755 --- a/update-version.sh +++ b/update-version.sh @@ -21,14 +21,39 @@ for dir in "${changed_dirs[@]}"; do if [[ -f "$dir/README.md" ]]; then file="$dir/README.md" tmpfile=$(mktemp /tmp/tempfile.XXXXXX) - awk -v tag="$LATEST_TAG" '{ - if ($1 == "version" && $2 == "=") { - sub(/"[^"]*"/, "\"" tag "\"") - print - } else { + awk -v tag="$LATEST_TAG" ' + BEGIN { in_code_block = 0; in_nested_block = 0 } + { + # Detect the start and end of Markdown code blocks. + if ($0 ~ /^```/) { + in_code_block = !in_code_block + # Reset nested block tracking when exiting a code block. + if (!in_code_block) { + in_nested_block = 0 + } + } + + # Handle nested blocks within a code block. + if (in_code_block) { + # Detect the start of a nested block (skipping "module" blocks). + if ($0 ~ /{/ && !($1 == "module" || $1 ~ /^[a-zA-Z0-9_]+$/)) { + in_nested_block++ + } + + # Detect the end of a nested block. + if ($0 ~ /}/ && in_nested_block > 0) { + in_nested_block-- + } + + # Update "version" only if not in a nested block. + if (!in_nested_block && $1 == "version" && $2 == "=") { + sub(/"[^"]*"/, "\"" tag "\"") + } + } + print } - }' "$file" > "$tmpfile" && mv "$tmpfile" "$file" + ' "$file" > "$tmpfile" && mv "$tmpfile" "$file" # Check if the README.md file has changed if ! git diff --quiet -- "$dir/README.md"; then