@@ -164,6 +164,8 @@ async function main(): Promise<void> {
164164 }
165165
166166 const signalCleanup = createSingleFlightSignalCleanup ( async ( signal ) => {
167+ const cleanupProcessGroupIds = getActiveManagedProcessGroupIds ( )
168+ setManagedProcessGroupObserver ( null )
167169 failed = true
168170 const exitCode = signal === 'SIGINT' ? 130 : 143
169171 process . exitCode = exitCode
@@ -197,7 +199,7 @@ async function main(): Promise<void> {
197199 E2E_PG_ADMIN_URL : adminDatabaseUrl ,
198200 E2E_DATABASE_NAME : runDatabase . name ,
199201 E2E_DATABASE_CREATION_COMPLETE : String ( databaseCreationComplete ) ,
200- E2E_CLEANUP_PROCESS_GROUPS : getActiveManagedProcessGroupIds ( ) . join ( ',' ) ,
202+ E2E_CLEANUP_PROCESS_GROUPS : cleanupProcessGroupIds . join ( ',' ) ,
201203 E2E_CLEANUP_DIRECTORIES : JSON . stringify ( [
202204 storageStateDirectory ,
203205 privateDirectory ,
@@ -368,79 +370,80 @@ async function main(): Promise<void> {
368370 console . error ( error )
369371 process . exitCode = 1
370372 } finally {
371- if ( runDatabase && existsSync ( manifestPath ) ) {
373+ if ( signalCleanup . claimNormalFinalization ( ) ) {
374+ process . off ( 'SIGINT' , handleSigint )
375+ process . off ( 'SIGTERM' , handleSigterm )
376+
377+ if ( runDatabase && existsSync ( manifestPath ) ) {
378+ try {
379+ await assertManifestWorkspaceIdentities ( runDatabase . url , manifestPath )
380+ } catch ( error ) {
381+ failed = true
382+ process . exitCode = 1
383+ console . error ( error )
384+ }
385+ }
372386 try {
373- await assertManifestWorkspaceIdentities ( runDatabase . url , manifestPath )
387+ leakCanarySecrets = loadSyntheticSecretCanaryForScan ( leakCanarySecrets , canarySecretsPath )
374388 } catch ( error ) {
389+ canaryCoverageComplete = false
375390 failed = true
376391 process . exitCode = 1
377392 console . error ( error )
393+ } finally {
394+ rmSync ( credentialsPath , { force : true } )
395+ rmSync ( canarySecretsPath , { force : true } )
378396 }
379- }
380- try {
381- leakCanarySecrets = loadSyntheticSecretCanaryForScan ( leakCanarySecrets , canarySecretsPath )
382- } catch ( error ) {
383- canaryCoverageComplete = false
384- failed = true
385- process . exitCode = 1
386- console . error ( error )
387- } finally {
388- rmSync ( credentialsPath , { force : true } )
389- rmSync ( canarySecretsPath , { force : true } )
390- }
391- let cleanupSucceeded = false
392- try {
393- await cleanup ( )
394- cleanupSucceeded = true
395- } catch ( error ) {
396- failed = true
397- process . exitCode = 1
398- console . error ( error )
399- }
400- try {
401- assertNoForbiddenProviderTraffic (
402- [ app ?. logPath , realtime ?. logPath ] . filter ( ( value ) : value is string => Boolean ( value ) )
403- )
404- } catch ( error ) {
405- failed = true
406- process . exitCode = 1
407- console . error ( error )
408- }
409- if ( canaryCoverageComplete && leakCanarySecrets . length > 0 ) {
397+ let cleanupSucceeded = false
410398 try {
411- await assertNoSyntheticSecretLeaks ( {
412- secrets : leakCanarySecrets ,
413- roots : diagnosticRoots ,
414- excludedPaths : [ privateDirectory , storageStateDirectory ] ,
415- } )
416- writeFileSync (
417- path . join ( markerDirectory , 'leak-scan-complete.json' ) ,
418- `${ JSON . stringify ( { runId, completedAt : new Date ( ) . toISOString ( ) } ) } \n` ,
419- { mode : 0o600 }
399+ await cleanup ( )
400+ cleanupSucceeded = true
401+ } catch ( error ) {
402+ failed = true
403+ process . exitCode = 1
404+ console . error ( error )
405+ }
406+ try {
407+ assertNoForbiddenProviderTraffic (
408+ [ app ?. logPath , realtime ?. logPath ] . filter ( ( value ) : value is string => Boolean ( value ) )
420409 )
421410 } catch ( error ) {
422411 failed = true
423412 process . exitCode = 1
424413 console . error ( error )
414+ }
415+ if ( canaryCoverageComplete && leakCanarySecrets . length > 0 ) {
416+ try {
417+ await assertNoSyntheticSecretLeaks ( {
418+ secrets : leakCanarySecrets ,
419+ roots : diagnosticRoots ,
420+ excludedPaths : [ privateDirectory , storageStateDirectory ] ,
421+ } )
422+ writeFileSync (
423+ path . join ( markerDirectory , 'leak-scan-complete.json' ) ,
424+ `${ JSON . stringify ( { runId, completedAt : new Date ( ) . toISOString ( ) } ) } \n` ,
425+ { mode : 0o600 }
426+ )
427+ } catch ( error ) {
428+ failed = true
429+ process . exitCode = 1
430+ console . error ( error )
431+ diagnosticsRetained = scrubDiagnostics ( diagnosticRoots )
432+ if ( diagnosticsRetained ) cleanupSucceeded = false
433+ }
434+ } else if ( ! canaryCoverageComplete ) {
425435 diagnosticsRetained = scrubDiagnostics ( diagnosticRoots )
426436 if ( diagnosticsRetained ) cleanupSucceeded = false
427437 }
428- } else if ( ! canaryCoverageComplete ) {
429- diagnosticsRetained = scrubDiagnostics ( diagnosticRoots )
430- if ( diagnosticsRetained ) cleanupSucceeded = false
431- }
432- if ( ! signalCleanup . isStarted ( ) ) {
433- process . off ( 'SIGINT' , handleSigint )
434- process . off ( 'SIGTERM' , handleSigterm )
435438 setManagedProcessGroupObserver ( null )
436439 if ( cleanupSucceeded ) runLock . release ( )
437440 else runLock . retain ( 'normal cleanup failed; inspect diagnostics and clean resources manually' )
441+ console . info (
442+ diagnosticsRetained
443+ ? `E2E ${ failed ? 'failed' : 'completed' } ; diagnostics: ${ runDirectory } `
444+ : 'E2E failed; diagnostics were scrubbed because complete secret scanning was impossible'
445+ )
438446 }
439- console . info (
440- diagnosticsRetained
441- ? `E2E ${ failed ? 'failed' : 'completed' } ; diagnostics: ${ runDirectory } `
442- : 'E2E failed; diagnostics were scrubbed because complete secret scanning was impossible'
443- )
444447 }
445448}
446449
0 commit comments