#!/usr/bin/env php * * 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'; use MokoEnterprise\CliFramework; 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); } 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'); if (empty($token) || empty($apiBase)) { $this->log('ERROR', 'Usage: dev_branch_reset.php --token TOKEN --api-base URL [--branch dev] [--from main]'); return 1; } // 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); 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}"); } // 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); } } return 0; } } $app = new DevBranchResetCli(); exit($app->execute());