def v1_manifest_to_v2( manifest: om.OciImageManifestV1, oci_client: oc.Client, tgt_image_ref: str, ) -> om.OciImageManifest: docker_cfg = v2_cfg_from_v1_manifest(manifest=manifest) docker_cfg = dataclasses.asdict(docker_cfg) docker_cfg = json.dumps(docker_cfg).encode('utf-8') cfg_digest = f'sha256:{hashlib.sha256(docker_cfg).hexdigest()}' cfg_leng = len(docker_cfg) oci_client.put_blob( image_reference=tgt_image_ref, digest=cfg_digest, octets_count=cfg_leng, data=docker_cfg, ) manifest_v2 = om.OciImageManifest( config=om.OciBlobRef( digest=cfg_digest, mediaType='application/vnd.docker.container.image.v1+json', size=cfg_leng, ), layers=manifest.layers, ) return manifest_v2, docker_cfg
cfg_digest_with_alg = f'sha256:{cfg_digest}' client.put_blob( image_reference=target_ref, digest=cfg_digest_with_alg, octets_count=cfg_octets, data=cfg_raw, mimetype='application/vnd.docker.container.image.v1+json', ) manifest = om.OciImageManifest( config=gci.oci.ComponentDescriptorOciCfgBlobRef( digest=f'sha256:{cfg_digest}', size=cfg_octets, ), layers=[ gci.oci.ComponentDescriptorOciBlobRef( digest=cd_digest_with_alg, size=cd_octets, ), ], ) manifest_dict = dataclasses.asdict(manifest) manifest_bytes = json.dumps(manifest_dict).encode('utf-8') client.put_manifest( image_reference=target_ref, manifest=manifest_bytes, )
octets_count = int(src_blob.headers['Content-Length']) oci_client.put_blob( image_reference=tgt_ref, digest=digest, octets_count=octets_count, data=src_blob, ) return om.OciBlobRef( digest=digest, mediaType=blob.mediaType, size=octets_count, ) return om.OciImageManifest( config=replicate_blob(src_oci_manifest.config), layers=[replicate_blob(blob) for blob in src_oci_manifest.layers], ) def publish_container_image_from_kaniko_tarfile( image_tarfile_path: str, oci_client: oc.Client, image_reference: str, additional_tags: typing.List[str] = (), manifest_mimetype: str = om.OCI_MANIFEST_SCHEMA_V2_MIME, ): image_reference = ou.normalise_image_reference( image_reference=image_reference) image_name = image_reference.rsplit(':', 1)[0] image_references = (image_reference, ) + tuple( [f'{image_name}:{tag}' for tag in additional_tags])