1 Commits

Author SHA1 Message Date
Jonathan Miller 8847239637 feat: add platform discovery to bulk_file_push, update wiki
Generic: Repo Health / Site Health (push) Has been skipped
Generic: Repo Health / Access control (push) Successful in 1s
Universal: Changelog Validation / Validate CHANGELOG.md (pull_request) Failing after 3s
MCP: Copilot Agent / Run Copilot Coding Agent (pull_request) Failing after 2s
Universal: Secret Scanning / Gitleaks Secret Scan (pull_request) Successful in 4s
Universal: PR Check / Branch Policy (pull_request) Failing after 1s
MCP: Build & Validate / build (20) (pull_request) Failing after 7s
MCP: Build & Validate / build (22) (pull_request) Failing after 6s
Generic: Repo Health / Site Health (pull_request) Has been skipped
Generic: Repo Health / Access control (pull_request) Successful in 2s
Universal: PR Check / Validate PR (pull_request) Successful in 4s
Generic: Project CI / Lint & Validate (pull_request) Successful in 13s
MCP: Standards Compliance / Secret Scanning (pull_request) Successful in 5s
MCP: Standards Compliance / License Header Validation (pull_request) Failing after 5s
MCP: Standards Compliance / Repository Structure Validation (pull_request) Failing after 4s
MCP: Standards Compliance / Coding Standards Check (pull_request) Failing after 5s
MCP: Standards Compliance / Workflow Configuration Check (pull_request) Failing after 6s
MCP: Standards Compliance / README Completeness Check (pull_request) Failing after 6s
MCP: Standards Compliance / Documentation Quality Check (pull_request) Successful in 8s
MCP: Standards Compliance / Git Repository Hygiene (pull_request) Successful in 4s
MCP: Standards Compliance / File Naming Standards (pull_request) Successful in 3s
MCP: Standards Compliance / Line Length Check (pull_request) Failing after 4s
MCP: Standards Compliance / Script Integrity Validation (pull_request) Successful in 5s
MCP: Standards Compliance / Insecure Code Pattern Detection (pull_request) Successful in 3s
MCP: Standards Compliance / Dead Code Detection (pull_request) Successful in 5s
MCP: Standards Compliance / File Size Limits (pull_request) Successful in 3s
MCP: Standards Compliance / Binary File Detection (pull_request) Successful in 3s
MCP: Standards Compliance / TODO/FIXME Tracking (pull_request) Successful in 3s
Universal: CodeQL Analysis / Analyze (actions) (pull_request) Failing after 56s
Universal: CodeQL Analysis / Analyze (javascript) (pull_request) Failing after 58s
MCP: Standards Compliance / Broken Link Detection (pull_request) Successful in 4s
MCP: Standards Compliance / Version Consistency Check (pull_request) Successful in 47s
MCP: Standards Compliance / API Documentation Coverage (pull_request) Successful in 3s
MCP: Standards Compliance / Accessibility Check (pull_request) Successful in 5s
MCP: Standards Compliance / Performance Metrics (pull_request) Successful in 4s
MCP: Standards Compliance / Code Complexity Analysis (pull_request) Successful in 44s
MCP: Standards Compliance / Code Duplication Detection (pull_request) Successful in 43s
Universal: Auto-Assign / Assign unassigned issues and PRs (pull_request_target) Successful in 1s
MCP: Standards Compliance / Terraform Configuration Validation (pull_request) Successful in 7s
MCP: Standards Compliance / Dependency Vulnerability Scanning (pull_request) Successful in 46s
MCP: Standards Compliance / Unused Dependencies Check (pull_request) Successful in 40s
MCP: Standards Compliance / Enterprise Readiness Check (pull_request) Successful in 38s
MCP: Standards Compliance / Repository Health Check (pull_request) Successful in 38s
Universal: Build & Release / Promote to RC (pull_request) Has been skipped
Universal: Build & Release / Build & Release Pipeline (pull_request) Has been skipped
Branch Cleanup / Delete merged branch (pull_request) Has been skipped
Generic: Repo Health / Scripts governance (push) Has been cancelled
Generic: Repo Health / Repository health (push) Has been cancelled
Generic: Repo Health / Report Issues (push) Has been cancelled
Generic: Project CI / Tests (pull_request) Has been cancelled
Universal: CodeQL Analysis / Security Scan Summary (pull_request) Has been cancelled
Universal: PR Check / Build RC Package (pull_request) Has been cancelled
Universal: PR Check / Report Issues (pull_request) Has been cancelled
Generic: Repo Health / Scripts governance (pull_request) Has been cancelled
Generic: Repo Health / Repository health (pull_request) Has been cancelled
Generic: Repo Health / Report Issues (pull_request) Has been cancelled
MCP: Standards Compliance / Compliance Summary (pull_request) Has been cancelled
bulk_file_push now accepts an optional 'platform' parameter to
auto-discover repos by metadata platform (e.g. joomla, go, mcp)
instead of requiring an explicit repos list.

