fix: corrected github recent commits

This commit is contained in:
Michael Freno
2026-01-13 09:48:27 -05:00
parent 53dc7c1aab
commit 9d6c32d8b0
2 changed files with 55 additions and 36 deletions

View File

@@ -68,18 +68,28 @@ export function RightBarContent() {
onMount(() => {
const fetchData = async () => {
try {
// Fetch more commits to account for deduplication
const [ghCommits, gtCommits, ghActivity, gtActivity] =
await Promise.all([
api.gitActivity.getGitHubCommits
.query({ limit: 3 })
.query({ limit: 6 })
.catch(() => []),
api.gitActivity.getGiteaCommits.query({ limit: 3 }).catch(() => []),
api.gitActivity.getGiteaCommits.query({ limit: 6 }).catch(() => []),
api.gitActivity.getGitHubActivity.query().catch(() => []),
api.gitActivity.getGiteaActivity.query().catch(() => [])
]);
setGithubCommits(ghCommits);
setGiteaCommits(gtCommits);
// Take first 3 from GitHub
const displayedGithubCommits = ghCommits.slice(0, 3);
// Deduplicate Gitea commits - only against the 3 shown in GitHub section
const githubShas = new Set(displayedGithubCommits.map((c) => c.sha));
const uniqueGiteaCommits = gtCommits.filter(
(commit) => !githubShas.has(commit.sha)
);
setGithubCommits(displayedGithubCommits);
setGiteaCommits(uniqueGiteaCommits.slice(0, 3));
setGithubActivity(ghActivity);
setGiteaActivity(gtActivity);
} catch (error) {

View File

@@ -33,8 +33,9 @@ export const gitActivityRouter = createTRPCRouter({
`github-commits-${input.limit}`,
CACHE_CONFIG.GIT_ACTIVITY_CACHE_TTL_MS,
async () => {
const reposResponse = await fetchWithTimeout(
`https://api.github.com/users/MikeFreno/repos?sort=pushed&per_page=10`,
// Use Events API to get recent push events - much more efficient
const eventsResponse = await fetchWithTimeout(
`https://api.github.com/users/MikeFreno/events/public?per_page=100`,
{
headers: {
Authorization: `Bearer ${env.GITHUB_API_TOKEN}`,
@@ -44,46 +45,53 @@ export const gitActivityRouter = createTRPCRouter({
}
);
await checkResponse(reposResponse);
const repos = await reposResponse.json();
await checkResponse(eventsResponse);
const events = await eventsResponse.json();
const allCommits: GitCommit[] = [];
for (const repo of repos) {
if (allCommits.length >= input.limit * 3) break; // Get extra to sort later
// Extract push events and fetch commit details
for (const event of events) {
if (event.type !== "PushEvent") continue;
if (allCommits.length >= input.limit * 5) break; // Get extra to ensure we have enough
const repoName = event.repo.name;
const commitSha = event.payload.head;
try {
const commitsResponse = await fetchWithTimeout(
`https://api.github.com/repos/${repo.full_name}/commits?per_page=5`,
// Fetch the actual commit details to get the message
const commitResponse = await fetchWithTimeout(
`https://api.github.com/repos/${repoName}/commits/${commitSha}`,
{
headers: {
Authorization: `Bearer ${env.GITHUB_API_TOKEN}`,
Accept: "application/vnd.github.v3+json"
},
timeout: 10000
timeout: 5000
}
);
if (commitsResponse.ok) {
const commits = await commitsResponse.json();
for (const commit of commits) {
if (
commit.author?.login === "MikeFreno" ||
commit.commit?.author?.email?.includes("mike")
) {
allCommits.push({
sha: commit.sha?.substring(0, 7) || "unknown",
message:
commit.commit?.message?.split("\n")[0] || "No message",
author:
commit.commit?.author?.name ||
commit.author?.login ||
"Unknown",
date:
commit.commit?.author?.date || new Date().toISOString(),
repo: repo.full_name,
url: `https://github.com/${repo.full_name}/commit/${commit.sha}`
});
}
if (commitResponse.ok) {
const commit = await commitResponse.json();
// Filter for your commits
if (
commit.author?.login === "MikeFreno" ||
commit.author?.login === "mikefreno" ||
commit.commit?.author?.email?.includes("mike")
) {
allCommits.push({
sha: commit.sha?.substring(0, 7) || "unknown",
message:
commit.commit?.message?.split("\n")[0] || "No message",
author:
commit.commit?.author?.name ||
commit.author?.login ||
"Unknown",
date:
commit.commit?.author?.date || new Date().toISOString(),
repo: repoName,
url: `https://github.com/${repoName}/commit/${commit.sha}`
});
}
}
} catch (error) {
@@ -92,17 +100,18 @@ export const gitActivityRouter = createTRPCRouter({
error instanceof TimeoutError
) {
console.warn(
`Network error fetching commits for ${repo.full_name}, skipping`
`Network error fetching commit ${commitSha} for ${repoName}, skipping`
);
} else {
console.error(
`Error fetching commits for ${repo.full_name}:`,
`Error fetching commit ${commitSha} for ${repoName}:`,
error
);
}
}
}
// Already sorted by event date, but sort again by commit date to be precise
allCommits.sort(
(a, b) => new Date(b.date).getTime() - new Date(a.date).getTime()
);