debug multi-threaded GH actions tests #301
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 | |
echo "Running multi-threaded tests..." | |
# Create a test script to verify browser environment | |
cat << EOF > verify-browser.html | |
<!DOCTYPE html> | |
<html> | |
<head> | |
<title>Browser Environment Test</title> | |
</head> | |
<body> | |
<script> | |
console.log('SharedArrayBuffer available:', typeof SharedArrayBuffer !== 'undefined'); | |
console.log('crossOriginIsolated:', window.crossOriginIsolated); | |
</script> | |
</body> | |
</html> | |
EOF | |
# Run the verification in Chrome | |
echo "Verifying browser environment..." | |
npx mocha-headless-chrome \ | |
--args="$CHROME_FLAGS --enable-features=SharedArrayBuffer,CrossOriginIsolation" \ | |
-a no-sandbox \ | |
-f http://localhost:3000/verify-browser.html | |
# Run MT tests with verified configuration | |
npx mocha-headless-chrome \ | |
--args="$CHROME_FLAGS --enable-features=SharedArrayBuffer,CrossOriginIsolation" \ | |
-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 --enable-features=SharedArrayBuffer,CrossOriginIsolation" \ | |
-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 |