Skip to content

CI

CI #558

Workflow file for this run

name: CI
env:
micromamba_version: 2
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
release:
types:
- created
schedule:
- cron: "0 0 * * *" # Daily “At 00:00” UTC
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
lint:
name: lint and style checks
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.13"
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install black black[jupyter] ruff
- name: Black style check
run: |
black --check .
- name: Lint with ruff
run: |
ruff check .
build_0:
name: wradlib unit tests - linux
runs-on: ubuntu-latest
needs: [lint]
defaults:
run:
shell: bash -l {0}
env:
WRADLIB_DATA: ./wradlib-data
CONDA_ENV_FILE: ci/requirements/unittests.yml
strategy:
fail-fast: false
matrix:
python-version: ["3.10", "3.13"]
numpy-version: ["1", "2"]
exclude:
- python-version: "3.13"
numpy-version: "1"
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Install micromamba environment
uses: mamba-org/setup-micromamba@v2
with:
environment-name: wradlib-tests
environment-file: ${{env.CONDA_ENV_FILE}}
cache-environment: true
cache-environment-key: "${{runner.os}}-${{runner.arch}}-py${{env.PYTHON_VERSION}}-np${{matrix.numpy_version}}-${{env.TODAY}}-${{hashFiles(env.CONDA_ENV_FILE)}}"
create-args: >-
python=${{matrix.python-version}}
numpy=${{matrix.numpy-version}}
- name: Install wradlib
run: |
python -m pip install . --no-deps
- name: Install wradlib-data
run: |
python -m pip install git https://github.com/wradlib/wradlib-data@pooch
mkdir ./wradlib-data
- name: Version Info
run: |
python -c "import wradlib; print(wradlib.version.version)"
python -c "import wradlib; print(wradlib.show_versions())"
- name: Test with pytest
env:
WRADLIB_EARTHDATA_BEARER_TOKEN: ${{ secrets.WRADLIB_EARTHDATA_BEARER_TOKEN }}
run: |
echo $WRADLIB_DATA
export WRADLIB_DATA=`realpath $WRADLIB_DATA`
pytest -n auto --dist loadfile --verbose --doctest-modules --doctest-plus --durations=15 --cov-report xml:coverage.xml --cov=wradlib --pyargs wradlib
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v5
with:
files: ./coverage.xml
flags: unittests
env_vars: RUNNER_OS,PYTHON_VERSION
name: codecov-gha
token: ${{ secrets.CODECOV_TOKEN }}
fail_ci_if_error: false
build_0a:
name: wradlib unit tests - linux - no GDAL
runs-on: ubuntu-latest
needs: [ lint ]
defaults:
run:
shell: bash -l {0}
env:
WRADLIB_DATA: ./wradlib-data
CONDA_ENV_FILE: ci/requirements/unittests.yml
strategy:
fail-fast: false
matrix:
python-version: [ "3.13" ]
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Install micromamba environment
uses: mamba-org/setup-micromamba@v2
with:
environment-name: wradlib-tests
environment-file: ${{env.CONDA_ENV_FILE}}
cache-environment: true
cache-environment-key: "${{runner.os}}-${{runner.arch}}-py${{env.PYTHON_VERSION}}-${{env.TODAY}}-${{hashFiles(env.CONDA_ENV_FILE)}}"
create-args: >-
python=${{matrix.python-version}}
- name: Remove GDAL
run: |
micromamba remove --force --offline gdal
- name: Install wradlib
run: |
python -m pip install . --no-deps
- name: Install wradlib-data
run: |
python -m pip install git https://github.com/wradlib/wradlib-data@pooch
mkdir ./wradlib-data
- name: Version Info
run: |
python -c "import wradlib; print(wradlib.version.version)"
python -c "import wradlib; print(wradlib.show_versions())"
- name: Test with pytest
env:
WRADLIB_EARTHDATA_BEARER_TOKEN: ${{ secrets.WRADLIB_EARTHDATA_BEARER_TOKEN }}
run: |
echo $WRADLIB_DATA
export WRADLIB_DATA=`realpath $WRADLIB_DATA`
pytest -n auto --dist loadfile --verbose --doctest-modules --doctest-plus --durations=15 --cov-report xml:coverage.xml --cov=wradlib --pyargs wradlib
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v5
with:
files: ./coverage.xml
flags: unittests
env_vars: RUNNER_OS,PYTHON_VERSION
name: codecov-gha
token: ${{ secrets.CODECOV_TOKEN }}
fail_ci_if_error: false
build_1:
name: wradlib unit tests - macosx
runs-on: macos-latest
needs: [lint]
defaults:
run:
shell: bash -l {0}
env:
WRADLIB_DATA: ./wradlib-data
CONDA_ENV_FILE: ci/requirements/unittests.yml
strategy:
fail-fast: false
matrix:
python-version: ["3.13"]
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Install micromamba environment
uses: mamba-org/setup-micromamba@v2
with:
environment-name: wradlib-tests
environment-file: ${{env.CONDA_ENV_FILE}}
cache-environment: true
cache-environment-key: "${{runner.os}}-${{runner.arch}}-py${{env.PYTHON_VERSION}}-${{env.TODAY}}-${{hashFiles(env.CONDA_ENV_FILE)}}"
create-args: >-
python=${{matrix.python-version}}
- name: Install wradlib
run: |
cat "$HOME/.bash_profile"
python -m pip install . --no-deps
- name: Install wradlib-data
run: |
python -m pip install git https://github.com/wradlib/wradlib-data@pooch
mkdir ./wradlib-data
- name: Version Info
run: |
python -c "import wradlib; print(wradlib.version.version)"
python -c "import wradlib; print(wradlib.show_versions())"
- name: Test with pytest
env:
WRADLIB_EARTHDATA_BEARER_TOKEN: ${{ secrets.WRADLIB_EARTHDATA_BEARER_TOKEN }}
run: |
echo $WRADLIB_DATA
export WRADLIB_DATA=`python -c "import os, sys; print(os.path.realpath(sys.argv[1]))" $WRADLIB_DATA`
pytest -n auto --verbose --doctest-modules --doctest-plus --durations=15 --cov-report xml:coverage.xml --cov=wradlib --pyargs wradlib
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v5
with:
files: ./coverage.xml
flags: unittests
env_vars: RUNNER_OS,PYTHON_VERSION
name: codecov-gha
token: ${{ secrets.CODECOV_TOKEN }}
fail_ci_if_error: false
build_2:
name: wradlib unit tests - windows
runs-on: windows-latest
needs: [lint]
defaults:
run:
shell: powershell
env:
WRADLIB_DATA: ./wradlib-data
CONDA_ENV_FILE: ci/requirements/unittests.yml
strategy:
fail-fast: false
matrix:
python-version: ["3.13"]
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Install micromamba environment
uses: mamba-org/setup-micromamba@v2
with:
init-shell: powershell
environment-name: wradlib-tests
environment-file: ${{env.CONDA_ENV_FILE}}
cache-environment: true
cache-environment-key: "${{runner.os}}-${{runner.arch}}-py${{env.PYTHON_VERSION}}-${{env.TODAY}}-${{hashFiles(env.CONDA_ENV_FILE)}}"
create-args: >-
python=${{matrix.python-version}}
- name: Install wradlib
run: |
python -m pip install . --no-deps
- name: Install wradlib-data
run: |
python -m pip install git https://github.com/wradlib/wradlib-data@pooch
mkdir ./wradlib-data
- name: Version Info
run: |
python -c "import wradlib; print(wradlib.version.version)"
python -c "import wradlib; print(wradlib.show_versions())"
- name: Test with pytest
env:
WRADLIB_EARTHDATA_BEARER_TOKEN: ${{ secrets.WRADLIB_EARTHDATA_BEARER_TOKEN }}
run: |
pytest --verbose --doctest-modules --doctest-plus --durations=15 --cov-report xml:coverage.xml --cov=wradlib --pyargs wradlib
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v5
with:
files: ./coverage.xml
flags: unittests
env_vars: RUNNER_OS,PYTHON_VERSION
name: codecov-gha
token: ${{ secrets.CODECOV_TOKEN }}
fail_ci_if_error: false
build_3:
name: wradlib notebook tests
runs-on: ubuntu-20.04
needs: [lint]
continue-on-error: true
defaults:
run:
shell: bash -l {0}
env:
WRADLIB_DATA: ./wradlib-data
CONDA_ENV_FILE: ci/requirements/notebooktests.yml
strategy:
fail-fast: false
matrix:
python-version: ["3.12"]
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Install micromamba environment
uses: mamba-org/setup-micromamba@v2
with:
environment-name: wradlib-tests
environment-file: ${{env.CONDA_ENV_FILE}}
cache-environment: true
cache-environment-key: "${{runner.os}}-${{runner.arch}}-py${{env.PYTHON_VERSION}}-${{env.TODAY}}-${{hashFiles(env.CONDA_ENV_FILE)}}"
create-args: >-
python=${{matrix.python-version}}
- name: Install wradlib
run: |
echo "WRADLIB_TAG=`git name-rev --name-only --tags HEAD`" >> $GITHUB_ENV
python -m pip install . --no-deps
- name: Install wradlib-data
run: |
python -m pip install git https://github.com/wradlib/wradlib-data@pooch
mkdir ./wradlib-data
- name: Clone wradlib-notebooks
run: |
git clone --depth 1 https://github.com/wradlib/wradlib-notebooks.git notebooks
cd notebooks
echo "NOTEBOOKS_COMMIT=`git rev-parse HEAD`" >> $GITHUB_ENV
- name: Version Info
run: |
echo "WRADLIB_TAG=`git name-rev --name-only --tags HEAD`" >> $GITHUB_ENV
echo "WRADLIB_VERSION=`python -c "import wradlib; print(wradlib.version.version)"`"
python -c "import wradlib; print(wradlib.version.version)"
python -c "import wradlib; print(wradlib.show_versions())"
- name: Test with pytest
env:
WRADLIB_EARTHDATA_BEARER_TOKEN: ${{ secrets.WRADLIB_EARTHDATA_BEARER_TOKEN }}
run: |
echo $WRADLIB_DATA
export WRADLIB_DATA=`realpath $WRADLIB_DATA`
pytest -n auto --verbose --durations=15 --cov-report xml:coverage.xml --cov=wradlib --pyargs notebooks
- name: Commit files
if: github.event_name == 'push' || github.event_name == 'release'
run: |
cd notebooks
git config --global user.email "[email protected]"
git config --global user.name "wradlib-docs-bot"
git checkout --orphan render
git add --all .
git commit -m "Rendering at wradlib-notebooks commit $NOTEBOOKS_COMMIT for wradlib version $WRADLIB_VERSION"
- name: Push changes
if: github.event_name == 'push' || github.event_name == 'release'
run: |
if [ $WRADLIB_TAG == 'undefined' ]; then
BRANCH=devel
else
BRANCH=$WRADLIB_TAG
fi
cd notebooks
git push https://${{ secrets.WRADLIB_DOCS_BOT_API_TOKEN }}@github.com/wradlib/wradlib-notebooks.git render:$BRANCH -fq
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v5
with:
files: ./coverage.xml
flags: notebooktests
env_vars: RUNNER_OS,PYTHON_VERSION
name: codecov-gha
token: ${{ secrets.CODECOV_TOKEN }}
fail_ci_if_error: false
trigger_rtd:
if: github.event_name == 'push' || github.event_name == 'release'
needs: [lint, build_0, build_3]
name: trigger readthedocs
runs-on: ubuntu-latest
defaults:
run:
shell: bash -l {0}
env:
RTD_TOKEN: ${{ secrets.RTD_TOKEN_NEW }}
RTD_URL: ${{ secrets.RTD_URL_NEW }}
steps:
- name: trigger readthedocs
run: |
echo "triggering"
curl -X POST -H "Authorization: Token $RTD_TOKEN" "$RTD_URL"
upload_testpypi:
if: github.event_name == 'push'
needs: [lint, build_0, build_1]
name: deploy to testpypi
runs-on: ubuntu-latest
defaults:
run:
shell: bash -l {0}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.13"
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install build setuptools wheel twine toml-cli
- name: Package and Upload
env:
TWINE_USERNAME: __token__
TWINE_PASSWORD: ${{ secrets.TEST_PYPI_API_TOKEN }}
run: |
toml set --toml-path pyproject.toml tool.hatch.version.raw-options.local_scheme "no-local-version"
git update-index --assume-unchanged pyproject.toml
python -m build
twine upload --verbose --repository testpypi dist/*
upload_pypi:
if: github.event_name == 'release'
needs: [lint, build_0, build_1]
name: deploy to pypi
runs-on: ubuntu-latest
defaults:
run:
shell: bash -l {0}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.13"
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install build setuptools wheel twine
- name: Package and Upload
env:
TWINE_USERNAME: __token__
TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }}
run: |
python -m build
twine upload dist/*