Skip to content

Commit

Permalink
Add support for multiple load bases
Browse files Browse the repository at this point in the history
  • Loading branch information
krishicks committed Jan 17, 2018
1 parent 98b1d34 commit 1ef85f0
Show file tree
Hide file tree
Showing 3 changed files with 66 additions and 2 deletions.
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,9 @@ version is the image's digest.
load` before running `docker build`. The directory must have `image`,
`image-id`, `repository`, and `tag` present, i.e. the tree produced by `/in`.

* `load_bases`: *Optional.* Same as `load_base`, but takes an array to load
multiple images.

* `load_file`: *Optional.* A path to a file to `docker load` and then push.
Requires `load_repository`.

Expand Down
10 changes: 10 additions & 0 deletions assets/out
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@ fi
load=$(jq -r '.params.load // ""' < $payload)

load_base=$(jq -r '.params.load_base // ""' < $payload)
load_bases=$(jq -r '.params.load_bases // empty' < $payload)
build=$(jq -r '.params.build // ""' < $payload)
cache=$(jq -r '.params.cache' < $payload)
cache_tag=$(jq -r ".params.cache_tag // \"${tag_name}\"" < $payload)
Expand Down Expand Up @@ -111,6 +112,15 @@ elif [ -n "$build" ]; then
"$(cat "${load_base}/repository"):$(cat "${load_base}/tag")"
fi

if [ -n "$load_bases" ]; then
for load_base in $(echo $load_bases | jq -r '.[]'); do
docker load -i "${load_base}/image"
docker tag \
"$(cat "${load_base}/image-id")" \
"$(cat "${load_base}/repository"):$(cat "${load_base}/tag")"
done
fi

cache_from=""
if [ "$cache" = "true" ]; then
docker_pull "${repository}:${cache_tag}"
Expand Down
55 changes: 53 additions & 2 deletions tests/out_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package docker_image_resource_test
import (
"bytes"
"fmt"
"io/ioutil"
"os/exec"

"encoding/json"
Expand Down Expand Up @@ -105,9 +106,9 @@ var _ = Describe("Out", func() {
It("passes them to dockerd", func() {
session := put(map[string]interface{}{
"source": map[string]interface{}{
"repository": "test",
"repository": "test",
"max_concurrent_downloads": 7,
"max_concurrent_uploads": 1,
"max_concurrent_uploads": 1,
},
"params": map[string]interface{}{
"build": "/docker-image-resource/tests/fixtures/build",
Expand Down Expand Up @@ -247,4 +248,54 @@ var _ = Describe("Out", func() {
Expect(session.Err).To(gbytes.Say(dockerarg(`http_proxy=http://admin:[email protected]:8080`)))
})
})

Context("when load_bases are specified", func() {
BeforeEach(func() {
os.Mkdir("/tmp/expected_base_1", os.ModeDir)
// this image should really be an actual tarball, but the test passes with text. :shrug:
ioutil.WriteFile("/tmp/expected_base_1/image", []byte("some-image-1"), os.ModePerm)
ioutil.WriteFile("/tmp/expected_base_1/repository", []byte("some-repository-1"), os.ModePerm)
ioutil.WriteFile("/tmp/expected_base_1/image-id", []byte("some-image-id-1"), os.ModePerm)
ioutil.WriteFile("/tmp/expected_base_1/tag", []byte("some-tag-1"), os.ModePerm)

os.Mkdir("/tmp/expected_base_2", os.ModeDir)
ioutil.WriteFile("/tmp/expected_base_2/image", []byte("some-image-2"), os.ModePerm)
ioutil.WriteFile("/tmp/expected_base_2/repository", []byte("some-repository-2"), os.ModePerm)
ioutil.WriteFile("/tmp/expected_base_2/image-id", []byte("some-image-id-2"), os.ModePerm)
ioutil.WriteFile("/tmp/expected_base_2/tag", []byte("some-tag-2"), os.ModePerm)

os.Mkdir("/tmp/unexpected_base", os.ModeDir)
ioutil.WriteFile("/tmp/unexpected_base/image", []byte("some-image-3"), os.ModePerm)
ioutil.WriteFile("/tmp/unexpected_base/repository", []byte("some-repository-3"), os.ModePerm)
ioutil.WriteFile("/tmp/unexpected_base/image-id", []byte("some-image-id-3"), os.ModePerm)
ioutil.WriteFile("/tmp/unexpected_base/tag", []byte("some-tag-3"), os.ModePerm)
})

AfterEach(func() {
os.RemoveAll("/tmp/expected_base_1")
os.RemoveAll("/tmp/expected_base_2")
os.RemoveAll("/tmp/unexpected_base")
})

It("passes the arguments correctly to the docker daemon", func() {
session := put(map[string]interface{}{
"source": map[string]interface{}{
"repository": "test",
},
"params": map[string]interface{}{
"build": "/docker-image-resource/tests/fixtures/build",
"load_bases": []string{"expected_base_1", "expected_base_2"},
},
})

Expect(session.Err).To(gbytes.Say(docker(`load -i expected_base_1/image`)))
Expect(session.Err).To(gbytes.Say(docker(`tag some-image-id-1 some-repository-1:some-tag-1`)))

Expect(session.Err).To(gbytes.Say(docker(`load -i expected_base_2/image`)))
Expect(session.Err).To(gbytes.Say(docker(`tag some-image-id-2 some-repository-2:some-tag-2`)))

Expect(session.Err).NotTo(gbytes.Say(docker(`load -i unexpected_base/image`)))
Expect(session.Err).NotTo(gbytes.Say(docker(`tag some-image-id-3 some-repository-3:some-tag-3`)))
})
})
})

0 comments on commit 1ef85f0

Please sign in to comment.