From 42b884a6dce65b1e81e230646239bc5583d73eea Mon Sep 17 00:00:00 2001 From: wwwlicious <773dcf03@opayq.com> Date: Sat, 28 Apr 2018 18:31:57 +0100 Subject: [PATCH] updating build --- .appveyor.yml | 33 ++++++ GitReleaseManager.yaml | 12 +++ build.ps1 | 228 ++++++++++++++++++++++++++++------------- cake.config | 15 +++ setup.cake | 23 +++++ 5 files changed, 240 insertions(+), 71 deletions(-) create mode 100644 .appveyor.yml create mode 100644 GitReleaseManager.yaml create mode 100644 cake.config create mode 100644 setup.cake diff --git a/.appveyor.yml b/.appveyor.yml new file mode 100644 index 0000000..d4e566e --- /dev/null +++ b/.appveyor.yml @@ -0,0 +1,33 @@ +#---------------------------------# +# Build Script # +#---------------------------------# +build_script: + - ps: .\build.ps1 -Target AppVeyor + +# Tests +test: off + +#---------------------------------# +# Branches to build # +#---------------------------------# +branches: + # Whitelist + only: + - develop + - master + - /release/.*/ + - /hotfix/.*/ + +#---------------------------------# +# Build Cache # +#---------------------------------# +cache: +- src\packages -> src\**\packages.config +- tools -> setup.cake + +#---------------------------------# +# environment configuration # +#---------------------------------# + +# Build worker image (VM template) +image: Visual Studio 2017 diff --git a/GitReleaseManager.yaml b/GitReleaseManager.yaml new file mode 100644 index 0000000..549284a --- /dev/null +++ b/GitReleaseManager.yaml @@ -0,0 +1,12 @@ +issue-labels-include: +- Breaking change +- Feature +- Bug +- Improvement +- Documentation +issue-labels-exclude: +- Build +issue-labels-alias: + - name: Documentation + header: Documentation +plural: Documentation diff --git a/build.ps1 b/build.ps1 index 98fca9f..0ec3f2a 100644 --- a/build.ps1 +++ b/build.ps1 @@ -1,98 +1,184 @@ -param( - [String] $majorMinor = "0.0", # 2.0 - [String] $patch = "0", # $env:APPVEYOR_BUILD_VERSION - [String] $customLogger = "", # C:\Program Files\AppVeyor\BuildAgent\Appveyor.MSBuildLogger.dll - [Switch] $notouch, - [String] $sln # e.g servicestack-seq-requestlogsfeature +########################################################################## +# This is the Cake bootstrapper script for PowerShell. +# This file was downloaded from https://github.com/cake-build/resources +# Feel free to change this file to fit your needs. +########################################################################## + +<# +.SYNOPSIS +This is a Powershell script to bootstrap a Cake build. +.DESCRIPTION +This Powershell script will download NuGet if missing, restore NuGet tools (including Cake) +and execute your Cake build script with the parameters you provide. +.PARAMETER Script +The build script to execute. +.PARAMETER Target +The build script target to run. +.PARAMETER Configuration +The build configuration to use. +.PARAMETER Verbosity +Specifies the amount of information to be displayed. +.PARAMETER Experimental +Tells Cake to use the latest Roslyn release. +.PARAMETER WhatIf +Performs a dry run of the build script. +No tasks will be executed. +.PARAMETER Mono +Tells Cake to use the Mono scripting engine. +.PARAMETER SkipToolPackageRestore +Skips restoring of packages. +.PARAMETER ScriptArgs +Remaining arguments are added here. +.LINK +http://cakebuild.net +#> + +[CmdletBinding()] +Param( + [string]$Script = "setup.cake", + [string]$Target = "Default", + [ValidateSet("Release", "Debug")] + [string]$Configuration = "Release", + [ValidateSet("Quiet", "Minimal", "Normal", "Verbose", "Diagnostic")] + [string]$Verbosity = "Verbose", + [switch]$Experimental, + [Alias("DryRun","Noop")] + [switch]$WhatIf, + [switch]$Mono, + [switch]$SkipToolPackageRestore, + [Parameter(Position=0,Mandatory=$false,ValueFromRemainingArguments=$true)] + [string[]]$ScriptArgs ) -function Set-AssemblyVersions($informational, $assembly) +[Reflection.Assembly]::LoadWithPartialName("System.Security") | Out-Null +function MD5HashFile([string] $filePath) { - (Get-Content assets/GlobalAssemblyInfo.cs) | - ForEach-Object { $_ -replace """1.0.0.0""", """$assembly""" } | - ForEach-Object { $_ -replace """1.0.0""", """$informational""" } | - ForEach-Object { $_ -replace """1.1.1.1""", """$($informational).0""" } | - Set-Content assets/GlobalAssemblyInfo.cs -} - -function Install-NuGetPackages($solution) -{ - nuget restore $solution -} - -function Install-Nuget() { - if(-not(Test-Path alias:nuget)){ - $sourceNugetExe = "http://nuget.org/nuget.exe" - $targetNugetExe = "assets/nuget.exe" - if(-not (Test-Path($targetNugetExe))) { - Invoke-WebRequest $sourceNugetExe -OutFile $targetNugetExe + if ([string]::IsNullOrEmpty($filePath) -or !(Test-Path $filePath -PathType Leaf)) + { + return $null } - Set-Alias nuget $targetNugetExe -Scope Global -Verbose - } -} -function Invoke-MSBuild($solution, $customLogger) -{ - if ($customLogger) + [System.IO.Stream] $file = $null; + [System.Security.Cryptography.MD5] $md5 = $null; + try { - msbuild "$solution" /verbosity:minimal /p:Configuration=Release /logger:"$customLogger" + $md5 = [System.Security.Cryptography.MD5]::Create() + $file = [System.IO.File]::OpenRead($filePath) + return [System.BitConverter]::ToString($md5.ComputeHash($file)) } - else + finally { - msbuild "$solution" /verbosity:minimal /p:Configuration=Release + if ($file -ne $null) + { + $file.Dispose() + } } } -function Invoke-NuGetPackProj($csproj) -{ - nuget pack -Prop Configuration=Release -Symbols $csproj +Write-Host "Preparing to run build script..." + +if(!$PSScriptRoot){ + $PSScriptRoot = Split-Path $MyInvocation.MyCommand.Path -Parent } -function Invoke-NuGetPackSpec($nuspec, $version) -{ - nuget pack $nuspec -Version $version -OutputDirectory ..\..\ +$TOOLS_DIR = Join-Path $PSScriptRoot "tools" +$NUGET_EXE = Join-Path $TOOLS_DIR "nuget.exe" +$CAKE_EXE = Join-Path $TOOLS_DIR "Cake/Cake.exe" +$NUGET_URL = "https://dist.nuget.org/win-x86-commandline/latest/nuget.exe" +$PACKAGES_CONFIG = Join-Path $TOOLS_DIR "packages.config" +$PACKAGES_CONFIG_MD5 = Join-Path $TOOLS_DIR "packages.config.md5sum" + +# Should we use mono? +$UseMono = ""; +if($Mono.IsPresent) { + Write-Verbose -Message "Using the Mono based scripting engine." + $UseMono = "-mono" } -function Invoke-NuGetPack($version) -{ - ls src/**/*.csproj | - Where-Object { -not ($_.Name -like "*net40*") } | - ForEach-Object { Invoke-NuGetPackProj $_ } +# Should we use the new Roslyn? +$UseExperimental = ""; +if($Experimental.IsPresent -and !($Mono.IsPresent)) { + Write-Verbose -Message "Using experimental version of Roslyn." + $UseExperimental = "-experimental" } -function Invoke-Build($majorMinor, $patch, $customLogger, $notouch, $sln) -{ - $package="$majorMinor.$patch" - $slnfile = "$sln.sln" +# Is this a dry run? +$UseDryRun = ""; +if($WhatIf.IsPresent) { + $UseDryRun = "-dryrun" +} + +# Make sure tools folder exists +if ((Test-Path $PSScriptRoot) -and !(Test-Path $TOOLS_DIR)) { + Write-Verbose -Message "Creating tools directory..." + New-Item -Path $TOOLS_DIR -Type directory | out-null +} - Write-Output "solution: $sln version: $package" +# Make sure that packages.config exist. +if (!(Test-Path $PACKAGES_CONFIG)) { + Write-Verbose -Message "Downloading packages.config..." + try { (New-Object System.Net.WebClient).DownloadFile("http://cakebuild.net/download/bootstrapper/packages", $PACKAGES_CONFIG) } catch { + Throw "Could not download packages.config." + } +} - if (-not $notouch) - { - $assembly = "$majorMinor.0.0" +# Try find NuGet.exe in path if not exists +if (!(Test-Path $NUGET_EXE)) { + Write-Verbose -Message "Trying to find nuget.exe in PATH..." + $existingPaths = $Env:Path -Split ';' | Where-Object { (![string]::IsNullOrEmpty($_)) -and (Test-Path $_) } + $NUGET_EXE_IN_PATH = Get-ChildItem -Path $existingPaths -Filter "nuget.exe" | Select -First 1 + if ($NUGET_EXE_IN_PATH -ne $null -and (Test-Path $NUGET_EXE_IN_PATH.FullName)) { + Write-Verbose -Message "Found in PATH at $($NUGET_EXE_IN_PATH.FullName)." + $NUGET_EXE = $NUGET_EXE_IN_PATH.FullName + } +} - Write-Output "Assembly version will be set to $assembly" - Set-AssemblyVersions $package $assembly +# Try download NuGet.exe if not exists +if (!(Test-Path $NUGET_EXE)) { + Write-Verbose -Message "Downloading NuGet.exe..." + try { + (New-Object System.Net.WebClient).DownloadFile($NUGET_URL, $NUGET_EXE) + } catch { + Throw "Could not download NuGet.exe." } - - Install-Nuget - - Install-NuGetPackages $slnfile - - Invoke-MSBuild $slnfile $customLogger - - Invoke-NuGetPack $package } -$ErrorActionPreference = "Stop" +# Save nuget.exe path to environment to be available to child processed +$ENV:NUGET_EXE = $NUGET_EXE -if (-not $sln) -{ - $slnfull = ls *.sln | - Where-Object { -not ($_.Name -like "*net40*") } | - Select -first 1 +# Restore tools from NuGet? +if(-Not $SkipToolPackageRestore.IsPresent) { + Push-Location + Set-Location $TOOLS_DIR + + # Check for changes in packages.config and remove installed tools if true. + [string] $md5Hash = MD5HashFile($PACKAGES_CONFIG) + if((!(Test-Path $PACKAGES_CONFIG_MD5)) -Or + ($md5Hash -ne (Get-Content $PACKAGES_CONFIG_MD5 ))) { + Write-Verbose -Message "Missing or changed package.config hash..." + Remove-Item * -Recurse -Exclude packages.config,nuget.exe + } + + Write-Verbose -Message "Restoring tools from NuGet..." + $NuGetOutput = Invoke-Expression "&`"$NUGET_EXE`" install -ExcludeVersion -PreRelease -OutputDirectory `"$TOOLS_DIR`" -Source https://www.myget.org/F/cake/api/v3/index.json" + + if ($LASTEXITCODE -ne 0) { + Throw "An error occured while restoring NuGet tools." + } + else + { + $md5Hash | Out-File $PACKAGES_CONFIG_MD5 -Encoding "ASCII" + } + Write-Verbose -Message ($NuGetOutput | out-string) + Pop-Location +} - $sln = $slnfull.BaseName +# Make sure that Cake has been installed. +if (!(Test-Path $CAKE_EXE)) { + Throw "Could not find Cake.exe at $CAKE_EXE" } -Invoke-Build $majorMinor $patch $customLogger $notouch $sln \ No newline at end of file +# Start Cake +Write-Host "Running build script..." +Invoke-Expression "& `"$CAKE_EXE`" `"$Script`" -target=`"$Target`" -configuration=`"$Configuration`" -verbosity=`"$Verbosity`" $UseMono $UseDryRun $UseExperimental $ScriptArgs" +exit $LASTEXITCODE diff --git a/cake.config b/cake.config new file mode 100644 index 0000000..c3cd647 --- /dev/null +++ b/cake.config @@ -0,0 +1,15 @@ +; This is the default configuration file for Cake. +; This file was downloaded from https://github.com/cake-build/resources + +[Nuget] +Source=https://api.nuget.org/v3/index.json +UseInProcessClient=true +LoadDependencies=false + +[Paths] +Tools=./tools +Addins=./tools/Addins +Modules=./tools/Modules + +[Settings] +SkipVerification=true diff --git a/setup.cake b/setup.cake new file mode 100644 index 0000000..57ebbd5 --- /dev/null +++ b/setup.cake @@ -0,0 +1,23 @@ +#load nuget:https://www.myget.org/F/cake-contrib/api/v2?package=Cake.Recipe&prerelease + +Environment.SetVariableNames(); + +BuildParameters.SetParameters(context: Context, + buildSystem: BuildSystem, + sourceDirectoryPath: "./src", + title: "Servicestack.Seq.Requestlogsfeature", + repositoryOwner: "wwwlicious", + repositoryName: "servicestack-seq-requestlogsfeature", + shouldRunCodecov: false, + shouldPostToGitter: false, + shouldPostToMicrosoftTeams: false, + shouldPostToSlack: false, + shouldPostToTwitter: false, + shouldRunDupFinder: false, + shouldGenerateDocumentation: false, // until wyam oin recipe is fixed + appVeyorAccountName: "wwwlicious"); + +BuildParameters.PrintParameters(Context); +ToolSettings.SetToolSettings(context: Context); + +Build.RunDotNetCore();