Ejemplo n.º 1
0
    public async Task Publish_by_msbuild_Test()
    {
        // Given
        var solutionDir = FileIO.FindContainerDirToAncestor("*.sln");
        var srcDir      = Path.Combine(solutionDir, "SampleApps", "BlazorWasmApp0");

        using var workDir = WorkDirectory.CreateCopyFrom(srcDir, dst => dst.Name is not "obj" and not "bin");

        for (var i = 0; i < 2; i++)
        {
            Console.WriteLine($"{(i == 0 ? "1st" : "2nd")} time publishing...");

            // When
            await XProcess.Start("dotnet", "restore", workDir).WaitForExitAsync();

            var dotnetCLI = await XProcess.Start("dotnet", "msbuild -p:Configuration=Debug -p:BlazorEnableCompression=false -p:DeployOnBuild=true -p:PublishUrl=bin/publish", workDir).WaitForExitAsync();

            dotnetCLI.ExitCode.Is(0, message: dotnetCLI.StdOutput + dotnetCLI.StdError);

            // Then

            // Validate prerendered contents.
            var wwwrootDir = Path.Combine(workDir, "bin", "publish", "wwwroot");
            ValidatePrerenderedContents_of_BlazorWasmApp0(wwwrootDir);
        }
    }
Ejemplo n.º 2
0
    public static WorkDirectory CreateSampleAppsWorkDir()
    {
        var solutionDir      = FileIO.FindContainerDirToAncestor("*.sln");
        var srcSampleAppsDir = Path.Combine(solutionDir, "SampleApps");

        return(WorkDirectory.CreateCopyFrom(srcSampleAppsDir, arg => arg.Name is (not "obj" and not "bin")));
    }
Ejemplo n.º 3
0
    public async Task Publish_with_SingleFileEnabled_Test()
    {
        var rid                  = "win-x64";
        var driverFileName       = "chromedriver.exe";
        var executableFileFormat = Format.PE32;

        var unitTestProjectDir = FileIO.FindContainerDirToAncestor("*.csproj");

        using var workDir = WorkDirectory.CreateCopyFrom(Path.Combine(unitTestProjectDir, "Project"), predicate: item => item.Name is not "obj" and not "bin");

        var publishCommand = new[] {
            "dotnet", "publish", "-r", rid, "-o", "out",
            "-c:Release",
            "-p:PublishChromeDriver=true",
            "-p:PublishSingleFile=true",
            "-p:SelfContained=false"
        };

        // IMPORTANT: 2nd time of publishing, sometimes lost driver file in the published folder, so we have to validate it..
        for (var i = 0; i < 2; i++)
        {
            using var dotnet = await XProcess.Start(
                      filename : publishCommand.First(),
                      arguments : String.Join(' ', publishCommand.Skip(1)),
                      workDir).WaitForExitAsync();

            dotnet.ExitCode.Is(0);

            var driverFullPath = Path.Combine(workDir, "out", driverFileName);
            File.Exists(driverFullPath).IsTrue();

            DetectFormat(driverFullPath).Is(executableFileFormat);
        }
    }
Ejemplo n.º 4
0
        private void CreateOrUnloadEngine()
        {
            if (mEngineCreationDisabled)
            {
                return;
            }

            // don't do anything when the engine was never loaded to begin with
            if (WorkDirectory.IsNullOrEmpty() && Engine == null)
            {
                return;
            }

            var eventAggregator = IoC.Get <IEventAggregator>();

            bool unload = Engine != null;
            bool reload = unload && WorkDirectory.IsNotNullOrEmpty();
            bool load   = !unload && WorkDirectory.IsNotNullOrEmpty();

            if (unload)
            {
                Engine = null;
                eventAggregator.PublishOnUIThread(new ProjectEngineUnloadedEventArgs());
            }

            if (reload || load)
            {
                var engine = KSoft.Phoenix.Engine.PhxEngine.CreateForHaloWars(
                    WorkDirectory, WorkDirectory,
                    GameVersion == GameVersionType.Xbox360);

                Engine = engine;
                eventAggregator.PublishOnUIThread(new ProjectEngineCreatedEventArgs(Engine));
            }
        }
Ejemplo n.º 5
0
    public void BuildPrerenderingOptions_Test()
    {
        // Given
        using var workFolder = new WorkDirectory();
        var cmdlineOptions = new CommandLineOptions
        {
            IntermediateDir         = workFolder,
            PublishedDir            = workFolder,
            AssemblyName            = "BlazorWasmApp1",
            TypeNameOfRootComponent = "BlazorWasmApp1.App",
            SelectorOfRootComponent = "#app",
            MiddlewarePackages      = "",
            FrameworkName           = "net5.0",
        };

        Directory.CreateDirectory(Path.Combine(cmdlineOptions.PublishedDir, "wwwroot", "_framework"));
        File.Copy(sourceFileName: Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Assets", "BlazorWasmApp1.dll"),
                  destFileName: Path.Combine(cmdlineOptions.PublishedDir, "wwwroot", "_framework", "BlazorWasmApp1.dll"));
        File.Copy(sourceFileName: Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Assets", "index.html"),
                  destFileName: Path.Combine(cmdlineOptions.PublishedDir, "wwwroot", "index.html"));

        // When
        var options = Program.BuildPrerenderingOptions(new CustomAssemblyLoader(), cmdlineOptions);

        // Then
        options.RootComponentType.FullName.Is("BlazorWasmApp1.App");
    }
