Skip to content

chore: update README.md badges #7

chore: update README.md badges

chore: update README.md badges #7

Workflow file for this run

# 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