docker / dev-environments

63 stars 32 forks source link

Create a Dev Environment form does not allow Git URLs that do not contain a slash #145

Open jordanbtucker opened 1 year ago

jordanbtucker commented 1 year ago

Description

When using the Create a Dev Environment form, it allows you to use an existing Git repo, however it does not allow you to press the Continue button unless it deems that your Git URL is valid. Unfortunately, the Git URL validation is flawed since it requires that your Git URL contain at least one slash.

For example, the following Git URL is valid, however the Create a Dev Environment form does not consider it to be valid.

git@git.example.com:my-project.git

However, the form does consider the following Git URL to be valid.

git@git.example.com:my-username/my-project.git

Not all Git servers follow the GitHub convention of username/repo paths. My personal Git server does not follow this convention because it only contains my own projects, so there is no need for a username in the path.

Reproduce

  1. Open Docker Desktop.
  2. Select Dev Environments from the menu.
  3. Ensure Existing Git repo is selected.
  4. Enter a valid Git URL that does not contain a slash. (e.g. git@git.example.com:my-project.git)
  5. Note that the Continue button is disabled.
  6. Enter a valid Git URL that does contain a slash. (e.g. git@git.example.com:my-username/my-project.git)
  7. Note that the Continue button is enabled.

Expected behavior

The Create a Dev Environment form should validate Git URLs correctly. Specifically, it should allow valid Git URLs that do not contain a slash.

docker version

Client:
 Cloud integration: v1.0.35-desktop+001
 Version:           24.0.5
 API version:       1.43
 Go version:        go1.20.6
 Git commit:        ced0996
 Built:             Fri Jul 21 20:36:24 2023
 OS/Arch:           windows/amd64
 Context:           default

Server: Docker Desktop 4.22.1 (118664)
 Engine:
  Version:          24.0.5
  API version:      1.43 (minimum version 1.12)
  Go version:       go1.20.6
  Git commit:       a61e2b4
  Built:            Fri Jul 21 20:35:45 2023
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.6.21
  GitCommit:        3dce8eb055cbb6872793272b4f20ed16117344f8
 runc:
  Version:          1.1.7
  GitCommit:        v1.1.7-0-g860f061
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

docker info

Client:
 Version:    24.0.5
 Context:    default
 Debug Mode: false
 Plugins:
  buildx: Docker Buildx (Docker Inc.)
    Version:  v0.11.2-desktop.1
    Path:     C:\Program Files\Docker\cli-plugins\docker-buildx.exe
  compose: Docker Compose (Docker Inc.)
    Version:  v2.20.2-desktop.1
    Path:     C:\Program Files\Docker\cli-plugins\docker-compose.exe
  dev: Docker Dev Environments (Docker Inc.)
    Version:  v0.1.0
    Path:     C:\Program Files\Docker\cli-plugins\docker-dev.exe
  extension: Manages Docker extensions (Docker Inc.)
    Version:  v0.2.20
    Path:     C:\Program Files\Docker\cli-plugins\docker-extension.exe
  init: Creates Docker-related starter files for your project (Docker Inc.)
    Version:  v0.1.0-beta.6
    Path:     C:\Program Files\Docker\cli-plugins\docker-init.exe
  sbom: View the packaged-based Software Bill Of Materials (SBOM) for an image (Anchore Inc.)
    Version:  0.6.0
    Path:     C:\Program Files\Docker\cli-plugins\docker-sbom.exe
  scan: Docker Scan (Docker Inc.)
    Version:  v0.26.0
    Path:     C:\Program Files\Docker\cli-plugins\docker-scan.exe
  scout: Command line tool for Docker Scout (Docker Inc.)
    Version:  0.20.0
    Path:     C:\Program Files\Docker\cli-plugins\docker-scout.exe

Server:
 Containers: 0
  Running: 0
  Paused: 0
  Stopped: 0
 Images: 0
 Server Version: 24.0.5
 Storage Driver: overlay2
  Backing Filesystem: extfs
  Supports d_type: true
  Using metacopy: false
  Native Overlay Diff: true
  userxattr: false
 Logging Driver: json-file
 Cgroup Driver: cgroupfs
 Cgroup Version: 1
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
 Swarm: inactive
 Runtimes: io.containerd.runc.v2 runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 3dce8eb055cbb6872793272b4f20ed16117344f8
 runc version: v1.1.7-0-g860f061
 init version: de40ad0
 Security Options:
  seccomp
   Profile: unconfined
 Kernel Version: 5.15.90.1-microsoft-standard-WSL2
 Operating System: Docker Desktop
 OSType: linux
 Architecture: x86_64
 CPUs: 16
 Total Memory: 15.59GiB
 Name: docker-desktop
 ID: 977a93cb-dd8e-40af-8649-6da6a5ddb95e
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 HTTP Proxy: http.docker.internal:3128
 HTTPS Proxy: http.docker.internal:3128
 No Proxy: hubproxy.docker.internal
 Experimental: false
 Insecure Registries:
  hubproxy.docker.internal:5555
  127.0.0.0/8
 Live Restore Enabled: false

WARNING: No blkio throttle.read_bps_device support
WARNING: No blkio throttle.write_bps_device support
WARNING: No blkio throttle.read_iops_device support
WARNING: No blkio throttle.write_iops_device support
WARNING: daemon is not using the default seccomp profile

Diagnostics ID

F97CE84A-FE0C-4C8E-9AD8-DC238027E97A/20230911015842

Additional Info

git@git.example.com:my-project.git is a valid Git URL in syntax only. It does not actually point to an existing Git repo.

jordanbtucker commented 1 year ago

Actually, the rabbit hole goes deeper. Technically git@git.example.com:my-project.git is not a Git URL. It's more like an scp source. However, git clone accepts it as a repository source.

The Create a Dev Environment form says that you should be able to provide an HTTPS or SSH URL, however when I do use a valid SSH URL (e.g. ssh://git@git.example.com/~/my-project.git), Docker Desktop just hangs during the Setup step.

Preparing to clone inside a volume
Installing credential helpers... 
done
Cloning into '/com.docker.devenvironments.code'...

Granted, ssh://git@git.example.com/~/my-project.git does not point to an existing Git repo. I'm just using it to demonstrate the type of URL I'm using to access my personal Git server. In my tests, I'm using real sources that work with git clone.

Here's the types of strings I've provided to the Create a Dev Environment form, none of which work with the form, but they do work with git clone.

I have found no way to access the Git repos in my personal Git server via this form.

My best advice would be to stop trying to do stuff with the provided URL, and just pass it to git clone. Or, at the very least, stop assuming everyone is only pulling from GitHub.

lorenrh commented 1 year ago

Hi, thanks for the report! I'll be transferring this issue to the dev environments issue tracker!