Skip to content

feat: replace WPF with Electron/Capacitor for cross-platform builds #14

feat: replace WPF with Electron/Capacitor for cross-platform builds

feat: replace WPF with Electron/Capacitor for cross-platform builds #14

Workflow file for this run

name: Build and Release
on:
push:
tags:
- 'v*'
permissions:
contents: write
jobs:
build-web:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Build project
run: npm run build
- name: Zip build output
run: cd dist && zip -r ../navcalc-web.zip . && cd ..
- name: Upload web artifact
uses: actions/upload-artifact@v4
with:
name: web-build
path: navcalc-web.zip
build-windows:
runs-on: windows-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Build Electron app
run: npm run electron:build
- name: Upload Windows artifact
uses: actions/upload-artifact@v4
with:
name: windows-build
path: release/*.exe
build-mac:
runs-on: macos-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Build Electron app
run: npm run electron:build:mac
- name: Upload Mac artifact
uses: actions/upload-artifact@v4
with:
name: mac-build
path: release/*.dmg
build-android:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
- name: Setup Java
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: '17'
- name: Setup Android SDK
uses: android-actions/setup-android@v3
- name: Install dependencies
run: npm ci
- name: Build and sync
run: npm run build && npx cap sync android
- name: Build APK
working-directory: android
run: ./gradlew assembleRelease
- name: Upload Android artifact
uses: actions/upload-artifact@v4
with:
name: android-build
path: android/app/build/outputs/apk/release/*.apk
build-ios:
runs-on: macos-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Build and sync
run: npm run build && npx cap sync ios
- name: Build unsigned IPA
working-directory: ios/App
run: |
xcodebuild -workspace App.xcworkspace -scheme App -configuration Release -sdk iphoneos -archivePath build/NavCalc.xcarchive archive CODE_SIGNING_ALLOWED=NO
mkdir -p build/Payload
cp -r build/NavCalc.xcarchive/Products/Applications/App.app build/Payload/
cd build && zip -r NavCalc.ipa Payload
- name: Upload iOS artifact
uses: actions/upload-artifact@v4
with:
name: ios-build
path: ios/App/build/NavCalc.ipa
release:
needs: [build-web, build-windows, build-mac, build-android, build-ios]
runs-on: ubuntu-latest
steps:
- name: Download all artifacts
uses: actions/download-artifact@v4
with:
path: artifacts
- name: Create Release
uses: softprops/action-gh-release@v2
with:
files: |
artifacts/web-build/navcalc-web.zip
artifacts/windows-build/*.exe
artifacts/mac-build/*.dmg
artifacts/android-build/*.apk
artifacts/ios-build/*.ipa
generate_release_notes: true