mirror of
https://github.com/heygen-com/hyperframes.git
synced 2026-10-30 17:27:09 +00:00
* ci: a release PR runs a fast release check, not the heavy suites * ci: keep the release check's header within the comment limit * ci: shorten the release check's usage line * ci: trim the release check's comments * ci: the release check's classifier hands the manifest test to a helper
135 lines
5.2 KiB
YAML
135 lines
5.2 KiB
YAML
name: Lambda arm64 image
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
# Builds the arm64 Lambda video function image: the native ffmpeg on two separate ARM runners (each runs
|
|
# the codec check, the tarballs must match), then the image from the x86 handler ZIP, smoke-run on ARM.
|
|
on:
|
|
pull_request:
|
|
paths:
|
|
- "packages/aws-lambda/image/**"
|
|
- "packages/aws-lambda/scripts/stage-arm64-image.ts"
|
|
# A @sparticuz/chromium bump or a ZIP layout change must re-stage the image.
|
|
- "packages/aws-lambda/package.json"
|
|
- "packages/aws-lambda/scripts/build-zip.ts"
|
|
- ".github/workflows/lambda-arm64-image.yml"
|
|
# On main it also seeds publish.yml's ffmpeg cache.
|
|
push:
|
|
branches: [main]
|
|
paths:
|
|
- "packages/aws-lambda/image/**"
|
|
workflow_dispatch:
|
|
|
|
concurrency:
|
|
group: lambda-arm64-image-${{ github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
jobs:
|
|
changes:
|
|
name: Detect changes
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 4
|
|
outputs:
|
|
release_only: ${{ steps.release.outputs.release_only }}
|
|
steps:
|
|
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
|
|
with:
|
|
fetch-depth: 0
|
|
- name: Find a release-only diff
|
|
id: release
|
|
uses: ./.github/actions/release-only-diff
|
|
|
|
ffmpeg:
|
|
name: ffmpeg ${{ matrix.copy }}
|
|
needs: changes
|
|
# A release PR changes versions and notes only; a failed change detection must not skip the build.
|
|
if: ${{ !cancelled() && needs.changes.outputs.release_only != 'true' }}
|
|
runs-on: ubuntu-24.04-arm
|
|
timeout-minutes: 90
|
|
strategy:
|
|
matrix:
|
|
copy: [a, b]
|
|
steps:
|
|
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
|
|
- name: Build and check
|
|
run: >-
|
|
docker buildx build --progress=plain --platform linux/arm64 --target artifact
|
|
--output type=local,dest=out packages/aws-lambda/image
|
|
- run: cat out/hf-media-check.txt && sha256sum out/*.tar.gz
|
|
# Same path and key as publish.yml's lambda-arm64-ffmpeg job reads.
|
|
- if: matrix.copy == 'a' && github.ref == 'refs/heads/main'
|
|
uses: actions/cache/save@0057852bfaa89a56745cba8c7296529d2fc39830 # v4
|
|
with:
|
|
path: out/
|
|
key: hf-media-linux-aarch64-${{ hashFiles('packages/aws-lambda/image/**') }}
|
|
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
|
|
with:
|
|
name: hf-media-${{ matrix.copy }}
|
|
path: out/
|
|
retention-days: 7
|
|
|
|
reproducible:
|
|
name: ffmpeg builds match
|
|
needs: ffmpeg
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 5
|
|
steps:
|
|
- uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4
|
|
- run: cmp hf-media-a/hf-media-linux-aarch64.tar.gz hf-media-b/hf-media-linux-aarch64.tar.gz
|
|
|
|
handler-zip:
|
|
name: Handler ZIP
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 30
|
|
steps:
|
|
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
|
|
- uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2
|
|
- run: bun install --frozen-lockfile
|
|
- run: bun run build
|
|
- run: bun run --cwd packages/aws-lambda build:zip
|
|
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
|
|
with:
|
|
name: handler-zip
|
|
path: packages/aws-lambda/dist/handler.zip
|
|
retention-days: 7
|
|
|
|
image:
|
|
name: Image smoke
|
|
needs: [ffmpeg, handler-zip]
|
|
runs-on: ubuntu-24.04-arm
|
|
timeout-minutes: 20
|
|
steps:
|
|
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
|
|
- uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2
|
|
- uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4
|
|
with:
|
|
path: artifacts
|
|
- name: Stage /var/task
|
|
run: >-
|
|
bun packages/aws-lambda/scripts/stage-arm64-image.ts
|
|
--zip=artifacts/handler-zip/handler.zip
|
|
--ffmpeg=artifacts/hf-media-a/hf-media-linux-aarch64.tar.gz --out=staged
|
|
- name: Build image
|
|
run: >-
|
|
docker buildx build --progress=plain --platform linux/arm64 --target video
|
|
--build-context task=staged/task --load -t hf-video:ci packages/aws-lambda/image
|
|
- name: ffmpeg and Chrome run under the image's own Lambda runtime
|
|
run: |
|
|
docker run -d --name hf-smoke -p 9001:8080 \
|
|
-v "$PWD/packages/aws-lambda/image/smoke-video.mjs:/var/task/smoke-video.mjs:ro" \
|
|
hf-video:ci smoke-video.handler
|
|
reply=$(curl -sS --retry 30 --retry-all-errors --retry-delay 1 \
|
|
-d '{}' http://localhost:9001/2015-03-31/functions/function/invocations)
|
|
docker logs hf-smoke
|
|
echo "$reply"
|
|
jq -e '.arch == "arm64" and .screenshotBytes > 0 and (.ffmpeg | startswith("ffmpeg version 7.0.2"))' <<<"$reply"
|
|
- name: The Lambda runtime loads the handler
|
|
run: |
|
|
docker run -d --name hf-video -p 9000:8080 hf-video:ci
|
|
reply=$(curl -sS --retry 30 --retry-all-errors --retry-delay 1 \
|
|
-d '{"Action":"not-an-action"}' http://localhost:9000/2015-03-31/functions/function/invocations)
|
|
docker logs hf-video
|
|
echo "$reply"
|
|
grep -q 'no recognised Action' <<<"$reply"
|