diff --git a/.appveyor.yml b/.appveyor.yml index 877eb1c..9a8e52c 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -1,7 +1,7 @@ #---------------------------------# # Build Image # #---------------------------------# -image: Visual Studio 2019 +image: Visual Studio 2022 #---------------------------------# # Build Script # @@ -11,7 +11,7 @@ install: - ps: nuget update -self build_script: - - ps: .\build.ps1 -Target AppVeyor + - ps: .\build.ps1 --target=CI # Tests test: off diff --git a/.config/dotnet-tools.json b/.config/dotnet-tools.json new file mode 100644 index 0000000..4903ba5 --- /dev/null +++ b/.config/dotnet-tools.json @@ -0,0 +1,12 @@ +{ + "version": 1, + "isRoot": true, + "tools": { + "cake.tool": { + "version": "1.3.0", + "commands": [ + "dotnet-cake" + ] + } + } +} \ No newline at end of file diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 30b962e..409c718 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -9,10 +9,10 @@ updates: ignore: - dependency-name: Cake.Core versions: - - "> 1.0.0, < 2" + - "(,3.0)" - dependency-name: Cake.Testing versions: - - "> 1.0.0, < 2" + - "(,3.0)" - dependency-name: Cake.Issues versions: - "> 1.0.0, < 2" diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 4b4e616..1befa5a 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -10,40 +10,139 @@ pr: - hotfix/* jobs: -- job: Windows +# Build +- job: Build pool: - vmImage: 'vs2017-win2016' + vmImage: 'windows-2022' steps: - - powershell: | - $ENV:CAKE_SKIP_GITVERSION=([string]::IsNullOrEmpty($ENV:SYSTEM_PULLREQUEST_PULLREQUESTID) -eq $False).ToString() - .\build.ps1 -target Buildserver - exit $LASTEXITCODE - displayName: 'Cake Build' -- job: macOS + - powershell: ./build.ps1 + displayName: 'Build' + - publish: $(Build.SourcesDirectory)/BuildArtifacts/Packages/NuGet + artifact: NuGet Package + displayName: 'Publish NuGet package as build artifact' +# Integration Tests Windows Server 2019 (.NET Core tool) +- job: Test_Windows_2019_DotNetCoreTool + displayName: Integration Tests Windows Server 2019 (.NET Core tool) + dependsOn: Build pool: - vmImage: 'macOS-10.14' + vmImage: 'windows-2019' steps: - # To manually select a Xamarin SDK version on the Hosted macOS agent, enable this script with the SDK version you want to target - # https://go.microsoft.com/fwlink/?linkid=871629 - - bash: | - sudo $AGENT_HOMEDIRECTORY/scripts/select-xamarin-sdk.sh 5_18_1 - displayName: 'Select Mono 5.18.1' - - bash: | - ./build.sh --target Buildserver - displayName: 'Cake Build' -- job: Ubuntu + - download: current + artifact: NuGet Package + displayName: 'Download build artifact' + - task: CopyFiles@2 + inputs: + sourceFolder: $(Pipeline.Workspace)/NuGet Package + targetFolder: $(Build.SourcesDirectory)/BuildArtifacts/Packages/NuGet + displayName: 'Copy build artifact for test run' + - powershell: ./build.ps1 + workingDirectory: ./tests/script-runner/ + displayName: 'Run integration tests' + - publish: $(Build.SourcesDirectory)/BuildArtifacts/TestResults/Integration + artifact: Integration Tests Windows Server 2019 (.NET Core tool) + displayName: 'Publish generated reports as build artifact' +# Integration Tests Windows Server 2022 (.NET Core tool) +- job: Test_Windows_2022_DotNetCoreTool + displayName: Integration Tests Windows Server 2022 (.NET Core tool) + dependsOn: Build pool: - vmImage: 'ubuntu-16.04' + vmImage: 'windows-2022' steps: - # Use Mono 6.6.0 until Cake.Recipe is compatible with Cake 0.37.0 which fixes this issue - - bash: | - sudo apt-get remove mono-complete mono-devel mono-gac mono-runtime-common monodoc-manual \ - && sudo apt-get autoremove \ - && echo "deb https://download.mono-project.com/repo/ubuntu stable-xenial/snapshots/6.6.0.161 main" | sudo tee /etc/apt/sources.list.d/mono-official-stable.list \ - && sudo apt-get update \ - && sudo apt-get install -y --no-install-recommends mono-complete \ - && mono --version - displayName: 'Downgrade Mono to 6.6.0' - - bash: | - ./build.sh --verbosity diagnostic - displayName: 'Cake Build' \ No newline at end of file + - download: current + artifact: NuGet Package + displayName: 'Download build artifact' + - task: CopyFiles@2 + inputs: + sourceFolder: $(Pipeline.Workspace)/NuGet Package + targetFolder: $(Build.SourcesDirectory)/BuildArtifacts/Packages/NuGet + displayName: 'Copy build artifact for test run' + - powershell: ./build.ps1 + workingDirectory: ./tests/script-runner/ + displayName: 'Run integration tests' + - publish: $(Build.SourcesDirectory)/BuildArtifacts/TestResults/Integration + artifact: Integration Tests Windows Server 2022 (.NET Core tool) + displayName: 'Publish generated reports as build artifact' +# Integration Tests macOS 11 (.NET Core tool) +- job: Test_macOS_11_DotNetCoreTool + displayName: Integration Tests macOS 11 (.NET Core tool) + dependsOn: Build + pool: + vmImage: 'macOS-11' + steps: + - download: current + artifact: NuGet Package + displayName: 'Download build artifact' + - task: CopyFiles@2 + inputs: + sourceFolder: $(Pipeline.Workspace)/NuGet Package + targetFolder: $(Build.SourcesDirectory)/BuildArtifacts/Packages/NuGet + displayName: 'Copy build artifact for test run' + - bash: ./build.sh + workingDirectory: ./tests/script-runner/ + displayName: 'Run integration tests' + - publish: $(Build.SourcesDirectory)/BuildArtifacts/TestResults/Integration + artifact: Integration Tests macOS 11 (.NET Core tool) + displayName: 'Publish generated reports as build artifact' +# Integration Tests macOS 12 (.NET Core tool) +- job: Test_macOS_12_DotNetCoreTool + displayName: Integration Tests macOS 12 (.NET Core tool) + dependsOn: Build + pool: + vmImage: 'macOS-12' + steps: + - download: current + artifact: NuGet Package + displayName: 'Download build artifact' + - task: CopyFiles@2 + inputs: + sourceFolder: $(Pipeline.Workspace)/NuGet Package + targetFolder: $(Build.SourcesDirectory)/BuildArtifacts/Packages/NuGet + displayName: 'Copy build artifact for test run' + - bash: ./build.sh + workingDirectory: ./tests/script-runner/ + displayName: 'Run integration tests' + - publish: $(Build.SourcesDirectory)/BuildArtifacts/TestResults/Integration + artifact: Integration Tests macOS 12 (.NET Core tool) + displayName: 'Publish generated reports as build artifact' +# Integration Tests Ubuntu 18.04 (.NET Core tool) +- job: Test_Ubuntu_18_04_DotNetCoreTool + displayName: Integration Tests Ubuntu 18.04 (.NET Core tool) + dependsOn: Build + pool: + vmImage: 'ubuntu-18.04' + steps: + - download: current + artifact: NuGet Package + displayName: 'Download build artifact' + - task: CopyFiles@2 + inputs: + sourceFolder: $(Pipeline.Workspace)/NuGet Package + targetFolder: $(Build.SourcesDirectory)/BuildArtifacts/Packages/NuGet + displayName: 'Copy build artifact for test run' + - bash: ./build.sh + workingDirectory: ./tests/script-runner/ + displayName: 'Run integration tests' + - publish: $(Build.SourcesDirectory)/BuildArtifacts/TestResults/Integration + artifact: Integration Tests Ubuntu 18.04 (.NET Core tool) + displayName: 'Publish generated reports as build artifact' +# Integration Tests Ubuntu 20.04 (.NET Core tool) +- job: Test_Ubuntu_20_04_DotNetCoreTool + displayName: Integration Tests Ubuntu 20.04 (.NET Core tool) + dependsOn: Build + pool: + vmImage: 'ubuntu-20.04' + steps: + - download: current + artifact: NuGet Package + displayName: 'Download build artifact' + - task: CopyFiles@2 + inputs: + sourceFolder: $(Pipeline.Workspace)/NuGet Package + targetFolder: $(Build.SourcesDirectory)/BuildArtifacts/Packages/NuGet + displayName: 'Copy build artifact for test run' + - bash: ./build.sh + workingDirectory: ./tests/script-runner/ + displayName: 'Run integration tests' + - publish: $(Build.SourcesDirectory)/BuildArtifacts/TestResults/Integration + artifact: Integration Tests Ubuntu 20.04 (.NET Core tool) + displayName: 'Publish generated reports as build artifact' \ No newline at end of file diff --git a/build.ps1 b/build.ps1 index faee428..0940a31 100644 --- a/build.ps1 +++ b/build.ps1 @@ -1,235 +1,15 @@ -########################################################################## -# 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. -########################################################################## +$ErrorActionPreference = 'Stop' -<# +$SCRIPT_NAME = "recipe.cake" -.SYNOPSIS -This is a Powershell script to bootstrap a Cake build. +Write-Host "Restoring .NET Core tools" +dotnet tool restore +if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } -.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. +Write-Host "Bootstrapping Cake" +dotnet cake $SCRIPT_NAME --bootstrap +if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } -.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 ShowDescription -Shows description about tasks. -.PARAMETER DryRun -Performs a dry run. -.PARAMETER Experimental -Uses the nightly builds of the Roslyn script engine. -.PARAMETER Mono -Uses the Mono Compiler rather than the Roslyn script engine. -.PARAMETER SkipToolPackageRestore -Skips restoring of packages. -.PARAMETER ScriptArgs -Remaining arguments are added here. - -.LINK -https://cakebuild.net - -#> - -[CmdletBinding()] -Param( - [string]$Script = "recipe.cake", - [string]$Target = "Default", - [ValidateSet("Release", "Debug")] - [string]$Configuration = "Release", - [ValidateSet("Quiet", "Minimal", "Normal", "Verbose", "Diagnostic")] - [string]$Verbosity = "Verbose", - [switch]$ShowDescription, - [Alias("WhatIf", "Noop")] - [switch]$DryRun, - [switch]$Experimental, - [switch]$Mono, - [switch]$SkipToolPackageRestore, - [Parameter(Position=0,Mandatory=$false,ValueFromRemainingArguments=$true)] - [string[]]$ScriptArgs -) - -[Reflection.Assembly]::LoadWithPartialName("System.Security") | Out-Null -function MD5HashFile([string] $filePath) -{ - if ([string]::IsNullOrEmpty($filePath) -or !(Test-Path $filePath -PathType Leaf)) - { - return $null - } - - [System.IO.Stream] $file = $null; - [System.Security.Cryptography.MD5] $md5 = $null; - try - { - $md5 = [System.Security.Cryptography.MD5]::Create() - $file = [System.IO.File]::OpenRead($filePath) - return [System.BitConverter]::ToString($md5.ComputeHash($file)) - } - finally - { - if ($file -ne $null) - { - $file.Dispose() - } - } -} - -function GetProxyEnabledWebClient -{ - $wc = New-Object System.Net.WebClient - $proxy = [System.Net.WebRequest]::GetSystemWebProxy() - $proxy.Credentials = [System.Net.CredentialCache]::DefaultCredentials - $wc.Proxy = $proxy - return $wc -} - -Write-Host "Preparing to run build script..." - -if(!$PSScriptRoot){ - $PSScriptRoot = Split-Path $MyInvocation.MyCommand.Path -Parent -} - -$TOOLS_DIR = Join-Path $PSScriptRoot "tools" -$ADDINS_DIR = Join-Path $TOOLS_DIR "Addins" -$MODULES_DIR = Join-Path $TOOLS_DIR "Modules" -$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" -$ADDINS_PACKAGES_CONFIG = Join-Path $ADDINS_DIR "packages.config" -$MODULES_PACKAGES_CONFIG = Join-Path $MODULES_DIR "packages.config" - -# 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 -} - -# Make sure that packages.config exist. -if (!(Test-Path $PACKAGES_CONFIG)) { - Write-Verbose -Message "Downloading packages.config..." - try { - $wc = GetProxyEnabledWebClient - $wc.DownloadFile("https://cakebuild.net/download/bootstrapper/packages", $PACKAGES_CONFIG) } catch { - Throw "Could not download packages.config." - } -} - -# 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 $_ -PathType Container) } - $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 - } -} - -# Try download NuGet.exe if not exists -if (!(Test-Path $NUGET_EXE)) { - Write-Verbose -Message "Downloading NuGet.exe..." - try { - $wc = GetProxyEnabledWebClient - $wc.DownloadFile($NUGET_URL, $NUGET_EXE) - } catch { - Throw "Could not download NuGet.exe." - } -} - -# Save nuget.exe path to environment to be available to child processed -$ENV:NUGET_EXE = $NUGET_EXE - -# 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 -OutputDirectory `"$TOOLS_DIR`"" - - if ($LASTEXITCODE -ne 0) { - Throw "An error occurred while restoring NuGet tools." - } - else - { - $md5Hash | Out-File $PACKAGES_CONFIG_MD5 -Encoding "ASCII" - } - Write-Verbose -Message ($NuGetOutput | out-string) - - Pop-Location -} - -# Restore addins from NuGet -if (Test-Path $ADDINS_PACKAGES_CONFIG) { - Push-Location - Set-Location $ADDINS_DIR - - Write-Verbose -Message "Restoring addins from NuGet..." - $NuGetOutput = Invoke-Expression "&`"$NUGET_EXE`" install -ExcludeVersion -OutputDirectory `"$ADDINS_DIR`"" - - if ($LASTEXITCODE -ne 0) { - Throw "An error occurred while restoring NuGet addins." - } - - Write-Verbose -Message ($NuGetOutput | out-string) - - Pop-Location -} - -# Restore modules from NuGet -if (Test-Path $MODULES_PACKAGES_CONFIG) { - Push-Location - Set-Location $MODULES_DIR - - Write-Verbose -Message "Restoring modules from NuGet..." - $NuGetOutput = Invoke-Expression "&`"$NUGET_EXE`" install -ExcludeVersion -OutputDirectory `"$MODULES_DIR`"" - - if ($LASTEXITCODE -ne 0) { - Throw "An error occurred while restoring NuGet modules." - } - - Write-Verbose -Message ($NuGetOutput | out-string) - - Pop-Location -} - -# Make sure that Cake has been installed. -if (!(Test-Path $CAKE_EXE)) { - Throw "Could not find Cake.exe at $CAKE_EXE" -} - - - -# Build Cake arguments -$cakeArguments = @("$Script"); -if ($Target) { $cakeArguments += "-target=$Target" } -if ($Configuration) { $cakeArguments += "-configuration=$Configuration" } -if ($Verbosity) { $cakeArguments += "-verbosity=$Verbosity" } -if ($ShowDescription) { $cakeArguments += "-showdescription" } -if ($DryRun) { $cakeArguments += "-dryrun" } -if ($Experimental) { $cakeArguments += "-experimental" } -if ($Mono) { $cakeArguments += "-mono" } -$cakeArguments += $ScriptArgs - -# Start Cake -Write-Host "Running build script..." -&$CAKE_EXE $cakeArguments -exit $LASTEXITCODE \ No newline at end of file +Write-Host "Running Build" +dotnet cake $SCRIPT_NAME @args +if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } \ No newline at end of file diff --git a/build.sh b/build.sh index 4b690aa..ba5d0c9 100755 --- a/build.sh +++ b/build.sh @@ -1,103 +1,11 @@ -#!/usr/bin/env bash -########################################################################## -# This is the Cake bootstrapper script for Linux and OS X. -# This file was downloaded from https://github.com/cake-build/resources -# Feel free to change this file to fit your needs. -########################################################################## +#!/bin/bash +SCRIPT_NAME="recipe.cake" -# Define directories. -SCRIPT_DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) -TOOLS_DIR=$SCRIPT_DIR/tools -NUGET_EXE=$TOOLS_DIR/nuget.exe -NUGET_URL=https://dist.nuget.org/win-x86-commandline/latest/nuget.exe -CAKE_VERSION=0.32.1 -CAKE_EXE=$TOOLS_DIR/Cake.$CAKE_VERSION/Cake.exe +echo "Restoring .NET Core tools" +dotnet tool restore -# Temporarily skip verification of addins. -export CAKE_SETTINGS_SKIPVERIFICATION='true' +echo "Bootstrapping Cake" +dotnet cake $SCRIPT_NAME --bootstrap -# Define default arguments. -SCRIPT="recipe.cake" -TARGET="Default" -CONFIGURATION="Release" -VERBOSITY="verbose" -DRYRUN= -SCRIPT_ARGUMENTS=() - -# Parse arguments. -for i in "$@"; do - case $1 in - -t|--target) TARGET="$2"; shift ;; - -c|--configuration) CONFIGURATION="$2"; shift ;; - -v|--verbosity) VERBOSITY="$2"; shift ;; - -d|--dryrun) DRYRUN="-dryrun" ;; - --) shift; SCRIPT_ARGUMENTS+=("$@"); break ;; - *) SCRIPT_ARGUMENTS+=("$1") ;; - esac - shift -done - -# Make sure the tools folder exist. -if [ ! -d "$TOOLS_DIR" ]; then - mkdir "$TOOLS_DIR" -fi - -# Print Mono version. -echo "Mono version:" -mono --version -echo "" - -########################################################################### -# INSTALL .NET CORE CLI -########################################################################### - -echo "Installing .NET CLI..." -if [ ! -d "$SCRIPT_DIR/.dotnet" ]; then - mkdir "$SCRIPT_DIR/.dotnet" -fi -curl -Lsfo "$SCRIPT_DIR/.dotnet/dotnet-install.sh" https://dot.net/v1/dotnet-install.sh -sudo bash "$SCRIPT_DIR/.dotnet/dotnet-install.sh" --version 2.1.400 --install-dir .dotnet --no-path -export PATH="$SCRIPT_DIR/.dotnet":$PATH -export DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1 -export DOTNET_CLI_TELEMETRY_OPTOUT=1 -export DOTNET_SYSTEM_NET_HTTP_USESOCKETSHTTPHANDLER=0 -"$SCRIPT_DIR/.dotnet/dotnet" --info - -########################################################################### -# INSTALL NUGET -########################################################################### - -# Download NuGet if it does not exist. -if [ ! -f "$NUGET_EXE" ]; then - echo "Downloading NuGet..." - curl -Lsfo "$NUGET_EXE" $NUGET_URL - if [ $? -ne 0 ]; then - echo "An error occurred while downloading nuget.exe." - exit 1 - fi -fi - -########################################################################### -# INSTALL CAKE -########################################################################### - -if [ ! -f "$CAKE_EXE" ]; then - mono "$NUGET_EXE" install Cake -Version $CAKE_VERSION -OutputDirectory "$TOOLS_DIR" - if [ $? -ne 0 ]; then - echo "An error occurred while installing Cake." - exit 1 - fi -fi - -# Make sure that Cake has been installed. -if [ ! -f "$CAKE_EXE" ]; then - echo "Could not find Cake.exe at '$CAKE_EXE'." - exit 1 -fi - -########################################################################### -# RUN BUILD SCRIPT -########################################################################### - -# Start Cake -exec mono "$CAKE_EXE" $SCRIPT --verbosity=$VERBOSITY --configuration=$CONFIGURATION --target=$TARGET $DRYRUN "${SCRIPT_ARGUMENTS[@]}" +echo "Running Build" +dotnet cake $SCRIPT_NAME "$@" \ No newline at end of file diff --git a/nuspec/nuget/Cake.Issues.GitRepository.nuspec b/nuspec/nuget/Cake.Issues.GitRepository.nuspec index d987011..487dd10 100644 --- a/nuspec/nuget/Cake.Issues.GitRepository.nuspec +++ b/nuspec/nuget/Cake.Issues.GitRepository.nuspec @@ -24,12 +24,18 @@ See the Project Site for an overview of the whole ecosystem of addins for workin Copyright © Pascal Berger cake cake-addin cake-issues cake-issueprovider code-analysis linting git - https://github.com/cake-contrib/Cake.Issues.GitRepository/releases/tag/1.0.1 + https://github.com/cake-contrib/Cake.Issues.GitRepository/releases/tag/2.0.0 - - - + + + + + + + + + diff --git a/recipe.cake b/recipe.cake index e7b2993..6a2179a 100644 --- a/recipe.cake +++ b/recipe.cake @@ -1,4 +1,4 @@ -#load nuget:?package=Cake.Recipe&version=1.0.0 +#load nuget:https://pkgs.dev.azure.com/cake-contrib/Home/_packaging/addins/nuget/v3/index.json?package=Cake.Recipe&version=3.0.0-beta0001-0007&prerelease //************************************************************************************************* // Settings @@ -14,51 +14,18 @@ BuildParameters.SetParameters( repositoryOwner: "cake-contrib", repositoryName: "Cake.Issues.GitRepository", appVeyorAccountName: "cakecontrib", - shouldPublishMyGet: false, - shouldRunGitVersion: true, - shouldRunCodecov: false, + shouldRunCoveralls: false, // Disabled because it's currently failing shouldGenerateDocumentation: false, - shouldRunIntegrationTests: true, integrationTestScriptPath: "./tests/integration/tests.cake"); BuildParameters.PrintParameters(Context); ToolSettings.SetToolSettings( context: Context, - dupFinderExcludePattern: new string[] { BuildParameters.RootDirectoryPath + "/src/Cake.Issues.GitRepository.Tests/*.cs" }, testCoverageFilter: "+[*]* -[xunit.*]* -[Cake.Core]* -[Cake.Testing]* -[*.Tests]* -[Cake.Issues]* -[Cake.Issues.Testing]* -[Shouldly]* -[DiffEngine]* -[EmptyFiles]*", testCoverageExcludeByAttribute: "*.ExcludeFromCodeCoverage*", testCoverageExcludeByFile: "*/*Designer.cs;*/*.g.cs;*/*.g.i.cs"); -//************************************************************************************************* -// Extensions -//************************************************************************************************* - -Task("Prepare-Integration-Tests") - .IsDependentOn("Create-NuGet-Packages") - .Does(() => -{ - // Clean addin directory - var addinDir = MakeAbsolute(Directory("./tools/Addins/" + BuildParameters.RepositoryName)); - if (DirectoryExists(addinDir)) - { - DeleteDirectory(addinDir, new DeleteDirectorySettings { - Recursive = true, - Force = true - }); - } - - // Unzip package from current build into addin directory - var packagePath = - BuildParameters.Paths.Directories.NuGetPackages.CombineWithFilePath("Cake.Issues.GitRepository." + BuildParameters.Version.SemVersion + ".nupkg"); - Unzip(packagePath, addinDir); -}); - -Task("Buildserver") - .IsDependentOn("Run-Integration-Tests"); - -BuildParameters.Tasks.IntegrationTestTask.IsDependentOn("Prepare-Integration-Tests"); - //************************************************************************************************* // Execution //************************************************************************************************* diff --git a/src/Cake.Issues.GitRepository.Tests/Cake.Issues.GitRepository.Tests.csproj b/src/Cake.Issues.GitRepository.Tests/Cake.Issues.GitRepository.Tests.csproj index 23b7aac..bde81df 100644 --- a/src/Cake.Issues.GitRepository.Tests/Cake.Issues.GitRepository.Tests.csproj +++ b/src/Cake.Issues.GitRepository.Tests/Cake.Issues.GitRepository.Tests.csproj @@ -2,7 +2,7 @@ Library - netcoreapp2.1 + netcoreapp3.1 false Tests for the Cake.Issues.GitRepository addin Pascal Berger @@ -23,13 +23,13 @@ - 1.0.0 + 2.0.0 - 1.0.0 + 2.0.0 - 1.0.0 + 2.0.0 4.0.3 @@ -39,12 +39,12 @@ runtime; build; native; contentfiles; analyzers all - + 2.4.1 - 2.4.3 + 2.4.5 runtime; build; native; contentfiles; analyzers all diff --git a/src/Cake.Issues.GitRepository.Tests/IssueBuilderExtensionsTests.cs b/src/Cake.Issues.GitRepository.Tests/IssueBuilderExtensionsTests.cs index 48409d2..c334ac0 100644 --- a/src/Cake.Issues.GitRepository.Tests/IssueBuilderExtensionsTests.cs +++ b/src/Cake.Issues.GitRepository.Tests/IssueBuilderExtensionsTests.cs @@ -36,6 +36,20 @@ public void Should_Throw_If_RuleDescription_Is_Null() result.IsArgumentNullException("ruleDescription"); } + [Fact] + public void Should_Set_RuleId() + { + // Given + var issueBuilder = IssueBuilder.NewIssue("message", "providerType", "providerName"); + var ruleDescription = new BinaryFileNotTrackedByLfsRuleDescription(); + + // When + var result = issueBuilder.OfRule(ruleDescription); + + // Then + result.Create().RuleId.ShouldBe(ruleDescription.RuleId); + } + [Fact] public void Should_Set_RuleName() { @@ -47,7 +61,7 @@ public void Should_Set_RuleName() var result = issueBuilder.OfRule(ruleDescription); // Then - result.Create().Rule.ShouldBe(ruleDescription.RuleName); + result.Create().RuleName.ShouldBe(ruleDescription.RuleName); } [Fact] diff --git a/src/Cake.Issues.GitRepository.Tests/Properties/AssemblyInfo.cs b/src/Cake.Issues.GitRepository.Tests/Properties/ProjectInfo.cs similarity index 100% rename from src/Cake.Issues.GitRepository.Tests/Properties/AssemblyInfo.cs rename to src/Cake.Issues.GitRepository.Tests/Properties/ProjectInfo.cs diff --git a/src/Cake.Issues.GitRepository/BaseGitRepositoryIssuesRuleDescription.cs b/src/Cake.Issues.GitRepository/BaseGitRepositoryIssuesRuleDescription.cs index 4a7fad8..cca1e93 100644 --- a/src/Cake.Issues.GitRepository/BaseGitRepositoryIssuesRuleDescription.cs +++ b/src/Cake.Issues.GitRepository/BaseGitRepositoryIssuesRuleDescription.cs @@ -5,6 +5,11 @@ /// public abstract class BaseGitRepositoryIssuesRuleDescription { + /// + /// Gets the ID of the rule. + /// + public abstract string RuleId { get; } + /// /// Gets the name of the rule. /// diff --git a/src/Cake.Issues.GitRepository/BinaryFileNotTrackedByLfsRuleDescription.cs b/src/Cake.Issues.GitRepository/BinaryFileNotTrackedByLfsRuleDescription.cs index 355d1f4..734cb67 100644 --- a/src/Cake.Issues.GitRepository/BinaryFileNotTrackedByLfsRuleDescription.cs +++ b/src/Cake.Issues.GitRepository/BinaryFileNotTrackedByLfsRuleDescription.cs @@ -6,7 +6,10 @@ public class BinaryFileNotTrackedByLfsRuleDescription : BaseGitRepositoryIssuesRuleDescription { /// - public override string RuleName => "BinaryFileNotTrackedByLfs"; + public override string RuleId => "BinaryFileNotTrackedByLfs"; + + /// + public override string RuleName => "Binary file not tracked by Git LFS"; /// public override IssuePriority Priority => IssuePriority.Warning; diff --git a/src/Cake.Issues.GitRepository/Cake.Issues.GitRepository.csproj b/src/Cake.Issues.GitRepository/Cake.Issues.GitRepository.csproj index 6a20c54..44d1aa1 100644 --- a/src/Cake.Issues.GitRepository/Cake.Issues.GitRepository.csproj +++ b/src/Cake.Issues.GitRepository/Cake.Issues.GitRepository.csproj @@ -2,7 +2,7 @@ Library - netstandard2.0 + netcoreapp3.1;net5.0;net6.0 Git repository linting support for the Cake.Issues addin for Cake Build Automation System Pascal Berger Cake.Issues @@ -28,12 +28,12 @@ - 1.0.0 + 2.0.0 - 1.0.0 + 2.0.0 - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/Cake.Issues.GitRepository/FilePathTooLongRuleDescription.cs b/src/Cake.Issues.GitRepository/FilePathTooLongRuleDescription.cs index 2164659..1b51ebe 100644 --- a/src/Cake.Issues.GitRepository/FilePathTooLongRuleDescription.cs +++ b/src/Cake.Issues.GitRepository/FilePathTooLongRuleDescription.cs @@ -6,7 +6,10 @@ public class FilePathTooLongRuleDescription : BaseGitRepositoryIssuesRuleDescription { /// - public override string RuleName => "FilePathTooLong"; + public override string RuleId => "FilePathTooLong"; + + /// + public override string RuleName => "File path too long"; /// public override IssuePriority Priority => IssuePriority.Warning; diff --git a/src/Cake.Issues.GitRepository/GitRepositoryIssuesProvider.cs b/src/Cake.Issues.GitRepository/GitRepositoryIssuesProvider.cs index 3d170f2..83c1e61 100644 --- a/src/Cake.Issues.GitRepository/GitRepositoryIssuesProvider.cs +++ b/src/Cake.Issues.GitRepository/GitRepositoryIssuesProvider.cs @@ -199,6 +199,9 @@ private IEnumerable GetTextFilesFromRepository() var settings = new GitRunnerSettings { WorkingDirectory = this.Settings.RepositoryRoot, + + // git grep -IL . can return an exit code of 1 if nothing matches + HandleExitCode = exitCode => (exitCode == 0 || exitCode == 1), }; settings.Arguments.Clear(); diff --git a/src/Cake.Issues.GitRepository/IssueBuilderExtensions.cs b/src/Cake.Issues.GitRepository/IssueBuilderExtensions.cs index 91e5fb5..d186da6 100644 --- a/src/Cake.Issues.GitRepository/IssueBuilderExtensions.cs +++ b/src/Cake.Issues.GitRepository/IssueBuilderExtensions.cs @@ -21,8 +21,9 @@ public static IssueBuilder OfRule(this IssueBuilder issueBuilder, BaseGitReposit return issueBuilder .OfRule( + ruleDescription.RuleId, ruleDescription.RuleName, - new Uri($"https://cakeissues.net/docs/issue-providers/gitrepository/rules/{ruleDescription.RuleName}")) + new Uri($"https://cakeissues.net/docs/issue-providers/gitrepository/rules/{ruleDescription.RuleId}")) .WithPriority(ruleDescription.Priority); } } diff --git a/src/Cake.Issues.GitRepository/Properties/AssemblyInfo.cs b/src/Cake.Issues.GitRepository/Properties/ProjectInfo.cs similarity index 100% rename from src/Cake.Issues.GitRepository/Properties/AssemblyInfo.cs rename to src/Cake.Issues.GitRepository/Properties/ProjectInfo.cs diff --git a/tests/script-runner/.config/dotnet-tools.json b/tests/script-runner/.config/dotnet-tools.json new file mode 100644 index 0000000..db6b2cb --- /dev/null +++ b/tests/script-runner/.config/dotnet-tools.json @@ -0,0 +1,12 @@ +{ + "version": 1, + "isRoot": true, + "tools": { + "cake.tool": { + "version": "2.0.0", + "commands": [ + "dotnet-cake" + ] + } + } + } \ No newline at end of file diff --git a/tests/script-runner/build.ps1 b/tests/script-runner/build.ps1 new file mode 100644 index 0000000..f22c811 --- /dev/null +++ b/tests/script-runner/build.ps1 @@ -0,0 +1,15 @@ +$ErrorActionPreference = 'Stop' + +$SCRIPT_NAME = "tests.cake" + +Write-Host "Restoring .NET Core tools" +dotnet tool restore +if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } + +Write-Host "Bootstrapping Cake" +dotnet cake $SCRIPT_NAME --bootstrap +if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } + +Write-Host "Running Build" +dotnet cake $SCRIPT_NAME @args +if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } \ No newline at end of file diff --git a/tests/script-runner/build.sh b/tests/script-runner/build.sh new file mode 100755 index 0000000..0c39663 --- /dev/null +++ b/tests/script-runner/build.sh @@ -0,0 +1,11 @@ +#!/bin/bash +SCRIPT_NAME="tests.cake" + +echo "Restoring .NET Core tools" +dotnet tool restore + +echo "Bootstrapping Cake" +dotnet cake $SCRIPT_NAME --bootstrap + +echo "Running Build" +dotnet cake $SCRIPT_NAME "$@" \ No newline at end of file diff --git a/tests/script-runner/nuget.config b/tests/script-runner/nuget.config new file mode 100644 index 0000000..a202f0a --- /dev/null +++ b/tests/script-runner/nuget.config @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/tests/integration/testfiles/cake-contrib-small.png b/tests/script-runner/testfiles/cake-contrib-small.png similarity index 100% rename from tests/integration/testfiles/cake-contrib-small.png rename to tests/script-runner/testfiles/cake-contrib-small.png diff --git a/tests/integration/testfiles/empty.png b/tests/script-runner/testfiles/empty.png similarity index 100% rename from tests/integration/testfiles/empty.png rename to tests/script-runner/testfiles/empty.png diff --git "a/tests/integration/testfiles/file-with-umlaut-\303\244.png" "b/tests/script-runner/testfiles/file-with-umlaut-\303\244.png" similarity index 100% rename from "tests/integration/testfiles/file-with-umlaut-\303\244.png" rename to "tests/script-runner/testfiles/file-with-umlaut-\303\244.png" diff --git a/tests/integration/tests.cake b/tests/script-runner/tests.cake similarity index 90% rename from tests/integration/tests.cake rename to tests/script-runner/tests.cake index 8e13f15..be57c89 100644 --- a/tests/integration/tests.cake +++ b/tests/script-runner/tests.cake @@ -1,7 +1,7 @@ -#addin nuget:?package=Cake.Issues&prerelease -#addin nuget:?package=Cake.Issues.Reporting&prerelease -#addin nuget:?package=Cake.Issues.Reporting.Generic&prerelease -#reference "../../tools/Addins/Cake.Issues.GitRepository/lib/netstandard2.0/Cake.Issues.GitRepository.dll" +#addin Cake.Issues&prerelease +#addin Cake.Issues.Reporting&prerelease +#addin Cake.Issues.Reporting.Generic&prerelease +#addin Cake.Issues.GitRepository&prerelease ////////////////////////////////////////////////// // ARGUMENTS diff --git a/tools/packages.config b/tools/packages.config deleted file mode 100644 index f27ab48..0000000 --- a/tools/packages.config +++ /dev/null @@ -1,4 +0,0 @@ - - - -