Skip to content

Commit

Permalink
Merge pull request #307 from vanstee/optional-compose-file-version
Browse files Browse the repository at this point in the history
Support omitting compose file version
  • Loading branch information
pzeballos authored Oct 3, 2022
2 parents 746388d + d460a79 commit 4d20d26
Show file tree
Hide file tree
Showing 5 changed files with 44 additions and 31 deletions.
52 changes: 26 additions & 26 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ The following pipeline will run `test.sh` inside a `app` service container using
steps:
- command: test.sh
plugins:
- docker-compose#v3.13.0:
- docker-compose#v4.0.0:
run: app
```
Expand All @@ -28,7 +28,7 @@ through if you need:
steps:
- command: test.sh
plugins:
- docker-compose#v3.13.0:
- docker-compose#v4.0.0:
run: app
config: docker-compose.tests.yml
env:
Expand All @@ -41,7 +41,7 @@ or multiple config files:
steps:
- command: test.sh
plugins:
- docker-compose#v3.13.0:
- docker-compose#v4.0.0:
run: app
config:
- docker-compose.yml
Expand All @@ -56,7 +56,7 @@ env:
steps:
- command: test.sh
plugins:
- docker-compose#v3.13.0:
- docker-compose#v4.0.0:
run: app
```

Expand All @@ -65,7 +65,7 @@ If you want to control how your command is passed to docker-compose, you can use
```yml
steps:
- plugins:
- docker-compose#v3.13.0:
- docker-compose#v4.0.0:
run: app
command: ["custom", "command", "values"]
```
Expand All @@ -79,15 +79,15 @@ steps:
- plugins:
- docker-login#v2.0.1:
username: xyz
- docker-compose#v3.13.0:
- docker-compose#v4.0.0:
build: app
image-repository: index.docker.io/myorg/myrepo
- wait
- command: test.sh
plugins:
- docker-login#v2.0.1:
username: xyz
- docker-compose#v3.13.0:
- docker-compose#v4.0.0:
run: app
```

Expand All @@ -104,7 +104,7 @@ steps:
- command: generate-dist.sh
artifact_paths: "dist/*"
plugins:
- docker-compose#v3.13.0:
- docker-compose#v4.0.0:
run: app
```

