Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
058765f
Refactor ci.yaml
ClaudiaComito Feb 21, 2026
651829c
Create ci_full.yaml
ClaudiaComito Feb 21, 2026
703bfec
Run ci_full on merge
ClaudiaComito Feb 21, 2026
db2cdde
Update ci_full triggers
ClaudiaComito Feb 21, 2026
cd51b71
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Feb 21, 2026
3a5ab7c
Edits
ClaudiaComito Feb 21, 2026
36acb75
Run ci.yaml on every commit (non-draft)
ClaudiaComito Feb 21, 2026
0300428
exclude torch2.3 with python 3.14
ClaudiaComito Feb 21, 2026
cb56bc1
verbose tests
ClaudiaComito Feb 21, 2026
0345ca7
Debugging
ClaudiaComito Feb 21, 2026
04ed1b3
Debugging test_io
ClaudiaComito Feb 21, 2026
95aadba
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Feb 21, 2026
35c427b
Debugging test_io
ClaudiaComito Feb 21, 2026
094c5b3
timeout options
ClaudiaComito Feb 21, 2026
63842c9
debugging test_load_zarr_groups
ClaudiaComito Feb 21, 2026
fdf1c6b
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Feb 21, 2026
a8981d9
remove timeout
ClaudiaComito Feb 21, 2026
7fffbb9
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Feb 21, 2026
6dd1748
Remove -s option
ClaudiaComito Feb 21, 2026
05495c4
exit at first failure
ClaudiaComito Feb 21, 2026
9f32bda
debugging test_io.py
ClaudiaComito Feb 21, 2026
4521f2a
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Feb 21, 2026
015bee8
remove print statements
ClaudiaComito Feb 21, 2026
bf00791
Remove debugging options
ClaudiaComito Feb 21, 2026
8adf962
Update test_io.py
ClaudiaComito Feb 21, 2026
d0925f0
remove print statements
ClaudiaComito Feb 21, 2026
c6ea05e
Test exit 0
ClaudiaComito Feb 23, 2026
f0ab527
Apply suggestions from code review
ClaudiaComito Feb 23, 2026
2eb2c08
Apply suggestions from code review
ClaudiaComito Feb 23, 2026
ae55418
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Feb 23, 2026
d892328
fix: debugging ci
JuanPedroGHM Feb 24, 2026
085f740
Initial plan
Copilot Feb 24, 2026
96fbcc9
Add 2h timeout to CI jobs and fix test_io race condition
Copilot Feb 24, 2026
118ed76
Merge pull request #2147 from helmholtz-analytics/copilot/sub-pr-2139
brownbaerchen Feb 24, 2026
583c941
Apply suggestions from code review
brownbaerchen Feb 24, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 19 additions & 37 deletions .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
@@ -1,55 +1,33 @@
name: ci

