Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add conclusion, completed_at and output fields to create check api #467

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion examples/github_app_authentication.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
use octocrab::models::InstallationRepositories;
XAMPPRocky marked this conversation as resolved.
Show resolved Hide resolved
use octocrab::Octocrab;

#[tokio::main]
Expand Down
54 changes: 37 additions & 17 deletions src/api/checks.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
use crate::models::{CheckRunId, CheckSuiteId};
use crate::params::checks::{CheckRunConclusion, CheckRunOutput, CheckRunStatus};
use crate::params::repos::Commitish;
use crate::{models, Octocrab, Result};
use chrono::{DateTime, Utc};
Expand All @@ -12,14 +13,6 @@ pub struct ChecksHandler<'octo> {
repo: String,
}

#[derive(serde::Serialize)]
#[serde(rename_all = "snake_case")]
pub enum CheckRunStatus {
Queued,
InProgress,
Completed,
}

#[derive(serde::Serialize)]
pub struct CreateCheckRunBuilder<'octo, 'r> {
#[serde(skip)]
Expand All @@ -32,6 +25,12 @@ pub struct CreateCheckRunBuilder<'octo, 'r> {
external_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
status: Option<CheckRunStatus>,
#[serde(skip_serializing_if = "Option::is_none")]
conclusion: Option<CheckRunConclusion>,
#[serde(skip_serializing_if = "Option::is_none")]
completed_at: Option<DateTime<Utc>>,
#[serde(skip_serializing_if = "Option::is_none")]
output: Option<CheckRunOutput>,
}

impl<'octo, 'r> CreateCheckRunBuilder<'octo, 'r> {
Expand All @@ -43,6 +42,9 @@ impl<'octo, 'r> CreateCheckRunBuilder<'octo, 'r> {
details_url: None,
external_id: None,
status: None,
conclusion: None,
completed_at: None,
output: None,
}
}

Expand All @@ -66,6 +68,26 @@ impl<'octo, 'r> CreateCheckRunBuilder<'octo, 'r> {
self
}

/// The final conclusion of the check.
pub fn conclusion(mut self, conclusion: CheckRunConclusion) -> Self {
self.conclusion = Some(conclusion);
self
}

/// The time that the check run completed.
pub fn completed_at(mut self, completed_at: DateTime<Utc>) -> Self {
self.completed_at = Some(completed_at);
self
}

/// Check runs can accept a variety of data in the output object,
/// including a title and summary and can optionally provide
/// descriptive details about the run.
pub fn output(mut self, output: CheckRunOutput) -> Self {
self.output = Some(output);
self
}

/// Sends the actual request.
pub async fn send(self) -> Result<models::checks::CheckRun> {
let route = format!(
Expand Down Expand Up @@ -93,11 +115,11 @@ pub struct UpdateCheckRunBuilder<'octo, 'r> {
#[serde(skip_serializing_if = "Option::is_none")]
status: Option<CheckRunStatus>,
#[serde(skip_serializing_if = "Option::is_none")]
conclusion: Option<String>,
conclusion: Option<CheckRunConclusion>,
#[serde(skip_serializing_if = "Option::is_none")]
completed_at: Option<DateTime<Utc>>,
#[serde(skip_serializing_if = "Option::is_none")]
output: Option<serde_json::Value>,
output: Option<CheckRunOutput>,
}

impl<'octo, 'r> UpdateCheckRunBuilder<'octo, 'r> {
Expand Down Expand Up @@ -149,10 +171,8 @@ impl<'octo, 'r> UpdateCheckRunBuilder<'octo, 'r> {
}

/// The final conclusion of the check.
/// Can be one of `success`, `failure`, `neutral`, `cancelled`, `timed_out`,
/// `skipped`, `stale` or `action_required`.
pub fn conclusion(mut self, conclusion: impl Into<String>) -> Self {
self.conclusion = Some(conclusion.into());
pub fn conclusion(mut self, conclusion: CheckRunConclusion) -> Self {
self.conclusion = Some(conclusion);
self
}

Expand All @@ -165,7 +185,7 @@ impl<'octo, 'r> UpdateCheckRunBuilder<'octo, 'r> {
/// Check runs can accept a variety of data in the output object,
/// including a title and summary and can optionally provide
/// descriptive details about the run.
pub fn output(mut self, output: serde_json::Value) -> Self {
pub fn output(mut self, output: CheckRunOutput) -> Self {
self.output = Some(output);
self
}
Expand Down Expand Up @@ -321,7 +341,7 @@ impl<'octo> ChecksHandler<'octo> {
/// .create_check_run("name", "head_sha")
/// .details_url("https://example.com")
/// .external_id("external_id")
/// .status(octocrab::checks::CheckRunStatus::InProgress)
/// .status(octocrab::params::checks::CheckRunStatus::InProgress)
/// .send()
/// .await?;
/// # Ok(())
Expand All @@ -343,7 +363,7 @@ impl<'octo> ChecksHandler<'octo> {
/// .name("name")
/// .details_url("https://example.com")
/// .external_url("external_id")
/// .status(octocrab::checks::CheckRunStatus::InProgress)
/// .status(octocrab::params::checks::CheckRunStatus::InProgress)
/// .send()
/// .await?;
/// # Ok(())
Expand Down
70 changes: 70 additions & 0 deletions src/params.rs
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,76 @@ pub mod apps {
}
}

pub mod checks {
//! Parameter types for the checks API.

#[derive(Debug, Clone, Copy, serde::Serialize)]
#[serde(rename_all = "snake_case")]
pub enum CheckRunStatus {
Queued,
InProgress,
Completed,
}

#[derive(Debug, Clone, Copy, serde::Serialize)]
#[serde(rename_all = "snake_case")]
pub enum CheckRunConclusion {
Success,
Failure,
Neutral,
Cancelled,
TimedOut,
Skipped,
Stale,
ActionRequired,
}

#[derive(serde::Serialize)]
pub struct CheckRunOutput {
pub title: String,
pub summary: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub text: Option<String>,
#[serde(skip_serializing_if = "Vec::is_empty")]
pub annotations: Vec<CheckRunOutputAnnotation>,
#[serde(skip_serializing_if = "Vec::is_empty")]
pub images: Vec<CheckRunOutputImage>,
}

#[derive(serde::Serialize)]
pub struct CheckRunOutputAnnotation {
pub path: String,
pub start_line: u32,
pub end_line: u32,
#[serde(skip_serializing_if = "Option::is_none")]
pub start_column: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub end_column: Option<u32>,
pub annotation_level: CheckRunOutputAnnotationLevel,
pub message: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub title: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub raw_details: Option<String>,
}

#[derive(Debug, Clone, Copy, serde::Serialize)]
#[serde(rename_all = "snake_case")]
pub enum CheckRunOutputAnnotationLevel {
Notice,
Warning,
Failure,
}

#[derive(serde::Serialize)]
pub struct CheckRunOutputImage {
pub image_url: String,
pub alt: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub caption: Option<String>,
}
}

pub mod issues {
//! Parameter types for the issues API.

Expand Down