Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
72 commits
Select commit Hold shift + click to select a range
ebb65cc
Initial plan
Copilot Nov 24, 2025
30f22e6
Update Pillow version constraint to support 10.x, 11.x, and 12.x
Copilot Nov 24, 2025
5d8b065
Remove test file with sys.path manipulation issues
Copilot Nov 24, 2025
656a3f8
Update Pillow constraint in ci/recipe/meta.yaml to match pyproject.toml
Copilot Nov 24, 2025
94219e2
Bump actions/checkout from 5 to 6
dependabot[bot] Nov 24, 2025
416e6be
Merge pull request #1125 from MPAS-Dev/dependabot/github_actions/acti…
xylar Nov 24, 2025
eea5436
Merge pull request #1124 from MPAS-Dev/copilot/support-pillow-version…
xylar Nov 24, 2025
f955620
Add Python 3.14 support to CI and classifiers
Copilot Nov 24, 2025
5726aeb
Merge pull request #1122 from MPAS-Dev/copilot/add-python-3-14-testing
xylar Nov 24, 2025
1c6a244
Change error to warning if timeSeries range not present in history files
cbegeman Nov 25, 2025
9da44b7
Allow the streamfunction task to read in moc from cached file whether…
cbegeman Nov 30, 2025
35648cc
Add a small failsafe for nino index axis limits
cbegeman Dec 1, 2025
cda2fe1
Fix update_time_bounds_from_file_names
cbegeman Dec 1, 2025
9cf503a
Merge pull request #1126 from cbegeman/do-not-require-tseries-files-i…
xylar Dec 1, 2025
10dd90f
Drop python 3.14 support for now
xylar Dec 5, 2025
f7ad851
Drop python 3.14 from trove classifiers
xylar Dec 5, 2025
019fea8
Merge pull request #1129 from xylar/drop-python-3.14-for-now
xylar Dec 5, 2025
236c5fa
Check for transport output before loading input files
cbegeman Dec 4, 2025
3f7300a
Merge pull request #1128 from cbegeman/do-not-require-tseries-transpo…
xylar Dec 5, 2025
5f8475d
Concatenate cache and new data for sea ice time series
cbegeman Dec 8, 2025
e8e2b13
Mask data time entries using isel
cbegeman Dec 8, 2025
e5cb4d3
Merge pull request #1130 from cbegeman/do-not-require-tseries-seaice-…
xylar Dec 9, 2025
9ebcff9
Revert "Drop python 3.14 support for now"
xylar Dec 5, 2025
5c2075d
Revert "Drop python 3.14 from trove classifiers"
xylar Dec 5, 2025
a4c016a
Fix multiprocessing pickling issue in python 3.14
xylar Dec 3, 2025
64cea42
Don't pickle runAfterTasks and subtasks
xylar Dec 3, 2025
808d768
Fix deprecated importlib.resources.contents
xylar Dec 3, 2025
d1508a8
Detect python versions in dev and unified suites
xylar Dec 3, 2025
8bc8fa8
Fix clearing of namelists and streams
xylar Dec 3, 2025
441db3f
Fixes based on code review
xylar Dec 3, 2025
dbbe7ac
Store cp and rho for computing OHC anomalies
xylar Dec 3, 2025
2af40c0
Merge pull request #1127 from xylar/fix-multiprocessing-for-python-3.14
xylar Dec 9, 2025
b3dd117
Bump actions/cache from 4 to 5
dependabot[bot] Dec 15, 2025
02bd644
Merge pull request #1133 from MPAS-Dev/dependabot/github_actions/acti…
xylar Dec 15, 2025
3a75889
Fix control run support for El Nino 3.4 Index
xylar Jan 14, 2026
fcc4dab
Merge pull request #1134 from xylar/fix-el-nino-main-vs-control
xylar Jan 14, 2026
cb0a9c2
Fix time masking in sea-ice time series
xylar Feb 4, 2026
3f9d93f
Fix updating z coord of remapped transects
xylar Feb 4, 2026
ea6b998
Merge pull request #1136 from xylar/fix-sea-ice-time-series
xylar Feb 4, 2026
a80d719
Merge pull request #1137 from xylar/fix-remap-transects
xylar Feb 4, 2026
d5b10e2
Fix spacing in global plots from main vs. control runs
xylar Feb 4, 2026
e6211fc
Give statistic test more room
xylar Feb 4, 2026
b43aca7
Fix units for mass flux plots
xylar Feb 4, 2026
83cb090
Update suite to main run to year 8, ctrl to year 10
xylar Feb 4, 2026
4d01e34
Skip hovmoller in main_vs_ctrl
xylar Feb 4, 2026
1bac984
Merge pull request #1138 from xylar/fix-control-global-subtitle-spacing
xylar Feb 4, 2026
9826dac
Update conda recipe to v1 form
xylar Mar 30, 2026
1adf97c
Add pixi dev workflow
xylar Mar 30, 2026
d69029d
Update CI to use pixi
xylar Mar 30, 2026
ea0adf2
Update the docs for the new pixi dev workflow
xylar Mar 30, 2026
9b397ac
fixup! Update CI to use pixi
xylar Mar 30, 2026
9052d27
Reorganize test suite
xylar Mar 30, 2026
706cc05
Merge pull request #1139 from xylar/move-to-v1-recipe
xylar Mar 30, 2026
f5b0ce7
Fix get_editable_install_dir for non-editable install
xylar Mar 30, 2026
a910bf7
Add a unit test to make sure the fix works
xylar Mar 30, 2026
1728a5b
Bump prefix-dev/setup-pixi from 0.9.3 to 0.9.4
dependabot[bot] Mar 30, 2026
a2d7962
Merge pull request #1141 from MPAS-Dev/dependabot/github_actions/pref…
xylar Mar 30, 2026
0eb9ef4
Merge branch 'xylar/fix-non-editable-install' into develop
xylar Mar 30, 2026
2aa460a
Fix recipe dependencies
xylar Apr 1, 2026
1c264e9
Merge pull request #1142 from xylar/fix-recipe-deps
xylar Apr 1, 2026
e15e2a7
Bump prefix-dev/setup-pixi from 0.9.4 to 0.9.5
dependabot[bot] Apr 6, 2026
9179071
Merge pull request #1143 from MPAS-Dev/dependabot/github_actions/pref…
xylar Apr 7, 2026
1b85de7
Fix test suite for e3sm-unified
xylar Apr 9, 2026
526463d
Merge pull request #1144 from xylar/fix-test-suite
xylar Apr 10, 2026
376d3aa
Put symlinks for ncclimo in unique directories
xylar Apr 9, 2026
a406df7
Add a test to ensure that only the required data gets linked
xylar Apr 9, 2026
fbc9512
Skip nco 5.3.7
xylar Apr 10, 2026
fbb2953
Merge pull request #1146 from xylar/fix-ncclimo-file-list
xylar Apr 11, 2026
796f9f9
Fix copying xarray datasets
xylar Apr 28, 2026
0924926
Merge pull request #1147 from xylar/fix-xarray-dataset-copies
xylar Apr 29, 2026
d911be9
Update to v1.15.0
xylar Mar 30, 2026
f8f8a5c
Merge pull request #1148 from xylar/update-to-1.15.0
xylar May 12, 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
111 changes: 69 additions & 42 deletions .github/workflows/build_workflow.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,24 @@ jobs:
name: test mpas_analysis - python ${{ matrix.python-version }}
runs-on: ubuntu-latest
timeout-minutes: 20
defaults:
run:
shell: bash -l {0}
strategy:
matrix:
python-version: ["3.10", "3.11", "3.12", "3.13"]
include:
- python-version: "3.10"
pixi-environment: py310
variant-file: ci/python3.10.yaml
- python-version: "3.11"
pixi-environment: py311
variant-file: ci/python3.11.yaml
- python-version: "3.12"
pixi-environment: py312
variant-file: ci/python3.12.yaml
- python-version: "3.13"
pixi-environment: py313
variant-file: ci/python3.13.yaml
- python-version: "3.14"
pixi-environment: py314
variant-file: ci/python3.14.yaml
fail-fast: false
steps:
- id: skip_check
Expand All @@ -37,53 +49,68 @@ jobs:
paths_ignore: ${{ env.PATHS_IGNORE }}

