Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
94e2e6d
test: migrate all remaining e2e suites to per-package workflows
Lyokone Aug 5, 2026
6c9cb33
ci: drive web e2e via web-server device and never trust a bare exit 0
Lyokone Aug 5, 2026
0cb2d74
fix(examples): repair Apple scaffold rot exposed by first-ever CI builds
Lyokone Aug 5, 2026
28e0f4e
fix(examples): three more first-build scaffold failures
Lyokone Aug 5, 2026
4e74ff9
ci: give firestore its own workflow, collapse platform workflows into…
Lyokone Aug 5, 2026
0eee413
test: report per-test results from web e2e runs
Lyokone Aug 5, 2026
3ba5283
ci: capture run_tests exit status correctly in the web retry loop
Lyokone Aug 5, 2026
29eef1e
test: count executed tests via the test lifecycle, not the binding
Lyokone Aug 5, 2026
8695d26
fix(examples): android config parity and toolchain for migrated e2e
Lyokone Aug 5, 2026
c22eaa4
ci: emit databaseURL in generated dummy Firebase options
Lyokone Aug 5, 2026
ca7354d
test(pipeline): move the reporting helper next to the entrypoint
Lyokone Aug 5, 2026
efeebb2
ci: deduplicate the per-package e2e workflows into one reusable workflow
Lyokone Aug 5, 2026
d974f1f
ci: un-nest the core shard entrypoint, raise android e2e job cap
Lyokone Aug 5, 2026
99ac35c
ci: unpin Flutter - stable channel everywhere
Lyokone Aug 5, 2026
99f5c74
fix(examples): dummy API key shape, SPM header includes, crashlytics …
Lyokone Aug 5, 2026
a834791
ci: harden template expansions and fix folded pub dry-run
Lyokone Aug 5, 2026
c8c8847
ci: coerce nightly_test_mode before passing it to the reusable workflow
Lyokone Aug 5, 2026
222cb9d
ci: accept typed FirebaseOptions declarations, opt CocoaPods jobs out…
Lyokone Aug 5, 2026
94f08d1
fix(examples): allow cleartext traffic to the emulator suite on Android
Lyokone Aug 5, 2026
b294e5d
ci: decouple emulators from config source; fix the last five failures
Lyokone Aug 5, 2026
7a9d553
ci: never capture flutter test output on iOS; pods for pipeline; perf…
Lyokone Aug 5, 2026
ede3996
ci: retry SPM resolution race once; regenerate performance iOS scaffold
Lyokone Aug 5, 2026
0663fce
ci: parse the test tally numerically; bound and retry the startup hang
Lyokone Aug 5, 2026
7af818f
ci: retry Apple launch race; plugin_tools-driven analysis; SceneDeleg…
Lyokone Aug 5, 2026
c00a043
fix(messaging): standard PRODUCT_NAME so flutter test can attach
Lyokone Aug 5, 2026
9276b2e
fix(examples): tolerate native [DEFAULT] configuration; complete the …
Lyokone Aug 5, 2026
d6984f4
fix(examples): catch duplicate-app instead of checking apps.isEmpty; …
Lyokone Aug 5, 2026
10e4057
ci: split the e2e reusable per platform - unsupported platforms rende…
Lyokone Aug 5, 2026
b0a0aab
fix(examples): restore the mangled duplicate-app guard; de-SPM perfor…
Lyokone Aug 5, 2026
22f3220
fix(ci): real plists for secret-injected Apple jobs; bound and retry …
Lyokone Aug 5, 2026
f534b4f
fix(ci): drop restricted macOS entitlements; fit the launch-hang retr…
Lyokone Aug 5, 2026
a9b21e6
fix(ci): pipeline iOS back on SPM; skip the two keychain-bound auth t…
Lyokone Aug 5, 2026
07666c1
fix(ci): repeat the group skip on the per-test skips; strip messaging…
Lyokone Aug 5, 2026
9437f90
fix(ci): give the pipeline iOS test step the launch-hang wrapper; log…
Lyokone Aug 5, 2026
b77d675
fix(ci): commit pipeline's SPM integration; three bounded iOS attempt…
Lyokone Aug 6, 2026
6cb8711
fix(ci): retry the Android pre-build once on Gradle artifact-download…
Lyokone Aug 6, 2026
93f6dbb
fix(ci): retry the Windows drive once when the app crashes mid-suite
Lyokone Aug 6, 2026
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
147 changes: 92 additions & 55 deletions .github/workflows/all_plugins.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,24 @@ permissions:
contents: read

