aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc-André Lureau <marcandre.lureau@redhat.com>2025-09-02 13:18:21 +0400
committerMarc-André Lureau <marcandre.lureau@redhat.com>2025-09-03 16:18:12 +0400
commita6f5d50239a64a26266a744f86ad2591e12c5fec (patch)
tree56ad6e100e648d0149c0aa6a0782bc0e09a3e956
parentbbcb92960abf67d01da056c95bfc88067fd61e26 (diff)
downloadlibvirt-ci-a6f5d50239a64a26266a744f86ad2591e12c5fec.zip
libvirt-ci-a6f5d50239a64a26266a744f86ad2591e12c5fec.tar.gz
libvirt-ci-a6f5d50239a64a26266a744f86ad2591e12c5fec.tar.bz2
manifest: add type annotations
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
-rw-r--r--lcitool/manifest.py82
-rw-r--r--pyproject.toml1
2 files changed, 52 insertions, 31 deletions
diff --git a/lcitool/manifest.py b/lcitool/manifest.py
index 7575252..30f43f5 100644
--- a/lcitool/manifest.py
+++ b/lcitool/manifest.py
@@ -14,7 +14,11 @@ from lcitool.formatters import (
ShellBuildEnvFormatter,
)
from lcitool import gitlab, util, LcitoolError
-from lcitool.targets import BuildTarget
+from lcitool.targets import Targets, BuildTarget
+from io import TextIOWrapper
+from lcitool.packages import Packages
+from lcitool.projects import Projects
+from typing import Any, Callable, Dict, List, Union, Optional
log = logging.getLogger(__name__)
@@ -22,7 +26,7 @@ log = logging.getLogger(__name__)
class ManifestError(LcitoolError):
"""Global exception type for the manifest module."""
- def __init__(self, message):
+ def __init__(self, message: str) -> None:
super().__init__(message, "Manifest")
@@ -30,13 +34,13 @@ class Manifest:
def __init__(
self,
- targets,
- packages,
- projects,
- configfp,
- quiet=False,
- cidir=Path("ci"),
- basedir=None,
+ targets: Targets,
+ packages: Packages,
+ projects: Projects,
+ configfp: TextIOWrapper,
+ quiet: bool = False,
+ cidir: Path = Path("ci"),
+ basedir: Optional[Path] = None,
):
self._targets = targets
self._packages = packages
@@ -53,7 +57,7 @@ class Manifest:
# Fully expand any shorthand / syntax sugar in the config
# so that later stages have a consistent view of the
# config
- def _normalize(self):
+ def _normalize(self) -> None:
if "projects" not in self.values:
raise ValueError("No project list defined")
@@ -174,7 +178,7 @@ class Manifest:
gitlabinfo["builds"] = False
gitlabinfo["cirrus"] = have_cirrus
- def generate(self, dryrun=False):
+ def generate(self, dryrun: bool = False) -> None:
try:
self._normalize()
@@ -194,7 +198,16 @@ class Manifest:
log.debug("Failed to generate configuration")
raise ManifestError(f"Failed to generate configuration: {ex}")
- def _generate_formatter(self, dryrun, subdir, suffix, formatter, targettype):
+ def _generate_formatter(
+ self,
+ dryrun: bool,
+ subdir: str,
+ suffix: str,
+ formatter: Union[
+ ShellBuildEnvFormatter, DockerfileFormatter, ShellVariablesFormatter
+ ],
+ targettype: str,
+ ) -> List[Path]:
outdir = Path(self.basedir, self.cidir, subdir)
if not dryrun:
outdir.mkdir(parents=True, exist_ok=True)
@@ -233,23 +246,25 @@ class Manifest:
return generated
- def _generate_containers(self, dryrun):
+ def _generate_containers(self, dryrun: bool) -> List[Path]:
formatter = DockerfileFormatter(self._projects)
return self._generate_formatter(
dryrun, "containers", "Dockerfile", formatter, "containers"
)
- def _generate_cirrus(self, dryrun):
+ def _generate_cirrus(self, dryrun: bool) -> List[Path]:
formatter = ShellVariablesFormatter(self._projects)
return self._generate_formatter(dryrun, "cirrus", "vars", formatter, "cirrus")
- def _generate_buildenv(self, dryrun):
+ def _generate_buildenv(self, dryrun: bool) -> List[Path]:
formatter = ShellBuildEnvFormatter(self._projects)
return self._generate_formatter(
dryrun, "buildenv", "sh", formatter, "containers"
)
- def _clean_files(self, generated, dryrun, subdir, suffix):
+ def _clean_files(
+ self, generated: List[Path], dryrun: bool, subdir: str, suffix: str
+ ) -> None:
outdir = Path(self.basedir, self.cidir, subdir)
if not outdir.exists():
return
@@ -261,16 +276,16 @@ class Manifest:
if not dryrun:
filename.unlink()
- def _clean_containers(self, generated, dryrun):
+ def _clean_containers(self, generated: List[Path], dryrun: bool) -> None:
self._clean_files(generated, dryrun, "containers", "Dockerfile")
- def _clean_cirrus(self, generated, dryrun):
+ def _clean_cirrus(self, generated: List[Path], dryrun: bool) -> None:
self._clean_files(generated, dryrun, "cirrus", "vars")
- def _clean_buildenv(self, generated, dryrun):
+ def _clean_buildenv(self, generated: List[Path], dryrun: bool) -> None:
self._clean_files(generated, dryrun, "buildenv", "sh")
- def _replace_file(self, content, path, dryrun):
+ def _replace_file(self, content: List[str], path: Path, dryrun: bool) -> None:
path = Path(self.basedir, path)
if len(content) == 0:
if not self.quiet:
@@ -287,7 +302,7 @@ class Manifest:
if not dryrun:
util.atomic_write(path, lines)
- def _generate_gitlab(self, dryrun):
+ def _generate_gitlab(self, dryrun: bool) -> None:
gitlabdir = Path(self.cidir, "gitlab")
if not dryrun:
Path(self.basedir, gitlabdir).mkdir(parents=True, exist_ok=True)
@@ -384,7 +399,7 @@ class Manifest:
]
self._replace_file(content, path, dryrun)
- def _generate_gitlab_container_jobs(self, cross):
+ def _generate_gitlab_container_jobs(self, cross: bool) -> List[str]:
jobs = []
for target, targetinfo in self.values["targets"].items():
if not targetinfo["enabled"]:
@@ -429,19 +444,24 @@ class Manifest:
jobs.append(containerbuildjob)
return jobs
- def _generate_gitlab_native_container_jobs(self):
+ def _generate_gitlab_native_container_jobs(self) -> List[str]:
jobs = self._generate_gitlab_container_jobs(False)
if len(jobs) > 0:
jobs = ["\n# Native container jobs"] + jobs
return jobs
- def _generate_gitlab_cross_container_jobs(self):
+ def _generate_gitlab_cross_container_jobs(self) -> List[str]:
jobs = self._generate_gitlab_container_jobs(True)
if len(jobs) > 0:
jobs = ["\n\n# Cross container jobs"] + jobs
return jobs
- def _generate_build_jobs(self, targettype, cross, jobfunc):
+ def _generate_build_jobs(
+ self,
+ targettype: str,
+ cross: bool,
+ jobfunc: Callable[[str, Dict[str, Any], Dict[str, Any]], str],
+ ) -> List[str]:
jobs = []
for target, targetinfo in self.values["targets"].items():
if not targetinfo["enabled"]:
@@ -463,8 +483,8 @@ class Manifest:
jobs.append(jobfunc(target, facts, jobinfo))
return jobs
- def _generate_gitlab_native_build_jobs(self):
- def jobfunc(target, facts, jobinfo):
+ def _generate_gitlab_native_build_jobs(self) -> List[str]:
+ def jobfunc(target: str, facts: Dict[str, Any], jobinfo: Dict[str, Any]) -> str:
return gitlab.native_build_job(
target,
facts["containers"]["base"],
@@ -481,8 +501,8 @@ class Manifest:
jobs = ["\n# Native build jobs"] + jobs
return jobs
- def _generate_gitlab_cross_build_jobs(self):
- def jobfunc(target, facts, jobinfo):
+ def _generate_gitlab_cross_build_jobs(self) -> List[str]:
+ def jobfunc(target: str, facts: Dict[str, Any], jobinfo: Dict[str, Any]) -> str:
return gitlab.cross_build_job(
target,
facts["containers"]["base"],
@@ -500,8 +520,8 @@ class Manifest:
jobs = ["\n\n# Cross build jobs"] + jobs
return jobs
- def _generate_gitlab_cirrus_build_jobs(self):
- def jobfunc(target, facts, jobinfo):
+ def _generate_gitlab_cirrus_build_jobs(self) -> List[str]:
+ def jobfunc(target: str, facts: Dict[str, Any], jobinfo: Dict[str, Any]) -> str:
return gitlab.cirrus_build_job(
target,
facts["cirrus"]["instance_type"],
diff --git a/pyproject.toml b/pyproject.toml
index 1e315d8..47d0131 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -75,6 +75,7 @@ files = [
"lcitool/inventory.py",
"lcitool/libvirt_wrapper.py",
"lcitool/logger.py",
+ "lcitool/manifest.py",
"lcitool/projects.py",
"lcitool/targets.py",
"lcitool/util.py",