Skip to content

perf(flow-chat): improve long session readiness #2192

perf(flow-chat): improve long session readiness

perf(flow-chat): improve long session readiness #2192

Workflow file for this run

name: CI
on:
pull_request:
branches: [main]
paths-ignore:
- '**/*.md'
- 'png/**'
push:
branches: [main]
paths-ignore:
- '**/*.md'
- 'png/**'
# Cancel previous runs on same branch/PR
concurrency:
group: ci-${{ github.ref }}
cancel-in-progress: true
permissions:
contents: read
jobs:
# ── Rust: build check ─────────────────────────────────────────────
rust-build-check:
name: Rust Build Check (${{ matrix.os }})
runs-on: ${{ matrix.os }}
needs: frontend-build
strategy:
fail-fast: false
matrix:
os:
- ubuntu-latest
- macos-15
- windows-latest
steps:
- uses: actions/checkout@v4
- name: Setup OpenSSL (Windows, prebuilt)
if: runner.os == 'Windows'
shell: pwsh
run: ./scripts/ci/setup-openssl-windows.ps1
- name: Download frontend build artifacts
uses: actions/download-artifact@v4
with:
name: frontend-dist
path: dist
- name: Create mobile-web dist directory (workaround for Tauri)
shell: bash
run: mkdir -p src/mobile-web/dist
- name: Install Linux system dependencies (Tauri)
if: runner.os == 'Linux'
shell: bash
run: |
sudo apt-get update
if apt-cache show libwebkit2gtk-4.1-dev >/dev/null 2>&1; then
WEBKIT_PKG=libwebkit2gtk-4.1-dev
else
WEBKIT_PKG=libwebkit2gtk-4.0-dev
fi
if apt-cache show libappindicator3-dev >/dev/null 2>&1; then
APPINDICATOR_PKG=libappindicator3-dev
else
APPINDICATOR_PKG=libayatana-appindicator3-dev
fi
sudo apt-get install -y --no-install-recommends \
pkg-config \
libglib2.0-dev \
libgtk-3-dev \
libxdo-dev \
"$WEBKIT_PKG" \
"$APPINDICATOR_PKG" \
librsvg2-dev \
patchelf \
libleptonica-dev \
libtesseract-dev \
tesseract-ocr \
tesseract-ocr-eng
- uses: dtolnay/rust-toolchain@stable
- uses: swatinem/rust-cache@v2
with:
shared-key: "ci-check-v2-${{ runner.os }}-no-cargo-bin-v1"
cache-bin: false
# PR caches are scoped to merge refs; main pushes own shared cache refreshes.
save-if: ${{ github.event_name != 'pull_request' }}
- name: Check compilation
run: cargo check --workspace --exclude bitfun-cli
- name: Run core Rust tests
run: cargo test --locked -p bitfun-core
# ── Frontend: build ────────────────────────────────────────────────
frontend-build:
name: Frontend Build
runs-on: ubuntu-latest
env:
NODE_OPTIONS: --max-old-space-size=6144
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 2
- name: Setup pnpm
uses: pnpm/action-setup@v4
- uses: actions/setup-node@v4
with:
node-version: 20
cache: pnpm
- name: Check repository hygiene
run: pnpm run check:repo-hygiene
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Validate GitHub config
run: pnpm run check:github-config
- name: Select i18n contract profile
shell: bash
run: |
if git rev-parse HEAD^1 >/dev/null 2>&1 &&
git diff --name-only HEAD^1 HEAD -- scripts/i18n-audit.mjs scripts/i18n-contract.test.mjs | grep -q .; then
echo "BITFUN_I18N_CONTRACT_TEST_AUDIT_INTEGRATION=1" >> "$GITHUB_ENV"
fi
- name: Validate i18n contract
run: pnpm run i18n:contract:test:ci
- name: Audit i18n resources
run: pnpm run i18n:audit
- name: Lint web UI
run: pnpm run lint:web
- name: Run web UI tests
run: pnpm --dir src/web-ui run test:run
- name: Build web UI
run: pnpm run build:web
- name: Type-check mobile web
run: pnpm --dir src/mobile-web run type-check
- name: Build mobile web
run: pnpm run build:mobile-web
- name: Upload frontend build artifacts
uses: actions/upload-artifact@v4
with:
name: frontend-dist
path: dist
retention-days: 1