jobs:
# Home for every check that needs nothing but a bootstrapped workspace. The
# pub dry run, the example `pub get` and the license-header check used to be
# three separate jobs; each ran for a couple of minutes and paid a full
# checkout + setup + bootstrap to get there, so they are steps here instead.
# Analysis runs first - it is the signal people wait on - and the cheap
# checks follow with `if: always()`, so one failing check still reports the
# others, exactly as separate jobs did.
analyze:
timeout-minutes: 50
# Covers the folded checks as well as analysis itself.
timeout-minutes: 70
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10
with:
# flutter_plugin_tools resolves a git base ref even when analyzing
# everything; a shallow clone has neither history nor origin/main
# ('fatal: Not a valid object name main'). Same as the format job.
fetch-depth: 0
- uses: ./.github/actions/setup-flutterfire
with:
node: 'false'
Expand All @@ -38,47 +51,55 @@ jobs:
dart run scripts/generate_versions_spm.dart
git diff --exit-code -- ':(glob)packages/**/Package.swift'
- name: 'Run Analyze'
# flutter_plugin_tools is the flutter/packages-standard analyzer driver
# (already used by the format job). The custom-analysis config lists
# every package: FlutterFire manages analysis options centrally, which
# the tool otherwise treats as unexpected. publish-check was evaluated
# too but does not fit this repo's release model (it errors on
# already-published versions and requires AUTHORS files), so the pub
# dry-run below stays on melos.
run: |
dart ./.github/workflows/scripts/generate-dummy-firebase-configs.dart
melos analyze-ci
dart pub global activate flutter_plugin_tools 0.14.2
dart pub global run flutter_plugin_tools analyze \
--base-branch=origin/main \
--custom-analysis=.github/workflows/config/custom_analysis.yaml
(cd tests && dart analyze .)
- name: 'Validate Workspace'
if: always()
run: melos run validate:workspace

# Separated from "analyse" action as pubspec_override file is not being taken into account when running `flutter pub publish --dry-run`
# This will fail on CI until this is fixed: https://github.com/invertase/melos/issues/467
# You need to switch to Flutter 3.3.0, and run this test manually to check it works and update PR to confirm its success
pub_dry_run:
timeout-minutes: 30
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10
- uses: ./.github/actions/setup-flutterfire
with:
node: 'false'
java: 'false'
# This job needs the whole workspace bootstrapped, which melos-action does itself.
melos-run-bootstrap: 'true'
- name: 'Pub Check'
# Note `pubspec_overrides.yaml` is not taken into account by
# `pub publish --dry-run`, which is why this used to live in its own job -
# the setup is identical either way, so the split bought nothing.
# This will fail on CI until this is fixed: https://github.com/invertase/melos/issues/467
# You need to switch to Flutter 3.3.0, and run this test manually to check it works and update PR to confirm its success
- name: 'Pub Check (publish dry run)'
if: always()
# `melos bootstrap` (run for the analysis above) syncs versions into the
# Package.swift / Constants.swift files, and `pub publish --dry-run`
# refuses a dirty tree ("checked-in files are modified in git") - the
# standalone job this was folded from started with a fresh checkout.
# Restore the committed state before validating.
run: |
git checkout -- packages/
melos exec -c 1 --no-private --ignore="*example*" -- \
dart pub publish --dry-run

pub_get_check:
timeout-minutes: 30
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10
- uses: ./.github/actions/setup-flutterfire
with:
node: 'false'
java: 'false'
# This job needs the whole workspace bootstrapped, which melos-action does itself.
melos-run-bootstrap: 'true'
- name: 'Flutter Pub Get'
- name: 'Flutter Pub Get (examples)'
if: always()
run: |
melos exec -c 1 --scope="*example*" -- \
"flutter pub get"
# Go is used by addlicense command (addlicense is used in melos run
# check-license-header)
- uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16
if: always()
with:
go-version: '^1.13.1'
- name: 'Check license headers'
if: always()
run: |
go install github.com/google/addlicense@latest
melos run check-license-header

