Skip to content

Clone from URL and publish a local repo in add-project #459

Closed

Description

@currentbits

What Synara and T3 do

Synara 0.6.7 added GitHub project import to the create-project dialog: paste a URL or owner/repo, clone through the user's gh access, validate the destination name, show progress, reuse a compatible checkout, cancel, and recover if interrupted.

T3 Code's command palette Add Project clones from GitHub / GitLab / Bitbucket / Azure DevOps or any git URL, and Publish Repository creates a hosted remote for a local repo that has no origin (docs). If the local repo has no commits yet, publish wires the remote and does not push.

Solenta today

addProject (electron/services.js) requires an existing local directory that is already a git work tree. createProject is mkdir + git init in a chosen parent. There is no clone-from-URL path and no publish-this-folder-to-GitHub path.

Why it matters

"I have a GitHub URL and I want a Solenta project" is the first-run action for anyone who does not already live in a local checkout. Right now they leave the app, clone in a terminal, come back, and pick the folder. Synara and T3 both closed that loop. Publish is the inverse: a local experiment with no remote should not require a trip to github.com/new.

Scope suggestion

One extra field on add-project: URL or owner/repo. Clone with gh repo clone when GitHub, plain git clone otherwise. Destination defaults to a sibling of the last project. Publish is a later button on a project with no origin: gh repo create + set remote + optional first push. Pair with #193 / Bitbucket+ADO so the clone source is not GitHub-only forever.

Round-19 leftover, filed in round 20.

Activity

  1. currentbits commented on Aug 20, 2026

    @currentbits
    OwnerAuthor

    Verified T3's implementation against a fresh clone of pingdotgg/t3code @ beab6886 — worth copying the shape, it is smaller than it looks:

    Two steps, no dialog. AddProjectCloneFlow is {step: "repository"} -> {step: "confirm"} (packages/client-runtime/src/operations/projects.ts:43). Step 1 takes owner/repo (per-provider hint: group/project, workspace/repository, project/repository) or a raw URL. Step 2 is the same path input as manual add-project, with the repo folder pinned onto the browsed path so the destination reads <parent>/<repo> live — see #609, which is the prerequisite.

    Lookup before clone. For a known provider it resolves the repo first: gh repo view <repo> --json nameWithOwner,url,sshUrl (apps/server/src/sourceControl/GitHubCli.ts:418), then defaults the remote to sshUrl (selectRemoteUrl, protocol auto -> ssh). This catches a typo'd repo before any clone starts and gives the folder name from the canonical nameWithOwner, not from what the user typed. For a pasted URL there is no lookup — the folder name is parsed off the URL (getCloneDirectoryName, handles git@host:o/r.git, ssh://host:22/o/r, query, fragment, trailing slash, and returns "" for a host-only URL so the destination falls back to the browsed folder).

    Clone is plain git, not gh repo clone. git clone <remoteUrl> <dirname> run with cwd = the parent dir, 120 s timeout, 256 KB output cap (SourceControlRepositoryService.ts:206). Destination guard: must not exist, or exist and be empty; parent is mkdir -p'd. On success the resulting cwd goes through the ordinary add-project path — cloning is a pre-step, the project record is still just a directory.

    Publish is the mirror. gh repo create <name> --private|--public -> ensureRemote(origin) -> push current branch. The nice detail: it checks git rev-parse --verify HEAD first, and a repo with no commits returns status: "remote_added" (remote created and wired, nothing pushed) instead of failing with git's opaque src refspec HEAD does not match any (SourceControlRepositoryService.ts:221-275).

    Gating. The source list is built from live provider readiness, not config — unavailable providers render with their install hint, unauthenticated ones with their login hint, ready ones sort first. That is #608.

  2. currentbits commented on Oct 9, 2026

    @currentbits
    OwnerAuthor

    Gap pass #1532 checked this against main @24d3c36b (v0.24.0). Cloning from a URL shipped in 8d6932b (#1506): https or ssh git clone with progress, cancel and cleanup on failure (electron/projectClone.js:93-151), plus a clone mode in the add-project dialog.

    Still missing, so keeping this open:

    • Publish: no gh repo create, remote setup or first push.
    • owner/repo shorthand is rejected (projectClone.js:40-51).
    • No GitHub lookup before cloning.
  3. currentbits commented on Oct 9, 2026

    @currentbits
    OwnerAuthor

    2026-10-09 board cleanup (#1532): clone from URL shipped in 0.24.0 (electron/projectClone.js). This issue now covers only the remaining half, Publish repository (create the GitHub repo from a local folder and push). That should use the GitHub API transport from #1528 when it lands.

  4. added and removed on Oct 19, 2026
  5. currentbits commented on Oct 19, 2026

    @currentbits
    OwnerAuthor

    Clone half is in PR #1691: owner/repo shorthand, gh repo clone when gh is signed in (git over https otherwise), an existing checkout of the same repo is added instead of refused, and the destination defaults next to the selected project. Publish already shipped as #456 in #1684. Not included: resuming an interrupted clone.

  6. added and removed on Oct 19, 2026
  7. currentbits commented on Oct 19, 2026

    @currentbits
    OwnerAuthor

    Landed from Solenta thread "Clone from URL and publish a local repo in add-project" (PR #1691). Closed on merge.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions