Manage APT_REPO bucket for each Patch Release

Change-Id: I11cd777896be4e308f450b6a7a7799b7ad88369f
Signed-off-by: Lindley Werner <Lindley.Vieira@windriver.com>
This commit is contained in:
Lindley Werner 2024-04-30 10:08:26 -03:00
parent 4bf81b7374
commit 70b11c4977
3 changed files with 38 additions and 12 deletions

View File

@ -14,11 +14,11 @@ from software.exceptions import APTOSTreeCommandFail
LOG = logging.getLogger('main_logger')
def package_upload(feed_dir, package):
def package_upload(bucket_dir, package):
"""
Upload a Debian package to an apt repository.
:param feed_dir: apt package feed directory
:param bucket_dir: apt package bucket directory
:param package: Debian package
"""
try:
@ -27,7 +27,7 @@ def package_upload(feed_dir, package):
subprocess.run(
["apt-ostree", "repo", "add",
"--feed", str(feed_dir),
"--feed", str(bucket_dir),
"--release", constants.DEBIAN_RELEASE,
package],
check=True,
@ -68,6 +68,29 @@ def package_remove(feed_dir, packages):
raise APTOSTreeCommandFail(msg)
def remove_bucket(bucket_dir):
"""
Remove a bucket from the apt repository.
:param bucket_dir: apt package bucket directory
"""
try:
msg = "Removing bucket: %s" % bucket_dir
LOG.info(msg)
subprocess.run(
["apt-ostree", "repo", "remove",
"--feed", str(feed_dir),
"--release", constants.DEBIAN_RELEASE],
check=True,
capture_output=True)
except subprocess.CalledProcessError as e:
msg = "Failed to remove bucket."
info_msg = "\"apt-ostree bucket remove\" error: return code %s , Output: %s" \
% (e.returncode, e.stderr.decode("utf-8"))
LOG.error(info_msg)
raise APTOSTreeCommandFail(msg)
def run_install(repo_dir, packages):
"""
Run Debian package upgrade.

View File

@ -1581,10 +1581,12 @@ class PatchController(PatchService):
LOG.exception(msg)
raise OSTreeTarFail(msg)
package_repo_dir = "%s/rel-%s" % (constants.PACKAGE_FEED_DIR, release_sw_version)
packages = [pkg.split("_")[0] for pkg in release.packages]
if packages:
apt_utils.package_remove(package_repo_dir, packages)
# Remove debian packages bucket from apt_repo
bucket_repo_dir = "%s/rel-%s" % (constants.PACKAGE_FEED_DIR, release_sw_version)
apt_utils.remove_bucket(bucket_repo_dir)
# packages = [pkg.split("_")[0] for pkg in release.packages]
# if packages:
# apt_utils.package_remove(bucket_repo_dir, packages)
# Delete upgrade iso file in folder
# TODO(heitormatsui): treat the prepatched iso scenario

View File

@ -934,11 +934,12 @@ class PatchFile(object):
patch_id = thispatch.parse_metadata_string(text)
patch_sw_version = utils.get_major_release_version(
thispatch.metadata[patch_id]["sw_version"])
sw_version = thispatch.metadata[patch_id]["sw_version"]
patch_sw_version = utils.get_major_release_version(sw_version)
abs_ostree_tar_dir = package_dir[patch_sw_version]
ostree_tar_filename = "%s/%s-software.tar" % (abs_ostree_tar_dir, patch_id)
package_repo_dir = "%s/rel-%s" % (constants.PACKAGE_FEED_DIR, patch_sw_version)
debian_packages_dir = "%s/rel-%s" % (constants.PACKAGE_FEED_DIR, patch_sw_version)
bucket_repo_dir = "%s/rel-%s" % (constants.PACKAGE_FEED_DIR, sw_version)
# Create a temporary working directory
tmpdir = tempfile.mkdtemp(prefix="deployment_")
@ -951,7 +952,7 @@ class PatchFile(object):
# Upload the package to the apt repository
deb_dir = os.scandir(tmpdir)
for deb in deb_dir:
apt_utils.package_upload(package_repo_dir,
apt_utils.package_upload(bucket_repo_dir,
os.path.join(tmpdir, deb.name))
except tarfile.TarError:
msg = "Failed to extract the ostree tarball for %s" \
@ -960,7 +961,7 @@ class PatchFile(object):
raise OSTreeTarFail(msg)
except OSError as e:
msg = "Failed to scan %s for Debian packages. Error: %s" \
% (package_repo_dir, e.errno)
% (debian_packages_dir, e.errno)
LOG.exception(msg)
raise OSTreeTarFail(msg)
finally: