chore: update README.md badges #7
This file contains hidden or 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
| # OpenColorIO.wasm CI/CD Pipeline | |
| # Graphics Tier 3 - Production color management with SIMD and WebGPU | |
| # Following WASM Ecosystem Standards v2.0 | |
| # | |
| # Copyright 2025 Superstruct Ltd, New Zealand | |
| # Licensed under BSD 3-Clause License (same as OpenColorIO) | |
| name: OpenColorIO WASM CI | |
| on: | |
| push: | |
| branches: [ wasm, main ] | |
| pull_request: | |
| branches: [ wasm, main ] | |
| release: | |
| types: [ created ] | |
| env: | |
| EMSCRIPTEN_VERSION: '4.0.14' | |
| NODE_VERSION: '22' | |
| jobs: | |
| # Multi-matrix build validation following Graphics Tier 3 standards | |
| build: | |
| name: Build OpenColorIO WASM | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| config: [Release, Debug] | |
| simd: [ON, OFF] | |
| webgpu: [ON, OFF] | |
| native: [ON, OFF] | |
| exclude: | |
| # Reduce matrix size - skip debug builds with all features off | |
| - config: Debug | |
| simd: OFF | |
| webgpu: OFF | |
| native: OFF | |
| steps: | |
| - name: π₯ Checkout repository | |
| uses: actions/checkout@v4 | |
| with: | |
| submodules: recursive | |
| fetch-depth: 0 | |
| - name: π§ Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: ${{ env.NODE_VERSION }} | |
| cache: 'npm' | |
| - name: β‘ Setup Emscripten SDK | |
| uses: mymindstorm/setup-emsdk@v14 | |
| with: | |
| version: ${{ env.EMSCRIPTEN_VERSION }} | |
| actions-cache-folder: 'emsdk-cache' | |
| no-cache: false | |
| update: false | |
| - name: ποΈ Install system dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y \ | |
| libopencolorio-dev \ | |
| pkg-config \ | |
| ninja-build \ | |
| python3-yaml \ | |
| cmake | |
| # Verify OpenColorIO installation | |
| pkg-config --exists OpenColorIO && \ | |
| echo "β OpenColorIO $(pkg-config --modversion OpenColorIO) found" || \ | |
| echo "β OpenColorIO not found" | |
| - name: π Check for Foundation Tier dependencies | |
| run: | | |
| echo "π Checking for ecosystem dependencies..." | |
| # Check for Foundation Tier 1 libraries | |
| DEPS_FOUND=0 | |
| for dep in Imath libexpat zlib minizip-ng pystring; do | |
| if [ -d "../${dep}.wasm/install" ] || [ -d "../${dep}.wasm/dist" ]; then | |
| echo "β Found ecosystem dependency: ${dep}.wasm" | |
| DEPS_FOUND=$((DEPS_FOUND + 1)) | |
| else | |
| echo "β οΈ Ecosystem dependency not found: ${dep}.wasm" | |
| fi | |
| done | |
| echo "Found ${DEPS_FOUND}/5 ecosystem dependencies" | |
| # Set environment variable for build configuration | |
| echo "ECOSYSTEM_DEPS_AVAILABLE=${DEPS_FOUND}" >> $GITHUB_ENV | |
| - name: π¨ Configure OpenColorIO WASM build | |
| run: | | |
| # Create build directory | |
| mkdir -p build-wasm | |
| cd build-wasm | |
| # Configure with CMake | |
| emcmake cmake .. \ | |
| -G Ninja \ | |
| -DCMAKE_BUILD_TYPE=${{ matrix.config }} \ | |
| -DCMAKE_INSTALL_PREFIX="../install" \ | |
| -DENABLE_SIMD=${{ matrix.simd }} \ | |
| -DENABLE_WEBGPU=${{ matrix.webgpu }} \ | |
| -DENABLE_WASM_NATIVE=${{ matrix.native }} \ | |
| -f ../CMakeLists.wasm.txt | |
| - name: π Build OpenColorIO WASM module | |
| run: | | |
| cd build-wasm | |
| ninja -j$(nproc) | |
| - name: π¦ Install build artifacts | |
| run: | | |
| cd build-wasm | |
| ninja install | |
| - name: β Verify build outputs | |
| run: | | |
| echo "π Verifying build artifacts..." | |
| DIST_DIR="install/dist" | |
| if [ ! -f "${DIST_DIR}/opencolorio.wasm" ]; then | |
| echo "β WASM file not found: ${DIST_DIR}/opencolorio.wasm" | |
| exit 1 | |
| fi | |
| if [ ! -f "${DIST_DIR}/opencolorio.js" ]; then | |
| echo "β JavaScript wrapper not found: ${DIST_DIR}/opencolorio.js" | |
| exit 1 | |
| fi | |
| # Check file sizes | |
| WASM_SIZE=$(stat -c%s "${DIST_DIR}/opencolorio.wasm") | |
| JS_SIZE=$(stat -c%s "${DIST_DIR}/opencolorio.js") | |
| WASM_MB=$(( WASM_SIZE / 1024 / 1024 )) | |
| JS_KB=$(( JS_SIZE / 1024 )) | |
| echo "β Build artifacts verified:" | |
| echo " opencolorio.wasm: ${WASM_MB}MB" | |
| echo " opencolorio.js: ${JS_KB}KB" | |
| echo " Total size: $(( (WASM_SIZE + JS_SIZE) / 1024 / 1024 ))MB" | |
| # Validate WASM module if wasm-validate is available | |
| if command -v wasm-validate >/dev/null 2>&1; then | |
| echo "π Validating WASM module..." | |
| wasm-validate "${DIST_DIR}/opencolorio.wasm" && \ | |
| echo "β WASM module validation passed" || \ | |
| echo "β WASM module validation failed" | |
| fi | |
| - name: π Build configuration summary | |
| run: | | |
| echo "## OpenColorIO.wasm Build Summary" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "| Configuration | Value |" >> $GITHUB_STEP_SUMMARY | |
| echo "|---------------|-------|" >> $GITHUB_STEP_SUMMARY | |
| echo "| Build Type | ${{ matrix.config }} |" >> $GITHUB_STEP_SUMMARY | |
| echo "| SIMD Optimizations | ${{ matrix.simd }} |" >> $GITHUB_STEP_SUMMARY | |
| echo "| WebGPU Support | ${{ matrix.webgpu }} |" >> $GITHUB_STEP_SUMMARY | |
| echo "| WASM-Native Features | ${{ matrix.native }} |" >> $GITHUB_STEP_SUMMARY | |
| echo "| Emscripten Version | ${{ env.EMSCRIPTEN_VERSION }} |" >> $GITHUB_STEP_SUMMARY | |
| echo "| Node.js Version | ${{ env.NODE_VERSION }} |" >> $GITHUB_STEP_SUMMARY | |
| echo "| Ecosystem Dependencies | ${ECOSYSTEM_DEPS_AVAILABLE}/5 |" >> $GITHUB_STEP_SUMMARY | |
| if [ -f "install/dist/opencolorio.wasm" ]; then | |
| WASM_SIZE=$(stat -c%s "install/dist/opencolorio.wasm") | |
| WASM_MB=$(( WASM_SIZE / 1024 / 1024 )) | |
| echo "| WASM Module Size | ${WASM_MB}MB |" >> $GITHUB_STEP_SUMMARY | |
| fi | |
| - name: π€ Upload build artifacts | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: opencolorio-wasm-${{ matrix.config }}-${{ matrix.simd }}-${{ matrix.webgpu }}-${{ matrix.native }} | |
| path: | | |
| install/dist/ | |
| build-wasm/CMakeCache.txt | |
| retention-days: 30 | |
| compression-level: 6 | |
| # Comprehensive testing with multiple environments | |
| test: | |
| name: Test OpenColorIO WASM | |
| runs-on: ubuntu-latest | |
| needs: build | |
| strategy: | |
| matrix: | |
| test-type: [node, browser] | |
| steps: | |
| - name: π₯ Checkout repository | |
| uses: actions/checkout@v4 | |
| - name: π§ Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: ${{ env.NODE_VERSION }} | |
| - name: π¦ Download build artifacts | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: opencolorio-wasm-Release-ON-ON-ON | |
| path: install/ | |
| - name: π§ͺ Install test dependencies | |
| run: | | |
| npm install | |
| if [ "${{ matrix.test-type }}" = "browser" ]; then | |
| # Install Playwright for browser testing | |
| npx playwright install --with-deps chromium firefox webkit | |
| fi | |
| - name: π¬ Run Node.js tests | |
| if: matrix.test-type == 'node' | |
| run: | | |
| echo "π¬ Running Node.js test suite..." | |
| node test/test-node.js | |
| - name: π Run browser tests | |
| if: matrix.test-type == 'browser' | |
| run: | | |
| echo "π Running browser integration tests..." | |
| # Start local HTTP server for testing | |
| npx http-server -p 8080 -c-1 --cors & | |
| HTTP_PID=$! | |
| # Wait for server to start | |
| sleep 3 | |
| # Run Playwright tests | |
| npx playwright test test/browser/opencolorio-browser.test.js \ | |
| --config test/browser/playwright.config.js | |
| # Clean up | |
| kill $HTTP_PID || true | |
| - name: π Test results summary | |
| run: | | |
| echo "## Test Results (${{ matrix.test-type }})" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "β ${{ matrix.test-type == 'node' && 'Node.js' || 'Browser' }} tests completed successfully" >> $GITHUB_STEP_SUMMARY | |
| # Performance validation and benchmarking | |
| performance: | |
| name: Performance Analysis | |
| runs-on: ubuntu-latest | |
| needs: build | |
| steps: | |
| - name: π₯ Checkout repository | |
| uses: actions/checkout@v4 | |
| - name: π§ Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: ${{ env.NODE_VERSION }} | |
| - name: π¦ Download SIMD-optimized build | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: opencolorio-wasm-Release-ON-ON-ON | |
| path: install/ | |
| - name: π Run performance benchmarks | |
| run: | | |
| echo "π Running OpenColorIO.wasm performance benchmarks..." | |
| node test/benchmarks/benchmark-node.js | |
| - name: π Upload benchmark results | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: benchmark-results | |
| path: test/benchmarks/benchmark-results.json | |
| retention-days: 90 | |
| - name: π Performance summary | |
| run: | | |
| echo "## Performance Benchmark Results" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| if [ -f "test/benchmarks/benchmark-results.json" ]; then | |
| # Extract key metrics from benchmark results | |
| echo "π Benchmark completed successfully" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "Detailed results available in benchmark-results artifact" >> $GITHUB_STEP_SUMMARY | |
| else | |
| echo "β οΈ Benchmark results not found" >> $GITHUB_STEP_SUMMARY | |
| fi | |
| # Release artifact creation and deployment | |
| release: | |
| name: Create Release | |
| runs-on: ubuntu-latest | |
| needs: [build, test, performance] | |
| if: github.event_name == 'release' | |
| steps: | |
| - name: π₯ Checkout repository | |
| uses: actions/checkout@v4 | |
| - name: π¦ Download all build artifacts | |
| uses: actions/download-artifact@v4 | |
| with: | |
| path: artifacts/ | |
| - name: ποΈ Prepare release packages | |
| run: | | |
| echo "ποΈ Preparing release packages..." | |
| # Create release directory | |
| mkdir -p release/ | |
| # Package production builds (Release + all optimizations) | |
| PROD_BUILD="artifacts/opencolorio-wasm-Release-ON-ON-ON" | |
| if [ -d "$PROD_BUILD" ]; then | |
| echo "π¦ Packaging production build..." | |
| # Create production package | |
| cd "$PROD_BUILD" | |
| tar -czf "../../release/opencolorio-wasm-production.tar.gz" dist/ | |
| # Create NPM package structure | |
| cd ../../release | |
| mkdir -p npm-package | |
| cp -r "$PROD_BUILD/dist" npm-package/ | |
| # Copy package files | |
| cp ../package.json npm-package/ || echo "package.json not found" | |
| cp ../README-WASM.md npm-package/ || echo "README-WASM.md not found" | |
| cd npm-package | |
| tar -czf "../opencolorio-wasm-npm.tar.gz" . | |
| cd .. | |
| echo "β Release packages created:" | |
| ls -la *.tar.gz | |
| else | |
| echo "β Production build not found: $PROD_BUILD" | |
| exit 1 | |
| fi | |
| - name: π Generate release notes | |
| run: | | |
| echo "# OpenColorIO.wasm Release" > release-notes.md | |
| echo "" >> release-notes.md | |
| echo "Production-quality color management library compiled to WebAssembly." >> release-notes.md | |
| echo "" >> release-notes.md | |
| echo "## Features" >> release-notes.md | |
| echo "- β‘ WebAssembly SIMD optimizations for 2-4x performance boost" >> release-notes.md | |
| echo "- π₯οΈ WebGPU compute shader acceleration" >> release-notes.md | |
| echo "- π WASM-native filesystem patterns (IDBFS, CDN loading)" >> release-notes.md | |
| echo "- π¨ Complete OpenColorIO v2.5 color management features" >> release-notes.md | |
| echo "- π± Browser and Node.js compatibility" >> release-notes.md | |
| echo "" >> release-notes.md | |
| echo "## Files" >> release-notes.md | |
| echo "- \`opencolorio-wasm-production.tar.gz\` - Production build artifacts" >> release-notes.md | |
| echo "- \`opencolorio-wasm-npm.tar.gz\` - NPM package structure" >> release-notes.md | |
| echo "" >> release-notes.md | |
| echo "## Browser Support" >> release-notes.md | |
| echo "- Chrome β₯91 (SIMD), β₯113 (WebGPU)" >> release-notes.md | |
| echo "- Firefox β₯89 (SIMD), β₯113 (WebGPU behind flag)" >> release-notes.md | |
| echo "- Safari β₯16.4 (SIMD), β₯18 (WebGPU)" >> release-notes.md | |
| echo "- Edge β₯91 (SIMD), β₯113 (WebGPU)" >> release-notes.md | |
| - name: π Upload release assets | |
| uses: softprops/action-gh-release@v2 | |
| with: | |
| files: | | |
| release/*.tar.gz | |
| body_path: release-notes.md | |
| draft: false | |
| prerelease: false | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| - name: π€ Publish to NPM (if configured) | |
| if: contains(github.event.release.tag_name, 'v') | |
| run: | | |
| if [ -n "${{ secrets.NPM_TOKEN }}" ]; then | |
| echo "π€ Publishing to NPM..." | |
| cd release/npm-package | |
| echo "//registry.npmjs.org/:_authToken=${{ secrets.NPM_TOKEN }}" > .npmrc | |
| # Update version in package.json | |
| TAG_VERSION="${{ github.event.release.tag_name }}" | |
| VERSION="${TAG_VERSION#v}" # Remove 'v' prefix | |
| if [ -f "package.json" ]; then | |
| npm version "$VERSION" --no-git-tag-version | |
| npm publish --access public | |
| echo "β Published to NPM successfully" | |
| else | |
| echo "β package.json not found" | |
| fi | |
| else | |
| echo "βΉοΈ NPM_TOKEN not configured, skipping NPM publish" | |
| fi | |
| # Final status report | |
| status: | |
| name: Build Status Summary | |
| runs-on: ubuntu-latest | |
| needs: [build, test, performance] | |
| if: always() | |
| steps: | |
| - name: π Generate final status report | |
| run: | | |
| echo "# OpenColorIO.wasm Build Status" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| # Check job results | |
| BUILD_STATUS="${{ needs.build.result }}" | |
| TEST_STATUS="${{ needs.test.result }}" | |
| PERF_STATUS="${{ needs.performance.result }}" | |
| echo "| Component | Status |" >> $GITHUB_STEP_SUMMARY | |
| echo "|-----------|--------|" >> $GITHUB_STEP_SUMMARY | |
| echo "| Build | ${BUILD_STATUS} |" >> $GITHUB_STEP_SUMMARY | |
| echo "| Tests | ${TEST_STATUS} |" >> $GITHUB_STEP_SUMMARY | |
| echo "| Performance | ${PERF_STATUS} |" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| if [ "$BUILD_STATUS" = "success" ] && [ "$TEST_STATUS" = "success" ] && [ "$PERF_STATUS" = "success" ]; then | |
| echo "π **All checks passed!** OpenColorIO.wasm is ready for production use." >> $GITHUB_STEP_SUMMARY | |
| else | |
| echo "β οΈ **Some checks failed.** Please review the results above." >> $GITHUB_STEP_SUMMARY | |
| fi | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "---" >> $GITHUB_STEP_SUMMARY | |
| echo "*Graphics Tier 3 - Production Color Management System*" >> $GITHUB_STEP_SUMMARY | |
| echo "*Compiled with Emscripten ${{ env.EMSCRIPTEN_VERSION }} + Node.js ${{ env.NODE_VERSION }}*" >> $GITHUB_STEP_SUMMARY |