118 lines
3.2 KiB
Bash
Executable File
118 lines
3.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
|
SCRIPT_PATH="${ROOT_DIR}/scripts/github-actions/deploy-native-binary.sh"
|
|
EXPECTED_COMMIT="425a38f"
|
|
|
|
fail() {
|
|
printf 'FAIL: %s\n' "$*" >&2
|
|
exit 1
|
|
}
|
|
|
|
assert_contains() {
|
|
local haystack="$1"
|
|
local needle="$2"
|
|
if [[ "${haystack}" != *"${needle}"* ]]; then
|
|
fail "expected output to contain: ${needle}"
|
|
fi
|
|
}
|
|
|
|
tmp_dir="$(mktemp -d)"
|
|
trap 'rm -rf "${tmp_dir}"' EXIT
|
|
|
|
mkdir -p "${tmp_dir}/bin" "${tmp_dir}/remote/tmp" "${tmp_dir}/remote/opt/cloud-neutral/xworkmate-bridge"
|
|
|
|
fake_binary="${tmp_dir}/xworkmate-bridge"
|
|
cat >"${fake_binary}" <<'EOF'
|
|
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
if [[ "${1:-}" == "version" ]]; then
|
|
printf '{"commit":"425a38f","version":"test"}\n'
|
|
exit 0
|
|
fi
|
|
sleep 3600
|
|
EOF
|
|
chmod +x "${fake_binary}"
|
|
|
|
cat >"${tmp_dir}/bin/scp" <<'EOF'
|
|
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
src="$2"
|
|
dest="$3"
|
|
printf 'scp %s\n' "${dest}" >>"${FAKE_DEPLOY_LOG}"
|
|
dest_path="${dest#*:}"
|
|
cp "${src}" "${dest_path}"
|
|
EOF
|
|
|
|
cat >"${tmp_dir}/bin/ssh" <<'EOF'
|
|
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
target="$1"
|
|
shift
|
|
printf 'ssh %s\n' "${target}" >>"${FAKE_DEPLOY_LOG}"
|
|
bash -c "$*"
|
|
EOF
|
|
|
|
cat >"${tmp_dir}/bin/systemctl" <<'EOF'
|
|
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
printf 'systemctl %s\n' "$*" >>"${FAKE_DEPLOY_LOG}"
|
|
if [[ "${1:-}" == "is-active" ]]; then
|
|
exit 1
|
|
fi
|
|
if [[ "${1:-}" == "--user" && "${2:-}" == "show" ]]; then
|
|
printf '1\n'
|
|
exit 0
|
|
fi
|
|
exit 0
|
|
EOF
|
|
|
|
cat >"${tmp_dir}/bin/readlink" <<'EOF'
|
|
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
if [[ "${1:-}" == "-f" && "${2:-}" == /proc/*/exe ]]; then
|
|
printf '%s\n' "${REMOTE_BINARY}"
|
|
exit 0
|
|
fi
|
|
/usr/bin/readlink "$@"
|
|
EOF
|
|
|
|
cat >"${tmp_dir}/bin/sleep" <<'EOF'
|
|
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
exit 0
|
|
EOF
|
|
|
|
chmod +x "${tmp_dir}/bin/"*
|
|
|
|
log_file="${tmp_dir}/deploy.log"
|
|
PATH="${tmp_dir}/bin:${PATH}" \
|
|
FAKE_DEPLOY_LOG="${log_file}" \
|
|
REMOTE_TMP="${tmp_dir}/remote/tmp/xworkmate-bridge-${EXPECTED_COMMIT}" \
|
|
REMOTE_BINARY="${tmp_dir}/remote/home/ubuntu/.local/bin/xworkmate-go-core" \
|
|
REMOTE_WORKING_DIR="${tmp_dir}/remote/opt/cloud-neutral/xworkmate-bridge" \
|
|
BRIDGE_CONFIG_PATH="${tmp_dir}/remote/opt/cloud-neutral/xworkmate-bridge/config.yaml" \
|
|
USER_SYSTEMD_DIR="${tmp_dir}/remote/home/ubuntu/.config/systemd/user" \
|
|
DEPLOY_NATIVE_SKIP_PROC_CHECK=true \
|
|
BRIDGE_AUTH_TOKEN="test-token" \
|
|
bash "${SCRIPT_PATH}" "example.test" "${fake_binary}" "${EXPECTED_COMMIT}"
|
|
|
|
log_output="$(cat "${log_file}")"
|
|
assert_contains "${log_output}" "ssh root@example.test"
|
|
assert_contains "${log_output}" "scp ubuntu@example.test:"
|
|
assert_contains "${log_output}" "ssh ubuntu@example.test"
|
|
assert_contains "${log_output}" "systemctl --user restart xworkmate-bridge.service"
|
|
|
|
unit_file="${tmp_dir}/remote/home/ubuntu/.config/systemd/user/xworkmate-bridge.service"
|
|
if [[ ! -f "${unit_file}" ]]; then
|
|
fail "expected user service unit to be written"
|
|
fi
|
|
|
|
unit_output="$(cat "${unit_file}")"
|
|
assert_contains "${unit_output}" "ExecStart=${tmp_dir}/remote/home/ubuntu/.local/bin/xworkmate-go-core serve --listen 127.0.0.1:8787"
|
|
assert_contains "${unit_output}" 'Environment="BRIDGE_AUTH_TOKEN=test-token"'
|
|
assert_contains "${unit_output}" "WantedBy=default.target"
|
|
|
|
printf 'deploy-native-binary regression tests passed\n'
|