#!/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}') 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 'does not match the trusted SHA-256' "$FIXTURE/hash-mismatch.log" printf 'Git checkout installation wrapper fixture passed\n'