fix crossOriginIsolated test #300
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: CI | |
on: | |
push: | |
branches: | |
- main | |
pull_request: | |
branches: | |
- main | |
jobs: | |
build-core: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout Source Code | |
uses: actions/checkout@v2 | |
- name: Update pkg-config database | |
run: sudo ldconfig | |
- name: Setup Docker Buildx | |
id: buildx | |
uses: docker/setup-buildx-action@v2 | |
- name: Cache build | |
id: cache-build | |
uses: actions/cache@v2 | |
with: | |
path: build-cache-st | |
key: build-cache-st-v1-${{ hashFiles('Dockerfile', 'Makefile', 'build/*') }} | |
restore-keys: | | |
build-cache-st-v1- | |
- name: Build ffmpeg-core | |
run: make prd EXTRA_ARGS="--cache-from=type=local,src=build-cache-st --cache-to=type=local,dest=build-cache-st,mode=max" | |
- name: Upload core | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ffmpeg-core | |
path: packages/core/dist/* | |
build-core-mt: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout Source Code | |
uses: actions/checkout@v2 | |
- name: Setup Docker Buildx | |
id: buildx | |
uses: docker/setup-buildx-action@v2 | |
- name: Cache build | |
id: cache-build | |
uses: actions/cache@v2 | |
with: | |
path: build-cache-mt | |
key: build-cache-mt-v1-${{ hashFiles('Dockerfile', 'Makefile', 'build/*') }} | |
restore-keys: | | |
build-cache-v1- | |
- name: Build ffmpet-core-mt | |
run: make prd-mt EXTRA_ARGS="--cache-from=type=local,src=build-cache-mt --cache-to=type=local,dest=build-cache-mt,mode=max" | |
- name: Upload core-mt | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ffmpeg-core-mt | |
path: packages/core-mt/dist/* | |
tests: | |
runs-on: ubuntu-latest | |
needs: | |
- build-core | |
- build-core-mt | |
steps: | |
- name: Checkout Source Code | |
uses: actions/checkout@v2 | |
- name: Download ffmpeg-core | |
uses: actions/download-artifact@v4 | |
with: | |
name: ffmpeg-core | |
path: packages/core/dist | |
- name: Download ffmpeg-core-mt | |
uses: actions/download-artifact@v4 | |
with: | |
name: ffmpeg-core-mt | |
path: packages/core-mt/dist | |
- name: Use Node.js 18 | |
uses: actions/setup-node@v2 | |
with: | |
node-version: 18.x | |
- name: Cache dependencies | |
id: cache-dependencies | |
uses: actions/cache@v2 | |
with: | |
path: node_modules | |
key: node-modules-${{ hashFiles('package-lock.json') }} | |
restore-keys: | | |
node-modules- | |
- name: Install dependencies | |
run: npm install | |
- name: Install Chrome | |
uses: browser-actions/setup-chrome@latest | |
with: | |
chrome-version: stable | |
- name: Run tests | |
env: | |
CHROME_HEADLESS: 1 | |
CHROME_PATH: chrome | |
CHROME_FLAGS: "--enable-features=SharedArrayBuffer --headless --disable-gpu --no-sandbox --enable-experimental-web-platform-features --enable-features=SharedArrayBuffer" | |
HEADERS: '{"Cross-Origin-Opener-Policy": "same-origin", "Cross-Origin-Embedder-Policy": "require-corp", "Cross-Origin-Resource-Policy": "cross-origin", "Origin-Agent-Cluster": "?1"}' | |
run: | | |
# Start test server with proper headers for all tests | |
npm run serve & | |
# Wait for server to start and ensure headers are properly set | |
sleep 10 | |
# Verify headers are set correctly | |
echo "Checking security headers..." | |
curl -I http://localhost:3000/tests/ffmpeg-core-st.test.html | |
# Check if cross-origin isolation is working | |
echo "Adding debug script to test files to check crossOriginIsolated status..." | |
for test_file in tests/ffmpeg-*.test.html; do | |
sed -i '/<\/head>/ i\<script>console.log("crossOriginIsolated status:", crossOriginIsolated);</script>' $test_file | |
done | |
# Run single-threaded tests first | |
echo "Running single-threaded tests..." | |
npx mocha-headless-chrome \ | |
--args="$CHROME_FLAGS" \ | |
-a no-sandbox \ | |
-f http://localhost:3000/tests/ffmpeg-core-st.test.html 2>&1 | tee st-core-test.log | |
npx mocha-headless-chrome \ | |
--args="$CHROME_FLAGS" \ | |
-a no-sandbox \ | |
-f http://localhost:3000/tests/ffmpeg-st.test.html 2>&1 | tee st-test.log | |
# Run multi-threaded tests with additional SharedArrayBuffer flags | |
echo "Running multi-threaded tests..." | |
CHROME_FLAGS="$CHROME_FLAGS --enable-features=SharedArrayBuffer,CrossOriginIsolation --cross-origin-isolated" | |
# Debug SharedArrayBuffer availability | |
echo "Testing SharedArrayBuffer availability..." | |
cat << EOF > debug-sab.js | |
console.log('SharedArrayBuffer available:', typeof SharedArrayBuffer !== 'undefined'); | |
console.log('crossOriginIsolated:', window.crossOriginIsolated); | |
EOF | |
node debug-sab.js | |
npx mocha-headless-chrome \ | |
--args="$CHROME_FLAGS" \ | |
-a no-sandbox \ | |
-f http://localhost:3000/tests/ffmpeg-core-mt.test.html 2>&1 | tee mt-core-test.log | |
npx mocha-headless-chrome \ | |
--args="$CHROME_FLAGS" \ | |
-a no-sandbox \ | |
-f http://localhost:3000/tests/ffmpeg-mt.test.html 2>&1 | tee mt-test.log | |
# Display all logs for debugging | |
echo "=== Test Logs ===" | |
for log in *-test.log; do | |
echo "Contents of $log:" | |
cat $log | |
done |