fix: cannot download oci artifact on windows (#473)
Co-authored-by: rick <LinuxSuRen@users.noreply.github.com>
This commit is contained in:
parent
0cc0bb8be1
commit
485dffc8ea
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
})
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue