Run Emscripten tests in a browser #383
Workflow file for this run
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
| name: Build and Deploy | |
| on: | |
| workflow_dispatch: | |
| pull_request: | |
| push: | |
| branches: | |
| - main | |
| schedule: | |
| - cron: '30 20 * * *' # Warning: Timezone dep - 20:00 is 1:00 | |
| permissions: | |
| contents: read | |
| pages: write | |
| id-token: write | |
| jobs: | |
| build: | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - name: Github-page | |
| os: ubuntu-24.04 | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - name: install mamba | |
| uses: mamba-org/setup-micromamba@main | |
| with: | |
| environment-file: environment-wasm-build.yml | |
| init-shell: bash | |
| environment-name: xeus-cpp-wasm-build | |
| - name: Setup default Build Type on *nux | |
| if: ${{ runner.os != 'windows' }} | |
| run: | | |
| echo "ncpus=$(nproc --all)" >> $GITHUB_ENV | |
| - name: Build xeus-cpp | |
| shell: bash -l {0} | |
| run: | | |
| micromamba create -f environment-wasm-host.yml --platform=emscripten-wasm32 | |
| mkdir build | |
| pushd build | |
| export BUILD_PREFIX=$MAMBA_ROOT_PREFIX/envs/xeus-cpp-wasm-build | |
| echo "BUILD_PREFIX=$BUILD_PREFIX" >> $GITHUB_ENV | |
| export PREFIX=$MAMBA_ROOT_PREFIX/envs/xeus-cpp-wasm-host | |
| echo "PREFIX=$PREFIX" >> $GITHUB_ENV | |
| export SYSROOT_PATH=$BUILD_PREFIX/opt/emsdk/upstream/emscripten/cache/sysroot | |
| emcmake cmake \ | |
| -DCMAKE_BUILD_TYPE=Release \ | |
| -DCMAKE_INSTALL_PREFIX=$PREFIX \ | |
| -DXEUS_CPP_EMSCRIPTEN_WASM_BUILD=ON \ | |
| -DCMAKE_FIND_ROOT_PATH=$PREFIX \ | |
| -DSYSROOT_PATH=$SYSROOT_PATH \ | |
| .. | |
| emmake make -j ${{ env.ncpus }} install | |
| - name: Test xeus-cpp C++ Emscripten | |
| shell: bash -l {0} | |
| run: | | |
| set -e | |
| micromamba create -n xeus-lite-host jupyterlite-core | |
| micromamba activate xeus-lite-host | |
| cd build/test | |
| os="${{ matrix.os }}" | |
| if [[ "${os}" == "macos"* ]]; then | |
| # Install Firefox | |
| wget "https://download.mozilla.org/?product=firefox-latest&os=osx&lang=en-US" -O Firefox-latest.dmg | |
| hdiutil attach Firefox-latest.dmg | |
| cp -r /Volumes/Firefox/Firefox.app $PWD | |
| hdiutil detach /Volumes/Firefox | |
| cd ./Firefox.app/Contents/MacOS/ | |
| export PATH="$PWD:$PATH" | |
| cd – | |
| # Install Google Chrome | |
| wget https://dl.google.com/chrome/mac/stable/accept_tos%3Dhttps%253A%252F%252Fwww.google.com%252Fintl%252Fen_ph%252Fchrome%252Fterms%252F%26_and_accept_tos%3Dhttps%253A%252F%252Fpolicies.google.com%252Fterms/googlechrome.pkg | |
| pkgutil --expand-full googlechrome.pkg google-chrome | |
| cd ./google-chrome/GoogleChrome.pkg/Payload/Google\ Chrome.app/Contents/MacOS/ | |
| export PATH="$PWD:$PATH" | |
| cd – | |
| # Run tests in browsers | |
| echo "Running test_xeus_cpp in Firefox" | |
| python ${{ env.BUILD_PREFIX }}/bin/emrun.py --browser="firefox" --kill_exit --browser-args="--headless" test_xeus_cpp.html | |
| echo "Running test_xeus_cpp in Google Chrome" | |
| python ${{ env.BUILD_PREFIX }}/bin/emrun.py --browser="Google Chrome" --kill_exit --browser-args="--headless" test_xeus_cpp.html | |
| else | |
| # Install Google Chrome | |
| wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb | |
| dpkg-deb -x google-chrome-stable_current_amd64.deb $PWD/chrome | |
| cd ./chrome/opt/google/chrome/ | |
| export PATH="$PWD:$PATH" | |
| cd - | |
| # Install Firefox | |
| wget https://ftp.mozilla.org/pub/firefox/releases/138.0.1/linux-x86_64/en-GB/firefox-138.0.1.tar.xz | |
| tar -xJf firefox-138.0.1.tar.xz | |
| cd ./firefox | |
| export PATH="$PWD:$PATH" | |
| cd - | |
| # Run tests in browsers | |
| echo "Running test_xeus_cpp in Firefox" | |
| python ${{ env.BUILD_PREFIX }}/bin/emrun.py --browser="firefox" --kill_exit --timeout 60 --browser-args="--headless" test_xeus_cpp.html | |
| echo "Running test_xeus_cpp in Google Chrome" | |
| python ${{ env.BUILD_PREFIX }}/bin/emrun.py --browser="google-chrome" --kill_exit --timeout 60 --browser-args="--headless --no-sandbox" test_xeus_cpp.html | |
| fi | |
| node test_xeus_cpp.js | |
| timeout-minutes: 4 | |
| - name: Jupyter Lite integration | |
| shell: bash -l {0} | |
| run: | | |
| micromamba create -n xeus-lite-host jupyterlite-core jupyter_server | |
| micromamba activate xeus-lite-host | |
| python -m pip install jupyterlite-xeus | |
| jupyter lite build \ | |
| --XeusAddon.prefix=${{ env.PREFIX }} \ | |
| --contents README.md \ | |
| --contents notebooks/xeus-cpp-lite-demo.ipynb \ | |
| --contents notebooks/images/marie.png \ | |
| --contents notebooks/audio/audio.wav \ | |
| --output-dir dist | |
| - name: Upload artifact | |
| uses: actions/upload-pages-artifact@v3 | |
| with: | |
| path: ./dist | |
| deploy: | |
| needs: build | |
| if: github.ref == 'refs/heads/main' | |
| permissions: | |
| pages: write | |
| id-token: write | |
| environment: | |
| name: github-pages | |
| url: ${{ steps.deployment.outputs.page_url }} | |
| runs-on: ubuntu-24.04 | |
| steps: | |
| - name: Deploy to GitHub Pages | |
| id: deployment | |
| uses: actions/deploy-pages@v4 |