Ejemplo n.º 6
0
    public async Task Output_of_ProjectB_Contains_DriverFile_Test()
    {
        var vsAppDir = Environment.GetEnvironmentVariable("VSAPPIDDIR");

        if (vsAppDir == null)
        {
            Assert.Inconclusive(@"This test requires Visual Studio and the definition of the ""VSAPPDIR"" environment variable to point out the directory where Visual Studio ""devenv.exe"" exists. (ex: VSAPPDIR=C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\)");
        }

        var unitTestProjectDir = FileIO.FindContainerDirToAncestor("*.csproj");

        using var workDir = WorkDirectory.CreateCopyFrom(Path.Combine(unitTestProjectDir, "ProjectAB"), item => item.Name is not "obj" and not "bin");

        var nuget  = Path.Combine(unitTestProjectDir, "..", "buildTools", "nuget.exe");
        var devenv = Path.Combine(vsAppDir, "devenv.exe");
        await XProcess.Start(nuget, "restore", workDir).ExitCodeIs(0);

        await XProcess.Start(devenv, "ProjectAB.sln /Build", workDir).ExitCodeIs(0);

        var outDir          = Path.Combine(workDir, "ProjectB", "bin", "Debug", "net472");
        var driverFullPath1 = Path.Combine(outDir, "geckodriver");
        var driverFullPath2 = Path.Combine(outDir, "geckodriver.exe");

        (File.Exists(driverFullPath1) || File.Exists(driverFullPath2)).IsTrue();
    }
Ejemplo n.º 7
0
        /* ----------------------------------------------------------------- */
        ///
        /// Invoke
        ///
        /// <summary>
        /// 作業ディレクトリを設定した後 Action を実行します。
        /// </summary>
        ///
        /* ----------------------------------------------------------------- */
        private void Invoke(Action action, string dest)
        {
            var name = "TEMP";
            var prev = Environment.GetEnvironmentVariable(name);

            try
            {
                var info = IO.Get(dest);
                if (!IO.Exists(info.DirectoryName))
                {
                    IO.CreateDirectory(info.DirectoryName);
                }

                if (WorkDirectory.HasValue())
                {
                    if (!IO.Exists(WorkDirectory))
                    {
                        IO.CreateDirectory(WorkDirectory);
                    }
                    SetVariable(name, WorkDirectory);
                }
                action();
            }
            finally { SetVariable(name, prev); }
        }
Ejemplo n.º 8
0
    public async Task Publish_Test()
    {
        // Given
        var solutionDir = FileIO.FindContainerDirToAncestor("*.sln");
        var srcDir      = Path.Combine(solutionDir, "SampleApps", "BlazorWasmApp0");

        using var workDir = WorkDirectory.CreateCopyFrom(srcDir, dst => dst.Name is not "obj" and not "bin");

        var expectedHomeTitles = new Dictionary <int, string> {
            [1] = "Home", [2] = "My Home"
        };
        var expectedEnvNames = new Dictionary <int, string> {
            [1] = "Prerendering", [2] = "Foo"
        };

        for (var i = 1; i <= 2; i++)
        {
            Console.WriteLine($"{(i == 1 ? "1st" : "2nd")} time publishing...");

            // When
            var arg = "publish -c:Debug -p:BlazorEnableCompression=false -o:bin/publish";
            // if 2nd time publishing, override the environment name.
            if (i == 2)
            {
                arg += " -p:BlazorWasmPrerenderingEnvironment=" + expectedEnvNames[2];
            }

            var dotnetCLI = await XProcess.Start("dotnet", arg, workDir).WaitForExitAsync();

            dotnetCLI.ExitCode.Is(0, message: dotnetCLI.StdOutput + dotnetCLI.StdError);

            // Then

            // Validate prerendered contents.
            var wwwrootDir = Path.Combine(workDir, "bin", "publish", "wwwroot");
            ValidatePrerenderedContents_of_BlazorWasmApp0(
                wwwrootDir,
                homeTitle: expectedHomeTitles[i],
                environment: expectedEnvNames[i]);

            // Validate PWA assets manifest.
            var indexHtmlBytes = File.ReadAllBytes(Path.Combine(wwwrootDir, "index.html"));
            using var sha256 = SHA256.Create();
            var hash = "sha256-" + Convert.ToBase64String(sha256.ComputeHash(indexHtmlBytes));

            var serviceWorkerAssetsJs = File.ReadAllText(Path.Combine(wwwrootDir, "my-assets.js"));
            serviceWorkerAssetsJs = Regex.Replace(serviceWorkerAssetsJs, @"^self\.assetsManifest\s*=\s*", "");
            serviceWorkerAssetsJs = Regex.Replace(serviceWorkerAssetsJs, ";\\s*$", "");
            var assetsManifestFile = JsonSerializer.Deserialize <AssetsManifestFile>(serviceWorkerAssetsJs);
            var assetManifestEntry = assetsManifestFile?.assets?.First(a => a.url == "index.html");
            assetManifestEntry.IsNotNull();
            assetManifestEntry !.hash.Is(hash);
        }
    }
