146 lines
4.8 KiB
PHP
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);
|