update versions of empanadas

This commit is contained in:
Louis Abel 2023-11-08 14:16:49 -07:00
parent 419e7af362
commit ccae1045b3
Signed by: label
GPG Key ID: B37E62D143879B36
11 changed files with 483 additions and 411 deletions

View File

@ -16,7 +16,7 @@
- ppc64le - ppc64le
- s390x - s390x
provide_multilib: True provide_multilib: True
project_id: 'dff20351-7d36-4f7c-9eea-7f039f5026d0' project_id: '6202c09e-6252-4d3a-bcd3-9c7751682970'
repo_symlinks: repo_symlinks:
NFV: 'nfv' NFV: 'nfv'
renames: renames:

View File

@ -257,9 +257,9 @@ class ImageBuild:
def kickstart_imagefactory_args(self) -> List[str]: def kickstart_imagefactory_args(self) -> List[str]:
if not self.kickstart_path.is_file(): if not self.kickstart_path.is_file():
log.warn(f"Kickstart file is not available: {self.kickstart_path}") log.warning(f"Kickstart file is not available: {self.kickstart_path}")
if not debug: if not debug:
log.warn("Exiting because debug mode is not enabled.") log.warning("Exiting because debug mode is not enabled.")
exit(2) exit(2)
return ["--file-parameter", "install_script", str(self.kickstart_path)] return ["--file-parameter", "install_script", str(self.kickstart_path)]

View File

@ -1,5 +1,6 @@
# This script can be called to do single syncs or full on syncs. # This script can be called to do single syncs or full on syncs.
import os
import argparse import argparse
import logging import logging
import sys import sys
@ -16,6 +17,7 @@ parser = argparse.ArgumentParser(description="Peridot Sync and Compose")
parser.add_argument('--release', type=str, help="Major Release Version or major-type (eg 9-beta)", required=True) parser.add_argument('--release', type=str, help="Major Release Version or major-type (eg 9-beta)", required=True)
parser.add_argument('--sig', type=str, help="SIG Name if applicable") parser.add_argument('--sig', type=str, help="SIG Name if applicable")
parser.add_argument('--symlink', action='store_true', help="symlink to latest") parser.add_argument('--symlink', action='store_true', help="symlink to latest")
parser.add_argument('--copy-old-compose', action='store_true', help="Runs an rsync from previous compose")
parser.add_argument('--logger', type=str) parser.add_argument('--logger', type=str)
# Parse them # Parse them
@ -59,16 +61,21 @@ def run():
date_stamp, date_stamp,
logger logger
) )
compose_latest_dir = os.path.join(
config['compose_root'],
major,
"latest-{}-{}".format(
shortname,
profile,
)
)
if results.copy_old_compose:
if os.path.exists(compose_latest_dir):
previous_compose_path = os.path.realpath(compose_latest_dir)
else:
log.warning('No symlink exists; we cannot copy from the old compose')
if results.symlink: if results.symlink:
compose_latest_dir = os.path.join(
config['compose_root'],
major,
"latest-{}-{}".format(
shortname,
profile,
)
)
if os.path.exists(compose_latest_dir): if os.path.exists(compose_latest_dir):
os.remove(compose_latest_dir) os.remove(compose_latest_dir)

View File

@ -280,7 +280,7 @@ class RepoSync:
raise SystemExit() raise SystemExit()
if self.fullrun and self.refresh_extra_files: if self.fullrun and self.refresh_extra_files:
self.log.warn(Color.WARN + 'A full run implies extra files are also deployed.') self.log.warning(Color.WARN + 'A full run implies extra files are also deployed.')
if not self.skip_all: if not self.skip_all:
self.sync(self.repo, sync_root, work_root, log_root, global_work_root, self.arch) self.sync(self.repo, sync_root, work_root, log_root, global_work_root, self.arch)
@ -1020,7 +1020,7 @@ class RepoSync:
) )
self.log.error(e) self.log.error(e)
else: else:
self.log.warn(Color.WARN + repo_name + ' ' + a + ' os .treeinfo already exists') self.log.warning(Color.WARN + repo_name + ' ' + a + ' os .treeinfo already exists')
if not os.path.exists(os_disc_path) or (os.path.exists(os_disc_path) and refresh): if not os.path.exists(os_disc_path) or (os.path.exists(os_disc_path) and refresh):
try: try:
@ -1036,7 +1036,7 @@ class RepoSync:
) )
self.log.error(e) self.log.error(e)
else: else:
self.log.warn(Color.WARN + repo_name + ' ' + a + self.log.warning(Color.WARN + repo_name + ' ' + a +
' os .discinfo already exists' ' os .discinfo already exists'
) )
@ -1053,7 +1053,7 @@ class RepoSync:
) )
self.log.error(e) self.log.error(e)
else: else:
self.log.warn(Color.WARN + repo_name + ' ' + a + self.log.warning(Color.WARN + repo_name + ' ' + a +
' os media.repo already exists' ' os media.repo already exists'
) )
@ -1075,7 +1075,7 @@ class RepoSync:
) )
self.log.error(e) self.log.error(e)
else: else:
self.log.warn(Color.WARN + repo_name + ' ' + a + self.log.warning(Color.WARN + repo_name + ' ' + a +
' kickstart .treeinfo already exists' ' kickstart .treeinfo already exists'
) )
@ -1093,7 +1093,7 @@ class RepoSync:
) )
self.log.error(e) self.log.error(e)
else: else:
self.log.warn(Color.FAIL + repo_name + ' ' + a + self.log.warning(Color.FAIL + repo_name + ' ' + a +
' kickstart .discinfo already exists' ' kickstart .discinfo already exists'
) )
@ -1110,7 +1110,7 @@ class RepoSync:
) )
self.log.error(e) self.log.error(e)
else: else:
self.log.warn(Color.WARN + repo_name + ' ' + a + self.log.warning(Color.WARN + repo_name + ' ' + a +
' kickstart media.repo already exists' ' kickstart media.repo already exists'
) )
@ -1153,7 +1153,7 @@ class RepoSync:
) )
self.log.error(e) self.log.error(e)
else: else:
self.log.warn(Color.WARN + r + ' ' + a + self.log.warning(Color.WARN + r + ' ' + a +
' debug .treeinfo already exists' ' debug .treeinfo already exists'
) )
@ -1171,7 +1171,7 @@ class RepoSync:
) )
self.log.error(e) self.log.error(e)
else: else:
self.log.warn(Color.WARN + r + ' ' + a + self.log.warning(Color.WARN + r + ' ' + a +
' debug .discinfo already exists' ' debug .discinfo already exists'
) )
@ -1188,7 +1188,7 @@ class RepoSync:
) )
self.log.error(e) self.log.error(e)
else: else:
self.log.warn(Color.WARN + repo_name + ' ' + a + self.log.warning(Color.WARN + repo_name + ' ' + a +
' debug media.repo already exists' ' debug media.repo already exists'
) )
@ -1227,7 +1227,7 @@ class RepoSync:
self.log.error(Color.FAIL + repo_name + ' source os .treeinfo could not be written') self.log.error(Color.FAIL + repo_name + ' source os .treeinfo could not be written')
self.log.error(e) self.log.error(e)
else: else:
self.log.warn(Color.WARN + repo_name + ' source os .treeinfo already exists') self.log.warning(Color.WARN + repo_name + ' source os .treeinfo already exists')
if not os.path.exists(source_disc_path) or (os.path.exists(source_disc_path) and refresh): if not os.path.exists(source_disc_path) or (os.path.exists(source_disc_path) and refresh):
try: try:
@ -1241,7 +1241,7 @@ class RepoSync:
self.log.error(Color.FAIL + repo_name + ' source os .discinfo could not be written') self.log.error(Color.FAIL + repo_name + ' source os .discinfo could not be written')
self.log.error(e) self.log.error(e)
else: else:
self.log.warn(Color.WARN + repo_name + ' source .discinfo already exists') self.log.warning(Color.WARN + repo_name + ' source .discinfo already exists')
if not os.path.exists(source_media_path) or (os.path.exists(source_media_path) and refresh): if not os.path.exists(source_media_path) or (os.path.exists(source_media_path) and refresh):
try: try:
@ -1254,7 +1254,7 @@ class RepoSync:
self.log.error(Color.FAIL + repo_name + ' source os media.repo could not be written') self.log.error(Color.FAIL + repo_name + ' source os media.repo could not be written')
self.log.error(e) self.log.error(e)
else: else:
self.log.warn(Color.WARN + repo_name + ' source media.repo already exists') self.log.warning(Color.WARN + repo_name + ' source media.repo already exists')
def tweak_treeinfo(self, repo, sync_root, arch): def tweak_treeinfo(self, repo, sync_root, arch):
""" """
@ -1911,7 +1911,7 @@ class SigRepoSync:
raise SystemExit() raise SystemExit()
if self.fullrun and self.refresh_extra_files: if self.fullrun and self.refresh_extra_files:
self.log.warn(Color.WARN + 'A full run implies extra files are also deployed.') self.log.warning(Color.WARN + 'A full run implies extra files are also deployed.')
self.sync(self.sigrepo, sync_root, work_root, log_root, global_work_root, self.arch) self.sync(self.sigrepo, sync_root, work_root, log_root, global_work_root, self.arch)

