#!/usr/bin/env bash
set -eo pipefail
[[ $DOKKU_TRACE ]] && set -x
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
source "$PLUGIN_AVAILABLE_PATH/config/functions"
source "$PLUGIN_AVAILABLE_PATH/ps/functions"

ps_rebuildall_cmd() {
  declare desc="rebuilds all apps from source"
  local cmd="ps:rebuildall"
  local GNU_PARALLEL

  if which parallel >/dev/null 2>&1; then
    dokku_log_info1 "Rebuilding in parallel"
    GNU_PARALLEL=$(parallel -V 2>&1 | grep GNU || true)
    if [[ -z "$GNU_PARALLEL" ]]; then
      # shellcheck disable=SC2046
      parallel -i bash -c "dokku ps:rebuild {}" -- $(dokku_apps)
    else
      dokku_apps | parallel 'dokku ps:rebuild {}'
    fi
    return
  fi

  for app in $(dokku_apps); do
    if ! (is_deployed "$app"); then
      dokku_log_warn "App $app has not been deployed"
      continue
    fi

    dokku_log_verbose "Rebuilding app $app ..."
    if ps_rebuild "$app"; then
      continue
    fi
    dokku_log_warn "dokku ps:rebuild ${app} failed"
  done
}

ps_rebuildall_cmd "$@"
