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\' $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