Expand All @@ -122,7 +122,7 @@ steps:
- command: generate-dist.sh
artifact_paths: "dist/*"
plugins:
- docker-compose#v3.13.0:
- docker-compose#v4.0.0:
run: app
volumes:
- "./dist:/app/dist"
Expand All @@ -145,7 +145,7 @@ this plugin offers a `environment` block of its own:
steps:
- command: generate-dist.sh
plugins:
- docker-compose#v3.13.0:
- docker-compose#v4.0.0:
run: app
env:
- BUILDKITE_BUILD_NUMBER
Expand All @@ -165,7 +165,7 @@ Alternatively, if you want to set build arguments when pre-building an image, th
steps:
- command: generate-dist.sh
plugins:
- docker-compose#v3.13.0:
- docker-compose#v4.0.0:
build: app
image-repository: index.docker.io/myorg/myrepo
args:
Expand All @@ -182,7 +182,7 @@ If you have multiple steps that use the same service/image (such as steps that r
steps:
- label: ":docker: Build"
plugins:
- docker-compose#v3.13.0:
- docker-compose#v4.0.0:
build: app
image-repository: index.docker.io/myorg/myrepo
Expand All @@ -192,7 +192,7 @@ steps:
command: test.sh
parallelism: 25
plugins:
- docker-compose#v3.13.0:
- docker-compose#v4.0.0:
run: app
```

Expand All @@ -208,7 +208,7 @@ steps:
agents:
queue: docker-builder
plugins:
- docker-compose#v3.13.0:
- docker-compose#v4.0.0:
build:
- app
- tests
Expand All @@ -220,7 +220,7 @@ steps:
command: test.sh
parallelism: 25
plugins:
- docker-compose#v3.13.0:
- docker-compose#v4.0.0:
run: tests
```

Expand All @@ -232,7 +232,7 @@ If you want to push your Docker images ready for deployment, you can use the `pu
steps:
- label: ":docker: Push"
plugins:
- docker-compose#v3.13.0:
- docker-compose#v4.0.0:
push: app
```

Expand All @@ -242,7 +242,7 @@ To push multiple images, you can use a list:
steps:
- label: ":docker: Push"
plugins:
- docker-compose#v3.13.0:
- docker-compose#v4.0.0:
push:
- first-service
- second-service
Expand All @@ -254,7 +254,7 @@ If you want to push to a specific location (that's not defined as the `image` in
steps:
- label: ":docker: Push"
plugins:
- docker-compose#v3.13.0:
- docker-compose#v4.0.0:
push:
- app:index.docker.io/myorg/myrepo/myapp
- app:index.docker.io/myorg/myrepo/myapp:latest
Expand All @@ -268,14 +268,14 @@ A newly spawned agent won't contain any of the docker caches for the first run w
steps:
- label: ":docker: Build an image"
plugins:
- docker-compose#v3.13.0:
- docker-compose#v4.0.0:
build: app
image-repository: index.docker.io/myorg/myrepo
cache-from: app:index.docker.io/myorg/myrepo/myapp:latest
- wait
- label: ":docker: Push to final repository"
plugins:
- docker-compose#v3.13.0:
- docker-compose#v4.0.0:
push:
- app:index.docker.io/myorg/myrepo/myapp
- app:index.docker.io/myorg/myrepo/myapp:latest
Expand All @@ -289,7 +289,7 @@ This plugin allows for the value of `cache-from` to be a string or a list. If it
steps:
- label: ":docker Build an image"
plugins:
- docker-compose#v3.13.0:
- docker-compose#v4.0.0:
build: app
image-repository: index.docker.io/myorg/myrepo
cache-from:
Expand All @@ -298,7 +298,7 @@ steps:
- wait
- label: ":docker: Push to final repository"
plugins:
- docker-compose#v3.13.0:
- docker-compose#v4.0.0:
push:
- app:index.docker.io/myorg/myrepo/myapp
- app:index.docker.io/myorg/myrepo/myapp:my-branch
Expand All @@ -312,7 +312,7 @@ Adding a grouping tag to the end of a cache-from list item allows this plugin to
steps:
- label: ":docker: Build Intermediate Image"
plugins:
- docker-compose#v3.13.0:
- docker-compose#v4.0.0:
build: myservice_intermediate # docker-compose.yml is the same as myservice but has `target: intermediate`
image-name: buildkite-build-${BUILDKITE_BUILD_NUMBER}
image-repository: index.docker.io/myorg/myrepo/myservice_intermediate
Expand All @@ -322,7 +322,7 @@ steps:
- wait
- label: ":docker: Build Final Image"
plugins:
- docker-compose#v3.13.0:
- docker-compose#v4.0.0:
build: myservice
image-name: buildkite-build-${BUILDKITE_BUILD_NUMBER}
image-repository: index.docker.io/myorg/myrepo
Expand Down Expand Up @@ -366,7 +366,7 @@ A basic pipeline similar to the following:
steps:
- label: ":docker: Run & Push"
plugins:
- docker-compose#v3.13.0:
- docker-compose#v4.0.0:
run: myservice
push: myservice
```
Expand All @@ -381,7 +381,7 @@ A basic pipeline similar to the following:
steps:
- label: ":docker: Build & Push"
plugins:
- docker-compose#v3.13.0:
- docker-compose#v4.0.0:
build: myservice
push: myservice
```
Expand Down
9 changes: 6 additions & 3 deletions lib/shared.bash
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@ function build_image_override_file() {
# Checks that a specific version of docker-compose supports cache_from
function docker_compose_supports_cache_from() {
local version="$1"
if [[ -z "$version" || "$version" == 1* || "$version" =~ ^(2|3)(\.[01])?$ ]] ; then
if [[ "$version" == 1* || "$version" =~ ^(2|3)(\.[01])?$ ]] ; then
return 1
fi
}
Expand All @@ -138,14 +138,17 @@ function docker_compose_supports_cache_from() {
function build_image_override_file_with_version() {
local version="$1"

if [[ -z "$version" ]]; then
if [[ "$version" == 1* ]] ; then
echo "The 'build' option can only be used with Compose file versions 2.0 and above."
echo "For more information on Docker Compose configuration file versions, see:"
echo "https://docs.docker.com/compose/compose-file/compose-versioning/#versioning"
exit 1
fi

printf "version: '%s'\\n" "$version"
if [[ -n "$version" ]]; then
printf "version: '%s'\\n" "$version"
fi

printf "services:\\n"

shift
Expand Down
2 changes: 2 additions & 0 deletions tests/composefiles/docker-compose.no-version.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
helloworld:
build: .
3 changes: 2 additions & 1 deletion tests/composefiles/docker-compose.v1.0.yml
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
helloworld:
build: .
build: .
version: '1.0'
9 changes: 8 additions & 1 deletion tests/docker-compose-config.bats
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,13 @@ load '../lib/shared'
assert_output "2.1"
}

@test "Read version from docker-compose file with empty version" {
export BUILDKITE_PLUGIN_DOCKER_COMPOSE_CONFIG="tests/composefiles/docker-compose.no-version.yml"
run docker_compose_config_version
assert_success
assert_output ""
}

@test "Read version from first of two docker-compose files configured" {
export BUILDKITE_PLUGIN_DOCKER_COMPOSE_CONFIG_0="tests/composefiles/docker-compose.v2.1.yml"
export BUILDKITE_PLUGIN_DOCKER_COMPOSE_CONFIG_1="tests/composefiles/docker-compose.v3.2.yml"
Expand All @@ -76,7 +83,7 @@ load '../lib/shared'

@test "Whether docker-compose supports cache_from directive" {
run docker_compose_supports_cache_from ""
assert_failure
assert_success

run docker_compose_supports_cache_from "1.0"
assert_failure
Expand Down

0 comments on commit 4d20d26

Please sign in to comment.