diff --git a/packages/cli/src/config/extensions/github.test.ts b/packages/cli/src/config/extensions/github.test.ts index 52c7b221d4..a2fb65996d 100644 --- a/packages/cli/src/config/extensions/github.test.ts +++ b/packages/cli/src/config/extensions/github.test.ts @@ -136,8 +136,12 @@ describe('github.ts', () => { expect(tryParseGithubUrl(url)).toEqual({ owner, repo }); }); - it('should return null for non-GitHub URLs', () => { - expect(tryParseGithubUrl('https://gitlab.com/owner/repo')).toBeNull(); + it.each([ + 'https://gitlab.com/owner/repo', + 'https://my-git-host.com/owner/group/repo', + 'git@gitlab.com:some-group/some-project/some-repo.git', + ])('should return null for non-GitHub URLs', (url) => { + expect(tryParseGithubUrl(url)).toBeNull(); }); it('should throw for invalid formats', () => { diff --git a/packages/cli/src/config/extensions/github.ts b/packages/cli/src/config/extensions/github.ts index 187e790f2a..b86f680853 100644 --- a/packages/cli/src/config/extensions/github.ts +++ b/packages/cli/src/config/extensions/github.ts @@ -84,9 +84,15 @@ export interface GithubRepoInfo { } export function tryParseGithubUrl(source: string): GithubRepoInfo | null { - // First step in normalizing a github ssh URI to the https form. - if (source.startsWith('git@github.com:')) { - source = source.replace('git@github.com:', ''); + // Handle SCP-style SSH URLs. + if (source.startsWith('git@')) { + if (source.startsWith('git@github.com:')) { + // It's a GitHub SSH URL, so normalize it for the URL parser. + source = source.replace('git@github.com:', ''); + } else { + // It's another provider's SSH URL (e.g., gitlab), so not a GitHub repo. + return null; + } } // Default to a github repo path, so `source` can be just an org/repo const parsedUrl = URL.parse(source, 'https://github.com');