feat: add GitOps deployment tracking endpoints (#10)

This commit is contained in:
2026-03-04 18:15:49 -08:00
parent 6fe05ba756
commit e20ebdf871

View File

@@ -153,6 +153,78 @@ function setupGiteaRoutes(app) {
} }
}); });
// GitOps deployment status
app.get('/api/gitops/deployments', async (req, res) => {
try {
const repos = await gitea.getRepos();
const deployments = [];
for (const repo of repos) {
try {
// Get latest release if exists
const releases = await gitea.request(`/api/v1/repos/${giteaConfig.owner}/${repo.name}/releases?limit=1`);
const latestRelease = releases[0];
deployments.push({
repo: repo.name,
full_name: repo.full_name,
updated_at: repo.updated_at,
latest_release: latestRelease ? {
tag: latestRelease.tag_name,
created: latestRelease.created_at,
url: latestRelease.html_url
} : null,
html_url: repo.html_url
});
} catch {
deployments.push({
repo: repo.name,
full_name: repo.full_name,
updated_at: repo.updated_at,
latest_release: null,
html_url: repo.html_url
});
}
}
res.json({
deployments,
lastUpdated: new Date().toISOString()
});
} catch (error) {
res.status(500).json({ error: error.message });
}
});
// Get deployment status for a specific repo
app.get('/api/gitops/deployments/:repo', async (req, res) => {
const { repo } = req.params;
try {
const releases = await gitea.request(`/api/v1/repos/${giteaConfig.owner}/${repo}/releases?limit=5`);
const commits = await gitea.request(`/api/v1/repos/${giteaConfig.owner}/${repo}/commits?limit=5`);
res.json({
repo,
releases: releases.map(r => ({
tag: r.tag_name,
name: r.name,
created: r.created_at,
url: r.html_url
})),
commits: commits.map(c => ({
sha: c.sha?.substring(0, 7),
message: c.commit?.message?.split('\n')[0],
author: c.commit?.author?.name,
date: c.commit?.author?.date
}))
});
} catch (error) {
res.status(500).json({ error: error.message });
}
});
console.log('✅ Gitea integration loaded'); console.log('✅ Gitea integration loaded');
} }