fix: remove lesser stream copies, each stream updates independently

Joomla picks the HIGHEST version via version_compare() across ALL
entries. Lesser stream copies (02.17.00-dev) at the same base version
as stable (02.17.00) would never be selected because dev < stable.

Each stream now updates only when its own release happens:
- stable: on merge to main
- dev: on auto-bump after dev recreated from main
- rc: on promote-rc

The dev stream naturally gets 02.17.01-dev (higher than 02.17.00)
because auto-bump runs on the recreated dev branch.

Also sorts updates.xml entries dev→stable (dev first).

Authored-by: Moko Consulting
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Jonathan Miller
2026-05-30 19:53:47 -05:00
parent 547fc5ead8
commit 0363597c85
+12 -52
View File
@@ -243,61 +243,21 @@ if (!$dryRun) {
echo "[DRY-RUN] Would build and upload {$releaseVersion} to {$releaseTag}\n";
}
// -- Step 4: Build separate packages for all lesser stability streams --
// Each stream gets its own ZIP with the correct version INSIDE templateDetails.xml.
// Joomla reads version from the ZIP after install, so it must match.
echo "\n--- Step 4: Build packages for lesser streams ---\n";
for ($i = 0; $i < $stabilityIndex; $i++) {
$lesserStability = $allStabilities[$i];
$lesserTag = $releaseTagMap[$lesserStability];
$lesserVersion = $baseVersion . $suffixMap[$lesserStability];
// -- Step 4: No lesser stream copies --
// Joomla picks the HIGHEST version across ALL entries via version_compare().
// Since dev < alpha < beta < rc < stable, lesser stream copies at the same
// base version would never be selected by sites at lower stability levels.
// Each stream updates independently: dev via auto-bump, rc via promote-rc,
// stable via release. The dev stream naturally gets a higher patch after
// auto-bump runs on the recreated dev branch (e.g. 02.17.01-dev > 02.17.00).
echo "\n--- Step 4: Skipped (no lesser stream copies) ---\n";
echo " Building {$lesserStability} release: {$lesserVersion}\n";
if (!$dryRun) {
// Set version to lesser stream's suffixed version in source files
passthru("{$php} {$cli}/version_set_platform.php --path " . escapeshellarg($path)
. " --version " . escapeshellarg($baseVersion)
. " --branch " . escapeshellarg($lesserStability)
. " --stability " . escapeshellarg($lesserStability) . " 2>/dev/null");
// Create release tag
passthru("{$php} {$cli}/release_create.php --path " . escapeshellarg($path)
. " --version " . escapeshellarg($lesserVersion)
. " --tag " . escapeshellarg($lesserTag)
. " --token " . escapeshellarg($token)
. " --api-base " . escapeshellarg($apiBase)
. " --repo " . escapeshellarg($repo)
. " --branch " . escapeshellarg($branch) . " 2>&1");
// Build and upload package (ZIP will contain the lesser version)
passthru("{$php} {$cli}/release_package.php --path " . escapeshellarg($path)
. " --version " . escapeshellarg($lesserVersion)
. " --tag " . escapeshellarg($lesserTag)
. " --token " . escapeshellarg($token)
. " --api-base " . escapeshellarg($apiBase)
. " --repo " . escapeshellarg($repo)
. " --output /tmp 2>&1");
} else {
echo " [DRY-RUN] Would build {$lesserVersion} ZIP and upload to {$lesserTag}\n";
}
}
// Restore primary release version in source files
if (!$dryRun && $stabilityIndex > 0) {
passthru("{$php} {$cli}/version_set_platform.php --path " . escapeshellarg($path)
. " --version " . escapeshellarg($baseVersion)
. " --branch " . escapeshellarg($branch)
. " --stability " . escapeshellarg($stability) . " 2>/dev/null");
}
// -- Step 5: Update ALL streams in updates.xml --
echo "\n--- Step 5: Update updates.xml for ALL streams ---\n";
// Write entry for the primary stream and all lesser streams
$streamsToWrite = array_slice($allStabilities, 0, $stabilityIndex + 1);
// -- Step 5: Update ONLY this stream in updates.xml --
echo "\n--- Step 5: Update {$stability} stream in updates.xml ---\n";
$streamsToWrite = [$stability];
foreach ($streamsToWrite as $stream) {
$streamVersion = $baseVersion . $suffixMap[$stream];
$streamVersion = $releaseVersion;
$shaFlag = !empty($sha256) ? "--sha {$sha256}" : '';
echo " Writing {$stream} stream: {$streamVersion}\n";