Files

92 lines
3.2 KiB
PowerShell

# SPDX-License-Identifier: 0BSD
[CmdletBinding()]
param()
$ErrorActionPreference = "Stop"
Set-StrictMode -Version Latest
$repoRoot = Split-Path -Parent $PSScriptRoot
Set-Location $repoRoot
$env:GOWORK = "off"
$himesan = if ($env:HIMESAN_BIN) { $env:HIMESAN_BIN } else { "himesan" }
$expectedCompilerVersion = "v1.0.0"
$expectedRuntimeVersion = "v1.0.0"
if (-not (Get-Command $himesan -ErrorAction SilentlyContinue)) {
throw "himesan was not found; install v1.0.0 or set HIMESAN_BIN"
}
function Assert-LastExitCode([string]$Step) {
if ($LASTEXITCODE -ne 0) {
throw "$Step failed with exit code $LASTEXITCODE"
}
}
function Get-GeneratedDigest {
$lines = Get-ChildItem internal/views -Recurse -File -Filter *.sando.go |
Sort-Object FullName |
ForEach-Object {
$hash = (Get-FileHash -Algorithm SHA256 -LiteralPath $_.FullName).Hash.ToLowerInvariant()
"$($_.FullName):$hash"
}
return ($lines -join "`n")
}
$versionOutput = & $himesan version
Assert-LastExitCode "himesan version"
$versionLine = ($versionOutput | Select-Object -First 1)
if ($versionLine -notmatch '^himesan ([^ ]+) ') {
throw "could not parse himesan version output: $versionLine"
}
if ($Matches[1] -ne $expectedCompilerVersion) {
throw "himesan version is $($Matches[1]); expected $expectedCompilerVersion"
}
$runtimeVersion = (go list -m -f '{{.Version}}' gamertan.com/sandwich-hime/sando | Select-Object -First 1)
Assert-LastExitCode "sando runtime version"
if ($runtimeVersion -ne $expectedRuntimeVersion) {
throw "sando runtime version is $runtimeVersion; expected $expectedRuntimeVersion"
}
& $himesan check internal/views
Assert-LastExitCode "himesan check"
$before = Get-GeneratedDigest
& $himesan generate internal/views
Assert-LastExitCode "first himesan generate"
$afterFirst = Get-GeneratedDigest
& $himesan generate internal/views
Assert-LastExitCode "second himesan generate"
$afterSecond = Get-GeneratedDigest
& $himesan check internal/views
Assert-LastExitCode "final himesan check"
if ($before -ne $afterFirst -or $afterFirst -ne $afterSecond) {
throw "generated output was stale or nondeterministic"
}
go test ./...
Assert-LastExitCode "go test"
go vet ./...
Assert-LastExitCode "go vet"
$buildDir = Join-Path ([System.IO.Path]::GetTempPath()) ("sandwich-hime-tutorial-" + [guid]::NewGuid().ToString("N"))
New-Item -ItemType Directory -Path $buildDir | Out-Null
try {
go build -trimpath -o (Join-Path $buildDir "site.exe") ./cmd/site
Assert-LastExitCode "go build"
} finally {
Remove-Item -LiteralPath $buildDir -Recurse -Force -ErrorAction SilentlyContinue
}
$dependencies = @(go list -deps ./cmd/site)
Assert-LastExitCode "go list -deps"
if ($dependencies -notcontains "gamertan.com/sandwich-hime/sando") {
throw "production dependency graph does not contain the sando runtime"
}
if ($dependencies | Where-Object { $_ -match '^gamertan\.com/sandwich-hime$|^gamertan\.com/sandwich-hime/(cmd|internal)(/|$)' }) {
throw "production dependency graph contains the Sandwich Hime compiler"
}
Write-Output "verified v1.0.0 compiler and runtime, deterministic generation, tests, vet, build, and runtime-only production dependencies"