Add opt-in unattended resilience to the Pane Chat orchestrator skill #1856
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Code Quality | |
| on: | |
| push: | |
| branches: [ main ] | |
| pull_request: | |
| branches: [ main ] | |
| workflow_dispatch: | |
| jobs: | |
| changes: | |
| name: Detect changed areas | |
| runs-on: ubuntu-latest | |
| outputs: | |
| runpane: ${{ steps.filter.outputs.runpane }} | |
| main: ${{ steps.filter.outputs.main }} | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v7 | |
| - name: Filter changed paths | |
| id: filter | |
| uses: dorny/paths-filter@v3 | |
| with: | |
| filters: | | |
| runpane: | |
| - 'packages/runpane/**' | |
| - 'packages/runpane-py/**' | |
| - 'contracts/runpane/**' | |
| - 'shared/types/runpaneOrchestration.ts' | |
| - 'shared/types/generatedRunpaneContract.ts' | |
| - 'scripts/generate-runpane-contract.js' | |
| - 'scripts/sync-runpane-package-versions.js' | |
| - 'scripts/test-runpane-contract.js' | |
| - 'scripts/test-runpane-package-smoke.js' | |
| - 'scripts/fixtures/**' | |
| - '.github/workflows/quality.yml' | |
| main: | |
| - 'main/**' | |
| - 'shared/**' | |
| - 'package.json' | |
| - 'pnpm-lock.yaml' | |
| - 'pnpm-workspace.yaml' | |
| - '.github/workflows/quality.yml' | |
| quality-checks: | |
| name: Quality Checks + Smoke | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v7 | |
| - name: Setup pnpm | |
| uses: pnpm/action-setup@v6 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version: '22.18.0' | |
| cache: 'pnpm' | |
| - name: Install dependencies | |
| run: pnpm install | |
| - name: Run type checking | |
| run: pnpm typecheck | |
| - name: Run consolidated lint harness | |
| run: pnpm lint | |
| - name: Verify GitHub release publication behavior | |
| run: bash scripts/test-publish-github-release.sh | |
| - name: Rebuild native modules for Node tests | |
| run: pnpm rebuild better-sqlite3-multiple-ciphers | |
| - name: Run main process test suite | |
| run: CI=1 pnpm --filter main exec vitest run | |
| - name: Run frontend unit tests | |
| run: CI=1 pnpm --filter frontend test | |
| - name: Install Playwright browser dependencies | |
| run: pnpm exec playwright install --with-deps chromium | |
| - name: Rebuild native modules for Electron smoke tests | |
| run: pnpm run electron:rebuild | |
| - name: Configure Electron sandbox | |
| run: | | |
| electron_path="$(node -p "require('electron')")" | |
| electron_dir="$(dirname "${electron_path}")" | |
| sudo chown root "${electron_dir}/chrome-sandbox" | |
| sudo chmod 4755 "${electron_dir}/chrome-sandbox" | |
| - name: Verify sandboxed Electron preload | |
| run: pnpm build:main && xvfb-run -a pnpm exec electron scripts/smoke-sandboxed-preload.cjs | |
| - name: Run maintained functional smoke tests | |
| run: xvfb-run -a pnpm test:ci:minimal | |
| env: | |
| PANE_DIR: ${{ runner.temp }}/pane-ci | |
| # Published wrapper CLIs (npm + PyPI). Runs only when wrapper/contract files | |
| # change on a PR; always runs on pushes to main. Each OS is tested once at | |
| # the runtime floors (Node 20 / Python 3.8) and once at current (Node 22 / | |
| # Python 3.13) instead of the full Node x Python cross product. | |
| runpane-wrapper-tests: | |
| name: Runpane Wrapper (${{ matrix.os }}, Node ${{ matrix.node-version }}, Python ${{ matrix.python-version }}) | |
| needs: changes | |
| if: github.event_name != 'pull_request' || needs.changes.outputs.runpane == 'true' | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - { os: ubuntu-latest, node-version: '20.0.0', python-version: '3.8' } | |
| - { os: ubuntu-latest, node-version: '22.18.0', python-version: '3.13' } | |
| - { os: macos-latest, node-version: '20.0.0', python-version: '3.8' } | |
| - { os: macos-latest, node-version: '22.18.0', python-version: '3.13' } | |
| - { os: windows-2022, node-version: '20.0.0', python-version: '3.8' } | |
| - { os: windows-2022, node-version: '22.18.0', python-version: '3.13' } | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v7 | |
| - name: Setup pnpm | |
| uses: pnpm/action-setup@v6 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version: ${{ matrix.node-version }} | |
| cache: 'pnpm' | |
| - name: Setup Python | |
| uses: actions/setup-python@v6 | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| - name: Install wrapper dependencies | |
| run: pnpm install --filter runpane --ignore-scripts | |
| - name: Check wrapper package versions | |
| run: node scripts/sync-runpane-package-versions.js --check | |
| - name: Build npm wrapper | |
| run: pnpm --filter runpane build | |
| - name: Run wrapper contract tests | |
| run: node scripts/test-runpane-contract.js | |
| - name: Run package manager smoke tests | |
| run: node scripts/test-runpane-package-smoke.js | |
| # Ubuntu is already covered by quality-checks above; this job only adds the | |
| # other platforms, and only when main-process code (or its deps) changed. | |
| cross-os-main-tests: | |
| name: Main Process Tests (${{ matrix.os }}) | |
| needs: changes | |
| if: github.event_name != 'pull_request' || needs.changes.outputs.main == 'true' | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: [macos-latest, windows-2022] | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v7 | |
| - name: Setup pnpm | |
| uses: pnpm/action-setup@v6 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version: '22.18.0' | |
| cache: 'pnpm' | |
| - name: Install dependencies | |
| run: pnpm install | |
| - name: Run main process type checking | |
| run: pnpm --filter main typecheck | |
| - name: Rebuild native modules for Node tests | |
| run: pnpm rebuild better-sqlite3-multiple-ciphers | |
| - name: Run main process unit tests | |
| run: pnpm --filter main test |