Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
version: 2
updates:
# Keep GitHub Actions pinned versions current.
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
groups:
actions:
patterns:
- "*"

# Keep Dart/Flutter dependencies current.
- package-ecosystem: "pub"
directory: "/"
schedule:
interval: "weekly"
open-pull-requests-limit: 10
142 changes: 142 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,142 @@
name: CI

# Build-and-test only. Producing distributable (signed/packaged) artifacts is
# the job of release.yml, which runs on version tags.

on:
push:
branches:
- main
pull_request:
workflow_dispatch:

permissions:
contents: read

concurrency:
group: ci-${{ github.ref }}
cancel-in-progress: true

env:
FLUTTER_VERSION: "3.44.2"

jobs:
# Platform-independent checks run once here, not repeated per platform.
checks:
name: Format, analyze, test
runs-on: ubuntu-latest
timeout-minutes: 20
steps:
- name: Checkout repository
uses: actions/checkout@v6.0.3

- name: Set up Flutter
uses: subosito/flutter-action@v2.23.0
with:
channel: stable
flutter-version: ${{ env.FLUTTER_VERSION }}
cache: true
pub-cache: true

- name: Show Flutter version
run: flutter --version

- name: Install dependencies
run: flutter pub get

- name: Check formatting
run: dart format --output=none --set-exit-if-changed lib test

- name: Analyze
run: flutter analyze

- name: Run tests
run: flutter test

# Per-platform builds only verify that the native app compiles. They run only
# after `checks` passes, so a formatting/analyze/test failure never spins up
# the (slower, pricier) build runners.
macos:
name: Build macOS
needs: checks
runs-on: macos-latest
timeout-minutes: 45
steps:
- name: Checkout repository
uses: actions/checkout@v6.0.3

- name: Set up Flutter
uses: subosito/flutter-action@v2.23.0
with:
channel: stable
flutter-version: ${{ env.FLUTTER_VERSION }}
cache: true
pub-cache: true

- name: Install dependencies
run: flutter pub get

- name: Build macOS app
run: flutter build macos --release

linux:
name: Build Linux
needs: checks
runs-on: ubuntu-latest
timeout-minutes: 45
steps:
- name: Checkout repository
uses: actions/checkout@v6.0.3

- name: Install Linux build dependencies
run: |
sudo apt-get update
sudo apt-get install -y \
clang cmake ninja-build pkg-config \
libgtk-3-dev liblzma-dev libstdc++-12-dev \
libayatana-appindicator3-dev

- name: Set up Flutter
uses: subosito/flutter-action@v2.23.0
with:
channel: stable
flutter-version: ${{ env.FLUTTER_VERSION }}
cache: true
pub-cache: true

- name: Install dependencies
run: flutter pub get

- name: Build Linux bundle
run: flutter build linux --release

ios:
name: Build iOS
needs: checks
runs-on: macos-latest
timeout-minutes: 45
steps:
- name: Checkout repository
uses: actions/checkout@v6.0.3

- name: Set up Flutter
uses: subosito/flutter-action@v2.23.0
with:
channel: stable
flutter-version: ${{ env.FLUTTER_VERSION }}
cache: true
pub-cache: true

- name: Install dependencies
run: flutter pub get

# device_info_plus needs a recent iOS SDK; the runner's default Xcode can
# be older, so select the newest installed.
- name: Select latest Xcode
run: |
sudo xcode-select -s "$(ls -d /Applications/Xcode_*.app | sort -V | tail -1)/Contents/Developer"
xcodebuild -version

# No codesigning on CI; just verify the iOS app + pure-SPM setup compile.
- name: Build iOS app (no codesign)
run: flutter build ios --release --no-codesign
Loading