Files

101 lines
3.5 KiB
PHP
Raw Permalink Normal View History

2026-05-23 22:37:37 -05:00
#!/usr/bin/env php
<?php
2026-05-23 22:37:37 -05:00
/* 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/dev_branch_reset.php
* BRIEF: Delete and recreate dev branch from main via Gitea API
*/
declare(strict_types=1);
require_once __DIR__ . '/../lib/Enterprise/CliFramework.php';
2026-05-23 22:37:37 -05:00
use MokoEnterprise\CliFramework;
2026-05-23 22:37:37 -05:00
class DevBranchResetCli extends CliFramework
{
protected function configure(): void
{
$this->setDescription('Delete and recreate dev branch from main via Gitea API');
$this->addArgument('--token', 'Gitea API token', '');
$this->addArgument('--api-base', 'Gitea API base URL', '');
$this->addArgument('--branch', 'Branch to reset', 'dev');
$this->addArgument('--from', 'Source branch', 'main');
$this->addArgument('--output-summary', 'Write to $GITHUB_STEP_SUMMARY', false);
}
2026-05-23 22:37:37 -05:00
protected function run(): int
{
$token = $this->getArgument('--token') ?: getenv('MOKOGITEA_TOKEN') ?: getenv('GITEA_TOKEN') ?: '';
$apiBase = $this->getArgument('--api-base');
$branch = $this->getArgument('--branch');
$from = $this->getArgument('--from');
$outputSummary = $this->getArgument('--output-summary');
2026-05-23 22:37:37 -05:00
if (empty($token) || empty($apiBase)) {
$this->log('ERROR', 'Usage: dev_branch_reset.php --token TOKEN --api-base URL [--branch dev] [--from main]');
return 1;
}
2026-05-23 22:37:37 -05:00
// Delete branch (tolerate 404)
$ch = curl_init("{$apiBase}/branches/{$branch}");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'DELETE',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ["Authorization: token {$token}"],
CURLOPT_TIMEOUT => 30,
]);
curl_exec($ch);
$delCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
2026-05-23 22:37:37 -05:00
if ($delCode === 204 || $delCode === 200) {
$this->log('INFO', "Deleted branch '{$branch}'");
} elseif ($delCode === 404) {
$this->log('INFO', "Branch '{$branch}' did not exist (skipped delete)");
} else {
$this->warning("Delete branch returned HTTP {$delCode}");
}
2026-05-23 22:37:37 -05:00
// Create branch from source
$payload = json_encode(['new_branch_name' => $branch, 'old_branch_name' => $from]);
$ch = curl_init("{$apiBase}/branches");
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ["Authorization: token {$token}", "Content-Type: application/json"],
CURLOPT_POSTFIELDS => $payload,
CURLOPT_TIMEOUT => 30,
]);
$response = curl_exec($ch);
$createCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($createCode === 201) {
$this->success("Recreated '{$branch}' from '{$from}'");
} else {
$this->log('ERROR', "Failed to create branch '{$branch}' from '{$from}' (HTTP {$createCode})");
return 1;
}
if ($outputSummary) {
$summaryFile = getenv('GITHUB_STEP_SUMMARY');
if ($summaryFile) {
file_put_contents($summaryFile, "Dev branch reset: '{$branch}' recreated from '{$from}'\n", FILE_APPEND);
}
}
2026-05-23 22:37:37 -05:00
return 0;
}
2026-05-23 22:37:37 -05:00
}
$app = new DevBranchResetCli();
exit($app->execute());