From 7ac8d613f677975bbdab4217f4bd28e7b833ed8c Mon Sep 17 00:00:00 2001 From: TJian Date: Fri, 27 Feb 2026 14:34:27 +0800 Subject: [PATCH] [Version] Auto generate version using `setuptool_scm` (#1224) Signed-off-by: tjtanaa --- .buildkite/pipeline.yml | 2 +- .gitignore | 2 ++ docker/Dockerfile.ci | 2 +- docker/Dockerfile.rocm | 2 +- pyproject.toml | 7 +++-- setup.py | 62 +++++++++++++++++++++++++++++++++++++++++ vllm_omni/version.py | 28 +++++++++++++++++-- 7 files changed, 97 insertions(+), 8 deletions(-) diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml index b3b8c06b5..e734442c1 100644 --- a/.buildkite/pipeline.yml +++ b/.buildkite/pipeline.yml @@ -3,7 +3,7 @@ steps: key: image-build commands: - "aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws/q9t5s3a7" - - "docker build --file docker/Dockerfile.ci -t vllm-omni-ci ." + - "docker build --progress=plain --file docker/Dockerfile.ci -t vllm-omni-ci ." - "docker tag vllm-omni-ci public.ecr.aws/q9t5s3a7/vllm-ci-test-repo:$BUILDKITE_COMMIT" - "docker push public.ecr.aws/q9t5s3a7/vllm-ci-test-repo:$BUILDKITE_COMMIT" agents: diff --git a/.gitignore b/.gitignore index 12486f4a7..28d56e0f6 100644 --- a/.gitignore +++ b/.gitignore @@ -243,5 +243,7 @@ Dockerfile.dev discussion tmp_test +# Auto-generated version file (created by setuptools_scm during build) +vllm_omni/_version.py # output files *.wav diff --git a/docker/Dockerfile.ci b/docker/Dockerfile.ci index 6db6980ba..4ce8af017 100644 --- a/docker/Dockerfile.ci +++ b/docker/Dockerfile.ci @@ -8,7 +8,7 @@ COPY . . # Install system dependencies RUN apt-get update && \ - apt-get install -y ffmpeg sox libsox-fmt-all jq && \ + apt-get install -y ffmpeg git sox libsox-fmt-all jq && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* diff --git a/docker/Dockerfile.rocm b/docker/Dockerfile.rocm index f31e447d1..390bae400 100644 --- a/docker/Dockerfile.rocm +++ b/docker/Dockerfile.rocm @@ -19,7 +19,7 @@ WORKDIR ${COMMON_WORKDIR} # Step 1: Setup - Install system dependencies RUN apt-get update && \ - apt-get install -y ffmpeg && \ + apt-get install -y ffmpeg git sox libsox-fmt-all jq && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* diff --git a/pyproject.toml b/pyproject.toml index c3df6f5b6..73ad69c25 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -8,7 +8,7 @@ build-backend = "setuptools.build_meta" [project] name = "vllm-omni" -version = "0.14.0" +dynamic = ["version", "dependencies"] description = "A framework for efficient model inference with omni-modality models" readme = "README.md" requires-python = ">=3.10,<3.14" @@ -17,7 +17,6 @@ authors = [ {name = "vLLM-Omni Team"} ] keywords = ["vllm", "multimodal", "diffusion", "transformer", "inference", "serving"] -dynamic = ["dependencies"] classifiers = [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", @@ -85,8 +84,12 @@ where = ["."] include = ["vllm_omni*"] [tool.setuptools.package-data] +"vllm_omni" = ["_version.py", "py.typed"] "vllm_omni.model_executor.stage_configs" = ["*.yaml"] +[tool.setuptools_scm] +# no extra settings needed, presence enables setuptools-scm + [tool.ruff] line-length = 120 exclude = [ diff --git a/setup.py b/setup.py index e33c848a3..4ff4936b4 100644 --- a/setup.py +++ b/setup.py @@ -12,6 +12,7 @@ import sys from pathlib import Path from setuptools import setup +from setuptools_scm import get_version def uninstall_onnxruntime() -> None: @@ -104,6 +105,66 @@ def detect_target_device() -> str: return "cuda" +def get_vllm_omni_version() -> str: + """ + Get the vLLM-Omni version with device-specific suffix. + + Version format: {base_version}+{device} + Examples: + - 0.14.0+cuda (release version with CUDA) + - 0.14.1.dev23+g1a2b3c4.rocm (dev version with ROCm) + - 0.15.0+npu (release version with NPU) + + Environment variables: + VLLM_OMNI_VERSION_OVERRIDE: Override version completely + VLLM_OMNI_TARGET_DEVICE: Override device detection + + Returns: + Version string with device suffix + """ + # Allow complete version override via environment variable + if env_version := os.getenv("VLLM_OMNI_VERSION_OVERRIDE"): + print(f"Overriding vLLM-Omni version with {env_version} from VLLM_OMNI_VERSION_OVERRIDE") + os.environ["SETUPTOOLS_SCM_PRETEND_VERSION"] = env_version + # Get version without device suffix for override case + version = get_version(write_to="vllm_omni/_version.py") + else: + # Generate version from git tags via setuptools_scm (without writing yet) + try: + version = get_version() + except Exception as e: + print(f"Warning: Failed to get version from git, using fallback: {e}") + version = "dev" + + # Determine separator: '+' for normal versions, '.' for dev versions with '+' + sep = "+" if "+" not in version else "." + + # Append device-specific suffix + device = detect_target_device() + + if device == "cuda": + # if it is cuda, following vLLM + # we don't need to add any suffix + pass + elif device == "rocm": + version += f"{sep}rocm" + elif device == "npu": + version += f"{sep}npu" + elif device == "xpu": + version += f"{sep}xpu" + elif device == "cpu": + version += f"{sep}cpu" + else: + raise RuntimeError(f"Unknown target device: {device}") + + # Tell setuptools_scm to use this version + # This will be picked up by write_to and written to _version.py + os.environ["SETUPTOOLS_SCM_PRETEND_VERSION"] = version + get_version(write_to="vllm_omni/_version.py") # Write the correct version + print(f"Generated version: {version}") + return version + + def load_requirements(file_path: Path) -> list[str]: """ Load requirements from a file, supporting -r directive for recursive loading. @@ -167,5 +228,6 @@ if __name__ == "__main__": # Setup configuration setup( + version=get_vllm_omni_version(), install_requires=install_requires, ) diff --git a/vllm_omni/version.py b/vllm_omni/version.py index 15253fe6f..e5f0b6b66 100644 --- a/vllm_omni/version.py +++ b/vllm_omni/version.py @@ -1,3 +1,25 @@ -__version__ = "0.14.0" -__version_tuple__ = (0, 14, 0) -# TODO: add auto version generation +""" +Version information for vLLM-Omni. + +The version is automatically generated from git tags via setuptools_scm +and written to _version.py during package build. +""" + +try: + # Import auto-generated version from _version.py (created by setuptools_scm) + from ._version import __version__, __version_tuple__ +except ImportError as e: + import warnings + + warnings.warn( + f"Failed to import version from _version.py: {e}\n" + "This typically happens in development mode before building.\n" + "Using fallback version 'dev'.", + RuntimeWarning, + stacklevel=2, + ) + + __version__ = "dev" + __version_tuple__ = (0, 0, "dev") + +__all__ = ["__version__", "__version_tuple__"]