diff --git a/docs/appendices/0.29.0-migration-guide.md b/docs/appendices/0.29.0-migration-guide.md index 0dc3d4ffe..3aced033b 100644 --- a/docs/appendices/0.29.0-migration-guide.md +++ b/docs/appendices/0.29.0-migration-guide.md @@ -13,3 +13,5 @@ - The `DOKKU_WAIT_TO_RETIRE` environment variable has been migrated to a `checks` property named `wait-to-retire` and will be ignored if set as an environment variable. - The `Procfile` is now extracted when source code is extracted for a build and not from the built image. Users can specify alternative paths via the `procfile-path` property of the `ps` plugin. See the [process management documentation](/docs/processes/process-management.md#changing-the-procfile-location) for more information on how to configure the `Procfile` path for your application. - The `domains-setup` trigger has been removed. Initial app domains will now be automatically setup during app creation. +- The `URLS` file containing generated urls for an app is no longer generated or referenced. Users should retrieve app urls via the new `domains-urls` plugin trigger. +- The common function `get_app_urls` has been removed. Users should retrieve app urls via the new `domains-urls` plugin trigger. diff --git a/docs/development/plugin-triggers.md b/docs/development/plugin-triggers.md index 743ffcc6a..81a14ae57 100644 --- a/docs/development/plugin-triggers.md +++ b/docs/development/plugin-triggers.md @@ -236,6 +236,21 @@ set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x # TODO ``` +### `certs-exists` + +- Description: Echos `true` if certs exists for the app, `false` otherwise +- Invoked by: +- Arguments: `$APP` +- Example: + +```shell +#!/usr/bin/env bash + +set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x + +# TODO +``` + ### `check-deploy` - Description: Allows you to run checks on a deploy before Dokku allows the container to handle requests. @@ -713,6 +728,21 @@ set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x # TODO ``` +### `domains-urls` + +- Description: Gets an app's url(s) +- Invoked by: +- Arguments: `$APP $URL_TYPE` +- Example: + +```shell +#!/usr/bin/env bash + +set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x + +# TODO +``` + ### `domains-vhost-enabled` - Description: Checks if a virtual hosts are enabled for an app diff --git a/plugins/00_dokku-standard/subcommands/urls b/plugins/00_dokku-standard/subcommands/urls index f71fed601..1649aba5e 100755 --- a/plugins/00_dokku-standard/subcommands/urls +++ b/plugins/00_dokku-standard/subcommands/urls @@ -1,15 +1,15 @@ #!/usr/bin/env bash +source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions" set -eo pipefail [[ $DOKKU_TRACE ]] && set -x -source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions" cmd-urls() { declare desc="reports dokku vitals for troubleshooting" declare cmd="url" - declare APP="$2" + declare URL_TYPE="$1" APP="$2" verify_app_name "$APP" - get_app_urls "$@" + plugn trigger domains-urls "$APP" "$URL_TYPE" } cmd-urls "$@" diff --git a/plugins/caddy-vhosts/docker-args-process-deploy b/plugins/caddy-vhosts/docker-args-process-deploy index 60a4c232e..a5273b709 100755 --- a/plugins/caddy-vhosts/docker-args-process-deploy +++ b/plugins/caddy-vhosts/docker-args-process-deploy @@ -11,7 +11,6 @@ trigger-caddy-vhosts-docker-args-process-deploy() { local app_domains caddy_domains is_app_listening letsencrypt_email output proxy_container_port proxy_host_port port_map proxy_port_map proxy_scheme proxy_schemes scheme tls_internal local proxy_container_http_port proxy_container_http_port_candidate proxy_host_http_port_candidate local proxy_container_https_port proxy_container_https_port_candidate proxy_host_https_port_candidate - local app_urls_path="$DOKKU_ROOT/$APP/URLS" local STDIN=$(cat) if [[ "$PROC_TYPE" != "web" ]]; then @@ -128,9 +127,6 @@ trigger-caddy-vhosts-docker-args-process-deploy() { output="$output --label \"caddy.reverse_proxy={{ upstreams $proxy_container_http_port }}\"" fi - - echo "# THIS FILE IS GENERATED BY DOKKU - DO NOT EDIT, YOUR CHANGES WILL BE OVERWRITTEN" >"$app_urls_path" - xargs -I{} echo "$scheme://{}" <<<"$(echo "${app_domains}" | tr ' ' '\n' | sort -u)" >>"$app_urls_path" fi echo -n "$STDIN$output" diff --git a/plugins/certs/certs-exists b/plugins/certs/certs-exists new file mode 100755 index 000000000..25311583e --- /dev/null +++ b/plugins/certs/certs-exists @@ -0,0 +1,18 @@ +#!/usr/bin/env bash +source "$PLUGIN_AVAILABLE_PATH/certs/functions" +set -eo pipefail +[[ $DOKKU_TRACE ]] && set -x + +trigger-certs-certs-exists() { + declare desc="checks if certs exist" + declare trigger="certs-exists" + declare APP="$1" + + if is_ssl_enabled "$APP"; then + echo "true" + else + echo "false" + fi +} + +trigger-certs-certs-exists "$@" diff --git a/plugins/common/functions b/plugins/common/functions index 220527418..a7ef0324d 100755 --- a/plugins/common/functions +++ b/plugins/common/functions @@ -384,7 +384,7 @@ is_image_herokuish_based() { fi if [[ -n "$APP" ]]; then - DOKKU_APP_USER=$(config_get "$APP" DOKKU_APP_USER || true) + DOKKU_APP_USER=$(plugn trigger config-get "$APP" DOKKU_APP_USER || true) fi DOKKU_APP_USER=${DOKKU_APP_USER:="herokuishuser"} @@ -719,7 +719,7 @@ release_and_deploy() { dokku_log_info1 "Deploying $APP via the $DOKKU_SCHEDULER scheduler..." cmd-deploy "$APP" "$IMAGE_TAG" dokku_log_info2 "Application deployed:" - get_app_urls urls "$APP" | sed "s/^/ /" + plugn trigger domains-urls "$APP" urls | sed "s/^/ /" else dokku_log_info1 "Skipping deployment" fi @@ -904,113 +904,6 @@ get_container_ports() { echo "$container_ports" } -get_app_urls() { - declare desc="print an app's available urls" - declare URL_TYPE="$1" APP="$2" - local urls - - urls=$(plugn trigger app-urls "$APP" "$URL_TYPE") - if [[ -n "$urls" ]]; then - echo "$urls" | sort - else - internal_get_app_urls "$URL_TYPE" "$APP" | sort - fi -} - -internal_get_app_urls() { - declare desc="print an app's available urls" - source "$PLUGIN_AVAILABLE_PATH/certs/functions" - source "$PLUGIN_AVAILABLE_PATH/config/functions" - - local APP="$2" - local URLS_FILE="$DOKKU_ROOT/$APP/URLS" - local DOKKU_PROXY_PORT_MAP=$(config_get "$APP" DOKKU_PROXY_PORT_MAP || true) - - if [[ -s "$URLS_FILE" ]]; then - local app_urls="$(grep -v -E "^#" "$URLS_FILE")" - if [[ -n "$DOKKU_PROXY_PORT_MAP" ]]; then - local port_map app_vhost - local app_vhosts=$(plugn trigger domains-list "$APP") - for port_map in $DOKKU_PROXY_PORT_MAP; do - local scheme="$(awk -F ':' '{ print $1 }' <<<"$port_map")" - local listen_port="$(awk -F ':' '{ print $2 }' <<<"$port_map")" - for app_vhost in $app_vhosts; do - if [[ "$listen_port" != "80" ]] && [[ "$listen_port" != "443" ]]; then - port_urls+=" $scheme://$app_vhost:$listen_port " - else - port_urls+=" $scheme://$app_vhost " - fi - done - done - fi - local port_urls="$(echo "$port_urls" | xargs)" - local URLS="$(merge_dedupe_list "$port_urls $app_urls" " ")" - case "$1" in - url) - if is_ssl_enabled "$APP"; then - echo "$URLS" | tr ' ' '\n' | grep https | head -n1 - else - echo "$URLS" | tr ' ' '\n' | head -n1 - fi - ;; - urls) - echo "$URLS" | tr ' ' '\n' | sort - ;; - esac - else - if [[ -s "$DOKKU_ROOT/VHOST" ]]; then - while read -r VHOST || [[ -n "$VHOST" ]]; do - internal_get_app_url_with_vhost "$APP" "$VHOST" - done <"$DOKKU_ROOT/VHOST" - else - internal_get_app_url_with_vhost "$APP" "$(hostname -f)" - fi - fi -} - -internal_get_app_url_with_vhost() { - declare APP="$1" VHOST="$2" - - local RAW_TCP_PORTS="$(get_app_raw_tcp_ports "$APP")" - local DOKKU_PROXY_PORT_MAP=$(config_get "$APP" DOKKU_PROXY_PORT_MAP || true) - local SCHEME="http" - local SSL="$DOKKU_ROOT/$APP/tls" - if [[ -e "$SSL/server.crt" && -e "$SSL/server.key" ]]; then - local SCHEME="https" - fi - - if [[ "$(plugn trigger proxy-is-enabled "$APP")" == "false" ]]; then - if [[ -n "$RAW_TCP_PORTS" ]]; then - local APP_CONTAINER_PORTS="$(get_container_ports "$APP")" - local app_port - for app_port in $APP_CONTAINER_PORTS; do - echo "$VHOST:$app_port (container)" - done - else - local DOKKU_APP_WEB_LISTENERS PORT - DOKKU_APP_WEB_LISTENERS="$(plugn trigger network-get-listeners "$APP" "web" | xargs)" - for DOKKU_APP_WEB_LISTENER in $DOKKU_APP_WEB_LISTENERS; do - PORT="$(echo "$DOKKU_APP_WEB_LISTENER" | cut -d ':' -f2)" - echo "$SCHEME://$VHOST:$PORT (container)" - done - shopt -u nullglob - fi - elif [[ -n "$DOKKU_PROXY_PORT_MAP" ]]; then - local port_map - for port_map in $DOKKU_PROXY_PORT_MAP; do - local scheme="$(awk -F ':' '{ print $1 }' <<<"$port_map")" - local listen_port="$(awk -F ':' '{ print $2 }' <<<"$port_map")" - echo "$scheme://$VHOST:$listen_port" - done - elif [[ -n "$RAW_TCP_PORTS" ]]; then - for p in $RAW_TCP_PORTS; do - echo "http://$VHOST:$p" - done - else - echo "$SCHEME://$VHOST" - fi -} - get_json_value() { declare desc="return value of provided json key from a json stream on stdin" # JSON_NODE should be expresses as either a top-level object that has no children diff --git a/plugins/domains/domains-urls b/plugins/domains/domains-urls new file mode 100755 index 000000000..3e45c80d5 --- /dev/null +++ b/plugins/domains/domains-urls @@ -0,0 +1,35 @@ +#!/usr/bin/env bash +source "$PLUGIN_AVAILABLE_PATH/domains/internal-functions" +set -eo pipefail +[[ $DOKKU_TRACE ]] && set -x + +trigger-domains-domains-urls() { + declare desc="gets an app's urls" + declare trigger="domains-urls" + declare APP="$1" URL_TYPE="$2" + local urls + + local SCHEME="http" + local DEFAULT_LISTEN_PORT="80" + if [[ "$(plugn trigger certs-exists "$APP")" == "true" ]]; then + SCHEME="https" + DEFAULT_LISTEN_PORT="443" + fi + + urls=$(plugn trigger app-urls "$APP" "$URL_TYPE") + if [[ -n "$urls" ]]; then + if [[ "$URL_TYPE" == "url" ]]; then + echo "$urls" | tr ' ' '\n' | grep "$SCHEME://" | head -n1 + else + echo "$urls" | tr ' ' '\n' | sort + fi + else + if [[ "$URL_TYPE" == "url" ]]; then + fn-domains-generate-urls "$APP" "$SCHEME" "$DEFAULT_LISTEN_PORT" | tr ' ' '\n' | grep "$SCHEME://" | head -n1 + else + fn-domains-generate-urls "$APP" "$SCHEME" "$DEFAULT_LISTEN_PORT" | tr ' ' '\n' | sort + fi + fi +} + +trigger-domains-domains-urls "$@" diff --git a/plugins/domains/functions b/plugins/domains/functions index e7fe0bd2d..1ebff92d7 100755 --- a/plugins/domains/functions +++ b/plugins/domains/functions @@ -8,12 +8,11 @@ disable_app_vhost() { declare desc="disable vhost support for given application" declare APP=$1 RESTART_APP="$2" local APP_VHOST_PATH="$DOKKU_ROOT/$APP/VHOST" - local APP_URLS_PATH="$DOKKU_ROOT/$APP/URLS" plugn trigger pre-disable-vhost "$APP" - if [[ -f "$APP_VHOST_PATH" ]] || [[ -f "$APP_URLS_PATH" ]]; then + if [[ -f "$APP_VHOST_PATH" ]]; then dokku_log_info1 "App virtual host support disabled" - rm -f "$APP_VHOST_PATH" "$APP_URLS_PATH" + rm -f "$APP_VHOST_PATH" fi [[ "$RESTART_APP" == "--no-restart" ]] && local CONFIG_SET_ARGS=$RESTART_APP diff --git a/plugins/domains/install b/plugins/domains/install index 9a3155659..cb83eb49f 100755 --- a/plugins/domains/install +++ b/plugins/domains/install @@ -10,6 +10,7 @@ trigger-domains-install() { shopt -s nullglob for app in $(dokku_apps "false" 2>/dev/null); do domains_setup "$app" + rm -f "$DOKKU_ROOT/$APP/URLS" done } diff --git a/plugins/domains/internal-functions b/plugins/domains/internal-functions index adb6225c0..921ac9885 100755 --- a/plugins/domains/internal-functions +++ b/plugins/domains/internal-functions @@ -114,3 +114,70 @@ fn-domains-global-vhosts() { get_global_vhosts | tr '\n' ' ' fi } + +fn-domains-generate-urls() { + declare APP="$1" SCHEME="$2" DEFAULT_LISTEN_PORT="$3" + + local app_vhosts="$(plugn trigger domains-list "$APP")" + if [[ -n "$app_vhosts" ]]; then + for app_vhost in $app_vhosts; do + fn-domains-generate-urls-from-config "$APP" "$SCHEME" "$app_vhost" "$DEFAULT_LISTEN_PORT" + done + else + if [[ -s "$DOKKU_ROOT/VHOST" ]]; then + while read -r VHOST || [[ -n "$VHOST" ]]; do + fn-domains-generate-urls-from-config "$APP" "$SCHEME" "$VHOST" "$DEFAULT_LISTEN_PORT" + done <"$DOKKU_ROOT/VHOST" + else + fn-domains-generate-urls-from-config "$APP" "$SCHEME" "$(hostname -f)" "$DEFAULT_LISTEN_PORT" + fi + fi +} + +fn-domains-generate-urls-from-config() { + declare APP="$1" SCHEME="$2" VHOST="$3" DEFAULT_LISTEN_PORT="$4" + local DOKKU_PROXY_PORT_MAP=$(plugn trigger config-get "$APP" DOKKU_PROXY_PORT_MAP || true) + local RAW_TCP_PORTS="$(get_app_raw_tcp_ports "$APP")" + + if [[ "$(plugn trigger proxy-is-enabled "$APP")" == "false" ]]; then + if [[ -n "$RAW_TCP_PORTS" ]]; then + local APP_CONTAINER_PORTS="$(get_container_ports "$APP")" + local app_port + for listen_port in $APP_CONTAINER_PORTS; do + fn-domains-generate-url "$SCHEME" "$VHOST" "$listen_port" + done + else + local DOKKU_APP_WEB_LISTENERS PORT + DOKKU_APP_WEB_LISTENERS="$(plugn trigger network-get-listeners "$APP" "web" | xargs)" + for DOKKU_APP_WEB_LISTENER in $DOKKU_APP_WEB_LISTENERS; do + listen_port="$(echo "$DOKKU_APP_WEB_LISTENER" | cut -d ':' -f2)" + fn-domains-generate-url "$SCHEME" "$VHOST" "$listen_port" + done + shopt -u nullglob + fi + elif [[ -n "$DOKKU_PROXY_PORT_MAP" ]]; then + local port_map + for port_map in $DOKKU_PROXY_PORT_MAP; do + local scheme="$(awk -F ':' '{ print $1 }' <<<"$port_map")" + local listen_port="$(awk -F ':' '{ print $2 }' <<<"$port_map")" + fn-domains-generate-url "$SCHEME" "$VHOST" "$listen_port" + done + elif [[ -n "$RAW_TCP_PORTS" ]]; then + for listen_port in $RAW_TCP_PORTS; do + fn-domains-generate-url "$SCHEME" "$VHOST" "$listen_port" + done + else + fn-domains-generate-url "$SCHEME" "$VHOST" "$DEFAULT_LISTEN_PORT" + fi +} + +fn-domains-generate-url() { + declare SCHEME="$1" VHOST="$2" PORT="$3" + if [[ "$PORT" == "80" ]]; then + echo "http://$VHOST" + elif [[ "$PORT" == "443" ]]; then + echo "https://$VHOST" + else + echo "$SCHEME://$VHOST:$PORT" + fi +} diff --git a/plugins/domains/post-app-clone-setup b/plugins/domains/post-app-clone-setup index 6b3968e21..5b136369a 100755 --- a/plugins/domains/post-app-clone-setup +++ b/plugins/domains/post-app-clone-setup @@ -8,7 +8,7 @@ trigger-domains-post-app-clone-setup() { declare OLD_APP="$1" NEW_APP="$2" local APP_ROOT="$DOKKU_ROOT/$NEW_APP" - rm -rf "$APP_ROOT/URLS" "$APP_ROOT/VHOST" + rm -rf "$APP_ROOT/VHOST" } trigger-domains-post-app-clone-setup "$@" diff --git a/plugins/domains/post-app-rename-setup b/plugins/domains/post-app-rename-setup index 9b710ac9a..7cbce6a11 100755 --- a/plugins/domains/post-app-rename-setup +++ b/plugins/domains/post-app-rename-setup @@ -3,12 +3,10 @@ set -eo pipefail [[ $DOKKU_TRACE ]] && set -x trigger-domains-post-app-rename-setup() { - declare desc="updates VHOST and URLS files during rename" + declare desc="updates VHOST files during rename" declare trigger="post-app-rename-setup" declare OLD_APP="$1" NEW_APP="$2" - rm -f "$DOKKU_ROOT/$NEW_APP/URLS" - if [[ -f "$DOKKU_ROOT/$NEW_APP/VHOST" ]]; then while read -r VHOST || [[ -n "$VHOST" ]]; do sed -i -e "s/$OLD_APP.$VHOST/$NEW_APP.$VHOST/g" "$DOKKU_ROOT/$NEW_APP/VHOST" diff --git a/plugins/nginx-vhosts/functions b/plugins/nginx-vhosts/functions index edb08da95..569de8b03 100755 --- a/plugins/nginx-vhosts/functions +++ b/plugins/nginx-vhosts/functions @@ -311,7 +311,6 @@ nginx_build_config() { declare desc="build nginx config to proxy app containers using sigil" declare APP="$1" DOKKU_APP_LISTEN_PORT="$2" DOKKU_APP_LISTEN_IP="$3" local VHOST_PATH="$DOKKU_ROOT/$APP/VHOST" - local APP_URLS_PATH="$DOKKU_ROOT/$APP/URLS" local NGINX_TEMPLATE_NAME="nginx.conf.sigil" local NGINX_TEMPLATE="$PLUGIN_AVAILABLE_PATH/nginx-vhosts/templates/$NGINX_TEMPLATE_NAME" local SCHEME=http @@ -329,7 +328,7 @@ nginx_build_config() { plugn trigger domains-vhost-enabled "$APP" 2>/dev/null || IS_APP_VHOST_ENABLED=false local IS_SSL_ENABLED=false - if is_ssl_enabled "$APP"; then + if [[ "$(plugn trigger certs-exists "$APP")" == "true" ]]; then IS_SSL_ENABLED=true fi @@ -516,11 +515,6 @@ nginx_build_config() { dokku_log_verbose "Reloading nginx" validate_nginx && restart_nginx >/dev/null fi - - if ([[ -n "$NONSSL_VHOSTS" ]] || [[ -n "$SSL_VHOSTS" ]]) && [[ "$IS_APP_VHOST_ENABLED" == "true" ]]; then - echo "# THIS FILE IS GENERATED BY DOKKU - DO NOT EDIT, YOUR CHANGES WILL BE OVERWRITTEN" >"$APP_URLS_PATH" - xargs -i echo "$SCHEME://{}" <<<"$(echo "${SSL_VHOSTS}" "${NONSSL_VHOSTS}" | tr ' ' '\n' | sort -u)" >>"$APP_URLS_PATH" - fi else # note because this clause is long. if the proxy is disabled: dokku_log_info1 "Nginx support is disabled for app ($APP)" diff --git a/plugins/proxy/proxy-configure-ports b/plugins/proxy/proxy-configure-ports index 67754a7c4..21c94a69e 100755 --- a/plugins/proxy/proxy-configure-ports +++ b/plugins/proxy/proxy-configure-ports @@ -1,6 +1,5 @@ #!/usr/bin/env bash source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions" -source "$PLUGIN_AVAILABLE_PATH/certs/functions" source "$PLUGIN_AVAILABLE_PATH/config/functions" set -eo pipefail [[ $DOKKU_TRACE ]] && set -x @@ -29,7 +28,7 @@ trigger-proxy-proxy-configure-ports() { DOKKU_QUIET_OUTPUT=1 config_set --no-restart "$APP" DOKKU_PROXY_PORT="$PROXY_PORT" fi if [[ -z "$DOKKU_PROXY_SSL_PORT" ]]; then - if (is_ssl_enabled "$APP"); then + if [[ "$(plugn trigger certs-exists "$APP")" == "true" ]]; then local PROXY_SSL_PORT=$(config_get --global DOKKU_PROXY_SSL_PORT) PROXY_SSL_PORT=${PROXY_SSL_PORT:=443} if [[ -z "$RAW_TCP_PORTS" ]] && [[ "$IS_APP_VHOST_ENABLED" == "false" ]]; then diff --git a/plugins/traefik-vhosts/docker-args-process-deploy b/plugins/traefik-vhosts/docker-args-process-deploy index 7eb3d2b47..c81248cea 100755 --- a/plugins/traefik-vhosts/docker-args-process-deploy +++ b/plugins/traefik-vhosts/docker-args-process-deploy @@ -11,7 +11,6 @@ trigger-traefik-vhosts-docker-args-process-deploy() { local app_domains is_app_listening letsencrypt_email output proxy_container_port proxy_host_port port_map proxy_port_map priority proxy_scheme proxy_schemes traefik_domains local proxy_container_http_port proxy_container_http_port_candidate proxy_host_http_port_candidate local proxy_container_https_port proxy_container_https_port_candidate proxy_host_https_port_candidate - local app_urls_path="$DOKKU_ROOT/$APP/URLS" local STDIN=$(cat) if [[ "$PROC_TYPE" != "web" ]]; then @@ -108,8 +107,6 @@ trigger-traefik-vhosts-docker-args-process-deploy() { output="$output --label traefik.http.routers.$APP-$PROC_TYPE-http.service=$APP-$PROC_TYPE-http" if [[ -n "$traefik_domains" ]]; then output="$output --label \"traefik.http.routers.$APP-$PROC_TYPE-http.rule=Host(\\\`$traefik_domains\\\`)\"" - echo "# THIS FILE IS GENERATED BY DOKKU - DO NOT EDIT, YOUR CHANGES WILL BE OVERWRITTEN" >"$app_urls_path" - xargs -I{} echo "http://{}" <<<"$(echo "${app_domains}" | tr ' ' '\n' | sort -u)" >>"$app_urls_path" fi fi @@ -127,8 +124,6 @@ trigger-traefik-vhosts-docker-args-process-deploy() { output="$output --label traefik.http.routers.$APP-$PROC_TYPE-https.tls.certresolver=leresolver" if [[ -n "$traefik_domains" ]]; then output="$output --label \"traefik.http.routers.$APP-$PROC_TYPE-https.rule=Host(\\\`$traefik_domains\\\`)\"" - echo "# THIS FILE IS GENERATED BY DOKKU - DO NOT EDIT, YOUR CHANGES WILL BE OVERWRITTEN" >"$app_urls_path" - xargs -I{} echo "https://{}" <<<"$(echo "${app_domains}" | tr ' ' '\n' | sort -u)" >>"$app_urls_path" fi fi fi diff --git a/tests/unit/apps_2.bats b/tests/unit/apps_2.bats index 2de337244..2afb61fa8 100644 --- a/tests/unit/apps_2.bats +++ b/tests/unit/apps_2.bats @@ -136,8 +136,6 @@ teardown() { assert_success run [ -d /home/dokku/great-test-name/tls ] assert_failure - run [ -f /home/dokku/great-test-name/URLS ] - assert_failure run [ -f /home/dokku/great-test-name/VHOST ] assert_failure run /bin/bash -c "curl --silent --write-out '%{http_code}\n' $(dokku url $TEST_APP) | grep 200" diff --git a/tests/unit/core_2.bats b/tests/unit/core_2.bats index 1a165098f..43c902616 100644 --- a/tests/unit/core_2.bats +++ b/tests/unit/core_2.bats @@ -39,33 +39,72 @@ teardown() { @test "(core) urls (non-ssl)" { assert_urls "http://${TEST_APP}.dokku.me" - add_domain "test.dokku.me" + dokku domains:add $TEST_APP "test.dokku.me" assert_urls "http://${TEST_APP}.dokku.me" "http://test.dokku.me" } @test "(core) urls (app ssl)" { assert_urls "http://${TEST_APP}.dokku.me" - setup_test_tls - dokku proxy:build-config "$TEST_APP" - assert_urls "http://${TEST_APP}.dokku.me" "https://${TEST_APP}.dokku.me" - add_domain "test.dokku.me" - assert_urls "http://${TEST_APP}.dokku.me" "http://test.dokku.me" "https://${TEST_APP}.dokku.me" "https://test.dokku.me" + + run setup_test_tls + echo "output: $output" + echo "status: $status" + assert_success + + run /bin/bash -c "dokku proxy:build-config $TEST_APP" + echo "output: $output" + echo "status: $status" + assert_success + + assert_urls "https://${TEST_APP}.dokku.me" + + run /bin/bash -c "dokku domains:add $TEST_APP test.dokku.me" + echo "output: $output" + echo "status: $status" + assert_success + + assert_urls "http://${TEST_APP}.dokku.me" "https://${TEST_APP}.dokku.me" "https://test.dokku.me" "http://test.dokku.me" } @test "(core) url (app ssl)" { - setup_test_tls - dokku proxy:build-config "$TEST_APP" + run setup_test_tls + echo "output: $output" + echo "status: $status" + assert_success + + run /bin/bash -c "dokku proxy:build-config $TEST_APP" + echo "output: $output" + echo "status: $status" + assert_success + assert_url "https://${TEST_APP}.dokku.me" } @test "(core) urls (wildcard ssl)" { - setup_test_tls wildcard - dokku proxy:build-config "$TEST_APP" - assert_urls "http://${TEST_APP}.dokku.me" "https://${TEST_APP}.dokku.me" - add_domain "test.dokku.me" - assert_urls "http://${TEST_APP}.dokku.me" "http://test.dokku.me" "https://${TEST_APP}.dokku.me" "https://test.dokku.me" - add_domain "dokku.example.com" - assert_urls "http://dokku.example.com" "http://${TEST_APP}.dokku.me" "http://test.dokku.me" "https://dokku.example.com" "https://${TEST_APP}.dokku.me" "https://test.dokku.me" + run setup_test_tls wildcard + echo "output: $output" + echo "status: $status" + assert_success + + run /bin/bash -c "dokku proxy:build-config $TEST_APP" + echo "output: $output" + echo "status: $status" + assert_success + + assert_urls "https://${TEST_APP}.dokku.me" + + run /bin/bash -c "dokku domains:add $TEST_APP test.dokku.me" + echo "output: $output" + echo "status: $status" + assert_success + + assert_urls "http://${TEST_APP}.dokku.me" "https://${TEST_APP}.dokku.me" "https://test.dokku.me" "http://test.dokku.me" + + run /bin/bash -c "dokku domains:add $TEST_APP dokku.example.com" + echo "output: $output" + echo "status: $status" + assert_success + assert_urls "http://dokku.example.com" "http://${TEST_APP}.dokku.me" "https://dokku.example.com" "https://${TEST_APP}.dokku.me" "https://test.dokku.me" "http://test.dokku.me" } @test "(core) git-remote (off-port)" { diff --git a/tests/unit/nginx-vhosts_2.bats b/tests/unit/nginx-vhosts_2.bats index f8f26ea5c..5f122c9d6 100644 --- a/tests/unit/nginx-vhosts_2.bats +++ b/tests/unit/nginx-vhosts_2.bats @@ -16,8 +16,8 @@ teardown() { @test "(nginx-vhosts) nginx:build-config (with SSL and unrelated domain)" { setup_test_tls - add_domain "node-js-app.dokku.me" - add_domain "test.dokku.me" + dokku domains:add $TEST_APP "node-js-app.dokku.me" + dokku domains:add $TEST_APP "test.dokku.me" deploy_app dokku nginx:show-config $TEST_APP assert_ssl_domain "node-js-app.dokku.me" @@ -26,8 +26,8 @@ teardown() { @test "(nginx-vhosts) nginx:build-config (wildcard SSL)" { setup_test_tls wildcard - add_domain "wildcard1.dokku.me" - add_domain "wildcard2.dokku.me" + dokku domains:add $TEST_APP "wildcard1.dokku.me" + dokku domains:add $TEST_APP "wildcard2.dokku.me" deploy_app dokku nginx:show-config $TEST_APP assert_ssl_domain "wildcard1.dokku.me" @@ -51,9 +51,9 @@ teardown() { @test "(nginx-vhosts) nginx:build-config (with SSL and Multiple SANs)" { setup_test_tls sans - add_domain "test.dokku.me" - add_domain "www.test.dokku.me" - add_domain "www.test.app.dokku.me" + dokku domains:add $TEST_APP "test.dokku.me" + dokku domains:add $TEST_APP "www.test.dokku.me" + dokku domains:add $TEST_APP "www.test.app.dokku.me" deploy_app assert_ssl_domain "test.dokku.me" assert_ssl_domain "www.test.dokku.me" diff --git a/tests/unit/nginx-vhosts_4.bats b/tests/unit/nginx-vhosts_4.bats index cb9e09837..f02bb570a 100644 --- a/tests/unit/nginx-vhosts_4.bats +++ b/tests/unit/nginx-vhosts_4.bats @@ -58,7 +58,7 @@ teardown() { @test "(nginx-vhosts) nginx:build-config (without global VHOST and domains:add pre deploy)" { rm "$DOKKU_ROOT/VHOST" create_app - add_domain "www.test.app.dokku.me" + dokku domains:add $TEST_APP "www.test.app.dokku.me" deploy_app assert_nonssl_domain "www.test.app.dokku.me" } @@ -66,7 +66,7 @@ teardown() { @test "(nginx-vhosts) nginx:build-config (without global VHOST and domains:add post deploy)" { rm "$DOKKU_ROOT/VHOST" deploy_app - add_domain "www.test.app.dokku.me" + dokku domains:add $TEST_APP "www.test.app.dokku.me" check_urls http://www.test.app.dokku.me assert_http_success http://www.test.app.dokku.me } diff --git a/tests/unit/nginx-vhosts_5.bats b/tests/unit/nginx-vhosts_5.bats index 0e65a35be..c171fa262 100644 --- a/tests/unit/nginx-vhosts_5.bats +++ b/tests/unit/nginx-vhosts_5.bats @@ -26,7 +26,7 @@ teardown() { @test "(nginx-vhosts) nginx:build-config (dockerfile expose)" { deploy_app dockerfile - add_domain "www.test.app.dokku.me" + dokku domains:add $TEST_APP "www.test.app.dokku.me" check_urls http://${TEST_APP}.dokku.me:3000 check_urls http://${TEST_APP}.dokku.me:3003 check_urls http://www.test.app.dokku.me:3000 diff --git a/tests/unit/nginx-vhosts_7.bats b/tests/unit/nginx-vhosts_7.bats index 52417e403..2812b4b18 100644 --- a/tests/unit/nginx-vhosts_7.bats +++ b/tests/unit/nginx-vhosts_7.bats @@ -16,8 +16,8 @@ teardown() { @test "(nginx-vhosts) nginx:build-config (wildcard SSL and custom nginx template)" { setup_test_tls wildcard - add_domain "wildcard1.dokku.me" - add_domain "wildcard2.dokku.me" + dokku domains:add $TEST_APP "wildcard1.dokku.me" + dokku domains:add $TEST_APP "wildcard2.dokku.me" deploy_app nodejs-express dokku@dokku.me:$TEST_APP custom_ssl_nginx_template assert_ssl_domain "wildcard1.dokku.me" @@ -27,7 +27,7 @@ teardown() { } @test "(nginx-vhosts) nginx:build-config (custom nginx template - no ssl)" { - add_domain "www.test.app.dokku.me" + dokku domains:add $TEST_APP "www.test.app.dokku.me" run deploy_app nodejs-express dokku@dokku.me:$TEST_APP custom_nginx_template echo "output: $output" echo "status: $status" @@ -53,7 +53,7 @@ teardown() { echo "status: $status" assert_success - add_domain "www.test.app.dokku.me" + dokku domains:add $TEST_APP "www.test.app.dokku.me" run deploy_app nodejs-express dokku@dokku.me:$TEST_APP custom_nginx_template echo "output: $output" echo "status: $status" diff --git a/tests/unit/nginx-vhosts_9.bats b/tests/unit/nginx-vhosts_9.bats index 552ba2785..45d7d66fc 100644 --- a/tests/unit/nginx-vhosts_9.bats +++ b/tests/unit/nginx-vhosts_9.bats @@ -154,8 +154,8 @@ teardown() { @test "(nginx-vhosts) nginx:build-config (with SSL and unrelated domain)" { setup_test_tls - add_domain "node-js-app.dokku.me" - add_domain "test.dokku.me" + dokku domains:add $TEST_APP "node-js-app.dokku.me" + dokku domains:add $TEST_APP "test.dokku.me" deploy_app dokku nginx:show-config $TEST_APP assert_ssl_domain "node-js-app.dokku.me" @@ -164,8 +164,8 @@ teardown() { @test "(nginx-vhosts) nginx:build-config (wildcard SSL)" { setup_test_tls wildcard - add_domain "wildcard1.dokku.me" - add_domain "wildcard2.dokku.me" + dokku domains:add $TEST_APP "wildcard1.dokku.me" + dokku domains:add $TEST_APP "wildcard2.dokku.me" deploy_app dokku nginx:show-config $TEST_APP assert_ssl_domain "wildcard1.dokku.me" diff --git a/tests/unit/test_helper.bash b/tests/unit/test_helper.bash index 6f86edeea..444280bdd 100644 --- a/tests/unit/test_helper.bash +++ b/tests/unit/test_helper.bash @@ -218,10 +218,6 @@ destroy_key() { rm -f /tmp/testkey* &>/dev/null || true } -add_domain() { - dokku domains:add "$TEST_APP" "$1" -} - # shellcheck disable=SC2119 check_urls() { local PATTERN="$1" @@ -288,10 +284,14 @@ assert_not_external_port() { assert_url() { url="$1" - run /bin/bash -c "dokku url $TEST_APP" + run /bin/bash -c "dokku url $TEST_APP | xargs" + echo "VHOST: $(cat $DOKKU_ROOT/$TEST_APP/VHOST | xargs)" + echo "tls: $(ls $DOKKU_ROOT/$TEST_APP/tls || true)" + echo "proxy-is-enabled: $(dokku plugin:trigger proxy-is-enabled "$TEST_APP")" + echo "port-map: $(dokku config:get "$TEST_APP" DOKKU_PROXY_PORT_MAP)" + echo "url: $(dokku urls $TEST_APP)" echo "output: $output" echo "status: $status" - echo "url: ${url}" assert_output "${url}" } @@ -299,9 +299,13 @@ assert_urls() { # shellcheck disable=SC2124 urls="$@" run /bin/bash -c "dokku urls $TEST_APP | xargs" + echo "VHOST: $(cat $DOKKU_ROOT/$TEST_APP/VHOST | xargs)" + echo "tls: $(ls $DOKKU_ROOT/$TEST_APP/tls || true)" + echo "proxy-is-enabled: $(dokku plugin:trigger proxy-is-enabled "$TEST_APP")" + echo "port-map: $(dokku config:get "$TEST_APP" DOKKU_PROXY_PORT_MAP)" + echo "urls: $(dokku urls $TEST_APP)" echo "output: $output" echo "status: $status" - echo "urls:" "$urls" assert_output "$urls" }