Files
adminandClaude Sonnet 5 c8558e7724
Build / build (push) Canceled after 0s
GitHub-Release bei erneutem Lauf sauber neu erstellen statt aktualisieren
append_body kollidierte mit generate_release_notes bei einem bereits
bestehenden Release unter demselben Tag: die automatisch generierten
Notizen überschrieben unseren VirusTotal-Link vollständig. Ein evtl.
vorhandenes Release wird jetzt vor dem Erstellen entfernt, damit der
dokumentierte "body wird den Auto-Notizen vorangestellt"-Fall greift.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-12 13:15:56 +02:00

86 lines
3.8 KiB
YAML

name: Release
# Baut die Windows-exe direkt aus dem hier sichtbaren Quellcode (nicht lokal
# vorgebaut), erzeugt eine SHA256-Prüfsumme und lässt die exe von VirusTotal
# scannen, damit Nutzer dem Download vertrauen können. Läuft bei jedem Tag im
# Format "v1.2.3" sowie manuell über "Run workflow".
on:
push:
tags:
- "v*.*.*"
workflow_dispatch:
permissions:
contents: write
jobs:
build-and-release:
runs-on: windows-latest
steps:
- name: Code auschecken
uses: actions/checkout@v4
- name: .NET SDK einrichten
uses: actions/setup-dotnet@v4
with:
dotnet-version: "8.0.x"
# Debug-Konfiguration, nicht Release: der interne Demo-Verbindungszugang, den ein Teil
# der Tests nutzt, ist per #if DEBUG bewusst nur in Debug-Builds vorhanden (siehe
# RouterOsClientFactory.cs) und existiert in Release nicht — dort würde der Test einen
# echten (nie erfolgreichen) Verbindungsversuch auslösen und in einen Timeout laufen.
- name: Tests ausführen
run: dotnet test src/MikrotikInstaller.Core.Tests/MikrotikInstaller.Core.Tests.csproj --configuration Debug
- name: Windows-exe veröffentlichen (self-contained, Single-File)
run: dotnet publish src/MikrotikInstaller.App/MikrotikInstaller.App.csproj --configuration Release --runtime win-x64
- name: SHA256-Prüfsumme erzeugen
shell: pwsh
run: |
$exePath = "src/MikrotikInstaller.App/bin/Release/net8.0-windows/win-x64/publish/MikroTik-Installer.exe"
$hash = (Get-FileHash -Path $exePath -Algorithm SHA256).Hash.ToLower()
"$hash MikroTik-Installer.exe" | Out-File -FilePath "MikroTik-Installer.exe.sha256" -Encoding ascii -NoNewline
Write-Host "SHA256: $hash"
# update_release_body der Action funktioniert nur, wenn der Workflow selbst durch das
# "release: published"-Event ausgelöst wurde - hier läuft er aber bei einem Tag-Push und
# das Release entsteht erst im nächsten Schritt. Deshalb nur scannen und den Link selbst
# in den Release-Text einfügen (nächster Schritt), statt update_release_body zu nutzen.
- name: Bei VirusTotal scannen
id: virustotal
uses: crazy-max/ghaction-virustotal@v4
with:
vt_api_key: ${{ secrets.VT_API_KEY }}
files: |
./src/MikrotikInstaller.App/bin/Release/net8.0-windows/win-x64/publish/MikroTik-Installer.exe
- name: Scan-Link aus der Action-Ausgabe extrahieren
id: vt_link
shell: pwsh
run: |
# Ausgabeformat der Action: "<Dateipfad>=<Analyse-URL>"
$raw = "${{ steps.virustotal.outputs.analysis }}"
$url = $raw.Split('=', 2)[1]
"url=$url" | Out-File -FilePath $env:GITHUB_OUTPUT -Encoding utf8 -Append
# Falls unter diesem Tag bereits ein Release existiert (z. B. weil der Tag für einen
# erneuten Testlauf verschoben wurde): entfernen, damit die Action unten sauber neu
# erstellt statt einen bestehenden Release-Text zu verändern (dabei würde unser
# VirusTotal-Link von "generate_release_notes" wieder überschrieben).
- name: Vorhandenes Release unter diesem Tag entfernen (falls vorhanden)
shell: pwsh
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: gh release delete "${{ github.ref_name }}" --yes --cleanup-tag=false 2>$null; exit 0
- name: GitHub-Release erstellen
uses: softprops/action-gh-release@v2
with:
generate_release_notes: true
body: |
🛡️ **VirusTotal-Scan dieser Datei:** ${{ steps.vt_link.outputs.url }}
files: |
src/MikrotikInstaller.App/bin/Release/net8.0-windows/win-x64/publish/MikroTik-Installer.exe
MikroTik-Installer.exe.sha256