Merge pull request #102 from gadhvirushiraj/dev #530
This file contains 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 build | |
on: | |
push: | |
pull_request: | |
workflow_dispatch: | |
defaults: | |
run: | |
shell: bash -l {0} | |
jobs: | |
pytests: | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- qutip-version: '4' | |
qutip-branch: 'qutip-4.7.X' | |
- qutip-version: '5' | |
qutip-branch: 'master' | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: gaurav-nelson/github-action-markdown-link-check@v1 | |
with: | |
use-quiet-mode: 'yes' | |
folder-path: tutorials-v${{ matrix.qutip-version }} | |
#use config file to define 403 and 405 errors as valid links | |
#(APS blocks this link check) | |
config-file: mlc_config.json | |
- name: Setup Mambaforge | |
uses: conda-incubator/setup-miniconda@v2 | |
with: | |
miniforge-variant: Mambaforge | |
miniforge-version: latest | |
activate-environment: test-environment-v${{ matrix.qutip-version }} | |
use-mamba: true | |
- name: Get Date | |
id: get-date | |
run: echo "::set-output name=today::$(/bin/date -u '+%Y%m%d')" | |
shell: bash | |
- name: Cache Conda env | |
uses: actions/cache@v2 | |
with: | |
path: ${{ env.CONDA }}/envs | |
key: conda-${{ runner.os }}--${{ runner.arch }}--${{ steps.get-date.outputs.today }}-${{ hashFiles('test_environment.yml') }}-${{ env.CACHE_NUMBER }}-qutip-${{ matrix.qutip-version }} | |
env: | |
# Increase this value to reset cache if etc/example-environment.yml has not changed | |
CACHE_NUMBER: 0 | |
id: cache | |
- name: Install environment | |
if: steps.cache.outputs.cache-hit != 'true' | |
run: mamba env update -n test-environment-v${{ matrix.qutip-version }} -f test_environment-v${{ matrix.qutip-version }}.yml | |
- name: Install QuTiP | |
run: | | |
pip install --upgrade pip | |
python -m pip install jax jax[cpu] equinox diffrax | |
git clone -b ${{ matrix.qutip-branch }} https://github.com/qutip/qutip.git | |
cd qutip | |
pip install -r requirements.txt | |
pip install . | |
cd .. | |
python -m pip install git+https://github.com/qutip/qutip-qip | |
python -m pip install --no-deps git+https://github.com/qutip/qutip-jax | |
git clone -b master https://github.com/qutip/qutip-qtrl.git | |
cd qutip-qtrl | |
# install qutip-qtrl without deps because it requires qutip 5.0.0a1 | |
pip install --no-deps -e . | |
- name: Install ffmpeg & LaTeX | |
run: | | |
sudo apt update | |
sudo apt install ffmpeg | |
sudo apt install texlive-latex-extra | |
- name: Convert Notebooks | |
run: | | |
rm -rf notebooks | |
mkdir notebooks | |
cp -r tutorials-v${{ matrix.qutip-version }}/* notebooks | |
cd notebooks | |
find . -name '*.md' -exec jupytext --to notebook {} + | |
find . -name '*.md' -delete | |
- name: Check PEP8 formatting | |
run: | | |
pip install nbqa flake8 | |
find . -name '*.ipynb' -exec nbqa flake8 --max-line-length=88 {} + | |
- name: Run tests | |
run: | | |
jupyter kernel & | |
cd notebooks | |
find . -name '*.ipynb' -exec pytest --nbmake --overwrite --nbmake-timeout=600 {} + | |
rm template.ipynb | |
- name: Create Notebook Artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: executed-notebooks-v${{ matrix.qutip-version }} | |
path: | | |
notebooks/*.ipynb | |
notebooks/**/*.ipynb | |
publish: | |
needs: pytests | |
runs-on: ubuntu-latest | |
if: ${{ github.repository == 'qutip/qutip-tutorials' && github.ref == 'refs/heads/main' }} | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions/download-artifact@v4 | |
with: | |
name: executed-notebooks-v4 | |
path: publish/tutorials-v4 | |
- uses: actions/download-artifact@v4 | |
with: | |
name: executed-notebooks-v5 | |
path: publish/tutorials-v5 | |
- name: Build website with Jekyll | |
run: | | |
sudo gem install bundler jekyll | |
sudo apt-get install wget subversion | |
cd website | |
# Download resources from qutip.github.io repository | |
mkdir css | |
cd css | |
wget https://raw.githubusercontent.com/qutip/qutip.github.io/master/css/bootstrap.css | |
wget https://raw.githubusercontent.com/qutip/qutip.github.io/master/css/site.css | |
cd .. | |
mkdir _includes | |
cd _includes | |
wget https://raw.githubusercontent.com/qutip/qutip.github.io/master/_includes/footer.html | |
wget https://raw.githubusercontent.com/qutip/qutip.github.io/master/_includes/header.html | |
wget https://raw.githubusercontent.com/qutip/qutip.github.io/master/_includes/navbar.html | |
cd .. | |
mkdir images | |
cd images | |
wget https://raw.githubusercontent.com/qutip/qutip.github.io/master/images/favicon.ico | |
cd .. | |
# build the website | |
python create_index.py | |
bundle config path .gems | |
bundle install | |
bundle exec jekyll build | |
mv _site/* ../publish/ | |
- name: Publish Notebooks | |
run: | | |
python -m pip install ghp-import | |
ghp-import -m "Automatic push by ghp-import" -f -n -p -o -r origin -b gh-pages publish |