{"record":{"id":"cd36d707e3e71697","repo":"denoland/deno","slug":"expected-deno-deploy-to-be-published","errorCode":null,"errorMessage":"expected @deno/deploy to be published","messagePattern":"expected @deno/deploy to be published","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"critical","filePath":"cli/tools/deploy.rs","lineNumber":78,"sourceCode":"    let file = factory\n      .file_fetcher()?\n      .fetch_with_options(\n        &registry_url.join(\"@deno/deploy/meta.json\").unwrap(),\n        deno_resolver::file_fetcher::FetchPermissionsOptionRef::AllowAll,\n        deno_resolver::file_fetcher::FetchOptions {\n          // jsr.io serves meta.json with `cache-control: max-age=60`, so\n          // respect those headers rather than pinning the first cached copy\n          // forever (see denoland/deno#35736).\n          maybe_cache_setting: Some(\n            &deno_cache_dir::file_fetcher::CacheSetting::RespectHeaders,\n          ),\n          ..Default::default()\n        },\n      )\n      .await?;\n    let info = serde_json::from_slice::<JsrPackageInfo>(&file.source)?;\n    let latest_version = resolve_deploy_cli_version(&info)\n      .expect(\"expected @deno/deploy to be published\");\n    Url::parse(&format!(\"jsr:@deno/deploy@{latest_version}\"))\n      .map_err(ResolveUrlOrPathError::UrlParse)?\n  };\n\n  let worker_factory =\n    Arc::new(factory.create_cli_main_worker_factory().await?);\n\n  let mut worker = worker_factory\n    .create_custom_worker(\n      WorkerExecutionMode::Deploy,\n      specifier,\n      vec![],\n      vec![],\n      PermissionsContainer::allow_all(\n        factory.permission_desc_parser()?.clone(),\n      ),\n      vec![ops::deploy::deno_deploy::init()],\n      Default::default(),","sourceCodeStart":60,"sourceCodeEnd":96,"githubUrl":"https://github.com/denoland/deno/blob/9ad36f7a2cce60488e6ec52283efb32efddaf93a/cli/tools/deploy.rs#L60-L96","documentation":"The `deploy` subcommand bootstraps itself by fetching @deno/deploy's meta.json from the JSR registry and resolving the latest published version, then runs that package as the deploy CLI. If the fetched metadata yields no eligible version, resolve_deploy_cli_version() returns None and .expect() panics with 'expected @deno/deploy to be published'.","triggerScenarios":"Running `deno deploy` when the fetched @deno/deploy meta.json lists no usable versions: a jsr.io outage or replication lag, a custom registry override that does not mirror the package, or a stale cached copy of meta.json.","commonSituations":"Corporate proxies or private JSR mirrors without @deno/deploy; transient jsr.io incidents; a poisoned DENO_DIR cache; network middleboxes returning an empty but valid JSON document.","solutions":["Unset or fix registry overrides (DENO_REGISTRY_URL and related JSR env vars) so real jsr.io metadata is used","Clear cached registry metadata (fresh DENO_DIR, or delete the cached deps) and retry","Check https://jsr.io/@deno/deploy to confirm the package and its versions are visible","When developing the deploy CLI itself, set DENO_DEPLOY_CLI_SPECIFIER to a local copy to bypass registry resolution"],"exampleFix":"# before\nDENO_REGISTRY_URL=https://mirror.internal/jsr deno deploy\n\n# after - use the real registry or a complete mirror\ndeno deploy","handlingStrategy":"validation","validationCode":"curl -sL https://jsr.io/@deno/deploy/meta.json -o /tmp/deploy-meta.json\ndeno eval \"const m = JSON.parse(Deno.readTextFileSync('/tmp/deploy-meta.json')); console.log(Object.keys(m.versions ?? {}));\"\n# must list at least one version before `deno deploy` will bootstrap","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Point registry overrides at a complete jsr.io mirror or remove them","On registry hiccups, retry with a fresh DENO_DIR to bypass cached metadata","Pin DENO_DEPLOY_CLI_SPECIFIER locally when developing the deploy CLI"],"tags":["deploy","jsr","registry","panic","version-resolution"],"backgroundTag":"package-not-found-in-registry","analyzedSha":"9ad36f7a2cce60488e6ec52283efb32efddaf93a","analyzedAt":"2026-08-20T13:07:44.778Z","contentChangedAt":"2026-08-20T13:07:44.778Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}