mirror of
https://github.com/storytold/artcraft.git
synced 2026-10-26 02:59:37 +00:00
345cbe766a
Adds script/bootstrap/windows/*.ps1 (PowerShell 5.1-compatible) as the primary bootstrap path, validated end-to-end on a real Windows 10 machine: - Portable stack under gitignored .devstack/: MySQL 8.4.11 (official cdn.mysql.com zip, --initialize-insecure, bound to 127.0.0.1) and Redis 5.0.14.1 (tporadowski build, REDIS_ZIP_URL-overridable) run as plain user processes - no admin, no services, no WSL, no Docker - bootstrap_dev_stack.ps1: winget-installs missing build tools (Strawberry Perl, NASM, LLVM; wreq's BoringSSL + aws-lc-sys need them), compiles diesel_cli against the portable MySQL's own client lib (MYSQLCLIENT_LIB_DIR), runs all 281 migrations, seeds roles/badges idempotently, generates the dummy secrets env (plus TEMP_DIR for Windows), builds storyteller-web, installs frontend deps - start/stop_dev_services.ps1, run_backend_dev.ps1, seed_demo_user.ps1, dev_stack_doctor.ps1 mirror the bash variants - Invoke-Native (cmd /c ... 2>&1) wraps long-running native calls so PS 5.1 cannot turn harmless stderr warnings into terminating NativeCommandErrors when output is captured; my.ini uses forward slashes (MySQL escape rules) Verified on this machine: 281/281 migrations applied, backend built (3m05s) and booted on :12345 with dummy secrets, POST /v1/create_account + /v1/login round-trip succeeded, webapp dev server served on :4201, doctor reports 0 failures. The bash scripts remain the Linux/WSL2/CI path.
42 lines
1.4 KiB
PowerShell
42 lines
1.4 KiB
PowerShell
# Stop the portable MySQL and Redis processes started by start_dev_services.ps1.
|
|
param()
|
|
|
|
. (Join-Path $PSScriptRoot "common.ps1")
|
|
|
|
# Graceful MySQL shutdown (flushes InnoDB) - root has no password in the
|
|
# portable install (initialized with --initialize-insecure).
|
|
if (Test-TcpPort 3306) {
|
|
$mysqladmin = Get-MySqlTool "mysqladmin"
|
|
if ($mysqladmin) {
|
|
Write-Log "Shutting down MySQL..."
|
|
try { & $mysqladmin -u root -h 127.0.0.1 shutdown 2>$null } catch {}
|
|
$deadline = (Get-Date).AddSeconds(30)
|
|
while ((Test-TcpPort 3306) -and ((Get-Date) -lt $deadline)) { Start-Sleep -Seconds 1 }
|
|
}
|
|
}
|
|
|
|
if (Test-TcpPort 6379) {
|
|
$cli = Get-RedisTool "redis-cli"
|
|
if ($cli) {
|
|
Write-Log "Shutting down Redis..."
|
|
try { & $cli -h 127.0.0.1 shutdown nosave 2>$null } catch {}
|
|
}
|
|
}
|
|
|
|
# Last resort: kill anything left via recorded PIDs.
|
|
if (Test-Path $PidsDir) {
|
|
foreach ($pidFile in Get-ChildItem $PidsDir -Filter "*.pid" -ErrorAction SilentlyContinue) {
|
|
$procId = Get-Content $pidFile.FullName -ErrorAction SilentlyContinue
|
|
if ($procId) {
|
|
$proc = Get-Process -Id $procId -ErrorAction SilentlyContinue
|
|
if ($proc -and -not $proc.HasExited) {
|
|
Write-Log "Force-stopping $($pidFile.BaseName) (pid $procId)..."
|
|
try { Stop-Process -Id $procId -Force -Confirm:$false -ErrorAction Stop } catch {}
|
|
}
|
|
}
|
|
Remove-Item $pidFile.FullName -Force -Confirm:$false -ErrorAction SilentlyContinue
|
|
}
|
|
}
|
|
|
|
Write-Log "Dev services stopped."
|