From de3d37d9316b15cf336aa469cd7d27409f2a7d28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20M=C3=BCller?= <1005065+DeepDiver1975@users.noreply.github.com> Date: Wed, 22 Jul 2026 09:54:02 +0200 Subject: [PATCH 1/2] ci(release): build native installers for all platforms on merge to main MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Closes #35. The repo had no published releases and no way to run Lagebuch without a .NET SDK. release.yml existed from the first App PR but was never used: it triggered on v* tags (never pushed), covered only win/linux, and produced bare executables rather than installers. Every merge to main now builds and publishes a prerelease with a real installer per platform: Windows lagebuch--x64.msi (WiX v5) Linux lagebuch__amd64.deb (dpkg-deb, .desktop + icon) macOS lagebuch--macos-arm64.dmg (drag-to-Applications, ad-hoc signed) Version is 0.1., published as a prerelease so nothing is promoted to "Latest" automatically. workflow_dispatch runs the identical build for testing but creates no release or tag (release job is gated on event_name == 'push'), so the pipeline can be exercised from a branch on the real runners before merge. Packaging lives in packaging/{windows,linux,macos} as committed, reusable scripts/authoring rather than inline YAML, so each step runs the same locally and in CI. The .msi uses a fixed UpgradeCode so new versions replace the old. Packages are unsigned -- no Apple Developer ID or Windows cert -- and the README documents the one-time Gatekeeper/SmartScreen steps. A placeholder icon (Feuerwehr cross pattée in the app's signal red on its dark tile) is generated as .svg/.png/.ico and wired into the exe, the .msi shortcut, the .app bundle and the .desktop entry; the macOS .icns is derived on the runner. Clearly a placeholder, easily swapped. Also, per the repo's action-pinning policy: every workflow action is pinned to a full commit SHA (release.yml and the existing ci.yml, which used movable @v4), and a dependabot config is added for the github-actions and nuget ecosystems. Not locally verifiable: the WiX MSI build and the macOS .app/.dmg only run on their respective OSes (WiX explicitly refuses non-Windows). The Linux .deb is verified end to end on Linux -- dpkg-deb -I/-c on the built package. The MSI and DMG are validated by a workflow_dispatch run on the real runners before merge. Co-Authored-By: Claude Opus 4.8 Signed-off-by: Thomas Müller <1005065+DeepDiver1975@users.noreply.github.com> --- .github/dependabot.yml | 13 +++ .github/workflows/ci.yml | 4 +- .github/workflows/release.yml | 154 ++++++++++++++++++++----- README.md | 20 ++++ packaging/linux/build-deb.sh | 66 +++++++++++ packaging/macos/build-dmg.sh | 63 ++++++++++ packaging/windows/Lagebuch.wxs | 50 ++++++++ src/Feuerwehr.App/Assets/icon-1024.png | Bin 0 -> 69549 bytes src/Feuerwehr.App/Assets/icon.ico | Bin 0 -> 372526 bytes src/Feuerwehr.App/Assets/icon.svg | 26 +++++ src/Feuerwehr.App/Feuerwehr.App.csproj | 6 + 11 files changed, 372 insertions(+), 30 deletions(-) create mode 100644 .github/dependabot.yml create mode 100755 packaging/linux/build-deb.sh create mode 100644 packaging/macos/build-dmg.sh create mode 100644 packaging/windows/Lagebuch.wxs create mode 100644 src/Feuerwehr.App/Assets/icon-1024.png create mode 100644 src/Feuerwehr.App/Assets/icon.ico create mode 100644 src/Feuerwehr.App/Assets/icon.svg diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..1d6707d --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,13 @@ +version: 2 +updates: + # Keep the SHA-pinned GitHub Actions current. + - package-ecosystem: github-actions + directory: / + schedule: + interval: weekly + + # NuGet packages across the solution. + - package-ecosystem: nuget + directory: / + schedule: + interval: weekly diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d8f63c2..6403bd0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -14,10 +14,10 @@ jobs: os: [ubuntu-latest, windows-latest] runs-on: ${{ matrix.os }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Setup .NET - uses: actions/setup-dotnet@v4 + uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: dotnet-version: '8.0.x' diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 533a359..05003d3 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,42 +1,140 @@ name: Release +# Every merge to main publishes a prerelease with installers for all three platforms. +# workflow_dispatch runs the same build for testing but creates no release (see the release job's if:). on: push: - tags: [ 'v*' ] + branches: [main] + workflow_dispatch: permissions: contents: write +env: + PUBLISH_FLAGS: >- + -c Release --self-contained true + -p:PublishSingleFile=true -p:IncludeNativeLibrariesForSelfExtract=true + -p:DebugType=none -p:DebugSymbols=false + jobs: - publish: - strategy: - fail-fast: false - matrix: - include: - - os: windows-latest - rid: win-x64 - asset: lagebuch-win-x64.exe - artifact: Feuerwehr.App.exe - - os: ubuntu-latest - rid: linux-x64 - asset: lagebuch-linux-x64 - artifact: Feuerwehr.App - runs-on: ${{ matrix.os }} + version: + runs-on: ubuntu-latest + outputs: + version: ${{ steps.v.outputs.version }} + steps: + - id: v + run: echo "version=0.1.${{ github.run_number }}" >> "$GITHUB_OUTPUT" + + windows: + needs: version + runs-on: windows-latest steps: - - uses: actions/checkout@v4 - - uses: actions/setup-dotnet@v4 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + - uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: dotnet-version: '8.0.x' - name: Publish run: > - dotnet publish src/Feuerwehr.App/Feuerwehr.App.csproj - -c Release -r ${{ matrix.rid }} --self-contained true - -p:PublishSingleFile=true -p:IncludeNativeLibrariesForSelfExtract=true - -o publish - - name: Rename artifact - shell: bash - run: cp "publish/${{ matrix.artifact }}" "${{ matrix.asset }}" - - name: Upload to release - uses: softprops/action-gh-release@v2 - with: - files: ${{ matrix.asset }} + dotnet publish src/Feuerwehr.App/Feuerwehr.App.csproj -r win-x64 ${{ env.PUBLISH_FLAGS }} + -p:Version=${{ needs.version.outputs.version }} -o publish + - name: Install WiX + run: | + dotnet tool install --global wix --version 5.0.2 + echo "$env:USERPROFILE\.dotnet\tools" >> $env:GITHUB_PATH + - name: Build MSI + # Absolute paths: WiX resolves relative to the .wxs file's own directory, + # not the working directory, so a bare "publish" would look under packaging/windows. + run: > + wix build packaging/windows/Lagebuch.wxs + -d Version=${{ needs.version.outputs.version }} + -d "PublishDir=${{ github.workspace }}\publish" + -d "IconFile=${{ github.workspace }}\src\Feuerwehr.App\Assets\icon.ico" + -o "lagebuch-${{ needs.version.outputs.version }}-x64.msi" + - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 + with: + name: msi + path: '*.msi' + if-no-files-found: error + + linux: + needs: version + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + - uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 + with: + dotnet-version: '8.0.x' + - name: Publish + run: > + dotnet publish src/Feuerwehr.App/Feuerwehr.App.csproj -r linux-x64 ${{ env.PUBLISH_FLAGS }} + -p:Version=${{ needs.version.outputs.version }} -o publish + - name: Build .deb + run: | + chmod +x packaging/linux/build-deb.sh + packaging/linux/build-deb.sh \ + "${{ needs.version.outputs.version }}" \ + publish \ + src/Feuerwehr.App/Assets/icon-1024.png \ + dist + - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 + with: + name: deb + path: dist/*.deb + if-no-files-found: error + + macos: + needs: version + runs-on: macos-latest + steps: + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + - uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 + with: + dotnet-version: '8.0.x' + - name: Publish + run: > + dotnet publish src/Feuerwehr.App/Feuerwehr.App.csproj -r osx-arm64 ${{ env.PUBLISH_FLAGS }} + -p:Version=${{ needs.version.outputs.version }} -o publish + - name: Build .dmg + run: | + chmod +x packaging/macos/build-dmg.sh + packaging/macos/build-dmg.sh \ + "${{ needs.version.outputs.version }}" \ + publish \ + src/Feuerwehr.App/Assets/icon-1024.png \ + dist + - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 + with: + name: dmg + path: dist/*.dmg + if-no-files-found: error + + release: + needs: [version, windows, linux, macos] + runs-on: ubuntu-latest + # Only publish a real release on a merge to main. A manual dispatch still builds all three + # installers (downloadable from the run's artifacts) but creates no release or tag. + if: github.event_name == 'push' + steps: + - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 + with: + path: dist + - uses: softprops/action-gh-release@3d0d9888cb7fd7b750713d6e236d1fcb99157228 # v3.0.2 + with: + tag_name: v${{ needs.version.outputs.version }} + name: Lagebuch v${{ needs.version.outputs.version }} + prerelease: true + files: dist/**/* + body: | + Automatischer Build von `main`. + + | Plattform | Datei | + |-----------|-------| + | Windows | `lagebuch-${{ needs.version.outputs.version }}-x64.msi` | + | Linux | `lagebuch_${{ needs.version.outputs.version }}_amd64.deb` | + | macOS (Apple Silicon) | `lagebuch-${{ needs.version.outputs.version }}-macos-arm64.dmg` | + + **Die Pakete sind nicht signiert.** Beim ersten Start: + - **macOS**: Rechtsklick auf Lagebuch.app → *Öffnen* (einmalig bestätigen), + oder `xattr -dr com.apple.quarantine /Applications/Lagebuch.app`. + - **Windows**: SmartScreen → *Weitere Informationen* → *Trotzdem ausführen*. + - **Linux**: `sudo dpkg -i lagebuch_*.deb` (oder `sudo apt install ./lagebuch_*.deb`). diff --git a/README.md b/README.md index f186fb1..480170f 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,26 @@ Replaces a legacy macro-enabled Excel template with a robust, offline, cross-pla Under construction. See plans under `docs/` (note: design/plan artifacts are not committed). +## Install + +Every merge to `main` publishes a prerelease under +[Releases](../../releases) with an installer per platform: + +| Platform | File | +|----------|------| +| Windows | `lagebuch--x64.msi` | +| Linux (Debian/Ubuntu) | `lagebuch__amd64.deb` | +| macOS (Apple Silicon) | `lagebuch--macos-arm64.dmg` | + +The packages are **not code-signed**, so the OS warns on first launch: + +- **Windows** — run the `.msi`; if SmartScreen appears, *More info → Run anyway*. +- **macOS** — open the `.dmg`, drag Lagebuch to Applications, then **right-click the app → Open** + once (or `xattr -dr com.apple.quarantine /Applications/Lagebuch.app`). +- **Linux** — `sudo dpkg -i lagebuch_*.deb` (or `sudo apt install ./lagebuch_*.deb`). + +All builds are self-contained; no .NET runtime needs to be installed separately. + ## Build & Test ```bash diff --git a/packaging/linux/build-deb.sh b/packaging/linux/build-deb.sh new file mode 100755 index 0000000..9ef4b5e --- /dev/null +++ b/packaging/linux/build-deb.sh @@ -0,0 +1,66 @@ +#!/usr/bin/env bash +# Build a .deb from a published self-contained Lagebuch. Reproducible on any Linux box with +# dpkg-deb, so the CI leg and a local smoke test run the exact same steps. +# +# build-deb.sh +set -euo pipefail + +VERSION="$1" +PUBLISH_DIR="$2" +ICON_PNG="$3" +OUT_DIR="$4" + +PKG="lagebuch" +ROOT="$(mktemp -d)" +trap 'rm -rf "$ROOT"' EXIT + +# --- filesystem layout ----------------------------------------------------------------------- +# The self-contained payload lives under /usr/lib/lagebuch; /usr/bin/lagebuch is a thin launcher +# so the binary is on PATH under a friendly name regardless of the publish output's filename. +install -d "$ROOT/usr/lib/$PKG" +cp -r "$PUBLISH_DIR"/. "$ROOT/usr/lib/$PKG/" +chmod +x "$ROOT/usr/lib/$PKG/Feuerwehr.App" + +install -d "$ROOT/usr/bin" +cat > "$ROOT/usr/bin/$PKG" <<'LAUNCH' +#!/bin/sh +exec /usr/lib/lagebuch/Feuerwehr.App "$@" +LAUNCH +chmod +x "$ROOT/usr/bin/$PKG" + +install -Dm644 "$ICON_PNG" "$ROOT/usr/share/icons/hicolor/512x512/apps/$PKG.png" + +install -d "$ROOT/usr/share/applications" +cat > "$ROOT/usr/share/applications/$PKG.desktop" < "$ROOT/DEBIAN/control" < +Installed-Size: $SIZE_KB +Description: Lagebuch — Einsatzdokumentation + Digitales Einsatztagebuch und Lagedarstellung für die Feuerwehr. + Self-contained; no .NET runtime required. +CONTROL + +mkdir -p "$OUT_DIR" +DEB="$OUT_DIR/${PKG}_${VERSION}_amd64.deb" +# dpkg-deb's progress line goes to stderr so stdout is only the artifact path. +dpkg-deb --root-owner-group --build "$ROOT" "$DEB" 1>&2 +echo "$DEB" diff --git a/packaging/macos/build-dmg.sh b/packaging/macos/build-dmg.sh new file mode 100644 index 0000000..46d468a --- /dev/null +++ b/packaging/macos/build-dmg.sh @@ -0,0 +1,63 @@ +#!/usr/bin/env bash +# Build an unsigned Lagebuch.app and wrap it in a drag-to-Applications .dmg. macOS-only +# (iconutil / hdiutil / sips / codesign). Runs on the macos-latest CI runner. +# +# build-dmg.sh +set -euo pipefail + +VERSION="$1" +PUBLISH_DIR="$2" +ICON_PNG="$3" +OUT_DIR="$4" + +APP="Lagebuch.app" +STAGE="$(mktemp -d)" +trap 'rm -rf "$STAGE"' EXIT + +APP_DIR="$STAGE/$APP" +install -d "$APP_DIR/Contents/MacOS" "$APP_DIR/Contents/Resources" + +# --- payload --------------------------------------------------------------------------------- +cp -R "$PUBLISH_DIR"/. "$APP_DIR/Contents/MacOS/" +chmod +x "$APP_DIR/Contents/MacOS/Feuerwehr.App" + +# --- icon: 1024 png -> multi-size .icns ------------------------------------------------------ +ICONSET="$STAGE/Lagebuch.iconset" +mkdir -p "$ICONSET" +for s in 16 32 64 128 256 512; do + sips -z $s $s "$ICON_PNG" --out "$ICONSET/icon_${s}x${s}.png" >/dev/null + sips -z $((s*2)) $((s*2)) "$ICON_PNG" --out "$ICONSET/icon_${s}x${s}@2x.png" >/dev/null +done +iconutil -c icns "$ICONSET" -o "$APP_DIR/Contents/Resources/Lagebuch.icns" + +# --- Info.plist ------------------------------------------------------------------------------ +cat > "$APP_DIR/Contents/Info.plist" < + + + + CFBundleName Lagebuch + CFBundleDisplayName Lagebuch + CFBundleIdentifier de.feuerwehr.lagebuch + CFBundleVersion $VERSION + CFBundleShortVersionString$VERSION + CFBundleExecutable Feuerwehr.App + CFBundleIconFile Lagebuch + CFBundlePackageType APPL + LSMinimumSystemVersion 11.0 + NSHighResolutionCapable + + +PLIST + +# --- ad-hoc sign ----------------------------------------------------------------------------- +# No Developer ID, so sign with the ad-hoc identity "-". This is what lets the app launch at all +# once the user allows it in Gatekeeper; without any signature Gatekeeper reports "damaged". +codesign --force --deep --sign - "$APP_DIR" + +# --- .dmg (drag-to-Applications) ------------------------------------------------------------- +ln -s /Applications "$STAGE/Applications" +mkdir -p "$OUT_DIR" +DMG="$OUT_DIR/lagebuch-${VERSION}-macos-arm64.dmg" +hdiutil create -volname "Lagebuch" -srcfolder "$STAGE" -ov -format UDZO "$DMG" 1>&2 +echo "$DMG" diff --git a/packaging/windows/Lagebuch.wxs b/packaging/windows/Lagebuch.wxs new file mode 100644 index 0000000..e462629 --- /dev/null +++ b/packaging/windows/Lagebuch.wxs @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Feuerwehr.App/Assets/icon-1024.png b/src/Feuerwehr.App/Assets/icon-1024.png new file mode 100644 index 0000000000000000000000000000000000000000..8ba99baca1156aaccd0d5df5aa161bdc0c79d18c GIT binary patch literal 69549 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 + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Feuerwehr.App/Feuerwehr.App.csproj b/src/Feuerwehr.App/Feuerwehr.App.csproj index 1615c0e..d79f3fa 100644 --- a/src/Feuerwehr.App/Feuerwehr.App.csproj +++ b/src/Feuerwehr.App/Feuerwehr.App.csproj @@ -6,7 +6,13 @@ enable true app.manifest + Assets\icon.ico true + + Lagebuch + Lagebuch + Feuerwehr + 0.1.0 From 8a2d7ff5d34f64269380d0e3a6d37549ab6158cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20M=C3=BCller?= <1005065+DeepDiver1975@users.noreply.github.com> Date: Wed, 22 Jul 2026 10:56:24 +0200 Subject: [PATCH 2/2] ci(release): trigger on version tags, build macOS on demand MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Private-repo Actions minutes are billed with steep multipliers, and one all-platform run costs ~19 billable minutes: macOS 10 (10x, rounded up from 44s of work), Windows 6 (2x), Linux 2, version 1. On every merge to main that is ~360 min/month for releases alone. Release on an intentional version tag instead. Pushing v0.2.0 builds and publishes the Windows + Linux installers (~9 billable min); the version comes from the tag, which is proper semver rather than 0.1.. macOS carries the 10x multiplier, so it is not built on every tag. Run the workflow manually with a version and the .dmg is built and attached to that release. workflow_dispatch is retained for exactly this. The three trigger paths are independent: a tag push skips the macOS job, a dispatch skips windows/linux/release. Packaging steps are unchanged and were already validated on the real runners. Co-Authored-By: Claude Opus 4.8 Signed-off-by: Thomas Müller <1005065+DeepDiver1975@users.noreply.github.com> --- .github/workflows/release.yml | 103 ++++++++++++++++++++++------------ README.md | 24 +++++--- 2 files changed, 84 insertions(+), 43 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 05003d3..f6bde2e 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,11 +1,18 @@ name: Release -# Every merge to main publishes a prerelease with installers for all three platforms. -# workflow_dispatch runs the same build for testing but creates no release (see the release job's if:). +# Pushing a version tag (v0.2.0) builds and publishes the Windows + Linux installers. Building on a +# private repo bills Actions minutes with steep multipliers (macOS 10x, Windows 2x), so releases are +# deliberate — tag when you mean it — rather than one per merge. macOS carries the 10x multiplier and +# is built only on demand via workflow_dispatch, which attaches the .dmg to the release for that +# version. on: push: - branches: [main] + tags: ['v*'] workflow_dispatch: + inputs: + version: + description: Version to build the macOS .dmg for (e.g. 0.2.0), matching an existing v-tag release. + required: true permissions: contents: write @@ -22,11 +29,21 @@ jobs: outputs: version: ${{ steps.v.outputs.version }} steps: + # tag push -> strip the leading 'v' from the tag; dispatch -> the supplied input. - id: v - run: echo "version=0.1.${{ github.run_number }}" >> "$GITHUB_OUTPUT" + env: + REF_NAME: ${{ github.ref_name }} + INPUT_VERSION: ${{ inputs.version }} + run: | + if [ "${{ github.event_name }}" = "push" ]; then + echo "version=${REF_NAME#v}" >> "$GITHUB_OUTPUT" + else + echo "version=${INPUT_VERSION}" >> "$GITHUB_OUTPUT" + fi windows: needs: version + if: github.event_name == 'push' runs-on: windows-latest steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 @@ -58,6 +75,7 @@ jobs: linux: needs: version + if: github.event_name == 'push' runs-on: ubuntu-latest steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 @@ -82,8 +100,43 @@ jobs: path: dist/*.deb if-no-files-found: error + release: + needs: [version, windows, linux] + runs-on: ubuntu-latest + # Publish the Windows + Linux installers to the release for the pushed tag. + if: github.event_name == 'push' + steps: + - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 + with: + path: dist + - uses: softprops/action-gh-release@3d0d9888cb7fd7b750713d6e236d1fcb99157228 # v3.0.2 + with: + tag_name: v${{ needs.version.outputs.version }} + name: Lagebuch v${{ needs.version.outputs.version }} + prerelease: true + files: dist/**/* + body: | + Getaggter Release-Build. + + | Plattform | Datei | + |-----------|-------| + | Windows | `lagebuch-${{ needs.version.outputs.version }}-x64.msi` | + | Linux | `lagebuch_${{ needs.version.outputs.version }}_amd64.deb` | + + Ein macOS-Build (Apple Silicon, `.dmg`) wird auf Anfrage bereitgestellt und dann hier + angehängt. + + **Die Pakete sind nicht signiert.** Beim ersten Start: + - **Windows**: SmartScreen → *Weitere Informationen* → *Trotzdem ausführen*. + - **Linux**: `sudo dpkg -i lagebuch_*.deb` (oder `sudo apt install ./lagebuch_*.deb`). + - **macOS**: Rechtsklick auf Lagebuch.app → *Öffnen* (einmalig bestätigen), + oder `xattr -dr com.apple.quarantine /Applications/Lagebuch.app`. + + # macOS carries the 10x minute multiplier, so it is not built on every tag. Run this workflow + # manually (workflow_dispatch) with the version of an existing release to add the .dmg to it. macos: needs: version + if: github.event_name == 'workflow_dispatch' runs-on: macos-latest steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 @@ -102,39 +155,19 @@ jobs: publish \ src/Feuerwehr.App/Assets/icon-1024.png \ dist + # Always downloadable from the run; also attach to the matching release if one exists. - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: dmg path: dist/*.dmg if-no-files-found: error - - release: - needs: [version, windows, linux, macos] - runs-on: ubuntu-latest - # Only publish a real release on a merge to main. A manual dispatch still builds all three - # installers (downloadable from the run's artifacts) but creates no release or tag. - if: github.event_name == 'push' - steps: - - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 - with: - path: dist - - uses: softprops/action-gh-release@3d0d9888cb7fd7b750713d6e236d1fcb99157228 # v3.0.2 - with: - tag_name: v${{ needs.version.outputs.version }} - name: Lagebuch v${{ needs.version.outputs.version }} - prerelease: true - files: dist/**/* - body: | - Automatischer Build von `main`. - - | Plattform | Datei | - |-----------|-------| - | Windows | `lagebuch-${{ needs.version.outputs.version }}-x64.msi` | - | Linux | `lagebuch_${{ needs.version.outputs.version }}_amd64.deb` | - | macOS (Apple Silicon) | `lagebuch-${{ needs.version.outputs.version }}-macos-arm64.dmg` | - - **Die Pakete sind nicht signiert.** Beim ersten Start: - - **macOS**: Rechtsklick auf Lagebuch.app → *Öffnen* (einmalig bestätigen), - oder `xattr -dr com.apple.quarantine /Applications/Lagebuch.app`. - - **Windows**: SmartScreen → *Weitere Informationen* → *Trotzdem ausführen*. - - **Linux**: `sudo dpkg -i lagebuch_*.deb` (oder `sudo apt install ./lagebuch_*.deb`). + - name: Attach .dmg to the release + env: + GH_TOKEN: ${{ github.token }} + VERSION: ${{ needs.version.outputs.version }} + run: | + if gh release view "v${VERSION}" >/dev/null 2>&1; then + gh release upload "v${VERSION}" dist/*.dmg --clobber + else + echo "No release v${VERSION} yet — .dmg is available as a workflow artifact only." + fi diff --git a/README.md b/README.md index 480170f..8618af7 100644 --- a/README.md +++ b/README.md @@ -10,14 +10,22 @@ Under construction. See plans under `docs/` (note: design/plan artifacts are not ## Install -Every merge to `main` publishes a prerelease under -[Releases](../../releases) with an installer per platform: - -| Platform | File | -|----------|------| -| Windows | `lagebuch--x64.msi` | -| Linux (Debian/Ubuntu) | `lagebuch__amd64.deb` | -| macOS (Apple Silicon) | `lagebuch--macos-arm64.dmg` | +Pushing a version tag publishes a release under [Releases](../../releases) with an installer per +platform: + +```bash +git tag v0.2.0 && git push origin v0.2.0 +``` + +| Platform | File | Built | +|----------|------|-------| +| Windows | `lagebuch--x64.msi` | on every tag | +| Linux (Debian/Ubuntu) | `lagebuch__amd64.deb` | on every tag | +| macOS (Apple Silicon) | `lagebuch--macos-arm64.dmg` | on request | + +macOS runners bill Actions minutes at 10× on a private repo, so the `.dmg` is built on demand rather +than on every tag: run the **Release** workflow manually (Actions → Release → *Run workflow*) with +the release version, and the `.dmg` is attached to that release. The packages are **not code-signed**, so the OS warns on first launch: