@@ -8,23 +8,24 @@ use bytesize::ByteSize;
88use color_eyre:: { Result , eyre:: Context } ;
99use eyre:: eyre;
1010use futures:: StreamExt ;
11- use inquire:: { Password , Text } ;
11+ use inquire:: { Password , Select , Text } ;
1212use itertools:: Itertools ;
1313use reqwest:: Url ;
14+ use strum:: VariantArray ;
1415use tokio:: {
1516 fs:: File ,
1617 io:: { AsyncReadExt , AsyncSeekExt , AsyncWriteExt , BufReader } ,
1718} ;
1819
1920use crate :: {
2021 cli:: app:: JobIdOrName ,
21- config:: ComputePlatform ,
22+ config:: { ComputePlatform , Config } ,
2223 cscs:: {
2324 api_client:: { client:: JobStartOptions , types:: JobStatus } ,
2425 handlers:: {
2526 cscs_file_delete, cscs_file_download, cscs_file_list, cscs_file_upload, cscs_job_cancel, cscs_job_details,
2627 cscs_job_list, cscs_job_log, cscs_job_start, cscs_login, cscs_port_forward, cscs_resource_usage,
27- cscs_system_list, cscs_system_set,
28+ cscs_system_list, cscs_system_set, get_available_compute_platforms ,
2829 } ,
2930 } ,
3031} ;
@@ -39,6 +40,31 @@ pub(crate) async fn cli_cscs_login() -> Result<()> {
3940 }
4041 Err ( e) => Err ( e) . wrap_err ( "couldn't get acccess token" ) ?,
4142 } ;
43+
44+ // select compute platform
45+ let mut config = Config :: new ( ) ?;
46+
47+ let source = config. value_source ( "cscs.current_platform" ) ;
48+ if !source. 1 && !source. 2 {
49+ let available_platforms: Vec < _ > = get_available_compute_platforms ( )
50+ . await
51+ . unwrap_or ( <ComputePlatform as VariantArray >:: VARIANTS . to_vec ( ) )
52+ . iter ( )
53+ . map ( |c| c. to_string ( ) )
54+ . collect ( ) ;
55+ let platform = Select :: new ( "Compute Platform:" , available_platforms) . prompt ( ) ?;
56+
57+ config. set ( "cscs.current_platform" , platform, true ) ?;
58+ }
59+
60+ // select cscs account
61+ let source = config. value_source ( "cscs.account" ) ;
62+ if !source. 1 && !source. 2
63+ && let Ok ( Some ( account) ) = Text :: new ( "CSCS Account:" ) . prompt_skippable ( )
64+ && !account. is_empty ( )
65+ {
66+ config. set ( "cscs.account" , account, true ) ?;
67+ }
4268 Ok ( ( ) )
4369}
4470pub ( crate ) async fn cli_cscs_job_list ( system : Option < String > , platform : Option < ComputePlatform > ) -> Result < ( ) > {
0 commit comments