feat: add GitOps deployment tracking endpoints (#10)
This commit is contained in:
@@ -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');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user