use anyhow::Result;
pub async fn resolve_token(flag_token: Option<String>) -> Option<String> {
if let Some(t) = flag_token
&& !t.is_empty()
{
return Some(t);
}
if let Ok(t) = std::env::var("GH_TOKEN")
&& !t.is_empty()
{
return Some(t);
}
if let Ok(output) = gh_auth_token().await
&& !output.is_empty()
{
return Some(output);
}
None
}
async fn gh_auth_token() -> Result<String> {
let output = tokio::process::Command::new("gh")
.args(["auth", "token"])
.output()
.await?;
if output.status.success() {
Ok(String::from_utf8(output.stdout)?.trim().to_string())
} else {
anyhow::bail!("gh auth token failed")
}
}