name: CI - Sanity Checks on: push: branches: - main pull_request: branches: - main workflow_dispatch: jobs: analyze: name: Code Analysis runs-on: ubuntu-latest permissions: contents: read steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup Flutter uses: subosito/flutter-action@v2 with: channel: "stable" cache: true - name: Cache Pub dependencies uses: actions/cache@v4 with: path: | ~/.pub-cache key: ${{ runner.os }}-pub-${{ hashFiles('**/pubspec.lock') }} restore-keys: | ${{ runner.os }}-pub- - name: Install dependencies run: flutter pub get - name: Verify formatting run: | # Find all Dart files excluding generated files FILES=$(find lib test -name "*.dart" ! -name "*.g.dart" ! -name "*.freezed.dart" -type f 2>/dev/null || true) if [ -z "$FILES" ]; then echo "No Dart files found to format" exit 0 fi echo "$FILES" | xargs dart format --output=none --set-exit-if-changed - name: Analyze code run: flutter analyze test: name: Unit Tests runs-on: ubuntu-latest permissions: contents: read steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup Flutter uses: subosito/flutter-action@v2 with: channel: "stable" cache: true - name: Cache Pub dependencies uses: actions/cache@v4 with: path: | ~/.pub-cache key: ${{ runner.os }}-pub-${{ hashFiles('**/pubspec.lock') }} restore-keys: | ${{ runner.os }}-pub- - name: Install dependencies run: flutter pub get - name: Run tests run: | if [ -d "test" ] && [ "$(find test -name '*_test.dart' | wc -l)" -gt 0 ]; then flutter test else echo "No tests found, skipping test execution" fi dependency-check: name: Dependency Validation runs-on: ubuntu-latest permissions: contents: read steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup Flutter uses: subosito/flutter-action@v2 with: channel: "stable" cache: true - name: Cache Pub dependencies uses: actions/cache@v4 with: path: | ~/.pub-cache key: ${{ runner.os }}-pub-${{ hashFiles('**/pubspec.lock') }} restore-keys: | ${{ runner.os }}-pub- - name: Verify dependencies run: | flutter pub get flutter pub outdated