build: Add all necessary files for the build system

All basic files for testing, building and distributing the project
are added here. The Makefile can set up the virtual environment and
create different package types from the project.
This commit is contained in:
Sven Sager
2023-10-03 09:02:51 +02:00
committed by Sven Sager
parent 8124a687f0
commit 92666f117d
5 changed files with 189 additions and 0 deletions

10
MANIFEST.in Normal file
View File

@@ -0,0 +1,10 @@
recursive-include .reuse *
recursive-include data *
recursive-include LICENSES *
include Makefile
include MANIFEST.in
include pyproject.toml
include README.md
include requirements.txt
include setup.py
recursive-include tests *

119
Makefile Normal file
View File

@@ -0,0 +1,119 @@
SHELL := bash
MAKEFLAGS = --no-print-directory --no-builtin-rules
.DEFAULT_GOAL = all
# Variables
PACKAGE = revpi_middleware
APP_NAME = RevPiMiddleware
APP_IDENT = com.revolutionpi.revpi-middleware
# Python interpreter to use for venv creation
SYSTEM_PYTHON = python3
# Set path to create the virtual environment with package name
ifdef PYTHON3_VENV
VENV_PATH = $(PYTHON3_VENV)/$(PACKAGE)
else
VENV_PATH = venv
endif
# Set targets for "all"-target
all: test build
.PHONY: all
## Virtual environment creation with SYSTEM_PYTHON
venv:
# Start with empty environment
"$(SYSTEM_PYTHON)" -m venv "$(VENV_PATH)"
"$(VENV_PATH)/bin/pip" install --upgrade pip
"$(VENV_PATH)/bin/pip" install --upgrade -r requirements.txt
venv-ssp:
# Include system installed site-packages and add just missing modules
"$(SYSTEM_PYTHON)" -m venv --system-site-packages "$(VENV_PATH)"
"$(VENV_PATH)/bin/pip" install --upgrade pip
"$(VENV_PATH)/bin/pip" install --upgrade -r requirements.txt
.PHONY: venv venv-ssp
# Choose python interpreter from venv or system
PYTHON = $(or $(wildcard $(VENV_PATH)/bin/python), $(SYSTEM_PYTHON))
# Read app version from program
APP_VERSION = $(shell "$(PYTHON)" src/$(PACKAGE) --version | cut -d ' ' -f 2)
# Environment info
venv-info:
@echo Environment for $(APP_NAME) $(APP_VERSION)
@echo Using path: "$(VENV_PATH)"
.PHONY: venv-info
## Build steps
test:
PYTHONPATH=src "$(PYTHON)" -m pytest
build:
"$(PYTHON)" -m setup sdist
"$(PYTHON)" -m setup bdist_wheel
install: build
"$(PYTHON)" -m pip install dist/$(PACKAGE)-$(APP_VERSION)-*.whl
uninstall:
"$(PYTHON)" -m pip uninstall --yes $(PACKAGE)
.PHONY: test build install uninstall
## PyInstaller
app-licenses:
mkdir -p dist
# Create a list of all installed libraries, their versions and licenses
"$(PYTHON)" -m piplicenses \
--format=markdown \
--output-file dist/bundled-libraries.md
# Create a list of installed libraries with complete project information
"$(PYTHON)" -m piplicenses \
--with-authors \
--with-urls \
--with-description \
--with-license-file \
--no-license-path \
--format=json \
--output-file dist/open-source-licenses.json
"$(PYTHON)" -m piplicenses \
--with-authors \
--with-urls \
--with-description \
--with-license-file \
--no-license-path \
--format=plain-vertical \
--output-file dist/open-source-licenses.txt
app: app-licenses
"$(PYTHON)" -m PyInstaller -n $(APP_NAME) \
--add-data="dist/bundled-libraries.md:$(PACKAGE)/open-source-licenses" \
--add-data="dist/open-source-licenses.*:$(PACKAGE)/open-source-licenses" \
--noconfirm \
--clean \
--onefile \
src/$(PACKAGE)/__main__.py
.PHONY: app-licenses app
## Clean
clean:
# PyTest caches
rm -rf .pytest_cache
# Build artifacts
rm -rf build dist src/*.egg-info
# PyInstaller created files
rm -rf *.spec
# Pycaches
find . -type d -name '__pycache__' -exec rm -r {} \+
distclean: clean
# Virtual environment
rm -rf "$(VENV_PATH)"
.PHONY: clean distclean

2
pyproject.toml Normal file
View File

@@ -0,0 +1,2 @@
[tool.black]
line-length = 100

8
requirements.txt Normal file
View File

@@ -0,0 +1,8 @@
# Build dependencies
pip-licenses
Pyinstaller
pytest-cov
setuptools
wheel
# Runtime dependencies, must match install_requires in setup.py

50
setup.py Normal file
View File

@@ -0,0 +1,50 @@
# -*- coding: utf-8 -*-
"""Setup-script for revpi-middleware package."""
# SPDX-FileCopyrightText: 2025 KUNBUS GmbH <support@kunbus.com>
# SPDX-License-Identifier: GPL-2.0-or-later
from setuptools import find_namespace_packages, setup
from src.revpi_middleware.__about__ import __version__
with open("README.md") as fh:
# Load long description from readme file
long_description = fh.read()
setup(
name="revpi_middleware",
version=__version__,
packages=find_namespace_packages("src"),
package_dir={"": "src"},
include_package_data=True,
python_requires=">= 3.7",
install_requires=[
# todo: Set Dependencies of this project
],
entry_points={
"console_scripts": [
"revpi-middleware = revpi_middleware.main_application:main",
],
},
platforms=["revolution pi"],
url="https://revolutionpi.com/",
license="GPLv2",
license_files=["LICENSES/*"],
author="Sven Sager",
author_email="s.sager@kunbus.com",
maintainer="KUNBUS GmbH",
maintainer_email="support@kunbus.com",
description="Example projekt for a python project",
long_description=long_description,
long_description_content_type="text/markdown",
keywords=["revpi", "revolution pi", "plc", "automation"],
classifiers=[
# A list of all classifiers: https://pypi.org/pypi?%3Aaction=list_classifiers
"Development Status :: 5 - Production/Stable",
"Environment :: Console",
"Intended Audience :: Manufacturing",
"License :: OSI Approved :: GNU General Public License v2 or later (GPLv2+)",
"Operating System :: POSIX",
"Topic :: System :: Operating System",
],
)