Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

GitHub Action live and deploy #377

Open
wants to merge 10 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
232 changes: 143 additions & 89 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
@@ -1,116 +1,170 @@
name: CI
name: Cobaya Tests

# for the moment only runs on "action* branches". Coverage/pypi not yet set up.

on:
push:
branches:
- 'action*'
tags:
- '*'
pull_request:
branches:
- '*'
on: [ push, pull_request ]

env:
COBAYA_INSTALL_SKIP: polychord,planck_2015,CamSpec2021,2018_highl_CamSpec,unbinned,keck,classy
COBAYA_INSTALL_SKIP_BASE: planck_2015,CamSpec2021,2018_highl_CamSpec,unbinned,keck
COBAYA_PACKAGES_PATH: ../packages

jobs:
build:
should_run:
# only run on pushes that are not also part of PR
runs-on: ubuntu-latest
outputs:
run_tests: github.event_name == 'push' || ${{ steps.check.outputs.run_tests }}
steps:
- name: Check if tests should run
id: check
if: github.event_name == 'push'
uses: actions/github-script@v7
with:
github-token: ${{secrets.GITHUB_TOKEN}}
script: |
const { data: prs } = await github.rest.pulls.list({
owner: context.repo.owner,
repo: context.repo.repo,
head: `${context.repo.owner}:${context.ref.replace('refs/heads/', '')}`,
state: 'open'
});
const shouldRun = prs.length === 0;
core.setOutput('run_tests', shouldRun ? 'true' : 'false');

tests:
needs: should_run
runs-on: ${{ matrix.os }}
if: github.event_name == 'pull_request' || needs.should_run.outputs.run_tests == 'true'
strategy:
fail-fast: false
matrix:
include:
- name: "Anaconda: jammy LTS Python (fast; pip CAMB)"
- name: "Anaconda Python (flake8, no numba)"
os: ubuntu-latest
pydist: "ANACONDA"
- name: "Latest Python 3.12"
cobaya_skip: classy,polychord
- name: "Latest Python 3.x (with polychord)"
os: ubuntu-latest
python-version: 3.12
python-version: 3.x
mpi: openmpi
- name: "OS X Python 3.8"
cobaya_skip: classy,polychord
- name: "OS X Python 3.8 (with classy)"
os: macos-latest
python-version: 3.8
mpi: openmpi
cobaya_skip: polychord
- name: "Windows Python 3.12"
os: windows-latest
python-version: 3.12
mpi: intelmpi
cobaya_skip: classy,polychord
steps:
- name: Set COBAYA_INSTALL_SKIP
shell: bash
run: echo "COBAYA_INSTALL_SKIP=$COBAYA_INSTALL_SKIP_BASE,${{ matrix.cobaya_skip }}" >> $GITHUB_ENV

- run: ln -s $(which gfortran-14) /usr/local/bin/gfortran
if: matrix.os == 'macos-latest'

- run: |
gfortran --version

- uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Set up Python ${{ matrix.python-version }}
if: matrix.pydist != 'ANACONDA'
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}

- name: Set up Miniconda
if: matrix.pydist == 'ANACONDA'
uses: conda-incubator/setup-miniconda@v3
with:
auto-activate-base: false
activate-environment: tests-environment
environment-file: tests-environment.yml

- name: flake8 Lint
if: matrix.pydist == 'ANACONDA'
shell: bash -el {0}
run: |
flake8 cobaya --max-line-length 90 --select=E713,E704,E703,E714,E10,E11,E20,E22,E23,E25,E27,E301,E302,E304,E9,F405,F406,F5,F6,F7,F8,W1,W2,W3,W6 --show-source --statistics

- name: Install dependencies (pip)
if: matrix.pydist != 'ANACONDA'
run: |
pip install -r requirements.txt pytest-xdist pytest-cov flaky matplotlib coverage iminuit numba camb

- name: Install mpi
if: matrix.pydist != 'ANACONDA' && matrix.os != 'windows-latest'
uses: mpi4py/setup-mpi@v1
with:
mpi: ${{ matrix.mpi }}

- name: Install mpi4py
if: matrix.pydist != 'ANACONDA' && matrix.os != 'windows-latest'
run: |
pip install mpi4py -i https://pypi.anaconda.org/mpi4py/simple

# - name: Cache dependencies
# uses: actions/cache@v4
# with:
# path: |
# ${{ env.COBAYA_PACKAGES_PATH }}/data/
# key: ${{ env.COBAYA_INSTALL_SKIP }}
# enableCrossOsArchive: true


