File: ci.yaml

package info (click to toggle)
satpy 0.59.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 39,296 kB
  • sloc: python: 93,630; xml: 3,343; makefile: 146; javascript: 23
file content (153 lines) | stat: -rw-r--r-- 5,740 bytes parent folder | download
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