Beispiel #1
0
 protected virtual void RunGraphBuildForMicroserviceServiceTemplate(ProjectBuildArgs projectArgs)
 {
     if (MicroserviceServiceTemplateBase.IsMicroserviceServiceTemplate(projectArgs.TemplateName))
     {
         CmdHelper.RunCmd("dotnet build /graphbuild", projectArgs.OutputFolder);
     }
 }
 protected virtual void RunInstallLibsForWebTemplate(ProjectBuildArgs projectArgs)
 {
     if (AppTemplateBase.IsAppTemplate(projectArgs.TemplateName) ||
         ModuleTemplateBase.IsModuleTemplate(projectArgs.TemplateName) ||
         AppNoLayersTemplateBase.IsAppNoLayersTemplate(projectArgs.TemplateName) ||
         MicroserviceServiceTemplateBase.IsMicroserviceTemplate(projectArgs.TemplateName))
     {
         CmdHelper.RunCmd("abp install-libs", projectArgs.OutputFolder);
     }
 }
Beispiel #3
0
    protected void ConfigurePwaSupportForAngular(ProjectBuildArgs projectArgs)
    {
        var isAngular = projectArgs.UiFramework == UiFramework.Angular;
        var isPwa     = projectArgs.Pwa;

        if (isAngular && isPwa)
        {
            Logger.LogInformation("Adding PWA Support to Angular app.");
            AngularPwaSupportAdder.AddPwaSupport(projectArgs.OutputFolder);
        }
    }
        public ProjectBuildContext(
            [NotNull] TemplateInfo template,
            [NotNull] TemplateFile templateFile,
            [NotNull] ProjectBuildArgs buildArgs)
        {
            Template     = Check.NotNull(template, nameof(template));
            TemplateFile = Check.NotNull(templateFile, nameof(templateFile));
            BuildArgs    = Check.NotNull(buildArgs, nameof(buildArgs));

            Result = new ProjectResult();
        }
    protected virtual async Task RunGraphBuildForMicroserviceServiceTemplate(ProjectBuildArgs projectArgs)
    {
        if (MicroserviceServiceTemplateBase.IsMicroserviceServiceTemplate(projectArgs.TemplateName))
        {
            await EventBus.PublishAsync(new ProjectCreationProgressEvent {
                Message = "Building the microservice solution"
            }, false);

            CmdHelper.RunCmd("dotnet build /graphbuild", projectArgs.OutputFolder);
        }
    }
Beispiel #6
0
 protected async Task RunInstallLibsForWebTemplateAsync(ProjectBuildArgs projectArgs)
 {
     if (AppTemplateBase.IsAppTemplate(projectArgs.TemplateName) ||
         ModuleTemplateBase.IsModuleTemplate(projectArgs.TemplateName) ||
         AppNoLayersTemplateBase.IsAppNoLayersTemplate(projectArgs.TemplateName) ||
         MicroserviceServiceTemplateBase.IsMicroserviceTemplate(projectArgs.TemplateName))
     {
         Logger.LogInformation("Installing client-side packages...");
         await InstallLibsService.InstallLibsAsync(projectArgs.OutputFolder);
     }
 }
Beispiel #7
0
 private async Task <TemplateInfo> GetTemplateInfoAsync(ProjectBuildArgs args)
 {
     if (args.TemplateName.IsNullOrWhiteSpace())
     {
         return(await TemplateInfoProvider.GetDefaultAsync());
     }
     else
     {
         return(TemplateInfoProvider.Get(args.TemplateName));
     }
 }
Beispiel #8
0
        public ProjectBuildContext([NotNull] TemplateInfo template,
                                   [NotNull] TemplateFile templateFile,
                                   [NotNull] ProjectBuildArgs buildArgs,
                                   [NotNull] string version)
        {
            Template     = Check.NotNull(template, nameof(template));
            TemplateFile = Check.NotNull(templateFile, nameof(templateFile));
            BuildArgs    = Check.NotNull(buildArgs, nameof(buildArgs));
            Version      = Check.NotNullOrWhiteSpace(version, nameof(version));

            Result = new ProjectResult();
        }
    protected void ConfigureNpmPackagesForTheme(ProjectBuildArgs projectArgs)
    {
        if (!projectArgs.Theme.HasValue)
        {
            return;
        }

        switch (projectArgs.Theme)
        {
        case Theme.Basic:
            ConfigureNpmPackagesForBasicTheme(projectArgs);
            break;
        }
    }
