Scheduled #24
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: Scheduled | |
on: | |
workflow_dispatch: | |
pull_request: | |
branches: | |
- main | |
# runs every day at 09:00 and 15:00 UTC | |
schedule: | |
- cron: '0 9 * * *' | |
- cron: '0 15 * * *' | |
# Check noxfile.py for associated environment variables | |
env: | |
PYBOP_SCHEDULED: 1 | |
jobs: | |
# Dynamically create a matrix of OS, Python, and PyBaMM versions | |
create_pybamm_matrix: | |
name: Dynamically create GitHub Actions matrix | |
runs-on: ubuntu-latest | |
steps: | |
- name: Check out PyBOP repository | |
uses: actions/checkout@v4 | |
with: | |
sparse-checkout-cone-mode: false | |
sparse-checkout: | | |
scripts/ci/build_matrix.sh | |
- name: Run script to create matrix | |
id: set-matrix | |
run: | | |
echo "matrix=$(bash scripts/ci/build_matrix.sh)" >> "$GITHUB_OUTPUT" | |
outputs: | |
pybop_matrix: ${{ steps.set-matrix.outputs.matrix }} | |
# filter the matrix to only include the macOS-latest entries | |
filter_pybamm_matrix: | |
name: Filter the matrix for macOS-latest entries | |
needs: [create_pybamm_matrix] | |
runs-on: ubuntu-latest | |
outputs: | |
filtered_pybop_matrix: ${{ steps.set-matrix.outputs.matrix }} | |
steps: | |
- name: Filter pybop matrix | |
id: set-matrix | |
run: | | |
import json | |
import os | |
# Get the matrix | |
matrix_json = '${{ needs.create_pybamm_matrix.outputs.pybop_matrix }}' | |
matrix = json.loads(matrix_json) | |
# Filter the matrix for macOS-latest entries only | |
filtered_entries = [entry for entry in matrix['include'] if entry['os'] == 'macos-latest'] | |
filtered_matrix = {'include': filtered_entries} | |
# Set the output variable for other jobs to use | |
output_file = os.environ['GITHUB_OUTPUT'] | |
with open(output_file, "a", encoding="utf-8") as output_stream: | |
output_stream.write(f"matrix={json.dumps(filtered_matrix)}\n") | |
shell: python | |
build: | |
needs: [create_pybamm_matrix, filter_pybamm_matrix] | |
name: Build (${{ matrix.os }}, Python ${{ matrix.python_version }}, PyBaMM ${{ matrix.pybamm_version }}) | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: ${{fromJson(needs.create_pybamm_matrix.outputs.pybop_matrix)}} | |
env: | |
PYBAMM_VERSION: ${{ matrix.pybamm_version }} | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up Python ${{ matrix.python_version }} | |
uses: actions/setup-python@v4 | |
with: | |
python-version: ${{ matrix.python_version }} | |
- name: Install dependencies | |
run: | | |
python -m pip install --upgrade pip nox | |
- name: Unit tests with nox | |
run: python -m nox -s coverage | |
- name: Run examples with nox | |
run: python -m nox -s examples | |
# M-series Mac Mini | |
build-apple-mseries: | |
needs: [filter_pybamm_matrix] | |
name: Build (MacOS M-series, Python ${{ matrix.python_version }}, PyBaMM ${{ matrix.pybamm_version }}) | |
runs-on: [self-hosted, macOS, ARM64] | |
if: github.repository == 'pybop-team/PyBOP' | |
env: | |
GITHUB_PATH: ${PYENV_ROOT/bin:$PATH} | |
PYBAMM_VERSION: ${{ matrix.pybamm_version }} | |
strategy: | |
fail-fast: false | |
matrix: ${{fromJson(needs.filter_pybamm_matrix.outputs.filtered_pybop_matrix)}} | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install python & create virtualenv | |
shell: bash | |
run: | | |
eval "$(pyenv init -)" | |
pyenv install ${{ matrix.python_version }} -s | |
pyenv virtualenv ${{ matrix.python_version }} pybop-${{ matrix.python_version }}-${{ matrix.pybamm_version }} | |
- name: Install dependencies & run tests | |
shell: bash | |
run: | | |
eval "$(pyenv init -)" | |
pyenv activate pybop-${{ matrix.python_version }}-${{ matrix.pybamm_version }} | |
python -m pip install --upgrade pip nox | |
python -m nox -s coverage | |
python -m nox -s examples | |
- name: Uninstall pyenv-virtualenv & python | |
if: always() | |
shell: bash | |
run: | | |
eval "$(pyenv init -)" | |
pyenv activate pybop-${{ matrix.python_version }}-${{ matrix.pybamm_version }} | |
pyenv uninstall -f $( python --version ) |