# cspell:words dorny codecov name: ci on: pull_request: push: branches: - main jobs: semantic_pull_request: name: ✅ Semantic Pull Request uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/semantic_pull_request.yml@v1 cspell: name: 🔤 Check Spelling uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/spell_check.yml@v1 with: config: cspell.config.yaml changes: runs-on: ubuntu-latest permissions: pull-requests: read outputs: needs_flutter_build: ${{ steps.needs_flutter_build.outputs.changes }} needs_rust_build: ${{ steps.needs_rust_build.outputs.changes }} name: 👀 Detect Changes steps: - name: 📚 Git Checkout uses: actions/checkout@v6 - uses: dorny/paths-filter@v4 name: Build Detection id: needs_flutter_build with: filters: | shorebird_code_push: - ./.github/workflows/main.yaml - ./.github/actions/flutter_package/action.yaml - shorebird_code_push/** # Integration tests under shorebird_code_push/test/integration # build and load the library_test_hooks cdylib, which # re-exports the production updater C API. A change to # either crate can break the suite, so trigger the # flutter package job on those paths too. - library/** - library_test_hooks/** - uses: dorny/paths-filter@v4 name: Build Detection id: needs_rust_build with: filters: | library: - ./.github/actions/rust_crate/action.yaml - library/** patch: - ./.github/actions/rust_crate/action.yaml - patch/** library_test_hooks: - ./.github/actions/rust_crate/action.yaml - library/** - library_test_hooks/** build_rust_crates: needs: changes if: ${{ needs.changes.outputs.needs_rust_build != '[]' }} strategy: matrix: crate: ${{ fromJSON(needs.changes.outputs.needs_rust_build) }} os: [macos-latest, nscloud-windows-2022-amd64-8x16, ubuntu-latest] runs-on: ${{ matrix.os }} name: 🦀 Build ${{ matrix.crate }} (${{ matrix.os }}) steps: - name: 📚 Git Checkout uses: actions/checkout@v6 - name: 🦀 Build ${{ matrix.crate }} uses: ./.github/actions/rust_crate with: codecov_token: ${{ secrets.CODECOV_TOKEN }} working_directory: ${{ matrix.crate }} build_flutter_packages: needs: changes if: ${{ needs.changes.outputs.needs_flutter_build != '[]' }} strategy: matrix: package: ${{ fromJSON(needs.changes.outputs.needs_flutter_build) }} runs-on: ubuntu-latest name: 🎯 Build ${{ matrix.package }} steps: - name: 📚 Git Checkout uses: actions/checkout@v6 with: submodules: recursive - name: 🐦 Build ${{ matrix.package }} uses: ./.github/actions/flutter_package with: codecov_token: ${{ secrets.CODECOV_TOKEN }} coverage_excludes: "**/*.g.dart" working_directory: ${{ matrix.package }} ci: needs: [semantic_pull_request, build_flutter_packages, build_rust_crates] if: ${{ always() }} runs-on: ubuntu-latest steps: - name: ⛔️ exit(1) on failure if: ${{ contains(join(needs.*.result, ','), 'failure') }} run: exit 1