Wiki ARCHITECTURE updated with metadata tool reference and
bulk_file_push platform discovery documentation.
2026-06-19 02:48:27 -05:00
+39 -4
View File
@@ -897,22 +897,57 @@ server.tool(
server.tool(
'gitea_bulk_file_push',
'Push the same file content to multiple repos (uses Contents API)',
'Push the same file content to multiple repos (uses Contents API). Provide repos list OR platform to auto-discover repos by metadata platform.',
{
owner: z.string().describe('Organization name'),
repos: z.array(z.string()).describe('List of repository names'),
repos: z.array(z.string()).optional().describe('List of repository names (omit to use platform filter)'),
platform: z.string().optional().describe('Auto-discover repos by metadata platform (e.g. joomla, go, mcp). Ignored if repos is provided.'),
path: z.string().describe('File path in each repo (e.g. .mokogitea/workflows/pre-release.yml)'),
content_base64: z.string().describe('Base64-encoded file content'),
message: z.string().describe('Commit message'),
branch: z.string().optional().describe('Target branch (default: main)'),
...ConnectionParam,
},
async ({ owner, repos, path, content_base64, message, branch, connection }) => {
async ({ owner, repos, platform, path, content_base64, message, branch, connection }) => {
const client = clientFor(connection);
const targetBranch = branch ?? 'main';
const results: Array<{ repo: string; status: string }> = [];
for (const repo of repos) {
// Resolve repo list: explicit repos or auto-discover by platform
let targetRepos: string[];
if (repos && repos.length > 0) {
targetRepos = repos;
} else if (platform) {
// List all org repos, then filter by metadata platform
const allRepos: string[] = [];
let page = 1;
while (true) {
const res = await client.get(`/orgs/${owner}/repos`, { page: String(page), limit: '50' });
const data = res.data as Array<{ name: string }>;
if (!data || data.length === 0) break;
allRepos.push(...data.map(r => r.name));
if (data.length < 50) break;
page++;
}
// Check metadata for each repo
const matched: string[] = [];
for (const repo of allRepos) {
try {
const meta = await client.get(`/repos/${owner}/${repo}/metadata`);
const p = (meta.data as { platform?: string })?.platform;
if (p === platform) matched.push(repo);
} catch { /* skip repos without metadata */ }
}
targetRepos = matched;
if (targetRepos.length === 0) {
return { content: [{ type: 'text' as const, text: `No repos found with platform "${platform}" in ${owner}` }] };
}
results.push({ repo: '(discovery)', status: `found ${targetRepos.length} repos: ${targetRepos.join(', ')}` });
} else {
return { content: [{ type: 'text' as const, text: 'Error: provide either repos list or platform filter' }] };
}
for (const repo of targetRepos) {
try {
// Get current file SHA
const existing = await client.get(`/repos/${owner}/${repo}/contents/${path}?ref=${targetBranch}`);