Harden packaging for a public release

Add the GPLv3 text (the package declared the licence but never shipped it),
a py.typed marker, and an sdist include/exclude allowlist so the distribution
carries only src/, docs/, README, LICENSE and pyproject. reference/ is a clone
of the GPL FreeRouting Java tree kept purely as a porting reference and must
never be redistributed inside this package; tests, caches and build output are
excluded too.

Switch to the PEP 639 SPDX licence expression with license-files, widen the
classifiers, and add an -o alias for -do. Rewrite the README around the engine
matrix: what each track and pass actually does, and what this is not (no
FreeRouting density parity on dense boards, and --diagonal is a recovery and
shortening pass, not a diagonal-native search).
This commit is contained in:
2026-07-13 18:17:13 -06:00
parent 758ba1fbe3
commit bf868b7b05
6 changed files with 853 additions and 20 deletions
+46 -3
View File
@@ -7,15 +7,30 @@ name = "freeroute"
version = "0.1.0"
description = "Native Python PCB autorouter — a Java-free port of the FreeRouting engine (Specctra DSN in, SES out)"
readme = "README.md"
license = { text = "GPL-3.0-or-later" }
license = "GPL-3.0-or-later"
license-files = ["LICENSE"]
authors = [{ name = "Ryan Malloy", email = "ryan@supported.systems" }]
keywords = ["pcb", "autorouter", "routing", "specctra", "dsn", "ses", "kicad", "eda"]
keywords = [
"pcb",
"autorouter",
"routing",
"specctra",
"dsn",
"ses",
"kicad",
"eda",
"freerouting",
]
classifiers = [
"Development Status :: 2 - Pre-Alpha",
"Development Status :: 3 - Alpha",
"Environment :: Console",
"Intended Audience :: Developers",
"Intended Audience :: Manufacturing",
"Operating System :: OS Independent",
"Topic :: Scientific/Engineering :: Electronic Design Automation (EDA)",
"Typing :: Typed",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3 :: Only",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
@@ -27,6 +42,8 @@ dependencies = []
[project.urls]
"Homepage" = "https://git.supported.systems/warehack.ing/freeroute"
"Repository" = "https://git.supported.systems/warehack.ing/freeroute"
"Issues" = "https://git.supported.systems/warehack.ing/freeroute/issues"
# The Java engine this is a port of; freeroute ships no upstream code.
"Upstream" = "https://github.com/freerouting/freerouting"
[project.scripts]
@@ -42,6 +59,32 @@ dev = [
[tool.hatch.build.targets.wheel]
packages = ["src/freeroute"]
[tool.hatch.build.targets.sdist]
# Ship the package, the licence, and the docs — nothing else. `reference/` is a
# clone of the GPL FreeRouting Java tree used only as a porting reference; it is
# never committed and must never be redistributed inside this package.
include = [
"/src",
"/docs",
"/README.md",
"/LICENSE",
"/pyproject.toml",
]
exclude = [
"/reference",
"/tests",
"/.github",
"/dist",
"/build",
"/CLAUDE.md",
"**/.env",
"**/__pycache__",
"**/*.py[cod]",
"**/.pytest_cache",
"**/.ruff_cache",
"**/.coverage",
]
[tool.ruff]
target-version = "py310"
line-length = 100