Radish alpha
r
rad:zwTxygwuz5LDGBq255RA2CbNGrz8
Radicle CI broker
Radicle
Git
feat: cibtool trigger --message option
Lars Wirzenius committed 7 months ago
commit 6aced1f715304ea91d583266288983133ab8bb45
parent 5039a08
1 file changed +34 -0
modified src/bin/cibtoolcmd/trigger.rs
@@ -2,6 +2,7 @@ use radicle::{cob::patch::PatchId, git::BranchName, storage::git::Repository};

use radicle_ci_broker::{
    ergo,
+
    msg::RequestBuilder,
    refs::{branch_ref, ref_string},
};

@@ -42,6 +43,12 @@ pub struct TriggerCmd {
    #[clap(long)]
    id_file: Option<PathBuf>,

+
    /// Output a trigger message for a CI adapter, instead of an event
+
    /// that `cib` will turn into a trigger message. Output is always to
+
    /// stdout. There will be one message per line in the output.
+
    #[clap(long)]
+
    message: bool,
+

    /// Output the event to trigger a CI run to the standard output,
    /// instead of adding to the event queue in the database.
    #[clap(long, conflicts_with = "all")]
@@ -115,6 +122,27 @@ impl TriggerCmd {
        let event = CiEvent::branch_updated(nid, repo.id, &branch_name, oid, base)
            .map_err(TriggerError::CiEvent)?;

+
        if self.message {
+
            self.trigger_message(event, r)
+
        } else {
+
            self.trigger_event(event, args)
+
        }
+
    }
+

+
    fn trigger_message(&self, event: CiEvent, r: &ergo::Radicle) -> Result<(), TriggerError> {
+
        let msg = RequestBuilder::default()
+
            .profile(r.profile())
+
            .ci_event(&event)
+
            .build_trigger_from_ci_event()
+
            .map_err(TriggerError::TriggerMessage)?;
+

+
        let json = serde_json::to_string(&msg).map_err(TriggerError::MessageToJson)?;
+
        println!("{json}");
+

+
        Ok(())
+
    }
+

+
    fn trigger_event(&self, event: CiEvent, args: &Args) -> Result<(), TriggerError> {
        if self.stdout {
            let json = event.to_pretty_json().map_err(TriggerError::EventToJson2)?;
            println!("{json}");
@@ -153,6 +181,9 @@ pub enum TriggerError {
    #[error("failed to construct a CI event")]
    CiEvent(#[source] CiEventError),

+
    #[error("failed to convert trigger message to JSON")]
+
    MessageToJson(#[source] serde_json::Error),
+

    #[error(transparent)]
    EventToJson2(#[from] CiEventError),

@@ -167,4 +198,7 @@ pub enum TriggerError {

    #[error("failed to get database")]
    OpenDb(#[source] Box<CibToolError>),
+

+
    #[error("failed to create a trigger message")]
+
    TriggerMessage(#[source] radicle_ci_broker::msg::MessageError),
}