{"record":{"id":"077b202aef542dcc","repo":"tauri-apps/tauri","slug":"no-data-in-parent","errorCode":null,"errorMessage":"No data in parent","messagePattern":"No data in parent","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/tauri-bundler/src/bundle/updater_bundle.rs","lineNumber":205,"sourceCode":"          }\n          p.push(c);\n          (p, b)\n        });\n    let archived_path = archived_path.with_extension(format!(\"{bundle_name}.zip\"));\n\n    log::info!(action = \"Bundling\"; \"{}\", display_path(&archived_path));\n\n    // Create our gzip file\n    create_zip(&source_path, &archived_path).with_context(|| \"Failed to zip update bundle\")?;\n\n    installers_archived_paths.push(archived_path);\n  }\n\n  Ok(installers_archived_paths)\n}\n\npub fn create_zip(src_file: &Path, dst_file: &Path) -> crate::Result<PathBuf> {\n  let parent_dir = dst_file.parent().expect(\"No data in parent\");\n  fs::create_dir_all(parent_dir)?;\n  let writer = fs_utils::create_file(dst_file)?;\n\n  let file_name = src_file\n    .file_name()\n    .expect(\"Can't extract file name from path\");\n\n  let mut zip = zip::ZipWriter::new(writer);\n  let options = SimpleFileOptions::default()\n    .compression_method(zip::CompressionMethod::Stored)\n    .unix_permissions(0o755);\n\n  zip.start_file(file_name.to_string_lossy(), options)?;\n  let mut f =\n    File::open(src_file).fs_context(\"failed to open updater ZIP file\", src_file.to_path_buf())?;\n\n  let mut buffer = Vec::new();\n  f.read_to_end(&mut buffer)?;","sourceCodeStart":187,"sourceCodeEnd":223,"githubUrl":"https://github.com/tauri-apps/tauri/blob/52e4b6e71d8632a7e648f866c442e287ecddee34/crates/tauri-bundler/src/bundle/updater_bundle.rs#L187-L223","documentation":"create_zip creates the parent directory of the updater archive before writing it. parent() returns None only when the destination path is a filesystem root, so this expect is a near-unreachable invariant on the computed updater-artifact output path.","triggerScenarios":"Bundling with updater artifacts (createUpdaterArtifacts) where the computed archive destination resolves to '/' — e.g. custom build tooling that rewrites or relocates bundle output paths to a root. Not produced by normal runs.","commonSituations":"Custom pipelines that override or symlink the target/bundle output layout; pathological out-dir configuration; otherwise effectively unreachable.","solutions":["Re-run tauri build without custom output-path overrides or symlinks over target/","Inspect the logged 'Bundling <path>' line and ensure the updater archive path has a real parent directory","Report upstream with the full config if it reproduces on a stock layout"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"// keep updater artifact destinations on a normal nested path\nif let Some(parent) = archive_dst.parent() {\n  std::fs::create_dir_all(parent)?;\n} else {\n  anyhow::bail!(\"updater archive destination has no parent directory: {}\", archive_dst.display());\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Do not override or symlink bundle output paths to filesystem roots","Keep the stock target/<profile>/bundle layout for updater artifacts"],"tags":["updater","zip","path","invariant","tauri-bundler"],"backgroundTag":"invalid-path","analyzedSha":"52e4b6e71d8632a7e648f866c442e287ecddee34","analyzedAt":"2026-08-20T13:59:20.734Z","schemaVersion":2},"datasetVersion":"2026-08-31T22:30:34.772Z"}