in src/Cli/func/Actions/LocalActions/InitAction.cs [184:243]
private async Task InitFunctionAppProject()
{
if (Csx)
{
ResolvedWorkerRuntime = Helpers.WorkerRuntime.Dotnet;
}
else
{
(ResolvedWorkerRuntime, ResolvedLanguage) = ResolveWorkerRuntimeAndLanguage(WorkerRuntime, Language);
// Order here is important: each language may have multiple runtimes, and each unique (language, worker-runtime) pair
// may have its own programming model. Thus, we assume that ResolvedLanguage and ResolvedWorkerRuntime are properly set
// before attempting to resolve the programming model.
var supportedProgrammingModels = ProgrammingModelHelper.GetSupportedProgrammingModels(ResolvedWorkerRuntime);
ResolvedProgrammingModel = ProgrammingModelHelper.ResolveProgrammingModel(ProgrammingModel, ResolvedWorkerRuntime, ResolvedLanguage);
if (!supportedProgrammingModels.Contains(ResolvedProgrammingModel))
{
throw new CliArgumentsException(
$"The {ResolvedProgrammingModel.GetDisplayString()} programming model is not supported for worker runtime {ResolvedWorkerRuntime.GetDisplayString()}. Supported programming models for worker runtime {ResolvedWorkerRuntime.GetDisplayString()} are:\n{EnumerationHelper.Join("\n", supportedProgrammingModels)}");
}
}
TelemetryHelpers.AddCommandEventToDictionary(TelemetryCommandEvents, "WorkerRuntime", ResolvedWorkerRuntime.ToString());
ValidateTargetFramework();
if (WorkerRuntimeLanguageHelper.IsDotnet(ResolvedWorkerRuntime) && !Csx)
{
await ShowEolMessage();
await DotnetHelpers.DeployDotnetProject(Utilities.SanitizeLiteral(Path.GetFileName(Environment.CurrentDirectory), allowed: "-"), Force, ResolvedWorkerRuntime, TargetFramework);
}
else
{
bool managedDependenciesOption = ResolveManagedDependencies(ResolvedWorkerRuntime, ManagedDependencies);
await InitLanguageSpecificArtifacts(ResolvedWorkerRuntime, ResolvedLanguage, ResolvedProgrammingModel, managedDependenciesOption, GeneratePythonDocumentation);
await WriteFiles();
await WriteHostJson(ResolvedWorkerRuntime, managedDependenciesOption, ExtensionBundle);
await WriteLocalSettingsJson(ResolvedWorkerRuntime, ResolvedProgrammingModel);
}
await WriteExtensionsJson();
if (InitSourceControl)
{
await SetupSourceControl();
}
if (InitDocker)
{
await WriteDockerfile(ResolvedWorkerRuntime, ResolvedLanguage, TargetFramework, Csx);
}
if (!SkipNpmInstall)
{
await FetchPackages(ResolvedWorkerRuntime, ResolvedProgrammingModel);
}
else
{
ColoredConsole.Write(AdditionalInfoColor("You skipped \"npm install\". You must run \"npm install\" manually"));
}
}