mirror of
https://github.com/markwylde/claude-code-gitea-action.git
synced 2026-02-20 02:22:49 +08:00
147 lines
5.0 KiB
TypeScript
147 lines
5.0 KiB
TypeScript
import type { GitHubClient } from "../api/client";
|
|
import { GITEA_SERVER_URL } from "../api/config";
|
|
import {
|
|
branchHasChanges,
|
|
fetchBranch,
|
|
branchExists,
|
|
remoteBranchExists,
|
|
} from "../utils/local-git";
|
|
|
|
export async function checkAndDeleteEmptyBranch(
|
|
client: GitHubClient,
|
|
owner: string,
|
|
repo: string,
|
|
claudeBranch: string | undefined,
|
|
baseBranch: string,
|
|
): Promise<{ shouldDeleteBranch: boolean; branchLink: string }> {
|
|
let branchLink = "";
|
|
let shouldDeleteBranch = false;
|
|
|
|
if (claudeBranch) {
|
|
// Check if we're using Gitea or GitHub
|
|
const giteaApiUrl = process.env.GITEA_API_URL?.trim();
|
|
const isGitea =
|
|
giteaApiUrl &&
|
|
giteaApiUrl !== "" &&
|
|
!giteaApiUrl.includes("api.github.com") &&
|
|
!giteaApiUrl.includes("github.com");
|
|
|
|
if (isGitea) {
|
|
// Use local git operations for Gitea
|
|
console.log("Using local git commands for branch check (Gitea mode)");
|
|
|
|
try {
|
|
// Fetch latest changes from remote
|
|
await fetchBranch(claudeBranch);
|
|
await fetchBranch(baseBranch);
|
|
|
|
// Check if branch exists and has changes
|
|
const { hasChanges, branchSha, baseSha } = await branchHasChanges(
|
|
claudeBranch,
|
|
baseBranch,
|
|
);
|
|
|
|
if (branchSha && baseSha) {
|
|
if (hasChanges) {
|
|
console.log(
|
|
`Branch ${claudeBranch} appears to have commits (different SHA from base)`,
|
|
);
|
|
const branchUrl = `${GITEA_SERVER_URL}/${owner}/${repo}/src/branch/${claudeBranch}`;
|
|
branchLink = `\n[View branch](${branchUrl})`;
|
|
} else {
|
|
console.log(
|
|
`Branch ${claudeBranch} has same SHA as base, marking for deletion`,
|
|
);
|
|
shouldDeleteBranch = true;
|
|
}
|
|
} else {
|
|
// If we can't get SHAs, check if branch exists at all
|
|
const localExists = await branchExists(claudeBranch);
|
|
const remoteExists = await remoteBranchExists(claudeBranch);
|
|
|
|
if (localExists || remoteExists) {
|
|
console.log(
|
|
`Branch ${claudeBranch} exists but SHA comparison failed, assuming it has commits`,
|
|
);
|
|
const branchUrl = `${GITEA_SERVER_URL}/${owner}/${repo}/src/branch/${claudeBranch}`;
|
|
branchLink = `\n[View branch](${branchUrl})`;
|
|
} else {
|
|
console.log(
|
|
`Branch ${claudeBranch} does not exist yet - this is normal during workflow`,
|
|
);
|
|
branchLink = "";
|
|
}
|
|
}
|
|
} catch (error: any) {
|
|
console.error("Error checking branch with git commands:", error);
|
|
// For errors, assume the branch has commits to be safe
|
|
console.log("Assuming branch exists due to git command error");
|
|
const branchUrl = `${GITEA_SERVER_URL}/${owner}/${repo}/src/branch/${claudeBranch}`;
|
|
branchLink = `\n[View branch](${branchUrl})`;
|
|
}
|
|
} else {
|
|
// Use API calls for GitHub
|
|
console.log("Using API calls for branch check (GitHub mode)");
|
|
|
|
try {
|
|
// Get the branch info to see if it exists and has commits
|
|
const branchResponse = await client.api.getBranch(
|
|
owner,
|
|
repo,
|
|
claudeBranch,
|
|
);
|
|
|
|
// Get base branch info for comparison
|
|
const baseResponse = await client.api.getBranch(
|
|
owner,
|
|
repo,
|
|
baseBranch,
|
|
);
|
|
|
|
const branchSha = branchResponse.data.commit.sha;
|
|
const baseSha = baseResponse.data.commit.sha;
|
|
|
|
// If SHAs are different, assume there are commits
|
|
if (branchSha !== baseSha) {
|
|
console.log(
|
|
`Branch ${claudeBranch} appears to have commits (different SHA from base)`,
|
|
);
|
|
const branchUrl = `${GITEA_SERVER_URL}/${owner}/${repo}/src/branch/${claudeBranch}`;
|
|
branchLink = `\n[View branch](${branchUrl})`;
|
|
} else {
|
|
console.log(
|
|
`Branch ${claudeBranch} has same SHA as base, marking for deletion`,
|
|
);
|
|
shouldDeleteBranch = true;
|
|
}
|
|
} catch (error: any) {
|
|
console.error("Error checking branch:", error);
|
|
|
|
// Handle 404 specifically - branch doesn't exist
|
|
if (error.status === 404) {
|
|
console.log(
|
|
`Branch ${claudeBranch} does not exist yet - this is normal during workflow`,
|
|
);
|
|
// Don't add branch link since branch doesn't exist
|
|
branchLink = "";
|
|
} else {
|
|
// For other errors, assume the branch has commits to be safe
|
|
console.log("Assuming branch exists due to non-404 error");
|
|
const branchUrl = `${GITEA_SERVER_URL}/${owner}/${repo}/src/branch/${claudeBranch}`;
|
|
branchLink = `\n[View branch](${branchUrl})`;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Delete the branch if it has no commits
|
|
if (shouldDeleteBranch && claudeBranch) {
|
|
console.log(
|
|
`Skipping branch deletion - not reliably supported across all Git platforms: ${claudeBranch}`,
|
|
);
|
|
// Skip deletion to avoid compatibility issues
|
|
}
|
|
|
|
return { shouldDeleteBranch, branchLink };
|
|
}
|