feat: prepare experiment push package

This commit is contained in:
2026-06-30 00:08:36 +08:00
parent 3c00659691
commit adc1cd5b91
45 changed files with 7858 additions and 65 deletions
+93
View File
@@ -0,0 +1,93 @@
use bat_adapters::official::yostar_jp::{
PatchPlatform, YostarJpResourceEndpoint, YostarJpResourceEndpointKind, YostarJpServerInfo,
};
use std::env;
use std::fs;
fn main() -> anyhow::Result<()> {
let args = env::args().collect::<Vec<_>>();
if args.len() < 2 {
print_usage(&args[0]);
std::process::exit(2);
}
let server_info_path = &args[1];
let connection_group = args.get(2).map(String::as_str).unwrap_or("Prod-Audit");
let app_version = args.get(3).map(String::as_str).unwrap_or("1.70.0");
let platforms = args
.get(4)
.map(|value| parse_platforms(value))
.transpose()
.map_err(anyhow::Error::msg)?
.unwrap_or_else(|| vec![PatchPlatform::Windows, PatchPlatform::Android]);
let data = fs::read(server_info_path)?;
let server_info = YostarJpServerInfo::from_slice(&data)?;
let plan = server_info
.discovery_plan(connection_group, app_version, &platforms)
.map_err(anyhow::Error::msg)?;
println!("connection_group={}", plan.connection_group_name);
println!("app_version={}", plan.app_version);
println!(
"bundle_version={}",
plan.bundle_version.as_deref().unwrap_or("<none>")
);
println!("addressables_root={}", plan.addressables_root);
println!();
for endpoint in &plan.endpoints {
println!(
"{}\t{}\t{}",
endpoint_kind_label(endpoint.kind),
platform_label(endpoint),
endpoint.url
);
}
Ok(())
}
fn print_usage(binary: &str) {
eprintln!(
"usage: {binary} <server-info.json> [connection-group] [app-version] [platforms]\n\
platforms: comma-separated Windows,Android"
);
}
fn parse_platforms(value: &str) -> Result<Vec<PatchPlatform>, String> {
value
.split(',')
.map(str::trim)
.filter(|part| !part.is_empty())
.map(parse_platform)
.collect()
}
fn parse_platform(value: &str) -> Result<PatchPlatform, String> {
match value.to_ascii_lowercase().as_str() {
"windows" | "win" => Ok(PatchPlatform::Windows),
"android" => Ok(PatchPlatform::Android),
_ => Err(format!("unsupported platform: {value}")),
}
}
fn endpoint_kind_label(kind: YostarJpResourceEndpointKind) -> &'static str {
match kind {
YostarJpResourceEndpointKind::TableCatalog => "table_catalog",
YostarJpResourceEndpointKind::TableCatalogHash => "table_catalog_hash",
YostarJpResourceEndpointKind::AddressablesCatalog => "addressables_catalog",
YostarJpResourceEndpointKind::AddressablesCatalogHash => "addressables_catalog_hash",
YostarJpResourceEndpointKind::BundlePackingInfo => "bundle_packing_info",
YostarJpResourceEndpointKind::BundlePackingInfoHash => "bundle_packing_info_hash",
YostarJpResourceEndpointKind::MediaCatalog => "media_catalog",
YostarJpResourceEndpointKind::MediaCatalogHash => "media_catalog_hash",
}
}
fn platform_label(endpoint: &YostarJpResourceEndpoint) -> &'static str {
endpoint
.platform
.map(PatchPlatform::as_str)
.unwrap_or("shared")
}