GitHub Actions run on certain file type change
For projects consisting of more than a few files, or of files in different code languages, it can sometimes be beneficial to only run certain workflows depending on which files changed. For example, consider a Fortran-based simulation where the CI takes minutes or hours to run, with associated Python plotting code. If only the plotting code is changed, it might not be necessary to CI the entire simulation, but instead test just the Python code. This can be arranged via separate .yml files under the repo’s .github/workflows/ directory.
Example: only run Python analysis script tests (say, under “scripts/”) when analysis scripts are changed. If Fortran code or Python interface scripts are changed, run other CI.
File .github/workflows/ci_scripts.yml
name: ci_scripts
on:
push:
paths:
- "scripts/**.py"
- .github/workflows/ci.yml
pull_request:
paths:
- "scripts/**.py"
- .github/workflows/ci.yml
jobs:
linux:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout
- uses: actions/setup-python
with:
python-version: '3.x'
- run: pip install .
- run: pip install flake8 mypy pytest
- run: flake8
- run: mypy
- run: pytest
File: .github/workflows/ci.yml
name: ci
on:
push:
paths:
- "**.f90"
- "**.cmake"
- "**/CMakeLists.txt"
- ".github/workflows/ci.yml"
pull_request:
paths:
- "**.f90"
- "**.cmake"
- "**/CMakeLists.txt"
- ".github/workflows/ci.yml"
jobs:
linux:
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- uses: actions/checkout
- uses: actions/setup-python
with:
python-version: '3.x'
- name: Install packages
run: |
sudo apt update
sudo apt install --no-install-recommends gfortran libopenmpi-dev openmpi-bin
- run: cmake -B build
- run: cmake --build build
- run: ctest --test-dir build -V