diff --git a/src/_base/docker/image/console/root/lib/sidekick.sh b/src/_base/docker/image/console/root/lib/sidekick.sh index e26970fcc..f4c1ee7da 100644 --- a/src/_base/docker/image/console/root/lib/sidekick.sh +++ b/src/_base/docker/image/console/root/lib/sidekick.sh @@ -13,38 +13,58 @@ TASKS="/lib/task" task() { - local task_file="${TASKS}/${1//:/\/}.sh" - local task_name="task_${1//:/_}" + local TASK_FILE="${TASKS}/${1//:/\/}.sh" + local TASK_NAME="task_${1//:/_}" # shellcheck source=/dev/null - declare -F "$task_name" &>/dev/null || source "$task_file" + declare -F "${TASK_NAME}" &>/dev/null || source "${TASK_FILE}" shift - $task_name "$@" + "${TASK_NAME}" "$@" } prompt() { if [ "${RUN_CWD}" != "$(pwd)" ]; then RUN_CWD="$(pwd)" - echo -e "\\033[1m[\\033[0mdocker(console):$(pwd)\\033[1m]:\\033[0m" + echo -e "\\033[1m[\\033[0mdocker(console):$(pwd)\\033[1m]:\\033[0m" >&2 fi } run() { - local COMMAND="$*" + local -r COMMAND_DEPRECATED="$*" + local -r COMMAND=("$@") + local DEPRECATED_MODE=no + + if [[ "${COMMAND[0]}" = *" "* ]]; then + # echo "deprecated: support for passing multiple arguments in the following line will be removed in a future version" >&2 + # echo "run '${COMMAND_DEPRECATED[*]}'" >&2 + # echo "a future major version will only support:" >&2 + # echo "run ${COMMAND_DEPRECATED[*]}" >&2 + # echo >&2 + DEPRECATED_MODE=yes + fi + if [ "$VERBOSE" = "no" ]; then - prompt - echo " > ${COMMAND[*]}" - setCommandIndicator "$INDICATOR_RUNNING" + prompt + if [ "${DEPRECATED_MODE}" = "yes" ]; then + echo " > ${COMMAND_DEPRECATED[*]}" >&2 + setCommandIndicator "${INDICATOR_RUNNING}" + bash -c "${COMMAND_DEPRECATED[@]}" > /tmp/my127ws-stdout.txt 2> /tmp/my127ws-stderr.txt + else + echo " >$(printf ' %q' "${COMMAND[@]}")" >&2 + setCommandIndicator "${INDICATOR_RUNNING}" + "${COMMAND[@]}" > /tmp/my127ws-stdout.txt 2> /tmp/my127ws-stderr.txt + fi - if ! bash -c "${COMMAND[@]}" > /tmp/my127ws-stdout.txt 2> /tmp/my127ws-stderr.txt; then - setCommandIndicator "$INDICATOR_ERROR" + # shellcheck disable=SC2181 + if [ "$?" -gt 0 ]; then + setCommandIndicator "${INDICATOR_ERROR}" - if [ "$APP_BUILD" = "static" ]; then + if [ "${APP_BUILD}" = "static" ]; then echo "Command failed. stdout:" cat /tmp/my127ws-stdout.txt echo @@ -62,8 +82,10 @@ run() exit 1 else - setCommandIndicator "$INDICATOR_SUCCESS" + setCommandIndicator "${INDICATOR_SUCCESS}" fi + elif [ "${DEPRECATED_MODE}" = "yes" ]; then + passthru "${COMMAND_DEPRECATED[@]}" else passthru "${COMMAND[@]}" fi @@ -71,20 +93,39 @@ run() passthru() { - prompt + local -r COMMAND_DEPRECATED="$*" + local -r COMMAND=("$@") + local DEPRECATED_MODE=no + + if [[ "${COMMAND[0]}" = *" "* ]]; then + # echo "deprecated: support for passing multiple arguments in the following line will be removed in a future version" >&2 + # echo "passthru '${COMMAND_DEPRECATED[*]}'" >&2 + # echo "a future major version will only support:" >&2 + # echo "passthru ${COMMAND_DEPRECATED[*]}" >&2 + # echo >&2 + DEPRECATED_MODE=yes + fi - echo -e "\\033[${INDICATOR_PASSTHRU}■\\033[0m > $*" + prompt - if ! bash -c "$@"; then - exit 1 + if [ "${DEPRECATED_MODE}" = "yes" ]; then + echo -e "\\033[${INDICATOR_PASSTHRU}■\\033[0m > $*" >&2 + if ! bash -e -c "${COMMAND_DEPRECATED[@]}"; then + exit 1 + fi + else + echo -e "\\033[${INDICATOR_PASSTHRU}■\\033[0m >$(printf ' %q' "${COMMAND[@]}")" >&2 + if ! "${COMMAND[@]}"; then + exit 1 + fi fi } setCommandIndicator() { - echo -ne "\\033[1A"; - echo -ne "\\033[$1" - echo -n "■" - echo -ne "\\033[0m" - echo -ne "\\033[1E"; + echo -ne "\\033[1A" >&2 + echo -ne "\\033[$1" >&2 + echo -n "■" >&2 + echo -ne "\\033[0m" >&2 + echo -ne "\\033[1E" >&2 } diff --git a/src/_base/docker/image/console/root/lib/task/assets/apply.sh b/src/_base/docker/image/console/root/lib/task/assets/apply.sh index 09f55f8bc..d22e65b10 100644 --- a/src/_base/docker/image/console/root/lib/task/assets/apply.sh +++ b/src/_base/docker/image/console/root/lib/task/assets/apply.sh @@ -25,12 +25,12 @@ function task_assets_apply() if [ -f "$DATABASE_FILE" ]; then passthru "pv --force $DATABASE_FILE | zcat - | $IMPORT_COMMAND" else - task "install" + task install fi fi for file in "/app/${ASSETS_DIR}/"*.files.{tgz,tar.gz}; do [ -f "$file" ] || continue - run "tar -xvf ${file} -C /app" + run tar -xvf "${file}" -C /app done } diff --git a/src/_base/docker/image/console/root/lib/task/assets/dump.sh b/src/_base/docker/image/console/root/lib/task/assets/dump.sh index d6a78d910..0bb835b31 100644 --- a/src/_base/docker/image/console/root/lib/task/assets/dump.sh +++ b/src/_base/docker/image/console/root/lib/task/assets/dump.sh @@ -5,13 +5,13 @@ function task_assets_dump() local ASSETS_DIR="${ASSETS_DIR:-tools/assets/development}" if [ ! -d "/app/${ASSETS_DIR}" ]; then - run "mkdir -p /app/${ASSETS_DIR}" + run mkdir -p "/app/${ASSETS_DIR}" fi if [ "${DB_PLATFORM}" == "mysql" ]; then - run "mysqldump -h ${DB_HOST} -u ${DB_USER} -p${DB_PASS} ${DB_NAME} | gzip > /app/${ASSETS_DIR}/${DB_NAME}.sql.gz" + run "mysqldump -h '${DB_HOST}' -u '${DB_USER}' '-p${DB_PASS}' '${DB_NAME}' | gzip > '/app/${ASSETS_DIR}/${DB_NAME}.sql.gz'" elif [ "${DB_PLATFORM}" == "postgres" ]; then - run "PGPASSWORD=$DB_PASS pg_dump -h ${DB_HOST} -U ${DB_USER} ${DB_NAME} | gzip > /app/${ASSETS_DIR}/${DB_NAME}.sql.gz" + PGPASSWORD="$DB_PASS" run "pg_dump -h '${DB_HOST}' -U '${DB_USER}' '${DB_NAME}' | gzip > '/app/${ASSETS_DIR}/${DB_NAME}.sql.gz'" elif [ -n "${DB_PLATFORM}" ]; then (>&2 echo "invalid database type") exit 1 diff --git a/src/_base/docker/image/console/root/lib/task/build.sh b/src/_base/docker/image/console/root/lib/task/build.sh index 73b09622c..c49bf57e7 100644 --- a/src/_base/docker/image/console/root/lib/task/build.sh +++ b/src/_base/docker/image/console/root/lib/task/build.sh @@ -3,11 +3,11 @@ function task_build() { if [ ! -f /app/composer.json ]; then - task "skeleton:apply" + task skeleton:apply fi - task "overlay:apply" + task overlay:apply - task "build:backend" - task "build:frontend" + task build:backend + task build:frontend } diff --git a/src/_base/docker/image/console/root/lib/task/composer/install.sh b/src/_base/docker/image/console/root/lib/task/composer/install.sh index 119ad13aa..650c98315 100644 --- a/src/_base/docker/image/console/root/lib/task/composer/install.sh +++ b/src/_base/docker/image/console/root/lib/task/composer/install.sh @@ -2,5 +2,5 @@ function task_composer_install() { - passthru "composer install --no-interaction" + passthru composer install --no-interaction } diff --git a/src/_base/docker/image/console/root/lib/task/init.sh.twig b/src/_base/docker/image/console/root/lib/task/init.sh.twig index 75d4642cd..58e04a562 100644 --- a/src/_base/docker/image/console/root/lib/task/init.sh.twig +++ b/src/_base/docker/image/console/root/lib/task/init.sh.twig @@ -2,17 +2,17 @@ function task_init() { - task "database:available" + task database:available if ! db_hasSchema; then - task "assets:apply" + task assets:apply {% for step in @('backend.init.steps') -%} {{ step|raw }} {% endfor %} - task "welcome" + task welcome fi } diff --git a/src/_base/docker/image/console/root/lib/task/install.sh.twig b/src/_base/docker/image/console/root/lib/task/install.sh.twig index 4389d6195..07717612f 100644 --- a/src/_base/docker/image/console/root/lib/task/install.sh.twig +++ b/src/_base/docker/image/console/root/lib/task/install.sh.twig @@ -2,7 +2,7 @@ function task_install() { - task "database:available" + task database:available {% for step in @('backend.install.steps') -%} {{ step|raw }} diff --git a/src/_base/docker/image/console/root/lib/task/migrate.sh.twig b/src/_base/docker/image/console/root/lib/task/migrate.sh.twig index a778b3e42..863a1ad40 100644 --- a/src/_base/docker/image/console/root/lib/task/migrate.sh.twig +++ b/src/_base/docker/image/console/root/lib/task/migrate.sh.twig @@ -2,7 +2,7 @@ function task_migrate() { - task "database:available" + task database:available {% for step in @('backend.migrate.steps') -%} {{ step|raw }} diff --git a/src/_base/docker/image/console/root/lib/task/overlay/apply.sh b/src/_base/docker/image/console/root/lib/task/overlay/apply.sh index 8dc363891..33fec2d1c 100644 --- a/src/_base/docker/image/console/root/lib/task/overlay/apply.sh +++ b/src/_base/docker/image/console/root/lib/task/overlay/apply.sh @@ -2,5 +2,5 @@ function task_overlay_apply() { - run "rsync --exclude='*.twig' --exclude='_twig' -a /home/build/application/overlay/ /app/" + run rsync --exclude='*.twig' --exclude='_twig' -a /home/build/application/overlay/ /app/ } diff --git a/src/_base/docker/image/console/root/lib/task/rabbitmq/vhosts.sh.twig b/src/_base/docker/image/console/root/lib/task/rabbitmq/vhosts.sh.twig index e329c6de9..94b9fa4fa 100644 --- a/src/_base/docker/image/console/root/lib/task/rabbitmq/vhosts.sh.twig +++ b/src/_base/docker/image/console/root/lib/task/rabbitmq/vhosts.sh.twig @@ -6,7 +6,7 @@ function task_rabbitmq_vhosts() { : {% else %} local rabbitmq_api_url="http://$RABBITMQ_HOST:$RABBITMQ_API_PORT/api" - task "http:wait" "$rabbitmq_api_url/index.html" + task http:wait "$rabbitmq_api_url/index.html" {% for vhost in @('rabbitmq.vhosts') %} curl -f -I -s -u "$RABBITMQ_USER:$RABBITMQ_PASSWORD" -X PUT "$rabbitmq_api_url/vhosts/{{ vhost }}" diff --git a/src/_base/docker/image/console/root/lib/task/skeleton/apply.sh b/src/_base/docker/image/console/root/lib/task/skeleton/apply.sh index c256f9ee4..700ab0646 100644 --- a/src/_base/docker/image/console/root/lib/task/skeleton/apply.sh +++ b/src/_base/docker/image/console/root/lib/task/skeleton/apply.sh @@ -2,5 +2,5 @@ function task_skeleton_apply() { - run "rsync --exclude='*.twig' --exclude='_twig' -a /home/build/application/skeleton/ /app/" + run rsync --exclude='*.twig' --exclude='_twig' -a /home/build/application/skeleton/ /app/ } diff --git a/src/_base/docker/image/console/root/lib/task/state.sh b/src/_base/docker/image/console/root/lib/task/state.sh index bdd6b6874..c0e00419c 100644 --- a/src/_base/docker/image/console/root/lib/task/state.sh +++ b/src/_base/docker/image/console/root/lib/task/state.sh @@ -2,7 +2,7 @@ function task_state() { - task "database:available" + task database:available echo "Ready!" } diff --git a/src/_base/harness/attributes/common.yml b/src/_base/harness/attributes/common.yml index 5da795fb3..703f34124 100644 --- a/src/_base/harness/attributes/common.yml +++ b/src/_base/harness/attributes/common.yml @@ -102,7 +102,7 @@ attributes.default: build: when: -f "composer.json" steps: - - task "composer:install" + - task composer:install install: steps: [] init: @@ -123,18 +123,18 @@ attributes.default: steps: - | if [ "$APP_BUILD" == "static" ] && [ -f package-lock.json ]; then - run "npm clean-install" + run npm clean-install else - run "npm install" + run npm install fi - | if [ "$(jq ".scripts.build != null" < package.json)" != "false" ]; then - run "npm run build" + run npm run build fi - | if [ "$APP_BUILD" == "static" ]; then - run "rm -rf node_modules/" - run "npm cache clean --force" + run rm -rf node_modules/ + run npm cache clean --force fi git: diff --git a/src/_base/harness/config/commands.yml b/src/_base/harness/config/commands.yml index 07f276164..7130c6be1 100644 --- a/src/_base/harness/config/commands.yml +++ b/src/_base/harness/config/commands.yml @@ -92,7 +92,7 @@ command('db console'): COMPOSE_PROJECT_NAME: = @('namespace') exec: | #!bash(workspace:/)|@ - passthru "docker-compose exec console bash -c 'mysql -h\"\$DB_HOST\" -u\"\$DB_USER\" -p\"\$DB_PASS\" \"\$DB_NAME\"'" + passthru docker-compose exec console mysql --host "${DB_HOST}" --user "${DB_USER}" "-p${DB_PASS}" "${DB_NAME}" command('assets download'): env: @@ -100,7 +100,7 @@ command('assets download'): AWS_KEY: =@('aws.key') exec: | #!bash(workspace:/)|@ - passthru ws.aws s3 sync @('assets.remote') @('assets.local') + passthru ws.aws s3 sync '@('assets.remote')' '@('assets.local')' command('assets upload'): env: @@ -108,7 +108,7 @@ command('assets upload'): AWS_KEY: =@('aws.key') exec: | #!bash(workspace:/)|@ - passthru ws.aws s3 sync @('assets.local') @('assets.remote') + passthru ws.aws s3 sync '@('assets.local')' '@('assets.remote')' command('feature docker-sync (on|off)'): env: @@ -135,28 +135,28 @@ command('frontend build'): COMPOSE_PROJECT_NAME: = @('namespace') exec: | #!bash(workspace:/)|@ - passthru "docker-compose exec -u build console bash -i -c 'app build:frontend'" + passthru docker-compose exec -u build console app build:frontend command('frontend watch'): env: COMPOSE_PROJECT_NAME: = @('namespace') exec: | #!bash(workspace:/)|@ - passthru "docker-compose exec -u build console bash -i -c 'cd @('frontend.path'); @('frontend.watch')'" + passthru docker-compose exec -u build --workdir '@('frontend.path')' console @('frontend.watch') command('frontend console'): env: COMPOSE_PROJECT_NAME: = @('namespace') exec: | #!bash(workspace:/)|@ - passthru "docker-compose exec -u build console bash -i -c 'cd @('frontend.path'); bash'" + passthru docker-compose exec -u build console --workdir '@('frontend.path')' bash command('port '): env: COMPOSE_PROJECT_NAME: = @('namespace') exec: | #!bash(workspace:/)|= - passthru docker port $(docker-compose ps -q ={input.argument('service')}) + passthru docker port "$(docker-compose ps -q ={input.argument('service')})" command('service php-fpm restart'): env: @@ -164,8 +164,8 @@ command('service php-fpm restart'): exec: | #!bash(workspace:/)|@ passthru ws install --step=prepare - passthru "docker-compose exec console bash -c 'cp -r /.my127ws/docker/image/console/root/usr/local/etc/php/conf.d/* /usr/local/etc/php/conf.d/'" - passthru "docker-compose exec php-fpm bash -c 'cp -r /.my127ws/docker/image/php-fpm/root/usr/local/etc/php/conf.d/* /usr/local/etc/php/conf.d/'" + passthru docker-compose exec console bash -c 'cp -r /.my127ws/docker/image/console/root/usr/local/etc/php/conf.d/* /usr/local/etc/php/conf.d/' + passthru docker-compose exec php-fpm bash -c 'cp -r /.my127ws/docker/image/php-fpm/root/usr/local/etc/php/conf.d/* /usr/local/etc/php/conf.d/' passthru docker-compose exec php-fpm supervisorctl restart php-fpm command('set '): @@ -217,9 +217,10 @@ command('feature xdebug cli (on|off)'): command('db import '): env: COMPOSE_PROJECT_NAME: = @('namespace') + DATABASE_FILE: = input.argument('database_file') exec: | #!bash(workspace:/)|= - passthru "docker-compose exec -u build console bash -i -c 'app database:import ={input.argument('database_file')}'" + passthru docker-compose exec -u build console app database:import "$DATABASE_FILE" command('harness update existing'): env: diff --git a/src/_base/harness/config/events.yml b/src/_base/harness/config/events.yml index dcdc8704f..3b9ee0bc7 100644 --- a/src/_base/harness/config/events.yml +++ b/src/_base/harness/config/events.yml @@ -3,10 +3,13 @@ after('harness.install'): | #!bash ws enable -after('harness.refresh'): | - #!bash(workspace:/)|@ - run docker-compose -p @('namespace') stop - passthru "docker-compose config --services | grep -v php-fpm | xargs docker-compose pull" - passthru "docker-compose config --services | grep -v cron | grep -v job-queue-consumer | grep -v jenkins-runner | xargs docker-compose build --pull" - passthru "docker-compose config --services | grep -v cron | grep -v job-queue-consumer | grep -v jenkins-runner | xargs docker-compose up -d" - run docker-compose -p @('namespace') up -d --build +after('harness.refresh'): + env: + COMPOSE_PROJECT: = @('namespace') + exec: | + #!bash(workspace:/)|@ + run docker-compose stop + passthru "docker-compose config --services | grep -v php-fpm | xargs docker-compose pull" + passthru "docker-compose config --services | grep -v cron | grep -v job-queue-consumer | grep -v jenkins-runner | xargs docker-compose build --pull" + passthru "docker-compose config --services | grep -v cron | grep -v job-queue-consumer | grep -v jenkins-runner | xargs docker-compose up -d" + run docker-compose up -d --build diff --git a/src/akeneo/docker/image/console/root/lib/task/composer/install.sh.twig b/src/akeneo/docker/image/console/root/lib/task/composer/install.sh.twig index e1d5e2d5d..b9e2a9806 100644 --- a/src/akeneo/docker/image/console/root/lib/task/composer/install.sh.twig +++ b/src/akeneo/docker/image/console/root/lib/task/composer/install.sh.twig @@ -3,8 +3,8 @@ function task_composer_install() { {% if @('app.mode') == 'development' %} - passthru "composer install --no-interaction --optimize-autoloader" + passthru composer install --no-interaction --optimize-autoloader {% else %} - passthru "composer install --no-interaction --no-dev --optimize-autoloader" + passthru composer install --no-interaction --no-dev --optimize-autoloader {% endif %} } diff --git a/src/akeneo/harness.yml b/src/akeneo/harness.yml index 56d9b8493..f61a0ab6e 100644 --- a/src/akeneo/harness.yml +++ b/src/akeneo/harness.yml @@ -42,34 +42,34 @@ attributes: default_authentication_plugin: mysql_native_password import: steps: - - passthru "echo 'Importing database file'" + - passthru echo 'Importing database file' - run "set -e -o pipefail; pv --force \"$1\" | zcat | mysql -h \"$DB_HOST\" -u \"$DB_ADMIN_USER\" -p\"$DB_ADMIN_PASS\" \"$DB_NAME\"" - - passthru "bin/console doctrine:migrations:migrate --no-interaction --allow-no-migration" - - passthru "echo 'Reindexing Elasticsearch'" - - run "bin/console akeneo:elasticsearch:reset-indexes -n" - - run "bin/console pim:product:index --all" - - run "bin/console pim:product-model:index --all" - - passthru "echo 'Clearing cache'" - - run "bin/console c:c" - - passthru "echo 'Done'" + - passthru bin/console doctrine:migrations:migrate --no-interaction --allow-no-migration + - passthru echo 'Reindexing Elasticsearch' + - run bin/console akeneo:elasticsearch:reset-indexes -n + - run bin/console pim:product:index --all + - run bin/console pim:product-model:index --all + - passthru echo 'Clearing cache' + - run bin/console c:c + - passthru echo 'Done' backend: build: steps: - - task "composer:install" + - task composer:install install: steps: - - passthru "bin/console pim:installer:db --catalog vendor/akeneo/pim-community-dev/src/Akeneo/Platform/Bundle/InstallerBundle/Resources/fixtures/minimal" - - task "overlay:apply" - - task "assets:dump" + - passthru bin/console pim:installer:db --catalog vendor/akeneo/pim-community-dev/src/Akeneo/Platform/Bundle/InstallerBundle/Resources/fixtures/minimal + - task overlay:apply + - task assets:dump init: steps: - - passthru "bin/console doctrine:migrations:migrate --no-interaction --allow-no-migration" - - run "bin/console akeneo:elasticsearch:reset-indexes --no-interaction" - - run "bin/console pim:product:index --all" - - run "bin/console pim:product-model:index --all" + - passthru bin/console doctrine:migrations:migrate --no-interaction --allow-no-migration + - run bin/console akeneo:elasticsearch:reset-indexes --no-interaction + - run bin/console pim:product:index --all + - run bin/console pim:product-model:index --all migrate: steps: - - passthru "bin/console doctrine:migrations:migrate --no-interaction --allow-no-migration" + - passthru bin/console doctrine:migrations:migrate --no-interaction --allow-no-migration cron: jobs: - 30 1 * * * /cron-run-with-env.sh /app/bin/console pim:versioning:refresh --env=prod @@ -88,15 +88,15 @@ attributes: build: when: -f "package.json" steps: - - run "yarn install" - - run "bin/console pim:installer:assets --symlink --clean" + - run yarn install + - run bin/console pim:installer:assets --symlink --clean - | if [ "$APP_BUILD" == "static" ]; then - run "yarn run webpack" - run "rm -rf node_modules/" - run "yarn cache clean" + run yarn run webpack + run rm -rf node_modules/ + run yarn cache clean else - run "yarn run webpack-dev" + run yarn run webpack-dev fi docker: image: diff --git a/src/drupal8/docker/image/console/root/lib/task/media/dump.sh b/src/drupal8/docker/image/console/root/lib/task/media/dump.sh index 8a59bb306..6d7f62b65 100644 --- a/src/drupal8/docker/image/console/root/lib/task/media/dump.sh +++ b/src/drupal8/docker/image/console/root/lib/task/media/dump.sh @@ -5,11 +5,11 @@ function task_media_dump() local ASSETS_DIR="${ASSETS_DIR:-tools/assets/development}" if [ ! -d "/app/${ASSETS_DIR}" ]; then - run "mkdir -p /app/${ASSETS_DIR}" + run mkdir -p "/app/${ASSETS_DIR}" fi if [ ! -d "/app/docroot/sites/default/files" ]; then - run "mkdir -p /app/docroot/sites/default/files" + run mkdir -p "/app/docroot/sites/default/files" fi cd /app || exit diff --git a/src/drupal8/harness.yml b/src/drupal8/harness.yml index 2f5c99c46..0f3494ebf 100644 --- a/src/drupal8/harness.yml +++ b/src/drupal8/harness.yml @@ -35,35 +35,35 @@ attributes: backend: build: steps: - - task "composer:install" + - task composer:install install: steps: - | - passthru "drupal site:install standard \ + passthru drupal site:install standard \ --langcode=en \ \ --db-type=mysql \ - --db-host=${DB_HOST} \ - --db-name=${DB_NAME} \ - --db-user=${DB_USER} \ - --db-pass=${DB_PASS} \ - --db-port=3306 \ + "--db-host=${DB_HOST}" \ + "--db-name=${DB_NAME}" \ + "--db-user=${DB_USER}" \ + "--db-pass=${DB_PASS}" \ + "--db-port=3306" \ \ --site-name=Drupal \ --site-mail=admin@example.com \ \ --account-name=admin \ --account-mail=admin@example.com \ - --account-pass=admin123" - - run "chmod 755 /app/docroot/sites/default" - - task "overlay:apply" - - task "assets:dump" + --account-pass=admin123 + - run chmod 755 /app/docroot/sites/default + - task overlay:apply + - task assets:dump migrate: steps: - - run "drupal cache:rebuild" - - run "drupal update:entities" - - run "drupal update:execute" - - run "drupal cache:rebuild" + - run drupal cache:rebuild + - run drupal update:entities + - run drupal update:execute + - run drupal cache:rebuild docker: image: console: = 'my127/drupal8:' ~ @('php.version') ~ '-fpm-stretch-console' diff --git a/src/magento1/harness.yml b/src/magento1/harness.yml index 94fb0e9c7..15563fb1c 100644 --- a/src/magento1/harness.yml +++ b/src/magento1/harness.yml @@ -52,48 +52,48 @@ attributes: backend: build: steps: - - task "composer:install" - - task "n98:install" + - task composer:install + - task n98:install install: steps: - - run "rm -f /app/public/app/etc/local.xml" + - run rm -f /app/public/app/etc/local.xml - | - passthru "php public/install.php -- \ - --license_agreement_accepted 'yes' \ - --locale 'en_GB' \ + passthru php public/install.php -- \ + --license_agreement_accepted yes \ + --locale en_GB \ --timezone 'Europe/London' \ - --default_currency 'GBP' \ - --db_model 'mysql4' \ - --db_host '${DB_HOST}' \ - --db_name '${DB_NAME}' \ - --db_user '${DB_USER}' \ - --db_pass '${DB_PASS}' \ - --url 'https://${APP_HOST}/' \ - --skip_url_validation 'yes' \ - --use_rewrites 'yes' \ - --use_secure 'yes' \ - --secure_base_url 'https://${APP_HOST}/' \ - --use_secure_admin 'yes' \ - --admin_firstname 'First' \ - --admin_lastname 'Last' \ + --default_currency GBP \ + --db_model mysql4 \ + --db_host "${DB_HOST}" \ + --db_name "${DB_NAME}" \ + --db_user "${DB_USER}" \ + --db_pass "${DB_PASS}" \ + --url "https://${APP_HOST}/" \ + --skip_url_validation yes \ + --use_rewrites yes \ + --use_secure yes \ + --secure_base_url "https://${APP_HOST}/" \ + --use_secure_admin yes \ + --admin_firstname First \ + --admin_lastname Last \ --admin_email 'admin@example.com' \ - --admin_username 'admin' \ - --admin_password 'admin123admin123' \ - --encryption_key '${MAGENTO_CRYPT_KEY}' \ - --session_save 'db' \ - --admin_frontname 'admin'" - - run "rm -f /app/public/app/etc/local.xml" - - task "overlay:apply" - - task "assets:dump" + --admin_username admin \ + --admin_password admin123admin123 \ + --encryption_key "${MAGENTO_CRYPT_KEY}" \ + --session_save db \ + --admin_frontname admin + - run rm -f /app/public/app/etc/local.xml + - task overlay:apply + - task assets:dump init: steps: - - run "n98-magerun.phar config:set 'web/unsecure/base_url' 'https://${APP_HOST}/'" - - run "n98-magerun.phar config:set 'web/secure/base_url' 'https://${APP_HOST}/'" + - run n98-magerun.phar config:set 'web/unsecure/base_url' "https://${APP_HOST}/" + - run n98-magerun.phar config:set 'web/secure/base_url' "https://${APP_HOST}/" migrate: steps: - - run "n98-magerun.phar sys:setup:incremental -n" - - run "n98-magerun.phar index:reindex:all" - - run "n98-magerun.phar cache:clean" + - run n98-magerun.phar sys:setup:incremental -n + - run n98-magerun.phar index:reindex:all + - run n98-magerun.phar cache:clean docker: image: console: = 'my127/magento1:' ~ @('php.version') ~ '-fpm-stretch-console' diff --git a/src/magento2/docker/image/console/root/lib/task/magento/dump-config.sh b/src/magento2/docker/image/console/root/lib/task/magento/dump-config.sh index b386aae8c..e7a09d63d 100644 --- a/src/magento2/docker/image/console/root/lib/task/magento/dump-config.sh +++ b/src/magento2/docker/image/console/root/lib/task/magento/dump-config.sh @@ -2,10 +2,10 @@ function task_magento_dump-config() { - run "cp /app/app/etc/env.php /app/app/etc/env.php.bak" + run cp /app/app/etc/env.php /app/app/etc/env.php.bak - run "magento app:config:dump" - run "strip-magento-config" + run magento app:config:dump + run strip-magento-config - run "mv /app/app/etc/env.php.bak /app/app/etc/env.php" + run mv /app/app/etc/env.php.bak /app/app/etc/env.php } diff --git a/src/magento2/harness.yml b/src/magento2/harness.yml index 3874e7142..932f2a2ee 100644 --- a/src/magento2/harness.yml +++ b/src/magento2/harness.yml @@ -61,20 +61,20 @@ attributes: backend: build: steps: - - task "composer:install" - - task "magento:tidy" + - task composer:install + - task magento:tidy - | if [ "$APP_BUILD" == "static" ] ; then - run "mv app/etc/env.php app/etc/env-backup.php" - passthru "bin/magento setup:di:compile" - run "composer dump-autoload --optimize" - run "mv app/etc/env-backup.php app/etc/env.php" + run mv app/etc/env.php app/etc/env-backup.php + passthru bin/magento setup:di:compile + run composer dump-autoload --optimize + run mv app/etc/env-backup.php app/etc/env.php fi - | if [ "$APP_BUILD" == "static" ] && validate-magento-config ; then - run "mv app/etc/env.php app/etc/env-backup.php" - passthru "bin/magento setup:static-content:deploy -f" - run "mv app/etc/env-backup.php app/etc/env.php" + run mv app/etc/env.php app/etc/env-backup.php + passthru bin/magento setup:static-content:deploy -f + run mv app/etc/env-backup.php app/etc/env.php else echo -n "$(date +%s)" > pub/static/deployed_version.txt fi @@ -82,14 +82,14 @@ attributes: steps: # the magento installer will not work if the dpeloyment config is present so we remove and # restore it after installation. - - run "rm -f /app/app/etc/env.php" - - run "rm -f /app/app/etc/config.php" + - run rm -f /app/app/etc/env.php + - run rm -f /app/app/etc/config.php - | passthru "magento setup:install \ - --key=${MAGENTO_CRYPT_KEY} \ + --key='${MAGENTO_CRYPT_KEY}' \ \ --backend-frontname=admin \ - --base-url=https://${APP_HOST}/ \ + --base-url='https://${APP_HOST}/' \ \ --admin-user=admin \ --admin-password=admin123 \ @@ -97,24 +97,24 @@ attributes: --admin-firstname=First \ --admin-lastname=Last \ \ - --db-host=${DB_HOST} \ - --db-name=${DB_NAME} \ - --db-user=${DB_USER} \ - --db-password=${DB_PASS} \ + --db-host='${DB_HOST}' \ + --db-name='${DB_NAME}' \ + --db-user='${DB_USER}' \ + --db-password='${DB_PASS}' \ \ --session-save=redis \ - --session-save-redis-host=${REDIS_SESSION_HOST} \ - --session-save-redis-port=${REDIS_SESSION_PORT} \ + --session-save-redis-host='${REDIS_SESSION_HOST}' \ + --session-save-redis-port='${REDIS_SESSION_PORT}' \ --session-save-redis-db=1 \ \ --cache-backend=redis \ - --cache-backend-redis-server=${REDIS_HOST} \ - --cache-backend-redis-port=${REDIS_PORT} \ + --cache-backend-redis-server='${REDIS_HOST}' \ + --cache-backend-redis-port='${REDIS_PORT}' \ --cache-backend-redis-db=2 \ \ --page-cache=redis \ - --page-cache-redis-server=${REDIS_HOST} \ - --page-cache-redis-port=${REDIS_PORT} \ + --page-cache-redis-server='${REDIS_HOST}' \ + --page-cache-redis-port='${REDIS_PORT}' \ --page-cache-redis-db=3" # magento doesn't respond with an exit code when it fails so we check # if the install succeeded or not here. @@ -123,26 +123,26 @@ attributes: (>&2 cat /tmp/my127ws-stderr.txt) exit 1 fi - - run "rm -f /app/app/etc/env.php" - - task "overlay:apply" - - task "magento:dump-config" - - task "assets:dump" + - run rm -f /app/app/etc/env.php + - task overlay:apply + - task magento:dump-config + - task assets:dump init: steps: - - task "rabbitmq:vhosts" - - run "magento setup:upgrade --keep-generated" - - run "magento config:set 'web/unsecure/base_url' 'https://${APP_HOST}/'" - - run "magento config:set 'web/secure/base_url' 'https://${APP_HOST}/'" - - run "magento config:set 'web/secure/use_in_frontend' '1'" - - run "magento config:set 'web/secure/use_in_adminhtml' '1'" - - run "magento config:set 'web/seo/use_rewrites' '1'" + - task rabbitmq:vhosts + - run magento setup:upgrade --keep-generated + - run magento config:set 'web/unsecure/base_url' "https://${APP_HOST}/" + - run magento config:set 'web/secure/base_url' "https://${APP_HOST}/" + - run magento config:set 'web/secure/use_in_frontend' 1 + - run magento config:set 'web/secure/use_in_adminhtml' 1 + - run magento config:set 'web/seo/use_rewrites' 1 - if [[ "$HAS_VARNISH" == "true" ]]; then - run "magento config:set 'system/full_page_cache/caching_application' '2'"; + run magento config:set 'system/full_page_cache/caching_application' 2; fi migrate: steps: - - run "magento setup:upgrade --keep-generated" - - run "magento cache:clean" + - run magento setup:upgrade --keep-generated + - run magento cache:clean cron: jobs: - "= (@('app.mode') == 'production' ? '* * * * * /cron-run-with-env.sh /app/bin/magento cron:run' : '')" diff --git a/src/spryker/docker/image/console/root/lib/task/skeleton/apply.sh.twig b/src/spryker/docker/image/console/root/lib/task/skeleton/apply.sh.twig index 4f0019687..f70c4132c 100644 --- a/src/spryker/docker/image/console/root/lib/task/skeleton/apply.sh.twig +++ b/src/spryker/docker/image/console/root/lib/task/skeleton/apply.sh.twig @@ -6,15 +6,15 @@ function task_skeleton_apply() fetch_demoshop merge_composer_json fi - run "rsync --exclude='*.twig' --exclude='_twig' --exclude='composer-harness.json' -a /home/build/application/skeleton/ /app/" + run rsync --exclude='*.twig' --exclude='_twig' --exclude='composer-harness.json' -a /home/build/application/skeleton/ /app/ } function fetch_demoshop() { - run "git clone --depth 1 --branch 201903.0-p1 {{ @('spryker.demoshop-url') }} /tmp/spryker" + run git clone --depth 1 --branch 201903.0-p1 "{{ @('spryker.demoshop-url') }}" /tmp/spryker run "shopt -s dotglob && mv /tmp/spryker/* /app" - run "rm -rf /tmp/spryker" - run "rm -rf /app/.git" + run rm -rf /tmp/spryker + run rm -rf /app/.git } # Merge core composer.json with composer-harness.json @@ -27,10 +27,14 @@ function merge_composer_json() local merged_file="/app/composer-merged.json" run "jq -s '.[0] * .[1]' $core_file $override_file > $merged_file" - run "mv $merged_file $core_file" + run mv "$merged_file" "$core_file" - local new_composer_packages="" - new_composer_packages="$(jq -r '.["require-dev"] * .["require"] | keys[]' $override_file | tr '\n' ' ')" + local shared_package_list="" + local new_composer_packages=() + shared_package_list="$(jq -r '.["require-dev"] * .["require"] | keys[]' $override_file | tr '\n' ' ')" + IFS=" " read -r -a new_composer_packages <<< "$shared_package_list" - [ -n "$new_composer_packages" ] && passthru "COMPOSER_PROCESS_TIMEOUT=600 composer update --with-dependencies --no-interaction --profile $new_composer_packages" + {% verbatim %} + [ "${#new_composer_packages[@]}" -gt 0 ] && passthru env COMPOSER_PROCESS_TIMEOUT=600 composer update --with-dependencies --no-interaction --profile "${new_composer_packages[@]}" + {% endverbatim %} } diff --git a/src/spryker/docker/image/console/root/lib/task/spryker/build.sh.twig b/src/spryker/docker/image/console/root/lib/task/spryker/build.sh.twig index 67cbf7d25..d6ab5b1a4 100644 --- a/src/spryker/docker/image/console/root/lib/task/spryker/build.sh.twig +++ b/src/spryker/docker/image/console/root/lib/task/spryker/build.sh.twig @@ -3,15 +3,15 @@ function task_spryker_build() { {% if @('app.mode') == 'development' %} - passthru "composer install --no-interaction --optimize-autoloader" + passthru composer install --no-interaction --optimize-autoloader {% else %} - passthru "composer install --no-interaction --no-dev --optimize-autoloader" + passthru composer install --no-interaction --no-dev --optimize-autoloader {% endif %} - passthru "vendor/bin/install -r docker -s generate" - passthru "vendor/bin/install -r docker -s cache" + passthru vendor/bin/install -r docker -s generate + passthru vendor/bin/install -r docker -s cache {% if @('app.mode') == 'development' %} - passthru "composer dumpautoload" + passthru composer dumpautoload {% else %} - passthru "composer dumpautoload -a" + passthru composer dumpautoload -a {% endif %} } diff --git a/src/spryker/docker/image/console/root/lib/task/spryker/demodata.sh b/src/spryker/docker/image/console/root/lib/task/spryker/demodata.sh index f3b3baedf..6719a0c46 100644 --- a/src/spryker/docker/image/console/root/lib/task/spryker/demodata.sh +++ b/src/spryker/docker/image/console/root/lib/task/spryker/demodata.sh @@ -2,5 +2,5 @@ function task_spryker_demodata() { - passthru "PGPASSWORD=$DB_PASS vendor/bin/install -r docker -s demodata" + PGPASSWORD=$DB_PASS passthru vendor/bin/install -r docker -s demodata } diff --git a/src/spryker/docker/image/console/root/lib/task/spryker/init.sh b/src/spryker/docker/image/console/root/lib/task/spryker/init.sh index 5fc25cc3d..16f31c892 100644 --- a/src/spryker/docker/image/console/root/lib/task/spryker/init.sh +++ b/src/spryker/docker/image/console/root/lib/task/spryker/init.sh @@ -2,6 +2,6 @@ function task_spryker_init() { - run "vendor/bin/console propel:install -o" - passthru "PGPASSWORD=$DB_PASS vendor/bin/install -r docker -s jenkins-up" + run vendor/bin/console propel:install -o + PGPASSWORD="$DB_PASS" passthru vendor/bin/install -r docker -s jenkins-up } diff --git a/src/spryker/docker/image/console/root/lib/task/spryker/install.sh b/src/spryker/docker/image/console/root/lib/task/spryker/install.sh index 19f21fc0b..63fa6a9d8 100644 --- a/src/spryker/docker/image/console/root/lib/task/spryker/install.sh +++ b/src/spryker/docker/image/console/root/lib/task/spryker/install.sh @@ -2,5 +2,5 @@ function task_spryker_install() { - passthru "PGPASSWORD=$DB_PASS vendor/bin/install -r docker -x frontend" + PGPASSWORD="$DB_PASS" passthru vendor/bin/install -r docker -x frontend } diff --git a/src/spryker/docker/image/console/root/lib/task/spryker/migrate.sh b/src/spryker/docker/image/console/root/lib/task/spryker/migrate.sh index d30b83b59..5806a7430 100644 --- a/src/spryker/docker/image/console/root/lib/task/spryker/migrate.sh +++ b/src/spryker/docker/image/console/root/lib/task/spryker/migrate.sh @@ -2,5 +2,5 @@ function task_spryker_migrate() { - passthru "vendor/bin/console propel:migrate" + passthru vendor/bin/console propel:migrate } diff --git a/src/spryker/docker/image/jenkins-runner/root/lib/task/jenkins/setup.sh b/src/spryker/docker/image/jenkins-runner/root/lib/task/jenkins/setup.sh index fb008c59c..5c3a323a3 100644 --- a/src/spryker/docker/image/jenkins-runner/root/lib/task/jenkins/setup.sh +++ b/src/spryker/docker/image/jenkins-runner/root/lib/task/jenkins/setup.sh @@ -4,7 +4,7 @@ function task_jenkins_setup() { echo -e "Bootstrapping jenkins runner" - task "http:wait" "$JENKINS_URL" + task http:wait "$JENKINS_URL" curl -s "$JENKINS_URL/jnlpJars/jenkins-cli.jar" -o /usr/local/bin/jenkins-cli.jar curl -s "$JENKINS_URL/jnlpJars/slave.jar" -o /usr/local/bin/jenkins-slave.jar diff --git a/src/spryker/harness.yml b/src/spryker/harness.yml index 9c5c2e751..7032c29d1 100644 --- a/src/spryker/harness.yml +++ b/src/spryker/harness.yml @@ -44,21 +44,21 @@ attributes: build: when: 'true' steps: - - task "spryker:build" + - task spryker:build install: steps: - - task "rabbitmq:vhosts" - - task "http:wait" $JENKINS_URL - - task "spryker:install" - - task "overlay:apply" + - task rabbitmq:vhosts + - task http:wait "$JENKINS_URL" + - task spryker:install + - task overlay:apply init: steps: - - task "http:wait" $JENKINS_URL - - task "rabbitmq:vhosts" - - task "spryker:init" + - task http:wait "$JENKINS_URL" + - task rabbitmq:vhosts + - task spryker:init migrate: steps: - - task "spryker:migrate" + - task spryker:migrate frontend: yves: watch: npm run yves:watch @@ -67,11 +67,11 @@ attributes: build: when: -f "package.json" steps: - - run "vendor/bin/install -r docker -s frontend" + - run vendor/bin/install -r docker -s frontend - | if [ "$APP_BUILD" == "static" ]; then run "rm -rf node_modules/ vendor/*/*/assets/Zed/node_modules" - run "npm cache clean --force" + run npm cache clean --force fi docker: image: @@ -181,13 +181,13 @@ command('frontend yves watch'): COMPOSE_PROJECT_NAME: = @('namespace') exec: | #!bash(workspace:/)|@ - passthru "docker-compose exec -u build console bash -i -c 'cd @('frontend.path'); @('frontend.yves.watch')'" + passthru docker-compose exec -u build --workdir '@('frontend.path')' console @('frontend.yves.watch') command('frontend zed watch'): env: COMPOSE_PROJECT_NAME: = @('namespace') exec: | #!bash(workspace:/)|@ - passthru "docker-compose exec -u build console bash -i -c 'cd @('frontend.path'); @('frontend.zed.watch')'" + passthru docker-compose exec -u build --workdir '@('frontend.path')' console @('frontend.zed.watch') --- import: - harness/config/*.yml diff --git a/src/wordpress/docker/image/console/root/lib/task/wordpress/download.sh.twig b/src/wordpress/docker/image/console/root/lib/task/wordpress/download.sh.twig index 4724d6943..474bf8163 100644 --- a/src/wordpress/docker/image/console/root/lib/task/wordpress/download.sh.twig +++ b/src/wordpress/docker/image/console/root/lib/task/wordpress/download.sh.twig @@ -3,7 +3,7 @@ function task_wordpress_download() { if [ ! -f "{{ @('wordpress.install_directory') }}/index.php" ]; then - passthru "bin/wp-cli.phar core download \ - --path='{{ @('wordpress.install_directory') }}'" + passthru bin/wp-cli.phar core download \ + "--path={{ @('wordpress.install_directory') }}" fi } diff --git a/src/wordpress/harness.yml b/src/wordpress/harness.yml index a619521b0..392ebf619 100644 --- a/src/wordpress/harness.yml +++ b/src/wordpress/harness.yml @@ -39,27 +39,27 @@ attributes: backend: build: steps: - - task "wp-cli:install" - - task "wordpress:download" - - task "composer:install" + - task wp-cli:install + - task wordpress:download + - task composer:install install: steps: - | - passthru "bin/wp-cli.phar core install \ - --path='${WORDPRESS_INSTALL_DIRECTORY}' \ + passthru bin/wp-cli.phar core install \ + "--path=${WORDPRESS_INSTALL_DIRECTORY}" \ --skip-email \ - --url='$(eval echo $WORDPRESS_URL)' \ - --title='${APP_NAME}' \ + "--url=$(eval echo $WORDPRESS_URL)" \ + "--title=${APP_NAME}" \ --admin_user=admin \ --admin_password=admin123 \ - --admin_email=admin@localhost.local" - - task "assets:dump" + --admin_email=admin@localhost.local + - task assets:dump init: steps: - - run "bin/wp-cli.phar --path='${WORDPRESS_INSTALL_DIRECTORY}' option update siteurl $(eval echo $WORDPRESS_URL)" - - run "bin/wp-cli.phar --path='${WORDPRESS_INSTALL_DIRECTORY}' option update home $(eval echo $WORDPRESS_URL)" - - run "bin/wp-cli.phar --path='${WORDPRESS_INSTALL_DIRECTORY}' user create admin admin@localhost.local --role=administrator --user_pass=admin123 || exit 0" - - run "bin/wp-cli.phar --path='${WORDPRESS_INSTALL_DIRECTORY}' user update admin --role=administrator --user_pass=admin123 --skip-email" + - run bin/wp-cli.phar "--path=${WORDPRESS_INSTALL_DIRECTORY}" option update siteurl "$(eval echo "${WORDPRESS_URL}")" + - run bin/wp-cli.phar "--path=${WORDPRESS_INSTALL_DIRECTORY}" option update home "$(eval echo "${WORDPRESS_URL}")" + - run "bin/wp-cli.phar '--path=${WORDPRESS_INSTALL_DIRECTORY}' user create admin admin@localhost.local --role=administrator --user_pass=admin123 || exit 0" + - run bin/wp-cli.phar "--path=${WORDPRESS_INSTALL_DIRECTORY}" user update admin --role=administrator --user_pass=admin123 --skip-email docker: image: console: = 'my127/wordpress:' ~ @('php.version') ~ '-fpm-stretch-console'