refactor: simplify how url generation works

The URLS file is no longer necessary as urls are now generated directly from the app VHOST file.

This also moves all the url generation logic to the domains plugin.
This commit is contained in:
Jose Diaz-Gonzalez
2022-12-02 02:19:59 -05:00
parent f4f0a29446
commit edd6e476b3
23 changed files with 247 additions and 179 deletions

View File

@@ -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.

View File

@@ -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

View File

@@ -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 "$@"

View File

@@ -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"

18
plugins/certs/certs-exists Executable file
View File

@@ -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 "$@"

View File

@@ -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

35
plugins/domains/domains-urls Executable file
View File

@@ -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 "$@"

View File

@@ -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

View File

@@ -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
}

View File

@@ -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
}

View File

@@ -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 "$@"

View File

@@ -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"

View File

@@ -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)"

View File

@@ -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

View File

@@ -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

View File

@@ -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"

View File

@@ -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)" {

View File

@@ -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"

View File

@@ -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
}

View File

@@ -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

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"
}