Try   HackMD

CLI Output Proposal for COPY with referrers

Follow guidance from CLI Output Proposal for ORAS CLI THe above document calls out the general problems with copy. Below I try to outline the possible set of improvements.

This is non trivial to implement and requires terminal manipulation to obtain things like progress which oras already supports.

The command below shows how a set of artifacts can be copied. We should consider if

~ oras copy -r $IMAGE registry.twnt.co/copy-testimage:latest
Starting copy...
Copying [registry] ghcr.io/toddysm/cssc-pipeline/copy-testimage:latest => [registry] registry.twnt.co/copy-testimage:latest
Digest: sha256:b4c0ed46d75ff7a1e8bcc166156db356dbb3768181d010a639ad4b4dd2f43db7

Copying referrer artifacts...
[artifact] application/vnd.cyclonedx+json (sha256:0c3b33f215cb656e66954bfdbb0a68929c7a23843100f2cafa0b3fb2d6be6375)
  β”œβ”€ Copying blob (sha256:...) (size: 12345 bytes) [in progress]
  └─ Copied blob (sha256:...) (size: 67890 bytes) [done]

[artifact] application/sarif (sha256:bacff58d032857055dcacb3e4fe418e1dd00c54c636b0196b0efe565a6ba7817)
  β”œβ”€ referred by: (sha256:fae8a85a...)
  β”œβ”€ Copying blob (sha256:...) (size: 23456 bytes) [in progress]
  └─ Copied blob (sha256:...) (size: 78901 bytes) [done]

[artifact] application/vnd.dev.cosign.artifact.sig.v1+json (sha256:fae8a85a05bfb8c9c6d63cda2b2c216a277458c7519e6382d6919d3c9926333f)
  β”œβ”€ referred by: (sha256:fae8a85a...)
  β”œβ”€ Copying blob (sha256:...) (size: 34567 bytes) [in progress]
  └─ Copied blob (sha256:...) (size: 89012 bytes) [done]

[artifact] application/vnd.dev.cosign.artifact.sig.v1+json (sha256:26971ffc0fd8b5464ab7144e72f02c0ca7cbaf819d810dcab2cfb3488a0b0b53)
  β”œβ”€ referred by: (sha256:fae8a85a...)
  β”œβ”€ Copying blob (sha256:...) (size: 45678 bytes) [in progress]
  └─ Copied blob (sha256:...) (size: 90123 bytes) [done]

Other options without the enclosing parenthisis

~ oras copy -r $IMAGE registry.twnt.co/copy-testimage:latest
Starting copy...
Copying [registry] ghcr.io/toddysm/cssc-pipeline/copy-testimage:latest => [registry] registry.twnt.co/copy-testimage:latest
Digest: sha256:b4c0ed46d75ff7a1e8bcc166156db356dbb3768181d010a639ad4b4dd2f43db7

Copying referrer artifacts...
[artifact] application/vnd.cyclonedx+json Digest: 0c3b33f215cb656e66954bfdbb0a68929c7a23843100f2cafa0b3fb2d6be6375
  β”œβ”€ Copying blob sha256:... size: 12345 bytes [in progress]
  └─ Copied blob sha256:... size: 67890 bytes [done]

[artifact] application/sarif Digest: bacff58d032857055dcacb3e4fe418e1dd00c54c636b0196b0efe565a6ba7817
  β”œβ”€ Copying blob sha256:... size: 23456 bytes [in progress]
  └─ Copied blob sha256:... size: 78901 bytes [done]

[artifact] application/vnd.dev.cosign.artifact.sig.v1+json Digest: fae8a85a05bfb8c9c6d63cda2b2c216a277458c7519e6382d6919d3c9926333f
  referred by: 0c3b33f...
  β”œβ”€ Copying blob sha256:... size: 34567 bytes [in progress]
  └─ Copied blob sha256:... size: 89012 bytes [done]

[artifact] application/vnd.dev.cosign.artifact.sig.v1+json Digest: 26971ffc0fd8b5464ab7144e72f02c0ca7cbaf819d810dcab2cfb3488a0b0b53
  referred by: fae8a85a...
  β”œβ”€ Copying blob sha256:... size: 45678 bytes [in progress]
  └─ Copied blob sha256:... size: 90123 bytes [done]

– The above with the parenthisis enclosed digest seems more readable but this might be incosistent with the rest of ORAS. So maybe minor tweak might help make it more readable but consistent.

Consideration

  • Implementation might be significantly more costly since copy is concurrent.
  • Users might not want this degree of output and if so can consider a –quite option similar to curl that might only ouput the final state or a shortened version.
  • Consider if the terminal is non-interactive but clients can pipe this to a file or /dev/null