diff options
| author | Joe Mou <dev@mou.fo> | 2026-01-26 13:27:28 -0500 |
|---|---|---|
| committer | Joe Mou <dev@mou.fo> | 2026-01-26 17:23:43 -0500 |
| commit | 744f42a2ae7968881e4d8f1ce0ec0d5209c8d7a4 (patch) | |
| tree | faae5626e0c6ef7c998af88d8056f462bddf7243 /cgithub | |
| parent | fee5c6f6438316a8d407699370729ac2d0abd9d1 (diff) | |
Show releases
Diffstat (limited to 'cgithub')
| -rw-r--r-- | cgithub/src/scraper.ts | 10 | ||||
| -rw-r--r-- | cgithub/views/repo.eta | 3 |
2 files changed, 13 insertions, 0 deletions
diff --git a/cgithub/src/scraper.ts b/cgithub/src/scraper.ts index c1bdef5..4ffdc43 100644 --- a/cgithub/src/scraper.ts +++ b/cgithub/src/scraper.ts @@ -54,6 +54,7 @@ export interface RepoInfo { stars: string | null; watchers: string | null; forks: string | null; + numReleases?: number; } export interface GitHubRepo extends GitHubTree { @@ -110,12 +111,21 @@ function parseRepoInfo(html: string): RepoInfo { const watchersMatch = html.match(/<strong>(\d+)<\/strong>\s*watching/); const forksMatch = html.match(/id="repo-network-counter"[^>]*>([^<]+)/); + let numReleases: number | undefined; + const releaseCountMatch = html.match( + /<a[^>]*href="[^"]*\/releases"[^>]*>[\s\S]*?<span[^>]*title="(\d+)"[^>]*(?:class="[^"]*Counter|data-view-component="true")[^>]*>/, + ); + if (releaseCountMatch) { + numReleases = parseInt(releaseCountMatch[1], 10); + } + return { description, website: websiteMatch?.[1] || null, stars: starsMatch?.[1]?.trim() || null, watchers: watchersMatch?.[1] || null, forks: forksMatch?.[1]?.trim() || null, + numReleases, }; } diff --git a/cgithub/views/repo.eta b/cgithub/views/repo.eta index 4965e75..5bebb95 100644 --- a/cgithub/views/repo.eta +++ b/cgithub/views/repo.eta @@ -17,6 +17,9 @@ <% if (it.info.forks) { %> <span class="count"><img src="/static/icons/git-fork.svg" alt="forks" class="icon"> <%= it.info.forks %></span> <% } %> + <% if (it.info.numReleases) { %> + <div><a href="/<%= it.repo.owner %>/<%= it.repo.name %>/releases" rel="noreferrer"><%= it.info.numReleases %> releases</a></div> + <% } %> </div> <% } %> |
