Skip to content

Commit

Permalink
Merge pull request #235 from umr-lops/pyproject
Browse files Browse the repository at this point in the history
move from `setup.py` to `pyproject.toml` + CI improvements
  • Loading branch information
agrouaze authored Nov 13, 2024
2 parents c8afed9 + a0b88a0 commit 868593d
Show file tree
Hide file tree
Showing 9 changed files with 337 additions and 50 deletions.
5 changes: 5 additions & 0 deletions .github/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
changelog:
exclude:
authors:
- dependabot
- pre-commit-ci
84 changes: 84 additions & 0 deletions .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
name: CI

on:
push:
branches: [main]
pull_request:
branches: [main]
workflow_dispatch:

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
detect-skip-ci-trigger:
name: "Detect CI Trigger: [skip-ci]"
if: |
github.repository == 'umr-lops/xsar'
&& (
github.event_name == 'push' || github.event_name == 'pull_request'
)
runs-on: ubuntu-latest
outputs:
triggered: ${{ steps.detect-trigger.outputs.trigger-found }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 2
- uses: xarray-contrib/ci-trigger@v1
id: detect-trigger
with:
keyword: "[skip-ci]"

ci:
name: ${{ matrix.os }} py${{ matrix.python-version }}
runs-on: ${{ matrix.os }}
needs: detect-skip-ci-trigger

if: needs.detect-skip-ci-trigger.outputs.triggered == 'false'

defaults:
run:
shell: bash -l {0}

strategy:
fail-fast: false
matrix:
python-version: ["3.10", "3.11", "3.12"]
os: ["ubuntu-latest", "macos-latest", "windows-latest"]

steps:
- name: Checkout the repository
uses: actions/checkout@v4
with:
# need to fetch all tags to get a correct version
fetch-depth: 0 # fetch all branches and tags

- name: Setup environment variables
run: |
echo "TODAY=$(date +'%Y-%m-%d')" >> $GITHUB_ENV
echo "CONDA_ENV_FILE=ci/requirements/environment.yaml" >> $GITHUB_ENV
- name: Setup micromamba
uses: mamba-org/setup-micromamba@v1
with:
environment-file: ${{ env.CONDA_ENV_FILE }}
environment-name: xsar-tests
cache-environment: true
cache-environment-key: "${{runner.os}}-${{runner.arch}}-py${{matrix.python-version}}-${{env.TODAY}}-${{hashFiles(env.CONDA_ENV_FILE)}}"
create-args: >-
python=${{matrix.python-version}}
- name: Install xsar
run: |
python -m pip install --no-deps -e .
- name: Import xsar
run: |
python -c "import xsar"
- name: Run tests
run: |
python -m pytest --cov=xsar
98 changes: 98 additions & 0 deletions .github/workflows/upstream-dev.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
name: upstream-dev CI

on:
push:
branches: [main]
pull_request:
branches: [main]
schedule:
- cron: "0 18 * * 0" # Weekly "On Sundays at 18:00" UTC
workflow_dispatch:

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
detect-test-upstream-trigger:
name: "Detect CI Trigger: [test-upstream]"
if: github.event_name == 'push' || github.event_name == 'pull_request'
runs-on: ubuntu-latest
outputs:
triggered: ${{ steps.detect-trigger.outputs.trigger-found }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 2
- uses: xarray-contrib/[email protected]
id: detect-trigger
with:
keyword: "[test-upstream]"

upstream-dev:
name: upstream-dev
runs-on: ubuntu-latest
needs: detect-test-upstream-trigger

if: |
always()
&& github.repository == 'umr-lops/xsar'
&& (
github.event_name == 'schedule'
|| github.event_name == 'workflow_dispatch'
|| needs.detect-test-upstream-trigger.outputs.triggered == 'true'
|| contains(github.event.pull_request.labels.*.name, 'run-upstream')
)
defaults:
run:
shell: bash -l {0}

strategy:
fail-fast: false
matrix:
python-version: ["3.12"]

steps:
- name: checkout the repository
uses: actions/checkout@v4
with:
# need to fetch all tags to get a correct version
fetch-depth: 0 # fetch all branches and tags

- name: set up conda environment
uses: mamba-org/setup-micromamba@v1
with:
environment-file: ci/requirements/environment.yaml
environment-name: tests
create-args: >-
python=${{ matrix.python-version }}
pytest-reportlog
- name: install upstream-dev dependencies
run: bash ci/install-upstream-dev.sh

- name: install the package
run: python -m pip install --no-deps -e .

- name: show versions
run: python -m pip list

- name: import
run: |
python -c 'import xsar'
- name: run tests
if: success()
id: status
run: |
python -m pytest -rf --report-log=pytest-log.jsonl
- name: report failures
if: |
failure()
&& steps.tests.outcome == 'failure'
&& github.event_name == 'schedule'
uses: xarray-contrib/issue-from-pytest-log@v1
with:
log-path: pytest-log.jsonl
14 changes: 14 additions & 0 deletions ci/install-upstream-dev.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
#!/usr/bin/env bash

conda remove -y --force cytoolz numpy xarray toolz python-dateutil pandas
python -m pip install \
-i https://pypi.anaconda.org/scientific-python-nightly-wheels/simple \
--no-deps \
--pre \
--upgrade \
numpy \
pandas \
xarray
python -m pip install --upgrade \
git+https://github.com/pytoolz/toolz \
git+https://github.com/dateutil/dateutil
8 changes: 8 additions & 0 deletions ci/requirements/docs.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
name: xsar-docs
channels:
- conda-forge
dependencies:
- python=3.11
- sphinx>=4
- sphinx_book_theme
- ipython
19 changes: 19 additions & 0 deletions ci/requirements/environment.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
name: xsar-tests
channels:
- conda-forge
dependencies:
- ipython
- pre-commit
- pytest
- pytest-reportlog
- pytest-cov
- numpy
- toolz
- cytoolz
- python-dateutil
- construct
- fsspec
- xarray
- dask
- distributed
- aiohttp
98 changes: 98 additions & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
[project]
name = "xsar"
requires-python = ">= 3.10"
license = { text = "MIT" }
authors = [
{ name = "Olivier Archer", email = "[email protected]" },
]
description = "Python xarray library to use Level-1 GRD Synthetic Aperture Radar products"
readme = "README.md"
keywords = [
"xarray",
"earth-observation",
"remote-sensing",
"satellite-imagery",
"Sentinel-1",
"RCM",
"RadarSat2",
"sar",
"synthetic-aperture-radar",
]
classifiers = [
"Development Status :: 4 - Beta",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
"Programming Language :: Python",
"Programming Language :: Python :: 3 :: Only",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Intended Audience :: Science/Research",
"Topic :: Scientific/Engineering",
]
dynamic = ["version"]
dependencies = [
'GDAL',
'dask[array]',
'distributed',
"xarray>=2024.10.0",
'affine',
'rasterio',
'cartopy',
'fiona',
'pyproj',
'numpy',
'scipy',
'shapely',
'geopandas',
'fsspec',
'aiohttp',
'pytz',
'psutil',
'jinja2',
'rioxarray',
'lxml',
]
[project.optional-dependencies]
RS2 = ["xradarsat2"]
RCM = ["xarray-safe-rcm"]
S1 = ["xarray-safe-s1"]



[project.urls]
homepage = "https://github.com/umr-lops/xsar.readthedocs.io"
documentation = "https://xsar.readthedocs.io"
repository = "https://github.com/umr-lops/xsar"
changelog = "https://xsar.readthedocs.io/en/latest/changelog.html"

[project.scripts]
#xsar = "xsar.xarray_backends:XsarXarrayBackend"

[build-system]
requires = ["setuptools>=64.0", "setuptools-scm"]
build-backend = "setuptools.build_meta"

[tool.setuptools]
packages = ["xsar"]
package-dir = {"" = "src"}

[tool.setuptools_scm]
fallback_version = "999"

[tool.isort]
profile = "black"
skip_gitignore = true
float_to_top = true
default_section = "THIRDPARTY"
known_first_party = "xsar"

[tool.black]
line-length = 100

[tool.coverage.run]
source = ["xsar"]
branch = true

[tool.coverage.report]
show_missing = true
exclude_lines = ["pragma: no cover", "if TYPE_CHECKING"]
50 changes: 0 additions & 50 deletions setup.py

This file was deleted.

11 changes: 11 additions & 0 deletions src/xsar/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,3 +21,14 @@
from xsar.base_dataset import BaseDataset
from xsar.base_meta import BaseMeta
from xsar.xsar import open_dataset,open_datatree,product_info


import xsar
try:
from importlib import metadata
except ImportError: # for Python<3.8
import importlib_metadata as metadata
try:
__version__ = metadata.version("xsar")
except Exception:
__version__ = "999"

0 comments on commit 868593d

Please sign in to comment.