continue debugging github actions #310
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: Install Chrome | |
uses: browser-actions/setup-chrome@latest | |
with: | |
chrome-version: stable | |
- 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: Run tests | |
env: | |
CHROME_HEADLESS: 1 | |
CHROME_PATH: chrome | |
CHROME_FLAGS: "--headless --disable-gpu --no-sandbox --enable-features=SharedArrayBuffer,CrossOriginIsolation" | |
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 | |
npm run serve -- --headers "${HEADERS}" & | |
# Increase wait time to ensure server is ready | |
sleep 15 | |
# Verify headers and isolation status | |
echo "Checking security headers and isolation status..." | |
curl -I http://localhost:3000/tests/ffmpeg-core-st.test.html | |
# Run verification script first | |
echo "Verifying browser environment..." | |
cat << EOF > verify-browser.html | |
<!DOCTYPE html> | |
<html> | |
<head> | |
<meta http-equiv="Cross-Origin-Opener-Policy" content="same-origin"> | |
<meta http-equiv="Cross-Origin-Embedder-Policy" content="require-corp"> | |
</head> | |
<body> | |
<script> | |
console.log('SharedArrayBuffer available:', typeof SharedArrayBuffer !== 'undefined'); | |
console.log('crossOriginIsolated:', window.crossOriginIsolated); | |
if (!window.crossOriginIsolated || typeof SharedArrayBuffer === 'undefined') { | |
throw new Error('Browser environment not properly configured for SharedArrayBuffer'); | |
} | |
</script> | |
</body> | |
</html> | |
EOF | |
# 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 --disable-web-security --allow-insecure-localhost" \ | |
-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 --disable-web-security --allow-insecure-localhost" \ | |
-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 --disable-web-security --allow-insecure-localhost" \ | |
-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 |