[CmdletBinding()] param( [Alias("h")] [switch]$Help, [switch]$RunSmoke, [switch]$RunSpacetimeBuild ) $ErrorActionPreference = "Stop" function Write-Usage { @( 'Usage:', ' ./server-rs/scripts/m7-preflight.ps1', ' ./server-rs/scripts/m7-preflight.ps1 -RunSmoke', ' ./server-rs/scripts/m7-preflight.ps1 -RunSpacetimeBuild', '', 'Notes:', ' 1. Run M7 cutover preflight checks for Rust backend', ' 2. Default checks are non-destructive and do not publish or clear SpacetimeDB data', ' 3. -RunSmoke starts a temporary api-server and verifies /healthz contract', ' 4. -RunSpacetimeBuild requires spacetime CLI and only builds the module' ) -join [Environment]::NewLine } if ($Help) { Write-Usage exit 0 } $scriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path $serverRsDir = Split-Path -Parent $scriptDir $repoRoot = Split-Path -Parent $serverRsDir $manifestPath = Join-Path $serverRsDir "Cargo.toml" $modulePath = Join-Path $serverRsDir "crates\spacetime-module" if (-not (Test-Path $manifestPath)) { throw "Missing server-rs/Cargo.toml, cannot start M7 preflight." } Write-Host "[m7:preflight] repo root: $repoRoot" Write-Host "[m7:preflight] server-rs: $serverRsDir" Push-Location $serverRsDir try { Write-Host "[m7:preflight] step: cargo check -p spacetime-module" cargo check -p spacetime-module --manifest-path $manifestPath Write-Host "[m7:preflight] step: cargo check -p api-server" cargo check -p api-server --manifest-path $manifestPath Write-Host "[m7:preflight] step: cargo test -p shared-contracts" cargo test -p shared-contracts --manifest-path $manifestPath if ($RunSpacetimeBuild) { $spacetimeCommand = Get-Command spacetime -ErrorAction SilentlyContinue if ($null -eq $spacetimeCommand) { throw "Missing spacetime CLI, cannot run spacetime build." } Write-Host "[m7:preflight] step: spacetime build --debug" Push-Location $modulePath try { & $spacetimeCommand.Source build --debug } finally { Pop-Location } } } finally { Pop-Location } if ($RunSmoke) { Write-Host "[m7:preflight] step: server-rs smoke" & (Join-Path $serverRsDir "scripts\smoke.ps1") } Write-Host "[m7:preflight] all checks passed"