-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
0fd5e26
commit e0118c8
Showing
1 changed file
with
178 additions
and
0 deletions.
There are no files selected for viewing
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,178 @@ | ||
name: pip install and test | ||
|
||
on: | ||
# Run on pushes to master | ||
push: | ||
branches: | ||
- master | ||
# And all pull requests | ||
pull_request: | ||
schedule: | ||
# Scheduled run over at 0217 UTC Sunday to detect any upstream breaks. | ||
# * is a special character in YAML so you have to quote this string | ||
- cron: '17 2 * * 0' | ||
|
||
# Allows you to run this workflow manually from the Actions tab | ||
workflow_dispatch: | ||
|
||
concurrency: | ||
# Cancels jobs running if new commits are pushed | ||
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} | ||
cancel-in-progress: true | ||
|
||
jobs: | ||
build: | ||
name: "Build and test asQ" | ||
# Use Firedrake's Linux runners | ||
runs-on: [self-hosted, Linux] | ||
# Use the firedrake container without asQ installed - we want to run the repo version. | ||
# TODO: change `pip` to `latest` once the pip install PR lands | ||
container: | ||
# image: firedrakeproject/firedrake-vanilla-default:latest | ||
image: firedrakeproject/firedrake-vanilla-default:pip | ||
env: | ||
# Sometimes we want to determine if tests are running on CI | ||
ASQ_CI_TESTS: 1 | ||
# Sush firedrake sush | ||
OMP_NUM_THREADS: 1 | ||
OPENBLAS_NUM_THREADS: 1 | ||
# Tell pyop2 to complain if SPMD assumptions are broken | ||
PYOP2_SPMD_STRICT: 1 | ||
# Make sure tests with >8 processes are not silently skipped | ||
PYTEST_MPI_MAX_NPROCS: 8 | ||
# Common arguments for pytest. Accumulated coverage is printed after all tests | ||
EXTRA_PYTEST_ARGS: --durations=50 --timeout=500 --timeout-method=thread -o faulthandler_timeout=600 --cov=asQ --cov-append --cov-report= --verbose | ||
# venv activation script | ||
ACTIVATE: venv-asQ/bin/activate | ||
steps: | ||
- name: Fix HOME | ||
# For unknown reasons GitHub actions overwrite HOME to /github/home | ||
# which will break everything unless fixed | ||
# (https://github.com/actions/runner/issues/863) | ||
run: echo "HOME=/home/firedrake" >> "$GITHUB_ENV" | ||
|
||
- name: Pre-cleanup | ||
# TODO: Why do we need to do this? | ||
run: | | ||
: # Wipe everything away in the current directory | ||
find . -delete | ||
firedrake-clean | ||
- uses: actions/checkout@v4 | ||
with: | ||
# Download asQ into a subdirectory not called 'asQ' to make sure | ||
# that the package installs correctly. Otherwise 'import asQ' may | ||
# work even if the installation failed because it is a subdirectory. | ||
path: asQ-repo | ||
|
||
- name: Create virtual environment | ||
# pass '--system-site-packages' so Firedrake can be found | ||
run: python3 -m venv --system-site-packages venv-asQ | ||
|
||
- name: Install asQ | ||
id: install | ||
run: | | ||
. $ACTIVATE | ||
pip install ./asQ-repo | ||
pip list | ||
- name: Install test dependencies | ||
run: | | ||
. $ACTIVATE | ||
python -m pip install pytest-cov | ||
# try and reduce the number of warnings to sift through | ||
python -m pip install siphash24 | ||
- name: Show package versions | ||
run: | | ||
. $ACTIVATE | ||
python --version | ||
python -m pytest --version | ||
flake8 --version | ||
firedrake-status | ||
- name: Lint | ||
run: | | ||
. $ACTIVATE | ||
flake8 . | ||
- name: Run tests (nprocs = 1) | ||
run: | | ||
. $ACTIVATE | ||
: # Use pytest-xdist here so we can have a single collated output (not possible | ||
: # for parallel tests) | ||
firedrake-run-split-tests 1 1 -n 12 --dist worksteal "$EXTRA_PYTEST_ARGS" tests/ | ||
timeout-minutes: 20 | ||
|
||
# TODO: Seems like the ideal use for a matrix strategy | ||
- name: Run tests (nprocs = 2) | ||
# Run even if earlier tests failed | ||
if: success() || steps.install.conclusion == 'success' | ||
run: | | ||
. $ACTIVATE | ||
firedrake-run-split-tests 2 6 "$EXTRA_PYTEST_ARGS" tests/ | ||
timeout-minutes: 20 | ||
|
||
- name: Run tests (nprocs = 3) | ||
# Run even if earlier tests failed | ||
if: success() || steps.install.conclusion == 'success' | ||
run: | | ||
. $ACTIVATE | ||
firedrake-run-split-tests 3 4 "$EXTRA_PYTEST_ARGS" tests/ | ||
timeout-minutes: 20 | ||
|
||
- name: Run tests (nprocs = 4) | ||
# Run even if earlier tests failed | ||
if: success() || steps.install.conclusion == 'success' | ||
run: | | ||
. $ACTIVATE | ||
firedrake-run-split-tests 4 3 "$EXTRA_PYTEST_ARGS" tests/ | ||
timeout-minutes: 20 | ||
|
||
- name: Run tests (nprocs = 5) | ||
# Run even if earlier tests failed | ||
if: success() || steps.install.conclusion == 'success' | ||
run: | | ||
. $ACTIVATE | ||
firedrake-run-split-tests 5 2 "$EXTRA_PYTEST_ARGS" tests/ | ||
timeout-minutes: 20 | ||
|
||
- name: Run tests (nprocs = 6) | ||
# Run even if earlier tests failed | ||
if: success() || steps.install.conclusion == 'success' | ||
run: | | ||
. $ACTIVATE | ||
firedrake-run-split-tests 6 2 "$EXTRA_PYTEST_ARGS" tests/ | ||
timeout-minutes: 20 | ||
|
||
- name: Run tests (nprocs = 7) | ||
# Run even if earlier tests failed | ||
if: success() || steps.install.conclusion == 'success' | ||
run: | | ||
. $ACTIVATE | ||
firedrake-run-split-tests 7 1 "$EXTRA_PYTEST_ARGS" tests/ | ||
timeout-minutes: 20 | ||
|
||
- name: Run tests (nprocs = 8) | ||
# Run even if earlier tests failed | ||
if: success() || steps.install.conclusion == 'success' | ||
run: | | ||
. $ACTIVATE | ||
firedrake-run-split-tests 8 1 "$EXTRA_PYTEST_ARGS" tests/ | ||
timeout-minutes: 20 | ||
|
||
#TODO: Print out accumulated coverage from tests | ||
|
||
- name: Upload log files | ||
uses: actions/upload-artifact@v4 | ||
if: success() || steps.install.conclusion == 'success' | ||
with: | ||
name: asQ-logs | ||
path: pytest_*.log | ||
retention-days: 5 | ||
|
||
- name: Post-cleanup | ||
if: always() | ||
run: | | ||
find . -delete | ||
firedrake-clean |