From e96a30b76f57aa9a0ec7802fc1e2ccfc9660cd77 Mon Sep 17 00:00:00 2001 From: Zac Gaetano Date: Fri, 15 May 2026 20:16:14 -0400 Subject: [PATCH] chore: trim stale batch-commit script + drop SmokeTest placeholder MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit commit-and-push.ps1 (443L / 21KB) was a one-shot deployment script that staged 25 themed commits to land the May 2026 polish batch in a single run. That work has long since been committed; every Stage-AndCommit call is now a no-op because nothing matches what's already in history, and one of the file paths it referenced (DiskSpaceWatcher.cs) was deleted alongside the recording surface. Replaced it with a 45-line wrapper that does what the day-to-day workflow actually needs: run build-and-test.ps1, refuse to push if either failed, then push the current branch to origin. README and NEXT_STEPS still reference the script name; behavior is now what those docs imply ("build + tests + push") rather than the original "land 25 specific commits." Also deleted src/tests/TeamsISO.Engine.Tests/SmokeTest.cs — a single Assert.True(true) placeholder kept "to confirm the project is wired." 103 real engine tests confirm the project is wired far more meaningfully than a tautology. Net test count drops 104 → 103 on the Engine side; 56 + 103 = 159 still pass. Build clean. Co-Authored-By: Claude Opus 4.7 (1M context) --- commit-and-push.ps1 | 460 ++----------------- src/tests/TeamsISO.Engine.Tests/SmokeTest.cs | 10 - 2 files changed, 31 insertions(+), 439 deletions(-) delete mode 100644 src/tests/TeamsISO.Engine.Tests/SmokeTest.cs diff --git a/commit-and-push.ps1 b/commit-and-push.ps1 index 44bb515..93b7158 100644 --- a/commit-and-push.ps1 +++ b/commit-and-push.ps1 @@ -1,443 +1,45 @@ -# Commit + push the May 2026 polish batch to forge.wilddragon.net. +# Build + test verification, then push the current branch to origin. # # Run from the repo root: # pwsh -ExecutionPolicy Bypass -File .\commit-and-push.ps1 # -# Splits into 8 atomic commits (#59, #61, #64-#69), then pushes origin/main. -# Stops on first error so you can resolve and re-run. +# This is the operator's "I'm done with this branch, ship it" helper. It +# runs build-and-test.ps1 first (Release build with TreatWarningsAsErrors, +# then the test suite minus the requires=ndi tier), and only pushes if +# both pass. +# +# History note: the prior incarnation of this script (May 2026) was a +# one-shot batch-commit script that staged 25 themed commits in sequence +# to land the May 2026 polish batch on origin/main. That work has long +# since been committed, so the staging logic is dead weight; the script +# now reflects the actual day-to-day workflow. $ErrorActionPreference = 'Stop' -# Ensure we're at repo root. if (-not (Test-Path '.git') -or -not (Test-Path 'TeamsISO.sln')) { throw "Run from the TeamsISO repo root." } -# Tidy up the diagnostic artifact I left while probing the sandbox. -if (Test-Path '.claude-bash-test.txt') { - Remove-Item '.claude-bash-test.txt' -Force - Write-Host "Removed sandbox diagnostic file." -ForegroundColor DarkGray -} +# Step 1 — build + tests must be green before anything ships. +Write-Host "──── Build + test ────" -ForegroundColor Cyan +pwsh -NoProfile -ExecutionPolicy Bypass -File '.\build-and-test.ps1' +if ($LASTEXITCODE -ne 0) { throw "build-and-test.ps1 failed; aborting." } -# ─── helper ───────────────────────────────────────────────────────────── -function Stage-AndCommit($message, [string[]]$paths) { - Write-Host "" - Write-Host "──── $message ────" -ForegroundColor Cyan - foreach ($p in $paths) { - if (Test-Path $p) { - git add -- $p - if ($LASTEXITCODE -ne 0) { throw "git add failed for $p" } - } else { - Write-Warning "Path not found, skipping: $p" - } - } - # Anything actually staged? - git diff --cached --quiet - if ($LASTEXITCODE -eq 0) { - Write-Host " (no changes to commit; skipping)" -ForegroundColor DarkGray - return - } - git commit -m $message - if ($LASTEXITCODE -ne 0) { throw "git commit failed: $message" } -} - -# ─── #59 Auto-disable on participant departure ───────────────────────── -# View-model gained AutoDisableOnDeparture; MainViewModel hooks departure; -# DISPLAY settings shows the toggle. -# (These three files also carry later changes — staging them here means the -# first commit captures only the auto-disable additions IF you've checked -# the diff is clean. If `git diff --cached` after the add looks bigger than -# the auto-disable feature alone, abort, edit the message, and let the -# combined commit cover #59 as part of the broader UI batch.) -Stage-AndCommit ` - "feat(ui): auto-disable ISOs when participants leave the meeting" ` - @( - "src/TeamsISO.App/ViewModels/GlobalSettingsViewModel.cs", - "src/TeamsISO.App/ViewModels/MainViewModel.cs", - "src/TeamsISO.App/MainWindow.xaml" - ) - -# ─── #61 Operator presets ────────────────────────────────────────────── -# Only the new files; the wiring into MainWindow header / MainViewModel -# was already staged above as part of #59 (because all three commits touch -# MainWindow.xaml / MainViewModel.cs, the cleanest atomic split would -# require git add -p; for batch-push we accept that the boundary is -# approximate and the headline message reflects the dominant change). -Stage-AndCommit ` - "feat(ui): operator presets — save/load named ISO assignment snapshots" ` - @( - "src/TeamsISO.App/Services/OperatorPresetStore.cs", - "src/TeamsISO.App/PresetsDialog.xaml", - "src/TeamsISO.App/PresetsDialog.xaml.cs" - ) - -# ─── #64 Optional MSI / exe code-signing in release.yml ──────────────── -Stage-AndCommit ` - "ci: optional MSI + exe code-signing in release.yml" ` - @( - ".forgejo/workflows/release.yml", - "docs/RELEASING.md" - ) - -# ─── #65 Refresh discovery affordance ────────────────────────────────── -# Includes engine-side RefreshDiscovery + idempotent re-Add + regression test. -Stage-AndCommit ` - "feat(engine): refresh discovery affordance + idempotent re-Add handling" ` - @( - "src/TeamsISO.Engine/Discovery/NdiDiscoveryService.cs", - "src/TeamsISO.Engine/Discovery/ParticipantTracker.cs", - "src/TeamsISO.Engine/Controller/IIsoController.cs", - "src/TeamsISO.Engine/Controller/IsoController.cs", - "src/tests/TeamsISO.Engine.Tests/Discovery/ParticipantTrackerTests.cs" - ) - -# ─── #66 / #67 / #68 / #69 UI batch ──────────────────────────────────── -# These four features all touch MainViewModel.cs / MainWindow.xaml / theme -# files together, so a per-feature split is impractical without git add -p. -# We commit as one batch with a descriptive message. -Stage-AndCommit ` - "feat(ui): May 2026 batch — auto-apply preset, settings tabs, Phase E.2/E.3" ` - @( - "src/TeamsISO.App/Services/TeamsLauncher.cs", - "src/TeamsISO.App/Services/TeamsControlBridge.cs", - "src/TeamsISO.App/MainWindow.xaml.cs", - "src/TeamsISO.App/Themes/WildDragonTheme.xaml" - ) - -# ─── #70 / #71 / #73 Hardening + onboarding ──────────────────────────── -# Crash diagnostics, first-launch welcome dialog, Reset-to-defaults button. -# Touches App.xaml.cs, AboutWindow (re-open onboarding link), and adds the -# new OnboardingWindow files. -Stage-AndCommit ` - "feat(ui): crash diagnostics, first-launch welcome, reset-to-defaults" ` - @( - "src/TeamsISO.App/App.xaml.cs", - "src/TeamsISO.App/OnboardingWindow.xaml", - "src/TeamsISO.App/OnboardingWindow.xaml.cs", - "src/TeamsISO.App/AboutWindow.xaml", - "src/TeamsISO.App/AboutWindow.xaml.cs" - ) - -# ─── #77 Per-output recording ────────────────────────────────────────── -# IRecorderSink + RawBgraRecorderSink + IsoPipelineConfig.Recorder wiring + -# IsoController.SetRecording + UI checkbox in DISPLAY tab. -Stage-AndCommit ` - "feat: per-output recording — raw BGRA stream + ffmpeg convert.cmd" ` - @( - "src/TeamsISO.Engine/Pipeline/IRecorderSink.cs", - "src/TeamsISO.Engine/Pipeline/RawBgraRecorderSink.cs", - "src/TeamsISO.Engine/Pipeline/IsoPipelineConfig.cs", - "src/TeamsISO.Engine/Pipeline/IsoPipeline.cs", - "src/TeamsISO.Engine/Controller/IIsoController.cs", - "src/TeamsISO.Engine/Controller/IsoController.cs" - ) - -# ─── #78 / #79 REST control surface + preset apply lift ─────────────── -# ControlSurfaceServer + PresetApplier (lifted from PresetsDialog) + -# REST endpoints + DISPLAY tab toggle + CONTROL-SURFACE.md docs. -# PresetsDialog and MainViewModel.TryAutoApplyPendingPreset both delegate -# to PresetApplier so apply has a single implementation across the dialog, -# auto-apply-on-launch, and the REST surface. -Stage-AndCommit ` - "feat: REST control surface + lift preset-apply into PresetApplier" ` - @( - "src/TeamsISO.App/Services/ControlSurfaceServer.cs", - "src/TeamsISO.App/Services/PresetApplier.cs", - "src/TeamsISO.App/PresetsDialog.xaml.cs", - "docs/CONTROL-SURFACE.md" - ) - -# ─── #80 In-app preview thumbnails ───────────────────────────────────── -# Engine: IsoPipeline.LatestProcessedFrame + IsoController.GetLatestProcessedFrame. -# UI: ParticipantViewModel.Thumbnail (WriteableBitmap, BGRA, 160x90 nearest-neighbor), -# DataGrid Preview column, .csproj AllowUnsafeBlocks. -Stage-AndCommit ` - "feat: in-app preview thumbnails per participant" ` - @( - "src/TeamsISO.Engine/Pipeline/IsoPipeline.cs", - "src/TeamsISO.Engine/Controller/IIsoController.cs", - "src/TeamsISO.Engine/Controller/IsoController.cs", - "src/TeamsISO.App/ViewModels/ParticipantViewModel.cs", - "src/TeamsISO.App/ViewModels/MainViewModel.cs", - "src/TeamsISO.App/MainWindow.xaml", - "src/TeamsISO.App/TeamsISO.App.csproj" - ) - -# ─── #81 / #82 WebSocket push + OSC bridge ───────────────────────────── -# /ws on the existing HTTP listener for live state push; OscBridge as a -# parallel UDP listener using the same command vocabulary. -Stage-AndCommit ` - "feat: WebSocket live-state push + OSC bridge" ` - @( - "src/TeamsISO.App/Services/ControlSurfaceServer.cs", - "src/TeamsISO.App/Services/OscBridge.cs", - "src/TeamsISO.App/App.xaml.cs", - "src/TeamsISO.App/ViewModels/GlobalSettingsViewModel.cs", - "src/TeamsISO.App/MainWindow.xaml", - "docs/CONTROL-SURFACE.md" - ) - -# ─── #83 / #85 Update check (manual + auto-on-launch) ───────────────── -# Manual "Check for updates" in About + silent throttled launch-time check -# with banner above the participants area. -Stage-AndCommit ` - "feat: update check — manual in About + auto-on-launch with banner" ` - @( - "src/TeamsISO.App/Services/UpdateChecker.cs", - "src/TeamsISO.App/AboutWindow.xaml", - "src/TeamsISO.App/AboutWindow.xaml.cs", - "src/TeamsISO.App/ViewModels/UpdateBannerViewModel.cs", - "src/TeamsISO.App/App.xaml.cs", - "src/TeamsISO.App/ViewModels/MainViewModel.cs", - "src/TeamsISO.App/ViewModels/GlobalSettingsViewModel.cs", - "src/TeamsISO.App/MainWindow.xaml" - ) - -# ─── #86 Preset import / export ──────────────────────────────────────── -# OperatorPresetStore.ExportAllAsJson + ImportBundle + Export/Import buttons -# in the Presets dialog footer. -Stage-AndCommit ` - "feat: preset import / export bundles" ` - @( - "src/TeamsISO.App/Services/OperatorPresetStore.cs", - "src/TeamsISO.App/PresetsDialog.xaml", - "src/TeamsISO.App/PresetsDialog.xaml.cs" - ) - -# ─── #87 Recording markers ───────────────────────────────────────────── -# IRecorderSink.AddMarker fan-out via IIsoController.AddRecordingMarker; -# UI button in IN-CALL bar; REST + OSC endpoints; manifest.json gets -# markers[] array. -Stage-AndCommit ` - "feat: recording markers (UI button + REST + OSC + manifest array)" ` - @( - "src/TeamsISO.Engine/Pipeline/IRecorderSink.cs", - "src/TeamsISO.Engine/Pipeline/RawBgraRecorderSink.cs", - "src/TeamsISO.Engine/Controller/IIsoController.cs", - "src/TeamsISO.Engine/Controller/IsoController.cs", - "src/TeamsISO.App/ViewModels/MainViewModel.cs", - "src/TeamsISO.App/MainWindow.xaml", - "src/TeamsISO.App/Services/ControlSurfaceServer.cs", - "src/TeamsISO.App/Services/OscBridge.cs", - "docs/CONTROL-SURFACE.md" - ) - -# ─── #88 / #89 NDI name template + enriched footer ───────────────────── -# OutputNameTemplate static helper + ParticipantViewModel uses it on Toggle; -# footer gains REC badge + Control-Surface badge. -Stage-AndCommit ` - "feat: custom NDI output name template + enriched status bar" ` - @( - "src/TeamsISO.App/Services/OutputNameTemplate.cs", - "src/TeamsISO.App/ViewModels/ParticipantViewModel.cs", - "src/TeamsISO.App/ViewModels/GlobalSettingsViewModel.cs", - "src/TeamsISO.App/ViewModels/MainViewModel.cs", - "src/TeamsISO.App/MainWindow.xaml" - ) - -# ─── #90 / #91 Disk space watcher + diagnostics bundle ───────────────── -Stage-AndCommit ` - "feat: disk space watcher + diagnostic bundle export" ` - @( - "src/TeamsISO.App/Services/DiskSpaceWatcher.cs", - "src/TeamsISO.App/Services/DiagnosticsBundle.cs", - "src/TeamsISO.App/App.xaml.cs", - "src/TeamsISO.App/AboutWindow.xaml", - "src/TeamsISO.App/AboutWindow.xaml.cs" - ) - -# ─── #92 Per-participant recording opt-out ───────────────────────────── -# IsoController.EnableIsoAsync overload taking record-override; UI checkbox -# in DataGrid bound to ParticipantViewModel.RecordToDisk. -Stage-AndCommit ` - "feat: per-participant recording opt-out (Rec column in DataGrid)" ` - @( - "src/TeamsISO.Engine/Controller/IIsoController.cs", - "src/TeamsISO.Engine/Controller/IsoController.cs", - "src/TeamsISO.App/ViewModels/ParticipantViewModel.cs", - "src/TeamsISO.App/MainWindow.xaml" - ) - -# ─── #93 / #94 Keyboard shortcuts + help cheat sheet ─────────────────── -# F1 / Ctrl+M / Ctrl+Shift+S / Ctrl+R InputBindings + HelpWindow dialog. -Stage-AndCommit ` - "feat: window-scoped keyboard shortcuts + help cheat sheet (F1)" ` - @( - "src/TeamsISO.App/HelpWindow.xaml", - "src/TeamsISO.App/HelpWindow.xaml.cs", - "src/TeamsISO.App/ViewModels/MainViewModel.cs", - "src/TeamsISO.App/MainWindow.xaml" - ) - -# ─── #95 / #96 / #97 Bulk enable + filter + context menu ─────────────── -# EnableAllOnlineCommand, ParticipantsView with live filter, right-click -# context menu on DataGrid rows. -Stage-AndCommit ` - "feat: bulk enable + participant filter + right-click context menu" ` - @( - "src/TeamsISO.App/ViewModels/MainViewModel.cs", - "src/TeamsISO.App/ViewModels/ParticipantViewModel.cs", - "src/TeamsISO.App/MainWindow.xaml" - ) - -# ─── #98 / #99 / #100 / #101 / #102 Operator polish batch ───────────── -# --apply-preset CLI, dynamic status with live counts, embedded HTML panel -# at /ui, session timer in footer, NotesService + REST/OSC notes endpoint. -Stage-AndCommit ` - "feat: CLI flags, dynamic status, HTML panel, session timer, notes" ` - @( - "src/TeamsISO.App/App.xaml.cs", - "src/TeamsISO.App/ViewModels/MainViewModel.cs", - "src/TeamsISO.App/MainWindow.xaml", - "src/TeamsISO.App/Services/ControlSurfaceServer.cs", - "src/TeamsISO.App/Services/ControlPanelHtml.cs", - "src/TeamsISO.App/Services/OscBridge.cs", - "src/TeamsISO.App/Services/NotesService.cs", - "docs/CONTROL-SURFACE.md" - ) - -# ─── #103 Duplicate preset action ────────────────────────────────────── -Stage-AndCommit ` - "feat(ui): duplicate-preset action in Presets dialog" ` - @( - "src/TeamsISO.App/PresetsDialog.xaml", - "src/TeamsISO.App/PresetsDialog.xaml.cs" - ) - -# ─── #104 CHANGELOG.md ───────────────────────────────────────────────── -Stage-AndCommit ` - "docs: add CHANGELOG.md tracking the May 2026 batch" ` - @( - "CHANGELOG.md" - ) - -# ─── #105 / #106 / #107 Final UI polish ─────────────────────────────── -# NotesWindow viewer + ShowNotesCommand + IN-CALL bar Notes button + README -# rewrite. Confirm-before-Stop-All (catches mid-show misclicks). -# About dialog gained "Logs / Recordings / Notes" folder shortcut buttons. -Stage-AndCommit ` - "feat(ui): notes viewer + Stop-All confirm + folder shortcuts + README" ` - @( - "src/TeamsISO.App/NotesWindow.xaml", - "src/TeamsISO.App/NotesWindow.xaml.cs", - "src/TeamsISO.App/ViewModels/MainViewModel.cs", - "src/TeamsISO.App/MainWindow.xaml", - "src/TeamsISO.App/AboutWindow.xaml", - "src/TeamsISO.App/AboutWindow.xaml.cs", - "README.md" - ) - -# ─── #116 / #117 / #118 Operator polish (toast, restart, roll) ─────── -# Always-toast on participant disconnect (not just auto-disable path). -# Per-pipeline "Restart this ISO" right-click action. -# "Roll recording" via UI command + REST /recording/roll + OSC. -Stage-AndCommit ` - "feat(ui+control): disconnect toast, per-pipeline restart, roll recording" ` - @( - "src/TeamsISO.App/ViewModels/MainViewModel.cs", - "src/TeamsISO.App/ViewModels/ParticipantViewModel.cs", - "src/TeamsISO.App/MainWindow.xaml", - "src/TeamsISO.App/Services/ControlSurfaceServer.cs", - "src/TeamsISO.App/Services/OscBridge.cs", - "docs/CONTROL-SURFACE.md" - ) - -# ─── #115 Test-pattern generator + console flag ────────────────────── -# TestPatternGenerator: SMPTE color bars + sweep band BGRA frames. -# TeamsISO.Console --test-pattern broadcasts TEAMSISO_TEST at 720p30. -# Useful for verifying NDI runtime without Teams running. -Stage-AndCommit ` - "feat(engine+console): SMPTE test-pattern generator + --test-pattern flag" ` - @( - "src/TeamsISO.Engine/Pipeline/TestPatternGenerator.cs", - "src/TeamsISO.Console/Program.cs", - "src/tests/TeamsISO.Engine.Tests/Pipeline/TestPatternGeneratorTests.cs" - ) - -# ─── #114 / #119 Tray icon + WinForms/WPF disambiguation ───────────── -# Adds System.Windows.Forms via UseWindowsForms=true for NotifyIcon. -# GlobalUsings.cs aliases Application + MessageBox to WPF (resolves -# CS0104 ambiguity caused by WinForms exposing same-named types). -# ControlSurfaceServer.cs gained explicit `using System.IO;` (implicit -# usings shifted with UseWindowsForms). -Stage-AndCommit ` - "feat(ui): system tray icon + WinForms/WPF namespace disambiguation" ` - @( - "src/TeamsISO.App/Services/TrayIconHost.cs", - "src/TeamsISO.App/Services/UIPreferences.cs", - "src/TeamsISO.App/App.xaml.cs", - "src/TeamsISO.App/TeamsISO.App.csproj", - "src/TeamsISO.App/GlobalUsings.cs", - "src/TeamsISO.App/Services/ControlSurfaceServer.cs", - "src/TeamsISO.App/ViewModels/GlobalSettingsViewModel.cs", - "src/TeamsISO.App/MainWindow.xaml" - ) - -# ─── #76 / #74 / #112 Tests + audio meter scaffold + MF recorder ───── -# OperatorPresetStore + OutputNameTemplate + OscMessage tests in a new -# net8.0-windows test project. Audio level VU bar in DataGrid (engine -# field added; capture path is a follow-up). MediaFoundationRecorderSink -# scaffold gated behind MF_AVAILABLE build symbol. -Stage-AndCommit ` - "test+feat: App.Tests project + audio VU scaffold + MF recorder stub" ` - @( - "src/tests/TeamsISO.App.Tests/TeamsISO.App.Tests.csproj", - "src/tests/TeamsISO.App.Tests/Services/OperatorPresetStoreTests.cs", - "src/tests/TeamsISO.App.Tests/Services/OutputNameTemplateTests.cs", - "src/tests/TeamsISO.App.Tests/Services/OscMessageTests.cs", - "src/TeamsISO.App/Services/OperatorPresetStore.cs", - "src/TeamsISO.App/TeamsISO.App.csproj", - "src/TeamsISO.Engine/Domain/IsoHealthStats.cs", - "src/TeamsISO.Engine/Pipeline/MediaFoundationRecorderSink.cs", - "src/TeamsISO.App/ViewModels/ParticipantViewModel.cs", - "src/TeamsISO.App/MainWindow.xaml", - "TeamsISO.sln", - "TeamsISO.Windows.slnf", - "docs/REAL-TIME-RECORDING.md" - ) - -# ─── #108 / #109 / #110 / #111 Final session-2 polish ───────────────── -# UIPreferences persists DISPLAY toggles + ParticipantSort across launches. -# PreviewWindow non-modal floating preview at 20Hz for multi-monitor. -# Configurable participant sort order via ICollectionView.SortDescriptions. -# NotesWindow gains inline input (operator can type notes directly, not -# only via REST/OSC). HTML control panel gains a "Note…" button. Richer -# GET / response. Updated CHANGELOG + README to reflect all of session 2. -Stage-AndCommit ` - "feat: persist UI prefs + preview window + sort + inline note input" ` - @( - "src/TeamsISO.App/Services/UIPreferences.cs", - "src/TeamsISO.App/Services/ControlSurfaceServer.cs", - "src/TeamsISO.App/Services/ControlPanelHtml.cs", - "src/TeamsISO.App/ViewModels/GlobalSettingsViewModel.cs", - "src/TeamsISO.App/ViewModels/MainViewModel.cs", - "src/TeamsISO.App/PreviewWindow.xaml", - "src/TeamsISO.App/PreviewWindow.xaml.cs", - "src/TeamsISO.App/NotesWindow.xaml", - "src/TeamsISO.App/NotesWindow.xaml.cs", - "src/TeamsISO.App/ViewModels/ParticipantViewModel.cs", - "src/TeamsISO.App/MainWindow.xaml", - "README.md", - "CHANGELOG.md" - ) - -# ─── #72 / #75 UIA polish ────────────────────────────────────────────── -# (Already committed above as part of the #66-#69 batch since they touched -# the same TeamsControlBridge / TeamsLauncher files.) - -# ─── docs ─────────────────────────────────────────────────────────────── -Stage-AndCommit ` - "docs: refresh _NEXT.md after recording + control surface" ` - @( - "docs/superpowers/plans/_NEXT.md" - ) - -# ─── Push ─────────────────────────────────────────────────────────────── -Write-Host "" -Write-Host "──── Pushing to origin/main ────" -ForegroundColor Cyan -git push origin main -if ($LASTEXITCODE -ne 0) { throw "git push failed" } +# Step 2 — what are we pushing? Surface the branch + commit summary so +# the operator sees the exact thing about to land on the remote. +$branch = (git rev-parse --abbrev-ref HEAD).Trim() +if ($branch -eq 'HEAD') { throw "Detached HEAD; check out a branch before running this script." } Write-Host "" -Write-Host "Done. Commits pushed to forge.wilddragon.net/zgaetano/teamsiso." -ForegroundColor Green -Write-Host "Forgejo CI will now build the Linux engine on Ubuntu and the Windows release runner is dormant until you push a v*.*.* tag." -ForegroundColor DarkGray +Write-Host "──── Pushing $branch to origin ────" -ForegroundColor Cyan +git status --short +$ahead = (git rev-list --count "origin/$branch..HEAD" 2>$null) +if (-not $ahead) { $ahead = (git rev-list --count HEAD).Trim() } +Write-Host " $ahead commit(s) to push." -ForegroundColor DarkGray + +git push origin $branch +if ($LASTEXITCODE -ne 0) { throw "git push failed." } + +Write-Host "" +Write-Host "Done. Pushed $branch to origin." -ForegroundColor Green +Write-Host "Forgejo CI will pick it up (build the Linux engine on Ubuntu; the Windows release runner is dormant until you push a v*.*.* tag)." -ForegroundColor DarkGray diff --git a/src/tests/TeamsISO.Engine.Tests/SmokeTest.cs b/src/tests/TeamsISO.Engine.Tests/SmokeTest.cs deleted file mode 100644 index 45a61f6..0000000 --- a/src/tests/TeamsISO.Engine.Tests/SmokeTest.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace TeamsISO.Engine.Tests; - -public class SmokeTest -{ - [Fact] - public void TestProjectIsWired() - { - Assert.True(true); - } -}