Ejemplo n.º 9
0
    public void GenerateProjectToGetMiddleware_IfEmpty_Test()
    {
        // Given
        using var workFolder = new WorkDirectory();
        var middlewarePackages = Enumerable.Empty <MiddlewarePackageReference>();

        // When
        var outputDir = Program.GenerateProjectToGetMiddleware(middlewarePackages, workFolder, "net5.0");

        // Then
        outputDir.IsNull();
    }
Ejemplo n.º 10
0
    public async Task PublishWithRuntimeIdentifier_NoPublish_Test(string rid, string driverFileName, Format _)
    {
        var unitTestProjectDir = FileIO.FindContainerDirToAncestor("*.csproj");

        using var workDir = WorkDirectory.CreateCopyFrom(Path.Combine(unitTestProjectDir, "Project"), predicate: item => item.Name is not "obj" and not "bin");

        using var dotnet = await XProcess.Start("dotnet", $"publish -r {rid} -o out", workDir).WaitForExitAsync();

        dotnet.ExitCode.Is(0);

        var driverFullPath = Path.Combine(workDir, "out", driverFileName);

        File.Exists(driverFullPath).IsFalse();
    }
Ejemplo n.º 11
0
    public async Task Publish_with_HTTP500_Test()
    {
        // Given
        var solutionDir = FileIO.FindContainerDirToAncestor("*.sln");
        var srcDir      = Path.Combine(solutionDir, "SampleApps", "BlazorWasmApp1");

        using var workDir = WorkDirectory.CreateCopyFrom(srcDir, dst => dst.Name is not "obj" and not "bin");

        // When (Set the hoting environment name to "ExceptionTest")
        var dotnetCLI = await XProcess.Start("dotnet", "publish -c:Release -p:BlazorWasmPrerenderingEnvironment=ExceptionTest -p:BlazorEnableCompression=false --nologo", workDir).WaitForExitAsync();

        // Then (Exit code is NOT 0)
        dotnetCLI.ExitCode.IsNot(0, message: dotnetCLI.Output);
    }
Ejemplo n.º 12
0
    public async ValueTask <WorkDirectory> PublishAsync()
    {
        if (!this.PublishedOnce)
        {
            var publishProcess = XProcess.Start(
                "dotnet",
                $"publish -c:{this.Configuration} -p:BlazorWasmPrerendering=disable -p:BlazorEnableCompression=false -p:UsingBrowserRuntimeWorkload=false",
                workingDirectory: this.ProjectDir);
            await publishProcess.WaitForExitAsync();

            publishProcess.ExitCode.Is(0, message: publishProcess.StdOutput + publishProcess.StdError);
            this.PublishedOnce = true;
        }

        return(WorkDirectory.CreateCopyFrom(this.PublishSrcDir, _ => true));
    }
Ejemplo n.º 13
0
    public async Task PublishWithRuntimeIdentifier_with_DefineConstants_Test(string rid, string driverFileName, Format executableFileFormat)
    {
        var unitTestProjectDir = FileIO.FindContainerDirToAncestor("*.csproj");

        using var workDir = WorkDirectory.CreateCopyFrom(Path.Combine(unitTestProjectDir, "Project"), predicate: item => item.Name is not "obj" and not "bin");

        using var dotnet = await XProcess.Start("dotnet", $"publish -r {rid} -o out -p:DefineConstants=_PUBLISH_CHROMEDRIVER", workDir).WaitForExitAsync();

        dotnet.ExitCode.Is(0);

        var driverFullPath = Path.Combine(workDir, "out", driverFileName);

        File.Exists(driverFullPath).IsTrue();

        DetectFormat(driverFullPath).Is(executableFileFormat);
    }
