← All Modules

oci

OCI container registry operations. Pull, push, copy, tag, and mutate images across registries. No require() needed — available as a global builtin.

Image operations

Example:

-- Copy between registries (streams layer-by-layer)
oci.copy(
  "registry.gitlab.com/group/project/image:abc123",
  "770508136720.dkr.ecr.us-east-1.amazonaws.com/app:abc123",
  {
    src_auth = { username = env.get("CI_REGISTRY_USER"), password = env.get("CI_REGISTRY_PASSWORD") },
    dst_auth = { username = "AWS",                       password = ecr_token },
  }
)

-- Re-tag within the same repository (cheap manifest-only push)
oci.tag(
  "770508136720.dkr.ecr.us-east-1.amazonaws.com/app:abc123",
  "latest",
  { auth = { username = "AWS", password = ecr_token } }
)

-- Append a config file as a new layer
oci.mutate(
  "registry.gitlab.com/group/project/base:abc123",
  "770508136720.dkr.ecr.us-east-1.amazonaws.com/app:patched",
  { ["app/config.json"] = '{"env":"production"}' },
  {
    src_auth = { username = env.get("CI_REGISTRY_USER"), password = env.get("CI_REGISTRY_PASSWORD") },
    dst_auth = { username = "AWS",                       password = ecr_token },
  }
)