feat(cli): add --remote-debugging-port to preview and play #5875
Workflow file for this run
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: regression | |
| permissions: | |
| contents: read | |
| on: | |
| pull_request: | |
| push: | |
| branches: | |
| - main | |
| jobs: | |
| changes: | |
| name: Detect changes | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 2 | |
| outputs: | |
| code: ${{ steps.filter.outputs.code }} | |
| steps: | |
| # Force git-based change detection instead of the pull_request REST API. | |
| # The API path can fail the whole workflow on transient listFiles | |
| # timeouts before any regression shard even starts. | |
| - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 | |
| with: | |
| fetch-depth: 0 | |
| - uses: dorny/paths-filter@fbd0ab8f3e69293af611ebaee6363fc25e6d187d # v4 | |
| id: filter | |
| with: | |
| token: "" | |
| filters: | | |
| code: | |
| - "packages/core/**" | |
| - "packages/producer/**" | |
| - "packages/engine/**" | |
| - "Dockerfile*" | |
| preflight: | |
| name: Preflight (lint + format) | |
| needs: changes | |
| if: needs.changes.outputs.code == 'true' | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 5 | |
| steps: | |
| - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 | |
| - uses: ./.github/actions/preflight | |
| regression-shards: | |
| needs: [changes, preflight] | |
| if: needs.changes.outputs.code == 'true' | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 60 | |
| strategy: | |
| fail-fast: true | |
| matrix: | |
| # Shards are bin-packed by measured per-test duration (LPT heuristic on | |
| # CI run 25893372795) so each row carries ~15-16 min of work. When a | |
| # new fixture lands, drop it into the currently-lightest shard or | |
| # re-balance against fresh `test_suite_summary` timings. Worst-shard | |
| # work time was 19.3 min under the old tag-based split (styles-e); | |
| # the rebalance brings every shard within ~40s of the others. | |
| include: | |
| - shard: shard-1 | |
| args: "hdr-regression style-5-prod style-3-prod mov-prores" | |
| - shard: shard-2 | |
| args: "style-15-prod hdr-hlg-regression style-1-prod many-cuts vfr-screen-recording render-symlinked-assets" | |
| - shard: shard-3 | |
| args: "style-7-prod style-8-prod style-10-prod css-spinner-render-compat webm-transparency mp4-h264-sdr" | |
| - shard: shard-4 | |
| args: "style-16-prod style-9-prod style-17-prod iframe-render-compat variables-prod mp4-h265-sdr" | |
| - shard: shard-5 | |
| args: "style-4-prod style-11-prod style-2-prod animejs-adapter typegpu-adapter" | |
| - shard: shard-6 | |
| args: "overlay-montage-prod style-12-prod chat missing-host-comp-id png-sequence" | |
| - shard: shard-7 | |
| args: "sub-composition-video style-18-prod raf-ball-render-compat font-variant-numeric" | |
| - shard: shard-8 | |
| args: "style-13-prod style-6-prod vignelli-stacking gsap-letters-render-compat" | |
| steps: | |
| - name: Checkout (with LFS) | |
| uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 | |
| with: | |
| lfs: true | |
| - name: Validate LFS files | |
| run: | | |
| echo "Checking golden baseline MP4s are real files (not LFS pointers)..." | |
| for mp4 in packages/producer/tests/*/output/output.mp4; do | |
| if [ -f "$mp4" ]; then | |
| size=$(stat --format=%s "$mp4") | |
| if [ "$size" -lt 1000 ]; then | |
| echo "ERROR: $mp4 appears to be an LFS pointer ($size bytes)" | |
| exit 1 | |
| fi | |
| echo "OK: $mp4 ($size bytes)" | |
| fi | |
| done | |
| - name: Set up Docker Buildx | |
| uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3 | |
| - name: Build test Docker image (cached) | |
| uses: docker/build-push-action@10e90e3645eae34f1e60eeb005ba3a3d33f178e8 # v6 | |
| with: | |
| context: . | |
| file: Dockerfile.test | |
| load: true | |
| tags: hyperframes-producer:test | |
| cache-from: type=gha,scope=regression-test-image | |
| cache-to: type=gha,mode=max,scope=regression-test-image | |
| - name: "Run regression shard: ${{ matrix.shard }}" | |
| run: | | |
| echo "Shard: ${{ matrix.shard }}" | |
| echo "Args: ${{ matrix.args }}" | |
| docker run --rm \ | |
| --security-opt seccomp=unconfined \ | |
| --shm-size=4g \ | |
| -v ${{ github.workspace }}/packages/producer/tests:/app/packages/producer/tests \ | |
| hyperframes-producer:test \ | |
| ${{ matrix.args }} | |
| - name: Upload failure artifacts | |
| if: failure() | |
| uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 | |
| with: | |
| name: regression-failures-${{ matrix.shard }} | |
| path: packages/producer/tests/*/failures/ | |
| if-no-files-found: ignore | |
| # Summary job — matches the required check name in branch protection | |
| regression: | |
| runs-on: ubuntu-latest | |
| needs: [changes, regression-shards] | |
| if: always() | |
| steps: | |
| - name: Check results | |
| run: | | |
| if [ "${{ needs.changes.outputs.code }}" != "true" ]; then | |
| echo "No code changes — skipping regression (auto-pass)" | |
| exit 0 | |
| fi | |
| if [ "${{ needs.regression-shards.result }}" != "success" ]; then | |
| echo "One or more regression shards failed" | |
| exit 1 | |
| fi |