Files
hyperframes/.github/workflows/regression.yml
Miguel Ángel 5fba109fee ci: scope regression tests to core/producer/engine packages only (#89)
## 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)
2026-03-27 08:11:49 +01:00

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