Files
netrunner-landing/build-wasm.sh
T
2026-07-05 20:01:53 +07:00

70 lines
3.6 KiB
Bash
Executable File

#!/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"