55
66from codeqlsummarize .models import CodeQLDatabase , GitHub
77from codeqlsummarize .generator import QUERIES
8+ from codeqlsummarize .utils import findCodeQLCli
89
910logger = logging .getLogger ("codeqlsummarize.exporters" )
1011
1920"""
2021
2122CODEQL_CUSTOMIZATION = """\
22- private class {name}{type}Custom extends {models} {{
23+ private class {name}{type}Custom extends {models}Csv {{
2324 override predicate row(string row) {{
2425 row = [
2526{rows}
@@ -33,7 +34,7 @@ def saveQLL(
3334 database : CodeQLDatabase , output_customizations : str , github : GitHub , ** kargs
3435):
3536 padding = " " * 6
36- owner = github .owner .replace ("-" , "_" )
37+ owner = github .owner .replace ("-" , "_" ). lower ()
3738
3839 models = {}
3940 # initially populate data
@@ -47,7 +48,7 @@ def saveQLL(
4748 if len (summary .rows ) == 0 :
4849 models [sname ] = f"// No { sname } found\n "
4950 continue
50- for mad in summary .rows :
51+ for mad in sorted ( summary .rows ) :
5152 rows += f'{ padding } "{ mad } "'
5253
5354 if len (summary .rows ) > counter :
@@ -118,35 +119,37 @@ def exportCustomizations(
118119def exportBundle (database : CodeQLDatabase , output : str , github : GitHub , ** kargs ):
119120 logger .debug (f"Output directory :: { output } " )
120121
121- owner = github .owner .replace ("-" , "_" )
122+ owner = github .owner .replace ("-" , "_" ). lower ()
122123
123124 if not github or not github .owner :
124125 raise Exception ("Failed to export Bundle: No owner / repo name set" )
125126
127+ codeql_pack_path = f"{ database .language } -summarize"
128+ codeql_pack_name = f"{ owner } /{ codeql_pack_path } "
129+
126130 # Create root for language
127- root = os .path .join (output , database .language , owner )
128- os .makedirs (root , exist_ok = True )
129- logger .debug (f"Root for language :: { root } " )
130-
131- # Create language files
132- codeql_lang_lock = os .path .join (root , "codeql-pack.lock.yml" )
133- if not os .path .exists (codeql_lang_lock ):
134- logger .debug (f"Creating Language Lock file :: { codeql_lang_lock } " )
135- with open (codeql_lang_lock , "w" ) as handle :
136- handle .write (CODEQL_LOCK .format (language = database .language ))
137-
138- codeql_lang_pack = os .path .join (root , "qlpack.yml" )
139- if not os .path .exists (codeql_lang_pack ):
140- logger .debug (f"Creating Language Pack file :: { codeql_lang_pack } " )
141- with open (codeql_lang_pack , "w" ) as handle :
142- handle .write (
143- CODEQL_PACK .format (
144- owner = owner , version = "0.1.0" , language = database .language
145- )
146- )
131+ root = os .path .join (output , codeql_pack_path )
132+
133+ codeql = findCodeQLCli ()
134+
135+ if not os .path .exists (root ) and codeql :
136+ logger .info ("Generating CodeQL Summarize Pack" )
137+ codeql ("pack" , "init" , "--version=0.0.1" , "--extractor" , database .language , codeql_pack_path , cwd = output )
138+
139+ if not os .path .exists (os .path .join (root , "qlpack.yml" )):
140+ raise Exception ("Pack wasn't found" )
141+
142+ # Create README
143+ readme = os .path .join (root , "README.md" )
144+ if not os .path .exists (readme ):
145+ with open (readme , "w" ) as handle :
146+ handle .write ("# CodeQL Summarize Pack\n " )
147+
148+ logger .debug (f"Root Pack Path :: { root } " )
147149
148150 # Create language subfolder (if needed)
149- sub = os .path .join (root , owner , database .language )
151+ sub = os .path .join (root , owner , codeql_pack_path .replace ("-" , "_" ))
152+ logger .debug (f"Checking sub pack path exists: { sub } " )
150153 os .makedirs (sub , exist_ok = True )
151154
152155 name = database .display_name (owner = owner ) + "Generated"
@@ -157,13 +160,20 @@ def exportBundle(database: CodeQLDatabase, output: str, github: GitHub, **kargs)
157160 # Dynamically update Customizations.qll
158161 customizations_path = os .path .join (sub , "Customizations.qll" )
159162 customizations_data = ""
160- for custom in os .listdir (sub ):
163+
164+ codeql_files = os .listdir (sub )
165+ if not codeql_files :
166+ logger .error (f"This is a major issue and please report in the GitHub issues" )
167+ raise Exception ("Something is really wrong here..." )
168+
169+ for custom in codeql_files :
161170 if custom == "Customizations.qll" :
162171 continue
163172
164173 custom = custom .replace (".qll" , "" )
165174
166- impt = f" private import { owner } .{ database .language } .{ custom } \n "
175+ impt = f" private import { owner } .{ database .language } _summarize.{ custom } \n "
176+
167177 customizations_data += impt
168178
169179 with open (customizations_path , "w" ) as handle :
0 commit comments