Skip to content

Commit 3c3ef1c

Browse files
committed
cmd-koji-upload: Add support for node-image
- cmd-koji-upload is tightly coupled to the Build class and cosalib internals, which makes supporting the new node-image layout challenging. This commit introduces a way to maintain compatibility with both the legacy and updated node-image styles for brew uploads. - This is a transitional fix — once the migration to Konflux is complete, this compatibility layer will no longer be necessary. Signed-off-by: Renata Ravanelli <rravanel@redhat.com>
1 parent dfd996f commit 3c3ef1c

1 file changed

Lines changed: 44 additions & 15 deletions

File tree

src/cmd-koji-upload

Lines changed: 44 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -112,12 +112,27 @@ class Build(_Build):
112112
"require_commit": True,
113113
"require_cosa": True,
114114
})
115-
_Build.__init__(self, **kwargs)
116-
self.version, self.release = self.build_id.split('-')
117-
self.name = f"{self.build_name}-{self.basearch}"
118-
self.source = self.get_meta_key(
119-
"meta", self.ckey("container-config-git"))
120-
self.host_rpms = self.get_rpm_list(host=True)
115+
if kwargs.get('node_image') is True:
116+
self.version = kwargs['build'].replace("-",".")
117+
self.release = "0"
118+
self._build_dir = self.buildroot
119+
self._basearch = kwargs['arch']
120+
self.name = f"rhcos-{self.basearch}"
121+
self.source = "https://github.com/openshift/os"
122+
self.meta_file_path = f"{kwargs['buildroot']}/meta.json"
123+
self._found_files = {}
124+
self._build_json = {}
125+
with open(self.meta_file_path) as f:
126+
self._build_json['meta'] = json.load(f)
127+
# We use podman build, there is no need for host rpms
128+
self.host_rpms = ""
129+
else:
130+
_Build.__init__(self, **kwargs)
131+
self.version, self.release = self.build_id.split('-')
132+
self.name = f"{self.build_name}-{self.basearch}"
133+
self.source = self.get_meta_key(
134+
"meta", self.ckey("container-config-git"))
135+
self.host_rpms = self.get_rpm_list(host=True)
121136
def __del__(self):
122137
try:
123138
shutil.rmtree(self._tmpdir)
@@ -555,7 +570,11 @@ class Reserve(_KojiBase):
555570
'token': koji_reservation['token'],
556571
'release': build.release
557572
}
558-
build.meta_write()
573+
if hasattr(build, 'meta_file_path') and build.meta_file_path:
574+
with open(build.meta_file_path, "w") as f:
575+
json.dump(build.meta, f, indent=2)
576+
else:
577+
build.meta_write()
559578

560579

561580
class Upload(_KojiBase):
@@ -739,9 +758,16 @@ class Upload(_KojiBase):
739758
'public-url': self._s3_url
740759
}
741760
self.build.meta_write()
761+
if 'origin' in self.build.source:
762+
source = self.build.source['origin']
763+
commit = self.build.source['commit']
764+
meta = False
765+
else:
766+
source = self.build.source
767+
commit = ""
768+
meta = True
742769

743-
744-
log.debug(f"Preparing manifest for {(len(self.image_files))} files")
770+
log.debug(f"Preparing manifest for {(len(self.get_image_files(meta=meta)))} files")
745771
# The koji/brew NVR is constructed like so:
746772
# Name = "rhcos-$arch", like `rhcos-x86_64`
747773
# Version = Everything before `-` in RHCOS version
@@ -767,7 +793,7 @@ class Upload(_KojiBase):
767793
"name": self.build.name,
768794
"release": self.build.release,
769795
"owner": self._owner,
770-
"source": self.build.source['origin'],
796+
"source": source,
771797
"start_time": stamp,
772798
"version": self.build.version
773799
},
@@ -779,7 +805,7 @@ class Upload(_KojiBase):
779805
},
780806
"content_generator": {
781807
"name": "coreos-assembler",
782-
"version": self.build.source['commit']
808+
"version": commit
783809
},
784810
"container": {
785811
"type": "docker",
@@ -797,11 +823,11 @@ class Upload(_KojiBase):
797823
"tools": [
798824
{
799825
"name": "coreos-assembler",
800-
"version": self.build.source['commit']
826+
"version": commit
801827
}
802828
]
803829
}],
804-
"output": self.image_files
830+
"output": self.get_image_files(meta=meta)
805831
}
806832

807833
return self._manifest
@@ -954,7 +980,9 @@ Environment variables are supported:
954980
help="Do not upload, just parse the build")
955981
parent_parser.add_argument("--arch", default=get_basearch(),
956982
help="Set the build architecture")
957-
983+
# Node image sytle uploads
984+
parent_parser.add_argument("--node-image", action='store_true', required=False,
985+
help="Set the build architecture")
958986
# Koji specific options
959987
parent_parser.add_argument("--no-auth", action='store_false', dest="auth",
960988
help="Skip Kerberos auth, use if already auth'd")
@@ -1037,7 +1065,8 @@ Environment variables are supported:
10371065

10381066
args = parser.parse_args(namespace=args)
10391067

1040-
build = Build(buildroot=args.buildroot, build=args.build, arch=args.arch)
1068+
build = Build(buildroot=args.buildroot, build=args.build, arch=args.arch,
1069+
node_image=args.node_image)
10411070

10421071
if args.auth:
10431072
kinit(args.keytab, args.owner)

0 commit comments

Comments
 (0)