- if: ${{ steps.skip_check.outputs.should_skip != 'true' }}
uses: actions/checkout@v5
uses: actions/checkout@v6

- if: ${{ steps.skip_check.outputs.should_skip != 'true' }}
name: Cache Conda
uses: actions/cache@v4
env:
# Increase this value to reset cache if conda-dev-spec.template has not changed in the workflow
CACHE_NUMBER: 0
name: Set up Pixi
uses: prefix-dev/setup-pixi@v0.9.5
with:
path: ~/conda_pkgs_dir_py${{ matrix.python-version }}
key:
${{ runner.os }}-${{ matrix.python-version }}-conda-${{ env.CACHE_NUMBER }}-${{
hashFiles('dev-spec.txt,pyproject.toml') }}

- if: ${{ steps.skip_check.outputs.should_skip != 'true' }}
name: Set up Conda Environment
uses: mamba-org/setup-micromamba@v2
with:
environment-name: mpas_analysis_dev
init-shell: bash
condarc: |
channel_priority: strict
channels:
- conda-forge
create-args: >-
python=${{ matrix.python-version }}

- if: ${{ steps.skip_check.outputs.should_skip != 'true' }}
name: Install mpas_analysis
run: |
conda install -y --file dev-spec.txt \
python=${{ matrix.python-version }}
python -m pip install --no-deps --no-build-isolation -vv -e .
environments: ${{ matrix.pixi-environment }}

