1+ import  json 
2+ import  os 
3+ import  glob 
4+ import  pprint 
5+ import  subprocess 
6+ import  sys 
7+ 
8+ esrp_tool  =  os .path .join ("esrp" , "tools" , "EsrpClient.exe" )
9+ 
10+ AAD_ID   =  "38aa33bc-a7e7-4007-bfb2-e8b17f04aadc" 
11+ WORKSPACE  =  os .environ ['GITHUB_WORKSPACE' ].strip ()
12+ ARTIFACTS_DIR  =  os .environ ['ARTIFACTS_DIR' ].strip ()
13+ 
14+ def  main ():
15+     source_root_location  =  os .path .join (WORKSPACE , ARTIFACTS_DIR , "unsigned" )
16+     destination_location  =  os .path .join (WORKSPACE , ARTIFACTS_DIR )
17+ 
18+     files  =  glob .glob (os .path .join (source_root_location , "*.deb" ))
19+ 
20+     print ("Found files:" )
21+     pprint .pp (files )
22+ 
23+     if  len (files ) <  1  or  not  files [0 ].endswith (".deb" ):
24+         print ("Error: cannot find .deb to sign" )
25+         exit (1 )
26+ 
27+     file_to_sign  =  os .path .basename (files [0 ])
28+ 
29+     auth_json  =  {
30+         "Version" : "1.0.0" ,
31+         "AuthenticationType" : "AAD_CERT" ,
32+         "TenantId" : "72f988bf-86f1-41af-91ab-2d7cd011db47" ,
33+         "ClientId" : AAD_ID ,
34+         "AuthCert" : {
35+             "SubjectName" : f"CN={ AAD_ID }  ,
36+             "StoreLocation" : "LocalMachine" ,
37+             "StoreName" : "My" ,
38+         },
39+         "RequestSigningCert" : {
40+             "SubjectName" : f"CN={ AAD_ID }  ,
41+             "StoreLocation" : "LocalMachine" ,
42+             "StoreName" : "My" ,
43+         }
44+     }
45+ 
46+     input_json  =  {
47+         "Version" : "1.0.0" ,
48+         "SignBatches" : [
49+             {
50+                 "SourceLocationType" : "UNC" ,
51+                 "SourceRootDirectory" : source_root_location ,
52+                 "DestinationLocationType" : "UNC" ,
53+                 "DestinationRootDirectory" : destination_location ,
54+                 "SignRequestFiles" : [
55+                     {
56+                         "CustomerCorrelationId" : "01A7F55F-6CDD-4123-B255-77E6F212CDAD" ,
57+                         "SourceLocation" : file_to_sign ,
58+                         "DestinationLocation" : os .path .join ("signed" , file_to_sign ),
59+                     }
60+                 ],
61+                 "SigningInfo" : {
62+                     "Operations" : [
63+                         {
64+                             "KeyCode" : "CP-450779-Pgp" ,
65+                             "OperationCode" : "LinuxSign" ,
66+                             "Parameters" : {},
67+                             "ToolName" : "sign" ,
68+                             "ToolVersion" : "1.0" ,
69+                         }
70+                     ]
71+                 }
72+             }
73+         ]
74+     }
75+ 
76+     policy_json  =  {
77+         "Version" : "1.0.0" ,
78+         "Intent" : "production release" ,
79+         "ContentType" : "Debian package" ,
80+     }
81+ 
82+     configs  =  [
83+         ("auth.json" , auth_json ),
84+         ("input.json" , input_json ),
85+         ("policy.json" , policy_json ),
86+     ]
87+ 
88+     for  filename , data  in  configs :
89+         with  open (filename , 'w' ) as  fp :
90+             json .dump (data , fp )
91+ 
92+     # Run ESRP Client 
93+     esrp_out  =  "esrp_out.json" 
94+     result  =  subprocess .run (
95+         [esrp_tool , "sign" ,
96+         "-a" , "auth.json" ,
97+         "-i" , "input.json" ,
98+         "-p" , "policy.json" ,
99+         "-o" , esrp_out ,
100+         "-l" , "Verbose" ],
101+         cwd = WORKSPACE )
102+ 
103+     if  result .returncode  !=  0 :
104+         print ("Failed to run ESRPClient.exe" )
105+         sys .exit (1 )
106+ 
107+     if  os .path .isfile (esrp_out ):
108+         print ("ESRP output json:" )
109+         with  open (esrp_out , 'r' ) as  fp :
110+             pprint .pp (json .load (fp ))
111+ 
112+     signed_file  =  os .path .join (destination_location , "signed" , file_to_sign )
113+     if  os .path .isfile (signed_file ):
114+         print (f"Success!\n Signed { signed_file }  )
115+ 
116+ if  __name__  ==  "__main__" :
117+     main ()
0 commit comments