Ejemplo n.º 14
0
    public WorkSpace(string startupProjDir, string framework, string configuration)
    {
        this.WorkSpaceDir = WorkDirectory.CreateCopyFrom(GetTestDir(), predicate: item => item.Name is not "obj" and not "bin" and not ".vs");

        var nugetConfigPath = Path.Combine(this.WorkSpaceDir, "nuget.config");

        if (File.Exists(nugetConfigPath))
        {
            File.Delete(nugetConfigPath);
        }

        this.StartupProj = Path.Combine(this.WorkSpaceDir, startupProjDir);
        this.Bin         = Path.Combine(this.StartupProj, "bin");
        this.Obj         = Path.Combine(this.StartupProj, "obj");
        this.OutputDir   = Path.Combine(this.Bin, configuration, framework);
        this.PublishDir  = Path.Combine(this.OutputDir, "publish");
    }
Ejemplo n.º 15
0
    public void GetMiddlewareDlls_Test()
    {
        // Given
        using var workFolder = new WorkDirectory();
        var templateProjectFilePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Assets", "ExpectedProjectFile.xml");
        var targetProjectFilePath   = Path.Combine(workFolder, "Project.csproj");

        File.Copy(templateProjectFilePath, targetProjectFilePath);

        // When
        var outputDir = Program.GetMiddlewareDlls(workFolder, frameworkName: "net5.0");

        // Then
        outputDir.Is(Path.Combine(workFolder, "bin", "Release", "net5.0"));
        var targetAssemblyPath = Path.Combine(outputDir, "Toolbelt.Blazor.HeadElement.ServerPrerendering.dll");

        File.Exists(targetAssemblyPath).IsTrue();
    }
Ejemplo n.º 16
0
    public async Task SaveToStaticFileAsync_AppendHtmlExtension_Style_Test()
    {
        const string baseUrl = "http://127.0.0.1:5052";

        await using var testSiteServer = await StartTestSite1(baseUrl);

        using var outDir = new WorkDirectory();

        var crawler = new StaticlizeCrawler(
            baseUrl,
            urlPathToExplicitFetch: null,
            webRootPath: outDir,
            OutputStyle.AppendHtmlExtension,
            enableBrotliCompression: false,
            enableGZipCompression: false);
        await crawler.SaveToStaticFileAsync();

        File.ReadAllText(Path.Combine(outDir, "index.html")).Contains("<h1>Home</h1>").IsTrue();
        File.ReadAllText(Path.Combine(outDir, "counter.html")).Contains("<h1>Counter</h1>").IsTrue();
        File.ReadAllText(Path.Combine(outDir, "fetchdata", "weather-forecast.html")).Contains("<h1>Fetch Data</h1>").IsTrue();
    }
Ejemplo n.º 17
0
 public string this[string name]
 {
     get
     {
         if (name == "Alias")
         {
             if (Alias == null || Alias.Trim().Length == 0)
             {
                 return("Alias is required, and can't be all spaces.");
             }
             else if (CheckAlias(Alias))
             {
                 return("Alias already exists.");
             }
         }
         else if (name == "Path")
         {
             if (Path == null || Path.Trim().Length == 0)
             {
                 return("Aplication path is required.");
             }
             else if (!File.Exists(ExpandedPath))
             {
                 return("Aplication path doesn't exist.");
             }
         }
         else if (name == "WorkDirectory")
         {
             if (WorkDirectory == null || WorkDirectory.Trim().Length == 0)
             {
                 return("Aplication work directory is required.");
             }
             else if (!Directory.Exists(ExpandedWorkDirectory))
             {
                 return("Aplication  work directory doesn't exist.");
             }
         }
         return(null);
     }
 }
Ejemplo n.º 18
0
    public async Task Output_of_ProjectB_Contains_DriverFile_Test()
    {
        var unitTestProjectDir = FileIO.FindContainerDirToAncestor("*.csproj");

        using var workDir = WorkDirectory.CreateCopyFrom(Path.Combine(unitTestProjectDir, "ProjectAB"), item => item.Name is not "obj" and not "bin");

        //var devenv = Environment.ExpandEnvironmentVariables(Path.Combine("%DevEnvDir%", "devenv.exe"));
        var devenv = @"C:\Program Files\Microsoft Visual Studio\2022\Preview\Common7\IDE\devenv.exe";

        using var nugetProcess = await XProcess.Start("nuget", "restore", workDir).WaitForExitAsync();

        nugetProcess.ExitCode.Is(0);
        using var devenvProcess = await XProcess.Start(devenv, "ProjectAB.sln /Build", workDir).WaitForExitAsync();

        devenvProcess.ExitCode.Is(0);

        var outDir          = Path.Combine(workDir, "ProjectB", "bin", "Debug", "net472");
        var driverFullPath1 = Path.Combine(outDir, "chromedriver");
        var driverFullPath2 = Path.Combine(outDir, "chromedriver.exe");

        (File.Exists(driverFullPath1) || File.Exists(driverFullPath2)).IsTrue();
    }