Beispiel #10
0
 protected void OpenRelatedWebPage(ProjectBuildArgs projectArgs,
                                   string template,
                                   bool isTiered,
                                   CommandLineArgs commandLineArgs)
 {
     if (AppTemplateBase.IsAppTemplate(template))
     {
         var isCommercial = template == AppProTemplate.TemplateName;
         OpenThanksPage(projectArgs.UiFramework, projectArgs.DatabaseProvider, isTiered || commandLineArgs.Options.ContainsKey("separate-identity-server"), isCommercial);
     }
     else if (MicroserviceTemplateBase.IsMicroserviceTemplate(template))
     {
         OpenMicroserviceDocumentPage();
     }
 }
Beispiel #11
0
        }                                    //TODO: Fill the symbols, like "UI-Angular", "CMS-KIT"!

        public ProjectBuildContext(
            TemplateInfo template,
            ModuleInfo module,
            NugetPackageInfo package,
            [NotNull] TemplateFile templateFile,
            [NotNull] ProjectBuildArgs buildArgs)
        {
            Template     = template;
            Module       = module;
            Package      = package;
            TemplateFile = Check.NotNull(templateFile, nameof(templateFile));
            BuildArgs    = Check.NotNull(buildArgs, nameof(buildArgs));
            Symbols      = new List <string>();

            Result = new ProjectResult();
        }
    private void ConfigureNpmPackagesForBasicTheme(ProjectBuildArgs projectArgs)
    {
        if (projectArgs.UiFramework is not UiFramework.None or UiFramework.Angular)
        {
            ThemePackageAdder.AddNpmPackage(projectArgs.OutputFolder, "@abp/aspnetcore.mvc.ui.theme.basic", projectArgs.Version);
        }

        if (projectArgs.UiFramework is UiFramework.BlazorServer)
        {
            ThemePackageAdder.AddNpmPackage(projectArgs.OutputFolder, "@abp/aspnetcore.components.server.basictheme", projectArgs.Version);
        }

        if (projectArgs.UiFramework is UiFramework.Angular)
        {
            ThemePackageAdder.AddAngularPackage(projectArgs.OutputFolder, "@abp/ng.theme.basic", projectArgs.Version);
        }
    }
    protected async Task CreateInitialMigrationsAsync(ProjectBuildArgs projectArgs)
    {
        if (projectArgs.DatabaseProvider == DatabaseProvider.MongoDb)
        {
            return;
        }

        var  efCoreProjectPath = string.Empty;
        bool isLayeredTemplate;

        switch (projectArgs.TemplateName)
        {
        case AppTemplate.TemplateName:
        case AppProTemplate.TemplateName:
            efCoreProjectPath = Directory.GetFiles(projectArgs.OutputFolder, "*EntityFrameworkCore.csproj", SearchOption.AllDirectories).FirstOrDefault();
            isLayeredTemplate = true;
            break;

        case AppNoLayersTemplate.TemplateName:
        case AppNoLayersProTemplate.TemplateName:
            efCoreProjectPath = Directory.GetFiles(projectArgs.OutputFolder, "*.csproj", SearchOption.AllDirectories).FirstOrDefault();
            isLayeredTemplate = false;
            break;

        default:
            return;
        }

        if (string.IsNullOrWhiteSpace(efCoreProjectPath))
        {
            Logger.LogWarning("Couldn't find the project to create initial migrations!");
            return;
        }

        await EventBus.PublishAsync(new ProjectCreationProgressEvent
        {
            Message = "Creating the initial DB migration"
        }, false);

        await InitialMigrationCreator.CreateAsync(Path.GetDirectoryName(efCoreProjectPath), isLayeredTemplate);
    }
Beispiel #14
0
    private static void NormalizeArgs(ProjectBuildArgs args, TemplateInfo templateInfo)
    {
        if (args.TemplateName.IsNullOrEmpty())
        {
            args.TemplateName = templateInfo.Name;
        }

        if (args.DatabaseProvider == DatabaseProvider.NotSpecified)
        {
            if (templateInfo.DefaultDatabaseProvider != DatabaseProvider.NotSpecified)
            {
                args.DatabaseProvider = templateInfo.DefaultDatabaseProvider;
            }
        }

        if (args.UiFramework == UiFramework.NotSpecified)
        {
            if (templateInfo.DefaultUiFramework != UiFramework.NotSpecified)
            {
                args.UiFramework = templateInfo.DefaultUiFramework;
            }
        }
    }
