Skip to content

fix: resolve 8 bugs + bump version to 1.2.2 #60

fix: resolve 8 bugs + bump version to 1.2.2

fix: resolve 8 bugs + bump version to 1.2.2 #60

Workflow file for this run

name: Pre-flight Checks
# ─────────────────────────────────────────────────────────────────────────────
# Pipeline 1 — Pre-flight (target: < 2 min)
#
# Runs on every push / PR as the fast gate that must pass before any heavy
# job is allowed to start. Three responsibilities:
#
# 1. dart format — code style, fails on any formatting diff
# 2. flutter analyze --fatal-infos — zero errors/warnings/infos enforced
# 3. Changed-path detection — outputs which packages were touched so that
# downstream jobs (test.yml) know what to test
#
# Optimisations vs the old setup:
# • Single runner (ubuntu-22.04), single Flutter version — no duplication
# • Skips ALL checks when only *.md / doc/ / .github/ files changed
# • pub-cache restored from cache before `flutter pub get`
# ─────────────────────────────────────────────────────────────────────────────
env:
FLUTTER_VERSION: "3.41.5"
on:
push:
branches: [main, develop]
pull_request:
branches: [main, develop]
jobs:
preflight:
name: Format · Analyze · Path-filter
runs-on: ubuntu-22.04
outputs:
# Which packages (or groups) have changed — consumed by test.yml
changed_core: ${{ steps.filter.outputs.core }}
changed_html: ${{ steps.filter.outputs.html }}
changed_markdown: ${{ steps.filter.outputs.markdown }}
changed_highlight: ${{ steps.filter.outputs.highlight }}
changed_clipboard: ${{ steps.filter.outputs.clipboard }}
changed_devtools: ${{ steps.filter.outputs.devtools }}
changed_root: ${{ steps.filter.outputs.root }}
changed_any_dart: ${{ steps.filter.outputs.any_dart }}
steps:
- name: Checkout
uses: actions/checkout@v4
# ── Detect changed paths ────────────────────────────────────────────────
- name: Detect changed paths
id: filter
uses: dorny/paths-filter@v3
with:
filters: |
core:
- 'packages/hyper_render_core/**'
html:
- 'packages/hyper_render_html/**'
markdown:
- 'packages/hyper_render_markdown/**'
highlight:
- 'packages/hyper_render_highlight/**'
clipboard:
- 'packages/hyper_render_clipboard/**'
devtools:
- 'packages/hyper_render_devtools/**'
root:
- 'lib/**'
- 'test/**'
- 'pubspec.yaml'
- 'pubspec.lock'
any_dart:
- '**/*.dart'
- '**/pubspec.yaml'
- '**/pubspec.lock'
- '**/analysis_options.yaml'
# ── Skip everything if only docs / CI config changed ───────────────────
- name: Skip if docs-only change
if: steps.filter.outputs.any_dart == 'false'
run: |
echo "✓ Only non-Dart files changed — skipping format & analyze"
echo " (golden.yml and benchmark.yml handle their own triggers)"
# ── Flutter setup (only when Dart files changed) ────────────────────────
- name: Setup Flutter
if: steps.filter.outputs.any_dart == 'true'
uses: subosito/flutter-action@v2
with:
flutter-version: ${{ env.FLUTTER_VERSION }}
channel: stable
cache: true
- name: Restore pub cache
if: steps.filter.outputs.any_dart == 'true'
uses: actions/cache@v4
with:
path: |
~/.pub-cache
${{ env.PUB_CACHE }}
key: pub-ubuntu-${{ hashFiles('**/pubspec.lock') }}
restore-keys: pub-ubuntu-
- name: flutter pub get
if: steps.filter.outputs.any_dart == 'true'
run: flutter pub get
# ── dart format ─────────────────────────────────────────────────────────
- name: dart format (fail on diff)
if: steps.filter.outputs.any_dart == 'true'
run: dart format --set-exit-if-changed .
# ── flutter analyze ─────────────────────────────────────────────────────
- name: flutter analyze --fatal-infos
if: steps.filter.outputs.any_dart == 'true'
run: |
flutter analyze --no-pub --fatal-infos 2>&1 | tee analyze_report.txt
EXIT=${PIPESTATUS[0]}
ERRORS=$(grep -c "error •" analyze_report.txt 2>/dev/null || true)
WARNS=$(grep -c "warning •" analyze_report.txt 2>/dev/null || true)
INFOS=$(grep -c "info •" analyze_report.txt 2>/dev/null || true)
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo " Static Analysis Results"
echo " Errors: $ERRORS"
echo " Warnings: $WARNS"
echo " Infos: $INFOS"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
exit $EXIT
- name: Upload analyze report
if: always() && steps.filter.outputs.any_dart == 'true'
uses: actions/upload-artifact@v4
with:
name: analyze-report-${{ github.run_number }}
path: analyze_report.txt
retention-days: 7