本文整理匯總了TypeScript中vsts-task-lib/toolrunner.ToolRunner.exec方法的典型用法代碼示例。如果您正苦於以下問題:TypeScript ToolRunner.exec方法的具體用法?TypeScript ToolRunner.exec怎麽用?TypeScript ToolRunner.exec使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類vsts-task-lib/toolrunner.ToolRunner
的用法示例。
在下文中一共展示了ToolRunner.exec方法的10個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的TypeScript代碼示例。
示例1: findSigningIdentity
export async function findSigningIdentity(keychainPath: string) {
var signIdentity : string;
var findIdentityCmd : ToolRunner = tl.createToolRunner(tl.which('security', true));
findIdentityCmd.arg(['find-identity', '-v', '-p', 'codesigning']);
findIdentityCmd.pathArg(keychainPath);
findIdentityCmd.on('stdout', function (data) {
if (data) {
var matches = data.toString().trim().match(/"(.+)"/g);
tl.debug('signing identity data = ' + matches);
if(matches && matches[0]) {
signIdentity = matches[0].replace(/"/gm, '');
tl.debug('signing identity data trimmed = ' + signIdentity);
}
}
})
await findIdentityCmd.exec();
if(signIdentity) {
tl.debug('findSigningIdentity = ' + signIdentity);
return signIdentity;
} else {
throw tl.loc('SignIdNotFound');
}
}
示例2: getiOSProvisioningProfileType
export async function getiOSProvisioningProfileType(provProfilePath: string) {
let provProfileType: string;
try {
//find the provisioning profile details
let provProfileDetails: string;
let getProvProfileDetailsCmd: ToolRunner = tl.tool(tl.which('security', true));
getProvProfileDetailsCmd.arg(['cms', '-D', '-i', provProfilePath]);
getProvProfileDetailsCmd.on('stdout', function (data) {
if (data) {
if (provProfileDetails) {
provProfileDetails = provProfileDetails.concat(data.toString().trim().replace(/[,\n\r\f\v]/gm, ''));
} else {
provProfileDetails = data.toString().trim().replace(/[,\n\r\f\v]/gm, '');
}
}
})
await getProvProfileDetailsCmd.exec();
let tmpPlist: string;
if (provProfileDetails) {
//write the provisioning profile to a plist
tmpPlist = '_xcodetasktmp.plist';
tl.writeFile(tmpPlist, provProfileDetails);
} else {
throw tl.loc('ProvProfileDetailsNotFound', provProfilePath);
}
//get ProvisionsAllDevices - this will exist for enterprise profiles
let provisionsAllDevices: string = await printFromPlist('ProvisionsAllDevices', tmpPlist);
tl.debug('provisionsAllDevices = ' + provisionsAllDevices);
if (provisionsAllDevices && provisionsAllDevices.trim().toLowerCase() === 'true') {
//ProvisionsAllDevices = true in enterprise profiles
provProfileType = 'enterprise';
} else {
let getTaskAllow: string = await printFromPlist('Entitlements:get-task-allow', tmpPlist);
tl.debug('getTaskAllow = ' + getTaskAllow);
if (getTaskAllow && getTaskAllow.trim().toLowerCase() === 'true') {
//get-task-allow = true means it is a development profile
provProfileType = 'development';
} else {
let provisionedDevices: string = await printFromPlist('ProvisionedDevices', tmpPlist);
if (!provisionedDevices) {
// no provisioned devices for non-development profile means it is an app-store profile
provProfileType = 'app-store';
} else {
// non-development profile with provisioned devices - use ad-hoc
provProfileType = 'ad-hoc';
}
}
}
//delete the temporary plist file
let deletePlistCommand: ToolRunner = tl.tool(tl.which('rm', true));
deletePlistCommand.arg(['-f', tmpPlist]);
await deletePlistCommand.exec();
} catch (err) {
tl.debug(err);
}
return provProfileType;
}
示例3: installProvisioningProfile
export async function installProvisioningProfile(provProfilePath: string) : Promise<{ provProfileUUID: string, provProfileName: string }> {
//find the provisioning profile UUID
let provProfileDetails: string;
let getProvProfileDetailsCmd: ToolRunner = tl.tool(tl.which('security', true));
getProvProfileDetailsCmd.arg(['cms', '-D', '-i', provProfilePath]);
getProvProfileDetailsCmd.on('stdout', function (data) {
if (data) {
if (provProfileDetails) {
provProfileDetails = provProfileDetails.concat(data.toString().trim().replace(/[,\n\r\f\v]/gm, ''));
} else {
provProfileDetails = data.toString().trim().replace(/[,\n\r\f\v]/gm, '');
}
}
})
await getProvProfileDetailsCmd.exec();
let tmpPlist: string;
if (provProfileDetails) {
//write the provisioning profile to a plist
tmpPlist = '_xcodetasktmp.plist';
tl.writeFile(tmpPlist, provProfileDetails);
} else {
throw tl.loc('ProvProfileDetailsNotFound', provProfilePath);
}
//use PlistBuddy to figure out the UUID
let provProfileUUID: string;
let plist = tl.which('/usr/libexec/PlistBuddy', true);
let plistTool: ToolRunner = tl.tool(plist);
plistTool.arg(['-c', 'Print UUID', tmpPlist]);
plistTool.on('stdout', function (data) {
if (data) {
provProfileUUID = data.toString();
}
})
await plistTool.exec();
//use PlistBuddy to figure out the Name
let provProfileName: string;
plistTool = tl.tool(plist);
plistTool.arg(['-c', 'Print Name', tmpPlist]);
plistTool.on('stdout', function (data) {
if (data) {
provProfileName = data.toString();
}
})
await plistTool.exec();
//delete the temporary plist file
let deletePlistCommand: ToolRunner = tl.tool(tl.which('rm', true));
deletePlistCommand.arg(['-f', tmpPlist]);
await deletePlistCommand.exec();
if (provProfileUUID) {
//copy the provisioning profile file to ~/Library/MobileDevice/Provisioning Profiles
tl.mkdirP(userProvisioningProfilesPath); // Path may not exist if Xcode has not been run yet.
let pathToProvProfile: string = getProvisioningProfilePath(provProfileUUID);
let copyProvProfileCmd: ToolRunner = tl.tool(tl.which('cp', true));
copyProvProfileCmd.arg(['-f', provProfilePath, pathToProvProfile]);
await copyProvProfileCmd.exec();
if (!provProfileName) {
tl.warning(tl.loc('ProvProfileNameNotFound'));
}
return { provProfileUUID, provProfileName };
} else {
throw tl.loc('ProvProfileUUIDNotFound', provProfilePath);
}
}
示例4: installCertInTemporaryKeychain
export async function installCertInTemporaryKeychain(keychainPath: string, keychainPwd: string, p12CertPath: string, p12Pwd: string, useKeychainIfExists: boolean): Promise<void> {
let setupKeychain: boolean = true;
if (useKeychainIfExists && tl.exist(keychainPath)) {
setupKeychain = false;
}
if (setupKeychain) {
//delete keychain if exists
await deleteKeychain(keychainPath);
//create keychain
let createKeychainCommand: ToolRunner = tl.tool(tl.which('security', true));
createKeychainCommand.arg(['create-keychain', '-p', keychainPwd, keychainPath]);
await createKeychainCommand.exec();
//update keychain settings
let keychainSettingsCommand: ToolRunner = tl.tool(tl.which('security', true));
keychainSettingsCommand.arg(['set-keychain-settings', '-lut', '7200', keychainPath]);
await keychainSettingsCommand.exec();
}
//unlock keychain
await unlockKeychain(keychainPath, keychainPwd);
//import p12 cert into the keychain
let importP12Command: ToolRunner = tl.tool(tl.which('security', true));
if (!p12Pwd) {
// if password is null or not defined, set it to empty
p12Pwd = '';
}
importP12Command.arg(['import', p12CertPath, '-P', p12Pwd, '-A', '-t', 'cert', '-f', 'pkcs12', '-k', keychainPath]);
await importP12Command.exec();
//If we imported into a pre-existing keychain (e.g. login.keychain), set the partition_id ACL for the private key we just imported
//so codesign won't prompt to use the key for signing. This isn't necessary for temporary keychains, at least on High Sierra.
//See https://stackoverflow.com/questions/39868578/security-codesign-in-sierra-keychain-ignores-access-control-settings-and-ui-p
if (!setupKeychain) {
const privateKeyName: string = await getP12PrivateKeyName(p12CertPath, p12Pwd);
await setKeyPartitionList(keychainPath, keychainPwd, privateKeyName);
}
//list the keychains to get current keychains in search path
let listAllOutput: string;
let listAllCommand: ToolRunner = tl.tool(tl.which('security', true));
listAllCommand.arg(['list-keychain', '-d', 'user']);
listAllCommand.on('stdout', function (data) {
if (data) {
if (listAllOutput) {
listAllOutput = listAllOutput.concat(data.toString().trim());
} else {
listAllOutput = data.toString().trim();
}
}
})
await listAllCommand.exec();
let allKeychainsArr: string[] = [];
tl.debug('listAllOutput = ' + listAllOutput);
//parse out all the existing keychains in search path
if (listAllOutput) {
allKeychainsArr = listAllOutput.split(/[\n\r\f\v]/gm);
}
//add the keychain to list path along with existing keychains if it is not in the path
if (listAllOutput && listAllOutput.indexOf(keychainPath) < 0) {
let listAddCommand: ToolRunner = tl.tool(tl.which('security', true));
listAddCommand.arg(['list-keychain', '-d', 'user', '-s', keychainPath]);
for (var i: number = 0; i < allKeychainsArr.length; i++) {
listAddCommand.arg(allKeychainsArr[i].trim().replace(/"/gm, ''));
}
await listAddCommand.exec();
}
let listVerifyOutput: string;
let listVerifyCommand: ToolRunner = tl.tool(tl.which('security', true));
listVerifyCommand.arg(['list-keychain', '-d', 'user']);
listVerifyCommand.on('stdout', function (data) {
if (data) {
if (listVerifyOutput) {
listVerifyOutput = listVerifyOutput.concat(data.toString().trim());
} else {
listVerifyOutput = data.toString().trim();
}
}
})
await listVerifyCommand.exec();
if (!listVerifyOutput || listVerifyOutput.indexOf(keychainPath) < 0) {
throw tl.loc('TempKeychainSetupFailed');
}
}
示例5: run
async function run() {
try {
tl.setResourcePath(path.join( __dirname, 'task.json'));
//--------------------------------------------------------
// Tooling
//--------------------------------------------------------
tl.setEnvVar('DEVELOPER_DIR', tl.getInput('xcodeDeveloperDir', false));
var useXctool : boolean = tl.getBoolInput('useXctool', false);
var tool : string = useXctool ? tl.which('xctool', true) : tl.which('xcodebuild', true);
tl.debug('Tool selected: '+ tool);
//--------------------------------------------------------
// Paths
//--------------------------------------------------------
var workingDir : string = tl.getPathInput('cwd');
tl.cd(workingDir);
var outPath : string = tl.resolve(workingDir, tl.getInput('outputPattern', true)); //use posix implementation to resolve paths to prevent unit test failures on Windows
tl.mkdirP(outPath);
//--------------------------------------------------------
// Xcode args
//--------------------------------------------------------
var ws : string = tl.getPathInput('xcWorkspacePath', false, false);
if(tl.filePathSupplied('xcWorkspacePath')) {
var workspaceMatches = tl.glob(ws);
tl.debug("Found " + workspaceMatches.length + ' workspaces matching.');
if (workspaceMatches.length > 0) {
ws = workspaceMatches[0];
if (workspaceMatches.length > 1) {
tl.warning(tl.loc('MultipleWorkspacesFound', ws));
}
}
else {
throw tl.loc('WorkspaceDoesNotExist');
}
}
var sdk : string = tl.getInput('sdk', false);
var configuration : string = tl.getInput('configuration', false);
var scheme : string = tl.getInput('scheme', false);
var useXcpretty : boolean = tl.getBoolInput('useXcpretty', false);
var xctoolReporter : string = tl.getInput('xctoolReporter', false);
var actions : string [] = tl.getDelimitedInput('actions', ' ', true);
var packageApp : boolean = tl.getBoolInput('packageApp', true);
var args : string = tl.getInput('args', false);
//--------------------------------------------------------
// Exec Tools
//--------------------------------------------------------
// --- Xcode Version ---
var xcv : ToolRunner = tl.tool(tool);
xcv.arg('-version');
await xcv.exec();
// --- Xcode build arguments ---
var xcb: ToolRunner = tl.tool(tool);
xcb.argIf(sdk, ['-sdk', sdk]);
xcb.argIf(configuration, ['-configuration', configuration]);
if(ws && tl.filePathSupplied('xcWorkspacePath')) {
xcb.arg('-workspace');
xcb.arg(ws);
}
xcb.argIf(scheme, ['-scheme', scheme]);
xcb.argIf(useXctool && xctoolReporter, ['-reporter', 'plain', '-reporter', xctoolReporter]);
xcb.arg(actions);
xcb.arg('DSTROOT=' + path.join(outPath, 'build.dst'));
xcb.arg('OBJROOT=' + path.join(outPath, 'build.obj'));
xcb.arg('SYMROOT=' + path.join(outPath, 'build.sym'));
xcb.arg('SHARED_PRECOMPS_DIR=' + path.join(outPath, 'build.pch'));
if (args) {
xcb.line(args);
}
//--------------------------------------------------------
// iOS signing and provisioning
//--------------------------------------------------------
var signMethod : string = tl.getInput('signMethod', false);
var keychainToDelete : string;
var profileToDelete : string;
if(signMethod === 'file') {
var p12 : string = tl.getPathInput('p12', false, false);
var p12pwd : string = tl.getInput('p12pwd', false);
var provProfilePath : string = tl.getPathInput('provProfile', false);
var removeProfile : boolean = tl.getBoolInput('removeProfile', false);
if(tl.filePathSupplied('p12') && tl.exist(p12)) {
p12 = tl.resolve(workingDir, p12);
var keychain : string = path.join(workingDir, '_xcodetasktmp.keychain');
var keychainPwd : string = '_xcodetask_TmpKeychain_Pwd#1';
//create a temporary keychain and install the p12 into that keychain
await sign.installCertInTemporaryKeychain(keychain, keychainPwd, p12, p12pwd);
xcb.arg('OTHER_CODE_SIGN_FLAGS=--keychain=' + keychain);
keychainToDelete = keychain;
//.........這裏部分代碼省略.........
示例6: run
async function run() {
try {
tl.setResourcePath(path.join(__dirname, 'task.json'));
//read inputs
let solution: string = tl.getPathInput('solution', true, false);
let platform: string = tl.getInput('platform');
let configuration: string = tl.getInput('configuration');
let msbuildArguments: string = tl.getInput('msbuildArguments');
let clean: boolean = tl.getBoolInput('clean');
let logsolutionEvents: boolean = tl.getBoolInput('logsolutionEvents');
if (logsolutionEvents) {
tl.warning(tl.loc('RecordProjectDetailsOnlySupportedOnWindows'));
}
let createLogFile: boolean = tl.getBoolInput('createLogFile');
if (createLogFile) {
tl.warning(tl.loc('CreateLogFileOnlySupportedOnWindows'));
}
let msbuildLocationMethod: string = tl.getInput('msbuildLocationMethod');
if (!msbuildLocationMethod) {
msbuildLocationMethod = 'version';
}
let msbuildTool: string;
if (msbuildLocationMethod === 'version') {
let msbuildVersion: string = tl.getInput('msbuildVersion');
msbuildTool = await msbuildHelpers.getMSBuildPath(msbuildVersion);
}
if (msbuildLocationMethod === 'location') {
msbuildTool = tl.getInput('msbuildLocation');
}
let filesList: string[] = tl.findMatch(null, solution, { followSymbolicLinks: false, followSpecifiedSymbolicLink: false }, { matchBase: true });
for (let file of filesList) {
if (clean) {
let cleanTool: ToolRunner = tl.tool(msbuildTool);
cleanTool.arg(file);
cleanTool.argIf(clean, '/t:Clean');
cleanTool.argIf(platform, '/p:Platform=' + platform);
cleanTool.argIf(configuration, '/p:Configuration=' + configuration);
if (msbuildArguments) {
cleanTool.line(msbuildArguments);
}
await cleanTool.exec();
}
let buildTool: ToolRunner = tl.tool(msbuildTool);
buildTool.arg(file);
buildTool.argIf(platform, '/p:Platform=' + platform);
buildTool.argIf(configuration, '/p:Configuration=' + configuration);
if (msbuildArguments) {
buildTool.line(msbuildArguments);
}
await buildTool.exec();
}
} catch (err) {
tl.setResult(tl.TaskResult.Failed, err);
}
}
示例7: run
async function run() {
let codesignKeychain: string;
let profileToDelete: string;
try {
tl.setResourcePath(path.join(__dirname, 'task.json'));
// Get build inputs
let solutionPath: string = tl.getPathInput('solution', true, true);
let configuration: string = tl.getInput('configuration', true);
let clean: boolean = tl.getBoolInput('clean');
let args: string = tl.getInput('args');
let packageApp: boolean = tl.getBoolInput('packageApp');
let buildForSimulator: boolean = tl.getBoolInput('forSimulator');
let device: string = (buildForSimulator) ? 'iPhoneSimulator' : 'iPhone';
tl.debug('device: ' + device);
let cwd: string = tl.getInput('cwd');
let runNugetRestore: boolean = tl.getBoolInput('runNugetRestore');
// find the build tool path based on the build tool and location inputs
let buildTool: string = tl.getInput('buildTool');
let buildToolLocation: string = tl.getInput('mdtoolLocation', false);
let buildToolPath: string;
if (buildToolLocation) {
// location is specified
buildToolPath = buildToolLocation;
if (buildTool === 'xbuild' && !buildToolLocation.toLowerCase().endsWith('xbuild')) {
buildToolPath = path.join(buildToolLocation, 'xbuild');
}
if (buildTool === 'msbuild' && !buildToolLocation.toLowerCase().endsWith('msbuild')) {
buildToolPath = path.join(buildToolLocation, 'msbuild');
}
} else {
// no build tool path is supplied, check PATH
if (buildTool === 'msbuild') {
// check for msbuild 15 or higher, if not fall back to xbuild
buildToolPath = await msbuildhelpers.getMSBuildPath('15.0');
} else {
buildToolPath = tl.which('xbuild', true);
}
}
tl.checkPath(buildToolPath, 'build tool');
tl.debug('Build tool path = ' + buildToolPath);
if (clean) {
let cleanBuildRunner: ToolRunner = tl.tool(buildToolPath);
cleanBuildRunner.arg(solutionPath);
cleanBuildRunner.argIf(configuration, '/p:Configuration=' + configuration);
cleanBuildRunner.argIf(device, '/p:Platform=' + device);
cleanBuildRunner.arg('/t:Clean');
await cleanBuildRunner.exec();
}
if (runNugetRestore) {
// Find location of nuget
let nugetPath: string = tl.which('nuget', true);
// Restore NuGet packages of the solution
let nugetRunner: ToolRunner = tl.tool(nugetPath);
nugetRunner.arg(['restore', solutionPath]);
await nugetRunner.exec();
}
//Process working directory
let workingDir: string = cwd || tl.getVariable('System.DefaultWorkingDirectory');
tl.cd(workingDir);
let signMethod: string = tl.getInput('signMethod', false);
let provProfileUUID: string = null;
let signIdentity: string = null;
if (signMethod === 'file') {
let p12: string = tl.getPathInput('p12', false, false);
let p12pwd: string = tl.getInput('p12pwd', false);
let provProfilePath: string = tl.getPathInput('provProfile', false);
let removeProfile: boolean = tl.getBoolInput('removeProfile', false);
if (tl.filePathSupplied('p12') && tl.exist(p12)) {
p12 = tl.resolve(cwd, p12);
tl.debug('cwd = ' + cwd);
let keychain: string = tl.resolve(cwd, '_xamariniostasktmp.keychain');
let keychainPwd: string = '_xamariniostask_TmpKeychain_Pwd#1';
//create a temporary keychain and install the p12 into that keychain
tl.debug('installing cert in temp keychain');
await sign.installCertInTemporaryKeychain(keychain, keychainPwd, p12, p12pwd, false);
codesignKeychain = keychain;
//find signing identity
signIdentity = await sign.findSigningIdentity(keychain);
}
//determine the provisioning profile UUID
if (tl.filePathSupplied('provProfile') && tl.exist(provProfilePath)) {
provProfileUUID = await sign.getProvisioningProfileUUID(provProfilePath);
if (removeProfile && provProfileUUID) {
profileToDelete = provProfileUUID;
}
//.........這裏部分代碼省略.........
示例8: run
async function run() {
try {
tl.setResourcePath(path.join(__dirname, 'task.json'));
// Check platform is macOS since demands are not evaluated on Hosted pools
if (os.platform() !== 'darwin') {
throw new Error(tl.loc('BuildRequiresMac'));
}
// Get build inputs
const solutionInput: string = tl.getPathInput('solution', true, false);
const configuration: string = tl.getInput('configuration', true);
const clean: boolean = tl.getBoolInput('clean');
const args: string = tl.getInput('args');
const packageApp: boolean = tl.getBoolInput('packageApp');
const buildForSimulator: boolean = tl.getBoolInput('forSimulator');
const device: string = (buildForSimulator) ? 'iPhoneSimulator' : 'iPhone';
tl.debug('device: ' + device);
const cwd: string = tl.getPathInput('cwd', false, true);
const runNugetRestore: boolean = tl.getBoolInput('runNugetRestore');
// find the build tool path based on the build tool and location inputs
const buildToolLocation: string = tl.getInput('buildToolLocation', false);
let buildToolPath: string;
if (buildToolLocation) {
buildToolPath = buildToolLocation;
} else {
// no build tool path is supplied, check PATH
// check for msbuild 15 or higher, if not fall back to xbuild
buildToolPath = await msbuildhelpers.getMSBuildPath('latest');
}
tl.checkPath(buildToolPath, 'build tool');
tl.debug('Build tool path = ' + buildToolPath);
const solutionPath = expandSolutionWildcardPatterns(solutionInput);
if (clean) {
const cleanBuildRunner: ToolRunner = tl.tool(buildToolPath);
cleanBuildRunner.arg(solutionPath);
cleanBuildRunner.argIf(configuration, '/p:Configuration=' + configuration);
cleanBuildRunner.argIf(device, '/p:Platform=' + device);
if (args) {
cleanBuildRunner.line(args);
}
cleanBuildRunner.arg('/t:Clean');
await cleanBuildRunner.exec();
}
if (runNugetRestore) {
// Find location of nuget
const nugetPath: string = tl.which('nuget', true);
// Restore NuGet packages of the solution
const nugetRunner: ToolRunner = tl.tool(nugetPath);
nugetRunner.arg(['restore', solutionPath]);
await nugetRunner.exec();
}
//Process working directory
const workingDir: string = cwd || tl.getVariable('System.DefaultWorkingDirectory');
tl.cd(workingDir);
const provProfileUUID: string = tl.getInput('provProfileUuid');
const signIdentity: string = tl.getInput('iosSigningIdentity');
// Prepare build command line
const buildRunner: ToolRunner = tl.tool(buildToolPath);
buildRunner.arg(solutionPath);
buildRunner.argIf(configuration, '/p:Configuration=' + configuration);
buildRunner.argIf(device, '/p:Platform=' + device);
buildRunner.argIf(packageApp, '/p:BuildIpa=true');
if (args) {
buildRunner.line(args);
}
if (signIdentity && signIdentity.indexOf(',') > 0) {
// Escape the input to workaround msbuild bug https://github.com/Microsoft/msbuild/issues/471
tl.debug('Escaping , in arg /p:Codesignkey to workaround msbuild bug.');
const signIdentityEscaped = signIdentity.replace(/[,]/g, '%2C');
buildRunner.arg('/p:Codesignkey=' + signIdentityEscaped);
} else {
tl.debug('Passing in arg /p:Codesignkey as is without escpaing any characters.')
buildRunner.argIf(signIdentity, '/p:Codesignkey=' + signIdentity);
}
buildRunner.argIf(provProfileUUID, '/p:CodesignProvision=' + provProfileUUID);
// Execute build
await buildRunner.exec();
tl.setResult(tl.TaskResult.Succeeded, tl.loc('XamariniOSSucceeded'));
} catch (err) {
tl.setResult(tl.TaskResult.Failed, tl.loc('XamariniOSFailed', err));
}
}
示例9: run
async function run() {
try {
tl.setResourcePath(path.join(__dirname, 'task.json'));
//--------------------------------------------------------
// Tooling
//--------------------------------------------------------
var devDir = tl.getInput('xcodeDeveloperDir', false);
if (devDir) {
tl.setVariable('DEVELOPER_DIR', devDir);
}
var useXctool: boolean = tl.getBoolInput('useXctool', false);
var tool: string = useXctool ? tl.which('xctool', true) : tl.which('xcodebuild', true);
tl.debug('Tool selected: ' + tool);
//--------------------------------------------------------
// Paths
//--------------------------------------------------------
var workingDir: string = tl.getPathInput('cwd');
tl.cd(workingDir);
var outPath: string = tl.resolve(workingDir, tl.getInput('outputPattern', true)); //use posix implementation to resolve paths to prevent unit test failures on Windows
tl.mkdirP(outPath);
//--------------------------------------------------------
// Xcode args
//--------------------------------------------------------
var ws: string = tl.getPathInput('xcWorkspacePath', false, false);
if (tl.filePathSupplied('xcWorkspacePath')) {
var workspaceMatches = tl.findMatch(workingDir, ws, { followSymbolicLinks: false, followSpecifiedSymbolicLink: false });
tl.debug("Found " + workspaceMatches.length + ' workspaces matching.');
if (workspaceMatches.length > 0) {
ws = workspaceMatches[0];
if (workspaceMatches.length > 1) {
tl.warning(tl.loc('MultipleWorkspacesFound', ws));
}
}
else {
throw tl.loc('WorkspaceDoesNotExist', ws);
}
}
var isProject = false;
if (ws && ws.trim().toLowerCase().endsWith('.xcodeproj')) {
isProject = true;
}
var sdk: string = tl.getInput('sdk', false);
var configuration: string = tl.getInput('configuration', false);
var scheme: string = tl.getInput('scheme', false);
var useXcpretty: boolean = tl.getBoolInput('useXcpretty', false);
var xctoolReporter: string = tl.getInput('xctoolReporter', false);
var actions: string[] = tl.getDelimitedInput('actions', ' ', true);
var packageApp: boolean = tl.getBoolInput('packageApp', true);
var args: string = tl.getInput('args', false);
//--------------------------------------------------------
// Exec Tools
//--------------------------------------------------------
// --- Xcode Version ---
var xcv: ToolRunner = tl.tool(tool);
xcv.arg('-version');
var xcodeVersion: number = 0;
xcv.on('stdout', (data) => {
var match = data.toString().trim().match(/Xcode (.+)/g);
tl.debug('match = ' + match);
if (match) {
var version: number = parseInt(match.toString().replace('Xcode', '').trim());
tl.debug('version = ' + version);
if (!isNaN(version)) {
xcodeVersion = version;
}
}
});
await xcv.exec();
tl.debug('xcodeVersion = ' + xcodeVersion);
// --- Xcode build arguments ---
var xcb: ToolRunner = tl.tool(tool);
xcb.argIf(sdk, ['-sdk', sdk]);
xcb.argIf(configuration, ['-configuration', configuration]);
if (ws && tl.filePathSupplied('xcWorkspacePath')) {
xcb.argIf(isProject, '-project');
xcb.argIf(!isProject, '-workspace');
xcb.arg(ws);
}
xcb.argIf(scheme, ['-scheme', scheme]);
xcb.argIf(useXctool && xctoolReporter, ['-reporter', 'plain', '-reporter', xctoolReporter]);
xcb.arg(actions);
if (actions.toString().indexOf('archive') < 0) {
// redirect build output if archive action is not passed
// xcodebuild archive produces an invalid archive if output is redirected
xcb.arg('DSTROOT=' + tl.resolve(outPath, 'build.dst'));
xcb.arg('OBJROOT=' + tl.resolve(outPath, 'build.obj'));
xcb.arg('SYMROOT=' + tl.resolve(outPath, 'build.sym'));
xcb.arg('SHARED_PRECOMPS_DIR=' + tl.resolve(outPath, 'build.pch'));
//.........這裏部分代碼省略.........
示例10: execute
(async function execute(): Promise<void> {
try {
const azCopy: string[] = azCopyknownLocations.filter((x) => fs.existsSync(x));
if (azCopy.length) {
tl.debug("AzCopy utility found at path : " + azCopy[0]);
const toolRunner: ToolRunner = tl.tool(azCopy[0]);
if (sourceKind === "Storage") {
tl.debug("retrieving source account details");
const sourceCredentials: any = await getConnectedServiceCredentials(sourceConnectedServiceName);
const sourceStorageAccount: IStorageAccount = await getStorageAccount(sourceCredentials, sourceAccount);
tl.debug(sourceStorageAccount.blobEndpoint + sourceObject);
toolRunner.arg("/Source:" + sourceStorageAccount.blobEndpoint + sourceObject);
toolRunner.arg("/SourceKey:" + sourceStorageAccount.key);
} else {
toolRunner.arg("/Source:" + sourcePath);
}
if (destinationKind === "Storage") {
const destCredentials: any = await getConnectedServiceCredentials(destinationConnectedServiceName);
const destStorageAccount: IStorageAccount = await getStorageAccount(
destCredentials,
destinationAccount);
tl.debug(destStorageAccount.blobEndpoint + destinationObject);
toolRunner.arg("/Dest:" + destStorageAccount.blobEndpoint + destinationObject);
toolRunner.arg("/DestKey:" + destStorageAccount.key);
} else {
toolRunner.arg("/Dest:" + destinationPath);
}
if (recursive) {
toolRunner.arg("/S");
}
if (pattern) {
toolRunner.arg("/Pattern:" + pattern);
}
if (excludeNewer) {
toolRunner.arg("/XN");
}
if (excludeOlder) {
toolRunner.arg("/XO");
}
if (additionalArguments) {
toolRunner.line(additionalArguments);
}
toolRunner.arg("/Y");
const result: number = await toolRunner.exec();
if (result) {
tl.setResult(tl.TaskResult.Failed, "An error occured during azcopy");
} else {
tl.setResult(tl.TaskResult.Succeeded, "Files copied successfully");
}
} else {
tl.setResult(
tl.TaskResult.Failed,
"AzCopy utility was not found, please refer to documentation for installation instructions.");
}
} catch (err) {
tl.debug(err.stack);
tl.setResult(tl.TaskResult.Failed, err);
}
})();