format:
# switch back to ubuntu-latest when swiftformat is working again
Expand Down Expand Up @@ -140,17 +161,21 @@ jobs:
with:
node: 'false'
java: 'false'
flutter-version: '3.41.9'
# This job needs the whole workspace bootstrapped, which melos-action does itself.
melos-run-bootstrap: 'true'
- name: 'Build Examples'
run: |
dart ./.github/workflows/scripts/generate-dummy-firebase-configs.dart
melos exec -c 1 --scope="*example*" --dir-exists="web" -- \
"flutter build web"
swift-integration:
# iOS and macOS used to be built back to back in one `swift-integration` job,
# which meant a macOS-only break waited out the whole iOS build first. They
# are independent builds of the same example app, so they run as two jobs.
# `swift-integration.dart` still builds both when no `--platform` is passed,
# which is how it is run locally.
swift-integration-ios:
runs-on: macos-15
timeout-minutes: 45
timeout-minutes: 35
env:
FLUTTER_DEPENDENCIES: "cloud_firestore firebase_remote_config cloud_functions firebase_database firebase_auth firebase_storage firebase_analytics firebase_messaging firebase_app_check firebase_in_app_messaging firebase_performance firebase_crashlytics firebase_ml_model_downloader firebase_app_installations firebase_ai"
PR_HEAD_REPO: ${{ github.event.pull_request.head.repo.full_name }}
Expand All @@ -163,7 +188,6 @@ jobs:
with:
node: 'false'
java: 'false'
flutter-version: '3.41.9'
# This job needs the whole workspace bootstrapped, which melos-action does itself.
melos-run-bootstrap: 'true'
- name: Setup firebase_core example app to test Swift integration
Expand All @@ -174,43 +198,56 @@ jobs:
cd ../../../..
- name: 'Swift Integration Setup'
run: flutter config --enable-swift-package-manager
- name: 'Build Apps with Swift Package Manager'
- name: 'Build iOS App with Swift Package Manager'
run: |
dart ./.github/workflows/scripts/generate-dummy-firebase-configs.dart
dart ./.github/workflows/scripts/swift-integration.dart $FLUTTER_DEPENDENCIES
dart ./.github/workflows/scripts/swift-integration.dart --platform=ios $FLUTTER_DEPENDENCIES

test:
runs-on: ubuntu-latest
timeout-minutes: 30
swift-integration-macos:
runs-on: macos-15
timeout-minutes: 35
env:
FLUTTER_DEPENDENCIES: "cloud_firestore firebase_remote_config cloud_functions firebase_database firebase_auth firebase_storage firebase_analytics firebase_messaging firebase_app_check firebase_in_app_messaging firebase_performance firebase_crashlytics firebase_ml_model_downloader firebase_app_installations firebase_ai"
PR_HEAD_REPO: ${{ github.event.pull_request.head.repo.full_name }}
steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10
- name: Xcode
# Firebase iOS SDK: minimum Xcode 26.2.
run: sudo xcode-select -s /Applications/Xcode_26.2.app/Contents/Developer
- uses: ./.github/actions/setup-flutterfire
with:
node: 'false'
java: 'false'
# This job needs the whole workspace bootstrapped, which melos-action does itself.
melos-run-bootstrap: 'true'
- name: 'Flutter Test'
run: melos run test --no-select
- name: 'Flutter Test - Web'
run: melos run test:web --no-select
- name: Setup firebase_core example app to test Swift integration
# Run after melos bootstrap so workspace pubspec_overrides resolve unpublished package versions.
run: |
cd packages/firebase_core/firebase_core/example
flutter pub add $FLUTTER_DEPENDENCIES
cd ../../../..
- name: 'Swift Integration Setup'
run: flutter config --enable-swift-package-manager
- name: 'Build macOS App with Swift Package Manager'
# The script drops firebase_messaging from the example app before the
# macOS build; with iOS in its own job that no longer has to happen
# after a successful iOS build in the same checkout.
run: |
dart ./.github/workflows/scripts/generate-dummy-firebase-configs.dart
dart ./.github/workflows/scripts/swift-integration.dart --platform=macos $FLUTTER_DEPENDENCIES

check-files-license-headers:
test:
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10
- uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16
with:
go-version: '^1.13.1'
# Go is used by addlicense command (addlicense is used in melos run
# check-license-header)
- run: go install github.com/google/addlicense@latest
# Running `melos bootstrap` is not needed because we use Melos just for the
# `check-license-header` script, so no `bootstrap-scope` is passed here.
- uses: ./.github/actions/setup-flutterfire
with:
node: 'false'
java: 'false'
- name: Check license header
run: melos run check-license-header
# This job needs the whole workspace bootstrapped, which melos-action does itself.
melos-run-bootstrap: 'true'
- name: 'Flutter Test'
run: melos run test --no-select
- name: 'Flutter Test - Web'
run: melos run test:web --no-select
Loading
Loading