From e20ebdf87110d353d3ccfd0c1300c16f90879c40 Mon Sep 17 00:00:00 2001 From: Christopher Mayor Date: Wed, 4 Mar 2026 18:15:49 -0800 Subject: [PATCH] feat: add GitOps deployment tracking endpoints (#10) --- gitea-routes.js | 72 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) diff --git a/gitea-routes.js b/gitea-routes.js index 72b3ef1..3292169 100644 --- a/gitea-routes.js +++ b/gitea-routes.js @@ -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'); }