@@ -16,29 +16,36 @@ async fn main() -> Result<()> {
1616 let action = Action :: init ( ) ?;
1717 debug ! ( "Action :: {:?}" , action) ;
1818
19- group ! ( "Setting up Extractor" ) ;
20-
2119 let client = action. octocrab ( ) ?;
2220
21+ group ! ( "Setting up CodeQL" ) ;
22+
2323 let mut codeql = CodeQL :: init ( )
2424 . build ( )
2525 . await
2626 . context ( "Failed to create CodeQL instance" ) ?;
2727
2828 if !codeql. is_installed ( ) . await {
2929 let codeql_version = action. codeql_version ( ) ;
30- log:: info!( "CodeQL not installed, installing {}..." , codeql_version) ;
31- codeql. install ( & client, codeql_version) . await ?;
30+ log:: info!( "CodeQL not installed, installing `{}`..." , codeql_version) ;
31+ codeql
32+ . install ( & client, codeql_version)
33+ . await
34+ . context ( "Failed to install CodeQL" ) ?;
3235 log:: info!( "CodeQL installed" ) ;
3336 } else {
3437 log:: info!( "CodeQL already installed" ) ;
3538 }
39+ // Packs installation
40+ action. install_packs ( & codeql) . await ?;
3641
37- log:: info!( "CodeQL :: {:?}" , codeql) ;
42+ groupend ! ( ) ;
43+ group ! ( "Setting up Extractor" ) ;
3844
3945 // Extractor
40- let extractor_repo = action. extractor_repository ( ) ?;
41- info ! ( "Extractor Repository :: {}" , extractor_repo) ;
46+ let extractor_repo = action
47+ . extractor_repository ( )
48+ . context ( "Failed to get extractor repository" ) ?;
4249
4350 let extractor_path = PathBuf :: from ( "./extractors" ) ;
4451 if !extractor_path. exists ( ) {
@@ -57,9 +64,12 @@ async fn main() -> Result<()> {
5764 . context ( "Failed to fetch extractor" ) ?;
5865 log:: info!( "Extractor :: {:?}" , extractor) ;
5966
60- codeql. append_search_path ( extractor. display ( ) . to_string ( ) ) ;
67+ codeql. append_search_path ( extractor) ;
6168
62- let languages = codeql. get_languages ( ) . await ?;
69+ let languages = codeql
70+ . get_languages ( )
71+ . await
72+ . context ( "Failed to get languages" ) ?;
6373 log:: info!( "Languages :: {:#?}" , languages) ;
6474
6575 if !action. languages ( ) . is_empty ( ) {
@@ -73,12 +83,14 @@ async fn main() -> Result<()> {
7383 log:: info!( "No languages provided, using all available languages" ) ;
7484 }
7585
86+ log:: info!( "CodeQL :: {:?}" , codeql) ;
87+
7688 groupend ! ( ) ;
7789
7890 let databases = PathBuf :: from ( "./.codeql" ) ;
7991 let sarif_output = databases. join ( "results" ) ;
8092
81- std:: fs:: create_dir_all ( & sarif_output) ?;
93+ std:: fs:: create_dir_all ( & sarif_output) . context ( "Failed to create results directory" ) ?;
8294
8395 for language in action. languages ( ) {
8496 let group = format ! ( "Running {} extractor" , language. language( ) ) ;
@@ -94,29 +106,45 @@ async fn main() -> Result<()> {
94106 . source ( "." . to_string ( ) )
95107 . path ( database_path. display ( ) . to_string ( ) )
96108 . language ( language. language ( ) )
97- . build ( ) ?;
109+ . build ( )
110+ . context ( "Failed to create database" ) ?;
98111
99112 log:: info!( "Creating database..." ) ;
100- codeql. database ( & database) . overwrite ( ) . create ( ) . await ?;
113+ codeql
114+ . database ( & database)
115+ . overwrite ( )
116+ . create ( )
117+ . await
118+ . context ( "Failed to create database" ) ?;
101119 log:: info!( "Created database :: {:?}" , database) ;
102120
121+ // TODO: Queries
103122 let queries = CodeQLQueries :: from ( format ! (
104123 "{}/{}-queries" ,
105124 extractor_repo. owner. clone( ) ,
106125 language. language( )
107126 ) ) ;
108- log:: debug !( "Queries :: {:?}" , queries) ;
127+ log:: info !( "Queries :: {:?}" , queries) ;
109128
110129 log:: info!( "Running analysis..." ) ;
111- if let Err ( err ) = codeql
130+ match codeql
112131 . database ( & database)
113132 . queries ( queries)
114133 . output ( sarif_path)
115134 . analyze ( )
116135 . await
117136 {
118- log:: error!( "Failed to analyze database: {:?}" , err) ;
137+ Ok ( _) => {
138+ log:: info!( "Analysis complete" ) ;
139+ }
140+ Err ( ghastoolkit:: GHASError :: SerdeError ( e) ) => {
141+ log:: warn!( "Failed to parse SARIF: {:?}" , e) ;
142+ }
143+ Err ( e) => {
144+ log:: error!( "Failed to analyze database: {:?}" , e) ;
145+ }
119146 }
147+
120148 log:: info!( "Analysis complete :: {:?}" , database) ;
121149 groupend ! ( ) ;
122150 }
0 commit comments