mirror of
https://github.com/heygen-com/hyperframes.git
synced 2026-09-03 04:38:33 +00:00
## What Updated the GitHub Actions regression workflow to monitor specific package directories instead of the entire packages folder. ## Why This change provides more granular control over when regression tests are triggered, allowing the workflow to run only when changes are made to the core, producer, or engine packages rather than any package in the repository. ## How Modified the path filters in the regression workflow to explicitly list the three critical package directories (`packages/core/**`, `packages/producer/**`, `packages/engine/**`) instead of using the broad `packages/**` pattern. ## Test plan How was this tested? - [ ] Unit tests added/updated - [ ] Manual testing performed - [ ] Documentation updated (if applicable)
122 lines
3.6 KiB
YAML
122 lines
3.6 KiB
YAML
name: regression
|
|
|
|
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:
|
|
- uses: actions/checkout@v4
|
|
- uses: dorny/paths-filter@v3
|
|
id: filter
|
|
with:
|
|
filters: |
|
|
code:
|
|
- "packages/core/**"
|
|
- "packages/producer/**"
|
|
- "packages/engine/**"
|
|
- "scripts/**"
|
|
- "Dockerfile*"
|
|
|
|
regression-shards:
|
|
needs: changes
|
|
if: needs.changes.outputs.code == 'true'
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 40
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
include:
|
|
- shard: fast
|
|
args: "--sequential --exclude-tags slow"
|
|
- shard: styles-a
|
|
args: "style-1-prod style-2-prod style-3-prod"
|
|
- shard: styles-b
|
|
args: "style-4-prod style-5-prod style-6-prod"
|
|
- shard: styles-c
|
|
args: "style-7-prod style-8-prod style-9-prod"
|
|
- shard: styles-d
|
|
args: "style-10-prod style-11-prod style-12-prod"
|
|
- shard: styles-e
|
|
args: "style-13-prod style-15-prod style-16-prod"
|
|
- shard: styles-f
|
|
args: "style-17-prod style-18-prod"
|
|
- shard: styles-g
|
|
args: "overlay-montage-prod"
|
|
steps:
|
|
- name: Checkout (with LFS)
|
|
uses: actions/checkout@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@v3
|
|
|
|
- name: Build test Docker image (cached)
|
|
uses: docker/build-push-action@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@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
|