mirror of
https://github.com/heygen-com/hyperframes.git
synced 2026-09-03 04:38:33 +00:00
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
120 lines
3.6 KiB
YAML
120 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/**"
|
|
- "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
|