From 58815eec71601183e17a69090f5620c370aef70e Mon Sep 17 00:00:00 2001 From: alpha nerd Date: Sun, 12 Apr 2026 15:49:20 +0200 Subject: [PATCH] feat: new build process and workflows ver: bump --- .forgejo/workflows/publish.yml | 43 ++++++++++++++++++++++++++++------ .gitignore | 4 ++++ nomyo/__init__.py | 2 +- pyproject.toml | 15 +++++------- setup.py | 31 ++++++++++++++++++++++++ 5 files changed, 78 insertions(+), 17 deletions(-) create mode 100644 setup.py diff --git a/.forgejo/workflows/publish.yml b/.forgejo/workflows/publish.yml index 9fdee68..994b7fc 100644 --- a/.forgejo/workflows/publish.yml +++ b/.forgejo/workflows/publish.yml @@ -7,10 +7,16 @@ on: workflow_dispatch: jobs: - publish: - runs-on: docker-amd64 + build: + name: Build (${{ matrix.runner }}, py${{ matrix.python }}) + runs-on: ${{ matrix.runner }} container: - image: python:3.12-bookworm + image: python:${{ matrix.python }}-bookworm + + strategy: + matrix: + python: ["3.10", "3.11", "3.12"] + runner: [docker-amd64, docker-arm64] steps: - name: Checkout repository @@ -20,13 +26,36 @@ jobs: . - name: Install build tools - run: pip install build twine + run: pip install build Cython - - name: Build package - run: python -m build + - name: Build wheel + run: python -m build --wheel + + - name: Upload wheel artifact + uses: actions/upload-artifact@v3 + with: + name: wheel-${{ matrix.runner }}-py${{ matrix.python }} + path: dist/*.whl + + publish: + name: Publish to PyPI + needs: build + runs-on: docker-amd64 + container: + image: python:3.12-bookworm + + steps: + - name: Download all wheels + uses: actions/download-artifact@v3 + with: + path: dist/ + merge-multiple: true + + - name: Install twine + run: pip install twine - name: Publish to PyPI env: TWINE_USERNAME: __token__ TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }} - run: twine upload dist/* + run: twine upload dist/**/*.whl diff --git a/.gitignore b/.gitignore index 759ff16..7cd094c 100644 --- a/.gitignore +++ b/.gitignore @@ -52,6 +52,10 @@ dist/ *.egg *.sh +# Cython generated files +*.so +*.c + # Virtual environments venv/ .env diff --git a/nomyo/__init__.py b/nomyo/__init__.py index e1406d8..92a83e8 100644 --- a/nomyo/__init__.py +++ b/nomyo/__init__.py @@ -51,6 +51,6 @@ try: except ImportError: pass -__version__ = "0.2.3" +__version__ = "0.2.4" __author__ = "NOMYO AI" __license__ = "Apache-2.0" diff --git a/pyproject.toml b/pyproject.toml index 108f1e2..ba9f96f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,10 +1,10 @@ [build-system] -requires = ["hatchling>=1.0.0", "wheel"] -build-backend = "hatchling.build" +requires = ["setuptools>=68", "wheel", "Cython>=3.0"] +build-backend = "setuptools.build_meta" [project] name = "nomyo" -version = "0.2.3" +version = "0.2.4" description = "OpenAI-compatible secure chat client with end-to-end encryption for NOMYO Inference Endpoints" authors = [ {name = "NOMYO.AI", email = "ichi@nomyo.ai"}, @@ -42,12 +42,9 @@ dependencies = [ [project.urls] Homepage = "https://www.nomyo.ai" -Documentation = "https://bitfreedom.net/code/nomyo-ai/nomyo/src/branch/main/doc" +Documentation = "https://bitfreedom.net/code/nomyo-ai/nomyo/wiki/NOMYO-Secure-Client-Documentation" Repository = "https://bitfreedom.net/code/nomyo-ai/nomyo" Issues = "https://bitfreedom.net/code/nomyo-ai/nomyo/issues" -[tool.hatch.build.targets.wheel] -packages = ["nomyo"] - -[tool.hatch.build.targets.sdist] -exclude = ["test/", "build.sh", "dist/"] +[tool.setuptools.packages.find] +include = ["nomyo*"] diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..92d0bd3 --- /dev/null +++ b/setup.py @@ -0,0 +1,31 @@ +from setuptools import setup +from setuptools.command.build_py import build_py as _build_py +from Cython.Build import cythonize + +# Modules compiled to .so — exclude their .py source from the wheel +COMPILED_MODULES = {"nomyo", "SecureCompletionClient", "SecureMemory"} + + +class BuildPyNoPy(_build_py): + """Skip copying .py source files for cythonized modules.""" + + def find_package_modules(self, package, package_dir): + modules = super().find_package_modules(package, package_dir) + return [ + (pkg, mod, path) + for pkg, mod, path in modules + if not (pkg == "nomyo" and mod in COMPILED_MODULES) + ] + + +setup( + ext_modules=cythonize( + [ + "nomyo/nomyo.py", + "nomyo/SecureCompletionClient.py", + "nomyo/SecureMemory.py", + ], + compiler_directives={"language_level": "3"}, + ), + cmdclass={"build_py": BuildPyNoPy}, +)