in src/commands/deploy/deploy.ts [36:114]
async function deploy(actionContext: IActionContext, arg1: vscode.Uri | string | SlotTreeItemBase | undefined, arg2: string | {} | undefined, expectedContextValue: string): Promise<void> {
const deployPaths: IDeployPaths = await getDeployFsPath(actionContext, arg1);
addLocalFuncTelemetry(actionContext, deployPaths.workspaceFolder.uri.fsPath);
const context: IDeployContext = Object.assign(actionContext, deployPaths, { defaultAppSetting: 'defaultFunctionAppToDeploy' });
const node: SlotTreeItemBase = await getDeployNode(context, ext.tree, arg1, arg2, expectedContextValue);
const [language, version]: [ProjectLanguage, FuncVersion] = await verifyInitForVSCode(context, context.effectiveDeployFsPath);
context.telemetry.properties.projectLanguage = language;
context.telemetry.properties.projectRuntime = version;
if (language === ProjectLanguage.Python && !node.site.isLinux) {
context.errorHandling.suppressReportIssue = true;
throw new Error(localize('pythonNotAvailableOnWindows', 'Python projects are not supported on Windows Function Apps. Deploy to a Linux Function App instead.'));
}
const client = await node.site.createClient(actionContext);
const siteConfig: WebSiteManagementModels.SiteConfigResource = await client.getSiteConfig();
const isConsumption: boolean = await client.getIsConsumption(actionContext);
let isZipDeploy: boolean = siteConfig.scmType !== ScmType.LocalGit && siteConfig.scmType !== ScmType.GitHub;
if (!isZipDeploy && node.site.isLinux && isConsumption) {
ext.outputChannel.appendLog(localize('linuxConsZipOnly', 'WARNING: Using zip deploy because scm type "{0}" is not supported on Linux consumption', siteConfig.scmType), { resourceName: node.site.fullName });
isZipDeploy = true;
context.deployMethod = 'zip';
}
const doRemoteBuild: boolean | undefined = getWorkspaceSetting<boolean>(remoteBuildSetting, deployPaths.effectiveDeployFsPath);
actionContext.telemetry.properties.scmDoBuildDuringDeployment = String(doRemoteBuild);
if (doRemoteBuild) {
await validateRemoteBuild(context, node.site, context.workspaceFolder, language);
}
if (isZipDeploy && node.site.isLinux && isConsumption && !doRemoteBuild) {
context.deployMethod = 'storage';
}
if (getWorkspaceSetting<boolean>('showDeployConfirmation', context.workspaceFolder.uri.fsPath) && !context.isNewApp && isZipDeploy) {
await showDeployConfirmation(context, node.site, 'azureFunctions.deploy');
}
await runPreDeployTask(context, context.effectiveDeployFsPath, siteConfig.scmType);
if (isZipDeploy) {
void validateGlobSettings(context, context.effectiveDeployFsPath);
}
if (language === ProjectLanguage.CSharp && !node.site.isLinux) {
await updateWorkerProcessTo64BitIfRequired(context, siteConfig, node, language);
}
if (isZipDeploy) {
const projectPath = await tryGetFunctionProjectRoot(context, deployPaths.workspaceFolder);
await verifyAppSettings(context, node, projectPath, version, language, { doRemoteBuild, isConsumption });
}
await node.runWithTemporaryDescription(
context,
localize('deploying', 'Deploying...'),
async () => {
// Stop function app here to avoid *.jar file in use on server side.
// More details can be found: https://github.com/Microsoft/vscode-azurefunctions/issues/106
context.stopAppBeforeDeploy = language === ProjectLanguage.Java;
// preDeploy tasks are only required for zipdeploy so subpath may not exist
let deployFsPath: string = context.effectiveDeployFsPath;
if (!isZipDeploy && !isPathEqual(context.effectiveDeployFsPath, context.originalDeployFsPath)) {
deployFsPath = context.originalDeployFsPath;
const noSubpathWarning: string = `WARNING: Ignoring deploySubPath "${getWorkspaceSetting(deploySubpathSetting, context.originalDeployFsPath)}" for non-zip deploy.`;
ext.outputChannel.appendLog(noSubpathWarning);
}
await innerDeploy(node.site, deployFsPath, context);
}
);
await notifyDeployComplete(context, node, context.workspaceFolder);
}