forked from ai-dynamo/dynamo
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathhatch_build.py
More file actions
64 lines (50 loc) · 2.22 KB
/
hatch_build.py
File metadata and controls
64 lines (50 loc) · 2.22 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: Apache-2.0
import os
import subprocess
from hatchling.builders.hooks.plugin.interface import BuildHookInterface
def get_components():
"""
Scan the components/src/dynamo directory to get the list of available components.
Returns full paths to component directories and RuntimeError if no components are found.
"""
components_dir = os.path.join(
os.path.dirname(__file__), "components", "src", "dynamo"
)
if not os.path.exists(components_dir):
raise RuntimeError(f"Components directory not found: {components_dir}")
components = []
for item in os.listdir(components_dir):
item_path = os.path.join(components_dir, item)
if os.path.isdir(item_path) and not item.startswith("."):
components.append(item_path)
if not components:
raise RuntimeError(f"No components found in directory: {components_dir}")
return components
class VersionWriterHook(BuildHookInterface):
"""
A Hatch build hook to write the project version to a file.
"""
def initialize(self, version, build_data):
"""
This method is called before the build process begins.
"""
full_version = self.metadata.version
try:
result = subprocess.run(
["git", "rev-parse", "--short", "HEAD"],
cwd=self.root,
capture_output=True,
text=True,
check=True,
)
git_version = result.stdout.strip()
if git_version:
full_version += f"+{git_version}"
except (subprocess.CalledProcessError, FileNotFoundError):
pass
version_content = f'# SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n# SPDX-License-Identifier: Apache-2.0\n\n# This file is auto-generated at build time\n__version__ = "{full_version}"\n'
for component in get_components():
version_file_path = os.path.join(component, "_version.py")
with open(version_file_path, "w") as f:
f.write(version_content)