import https from 'https'; const prNumber = 161; const giteaToken = process.env.GITEA_TOKEN; const botToken = process.env.CLAUDE_BOT_TOKEN; function req(method, path, token, body) { return new Promise((resolve, reject) => { const data = body ? JSON.stringify(body) : ''; const r = https.request({ hostname: 'gitea.gc-si.dev', path, method, headers: { 'Authorization': `token ${token}`, 'Content-Type': 'application/json', 'Content-Length': Buffer.byteLength(data), }, }, (res) => { let buf = ''; res.on('data', (c) => buf += c); res.on('end', () => resolve({ status: res.statusCode, body: buf })); }); r.on('error', reject); if (data) r.write(data); r.end(); }); } (async () => { if (!botToken) { console.log('NO_BOT_TOKEN: skipping approval/merge'); process.exit(0); } // 1. approve const ap = await req('POST', `/api/v1/repos/gc/wing-ops/pulls/${prNumber}/reviews`, botToken, { event: 'APPROVED', body: 'MR 승인 (via /mr skill)', }); console.log(`APPROVE_STATUS=${ap.status}`); if (ap.status >= 300) { console.error(ap.body); process.exit(1); } // 2. merge const mg = await req('POST', `/api/v1/repos/gc/wing-ops/pulls/${prNumber}/merge`, giteaToken, { Do: 'merge', merge_message_field: 'feat(design): 디자인 시스템 토큰 적용 및 Float 카탈로그 추가', delete_branch_after_merge: true, }); console.log(`MERGE_STATUS=${mg.status}`); if (mg.status >= 300) { console.error(mg.body); process.exit(1); } console.log('MERGE_DONE'); })();