Ejemplo n.º 19
0
    public async Task AppSettings_Test()
    {
        // Given
        var solutionDir = FileIO.FindContainerDirToAncestor("*.sln");
        var srcDir      = Path.Combine(solutionDir, "SampleApps", "BlazorWasmApp0");

        using var workDir = WorkDirectory.CreateCopyFrom(srcDir, dst => dst.Name is not "obj" and not "bin");

        File.WriteAllText(Path.Combine(workDir, "wwwroot", "appsettings.json"), @"{""HomeTitle"":""127.0.0.1""}");

        // When
        var dotnetCLI = await XProcess.Start("dotnet", "publish -c:Debug -p:BlazorEnableCompression=false -o:bin/publish", workDir).WaitForExitAsync();

        dotnetCLI.ExitCode.Is(0, message: dotnetCLI.StdOutput + dotnetCLI.StdError);

        // Then

        // Validate prerendered contents.
        var wwwrootDir = Path.Combine(workDir, "bin", "publish", "wwwroot");

        ValidatePrerenderedContents_of_BlazorWasmApp0(wwwrootDir, homeTitle: "127.0.0.1");
    }
Ejemplo n.º 20
0
    public void GenerateProjectToGetMiddleware_Test()
    {
        // Given
        using var workFolder = new WorkDirectory();
        var middlewarePackages = new MiddlewarePackageReference[] {
            new() { PackageIdentity = "Toolbelt.Blazor.HeadElement.ServerPrerendering", Assembly = "", Version = "1.5.1" }
        };

        // When
        var outputDir = Program.GenerateProjectToGetMiddleware(middlewarePackages, workFolder, "net5.0");

        // Then
        outputDir.IsNotNull();
        var generatedProjectFilePath = Path.Combine(outputDir, "Project.csproj");

        File.Exists(generatedProjectFilePath).IsTrue();

        // Then
        var expectedProjectFilePath  = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Assets", "ExpectedProjectFile.xml");
        var expectedProjectFileLines = File.ReadAllLines(expectedProjectFilePath).Select(line => line.Trim()).ToArray();
        var actualProjectFileLines   = File.ReadAllLines(generatedProjectFilePath).Select(line => line.Trim()).ToArray();

        actualProjectFileLines.Is(expectedProjectFileLines);
    }
Ejemplo n.º 21
0
        protected override void RegisterTasks()
        {
            //// ----------------------------------------------------------------------------------------------------------------------------
            var initTask = Task(
                "Init the workflow",
                _ =>
            {
                IDirectory currentDirectory = WorkDirectory.Closest(dir => dir.Name.Equals("src", StringComparison.InvariantCultureIgnoreCase));

                if (currentDirectory == null)
                {
                    throw new Exception("Could not find Src directory " + WorkDirectory);
                }

                IDirectory artifacts = currentDirectory.Parent / "Artifacts";
                artifacts.EnsureExists();
                artifacts.Files.IncludeByExtension("nupkg", "nuspec").DeleteAll();

                IDirectory mergedBin = currentDirectory.Parent / "bin" / "Merged";
                mergedBin.EnsureExists();

                return(new
                {
                    Version = "4.2.1.0",
                    Configuration = "Debug",
                    Solution = new SolutionStructure(currentDirectory.Parent)
                }.AsTaskResult());
            });

            //// ----------------------------------------------------------------------------------------------------------------------------
            var generateCommonAssemblyInfo = Task(
                "Generate common assembly info",
                from data in initTask
                select new GenerateAssemblyInfo(data.Solution.Src / "CommonAssemblyInfo.cs")
            {
                Attributes =
                {
                    _ => new AssemblyProductAttribute("CrystalQuartz"),
                    _ => new AssemblyVersionAttribute(data.Version),
                    _ => new AssemblyFileVersionAttribute(data.Version)
                }
            });

            //// ----------------------------------------------------------------------------------------------------------------------------
            var compileTypescript = Task(
                "Compile TypescriptFiles",
                from data in initTask
                select new ExecTask
            {
                ToolPath  = "tsc",
                Arguments =
                    (data.Solution.CrystalQuartz_Application / "Client" / "Scripts" / "Application.ts").AsFile().GetRelativePath(WorkDirectory) + " -out " +
                    (data.Solution.CrystalQuartz_Application / "Content" / "Scripts" / "application.js").AsFile().GetRelativePath(WorkDirectory)
            });

            //// ----------------------------------------------------------------------------------------------------------------------------
            var transformIndexHtml = Task(
                "Transform intex.html template",
                from data in initTask
                select new ExecTask
            {
                ToolPath  = (data.Solution.Src / "packages").AsDirectory().Directories.Last(dir => dir.Name.StartsWith("Mono.TextTransform")) / "tools" / "TextTransform.exe",
                Arguments = data.Solution.CrystalQuartz_Application / "Content" / "index.tt"
            });

            //// ----------------------------------------------------------------------------------------------------------------------------
            var buildSolution = Task(
                "Build solution",
                new MsBuildTask(),

                DependsOn(generateCommonAssemblyInfo),
                DependsOn(compileTypescript),
                DependsOn(transformIndexHtml));

            //// ----------------------------------------------------------------------------------------------------------------------------
            var cleanArtifacts = Task(
                "Clean artifacts",
                from data in initTask
                select _ => data.Solution.Artifacts.Files.IncludeByExtension("nupkg", "nuspec").DeleteAll());

            var mergeBinaries = Task(
                "MergeBinaries",

                from data in initTask
                select new MergeBinariesTask(data.Solution, data.Configuration).AsSubflow(),

                DependsOn(buildSolution));


            var generateNuspecs = Task(
                "GenerateNuspecs",
                from data in initTask
                select new GenerateNuspecsTask(data.Solution, data.Configuration, data.Version),

                DependsOn(cleanArtifacts),
                DependsOn(mergeBinaries));

            //// ----------------------------------------------------------------------------------------------------------------------------

            var buildPackages = Task(
                "Build packages",
                from data in initTask
                select ForEach(data.Solution.Artifacts.Files.IncludeByExtension(".nuspec")).Do(
                    nuspec => new GeneratePackageTask(nuspec)
            {
                WorkDirectory = data.Solution.Artifacts,
                ToolPath      = data.Solution.Src / ".nuget" / "NuGet.exe"
            },
                    nuspec => string.Format("Generate NuGet package for {0}", nuspec.NameWithoutExtension)),

                Default(),
                DependsOn(generateNuspecs));

            //// ----------------------------------------------------------------------------------------------------------------------------

            Task(
                "PushPackages",

                from data in initTask
                select
                ForEach(data.Solution.Artifacts.Files.IncludeByExtension("nupkg")).Do(
                    package => new PushPackageTask(package)
            {
                WorkDirectory = data.Solution.Artifacts,
                ToolPath      = data.Solution.Src / ".nuget" / "NuGet.exe"
            },
                    package => "Push" + package.NameWithoutExtension),

                DependsOn(buildPackages));
        }
