2 Commits

Author SHA1 Message Date
justin c0ae1961bf Gitea release workflow: build installer + attach to Gitea release
.gitea/workflows/release.yml runs on the self-hosted Windows runner
when a v* tag is pushed (or via workflow_dispatch with a version
override for testing without bumping the project).

Mirrors the GitHub release workflow shape - dotnet test, choco-install
Inno Setup if missing, run scripts/build-installer.ps1 - then uses
Gitea's REST API directly for the release-creation + asset-upload
steps (Gitea has no equivalent to softprops/action-gh-release). Token
is the runner-injected secrets.GITHUB_TOKEN, which Gitea provides for
GitHub Actions compatibility.

Path location matters: lives under .gitea/ so GitHub Actions never
sees it, while the existing .github/workflows/release.yml stays
GitHub-only (already gated with `if: github.server_url == ...`).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-08 12:01:24 -04:00
justin 7f62fd7645 CI: skip GitHub-specific workflows on Gitea Actions; add workflow_dispatch
Gitea reads .github/workflows/ for compatibility, so without guards it
tries to run the release and wiki-sync workflows on Gitea too - which
fail because they use softprops/action-gh-release@v2 (GitHub-only) and
push to GitHub-hosted wiki URLs.

Add `if: github.server_url == 'https://github.com'` to the
release-builder and wiki-sync jobs so Gitea no-ops them. ci.yml
(plain dotnet build + test) still runs on both, and now also accepts
workflow_dispatch so it can be triggered by hand to verify a self-
hosted runner is picking up jobs.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-08 11:59:54 -04:00
2 changed files with 4 additions and 10 deletions
+1 -1
View File
@@ -1,7 +1,7 @@
<Project>
<PropertyGroup>
<Version>0.1.4</Version>
<Version>0.1.3</Version>
<Authors>Justin Paul</Authors>
<Company>Justin Paul</Company>
<Product>Webhook Server</Product>
@@ -82,14 +82,8 @@ public sealed partial class ConfigCheckpointsViewModel : ObservableObject
{
if (Selected is null) return;
// Capture before the refresh; the ObservableCollection.Clear() in
// RefreshAsync nulls Selected (the original instance is gone from the
// collection so the SelectedItem binding clears).
var fileName = Selected.FileName;
var savedAt = Selected.SavedAt;
var ok = MessageBox.Show(
$"Roll the configuration back to the checkpoint from {savedAt.ToLocalTime():yyyy-MM-dd HH:mm:ss}?\n\nThe current configuration is automatically saved as a new checkpoint first, so you can roll forward again.",
$"Roll the configuration back to the checkpoint from {Selected.SavedAt.ToLocalTime():yyyy-MM-dd HH:mm:ss}?\n\nThe current configuration is automatically saved as a new checkpoint first, so you can roll forward again.",
"Confirm rollback",
MessageBoxButton.OKCancel,
MessageBoxImage.Warning);
@@ -97,10 +91,10 @@ public sealed partial class ConfigCheckpointsViewModel : ObservableObject
try
{
await _client.RestoreBackupAsync(fileName).ConfigureAwait(false);
await _client.RestoreBackupAsync(Selected.FileName).ConfigureAwait(false);
await RefreshAsync().ConfigureAwait(false);
Application.Current.Dispatcher.Invoke(() =>
StatusMessage = $"Rolled back to {fileName}.");
StatusMessage = $"Rolled back to {Selected!.FileName}.");
}
catch (Exception ex)
{