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