From f90e47b2048ad76a1e1509ab9833c0fe70e0773e Mon Sep 17 00:00:00 2001 From: Max Jones <14077947+maxrjones@users.noreply.github.com> Date: Fri, 12 Apr 2024 17:45:34 -0400 Subject: [PATCH] Add release workflow (#190) --- .github/workflows/pypi-release.yaml | 102 ++++++++++++++++++++++++++++ carbonplan_data/__init__.py | 12 ++-- pyproject.toml | 9 +-- 3 files changed, 111 insertions(+), 12 deletions(-) create mode 100644 .github/workflows/pypi-release.yaml diff --git a/.github/workflows/pypi-release.yaml b/.github/workflows/pypi-release.yaml new file mode 100644 index 0000000..b7625d9 --- /dev/null +++ b/.github/workflows/pypi-release.yaml @@ -0,0 +1,102 @@ +name: Build and Upload carbonplan_data to PyPI +on: + release: + types: + - published + # Runs for pull requests should be disabled other than for testing purposes + # pull_request: + # branches: + # - main + +permissions: + contents: read + +jobs: + build-artifacts: + runs-on: ubuntu-latest + if: github.repository == 'carbonplan/data' + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - uses: actions/setup-python@v5.0.0 + name: Install Python + with: + python-version: "3.11" + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + python -m pip install build twine + git clean -xdf + git restore -SW . + + # This step is only necessary for testing purposes and for TestPyPI + - name: Fix up version string for TestPyPI + if: ${{ !startsWith(github.ref, 'refs/tags') }} + run: | + # Change setuptools-scm local_scheme to "no-local-version" so the + # local part of the version isn't included, making the version string + # compatible with PyPI. + sed --in-place "s/node-and-date/no-local-version/g" pyproject.toml + + - name: Build tarball and wheels + run: | + python -m build + - name: Check built artifacts + run: | + python -m twine check --strict dist/* + pwd + if [ -f dist/carbonplan_data-0.0.0.tar.gz ]; then + echo "❌ INVALID VERSION NUMBER" + exit 1 + else + echo "✅ Looks good" + fi + - uses: actions/upload-artifact@v4 + with: + name: releases + path: dist + + test-built-dist: + needs: build-artifacts + runs-on: ubuntu-latest + steps: + - uses: actions/setup-python@v5.0.0 + name: Install Python + with: + python-version: "3.11" + - uses: actions/download-artifact@v4 + with: + name: releases + path: dist + - name: List contents of built dist + run: | + ls -ltrh + ls -ltrh dist + - name: Verify the built dist/wheel is valid + run: | + python -m pip install --upgrade pip + python -m pip install dist/carbonplan_data*.whl + python -c "from carbonplan_data.utils import get_versions; print(get_versions())" + - name: Publish package to TestPyPI + uses: pypa/gh-action-pypi-publish@v1.8.14 + with: + password: ${{ secrets.TEST_PYPI_TOKEN }} + repository-url: https://test.pypi.org/legacy/ + # verbose: true + + upload-to-pypi: + needs: test-built-dist + if: github.event_name == 'release' + runs-on: ubuntu-latest + steps: + - uses: actions/download-artifact@v4 + with: + name: releases + path: dist + - name: Publish package to PyPI + uses: pypa/gh-action-pypi-publish@v1.8.14 + with: + password: ${{ secrets.PYPI_TOKEN }} + # verbose: true diff --git a/carbonplan_data/__init__.py b/carbonplan_data/__init__.py index 3e65bb9..b3a789a 100644 --- a/carbonplan_data/__init__.py +++ b/carbonplan_data/__init__.py @@ -2,15 +2,17 @@ import os import pathlib +from importlib.metadata import PackageNotFoundError as _PackageNotFoundError +from importlib.metadata import version as _version import intake -from pkg_resources import DistributionNotFound, get_distribution try: - version = get_distribution(__name__).version -except DistributionNotFound: # pragma: no cover - version = "0.0.0" # pragma: no cover -__version__ = version + __version__ = _version(__name__) +except _PackageNotFoundError: + # package is not installed + __version__ = "unknown" + CATALOG_DIR_PATH = pathlib.Path(__file__) MASTER_CATALOG_PATH = str(CATALOG_DIR_PATH.parent / "catalogs/master.yaml") diff --git a/pyproject.toml b/pyproject.toml index 40d9b9a..4aefd07 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -26,6 +26,8 @@ dependencies = [ "intake<=0.7.0", "validators", "wget", + "numpy", + "xarray", ] [project.urls] @@ -35,15 +37,8 @@ repository = "https://github.com/carbonplan/data" include = ["carbonplan_data*"] [tool.setuptools_scm] -version_scheme = "post-release" local_scheme = "node-and-date" fallback_version = "999" -write_to = "carbonplan_data/_version.py" -write_to_template = '__version__ = "{version}"' - - -# [tool.setuptools.dynamic] -# version = { attr = "carbonplan_data.__version__" } [tool.black]