fix: cannot download oci artifact on windows (#473)

Co-authored-by: rick <LinuxSuRen@users.noreply.github.com>
This commit is contained in:
Rick 2024-06-04 14:33:41 +08:00 committed by GitHub
parent 0cc0bb8be1
commit 485dffc8ea
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 56 additions and 30 deletions

View File

@ -154,3 +154,6 @@ jobs:
if: runner.os != 'Windows'
run: |
make desktop-package desktop-make desktop-test
- name: Test extension cmd
run: |
./console/atest-desktop/atest extension git

View File

@ -210,11 +210,13 @@ func (d *defaultOCIDownloader) downloadLayer(image, digest, authToken string) (r
func getRegistry(image string) string {
segs := strings.Split(image, "/")
if len(segs) == 1 || len(segs) == 2 || segs[0] == "docker.io" {
return "registry-1.docker.io"
return DockerHubRegistry
}
return segs[0]
}
const DockerHubRegistry = "registry-1.docker.io"
func detectAuthURL(protocol, image string) (authURL string, service string, err error) {
registry := getRegistry(image)
detectURL := fmt.Sprintf("%s://%s/v2/", protocol, registry)

View File

@ -28,9 +28,9 @@ import (
)
func TestGetRegistry(t *testing.T) {
assert.Equal(t, "registry-1.docker.io", getRegistry("alpine"))
assert.Equal(t, "registry-1.docker.io", getRegistry("library/alpine"))
assert.Equal(t, "registry-1.docker.io", getRegistry("docker.io/library/alpine"))
assert.Equal(t, DockerHubRegistry, getRegistry("alpine"))
assert.Equal(t, DockerHubRegistry, getRegistry("library/alpine"))
assert.Equal(t, DockerHubRegistry, getRegistry("docker.io/library/alpine"))
assert.Equal(t, "ghcr.io", getRegistry("ghcr.io/library/alpine"))
}
@ -58,43 +58,51 @@ func TestDetectAuthURL(t *testing.T) {
}
func TestDownload(t *testing.T) {
d := NewStoreDownloader()
server := mock.NewInMemoryServer(0)
err := server.Start(mock.NewLocalFileReader("testdata/registry.yaml"), "/v2")
assert.NoError(t, err)
defer func() {
server.Stop()
}()
d.WithRegistry(fmt.Sprintf("127.0.0.1:%s", server.GetPort()))
d.WithInsecure(true)
d.WithBasicAuth("", "")
d.WithRoundTripper(nil)
platforms := []string{
"windows", "linux", "darwin",
}
for _, platform := range platforms {
t.Run(fmt.Sprintf("on %s", platform), func(t *testing.T) {
d := NewStoreDownloader()
d.WithRegistry(fmt.Sprintf("127.0.0.1:%s", server.GetPort()))
d.WithInsecure(true)
d.WithOS(platform)
d.WithArch("amd64")
d.WithBasicAuth("", "")
d.WithRoundTripper(nil)
var reader io.Reader
reader, err = d.Download("git", "", "")
assert.NoError(t, err)
assert.NotNil(t, reader)
var reader io.Reader
reader, err = d.Download("git", "", "")
assert.NoError(t, err)
assert.NotNil(t, reader)
// download and verify it
var tmpDownloadDir string
tmpDownloadDir, err = os.MkdirTemp(os.TempDir(), "download")
defer os.RemoveAll(tmpDownloadDir)
assert.NoError(t, err)
// download and verify it
var tmpDownloadDir string
tmpDownloadDir, err = os.MkdirTemp(os.TempDir(), "download")
defer os.RemoveAll(tmpDownloadDir)
assert.NoError(t, err)
err = WriteTo(reader, tmpDownloadDir, "fake.txt")
assert.NoError(t, err)
err = WriteTo(reader, tmpDownloadDir, "fake.txt")
assert.NoError(t, err)
var data []byte
data, err = os.ReadFile(filepath.Join(tmpDownloadDir, "fake.txt"))
assert.NoError(t, err)
assert.Equal(t, "fake", string(data))
var data []byte
data, err = os.ReadFile(filepath.Join(tmpDownloadDir, "fake.txt"))
assert.NoError(t, err)
assert.Equal(t, "fake", string(data))
assert.NotEmpty(t, d.GetTargetFile())
assert.NotEmpty(t, d.GetTargetFile())
t.Run("not found", func(t *testing.T) {
_, err = d.Download("orm", "", "")
assert.Error(t, err)
})
t.Run("not found", func(t *testing.T) {
_, err = d.Download("orm", "", "")
assert.Error(t, err)
})
})
}
}

View File

@ -43,6 +43,9 @@ func NewStoreDownloader() PlatformAwareOCIDownloader {
func (d *storeDownloader) Download(name, tag, _ string) (reader io.Reader, err error) {
name = strings.TrimPrefix(name, "atest-store-")
d.extFile = fmt.Sprintf("atest-store-%s_%s_%s/atest-store-%s", name, d.os, d.arch, name)
if d.os == "windows" {
d.extFile = fmt.Sprintf("%s.exe", d.extFile)
}
image := fmt.Sprintf("linuxsuren/atest-ext-store-%s", name)
reader, err = d.OCIDownloader.Download(image, tag, d.extFile)
return

View File

@ -34,6 +34,16 @@ items:
"org.opencontainers.image.title": "atest-store-git_linux_amd64_v1/atest-store-git"
},
"digest": "sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7"
}, {
"annotations": {
"org.opencontainers.image.title": "atest-store-git_windows_amd64_v1/atest-store-git.exe"
},
"digest": "sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7"
}, {
"annotations": {
"org.opencontainers.image.title": "atest-store-git_darwin_amd64_v1/atest-store-git"
},
"digest": "sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7"
}]
}
- name: blobs