1- import { RunJob , SubmissionJob , RunResult , SubmissionResult } from "types/job" ;
1+ import { RunJob , SubmissionJob , RunResult , SubmissionResult , Job , Result } from "types/job" ;
22import config = require( '../../config.js' )
33import { exec , mkdir , rm } from 'shelljs'
44import * as path from 'path'
55
66import RunScenario from './run'
77import SubmissionScenario from './submission'
8+ import { Scenario } from "types/scenario" ;
89
9- export const executor = async ( job : RunJob | SubmissionJob ) : Promise < RunResult | SubmissionResult > => {
10+ export const executor = < J , R > ( scenario : Scenario ) => async ( job : Job & J ) : Promise < Result & R > => {
1011 // Create RUNBOX
1112 rm ( '-rf' , config . RUNBOX . DIR )
1213 mkdir ( '-p' , config . RUNBOX . DIR )
1314 const currentJobDir = path . join ( config . RUNBOX . DIR , job . id . toString ( ) )
1415 mkdir ( '-p' , currentJobDir )
1516
1617 const LANG_CONFIG = config . LANGS [ job . lang ]
17- const scenario = job . hasOwnProperty ( 'testcases' ) ? SubmissionScenario : RunScenario
1818
1919 // Setup RUNBOX
20- await scenario . setup ( currentJobDir , < RunJob & SubmissionJob > job ) // TODO:
20+ await scenario . setup ( currentJobDir , job ) // TODO:
2121
2222 // Run worker
2323 exec ( `docker run \\
@@ -33,9 +33,12 @@ export const executor = async (job: RunJob|SubmissionJob): Promise<RunResult|Sub
3333 ` )
3434
3535 // Get result
36- const result = await scenario . result ( currentJobDir , job . id )
36+ const result = < Result & R > ( await scenario . result ( currentJobDir , job . id ) )
3737
3838 rm ( '-rf' , currentJobDir )
3939
4040 return result
4141}
42+
43+ export const runExecutor = executor < RunJob , RunResult > ( RunScenario )
44+ export const submissionExecutor = executor < SubmissionJob , SubmissionResult > ( SubmissionScenario )
0 commit comments