diff --git a/.github/workflows/deploy-github-page.yml b/.github/workflows/deploy-github-page.yml new file mode 100644 index 00000000..b840b68d --- /dev/null +++ b/.github/workflows/deploy-github-page.yml @@ -0,0 +1,108 @@ +name: Build and Deploy + +on: + workflow_dispatch: + push: + branches: + - main + +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 + emsdk_ver: "3.1.45" + 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: | + os="${{ matrix.os }}" + if [[ "${os}" == "macos"* ]]; then + echo "ncpus=$(sysctl -n hw.ncpu)" >> $GITHUB_ENV + else + echo "ncpus=$(nproc --all)" >> $GITHUB_ENV + fi + + - name: Setup default Build Type on Windows + if: ${{ runner.os == 'windows' }} + run: | + $env:ncpus=$([Environment]::ProcessorCount) + echo "ncpus=$env:ncpus" >> $env:GITHUB_ENV + + - name: Setup emsdk + shell: bash -l {0} + run: | + emsdk install ${{matrix.emsdk_ver}} + + - name: Build xeus-cpp + shell: bash -l {0} + run: | + emsdk activate ${{matrix.emsdk_ver}} + source $CONDA_EMSDK_DIR/emsdk_env.sh + micromamba create -f environment-wasm-host.yml --platform=emscripten-wasm32 + + mkdir build + pushd build + + export EMPACK_PREFIX=$MAMBA_ROOT_PREFIX/envs/xeus-cpp-wasm-build + export PREFIX=$MAMBA_ROOT_PREFIX/envs/xeus-cpp-wasm-host + echo "PREFIX=$PREFIX" >> $GITHUB_ENV + export CMAKE_PREFIX_PATH=$PREFIX + export CMAKE_SYSTEM_PREFIX_PATH=$PREFIX + + emcmake cmake \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_PREFIX_PATH=$PREFIX \ + -DCMAKE_INSTALL_PREFIX=$PREFIX \ + -DXEUS_CPP_EMSCRIPTEN_WASM_BUILD=ON \ + -DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ON \ + .. + EMCC_CFLAGS='-sERROR_ON_UNDEFINED_SYMBOLS=0' emmake make -j ${{ env.ncpus }} install + + - name: Jupyter Lite integration + shell: bash -l {0} + run: | + micromamba create -n xeus-lite-host jupyterlite-core + micromamba activate xeus-lite-host + python -m pip install jupyterlite-xeus + jupyter lite build --XeusAddon.prefix=${{ env.PREFIX }} --contents README.md --output-dir dist + + - name: Upload artifact + uses: actions/upload-pages-artifact@v3 + with: + path: ./dist + + deploy: + needs: build + 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 diff --git a/README.md b/README.md index d7ceba29..e04f0de5 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,10 @@ `xeus-cpp` is a Jupyter kernel for cpp based on the native implementation of the Jupyter protocol [xeus](https://github.com/jupyter-xeus/xeus). +Try Jupyter Lite demo by clicking below + +[![lite-badge](https://jupyterlite.rtfd.io/en/latest/_static/badge.svg)](https://compiler-research.github.io/xeus-cpp/lab/index.html) + ## Installation within a mamba environment (non wasm build instructions) To ensure that the installation works, it is preferable to install `xeus-cpp` in a