Skip to content

Commit ec6d9a0

Browse files
authored
Merge pull request #35 from seek-oss/inline-dockerfile
2 parents 26a1494 + 51b2dee commit ec6d9a0

File tree

4 files changed

+64
-4
lines changed

4 files changed

+64
-4
lines changed

README.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,23 @@ steps:
8989
- docker#v3.3.0
9090
```
9191

92+
Alternatively, Dockerfile can be embedded inline:
93+
94+
```yaml
95+
steps:
96+
- command: echo wow
97+
plugins:
98+
- seek-oss/docker-ecr-cache#v1.9.0:
99+
dockerfile-inline: |
100+
FROM node:16-alpine
101+
WORKDIR /workdir
102+
COPY package.json package-lock.json /workdir
103+
RUN npm install
104+
105+
106+
- docker#v3.3.0
107+
```
108+
92109
### Specifying a target step
93110

94111
A [multi-stage Docker build] can be used to reduce an application container to

hooks/lib/stdlib.bash

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ compute_tag() {
5151

5252
echoerr 'DOCKERFILE'
5353
echoerr "+ ${docker_file}:${target:-"<target>"}"
54-
sums="$(sha1sum "${docker_file}")"
54+
sums="$(cd ${docker_file_dir}; sha1sum $(basename ${docker_file}))"
5555
sums+="$(echo "${target}" | sha1sum)"
5656

5757
echoerr 'ARCHITECTURE'

hooks/pre-command

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,26 @@ source "$(dirname "${BASH_SOURCE[0]}")/lib/${BUILDKITE_PLUGIN_DOCKER_ECR_CACHE_R
99
login
1010
configure_registry_for_image_if_necessary
1111
image="$(get_registry_url)"
12-
docker_file="${BUILDKITE_PLUGIN_DOCKER_ECR_CACHE_DOCKERFILE:-"Dockerfile"}"
12+
if [ -n "${BUILDKITE_PLUGIN_DOCKER_ECR_CACHE_DOCKERFILE_INLINE:-}" ]
13+
then
14+
[ -n "${BUILDKITE_PLUGIN_DOCKER_ECR_CACHE_DOCKERFILE:-}" ] &&
15+
log_fatal "Cannot specify both 'dockerfile' and 'dockerfile-inline'."
16+
# Put the Dockerfile into a temporary directory to work around
17+
# https://github.com/docker/cli/issues/2249
18+
docker_file_dir="$(mktemp -d)"
19+
docker_file="${docker_file_dir}/Dockerfile"
20+
echo "$BUILDKITE_PLUGIN_DOCKER_ECR_CACHE_DOCKERFILE_INLINE" > "$docker_file"
21+
context_dir="."
22+
else
23+
docker_file="${BUILDKITE_PLUGIN_DOCKER_ECR_CACHE_DOCKERFILE:-"Dockerfile"}"
24+
context_dir="$(dirname "${docker_file}")"
25+
docker_file_dir="${context_dir}"
26+
fi
1327
target="${BUILDKITE_PLUGIN_DOCKER_ECR_CACHE_TARGET:-}"
1428
export_env_variable="${BUILDKITE_PLUGIN_DOCKER_ECR_CACHE_EXPORT_ENV_VARIABLE:-"BUILDKITE_PLUGIN_DOCKER_IMAGE"}"
1529
exec 3>&1
1630
tag="$(compute_tag "${docker_file}" 2>&3)"
17-
docker_file_dir="$(dirname "${docker_file}")"
18-
context="${BUILDKITE_PLUGIN_DOCKER_ECR_CACHE_CONTEXT:-"${docker_file_dir}"}"
31+
context="${BUILDKITE_PLUGIN_DOCKER_ECR_CACHE_CONTEXT:-"${context_dir}"}"
1932

2033
build_args=()
2134
read_build_args

tests/pre-command.bats

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,3 +67,33 @@ pre_command_hook="$PWD/hooks/pre-command"
6767

6868
unstub docker
6969
}
70+
71+
@test "Tags and pushes with inline Dockerfile" {
72+
export BUILDKITE_PLUGIN_DOCKER_ECR_CACHE_REGISTRY_PROVIDER="stub"
73+
export BUILDKITE_PLUGIN_DOCKER_ECR_CACHE_DOCKERFILE_INLINE="FROM stub"
74+
local repository_uri="pretend.host/path/segment/image"
75+
76+
one_time_mktemp=$(mktemp -d)
77+
78+
stub mktemp \
79+
"-d : echo $one_time_mktemp"
80+
81+
stub docker \
82+
"pull * : false" \
83+
"build --file=$one_time_mktemp/Dockerfile * : echo building docker image" \
84+
"tag ${repository_uri}:stubbed-computed-tag ${repository_uri}:latest : echo tagged latest" \
85+
"push ${repository_uri}:stubbed-computed-tag : echo pushed stubbed-computed-tag" \
86+
"push ${repository_uri}:latest : echo pushed latest"
87+
run "${pre_command_hook}"
88+
89+
assert_success
90+
assert_line "--- Pulling image"
91+
assert_line "--- Building image"
92+
assert_line "--- Pushing tag stubbed-computed-tag"
93+
assert_line "--- Pushing tag latest"
94+
95+
assert_equal "FROM stub" "$(cat ${one_time_mktemp}/Dockerfile)"
96+
97+
unstub mktemp
98+
unstub docker
99+
}

0 commit comments

Comments
 (0)