| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- param(
- [Parameter(Position = 0)]
- [string]$Target = "all",
- [switch]$DryRun
- )
- $ErrorActionPreference = "Stop"
- $projectRoot = $PSScriptRoot
- $uploadScript = Join-Path $projectRoot "oss-html.ps1"
- if (-not (Test-Path $uploadScript)) {
- throw ("Upload script not found: {0}" -f $uploadScript)
- }
- $publishTargets = @{
- "classic-sequential" = @{
- LocalPath = "event/classic-sequential.json"
- RemotePath = "gotomars/event/classic-sequential.json"
- PublicUrl = "https://oss-mbh5.colormaprun.com/gotomars/event/classic-sequential.json"
- }
- "score-o" = @{
- LocalPath = "event/score-o.json"
- RemotePath = "gotomars/event/score-o.json"
- PublicUrl = "https://oss-mbh5.colormaprun.com/gotomars/event/score-o.json"
- }
- }
- function Assert-JsonConfig {
- param(
- [string]$ConfigPath,
- [string]$ConfigName
- )
- if (-not (Test-Path $ConfigPath)) {
- throw ("Config file not found: {0}" -f $ConfigPath)
- }
- $raw = Get-Content -LiteralPath $ConfigPath -Raw -Encoding UTF8
- try {
- $parsed = $raw | ConvertFrom-Json
- } catch {
- throw ("JSON parse failed: {0}`n{1}" -f $ConfigPath, $_.Exception.Message)
- }
- if (-not $parsed.schemaVersion) {
- throw ("Missing schemaVersion: {0}" -f $ConfigPath)
- }
- if (-not $parsed.game) {
- throw ("Missing game block: {0}" -f $ConfigPath)
- }
- if (-not $parsed.game.mode) {
- throw ("Missing game.mode: {0}" -f $ConfigPath)
- }
- Write-Host ("[OK] {0} schemaVersion={1} game.mode={2}" -f $ConfigName, $parsed.schemaVersion, $parsed.game.mode)
- }
- function Publish-ConfigTarget {
- param(
- [string]$ConfigName,
- [hashtable]$Config
- )
- $localPath = Join-Path $projectRoot $Config.LocalPath
- $remotePath = $Config.RemotePath
- $publicUrl = $Config.PublicUrl
- Assert-JsonConfig -ConfigPath $localPath -ConfigName $ConfigName
- if ($DryRun) {
- Write-Host ("[DRY-RUN] Skip upload: {0} -> {1}" -f $localPath, $remotePath)
- Write-Host ("[DRY-RUN] Public URL: {0}" -f $publicUrl)
- return
- }
- Write-Host ("[UPLOAD] {0} -> {1}" -f $localPath, $remotePath)
- & $uploadScript cp-up $localPath $remotePath
- if ($LASTEXITCODE -ne 0) {
- throw ("Upload failed: {0}" -f $ConfigName)
- }
- Write-Host ("[DONE] {0} published" -f $ConfigName)
- Write-Host ("[URL] {0}" -f $publicUrl)
- }
- $selectedTargets = if ($Target -eq "all") {
- $publishTargets.Keys | Sort-Object
- } else {
- @($Target)
- }
- foreach ($selectedTarget in $selectedTargets) {
- if (-not $publishTargets.ContainsKey($selectedTarget)) {
- $supported = ($publishTargets.Keys + "all" | Sort-Object) -join ", "
- throw ("Unsupported publish target: {0}. Allowed: {1}" -f $selectedTarget, $supported)
- }
- Publish-ConfigTarget -ConfigName $selectedTarget -Config $publishTargets[$selectedTarget]
- }
|