"""Generate a version.info file."""
import argparse
import logging
import os
import sys
from datetime import datetime, timedelta, timezone
from typing import Iterable, Iterator
def gen_version_info_content(version: str, deps: Iterable[str]) -> Iterator[str]:
"""Generate the version.info file content."""
yield f"Version={version}"
yield "version_dir=cann"
deps_iter = iter(deps)
for dep_pkg in deps_iter:
dep_info = next(deps_iter)
yield f'required_package_{dep_pkg}_version="{dep_info}"'
if os.environ.get("tagInfo"):
tag_info = os.environ.get("tagInfo")
timestamp = "_".join(tag_info.split("_")[-3:-1])
else:
timestamp = datetime.now(timezone(timedelta(hours=8))).strftime("%Y%m%d_%H%M%S%f")[:-3]
yield f"timestamp={timestamp}"
yield ""
def main() -> bool:
"""Run the generator."""
parser = argparse.ArgumentParser()
parser.add_argument("version", help="Version number.")
parser.add_argument("deps", nargs="*", help="Dependency information.")
parser.add_argument("--output", required=True, help="Output file path.")
args = parser.parse_args()
logging.basicConfig(format=f"{os.path.basename(__file__)}: %(levelname)s: %(message)s")
if len(args.deps) % 2 != 0:
logging.error("The deps argument must contain an even number of elements!")
return False
content = "\n".join(gen_version_info_content(args.version, args.deps))
with open(args.output, "w", encoding="utf-8") as file:
file.write(content)
return True
if __name__ == "__main__":
if not main():
sys.exit(1)