export async function scheduleRunRequest()

in src/commands/registries/azure/tasks/scheduleRunRequest.ts [27:88]


export async function scheduleRunRequest(context: IActionContext, requestType: 'DockerBuildRequest' | 'FileTaskRunRequest', uri: vscode.Uri | undefined): Promise<void> {
    // Acquire information.
    let rootFolder: vscode.WorkspaceFolder;
    let fileItem: Item;
    let imageName: string;
    if (requestType === 'DockerBuildRequest') {
        rootFolder = await quickPickWorkspaceFolder(context, localize('vscode-docker.commands.registries.azure.tasks.buildFolder', 'To quick build Docker files you must first open a folder or workspace in VS Code.'));
        fileItem = await quickPickDockerFileItem(context, uri, rootFolder);
        imageName = await quickPickImageName(context, rootFolder, fileItem);
    } else if (requestType === 'FileTaskRunRequest') {
        rootFolder = await quickPickWorkspaceFolder(context, localize('vscode-docker.commands.registries.azure.tasks.yamlFolder', 'To run a task from a .yaml file you must first open a folder or workspace in VS Code.'));
        fileItem = await quickPickYamlFileItem(context, uri, rootFolder, localize('vscode-docker.commands.registries.azure.tasks.yamlYaml', 'To run a task from a .yaml file you must have yaml file in your VS Code workspace.'));
    } else {
        throw new Error(localize('vscode-docker.commands.registries.azure.tasks.runTypeUnsupported', 'Run Request Type Currently not supported.'));
    }

    const node = await ext.registriesTree.showTreeItemPicker<AzureRegistryTreeItem>(registryExpectedContextValues.azure.registry, context);

    const osPick = ['Linux', 'Windows'].map(item => <IAzureQuickPickItem<AcrModels.OS>>{ label: item, data: item });
    const osType: AcrModels.OS = (await context.ui.showQuickPick(osPick, { placeHolder: localize('vscode-docker.commands.registries.azure.tasks.selectOs', 'Select image base OS') })).data;

    const tarFilePath: string = getTempSourceArchivePath();

    try {
        // Prepare to run.
        ext.outputChannel.show();

        const uploadedSourceLocation: string = await uploadSourceCode(await node.getClient(context), node.registryName, node.resourceGroup, rootFolder, tarFilePath);
        ext.outputChannel.appendLine(localize('vscode-docker.commands.registries.azure.tasks.uploaded', 'Uploaded source code to {0}', tarFilePath));

        let runRequest: AcrModels.DockerBuildRequest | AcrModels.FileTaskRunRequest;
        if (requestType === 'DockerBuildRequest') {
            runRequest = {
                type: requestType,
                imageNames: [imageName],
                isPushEnabled: true,
                sourceLocation: uploadedSourceLocation,
                platform: { os: osType },
                dockerFilePath: fileItem.relativeFilePath
            };
        } else {
            runRequest = {
                type: 'FileTaskRunRequest',
                taskFilePath: fileItem.relativeFilePath,
                sourceLocation: uploadedSourceLocation,
                platform: { os: osType }
            };
        }

        // Schedule the run and Clean up.
        ext.outputChannel.appendLine(localize('vscode-docker.commands.registries.azure.tasks.setUp', 'Set up run request'));

        const run = await (await node.getClient(context)).registries.scheduleRun(node.resourceGroup, node.registryName, runRequest);
        ext.outputChannel.appendLine(localize('vscode-docker.commands.registries.azure.tasks.scheduledRun', 'Scheduled run {0}', run.runId));

        void streamLogs(context, node, run);
    } finally {
        if (await fse.pathExists(tarFilePath)) {
            await fse.unlink(tarFilePath);
        }
    }
}