Skip to content

Commit 485dffc

Browse files
authored
fix: cannot download oci artifact on windows (#473)
Co-authored-by: rick <[email protected]>
1 parent 0cc0bb8 commit 485dffc

File tree

5 files changed

+62
-36
lines changed

5 files changed

+62
-36
lines changed

.github/workflows/build.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,3 +154,6 @@ jobs:
154154
if: runner.os != 'Windows'
155155
run: |
156156
make desktop-package desktop-make desktop-test
157+
- name: Test extension cmd
158+
run: |
159+
./console/atest-desktop/atest extension git

pkg/downloader/oci.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -210,11 +210,13 @@ func (d *defaultOCIDownloader) downloadLayer(image, digest, authToken string) (r
210210
func getRegistry(image string) string {
211211
segs := strings.Split(image, "/")
212212
if len(segs) == 1 || len(segs) == 2 || segs[0] == "docker.io" {
213-
return "registry-1.docker.io"
213+
return DockerHubRegistry
214214
}
215215
return segs[0]
216216
}
217217

218+
const DockerHubRegistry = "registry-1.docker.io"
219+
218220
func detectAuthURL(protocol, image string) (authURL string, service string, err error) {
219221
registry := getRegistry(image)
220222
detectURL := fmt.Sprintf("%s://%s/v2/", protocol, registry)

pkg/downloader/oci_test.go

Lines changed: 43 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,9 @@ import (
2828
)
2929

3030
func TestGetRegistry(t *testing.T) {
31-
assert.Equal(t, "registry-1.docker.io", getRegistry("alpine"))
32-
assert.Equal(t, "registry-1.docker.io", getRegistry("library/alpine"))
33-
assert.Equal(t, "registry-1.docker.io", getRegistry("docker.io/library/alpine"))
31+
assert.Equal(t, DockerHubRegistry, getRegistry("alpine"))
32+
assert.Equal(t, DockerHubRegistry, getRegistry("library/alpine"))
33+
assert.Equal(t, DockerHubRegistry, getRegistry("docker.io/library/alpine"))
3434
assert.Equal(t, "ghcr.io", getRegistry("ghcr.io/library/alpine"))
3535
}
3636

@@ -58,43 +58,51 @@ func TestDetectAuthURL(t *testing.T) {
5858
}
5959

6060
func TestDownload(t *testing.T) {
61-
d := NewStoreDownloader()
6261
server := mock.NewInMemoryServer(0)
63-
6462
err := server.Start(mock.NewLocalFileReader("testdata/registry.yaml"), "/v2")
6563
assert.NoError(t, err)
6664
defer func() {
6765
server.Stop()
6866
}()
6967

70-
d.WithRegistry(fmt.Sprintf("127.0.0.1:%s", server.GetPort()))
71-
d.WithInsecure(true)
72-
d.WithBasicAuth("", "")
73-
d.WithRoundTripper(nil)
74-
75-
var reader io.Reader
76-
reader, err = d.Download("git", "", "")
77-
assert.NoError(t, err)
78-
assert.NotNil(t, reader)
79-
80-
// download and verify it
81-
var tmpDownloadDir string
82-
tmpDownloadDir, err = os.MkdirTemp(os.TempDir(), "download")
83-
defer os.RemoveAll(tmpDownloadDir)
84-
assert.NoError(t, err)
85-
86-
err = WriteTo(reader, tmpDownloadDir, "fake.txt")
87-
assert.NoError(t, err)
88-
89-
var data []byte
90-
data, err = os.ReadFile(filepath.Join(tmpDownloadDir, "fake.txt"))
91-
assert.NoError(t, err)
92-
assert.Equal(t, "fake", string(data))
93-
94-
assert.NotEmpty(t, d.GetTargetFile())
95-
96-
t.Run("not found", func(t *testing.T) {
97-
_, err = d.Download("orm", "", "")
98-
assert.Error(t, err)
99-
})
68+
platforms := []string{
69+
"windows", "linux", "darwin",
70+
}
71+
for _, platform := range platforms {
72+
t.Run(fmt.Sprintf("on %s", platform), func(t *testing.T) {
73+
d := NewStoreDownloader()
74+
d.WithRegistry(fmt.Sprintf("127.0.0.1:%s", server.GetPort()))
75+
d.WithInsecure(true)
76+
d.WithOS(platform)
77+
d.WithArch("amd64")
78+
d.WithBasicAuth("", "")
79+
d.WithRoundTripper(nil)
80+
81+
var reader io.Reader
82+
reader, err = d.Download("git", "", "")
83+
assert.NoError(t, err)
84+
assert.NotNil(t, reader)
85+
86+
// download and verify it
87+
var tmpDownloadDir string
88+
tmpDownloadDir, err = os.MkdirTemp(os.TempDir(), "download")
89+
defer os.RemoveAll(tmpDownloadDir)
90+
assert.NoError(t, err)
91+
92+
err = WriteTo(reader, tmpDownloadDir, "fake.txt")
93+
assert.NoError(t, err)
94+
95+
var data []byte
96+
data, err = os.ReadFile(filepath.Join(tmpDownloadDir, "fake.txt"))
97+
assert.NoError(t, err)
98+
assert.Equal(t, "fake", string(data))
99+
100+
assert.NotEmpty(t, d.GetTargetFile())
101+
102+
t.Run("not found", func(t *testing.T) {
103+
_, err = d.Download("orm", "", "")
104+
assert.Error(t, err)
105+
})
106+
})
107+
}
100108
}

pkg/downloader/store.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,9 @@ func NewStoreDownloader() PlatformAwareOCIDownloader {
4343
func (d *storeDownloader) Download(name, tag, _ string) (reader io.Reader, err error) {
4444
name = strings.TrimPrefix(name, "atest-store-")
4545
d.extFile = fmt.Sprintf("atest-store-%s_%s_%s/atest-store-%s", name, d.os, d.arch, name)
46+
if d.os == "windows" {
47+
d.extFile = fmt.Sprintf("%s.exe", d.extFile)
48+
}
4649
image := fmt.Sprintf("linuxsuren/atest-ext-store-%s", name)
4750
reader, err = d.OCIDownloader.Download(image, tag, d.extFile)
4851
return

pkg/downloader/testdata/registry.yaml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,16 @@ items:
3434
"org.opencontainers.image.title": "atest-store-git_linux_amd64_v1/atest-store-git"
3535
},
3636
"digest": "sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7"
37+
}, {
38+
"annotations": {
39+
"org.opencontainers.image.title": "atest-store-git_windows_amd64_v1/atest-store-git.exe"
40+
},
41+
"digest": "sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7"
42+
}, {
43+
"annotations": {
44+
"org.opencontainers.image.title": "atest-store-git_darwin_amd64_v1/atest-store-git"
45+
},
46+
"digest": "sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7"
3747
}]
3848
}
3949
- name: blobs

0 commit comments

Comments
 (0)