coder / backstage-plugins

Official Coder plugins for the Backstage platform
41 stars 3 forks source link

Auto-cloning a Gitlab repo fails with "unable to update url base from redirection" #144

Open paulm-jones opened 1 month ago

paulm-jones commented 1 month ago

Background

My organisation is exploring Coder with the Backstage plugin and Gitlab.com (Gitlab SaaS, i.e. not self-hosted).

In Backstage, before creating anything, the plugin shows:

No workspaces found for repo https://gitlab.com/myorg/myrepo/-/blob/main/?ref_type=heads

We see #117 and the fact a change was made, and also that a merge was made to the git clone module in PR 210, but we are yet to be able to make it work.

Challenge

With a template that auto-clones, for example using the git_clone module:

data "coder_parameter" "repo_url" {
    name                = "repo_url"
    display_name  = "Git repository"
}

module "git_clone" {
  source     = "registry.coder.com/modules/git-clone/coder"
  version   = "1.0.18"
  agent_id = coder_agent.main.id
  url     = data.coder_parameter.repo_url.value
}

We see the clone fail after redirection:

Cloning https://gitlab.com/myorg/myrepo/-/blob/main/ to /home/coder/main...
Cloning into '/home/coder/main'...

fatal: unable to update url base from redirection:
  asked for: https://gitlab.com/myorg/myrepo/-/blob/main/info/refs?service=git-upload-pack
   redirect: https://gitlab.com/groups/myorg/-/saml/sso?redirect=%2Fmyorg%2Fmyrepo%2F-%2Fblob%2Fmain%2Finfo%2Frefs%3Fservice%3Dgit-upload-pack&token=<token>

We enforce single sign-on, which may explain the saml/sso redirection.

Alternatives

If we do not "auto-clone", and instead try and clone from the Workspace template directly (providing "Git repository" in the GUI), providing "https://gitlab.com/myorg/myrepo", then it works.

The downside is that the Backstage plugin won't "match" the Workspace as being related to the Backstage entity (presumably because we omitted the -/blob/main/?ref_type=heads suffix).

Has anyone been able to make this work with Gitlab yet please?

code-asher commented 3 weeks ago

Maybe because the git-clone module is not handling blob? It seems to only handle tree. I wonder if you could work around it like:

module "git_clone" {
  url = replace(data.coder_parameter.repo_url.value, "/blob/", "/tree/")
}

Although, I am not familiar enough with GitLab to know if blob and tree are equivalent.