View File

@ -462,7 +462,7 @@ class IsoBuild:
if not force_unpack: if not force_unpack:
file_check = os.path.join(unpack_dir, 'lorax/.treeinfo') file_check = os.path.join(unpack_dir, 'lorax/.treeinfo')
if os.path.exists(file_check): if os.path.exists(file_check):
self.log.warn(Color.WARN + 'Artifact (' + arch + ') already unpacked') self.log.warning(Color.WARN + 'Artifact (' + arch + ') already unpacked')
return return
self.log.info('Unpacking %s' % tarball) self.log.info('Unpacking %s' % tarball)
@ -498,7 +498,7 @@ class IsoBuild:
if not force_unpack: if not force_unpack:
file_check = os.path.join(path_to_image, '.treeinfo') file_check = os.path.join(path_to_image, '.treeinfo')
if os.path.exists(file_check): if os.path.exists(file_check):
self.log.warn(Color.WARN + 'Lorax image for ' + image + ' already exists') self.log.warning(Color.WARN + 'Lorax image for ' + image + ' already exists')
return return
self.log.info('Copying base lorax to %s directory...' % image) self.log.info('Copying base lorax to %s directory...' % image)
@ -544,7 +544,7 @@ class IsoBuild:
if not force_unpack: if not force_unpack:
file_check = isobootpath file_check = isobootpath
if os.path.exists(file_check): if os.path.exists(file_check):
self.log.warn(Color.WARN + 'Boot image (' + discname + ') already exists') self.log.warning(Color.WARN + 'Boot image (' + discname + ') already exists')
return return
self.log.info('Copying %s boot iso to work directory...' % arch) self.log.info('Copying %s boot iso to work directory...' % arch)
@ -643,7 +643,7 @@ class IsoBuild:
found_files.append('/images/boot.iso') found_files.append('/images/boot.iso')
if len(found_files) > 0: if len(found_files) > 0:
self.log.warn(Color.WARN + 'Images and data for ' + repo + ' and ' + arch + ' already exists.') self.log.warning(Color.WARN + 'Images and data for ' + repo + ' and ' + arch + ' already exists.')
return return
self.log.info(Color.INFO + 'Copying images and data for ' + repo + ' ' + arch) self.log.info(Color.INFO + 'Copying images and data for ' + repo + ' ' + arch)
@ -1371,7 +1371,7 @@ class IsoBuild:
# latest_artifacts should have at least 1 result if has_variants, else == 1 # latest_artifacts should have at least 1 result if has_variants, else == 1
if not len(latest_artifacts[name][variantname]) > 0: if not len(latest_artifacts[name][variantname]) > 0:
self.log.warn(Color.WARN + 'No images found for ' + variantname + self.log.warning(Color.WARN + 'No images found for ' + variantname +
'. This means it will be skipped.') '. This means it will be skipped.')
del imagename del imagename
@ -1403,7 +1403,7 @@ class IsoBuild:
) )
if arch not in keysect: if arch not in keysect:
self.log.warn(Color.WARN + 'This architecture (' + arch + ') does not exist for this image orvar is a string.') self.log.warning(Color.WARN + 'This architecture (' + arch + ') does not exist for this image orvar is a string.')
continue continue
source_path = keysect[arch] source_path = keysect[arch]
@ -1648,7 +1648,7 @@ class LiveBuild:
self.log.info(self.revision) self.log.info(self.revision)
if not os.path.exists(self.compose_latest_dir): if not os.path.exists(self.compose_latest_dir):
self.log.warn(Color.WARN + 'A compose directory was not found ' + self.log.warning(Color.WARN + 'A compose directory was not found ' +
'here. If there is a failure, it may be due to it ' + 'here. If there is a failure, it may be due to it ' +
'missing. You may want to generate a fake compose if ' + 'missing. You may want to generate a fake compose if ' +
'you are simply making your own live images and you run ' + 'you are simply making your own live images and you run ' +
@ -1841,8 +1841,8 @@ class LiveBuild:
bad_exit_list = [] bad_exit_list = []
checksum_list = [] checksum_list = []
entry_name_list = [] entry_name_list = []
self.log.warn(Color.WARN + 'There is no support for podman in empanadas.') self.log.warning(Color.WARN + 'There is no support for podman in empanadas.')
self.log.warn(Color.WARN + "If this fails, it's on you to determine the fix.") self.log.warning(Color.WARN + "If this fails, it's on you to determine the fix.")
for i in images: for i in images:
image_name = i image_name = i
entry_name = f'buildLiveImage-{arch}-{i}.sh' entry_name = f'buildLiveImage-{arch}-{i}.sh'
@ -1947,11 +1947,11 @@ class LiveBuild:
if self.justcopyit: if self.justcopyit:
if os.path.exists(os.path.join(live_dir_arch, isoname)): if os.path.exists(os.path.join(live_dir_arch, isoname)):
self.log.warn(Color.WARN + 'Image already exists.') self.log.warning(Color.WARN + 'Image already exists.')
if self.force_build: if self.force_build:
self.log.warn(Color.WARN + 'Building anyway.') self.log.warning(Color.WARN + 'Building anyway.')
else: else:
self.log.warn(Color.WARN + 'Skipping.') self.log.warning(Color.WARN + 'Skipping.')
return return
live_iso_cmd = f'/bin/bash {entries_dir}/liveisobuild-{arch}-{image}.sh' live_iso_cmd = f'/bin/bash {entries_dir}/liveisobuild-{arch}-{image}.sh'
@ -1962,11 +1962,11 @@ class LiveBuild:
self.log.error('See the logs for more information.') self.log.error('See the logs for more information.')
raise SystemExit() raise SystemExit()
self.log.warn( self.log.warning(
Color.WARN + 'This is meant for builds done in peridot or ' + Color.WARN + 'This is meant for builds done in peridot or ' +
'locally for an end user.' 'locally for an end user.'
) )
self.log.warn( self.log.warning(
Color.WARN + Color.WARN +
'If you are looping images, your built image may get ' + 'If you are looping images, your built image may get ' +
'overwritten. Ensure you have justcopyit enabled to avoid this.' 'overwritten. Ensure you have justcopyit enabled to avoid this.'

View File

@ -621,7 +621,7 @@ class Shared:
s3 = boto3.client('s3') s3 = boto3.client('s3')
if os.path.exists(dest): if os.path.exists(dest):
if not force_download: if not force_download:
logger.warn( logger.warning(
'[' + Color.BOLD + Color.YELLOW + 'WARN' + Color.END + '] ' + '[' + Color.BOLD + Color.YELLOW + 'WARN' + Color.END + '] ' +
'Artifact at ' + dest + ' already exists' 'Artifact at ' + dest + ' already exists'
) )
@ -703,7 +703,7 @@ class Shared:
""" """
if os.path.exists(dest): if os.path.exists(dest):
if not force_download: if not force_download:
logger.warn( logger.warning(
'[' + Color.BOLD + Color.YELLOW + 'WARN' + Color.END + '] ' + '[' + Color.BOLD + Color.YELLOW + 'WARN' + Color.END + '] ' +
'Artifact at ' + dest + ' already exists' 'Artifact at ' + dest + ' already exists'
) )
@ -1157,7 +1157,7 @@ class Shared:
shutil.copy2(src, extra_files_dir) shutil.copy2(src, extra_files_dir)
shutil.copy2(src, metadata_dir) shutil.copy2(src, metadata_dir)
except: except:
logger.warn(Color.WARN + 'Extra file not copied: ' + src) logger.warning(Color.WARN + 'Extra file not copied: ' + src)
try: try:
shutil.rmtree(tmpclone) shutil.rmtree(tmpclone)

View File

@ -1,32 +1,46 @@
# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand.
[[package]] [[package]]
name = "atomicwrites" name = "atomicwrites"
version = "1.4.1" version = "1.4.1"
description = "Atomic file writes." description = "Atomic file writes."
category = "dev"
optional = false optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
files = [
{file = "atomicwrites-1.4.1.tar.gz", hash = "sha256:81b2c9071a49367a7f770170e5eec8cb66567cfbbc8c73d20ce5ca4a8d71cf11"},
]
[[package]] [[package]]
name = "attrs" name = "attrs"
version = "21.4.0" version = "23.1.0"
description = "Classes Without Boilerplate" description = "Classes Without Boilerplate"
category = "main"
optional = false optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" python-versions = ">=3.7"
files = [
{file = "attrs-23.1.0-py3-none-any.whl", hash = "sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04"},
{file = "attrs-23.1.0.tar.gz", hash = "sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015"},
]
[package.dependencies]
importlib-metadata = {version = "*", markers = "python_version < \"3.8\""}
[package.extras] [package.extras]
dev = ["cloudpickle", "coverage[toml] (>=5.0.2)", "furo", "hypothesis", "mypy", "pre-commit", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "six", "sphinx", "sphinx-notfound-page", "zope.interface"] cov = ["attrs[tests]", "coverage[toml] (>=5.3)"]
docs = ["furo", "sphinx", "sphinx-notfound-page", "zope.interface"] dev = ["attrs[docs,tests]", "pre-commit"]
tests = ["cloudpickle", "coverage[toml] (>=5.0.2)", "hypothesis", "mypy", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "six", "zope.interface"] docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"]
tests-no-zope = ["cloudpickle", "coverage[toml] (>=5.0.2)", "hypothesis", "mypy", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "six"] tests = ["attrs[tests-no-zope]", "zope-interface"]
tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"]
[[package]] [[package]]
name = "boto3" name = "boto3"
version = "1.28.81" version = "1.28.81"
description = "The AWS SDK for Python" description = "The AWS SDK for Python"
category = "main"
optional = false optional = false
python-versions = ">= 3.7" python-versions = ">= 3.7"
files = [
{file = "boto3-1.28.81-py3-none-any.whl", hash = "sha256:66e457b5f1580eb1f29855d867dec743eeec42b3935372eee5e6730e5e3124df"},
{file = "boto3-1.28.81.tar.gz", hash = "sha256:6ec7da884eed5c07e679d251bd5c66e4e2f64755ed98270a20323b241c54a743"},
]
[package.dependencies] [package.dependencies]
botocore = ">=1.31.81,<1.32.0" botocore = ">=1.31.81,<1.32.0"
@ -40,9 +54,12 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
name = "botocore" name = "botocore"
version = "1.31.81" version = "1.31.81"
description = "Low-level, data-driven core of boto 3." description = "Low-level, data-driven core of boto 3."
category = "main"
optional = false optional = false
python-versions = ">= 3.7" python-versions = ">= 3.7"
files = [
{file = "botocore-1.31.81-py3-none-any.whl", hash = "sha256:eeb09a77c3e931667c9442565e8697e89e685089912a96d95f65b63e4b2c8c71"},
{file = "botocore-1.31.81.tar.gz", hash = "sha256:afb0886c5a5a542f763cc1644b1c1b4a783698d79980eb48052d1676d6b3d14e"},
]
[package.dependencies] [package.dependencies]
jmespath = ">=0.7.1,<2.0.0" jmespath = ">=0.7.1,<2.0.0"
@ -59,338 +76,20 @@ crt = ["awscrt (==0.16.26)"]
name = "certifi" name = "certifi"
version = "2023.7.22" version = "2023.7.22"
description = "Python package for providing Mozilla's CA Bundle." description = "Python package for providing Mozilla's CA Bundle."
category = "main"
optional = false optional = false
python-versions = ">=3.6" python-versions = ">=3.6"
files = [
{file = "certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"},
{file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"},
]
[[package]] [[package]]
name = "charset-normalizer" name = "charset-normalizer"
version = "3.3.2" version = "3.3.2"
description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
category = "main"
optional = false optional = false
python-versions = ">=3.7.0" python-versions = ">=3.7.0"
files = [
[[package]]
name = "colorama"
version = "0.4.6"
description = "Cross-platform colored terminal text."
category = "dev"
optional = false
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7"
[[package]]
name = "idna"
version = "3.4"
description = "Internationalized Domain Names in Applications (IDNA)"
category = "main"
optional = false
python-versions = ">=3.5"
[[package]]
name = "importlib-metadata"
version = "6.7.0"
description = "Read metadata from Python packages"
category = "dev"
optional = false
python-versions = ">=3.7"
[package.dependencies]
typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""}
zipp = ">=0.5"
[package.extras]
docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"]
perf = ["ipython"]
testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"]
[[package]]
name = "importlib-resources"
version = "5.12.0"
description = "Read resources from Python packages"
category = "main"
optional = false
python-versions = ">=3.7"
[package.dependencies]
zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""}
[package.extras]
docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"]
testing = ["flake8 (<5)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"]
[[package]]
name = "jinja2"
version = "2.11.3"
description = "A very fast and expressive template engine."
category = "main"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[package.dependencies]
MarkupSafe = ">=0.23"
[package.extras]
i18n = ["Babel (>=0.8)"]
[[package]]
name = "jmespath"
version = "1.0.1"
description = "JSON Matching Expressions"
category = "main"
optional = false
python-versions = ">=3.7"
[[package]]
name = "kobo"
version = "0.24.2"
description = "A pile of python modules used by Red Hat release engineering to build their tools"
category = "main"
optional = false
python-versions = ">2.6"
[package.dependencies]
six = "*"
[[package]]
name = "markupsafe"
version = "2.0.1"
description = "Safely add untrusted strings to HTML/XML markup."
category = "main"
optional = false
python-versions = ">=3.6"
[[package]]
name = "more-itertools"
version = "9.1.0"
description = "More routines for operating on iterables, beyond itertools"
category = "dev"
optional = false
python-versions = ">=3.7"
[[package]]
name = "packaging"
version = "23.2"
description = "Core utilities for Python packages"
category = "dev"
optional = false
python-versions = ">=3.7"
[[package]]
name = "pluggy"
version = "0.13.1"
description = "plugin and hook calling mechanisms for python"
category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
[package.dependencies]
importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""}
[package.extras]
dev = ["pre-commit", "tox"]
[[package]]
name = "productmd"
version = "1.33"
description = "Product, compose and installation media metadata library"
category = "main"
optional = false
python-versions = "*"
[package.dependencies]
six = "*"
[[package]]
name = "py"
version = "1.11.0"
description = "library with cross-python path, ini-parsing, io, code, log facilities"
category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "pytest"
version = "5.4.3"
description = "pytest: simple powerful testing with Python"
category = "dev"
optional = false
python-versions = ">=3.5"
[package.dependencies]
atomicwrites = {version = ">=1.0", markers = "sys_platform == \"win32\""}
attrs = ">=17.4.0"
colorama = {version = "*", markers = "sys_platform == \"win32\""}
importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""}
more-itertools = ">=4.0.0"
packaging = "*"
pluggy = ">=0.12,<1.0"
py = ">=1.5.0"
wcwidth = "*"
[package.extras]
checkqa-mypy = ["mypy (==v0.761)"]
testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "requests", "xmlschema"]
[[package]]
name = "python-dateutil"
version = "2.8.2"
description = "Extensions to the standard Python datetime module"
category = "main"
optional = false
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7"
[package.dependencies]
six = ">=1.5"
[[package]]
name = "pyyaml"
version = "6.0.1"
description = "YAML parser and emitter for Python"
category = "main"
optional = false
python-versions = ">=3.6"
[[package]]
name = "requests"
version = "2.31.0"
description = "Python HTTP for Humans."
category = "main"
optional = false
python-versions = ">=3.7"
[package.dependencies]
certifi = ">=2017.4.17"
charset-normalizer = ">=2,<4"
idna = ">=2.5,<4"
urllib3 = ">=1.21.1,<3"
[package.extras]
socks = ["PySocks (>=1.5.6,!=1.5.7)"]
use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"]
[[package]]
name = "rpm"
version = "0.1.0"
description = "Shim RPM module for use in virtualenvs."
category = "main"
optional = false
python-versions = ">=3.6"
[package.extras]
testing = ["tox"]
[[package]]
name = "s3transfer"
version = "0.7.0"
description = "An Amazon S3 Transfer Manager"
category = "main"
optional = false
python-versions = ">= 3.7"
[package.dependencies]
botocore = ">=1.12.36,<2.0a.0"
[package.extras]
crt = ["botocore[crt] (>=1.20.29,<2.0a.0)"]
[[package]]
name = "six"
version = "1.16.0"
description = "Python 2 and 3 compatibility utilities"
category = "main"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*"
[[package]]
name = "typing-extensions"
version = "4.7.1"
description = "Backported and Experimental Type Hints for Python 3.7+"
category = "dev"
optional = false
python-versions = ">=3.7"
[[package]]
name = "urllib3"
version = "1.26.18"
description = "HTTP library with thread-safe connection pooling, file post, and more."
category = "main"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
[package.extras]
brotli = ["brotli (==1.0.9)", "brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"]
secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"]
socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
[[package]]
name = "urllib3"
version = "2.0.7"
description = "HTTP library with thread-safe connection pooling, file post, and more."
category = "main"
optional = false
python-versions = ">=3.7"
[package.extras]
brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"]
secure = ["certifi", "cryptography (>=1.9)", "idna (>=2.0.0)", "pyopenssl (>=17.1.0)", "urllib3-secure-extra"]
socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"]
zstd = ["zstandard (>=0.18.0)"]
[[package]]
name = "wcwidth"
version = "0.2.9"
description = "Measures the displayed width of unicode strings in a terminal"
category = "dev"
optional = false
python-versions = "*"
[[package]]
name = "xmltodict"
version = "0.13.0"
description = "Makes working with XML feel like you are working with JSON"
category = "main"
optional = false
python-versions = ">=3.4"
[[package]]
name = "zipp"
version = "3.15.0"
description = "Backport of pathlib-compatible object wrapper for zip files"
category = "main"
optional = false
python-versions = ">=3.7"
[package.extras]
docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"]
testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"]
[metadata]
lock-version = "1.1"
python-versions = ">=3.7,<4"
content-hash = "d02a16fa718931c809fe8c7cfe4c993082e037ee2b290859a90b4f02d93d02d6"
[metadata.files]
atomicwrites = [
{file = "atomicwrites-1.4.1.tar.gz", hash = "sha256:81b2c9071a49367a7f770170e5eec8cb66567cfbbc8c73d20ce5ca4a8d71cf11"},
]
attrs = [
{file = "attrs-21.4.0-py2.py3-none-any.whl", hash = "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4"},
{file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"},
]
boto3 = [
{file = "boto3-1.28.81-py3-none-any.whl", hash = "sha256:66e457b5f1580eb1f29855d867dec743eeec42b3935372eee5e6730e5e3124df"},
{file = "boto3-1.28.81.tar.gz", hash = "sha256:6ec7da884eed5c07e679d251bd5c66e4e2f64755ed98270a20323b241c54a743"},
]
botocore = [
{file = "botocore-1.31.81-py3-none-any.whl", hash = "sha256:eeb09a77c3e931667c9442565e8697e89e685089912a96d95f65b63e4b2c8c71"},
{file = "botocore-1.31.81.tar.gz", hash = "sha256:afb0886c5a5a542f763cc1644b1c1b4a783698d79980eb48052d1676d6b3d14e"},
]
certifi = [
{file = "certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"},
{file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"},
]
charset-normalizer = [
{file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"},
{file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"},
{file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"}, {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"},
@ -482,34 +181,116 @@ charset-normalizer = [
{file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"}, {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"},
{file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"},
] ]
colorama = [
[[package]]
name = "colorama"
version = "0.4.6"
description = "Cross-platform colored terminal text."
optional = false
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7"
files = [
{file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"},
{file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"},
] ]
idna = [
[[package]]
name = "idna"
version = "3.4"
description = "Internationalized Domain Names in Applications (IDNA)"
optional = false
python-versions = ">=3.5"
files = [
{file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"},
{file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"},
] ]
importlib-metadata = [
[[package]]
name = "importlib-metadata"
version = "6.7.0"
description = "Read metadata from Python packages"
optional = false
python-versions = ">=3.7"
files = [
{file = "importlib_metadata-6.7.0-py3-none-any.whl", hash = "sha256:cb52082e659e97afc5dac71e79de97d8681de3aa07ff18578330904a9d18e5b5"}, {file = "importlib_metadata-6.7.0-py3-none-any.whl", hash = "sha256:cb52082e659e97afc5dac71e79de97d8681de3aa07ff18578330904a9d18e5b5"},
{file = "importlib_metadata-6.7.0.tar.gz", hash = "sha256:1aaf550d4f73e5d6783e7acb77aec43d49da8017410afae93822cc9cca98c4d4"}, {file = "importlib_metadata-6.7.0.tar.gz", hash = "sha256:1aaf550d4f73e5d6783e7acb77aec43d49da8017410afae93822cc9cca98c4d4"},
] ]
importlib-resources = [
[package.dependencies]
typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""}
zipp = ">=0.5"
[package.extras]
docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"]
perf = ["ipython"]
testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"]
[[package]]
name = "importlib-resources"
version = "5.12.0"
description = "Read resources from Python packages"
optional = false
python-versions = ">=3.7"
files = [
{file = "importlib_resources-5.12.0-py3-none-any.whl", hash = "sha256:7b1deeebbf351c7578e09bf2f63fa2ce8b5ffec296e0d349139d43cca061a81a"}, {file = "importlib_resources-5.12.0-py3-none-any.whl", hash = "sha256:7b1deeebbf351c7578e09bf2f63fa2ce8b5ffec296e0d349139d43cca061a81a"},
{file = "importlib_resources-5.12.0.tar.gz", hash = "sha256:4be82589bf5c1d7999aedf2a45159d10cb3ca4f19b2271f8792bc8e6da7b22f6"}, {file = "importlib_resources-5.12.0.tar.gz", hash = "sha256:4be82589bf5c1d7999aedf2a45159d10cb3ca4f19b2271f8792bc8e6da7b22f6"},
] ]
jinja2 = [
[package.dependencies]
zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""}
[package.extras]
docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"]
testing = ["flake8 (<5)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"]
[[package]]
name = "jinja2"
version = "2.11.3"
description = "A very fast and expressive template engine."
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
files = [
{file = "Jinja2-2.11.3-py2.py3-none-any.whl", hash = "sha256:03e47ad063331dd6a3f04a43eddca8a966a26ba0c5b7207a9a9e4e08f1b29419"}, {file = "Jinja2-2.11.3-py2.py3-none-any.whl", hash = "sha256:03e47ad063331dd6a3f04a43eddca8a966a26ba0c5b7207a9a9e4e08f1b29419"},
{file = "Jinja2-2.11.3.tar.gz", hash = "sha256:a6d58433de0ae800347cab1fa3043cebbabe8baa9d29e668f1c768cb87a333c6"}, {file = "Jinja2-2.11.3.tar.gz", hash = "sha256:a6d58433de0ae800347cab1fa3043cebbabe8baa9d29e668f1c768cb87a333c6"},
] ]
jmespath = [
[package.dependencies]
MarkupSafe = ">=0.23"
[package.extras]
i18n = ["Babel (>=0.8)"]
[[package]]
name = "jmespath"
version = "1.0.1"
description = "JSON Matching Expressions"
optional = false
python-versions = ">=3.7"
files = [
{file = "jmespath-1.0.1-py3-none-any.whl", hash = "sha256:02e2e4cc71b5bcab88332eebf907519190dd9e6e82107fa7f83b1003a6252980"}, {file = "jmespath-1.0.1-py3-none-any.whl", hash = "sha256:02e2e4cc71b5bcab88332eebf907519190dd9e6e82107fa7f83b1003a6252980"},
{file = "jmespath-1.0.1.tar.gz", hash = "sha256:90261b206d6defd58fdd5e85f478bf633a2901798906be2ad389150c5c60edbe"}, {file = "jmespath-1.0.1.tar.gz", hash = "sha256:90261b206d6defd58fdd5e85f478bf633a2901798906be2ad389150c5c60edbe"},
] ]
kobo = [
{file = "kobo-0.24.2.tar.gz", hash = "sha256:1b3c17260a93d933d2238884373fbf3485ecd417d930acf984285dc012410e2b"}, [[package]]
name = "kobo"
version = "0.33.0"
description = "A pile of python modules used by Red Hat release engineering to build their tools"
optional = false
python-versions = ">=3.6"
files = [
{file = "kobo-0.33.0-py3-none-any.whl", hash = "sha256:50f2eef41d1e528eba0bcdc04e6d88073353e6815abb86bf4fe3b1a7be449039"},
{file = "kobo-0.33.0.tar.gz", hash = "sha256:34711f4ad0f38600bf7aafe6039b24d94458212de8b2b67c4b0c3144d47ef617"},
] ]
markupsafe = [
[package.dependencies]
six = "*"
[[package]]
name = "markupsafe"
version = "2.0.1"
description = "Safely add untrusted strings to HTML/XML markup."
optional = false
python-versions = ">=3.6"
files = [
{file = "MarkupSafe-2.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d8446c54dc28c01e5a2dbac5a25f071f6653e6e40f3a8818e8b45d790fe6ef53"}, {file = "MarkupSafe-2.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d8446c54dc28c01e5a2dbac5a25f071f6653e6e40f3a8818e8b45d790fe6ef53"},
{file = "MarkupSafe-2.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:36bc903cbb393720fad60fc28c10de6acf10dc6cc883f3e24ee4012371399a38"}, {file = "MarkupSafe-2.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:36bc903cbb393720fad60fc28c10de6acf10dc6cc883f3e24ee4012371399a38"},
{file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d7d807855b419fc2ed3e631034685db6079889a1f01d5d9dac950f764da3dad"}, {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d7d807855b419fc2ed3e631034685db6079889a1f01d5d9dac950f764da3dad"},
@ -580,35 +361,118 @@ markupsafe = [
{file = "MarkupSafe-2.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:693ce3f9e70a6cf7d2fb9e6c9d8b204b6b39897a2c4a1aa65728d5ac97dcc1d8"}, {file = "MarkupSafe-2.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:693ce3f9e70a6cf7d2fb9e6c9d8b204b6b39897a2c4a1aa65728d5ac97dcc1d8"},
{file = "MarkupSafe-2.0.1.tar.gz", hash = "sha256:594c67807fb16238b30c44bdf74f36c02cdf22d1c8cda91ef8a0ed8dabf5620a"}, {file = "MarkupSafe-2.0.1.tar.gz", hash = "sha256:594c67807fb16238b30c44bdf74f36c02cdf22d1c8cda91ef8a0ed8dabf5620a"},
] ]
more-itertools = [
[[package]]
name = "more-itertools"
version = "9.1.0"
description = "More routines for operating on iterables, beyond itertools"
optional = false
python-versions = ">=3.7"
files = [
{file = "more-itertools-9.1.0.tar.gz", hash = "sha256:cabaa341ad0389ea83c17a94566a53ae4c9d07349861ecb14dc6d0345cf9ac5d"}, {file = "more-itertools-9.1.0.tar.gz", hash = "sha256:cabaa341ad0389ea83c17a94566a53ae4c9d07349861ecb14dc6d0345cf9ac5d"},
{file = "more_itertools-9.1.0-py3-none-any.whl", hash = "sha256:d2bc7f02446e86a68911e58ded76d6561eea00cddfb2a91e7019bbb586c799f3"}, {file = "more_itertools-9.1.0-py3-none-any.whl", hash = "sha256:d2bc7f02446e86a68911e58ded76d6561eea00cddfb2a91e7019bbb586c799f3"},
] ]
packaging = [
[[package]]
name = "packaging"
version = "23.2"
description = "Core utilities for Python packages"
optional = false
python-versions = ">=3.7"
files = [
{file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"}, {file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"},
{file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"},
] ]
pluggy = [
[[package]]
name = "pluggy"
version = "0.13.1"
description = "plugin and hook calling mechanisms for python"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
files = [
{file = "pluggy-0.13.1-py2.py3-none-any.whl", hash = "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d"}, {file = "pluggy-0.13.1-py2.py3-none-any.whl", hash = "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d"},
{file = "pluggy-0.13.1.tar.gz", hash = "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0"}, {file = "pluggy-0.13.1.tar.gz", hash = "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0"},
] ]
productmd = [
{file = "productmd-1.33-py3-none-any.whl", hash = "sha256:467dfeb84e74834b6a65508536ccd8ec2d81c24a0ecee5e77d2c358e97eae164"}, [package.dependencies]
{file = "productmd-1.33.tar.gz", hash = "sha256:aaf49bdd2a5cb97f7c6b5011f669dbed153efc7bc61e6935fa796a1b94d16b7e"}, importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""}
[package.extras]
dev = ["pre-commit", "tox"]
[[package]]
name = "productmd"
version = "1.37"
description = "Product, compose and installation media metadata library"
optional = false
python-versions = "*"
files = [
{file = "productmd-1.37-py3-none-any.whl", hash = "sha256:9f037ca1807f3ec293a61be2c989da52956c10ffd09b05f2166c8d26f70a17f0"},
{file = "productmd-1.37.tar.gz", hash = "sha256:8d9057d9874f159a0a581e8c3b5e0c39fff9794fc010ad379d0c88d81c7adccd"},
] ]
py = [
[package.dependencies]
six = "*"
[[package]]
name = "py"
version = "1.11.0"
description = "library with cross-python path, ini-parsing, io, code, log facilities"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
files = [
{file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"},
{file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"},
] ]
pytest = [
[[package]]
name = "pytest"
version = "5.4.3"
description = "pytest: simple powerful testing with Python"
optional = false
python-versions = ">=3.5"
files = [
{file = "pytest-5.4.3-py3-none-any.whl", hash = "sha256:5c0db86b698e8f170ba4582a492248919255fcd4c79b1ee64ace34301fb589a1"}, {file = "pytest-5.4.3-py3-none-any.whl", hash = "sha256:5c0db86b698e8f170ba4582a492248919255fcd4c79b1ee64ace34301fb589a1"},
{file = "pytest-5.4.3.tar.gz", hash = "sha256:7979331bfcba207414f5e1263b5a0f8f521d0f457318836a7355531ed1a4c7d8"}, {file = "pytest-5.4.3.tar.gz", hash = "sha256:7979331bfcba207414f5e1263b5a0f8f521d0f457318836a7355531ed1a4c7d8"},
] ]
python-dateutil = [
[package.dependencies]
atomicwrites = {version = ">=1.0", markers = "sys_platform == \"win32\""}
attrs = ">=17.4.0"
colorama = {version = "*", markers = "sys_platform == \"win32\""}
importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""}
more-itertools = ">=4.0.0"
packaging = "*"
pluggy = ">=0.12,<1.0"
py = ">=1.5.0"
wcwidth = "*"
[package.extras]
checkqa-mypy = ["mypy (==v0.761)"]
testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "requests", "xmlschema"]
[[package]]
name = "python-dateutil"
version = "2.8.2"
description = "Extensions to the standard Python datetime module"
optional = false
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7"
files = [
{file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"},
{file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"},
] ]
pyyaml = [
[package.dependencies]
six = ">=1.5"
[[package]]
name = "pyyaml"
version = "6.0.1"
description = "YAML parser and emitter for Python"
optional = false
python-versions = ">=3.6"
files = [
{file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"},
{file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"},
{file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"},
@ -660,41 +524,152 @@ pyyaml = [
{file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"},
{file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"},
] ]
requests = [
[[package]]
name = "requests"
version = "2.31.0"
description = "Python HTTP for Humans."
optional = false
python-versions = ">=3.7"
files = [
{file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"},
{file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"},
] ]
rpm = [
[package.dependencies]
certifi = ">=2017.4.17"
charset-normalizer = ">=2,<4"
idna = ">=2.5,<4"
urllib3 = ">=1.21.1,<3"
[package.extras]
socks = ["PySocks (>=1.5.6,!=1.5.7)"]
use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"]
[[package]]
name = "rpm"
version = "0.1.0"
description = "Shim RPM module for use in virtualenvs."
optional = false
python-versions = ">=3.6"
files = [
{file = "rpm-0.1.0-py3-none-any.whl", hash = "sha256:3664381f6f3cf050e97f49619cf57abacf3e77d68ddd3bfea3e7459c7c5f03f9"}, {file = "rpm-0.1.0-py3-none-any.whl", hash = "sha256:3664381f6f3cf050e97f49619cf57abacf3e77d68ddd3bfea3e7459c7c5f03f9"},
{file = "rpm-0.1.0.tar.gz", hash = "sha256:0e320a806fb61c3980c0cd0c5f5faec97c73c347432902ba2955a08a7b1a034f"}, {file = "rpm-0.1.0.tar.gz", hash = "sha256:0e320a806fb61c3980c0cd0c5f5faec97c73c347432902ba2955a08a7b1a034f"},
] ]
s3transfer = [
[package.extras]
testing = ["tox"]
[[package]]
name = "s3transfer"
version = "0.7.0"
description = "An Amazon S3 Transfer Manager"
optional = false
python-versions = ">= 3.7"
files = [
{file = "s3transfer-0.7.0-py3-none-any.whl", hash = "sha256:10d6923c6359175f264811ef4bf6161a3156ce8e350e705396a7557d6293c33a"}, {file = "s3transfer-0.7.0-py3-none-any.whl", hash = "sha256:10d6923c6359175f264811ef4bf6161a3156ce8e350e705396a7557d6293c33a"},
{file = "s3transfer-0.7.0.tar.gz", hash = "sha256:fd3889a66f5fe17299fe75b82eae6cf722554edca744ca5d5fe308b104883d2e"}, {file = "s3transfer-0.7.0.tar.gz", hash = "sha256:fd3889a66f5fe17299fe75b82eae6cf722554edca744ca5d5fe308b104883d2e"},
] ]
six = [
[package.dependencies]
botocore = ">=1.12.36,<2.0a.0"
[package.extras]
crt = ["botocore[crt] (>=1.20.29,<2.0a.0)"]
[[package]]
name = "six"
version = "1.16.0"
description = "Python 2 and 3 compatibility utilities"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*"
files = [
{file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
{file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"},
] ]
typing-extensions = [
[[package]]
name = "typing-extensions"
version = "4.7.1"
description = "Backported and Experimental Type Hints for Python 3.7+"
optional = false
python-versions = ">=3.7"
files = [
{file = "typing_extensions-4.7.1-py3-none-any.whl", hash = "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36"}, {file = "typing_extensions-4.7.1-py3-none-any.whl", hash = "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36"},
{file = "typing_extensions-4.7.1.tar.gz", hash = "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2"}, {file = "typing_extensions-4.7.1.tar.gz", hash = "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2"},
] ]
urllib3 = [
[[package]]
name = "urllib3"
version = "1.26.18"
description = "HTTP library with thread-safe connection pooling, file post, and more."
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
files = [
{file = "urllib3-1.26.18-py2.py3-none-any.whl", hash = "sha256:34b97092d7e0a3a8cf7cd10e386f401b3737364026c45e622aa02903dffe0f07"}, {file = "urllib3-1.26.18-py2.py3-none-any.whl", hash = "sha256:34b97092d7e0a3a8cf7cd10e386f401b3737364026c45e622aa02903dffe0f07"},
{file = "urllib3-1.26.18.tar.gz", hash = "sha256:f8ecc1bba5667413457c529ab955bf8c67b45db799d159066261719e328580a0"}, {file = "urllib3-1.26.18.tar.gz", hash = "sha256:f8ecc1bba5667413457c529ab955bf8c67b45db799d159066261719e328580a0"},
]
[package.extras]
brotli = ["brotli (==1.0.9)", "brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"]
secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"]
socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
[[package]]
name = "urllib3"
version = "2.0.7"
description = "HTTP library with thread-safe connection pooling, file post, and more."
optional = false
python-versions = ">=3.7"
files = [
{file = "urllib3-2.0.7-py3-none-any.whl", hash = "sha256:fdb6d215c776278489906c2f8916e6e7d4f5a9b602ccbcfdf7f016fc8da0596e"}, {file = "urllib3-2.0.7-py3-none-any.whl", hash = "sha256:fdb6d215c776278489906c2f8916e6e7d4f5a9b602ccbcfdf7f016fc8da0596e"},
{file = "urllib3-2.0.7.tar.gz", hash = "sha256:c97dfde1f7bd43a71c8d2a58e369e9b2bf692d1334ea9f9cae55add7d0dd0f84"}, {file = "urllib3-2.0.7.tar.gz", hash = "sha256:c97dfde1f7bd43a71c8d2a58e369e9b2bf692d1334ea9f9cae55add7d0dd0f84"},
] ]
wcwidth = [
[package.extras]
brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"]
secure = ["certifi", "cryptography (>=1.9)", "idna (>=2.0.0)", "pyopenssl (>=17.1.0)", "urllib3-secure-extra"]
socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"]
zstd = ["zstandard (>=0.18.0)"]
[[package]]
name = "wcwidth"
version = "0.2.9"
description = "Measures the displayed width of unicode strings in a terminal"
optional = false
python-versions = "*"
files = [
{file = "wcwidth-0.2.9-py2.py3-none-any.whl", hash = "sha256:9a929bd8380f6cd9571a968a9c8f4353ca58d7cd812a4822bba831f8d685b223"}, {file = "wcwidth-0.2.9-py2.py3-none-any.whl", hash = "sha256:9a929bd8380f6cd9571a968a9c8f4353ca58d7cd812a4822bba831f8d685b223"},
{file = "wcwidth-0.2.9.tar.gz", hash = "sha256:a675d1a4a2d24ef67096a04b85b02deeecd8e226f57b5e3a72dbb9ed99d27da8"}, {file = "wcwidth-0.2.9.tar.gz", hash = "sha256:a675d1a4a2d24ef67096a04b85b02deeecd8e226f57b5e3a72dbb9ed99d27da8"},
] ]
xmltodict = [
[[package]]
name = "xmltodict"
version = "0.13.0"
description = "Makes working with XML feel like you are working with JSON"
optional = false
python-versions = ">=3.4"
files = [
{file = "xmltodict-0.13.0-py2.py3-none-any.whl", hash = "sha256:aa89e8fd76320154a40d19a0df04a4695fb9dc5ba977cbb68ab3e4eb225e7852"}, {file = "xmltodict-0.13.0-py2.py3-none-any.whl", hash = "sha256:aa89e8fd76320154a40d19a0df04a4695fb9dc5ba977cbb68ab3e4eb225e7852"},
{file = "xmltodict-0.13.0.tar.gz", hash = "sha256:341595a488e3e01a85a9d8911d8912fd922ede5fecc4dce437eb4b6c8d037e56"}, {file = "xmltodict-0.13.0.tar.gz", hash = "sha256:341595a488e3e01a85a9d8911d8912fd922ede5fecc4dce437eb4b6c8d037e56"},
] ]
zipp = [
[[package]]
name = "zipp"
version = "3.15.0"
description = "Backport of pathlib-compatible object wrapper for zip files"
optional = false
python-versions = ">=3.7"
files = [
{file = "zipp-3.15.0-py3-none-any.whl", hash = "sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556"}, {file = "zipp-3.15.0-py3-none-any.whl", hash = "sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556"},
{file = "zipp-3.15.0.tar.gz", hash = "sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b"}, {file = "zipp-3.15.0.tar.gz", hash = "sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b"},
] ]
[package.extras]
docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"]
testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"]
[metadata]
lock-version = "2.0"
python-versions = ">=3.7,<4"
content-hash = "3653594c6605d2e9b01929eb7df2dd4824b3db249983e3d4607566fce19a54d8"

View File

@ -1,22 +1,22 @@
[tool.poetry] [tool.poetry]
name = "empanadas" name = "empanadas"
version = "0.6.1" version = "0.6.2"
description = "hand crafted ISOs with love and spice" description = "hand crafted ISOs with love and spice"
authors = ["Louis Abel <label@rockylinux.org>", "Neil Hanlon <neil@rockylinux.org>"] authors = ["Louis Abel <label@rockylinux.org>", "Neil Hanlon <neil@rockylinux.org>"]
[tool.poetry.dependencies] [tool.poetry.dependencies]
python = ">=3.7,<4" python = ">=3.7,<4"
rpm = ">=0.1.0" rpm = ">=0.1.0"
MarkupSafe = "<=2.0.1" MarkupSafe = "<=2.1.3"
PyYAML = "~6.0" PyYAML = "~6.0.1"
Jinja2 = "~2" Jinja2 = "~2"
productmd = "~1.33" productmd = "~1.37"
importlib-resources = "^5.8.0" importlib-resources = "^5.8.0"
boto3 = "^1.24.12" boto3 = "^1.28.80"
xmltodict = "^0.13.0" xmltodict = "^0.13.0"
requests = "^2.28.0" requests = "^2.31.0"
kobo = "^0.24.1" kobo = "^0.33.0"
attrs = "^21.4.0" attrs = "^23.1.0"
[tool.poetry.dev-dependencies] [tool.poetry.dev-dependencies]
pytest = "~5" pytest = "~5"

View File

@ -0,0 +1,12 @@
#!/bin/bash
for x in $(cat list); do
NAME=$(echo $x | cut -d ':' -f 1)
STREAM=$(echo $x | cut -d ':' -f 2)
git clone ssh://git.rockylinux.org:22220/staging/modules/${NAME} -b r8s-stream-${STREAM}
if [ $? -eq 0 ]; then
pushd $NAME
cat ${NAME}.yaml | yq '.data.components.rpms | keys[]' | sed 's/"//g' > ../${NAME}:${STREAM}.list
popd
rm -rf ${NAME}
fi
done

View File

@ -0,0 +1,57 @@
function reloop_modules_to_beta() {
FILE="${1}"
RHELVER="${2}"
MAJOR="$(echo ${RHELVER} | cut -d '.' -f1)"
MINOR="$(echo ${RHELVER} | cut -d '.' -f2)"
if [ "${#MINOR}" -eq 1 ]; then
MINOR="0${MINOR}"
fi
DATE="$(date +%Y%m%d%H%M%S)"
if [ ! -f "${FILE}" ]; then
echo "Not a file"
return 1
fi
if [ -z "$RHELVER" ]; then
echo "verion required"
return 1
fi
if [ -f "${FILE}" ]; then
grep -q ".*:.*" ${FILE}
ret_val=$?
if [ $ret_val -ne 0 ]; then
echo "File not formatted correctly"
return 1
fi
fi
for x in $(cat ${FILE}); do
NAME=$(echo ${x} | cut -d':' -f1)
STREAM=$(echo ${x} | cut -d':' -f2)
TAG="imports/c${MAJOR}-beta-stream-${STREAM}/${NAME}-${STREAM}-${MAJOR}${MINOR}00${DATE}.deadbeef"
SBRANCH="c${MAJOR}s-stream-${STREAM}"
BRANCH="c${MAJOR}-beta-stream-${STREAM}"
git clone ssh://src.enterpriselinux.social/modules/${NAME}.git -b "${SBRANCH}"
if [ $? -ne 0 ]; then
echo "!! Branch does not exist?"
continue
fi
pushd ${NAME}
git push --delete origin $(git tag | grep c${MAJOR}-beta-stream-${STREAM})
# just in case
git branch -D "${BRANCH}"
git checkout -b "${BRANCH}"
sed -i "s|ref: .*|ref: c${MAJOR}-beta-stream-${STREAM}|g" *.yaml
git add *.yaml
git commit -m 'update'
git tag -a ${TAG} -m 'update'
git push origin ${BRANCH} ${TAG} -f
popd
rm -rf $(pwd)/${NAME}
done
}

View File

@ -0,0 +1,21 @@
#!/bin/bash
for x in $(ls *.list) ; do
NAME=$(echo $x | cut -d ':' -f 1)
STREAM=$(echo ${x/.list/} | cut -d ':' -f 2)
for rpm in $(cat ${x}); do
git clone ssh://git.rockylinux.org:22220/staging/rpms/${rpm}.git -b r8s-stream-${STREAM}
if [ $? -eq 0 ]; then
pushd $rpm
git push --delete origin $(git tag | grep r8-beta-stream-${STREAM})
git checkout -b r8-beta-stream-${STREAM}
#git tag -a imports/r8-beta-stream-${STREAM}/20231015200000.deadbeef -m '9.3'
git push -f origin imports/r8-beta-stream-${STREAM}/20231015200000.deadbeef r8-beta-stream-${STREAM}
popd
rm -rf $rpm
else
echo "error"
echo "$rpm" >> errors
continue
fi
done
done