@@ -9,8 +9,9 @@ use glob::Pattern;
99use nom:: AsBytes ;
1010use rebuilderd_common:: api:: Client ;
1111use rebuilderd_common:: api:: v1:: {
12- ArtifactStatus , BinaryPackage , BuildRestApi , IdentityFilter , OriginFilter , PackageReport ,
13- PackageRestApi , Page , Priority , QueueJobRequest , QueueRestApi , Worker , WorkerRestApi ,
12+ ArtifactStatus , BinaryPackage , BuildRestApi , CreateTagRequest , CreateTagRuleRequest ,
13+ IdentityFilter , OriginFilter , PackageReport , PackageRestApi , Page , Priority , QueueJobRequest ,
14+ QueueRestApi , TagRestApi , Worker , WorkerRestApi ,
1415} ;
1516use rebuilderd_common:: errors:: * ;
1617use rebuilderd_common:: http;
@@ -559,6 +560,81 @@ async fn main() -> Result<()> {
559560 writeln ! ( io:: stderr( ) , "Worker {} not found" , tag_target. name. green( ) ) ?;
560561 }
561562 }
563+ SubCommand :: Tag ( TagCommand :: List ) => {
564+ let tags = client. get_tags ( ) . await ?;
565+ writeln ! ( io:: stdout( ) , "{}" , tags. join( "\n " ) . cyan( ) ) ?;
566+ }
567+ SubCommand :: Tag ( TagCommand :: Create ( tag_target) ) => {
568+ let authenticated_client = client. with_auth_cookie ( ) ?;
569+
570+ authenticated_client
571+ . create_tag ( CreateTagRequest {
572+ tag : tag_target. tag . clone ( ) ,
573+ } )
574+ . await ?;
575+
576+ writeln ! ( io:: stdout( ) , "Tag {} created" , tag_target. tag. cyan( ) ) ?;
577+ }
578+ SubCommand :: Tag ( TagCommand :: Delete ( tag_target) ) => {
579+ let authenticated_client = client. with_auth_cookie ( ) ?;
580+
581+ authenticated_client
582+ . delete_tag ( tag_target. tag . clone ( ) )
583+ . await ?;
584+
585+ writeln ! ( io:: stdout( ) , "Tag {} deleted" , tag_target. tag. cyan( ) ) ?;
586+ }
587+ SubCommand :: Tag ( TagCommand :: Rule ( TagRuleCommand :: List ( tag_target) ) ) => {
588+ writeln ! ( io:: stdout( ) , "ID\t Tag\t Name pattern\t Version pattern" , ) ?;
589+
590+ let tags = if let Some ( tag) = tag_target. tag {
591+ vec ! [ tag]
592+ } else {
593+ client. get_tags ( ) . await ?
594+ } ;
595+
596+ for tag in tags {
597+ let tag_rules = client. get_tag_rules ( tag. clone ( ) ) . await ?;
598+ for tag_rule in tag_rules {
599+ writeln ! (
600+ io:: stdout( ) ,
601+ "{}\t {}\t {}\t {}" ,
602+ tag_rule. id. to_string( ) . yellow( ) ,
603+ tag. cyan( ) ,
604+ tag_rule. name_pattern. green( ) ,
605+ tag_rule. version_pattern. unwrap_or( "" . to_string( ) ) . magenta( )
606+ ) ?;
607+ }
608+ }
609+ }
610+ SubCommand :: Tag ( TagCommand :: Rule ( TagRuleCommand :: Create ( create_tag) ) ) => {
611+ let authenticated_client = client. with_auth_cookie ( ) ?;
612+
613+ let tag_rule = authenticated_client
614+ . create_tag_rule (
615+ create_tag. tag ,
616+ CreateTagRuleRequest {
617+ name_pattern : create_tag. name_pattern ,
618+ version_pattern : create_tag. version_pattern ,
619+ } ,
620+ )
621+ . await ?;
622+
623+ writeln ! (
624+ io:: stdout( ) ,
625+ "Rule created (ID {})" ,
626+ tag_rule. id. to_string( ) . yellow( )
627+ ) ?;
628+ }
629+ SubCommand :: Tag ( TagCommand :: Rule ( TagRuleCommand :: Delete ( tag_rule_target) ) ) => {
630+ let authenticated_client = client. with_auth_cookie ( ) ?;
631+
632+ authenticated_client
633+ . delete_tag_rule ( tag_rule_target. tag , tag_rule_target. rule_id )
634+ . await ?;
635+
636+ writeln ! ( io:: stdout( ) , "Rule deleted" ) ?;
637+ }
562638 SubCommand :: Completions ( completions) => args:: gen_completions ( & completions) ?,
563639 }
564640
0 commit comments