- name: Run cobaya install and tests
shell: bash -el {0}
run: |
coverage run --parallel-mode -m cobaya.install polychord --debug
coverage run --parallel-mode -m pytest tests/ -n auto -k "not cosmo" --skip-not-installed --no-flaky-report
coverage run --parallel-mode -m cobaya.install cosmo-tests --no-progress-bars --debug --skip-global
pytest tests/ --cov -vv -s -k "cosmo" -n 2 --skip-not-installed --no-flaky-report

- name: Run MPI tests
if: matrix.os != 'windows-latest'
shell: bash -el {0}
run: |
mpiexec -np 2 --oversubscribe coverage run --parallel-mode -m pytest -m mpi tests/ --no-flaky-report

- name: Run external likelihood tests
shell: bash -el {0}
run: |
git clone --depth=1 https://github.com/CobayaSampler/example_external_likelihood
pip install ./example_external_likelihood --quiet
coverage run --parallel-mode -m unittest test_package.tests.test

# - name: Upload coverage to Codecov
# uses: codecov/codecov-action@v4
# with:
# token: ${{ secrets.CODECOV_TOKEN }}


deploy:
needs: tests
runs-on: ubuntu-latest
if: github.repository_owner == 'CobayaSampler' && github.event_name == 'push' && startsWith(github.ref, 'refs/tags/')
permissions:
id-token: write

steps:
- run: ln -s $(which gfortran-14) /usr/local/bin/gfortran
if: matrix.os == 'macos-latest'

- run: gfortran --version

- uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Set up Python ${{ matrix.python-version }}
if: matrix.pydist != 'ANACONDA'
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}

- name: Set up Miniconda
if: matrix.pydist == 'ANACONDA'
uses: conda-incubator/setup-miniconda@v3
with:
auto-activate-base: false
activate-environment: tests-environment
environment-file: tests-environment.yml

- name: Install mpi
if: matrix.pydist != 'ANACONDA'
uses: mpi4py/setup-mpi@v1
with:
mpi: ${{ matrix.mpi }}

# - name: Cache dependencies
# uses: actions/cache@v2
# with:
# path: |
# ${{ github.workspace }}/packages/data/planck_supp_data_and_covmats
# ${{ github.workspace }}/packages/data/bao_data
# ${{ github.workspace }}/packages/data/sn_data
# ${{ github.workspace }}/packages/data/des_data
# ${{ github.workspace }}/packages/data/planck_2018_pliklite_native
# key: ${{ runner.os }}-build-${{ matrix.python-version }}}

- name: Install dependencies (pip)
if: matrix.pydist != 'ANACONDA'
run: |
pip install mpi4py -i https://pypi.anaconda.org/mpi4py/simple
pip install -r requirements.txt pytest-xdist pytest-cov flaky matplotlib dill coverage flake8 iminuit numba camb

- name: Run flake8
shell: bash -el {0}
run: |
flake8 cobaya --select=E713,E704,E703,E714,E741,E10,E11,E20,E22,E23,E25,E27,E301,E302,E304,E9,F405,F406,F5,F6,F7,F8,W1,W2,W3,W6 --show-source --statistics

- name: Run cobaya install and tests
shell: bash -el {0}
run: |
coverage run --parallel-mode -m cobaya.install polychord --debug
coverage run --parallel-mode -m pytest tests/ -n auto -k "not cosmo" --skip-not-installed --no-flaky-report
coverage run --parallel-mode -m cobaya.install cosmo-tests --no-progress-bars --debug --skip-global
pytest tests/ --cov -vv -s -k "cosmo" -n 2 --skip-not-installed --no-flaky-report

- name: Run MPI tests
shell: bash -el {0}
run: |
mpiexec -np 2 coverage run --parallel-mode -m pytest -x -m mpi tests/ --no-flaky-report

- name: Run external likelihood tests
shell: bash -el {0}
run: |
git clone --depth=1 https://github.com/CobayaSampler/example_external_likelihood
pip install ./example_external_likelihood --quiet
coverage run --parallel-mode -m unittest test_package.tests.test

# - name: Upload coverage to Codecov
# uses: codecov/codecov-action@v1
- uses: actions/checkout@v4

- name: Set up Python
uses: actions/setup-python@v5

- name: Install dependencies
run: |
python -m pip install -U pip
python -m pip install -U build twine

- name: Build package
run: python -m build --sdist

- name: Publish package
uses: pypa/gh-action-pypi-publish@release/v1
Loading
Loading