Merge pull request #2142 from hannobraun/automator

Improve error messages and logging in `automator`
This commit is contained in:
Hanno Braun 2023-12-15 13:41:40 +01:00 committed by GitHub
commit 07b3869698
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 30 additions and 5 deletions

2
Cargo.lock generated
View File

@ -267,6 +267,8 @@ dependencies = [
"serde", "serde",
"serde_json", "serde_json",
"tokio", "tokio",
"tracing",
"tracing-subscriber",
"url", "url",
] ]

View File

@ -12,6 +12,7 @@ octocrab = "0.32.0"
semver = "1.0.20" semver = "1.0.20"
serde = "1.0.193" serde = "1.0.193"
serde_json = "1.0.108" serde_json = "1.0.108"
tracing = "0.1.40"
url = "2.5.0" url = "2.5.0"
[dependencies.autolib] [dependencies.autolib]
@ -24,3 +25,7 @@ features = ["derive"]
[dependencies.tokio] [dependencies.tokio]
version = "1.35.0" version = "1.35.0"
features = ["full"] features = ["full"]
[dependencies.tracing-subscriber]
version = "0.3.18"
features = ["env-filter"]

View File

@ -1,5 +1,6 @@
use std::{collections::HashSet, fmt::Write}; use std::{collections::HashSet, fmt::Write};
use anyhow::Context;
use map_macro::hash_set; use map_macro::hash_set;
use octocrab::Octocrab; use octocrab::Octocrab;
use tokio::{fs::File, io::AsyncWriteExt}; use tokio::{fs::File, io::AsyncWriteExt};
@ -17,7 +18,9 @@ pub async fn create_release_announcement(
let date = util::now_ymd(); let date = util::now_ymd();
let pull_requests_since_last_release = let pull_requests_since_last_release =
PullRequestsSinceLastRelease::fetch(octocrab).await?; PullRequestsSinceLastRelease::fetch(octocrab)
.await
.context("Failed to fetch pull requests since last release")?;
let pull_requests = let pull_requests =
pull_requests_since_last_release.pull_requests.into_values(); pull_requests_since_last_release.pull_requests.into_values();
@ -33,12 +36,15 @@ pub async fn create_release_announcement(
let min_dollars = 32; let min_dollars = 32;
let for_readme = false; let for_readme = false;
let sponsors = Sponsors::query(octocrab) let sponsors = Sponsors::query(octocrab)
.await? .await
.as_markdown(min_dollars, for_readme)?; .context("Failed to query sponsors")?
.as_markdown(min_dollars, for_readme)
.context("Failed to convert sponsor data to Markdown")?;
let mut file = util::create_blog_post_file("release", &version).await?; let mut file = util::create_blog_post_file("release", &version).await?;
generate_announcement(date, version, sponsors, pull_requests, &mut file) generate_announcement(date, version, sponsors, pull_requests, &mut file)
.await?; .await
.context("Failed to generate release announcement")?;
Ok(()) Ok(())
} }

View File

@ -2,6 +2,7 @@ use std::env;
use anyhow::Context; use anyhow::Context;
use octocrab::Octocrab; use octocrab::Octocrab;
use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt};
use crate::{ use crate::{
args::{Args, Blog}, args::{Args, Blog},
@ -10,6 +11,11 @@ use crate::{
}; };
pub async fn run() -> anyhow::Result<()> { pub async fn run() -> anyhow::Result<()> {
tracing_subscriber::registry()
.with(tracing_subscriber::fmt::layer())
.with(tracing_subscriber::EnvFilter::from_default_env())
.init();
let token = env::var("GITHUB_TOKEN") let token = env::var("GITHUB_TOKEN")
.context("Loading env variable `GITHUB_TOKEN`")?; .context("Loading env variable `GITHUB_TOKEN`")?;
let octocrab = Octocrab::builder().personal_token(token).build()?; let octocrab = Octocrab::builder().personal_token(token).build()?;

View File

@ -3,6 +3,7 @@ use std::{cmp::Ordering, collections::HashMap, fmt::Write};
use anyhow::Context; use anyhow::Context;
use chrono::{DateTime, Utc}; use chrono::{DateTime, Utc};
use octocrab::Octocrab; use octocrab::Octocrab;
use tracing::debug;
#[derive(Debug)] #[derive(Debug)]
pub struct Sponsors { pub struct Sponsors {
@ -45,11 +46,16 @@ impl Sponsors {
let mut json_object = HashMap::new(); let mut json_object = HashMap::new();
json_object.insert("query", graphql_query); json_object.insert("query", graphql_query);
let response: QueryResult = octocrab let response: serde_json::Value = octocrab
.graphql(&json_object) .graphql(&json_object)
.await .await
.context("GraphQL query failed")?; .context("GraphQL query failed")?;
debug!("Response to GraphQL query for sponsors:\n{response}");
let response: QueryResult = serde_json::from_value(response)
.context("Failed to deserialize GraphQL query result")?;
let mut sponsors = response let mut sponsors = response
.data .data
.viewer .viewer