scripts/utils.py (67 lines of code) (raw):

# # Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one # or more contributor license agreements. See the NOTICE file distributed with # this work for additional information regarding copyright # ownership. Elasticsearch B.V. licenses this file to you under # the Apache License, Version 2.0 (the "License"); you may # not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. # import os import re import sys from pathlib import Path from typing import Final, NoReturn from sh import Command, CommandNotFound class Constants: """All constants""" # pylint: disable=R0903 ENCODING_UTF_8: Final[str] = "utf-8" PYPROJECT_PATH: Final[Path] = Path("pyproject.toml") PYRIGHTCONFIG_PATH: Final[Path] = Path("pyrightconfig.json") REGISTRY_URL: str = os.getenv("REGISTRY_URL", "local.dev") TERRANOVA_INIT_PATH: Final[Path] = Path("./terranova/__init__.py") INSTALL_PATH: Final[Path] = Path("install.sh") def fatal(msg: str, err: Exception | None = None) -> NoReturn: """Print error message on stderr and die.""" print(msg, file=sys.stderr) if err: print(err, file=sys.stderr) sys.exit(1) def detect_uv() -> Command: """ Try to detect uv. Returns: a command if uv is detected. """ try: return Command("uv") except CommandNotFound: fatal("`uv` isn't detected") def detect_git() -> Command: """ Try to detect git. Returns: a command if git is detected. """ try: return Command("git") except CommandNotFound: fatal("`git` isn't installed") def detect_gh() -> Command: """ Try to detect gh. Returns: a command if gh is detected. """ try: return Command("gh") except CommandNotFound: fatal("`gh` isn't installed") def detect_ruff() -> Command: """ Try to detect ruff. Returns: a command if ruff is detected. """ try: return Command("ruff") except CommandNotFound: fatal("`ruff` isn't installed") def detect_pyinstaller() -> Command: """ Try to detect pyinstaller. Returns: a command if pyinstaller is detected. """ try: return Command("pyinstaller") except CommandNotFound: fatal("`pyinstaller` isn't installed") def detect_pre_commit() -> Command | None: """ Try to detect pre-commit. Returns: a command if pre-commit is detected. """ try: return Command("pre-commit") except CommandNotFound: return None def project_version() -> str: """ Returns: current project version. """ uv = detect_uv() details = uv("pip", "show", "terranova", _err=sys.stderr) version = re.search(r"Version: (.*)", details).group(1) return version.replace(".dev0", "-dev").strip() def container_backend() -> tuple[Command, dict[str, str]]: """ Try to detect a container backend. Either podman or docker. Returns: a command if a backend is detected. Raises: CommandNotFound: if a suitable backend can't be found. """ cmd = None env = os.environ.copy() for backend in ["docker", "podman"]: try: cmd = Command(backend) except CommandNotFound: continue if "podman" == backend: env["BUILDAH_FORMAT"] = "docker" break if not cmd: raise CommandNotFound("Unable to find a suitable backend: docker or podman") return cmd, env