Skip to content

Commit

Permalink
Update packaging structure and workflows (#68)
Browse files Browse the repository at this point in the history
  • Loading branch information
maxrjones authored Apr 16, 2024
1 parent 7035c2a commit 456da2c
Show file tree
Hide file tree
Showing 17 changed files with 318 additions and 153 deletions.
56 changes: 31 additions & 25 deletions .github/workflows/main.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,40 +2,46 @@ name: CI

on:
push:
branches: "*"
branches:
- main
pull_request:
branches: "*"

jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2.4.0
- uses: actions/setup-python@v2.3.0
- uses: pre-commit/action@v2.0.3
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
test:
name: ${{ matrix.python-version }}-build
runs-on: ubuntu-latest
defaults:
run:
shell: bash -l {0}
strategy:
fail-fast: false
matrix:
python-version: [3.7]
python-version: ["3.9", "3.10", "3.11", "3.12"]
steps:
- uses: actions/checkout@v2.4.0
- name: Setup Python
uses: actions/setup-python@v2.3.0
- uses: actions/checkout@v4
- name: Install Conda environment from environment.yml
uses: mamba-org/setup-micromamba@v1
with:
python-version: ${{ matrix.python-version }}
architecture: x64
- uses: actions/cache@v2.1.7
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ hashFiles('**/dev-requirements.txt') }}
restore-keys: |
${{ runner.os }}-pip-
- run: |
python -m pip install -r dev-requirements.txt
python -m pip list
- name: Running Tests
environment-name: carbonplan
condarc: |
channels:
- conda-forge
- nodefaults
cache-downloads: false
cache-environment: true
create-args: >-
python=${{ matrix.python-version }}
- name: Install package
run: |
python -m pip install -e .[dev]
- name: Conda list information
run: |
conda env list
conda list
- name: Run tests
run: |
python -m pytest --verbose
108 changes: 108 additions & 0 deletions .github/workflows/pypi-release.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
name: Build and Upload carbonplan 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/carbonplan-python'
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-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
environment:
name: release
url: https://test.pypi.org/p/carbonplan
permissions:
id-token: write
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*.whl
python -c "import carbonplan; print(carbonplan.__version__)"
- name: Publish package to TestPyPI
uses: pypa/gh-action-pypi-publish@v1.8.14
with:
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
environment:
name: release
url: https://pypi.org/p/carbonplan
permissions:
id-token: write
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
70 changes: 44 additions & 26 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -1,40 +1,58 @@
exclude: ^(secrets/)

repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.6.0
hooks:
- id: trailing-whitespace
- id: end-of-file-fixer
- id: check-docstring-first
- id: check-json
- id: check-yaml
- id: debug-statements
- id: mixed-line-ending

- repo: https://github.com/asottile/pyupgrade
rev: v3.15.2
hooks:
- id: pyupgrade
args:
- "--py38-plus"

- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.4.0
- repo: https://github.com/psf/black
rev: 24.3.0
hooks:
- id: trailing-whitespace
- id: end-of-file-fixer
- id: check-docstring-first
- id: check-json
- id: check-yaml
- id: pretty-format-json
args: ["--autofix", "--indent=2", "--no-sort-keys"]
- id: black
- id: black-jupyter

- repo: https://github.com/psf/black
rev: 23.3.0
- repo: https://github.com/keewis/blackdoc
rev: v0.3.9
hooks:
- id: black
args: ["--line-length", "100", "--skip-string-normalization"]
- id: blackdoc

- repo: https://github.com/PyCQA/flake8
rev: 6.0.0
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: "v0.3.5"
hooks:
- id: flake8
- id: ruff
args: ["--fix"]

- repo: https://github.com/asottile/seed-isort-config
rev: v2.2.0
- repo: https://github.com/pre-commit/mirrors-prettier
rev: v4.0.0-alpha.8
hooks:
- id: seed-isort-config
- repo: https://github.com/PyCQA/isort
rev: 5.12.0
- id: prettier

- repo: https://github.com/kynan/nbstripout
rev: 0.7.1
hooks:
- id: isort
- id: nbstripout

