Skip to content

CI

CI #13

Workflow file for this run

name: CI
on:
workflow_dispatch:
pull_request:
branches:
- main
push:
branches:
- main
schedule:
- cron: '30 20 * * *' # Warning: Timezone dep - 20:00 is 1:00
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number }}
cancel-in-progress: true
jobs:
# build:
# runs-on: ${{ matrix.os }}
# strategy:
# fail-fast: false
# matrix:
# include:
# - name: ubu24
# os: ubuntu-24.04
# micromamba_shell_init: bash
# - name: ubu24-arm
# os: ubuntu-24.04-arm
# micromamba_shell_init: bash
# - name: ubu24-analyzers
# os: ubuntu-24.04
# coverage: true
# extra_cmake_flags: -DCMAKE_BUILD_TYPE=Debug
# micromamba_shell_init: bash
# - name: ubu22
# os: ubuntu-22.04
# micromamba_shell_init: bash
# - name: ubu22-arm
# os: ubuntu-22.04-arm
# micromamba_shell_init: bash
# - name: osx13-x86
# os: macos-13
# micromamba_shell_init: bash
# - name: osx14-arm
# os: macos-14
# micromamba_shell_init: bash
# - name: osx15-arm
# os: macos-15
# micromamba_shell_init: bash
# - name: Windows22
# os: windows-2022
# micromamba_shell_init: cmd.exe
# - name: Windows25
# os: windows-2025
# micromamba_shell_init: cmd.exe
# steps:
# - uses: actions/checkout@v4
# with:
# fetch-depth: 0
# - name: install mamba
# uses: mamba-org/setup-micromamba@main
# with:
# environment-file: environment-dev.yml
# init-shell: >-
# ${{ matrix.micromamba_shell_init }}
# environment-name: xeus-cpp
# - 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: micromamba shell hook
# if: ${{ runner.os == 'windows' }}
# shell: powershell
# run: |
# micromamba shell hook -s cmd.exe --root-prefix C:\Users\runneradmin\micromamba-root
# - name: cmake configure
# if: ${{ runner.os == 'windows' }}
# shell: cmd /C call {0}
# run: |
# call C:\Users\runneradmin\micromamba-root\condabin\micromamba.bat activate xeus-cpp
# mkdir -p build
# cd build
# cmake .. -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=Release -DXEUS_BUILD_TESTS=ON -DDEPENDENCY_SEARCH_PREFIX="%CONDA_PREFIX%\Library" -DCMAKE_PREFIX_PATH="%CONDA_PREFIX%\Library" -DCMAKE_INSTALL_PREFIX="%CONDA_PREFIX%"
# - name: cmake configure
# if: ${{ runner.os != 'windows' }}
# shell: bash -l {0}
# run: |
# mkdir -p build
# cd build
# cmake .. \
# -DCMAKE_PREFIX_PATH=$CONDA_PREFIX \
# -DCMAKE_INSTALL_PREFIX=$CONDA_PREFIX \
# -DXEUS_CPP_ENABLE_CODE_COVERAGE=${{ matrix.coverage }} \
# -DCMAKE_COMPILE_WARNING_AS_ERROR=ON \
# ${{ matrix.extra_cmake_flags }}
# - name: build & install
# if: ${{ runner.os == 'windows' }}
# shell: cmd /C call {0}
# run: |
# call C:\Users\runneradmin\micromamba-root\condabin\micromamba.bat activate xeus-cpp
# cd build
# set CL=/MP
# nmake install
# - name: build & install
# if: ${{ runner.os != 'windows' }}
# shell: bash -l {0}
# run: |
# cd build
# make install -j ${{ env.ncpus }}
# - name: Test xeus-cpp C++ Unix Systems
# if: ${{ runner.os != 'windows' }}
# shell: bash -l {0}
# run: |
# cd build/test
# ./test_xeus_cpp
# timeout-minutes: 4
# - name: Test xeus-cpp C++ Windows Systems
# if: ${{ runner.os == 'windows' }}
# shell: cmd /C call {0}
# run: |
# call C:\Users\runneradmin\micromamba-root\condabin\micromamba.bat activate xeus-cpp
# cd build\test
# .\test_xeus_cpp.exe
# - name: Python tests Unix Systems
# if: ${{ runner.os != 'windows' }}
# shell: bash -l {0}
# run: |
# cd test
# pytest -sv .
# - name: Python tests Windows Systems
# if: ${{ runner.os == 'windows' }}
# shell: cmd /C call {0}
# run: |
# call C:\Users\runneradmin\micromamba-root\condabin\micromamba.bat activate xeus-cpp
# cd test
# pytest -sv test_xcpp_kernel.py
# - name: Prepare code coverage report
# if: ${{ success() && (matrix.coverage == true) }}
# shell: bash -l {0}
# run: |
# # Create lcov report
# # Find the current compiler version.
# CC=$(realpath `which c++`)
# vers="${CC##*-}"
# sudo apt install lcov
# # capture coverage info
# lcov --directory build/ --capture --output-file coverage.info --gcov-tool $CONDA_PREFIX/bin/gcov
# lcov --remove coverage.info '/usr/*' "${HOME}"'/.cache/*' ${{ github.workspace }}'/llvm-project/*' ${{ github.workspace }}'/test/*' --output-file coverage.info
# # output coverage data for debugging (optional)
# lcov --list coverage.info
# - name: Upload to codecov.io
# if: ${{ success() && (matrix.coverage == true) }}
# uses: codecov/codecov-action@v5
# with:
# file: ./coverage.info
# fail_ci_if_error: true
# verbose: true
# token: ${{ secrets.CODECOV_TOKEN }}
# - name: Setup tmate session
# if: ${{ failure() && runner.debug }}
# uses: mxschmitt/action-tmate@v3
# # When debugging increase to a suitable value!
# timeout-minutes: 30
emscripten_wasm:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
- name: ubu24
os: ubuntu-24.04
- name: osx15-arm
os: macos-15
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: 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
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: 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 }}
- name: Run Playwright UI Tests
shell: bash -l {0}
run: |
# Install Node.js based on OS
if [[ "${{ runner.os }}" == "macOS" ]]; then
# On macOS, use Homebrew to install Node.js
brew install node@20
# Ensure node is in PATH
echo "/opt/homebrew/bin" >> $GITHUB_PATH # For ARM macOS (like macos-15)
else
# On Linux, use NodeSource script
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt-get install -y nodejs
fi
# Navigate to ui-tests directory
cd ui-tests
# Install Playwright dependencies
npm install -D @playwright/test
npx playwright install --with-deps
# Run Playwright tests
npx playwright test
# - name: Upload Playwright Test Results
# if: ${{ always() }}
# uses: actions/upload-artifact@v4
# with:
# name: playwright-test-results-${{ matrix.os }}
# path: /Users/runner/work/xeus-cpp/xeus-cpp/ui-test/src/
# retention-days: 7
- name: Setup tmate session
if: ${{ failure() && runner.debug }}
uses: mxschmitt/action-tmate@v3
# When debugging increase to a suitable value!
timeout-minutes: 30