Much cleaner build script
This commit is contained in:
@@ -0,0 +1,22 @@
|
||||
from provider import Provider
|
||||
|
||||
|
||||
class Build:
|
||||
def __init__(self, distro, version, provider: Provider):
|
||||
self.distro: str = distro
|
||||
self.version: str = str(version)
|
||||
self.provider: str = provider
|
||||
|
||||
@property
|
||||
def var_file(self):
|
||||
return f"-var-file=distros/{self.distro}/{self.version}/{self.provider.arch}.pkrvars.hcl"
|
||||
|
||||
@property
|
||||
def only(self):
|
||||
return f"-only={self.provider}"
|
||||
|
||||
def __str__(self) -> str:
|
||||
return f"{self.distro} {self.version}: {self.provider}"
|
||||
|
||||
def __repr__(self) -> str:
|
||||
return str(self)
|
||||
@@ -0,0 +1,26 @@
|
||||
from provider import Provider
|
||||
from build import Build
|
||||
|
||||
|
||||
class Distro:
|
||||
def __init__(self, name: str, support: map):
|
||||
self.name = name
|
||||
self.builds = []
|
||||
for version, matrix in support.items():
|
||||
for support in matrix:
|
||||
provider = Provider(support["provider"], support["arch"])
|
||||
build = Build(self.name, version, provider)
|
||||
self.builds.append(build)
|
||||
|
||||
def __str__(self) -> str:
|
||||
return f"{self.name}"
|
||||
|
||||
def __repr__(self) -> str:
|
||||
return f"{self.name}: {' '.join(self.versions)}"
|
||||
|
||||
@property
|
||||
def versions(self) -> set[str]:
|
||||
return set([b.version for b in self.builds])
|
||||
|
||||
def builds_for_version(self, version: str) -> set[Build]:
|
||||
return set(filter(lambda x: x.version == version, self.builds))
|
||||
@@ -0,0 +1,7 @@
|
||||
class Provider:
|
||||
def __init__(self, name, arch):
|
||||
self.name = name
|
||||
self.arch = arch
|
||||
|
||||
def __str__(self) -> str:
|
||||
return f"{self.name}.{self.arch}"
|
||||
@@ -0,0 +1,23 @@
|
||||
from distro import Distro
|
||||
from provider import Provider
|
||||
from pathlib import Path
|
||||
from yaml import load, Loader
|
||||
|
||||
|
||||
BASE = Path(__file__).parent.parent
|
||||
|
||||
|
||||
class Support:
|
||||
def __init__(self):
|
||||
self.base = BASE
|
||||
self.distros = self.__get_distros()
|
||||
|
||||
def __get_distros(self) -> map:
|
||||
distros = {}
|
||||
distros_dir = self.base / "distros"
|
||||
for f in distros_dir.glob("**/supports.yml"):
|
||||
name = f.parent.name
|
||||
with open(f, "r") as fp:
|
||||
support_yml = load(fp, Loader=Loader)
|
||||
distros[name] = Distro(name, support_yml)
|
||||
return distros
|
||||
Reference in New Issue
Block a user