Scheduled #48
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 Python and PyBaMM versions. This job | |
# is used for the self-hosted macOS-14 (arm64) runner at this time. | |
filter_pybamm_matrix: | |
name: Filter the matrix for OS and Python version | |
needs: [create_pybamm_matrix] | |
if: github.repository == 'pybop-team/PyBOP' | |
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 to include just the Python version and PyBaMM version | |
# First filter the matrix to only include macOS-14 entries | |
filtered_entries = [entry for entry in matrix['include'] if entry['os'] == 'macos-14'] | |
# Then remove the os key from the entries | |
for entry in filtered_entries: | |
entry.pop('os') | |
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] | |
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[uv] | |
- 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: | |
# This job filters the matrix JSON created in build_matrix.sh to provide | |
# a matrix of only macOS-14 (arm64) entries | |
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[uv] | |
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 ) |