Skip to content

Commit

Permalink
Merge pull request #369 from buildkite-plugins/toote_compatibility
Browse files Browse the repository at this point in the history
Compose compatibility mode
  • Loading branch information
pzeballos authored Dec 13, 2022
2 parents a558c3e + 211da90 commit 44894d4
Show file tree
Hide file tree
Showing 7 changed files with 105 additions and 1 deletion.
12 changes: 12 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -606,6 +606,18 @@ If set to true, docker compose will remove the primary container after run. Equi

The default is `true`.

### `compatibility` (optional, run only)

If set to true, all docker compose commands will rum with compatibility mode. Equivalent to `--compatibility` in docker-compose.

The default is `false`.

Note that [the effect of this option changes depending on your docker compose CLI version](https://docs.docker.com/compose/cli-command-compatibility/#flags-that-will-not-be-implemented):
* in v1 it translates (composefile) v3 deploy keys to their non-swarm (composefile) v2 equivalents
* in v2 it will revert some behaviour to v1 as well, including (but not limited to):
- [Character separator for container names](https://github.com/docker/compose/blob/a0acc20d883ce22b8b0c65786e3bea1328809bbd/cmd/compose/compose.go#L181)
- [Not normalizing compose models (when running `config`)](https://github.com/docker/compose/blob/2e7644ff21f9ca0ea6fb5e8d41d4f6af32cd7e20/cmd/compose/convert.go#L69)

### `entrypoint` (optional, run only)

Sets the `--entrypoint` argument when running `docker-compose`.
Expand Down
2 changes: 1 addition & 1 deletion lib/push.bash
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ default_compose_image_for_service() {
local service="$1"

local separator="_"
if [[ "$(plugin_read_config CLI_VERSION "1")" == "2" ]] ; then
if [[ "$(plugin_read_config CLI_VERSION "1")" == "2" ]] && [[ "$(plugin_read_config COMPATIBILITY "false")" != "true" ]] ; then
separator="-"
fi

Expand Down
5 changes: 5 additions & 0 deletions lib/shared.bash
Original file line number Diff line number Diff line change
Expand Up @@ -200,6 +200,11 @@ function run_docker_compose() {
command+=(--no-ansi)
fi

# Enable compatibility mode for v3 files
if [[ "$(plugin_read_config COMPATIBILITY "false")" == "true" ]]; then
command+=(--compatibility)
fi

for file in $(docker_compose_config_files) ; do
command+=(-f "$file")
done
Expand Down
2 changes: 2 additions & 0 deletions plugin.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@ configuration:
cache-from:
type: [ string, array ]
minimum: 1
compatibility:
type: boolean
cli-version:
type: string
enum:
Expand Down
27 changes: 27 additions & 0 deletions tests/run.bats
Original file line number Diff line number Diff line change
Expand Up @@ -638,6 +638,33 @@ export BUILDKITE_JOB_ID=1111
unstub buildkite-agent
}

@test "Run with compatibility mode" {
export BUILDKITE_BUILD_NUMBER=1
export BUILDKITE_COMMAND=pwd
export BUILDKITE_JOB_ID=1111
export BUILDKITE_PIPELINE_SLUG=test

export BUILDKITE_PLUGIN_DOCKER_COMPOSE_RUN=myservice
export BUILDKITE_PLUGIN_DOCKER_COMPOSE_CLEANUP=false
export BUILDKITE_PLUGIN_DOCKER_COMPOSE_COMPATIBILITY=true

stub docker-compose \
"--compatibility -f docker-compose.yml -p buildkite1111 -f docker-compose.buildkite-1-override.yml pull myservice : echo pulled myservice" \
"--compatibility -f docker-compose.yml -p buildkite1111 -f docker-compose.buildkite-1-override.yml up -d --scale myservice=0 myservice : echo started dependencies for myservice" \
"--compatibility -f docker-compose.yml -p buildkite1111 -f docker-compose.buildkite-1-override.yml run --name buildkite1111_myservice_build_1 --rm myservice /bin/sh -e -c 'pwd' : echo ran myservice with use aliases output"

stub buildkite-agent \
"meta-data exists docker-compose-plugin-built-image-tag-myservice : exit 0" \
"meta-data get docker-compose-plugin-built-image-tag-myservice : echo myimage"

run "$PWD"/hooks/command

assert_success
assert_output --partial "ran myservice with use aliases output"
unstub docker-compose
unstub buildkite-agent
}

@test "Run with a volumes option" {
export BUILDKITE_JOB_ID=1111
export BUILDKITE_PLUGIN_DOCKER_COMPOSE_RUN=myservice
Expand Down
30 changes: 30 additions & 0 deletions tests/v2/push.bats
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,36 @@ setup_file() {
unstub buildkite-agent
}

@test "Push a prebuilt image with a repository and a tag in compatibility mode" {
export BUILDKITE_BUILD_NUMBER=1
export BUILDKITE_JOB_ID=1111
export BUILDKITE_PIPELINE_SLUG=test

export BUILDKITE_PLUGIN_DOCKER_COMPOSE_PUSH=myservice:my.repository/myservice:llamas
export BUILDKITE_PLUGIN_DOCKER_COMPOSE_COMPATIBILITY=true

stub docker \
"compose --compatibility -f docker-compose.yml -p buildkite1111 config : echo blah" \
"pull myimage : echo pulled prebuilt image" \
"tag myimage buildkite1111_myservice : echo " \
"tag buildkite1111_myservice my.repository/myservice:llamas : echo tagged image" \
"push my.repository/myservice:llamas : echo pushed myservice"


stub buildkite-agent \
"meta-data exists docker-compose-plugin-built-image-tag-myservice : exit 0" \
"meta-data get docker-compose-plugin-built-image-tag-myservice : echo myimage"

run $PWD/hooks/command

assert_success
assert_output --partial "pulled prebuilt image"
assert_output --partial "tagged image"
assert_output --partial "pushed myservice"
unstub docker
unstub buildkite-agent
}

@test "Push a prebuilt image with an invalid tag" {
export BUILDKITE_JOB_ID=1111
export BUILDKITE_PLUGIN_DOCKER_COMPOSE_PUSH=myservice:my.repository/myservice:-llamas
Expand Down
28 changes: 28 additions & 0 deletions tests/v2/run.bats
Original file line number Diff line number Diff line change
Expand Up @@ -613,6 +613,34 @@ export BUILDKITE_JOB_ID=1111
unstub buildkite-agent
}


@test "Run with compatibility mode" {
export BUILDKITE_BUILD_NUMBER=1
export BUILDKITE_COMMAND=pwd
export BUILDKITE_JOB_ID=1111
export BUILDKITE_PIPELINE_SLUG=test

export BUILDKITE_PLUGIN_DOCKER_COMPOSE_RUN=myservice
export BUILDKITE_PLUGIN_DOCKER_COMPOSE_CLEANUP=false
export BUILDKITE_PLUGIN_DOCKER_COMPOSE_COMPATIBILITY=true

stub docker \
"compose --compatibility -f docker-compose.yml -p buildkite1111 -f docker-compose.buildkite-1-override.yml pull myservice : echo pulled myservice" \
"compose --compatibility -f docker-compose.yml -p buildkite1111 -f docker-compose.buildkite-1-override.yml up -d --scale myservice=0 myservice : echo started dependencies for myservice" \
"compose --compatibility -f docker-compose.yml -p buildkite1111 -f docker-compose.buildkite-1-override.yml run --name buildkite1111_myservice_build_1 --rm myservice /bin/sh -e -c 'pwd' : echo ran myservice with use aliases output"

stub buildkite-agent \
"meta-data exists docker-compose-plugin-built-image-tag-myservice : exit 0" \
"meta-data get docker-compose-plugin-built-image-tag-myservice : echo myimage"

run "$PWD"/hooks/command

assert_success
assert_output --partial "ran myservice with use aliases output"
unstub docker
unstub buildkite-agent
}

@test "Run with a volumes option" {
export BUILDKITE_JOB_ID=1111
export BUILDKITE_PLUGIN_DOCKER_COMPOSE_RUN=myservice
Expand Down

0 comments on commit 44894d4

Please sign in to comment.