Beispiel #15
0
 private async Task <ModuleInfo> GetModuleInfoAsync(ProjectBuildArgs args)
 {
     return(await ModuleInfoProvider.GetAsync(args.TemplateName));
 }
 private async Task <NugetPackageInfo> GetPackageInfoAsync(ProjectBuildArgs args)
 {
     return(await NugetPackageInfoProvider.GetAsync(args.TemplateName));
 }
    public async Task <ProjectBuildResult> BuildAsync(ProjectBuildArgs args)
    {
        var packageInfo = await GetPackageInfoAsync(args);

        var templateFile = await SourceCodeStore.GetAsync(
            args.TemplateName,
            SourceCodeTypes.NugetPackage,
            args.Version,
            null,
            args.ExtraProperties.ContainsKey(GetSourceCommand.Options.Preview.Long)
            );

        var apiKeyResult = await ApiKeyService.GetApiKeyOrNullAsync();

        if (apiKeyResult?.ApiKey != null)
        {
            args.ExtraProperties["api-key"] = apiKeyResult.ApiKey;
        }

        if (apiKeyResult?.LicenseCode != null)
        {
            args.ExtraProperties["license-code"] = apiKeyResult.LicenseCode;
        }

        var context = new ProjectBuildContext(
            null,
            null,
            packageInfo,
            null,
            templateFile,
            args
            );

        NugetPackageProjectBuildPipelineBuilder.Build(context).Execute();

        // Exclude unwanted or known options.
        var options = args.ExtraProperties
                      .Where(x => !x.Key.Equals(CliConsts.Command, StringComparison.InvariantCultureIgnoreCase))
                      .Where(x => !x.Key.Equals(NewCommand.Options.OutputFolder.Long, StringComparison.InvariantCultureIgnoreCase) &&
                             !x.Key.Equals(NewCommand.Options.OutputFolder.Short, StringComparison.InvariantCultureIgnoreCase))
                      .Where(x => !x.Key.Equals(NewCommand.Options.Version.Long, StringComparison.InvariantCultureIgnoreCase) &&
                             !x.Key.Equals(NewCommand.Options.Version.Short, StringComparison.InvariantCultureIgnoreCase))
                      .Where(x => !x.Key.Equals(NewCommand.Options.TemplateSource.Short, StringComparison.InvariantCultureIgnoreCase) &&
                             !x.Key.Equals(NewCommand.Options.TemplateSource.Long, StringComparison.InvariantCultureIgnoreCase))
                      .Select(x => x.Key).ToList();

        await CliAnalyticsCollect.CollectAsync(new CliAnalyticsCollectInputDto
        {
            Tool             = Options.ToolName,
            Command          = args.ExtraProperties.ContainsKey(CliConsts.Command) ? args.ExtraProperties[CliConsts.Command] : "",
            DatabaseProvider = null,
            IsTiered         = null,
            UiFramework      = null,
            Options          = JsonSerializer.Serialize(options),
            ProjectName      = null,
            TemplateName     = args.TemplateName,
            TemplateVersion  = templateFile.Version
        });

        return(new ProjectBuildResult(context.Result.ZipContent, args.TemplateName));
    }
