1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153
|
name: CI
# https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#concurrency
# https://docs.github.com/en/developers/webhooks-and-events/events/github-event-types#pullrequestevent
concurrency:
group: ${{ github.workflow }}-${{ github.event.number || github.event.ref }}-${{ github.event.type }}
cancel-in-progress: true
on: [push, pull_request]
env:
CACHE_NUMBER: 0
jobs:
test:
runs-on: ${{ matrix.os }}
continue-on-error: ${{ matrix.experimental }}
strategy:
fail-fast: true
matrix:
os: ["windows-latest", "ubuntu-latest", "macos-latest"]
python-version: ["3.10", "3.11", "3.12"]
experimental: [false]
include:
- python-version: "3.12"
os: "ubuntu-latest"
experimental: true
env:
PYTHON_VERSION: ${{ matrix.python-version }}
OS: ${{ matrix.os }}
UNSTABLE: ${{ matrix.experimental }}
ACTIONS_ALLOW_UNSECURE_COMMANDS: true
steps:
- name: Checkout source
uses: actions/checkout@v5
- name: Setup Conda Environment
uses: conda-incubator/setup-miniconda@v3
with:
miniforge-version: latest
python-version: ${{ matrix.python-version }}
activate-environment: test-environment
channels: conda-forge
conda-remove-defaults: true
channel-priority: strict
- name: Set cache environment variables
shell: bash -l {0}
run: |
echo "DATE=$(date +'%Y%m%d')" >> $GITHUB_ENV
CONDA_PREFIX=$(python -c "import sys; print(sys.prefix)")
echo "CONDA_PREFIX=$CONDA_PREFIX" >> $GITHUB_ENV
- uses: actions/cache@v4
with:
path: ${{ env.CONDA_PREFIX }}
key: ${{ matrix.os }}-${{matrix.python-version}}-conda-${{ hashFiles('continuous_integration/environment.yaml') }}-${{ env.DATE }}-${{matrix.experimental}}-${{ env.CACHE_NUMBER }}
id: cache
- name: Update environment
run: mamba env update -n test-environment -f continuous_integration/environment.yaml
if: steps.cache.outputs.cache-hit != 'true'
- name: Install unstable dependencies
if: matrix.experimental == true
shell: bash -l {0}
# Install pykdtree with --no-build-isolation so it builds with numpy 2.0
# We must get LD_PRELOAD for stdlibc++ or else the manylinux wheels
# may break the conda-forge libraries trying to use newer glibc versions
# NOTE: Many of the packages removed and then reinstalled below are to avoid
# compatibility issues with numpy 2. When conda-forge has numpy 2 available
# this shouldn't be needed.
run: |
python -m pip install versioneer extension-helpers setuptools-scm configobj pkgconfig hatchling hatch-vcs
python -m pip install \
--index-url https://pypi.anaconda.org/scientific-python-nightly-wheels/simple/ \
--trusted-host pypi.anaconda.org \
--only-binary ":all:" \
--no-deps --pre --upgrade \
matplotlib \
numpy \
pandas \
scipy
conda remove --force-remove -y pykdtree pyresample python-geotiepoints pyhdf netcdf4 h5py cftime astropy pyerfa || true
python -m pip install --upgrade --no-deps --pre --no-build-isolation \
pyerfa \
git+https://github.com/storpipfugl/pykdtree \
git+https://github.com/pytroll/pyresample \
git+https://github.com/pytroll/trollimage \
git+https://github.com/pytroll/python-geotiepoints \
git+https://github.com/fhs/pyhdf \
git+https://github.com/h5py/h5py \
git+https://github.com/h5netcdf/h5netcdf \
git+https://github.com/Unidata/netcdf4-python \
git+https://github.com/dask/dask \
git+https://github.com/dask/distributed \
git+https://github.com/Unidata/cftime \
git+https://github.com/rasterio/rasterio \
git+https://github.com/pydata/bottleneck \
git+https://github.com/pydata/xarray \
git+https://github.com/shapely/shapely \
git+https://github.com/astropy/astropy
LD_PRELOAD=$(python -c "import sys; print(sys.prefix)")/lib/libstdc++.so
echo "LD_PRELOAD=${LD_PRELOAD}" >> $GITHUB_ENV
- name: Install satpy
shell: bash -l {0}
run: |
python -m pip install --no-deps -e .
- name: Run unit tests
shell: bash -l {0}
run: |
export LD_PRELOAD=${{ env.LD_PRELOAD }};
pytest -n auto --cov=satpy satpy/tests --cov-report=xml --cov-report=
- name: Upload unittest coverage to Codecov
uses: codecov/codecov-action@v5
with:
flags: unittests
files: ./coverage.xml
env_vars: OS,PYTHON_VERSION,UNSTABLE
- name: Coveralls Parallel
uses: coverallsapp/github-action@v2
with:
flag-name: run-${{ matrix.test_number }}
parallel: true
if: runner.os == 'Linux'
- name: Run behaviour tests
shell: bash -l {0}
run: |
export LD_PRELOAD=${{ env.LD_PRELOAD }};
coverage run --source=satpy -m behave satpy/tests/features --tags=-download
coverage xml
- name: Upload behaviour test coverage to Codecov
uses: codecov/codecov-action@v5
with:
flags: behaviourtests
files: ./coverage.xml
env_vars: OS,PYTHON_VERSION,UNSTABLE
coveralls:
needs: [test]
runs-on: ubuntu-latest
steps:
- name: Coveralls Finished
uses: coverallsapp/github-action@v2
with:
parallel-finished: true
|