CI/Build Rework #19
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Dashboard | |
# Builds a Windows App Installer (.msix) for the Dashboard | |
# | |
# To use this action, add your Windows Certificate file, in base64 format, to a | |
# repository secret called WINDOWS_CERTIFICATE. This action then: | |
# - Installs Flutter and clones your repository | |
# - Decodes your text certificate into a binary .pfx file | |
# - Runs flutter pub run msix:create to build and sign your Flutter app | |
# - Creates a new release and uploads the generated .msix file to it | |
on: | |
push: | |
branches: ["main"] | |
pull_request: | |
branches: ["main"] | |
workflow_dispatch: | |
inputs: | |
publish-release: | |
type: boolean | |
description: Publish Draft Release | |
default: false | |
required: false | |
env: | |
FLUTTER_VERSION: 3.29.3 | |
jobs: | |
analyze: | |
runs-on: ubuntu-22.04 | |
steps: | |
- name: Clone repo | |
uses: actions/checkout@v4 | |
- name: Install Flutter | |
uses: subosito/flutter-action@v2 | |
with: | |
flutter-version: ${{ env.FLUTTER_VERSION }} | |
cache: true | |
cache-path: ${{ runner.tool_cache }}/flutter/linux | |
- name: Analyze | |
run: flutter analyze --dartdocs | |
# build-android: | |
# name: Build Android APK | |
# runs-on: ubuntu-latest | |
# steps: | |
# - name: Clone repository | |
# uses: actions/checkout@v4 | |
# - name: Setup Java | |
# uses: actions/setup-java@v4 | |
# with: | |
# distribution: "zulu" | |
# java-version: '17' | |
# - name: Install Flutter | |
# uses: subosito/flutter-action@v2 | |
# with: | |
# cache: true | |
# cache-key: "flutter-ubuntu" # we don't need *the* most recent build | |
# - name: Build APK | |
# run: flutter build apk | |
# - name: Upload APK | |
# uses: actions/upload-artifact@v4 | |
# with: | |
# name: dashboard_android | |
# path: build/app/outputs/apk/release/app-release.apk | |
build-windows: | |
name: Build Windows | |
runs-on: windows-2025 | |
steps: | |
- name: Clone repository | |
uses: actions/checkout@v4 | |
- name: Install Flutter | |
uses: subosito/flutter-action@v2 | |
with: | |
flutter-version: ${{ env.FLUTTER_VERSION }} | |
cache: true | |
cache-path: ${{ runner.tool_cache }}/flutter/windows | |
- name: Install packages | |
run: flutter pub get | |
- name: Flutter Doctor | |
run: flutter doctor -v | |
- name: Generate Icons | |
run: dart run flutter_launcher_icons | |
- name: Build Windows | |
run: flutter build windows | |
- name: Zip windows executable | |
run: tar -acf dashboard_windows_portable.zip -C build/windows/x64/runner/Release/ * | |
- name: Upload windows portable | |
uses: actions/upload-artifact@v4 | |
with: | |
name: dashboard_windows_portable | |
path: dashboard_windows_portable.zip | |
- name: Build windows installer | |
run: | | |
choco install innosetup -y | |
& "C:\Program Files (x86)\Inno Setup 6\ISCC.exe" windows_installer_script.iss | |
- name: Upload windows installer | |
uses: actions/upload-artifact@v4 | |
with: | |
name: dashboard_windows_installer | |
path: build/windows/x64/runner/installer/rover-dashboard-setup.exe | |
if-no-files-found: error | |
build-msix: | |
name: Build Windows MSIX | |
runs-on: windows-2025 | |
env: | |
windows_certificate: ${{ secrets.WINDOWS_CERTIFICATE }} | |
steps: | |
- name: Clone repository | |
uses: actions/checkout@v4 | |
- name: Load certificate | |
run: | | |
echo "${{ env.windows_certificate }}" > windows_certificate_decoded.txt | |
openssl enc -base64 -d -in windows_certificate_decoded.txt -out windows_certificate.pfx | |
- name: Install Flutter | |
uses: subosito/flutter-action@v2 | |
with: | |
flutter-version: ${{ env.FLUTTER_VERSION }} | |
cache: true | |
cache-path: ${{ runner.tool_cache }}/flutter/windows | |
- name: Install packages | |
run: flutter pub get | |
- name: Flutter Doctor | |
run: flutter doctor -v | |
- name: Generate Icons | |
run: dart run flutter_launcher_icons | |
- name: Build MSIX | |
run: | | |
flutter pub get | |
dart run msix:create | |
- name: Upload MSIX | |
uses: actions/upload-artifact@v4 | |
with: | |
name: dashboard_msix | |
path: build/windows/x64/runner/Release/dashboard.msix | |
if-no-files-found: error | |
- name: Upload MSIX | |
uses: actions/upload-artifact@v4 | |
with: | |
name: trust_msix | |
path: windows/trust_windows.bat | |
if-no-files-found: error | |
build-macos: | |
name: Build MacOS | |
runs-on: macos-latest | |
steps: | |
- name: Clone repository | |
uses: actions/checkout@v4 | |
- name: Install Flutter | |
uses: subosito/flutter-action@v2 | |
with: | |
flutter-version: ${{ env.FLUTTER_VERSION }} | |
cache: true | |
cache-path: ${{ runner.tool_cache }}/flutter/macos | |
- name: Install packages | |
run: flutter pub get | |
- name: Flutter Doctor | |
run: flutter doctor -v | |
- name: Install build dependencies | |
run: brew install automake libtool | |
- name: Generate Icons | |
run: dart run flutter_launcher_icons | |
- name: Build MacOS | |
run: flutter build macos | |
- name: Create macOS DMG | |
uses: L-Super/[email protected] | |
with: | |
dmg_name: dashboard_macos | |
src_dir: build/macos/Build/Products/Release/rover_control_dashboard.app | |
- name: Upload DMG | |
uses: actions/upload-artifact@v4 | |
with: | |
name: dashboard_macos | |
path: dashboard_macos.dmg | |
if-no-files-found: error | |
build-linux: | |
name: Build Linux | |
runs-on: ubuntu-22.04 | |
steps: | |
- name: Clone repository | |
uses: actions/checkout@v4 | |
- name: Install Flutter | |
uses: subosito/flutter-action@v2 | |
with: | |
flutter-version: ${{ env.FLUTTER_VERSION }} | |
cache: true | |
cache-path: ${{ runner.tool_cache }}/flutter/linux | |
- name: Install packages | |
run: flutter pub get | |
- name: Flutter Doctor | |
run: flutter doctor -v | |
- name: Install build dependencies | |
run: | | |
sudo apt-get update -y | |
sudo apt-get install -y libglu1-mesa ninja-build libgtk-3-dev liblzma-dev | |
- name: Generate Icons | |
run: dart run flutter_launcher_icons | |
- name: Build Linux | |
run: flutter build linux | |
- name: Zip Linux executable | |
run: tar -czf dashboard_linux.tar.gz -C build/linux/x64/release/bundle/ $(ls -A build/linux/x64/release/bundle/) | |
- name: Upload linux executable | |
uses: actions/upload-artifact@v4 | |
with: | |
name: dashboard_linux | |
path: dashboard_linux.tar.gz | |
if-no-files-found: error | |
create-release: | |
name: Publish Release | |
runs-on: ubuntu-22.04 | |
needs: [build-windows, build-msix, build-macos, build-linux] | |
if: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.publish-release }} | |
steps: | |
- name: Download Windows Portable | |
uses: actions/download-artifact@v4 | |
with: | |
name: dashboard_windows_portable | |
- name: Download Windows Installer | |
uses: actions/download-artifact@v4 | |
with: | |
name: dashboard_windows_installer | |
- name: Download Windows MSIX | |
uses: actions/download-artifact@v4 | |
with: | |
name: dashboard_msix | |
- name: Download Windows trust script | |
uses: actions/download-artifact@v4 | |
with: | |
name: trust_msix | |
- name: Download MacOS release | |
uses: actions/download-artifact@v4 | |
with: | |
name: dashboard_macos | |
- name: Download Linux release | |
uses: actions/download-artifact@v4 | |
with: | |
name: dashboard_linux | |
- name: Organize files | |
run: | | |
ls -al | |
mv dashboard.msix dashboard_msix.msix | |
mv rover-dashboard-setup.exe dashboard_windows_installer.exe | |
- name: Create Release | |
uses: softprops/action-gh-release@v2 | |
with: | |
files: | | |
dashboard_msix.msix | |
dashboard_windows_portable.zip | |
dashboard_windows_installer.exe | |
dashboard_macos.dmg | |
dashboard_linux.tar | |
trust_windows.bat | |
name: Dashboard Draft Release ${{ github.ref_name }} | |
generate_release_notes: true | |
fail_on_unmatched_files: true | |
draft: true |