From 61c3259148d5aa701fefe0be8d1a1245c33aa778 Mon Sep 17 00:00:00 2001 From: DanConwayDev Date: Wed, 20 Mar 2024 14:22:40 +0000 Subject: [PATCH] feat: improve and turn on readme display for github only. added notes for enabling displaying readme for other git servers in the future --- src/lib/components/repo/utils.spec.ts | 18 +++++- src/lib/components/repo/utils.ts | 18 ++++++ src/lib/stores/repo.ts | 56 +++++++---------- src/lib/wrappers/RepoMenu.svelte | 17 +++--- .../git_proxy/readme/[clone]/+server.ts | 28 +++++++++ src/routes/repo/[repo_id]/+page.svelte | 61 ++++++++++--------- .../repo/[repo_id]/proposals/+page.svelte | 39 ++++++++++++ src/routes/repo/[repo_id]/proposals/+page.ts | 5 ++ 8 files changed, 172 insertions(+), 70 deletions(-) create mode 100644 src/routes/git_proxy/readme/[clone]/+server.ts create mode 100644 src/routes/repo/[repo_id]/proposals/+page.svelte create mode 100644 src/routes/repo/[repo_id]/proposals/+page.ts diff --git a/src/lib/components/repo/utils.spec.ts b/src/lib/components/repo/utils.spec.ts index ecd685c..fd16572 100644 --- a/src/lib/components/repo/utils.spec.ts +++ b/src/lib/components/repo/utils.spec.ts @@ -1,5 +1,5 @@ import { describe, expect, test } from 'vitest' -import { selectRepoFromCollection } from './utils' +import { extractGithubDetails, selectRepoFromCollection } from './utils' import { collection_defaults, event_defaults, @@ -159,3 +159,19 @@ describe('getSelectedRepo', () => { }) }) }) + +describe('extractGithubDetails', () => { + ;[ + 'https://github.com/orgname/reponame.git', + 'https://github.com/orgname/reponame', + 'git@github.com:orgname/reponame', + ].forEach((clone) => { + describe(clone, () => { + test('returns correct org and repo', () => { + const res = extractGithubDetails(clone) + expect(res?.org).toEqual('orgname') + expect(res?.repo_name).toEqual('reponame') + }) + }) + }) +}) diff --git a/src/lib/components/repo/utils.ts b/src/lib/components/repo/utils.ts index a25cabf..e8bf1ee 100644 --- a/src/lib/components/repo/utils.ts +++ b/src/lib/components/repo/utils.ts @@ -15,3 +15,21 @@ export const selectRepoFromCollection = ( return b_ref - a_ref })[0] } + +export const extractGithubDetails = ( + clone: string +): { org: string; repo_name: string } | undefined => { + if (clone.indexOf('github.') > -1) { + const g_split = clone.split('github.') + if (g_split.length > 0) { + const final = g_split[1].replace(':', '/').split('/') + if (final.length > 2) { + return { + org: final[1], + repo_name: final[2].split('.')[0], + } + } + } + } + return undefined +} diff --git a/src/lib/stores/repo.ts b/src/lib/stores/repo.ts index f384823..a0f2095 100644 --- a/src/lib/stores/repo.ts +++ b/src/lib/stores/repo.ts @@ -10,7 +10,10 @@ import { readme_defaults, } from '$lib/components/repo/type' import { ensureRepoCollection } from './repos' -import { selectRepoFromCollection } from '$lib/components/repo/utils' +import { + extractGithubDetails, + selectRepoFromCollection, +} from '$lib/components/repo/utils' import { get } from 'svelte/store' export const selected_repo_collection: Writable = writable({ @@ -103,41 +106,28 @@ const ensureRepoReadme = async ( } try { const github_details = extractGithubDetails(clone) - // feature stapled off - const feature_staple = false - if (github_details && feature_staple) { - const res = await fetch( - // `/git_proxy/readme?clone=${encodeURIComponent(clone)}` - `https://raw.githubusercontent.com/${github_details.org}/${github_details.repo_name}/HEAD/README.md` - ) - if (!res.ok) { - throw 'api request error' + let res: Response + if (github_details) { + try { + res = await fetch( + `https://raw.githubusercontent.com/${github_details.org}/${github_details.repo_name}/HEAD/README.md` + ) + if (!res.ok) { + throw 'api request error' + } + } catch { + res = await fetch( + `https://raw.githubusercontent.com/${github_details.org}/${github_details.repo_name}/HEAD/readme.md` + ) } - let text = '' - text = await res.text() - update(text) - } else { - // use proxy to get readme using 'git archive' or 'git clone' + } else res = await fetch(`/git_proxy/readme/${encodeURIComponent(clone)}`) + if (!res.ok) { + throw 'api request error' } + let text = '' + text = await res.text() + update(text) } catch (e) { update() } } - -const extractGithubDetails = ( - clone: string -): { org: string; repo_name: string } | undefined => { - if (clone.indexOf('github.') > -1) { - const g_split = clone.split('github.') - if (g_split.length > 0) { - const slash_split = g_split[1].split('/') - if (slash_split.length > 2) { - return { - org: slash_split[1], - repo_name: slash_split[2].split('.')[0], - } - } - } - } - return undefined -} diff --git a/src/lib/wrappers/RepoMenu.svelte b/src/lib/wrappers/RepoMenu.svelte index cf323e0..8873de0 100644 --- a/src/lib/wrappers/RepoMenu.svelte +++ b/src/lib/wrappers/RepoMenu.svelte @@ -1,6 +1,7 @@ - - -