From 8edd418b67190255683b32e77f9e5c8bb7268d69 Mon Sep 17 00:00:00 2001 From: Andy Thompson Date: Thu, 8 Jun 2023 15:13:24 +0100 Subject: [PATCH] Port various docker-related changes from php harness * https://github.com/inviqa/harness-base-php/pull/727 * https://github.com/inviqa/harness-base-php/pull/760 * https://github.com/inviqa/harness-base-php/pull/752 * https://github.com/inviqa/harness-base-php/pull/717 * https://github.com/inviqa/harness-base-php/pull/777 * https://github.com/inviqa/harness-base-php/pull/686 * https://github.com/inviqa/harness-base-php/pull/713 * https://github.com/inviqa/harness-base-php/pull/770 * https://github.com/inviqa/harness-base-php/pull/759 * https://github.com/inviqa/harness-base-php/pull/707 - except v2 rather than v1 --- .ci/test | 4 +- .../console/root/lib/task/assets/apply.sh | 9 ++--- harness/attributes/common.yml | 6 ++- harness/config/build.yml | 9 +++-- harness/config/cleanup.yml | 13 +++++-- harness/config/commands.yml | 33 +++++++++++----- harness/config/events.yml | 7 ++-- harness/config/external-images.yml | 7 ++-- harness/config/functions.yml | 21 +++++++--- harness/config/pipeline.yml | 10 +++-- harness/scripts/destroy.sh | 5 ++- harness/scripts/disable.sh | 5 ++- harness/scripts/enable.sh.twig | 38 +++++++++++-------- harness/scripts/mutagen.sh | 8 ++-- harness/scripts/rebuild.sh | 5 ++- helm/app/Chart.yaml.twig | 1 + 16 files changed, 118 insertions(+), 63 deletions(-) diff --git a/.ci/test b/.ci/test index cb07bb0..1a54eb1 100755 --- a/.ci/test +++ b/.ci/test @@ -112,9 +112,9 @@ function check_environment_started() project="$(git log -n 1 --pretty=format:'%H')" fi - if [ "$(docker-compose -p "$project" ps | grep -v "lighthouse" | grep -c Exit)" -gt 0 ]; then + if [ "$(docker compose -p "$project" ps --all | grep -v "lighthouse" | grep -c Exit)" -gt 0 ]; then echo 'Some containers failed to start' - docker-compose -p "$project" ps + docker compose -p "$project" ps --all return 1 fi ) diff --git a/docker/image/console/root/lib/task/assets/apply.sh b/docker/image/console/root/lib/task/assets/apply.sh index 1e54342..31aebbd 100644 --- a/docker/image/console/root/lib/task/assets/apply.sh +++ b/docker/image/console/root/lib/task/assets/apply.sh @@ -1,15 +1,14 @@ #!/bin/bash function task_assets_apply() -{ +( local ASSETS_DIR="${ASSETS_DIR:-tools/assets/development}" local IMPORT_COMMAND=() - local PRE_COMMAND=() if [ "${DB_PLATFORM}" == "mysql" ]; then IMPORT_COMMAND=(mysql -h "$DB_HOST" -u "${DB_ADMIN_USER:-$DB_USER}" "-p${DB_ROOT_PASS:-${DB_ADMIN_PASS:-$DB_PASS}}" "$DB_NAME") elif [ "${DB_PLATFORM}" == "postgres" ]; then - PRE_COMMAND=("PGPASSWORD=$DB_PASS") + export PGPASSWORD="$DB_PASS" IMPORT_COMMAND=(psql -h "$DB_HOST" -U "$DB_USER" "$DB_NAME") elif [ -n "${DB_PLATFORM}" ]; then (>&2 echo "invalid database type") @@ -25,7 +24,7 @@ function task_assets_apply() fi if [ -f "$DATABASE_FILE" ]; then - "${PRE_COMMAND[@]}" passthru "pv --force '$DATABASE_FILE' | zcat - | $(printf ' %q' "${IMPORT_COMMAND[@]}")" + passthru "pv --force '$DATABASE_FILE' | zcat - | $(printf ' %q' "${IMPORT_COMMAND[@]}")" else task install fi @@ -35,4 +34,4 @@ function task_assets_apply() [ -f "$file" ] || continue run tar -xvf "${file}" -C /app done -} +) \ No newline at end of file diff --git a/harness/attributes/common.yml b/harness/attributes/common.yml index d6a1a4b..3cb4693 100644 --- a/harness/attributes/common.yml +++ b/harness/attributes/common.yml @@ -99,6 +99,7 @@ attributes.default: buildkit: enabled: true compose: + bin: 'docker-compose' host_volume_options: "= ':' ~ (@('delegated-volumes') ? 'delegated' : 'cached')" # If using gitops helm chart repositories, it's recommended to put this configuration # in the values.yml in there now instead of project application repositories @@ -159,7 +160,10 @@ attributes.default: database: # possible platforms are mysql, postgres or ~ for none platform: mysql - platform_version: 8.0 + platform_version: > + = @('database.platform') == 'mysql' ? '8.0' + : @('database.platform') == 'postgres' ? '9.6' + : null host: mysql port: 3306 user: app diff --git a/harness/config/build.yml b/harness/config/build.yml index 604dc99..2e045d6 100644 --- a/harness/config/build.yml +++ b/harness/config/build.yml @@ -1,13 +1,16 @@ command('app build'): + env: + COMPOSE_BIN: = @('docker.compose.bin') exec: | #!bash(workspace:/)|@ ws external-images pull - passthru docker-compose build + passthru $COMPOSE_BIN build command('app build '): env: - SERVICE: = input.argument('service') + COMPOSE_BIN: = @('docker.compose.bin') + SERVICE: = input.argument('service') exec: | #!bash(workspace:/)|@ - passthru docker-compose build "${SERVICE}" \ No newline at end of file + passthru $COMPOSE_BIN build "${SERVICE}" diff --git a/harness/config/cleanup.yml b/harness/config/cleanup.yml index 2b3742c..694f675 100644 --- a/harness/config/cleanup.yml +++ b/harness/config/cleanup.yml @@ -10,18 +10,23 @@ function('built_images', [services]): | $allImages = explode("\n", shell_exec('docker image ls -a --format \'{{ print .Repository ":" .Tag }}\'')); # workspace commands don't allow non-string types - = join(' ', array_intersect($builtImages, $allImages)); + = join("\n", array_intersect($builtImages, $allImages)); + +command('built-images ls'): + env: + IMAGES: = built_images(docker_service_images(@('docker.compose.bin'))) + exec: | + #!bash + echo "$IMAGES" command('cleanup built-images'): env: BUILD_LABEL: = @('namespace') ~ ':' ~ @('app.version') - IMAGES: = built_images(docker_service_images()) exec: | #!bash - IMAGES=($IMAGES) + IMAGES=($(ws built-images ls)) if [ "${#IMAGES[@]}" -gt 0 ]; then run docker image rm --force -- "${IMAGES[@]}" fi run docker image prune --force --filter=label=build="$BUILD_LABEL" [ -z "$(docker builder 2>&1)" ] || run docker builder prune --force --filter=label=build="$BUILD_LABEL" - diff --git a/harness/config/commands.yml b/harness/config/commands.yml index 74ae679..d0cad57 100644 --- a/harness/config/commands.yml +++ b/harness/config/commands.yml @@ -6,6 +6,7 @@ command('enable'): APP_MODE: = @('app.mode') NAMESPACE: = @('namespace') HAS_ASSETS: = boolToString(@('aws.bucket') !== null and @('aws.bucket') !== '') + COMPOSE_BIN: = @('docker.compose.bin') COMPOSE_PROJECT_NAME: = @('namespace') COMPOSE_DOCKER_CLI_BUILD: = @('docker.buildkit.enabled') ? '1':'0' DOCKER_BUILDKIT: = @('docker.buildkit.enabled') ? '1':'0' @@ -21,6 +22,7 @@ command('enable console'): APP_MODE: = @('app.mode') NAMESPACE: = @('namespace') HAS_ASSETS: = boolToString(@('aws.bucket') !== null and @('aws.bucket')) + COMPOSE_BIN: = @('docker.compose.bin') COMPOSE_PROJECT_NAME: = @('namespace') COMPOSE_DOCKER_CLI_BUILD: = @('docker.buildkit.enabled') ? '1':'0' DOCKER_BUILDKIT: = @('docker.buildkit.enabled') ? '1':'0' @@ -33,6 +35,7 @@ command('disable'): env: USE_MUTAGEN: = boolToString(@('host.os') == 'darwin' and @('mutagen')) NAMESPACE: = @('namespace') + COMPOSE_BIN: = @('docker.compose.bin') COMPOSE_PROJECT_NAME: = @('namespace') exec: | #!bash(workspace:/) @@ -42,6 +45,7 @@ command('destroy [--all]'): env: USE_MUTAGEN: = boolToString(@('host.os') == 'darwin' and @('mutagen')) NAMESPACE: = @('namespace') + COMPOSE_BIN: = @('docker.compose.bin') COMPOSE_PROJECT_NAME: = @('namespace') DESTROY_ALL: = boolToString(input.option('all')) exec: | @@ -52,6 +56,7 @@ command('rebuild'): env: USE_MUTAGEN: = boolToString(@('host.os') == 'darwin' and @('mutagen')) NAMESPACE: = @('namespace') + COMPOSE_BIN: = @('docker.compose.bin') COMPOSE_PROJECT_NAME: = @('namespace') exec: | #!bash(workspace:/)|@ @@ -59,7 +64,7 @@ command('rebuild'): command('networks external'): env: - NETWORKS: = get_docker_external_networks() + NETWORKS: = get_docker_external_networks(@('docker.compose.bin')) exec: | #!bash(workspace:/) for NETWORK in ${NETWORKS}; do @@ -70,35 +75,39 @@ command('networks external'): command('exec %'): env: + COMPOSE_BIN: = @('docker.compose.bin') COMPOSE_PROJECT_NAME: = @('namespace') exec: | #!bash(workspace:/)|= if [ -t 0 ] && [ -t 1 ] ; then - docker-compose exec -u build console ={ input.argument('%') } + $COMPOSE_BIN exec -u build console ={ input.argument('%') } else - docker-compose exec -T -u build console ={ input.argument('%') } + $COMPOSE_BIN exec -T -u build console ={ input.argument('%') } fi command('logs %'): env: + COMPOSE_BIN: = @('docker.compose.bin') COMPOSE_PROJECT_NAME: = @('namespace') exec: | #!bash(harness:/)|= - docker-compose logs ={input.argument('%')} + $COMPOSE_BIN logs ={input.argument('%')} command('ps'): env: + COMPOSE_BIN: = @('docker.compose.bin') COMPOSE_PROJECT_NAME: = @('namespace') exec: | #!bash(workspace:/)|@ - docker-compose ps + $COMPOSE_BIN ps command('console'): env: + COMPOSE_BIN: = @('docker.compose.bin') COMPOSE_PROJECT_NAME: = @('namespace') exec: | #!bash(workspace:/)|@ - passthru docker-compose exec -u build console bash + passthru $COMPOSE_BIN exec -u build console bash command('composer %'): exec: | @@ -111,10 +120,11 @@ command('db-console'): | command('db console'): env: + COMPOSE_BIN: = @('docker.compose.bin') COMPOSE_PROJECT_NAME: = @('namespace') exec: | #!bash(workspace:/)|@ - passthru "docker-compose exec console bash -c 'mysql --host \"\$DB_HOST\" --user \"\$DB_USER\" -p\"\$DB_PASS\" \"\$DB_NAME\"'" + passthru "$COMPOSE_BIN exec console bash -c 'mysql --host \"\$DB_HOST\" --user \"\$DB_USER\" -p\"\$DB_PASS\" \"\$DB_NAME\"'" command('assets download'): env: @@ -138,10 +148,11 @@ command('assets upload'): command('port '): env: + COMPOSE_BIN: = @('docker.compose.bin') COMPOSE_PROJECT_NAME: = @('namespace') exec: | #!bash(workspace:/)|= - passthru docker port "$(docker-compose ps -q ={input.argument('service')})" + passthru docker port "$($COMPOSE_BIN ps -q ={input.argument('service')})" command('set '): env: @@ -165,11 +176,12 @@ command('set '): command('db import '): env: + COMPOSE_BIN: = @('docker.compose.bin') COMPOSE_PROJECT_NAME: = @('namespace') DATABASE_FILE: = input.argument('database_file') exec: | #!bash(workspace:/)|= - passthru docker-compose exec -u build console app database:import "$DATABASE_FILE" + passthru $COMPOSE_BIN exec -u build console app database:import "$DATABASE_FILE" command('harness update existing'): env: @@ -217,8 +229,9 @@ command('generate token '): command('lighthouse [--with-results]'): env: + COMPOSE_BIN: = @('docker.compose.bin') COMPOSE_PROJECT_NAME: = @('namespace') OUTPUT_RESULTS: = boolToString(input.option('with-results')) exec: | #!bash(workspace:/)|@ - passthru docker-compose run --rm lighthouse bash -i /app/run.sh + passthru $COMPOSE_BIN run -T --rm lighthouse bash -i /app/run.sh diff --git a/harness/config/events.yml b/harness/config/events.yml index baff40f..1165b82 100644 --- a/harness/config/events.yml +++ b/harness/config/events.yml @@ -5,11 +5,10 @@ after('harness.install'): | after('harness.refresh'): env: + COMPOSE_BIN: = @('docker.compose.bin') COMPOSE_PROJECT: = @('namespace') exec: | #!bash(workspace:/)|@ - run docker-compose stop + run $COMPOSE_BIN stop ws external-images pull - passthru "docker-compose config --services | grep -v cron | grep -v jenkins-runner | grep -v job-queue-consumer | xargs docker-compose build" - passthru "docker-compose config --services | grep -v cron | grep -v jenkins-runner | grep -v job-queue-consumer | xargs docker-compose up -d" - run docker-compose up -d --build + run $COMPOSE_BIN up -d --build diff --git a/harness/config/external-images.yml b/harness/config/external-images.yml index 23469a9..2055458 100644 --- a/harness/config/external-images.yml +++ b/harness/config/external-images.yml @@ -28,7 +28,7 @@ function('external_images', [services]): | command('external-images config [--skip-exists] []'): env: - IMAGES: = external_images(docker_service_images(input.argument('service'))) + IMAGES: = external_images(docker_service_images(@('docker.compose.bin'), input.argument('service'))) SKIP_EXISTS: "= input.option('skip-exists') ? 1 : 0" exec: | #!php @@ -47,6 +47,7 @@ command('external-images config [--skip-exists] []'): command('external-images pull []'): env: + COMPOSE_BIN: = @('docker.compose.bin') SERVICE: = input.argument('service') exec: | #!bash(workspace:/)|@ @@ -59,11 +60,11 @@ command('external-images pull []'): CONF_ARGS+=("$SERVICE") fi - passthru "ws external-images config $(printf '%q ' "${CONF_ARGS[@]}") | docker-compose -f - pull" + passthru "ws external-images config $(printf '%q ' "${CONF_ARGS[@]}") | $COMPOSE_BIN -f - pull" command('external-images ls [--all]'): env: - IMAGES: = external_images(docker_service_images()) + IMAGES: = external_images(docker_service_images(@('docker.compose.bin'))) SHOW_REMOTE: "= input.option('all') ? 1 : 0" exec: | #!php diff --git a/harness/config/functions.yml b/harness/config/functions.yml index f17b5b9..d4da401 100644 --- a/harness/config/functions.yml +++ b/harness/config/functions.yml @@ -80,6 +80,7 @@ function('filter_local_services', [services]): | case 'enabled': case 'environment': case 'environment_dynamic': + case 'extends': case 'image': case 'resources': $filteredService[$key] = $value; @@ -96,14 +97,18 @@ function('filter_local_services', [services]): | } = $filteredServices; +function('filter_empty', [array_input]): | + #!php + = array_filter($array_input); + function('flatten', [array_input]): | #!php $iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($array_input)); = iterator_to_array($iterator, false); -function('get_docker_external_networks'): | +function('get_docker_external_networks', [compose_bin]): | #!php - $configRaw = shell_exec('docker-compose config'); + $configRaw = shell_exec($compose_bin . ' config'); if ($configRaw === null) { exit(1); } @@ -122,9 +127,9 @@ function('get_docker_external_networks'): | } = join(" ", $externalNetworks); -function('docker_service_images', [filterService]): | +function('docker_service_images', [compose_bin, filterService]): | #!php - $configRaw = shell_exec('docker-compose config'); + $configRaw = shell_exec($compose_bin . ' config'); if ($configRaw === null) { exit(1); } @@ -243,8 +248,14 @@ function('replace', [haystack, needle, replacement]): | function('template_key_value', [template, key_value]): | #!php + if (empty($key_value)) { + return []; + } $output = []; foreach ($key_value as $key => $value) { + if ($value === null) { + continue; + } $output[str_replace('{{key}}', $key, $template)] = $value; } = $output; @@ -264,4 +275,4 @@ function('boolToString', [value]): | case false: return 'no'; } echo 'error: unknown boolean "'.$value.'"'."\n"; - exit(1); + exit(1); \ No newline at end of file diff --git a/harness/config/pipeline.yml b/harness/config/pipeline.yml index 67e3c14..57b0e1d 100644 --- a/harness/config/pipeline.yml +++ b/harness/config/pipeline.yml @@ -1,11 +1,12 @@ command('app publish'): env: + COMPOSE_BIN: = @('docker.compose.bin') COMPOSE_HTTP_TIMEOUT: 180 DOCKER_CLIENT_TIMEOUT: 180 exec: | #!bash(workspace:/)|@ echo '@('docker.registry.password')' | run docker login --username='@('docker.registry.username')' --password-stdin '@('docker.registry.url')' - passthru docker-compose push @('pipeline.publish.services') + passthru $COMPOSE_BIN push @('pipeline.publish.services') run docker logout '@('docker.registry.url')' command('app publish chart '): @@ -14,7 +15,8 @@ command('app publish chart '): REPOSITORY: = @('pipeline.publish.chart.git.repository') ARTIFACTS_PATH: = "./build-artifacts-repository/" ~ @('pipeline.publish.chart.git.path') ~ "/" ~ input.argument('release') MESSAGE: = input.argument('message') - USER_EMAIL: = @('pipeline.publish.chart.git.email') + GIT_USER_NAME: = @('pipeline.publish.chart.git.user_name') + GIT_USER_EMAIL: = @('pipeline.publish.chart.git.email') exec: | #!bash(workspace:/)|@ @@ -28,7 +30,8 @@ command('app publish chart '): export GIT_SSH_COMMAND='ssh -i '"$(printf '%q' "$WS_APP_PUBLISH_CHART_SSH_PRIVATE_KEY")"' -o "IdentitiesOnly yes" -F /dev/null -o StrictHostKeyChecking=no' run git clone "$REPOSITORY" ./build-artifacts-repository - run git -C ./build-artifacts-repository config user.email "${USER_EMAIL}" + run git -C ./build-artifacts-repository config user.name "${GIT_USER_NAME}" + run git -C ./build-artifacts-repository config user.email "${GIT_USER_EMAIL}" run mkdir -p $ARTIFACTS_PATH run rsync --exclude='*.twig' --exclude='_twig' --delete -a .my127ws/helm/app/ "${ARTIFACTS_PATH}/" @@ -48,6 +51,7 @@ command('app deploy '): set -o pipefail cd "${ENVIRONMENT}" (umask 0077 && doctl -t "$DO_ACCESS_TOKEN" kubernetes cluster kubeconfig show "$CLUSTER" > kubectl.config.yaml) + kubectl --kubeconfig="${PWD}/kubectl.config.yaml" create ns "${NAMESPACE}" || true passthru helm dependency build passthru helm --kubeconfig="${PWD}/kubectl.config.yaml" upgrade --wait --atomic --install --timeout "${TIMEOUT}" --namespace "${NAMESPACE}" "${NAMESPACE}" ./ diff --git a/harness/scripts/destroy.sh b/harness/scripts/destroy.sh index 6716b07..7b37367 100755 --- a/harness/scripts/destroy.sh +++ b/harness/scripts/destroy.sh @@ -1,12 +1,15 @@ #!/usr/bin/env bash +# shellcheck disable=SC2206 +COMPOSE_BIN=($COMPOSE_BIN) + if [ "${DESTROY_ALL}" = yes ]; then RMI=all else RMI=local fi -run docker-compose down --rmi "${RMI}" --volumes --remove-orphans --timeout 120 +run "${COMPOSE_BIN[*]}" down --rmi "${RMI}" --volumes --remove-orphans --timeout 120 if [ "${USE_MUTAGEN}" = yes ]; then run ws mutagen stop diff --git a/harness/scripts/disable.sh b/harness/scripts/disable.sh index fe4627b..1d0ed8d 100755 --- a/harness/scripts/disable.sh +++ b/harness/scripts/disable.sh @@ -1,7 +1,10 @@ #!/usr/bin/env bash +# shellcheck disable=SC2206 +COMPOSE_BIN=($COMPOSE_BIN) + if [[ "$USE_MUTAGEN" = "yes" ]]; then run ws mutagen pause fi -run docker-compose stop +run "${COMPOSE_BIN[@]}" stop diff --git a/harness/scripts/enable.sh.twig b/harness/scripts/enable.sh.twig index ef30b4d..7dc1f5b 100755 --- a/harness/scripts/enable.sh.twig +++ b/harness/scripts/enable.sh.twig @@ -1,11 +1,14 @@ #!/usr/bin/env bash +# shellcheck disable=SC2206 +COMPOSE_BIN=($COMPOSE_BIN) + console_enabled() { if [ "$APP_BUILD" = dynamic ]; then [ -f .my127ws/.flag-console-built ] else - [ -n "$(docker-compose ps --quiet console)" ] + [ -n "$("${COMPOSE_BIN[@]}" ps --quiet --all console)" ] fi } @@ -18,12 +21,12 @@ enable_all() HAS_FLAG=yes IS_BUILT=yes # If the containers no longer exist, we need to rebuild them - if [ -z "$(docker-compose ps --quiet)" ]; then + if [ -z "$("${COMPOSE_BIN[@]}" ps --quiet --all)" ]; then IS_BUILT=no fi fi - if [ "$APP_BUILD" = dynamic ] && console_enabled && [ -z "$(docker-compose ps --quiet console)" ]; then + if [ "$APP_BUILD" = dynamic ] && console_enabled && [ -z "$("${COMPOSE_BIN[@]}" ps --quiet --all console)" ]; then rm .my127ws/.flag-console-built fi @@ -32,9 +35,12 @@ enable_all() if [ "$HAS_FLAG" = no ]; then # remove all services, keeping console if considered built if console_enabled; then - passthru "docker-compose ps --services | grep -v -Fxe console | xargs docker-compose rm --force --stop --" + # shellcheck disable=SC2143 + if [ -n "$("${COMPOSE_BIN[@]}" ps --services | grep -v -Fxe console)" ]; then + passthru "${COMPOSE_BIN[*]} ps --services | grep -v -Fxe console | xargs ${COMPOSE_BIN[*]} rm --force --stop --" + fi else - passthru docker-compose down + passthru "${COMPOSE_BIN[@]}" down fi fi @@ -52,13 +58,13 @@ enable_all() passthru ws mutagen resume fi - passthru docker-compose up -d - passthru docker-compose exec -T -u build console app welcome + passthru "${COMPOSE_BIN[@]}" up -d + passthru "${COMPOSE_BIN[@]}" exec -T -u build console app welcome fi } enable_console() { - if [ "$APP_BUILD" = dynamic ] && console_enabled && [ -z "$(docker-compose ps --quiet console)" ]; then + if [ "$APP_BUILD" = dynamic ] && console_enabled && [ -z "$("${COMPOSE_BIN[@]}" ps --quiet --all console)" ]; then rm .my127ws/.flag-console-built fi @@ -71,8 +77,8 @@ dynamic_console() { if console_enabled; then # ensure it is started - if [ -z "$(docker-compose ps --quiet console)" ]; then - passthru docker-compose up -d console + if [ -z "$("${COMPOSE_BIN[@]}" ps --quiet --all console)" ]; then + passthru "${COMPOSE_BIN[@]}" up -d console fi return; fi @@ -85,8 +91,8 @@ dynamic_console() find .my127ws/docker/image/ -type d ! -perm u+rwx,go+rx,o-w -exec chmod u+rwx,go+rx,o-w {} + - passthru docker-compose up --build -d console - passthru docker-compose exec -T -u build console app build + passthru "${COMPOSE_BIN[@]}" up --build -d console + passthru "${COMPOSE_BIN[@]}" exec -T -u build console app build if [ "$USE_MUTAGEN" = yes ]; then ws mutagen resume @@ -109,7 +115,7 @@ static_console() if [ "$HAS_ASSETS" = yes ]; then ws assets download fi - passthru docker-compose up --build -d console + passthru "${COMPOSE_BIN[@]}" up --build -d console } static() @@ -120,12 +126,12 @@ static() initial_start() { # Bring up all services apart from cron - passthru "docker-compose config --services | grep -v -Fxe cron | xargs docker-compose up -d" + passthru "${COMPOSE_BIN[*]} config --services | grep -v -Fxe cron | xargs ${COMPOSE_BIN[*]} up -d" - passthru docker-compose exec -T -u build console app init + passthru "${COMPOSE_BIN[@]}" exec -T -u build console app init {% if @('services.cron.enabled') %} - passthru docker-compose up -d cron + passthru "${COMPOSE_BIN[@]}" up -d cron {% endif %} } diff --git a/harness/scripts/mutagen.sh b/harness/scripts/mutagen.sh index 11e8d96..fbdf0c0 100644 --- a/harness/scripts/mutagen.sh +++ b/harness/scripts/mutagen.sh @@ -86,11 +86,11 @@ clean_existing_projects() local SYNC_LIST for SYNC_NAME in "${SYNC_NAMES[@]}"; do # List syncs based on name - SYNC_LIST="$(mutagen sync list "$SYNC_NAME" 2> /dev/null || true)" + SYNC_LIST="$(mutagen sync list -l "$SYNC_NAME" 2> /dev/null || true)" # Check if there are entries left if [ "$(echo "$SYNC_LIST" | grep --count "URL: $(pwd)" | awk '{ print $1 }')" -gt 0 ]; then # Build an array of sync session IDs to clean up - while IFS='' read -r line; do EXISTING_PROJECT_LABELS+=("$line"); done < <(echo "$SYNC_LIST" | grep -B4 "URL: $(pwd)" | grep io.mutagen.project | awk '{print $1"="$2}' | sed s/:=/=/) + while IFS='' read -r line; do EXISTING_PROJECT_LABELS+=("$line"); done < <(echo "$SYNC_LIST" | grep -A6 "^Name: $SYNC_NAME$" | grep io.mutagen.project | awk '{print $1"="$2}' | sed s/:=/=/) fi done @@ -100,11 +100,11 @@ clean_existing_projects() CONTAINER_NAMES_REGEX="$(join_by_character "\|" "${CONTAINER_NAMES[@]}")" for FORWARD_NAME in "${FORWARD_NAMES[@]}"; do # List forwards based on name - FORWARD_LIST="$(mutagen forward list "$FORWARD_NAME" 2> /dev/null || true)" + FORWARD_LIST="$(mutagen forward list -l "$FORWARD_NAME" 2> /dev/null || true)" # Check if there are entries left if [ "$(echo "$FORWARD_LIST" | grep --count "URL: docker://\($CONTAINER_NAMES_REGEX\):tcp:" | awk '{ print $1 }')" -gt 0 ]; then # Build an array of sync session IDs to clean up - while IFS='' read -r line; do EXISTING_PROJECT_LABELS+=("$line"); done < <(echo "$FORWARD_LIST" | grep -B6 "URL: docker://\($CONTAINER_NAMES_REGEX\):tcp:" | grep io.mutagen.project | awk '{print $1"="$2}' | sed s/:=/=/) + while IFS='' read -r line; do EXISTING_PROJECT_LABELS+=("$line"); done < <(echo "$FORWARD_LIST" | grep -B10 "URL: docker://\($CONTAINER_NAMES_REGEX\):tcp:" | grep io.mutagen.project | awk '{print $1"="$2}' | sed s/:=/=/) fi done diff --git a/harness/scripts/rebuild.sh b/harness/scripts/rebuild.sh index 0ed4504..b09a76a 100644 --- a/harness/scripts/rebuild.sh +++ b/harness/scripts/rebuild.sh @@ -1,6 +1,9 @@ #!/usr/bin/env bash -run docker-compose down --rmi local --volumes --remove-orphans --timeout 120 +# shellcheck disable=SC2206 +COMPOSE_BIN=($COMPOSE_BIN) + +run "${COMPOSE_BIN[*]}" down --rmi local --volumes --remove-orphans --timeout 120 passthru ws cleanup built-images diff --git a/helm/app/Chart.yaml.twig b/helm/app/Chart.yaml.twig index ee356e3..da3c005 100644 --- a/helm/app/Chart.yaml.twig +++ b/helm/app/Chart.yaml.twig @@ -1,3 +1,4 @@ +apiVersion: v2 name: {{ @('workspace.name') }} description: Base helm chart for {{ @('workspace.name') }} version: 0.0.1