Build / build (push) Canceled after 0s
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>
86 lines
3.8 KiB
YAML
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
|