posthog_cli/proguard/
upload.rs1use std::path::PathBuf;
2
3use anyhow::{anyhow, Result};
4
5use crate::{
6 api::{self, releases::ReleaseBuilder, symbol_sets::SymbolSetUpload},
7 proguard::ProguardFile,
8 utils::git::get_git_info,
9};
10
11#[derive(clap::Args, Clone)]
12pub struct Args {
13 #[arg(short, long)]
15 pub path: PathBuf,
16
17 #[arg(short, long)]
20 pub map_id: String,
21
22 #[arg(long)]
26 pub project: Option<String>,
27
28 #[arg(long)]
32 pub version: Option<String>,
33}
34
35pub fn upload(args: &Args) -> Result<()> {
36 let Args {
37 path,
38 map_id,
39 project,
40 version,
41 } = args;
42
43 let path = path
44 .canonicalize()
45 .map_err(|e| anyhow!("Path {} canonicalization failed: {}", path.display(), e))?;
46 let directory = path
47 .parent()
48 .ok_or_else(|| anyhow!("Could not get path parent"))?;
49
50 let mut release_builder = get_git_info(Some(directory.to_path_buf()))?
51 .map(ReleaseBuilder::init_from_git)
52 .unwrap_or_default();
53
54 if let Some(project) = project {
55 release_builder.with_project(project);
56 }
57 if let Some(version) = version {
58 release_builder.with_version(version);
59 }
60
61 let mut file = ProguardFile::new(&path, map_id.clone())?;
62
63 let release = release_builder
64 .can_create()
65 .then(|| release_builder.fetch_or_create())
66 .transpose()?;
67
68 file.release_id = release.map(|r| r.id.to_string());
69
70 let to_upload: SymbolSetUpload = file.try_into()?;
71
72 api::symbol_sets::upload(&[to_upload], 50)?;
73
74 Ok(())
75}