#tool "nuget:?package=GitVersion.CommandLine&version=4.0.0" #addin nuget:?package=SharpZipLib&version=1.1.0 #addin nuget:?package=Cake.Compression&version=0.2.2 #addin "Cake.Incubator&version=3.1.0" #addin nuget:?package=Cake.Yarn&version=0.4.5 #addin "Cake.Powershell" ////////////////////////////////////////////////////////////////////// // ARGUMENTS ////////////////////////////////////////////////////////////////////// var target = Argument("target", "Default"); var configuration = Argument("configuration", "Release"); ////////////////////////////////////////////////////////////////////// // PREPARATION ////////////////////////////////////////////////////////////////////// var buildDir = "./src/Ombi/bin/" + configuration; var nodeModulesDir ="./src/Ombi/ClientApp/node_modules/"; var wwwRootDistDir = "./src/Ombi/wwwroot/dist/"; var projDir = "./src/"; // Project Directory var webProjDir = "./src/Ombi"; var uiProjectDir = "./src/Ombi/ClientApp"; var csProj = "./src/Ombi/Ombi.csproj"; // Path to the project.csproj var solutionFile = "Ombi.sln"; // Solution file if needed GitVersion versionInfo = null; var frameworkVer = "netcoreapp2.2"; var buildSettings = new DotNetCoreBuildSettings { Framework = frameworkVer, Configuration = "Release", OutputDirectory = Directory(buildDir), }; var publishSettings = new DotNetCorePublishSettings { Framework = frameworkVer, Configuration = "Release", OutputDirectory = Directory(buildDir), }; var artifactsFolder = buildDir + "/"+frameworkVer+"/"; var windowsArtifactsFolder = artifactsFolder + "win10-x64/published"; var windows32BitArtifactsFolder = artifactsFolder + "win10-x86/published"; var osxArtifactsFolder = artifactsFolder + "osx-x64/published"; var linuxArtifactsFolder = artifactsFolder + "linux-x64/published"; var linuxArmArtifactsFolder = artifactsFolder + "linux-arm/published"; var linuxArm64BitArtifactsFolder = artifactsFolder + "linux-arm64/published"; ////////////////////////////////////////////////////////////////////// // TASKS ////////////////////////////////////////////////////////////////////// Task("Clean") .Does(() => { CleanDirectory(buildDir); //CleanDirectory(nodeModulesDir); CleanDirectory(wwwRootDistDir); }); Task("SetVersionInfo") .IsDependentOn("Clean") .Does(() => { var settings = new GitVersionSettings { RepositoryPath = ".", }; if (AppVeyor.IsRunningOnAppVeyor) { settings.Branch = AppVeyor.Environment.Repository.Branch; } else { settings.Branch = "master"; } versionInfo = GitVersion(settings); // Information("GitResults -> {0}", versionInfo.Dump()); //Information(@"Build:{0}",AppVeyor.Environment.Build.Dump()); var buildVersion = string.Empty; if(string.IsNullOrEmpty(AppVeyor.Environment.Build.Version)) { buildVersion = "3.0.000"; } else{ buildVersion = AppVeyor.Environment.Build.Version; } if(versionInfo.BranchName.Contains("_")) { versionInfo.BranchName = versionInfo.BranchName.Replace("_","-"); } var fullVer = buildVersion + "-" + versionInfo.BranchName; if(versionInfo.PreReleaseTag.Contains("PullRequest")) { fullVer = buildVersion + "-PR"; } if(fullVer.Contains("_")) { fullVer = fullVer.Replace("_",""); } if(fullVer.Contains("/")) { fullVer = fullVer.Replace("/",""); } buildSettings.ArgumentCustomization = args => args.Append("/p:SemVer=" + versionInfo.AssemblySemVer); buildSettings.ArgumentCustomization = args => args.Append("/p:FullVer=" + fullVer); publishSettings.ArgumentCustomization = args => args.Append("/p:SemVer=" + versionInfo.AssemblySemVer); publishSettings.ArgumentCustomization = args => args.Append("/p:FullVer=" + fullVer); //buildSettings.VersionSuffix = versionInfo.BranchName; //publishSettings.VersionSuffix = versionInfo.BranchName; }); Task("NPM") .Does(() => { Yarn.FromPath(uiProjectDir).Install(); }); Task("Gulp Publish") .IsDependentOn("NPM") .Does(() => { Yarn.FromPath(uiProjectDir).RunScript("build"); }); Task("TSLint") .Does(() => { //Yarn.FromPath(uiProjectDir).RunScript("lint"); }); Task("PrePublish") .IsDependentOn("SetVersionInfo") .IsDependentOn("Gulp Publish") .IsDependentOn("TSLint"); Task("Package") .Does(() => { Zip(windowsArtifactsFolder +"/",artifactsFolder + "windows.zip"); Zip(windows32BitArtifactsFolder +"/",artifactsFolder + "windows-32bit.zip"); GZipCompress(osxArtifactsFolder, artifactsFolder + "osx.tar.gz"); GZipCompress(linuxArtifactsFolder, artifactsFolder + "linux.tar.gz"); GZipCompress(linuxArmArtifactsFolder, artifactsFolder + "linux-arm.tar.gz"); GZipCompress(linuxArm64BitArtifactsFolder, artifactsFolder + "linux-arm64.tar.gz"); }); Task("Publish") .IsDependentOn("Run-Unit-Tests") .IsDependentOn("PrePublish") .IsDependentOn("Publish-Windows") .IsDependentOn("Publish-Windows-32bit") .IsDependentOn("Publish-OSX") .IsDependentOn("Publish-Linux") .IsDependentOn("Publish-Linux-ARM") .IsDependentOn("Publish-Linux-ARM-64Bit") .IsDependentOn("Package"); Task("Publish-Windows") .Does(() => { publishSettings.Runtime = "win10-x64"; publishSettings.OutputDirectory = Directory(buildDir) + Directory(frameworkVer +"/win10-x64/published"); DotNetCorePublish("./src/Ombi/Ombi.csproj", publishSettings); CopyFile(buildDir + "/"+frameworkVer+"/win10-x64/Swagger.xml", buildDir + "/"+frameworkVer+"/win10-x64/published/Swagger.xml"); publishSettings.OutputDirectory = Directory(buildDir) + Directory(frameworkVer +"/win10-x64/published/updater"); DotNetCorePublish("./src/Ombi.Updater/Ombi.Updater.csproj", publishSettings); }); Task("Publish-Windows-32bit") .Does(() => { publishSettings.Runtime = "win10-x86"; publishSettings.OutputDirectory = Directory(buildDir) + Directory(frameworkVer+"/win10-x86/published"); DotNetCorePublish("./src/Ombi/Ombi.csproj", publishSettings); CopyFile(buildDir + "/"+frameworkVer+"/win10-x86/Swagger.xml", buildDir + "/"+frameworkVer+"/win10-x86/published/Swagger.xml"); publishSettings.OutputDirectory = Directory(buildDir) + Directory(frameworkVer +"/win10-x86/published/updater"); DotNetCorePublish("./src/Ombi.Updater/Ombi.Updater.csproj", publishSettings); }); Task("Publish-OSX") .Does(() => { publishSettings.Runtime = "osx-x64"; publishSettings.OutputDirectory = Directory(buildDir) + Directory(frameworkVer+"/osx-x64/published"); DotNetCorePublish("./src/Ombi/Ombi.csproj", publishSettings); CopyFile(buildDir + "/"+frameworkVer+"/osx-x64/Swagger.xml", buildDir + "/"+frameworkVer+"/osx-x64/published/Swagger.xml"); publishSettings.OutputDirectory = Directory(buildDir) + Directory(frameworkVer +"/osx-x64/published/updater"); DotNetCorePublish("./src/Ombi.Updater/Ombi.Updater.csproj", publishSettings); }); Task("Publish-Linux") .Does(() => { publishSettings.Runtime = "linux-x64"; publishSettings.OutputDirectory = Directory(buildDir) + Directory(frameworkVer+"/linux-x64/published"); DotNetCorePublish("./src/Ombi/Ombi.csproj", publishSettings); CopyFile(buildDir + "/"+frameworkVer+"/linux-x64/Swagger.xml", buildDir + "/"+frameworkVer+"/linux-x64/published/Swagger.xml"); publishSettings.OutputDirectory = Directory(buildDir) + Directory(frameworkVer +"/linux-x64/published/updater"); DotNetCorePublish("./src/Ombi.Updater/Ombi.Updater.csproj", publishSettings); }); Task("Publish-Linux-ARM") .Does(() => { publishSettings.Runtime = "linux-arm"; publishSettings.OutputDirectory = Directory(buildDir) + Directory(frameworkVer+"/linux-arm/published"); DotNetCorePublish("./src/Ombi/Ombi.csproj", publishSettings); CopyFile( buildDir + "/"+frameworkVer+"/linux-arm/Swagger.xml", buildDir + "/"+frameworkVer+"/linux-arm/published/Swagger.xml"); publishSettings.OutputDirectory = Directory(buildDir) + Directory(frameworkVer +"/linux-arm/published/updater"); DotNetCorePublish("./src/Ombi.Updater/Ombi.Updater.csproj", publishSettings); }); Task("Publish-Linux-ARM-64Bit") .Does(() => { publishSettings.Runtime = "linux-arm64"; publishSettings.OutputDirectory = Directory(buildDir) + Directory(frameworkVer+"/linux-arm64/published"); DotNetCorePublish("./src/Ombi/Ombi.csproj", publishSettings); CopyFile( buildDir + "/"+frameworkVer+"/linux-arm64/Swagger.xml", buildDir + "/"+frameworkVer+"/linux-arm64/published/Swagger.xml"); publishSettings.OutputDirectory = Directory(buildDir) + Directory(frameworkVer +"/linux-arm64/published/updater"); DotNetCorePublish("./src/Ombi.Updater/Ombi.Updater.csproj", publishSettings); }); Task("Run-Unit-Tests") .Does(() => { var settings = new DotNetCoreTestSettings { ArgumentCustomization = args => args.Append("--logger \"trx;LogFileName=Test.trx\""), Configuration = "Release" }; var projectFiles = GetFiles("./**/*Tests.csproj"); foreach(var file in projectFiles) { DotNetCoreTest(file.FullPath, settings); } var script = @" $wc = New-Object 'System.Net.WebClient' foreach ($name in Resolve-Path .\src\**\TestResults\Test*.trx) { $wc.UploadFile(""https://ci.appveyor.com/api/testresults/mstest/$($env:APPVEYOR_JOB_ID)\"", $name) } "; // Upload the results StartPowershellScript(script); }); Task("Run-Server-Build") .Does(() => { var settings = new DotNetCoreBuildSettings { Framework = frameworkVer, Configuration = "Release", OutputDirectory = Directory(buildDir) }; DotNetCoreBuild(csProj, settings); }); Task("Run-UI-Build") .IsDependentOn("PrePublish"); ////////////////////////////////////////////////////////////////////// // TASK TARGETS ////////////////////////////////////////////////////////////////////// Task("Default") .IsDependentOn("Publish"); Task("Build") .IsDependentOn("SetVersionInfo") .IsDependentOn("Run-Unit-Tests") .IsDependentOn("Run-Server-Build"); // .IsDependentOn("Run-UI-Build"); ////////////////////////////////////////////////////////////////////// // EXECUTION ////////////////////////////////////////////////////////////////////// RunTarget(target);