#!/usr/bin/env bash # provision-windows.sh — idempotent provisioning for the Windows host runner. # # Pre-warms what compile-windows.sh would download at runtime: Flutter Windows # engine artifacts and pub packages. Short-circuits via a stamp file keyed to # the installed Flutter version, so repeat runs return immediately. set -euo pipefail SCRIPT_DIR="$(dirname "$0")" # shellcheck source=scripts/ci/_env.sh . "${SCRIPT_DIR}/_env.sh" STAMP_DIR="${HOME}/.cache/jiu-ci" STAMP="${STAMP_DIR}/provisioned-windows" CUR="${STAMP_DIR}/.flutter-version-win.cur" mkdir -p "$STAMP_DIR" # --- detection --- if ! command -v flutter >/dev/null 2>&1; then echo "ERROR: flutter not found on PATH. Install Flutter on this runner first." >&2 exit 1 fi flutter --version --machine > "$CUR" 2>/dev/null || flutter --version > "$CUR" 2>&1 || true if [ -s "$STAMP" ] && cmp -s "$STAMP" "$CUR"; then echo "==> provision-windows: already provisioned (Flutter unchanged), skipping." exit 0 fi echo "==> provision-windows: not provisioned (or Flutter changed) — running." # --- warm Flutter Windows engine + pub deps --- echo "==> precache Flutter engine (windows)" flutter precache --windows echo "==> flutter pub get (client)" (cd "${SCRIPT_DIR}/../../client" && flutter pub get) # --- mark provisioned --- cp "$CUR" "$STAMP" echo "==> provision-windows: done." flutter --version | head -1