Skip to content

Use conda version of libsemigroups in the CI #769

Use conda version of libsemigroups in the CI

Use conda version of libsemigroups in the CI #769

Workflow file for this run

name: Run tests and lint
on: [pull_request, workflow_dispatch]
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
conda-version:
name: "Conda, ${{ matrix.os }}, Python ${{ matrix.python_version }}"
strategy:
fail-fast: false
matrix:
python_version: ["3.9", "3.10", "3.11", "3.12", "3.13"]
os: ["ubuntu-latest", "macOS-latest"]
include:
- os: "ubuntu-latest"
compiler: "ccache g++"
- os: "macOS-latest"
compiler: "ccache clang++"
runs-on: ${{ matrix.os }}
timeout-minutes: 15
steps:
- uses: actions/checkout@v4
- name: "Setup ccache . . ."
uses: Chocobo1/setup-ccache-action@v1
with:
update_packager_index: false
install_ccache: true
# We could remove this step and instead install Python with micromamba.
# This would mean we could avoid specifying LD_LIBRARY_PATH and LDFLAGS.
# However, JDE thinks the current setup better reflects how a developer
# might wish to install the package, so we have opted for this.
- name: "Setup Python . . ."
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python_version }}
cache: "pip"
- name: "Create micromamba environment . . ."
uses: mamba-org/setup-micromamba@v1
with:
environment-name: libsemigroups
create-args: >-
libsemigroups
- name: "Set environment variables . . ."
run: |
echo "PKG_CONFIG_PATH=$MAMBA_ROOT_PREFIX/envs/libsemigroups/lib/pkgconfig:$MAMBA_ROOT_PREFIX/envs/libsemigroups/share/pkgconfig:/usr/local/lib/pkgconfig" >> $GITHUB_ENV
echo "LD_LIBRARY_PATH=$MAMBA_ROOT_PREFIX/envs/libsemigroups/lib:/usr/local/lib" >> $GITHUB_ENV
echo "LDFLAGS=-Wl,-rpath,$MAMBA_ROOT_PREFIX/envs/libsemigroups/lib" >> $GITHUB_ENV
echo "PATH=$MAMBA_ROOT_PREFIX/envs/libsemigroups/bin:$PATH" >> $GITHUB_ENV
- name: "Check Python version . . ."
run: |
python --version
pip --version
- name: "Install requirements . . ."
run: pip install -r requirements.txt
- name: "Pip install libsemigroups_pybind11 . . ."
run: |
CXX="${{ matrix.compiler }}" pip install . -v
- name: "Run tests . . ."
run: |
python -m pytest -vv tests/test_*.py
- name: "Run doc tests . . ."
run: |
etc/make-doc.sh # so that all files are generated!
cd docs
python -m sphinx -b doctest -d _build/doctrees source _build/doctest
- name: "Pip install pylint + cpplint . . ."
run: |
pip3 install pylint cpplint
- name: "Run pylint and cpplint . . ."
run: |
python -m pylint setup.py tests/*.py libsemigroups_pybind11/*.py
python -m cpplint src/*.hpp src/*.cpp
main-branch:
name: "Main, ${{ matrix.os }}, Python 3.13"
strategy:
fail-fast: false
matrix:
os: ["ubuntu-latest", "macOS-latest"]
include:
- os: "ubuntu-latest"
compiler: "ccache g++"
- os: "macOS-latest"
compiler: "ccache clang++"
runs-on: ${{ matrix.os }}
timeout-minutes: 15
steps:
- uses: actions/checkout@v4
- name: "Setup ccache . . ."
uses: Chocobo1/setup-ccache-action@v1
with:
update_packager_index: false
install_ccache: true
# We could remove this step and instead install Python with micromamba.
# This would mean we could avoid specifying LD_LIBRARY_PATH and LDFLAGS.
# However, JDE thinks the current setup better reflects how a developer
# might wish to install the package, so we have opted for this.
- name: "Setup Python . . ."
uses: actions/setup-python@v5
with:
python-version: 3.13
cache: "pip"
- name: "Create micromamba environment . . ."
uses: mamba-org/setup-micromamba@v1
with:
environment-name: libsemigroups
create-args: >-
fmt
- name: "Set environment variables . . ."
run: |
echo "PKG_CONFIG_PATH=$MAMBA_ROOT_PREFIX/envs/libsemigroups/lib/pkgconfig:$MAMBA_ROOT_PREFIX/envs/libsemigroups/share/pkgconfig:/usr/local/lib/pkgconfig" >> $GITHUB_ENV
echo "LD_LIBRARY_PATH=$MAMBA_ROOT_PREFIX/envs/libsemigroups/lib:/usr/local/lib" >> $GITHUB_ENV
echo "LDFLAGS=-Wl,-rpath,$MAMBA_ROOT_PREFIX/envs/libsemigroups/lib" >> $GITHUB_ENV
echo "PATH=$MAMBA_ROOT_PREFIX/envs/libsemigroups/bin:$PATH" >> $GITHUB_ENV
- name: "Check Python version . . ."
run: |
python --version
pip --version
- name: "Install make requirements . . ."
if: ${{ matrix.os == 'macOS-latest' }}
run: brew install autoconf automake libtool
- name: "Install requirements libsemigroups . . ."
run: pip install -r requirements.txt
- name: "Install libsemigroups . . ."
run: |
git clone --depth 1 --branch main https://github.com/libsemigroups/libsemigroups.git
cd libsemigroups
./autogen.sh
./configure CXX="${{ matrix.compiler }}" CXXFLAGS="-O2 -g" --disable-hpcombi --with-external-fmt
sudo make install -j8
ccache -s
- name: "Pip install libsemigroups_pybind11 . . ."
run: |
CXX="${{ matrix.compiler }}" pip install . -v
- name: "Run tests . . ."
run: |
python -m pytest -vv tests/test_*.py
- name: "Run doc tests . . ."
run: |
etc/make-doc.sh # so that all files are generated!
cd docs
python -m sphinx -b doctest -d _build/doctrees source _build/doctest
- name: "Pip install pylint + cpplint . . ."
run: |
pip install pylint cpplint
- name: "Run pylint and cpplint . . ."
run: |
python -m pylint setup.py tests/*.py libsemigroups_pybind11/*.py
python -m cpplint src/*.hpp src/*.cpp