Skip to content

Commit

Permalink
Add build CI checks
Browse files Browse the repository at this point in the history
  • Loading branch information
dcherian committed Jan 27, 2023
1 parent 144fbd9 commit 886704b
Show file tree
Hide file tree
Showing 4 changed files with 225 additions and 14 deletions.
50 changes: 50 additions & 0 deletions .github/workflows/configure-testpypi-version.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
import argparse
import copy
import pathlib

import tomli
import tomli_w


def split_path(path, sep="/"):
if isinstance(path, str):
return [part for part in path.split(sep) if part]
else:
return path


def extract(mapping, path, sep="/"):
parts = split_path(path, sep=sep)
cur = mapping
for part in parts:
cur = cur[part]

return cur


def update(mapping, path, value, sep="/"):
new = copy.deepcopy(mapping)

parts = split_path(path, sep=sep)
parent = extract(new, parts[:-1])
parent[parts[-1]] = value

return new


parser = argparse.ArgumentParser()
parser.add_argument("path", type=pathlib.Path)
args = parser.parse_args()

content = args.path.read_text()
decoded = tomli.loads(content)
with_local_scheme = update(
decoded, "tool.setuptools_scm.local_scheme", "no-local-version", sep="."
)
# work around a bug in setuptools / setuptools-scm
with_setuptools_pin = copy.deepcopy(with_local_scheme)
requires = extract(with_setuptools_pin, "build-system.requires", sep=".")
requires[0] = "setuptools>=45,<60"

new_content = tomli_w.dumps(with_setuptools_pin)
args.path.write_text(new_content)
99 changes: 85 additions & 14 deletions .github/workflows/pypi.yaml
Original file line number Diff line number Diff line change
@@ -1,26 +1,97 @@
name: Upload Package to PyPI

name: Build and Upload to PyPI
on:
release:
types: [created]
types:
- published
push:
tags:
- 'v*'

jobs:
deploy:
build-artifacts:
runs-on: ubuntu-latest
if: github.repository == 'xarray-contrib/cf-xarray'
steps:
- uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.x'
fetch-depth: 0
- uses: actions/setup-python@v4
name: Install Python
with:
python-version: 3.8

- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install setuptools setuptools-scm wheel twine
- name: Build and publish
env:
TWINE_USERNAME: ${{ secrets.PYPI_USERNAME }}
TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }}
python -m pip install build twine
- name: Build tarball and wheels
run: |
git clean -xdf
git restore -SW .
python -m build
- name: Check built artifacts
run: |
python -m twine check --strict dist/*
pwd
if [ -f dist/xarray-0.0.0.tar.gz ]; then
echo "❌ INVALID VERSION NUMBER"
exit 1
else
echo "✅ Looks good"
fi
- uses: actions/upload-artifact@v3
with:
name: releases
path: dist

test-built-dist:
needs: build-artifacts
runs-on: ubuntu-latest
steps:
- uses: actions/setup-python@v4
name: Install Python
with:
python-version: 3.8
- uses: actions/download-artifact@v3
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
if: github.event_name == 'push'
run: |
python setup.py sdist bdist_wheel
twine upload dist/*
python -m pip install --upgrade pip
python -m pip install dist/cf_xarray*.whl
python -m cf_xarray.scripts.print_versions
- name: Publish package to TestPyPI
if: github.event_name == 'push'
uses: pypa/gh-action-pypi-publish@v1.6.4
with:
user: __token__
password: ${{ secrets.TESTPYPI_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@v3
with:
name: releases
path: dist
- name: Publish package to PyPI
uses: pypa/gh-action-pypi-publish@v1.6.4
with:
user: __token_g_
password: ${{ secrets.PYPI_PASSWORD }}
verbose: true
86 changes: 86 additions & 0 deletions .github/workflows/testpypi-release.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
name: Build and Upload TestPyPI
on:
push:
branches:
- '*'

# no need for concurrency limits

jobs:
build-artifacts:
runs-on: ubuntu-latest
if: github.repository == 'xarray-contrib/cf-xarray'
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0

- uses: actions/setup-python@v4
name: Install Python
with:
python-version: "3.10"

- name: Install dependencies
run: |
python -m pip install --upgrade pip
python -m pip install build twine
python -m pip install tomli tomli_w
- name: Disable local versions
run: |
python .github/workflows/configure-testpypi-version.py pyproject.toml
git update-index --assume-unchanged pyproject.toml
cat pyproject.toml
- name: Build tarball and wheels
run: |
git clean -xdf
python -m build
- name: Check built artifacts
run: |
python -m twine check --strict dist/*
if [ -f dist/cf_xarray-0.0.0.tar.gz ]; then
echo "❌ INVALID VERSION NUMBER"
exit 1
else
echo "✅ Looks good"
fi
- uses: actions/upload-artifact@v3
with:
name: releases
path: dist

test-built-dist:
needs: build-artifacts
runs-on: ubuntu-latest
steps:
- uses: actions/setup-python@v4
name: Install Python
with:
python-version: "3.10"
- uses: actions/download-artifact@v3
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
if: github.event_name == 'push'
run: |
python -m pip install --upgrade pip
python -m pip install dist/cf_xarray*.whl
python -m cf_xarray.scripts.print_versions
- name: Publish package to TestPyPI
if: github.event_name == 'push'
uses: pypa/gh-action-pypi-publish@v1.6.4
with:
user: __token__
password: ${{ secrets.TESTPYPI_TOKEN }}
repository_url: https://test.pypi.org/legacy/
verbose: true
4 changes: 4 additions & 0 deletions cf_xarray/scripts/print_versions.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
if __name__ == "__main__":
import cf_xarray

print(cf_xarray.__version__)

0 comments on commit 886704b

Please sign in to comment.