diff --git a/.github/workflows/publish-release-to-pypi.yml b/.github/workflows/publish-release-to-pypi.yml new file mode 100644 index 0000000..867d835 --- /dev/null +++ b/.github/workflows/publish-release-to-pypi.yml @@ -0,0 +1,47 @@ +# This workflow will upload a Python Package using Twine when a release is created +# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-python#publishing-to-package-registries + +name: Upload Python Package + +on: + release: + types: [published] + +permissions: + contents: read + +jobs: + build-package: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: "3.12" + - name: Build release distribution + run: | + python -m pip install build + python -m build + - name: Upload dist as build artifact + uses: actions/upload-artifact@v4 + with: + name: dist + path: dist/ + + pypi-publish: + runs-on: ubuntu-latest + needs: + - build-package + permissions: + id-token: write + environment: + name: nfl_data_py + url: https://pypi.org/p/nfl-data-py/ + steps: + - name: Retrieve build artifact + uses: actions/download-artifact@v4 + with: + name: dist + path: dist/ + - name: Publish release distributions to PyPI + uses: pypa/gh-action-pypi-publish@release/v1 diff --git a/setup.py b/setup.py index 4293e74..d94e14f 100644 --- a/setup.py +++ b/setup.py @@ -1,24 +1,17 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Note: To use the 'upload' functionality of this file, you must: -# $ pipenv install twine --dev +from pathlib import Path +from setuptools import find_packages, setup -import io -import os -import sys -from shutil import rmtree - -from setuptools import find_packages, setup, Command - -# Package meta-data. +# Package metadata NAME = 'nfl_data_py' DESCRIPTION = 'python library for interacting with NFL data sourced from nflfastR' -URL = 'https://github.com/cooperdff/nfl_data_py' +URL = 'https://github.com/nflverse/nfl_data_py' EMAIL = 'cooper.dff11@gmail.com' AUTHOR = 'cooperdff' REQUIRES_PYTHON = '>=3.6.0' -VERSION = '0.3.1' +VERSION = '0.3.2' # What packages are required for this module to be executed? @@ -32,73 +25,12 @@ EXTRAS = { } -# The rest you shouldn't have to touch too much :) -# ------------------------------------------------ -# Except, perhaps the License and Trove Classifiers! -# If you do change the License, remember to change the Trove Classifier for that! - -here = os.path.abspath(os.path.dirname(__file__)) - -# Import the README and use it as the long-description. -# Note: this will only work if 'README.md' is present in your MANIFEST.in file! -from os import path -this_directory = path.abspath(path.dirname(__file__)) -with open(path.join(this_directory, 'README.md'), encoding='utf-8') as f: - long_description = f.read() - -# Load the package's __version__.py module as a dictionary. -about = {} -if not VERSION: - project_slug = NAME.lower().replace("-", "_").replace(" ", "_") - with open(os.path.join(here, project_slug, '__version__.py')) as f: - exec(f.read(), about) -else: - about['__version__'] = VERSION - - -class UploadCommand(Command): - """Support setup.py upload.""" - - description = 'Build and publish the package.' - user_options = [] - - @staticmethod - def status(s): - """Prints things in bold.""" - print('\033[1m{0}\033[0m'.format(s)) - - def initialize_options(self): - pass - - def finalize_options(self): - pass - - def run(self): - try: - self.status('Removing previous builds…') - rmtree(os.path.join(here, 'dist')) - except OSError: - pass - - self.status('Building Source and Wheel (universal) distribution…') - os.system('{0} setup.py sdist bdist_wheel --universal'.format(sys.executable)) - - self.status('Uploading the package to PyPI via Twine…') - os.system('twine upload dist/*') - - self.status('Pushing git tags…') - os.system('git tag v{0}'.format(about['__version__'])) - os.system('git push --tags') - - sys.exit() - - # Where the magic happens: setup( name=NAME, - version=about['__version__'], + version=VERSION, description=DESCRIPTION, - long_description=long_description, + long_description=Path('README.md').read_text(), long_description_content_type='text/markdown', author=AUTHOR, author_email=EMAIL, @@ -110,17 +42,17 @@ def run(self): include_package_data=True, license='MIT', classifiers=[ - # Trove classifiers - # Full list: https://pypi.python.org/pypi?%3Aaction=list_classifiers + # Trove classifiers. Full list: https://pypi.python.org/pypi?%3Aaction=list_classifiers 'License :: OSI Approved :: MIT License', 'Programming Language :: Python', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.6', + 'Programming Language :: Python :: 3 :: Only', + *[f'Programming Language :: Python :: 3.{i}' for i in range(6, 13)], 'Programming Language :: Python :: Implementation :: CPython', - 'Programming Language :: Python :: Implementation :: PyPy' + 'Programming Language :: Python :: Implementation :: PyPy', + 'Intended Audience :: Developers', + 'Intended Audience :: Science/Research', + 'Topic :: Scientific/Engineering :: Information Analysis', + 'Operating System :: OS Independent', ], - # $ setup.py publish support. - cmdclass={ - 'upload': UploadCommand, - }, )