Skip to content

Commit

Permalink
upgrade build to pyproject.toml and packaging.python.org GH actions
Browse files Browse the repository at this point in the history
  • Loading branch information
arska committed Jun 8, 2024
1 parent 85cfa29 commit c1b294c
Show file tree
Hide file tree
Showing 3 changed files with 146 additions and 60 deletions.
130 changes: 110 additions & 20 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,27 +27,117 @@ jobs:
CODECOV_TOKEN: "889b90e8-e5a8-4139-aef6-87e6f2e1a0a4"
run: tox

package:
name: "Build & verify package"
runs-on: "ubuntu-latest"
# from https://packaging.python.org/en/latest/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows/
build:
name: Build distribution
runs-on: ubuntu-latest
needs: [test]
environment: release

steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.12"
- name: Install pypa/build
run: >-
python3 -m
pip install
build
--user
- name: Build a binary wheel and a source tarball
run: python3 -m build
- name: Store the distribution packages
uses: actions/upload-artifact@v3
with:
name: python-package-distributions
path: dist/

publish-to-pypi:
name: >-
Publish Python distribution to PyPI
if: startsWith(github.ref, 'refs/tags/') # only publish to PyPI on tag pushes
needs:
- build
runs-on: ubuntu-latest
environment:
name: pypi
url: https://pypi.org/p/controlmyspa
permissions:
id-token: write
id-token: write # IMPORTANT: mandatory for trusted publishing

steps:
- uses: "actions/checkout@v4"
- uses: "actions/setup-python@v5"
with:
python-version: "3.11"

- name: "Install pep517 and twine"
run: "python -m pip install pep517 twine"
- name: "Build package"
run: "python -m pep517.build --source --binary ."
- name: "List result"
run: "ls -l dist"
- name: "Check long_description"
run: "python -m twine check dist/*"
- name: Publish package
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags')
- name: Download all the dists
uses: actions/download-artifact@v3
with:
name: python-package-distributions
path: dist/
- name: Publish distribution to PyPI
uses: pypa/gh-action-pypi-publish@release/v1

github-release:
name: >-
Sign the Python distribution with Sigstore
and upload them to GitHub Release
needs:
- publish-to-pypi
runs-on: ubuntu-latest

permissions:
contents: write # IMPORTANT: mandatory for making GitHub Releases
id-token: write # IMPORTANT: mandatory for sigstore

steps:
- name: Download all the dists
uses: actions/download-artifact@v3
with:
name: python-package-distributions
path: dist/
- name: Sign the dists with Sigstore
uses: sigstore/[email protected]
with:
inputs: >-
./dist/*.tar.gz
./dist/*.whl
- name: Create GitHub Release
env:
GITHUB_TOKEN: ${{ github.token }}
run: >-
gh release create
'${{ github.ref_name }}'
--repo '${{ github.repository }}'
--notes ""
- name: Upload artifact signatures to GitHub Release
env:
GITHUB_TOKEN: ${{ github.token }}
# Upload to GitHub Release using the `gh` CLI.
# `dist/` contains the built packages, and the
# sigstore-produced signatures and certificates.
run: >-
gh release upload
'${{ github.ref_name }}' dist/**
--repo '${{ github.repository }}'
publish-to-testpypi:
name: Publish Python distribution to TestPyPI
needs:
- build
runs-on: ubuntu-latest

environment:
name: testpypi
url: https://test.pypi.org/p/controlmyspa

permissions:
id-token: write # IMPORTANT: mandatory for trusted publishing

steps:
- name: Download all the dists
uses: actions/download-artifact@v3
with:
name: python-package-distributions
path: dist/
- name: Publish distribution to TestPyPI
uses: pypa/gh-action-pypi-publish@release/v1
with:
repository-url: https://test.pypi.org/legacy/
35 changes: 34 additions & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,3 +1,36 @@
[build-system]
requires = ["setuptools >= 40.6.0", "wheel"]
requires = ["setuptools>=64", "setuptools_scm>=8"]
build-backend = "setuptools.build_meta"

[tool.setuptools]
packages = ["controlmyspa"]

[tool.setuptools.package-dir]
controlmyspa = "."

[tool.setuptools_scm]

[project]
name = "controlmyspa"
dynamic = ["version"]
authors = [
{ name="Aarno Aukia", email="[email protected]" },
]
description = "Balboa ControlMySpa™ cloud API for hot tub spa systems"
readme = "README.md"
requires-python = ">=3.10"
license={text = "MIT"}
keywords=["Balboa", "Controlmyspa", "Whirlpool", "API"]
classifiers = [
"Programming Language :: Python :: 3",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
"Intended Audience :: Developers",
]
dependencies = [
"requests>2"
]

[project.urls]
Homepage = "https://github.com/arska/controlmyspa"
Issues = "https://github.com/arska/controlmyspa/issues"
41 changes: 2 additions & 39 deletions setup.py
Original file line number Diff line number Diff line change
@@ -1,40 +1,3 @@
"""
controlmyspa python module manifest
"""
from os.path import abspath, dirname, join
from setuptools import setup
import setuptools


def read_file(filename):
"""Get the contents of a file"""
here = abspath(dirname(__file__))
with open(join(here, filename), encoding="utf-8") as file:
return file.read()


setup(
name="controlmyspa",
version_config={"dirty_template": "{tag}"},
description="Get metrics and control Balboa Controlmyspa whirlpool",
long_description=read_file("README.md"),
long_description_content_type="text/markdown",
packages=["controlmyspa"],
package_dir={"controlmyspa": "."},
keywords=["Balboa", "Controlmyspa", "Whirlpool", "API"],
classifiers=[
"Intended Audience :: Developers",
"License :: OSI Approved :: MIT License",
"Programming Language :: Python :: 3.6",
"Programming Language :: Python :: 3.7",
"Programming Language :: Python :: 3.8",
"Programming Language :: Python :: 3.9",
],
url="https://github.com/arska/controlmyspa",
author="Aarno Aukia",
author_email="[email protected]",
license="MIT",
python_requires=">=3.6",
extras_require={"dev": ["tox"]},
install_requires=["requests>=2"],
setup_requires=["setuptools-git-versioning"],
)
setuptools.setup()

0 comments on commit c1b294c

Please sign in to comment.