Skip to content

Commit 4bf5360

Browse files
authored
Merge pull request #74 from concourse/image-args-fix
Fix image args that are uppercase
2 parents fc2ecc7 + 22a1715 commit 4bf5360

File tree

3 files changed

+57
-6
lines changed

3 files changed

+57
-6
lines changed

registry.go

+13-6
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,19 @@ import (
55
"io"
66
"net"
77
"net/http"
8+
"strings"
89

910
v1 "github.com/google/go-containerregistry/pkg/v1"
1011
"github.com/google/go-containerregistry/pkg/v1/tarball"
1112
"github.com/julienschmidt/httprouter"
1213
"github.com/sirupsen/logrus"
1314
)
1415

15-
type LocalRegistry map[string]v1.Image
16+
type ImageArg struct {
17+
Image v1.Image
18+
ArgName string
19+
}
20+
type LocalRegistry map[string]ImageArg
1621

1722
func LoadRegistry(imagePaths map[string]string) (LocalRegistry, error) {
1823
images := LocalRegistry{}
@@ -22,7 +27,7 @@ func LoadRegistry(imagePaths map[string]string) (LocalRegistry, error) {
2227
return nil, fmt.Errorf("image from path: %w", err)
2328
}
2429

25-
images[name] = image
30+
images[strings.ToLower(name)] = ImageArg{Image: image, ArgName: name}
2631
}
2732

2833
return images, nil
@@ -57,8 +62,8 @@ func ServeRegistry(reg LocalRegistry) (string, error) {
5762

5863
func (registry LocalRegistry) BuildArgs(port string) []string {
5964
var buildArgs []string
60-
for name := range registry {
61-
buildArgs = append(buildArgs, fmt.Sprintf("%s=localhost:%s/%s", name, port, name))
65+
for name, image := range registry {
66+
buildArgs = append(buildArgs, fmt.Sprintf("%s=localhost:%s/%s", image.ArgName, port, name))
6267
}
6368

6469
return buildArgs
@@ -72,11 +77,12 @@ func (registry LocalRegistry) GetManifest(w http.ResponseWriter, r *http.Request
7277
"accept": r.Header["Accept"],
7378
}).Debugf("get manifest for %s at %s", name, ref)
7479

75-
image, found := registry[name]
80+
img, found := registry[name]
7681
if !found {
7782
w.WriteHeader(http.StatusNotFound)
7883
return
7984
}
85+
image := img.Image
8086

8187
mt, err := image.MediaType()
8288
if err != nil {
@@ -122,11 +128,12 @@ func (registry LocalRegistry) GetBlob(w http.ResponseWriter, r *http.Request, p
122128
"accept": r.Header["Accept"],
123129
}).Debugf("get blob %s", dig)
124130

125-
image, found := registry[name]
131+
img, found := registry[name]
126132
if !found {
127133
w.WriteHeader(http.StatusNotFound)
128134
return
129135
}
136+
image := img.Image
130137

131138
hash, err := v1.NewHash(dig)
132139
if err != nil {

task_test.go

+37
Original file line numberDiff line numberDiff line change
@@ -373,6 +373,43 @@ func (s *TaskSuite) TestImageArgs() {
373373
}
374374
}
375375

376+
func (s *TaskSuite) TestImageArgsWithUppercaseName() {
377+
imagesDir, err := ioutil.TempDir("", "preload-images")
378+
s.NoError(err)
379+
380+
defer os.RemoveAll(imagesDir)
381+
382+
image, err := random.Image(1024, 2)
383+
s.NoError(err)
384+
imagePath := filepath.Join(imagesDir, "first.tar")
385+
err = tarball.WriteToFile(imagePath, nil, image)
386+
s.NoError(err)
387+
388+
s.req.Config.ContextDir = "testdata/image-args"
389+
s.req.Config.DockerfilePath = "testdata/image-args/Dockerfile.uppercase"
390+
s.req.Config.ImageArgs = []string{
391+
"FIRST_IMAGE=" + imagePath,
392+
}
393+
s.req.Config.UnpackRootfs = true
394+
395+
_, err = s.build()
396+
s.NoError(err)
397+
398+
meta, err := s.imageMetadata("image")
399+
s.NoError(err)
400+
401+
rootfsContent, err := ioutil.ReadFile(s.imagePath("rootfs", "Dockerfile.second"))
402+
s.NoError(err)
403+
404+
expectedContent, err := ioutil.ReadFile("testdata/image-args/Dockerfile.uppercase")
405+
s.NoError(err)
406+
407+
s.Equal(rootfsContent, expectedContent)
408+
409+
s.Equal(meta.User, "banana")
410+
s.Equal(meta.Env, []string{"PATH=/darkness", "BA=nana"})
411+
}
412+
376413
func (s *TaskSuite) TestImageArgsUnpack() {
377414
imagesDir, err := ioutil.TempDir("", "preload-images")
378415
s.NoError(err)
+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
ARG FIRST_IMAGE
2+
3+
FROM ${FIRST_IMAGE}
4+
USER banana
5+
ENV PATH=/darkness
6+
ENV BA=nana
7+
COPY Dockerfile.uppercase /Dockerfile.second

0 commit comments

Comments
 (0)