diff --git a/packages/client-runtime/src/operations/projects.test.ts b/packages/client-runtime/src/operations/projects.test.ts index 4b29e67a2176..8c74e6a8bbe5 100644 --- a/packages/client-runtime/src/operations/projects.test.ts +++ b/packages/client-runtime/src/operations/projects.test.ts @@ -83,16 +83,24 @@ describe("add project shared logic", () => { sshUrl: "ssh://git@forgejo.example.test:2222/owner/repo.git", }), ).toBe("https://forgejo.example.test:8443/owner/repo.git"); + expect( + getDefaultCloneUrl({ + provider: "gitlab", + // The lookup returns GitLab's web_url here, which git clones as well. + url: "https://gitlab.com/group/project", + sshUrl: "git@gitlab.com:group/project.git", + }), + ).toBe("https://gitlab.com/group/project"); }); it("preserves existing clone transport behavior for other providers", () => { expect( getDefaultCloneUrl({ - provider: "gitlab", - url: "https://gitlab.com/group/project.git", - sshUrl: "git@gitlab.com:group/project.git", + provider: "bitbucket", + url: "https://bitbucket.org/workspace/repo.git", + sshUrl: "git@bitbucket.org:workspace/repo.git", }), - ).toBe("git@gitlab.com:group/project.git"); + ).toBe("git@bitbucket.org:workspace/repo.git"); }); it("derives the clone folder name from any pasted clone URL", () => { diff --git a/packages/client-runtime/src/operations/projects.ts b/packages/client-runtime/src/operations/projects.ts index ec03ea86dce1..873e2a854dcc 100644 --- a/packages/client-runtime/src/operations/projects.ts +++ b/packages/client-runtime/src/operations/projects.ts @@ -123,11 +123,16 @@ export function normalizePastedCloneUrl(input: string): string { return `https://github.com/${repository}`; } -/** GitHub and Forgejo default to HTTPS; other providers retain their existing SSH default. */ +/** + * GitHub, GitLab, and Forgejo default to HTTPS: their CLIs install a Git credential helper on + * sign-in, while SSH needs a separately registered key. Other providers keep their SSH default. + */ export function getDefaultCloneUrl( repository: Pick, ): string { - return repository.provider === "github" || repository.provider === "forgejo" + return repository.provider === "github" || + repository.provider === "gitlab" || + repository.provider === "forgejo" ? repository.url : repository.sshUrl; }