#!/bin/bash # Останавливаем выполнение при любой ошибке set -e echo "🛠 Starting build process..." # 1. Пути (настрой, если папки называются иначе) RUST_DIR="matrix-engine" PUBLIC_DIR="public/wasm-matrix" # 2. Собираем Rust в WebAssembly echo "🦀 Compiling Rust to WASM..." cd "$RUST_DIR" wasm-pack build --target web # 3. Подготовка модулей воркера echo "📦 Bundling worker modules..." # Теперь копируем не только воркер, но и все его зависимости # Убедись, что эти файлы лежат в папке matrix-engine cp -f matrix_worker.js pkg/ cp -f shaders.js pkg/ cp -f gl-utils.js pkg/ # 3.1 Прописываем cache-busting версию в ДЕПЛОИМУЮ копию воркера. # Единственный источник версии — ENGINE_VERSION в NetrunnerMatrix.tsx (её же # компонент добавляет как ?v= к самому URL воркера). БЕЗ этого шага # matrix_worker.js импортирует ./shaders.js и ./gl-utils.js СОВСЕМ без версии # — после деплоя воркер обновляется (у него есть ?v= на своём URL), а эти два # файла на том же пути могут отдаться из кэша браузера/CDN старой версией. Если # новый воркер ожидает от них экспорт, которого в старой версии ещё не было # (как fsBackground в этой сессии), import падает молча внутри воркера — он # никогда не шлёт READY, канвас остаётся с opacity:0, и виден только фон # Hero (белый/чёрный по теме) без матрицы. Один и тот же ?v= на воркере, его # импортах и wasm-glue гарантирует, что все четыре файла инвалидируются вместе. ENGINE_VERSION=$(grep -oP 'ENGINE_VERSION = "\K[^"]+' NetrunnerMatrix.tsx) if [ -z "$ENGINE_VERSION" ]; then echo "⚠️ Warning: could not extract ENGINE_VERSION from NetrunnerMatrix.tsx, skipping cache-busting stamp." else echo "🔖 Stamping cache-busting version $ENGINE_VERSION into pkg/matrix_worker.js..." sed -i \ -e "s/^const version = \".*\";/const version = \"${ENGINE_VERSION}\";/" \ -e "s/from \"\.\/shaders\.js\";/from \".\/shaders.js?v=${ENGINE_VERSION}\";/" \ -e "s/from \"\.\/gl-utils\.js\";/from \".\/gl-utils.js?v=${ENGINE_VERSION}\";/" \ pkg/matrix_worker.js fi # 4. Копируем React компонент (если нужно хранить исходник в pkg) # Если NetrunnerMatrix.tsx лежит уровнем выше (в src/components), # измени путь соответствующим образом. if [ -f "NetrunnerMatrix.tsx" ]; then cp -f NetrunnerMatrix.tsx pkg/ echo "📄 React component copied to pkg." else echo "⚠️ Warning: NetrunnerMatrix.tsx not found in $RUST_DIR, skipping..." fi # 5. Синхронизация с папкой public echo "🚀 Deploying to $PUBLIC_DIR..." cd .. mkdir -p "$PUBLIC_DIR" # Очищаем старые файлы перед копированием (кроме .gitignore если есть) # rm -rf "${PUBLIC_DIR:?}"/* # Копируем всё содержимое pkg в public cp -r "$RUST_DIR/pkg/"* "$PUBLIC_DIR/" echo "----------------------------------------" echo "✅ Done! Matrix Engine v3.0.3 is ready." echo "Location: $PUBLIC_DIR" ls -1 "$PUBLIC_DIR"