feat(desktop): ship-readiness metadata & CI scaffolding

- Set Windows upgradeUuid for stable MSI upgrades
- Wire macOS signing/notarization behind SIGN_MACOS env flag
- Fix VERSION_CODE passthrough to release-desktop CI job
- Rename packageName to "Meshtastic Desktop"
- Fix truncated macOS JVM property (apple.menu.about.name)
- Add macOS appCategory, entitlements (network, USB)
- Add Windows shortcut/menu/dirChooser options
- Add Linux debMaintainer, appCategory, rpmLicenseType
- Add desktop build attestation step in release workflow
- Add Discord notification job for desktop releases
- Add desktop category to release notes config
- Update RELEASE_PROCESS.md with full desktop release docs
- Add desktop download section to README.md
- Update roadmap with packaging status and Flatpak reference

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
James Rich 2026-04-14 15:11:48 -05:00
parent 099aea2d81
commit 6fb8d2c315
7 changed files with 166 additions and 24 deletions

View file

@ -53,6 +53,16 @@ on:
required: false
INTERNAL_BUILDS_HOST_PAT:
required: false
DISCORD_WEBHOOK_DESKTOP:
required: false
APPLE_SIGNING_IDENTITY:
required: false
APPLE_ID:
required: false
APPLE_APP_SPECIFIC_PASSWORD:
required: false
APPLE_TEAM_ID:
required: false
concurrency:
group: ${{ github.workflow }}-${{ inputs.tag_name }}
@ -284,7 +294,13 @@ jobs:
- name: Package Native Distributions
env:
ORG_GRADLE_PROJECT_appVersionName: ${{ needs.prepare-build-info.outputs.APP_VERSION_NAME }}
VERSION_CODE: ${{ needs.prepare-build-info.outputs.APP_VERSION_CODE }}
APPIMAGE_EXTRACT_AND_RUN: 1
SIGN_MACOS: ${{ runner.os == 'macOS' && 'true' || 'false' }}
APPLE_SIGNING_IDENTITY: ${{ secrets.APPLE_SIGNING_IDENTITY }}
APPLE_ID: ${{ secrets.APPLE_ID }}
APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.APPLE_APP_SPECIFIC_PASSWORD }}
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
run: ./gradlew :desktop:packageReleaseDistributionForCurrentOS -PaboutLibraries.release=true --no-daemon
- name: List Desktop Binaries
@ -306,10 +322,61 @@ jobs:
retention-days: 1
if-no-files-found: ignore
- name: Attest Desktop artifact provenance
if: success()
uses: actions/attest-build-provenance@v4
with:
subject-path: |
desktop/build/compose/binaries/main-release/*/*.dmg
desktop/build/compose/binaries/main-release/*/*.msi
desktop/build/compose/binaries/main-release/*/*.exe
desktop/build/compose/binaries/main-release/*/*.deb
desktop/build/compose/binaries/main-release/*/*.rpm
desktop/build/compose/binaries/main-release/*/*.AppImage
notify-desktop-release:
if: ${{ inputs.build_desktop && !cancelled() && !failure() }}
runs-on: ubuntu-24.04-arm
needs: [prepare-build-info, release-desktop]
env:
DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK_DESKTOP }}
VERSION: ${{ inputs.tag_name }}
steps:
- name: Notify Discord
run: |
if [[ -z "$DISCORD_WEBHOOK" ]]; then
echo "No DISCORD_WEBHOOK_DESKTOP secret provided. Skipping notification."
exit 0
fi
PAYLOAD=$(cat <<EOF
{
"content": null,
"embeds": [
{
"title": "🖥️ New Desktop Release: $VERSION",
"description": "Desktop installers (macOS DMG, Windows MSI/EXE, Linux DEB/RPM/AppImage) are available.",
"color": 3447003,
"fields": [
{
"name": "Version",
"value": "$VERSION",
"inline": true
}
],
"url": "https://github.com/meshtastic/Meshtastic-Android/releases/tag/$VERSION"
}
]
}
EOF
)
curl -H "Content-Type: application/json" -d "$PAYLOAD" "$DISCORD_WEBHOOK"
github-release:
if: ${{ !cancelled() && !failure() }}
runs-on: ubuntu-24.04-arm
needs: [prepare-build-info, release-google, release-fdroid, release-desktop]
needs: [prepare-build-info, release-google, release-fdroid, release-desktop, notify-desktop-release]
env:
INTERNAL_BUILDS_HOST: ${{ secrets.INTERNAL_BUILDS_HOST }}
permissions: