From 9bb4b36ea4d98e4f7bfaa5f0a594423e39e02b96 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20=C3=81ngel?= Date: Sat, 25 Apr 2026 22:01:59 -0400 Subject: [PATCH] ci(native-renderer): github actions workflow for linux cpu tests + bench - Runs on ubuntu-latest (x86_64, no GPU) - Installs Rust + Skia build deps (clang, ninja, ffmpeg, fonts) - Caches Cargo registry + Skia build between runs - Builds with --no-default-features (CPU raster only) - Runs all tests + criterion benchmarks - Posts benchmark results to PR summary --- .github/workflows/native-renderer.yml | 65 ++++++++++++++++++++++++ packages/native-renderer/Dockerfile.test | 39 +++++--------- 2 files changed, 77 insertions(+), 27 deletions(-) create mode 100644 .github/workflows/native-renderer.yml diff --git a/.github/workflows/native-renderer.yml b/.github/workflows/native-renderer.yml new file mode 100644 index 0000000000..7204c621c3 --- /dev/null +++ b/.github/workflows/native-renderer.yml @@ -0,0 +1,65 @@ +name: Native Renderer + +on: + pull_request: + types: [opened, synchronize, reopened] + paths: + - "packages/native-renderer/**" + - ".github/workflows/native-renderer.yml" + push: + branches: [main] + paths: + - "packages/native-renderer/**" + +concurrency: + group: native-renderer-${{ github.ref }} + cancel-in-progress: true + +jobs: + test: + name: Tests (Linux x86_64, CPU raster) + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - uses: actions/checkout@v4 + + - name: Install Rust + uses: dtolnay/rust-toolchain@stable + + - name: Cache Cargo + Skia + uses: actions/cache@v4 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + packages/native-renderer/target + key: native-${{ runner.os }}-${{ hashFiles('packages/native-renderer/Cargo.lock') }} + restore-keys: native-${{ runner.os }}- + + - name: Install system deps + run: | + sudo apt-get update + sudo apt-get install -y --no-install-recommends \ + clang libclang-dev pkg-config \ + libfontconfig1-dev libfreetype6-dev \ + ninja-build python3 \ + ffmpeg fonts-liberation fonts-dejavu-core fontconfig + sudo fc-cache -fv + + - name: Build (CPU raster, no GPU) + working-directory: packages/native-renderer + run: cargo build --release --no-default-features --tests + + - name: Run tests + working-directory: packages/native-renderer + run: cargo test --release --no-default-features -- --test-threads=1 + + - name: Benchmark + working-directory: packages/native-renderer + run: | + cargo bench --no-default-features 2>&1 | tee /tmp/bench.txt + echo "## Native Renderer Benchmark" >> $GITHUB_STEP_SUMMARY + echo "Linux x86_64, CPU raster, no GPU" >> $GITHUB_STEP_SUMMARY + echo '```' >> $GITHUB_STEP_SUMMARY + grep -E 'time:|^[a-z].*time:' /tmp/bench.txt >> $GITHUB_STEP_SUMMARY || echo "No benchmark output" >> $GITHUB_STEP_SUMMARY + echo '```' >> $GITHUB_STEP_SUMMARY diff --git a/packages/native-renderer/Dockerfile.test b/packages/native-renderer/Dockerfile.test index 84ced7a673..f3453ca93e 100644 --- a/packages/native-renderer/Dockerfile.test +++ b/packages/native-renderer/Dockerfile.test @@ -4,41 +4,26 @@ # Validates: CPU raster rendering, FFmpeg pipe encoding, scene parsing, # element painting, effects, image compositing, animated pipeline. # -# Usage (from repo root): -# docker build -f packages/native-renderer/Dockerfile.test \ -# --build-context native=packages/native-renderer \ -# -t hyperframes-native:test . +# Usage: +# cd packages/native-renderer +# docker build -f Dockerfile.test -t hyperframes-native:test . # docker run --rm hyperframes-native:test -# docker run --rm hyperframes-native:test bench -FROM rust:1.87-bookworm +FROM rust:1.88-bookworm -# ── System dependencies ───────────────────────────────────────────────────── RUN apt-get update && apt-get install -y --no-install-recommends \ - clang \ - libclang-dev \ - pkg-config \ - libfontconfig1-dev \ - libfreetype6-dev \ - ninja-build \ - python3 \ - git \ - ffmpeg \ - fonts-liberation \ - fonts-dejavu-core \ - fontconfig \ - && rm -rf /var/lib/apt/lists/* \ - && fc-cache -fv + clang libclang-dev pkg-config \ + libfontconfig1-dev libfreetype6-dev \ + ninja-build python3 git \ + ffmpeg fonts-liberation fonts-dejavu-core fontconfig \ + && rm -rf /var/lib/apt/lists/* && fc-cache -fv WORKDIR /app - -# Copy only the Rust crate (target/ excluded via .dockerignore) COPY Cargo.toml Cargo.lock* ./ COPY src ./src COPY tests ./tests -COPY benches ./benches -# Build with NO GPU features — pure CPU raster + FFmpeg libx264 -RUN cargo build --release --no-default-features --tests 2>&1 | tail -3 && echo "Build succeeded" +# Build tests only (skip benchmarks — criterion is heavy) +RUN cargo test --release --no-default-features --no-run 2>&1 | tail -3 -ENTRYPOINT ["sh", "-c", "if [ \"$1\" = bench ]; then cargo bench --release --no-default-features 2>&1 | grep -E 'time:|Benchmarking'; else cargo test --release --no-default-features -- --test-threads=1 && echo 'All tests passed on Linux.'; fi", "--"] +ENTRYPOINT ["cargo", "test", "--release", "--no-default-features", "--", "--test-threads=1"]