diff --git a/internal/app/azldev/core/sources/release.go b/internal/app/azldev/core/sources/release.go index 5c6a46cb..68807076 100644 --- a/internal/app/azldev/core/sources/release.go +++ b/internal/app/azldev/core/sources/release.go @@ -17,8 +17,12 @@ import ( ) // autoreleasePattern matches the %autorelease macro invocation in a Release tag value. -// This covers both the bare form (%autorelease) and the braced form (%{autorelease}). -var autoreleasePattern = regexp.MustCompile(`%(\{autorelease\}|autorelease($|\s))`) +// This covers: +// - bare form: %autorelease +// - braced form: %{autorelease} +// - braced form with arguments: %{autorelease -e asan} +// - conditional form (no fallback): %{?autorelease} +var autoreleasePattern = regexp.MustCompile(`%(\{[?]?autorelease($|[}\s])|autorelease($|\s))`) // staticReleasePattern matches a leading integer in a static Release tag value, // followed by an optional suffix (e.g. "%{?dist}"). diff --git a/internal/app/azldev/core/sources/release_test.go b/internal/app/azldev/core/sources/release_test.go index 2351689b..f04c1ede 100644 --- a/internal/app/azldev/core/sources/release_test.go +++ b/internal/app/azldev/core/sources/release_test.go @@ -20,8 +20,28 @@ func TestReleaseUsesAutorelease(t *testing.T) { value string expected bool }{ + // Basic forms. {"%autorelease", true}, {"%{autorelease}", true}, + + // Braced form with arguments (e.g., 389-ds-base). + {"%{autorelease -n %{?with_asan:-e asan}}%{?dist}", true}, + {"%{autorelease -e asan}", true}, + + // Conditional forms (e.g., gnutls, keylime-agent-rust). + {"%{?autorelease}%{!?autorelease:1%{?dist}}", true}, + {"%{?autorelease}", true}, + + // Conditional forms with a fallback value are NOT autorelease — the fallback + // means we cannot conclusively determine that autorelease is being used. + {"%{!?autorelease:1%{?dist}}", false}, + {"%{?autorelease:1%{?dist}}", false}, + + // False positives (e.g., python-pyodbc). + {"%{autorelease_suffix}", false}, + {"%{?autorelease_extra}", false}, + + // Static release values. {"1", false}, {"1%{?dist}", false}, {"3%{?dist}.1", false},