Skip to content

docs(alerts): add Crashlytics onRegressionAlertPublished to README and example #310

docs(alerts): add Crashlytics onRegressionAlertPublished to README and example

docs(alerts): add Crashlytics onRegressionAlertPublished to README and example #310

Workflow file for this run

name: Tests
on:
push:
branches: [main, develop]
pull_request:
branches: [main, develop]
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
jobs:
# Dart package analysis and formatting
lint-analyze:
name: Format & Analyze (${{ matrix.sdk }})
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
sdk: [stable, beta]
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup Dart SDK
uses: dart-lang/setup-dart@v1
with:
sdk: ${{ matrix.sdk }}
- name: Print Dart version
run: dart --version
- name: Install dependencies
run: dart pub get
- name: Verify formatting
run: dart format --output=none --set-exit-if-changed .
if: matrix.sdk == 'stable'
- name: Analyze all packages
run: |
dart analyze --fatal-infos
for dir in example/*/; do
if [ -f "$dir/pubspec.yaml" ]; then
echo "Analyzing $dir..."
dart analyze --fatal-infos "$dir"
fi
done
dart analyze --fatal-infos test/fixtures/dart_reference
# TODO: Re-enable when unit tests are added
# - name: Run unit tests
# run: dart test --exclude-tags=snapshot,integration,e2e
# Builder tests - generate and verify functions.yaml
builder-tests:
name: Builder Tests
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup Dart SDK
uses: dart-lang/setup-dart@v1
with:
sdk: stable
- name: Install dependencies (root)
run: dart pub get
- name: Install dependencies (fixture)
working-directory: test/fixtures/dart_reference
run: dart pub get
- name: Run build_runner
working-directory: test/fixtures/dart_reference
run: dart run build_runner build --delete-conflicting-outputs
- name: Verify functions.yaml was generated
run: |
if [ ! -f "test/fixtures/dart_reference/functions.yaml" ]; then
echo "Error: functions.yaml was not generated"
exit 1
fi
echo "✓ functions.yaml generated successfully"
- name: Display generated manifest
run: |
echo "Generated Dart manifest:"
cat test/fixtures/dart_reference/functions.yaml
- name: Upload generated manifest
uses: actions/upload-artifact@v4
with:
name: dart-manifest
path: test/fixtures/dart_reference/functions.yaml
retention-days: 7
# Snapshot tests - compare Dart manifest with Node.js reference
snapshot-tests:
name: Snapshot Tests
runs-on: ubuntu-latest
needs: builder-tests
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup Dart SDK
uses: dart-lang/setup-dart@v1
with:
sdk: stable
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
cache-dependency-path: test/fixtures/nodejs_reference/package-lock.json
- name: Install Dart dependencies
run: dart pub get
- name: Download Dart manifest from builder-tests
uses: actions/download-artifact@v4
with:
name: dart-manifest
path: test/fixtures/dart_reference
- name: Install Node.js dependencies (nodejs_reference)
working-directory: test/fixtures/nodejs_reference
run: npm ci
- name: Generate Node.js manifest
working-directory: test/fixtures/nodejs_reference
run: |
echo "Starting firebase-functions server..."
GCLOUD_PROJECT="test-project" \
PORT="8080" \
FUNCTIONS_CONTROL_API="true" \
npx firebase-functions > /tmp/ff.log 2>&1 &
FF_PID=$!
echo "Server PID: $FF_PID"
# Wait for server to be ready
echo "Waiting for server to start..."
for i in {1..30}; do
if curl -s http://localhost:8080/__/functions.yaml > /dev/null 2>&1; then
echo "✓ Server is ready"
break
fi
if [ $i -eq 30 ]; then
echo "Error: Server failed to start"
cat /tmp/ff.log
exit 1
fi
sleep 1
done
# Fetch manifest
echo "Fetching manifest..."
curl -s http://localhost:8080/__/functions.yaml | python3 -m json.tool > nodejs_manifest.json
# Stop server
kill $FF_PID 2>/dev/null || true
echo "Node.js manifest generated:"
cat nodejs_manifest.json
- name: Display all manifests
run: |
echo "========== DART MANIFEST =========="
cat test/fixtures/dart_reference/functions.yaml
echo ""
echo "========== NODE.JS MANIFEST =========="
cat test/fixtures/nodejs_reference/nodejs_manifest.json
- name: Run snapshot comparison tests
run: dart test test/snapshots/manifest_snapshot_test.dart --reporter=expanded
- name: Upload manifests on failure
if: failure()
uses: actions/upload-artifact@v4
with:
name: manifests-comparison
path: |
test/fixtures/dart_reference/functions.yaml
test/fixtures/nodejs_reference/nodejs_manifest.json
retention-days: 30
# E2E tests with Firebase Emulator
e2e-tests:
name: E2E Tests (Emulator)
runs-on: ubuntu-latest
needs: builder-tests
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Checkout custom firebase-tools
uses: actions/checkout@v4
with:
repository: invertase/firebase-tools
ref: '@invertase/dart'
path: custom-firebase-tools
- name: Setup Dart SDK
uses: dart-lang/setup-dart@v1
with:
sdk: stable
- name: Setup Java 21
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: '21'
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
- name: Link custom firebase-tools
working-directory: custom-firebase-tools
run: npm i && npm link
- name: Verify Firebase CLI
run: firebase --version
- name: Install dependencies (root)
run: dart pub get
- name: Download Dart manifest from builder-tests
uses: actions/download-artifact@v4
with:
name: dart-manifest
path: test/fixtures/dart_reference
- name: Create .env.local for params
run: |
cat > test/fixtures/dart_reference/.env.local << 'EOF'
WELCOME_MESSAGE=Hello from Dart Functions!
MIN_INSTANCES=0
IS_PRODUCTION=false
EOF
echo "✓ Created .env.local with default param values"
- name: Run E2E tests
run: dart test test/e2e/e2e_test.dart --reporter=expanded
timeout-minutes: 5
- name: Upload test logs on failure
if: failure()
uses: actions/upload-artifact@v4
with:
name: e2e-test-logs
path: |
test/fixtures/dart_reference/functions.yaml
test/fixtures/dart_reference/firebase-debug.log
retention-days: 7
# Test result summary
test-summary:
name: Test Summary
runs-on: ubuntu-latest
needs: [lint-analyze, builder-tests, snapshot-tests, e2e-tests]
if: always()
steps:
- name: Check test results
run: |
if [ "${{ needs.lint-analyze.result }}" != "success" ]; then
echo "❌ Format & Analyze failed"
exit 1
fi
if [ "${{ needs.builder-tests.result }}" != "success" ]; then
echo "❌ Builder tests failed"
exit 1
fi
if [ "${{ needs.snapshot-tests.result }}" != "success" ]; then
echo "❌ Snapshot tests failed"
exit 1
fi
if [ "${{ needs.e2e-tests.result }}" != "success" ]; then
echo "❌ E2E tests failed"
exit 1
fi
echo "✅ All tests passed!"