Files
kaidi/scripts/test-git-install-fixture.sh
T
2026-08-18 22:51:35 +08:00

91 lines
3.4 KiB
Bash
Executable File

#!/usr/bin/env bash
set -Eeuo pipefail
ROOT=$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)
FIXTURE=$(mktemp -d)
cleanup() {
rm -rf "$FIXTURE"
}
trap cleanup EXIT
mkdir -p "$FIXTURE/repo/deploy" "$FIXTURE/bin"
cp "$ROOT/deploy/install-from-git.sh" "$FIXTURE/repo/deploy/install-from-git.sh"
cat > "$FIXTURE/bin/sudo" <<'SH'
#!/usr/bin/env bash
exec "$@"
SH
cat > "$FIXTURE/repo/deploy/install.sh" <<'SH'
#!/usr/bin/env bash
set -Eeuo pipefail
[ "$KAIDI_RELEASE_API_URL" = 'https://git.example.test/api/v1/repos/TEAM/REPO/releases/latest' ]
[ "$KAIDI_RELEASE_PUBLIC_KEY_SHA256" = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' ]
if [ "${EXPECT_PORT:-false}" = true ]; then
[ "$KAIDI_APP_PORT" = '19090' ]
[ "$KAIDI_SERVER_ADDRESS" = '127.0.0.1' ]
fi
if [ "${KAIDI_SETUP_WIZARD:-false}" = true ]; then
[ -z "${KAIDI_DB_URL:-}${KAIDI_DB_USERNAME:-}${KAIDI_DB_PASSWORD:-}" ]
else
[ "$KAIDI_DB_URL" = 'jdbc:mysql://DB_HOST:3306/kaidi_finance' ]
[ "$KAIDI_DB_USERNAME" = 'kaidi' ]
[ "$KAIDI_DB_PASSWORD" = 'fixture-password' ]
fi
if [ "${EXPECT_TOKEN:-false}" = true ]; then
[ "$(cat "$KAIDI_RELEASE_TOKEN_FILE")" = 'fixture-read-token' ]
else
[ -z "${KAIDI_RELEASE_TOKEN_FILE:-}" ]
fi
printf 'fixture-installer: PASS\n'
SH
chmod 0755 "$FIXTURE/bin/sudo" "$FIXTURE/repo/deploy/install.sh" "$FIXTURE/repo/deploy/install-from-git.sh"
printf '%s' 'fixture-read-token' > "$FIXTURE/token"
chmod 0600 "$FIXTURE/token"
installer_sha256=$(sha256sum "$FIXTURE/repo/deploy/install.sh" | awk '{print $1}')
default_installer_sha256=$(sed -n 's/^INSTALLER_SHA256=.*:-\([0-9A-Fa-f]*\)}$/\1/p' \
"$ROOT/deploy/install-from-git.sh")
[ "$default_installer_sha256" = "$(sha256sum "$ROOT/deploy/install.sh" | awk '{print $1}')" ] \
|| { printf 'Git installer default checksum is stale\n' >&2; exit 1; }
PATH="$FIXTURE/bin:$PATH" \
EXPECT_PORT=true \
KAIDI_INSTALLER_SHA256="$installer_sha256" \
KAIDI_RELEASE_API_URL=https://git.example.test/api/v1/repos/TEAM/REPO/releases/latest \
KAIDI_RELEASE_PUBLIC_KEY_SHA256=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa \
KAIDI_APP_PORT=19090 \
KAIDI_SERVER_ADDRESS=127.0.0.1 \
KAIDI_DB_URL=jdbc:mysql://DB_HOST:3306/kaidi_finance \
KAIDI_DB_USERNAME=kaidi \
KAIDI_DB_PASSWORD=fixture-password \
"$FIXTURE/repo/deploy/install-from-git.sh"
PATH="$FIXTURE/bin:$PATH" \
KAIDI_INSTALLER_SHA256="$installer_sha256" \
KAIDI_RELEASE_API_URL=https://git.example.test/api/v1/repos/TEAM/REPO/releases/latest \
KAIDI_RELEASE_PUBLIC_KEY_SHA256=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa \
KAIDI_SETUP_WIZARD=true \
"$FIXTURE/repo/deploy/install-from-git.sh"
PATH="$FIXTURE/bin:$PATH" \
EXPECT_TOKEN=true \
KAIDI_RELEASE_TOKEN_FILE="$FIXTURE/token" \
KAIDI_INSTALLER_SHA256="$installer_sha256" \
KAIDI_RELEASE_API_URL=https://git.example.test/api/v1/repos/TEAM/REPO/releases/latest \
KAIDI_RELEASE_PUBLIC_KEY_SHA256=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa \
KAIDI_SETUP_WIZARD=true \
"$FIXTURE/repo/deploy/install-from-git.sh"
if PATH="$FIXTURE/bin:$PATH" \
KAIDI_INSTALLER_SHA256=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb \
"$FIXTURE/repo/deploy/install-from-git.sh" > "$FIXTURE/hash-mismatch.log" 2>&1; then
printf 'Mismatched installer SHA-256 was accepted\n' >&2
exit 1
fi
grep -q '与该 Git 标签的受信摘要不一致' "$FIXTURE/hash-mismatch.log"
printf 'Git checkout installation wrapper fixture passed\n'