@@ -3,7 +3,7 @@ use comfy_table::{
33 presets:: { NOTHING , UTF8_FULL } ,
44 ContentArrangement , Table ,
55} ;
6- use snafu:: { ResultExt , Snafu } ;
6+ use snafu:: { OptionExt , ResultExt , Snafu } ;
77use stackable_operator:: kvp:: { LabelError , Labels } ;
88use tracing:: { debug, info, instrument} ;
99
@@ -30,6 +30,10 @@ use crate::{
3030pub struct StackArgs {
3131 #[ command( subcommand) ]
3232 subcommand : StackCommands ,
33+
34+ /// Target a specific Stackable release
35+ #[ arg( long, global = true ) ]
36+ release : Option < String > ,
3337}
3438
3539#[ derive( Debug , Subcommand ) ]
@@ -116,6 +120,9 @@ pub enum CmdError {
116120 #[ snafu( display( "failed to serialize JSON output" ) ) ]
117121 SerializeJsonOutput { source : serde_json:: Error } ,
118122
123+ #[ snafu( display( "empty release list" ) ) ]
124+ EmptyReleaseList ,
125+
119126 #[ snafu( display( "failed to build stack/release list" ) ) ]
120127 BuildList { source : list:: Error } ,
121128
@@ -140,7 +147,34 @@ impl StackArgs {
140147 debug ! ( "Handle stack args" ) ;
141148
142149 let transfer_client = xfer:: Client :: new_with ( cache) ;
143- let files = cli. get_stack_files ( ) . context ( PathOrUrlParseSnafu ) ?;
150+
151+ let release_files = cli. get_release_files ( ) . context ( PathOrUrlParseSnafu ) ?;
152+ let release_list = release:: ReleaseList :: build ( & release_files, & transfer_client)
153+ . await
154+ . context ( BuildListSnafu ) ?;
155+
156+ let release_branch = match & self . release {
157+ Some ( release) => {
158+ if release == "dev" {
159+ "main" . to_string ( )
160+ } else {
161+ format ! ( "release-{release}" )
162+ }
163+ }
164+ None => {
165+ let release = release_list
166+ . inner ( )
167+ . first ( )
168+ . context ( EmptyReleaseListSnafu ) ?
169+ . 0 ;
170+
171+ format ! ( "release-{release}" )
172+ }
173+ } ;
174+
175+ let files = cli
176+ . get_stack_files ( & release_branch)
177+ . context ( PathOrUrlParseSnafu ) ?;
144178 let stack_list = stack:: StackList :: build ( & files, & transfer_client)
145179 . await
146180 . context ( BuildListSnafu ) ?;
0 commit comments