From f4c4634a0234ee7d7a262f9ec18abdbc266ae891 Mon Sep 17 00:00:00 2001 From: KTS Hacx <69856755+ktshacx@users.noreply.github.com> Date: Thu, 14 Nov 2024 03:04:08 +0530 Subject: [PATCH 1/4] Update new-ship-form.tsx Checks for readme in both main and master branch Signed-off-by: KTS Hacx <69856755+ktshacx@users.noreply.github.com> --- src/app/harbor/shipyard/new-ship-form.tsx | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/app/harbor/shipyard/new-ship-form.tsx b/src/app/harbor/shipyard/new-ship-form.tsx index 5c76da0b..bbb5de9c 100644 --- a/src/app/harbor/shipyard/new-ship-form.tsx +++ b/src/app/harbor/shipyard/new-ship-form.tsx @@ -96,12 +96,20 @@ export default function NewShipForm({ const repoUrl = formData.get('repo_url') as string if (isGithubRepo) { - formData.set( - 'readme_url', - repoUrl.replace( + let readmeURI = repoUrl.replace( /https:\/\/github.com\/(.*?)\/(.*?)\/?$/, 'https://raw.githubusercontent.com/$1/$2/refs/heads/main/README.md', - ), + ); + let readmeData = await fetch(readmeURI).then((d) => d.text()) + if(readmeData == "404: Not Found"){ + readmeURI = repoUrl.replace( + /https:\/\/github.com\/(.*?)\/(.*?)\/?$/, + 'https://raw.githubusercontent.com/$1/$2/refs/heads/master/README.md', + ); + } + formData.set( + 'readme_url', + readmeURI, ) } From d4bd78f07854018973bc7f941f10e48e28f7c53c Mon Sep 17 00:00:00 2001 From: Max Wofford Date: Mon, 18 Nov 2024 09:09:39 -0500 Subject: [PATCH 2/4] Handle README on different branches --- src/app/harbor/shipyard/new-ship-form.tsx | 46 +++++++++++++++-------- 1 file changed, 30 insertions(+), 16 deletions(-) diff --git a/src/app/harbor/shipyard/new-ship-form.tsx b/src/app/harbor/shipyard/new-ship-form.tsx index bbb5de9c..d7427764 100644 --- a/src/app/harbor/shipyard/new-ship-form.tsx +++ b/src/app/harbor/shipyard/new-ship-form.tsx @@ -11,6 +11,32 @@ import { useToast } from '@/hooks/use-toast' import Icon from '@hackclub/icons' import { MultiSelect } from '../../../components/ui/multi-select' +async function testReadmeLink(url: string) { + const response = await fetch(url) + if (response.status !== 200) { + return false + } + const responseText = await response.text() + if (!responseText || responseText === '404: Not Found') { + return false + } + return true +} + +async function getReadmeFromRepo(url: string) { + if (!url.includes('github.com')) { + return null + } + // https://api.github.com/repos/OWNER/REPO/readme + let readmeUrl = url.replace( + /https:\/\/github.com\/(.*?)\/(.*?)\/?$/, + 'https://github.com/$1/$2/readme', + ) + let readmeData = await fetch(readmeUrl).then((d) => d.json()) + const readmeURI = readmeData.download_url + return (await testReadmeLink(readmeURI)) ? readmeURI : null +} + export default function NewShipForm({ ships, canvasRef, @@ -95,22 +121,10 @@ export default function NewShipForm({ } const repoUrl = formData.get('repo_url') as string - if (isGithubRepo) { - let readmeURI = repoUrl.replace( - /https:\/\/github.com\/(.*?)\/(.*?)\/?$/, - 'https://raw.githubusercontent.com/$1/$2/refs/heads/main/README.md', - ); - let readmeData = await fetch(readmeURI).then((d) => d.text()) - if(readmeData == "404: Not Found"){ - readmeURI = repoUrl.replace( - /https:\/\/github.com\/(.*?)\/(.*?)\/?$/, - 'https://raw.githubusercontent.com/$1/$2/refs/heads/master/README.md', - ); - } - formData.set( - 'readme_url', - readmeURI, - ) + const assumedReadmeUrl = await getReadmeFromRepo(repoUrl) + + if (!!assumedReadmeUrl) { + formData.set('readme_url', assumedReadmeUrl) } const isTutorial = sessionStorage?.getItem('tutorial') === 'true' From a0ce69fb4b3e0e1e3e5b0be123515693fb8f4869 Mon Sep 17 00:00:00 2001 From: Max Wofford Date: Mon, 18 Nov 2024 09:23:12 -0500 Subject: [PATCH 3/4] let -> const --- src/app/harbor/shipyard/new-ship-form.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/app/harbor/shipyard/new-ship-form.tsx b/src/app/harbor/shipyard/new-ship-form.tsx index d7427764..404bb2fb 100644 --- a/src/app/harbor/shipyard/new-ship-form.tsx +++ b/src/app/harbor/shipyard/new-ship-form.tsx @@ -28,11 +28,11 @@ async function getReadmeFromRepo(url: string) { return null } // https://api.github.com/repos/OWNER/REPO/readme - let readmeUrl = url.replace( + const readmeUrl = url.replace( /https:\/\/github.com\/(.*?)\/(.*?)\/?$/, 'https://github.com/$1/$2/readme', ) - let readmeData = await fetch(readmeUrl).then((d) => d.json()) + const readmeData = await fetch(readmeUrl).then((d) => d.json()) const readmeURI = readmeData.download_url return (await testReadmeLink(readmeURI)) ? readmeURI : null } From 16d01e74cdc9f318b8605315a9f00f542075d59f Mon Sep 17 00:00:00 2001 From: Max Wofford Date: Mon, 18 Nov 2024 13:38:36 -0500 Subject: [PATCH 4/4] Fix typo in URL! --- src/app/harbor/shipyard/new-ship-form.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/harbor/shipyard/new-ship-form.tsx b/src/app/harbor/shipyard/new-ship-form.tsx index 404bb2fb..b646da51 100644 --- a/src/app/harbor/shipyard/new-ship-form.tsx +++ b/src/app/harbor/shipyard/new-ship-form.tsx @@ -30,7 +30,7 @@ async function getReadmeFromRepo(url: string) { // https://api.github.com/repos/OWNER/REPO/readme const readmeUrl = url.replace( /https:\/\/github.com\/(.*?)\/(.*?)\/?$/, - 'https://github.com/$1/$2/readme', + 'https://api.github.com/repos/$1/$2/readme', ) const readmeData = await fetch(readmeUrl).then((d) => d.json()) const readmeURI = readmeData.download_url