Skip to content

Commit

Permalink
fix(create-app): support github url has trailing slash (#39665)
Browse files Browse the repository at this point in the history
## Bug

- [x] Related issues linked using `fixes #number`
- [ ] Integration tests added
- [ ] Errors have helpful link attached, see `contributing.md`

The PR fixes #39642, by supporting GitHub repo URLs with a trailing slash while without branch and path.
  • Loading branch information
SukkaW committed Aug 17, 2022
1 parent 53f0e2b commit 7fe5c88
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 3 deletions.
12 changes: 9 additions & 3 deletions packages/create-next-app/helpers/examples.ts
Expand Up @@ -25,9 +25,15 @@ export async function getRepoInfo(
const [, username, name, t, _branch, ...file] = url.pathname.split('/')
const filePath = examplePath ? examplePath.replace(/^\//, '') : file.join('/')

// Support repos whose entire purpose is to be a NextJS example, e.g.
// https://github.com/:username/:my-cool-nextjs-example-repo-name.
if (t === undefined) {
if (
// Support repos whose entire purpose is to be a NextJS example, e.g.
// https://github.com/:username/:my-cool-nextjs-example-repo-name.
t === undefined ||
// Support GitHub URL that ends with a trailing slash, e.g.
// https://github.com/:username/:my-cool-nextjs-example-repo-name/
// In this case "t" will be an empty string while the next part "_branch" will be undefined
(t === '' && _branch === undefined)
) {
const infoResponse = await got(
`https://api.github.com/repos/${username}/${name}`
).catch((e) => e)
Expand Down
30 changes: 30 additions & 0 deletions test/integration/create-next-app/index.test.ts
Expand Up @@ -186,6 +186,36 @@ describe('create next app', () => {
})
})

it('should allow example with GitHub URL with trailing slash', async () => {
await usingTempDir(async (cwd) => {
const projectName = 'github-app'
const res = await run(
[
projectName,
'--example',
'https://github.com/vercel/nextjs-portfolio-starter/',
],
{
cwd,
}
)

expect(res.exitCode).toBe(0)
expect(
fs.existsSync(path.join(cwd, projectName, 'package.json'))
).toBeTruthy()
expect(
fs.existsSync(path.join(cwd, projectName, 'pages/index.mdx'))
).toBeTruthy()
expect(
fs.existsSync(path.join(cwd, projectName, '.gitignore'))
).toBeTruthy()
expect(
fs.existsSync(path.join(cwd, projectName, 'node_modules/next'))
).toBe(true)
})
})

it('should allow example with GitHub URL and example-path', async () => {
await usingTempDir(async (cwd) => {
const projectName = 'github-example-path'
Expand Down

0 comments on commit 7fe5c88

Please sign in to comment.