1
1
use std:: env;
2
2
use std:: path:: { Path , PathBuf } ;
3
3
4
- use anyhow:: { anyhow , ensure , Result } ;
5
- use clap:: Parser ;
4
+ use anyhow:: { Result , anyhow , ensure } ;
5
+ use clap:: { Parser , arg } ;
6
6
use walkdir:: WalkDir ;
7
- use xshell:: { cmd , Shell } ;
7
+ use xshell:: { Shell , cmd } ;
8
8
9
9
#[ derive( Parser ) ]
10
10
pub struct Args {
11
11
#[ arg( short, long, env = "SCARB_ARCHIVE" ) ]
12
12
archive : PathBuf ,
13
13
#[ arg( short, long, env = "EXPECTED_VERSION" ) ]
14
14
expected_version : String ,
15
+ // Ensure Scarb has been compiled with all optional components.
16
+ #[ arg( long) ]
17
+ full : bool ,
15
18
}
16
19
17
20
pub fn main ( args : Args ) -> Result < ( ) > {
@@ -20,7 +23,13 @@ pub fn main(args: Args) -> Result<()> {
20
23
let expected_version = args. expected_version . trim_start_matches ( 'v' ) ;
21
24
22
25
let install_dir = sh. create_temp_dir ( ) ?;
23
- if args. archive . file_name ( ) . unwrap ( ) . to_string_lossy ( ) . ends_with ( ".tar.gz" ) {
26
+ if args
27
+ . archive
28
+ . file_name ( )
29
+ . unwrap ( )
30
+ . to_string_lossy ( )
31
+ . ends_with ( ".tar.gz" )
32
+ {
24
33
let archive = & args. archive ;
25
34
let install_dir = install_dir. path ( ) ;
26
35
cmd ! ( sh, "tar -zxvf {archive} -C {install_dir}" ) . run ( ) ?;
@@ -47,6 +56,16 @@ pub fn main(args: Args) -> Result<()> {
47
56
sh. change_dir ( workdir. path ( ) . join ( "smoke_test" ) ) ;
48
57
cmd ! ( sh, "{scarb} build" ) . run ( ) ?;
49
58
cmd ! ( sh, "{scarb} test" ) . run ( ) ?;
59
+ if args. full {
60
+ cmd ! ( sh, "{scarb} lint" ) . run ( ) ?;
61
+ cmd ! (
62
+ sh,
63
+ "{scarb} commands | jq -e 'has(\" cairo-language-server\" )'"
64
+ )
65
+ . run ( ) ?;
66
+ cmd ! ( sh, "{scarb} commands | jq -e 'has(\" verify\" )'" ) . run ( ) ?;
67
+ cmd ! ( sh, "{scarb} commands | jq -e 'has(\" prove\" )'" ) . run ( ) ?;
68
+ }
50
69
51
70
Ok ( ( ) )
52
71
}
0 commit comments