Files
openmind/hatch_build.py
2024-11-26 09:24:53 +08:00

70 lines
2.1 KiB
Python

# Copyright (c) 2024 Huawei Technologies Co., Ltd.
#
# openMind is licensed under Mulan PSL v2.
# You can use this software according to the terms and conditions of the Mulan PSL v2.
# You may obtain a copy of Mulan PSL v2 at:
#
# http://license.coscl.org.cn/MulanPSL2
#
# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
# MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
# See the Mulan PSL v2 for more details.
import os
import importlib
import sys
import stat
import subprocess
from pathlib import Path
from hatchling.metadata.plugin.interface import MetadataHookInterface
from hatchling.builders.hooks.plugin.interface import BuildHookInterface
# Import version.py as a module
flags = os.O_WRONLY | os.O_CREAT
modes = stat.S_IWUSR | stat.S_IRUSR
version_path = Path(os.path.dirname(os.path.realpath(__file__))) / "src/openmind/version.py"
root_path = str(version_path.parent.resolve())
sys.path.append(root_path)
mod_name = version_path.stem
mod = importlib.import_module(mod_name)
__version__ = mod.__version__
def _get_git_revision_short_hash() -> str:
return subprocess.check_output(["/usr/bin/git", "rev-parse", "--short", "HEAD"]).decode("utf-8").strip()
def _update_pkg_version(version: str) -> str:
original_version = version
try:
git_sha = _get_git_revision_short_hash()
except (subprocess.CalledProcessError, FileNotFoundError):
git_sha = ""
if git_sha and "dev" in original_version:
new_version = f"{original_version}+{git_sha}"
else:
new_version = original_version
return new_version
with os.fdopen(os.open(os.path.join(root_path, "git_version_info.py"), flags, modes), "w") as fd:
fd.write(f"__version__='{_update_pkg_version(__version__)}'\n")
class CustomMetadataHook(MetadataHookInterface):
def update(self, metadata):
metadata["version"] = _update_pkg_version(__version__)
class CustomBuildHook(BuildHookInterface):
"""A custom build hook for building ."""
def initialize(self, version, build_data):
"""Initialize the hook."""
pass