- if: ${{ steps.skip_check.outputs.should_skip != 'true' }}
name: Run Tests
env:
CHECK_IMAGES: False
CHECK_IMAGES: "False"
run: |
set -e
pip check
pytest --pyargs mpas_analysis
mpas_analysis --help
download_analysis_data --help
pixi run -e ${{ matrix.pixi-environment }} python -m pip check
pixi run -e ${{ matrix.pixi-environment }} pytest --pyargs mpas_analysis
pixi run -e ${{ matrix.pixi-environment }} mpas_analysis --help
pixi run -e ${{ matrix.pixi-environment }} download_analysis_data --help

- if: ${{ steps.skip_check.outputs.should_skip != 'true' }}
- if: ${{ steps.skip_check.outputs.should_skip != 'true' && matrix.python-version == '3.14' }}
name: Build Sphinx Docs
run: |
cd docs
DOCS_VERSION=test make versioned-html
pixi run -e ${{ matrix.pixi-environment }} bash -lc '
cd docs
DOCS_VERSION=test make versioned-html
'

package:
name: build package - python ${{ matrix.python-version }}
runs-on: ubuntu-latest
timeout-minutes: 30
strategy:
matrix:
include:
- python-version: "3.10"
pixi-environment: py310
variant-file: ci/python3.10.yaml
- python-version: "3.11"
pixi-environment: py311
variant-file: ci/python3.11.yaml
- python-version: "3.12"
pixi-environment: py312
variant-file: ci/python3.12.yaml
- python-version: "3.13"
pixi-environment: py313
variant-file: ci/python3.13.yaml
- python-version: "3.14"
pixi-environment: py314
variant-file: ci/python3.14.yaml
fail-fast: false
steps:
- uses: actions/checkout@v6

- name: Set up Pixi
uses: prefix-dev/setup-pixi@v0.9.5
with:
environments: ${{ matrix.pixi-environment }}

- name: Build Conda Package with rattler-build
run: |
pixi run -e ${{ matrix.pixi-environment }} \
rattler-build build \
-m ${{ matrix.variant-file }} \
-r ci/recipe/recipe.yaml \
--output-dir rattler-build-output
100 changes: 35 additions & 65 deletions .github/workflows/docs_workflow.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,98 +10,68 @@ on:
types: [published]

env:
PYTHON_VERSION: "3.13"
PYTHON_VERSION: "3.14"

jobs:
publish-docs:
runs-on: ubuntu-latest
defaults:
run:
shell: bash -l {0}
timeout-minutes: 20
steps:
- uses: actions/checkout@v5
- uses: actions/checkout@v6
with:
persist-credentials: false
fetch-depth: 0

- name: Cache Conda
uses: actions/cache@v4
env:
# Increase this value to reset cache if deploy/conda-dev-spec.template has not changed in the workflow
CACHE_NUMBER: 0
- name: Set up Pixi
uses: prefix-dev/setup-pixi@v0.9.5
with:
path: ~/conda_pkgs_dir
key: ${{ runner.os }}-conda-${{ env.CACHE_NUMBER }}-${{
hashFiles('dev-spec.txt') }}

- if: ${{ steps.skip_check.outputs.should_skip != 'true' }}
name: Set up Conda Environment
uses: mamba-org/setup-micromamba@v2
with:
environment-name: mpas_analysis_dev
init-shell: bash
condarc: |
channel_priority: strict
channels:
- conda-forge
create-args: >-
python=${{ env.PYTHON_VERSION }}

- if: ${{ steps.skip_check.outputs.should_skip != 'true' }}
name: Install mpas_analysis
run: |
git config --global url."https://github.com/".insteadOf "git@github.com:"
conda install -y --file dev-spec.txt \
python=${{ env.PYTHON_VERSION }}
python -m pip install -vv --no-deps --no-build-isolation -e .
environments: py314

