Files
gitops-automation/agent/src/gitea.js
william 357791d6e3
build-agent / build-and-push (push) Failing after 18s
Scaffold Matrix + GitOps + Claude automation stack
2026-08-23 10:25:57 +00:00

55 lines
1.6 KiB
JavaScript

const GITEA_URL = process.env.GITEA_URL;
const GITEA_TOKEN = process.env.GITEA_TOKEN;
function authHeaders() {
return {
Authorization: `token ${GITEA_TOKEN}`,
"Content-Type": "application/json",
};
}
async function assertOk(res, action) {
if (!res.ok) {
throw new Error(`${action} failed: ${res.status} ${await res.text()}`);
}
}
export async function postPRComment(owner, repo, index, body) {
const url = `${GITEA_URL}/api/v1/repos/${owner}/${repo}/issues/${index}/comments`;
const res = await fetch(url, {
method: "POST",
headers: authHeaders(),
body: JSON.stringify({ body }),
});
await assertOk(res, "post PR comment");
}
export async function createBranch(owner, repo, newBranch, oldBranch = "main") {
const url = `${GITEA_URL}/api/v1/repos/${owner}/${repo}/branches`;
const res = await fetch(url, {
method: "POST",
headers: authHeaders(),
body: JSON.stringify({ new_branch_name: newBranch, old_branch_name: oldBranch }),
});
await assertOk(res, "create branch");
}
export async function createPullRequest(owner, repo, { head, base = "main", title, body }) {
const url = `${GITEA_URL}/api/v1/repos/${owner}/${repo}/pulls`;
const res = await fetch(url, {
method: "POST",
headers: authHeaders(),
body: JSON.stringify({ head, base, title, body }),
});
await assertOk(res, "create PR");
return res.json();
}
// Injects the agent's token into a Gitea clone URL so git operations don't need SSH keys.
export function authenticatedCloneUrl(cloneUrl) {
const u = new URL(cloneUrl);
u.username = "claude-agent";
u.password = GITEA_TOKEN;
return u.toString();
}