Skip to content

Nightly builds

Nightly builds #51

name: Nightly builds
on:
schedule:
- cron: "0 2 * * *"
workflow_dispatch:
push:
branches:
- main
pull_request:
branches:
- main
permissions:
contents: read
jobs:
quality:
name: Lint and test
runs-on: ubuntu-latest
steps:
- name: Check out source
uses: actions/checkout@v4
- name: Set up just
uses: extractions/setup-just@v4
with:
just-version: '1.46.0'
- name: Set up Flutter
uses: subosito/flutter-action@v2
with:
flutter-version: 3.44.8
cache: true
- name: Run project quality checks
run: just ci
build-mobile:
name: Build ${{ matrix.target }} release
needs: quality
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
- target: android
os: ubuntu-latest
- target: ios
os: macos-latest
steps:
- name: Check out source
uses: actions/checkout@v4
- name: Set up just
uses: extractions/setup-just@v4
with:
just-version: '1.46.0'
- name: Set up Flutter
uses: subosito/flutter-action@v2
with:
flutter-version: 3.44.8
cache: true
- name: Build Android APK
if: matrix.target == 'android'
run: just build-android-release
- name: Prepare Android artifact
if: matrix.target == 'android'
run: |
mkdir -p dist
cp build/app/outputs/flutter-apk/app-armeabi-v7a-release.apk dist/thulium-android-armeabi-v7a.apk
cp build/app/outputs/flutter-apk/app-arm64-v8a-release.apk dist/thulium-android-arm64-v8a.apk
cp build/app/outputs/flutter-apk/app-x86_64-release.apk dist/thulium-android-x86_64.apk
- name: Build unsigned iOS app
if: matrix.target == 'ios'
run: just build-ios-release
- name: Package iOS artifact
if: matrix.target == 'ios'
run: |
mkdir -p dist
ditto -c -k --sequesterRsrc --keepParent \
build/ios/iphoneos/Runner.app dist/thulium-ios-unsigned.zip
- name: Upload release artifact
uses: actions/upload-artifact@v4
with:
name: thulium-${{ matrix.target }}
path: dist/*
if-no-files-found: error
retention-days: 14
build-desktop:
name: Build ${{ matrix.target }} release
needs: quality
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
- target: linux
os: ubuntu-latest
- target: windows
os: windows-latest
- target: macos
os: macos-latest
steps:
- name: Check out source
uses: actions/checkout@v4
- name: Set up just
uses: extractions/setup-just@v4
with:
just-version: '1.46.0'
- name: Set up Flutter
uses: subosito/flutter-action@v2
with:
flutter-version: 3.44.8
cache: true
- name: Install Linux build dependencies
if: matrix.target == 'linux'
run: |
sudo apt-get update
sudo apt-get install -y clang cmake ninja-build pkg-config libgtk-3-dev libsecret-1-dev
- name: Build Linux release
if: matrix.target == 'linux'
run: just build-linux-release
- name: Package Linux artifact
if: matrix.target == 'linux'
run: |
mkdir -p dist
tar -C build/linux/x64/release -czf dist/thulium-desktop-linux-x64.tar.gz bundle
- name: Build Windows release
if: matrix.target == 'windows'
run: just build-windows-release
- name: Package Windows artifact
if: matrix.target == 'windows'
shell: pwsh
run: |
New-Item -ItemType Directory -Force -Path dist | Out-Null
Compress-Archive -Path build/windows/x64/runner/Release/* -DestinationPath dist/thulium-desktop-windows-x64.zip -Force
- name: Build macOS release
if: matrix.target == 'macos'
run: just build-macos-release
- name: Package macOS artifact
if: matrix.target == 'macos'
run: |
mkdir -p dist
ditto -c -k --sequesterRsrc --keepParent \
build/macos/Build/Products/Release/thulium-desktop.app dist/thulium-desktop-macos.zip
- name: Upload release artifact
uses: actions/upload-artifact@v4
with:
name: thulium-desktop-${{ matrix.target }}
path: dist/*
if-no-files-found: error
retention-days: 14
build-cli:
name: Build Dart CLI (${{ matrix.target }})
needs: quality
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
- target: linux-x64
os: ubuntu-latest
output: thulium-linux-x64
- target: windows-x64
os: windows-latest
output: thulium-windows-x64.exe
- target: macos-arm64
os: macos-latest
output: thulium-macos-arm64
steps:
- name: Check out source
uses: actions/checkout@v4
- name: Set up just
uses: extractions/setup-just@v4
with:
just-version: '1.46.0'
- name: Set up Flutter and Dart
uses: subosito/flutter-action@v2
with:
flutter-version: 3.44.8
cache: true
- name: Prepare CLI output directory
if: runner.os != 'Windows'
working-directory: packages/cli
run: mkdir -p dist
- name: Prepare CLI output directory on Windows
if: runner.os == 'Windows'
working-directory: packages/cli
shell: pwsh
run: New-Item -ItemType Directory -Force -Path dist | Out-Null
- name: Compile CLI executable
run: just build-cli dist/${{ matrix.output }}
- name: Upload CLI artifact
uses: actions/upload-artifact@v4
with:
name: thulium-cli-${{ matrix.target }}
path: packages/cli/dist/${{ matrix.output }}
if-no-files-found: error
retention-days: 14