- name: Build Sphinx Docs
run: |
set -e
pip check
mpas_analysis sync diags --help
cd docs
DOCS_VERSION=${{ github.ref_name }} make versioned-html
git config --global url."https://github.com/".insteadOf "git@github.com:"
pixi run -e py314 python -m pip check
pixi run -e py314 mpas_analysis sync diags --help
pixi run -e py314 bash -lc '
cd docs
DOCS_VERSION=${{ github.ref_name }} make versioned-html
'

- name: Copy Docs and Commit
run: |
set -e
pip check
mpas_analysis sync diags --help
cd docs
# gh-pages branch must already exist
git clone https://github.com/MPAS-Dev/MPAS-Analysis.git --branch gh-pages --single-branch gh-pages
pixi run -e py314 bash -lc '
cd docs
# gh-pages branch must already exist
git clone https://github.com/MPAS-Dev/MPAS-Analysis.git --branch gh-pages --single-branch gh-pages

# Only replace docs in a directory with the destination branch name with latest changes. Docs for
# releases should be untouched.
rm -rf gh-pages/${{ github.ref_name }}
# Only replace docs in a directory with the destination branch name with latest changes. Docs for
# releases should be untouched.
rm -rf gh-pages/${{ github.ref_name }}

# don't clobber existing release versions (in case we retroactively fixed them)
cp -r _build/html/${{ github.ref_name }} gh-pages/
# do not clobber existing release versions if they were updated manually
cp -r _build/html/${{ github.ref_name }} gh-pages/

mkdir -p gh-pages/shared
cp shared/version-switcher.js gh-pages/shared/version-switcher.js
mkdir -p gh-pages/shared
cp shared/version-switcher.js gh-pages/shared/version-switcher.js

# Update the list of versions with all versions in the gh-pages directory.
python generate_versions_json.py
# Update the list of versions with all versions in the gh-pages directory.
python generate_versions_json.py

cd gh-pages
touch .nojekyll
printf "<meta http-equiv=\"refresh\" content=\"0; url=./develop/index.html\" />" > index.html
git config --local user.email "41898282+github-actions[bot]@users.noreply.github.com"
git config --local user.name "github-actions[bot]"
git add .
git commit -m "Update documentation" -a || true
'

# Make sure we're in the gh-pages directory.
cd gh-pages
# Create `.nojekyll` (if it doesn't already exist) for proper GH Pages configuration.
touch .nojekyll
# Add `index.html` to point to the `develop` branch automatically.
printf '<meta http-equiv="refresh" content="0; url=./develop/index.html" />' > index.html
# Configure git using GitHub Actions credentials.
git config --local user.email "41898282+github-actions[bot]@users.noreply.github.com"
git config --local user.name "github-actions[bot]"
# The second command will fail if no changes were present, so we ignore it
git add .
git commit -m "Update documentation" -a || true
- name: Push Changes
uses: ad-m/github-push-action@master
with:
branch: gh-pages
directory: docs/gh-pages
github_token: ${{ secrets.GITHUB_TOKEN }}
force: true

7 changes: 6 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,8 @@ ENV/
.ropeproject

.DS_Store
.pixi/
pixi.lock

# test suites
/anvil_test_suite/
Expand All @@ -101,4 +103,7 @@ ENV/
/compy_test_suite/

# vscode settings
.vscode/
.vscode/

# codex
.codex
2 changes: 1 addition & 1 deletion ci/python3.10.yaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
channel_sources:
- conda-forge,defaults
- conda-forge
pin_run_as_build:
python:
min_pin: x.x
Expand Down
2 changes: 1 addition & 1 deletion ci/python3.11.yaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
channel_sources:
- conda-forge,defaults
- conda-forge
pin_run_as_build:
python:
min_pin: x.x
Expand Down
2 changes: 1 addition & 1 deletion ci/python3.12.yaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
channel_sources:
- conda-forge,defaults
- conda-forge
pin_run_as_build:
python:
min_pin: x.x
Expand Down
2 changes: 1 addition & 1 deletion ci/python3.13.yaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
channel_sources:
- conda-forge,defaults
- conda-forge
pin_run_as_build:
python:
min_pin: x.x
Expand Down
8 changes: 8 additions & 0 deletions ci/python3.14.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
channel_sources:
- conda-forge
pin_run_as_build:
python:
min_pin: x.x
max_pin: x.x
python:
- 3.14.* *_cp314
Loading
Loading