name: CI on: pull_request: push: branches: - main concurrency: group: ci-${{ github.ref }} cancel-in-progress: true jobs: changes: name: Detect changed paths runs-on: ubuntu-latest permissions: pull-requests: read outputs: dart: ${{ steps.filter.outputs.dart }} go: ${{ steps.filter.outputs.go }} steps: - name: Checkout repository uses: actions/checkout@v6 - name: Filter paths uses: dorny/paths-filter@v3 id: filter with: filters: | dart: - 'lib/**' - 'test/**' - 'assets/**' - 'pubspec.yaml' - 'pubspec.lock' - 'analysis_options.yaml' - 'l10n.yaml' - '.github/workflows/ci.yml' go: - 'go_backend/**' - '.github/workflows/ci.yml' flutter: name: Flutter analyze & test runs-on: ubuntu-latest needs: changes if: needs.changes.outputs.dart == 'true' steps: - name: Checkout repository uses: actions/checkout@v6 - name: Setup Flutter uses: subosito/flutter-action@v2 with: channel: "stable" cache: true - name: Cache pub dependencies uses: actions/cache@v5 with: path: ~/.pub-cache key: pub-${{ runner.os }}-${{ hashFiles('pubspec.lock') }} restore-keys: pub-${{ runner.os }}- - name: Get Flutter dependencies run: flutter pub get - name: Analyze run: flutter analyze - name: Run tests run: flutter test go: name: Go vet & test runs-on: ubuntu-latest needs: changes if: needs.changes.outputs.go == 'true' defaults: run: working-directory: go_backend steps: - name: Checkout repository uses: actions/checkout@v6 - name: Setup Go uses: actions/setup-go@v6 with: # Keep in sync with release.yml go-version: "1.25.9" cache-dependency-path: go_backend/go.sum - name: Check formatting run: test -z "$(gofmt -l .)" - name: Vet run: go vet ./... - name: Run tests run: go test ./...