summaryrefslogtreecommitdiffstats
path: root/pyproject.toml
diff options
context:
space:
mode:
authordusoleil <howcansocksbereal@gmail.com>2023-02-23 05:29:21 -0500
committerdusoleil <howcansocksbereal@gmail.com>2023-02-23 22:52:57 -0500
commit9f4648dae644f2fb9deb4c68859d6cdfd0bc0530 (patch)
tree2adb421d7fd436e7f111dc9b72b7cd937fcc0cb0 /pyproject.toml
parentb016d2b55c16d1d7303cd93d5a9a3e2362a9fb58 (diff)
downloadsploit-9f4648dae644f2fb9deb4c68859d6cdfd0bc0530.tar.gz
sploit-9f4648dae644f2fb9deb4c68859d6cdfd0bc0530.zip
Dynamically source version in toml from git
Instead of hard-coding the version into the pyproject.toml, we can dynamically source it at build time. Ideally, we want to use git describe as a single authority source on the version. The version is stored in sploit.__version__ and can be consumed during sploit runtime or during a build/package to populate the project's core metadata version in the toml file. hatchling provides a tool.hatch.version plugin that can read out the variable during a build/package. Because this variable is populated from a git command, if the source tree isn't in a git repo, it will fail. In this case, sploit will report a PEP 440 compliant fake version "0+unknown.version" to let the user know. Because a packaged distribution doesn't exist in a git repo, we want to bake in the version at build time into the package. hatchling provides a plugin to help with this, but it had some technical limitations that didn't quite work for our use case. Instead, I added a custom build hook which will take the version sourced from the package (and by proxy the git command), and overwrite the __init__.py with a hard-coded version in the __version__ variable. This means that built/packaged distributions of this project will have a fixed version hard-coded in rather than dynamically sourcing from git. The build hook operates just before the build executes. It seems that most build/packager front-ends (e.g. build, pip) will just run it in the current source tree rather than making a temp copy. This means that when we modify the __init__.py, it is modifying our git tree. Ideally, we want this to be restored at the end of the build. The build hook interface allows us to write a hook that happens after the build, but it won't run in the case of a crash or failed build. Instead, I added a custom solution to this using a member variable deconstructor. If the build ends in any way, the original contents of __init__.py are written back out. Signed-off-by: dusoleil <howcansocksbereal@gmail.com> Reviewed-by: Malfurious <m@lfurio.us>
Diffstat (limited to 'pyproject.toml')
-rw-r--r--pyproject.toml11
1 files changed, 10 insertions, 1 deletions
diff --git a/pyproject.toml b/pyproject.toml
index 385c6ce..d4aa8b3 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,5 @@
[project]
name = "sploit"
-version = "0.1"
description = "sploit is a process interaction automation tool with software exploitation focused utilities."
readme = "README.txt"
requires-python = ">=3.8"
@@ -10,6 +9,7 @@ authors = [
{name="dusoleil",email="howcansocksbereal@gmail.com"},
{name="Malfurious",email="m@lfurio.us"},
]
+dynamic = ["version"]
[project.urls]
"Homepage" = "https://github.com/dusoleil/sploit"
@@ -20,3 +20,12 @@ sploit = "sploit.main:main"
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
+
+[tool.hatch.version]
+source = "code"
+path = "sploit/__init__.py"
+search-paths = ["."]
+expression = "__version__"
+
+[tool.hatch.build.hooks.custom]
+path = "hooks/bake_version.py"