in src/manifests_workflow/input_manifests.py [0:0]
def update(self, min_klass, component_klass, keep=False):
known_versions = self.versions
logging.info(f"Known versions: {known_versions}")
main_versions = {}
with TemporaryDirectory(keep=keep, chdir=True) as work_dir:
logging.info(f"Checking out components into {work_dir.name}")
# check out and build #main, 1.x, etc.
branches = min_klass.branches()
logging.info(f"Checking {self.name} {branches} branches")
for branch in branches:
c = min_klass.checkout(
path=os.path.join(work_dir.name, self.name.replace(" ", ""), branch),
branch=branch,
)
version = c.version
logging.info(f"{self.name}#{branch} is version {version}")
if version not in main_versions.keys():
main_versions[version] = [c]
if component_klass is not None:
# components can increment their own version first without incrementing min
manifest = self.latest
logging.info(f"Examining components in the latest manifest of {manifest.build.name} ({manifest.build.version})")
for component in manifest.components.values():
if component.name == self.name:
continue
logging.info(f"Checking out {component.name}#main")
component = component_klass.checkout(
name=component.name,
path=os.path.join(work_dir.name, component.name),
version=manifest.build.version,
branch="main",
)
component_version = component.version
if component_version:
release_version = ".".join(component_version.split(".")[:3])
if release_version not in main_versions.keys():
main_versions[release_version] = []
main_versions[release_version].append(component)
logging.info(f"{component.name}#main is version {release_version} (from {component_version})")
# summarize
logging.info("Found versions on main:")
for main_version in main_versions.keys():
for component in main_versions[main_version]:
logging.info(f" {component.name}={main_version}")
# generate new manifests
for release_version in sorted(main_versions.keys() - known_versions):
self.write_manifest(release_version, main_versions[release_version])
self.add_to_cron(release_version)