Skip to content

Maintenance in porepy.ad #1797

Maintenance in porepy.ad

Maintenance in porepy.ad #1797

# Run static tests for code quality: Isort, black, flake8, mypy.
name: Static tests
# Controls when the action will run. Triggers the workflow on push or pull request
# events for the main and develop branches
on:
workflow_dispatch:
# run jobs manually
push:
branches:
- develop
- main
pull_request:
branches:
- develop
- main
schedule:
# Do a nightly run of the tests
- cron: '0 1 * * *'
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
# Assert no docs/ directory on branches main and develop for conflict-free downstream
# https://stackoverflow.com/questions/70708306/github-actions-run-step-job-in-a-workflow-if-changes-happen-in-specific-folde
no_docs_on_develop_and_main:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dorny/paths-filter@v3
id: filter
with:
filters: |
docs:
- 'docs/**'
- name: assert no docs/ directory on branches 'develop' and 'main'
if: steps.filter.outputs.docs == 'true'
run: echo "::error::No 'docs/' directory allowed on branches 'develop' and 'main'." && exit 1
# Assert successful build and proper code layout
build:
name: Static tests
# The type of runner that the job will run on
runs-on: ubuntu-latest
# https://help.github.com/en/actions/language-and-framework-guides/using-python-with-github-actions#specifying-a-python-version
strategy:
matrix:
# Run the tests only on the latest supported Python version.
python-version: ["3.12"]
# Complete all versions in matrix even if one fails.
fail-fast: false
# Steps represent a sequence of tasks that will be executed as part of the job
steps:
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it.
- uses: actions/checkout@v3
- name: Setup Python ${{ matrix.python-version}}
uses: actions/setup-python@v3
with:
# Version range or exact version of a Python version to use, using SemVer's version range syntax.
python-version: ${{ matrix.python-version}}
architecture: x64
cache: 'pip'
# Cache pip dependencies
# Source: https://github.com/actions/cache/blob/main/examples.md#python---pip
- name: Cache dependencies
uses: actions/cache@v3
id: cache
with:
# Cache the full python environment, this is more efficient than just caching pip
# https://blog.allenai.org/python-caching-in-github-actions-e9452698e98d
path: ${{ env.pythonLocation }}
key: ${{ env.pythonLocation }}-${{ hashFiles('setup.py') }}-${{ hashFiles('**/requirements.txt', '**/requirements-dev.txt') }}
- name: Cache mypy
uses: actions/cache@v3
id: cache-mypy
with:
path: mypy-cache-${{ matrix.python-version}}
key: ${{ runner.os }}-mypy
# Install the requirements. Mypy needs this to access stubs for numpy etc.
- name: Install requirements
run: |
pip install -U pip
# Install requirements, using eager updates to avoid stalled dependencies due to caching
# https://blog.allenai.org/python-caching-in-github-actions-e9452698e98d
pip install --upgrade --upgrade-strategy eager -r requirements.txt
pip freeze
# Run black, isort, flake8, and mypy.
# Note that since these are static checks, we have not installed PorePy.
- name: black
if: ${{ always() }}
run: black --check src
- name: isort
if: ${{always()}}
run: isort --check src
- name: flake8
if: ${{ always() }}
run: flake8 src
- name: mypy
if: ${{ always() }}
run: mypy src --cache-dir mypy-cache-${{ matrix.python-version}}