Skip to content

Commit

Permalink
Add pyproject.toml (#153)
Browse files Browse the repository at this point in the history
* Add pyproject.toml

* Restrict workflow runs

* spelling

* Add notes for legacy configs

* Add Python3.12 classifier
  • Loading branch information
thomas-bc authored Dec 13, 2023
1 parent 8677c64 commit 6a245b9
Show file tree
Hide file tree
Showing 7 changed files with 131 additions and 145 deletions.
2 changes: 2 additions & 0 deletions .github/actions/spelling/excludes.txt
Original file line number Diff line number Diff line change
Expand Up @@ -43,3 +43,5 @@ ignore$
\.xlsx$
\.xsd$
\.ico$
pyproject.toml
setup.py
4 changes: 2 additions & 2 deletions .github/workflows/codeql-security-scan.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@ name: "CodeQL Security Scan"

on:
push:
branches: [ master, devel ]
branches: [ devel ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ master, devel ]
branches: [ devel ]

jobs:
analyze:
Expand Down
7 changes: 6 additions & 1 deletion .github/workflows/fprime-gds-tests.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
name: fprime-gds tests

on: [pull_request, push]
on:
push:
branches: [ devel ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ devel ]

jobs:
Unit-tests:
Expand Down
7 changes: 6 additions & 1 deletion .github/workflows/gds-cli-tests.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
name: GDS CLI Tests

on: [pull_request, push]
on:
push:
branches: [ devel ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ devel ]

env:
DICTIONARY: ./.github/resources/RefTopologyAppDictionary.xml
Expand Down
42 changes: 23 additions & 19 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
@@ -1,25 +1,29 @@
name: Build Package
name: Build and Publish Package

on:
release:
types: [published]

jobs:
Build-PyPI-Package:
Release-PyPI-Package:
runs-on: ubuntu-latest
permissions:
# this permission is mandatory for trusted publishing
id-token: write
steps:
- name: "Checkout Repository"
uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Test PyPI
uses: fprime-community/publish-pypi@main
env:
TWINE_PASSWORD: ${{ secrets.TESTPYPI_CREDENTIAL }}
with:
package: "fprime-gds"
- name: PyPI
uses: fprime-community/publish-pypi@main
env:
TWINE_PASSWORD: ${{ secrets.PYPI_CREDENTIAL }}
with:
repo: "pypi"
package: "fprime-gds"
- name: "Checkout Repository"
uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Setup Python
run: pip install -U build twine
- name: Build distributions
run: python -m build
- name: Check distributions
run: twine check dist/*
- name: Publish distributions to TestPyPI
uses: pypa/gh-action-pypi-publish@release/v1
with:
repository-url: https://test.pypi.org/legacy/
- name: Publish distributions to PyPI
uses: pypa/gh-action-pypi-publish@release/v1
87 changes: 87 additions & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
[build-system]
requires = ["setuptools", "setuptools_scm[toml]>=6.2", "wheel"]
build-backend = "setuptools.build_meta"

[project]
name = "fprime-gds"
dynamic = ["version"]
description = "F Prime Flight Software Ground Data System layer"
readme = "README.md"
requires-python = ">=3.8"
license = {file = "LICENSE.txt"}
keywords = ["fprime", "embedded", "nasa", "flight", "software"]
authors = [
{name = "Michael Starch", email = "Michael.D.Starch@jpl.nasa.gov"},
{name = "Thomas Boyer-Chammard", email = "Thomas.Boyer.Chammard@jpl.nasa.gov"},
]
classifiers = [
"Development Status :: 5 - Production/Stable",
"Intended Audience :: Developers",
"Operating System :: Unix",
"Operating System :: POSIX",
"Programming Language :: Python",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.8",
"Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: Implementation :: CPython",
"Programming Language :: Python :: Implementation :: PyPy",
"License :: OSI Approved :: Apache Software License",
]
dependencies = [
"flask>=3.0.0",
"flask_compress>=1.11",
"pyzmq>=24.0.1",
"pexpect>=4.8.0",
"pytest>=6.2.4",
"flask_restful>=0.3.8",
"fprime-tools>=3.1.2a1",
"argcomplete>=1.12.3",
"Jinja2>=2.11.3",
"openpyxl>=3.0.10",
"pyserial>=3.5",
]

[project.urls]
Homepage = "https://fprime.jpl.nasa.gov"
Documentation = "https://nasa.github.io/fprime/"
Repository = "https://github.com/fprime-community/fprime-gds"

####
# Entry Points:
#
# Defines the list of entry-level (scripts) that are defined by this package. This allows
# standard use of utilities that ship as part of F prime.
####
[project.scripts]
fprime-cli = "fprime_gds.executables.fprime_cli:main"
fprime-seqgen = "fprime_gds.common.tools.seqgen:main"

[project.gui-scripts]
fprime-gds = "fprime_gds.executables.run_deployment:main"

# For Pytest fixtures
[project.entry-points."pytest11"]
fprime_test_api = "fprime_gds.common.testing_fw.pytest_integration"

####
# setuptools_scm dynamically generates version number from git, as well as automatically
# include all data files tracked by git (e.g. flash/static/** files).
# See https://setuptools.pypa.io/en/latest/userguide/datafiles.html
####
[tool.setuptools_scm]


####
# Additional notes
#
# With regards to the configuration of the older versions of setup.py:
# - package_data: included by default, and setuptools_scm will automatically include all files tracked by git
# - package discovery (src/): setuptools will automatically discover all packages as we use the src-layout
#
# Reference:
# - https://setuptools.pypa.io/en/latest/userguide/pyproject_config.html
# - https://setuptools.pypa.io/en/latest/userguide/package_discovery.html#src-layout
####
127 changes: 5 additions & 122 deletions setup.py
Original file line number Diff line number Diff line change
@@ -1,123 +1,6 @@
#!/usr/bin/env python
####
# fprime_gds Python Package:
#
# The F prime GDS layer provides a basic GDS intended to enable the user to test F prime
# distributions. In addition it provides an integration and test layer to allow for automated
# testing of F prime distributions.
#
# Endpoints:
# - fprime-gds: run the F prime GDS
#
# Optional Features:
# - Test API XLS Output: Provides XLS output with the Test API. test-api-xls
# - TK GUI: if installed with Python 2, the TK GUI will be installed
#
# User Install / Upgrade:
# ```
# pip install --upgrade fprime-gds
# ```
#
# Developer and Dynamic Installation:
# ```
# pip install -e ./Gds
# ```
###
# setup.py is kept to support legacy builds
# https://setuptools.pypa.io/en/latest/userguide/pyproject_config.html
from setuptools import setup

from setuptools import find_packages, setup

####
# GDS Packages:
#
# The GDS package 'tkgui' is only allowed as part of a Python 2 distribution. This code
# excludes the 'fprime_gds.tkgui' package.
####
gds_packages = find_packages("src", exclude=["*tkgui*"])
# Setup a python package using setup-tools. This is a newer (and more recommended) technology
# than distutils.
setup(
####
# Package Description:
#
# Basic package information. Describes the package and the data contained inside. This
# information should match the F prime description information.
####
name="fprime_gds",
use_scm_version={"root": ".", "relative_to": __file__},
license="Apache 2.0 License",
description="F Prime Flight Software Ground Data System layer.",
long_description="""
This package contains the Python files used to run the F prime Ground Data System and Test API.
It is intended to supply the user with the ability to test F prime flight software in an
integrated configuration with ground in-the-loop.
""",
url="https://github.com/nasa/fprime",
keywords=["fprime", "gds", "embedded", "nasa"],
project_urls={"Issue Tracker": "https://github.com/nasa/fprime/issues"},
# Package author, not F prime author
author="Michael Starch",
author_email="Michael.D.Starch@jpl.nasa.gov",
####
# Included Packages:
#
# Will search for and included all python packages under the "src" directory. The root package
# is set to 'src' to avoid package names of the form src.fprime_gds. This will also ensure that
# files included in MANIFEST.in are included in their respective packages.
####
packages=gds_packages, # See above for how GDS packages are found
package_dir={"": "src"},
package_data={
"fprime_gds": ["flask/static/*", "flask/static/*/*", "flask/static/*/*/*"]
},
include_package_data=True,
zip_safe=False, # HTML templates require normal FIO access.
####
# Entry Points:
#
# Defines the list of entry-level (scripts) that are defined by this package. This allows
# standard use of utilities that ship as part of F prime.
####
entry_points={
"gui_scripts": ["fprime-gds = fprime_gds.executables.run_deployment:main"],
"console_scripts": [
"fprime-cli = fprime_gds.executables.fprime_cli:main",
"fprime-seqgen = fprime_gds.common.tools.seqgen:main",
],
"pytest11": ["fprime_test_api = fprime_gds.common.testing_fw.pytest_integration"]
},
####
# Classifiers:
#
# Standard Python classifiers used to describe this package.
####
classifiers=[
# complete classifier list: http://pypi.python.org/pypi?%3Aaction=list_classifiers
"Development Status :: 5 - Production/Stable",
"Intended Audience :: Developers",
"Operating System :: Unix",
"Operating System :: POSIX",
"Programming Language :: Python",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.7",
"Programming Language :: Python :: 3.8",
"Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: Implementation :: CPython",
"Programming Language :: Python :: Implementation :: PyPy",
],
python_requires=">=3.7",
setup_requires=["setuptools_scm"],
install_requires=[
"flask>=3.0.0",
"flask_compress>=1.11",
"pyzmq>=24.0.1",
"pexpect>=4.8.0",
"pytest>=6.2.4",
"flask_restful>=0.3.8",
"fprime-tools>=3.1.2a1",
"argcomplete>=1.12.3",
"Jinja2>=2.11.3",
"openpyxl>=3.0.10",
"pyserial>=3.5",
],
)
# Configuration is in pyproject.toml
setup()

0 comments on commit 6a245b9

Please sign in to comment.