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.
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
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