Update to 0.8.0 dev version (#324) #1763
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: 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 | |
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 \ | |
-DCMAKE_COMPILE_WARNING_AS_ERROR=ON \ | |
.. | |
emmake make -j ${{ env.ncpus }} install | |
- name: Test xeus-cpp C++ Emscripten | |
shell: bash -l {0} | |
run: | | |
export BUILD_PREFIX=$MAMBA_ROOT_PREFIX/envs/xeus-cpp-wasm-build | |
set -e | |
micromamba create -n xeus-lite-host jupyterlite-core | |
micromamba activate xeus-lite-host | |
cd build/test | |
# Fresh install browsers, and run Emscripten tests in them | |
# This is to match the Emscripten build instructions, where | |
# we run in a fresh browser, to stop any extra installed | |
# stuff interferring with the running of the tests | |
# Explaination of options for emrun | |
# --browser (name of browser on path) | |
# --kill_exit makes it so that when emrun finishes, | |
# that the headless browser we create is killed along with it | |
# --timeout 60 is such that emrun is killed after 60 seconds if | |
# still running. emrun should have finished long before then, | |
# so if it is still running, something went wrong (such as a test | |
# which crashed the html file). This will cause the ci to fail, | |
# as a non 0 value of will be returned. | |
# In the case of Chrome we have the extra --no-sandbox flag, as on | |
# Ubuntu Chrome will refuse to run otherwise, as it expects to have | |
# been installed with admin privileges. This flag allows it to run | |
# in userspace. | |
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 --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 | |
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 activate xeus-lite-host | |
python -m pip install jupyterlite-xeus | |
jupyter lite build --XeusAddon.prefix=${{ env.PREFIX }} | |
- name: Setup tmate session | |
if: ${{ failure() && runner.debug }} | |
uses: mxschmitt/action-tmate@v3 | |
# When debugging increase to a suitable value! | |
timeout-minutes: 30 |