Ejemplo n.º 22
0
        protected override void RegisterTasks()
        {
            //// ----------------------------------------------------------------------------------------------------------------------------
            var initTask = Task(
                "Init the workflow",
                _ =>
            {
                IDirectory currentDirectory = WorkDirectory.Closest(dir => dir.Name.Equals("src", StringComparison.InvariantCultureIgnoreCase));

                if (currentDirectory == null)
                {
                    throw new Exception("Could not find Src directory");
                }

                IDirectory artifacts = currentDirectory.Parent / "Artifacts";
                artifacts.EnsureExists();

                return(new
                {
                    Root = currentDirectory.Parent,
                    Artifacts = artifacts,
                    Version = "3.1.0.0",
                    Src = currentDirectory,
                    Configuration = "Debug",
                    BuildAssets = (currentDirectory / "CrystalQuartz.Build" / "Assets").AsDirectory()
                }.AsTaskResult());
            });

            //// ----------------------------------------------------------------------------------------------------------------------------
            var generateCommonAssemblyInfo = Task(
                "Generate common assembly info",
                from data in initTask
                select new GenerateAssemblyInfo(data.Src / "CommonAssemblyInfo.cs")
            {
                Attributes =
                {
                    _ => new AssemblyProductAttribute("CrystalQuartz"),
                    _ => new AssemblyVersionAttribute(data.Version),
                    _ => new AssemblyFileVersionAttribute(data.Version)
                }
            });

            //// ----------------------------------------------------------------------------------------------------------------------------
            var compileTypescript = Task(
                "Compile TypescriptFiles",
                from data in initTask
                select new ExecTask
            {
                ToolPath  = "tsc",
                Arguments =
                    (data.Src / "CrystalQuartz.Web" / "Client" / "Scripts" / "Application.ts").AsFile().GetRelativePath(WorkDirectory) + " -out " +
                    (data.Src / "CrystalQuartz.Web" / "Content" / "Scripts" / "application.js").AsFile().GetRelativePath(WorkDirectory)
            });

            //// ----------------------------------------------------------------------------------------------------------------------------
            var transformIndexHtml = Task(
                "Transform intex.html template",
                from data in initTask
                select new ExecTask
            {
                ToolPath  = (data.Src / "packages").AsDirectory().Directories.Last(dir => dir.Name.StartsWith("Mono.TextTransform")) / "tools" / "TextTransform.exe",
                Arguments = data.Src / "CrystalQuartz.Web/Content" / "index.tt"
            });

            //// ----------------------------------------------------------------------------------------------------------------------------
            var buildSolution = Task(
                "Build solution",
                new MsBuildTask(),

                DependsOn(generateCommonAssemblyInfo),
                DependsOn(compileTypescript),
                DependsOn(transformIndexHtml));

            //// ----------------------------------------------------------------------------------------------------------------------------
            var cleanArtifacts = Task(
                "Clean artifacts",
                from data in initTask
                select _ => data.Artifacts.Files.IncludeByExtension("nupkg", "nuspec").DeleteAll());

            //// ----------------------------------------------------------------------------------------------------------------------------
            var generateSimplePackageNuspec = Task(
                "Generate simple package spec",
                from data in initTask
                select new GenerateNuGetSpecTask(data.Artifacts / "CrystalQuartz.Simple.nuspec")
                .Id("CrystalQuartz.Simple")
                .FillCommonProperties(data.Root / "bin" / data.Configuration, data.Version)
                .Description("Installs CrystalQuartz panel (pluggable Qurtz.NET viewer) using simple scheduler provider. This approach is appropriate for scenarios where the scheduler and a web application works in the same AppDomain.")
                .WithFiles((data.BuildAssets / "Simple").AsDirectory().Files, "content"),

                DependsOn(cleanArtifacts),
                DependsOn(buildSolution));

            //// ----------------------------------------------------------------------------------------------------------------------------
            var generateRemotePackageNuspec = Task(
                "Generate remote package spec",
                from data in initTask
                select new GenerateNuGetSpecTask(data.Artifacts / "CrystalQuartz.Remote.nuspec")
                .Id("CrystalQuartz.Remote")
                .FillCommonProperties(data.Root / "bin" / data.Configuration, data.Version)
                .Description("Installs CrystalQuartz panel (pluggable Qurtz.NET viewer) using remote scheduler provider. Note that you should set remote scheduler URI after the installation.")
                .WithFiles(data.BuildAssets.GetDirectory("Remote").Files, "content"),

                DependsOn(generateSimplePackageNuspec));

            //// ----------------------------------------------------------------------------------------------------------------------------
            var buildPackages = Task(
                "Build packages",
                from data in initTask
                select ForEach(data.Artifacts.Files.IncludeByExtension(".nuspec")).Do(
                    nuspec => new GeneratePackageTask(nuspec)
            {
                WorkDirectory = data.Artifacts,
                ToolPath      = data.Src / ".nuget" / "NuGet.exe"
            },
                    nuspec => string.Format("Generate NuGet package for {0}", nuspec.NameWithoutExtension)),

                Default(),
                DependsOn(generateRemotePackageNuspec),
                DependsOn(generateSimplePackageNuspec));
        }
