Skip to content

Commit 236f9a1

Browse files
compatible(release_rock.yaml): Release multi-architecture image (#155)
1 parent d7601d5 commit 236f9a1

File tree

1 file changed

+35
-9
lines changed
  • python/cli/data_platform_workflows_cli/craft_tools

1 file changed

+35
-9
lines changed

python/cli/data_platform_workflows_cli/craft_tools/release.py

Lines changed: 35 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -89,24 +89,50 @@ def rock():
8989
directory = pathlib.Path(args.directory)
9090

9191
yaml_data = yaml.safe_load((directory / "rockcraft.yaml").read_text())
92-
92+
digests = []
9393
for rock_file in directory.glob("*.rock"):
94-
# Example `rock_file.name`: "charmed-postgresql_14.10_amd64.rock"
95-
architecture = rock_file.name.removesuffix(".rock").split("_")[-1]
96-
# Example: "14.10-22.04-amd64"
97-
tag = (
98-
f'{yaml_data["version"]}-{yaml_data["base"].split("@")[-1]}-{architecture}'
99-
)
94+
digest = run(
95+
[
96+
"skopeo",
97+
"inspect",
98+
f"oci-archive:{rock_file.name}",
99+
"--format",
100+
"{{ .Digest }}",
101+
]
102+
).strip()
100103
logging.info(f"Uploading {rock_file=}")
101104
run(
102105
[
103106
"skopeo",
104107
"copy",
105108
f"oci-archive:{rock_file.name}",
106-
f'docker://ghcr.io/canonical/{yaml_data["name"]}:{tag}',
109+
f'docker://ghcr.io/canonical/{yaml_data["name"]}@{digest}',
107110
]
108111
)
109-
logging.info(f"Uploaded rock {tag=}")
112+
logging.info(f"Uploaded rock {digest=}")
113+
digests.append(digest)
114+
logging.info("Creating multi-architecture image")
115+
# Example: "14.10-22.04_edge"
116+
tag = f'{yaml_data["version"]}-{yaml_data["base"].split("@")[-1]}_edge'
117+
command = [
118+
"docker",
119+
"manifest",
120+
"create",
121+
f'ghcr.io/canonical/{yaml_data["name"]}:{tag}',
122+
]
123+
for digest in digests:
124+
command.extend(("--amend", f'ghcr.io/canonical/{yaml_data["name"]}@{digest}'))
125+
run(command)
126+
logging.info("Created multi-architecture image. Uploading")
127+
run(
128+
[
129+
"docker",
130+
"manifest",
131+
"push",
132+
f'ghcr.io/canonical/{yaml_data["name"]}:{tag}',
133+
]
134+
)
135+
logging.info("Uploaded multi-architecture image")
110136

111137

112138
def charm():

0 commit comments

Comments
 (0)