From 8e82e119e75e9a0b7b1d1d3a82d8bfbf9b34cdfe Mon Sep 17 00:00:00 2001 From: Nick Cao Date: Wed, 30 Apr 2025 11:05:22 -0400 Subject: [PATCH 1/7] Init hatch-pin-jumpstarter hook (cherry picked from commit bf4a62edbe58253fc6d02c3a6e4b032fe0b97125) --- packages/hatch-pin-jumpstarter/README.md | 0 packages/hatch-pin-jumpstarter/pyproject.toml | 20 ++++++++++++++++ .../src/hatch_pin_jumpstarter/__init__.py | 23 +++++++++++++++++++ .../src/hatch_pin_jumpstarter/py.typed | 0 pyproject.toml | 1 + 5 files changed, 44 insertions(+) create mode 100644 packages/hatch-pin-jumpstarter/README.md create mode 100644 packages/hatch-pin-jumpstarter/pyproject.toml create mode 100644 packages/hatch-pin-jumpstarter/src/hatch_pin_jumpstarter/__init__.py create mode 100644 packages/hatch-pin-jumpstarter/src/hatch_pin_jumpstarter/py.typed diff --git a/packages/hatch-pin-jumpstarter/README.md b/packages/hatch-pin-jumpstarter/README.md new file mode 100644 index 000000000..e69de29bb diff --git a/packages/hatch-pin-jumpstarter/pyproject.toml b/packages/hatch-pin-jumpstarter/pyproject.toml new file mode 100644 index 000000000..864236fbd --- /dev/null +++ b/packages/hatch-pin-jumpstarter/pyproject.toml @@ -0,0 +1,20 @@ +[project] +name = "hatch-pin-jumpstarter" +version = "0.1.0" +description = "Hatch plugin that pins jumpstarter packages in the monorepo" +readme = "README.md" +authors = [ + { name = "Nick Cao", email = "nickcao@nichi.co" } +] +requires-python = ">=3.12" +dependencies = [ + "hatchling>=1.27.0", + "packaging>=24.2", +] + +[build-system] +requires = ["hatchling"] +build-backend = "hatchling.build" + +[project.entry-points.hatch] +pin_jumpstarter = "hatch_pin_jumpstarter" diff --git a/packages/hatch-pin-jumpstarter/src/hatch_pin_jumpstarter/__init__.py b/packages/hatch-pin-jumpstarter/src/hatch_pin_jumpstarter/__init__.py new file mode 100644 index 000000000..fad8241e9 --- /dev/null +++ b/packages/hatch-pin-jumpstarter/src/hatch_pin_jumpstarter/__init__.py @@ -0,0 +1,23 @@ +from hatchling.metadata.plugin.interface import MetadataHookInterface +from hatchling.plugin import hookimpl +from packaging.requirements import Requirement +from packaging.specifiers import SpecifierSet + + +class PinJumpstarter(MetadataHookInterface): + PLUGIN_NAME = "pin_jumpstarter" + + def update(self, metadata): + version = metadata["version"] + dependencies = [] + for dep in metadata["dependencies"]: + req = Requirement(dep) + if req.name.startswith("jumpstarter"): + req.specifier &= SpecifierSet(f"=={version}") + dependencies.append(str(req)) + metadata["dependencies"] = dependencies + + +@hookimpl +def hatch_register_metadata_hook(): + return PinJumpstarter diff --git a/packages/hatch-pin-jumpstarter/src/hatch_pin_jumpstarter/py.typed b/packages/hatch-pin-jumpstarter/src/hatch_pin_jumpstarter/py.typed new file mode 100644 index 000000000..e69de29bb diff --git a/pyproject.toml b/pyproject.toml index 41a51cd61..d6790b3c6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -32,6 +32,7 @@ jumpstarter-kubernetes = { workspace = true } jumpstarter-protocol = { workspace = true } jumpstarter-testing = { workspace = true } sphinx-click = { git = "https://github.com/NickCao/sphinx-click" } +hatch-pin-jumpstarter = { workspace = true } [dependency-groups] docs = [ From 63f1a1dbe6ce30651821b2a248ac53086da8b1fe Mon Sep 17 00:00:00 2001 From: Nick Cao Date: Wed, 30 Apr 2025 11:07:16 -0400 Subject: [PATCH 2/7] Use hatch-pin-jumpstarter in all packages (cherry picked from commit fc47b0e3f7176fb4c7055ed16535f6da4610f81d) --- packages/jumpstarter-all/pyproject.toml | 5 ++++- packages/jumpstarter-cli-admin/pyproject.toml | 5 ++++- packages/jumpstarter-cli-common/pyproject.toml | 5 ++++- packages/jumpstarter-cli-driver/pyproject.toml | 5 ++++- packages/jumpstarter-cli/pyproject.toml | 5 ++++- packages/jumpstarter-driver-can/pyproject.toml | 5 ++++- packages/jumpstarter-driver-composite/pyproject.toml | 5 ++++- packages/jumpstarter-driver-corellium/pyproject.toml | 5 ++++- packages/jumpstarter-driver-dutlink/pyproject.toml | 5 ++++- packages/jumpstarter-driver-flashers/pyproject.toml | 5 ++++- packages/jumpstarter-driver-http/pyproject.toml | 5 ++++- packages/jumpstarter-driver-network/pyproject.toml | 5 ++++- packages/jumpstarter-driver-opendal/pyproject.toml | 5 ++++- packages/jumpstarter-driver-power/pyproject.toml | 5 ++++- packages/jumpstarter-driver-probe-rs/pyproject.toml | 5 ++++- packages/jumpstarter-driver-pyserial/pyproject.toml | 5 ++++- packages/jumpstarter-driver-qemu/pyproject.toml | 5 ++++- packages/jumpstarter-driver-raspberrypi/pyproject.toml | 5 ++++- packages/jumpstarter-driver-sdwire/pyproject.toml | 5 ++++- packages/jumpstarter-driver-shell/pyproject.toml | 5 ++++- packages/jumpstarter-driver-snmp/pyproject.toml | 5 ++++- packages/jumpstarter-driver-tftp/pyproject.toml | 5 ++++- packages/jumpstarter-driver-uboot/pyproject.toml | 5 ++++- packages/jumpstarter-driver-ustreamer/pyproject.toml | 5 ++++- packages/jumpstarter-driver-yepkit/pyproject.toml | 5 ++++- packages/jumpstarter-imagehash/pyproject.toml | 5 ++++- packages/jumpstarter-kubernetes/pyproject.toml | 5 ++++- packages/jumpstarter-protocol/pyproject.toml | 5 ++++- packages/jumpstarter-testing/pyproject.toml | 5 ++++- packages/jumpstarter/pyproject.toml | 5 ++++- 30 files changed, 120 insertions(+), 30 deletions(-) diff --git a/packages/jumpstarter-all/pyproject.toml b/packages/jumpstarter-all/pyproject.toml index 55191d974..067813863 100644 --- a/packages/jumpstarter-all/pyproject.toml +++ b/packages/jumpstarter-all/pyproject.toml @@ -50,5 +50,8 @@ source = "vcs" raw-options = { 'root' = '../../' } [build-system] -requires = ["hatchling", "hatch-vcs"] +requires = ["hatchling", "hatch-vcs", "hatch-pin-jumpstarter"] build-backend = "hatchling.build" + +[tool.hatch.metadata.hooks.pin_jumpstarter] +name = "pin_jumpstarter" diff --git a/packages/jumpstarter-cli-admin/pyproject.toml b/packages/jumpstarter-cli-admin/pyproject.toml index 37b176751..a3b6949c5 100644 --- a/packages/jumpstarter-cli-admin/pyproject.toml +++ b/packages/jumpstarter-cli-admin/pyproject.toml @@ -31,5 +31,8 @@ source = "vcs" raw-options = { 'root' = '../../' } [build-system] -requires = ["hatchling", "hatch-vcs"] +requires = ["hatchling", "hatch-vcs", "hatch-pin-jumpstarter"] build-backend = "hatchling.build" + +[tool.hatch.metadata.hooks.pin_jumpstarter] +name = "pin_jumpstarter" diff --git a/packages/jumpstarter-cli-common/pyproject.toml b/packages/jumpstarter-cli-common/pyproject.toml index 853e7ccfe..32c49b55e 100644 --- a/packages/jumpstarter-cli-common/pyproject.toml +++ b/packages/jumpstarter-cli-common/pyproject.toml @@ -36,5 +36,8 @@ source = "vcs" raw-options = { 'root' = '../../' } [build-system] -requires = ["hatchling", "hatch-vcs"] +requires = ["hatchling", "hatch-vcs", "hatch-pin-jumpstarter"] build-backend = "hatchling.build" + +[tool.hatch.metadata.hooks.pin_jumpstarter] +name = "pin_jumpstarter" diff --git a/packages/jumpstarter-cli-driver/pyproject.toml b/packages/jumpstarter-cli-driver/pyproject.toml index 5b773f95f..1b1d95145 100644 --- a/packages/jumpstarter-cli-driver/pyproject.toml +++ b/packages/jumpstarter-cli-driver/pyproject.toml @@ -35,5 +35,8 @@ source = "vcs" raw-options = { 'root' = '../../' } [build-system] -requires = ["hatchling", "hatch-vcs"] +requires = ["hatchling", "hatch-vcs", "hatch-pin-jumpstarter"] build-backend = "hatchling.build" + +[tool.hatch.metadata.hooks.pin_jumpstarter] +name = "pin_jumpstarter" diff --git a/packages/jumpstarter-cli/pyproject.toml b/packages/jumpstarter-cli/pyproject.toml index c1f60090b..e543950c9 100644 --- a/packages/jumpstarter-cli/pyproject.toml +++ b/packages/jumpstarter-cli/pyproject.toml @@ -40,5 +40,8 @@ source = "vcs" raw-options = { 'root' = '../../' } [build-system] -requires = ["hatchling", "hatch-vcs"] +requires = ["hatchling", "hatch-vcs", "hatch-pin-jumpstarter"] build-backend = "hatchling.build" + +[tool.hatch.metadata.hooks.pin_jumpstarter] +name = "pin_jumpstarter" diff --git a/packages/jumpstarter-driver-can/pyproject.toml b/packages/jumpstarter-driver-can/pyproject.toml index 363aec333..d77d78e0b 100644 --- a/packages/jumpstarter-driver-can/pyproject.toml +++ b/packages/jumpstarter-driver-can/pyproject.toml @@ -29,5 +29,8 @@ source = "vcs" raw-options = { 'root' = '../../' } [build-system] -requires = ["hatchling", "hatch-vcs"] +requires = ["hatchling", "hatch-vcs", "hatch-pin-jumpstarter"] build-backend = "hatchling.build" + +[tool.hatch.metadata.hooks.pin_jumpstarter] +name = "pin_jumpstarter" diff --git a/packages/jumpstarter-driver-composite/pyproject.toml b/packages/jumpstarter-driver-composite/pyproject.toml index 2d0906bd2..16c6a8b01 100644 --- a/packages/jumpstarter-driver-composite/pyproject.toml +++ b/packages/jumpstarter-driver-composite/pyproject.toml @@ -27,5 +27,8 @@ source = "vcs" raw-options = { 'root' = '../../' } [build-system] -requires = ["hatchling", "hatch-vcs"] +requires = ["hatchling", "hatch-vcs", "hatch-pin-jumpstarter"] build-backend = "hatchling.build" + +[tool.hatch.metadata.hooks.pin_jumpstarter] +name = "pin_jumpstarter" diff --git a/packages/jumpstarter-driver-corellium/pyproject.toml b/packages/jumpstarter-driver-corellium/pyproject.toml index 65b13a09f..3b72c3362 100644 --- a/packages/jumpstarter-driver-corellium/pyproject.toml +++ b/packages/jumpstarter-driver-corellium/pyproject.toml @@ -29,5 +29,8 @@ source = "vcs" raw-options = { 'root' = '../../' } [build-system] -requires = ["hatchling", "hatch-vcs"] +requires = ["hatchling", "hatch-vcs", "hatch-pin-jumpstarter"] build-backend = "hatchling.build" + +[tool.hatch.metadata.hooks.pin_jumpstarter] +name = "pin_jumpstarter" diff --git a/packages/jumpstarter-driver-dutlink/pyproject.toml b/packages/jumpstarter-driver-dutlink/pyproject.toml index 22f213337..7e8d9f22f 100644 --- a/packages/jumpstarter-driver-dutlink/pyproject.toml +++ b/packages/jumpstarter-driver-dutlink/pyproject.toml @@ -40,5 +40,8 @@ source = "vcs" raw-options = { 'root' = '../../' } [build-system] -requires = ["hatchling", "hatch-vcs"] +requires = ["hatchling", "hatch-vcs", "hatch-pin-jumpstarter"] build-backend = "hatchling.build" + +[tool.hatch.metadata.hooks.pin_jumpstarter] +name = "pin_jumpstarter" diff --git a/packages/jumpstarter-driver-flashers/pyproject.toml b/packages/jumpstarter-driver-flashers/pyproject.toml index f82d5d599..e2fd8f08e 100644 --- a/packages/jumpstarter-driver-flashers/pyproject.toml +++ b/packages/jumpstarter-driver-flashers/pyproject.toml @@ -40,8 +40,11 @@ jumpstarter-driver-uboot = { workspace = true } #asyncio_mode = "auto" [build-system] -requires = ["hatchling", "hatch-vcs"] +requires = ["hatchling", "hatch-vcs", "hatch-pin-jumpstarter"] build-backend = "hatchling.build" [dependency-groups] dev = ["pytest-cov>=6.0.0", "pytest>=8.3.3"] + +[tool.hatch.metadata.hooks.pin_jumpstarter] +name = "pin_jumpstarter" diff --git a/packages/jumpstarter-driver-http/pyproject.toml b/packages/jumpstarter-driver-http/pyproject.toml index 286d367e9..5dee8e350 100644 --- a/packages/jumpstarter-driver-http/pyproject.toml +++ b/packages/jumpstarter-driver-http/pyproject.toml @@ -28,7 +28,7 @@ asyncio_default_fixture_loop_scope = "function" testpaths = ["src"] [build-system] -requires = ["hatchling", "hatch-vcs"] +requires = ["hatchling", "hatch-vcs", "hatch-pin-jumpstarter"] build-backend = "hatchling.build" [dependency-groups] @@ -38,3 +38,6 @@ dev = [ "pytest-asyncio>=0.0.0", "pytest-asyncio>=0.24.0", ] + +[tool.hatch.metadata.hooks.pin_jumpstarter] +name = "pin_jumpstarter" diff --git a/packages/jumpstarter-driver-network/pyproject.toml b/packages/jumpstarter-driver-network/pyproject.toml index e5fcb3600..2ed0ad8ac 100644 --- a/packages/jumpstarter-driver-network/pyproject.toml +++ b/packages/jumpstarter-driver-network/pyproject.toml @@ -47,5 +47,8 @@ source = "vcs" raw-options = { 'root' = '../../' } [build-system] -requires = ["hatchling", "hatch-vcs"] +requires = ["hatchling", "hatch-vcs", "hatch-pin-jumpstarter"] build-backend = "hatchling.build" + +[tool.hatch.metadata.hooks.pin_jumpstarter] +name = "pin_jumpstarter" diff --git a/packages/jumpstarter-driver-opendal/pyproject.toml b/packages/jumpstarter-driver-opendal/pyproject.toml index 7f30a0c44..d05074fa5 100644 --- a/packages/jumpstarter-driver-opendal/pyproject.toml +++ b/packages/jumpstarter-driver-opendal/pyproject.toml @@ -26,5 +26,8 @@ source = "vcs" raw-options = { 'root' = '../../' } [build-system] -requires = ["hatchling", "hatch-vcs"] +requires = ["hatchling", "hatch-vcs", "hatch-pin-jumpstarter"] build-backend = "hatchling.build" + +[tool.hatch.metadata.hooks.pin_jumpstarter] +name = "pin_jumpstarter" diff --git a/packages/jumpstarter-driver-power/pyproject.toml b/packages/jumpstarter-driver-power/pyproject.toml index 4f355cbcf..adb54d841 100644 --- a/packages/jumpstarter-driver-power/pyproject.toml +++ b/packages/jumpstarter-driver-power/pyproject.toml @@ -26,5 +26,8 @@ source = "vcs" raw-options = { 'root' = '../../' } [build-system] -requires = ["hatchling", "hatch-vcs"] +requires = ["hatchling", "hatch-vcs", "hatch-pin-jumpstarter"] build-backend = "hatchling.build" + +[tool.hatch.metadata.hooks.pin_jumpstarter] +name = "pin_jumpstarter" diff --git a/packages/jumpstarter-driver-probe-rs/pyproject.toml b/packages/jumpstarter-driver-probe-rs/pyproject.toml index 535d3b0a0..cb00c138c 100644 --- a/packages/jumpstarter-driver-probe-rs/pyproject.toml +++ b/packages/jumpstarter-driver-probe-rs/pyproject.toml @@ -28,8 +28,11 @@ log_cli_level = "INFO" testpaths = ["jumpstarter_driver_probe_rs"] [build-system] -requires = ["hatchling", "hatch-vcs"] +requires = ["hatchling", "hatch-vcs", "hatch-pin-jumpstarter"] build-backend = "hatchling.build" [dependency-groups] dev = ["pytest-cov>=6.0.0", "pytest>=8.3.3"] + +[tool.hatch.metadata.hooks.pin_jumpstarter] +name = "pin_jumpstarter" diff --git a/packages/jumpstarter-driver-pyserial/pyproject.toml b/packages/jumpstarter-driver-pyserial/pyproject.toml index 526272f80..7458fbe83 100644 --- a/packages/jumpstarter-driver-pyserial/pyproject.toml +++ b/packages/jumpstarter-driver-pyserial/pyproject.toml @@ -34,5 +34,8 @@ source = "vcs" raw-options = { 'root' = '../../' } [build-system] -requires = ["hatchling", "hatch-vcs"] +requires = ["hatchling", "hatch-vcs", "hatch-pin-jumpstarter"] build-backend = "hatchling.build" + +[tool.hatch.metadata.hooks.pin_jumpstarter] +name = "pin_jumpstarter" diff --git a/packages/jumpstarter-driver-qemu/pyproject.toml b/packages/jumpstarter-driver-qemu/pyproject.toml index 2ca838c1f..97a73d080 100644 --- a/packages/jumpstarter-driver-qemu/pyproject.toml +++ b/packages/jumpstarter-driver-qemu/pyproject.toml @@ -40,5 +40,8 @@ jumpstarter-driver-pyserial = { workspace = true } jumpstarter-driver-power = { workspace = true } [build-system] -requires = ["hatchling", "hatch-vcs"] +requires = ["hatchling", "hatch-vcs", "hatch-pin-jumpstarter"] build-backend = "hatchling.build" + +[tool.hatch.metadata.hooks.pin_jumpstarter] +name = "pin_jumpstarter" diff --git a/packages/jumpstarter-driver-raspberrypi/pyproject.toml b/packages/jumpstarter-driver-raspberrypi/pyproject.toml index 8115ed4e8..6601be5f5 100644 --- a/packages/jumpstarter-driver-raspberrypi/pyproject.toml +++ b/packages/jumpstarter-driver-raspberrypi/pyproject.toml @@ -28,5 +28,8 @@ source = "vcs" raw-options = { 'root' = '../../' } [build-system] -requires = ["hatchling", "hatch-vcs"] +requires = ["hatchling", "hatch-vcs", "hatch-pin-jumpstarter"] build-backend = "hatchling.build" + +[tool.hatch.metadata.hooks.pin_jumpstarter] +name = "pin_jumpstarter" diff --git a/packages/jumpstarter-driver-sdwire/pyproject.toml b/packages/jumpstarter-driver-sdwire/pyproject.toml index a0f621b89..6d2ea0886 100644 --- a/packages/jumpstarter-driver-sdwire/pyproject.toml +++ b/packages/jumpstarter-driver-sdwire/pyproject.toml @@ -28,5 +28,8 @@ source = "vcs" raw-options = { 'root' = '../../' } [build-system] -requires = ["hatchling", "hatch-vcs"] +requires = ["hatchling", "hatch-vcs", "hatch-pin-jumpstarter"] build-backend = "hatchling.build" + +[tool.hatch.metadata.hooks.pin_jumpstarter] +name = "pin_jumpstarter" diff --git a/packages/jumpstarter-driver-shell/pyproject.toml b/packages/jumpstarter-driver-shell/pyproject.toml index 356556c28..01529a714 100644 --- a/packages/jumpstarter-driver-shell/pyproject.toml +++ b/packages/jumpstarter-driver-shell/pyproject.toml @@ -30,5 +30,8 @@ source = "vcs" raw-options = { 'root' = '../../' } [build-system] -requires = ["hatchling", "hatch-vcs"] +requires = ["hatchling", "hatch-vcs", "hatch-pin-jumpstarter"] build-backend = "hatchling.build" + +[tool.hatch.metadata.hooks.pin_jumpstarter] +name = "pin_jumpstarter" diff --git a/packages/jumpstarter-driver-snmp/pyproject.toml b/packages/jumpstarter-driver-snmp/pyproject.toml index 3b9177c00..16dbe0437 100644 --- a/packages/jumpstarter-driver-snmp/pyproject.toml +++ b/packages/jumpstarter-driver-snmp/pyproject.toml @@ -35,5 +35,8 @@ source = "vcs" raw-options = { 'root' = '../../' } [build-system] -requires = ["hatchling", "hatch-vcs"] +requires = ["hatchling", "hatch-vcs", "hatch-pin-jumpstarter"] build-backend = "hatchling.build" + +[tool.hatch.metadata.hooks.pin_jumpstarter] +name = "pin_jumpstarter" diff --git a/packages/jumpstarter-driver-tftp/pyproject.toml b/packages/jumpstarter-driver-tftp/pyproject.toml index 144d73039..586a731d8 100644 --- a/packages/jumpstarter-driver-tftp/pyproject.toml +++ b/packages/jumpstarter-driver-tftp/pyproject.toml @@ -38,5 +38,8 @@ testpaths = ["jumpstarter_driver_tftp"] asyncio_mode = "auto" [build-system] -requires = ["hatchling", "hatch-vcs"] +requires = ["hatchling", "hatch-vcs", "hatch-pin-jumpstarter"] build-backend = "hatchling.build" + +[tool.hatch.metadata.hooks.pin_jumpstarter] +name = "pin_jumpstarter" diff --git a/packages/jumpstarter-driver-uboot/pyproject.toml b/packages/jumpstarter-driver-uboot/pyproject.toml index 92c8f91ec..2363ec554 100644 --- a/packages/jumpstarter-driver-uboot/pyproject.toml +++ b/packages/jumpstarter-driver-uboot/pyproject.toml @@ -35,5 +35,8 @@ jumpstarter-driver-composite = { workspace = true } jumpstarter-driver-qemu = { workspace = true } [build-system] -requires = ["hatchling", "hatch-vcs"] +requires = ["hatchling", "hatch-vcs", "hatch-pin-jumpstarter"] build-backend = "hatchling.build" + +[tool.hatch.metadata.hooks.pin_jumpstarter] +name = "pin_jumpstarter" diff --git a/packages/jumpstarter-driver-ustreamer/pyproject.toml b/packages/jumpstarter-driver-ustreamer/pyproject.toml index df451d6ff..3d9a0042a 100644 --- a/packages/jumpstarter-driver-ustreamer/pyproject.toml +++ b/packages/jumpstarter-driver-ustreamer/pyproject.toml @@ -24,5 +24,8 @@ source = "vcs" raw-options = { 'root' = '../../' } [build-system] -requires = ["hatchling", "hatch-vcs"] +requires = ["hatchling", "hatch-vcs", "hatch-pin-jumpstarter"] build-backend = "hatchling.build" + +[tool.hatch.metadata.hooks.pin_jumpstarter] +name = "pin_jumpstarter" diff --git a/packages/jumpstarter-driver-yepkit/pyproject.toml b/packages/jumpstarter-driver-yepkit/pyproject.toml index a45cf8869..6b8e207e1 100644 --- a/packages/jumpstarter-driver-yepkit/pyproject.toml +++ b/packages/jumpstarter-driver-yepkit/pyproject.toml @@ -33,8 +33,11 @@ testpaths = ["jumpstarter_driver_yepkit"] asyncio_mode = "auto" [build-system] -requires = ["hatchling", "hatch-vcs"] +requires = ["hatchling", "hatch-vcs", "hatch-pin-jumpstarter"] build-backend = "hatchling.build" [dependency-groups] dev = ["pytest-cov>=6.0.0", "pytest>=8.3.3"] + +[tool.hatch.metadata.hooks.pin_jumpstarter] +name = "pin_jumpstarter" diff --git a/packages/jumpstarter-imagehash/pyproject.toml b/packages/jumpstarter-imagehash/pyproject.toml index f12876040..9019e54ed 100644 --- a/packages/jumpstarter-imagehash/pyproject.toml +++ b/packages/jumpstarter-imagehash/pyproject.toml @@ -24,5 +24,8 @@ source = "vcs" raw-options = { 'root' = '../../' } [build-system] -requires = ["hatchling", "hatch-vcs"] +requires = ["hatchling", "hatch-vcs", "hatch-pin-jumpstarter"] build-backend = "hatchling.build" + +[tool.hatch.metadata.hooks.pin_jumpstarter] +name = "pin_jumpstarter" diff --git a/packages/jumpstarter-kubernetes/pyproject.toml b/packages/jumpstarter-kubernetes/pyproject.toml index d843f6b31..75981e820 100644 --- a/packages/jumpstarter-kubernetes/pyproject.toml +++ b/packages/jumpstarter-kubernetes/pyproject.toml @@ -30,5 +30,8 @@ source = "vcs" raw-options = { 'root' = '../../' } [build-system] -requires = ["hatchling", "hatch-vcs"] +requires = ["hatchling", "hatch-vcs", "hatch-pin-jumpstarter"] build-backend = "hatchling.build" + +[tool.hatch.metadata.hooks.pin_jumpstarter] +name = "pin_jumpstarter" diff --git a/packages/jumpstarter-protocol/pyproject.toml b/packages/jumpstarter-protocol/pyproject.toml index a9a60f5ff..19bf6ef8e 100644 --- a/packages/jumpstarter-protocol/pyproject.toml +++ b/packages/jumpstarter-protocol/pyproject.toml @@ -32,5 +32,8 @@ source = "vcs" raw-options = { 'root' = '../../' } [build-system] -requires = ["hatchling", "hatch-vcs"] +requires = ["hatchling", "hatch-vcs", "hatch-pin-jumpstarter"] build-backend = "hatchling.build" + +[tool.hatch.metadata.hooks.pin_jumpstarter] +name = "pin_jumpstarter" diff --git a/packages/jumpstarter-testing/pyproject.toml b/packages/jumpstarter-testing/pyproject.toml index 0b31071fb..e717b3b47 100644 --- a/packages/jumpstarter-testing/pyproject.toml +++ b/packages/jumpstarter-testing/pyproject.toml @@ -26,5 +26,8 @@ source = "vcs" raw-options = { 'root' = '../../' } [build-system] -requires = ["hatchling", "hatch-vcs"] +requires = ["hatchling", "hatch-vcs", "hatch-pin-jumpstarter"] build-backend = "hatchling.build" + +[tool.hatch.metadata.hooks.pin_jumpstarter] +name = "pin_jumpstarter" diff --git a/packages/jumpstarter/pyproject.toml b/packages/jumpstarter/pyproject.toml index dd4eb7d6d..686a8c339 100644 --- a/packages/jumpstarter/pyproject.toml +++ b/packages/jumpstarter/pyproject.toml @@ -44,5 +44,8 @@ source = "vcs" raw-options = { 'root' = '../../' } [build-system] -requires = ["hatchling", "hatch-vcs"] +requires = ["hatchling", "hatch-vcs", "hatch-pin-jumpstarter"] build-backend = "hatchling.build" + +[tool.hatch.metadata.hooks.pin_jumpstarter] +name = "pin_jumpstarter" From e637b4b84ae8dc50213f2b7f0e90d6c2bd70eb87 Mon Sep 17 00:00:00 2001 From: Nick Cao Date: Wed, 30 Apr 2025 11:10:34 -0400 Subject: [PATCH 3/7] fixup! Init hatch-pin-jumpstarter hook (cherry picked from commit ddf4afc31fd05ee7b02645fbe703039d1b428a99) --- packages/hatch-pin-jumpstarter/pyproject.toml | 2 +- uv.lock | 49 +++++++++++++++++++ 2 files changed, 50 insertions(+), 1 deletion(-) diff --git a/packages/hatch-pin-jumpstarter/pyproject.toml b/packages/hatch-pin-jumpstarter/pyproject.toml index 864236fbd..3e257c3e3 100644 --- a/packages/hatch-pin-jumpstarter/pyproject.toml +++ b/packages/hatch-pin-jumpstarter/pyproject.toml @@ -6,7 +6,7 @@ readme = "README.md" authors = [ { name = "Nick Cao", email = "nickcao@nichi.co" } ] -requires-python = ">=3.12" +requires-python = ">=3.11" dependencies = [ "hatchling>=1.27.0", "packaging>=24.2", diff --git a/uv.lock b/uv.lock index e4080a7a8..41c6a1de3 100644 --- a/uv.lock +++ b/uv.lock @@ -4,6 +4,7 @@ requires-python = ">=3.11" [manifest] members = [ + "hatch-pin-jumpstarter", "jumpstarter", "jumpstarter-all", "jumpstarter-cli", @@ -807,6 +808,36 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/95/04/ff642e65ad6b90db43e668d70ffb6736436c7ce41fcc549f4e9472234127/h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761", size = 58259 }, ] +[[package]] +name = "hatch-pin-jumpstarter" +version = "0.1.0" +source = { editable = "packages/hatch-pin-jumpstarter" } +dependencies = [ + { name = "hatchling" }, + { name = "packaging" }, +] + +[package.metadata] +requires-dist = [ + { name = "hatchling", specifier = ">=1.27.0" }, + { name = "packaging", specifier = ">=24.2" }, +] + +[[package]] +name = "hatchling" +version = "1.27.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "packaging" }, + { name = "pathspec" }, + { name = "pluggy" }, + { name = "trove-classifiers" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8f/8a/cc1debe3514da292094f1c3a700e4ca25442489731ef7c0814358816bb03/hatchling-1.27.0.tar.gz", hash = "sha256:971c296d9819abb3811112fc52c7a9751c8d381898f36533bb16f9791e941fd6", size = 54983 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/08/e7/ae38d7a6dfba0533684e0b2136817d667588ae3ec984c1a4e5df5eb88482/hatchling-1.27.0-py3-none-any.whl", hash = "sha256:d3a2f3567c4f926ea39849cdf924c7e99e6686c9c8e288ae1037c8fa2a5d937b", size = 75794 }, +] + [[package]] name = "identify" version = "2.6.9" @@ -2405,6 +2436,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/15/f8/c7bd0ef12954a81a1d3cea60a13946bd9a49a0036a5927770c461eade7ae/paramiko-3.5.1-py3-none-any.whl", hash = "sha256:43b9a0501fc2b5e70680388d9346cf252cfb7d00b0667c39e80eb43a408b8f61", size = 227298 }, ] +[[package]] +name = "pathspec" +version = "0.12.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ca/bc/f35b8446f4531a7cb215605d100cd88b7ac6f44ab3fc94870c120ab3adbf/pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712", size = 51043 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08", size = 31191 }, +] + [[package]] name = "pexpect" version = "4.9.0" @@ -3520,6 +3560,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/c9/55/c4d9bea8b3d7937901958f65124123512419ab0eb73695e5f382521abbfb/trio-0.29.0-py3-none-any.whl", hash = "sha256:d8c463f1a9cc776ff63e331aba44c125f423a5a13c684307e828d930e625ba66", size = 492920 }, ] +[[package]] +name = "trove-classifiers" +version = "2025.4.28.22" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b0/f3/4d82f6d81391237842c4250766ae02c7a178a3a236e0fbd749ec154da17c/trove_classifiers-2025.4.28.22.tar.gz", hash = "sha256:42bef4957a74fe7724b8310dafd4b23e0a71406a4812cf4dfd65e2ee34f1943d", size = 16883 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e5/d6/647f7aca9314bcc83d5608166f89121f55ccc05402b0cd1a1e72cffa3e62/trove_classifiers-2025.4.28.22-py3-none-any.whl", hash = "sha256:fdb453fefa3a0da9c18b8d390846e6df7e961e8924703559ea9be07ec99c0925", size = 14056 }, +] + [[package]] name = "truststore" version = "0.10.1" From 38646f8be2a7002423c11047ea225870c34951b3 Mon Sep 17 00:00:00 2001 From: Nick Cao Date: Wed, 30 Apr 2025 13:12:15 -0400 Subject: [PATCH 4/7] Make it a build plugin instead (cherry picked from commit 23fba9f88842f0b06df1de256d0ff35a55a6b239) --- packages/hatch-pin-jumpstarter/pyproject.toml | 2 + .../src/hatch_pin_jumpstarter/__init__.py | 50 ++++++++++++++----- 2 files changed, 40 insertions(+), 12 deletions(-) diff --git a/packages/hatch-pin-jumpstarter/pyproject.toml b/packages/hatch-pin-jumpstarter/pyproject.toml index 3e257c3e3..87e985123 100644 --- a/packages/hatch-pin-jumpstarter/pyproject.toml +++ b/packages/hatch-pin-jumpstarter/pyproject.toml @@ -10,6 +10,8 @@ requires-python = ">=3.11" dependencies = [ "hatchling>=1.27.0", "packaging>=24.2", + "tomli>=2.2.1", + "tomli-w>=1.2.0", ] [build-system] diff --git a/packages/hatch-pin-jumpstarter/src/hatch_pin_jumpstarter/__init__.py b/packages/hatch-pin-jumpstarter/src/hatch_pin_jumpstarter/__init__.py index fad8241e9..f2daeab8f 100644 --- a/packages/hatch-pin-jumpstarter/src/hatch_pin_jumpstarter/__init__.py +++ b/packages/hatch-pin-jumpstarter/src/hatch_pin_jumpstarter/__init__.py @@ -1,23 +1,49 @@ -from hatchling.metadata.plugin.interface import MetadataHookInterface +import os +from pathlib import Path +from tempfile import NamedTemporaryFile + +import tomli +import tomli_w +from hatchling.builders.hooks.plugin.interface import BuildHookInterface from hatchling.plugin import hookimpl from packaging.requirements import Requirement from packaging.specifiers import SpecifierSet -class PinJumpstarter(MetadataHookInterface): +class PinJumpstarter(BuildHookInterface): PLUGIN_NAME = "pin_jumpstarter" - def update(self, metadata): - version = metadata["version"] - dependencies = [] - for dep in metadata["dependencies"]: - req = Requirement(dep) - if req.name.startswith("jumpstarter"): - req.specifier &= SpecifierSet(f"=={version}") - dependencies.append(str(req)) - metadata["dependencies"] = dependencies + def initialize(self, version, build_data): + if self.target_name != "sdist": + return + + pyproject = Path(self.root) / "pyproject.toml" + + with pyproject.open("rb") as f: + metadata = tomli.load(f) + + if "project" in metadata and "dependencies" in metadata["project"]: + for i, dep in enumerate(metadata["project"]["dependencies"]): + req = Requirement(dep) + if req.name.startswith("jumpstarter"): + req.specifier &= SpecifierSet(f"=={self.metadata.version}") + metadata["project"]["dependencies"][i] = str(req) + + f = NamedTemporaryFile(delete=False) + tomli_w.dump(metadata, f) + f.close() + + build_data["__hatch_pin_jumpstarter_tempfile"] = f + build_data["force_include"][f.name] = "pyproject.toml" + + def finalize(self, version, build_data, artifact_path): + if self.target_name != "sdist": + return + + f = build_data["__hatch_pin_jumpstarter_tempfile"] + os.unlink(f.name) @hookimpl -def hatch_register_metadata_hook(): +def hatch_register_build_hook(): return PinJumpstarter From 594d30389b08b8eb6a3b9f1ee8b053d9c3b6c1d8 Mon Sep 17 00:00:00 2001 From: Nick Cao Date: Wed, 30 Apr 2025 13:13:58 -0400 Subject: [PATCH 5/7] Use it as build hook (cherry picked from commit ed5c740b3c26e27ab2a6b39df12b87f970dcc013) --- packages/jumpstarter-all/pyproject.toml | 2 +- packages/jumpstarter-cli-admin/pyproject.toml | 2 +- packages/jumpstarter-cli-common/pyproject.toml | 2 +- packages/jumpstarter-cli-driver/pyproject.toml | 2 +- packages/jumpstarter-cli/pyproject.toml | 2 +- packages/jumpstarter-driver-can/pyproject.toml | 2 +- packages/jumpstarter-driver-composite/pyproject.toml | 2 +- packages/jumpstarter-driver-corellium/pyproject.toml | 2 +- packages/jumpstarter-driver-dutlink/pyproject.toml | 2 +- packages/jumpstarter-driver-flashers/pyproject.toml | 2 +- packages/jumpstarter-driver-http/pyproject.toml | 2 +- packages/jumpstarter-driver-network/pyproject.toml | 2 +- packages/jumpstarter-driver-opendal/pyproject.toml | 2 +- packages/jumpstarter-driver-power/pyproject.toml | 2 +- packages/jumpstarter-driver-probe-rs/pyproject.toml | 2 +- packages/jumpstarter-driver-pyserial/pyproject.toml | 2 +- packages/jumpstarter-driver-qemu/pyproject.toml | 2 +- packages/jumpstarter-driver-raspberrypi/pyproject.toml | 2 +- packages/jumpstarter-driver-sdwire/pyproject.toml | 2 +- packages/jumpstarter-driver-shell/pyproject.toml | 2 +- packages/jumpstarter-driver-snmp/pyproject.toml | 2 +- packages/jumpstarter-driver-tftp/pyproject.toml | 2 +- packages/jumpstarter-driver-uboot/pyproject.toml | 2 +- packages/jumpstarter-driver-ustreamer/pyproject.toml | 2 +- packages/jumpstarter-driver-yepkit/pyproject.toml | 2 +- packages/jumpstarter-imagehash/pyproject.toml | 2 +- packages/jumpstarter-kubernetes/pyproject.toml | 2 +- packages/jumpstarter-protocol/pyproject.toml | 2 +- packages/jumpstarter-testing/pyproject.toml | 2 +- packages/jumpstarter/pyproject.toml | 2 +- 30 files changed, 30 insertions(+), 30 deletions(-) diff --git a/packages/jumpstarter-all/pyproject.toml b/packages/jumpstarter-all/pyproject.toml index 067813863..e282f05a3 100644 --- a/packages/jumpstarter-all/pyproject.toml +++ b/packages/jumpstarter-all/pyproject.toml @@ -53,5 +53,5 @@ raw-options = { 'root' = '../../' } requires = ["hatchling", "hatch-vcs", "hatch-pin-jumpstarter"] build-backend = "hatchling.build" -[tool.hatch.metadata.hooks.pin_jumpstarter] +[tool.hatch.build.hooks.pin_jumpstarter] name = "pin_jumpstarter" diff --git a/packages/jumpstarter-cli-admin/pyproject.toml b/packages/jumpstarter-cli-admin/pyproject.toml index a3b6949c5..de2f85a7f 100644 --- a/packages/jumpstarter-cli-admin/pyproject.toml +++ b/packages/jumpstarter-cli-admin/pyproject.toml @@ -34,5 +34,5 @@ raw-options = { 'root' = '../../' } requires = ["hatchling", "hatch-vcs", "hatch-pin-jumpstarter"] build-backend = "hatchling.build" -[tool.hatch.metadata.hooks.pin_jumpstarter] +[tool.hatch.build.hooks.pin_jumpstarter] name = "pin_jumpstarter" diff --git a/packages/jumpstarter-cli-common/pyproject.toml b/packages/jumpstarter-cli-common/pyproject.toml index 32c49b55e..a2498b337 100644 --- a/packages/jumpstarter-cli-common/pyproject.toml +++ b/packages/jumpstarter-cli-common/pyproject.toml @@ -39,5 +39,5 @@ raw-options = { 'root' = '../../' } requires = ["hatchling", "hatch-vcs", "hatch-pin-jumpstarter"] build-backend = "hatchling.build" -[tool.hatch.metadata.hooks.pin_jumpstarter] +[tool.hatch.build.hooks.pin_jumpstarter] name = "pin_jumpstarter" diff --git a/packages/jumpstarter-cli-driver/pyproject.toml b/packages/jumpstarter-cli-driver/pyproject.toml index 1b1d95145..fecad6bc7 100644 --- a/packages/jumpstarter-cli-driver/pyproject.toml +++ b/packages/jumpstarter-cli-driver/pyproject.toml @@ -38,5 +38,5 @@ raw-options = { 'root' = '../../' } requires = ["hatchling", "hatch-vcs", "hatch-pin-jumpstarter"] build-backend = "hatchling.build" -[tool.hatch.metadata.hooks.pin_jumpstarter] +[tool.hatch.build.hooks.pin_jumpstarter] name = "pin_jumpstarter" diff --git a/packages/jumpstarter-cli/pyproject.toml b/packages/jumpstarter-cli/pyproject.toml index e543950c9..959f50d06 100644 --- a/packages/jumpstarter-cli/pyproject.toml +++ b/packages/jumpstarter-cli/pyproject.toml @@ -43,5 +43,5 @@ raw-options = { 'root' = '../../' } requires = ["hatchling", "hatch-vcs", "hatch-pin-jumpstarter"] build-backend = "hatchling.build" -[tool.hatch.metadata.hooks.pin_jumpstarter] +[tool.hatch.build.hooks.pin_jumpstarter] name = "pin_jumpstarter" diff --git a/packages/jumpstarter-driver-can/pyproject.toml b/packages/jumpstarter-driver-can/pyproject.toml index d77d78e0b..97b4b463a 100644 --- a/packages/jumpstarter-driver-can/pyproject.toml +++ b/packages/jumpstarter-driver-can/pyproject.toml @@ -32,5 +32,5 @@ raw-options = { 'root' = '../../' } requires = ["hatchling", "hatch-vcs", "hatch-pin-jumpstarter"] build-backend = "hatchling.build" -[tool.hatch.metadata.hooks.pin_jumpstarter] +[tool.hatch.build.hooks.pin_jumpstarter] name = "pin_jumpstarter" diff --git a/packages/jumpstarter-driver-composite/pyproject.toml b/packages/jumpstarter-driver-composite/pyproject.toml index 16c6a8b01..6a0534f42 100644 --- a/packages/jumpstarter-driver-composite/pyproject.toml +++ b/packages/jumpstarter-driver-composite/pyproject.toml @@ -30,5 +30,5 @@ raw-options = { 'root' = '../../' } requires = ["hatchling", "hatch-vcs", "hatch-pin-jumpstarter"] build-backend = "hatchling.build" -[tool.hatch.metadata.hooks.pin_jumpstarter] +[tool.hatch.build.hooks.pin_jumpstarter] name = "pin_jumpstarter" diff --git a/packages/jumpstarter-driver-corellium/pyproject.toml b/packages/jumpstarter-driver-corellium/pyproject.toml index 3b72c3362..7f29a175d 100644 --- a/packages/jumpstarter-driver-corellium/pyproject.toml +++ b/packages/jumpstarter-driver-corellium/pyproject.toml @@ -32,5 +32,5 @@ raw-options = { 'root' = '../../' } requires = ["hatchling", "hatch-vcs", "hatch-pin-jumpstarter"] build-backend = "hatchling.build" -[tool.hatch.metadata.hooks.pin_jumpstarter] +[tool.hatch.build.hooks.pin_jumpstarter] name = "pin_jumpstarter" diff --git a/packages/jumpstarter-driver-dutlink/pyproject.toml b/packages/jumpstarter-driver-dutlink/pyproject.toml index 7e8d9f22f..86f651789 100644 --- a/packages/jumpstarter-driver-dutlink/pyproject.toml +++ b/packages/jumpstarter-driver-dutlink/pyproject.toml @@ -43,5 +43,5 @@ raw-options = { 'root' = '../../' } requires = ["hatchling", "hatch-vcs", "hatch-pin-jumpstarter"] build-backend = "hatchling.build" -[tool.hatch.metadata.hooks.pin_jumpstarter] +[tool.hatch.build.hooks.pin_jumpstarter] name = "pin_jumpstarter" diff --git a/packages/jumpstarter-driver-flashers/pyproject.toml b/packages/jumpstarter-driver-flashers/pyproject.toml index e2fd8f08e..d026c535b 100644 --- a/packages/jumpstarter-driver-flashers/pyproject.toml +++ b/packages/jumpstarter-driver-flashers/pyproject.toml @@ -46,5 +46,5 @@ build-backend = "hatchling.build" [dependency-groups] dev = ["pytest-cov>=6.0.0", "pytest>=8.3.3"] -[tool.hatch.metadata.hooks.pin_jumpstarter] +[tool.hatch.build.hooks.pin_jumpstarter] name = "pin_jumpstarter" diff --git a/packages/jumpstarter-driver-http/pyproject.toml b/packages/jumpstarter-driver-http/pyproject.toml index 5dee8e350..db47e88d7 100644 --- a/packages/jumpstarter-driver-http/pyproject.toml +++ b/packages/jumpstarter-driver-http/pyproject.toml @@ -39,5 +39,5 @@ dev = [ "pytest-asyncio>=0.24.0", ] -[tool.hatch.metadata.hooks.pin_jumpstarter] +[tool.hatch.build.hooks.pin_jumpstarter] name = "pin_jumpstarter" diff --git a/packages/jumpstarter-driver-network/pyproject.toml b/packages/jumpstarter-driver-network/pyproject.toml index 2ed0ad8ac..42ae1afce 100644 --- a/packages/jumpstarter-driver-network/pyproject.toml +++ b/packages/jumpstarter-driver-network/pyproject.toml @@ -50,5 +50,5 @@ raw-options = { 'root' = '../../' } requires = ["hatchling", "hatch-vcs", "hatch-pin-jumpstarter"] build-backend = "hatchling.build" -[tool.hatch.metadata.hooks.pin_jumpstarter] +[tool.hatch.build.hooks.pin_jumpstarter] name = "pin_jumpstarter" diff --git a/packages/jumpstarter-driver-opendal/pyproject.toml b/packages/jumpstarter-driver-opendal/pyproject.toml index d05074fa5..7edb3a18b 100644 --- a/packages/jumpstarter-driver-opendal/pyproject.toml +++ b/packages/jumpstarter-driver-opendal/pyproject.toml @@ -29,5 +29,5 @@ raw-options = { 'root' = '../../' } requires = ["hatchling", "hatch-vcs", "hatch-pin-jumpstarter"] build-backend = "hatchling.build" -[tool.hatch.metadata.hooks.pin_jumpstarter] +[tool.hatch.build.hooks.pin_jumpstarter] name = "pin_jumpstarter" diff --git a/packages/jumpstarter-driver-power/pyproject.toml b/packages/jumpstarter-driver-power/pyproject.toml index adb54d841..8616a205d 100644 --- a/packages/jumpstarter-driver-power/pyproject.toml +++ b/packages/jumpstarter-driver-power/pyproject.toml @@ -29,5 +29,5 @@ raw-options = { 'root' = '../../' } requires = ["hatchling", "hatch-vcs", "hatch-pin-jumpstarter"] build-backend = "hatchling.build" -[tool.hatch.metadata.hooks.pin_jumpstarter] +[tool.hatch.build.hooks.pin_jumpstarter] name = "pin_jumpstarter" diff --git a/packages/jumpstarter-driver-probe-rs/pyproject.toml b/packages/jumpstarter-driver-probe-rs/pyproject.toml index cb00c138c..f033dc4e8 100644 --- a/packages/jumpstarter-driver-probe-rs/pyproject.toml +++ b/packages/jumpstarter-driver-probe-rs/pyproject.toml @@ -34,5 +34,5 @@ build-backend = "hatchling.build" [dependency-groups] dev = ["pytest-cov>=6.0.0", "pytest>=8.3.3"] -[tool.hatch.metadata.hooks.pin_jumpstarter] +[tool.hatch.build.hooks.pin_jumpstarter] name = "pin_jumpstarter" diff --git a/packages/jumpstarter-driver-pyserial/pyproject.toml b/packages/jumpstarter-driver-pyserial/pyproject.toml index 7458fbe83..6c638c1ee 100644 --- a/packages/jumpstarter-driver-pyserial/pyproject.toml +++ b/packages/jumpstarter-driver-pyserial/pyproject.toml @@ -37,5 +37,5 @@ raw-options = { 'root' = '../../' } requires = ["hatchling", "hatch-vcs", "hatch-pin-jumpstarter"] build-backend = "hatchling.build" -[tool.hatch.metadata.hooks.pin_jumpstarter] +[tool.hatch.build.hooks.pin_jumpstarter] name = "pin_jumpstarter" diff --git a/packages/jumpstarter-driver-qemu/pyproject.toml b/packages/jumpstarter-driver-qemu/pyproject.toml index 97a73d080..c44f78ec8 100644 --- a/packages/jumpstarter-driver-qemu/pyproject.toml +++ b/packages/jumpstarter-driver-qemu/pyproject.toml @@ -43,5 +43,5 @@ jumpstarter-driver-power = { workspace = true } requires = ["hatchling", "hatch-vcs", "hatch-pin-jumpstarter"] build-backend = "hatchling.build" -[tool.hatch.metadata.hooks.pin_jumpstarter] +[tool.hatch.build.hooks.pin_jumpstarter] name = "pin_jumpstarter" diff --git a/packages/jumpstarter-driver-raspberrypi/pyproject.toml b/packages/jumpstarter-driver-raspberrypi/pyproject.toml index 6601be5f5..e0de35770 100644 --- a/packages/jumpstarter-driver-raspberrypi/pyproject.toml +++ b/packages/jumpstarter-driver-raspberrypi/pyproject.toml @@ -31,5 +31,5 @@ raw-options = { 'root' = '../../' } requires = ["hatchling", "hatch-vcs", "hatch-pin-jumpstarter"] build-backend = "hatchling.build" -[tool.hatch.metadata.hooks.pin_jumpstarter] +[tool.hatch.build.hooks.pin_jumpstarter] name = "pin_jumpstarter" diff --git a/packages/jumpstarter-driver-sdwire/pyproject.toml b/packages/jumpstarter-driver-sdwire/pyproject.toml index 6d2ea0886..9333a68ee 100644 --- a/packages/jumpstarter-driver-sdwire/pyproject.toml +++ b/packages/jumpstarter-driver-sdwire/pyproject.toml @@ -31,5 +31,5 @@ raw-options = { 'root' = '../../' } requires = ["hatchling", "hatch-vcs", "hatch-pin-jumpstarter"] build-backend = "hatchling.build" -[tool.hatch.metadata.hooks.pin_jumpstarter] +[tool.hatch.build.hooks.pin_jumpstarter] name = "pin_jumpstarter" diff --git a/packages/jumpstarter-driver-shell/pyproject.toml b/packages/jumpstarter-driver-shell/pyproject.toml index 01529a714..670da0728 100644 --- a/packages/jumpstarter-driver-shell/pyproject.toml +++ b/packages/jumpstarter-driver-shell/pyproject.toml @@ -33,5 +33,5 @@ raw-options = { 'root' = '../../' } requires = ["hatchling", "hatch-vcs", "hatch-pin-jumpstarter"] build-backend = "hatchling.build" -[tool.hatch.metadata.hooks.pin_jumpstarter] +[tool.hatch.build.hooks.pin_jumpstarter] name = "pin_jumpstarter" diff --git a/packages/jumpstarter-driver-snmp/pyproject.toml b/packages/jumpstarter-driver-snmp/pyproject.toml index 16dbe0437..07bbdb5a5 100644 --- a/packages/jumpstarter-driver-snmp/pyproject.toml +++ b/packages/jumpstarter-driver-snmp/pyproject.toml @@ -38,5 +38,5 @@ raw-options = { 'root' = '../../' } requires = ["hatchling", "hatch-vcs", "hatch-pin-jumpstarter"] build-backend = "hatchling.build" -[tool.hatch.metadata.hooks.pin_jumpstarter] +[tool.hatch.build.hooks.pin_jumpstarter] name = "pin_jumpstarter" diff --git a/packages/jumpstarter-driver-tftp/pyproject.toml b/packages/jumpstarter-driver-tftp/pyproject.toml index 586a731d8..2debc7196 100644 --- a/packages/jumpstarter-driver-tftp/pyproject.toml +++ b/packages/jumpstarter-driver-tftp/pyproject.toml @@ -41,5 +41,5 @@ asyncio_mode = "auto" requires = ["hatchling", "hatch-vcs", "hatch-pin-jumpstarter"] build-backend = "hatchling.build" -[tool.hatch.metadata.hooks.pin_jumpstarter] +[tool.hatch.build.hooks.pin_jumpstarter] name = "pin_jumpstarter" diff --git a/packages/jumpstarter-driver-uboot/pyproject.toml b/packages/jumpstarter-driver-uboot/pyproject.toml index 2363ec554..39f66c289 100644 --- a/packages/jumpstarter-driver-uboot/pyproject.toml +++ b/packages/jumpstarter-driver-uboot/pyproject.toml @@ -38,5 +38,5 @@ jumpstarter-driver-qemu = { workspace = true } requires = ["hatchling", "hatch-vcs", "hatch-pin-jumpstarter"] build-backend = "hatchling.build" -[tool.hatch.metadata.hooks.pin_jumpstarter] +[tool.hatch.build.hooks.pin_jumpstarter] name = "pin_jumpstarter" diff --git a/packages/jumpstarter-driver-ustreamer/pyproject.toml b/packages/jumpstarter-driver-ustreamer/pyproject.toml index 3d9a0042a..ed239575f 100644 --- a/packages/jumpstarter-driver-ustreamer/pyproject.toml +++ b/packages/jumpstarter-driver-ustreamer/pyproject.toml @@ -27,5 +27,5 @@ raw-options = { 'root' = '../../' } requires = ["hatchling", "hatch-vcs", "hatch-pin-jumpstarter"] build-backend = "hatchling.build" -[tool.hatch.metadata.hooks.pin_jumpstarter] +[tool.hatch.build.hooks.pin_jumpstarter] name = "pin_jumpstarter" diff --git a/packages/jumpstarter-driver-yepkit/pyproject.toml b/packages/jumpstarter-driver-yepkit/pyproject.toml index 6b8e207e1..a851197f9 100644 --- a/packages/jumpstarter-driver-yepkit/pyproject.toml +++ b/packages/jumpstarter-driver-yepkit/pyproject.toml @@ -39,5 +39,5 @@ build-backend = "hatchling.build" [dependency-groups] dev = ["pytest-cov>=6.0.0", "pytest>=8.3.3"] -[tool.hatch.metadata.hooks.pin_jumpstarter] +[tool.hatch.build.hooks.pin_jumpstarter] name = "pin_jumpstarter" diff --git a/packages/jumpstarter-imagehash/pyproject.toml b/packages/jumpstarter-imagehash/pyproject.toml index 9019e54ed..92e13e671 100644 --- a/packages/jumpstarter-imagehash/pyproject.toml +++ b/packages/jumpstarter-imagehash/pyproject.toml @@ -27,5 +27,5 @@ raw-options = { 'root' = '../../' } requires = ["hatchling", "hatch-vcs", "hatch-pin-jumpstarter"] build-backend = "hatchling.build" -[tool.hatch.metadata.hooks.pin_jumpstarter] +[tool.hatch.build.hooks.pin_jumpstarter] name = "pin_jumpstarter" diff --git a/packages/jumpstarter-kubernetes/pyproject.toml b/packages/jumpstarter-kubernetes/pyproject.toml index 75981e820..1f8faa17e 100644 --- a/packages/jumpstarter-kubernetes/pyproject.toml +++ b/packages/jumpstarter-kubernetes/pyproject.toml @@ -33,5 +33,5 @@ raw-options = { 'root' = '../../' } requires = ["hatchling", "hatch-vcs", "hatch-pin-jumpstarter"] build-backend = "hatchling.build" -[tool.hatch.metadata.hooks.pin_jumpstarter] +[tool.hatch.build.hooks.pin_jumpstarter] name = "pin_jumpstarter" diff --git a/packages/jumpstarter-protocol/pyproject.toml b/packages/jumpstarter-protocol/pyproject.toml index 19bf6ef8e..4eaa6fa9d 100644 --- a/packages/jumpstarter-protocol/pyproject.toml +++ b/packages/jumpstarter-protocol/pyproject.toml @@ -35,5 +35,5 @@ raw-options = { 'root' = '../../' } requires = ["hatchling", "hatch-vcs", "hatch-pin-jumpstarter"] build-backend = "hatchling.build" -[tool.hatch.metadata.hooks.pin_jumpstarter] +[tool.hatch.build.hooks.pin_jumpstarter] name = "pin_jumpstarter" diff --git a/packages/jumpstarter-testing/pyproject.toml b/packages/jumpstarter-testing/pyproject.toml index e717b3b47..6b3f90ace 100644 --- a/packages/jumpstarter-testing/pyproject.toml +++ b/packages/jumpstarter-testing/pyproject.toml @@ -29,5 +29,5 @@ raw-options = { 'root' = '../../' } requires = ["hatchling", "hatch-vcs", "hatch-pin-jumpstarter"] build-backend = "hatchling.build" -[tool.hatch.metadata.hooks.pin_jumpstarter] +[tool.hatch.build.hooks.pin_jumpstarter] name = "pin_jumpstarter" diff --git a/packages/jumpstarter/pyproject.toml b/packages/jumpstarter/pyproject.toml index 686a8c339..47d200b9f 100644 --- a/packages/jumpstarter/pyproject.toml +++ b/packages/jumpstarter/pyproject.toml @@ -47,5 +47,5 @@ raw-options = { 'root' = '../../' } requires = ["hatchling", "hatch-vcs", "hatch-pin-jumpstarter"] build-backend = "hatchling.build" -[tool.hatch.metadata.hooks.pin_jumpstarter] +[tool.hatch.build.hooks.pin_jumpstarter] name = "pin_jumpstarter" From 0689f036eb08ea0995bec8a686f20334543016fc Mon Sep 17 00:00:00 2001 From: Nick Cao Date: Wed, 30 Apr 2025 13:18:28 -0400 Subject: [PATCH 6/7] Ignore retcode 5 from pytest (cherry picked from commit 736ae9a2434675331a1a7800caa5c9d2a815199f) --- Makefile | 2 +- packages/hatch-pin-jumpstarter/pyproject.toml | 6 +++++ uv.lock | 25 +++++++++++++++++++ 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 88da82fad..3c0635658 100644 --- a/Makefile +++ b/Makefile @@ -24,7 +24,7 @@ docs-linkcheck: uv run --isolated --all-packages --group docs $(MAKE) -C docs linkcheck pkg-test-%: packages/% - uv run --isolated --directory $< pytest + uv run --isolated --directory $< pytest || [ $$? -eq 5 ] pkg-mypy-%: packages/% uv run --isolated --directory $< mypy . diff --git a/packages/hatch-pin-jumpstarter/pyproject.toml b/packages/hatch-pin-jumpstarter/pyproject.toml index 87e985123..64e8c36aa 100644 --- a/packages/hatch-pin-jumpstarter/pyproject.toml +++ b/packages/hatch-pin-jumpstarter/pyproject.toml @@ -18,5 +18,11 @@ dependencies = [ requires = ["hatchling"] build-backend = "hatchling.build" +[dependency-groups] +dev = [ + "pytest>=8.3.5", + "pytest-cov>=6.1.1", +] + [project.entry-points.hatch] pin_jumpstarter = "hatch_pin_jumpstarter" diff --git a/uv.lock b/uv.lock index 41c6a1de3..30604eef7 100644 --- a/uv.lock +++ b/uv.lock @@ -815,12 +815,28 @@ source = { editable = "packages/hatch-pin-jumpstarter" } dependencies = [ { name = "hatchling" }, { name = "packaging" }, + { name = "tomli" }, + { name = "tomli-w" }, +] + +[package.dev-dependencies] +dev = [ + { name = "pytest" }, + { name = "pytest-cov" }, ] [package.metadata] requires-dist = [ { name = "hatchling", specifier = ">=1.27.0" }, { name = "packaging", specifier = ">=24.2" }, + { name = "tomli", specifier = ">=2.2.1" }, + { name = "tomli-w", specifier = ">=1.2.0" }, +] + +[package.metadata.requires-dev] +dev = [ + { name = "pytest", specifier = ">=8.3.5" }, + { name = "pytest-cov", specifier = ">=6.1.1" }, ] [[package]] @@ -3531,6 +3547,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/6e/c2/61d3e0f47e2b74ef40a68b9e6ad5984f6241a942f7cd3bbfbdbd03861ea9/tomli-2.2.1-py3-none-any.whl", hash = "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc", size = 14257 }, ] +[[package]] +name = "tomli-w" +version = "1.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/19/75/241269d1da26b624c0d5e110e8149093c759b7a286138f4efd61a60e75fe/tomli_w-1.2.0.tar.gz", hash = "sha256:2dd14fac5a47c27be9cd4c976af5a12d87fb1f0b4512f81d69cce3b35ae25021", size = 7184 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c7/18/c86eb8e0202e32dd3df50d43d7ff9854f8e0603945ff398974c1d91ac1ef/tomli_w-1.2.0-py3-none-any.whl", hash = "sha256:188306098d013b691fcadc011abd66727d3c414c571bb01b1a174ba8c983cf90", size = 6675 }, +] + [[package]] name = "tqdm" version = "4.67.1" From 6c1e0e13fbfd9b20bdc4a43f9fa835591cb0d0ad Mon Sep 17 00:00:00 2001 From: Nick Cao Date: Wed, 30 Apr 2025 13:19:23 -0400 Subject: [PATCH 7/7] Update template (cherry picked from commit ccba0892a09289881c74f922cabf50d1be05173c) --- __templates__/driver/pyproject.toml.tmpl | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/__templates__/driver/pyproject.toml.tmpl b/__templates__/driver/pyproject.toml.tmpl index 8721aced4..e7694b7c7 100644 --- a/__templates__/driver/pyproject.toml.tmpl +++ b/__templates__/driver/pyproject.toml.tmpl @@ -29,9 +29,12 @@ testpaths = ["jumpstarter_driver_${DRIVER_NAME}"] asyncio_mode = "auto" [build-system] -requires = ["hatchling", "hatch-vcs"] +requires = ["hatchling", "hatch-vcs", "hatch-pin-jumpstarter"] build-backend = "hatchling.build" +[tool.hatch.build.hooks.pin_jumpstarter] +name = "pin_jumpstarter" + [dependency-groups] dev = [ "pytest-cov>=6.0.0",