Merge pull request #8135 from dokku/8093-client-remote-parsing

This commit is contained in:
Jose Diaz-Gonzalez
2025-11-20 03:35:23 -05:00
committed by GitHub
4 changed files with 208 additions and 18 deletions

View File

@@ -24,6 +24,137 @@ teardown() {
assert_exit_status 20
}
@test "(client) remote:show" {
unset DOKKU_HOST
local DOKKU_APP_PATH=$(mktemp -d "/tmp/${DOKKU_DOMAIN}.XXXXX")
trap 'popd &>/dev/null || true; rm -rf "$DOKKU_APP_PATH"' INT TERM
setup_client_repo "$DOKKU_APP_PATH"
export DOKKU_APP_PATH="$DOKKU_APP_PATH"
# handle simple remote: dokku@example.com:app-name
run /bin/bash -c "git -C "$DOKKU_APP_PATH" remote add dokku 'dokku@example.com:$TEST_APP'"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "DOKKU_APP_PATH=$DOKKU_APP_PATH ${BATS_TEST_DIRNAME}/../../contrib/dokku_client.sh remote:show"
echo "output: $output"
echo "status: $status"
assert_success
assert_output_contains "dokku-app: $TEST_APP"
assert_output_contains "dokku-git-remote: dokku"
assert_output_not_contains "dokku-host: example.com"
assert_output_not_contains "dokku-host: example.net"
assert_output_contains "dokku-host: "
assert_output_contains "dokku-port: 22"
assert_output_contains "dokku-remote-host: example.com"
assert_output_contains "dokku-ssh-user: dokku"
assert_output_contains "dokku-constructed-remote: ssh://dokku@example.com:22/$TEST_APP"
# handle custom DOKKU_HOST (no app name detected without --app flag)
run /bin/bash -c "DOKKU_HOST="example.net" DOKKU_APP_PATH=$DOKKU_APP_PATH ${BATS_TEST_DIRNAME}/../../contrib/dokku_client.sh remote:show"
echo "output: $output"
echo "status: $status"
assert_success
assert_output_not_contains "dokku-app: $TEST_APP"
assert_output_contains "dokku-git-remote: dokku"
assert_output_contains "dokku-host: example.net"
assert_output_contains "dokku-port: 22"
assert_output_contains "dokku-remote-host: example.net"
assert_output_contains "dokku-ssh-user: dokku"
assert_output_contains "dokku-constructed-remote: ssh://dokku@example.net:22/"
assert_output_not_contains "dokku-constructed-remote: ssh://dokku@example.net:22/$TEST_APP"
# handle custom DOKKU_HOST (app name detected with --app flag)
run /bin/bash -c "DOKKU_HOST="example.net" DOKKU_APP_PATH=$DOKKU_APP_PATH ${BATS_TEST_DIRNAME}/../../contrib/dokku_client.sh remote:show --app $TEST_APP"
echo "output: $output"
echo "status: $status"
assert_success
assert_output_contains "dokku-app: $TEST_APP"
assert_output_contains "dokku-git-remote: dokku"
assert_output_contains "dokku-host: example.net"
assert_output_contains "dokku-port: 22"
assert_output_contains "dokku-remote-host: example.net"
assert_output_contains "dokku-ssh-user: dokku"
assert_output_contains "dokku-constructed-remote: ssh://dokku@example.net:22/$TEST_APP"
# handle custom DOKKU_PORT
run /bin/bash -c "DOKKU_PORT=2222 DOKKU_APP_PATH=$DOKKU_APP_PATH ${BATS_TEST_DIRNAME}/../../contrib/dokku_client.sh remote:show"
echo "output: $output"
echo "status: $status"
assert_success
assert_output_contains "dokku-app: $TEST_APP"
assert_output_contains "dokku-git-remote: dokku"
assert_output_not_contains "dokku-host: example.com"
assert_output_not_contains "dokku-host: example.net"
assert_output_contains "dokku-host: "
assert_output_contains "dokku-port: 2222"
assert_output_contains "dokku-remote-host: example.com"
assert_output_contains "dokku-ssh-user: dokku"
assert_output_contains "dokku-constructed-remote: ssh://dokku@example.com:2222/$TEST_APP"
# handle remote with scheme (no port): ssh://dokku@example.com/app-name
run /bin/bash -c "git -C "$DOKKU_APP_PATH" remote set-url dokku 'ssh://dokku@example.com:22/$TEST_APP'"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "DOKKU_APP_PATH=$DOKKU_APP_PATH ${BATS_TEST_DIRNAME}/../../contrib/dokku_client.sh remote:show"
echo "output: $output"
echo "status: $status"
assert_success
assert_output_contains "dokku-app: $TEST_APP"
assert_output_contains "dokku-git-remote: dokku"
assert_output_not_contains "dokku-host: example.com"
assert_output_not_contains "dokku-host: example.net"
assert_output_contains "dokku-host: "
assert_output_contains "dokku-port: 22"
assert_output_contains "dokku-remote-host: example.com"
assert_output_contains "dokku-ssh-user: dokku"
assert_output_contains "dokku-constructed-remote: ssh://dokku@example.com:22/$TEST_APP"
# handle remote with scheme (with port): ssh://dokku@example.com:2222/app-name
run /bin/bash -c "git -C "$DOKKU_APP_PATH" remote set-url dokku 'ssh://dokku@example.com:2222/$TEST_APP'"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "DOKKU_APP_PATH=$DOKKU_APP_PATH ${BATS_TEST_DIRNAME}/../../contrib/dokku_client.sh remote:show"
echo "output: $output"
echo "status: $status"
assert_success
assert_output_contains "dokku-app: $TEST_APP"
assert_output_contains "dokku-git-remote: dokku"
assert_output_not_contains "dokku-host: example.com"
assert_output_not_contains "dokku-host: example.net"
assert_output_contains "dokku-host: "
assert_output_contains "dokku-port: 2222"
assert_output_contains "dokku-remote-host: example.com"
assert_output_contains "dokku-ssh-user: dokku"
assert_output_contains "dokku-constructed-remote: ssh://dokku@example.com:2222/$TEST_APP"
# #8093: ssh://dokku@pipescan.shipit.dev:2222/pipescan
run /bin/bash -c "git -C "$DOKKU_APP_PATH" remote set-url dokku 'ssh://dokku@pipescan.shipit.dev:2222/pipescan'"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "DOKKU_APP_PATH=$DOKKU_APP_PATH ${BATS_TEST_DIRNAME}/../../contrib/dokku_client.sh remote:show"
echo "output: $output"
echo "status: $status"
assert_success
assert_output_contains "dokku-app: pipescan"
assert_output_contains "dokku-git-remote: dokku"
assert_output_not_contains "dokku-host: example.com"
assert_output_not_contains "dokku-host: example.net"
assert_output_contains "dokku-host: "
assert_output_contains "dokku-port: 2222"
assert_output_contains "dokku-remote-host: pipescan.shipit.dev"
assert_output_contains "dokku-ssh-user: dokku"
assert_output_contains "dokku-constructed-remote: ssh://dokku@pipescan.shipit.dev:2222/pipescan"
}
@test "(client) no args should print help" {
# dokku container is not run with a TTY on GitHub Actions so we don't get normal output
# https://github.com/actions/runner/issues/241
@@ -332,3 +463,16 @@ teardown() {
assert_success
assert_output_contains "triggered smoke-test-plugin:args with args: smoke-test-plugin:args, bash, -c, echo Hello"
}
setup_client_repo() {
declare TMP="${1:-$(mktemp -d "/tmp/${DOKKU_DOMAIN}.XXXXX")}"
rmdir "$TMP" && cp -r "${BATS_TEST_DIRNAME}/../../tests/apps/nodejs-express" "$TMP"
cd "$TMP" || exit 1
git init
git config user.email "robot@example.com"
git config user.name "Test Robot"
[[ -f gitignore ]] && mv gitignore .gitignore
git add .
git commit -m 'initial commit'
}

View File

@@ -148,7 +148,7 @@ assert_output_contains() {
input="${input/$expected/}"
found=$((found + 1))
done
assert_equal "$count" "$found"
[[ "$count" -eq "$found" ]] || flunk "expected $count occurrences of '$expected', found $found"
}
assert_output_not_contains() {
@@ -374,20 +374,6 @@ deploy_app() {
git push target "master:${GIT_REMOTE_BRANCH}" || destroy_app $?
}
setup_client_repo() {
local TMP
TMP=$(mktemp -d "/tmp/${DOKKU_DOMAIN}.XXXXX")
rmdir "$TMP" && cp -r "${BATS_TEST_DIRNAME}/../../tests/apps/nodejs-express" "$TMP"
cd "$TMP" || exit 1
git init
git config user.email "robot@example.com"
git config user.name "Test Robot"
[[ -f gitignore ]] && mv gitignore .gitignore
git add .
git commit -m 'initial commit'
}
setup_test_tls() {
local TLS_TYPE="$1"
local TLS="/home/dokku/$TEST_APP/tls"