support giving a github repo URL with a trailing slash (#10360)

This commit is contained in:
Jacob MacDonald
2025-10-02 07:34:23 -07:00
committed by GitHub
parent aa8b2abe3d
commit ebbfcda762
2 changed files with 13 additions and 2 deletions

View File

@@ -292,13 +292,20 @@ describe('git extension helpers', () => {
expect(repo).toBe('repo');
});
it('should parse owner and repo from a full GitHub UR without .git', () => {
it('should parse owner and repo from a full GitHub URL without .git', () => {
const source = 'https://github.com/owner/repo';
const { owner, repo } = parseGitHubRepoForReleases(source);
expect(owner).toBe('owner');
expect(repo).toBe('repo');
});
it('should parse owner and repo from a full GitHub URL with a trailing slash', () => {
const source = 'https://github.com/owner/repo/';
const { owner, repo } = parseGitHubRepoForReleases(source);
expect(owner).toBe('owner');
expect(repo).toBe('repo');
});
it('should fail on a GitHub SSH URL', () => {
const source = 'git@github.com:owner/repo.git';
expect(() => parseGitHubRepoForReleases(source)).toThrow(

View File

@@ -85,7 +85,11 @@ export function parseGitHubRepoForReleases(source: string): {
// Default to a github repo path, so `source` can be just an org/repo
const parsedUrl = URL.parse(source, 'https://github.com');
// The pathname should be "/owner/repo".
const parts = parsedUrl?.pathname.substring(1).split('/');
const parts = parsedUrl?.pathname
.substring(1)
.split('/')
// Remove the empty segments, fixes trailing slashes
.filter((part) => part !== '');
if (parts?.length !== 2 || parsedUrl?.host !== 'github.com') {
throw new Error(
`Invalid GitHub repository source: ${source}. Expected "owner/repo" or a github repo uri.`,