- repo: https://github.com/deathbeds/prenotebook
rev: f5bdb72a400f1a56fe88109936c83aa12cc349fa
- repo: https://github.com/pre-commit/mirrors-prettier
rev: "v4.0.0-alpha.8"
hooks:
- id: prenotebook
args: ["--line-width", "100", "--no-verify-order"]
- id: prettier
name: prettier-markdown
entry: prettier --write --parser mdx
files: "\\.(\
|md|markdown|mdown|mkdn\
|mdx\
)$"
10 changes: 6 additions & 4 deletions carbonplan/__init__.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
from pkg_resources import DistributionNotFound, get_distribution
from importlib.metadata import PackageNotFoundError as _PackageNotFoundError
from importlib.metadata import version as _version

try:
version = get_distribution(__name__).version
except DistributionNotFound: # pragma: no cover
version = '0.0.0' # pragma: no cover
version = _version(__name__)
except _PackageNotFoundError:
# package is not installed
version = "unknown"
__version__ = version
6 changes: 3 additions & 3 deletions carbonplan/data.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,13 @@

try:
with warnings.catch_warnings():
warnings.filterwarnings('ignore', category=DeprecationWarning, module='intake')
warnings.filterwarnings('ignore', category=PendingDeprecationWarning, module='intake')
warnings.filterwarnings("ignore", category=DeprecationWarning, module="intake")
warnings.filterwarnings("ignore", category=PendingDeprecationWarning, module="intake")
from carbonplan_data import *
except ImportError as e:
msg = (
"CarbonPlan's Data package is not installed.\n\n"
'Please install the carbonplan-data package:\n\n'
"Please install the carbonplan-data package:\n\n"
' python -m pip install "carbonplan-data"'
)
raise ImportError(msg) from e
2 changes: 1 addition & 1 deletion carbonplan/forests_offsets.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
except ImportError as e:
msg = (
"CarbonPlan's Forests Offsets package is not installed.\n\n"
'Please install the carbonplan-forest-offsets package:\n\n'
"Please install the carbonplan-forest-offsets package:\n\n"
' python -m pip install "carbonplan-forest-risks"'
)
raise ImportError(msg) from e
2 changes: 1 addition & 1 deletion carbonplan/forests_risks.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
except ImportError as e:
msg = (
"CarbonPlan's Forests Risks package is not installed.\n\n"
'Please install the carbonplan-forests package:\n\n'
"Please install the carbonplan-forests package:\n\n"
' python -m pip install "carbonplan-forest-risks"'
)
raise ImportError(msg) from e
2 changes: 1 addition & 1 deletion carbonplan/styles.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
except ImportError as e:
msg = (
"CarbonPlan's Styles package is not installed.\n\n"
'Please install the carbonplan-styles package:\n\n'
"Please install the carbonplan-styles package:\n\n"
' python -m pip install "carbonplan-styles"'
)
raise ImportError(msg) from e
8 changes: 4 additions & 4 deletions carbonplan/tests/test_metapackage.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,11 @@


@pytest.mark.parametrize(
'mod',
"mod",
[
'carbonplan',
'carbonplan.data',
'carbonplan.styles',
"carbonplan",
"carbonplan.data",
"carbonplan.styles",
],
)
def test_import_submodules(mod):
Expand Down
2 changes: 1 addition & 1 deletion carbonplan/trace.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
except ImportError as e:
msg = (
"CarbonPlan's Trace package is not installed.\n\n"
'Please install the carbonplan-trace package:\n\n'
"Please install the carbonplan-trace package:\n\n"
' python -m pip install "carbonplan-trace"'
)
raise ImportError(msg) from e
4 changes: 2 additions & 2 deletions carbonplan/watermark.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ def watermark(
machine=True,
githash=True,
iversions=True,
**kwargs
**kwargs,
):
info = _watermark(
updated=updated,
Expand All @@ -19,7 +19,7 @@ def watermark(
githash=githash,
iversions=iversions,
globals_=globals(),
**kwargs
**kwargs,
)

if print_info:
Expand Down
3 changes: 0 additions & 3 deletions dev-requirements.txt

This file was deleted.

Loading

0 comments on commit 456da2c

Please sign in to comment.