Beispiel #18
0
    public async Task <ProjectBuildResult> BuildAsync(ProjectBuildArgs args)
    {
        var templateInfo = await GetTemplateInfoAsync(args);

        NormalizeArgs(args, templateInfo);

        await EventBus.PublishAsync(new ProjectCreationProgressEvent {
            Message = "Downloading the solution template"
        }, false);

        var templateFile = await SourceCodeStore.GetAsync(
            args.TemplateName,
            SourceCodeTypes.Template,
            args.Version,
            args.TemplateSource,
            args.ExtraProperties.ContainsKey(NewCommand.Options.Preview.Long)
            );

        DeveloperApiKeyResult apiKeyResult = null;

#if DEBUG
        try
        {
            var apiKeyResultSection = _configuration.GetSection("apiKeyResult");
            if (apiKeyResultSection.Exists())
            {
                apiKeyResult = apiKeyResultSection.Get <DeveloperApiKeyResult>(); //you can use user secrets
            }
        }
        catch (Exception e)
        {
            Console.WriteLine(e);
        }

        if (apiKeyResult == null)
        {
            apiKeyResult = await ApiKeyService.GetApiKeyOrNullAsync();
        }
#else
        apiKeyResult = await ApiKeyService.GetApiKeyOrNullAsync();
#endif

        if (apiKeyResult != null)
        {
            if (apiKeyResult.ApiKey != null)
            {
                args.ExtraProperties["api-key"] = apiKeyResult.ApiKey;
            }
            else if (templateInfo.Name == AppProTemplate.TemplateName)
            {
                throw new UserFriendlyException(apiKeyResult.ErrorMessage);
            }
        }

        if (apiKeyResult?.LicenseCode != null)
        {
            args.ExtraProperties["license-code"] = apiKeyResult.LicenseCode;
        }

        var context = new ProjectBuildContext(
            templateInfo,
            null,
            null,
            null,
            templateFile,
            args
            );

        if (context.Template is AppTemplateBase appTemplateBase)
        {
            appTemplateBase.HasDbMigrations = SemanticVersion.Parse(templateFile.Version) < new SemanticVersion(4, 3, 99);
        }

        await EventBus.PublishAsync(new ProjectCreationProgressEvent {
            Message = "Customizing the solution template"
        }, false);

        TemplateProjectBuildPipelineBuilder.Build(context).Execute();

        if (!templateInfo.DocumentUrl.IsNullOrEmpty())
        {
            Logger.LogInformation("Check out the documents at " + templateInfo.DocumentUrl);
        }

        // Exclude unwanted or known options.
        var options = args.ExtraProperties
                      .Where(x => !x.Key.Equals(CliConsts.Command, StringComparison.InvariantCultureIgnoreCase))
                      .Where(x => !x.Key.Equals(NewCommand.Options.Tiered.Long, StringComparison.InvariantCultureIgnoreCase))
                      .Where(x => !x.Key.Equals(NewCommand.Options.Preview.Long, StringComparison.InvariantCultureIgnoreCase))
                      .Where(x => !x.Key.Equals(NewCommand.Options.DatabaseProvider.Long, StringComparison.InvariantCultureIgnoreCase) &&
                             !x.Key.Equals(NewCommand.Options.DatabaseProvider.Short, StringComparison.InvariantCultureIgnoreCase))
                      .Where(x => !x.Key.Equals(NewCommand.Options.OutputFolder.Long, StringComparison.InvariantCultureIgnoreCase) &&
                             !x.Key.Equals(NewCommand.Options.OutputFolder.Short, StringComparison.InvariantCultureIgnoreCase))
                      .Where(x => !x.Key.Equals(NewCommand.Options.UiFramework.Long, StringComparison.InvariantCultureIgnoreCase) &&
                             !x.Key.Equals(NewCommand.Options.UiFramework.Short, StringComparison.InvariantCultureIgnoreCase))
                      .Where(x => !x.Key.Equals(NewCommand.Options.Mobile.Long, StringComparison.InvariantCultureIgnoreCase) &&
                             !x.Key.Equals(NewCommand.Options.Mobile.Short, StringComparison.InvariantCultureIgnoreCase))
                      .Where(x => !x.Key.Equals(NewCommand.Options.Version.Long, StringComparison.InvariantCultureIgnoreCase) &&
                             !x.Key.Equals(NewCommand.Options.Version.Short, StringComparison.InvariantCultureIgnoreCase))
                      .Where(x => !x.Key.Equals(NewCommand.Options.TemplateSource.Short, StringComparison.InvariantCultureIgnoreCase) &&
                             !x.Key.Equals(NewCommand.Options.TemplateSource.Long, StringComparison.InvariantCultureIgnoreCase))
                      .Select(x => x.Key).ToList();

        await CliAnalyticsCollect.CollectAsync(new CliAnalyticsCollectInputDto
        {
            Tool             = Options.ToolName,
            Command          = args.ExtraProperties.ContainsKey(CliConsts.Command) ? args.ExtraProperties[CliConsts.Command] : "",
            DatabaseProvider = args.DatabaseProvider.ToProviderName(),
            IsTiered         = args.ExtraProperties.ContainsKey(NewCommand.Options.Tiered.Long),
            UiFramework      = args.UiFramework.ToFrameworkName(),
            Options          = JsonSerializer.Serialize(options),
            ProjectName      = args.SolutionName.FullName,
            TemplateName     = args.TemplateName,
            TemplateVersion  = templateFile.Version
        });

        return(new ProjectBuildResult(context.Result.ZipContent, args.SolutionName.ProjectName));
    }