fix: improve version extraction logic to prevent false positives (#511)

## Description

Makes the version extract and replace logic more specific so it wont
replace any field that does is not specifically `field` under the
detected modules.
<!-- Briefly describe what this PR does and why -->

## Type of Change

- [ ] New module
- [ ] New template
- [X] Bug fix
- [ ] Feature/enhancement
- [ ] Documentation
- [ ] Other

## Testing & Validation

- [X] Tests pass (`bun test`)
- [X] Code formatted (`bun fmt`)
- [X] Changes tested locally

## Related Issues

#510 
<!-- Link related issues or write "None" if not applicable -->

---------

Co-authored-by: Atif Ali <atif@coder.com>
This commit is contained in:
DevCats 2025-10-31 07:45:52 -05:00 committed by GitHub
parent 5450113939
commit 925c71e641
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -77,16 +77,19 @@ update_readme_version() {
in_target_module = 0 in_target_module = 0
} }
} }
/version.*=.*"/ { /^[[:space:]]*version[[:space:]]*=/ {
if (in_target_module) { if (in_target_module) {
gsub(/version[[:space:]]*=[[:space:]]*"[^"]*"/, "version = \"" new_version "\"") match($0, /^[[:space]]*/
indent = substr($0, 1, RLENGTH)
print indent "version = \"" new_version "\""
in_target_module = 0 in_target_module = 0
next
} }
} }
{ print } { print }
' "$readme_path" > "${readme_path}.tmp" && mv "${readme_path}.tmp" "$readme_path" ' "$readme_path" > "${readme_path}.tmp" && mv "${readme_path}.tmp" "$readme_path"
return 0 return 0
elif grep -q 'version\s*=\s*"' "$readme_path"; then elif grep -q '^[[:space:]]*version[[:space:]]*=' "$readme_path"; then
echo "⚠️ Found version references but no module source match for $namespace/$module_name" echo "⚠️ Found version references but no module source match for $namespace/$module_name"
return 1 return 1
fi fi
@ -148,9 +151,9 @@ main() {
local current_version local current_version
if [ -z "$latest_tag" ]; then if [ -z "$latest_tag" ]; then
if [ -f "$readme_path" ] && grep -q 'version\s*=\s*"' "$readme_path"; then if [ -f "$readme_path" ] && grep -q '^[[:space:]]*version[[:space:]]*=' "$readme_path"; then
local readme_version local readme_version
readme_version=$(grep 'version\s*=\s*"' "$readme_path" | head -1 | sed 's/.*version\s*=\s*"\([^"]*\)".*/\1/') readme_version=$(awk '/^[[:space:]]*version[[:space:]]*=/ { match($0, /"[^"]*"/); print substr($0, RSTART+1, RLENGTH-2); exit }' "$readme_path")
echo "No git tag found, but README shows version: $readme_version" echo "No git tag found, but README shows version: $readme_version"
if ! validate_version "$readme_version"; then if ! validate_version "$readme_version"; then