Skip to content

Commit 1894f06

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 <[email protected]>
1 parent 285dd01 commit 1894f06

File tree

1 file changed

+49
-20
lines changed

1 file changed

+49
-20
lines changed

src/cmd-koji-upload

+49-20
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,11 @@ def md5sum_file(path):
9696
h.update(b)
9797
return h.hexdigest()
9898

99+
class RpmListType(IntEnum):
100+
COMMITMETA = 1
101+
EXTENSIONS = 2
102+
HOST = 3
103+
META = 4
99104

100105
class Build(_Build):
101106
"""
@@ -113,12 +118,27 @@ class Build(_Build):
113118
"require_commit": True,
114119
"require_cosa": True,
115120
})
116-
_Build.__init__(self, **kwargs)
117-
self.version, self.release = self.build_id.split('-')
118-
self.name = f"{self.build_name}-{self.basearch}"
119-
self.source = self.get_meta_key(
120-
"meta", self.ckey("container-config-git"))
121-
self.host_rpms = self.get_rpm_list(RpmListType.HOST)
121+
if kwargs.get('node_image') is True:
122+
self.version = kwargs['build'].replace("-",".")
123+
self.release = "0"
124+
self._build_dir = self.buildroot
125+
self._basearch = kwargs['arch']
126+
self.name = f"rhcos-{self.basearch}"
127+
self.source = "https://github.com/openshift/os"
128+
self.meta_file_path = f"{kwargs['buildroot']}/meta.json"
129+
self._found_files = {}
130+
self._build_json = {}
131+
with open(self.meta_file_path) as f:
132+
self._build_json['meta'] = json.load(f)
133+
# We use podman build, there is no need for host rpms
134+
self.host_rpms = ""
135+
else:
136+
_Build.__init__(self, **kwargs)
137+
self.version, self.release = self.build_id.split('-')
138+
self.name = f"{self.build_name}-{self.basearch}"
139+
self.source = self.get_meta_key(
140+
"meta", self.ckey("container-config-git"))
141+
self.host_rpms = self.get_rpm_list(RpmListType.HOST)
122142
def __del__(self):
123143
try:
124144
shutil.rmtree(self._tmpdir)
@@ -388,11 +408,6 @@ def kinit(keytab, principle):
388408
except Exception as err:
389409
raise Exception("failed to auth: ", err)
390410

391-
class RpmListType(IntEnum):
392-
COMMITMETA = 1
393-
EXTENSIONS = 2
394-
HOST = 3
395-
META = 4
396411

397412
class _KojiBase():
398413
"""
@@ -561,7 +576,11 @@ class Reserve(_KojiBase):
561576
'token': koji_reservation['token'],
562577
'release': build.release
563578
}
564-
build.meta_write()
579+
if hasattr(build, 'meta_file_path') and build.meta_file_path:
580+
with open(build.meta_file_path, "w") as f:
581+
json.dump(build.meta, f, indent=2)
582+
else:
583+
build.meta_write()
565584

566585

567586
class Upload(_KojiBase):
@@ -745,9 +764,16 @@ class Upload(_KojiBase):
745764
'public-url': self._s3_url
746765
}
747766
self.build.meta_write()
767+
if 'origin' in self.build.source:
768+
source = self.build.source['origin']
769+
commit = self.build.source['commit']
770+
meta = False
771+
else:
772+
source = self.build.source
773+
commit = ""
774+
meta = True
748775

749-
750-
log.debug(f"Preparing manifest for {(len(self.image_files))} files")
776+
log.debug(f"Preparing manifest for {(len(self.get_image_files(meta=meta)))} files")
751777
# The koji/brew NVR is constructed like so:
752778
# Name = "rhcos-$arch", like `rhcos-x86_64`
753779
# Version = Everything before `-` in RHCOS version
@@ -773,7 +799,7 @@ class Upload(_KojiBase):
773799
"name": self.build.name,
774800
"release": self.build.release,
775801
"owner": self._owner,
776-
"source": self.build.source['origin'],
802+
"source": source,
777803
"start_time": stamp,
778804
"version": self.build.version
779805
},
@@ -785,7 +811,7 @@ class Upload(_KojiBase):
785811
},
786812
"content_generator": {
787813
"name": "coreos-assembler",
788-
"version": self.build.source['commit']
814+
"version": commit
789815
},
790816
"container": {
791817
"type": "docker",
@@ -803,11 +829,11 @@ class Upload(_KojiBase):
803829
"tools": [
804830
{
805831
"name": "coreos-assembler",
806-
"version": self.build.source['commit']
832+
"version": commit
807833
}
808834
]
809835
}],
810-
"output": self.image_files
836+
"output": self.get_image_files(meta=meta)
811837
}
812838

813839
return self._manifest
@@ -960,7 +986,9 @@ Environment variables are supported:
960986
help="Do not upload, just parse the build")
961987
parent_parser.add_argument("--arch", default=get_basearch(),
962988
help="Set the build architecture")
963-
989+
# Node image sytle update
990+
parent_parser.add_argument("--node-image", action='store_true', required=False,
991+
help="Brew uploads for node image sytle")
964992
# Koji specific options
965993
parent_parser.add_argument("--no-auth", action='store_false', dest="auth",
966994
help="Skip Kerberos auth, use if already auth'd")
@@ -1043,7 +1071,8 @@ Environment variables are supported:
10431071

10441072
args = parser.parse_args(namespace=args)
10451073

1046-
build = Build(buildroot=args.buildroot, build=args.build, arch=args.arch)
1074+
build = Build(buildroot=args.buildroot, build=args.build, arch=args.arch,
1075+
node_image=args.node_image)
10471076

10481077
if args.auth:
10491078
kinit(args.keytab, args.owner)

0 commit comments

Comments
 (0)