{"record":{"id":"111daabb20b88d24","repo":"jdx/mise","slug":"push-destination-must-be-a-fully-qualified-referen","errorCode":null,"errorMessage":"push destination must be a fully-qualified reference (e.g. `ghcr.io/you/devenv:tag`); got {:?}","messagePattern":"push destination must be a fully-qualified reference \\(e\\.g\\. `ghcr\\.io/you/devenv:tag`\\); got (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/cli/oci/push.rs","lineNumber":94,"sourceCode":"    #[clap(long, value_name = \"UID[:GID]\")]\n    owner: Option<LayerOwner>,\n\n    /// Maintain the tag as a multi-arch image index\n    ///\n    /// Pushes this build's manifest by digest and points the tag at an OCI\n    /// image index containing one entry per platform, preserving entries\n    /// other architectures pushed. Run `mise oci push --update-index` from\n    /// one runner per platform to assemble a multi-arch tag.\n    #[clap(long)]\n    update_index: bool,\n}\n\nimpl Push {\n    pub async fn run(self) -> Result<()> {\n        Settings::get().ensure_experimental(\"mise oci push\")?;\n\n        if !self.reference.contains('/') {\n            bail!(\n                \"push destination must be a fully-qualified reference \\\n                 (e.g. `ghcr.io/you/devenv:tag`); got {:?}\",\n                self.reference\n            );\n        }\n        // Keep the temp dir alive for the duration of the push — it removes\n        // itself on drop, so multi-hundred-megabyte image layouts don't\n        // accumulate in /tmp.\n        let mut reused_layers = 0;\n        let (image_dir, _tempdir_guard): (PathBuf, Option<TempDir>) =\n            if let Some(d) = &self.image_dir {\n                if !d.join(\"index.json\").is_file() {\n                    bail!(\n                        \"{}: does not look like an OCI image layout (missing index.json)\",\n                        d.display()\n                    );\n                }\n                (d.clone(), None)","sourceCodeStart":76,"sourceCodeEnd":112,"githubUrl":"https://github.com/jdx/mise/blob/9dcfcaa0dc8747a2577d3270b69bb9d8313b2807/src/cli/oci/push.rs#L76-L112","documentation":"`mise oci push` requires the destination to be a fully-qualified OCI reference: registry host + repository path + optional tag/digest (e.g. `ghcr.io/you/devenv:tag`). Unlike docker/podman, mise has no implicit default registry (docker.io) to expand short names to, so it does an up-front `contains('/')` check and bails before building or uploading anything. The `{:?}` in the message is the raw reference string you passed.","triggerScenarios":"Running `mise oci push devenv:tag`, `mise oci push myimage`, or `mise oci push latest` — any destination string without at least one slash. Also scripts that assemble the reference from a short variable or a name without namespace.","commonSituations":"Muscle memory from `docker push name:tag` where the daemon silently injects docker.io; copying a repo short name from a browser URL (e.g. just `devenv`); CI variables that hold only the image name without registry/namespace.","solutions":["Use a fully-qualified reference with registry host and namespace: `mise oci push ghcr.io/<you>/devenv:tag`","For a local registry include the port: `mise oci push localhost:5000/devenv:tag`","Check the variable your script feeds to push actually contains `registry/namespace/repo`"],"exampleFix":"# before\nmise oci push devenv:1.0\n# after\nmise oci push ghcr.io/you/devenv:1.0","handlingStrategy":"validation","validationCode":"# bash: require a slash before invoking push\nref=\"${1:?reference required}\"\nif [[ \"$ref\" != *\"/\"* ]]; then\n  echo \"ref must be registry/namespace/repo[:tag]\" >&2\n  exit 2\nfi\nmise oci push \"$ref\"","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Always store full references (registry+namespace+repo+tag) in CI variables; never compose them from a bare name","Treat short names as invalid at the pipeline-config level (lint for refs without '/')"],"tags":["oci","push","registry","argument-validation"],"backgroundTag":"invalid-image-reference","analyzedSha":"9dcfcaa0dc8747a2577d3270b69bb9d8313b2807","analyzedAt":"2026-08-17T14:28:50.624Z","schemaVersion":2},"datasetVersion":"2026-08-21T18:17:14.833Z"}