Ejemplo n.º 23
0
        protected override void RegisterTasks()
        {
            //// ----------------------------------------------------------------------------------------------------------------------------
            var initTask = Task(
                "Init the workflow",
                context =>
            {
                IDirectory currentDirectory = WorkDirectory.Closest(dir => dir.Name.Equals("src", StringComparison.InvariantCultureIgnoreCase));

                if (currentDirectory == null)
                {
                    throw new Exception("Could not find Src directory " + WorkDirectory);
                }

                IDirectory artifacts = currentDirectory.Parent / "Artifacts";
                artifacts.EnsureExists();
                artifacts.Files.IncludeByExtension("nupkg", "nuspec").DeleteAll();

                IDirectory mergedBin = currentDirectory.Parent / "bin" / "Merged";
                mergedBin.EnsureExists();

                var solutionStructure = new SolutionStructure(currentDirectory.Parent);

                IFile versionNumberFile = solutionStructure.Src / "version.txt";

                return(new
                {
                    Version = versionNumberFile.Exists ? versionNumberFile.ReadAllText().Trim() : "1.0.0.0",
                    Configuration = "Release",
                    Solution = solutionStructure,
                    SkipCoreProject = context.Environment.IsMono
                }.AsTaskResult());
            });

            //// ----------------------------------------------------------------------------------------------------------------------------

            var generateCommonAssemblyInfo = Task(
                "Generate common assembly info",
                from data in initTask
                select new GenerateAssemblyInfo(data.Solution.Src / "CommonAssemblyInfo.cs")
            {
                Attributes =
                {
                    _ => new AssemblyProductAttribute("CrystalQuartz"),
                    _ => new AssemblyVersionAttribute(data.Version),
                    _ => new AssemblyFileVersionAttribute(data.Version)
                }
            });

            //// ----------------------------------------------------------------------------------------------------------------------------

            var buildClient = Task(
                "BuildClient",
                from data in initTask
                select new CompileClientAssets(data.Solution, data.Version).AsSubflow());

            //// ----------------------------------------------------------------------------------------------------------------------------

            var copyGhPagesAssets = Task(
                "CopyAssetsToGhPagesArtifacts",
                from data in initTask
                select c =>
            {
                (data.Solution.Root / "_gh-pages-assets").AsDirectory().SearchFilesRecursively().CopyRelativelyTo(data.Solution.Artifacts / "gh-pages");
            });

            //// ----------------------------------------------------------------------------------------------------------------------------

            var restoreNugetPackages = Task(
                "RestoreNugetPackages",
                from data in initTask
                select new ExecTask
            {
                ToolPath  = data.Solution.Src / ".nuget" / "NuGet.exe",
                Arguments = "restore " + (data.Solution.Src / "CrystalQuartz.sln").AsFile().AbsolutePath + " -Verbosity quiet"
            }.AsTask());

            //// ----------------------------------------------------------------------------------------------------------------------------

            var buildSolution = Task(
                "Build solution",
                from data in initTask
                select new CustomMsBuildTask
            {
                ProjectFile = data.Solution.Src / "CrystalQuartz.sln",
                Switches    =
                {
                    MsBuildSwitch.Configuration(data.Configuration),
                    MsBuildSwitch.VerbosityQuiet()
                }
            }

                .AsTask(),

                DependsOn(restoreNugetPackages),
                DependsOn(generateCommonAssemblyInfo),
                DependsOn(buildClient));

            //// ----------------------------------------------------------------------------------------------------------------------------

            var buildCoreSolution = Task(
                "Build Core projects",
                from data in initTask
                select new ExecTask
            {
                ToolPath  = "dotnet",
                Arguments = "build " + (data.Solution.Src / "CrystalQuartz.AspNetCore" / "CrystalQuartz.AspNetCore.csproj") + " --verbosity quiet --configuration " + data.Configuration
            }

                .AsTask(),

                DependsOn(buildSolution),
                DependsOn(restoreNugetPackages),
                DependsOn(generateCommonAssemblyInfo),
                DependsOn(buildClient));

            //// ----------------------------------------------------------------------------------------------------------------------------

            var cleanArtifacts = Task(
                "Clean artifacts",
                from data in initTask
                select _ => data.Solution.Artifacts.Files.IncludeByExtension("nupkg", "nuspec").DeleteAll());

            //// ----------------------------------------------------------------------------------------------------------------------------

            var mergeBinaries = Task(
                "MergeBinaries",

                from data in initTask
                select new MergeBinariesTask(data.Solution, data.Configuration, data.SkipCoreProject).AsSubflow(),

                DependsOn(buildSolution),
                DependsOn(buildCoreSolution));

            //// ----------------------------------------------------------------------------------------------------------------------------

            var generateNuspecs = Task(
                "GenerateNuspecs",
                from data in initTask
                select new GenerateNuspecsTask(data.Solution, data.Configuration, data.Version + "-beta", data.SkipCoreProject),

                DependsOn(cleanArtifacts),
                DependsOn(mergeBinaries));

            //// ----------------------------------------------------------------------------------------------------------------------------

            var buildPackages = Task(
                "BuildPackages",
                from data in initTask
                select ForEach(data.Solution.Artifacts.Files.IncludeByExtension(".nuspec")).Do(
                    nuspec => new GeneratePackageTask(nuspec)
            {
                WorkDirectory = data.Solution.Artifacts,
                ToolPath      = data.Solution.Src / ".nuget" / "NuGet.exe"
            },
                    nuspec => string.Format("Generate NuGet package for {0}", nuspec.NameWithoutExtension)),

                DependsOn(generateNuspecs));

            //// ----------------------------------------------------------------------------------------------------------------------------

            var buildDocs = Task(
                "BuildDocs",
                from data in initTask
                select new CompileDocsTask(data.Solution, data.Version).AsSubflow(),

                DependsOn(buildClient));

            //// ----------------------------------------------------------------------------------------------------------------------------

            Task(
                "DevBuild",
                () => { },

                Default(),
                DependsOn(buildClient),
                DependsOn(buildPackages),
                DependsOn(copyGhPagesAssets),
                DependsOn(buildDocs));

            //// ----------------------------------------------------------------------------------------------------------------------------
            ///
            Task(
                "CiBuild",
                () => { },

                DependsOn(buildPackages),
                DependsOn(copyGhPagesAssets),
                DependsOn(buildDocs));

            //// ----------------------------------------------------------------------------------------------------------------------------

            Task(
                "PushPackages",

                from data in initTask
                select
                ForEach(data.Solution.Artifacts.Files.IncludeByExtension("nupkg")).Do(
                    package => new ExecTask
            {
                WorkDirectory = data.Solution.Artifacts,
                ToolPath      = data.Solution.Src / ".nuget" / "NuGet.exe",
                Arguments     = "push " + package.AbsolutePath + " -Source https://api.nuget.org/v3/index.json -NonInteractive"
            },
                    package => "Push" + package.NameWithoutExtension),

                DependsOn(buildPackages));
        }
Ejemplo n.º 24
0
    private WorkDirectory CreateWorkDir()
    {
        var unitTestProjectDir = FileIO.FindContainerDirToAncestor("*.csproj");

        return(WorkDirectory.CreateCopyFrom(Path.Combine(unitTestProjectDir, "Project"), predicate: item => item.Name is not "obj" and not "bin"));
    }