From 55592c8a283284f1976b9b84fb13fb4d3e1ba0b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?oliver=20k=C3=B6nig?= Date: Wed, 8 Apr 2026 15:39:26 +0000 Subject: [PATCH 1/6] build: add dynamic git-versioning, drop rc0, migrate to setuptools MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - nemo_run/package_info.py: replace packaging.version.Version with MAJOR/MINOR/PATCH/PRE_RELEASE pattern; append + to __version__ at import time via git binary (NO_VCS_VERSION=1 to opt out) - pyproject.toml: switch build backend from hatchling to setuptools, use dynamic version from nemo_run.package_info.__version__, remove packaging runtime dep (no longer needed) - build-test-publish-wheel.yml: pin FW-CI-templates to commit with NO_VCS_VERSION=1 support; switch packaging input to setuptools Co-Authored-By: Claude Sonnet 4.6 Signed-off-by: oliver könig --- .../workflows/build-test-publish-wheel.yml | 4 +- nemo_run/package_info.py | 38 +++++++++++++------ pyproject.toml | 19 ++++------ 3 files changed, 37 insertions(+), 24 deletions(-) diff --git a/.github/workflows/build-test-publish-wheel.yml b/.github/workflows/build-test-publish-wheel.yml index 7d2b0b13..b0329e4c 100644 --- a/.github/workflows/build-test-publish-wheel.yml +++ b/.github/workflows/build-test-publish-wheel.yml @@ -28,12 +28,12 @@ defaults: jobs: build-test-publish-wheel: - uses: NVIDIA-NeMo/FW-CI-templates/.github/workflows/_build_test_publish_wheel.yml@v0.77.1 + uses: NVIDIA-NeMo/FW-CI-templates/.github/workflows/_build_test_publish_wheel.yml@7a6fd6d27f422af24f853346bc738d31af0338c0 with: dry-run: true python-package: nemo_run python-version: "3.10" - packaging: hatch + packaging: setuptools secrets: TWINE_USERNAME: ${{ secrets.TWINE_USERNAME }} TWINE_PASSWORD: ${{ secrets.TWINE_PASSWORD }} diff --git a/nemo_run/package_info.py b/nemo_run/package_info.py index b4686aa7..dbcd6b1c 100644 --- a/nemo_run/package_info.py +++ b/nemo_run/package_info.py @@ -11,19 +11,35 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. -from packaging.version import Version -__version__ = "0.10.0rc0.dev0" +MAJOR = 0 +MINOR = 10 +PATCH = 0 +PRE_RELEASE = "" -MAJOR = Version(__version__).major -MINOR = Version(__version__).minor -PATCH = Version(__version__).micro -if pre := Version(__version__).pre: - _PRE_RELEASE = "".join(map(str, pre)) -else: - _PRE_RELEASE = "" -PRE_RELEASE = _PRE_RELEASE -DEV = Version(__version__).dev +# Use the following formatting: (major, minor, patch, pre-release) +VERSION = (MAJOR, MINOR, PATCH, PRE_RELEASE) + +__shortversion__ = ".".join(map(str, VERSION[:3])) +__version__ = ".".join(map(str, VERSION[:3])) + "".join(VERSION[3:]) + +import os as _os +import subprocess as _subprocess + + +if not int(_os.getenv("NO_VCS_VERSION", "0")): + try: + _git = _subprocess.run( + ["git", "rev-parse", "--short", "HEAD"], + capture_output=True, + cwd=_os.path.dirname(_os.path.abspath(__file__)), + check=True, + universal_newlines=True, + ) + except (_subprocess.CalledProcessError, OSError): + pass + else: + __version__ += f"+{_git.stdout.strip()}" __package_name__ = "nemo_run" __contact_names__ = "NVIDIA" diff --git a/pyproject.toml b/pyproject.toml index 58fa7c9f..a43d8793 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -30,7 +30,6 @@ dependencies = [ "networkx >= 3.3", "omegaconf>=2.3.0", "leptonai>=0.26.6", - "packaging", "toml", ] readme = "README.md" @@ -96,8 +95,14 @@ docs = [ ] [build-system] -requires = ["hatchling", "hatch-vcs"] -build-backend = "hatchling.build" +requires = ["setuptools>=61.0", "wheel"] +build-backend = "setuptools.build_meta" + +[tool.setuptools] +packages = ["nemo_run"] + +[tool.setuptools.dynamic] +version = { attr = "nemo_run.package_info.__version__" } [tool.uv] managed = true @@ -150,14 +155,6 @@ ignore_errors = true [tool.coverage.html] directory = "coverage_html_report" -[tool.hatch.metadata] -allow-direct-references = true - -[tool.hatch.build.targets.wheel] -packages = ["nemo_run"] - -[tool.hatch.version] -path = "nemo_run/package_info.py" [tool.ruff] line-length = 100 From a816db6b3225abd297d8d04b52f2e0321f29777a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?oliver=20k=C3=B6nig?= Date: Wed, 8 Apr 2026 15:45:30 +0000 Subject: [PATCH 2/6] fix: suppress I001 import-sorting false positive in package_info.py MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 4.6 Signed-off-by: oliver könig --- nemo_run/package_info.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nemo_run/package_info.py b/nemo_run/package_info.py index dbcd6b1c..aa4baff2 100644 --- a/nemo_run/package_info.py +++ b/nemo_run/package_info.py @@ -23,7 +23,7 @@ __shortversion__ = ".".join(map(str, VERSION[:3])) __version__ = ".".join(map(str, VERSION[:3])) + "".join(VERSION[3:]) -import os as _os +import os as _os # noqa: I001 import subprocess as _subprocess From 275e869003c87f28226e7f146f9ca883451fd9cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?oliver=20k=C3=B6nig?= Date: Wed, 8 Apr 2026 15:50:39 +0000 Subject: [PATCH 3/6] fix: suppress E402 and I001 lint false positives in package_info.py MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 4.6 Signed-off-by: oliver könig --- nemo_run/package_info.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nemo_run/package_info.py b/nemo_run/package_info.py index aa4baff2..e7fd8d46 100644 --- a/nemo_run/package_info.py +++ b/nemo_run/package_info.py @@ -23,8 +23,8 @@ __shortversion__ = ".".join(map(str, VERSION[:3])) __version__ = ".".join(map(str, VERSION[:3])) + "".join(VERSION[3:]) -import os as _os # noqa: I001 -import subprocess as _subprocess +import os as _os # noqa: E402, I001 +import subprocess as _subprocess # noqa: E402 if not int(_os.getenv("NO_VCS_VERSION", "0")): From 801bfc4ecd2e773c34ccedaa8ef47ee3b27feeb9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?oliver=20k=C3=B6nig?= Date: Wed, 8 Apr 2026 15:57:41 +0000 Subject: [PATCH 4/6] chore: update uv.lock for setuptools backend and bump ibm-cloud-sdk-core MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Regenerate lock file after build backend switch (hatchling → setuptools); bump ibm-cloud-sdk-core 3.18.0 → 3.24.1 to get a pre-built wheel and avoid sdist build failure in fresh CI environments. Co-Authored-By: Claude Sonnet 4.6 Signed-off-by: oliver könig --- uv.lock | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/uv.lock b/uv.lock index e3e7b833..5bbeda1d 100644 --- a/uv.lock +++ b/uv.lock @@ -3316,7 +3316,7 @@ wheels = [ [[package]] name = "ibm-cloud-sdk-core" -version = "3.18.0" +version = "3.24.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pyjwt" }, @@ -3324,7 +3324,10 @@ dependencies = [ { name = "requests" }, { name = "urllib3" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/5a/82/5fa378337357b0cdcc1f290b6b78457549939054e24f32e54ad378e0d663/ibm-cloud-sdk-core-3.18.0.tar.gz", hash = "sha256:bf2b6940761970c14b53fc8fc135af567c58b9709db3214be403a383dd51cabb", size = 57929, upload-time = "2023-11-15T18:07:51.467Z" } +sdist = { url = "https://files.pythonhosted.org/packages/5e/e5/5de9646a57209bd59ee504ea11b9d83fab0e273c648d5cb9ec529c2dfb21/ibm_cloud_sdk_core-3.24.1.tar.gz", hash = "sha256:96b4b4deefc7b72874ef44545362e63ee3a7d6a4c82e68f36c482c8033683ab3", size = 76252, upload-time = "2025-05-30T15:47:12.802Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/a9/7356d14186089da1290a77d9e6e737f4cb62ab75e0cbe405ba6be7d3b322/ibm_cloud_sdk_core-3.24.1-py3-none-any.whl", hash = "sha256:28eb70379977bac15318a07634e4b56d9de671186090d8accec180b77ffb7969", size = 75783, upload-time = "2025-05-30T15:47:11.686Z" }, +] [[package]] name = "ibm-cos-sdk" @@ -4506,7 +4509,6 @@ dependencies = [ { name = "leptonai" }, { name = "networkx" }, { name = "omegaconf" }, - { name = "packaging" }, { name = "rich" }, { name = "toml" }, { name = "torchx" }, @@ -4569,7 +4571,6 @@ requires-dist = [ { name = "leptonai", specifier = ">=0.26.6" }, { name = "networkx", specifier = ">=3.3" }, { name = "omegaconf", specifier = ">=2.3.0" }, - { name = "packaging" }, { name = "ray", extras = ["default"], marker = "extra == 'ray'", specifier = ">=2.49.2" }, { name = "rich", specifier = ">=13.7.1" }, { name = "skypilot", extras = ["all"], marker = "extra == 'skypilot-all'", specifier = ">=0.10.0" }, @@ -4578,7 +4579,7 @@ requires-dist = [ { name = "torchx", specifier = ">=0.7.0" }, { name = "typer", specifier = ">=0.12.3" }, ] -provides-extras = ["kubeflow", "ray", "skypilot", "skypilot-all"] +provides-extras = ["skypilot", "skypilot-all", "ray", "kubeflow"] [package.metadata.requires-dev] dev = [ From cc44f1947c33896b6fe11510dbc5f6b6a28f973c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?oliver=20k=C3=B6nig?= Date: Wed, 8 Apr 2026 16:04:40 +0000 Subject: [PATCH 5/6] fix: include all nemo_run subpackages in setuptools build MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit packages = ["nemo_run"] only includes the top-level package; use find with include = ["nemo_run*"] to capture all subpackages. Co-Authored-By: Claude Sonnet 4.6 Signed-off-by: oliver könig --- pyproject.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index a43d8793..12c5fc4d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -98,8 +98,8 @@ docs = [ requires = ["setuptools>=61.0", "wheel"] build-backend = "setuptools.build_meta" -[tool.setuptools] -packages = ["nemo_run"] +[tool.setuptools.packages.find] +include = ["nemo_run*"] [tool.setuptools.dynamic] version = { attr = "nemo_run.package_info.__version__" } From 8d7b1b6c70e0fa55db4680333cb4416102960cb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?oliver=20k=C3=B6nig?= Date: Thu, 9 Apr 2026 08:14:12 +0000 Subject: [PATCH 6/6] ci: pin FW-CI-templates to v0.88.1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 4.6 Signed-off-by: oliver könig --- .github/workflows/build-test-publish-wheel.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-test-publish-wheel.yml b/.github/workflows/build-test-publish-wheel.yml index b0329e4c..02986742 100644 --- a/.github/workflows/build-test-publish-wheel.yml +++ b/.github/workflows/build-test-publish-wheel.yml @@ -28,7 +28,7 @@ defaults: jobs: build-test-publish-wheel: - uses: NVIDIA-NeMo/FW-CI-templates/.github/workflows/_build_test_publish_wheel.yml@7a6fd6d27f422af24f853346bc738d31af0338c0 + uses: NVIDIA-NeMo/FW-CI-templates/.github/workflows/_build_test_publish_wheel.yml@v0.88.1 with: dry-run: true python-package: nemo_run