build-scripts/generateRunners.ts (88 lines of code) (raw):

/*! * Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * SPDX-License-Identifier: MIT */ import * as fs from 'fs' import * as path from 'path' interface RunnerGenerator { taskName: string taskClients: string[] additionalImports?: string[] additionalArguments?: string[] additionalSetupStatements?: string[] successResult?: string returnType?: string } const repoRoot = path.dirname(__dirname) const header = ` /*! * Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * SPDX-License-Identifier: MIT */ /* NOTE! this file is auto-generated by generateRunners.ts, do not edit it by hand or commit it */ ` function generate( filename: string, clientTypes: string[], additionalArguments?: string[], additionalImports?: string[], additionalSetupStatements?: string[], successResult?: string, returnType?: string ) { const importStament = ` import * as tl from 'azure-pipelines-task-lib/task' import { SdkUtils } from 'lib/sdkutils' import { warnIfBuildAgentTooLow } from 'lib/vstsUtils' ${ clientTypes === undefined ? '' : `\nimport { ${clientTypes.map(it => 'createDefault' + it).join(', ')} } from 'lib/defaultClients'` } import { TaskOperations } from './TaskOperations' import { buildTaskParameters } from './TaskParameters'${ additionalImports === undefined ? '' : '\n\n' + additionalImports.join('\n ') } ` const runStatement = ` async function run(): Promise<${returnType === undefined ? 'void' : returnType}> { SdkUtils.readResources()${ additionalSetupStatements === undefined ? '' : '\n ' + additionalSetupStatements.join('\n ') } const taskParameters = buildTaskParameters() return new TaskOperations(${ clientTypes === undefined ? '' : '\n ' + clientTypes .map(it => { // tslint:disable-next-line:prefer-template return 'await createDefault' + it + '(taskParameters, tl.debug),' }) .join('\n ') }${ // tslint:disable-next-line:prefer-template additionalArguments === undefined ? '' : '\n ' + additionalArguments.join(',\n ') + ',' } taskParameters).execute() } ` // TODO: Optionally output "TaskResult.SucceededWithIssues" depending on result? const run = ` run().then((result) => { tl.setResult(tl.TaskResult.Succeeded, '') }).catch((error) => { tl.setResult(tl.TaskResult.Failed, \`\${error}\`) }) ` const output = header + importStament + runStatement + run fs.writeFileSync(`src/tasks/${filename}/${filename}.runner.ts`, output) } const generateFile = path.join(repoRoot, 'generate.json') const parsedJson = JSON.parse(fs.readFileSync(generateFile).toString()) as RunnerGenerator[] for (const json of parsedJson) { generate( json.taskName, json.taskClients, json.additionalArguments, json.additionalImports, json.additionalSetupStatements, json.successResult, json.returnType ) }