name: CI (wasm) on: workflow_dispatch: # allows manual triggering push: branches: - master paths: ['.github/workflows/build-wasm.yml', '**/CMakeLists.txt', '**/Makefile', '**/*.mk', '**/*.cmake', '**/*.in', '**/*.h', '**/*.hpp', '**/*.c', '**/*.cpp'] pull_request: types: [opened, synchronize, reopened] paths-ignore: - 'bindings/ruby/**' # handled by bindings-ruby.yml - 'bindings/go/**' # handled by bindings-go.yml - 'examples/addon.node/**' # handled by examples.yml concurrency: group: ${{ github.workflow }}-${{ github.head_ref && github.ref || github.run_id }} cancel-in-progress: true jobs: emscripten: runs-on: ubuntu-22.04 strategy: matrix: build: [Release] steps: - name: Clone uses: actions/checkout@v6 - name: Setup emsdk uses: emscripten-core/setup-emsdk@6ab9eb1bda2574c4ddb79809fc9247783eaf9021 # v14 - name: Verify run: emcc -v - name: ccache uses: ggml-org/ccache-action@v1.2.21 with: key: wasm-ubuntu-22 evict-old-files: 1d save: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' }} - name: Build env: CCACHE_SLOPPINESS: time_macros,include_file_mtime,include_file_ctime CCACHE_COMPILERCHECK: content run: | emcmake cmake -B build -DCMAKE_BUILD_TYPE=${{ matrix.build }} \ -DCMAKE_C_COMPILER_LAUNCHER=ccache \ -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ "-DCMAKE_C_FLAGS=-ffile-prefix-map=$EMSDK=/emsdk" \ "-DCMAKE_CXX_FLAGS=-ffile-prefix-map=$EMSDK=/emsdk" cmake --build build -j $(nproc)