Files
moko-platform/cli/version_auto_bump.php
T
2026-05-29 10:52:28 +00:00

146 lines
4.8 KiB
PHP

#!/usr/bin/env php
<?php
/* Copyright (C) 2026 Moko Consulting <hello@mokoconsulting.tech>
*
* SPDX-License-Identifier: GPL-3.0-or-later
*
* FILE INFORMATION
* DEFGROUP: moko-platform.CLI
* INGROUP: moko-platform
* REPO: https://git.mokoconsulting.tech/MokoConsulting/moko-platform
* PATH: /cli/version_auto_bump.php
* VERSION: 09.09.00
* BRIEF: Auto patch-bump, set stability suffix, and commit — single CLI replacing inline workflow bash
*
* Usage:
* php version_auto_bump.php --path . --branch dev
* php version_auto_bump.php --path . --branch feature/my-feature --token TOKEN --repo-url URL
* php version_auto_bump.php --path . --branch alpha --dry-run
*/
declare(strict_types=1);
$path = '.';
$branch = null;
$token = '';
$repoUrl = '';
$dryRun = false;
foreach ($argv as $i => $arg) {
if ($arg === '--path' && isset($argv[$i + 1])) $path = $argv[$i + 1];
if ($arg === '--branch' && isset($argv[$i + 1])) $branch = $argv[$i + 1];
if ($arg === '--token' && isset($argv[$i + 1])) $token = $argv[$i + 1];
if ($arg === '--repo-url' && isset($argv[$i + 1])) $repoUrl = $argv[$i + 1];
if ($arg === '--dry-run') $dryRun = true;
}
// Auto-detect branch from git or CI env
if ($branch === null) {
$branch = getenv('GITHUB_REF_NAME') ?: trim((string) @shell_exec('git rev-parse --abbrev-ref HEAD 2>/dev/null'));
if (empty($branch) || $branch === 'HEAD') {
fwrite(STDERR, "Cannot detect branch — pass --branch\n");
exit(1);
}
}
// Map branch to stability suffix
$stabilityMap = [
'dev' => 'dev',
'alpha' => 'alpha',
'beta' => 'beta',
'rc' => 'rc',
];
if (array_key_exists($branch, $stabilityMap)) {
$stability = $stabilityMap[$branch];
} elseif (str_starts_with($branch, 'feature/')) {
$stability = 'dev';
} else {
$stability = 'dev';
}
$cli = __DIR__;
$php = PHP_BINARY;
// Step 1: Patch bump (skip on alpha/beta/rc — those only change the suffix)
$shouldBump = !in_array($branch, ['alpha', 'beta', 'rc'], true);
if ($shouldBump) {
$bumpOutput = [];
exec("{$php} {$cli}/version_bump.php --path " . escapeshellarg($path) . " 2>&1", $bumpOutput, $bumpRc);
foreach ($bumpOutput as $line) {
echo "{$line}\n";
}
} else {
echo "Skipping patch bump on {$branch} branch (suffix change only)\n";
}
// Step 2: Read version
$versionOutput = [];
exec("{$php} {$cli}/version_read.php --path " . escapeshellarg($path) . " 2>&1", $versionOutput, $versionRc);
$version = trim($versionOutput[0] ?? '');
if (empty($version)) {
echo "No version found — skipping\n";
exit(0);
}
echo "Version: {$version} | Branch: {$branch} | Stability: {$stability}\n";
// Step 3: Set platform version with stability suffix
exec("{$php} {$cli}/version_set_platform.php --path " . escapeshellarg($path)
. " --version " . escapeshellarg($version)
. " --branch " . escapeshellarg($branch)
. " --stability " . escapeshellarg($stability) . " 2>&1", $setPlatOutput);
foreach ($setPlatOutput as $line) {
echo "{$line}\n";
}
// Step 4: Version consistency check and fix
exec("{$php} {$cli}/version_check.php --path " . escapeshellarg($path) . " --fix 2>&1", $checkOutput);
// Re-read version (now includes suffix from version_set_platform)
$suffixMap = [
'dev' => '-dev',
'alpha' => '-alpha',
'beta' => '-beta',
'rc' => '-rc',
];
$displayVersion = preg_replace('/(-(dev|alpha|beta|rc))+$/', '', $version) . ($suffixMap[$stability] ?? '');
if ($dryRun) {
echo "[DRY-RUN] Would commit and push {$displayVersion} to {$branch}\n";
exit(0);
}
// Step 5: Git commit and push
$root = realpath($path) ?: $path;
// Check if anything changed
$diffStatus = trim((string) @shell_exec("cd " . escapeshellarg($root) . " && git diff --quiet && git diff --cached --quiet 2>&1 && echo clean || echo dirty"));
if ($diffStatus === 'clean') {
echo "No version changes to commit\n";
exit(0);
}
// Configure git
@shell_exec("cd " . escapeshellarg($root) . " && git config --local user.email \"gitea-actions[bot]@mokoconsulting.tech\"");
@shell_exec("cd " . escapeshellarg($root) . " && git config --local user.name \"gitea-actions[bot]\"");
if (!empty($repoUrl)) {
@shell_exec("cd " . escapeshellarg($root) . " && git remote set-url origin " . escapeshellarg($repoUrl));
}
@shell_exec("cd " . escapeshellarg($root) . " && git add -A");
$commitMsg = $shouldBump
? "chore(version): auto-bump patch {$displayVersion} [skip ci]"
: "chore(version): set {$stability} suffix {$displayVersion} [skip ci]";
@shell_exec("cd " . escapeshellarg($root) . " && git commit -m " . escapeshellarg($commitMsg)
. " --author=\"gitea-actions[bot] <gitea-actions[bot]@mokoconsulting.tech>\"");
$pushResult = @shell_exec("cd " . escapeshellarg($root) . " && git push origin " . escapeshellarg($branch) . " 2>&1");
echo $pushResult ?? '';
echo "Bumped to {$displayVersion}\n";
exit(0);