on:
pull_request_review:
types: [submitted]
push:
branches-ignore:
- main
- dependabot/**

jobs:
approved:
if: github.event.review.state == 'approved'
if: github.event.pull_request.draft == false
Comment on lines 10 to +11

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would we not want to know if a draft PR fails the CI? Why is it a draft, maybe exactly because we know it fails. #2137 is an example of a draft PR where I want the CI to run.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
if: github.event.pull_request.draft == false

runs-on: ubuntu-latest
timeout-minutes: 120
strategy:
fail-fast: false
matrix:
py-version:
- '3.10'
- '3.11'
- '3.12'
- '3.13'
- '3.14'
- '3.10' # Oldest supported
- '3.14' # Latest stable
mpi: [ 'openmpi' ]
install-options: [ '.', '.[hdf5,netcdf,pandas,zarr]' ]
pytorch-version:
- 'torch==2.3.1 torchvision==0.18.1 torchaudio==2.3.1'
- 'torch==2.4.1 torchvision==0.19.1 torchaudio==2.4.1'
- 'torch==2.5.1 torchvision==0.20.1 torchaudio==2.5.1'
- 'torch==2.6.0 torchvision==0.21.0 torchaudio==2.6.0'
- 'torch==2.7.1 torchvision==0.22.1 torchaudio==2.7.1'
- 'torch==2.8.0 torchvision==0.23.0 torchaudio==2.8.0'
- 'torch==2.9.1 torchvision==0.24.1 torchaudio==2.9.1'
- 'torch==2.10.0 torchvision==0.25.0 torchaudio==2.10.0'
- 'torch==2.3.1 torchvision==0.18.1 torchaudio==2.3.1' # Oldest supported
- 'torch==2.9.1 torchvision==0.24.1 torchaudio==2.9.1' # JSC Stage 2026
- 'torch==2.10.0 torchvision==0.25.0 torchaudio==2.10.0' # Latest stable
exclude:
- py-version: '3.14'
pytorch-version: 'torch==2.3.1 torchvision==0.18.1 torchaudio==2.3.1'
- py-version: '3.14'
pytorch-version: 'torch==2.4.1 torchvision==0.19.1 torchaudio==2.4.1'
- py-version: '3.14'
pytorch-version: 'torch==2.5.1 torchvision==0.20.1 torchaudio==2.5.1'
- py-version: '3.14'
pytorch-version: 'torch==2.6.0 torchvision==0.21.0 torchaudio==2.6.0'
- py-version: '3.14'
pytorch-version: 'torch==2.7.1 torchvision==0.22.1 torchaudio==2.7.1'
- py-version: '3.14'
pytorch-version: 'torch==2.8.0 torchvision==0.23.0 torchaudio==2.8.0'
- py-version: '3.13'
pytorch-version: 'torch==2.3.1 torchvision==0.18.1 torchaudio==2.3.1'
- py-version: '3.13'
pytorch-version: 'torch==2.4.1 torchvision==0.19.1 torchaudio==2.4.1'
- py-version: '3.13'
pytorch-version: 'torch==2.5.1 torchvision==0.20.1 torchaudio==2.5.1'
- py-version: '3.10'
install-options: '.[hdf5,netcdf,pandas,zarr]'

- py-version: '3.14'
pytorch-version: 'torch==2.3.1 torchvision==0.18.1 torchaudio==2.3.1'

name: Python ${{ matrix.py-version }} with ${{ matrix.pytorch-version }}; options ${{ matrix.install-options }}
steps:
Expand All @@ -60,18 +38,22 @@ jobs:

- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- name: Setup MPI
uses: mpi4py/setup-mpi@3969f247e8fceef153418744f9d9ee6fdaeda29f # v1.2.0
with:
mpi: ${{ matrix.mpi }}

- name: Use Python ${{ matrix.py-version }}
uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 # v6.1.0
with:
python-version: ${{ matrix.py-version }}
architecture: x64

- name: Test
run: |
pip install pytest
pip install ${{ matrix.pytorch-version }} ${{ matrix.install-options }} --extra-index-url https://download.pytorch.org/whl/cpu
mpirun -n 3 pytest heat/
mpirun -n 4 pytest heat/
# use pytest -vv -x for debugging
pytest heat/
mpirun -n 4 pytest -vv heat/
85 changes: 85 additions & 0 deletions .github/workflows/ci_full.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
name: ci_full

on:
push:
branches:
- main
Comment thread
ClaudiaComito marked this conversation as resolved.
- stable
paths:
- 'heat/**'
- 'pyproject.toml'
- '.github/workflows/ci_full.yaml'

jobs:
full_matrix_test:
runs-on: ubuntu-latest
timeout-minutes: 120
strategy:
fail-fast: false
matrix:
py-version:
- '3.10'
- '3.11'
- '3.12'
- '3.13'
- '3.14'
mpi: [ 'openmpi' ]
install-options: [ '.', '.[hdf5,netcdf,pandas,zarr]' ]
pytorch-version:
- 'torch==2.3.1 torchvision==0.18.1 torchaudio==2.3.1'
- 'torch==2.4.1 torchvision==0.19.1 torchaudio==2.4.1'
- 'torch==2.5.1 torchvision==0.20.1 torchaudio==2.5.1'
- 'torch==2.6.0 torchvision==0.21.0 torchaudio==2.6.0'
- 'torch==2.7.1 torchvision==0.22.1 torchaudio==2.7.1'
- 'torch==2.8.0 torchvision==0.23.0 torchaudio==2.8.0'
- 'torch==2.9.1 torchvision==0.24.1 torchaudio==2.9.1'
- 'torch==2.10.0 torchvision==0.25.0 torchaudio==2.10.0'
exclude:
- py-version: '3.14'
pytorch-version: 'torch==2.3.1 torchvision==0.18.1 torchaudio==2.3.1'
- py-version: '3.14'
pytorch-version: 'torch==2.4.1 torchvision==0.19.1 torchaudio==2.4.1'
- py-version: '3.14'
pytorch-version: 'torch==2.5.1 torchvision==0.20.1 torchaudio==2.5.1'
- py-version: '3.14'
pytorch-version: 'torch==2.6.0 torchvision==0.21.0 torchaudio==2.6.0'
- py-version: '3.14'
pytorch-version: 'torch==2.7.1 torchvision==0.22.1 torchaudio==2.7.1'
- py-version: '3.14'
pytorch-version: 'torch==2.8.0 torchvision==0.23.0 torchaudio==2.8.0'
- py-version: '3.13'
pytorch-version: 'torch==2.3.1 torchvision==0.18.1 torchaudio==2.3.1'
- py-version: '3.13'
pytorch-version: 'torch==2.4.1 torchvision==0.19.1 torchaudio==2.4.1'
- py-version: '3.13'
pytorch-version: 'torch==2.5.1 torchvision==0.20.1 torchaudio==2.5.1'
- py-version: '3.10'
install-options: '.[hdf5,netcdf,pandas,zarr]'

name: Python ${{ matrix.py-version }} with ${{ matrix.pytorch-version }}; options ${{ matrix.install-options }}
steps:
- name: Harden Runner
uses: step-security/harden-runner@5ef0c079ce82195b2a36a210272d6b661572d83e # v2.14.2
with:
egress-policy: audit

- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- name: Setup MPI
uses: mpi4py/setup-mpi@3969f247e8fceef153418744f9d9ee6fdaeda29f # v1.2.0
with:
mpi: ${{ matrix.mpi }}

- name: Use Python ${{ matrix.py-version }}
uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 # v6.1.0
with:
python-version: ${{ matrix.py-version }}
architecture: x64

- name: Test
run: |
pip install pytest
pip install ${{ matrix.pytorch-version }} ${{ matrix.install-options }} --extra-index-url https://download.pytorch.org/whl/cpu
mpirun -n 3 pytest heat/
Comment thread
brownbaerchen marked this conversation as resolved.
mpirun -n 4 pytest heat/
2 changes: 1 addition & 1 deletion .readthedocs.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ build:
# If grep failed to find a match (exit code 1), then exit with 18
if [ $? -eq 1 ]; then
echo "No relevant changes found. Skipping build."
exit 18
exit 0
fi
fi

Expand Down
5 changes: 4 additions & 1 deletion heat/core/tests/test_io.py
Original file line number Diff line number Diff line change
Expand Up @@ -990,6 +990,8 @@ def test_load_zarr_group(self):

import zarr

ht.MPI_WORLD.Barrier()

# Write out a nested Zarr store
original_data = np.arange(np.prod(self.ZARR_SHAPE)).reshape(self.ZARR_SHAPE)
nested_group_name = "MAIN_0"
Expand Down Expand Up @@ -1027,7 +1029,6 @@ def test_load_zarr_group(self):
self.assertTrue(np.array_equal(ht_tensor_kw.numpy(), original_data))

ht.MPI_WORLD.Barrier()

# test loading with wildcard
num_chunks = self.comm.size * 2 + 1
if self.comm.size > 3:
Expand Down Expand Up @@ -1118,6 +1119,8 @@ def test_load_zarr_group(self):
with self.assertRaises(FileNotFoundError):
test = ht.load(self.ZARR_OUT_PATH, variable="NONEXSISTENT_CHUNK_*_SPLIT0/DATA", split=0)

ht.MPI_WORLD.Barrier()

def test_load_zarr_slice(self):
if not ht.io.supports_zarr():
self.skipTest("Requires zarr")
Expand Down