70 lines
2.1 KiB
Python
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
|