From f2a69d31f86398a8274663c7e33cd11f964c5681 Mon Sep 17 00:00:00 2001 From: Pascal Berger Date: Sun, 2 Sep 2018 11:43:12 +0200 Subject: [PATCH 01/49] (GH-2) Build and solution setup --- .appveyor.yml | 30 +++ .gitattributes | 63 +++++ .gitignore | 75 +----- .travis.yml | 10 + CONTRIBUTING.md | 35 +++ GitReleaseManager.yaml | 12 + README.md | 42 ++- build.ps1 | 184 +++++++++++++ build.sh | 82 ++++++ cake.config | 3 + .../Cake.Issues.PullRequests.GitHub.nuspec | 32 +++ setup.cake | 24 ++ ...e.Issues.PullRequests.GitHub.Tests.ruleset | 10 + ...ke.Issues.PullRequests.GitHub.Tests.csproj | 36 +++ .../GitHubPullRequestSettingsTests.cs | 15 ++ src/Cake.Issues.PullRequests.GitHub.ruleset | 241 ++++++++++++++++++ src/Cake.Issues.PullRequests.GitHub.sln | 31 +++ ...Issues.PullRequests.GitHub.sln.DotSettings | 3 + .../Cake.Issues.PullRequests.GitHub.csproj | 32 +++ .../GitHubPullRequestAliases.cs | 76 ++++++ .../GitHubPullRequestSettings.cs | 15 ++ .../GitHubPullRequestSystem.cs | 34 +++ tools/packages.config | 4 + 23 files changed, 1024 insertions(+), 65 deletions(-) create mode 100644 .appveyor.yml create mode 100644 .gitattributes create mode 100644 .travis.yml create mode 100644 CONTRIBUTING.md create mode 100644 GitReleaseManager.yaml create mode 100644 build.ps1 create mode 100644 build.sh create mode 100644 cake.config create mode 100644 nuspec/nuget/Cake.Issues.PullRequests.GitHub.nuspec create mode 100644 setup.cake create mode 100644 src/Cake.Issues.PullRequests.GitHub.Tests.ruleset create mode 100644 src/Cake.Issues.PullRequests.GitHub.Tests/Cake.Issues.PullRequests.GitHub.Tests.csproj create mode 100644 src/Cake.Issues.PullRequests.GitHub.Tests/GitHubPullRequestSettingsTests.cs create mode 100644 src/Cake.Issues.PullRequests.GitHub.ruleset create mode 100644 src/Cake.Issues.PullRequests.GitHub.sln create mode 100644 src/Cake.Issues.PullRequests.GitHub.sln.DotSettings create mode 100644 src/Cake.Issues.PullRequests.GitHub/Cake.Issues.PullRequests.GitHub.csproj create mode 100644 src/Cake.Issues.PullRequests.GitHub/GitHubPullRequestAliases.cs create mode 100644 src/Cake.Issues.PullRequests.GitHub/GitHubPullRequestSettings.cs create mode 100644 src/Cake.Issues.PullRequests.GitHub/GitHubPullRequestSystem.cs create mode 100644 tools/packages.config diff --git a/.appveyor.yml b/.appveyor.yml new file mode 100644 index 0000000..1dbceb1 --- /dev/null +++ b/.appveyor.yml @@ -0,0 +1,30 @@ +#---------------------------------# +# Build Image # +#---------------------------------# +image: Visual Studio 2017 + +#---------------------------------# +# 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: +- tools -> setup.cake diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..1ff0c42 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,63 @@ +############################################################################### +# Set default behavior to automatically normalize line endings. +############################################################################### +* text=auto + +############################################################################### +# Set default behavior for command prompt diff. +# +# This is need for earlier builds of msysgit that does not have it on by +# default for csharp files. +# Note: This is only used by command line +############################################################################### +#*.cs diff=csharp + +############################################################################### +# Set the merge driver for project and solution files +# +# Merging from the command prompt will add diff markers to the files if there +# are conflicts (Merging from VS is not affected by the settings below, in VS +# the diff markers are never inserted). Diff markers may cause the following +# file extensions to fail to load in VS. An alternative would be to treat +# these files as binary and thus will always conflict and require user +# intervention with every merge. To do so, just uncomment the entries below +############################################################################### +#*.sln merge=binary +#*.csproj merge=binary +#*.vbproj merge=binary +#*.vcxproj merge=binary +#*.vcproj merge=binary +#*.dbproj merge=binary +#*.fsproj merge=binary +#*.lsproj merge=binary +#*.wixproj merge=binary +#*.modelproj merge=binary +#*.sqlproj merge=binary +#*.wwaproj merge=binary + +############################################################################### +# behavior for image files +# +# image files are treated as binary by default. +############################################################################### +#*.jpg binary +#*.png binary +#*.gif binary + +############################################################################### +# diff behavior for common document formats +# +# Convert binary document formats to text before diffing them. This feature +# is only available from the command line. Turn it on by uncommenting the +# entries below. +############################################################################### +#*.doc diff=astextplain +#*.DOC diff=astextplain +#*.docx diff=astextplain +#*.DOCX diff=astextplain +#*.dot diff=astextplain +#*.DOT diff=astextplain +#*.pdf diff=astextplain +#*.PDF diff=astextplain +#*.rtf diff=astextplain +#*.RTF diff=astextplain diff --git a/.gitignore b/.gitignore index 3e759b7..a9e78cf 100644 --- a/.gitignore +++ b/.gitignore @@ -24,14 +24,11 @@ bld/ [Oo]bj/ [Ll]og/ -# Visual Studio 2015/2017 cache/options directory +# Visual Studio 2015 cache/options directory .vs/ # Uncomment if you have tasks that create the project's static files in wwwroot #wwwroot/ -# Visual Studio 2017 auto generated files -Generated\ Files/ - # MSTest test Results [Tt]est[Rr]esult*/ [Bb]uild[Ll]og.* @@ -45,29 +42,20 @@ TestResult.xml [Rr]eleasePS/ dlldata.c -# Benchmark Results -BenchmarkDotNet.Artifacts/ - # .NET Core project.lock.json project.fragment.lock.json artifacts/ **/Properties/launchSettings.json -# StyleCop -StyleCopReport.xml - -# Files built by Visual Studio *_i.c *_p.c *_i.h *.ilk *.meta *.obj -*.iobj *.pch *.pdb -*.ipdb *.pgc *.pgd *.rsp @@ -105,9 +93,6 @@ ipch/ *.vspx *.sap -# Visual Studio Trace Files -*.e2e - # TFS 2012 Local Workspace $tf/ @@ -128,10 +113,6 @@ _TeamCity* # DotCover is a Code Coverage Tool *.dotCover -# AxoCover is a Code Coverage Tool -.axoCover/* -!.axoCover/settings.json - # Visual Studio code coverage results *.coverage *.coveragexml @@ -167,7 +148,7 @@ publish/ # Publish Web Output *.[Pp]ublish.xml *.azurePubxml -# Note: Comment the next line if you want to checkin your web deploy settings, +# TODO: Comment the next line if you want to checkin your web deploy settings # but database connection strings (with potential passwords) will be unencrypted *.pubxml *.publishproj @@ -180,12 +161,12 @@ PublishScripts/ # NuGet Packages *.nupkg # The packages folder can be ignored because of Package Restore -**/[Pp]ackages/* +**/packages/* # except build/, which is used as an MSBuild target. -!**/[Pp]ackages/build/ +!**/packages/build/ # Uncomment if necessary however generally it will be regenerated when needed -#!**/[Pp]ackages/repositories.config -# NuGet v3's project.json files produces more ignorable files +#!**/packages/repositories.config +# NuGet v3's project.json files produces more ignoreable files *.nuget.props *.nuget.targets @@ -202,7 +183,6 @@ AppPackages/ BundleArtifacts/ Package.StoreAssociation.xml _pkginfo.txt -*.appx # Visual Studio cache files # files ending in .cache can be ignored @@ -221,10 +201,6 @@ ClientBin/ *.publishsettings orleans.codegen.cs -# Including strong name files can present a security risk -# (https://github.com/github/gitignore/pull/2483#issue-259490424) -#*.snk - # Since there are multiple workflows, uncomment next line to ignore bower_components # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) #bower_components/ @@ -239,19 +215,15 @@ _UpgradeReport_Files/ Backup*/ UpgradeLog*.XML UpgradeLog*.htm -ServiceFabricBackup/ -*.rptproj.bak # SQL Server files *.mdf *.ldf -*.ndf # Business Intelligence projects *.rdl.data *.bim.layout *.bim_*.settings -*.rptproj.rsuser # Microsoft Fakes FakesAssemblies/ @@ -263,6 +235,9 @@ FakesAssemblies/ .ntvs_analysis.dat node_modules/ +# Typescript v1 declaration files +typings/ + # Visual Studio 6 build log *.plg @@ -299,32 +274,6 @@ __pycache__/ *.pyc # Cake - Uncomment if you are using it -# tools/** -# !tools/packages.config - -# Tabs Studio -*.tss - -# Telerik's JustMock configuration file -*.jmconfig - -# BizTalk build output -*.btp.cs -*.btm.cs -*.odx.cs -*.xsd.cs - -# OpenCover UI analysis results -OpenCover/ - -# Azure Stream Analytics local run output -ASALocalRun/ - -# MSBuild Binary and Structured Log -*.binlog - -# NVidia Nsight GPU debugger configuration file -*.nvuser - -# MFractors (Xamarin productivity tool) working folder -.mfractor/ +tools/** +!tools/packages.config +BuildArtifacts/ \ No newline at end of file diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..eb79eee --- /dev/null +++ b/.travis.yml @@ -0,0 +1,10 @@ +language: csharp +script: + - ./build.sh -v diagnostic +os: + - linux + - osx +cache: + directories: + - packages + - tools diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..078295e --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,35 @@ +# Contribution Guidelines + +This repository uses [GitFlow] with default configuration. +Development is happening on `develop` branch. + +To contribute: + +* Fork this repository. +* Create a feature branch from `develop`. +* Implement your changes. +* Push your feature branch. +* Create a pull request. + +## Build + +To build this package we are using Cake. + +On Windows PowerShell run: + +```powershell +./build +``` + +On OSX/Linux run: + +```bash +./build.sh +``` + +## Release + +See [Cake.Recipe documentation] how to create a new release of this addin. + +[GitFlow]: (http://nvie.com/posts/a-successful-git-branching-model/) +[Cake.Recipe documentation]: https://cake-contrib.github.io/Cake.Recipe/docs/usage/creating-release \ No newline at end of file diff --git a/GitReleaseManager.yaml b/GitReleaseManager.yaml new file mode 100644 index 0000000..721c1ba --- /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 \ No newline at end of file diff --git a/README.md b/README.md index 1f6d78e..b1752a9 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,40 @@ -# Cake.Issues.PullRequests.GitHub -Addin for writing issues as comments to GitHub pull requests +# GitHub support for Cake Issues Addin + +This addin for the Cake Build Automation System allows you to write issues found using any code +analyzer or linter to GitHub pull requests using the [Cake Issues addin](https://github.com/cake-contrib/Cake.Issues). + +For more information about this add-in see the [Cake.Issues website](https://cake-contrib.github.io/Cake.Issues.Website) +and for general information about the Cake build automation system see the [Cake website](http://cakebuild.net) + +[![License](http://img.shields.io/:license-mit-blue.svg)](https://github.com/cake-contrib/Cake.Issues.PullRequests.GitHub/blob/feature/build/LICENSE) + +## Information + +| | Stable | Pre-release | +|:--:|:--:|:--:| +|GitHub Release|-|[![GitHub release](https://img.shields.io/github/release/cake-contrib/Cake.Issues.PullRequests.GitHub.svg)](https://github.com/cake-contrib/Cake.Issues.PullRequests.GitHub/releases/latest)| +|NuGet|[![NuGet](https://img.shields.io/nuget/v/Cake.Issues.PullRequests.GitHub.svg)](https://www.nuget.org/packages/Cake.Issues.PullRequests.GitHub)|[![NuGet](https://img.shields.io/nuget/vpre/Cake.Issues.PullRequests.GitHub.svg)](https://www.nuget.org/packages/Cake.Issues.PullRequests.GitHub)| + +## Build Status + +|Develop|Master| +|:--:|:--:| +|[![Build status](https://ci.appveyor.com/api/projects/status/trj0g753r3hcw22k/branch/develop?svg=true)](https://ci.appveyor.com/project/cakecontrib/cake-issues-pullrequests-github/branch/develop)|[![Build status](https://ci.appveyor.com/api/projects/status/trj0g753r3hcw22k/branch/develop?svg=true)](https://ci.appveyor.com/project/cakecontrib/cake-issues-pullrequests-github/branch/master)| + +## Code Coverage + +[![Coverage Status](https://coveralls.io/repos/github/cake-contrib/Cake.Issues.PullRequests.GitHub/badge.svg?branch=develop)](https://coveralls.io/github/cake-contrib/Cake.Issues.PullRequests.GitHub?branch=develop) + +## Quick Links + +- [Documentation](https://cake-contrib.github.io/Cake.Issues.Website) + +## Chat Room + +Come join in the conversation about this addin in our Gitter Chat Room + +[![Join the chat at https://gitter.im/cake-contrib/Lobby](https://badges.gitter.im/cake-contrib/Lobby.svg)](https://gitter.im/cake-contrib/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) + +## Contributing + +Contributions are welcome. See [Contribution Guidelines](CONTRIBUTING.md). \ No newline at end of file diff --git a/build.ps1 b/build.ps1 new file mode 100644 index 0000000..bdfb32b --- /dev/null +++ b/build.ps1 @@ -0,0 +1,184 @@ +########################################################################## +# 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 +) + +[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() + } + } +} + +Write-Host "Preparing to run build script..." + +if(!$PSScriptRoot){ + $PSScriptRoot = Split-Path $MyInvocation.MyCommand.Path -Parent +} + +$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" +} + +# Should we use the new Roslyn? +$UseExperimental = ""; +if($Experimental.IsPresent -and !($Mono.IsPresent)) { + Write-Verbose -Message "Using experimental version of Roslyn." + $UseExperimental = "-experimental" +} + +# 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 +} + +# 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." + } +} + +# 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 + } +} + +# 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." + } +} + +# 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 -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 +} + +# Make sure that Cake has been installed. +if (!(Test-Path $CAKE_EXE)) { + Throw "Could not find Cake.exe at $CAKE_EXE" +} + +# Start Cake +Write-Host "Running build script..." +Invoke-Expression "& `"$CAKE_EXE`" `"$Script`" -target=`"$Target`" -configuration=`"$Configuration`" -verbosity=`"$Verbosity`" $UseMono $UseDryRun $UseExperimental $ScriptArgs" +exit $LASTEXITCODE \ No newline at end of file diff --git a/build.sh b/build.sh new file mode 100644 index 0000000..a541ec1 --- /dev/null +++ b/build.sh @@ -0,0 +1,82 @@ +#!/usr/bin/env bash +############################################################### +# This is the Cake bootstrapper script that is responsible for +# downloading Cake and all specified tools from NuGet. +############################################################### + +# Define directories. +SCRIPT_DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) +TOOLS_DIR=$SCRIPT_DIR/tools +NUGET_EXE=$TOOLS_DIR/nuget.exe +CAKE_EXE=$TOOLS_DIR/Cake/Cake.exe + +# Define default arguments. +SCRIPT="setup.cake" +TARGET="Default" +CONFIGURATION="Release" +VERBOSITY="verbose" +DRYRUN= +SHOW_VERSION=false +SCRIPT_ARGUMENTS=() + +# Parse arguments. +for i in "$@"; do + case $1 in + -s|--script) SCRIPT="$2"; shift ;; + -t|--target) TARGET="$2"; shift ;; + -c|--configuration) CONFIGURATION="$2"; shift ;; + -v|--verbosity) VERBOSITY="$2"; shift ;; + -d|--dryrun) DRYRUN="-dryrun" ;; + --version) SHOW_VERSION=true ;; + --) 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 + +# Make sure that packages.config exist. +if [ ! -f $TOOLS_DIR/packages.config ]; then + echo "Downloading packages.config..." + curl -Lsfo $TOOLS_DIR/packages.config http://cakebuild.net/bootstrapper/packages + if [ $? -ne 0 ]; then + echo "An error occured while downloading packages.config." + exit 1 + fi +fi + +# Download NuGet if it does not exist. +if [ ! -f $NUGET_EXE ]; then + echo "Downloading NuGet..." + curl -Lsfo $NUGET_EXE https://dist.nuget.org/win-x86-commandline/latest/nuget.exe + if [ $? -ne 0 ]; then + echo "An error occured while downloading nuget.exe." + exit 1 + fi +fi + +# Restore tools from NuGet. +pushd $TOOLS_DIR >/dev/null +mono $NUGET_EXE install -ExcludeVersion -PreRelease -Source https://www.myget.org/F/cake/api/v3/index.json +if [ $? -ne 0 ]; then + echo "Could not restore NuGet packages." + exit 1 +fi +popd >/dev/null + +# Make sure that Cake has been installed. +if [ ! -f $CAKE_EXE ]; then + echo "Could not find Cake.exe at '$CAKE_EXE'." + exit 1 +fi + +# Start Cake +if $SHOW_VERSION; then + exec mono $CAKE_EXE -version +else + exec mono $CAKE_EXE $SCRIPT -verbosity=$VERBOSITY -configuration=$CONFIGURATION -target=$TARGET $DRYRUN "${SCRIPT_ARGUMENTS[@]}" +fi diff --git a/cake.config b/cake.config new file mode 100644 index 0000000..652d5e8 --- /dev/null +++ b/cake.config @@ -0,0 +1,3 @@ +[Nuget] +; Use the new InProcess client, because some packages have long file paths. +UseInProcessClient=true \ No newline at end of file diff --git a/nuspec/nuget/Cake.Issues.PullRequests.GitHub.nuspec b/nuspec/nuget/Cake.Issues.PullRequests.GitHub.nuspec new file mode 100644 index 0000000..4364e80 --- /dev/null +++ b/nuspec/nuget/Cake.Issues.PullRequests.GitHub.nuspec @@ -0,0 +1,32 @@ + + + + Cake.Issues.PullRequests.GitHub + Cake.Issues.PullRequests.GitHub + 0.0.0 + Pascal Berger + pascalberger, cake-contrib + GitHub support for the Cake.Issues addin for Cake Build Automation System + + GitHub support for the Cake.Issues addin for Cake allows you to report to GitHub pull requests. + + This addin provides the aliases for writing to GitHub pull requests. + It also requires the core Cake.Issues and Cake.Issues.PullRequests addins and one or more issue providers. + + See the Project Site for an overview of the whole ecosystem of addins for working with issues in Cake scripts. + + https://github.com/cake-contrib/Cake.Issues.PullRequests.GitHub/blob/develop/LICENSE + http://cake-contrib.github.io/Cake.Issues.Website + https://cdn.rawgit.com/cake-contrib/graphics/a5cf0f881c390650144b2243ae551d5b9f836196/png/cake-contrib-medium.png + false + + Copyright © Pascal Berger + Cake Script Cake-Issues Cake-PullRequestSystem Issues PullRequest AppVeyor + https://github.com/cake-contrib/Cake.Issues.PullRequests.GitHub/releases/tag/0.6.0 + + + + + + + \ No newline at end of file diff --git a/setup.cake b/setup.cake new file mode 100644 index 0000000..8ec3eed --- /dev/null +++ b/setup.cake @@ -0,0 +1,24 @@ +#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: "Cake.Issues.PullRequests.GitHub", + repositoryOwner: "cake-contrib", + repositoryName: "Cake.Issues.PullRequests.GitHub", + appVeyorAccountName: "cakecontrib", + shouldRunCodecov: false); + +BuildParameters.PrintParameters(Context); + +ToolSettings.SetToolSettings( + context: Context, + dupFinderExcludePattern: new string[] { BuildParameters.RootDirectoryPath + "/src/Cake.Issues.PullRequests.GitHub.Tests/*.cs" }, + testCoverageFilter: "+[*]* -[xunit.*]* -[Cake.Core]* -[Cake.Testing]* -[*.Tests]* -[Cake.Issues]* -[Cake.Issues.Testing]* -[Cake.Issues.PullRequests]*", + testCoverageExcludeByAttribute: "*.ExcludeFromCodeCoverage*", + testCoverageExcludeByFile: "*/*Designer.cs;*/*.g.cs;*/*.g.i.cs"); + +Build.RunDotNetCore(); diff --git a/src/Cake.Issues.PullRequests.GitHub.Tests.ruleset b/src/Cake.Issues.PullRequests.GitHub.Tests.ruleset new file mode 100644 index 0000000..872413a --- /dev/null +++ b/src/Cake.Issues.PullRequests.GitHub.Tests.ruleset @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/src/Cake.Issues.PullRequests.GitHub.Tests/Cake.Issues.PullRequests.GitHub.Tests.csproj b/src/Cake.Issues.PullRequests.GitHub.Tests/Cake.Issues.PullRequests.GitHub.Tests.csproj new file mode 100644 index 0000000..2fc9049 --- /dev/null +++ b/src/Cake.Issues.PullRequests.GitHub.Tests/Cake.Issues.PullRequests.GitHub.Tests.csproj @@ -0,0 +1,36 @@ + + + + netcoreapp2.0 + false + Cake.Issues + Copyright © Pascal Berger and contributors + Tests for the Cake.Issues.PullRequests.GitHub addin + Pascal Berger + + + + ..\Cake.Issues.PullRequests.GitHub.Tests.ruleset + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Cake.Issues.PullRequests.GitHub.Tests/GitHubPullRequestSettingsTests.cs b/src/Cake.Issues.PullRequests.GitHub.Tests/GitHubPullRequestSettingsTests.cs new file mode 100644 index 0000000..22a9924 --- /dev/null +++ b/src/Cake.Issues.PullRequests.GitHub.Tests/GitHubPullRequestSettingsTests.cs @@ -0,0 +1,15 @@ +namespace Cake.Issues.PullRequests.GitHub.Tests +{ + using System; + using Cake.Issues.Testing; + using Cake.Testing; + using Shouldly; + using Xunit; + + public sealed class GitHubPullRequestSettingsTests + { + public sealed class TheCtor + { + } + } +} \ No newline at end of file diff --git a/src/Cake.Issues.PullRequests.GitHub.ruleset b/src/Cake.Issues.PullRequests.GitHub.ruleset new file mode 100644 index 0000000..4d1b4f9 --- /dev/null +++ b/src/Cake.Issues.PullRequests.GitHub.ruleset @@ -0,0 +1,241 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Cake.Issues.PullRequests.GitHub.sln b/src/Cake.Issues.PullRequests.GitHub.sln new file mode 100644 index 0000000..0a53f2d --- /dev/null +++ b/src/Cake.Issues.PullRequests.GitHub.sln @@ -0,0 +1,31 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.27703.1 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Cake.Issues.PullRequests.GitHub", "Cake.Issues.PullRequests.GitHub\Cake.Issues.PullRequests.GitHub.csproj", "{CC3D0C2D-6AC5-44DC-A0DD-D826D76FC00D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Cake.Issues.PullRequests.GitHub.Tests", "Cake.Issues.PullRequests.GitHub.Tests\Cake.Issues.PullRequests.GitHub.Tests.csproj", "{0C70A4C8-732B-4870-B914-C86FF2D2CB2F}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {CC3D0C2D-6AC5-44DC-A0DD-D826D76FC00D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CC3D0C2D-6AC5-44DC-A0DD-D826D76FC00D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CC3D0C2D-6AC5-44DC-A0DD-D826D76FC00D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CC3D0C2D-6AC5-44DC-A0DD-D826D76FC00D}.Release|Any CPU.Build.0 = Release|Any CPU + {0C70A4C8-732B-4870-B914-C86FF2D2CB2F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0C70A4C8-732B-4870-B914-C86FF2D2CB2F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0C70A4C8-732B-4870-B914-C86FF2D2CB2F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0C70A4C8-732B-4870-B914-C86FF2D2CB2F}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {BBFD0A4B-FB65-4C3A-88BA-35ECDB3BAF2A} + EndGlobalSection +EndGlobal diff --git a/src/Cake.Issues.PullRequests.GitHub.sln.DotSettings b/src/Cake.Issues.PullRequests.GitHub.sln.DotSettings new file mode 100644 index 0000000..7cc51a4 --- /dev/null +++ b/src/Cake.Issues.PullRequests.GitHub.sln.DotSettings @@ -0,0 +1,3 @@ + + DO_NOT_SHOW + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> \ No newline at end of file diff --git a/src/Cake.Issues.PullRequests.GitHub/Cake.Issues.PullRequests.GitHub.csproj b/src/Cake.Issues.PullRequests.GitHub/Cake.Issues.PullRequests.GitHub.csproj new file mode 100644 index 0000000..d8376e1 --- /dev/null +++ b/src/Cake.Issues.PullRequests.GitHub/Cake.Issues.PullRequests.GitHub.csproj @@ -0,0 +1,32 @@ + + + + netstandard2.0 + Addin for writing code analyzer or linter issues to GitHub + Pascal Berger + Copyright © Pascal Berger and contributors + + + + full + true + ..\Cake.Issues.PullRequests.GitHub.ruleset + + + + bin\Debug\netstandard2.0\Cake.Issues.PullRequests.GitHub.xml + + + + bin\Release\netstandard2.0\Cake.Issues.PullRequests.GitHub.xml + + + + + + + + + + + diff --git a/src/Cake.Issues.PullRequests.GitHub/GitHubPullRequestAliases.cs b/src/Cake.Issues.PullRequests.GitHub/GitHubPullRequestAliases.cs new file mode 100644 index 0000000..966957c --- /dev/null +++ b/src/Cake.Issues.PullRequests.GitHub/GitHubPullRequestAliases.cs @@ -0,0 +1,76 @@ +namespace Cake.Issues.PullRequests.GitHub +{ + using Cake.Core; + using Cake.Core.Annotations; + + /// + /// Contains functionality related to writing code analysis issues to GitHub pull requests. + /// + [CakeAliasCategory(IssuesAliasConstants.MainCakeAliasCategory)] + public static class GitHubPullRequestAliases + { + /// + /// Gets an object for writing issues to GitHub pull requests using the default settings. + /// + /// The context. + /// Object for writing issues to GitHub pull requests. + /// + /// Report code analysis issues reported as MsBuild warnings to a GitHub pull request: + /// + /// + /// + /// + [CakeMethodAlias] + [CakeAliasCategory(PullRequestsAliasConstants.PullRequestSystemCakeAliasCategory)] + public static IPullRequestSystem GitHubPullRequests( + this ICakeContext context) + { + context.NotNull(nameof(context)); + + return new GitHubPullRequestSystem(context, new GitHubPullRequestSettings()); + } + + /// + /// Gets an object for writing issues to GitHub pull requests using the specified settings. + /// + /// The context. + /// Settings for writing issues to GitHub pull requests. + /// Object for writing issues to GitHub pull requests. + /// + /// Report code analysis issues reported as MsBuild warnings to a GitHub pull request: + /// + /// + /// + /// + [CakeMethodAlias] + [CakeAliasCategory(PullRequestsAliasConstants.PullRequestSystemCakeAliasCategory)] + public static IPullRequestSystem GitHubPullRequests( + this ICakeContext context, + GitHubPullRequestSettings settings) + { + context.NotNull(nameof(context)); + settings.NotNull(nameof(settings)); + + return new GitHubPullRequestSystem(context, settings); + } + } +} diff --git a/src/Cake.Issues.PullRequests.GitHub/GitHubPullRequestSettings.cs b/src/Cake.Issues.PullRequests.GitHub/GitHubPullRequestSettings.cs new file mode 100644 index 0000000..7e0f69c --- /dev/null +++ b/src/Cake.Issues.PullRequests.GitHub/GitHubPullRequestSettings.cs @@ -0,0 +1,15 @@ +namespace Cake.Issues.PullRequests.GitHub +{ + /// + /// Settings for . + /// + public class GitHubPullRequestSettings + { + /// + /// Initializes a new instance of the class. + /// + public GitHubPullRequestSettings() + { + } + } +} \ No newline at end of file diff --git a/src/Cake.Issues.PullRequests.GitHub/GitHubPullRequestSystem.cs b/src/Cake.Issues.PullRequests.GitHub/GitHubPullRequestSystem.cs new file mode 100644 index 0000000..20073c1 --- /dev/null +++ b/src/Cake.Issues.PullRequests.GitHub/GitHubPullRequestSystem.cs @@ -0,0 +1,34 @@ +namespace Cake.Issues.PullRequests.GitHub +{ + using System.Collections.Generic; + using Cake.Core; + + /// + /// Class for posting issues to GitHub. + /// + public class GitHubPullRequestSystem : BasePullRequestSystem + { + private readonly ICakeContext context; + private readonly GitHubPullRequestSettings settings; + + /// + /// Initializes a new instance of the class. + /// + /// The Cake context. + /// Settings for writing the issues to GitHub. + public GitHubPullRequestSystem(ICakeContext context, GitHubPullRequestSettings settings) + : base(context?.Log) + { + settings.NotNull(nameof(settings)); + + this.context = context; + this.settings = settings; + } + + /// + protected override void InternalPostDiscussionThreads(IEnumerable issues, string commentSource) + { + // TODO post issues to GitHub through an app + } + } +} diff --git a/tools/packages.config b/tools/packages.config new file mode 100644 index 0000000..878c59d --- /dev/null +++ b/tools/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file From cfc12cc10c41200c46bf4f379eb57ee5dddf277f Mon Sep 17 00:00:00 2001 From: Pascal Berger Date: Sat, 15 Dec 2018 14:39:34 +0100 Subject: [PATCH 02/49] Add Azure Pipelines build definition --- azure-pipelines.yml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 azure-pipelines.yml diff --git a/azure-pipelines.yml b/azure-pipelines.yml new file mode 100644 index 0000000..8f395df --- /dev/null +++ b/azure-pipelines.yml @@ -0,0 +1,16 @@ +trigger: +- develop +- master +- release/* +- hotfix/* + +pr: +- develop + +jobs: +- job: Windows + pool: + vmImage: 'vs2017-win2016' + steps: + - powershell: ./build.ps1 + displayName: 'Cake Build' \ No newline at end of file From b7ce5d341bbe0ed80ea156a677bec6a039820720 Mon Sep 17 00:00:00 2001 From: Pascal Berger Date: Sat, 15 Dec 2018 15:50:34 +0100 Subject: [PATCH 03/49] Update XUnit to 2.4.1 --- .../Cake.Issues.PullRequests.GitHub.Tests.csproj | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/src/Cake.Issues.PullRequests.GitHub.Tests/Cake.Issues.PullRequests.GitHub.Tests.csproj b/src/Cake.Issues.PullRequests.GitHub.Tests/Cake.Issues.PullRequests.GitHub.Tests.csproj index 2fc9049..b6ed49d 100644 --- a/src/Cake.Issues.PullRequests.GitHub.Tests/Cake.Issues.PullRequests.GitHub.Tests.csproj +++ b/src/Cake.Issues.PullRequests.GitHub.Tests/Cake.Issues.PullRequests.GitHub.Tests.csproj @@ -20,13 +20,8 @@ - - - - - - - + + From 5c431a892f9fa3286f7fd21a85622018722e7192 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" Date: Sat, 15 Dec 2018 15:02:25 +0000 Subject: [PATCH 04/49] Bump Shouldly from 3.0.0 to 3.0.2 in /src Bumps [Shouldly](https://github.com/shouldly/shouldly) from 3.0.0 to 3.0.2. - [Release notes](https://github.com/shouldly/shouldly/releases) - [Changelog](https://github.com/shouldly/shouldly/blob/master/BREAKING%20CHANGES.txt) - [Commits](https://github.com/shouldly/shouldly/compare/v3.0.0...v3.0.2) Signed-off-by: dependabot[bot] --- .../Cake.Issues.PullRequests.GitHub.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Cake.Issues.PullRequests.GitHub.Tests/Cake.Issues.PullRequests.GitHub.Tests.csproj b/src/Cake.Issues.PullRequests.GitHub.Tests/Cake.Issues.PullRequests.GitHub.Tests.csproj index b6ed49d..cbb6c35 100644 --- a/src/Cake.Issues.PullRequests.GitHub.Tests/Cake.Issues.PullRequests.GitHub.Tests.csproj +++ b/src/Cake.Issues.PullRequests.GitHub.Tests/Cake.Issues.PullRequests.GitHub.Tests.csproj @@ -18,7 +18,7 @@ - + From 5318739109bb47aacce2809dfb3352d433b89050 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" Date: Sat, 15 Dec 2018 15:17:04 +0000 Subject: [PATCH 05/49] Bump Microsoft.NET.Test.Sdk from 15.8.0 to 15.9.0 in /src Bumps [Microsoft.NET.Test.Sdk](https://github.com/microsoft/vstest) from 15.8.0 to 15.9.0. - [Release notes](https://github.com/microsoft/vstest/releases) - [Commits](https://github.com/microsoft/vstest/compare/v15.8.0...v15.9.0) Signed-off-by: dependabot[bot] --- .../Cake.Issues.PullRequests.GitHub.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Cake.Issues.PullRequests.GitHub.Tests/Cake.Issues.PullRequests.GitHub.Tests.csproj b/src/Cake.Issues.PullRequests.GitHub.Tests/Cake.Issues.PullRequests.GitHub.Tests.csproj index cbb6c35..34d4f58 100644 --- a/src/Cake.Issues.PullRequests.GitHub.Tests/Cake.Issues.PullRequests.GitHub.Tests.csproj +++ b/src/Cake.Issues.PullRequests.GitHub.Tests/Cake.Issues.PullRequests.GitHub.Tests.csproj @@ -15,7 +15,7 @@ - + From 024dc53bebbcffb7bcc5c8fb60b6c07f61935ad5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" Date: Sat, 15 Dec 2018 15:31:11 +0000 Subject: [PATCH 06/49] Bump StyleCop.Analyzers from 1.1.0-beta008 to 1.1.0-beta009 in /src Bumps [StyleCop.Analyzers](https://github.com/DotNetAnalyzers/StyleCopAnalyzers) from 1.1.0-beta008 to 1.1.0-beta009. - [Release notes](https://github.com/DotNetAnalyzers/StyleCopAnalyzers/releases) - [Commits](https://github.com/DotNetAnalyzers/StyleCopAnalyzers/compare/1.1.0-beta008...1.1.0-beta009) Signed-off-by: dependabot[bot] --- .../Cake.Issues.PullRequests.GitHub.Tests.csproj | 2 +- .../Cake.Issues.PullRequests.GitHub.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Cake.Issues.PullRequests.GitHub.Tests/Cake.Issues.PullRequests.GitHub.Tests.csproj b/src/Cake.Issues.PullRequests.GitHub.Tests/Cake.Issues.PullRequests.GitHub.Tests.csproj index 34d4f58..3fa50dc 100644 --- a/src/Cake.Issues.PullRequests.GitHub.Tests/Cake.Issues.PullRequests.GitHub.Tests.csproj +++ b/src/Cake.Issues.PullRequests.GitHub.Tests/Cake.Issues.PullRequests.GitHub.Tests.csproj @@ -19,7 +19,7 @@ - + diff --git a/src/Cake.Issues.PullRequests.GitHub/Cake.Issues.PullRequests.GitHub.csproj b/src/Cake.Issues.PullRequests.GitHub/Cake.Issues.PullRequests.GitHub.csproj index d8376e1..bdeea0c 100644 --- a/src/Cake.Issues.PullRequests.GitHub/Cake.Issues.PullRequests.GitHub.csproj +++ b/src/Cake.Issues.PullRequests.GitHub/Cake.Issues.PullRequests.GitHub.csproj @@ -26,7 +26,7 @@ - + From 111528f0585b1191e6d036568866321a2312ff2d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" Date: Sat, 15 Dec 2018 15:40:47 +0000 Subject: [PATCH 07/49] Bump Microsoft.CodeAnalysis.FxCopAnalyzers from 2.6.1 to 2.6.2 in /src Bumps [Microsoft.CodeAnalysis.FxCopAnalyzers](https://github.com/dotnet/roslyn-analyzers) from 2.6.1 to 2.6.2. - [Release notes](https://github.com/dotnet/roslyn-analyzers/releases) - [Commits](https://github.com/dotnet/roslyn-analyzers/compare/v2.6.1...v2.6.2) Signed-off-by: dependabot[bot] --- .../Cake.Issues.PullRequests.GitHub.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Cake.Issues.PullRequests.GitHub/Cake.Issues.PullRequests.GitHub.csproj b/src/Cake.Issues.PullRequests.GitHub/Cake.Issues.PullRequests.GitHub.csproj index bdeea0c..c5b511b 100644 --- a/src/Cake.Issues.PullRequests.GitHub/Cake.Issues.PullRequests.GitHub.csproj +++ b/src/Cake.Issues.PullRequests.GitHub/Cake.Issues.PullRequests.GitHub.csproj @@ -25,7 +25,7 @@ - + From 65396d55fcf71e2420654f53a9e196f7d41a00f6 Mon Sep 17 00:00:00 2001 From: Pascal Berger Date: Sun, 16 Dec 2018 13:44:46 +0100 Subject: [PATCH 08/49] Add Azure DevOps build badges --- README.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index b1752a9..ad5d8a0 100644 --- a/README.md +++ b/README.md @@ -17,9 +17,10 @@ and for general information about the Cake build automation system see the [Cake ## Build Status -|Develop|Master| -|:--:|:--:| -|[![Build status](https://ci.appveyor.com/api/projects/status/trj0g753r3hcw22k/branch/develop?svg=true)](https://ci.appveyor.com/project/cakecontrib/cake-issues-pullrequests-github/branch/develop)|[![Build status](https://ci.appveyor.com/api/projects/status/trj0g753r3hcw22k/branch/develop?svg=true)](https://ci.appveyor.com/project/cakecontrib/cake-issues-pullrequests-github/branch/master)| +| | Develop | Master | +|:--:|:--:|:--:| +|AppVeyor Windows|[![Build status](https://ci.appveyor.com/api/projects/status/trj0g753r3hcw22k/branch/develop?svg=true)](https://ci.appveyor.com/project/cakecontrib/cake-issues-pullrequests-github/branch/develop)|[![Build status](https://ci.appveyor.com/api/projects/status/trj0g753r3hcw22k/branch/master?svg=true)](https://ci.appveyor.com/project/cakecontrib/cake-issues-pullrequests-github/branch/master)| +|Azure DevOps Windows|[![Build Status](https://dev.azure.com/cake-contrib/Cake.Issues.PullRequests.GitHub/_apis/build/status/cake-contrib.Cake.Issues.PullRequests.GitHub?branchName=develop&jobName=Windows)](https://dev.azure.com/cake-contrib/Cake.Issues.PullRequests.GitHub/_build/latest?definitionId=17?branchName=develop)|[![Build Status](https://dev.azure.com/cake-contrib/Cake.Issues.PullRequests.GitHub/_apis/build/status/cake-contrib.Cake.Issues.PullRequests.GitHub?branchName=master&jobName=Windows)](https://dev.azure.com/cake-contrib/Cake.Issues.PullRequests.GitHub/_build/latest?definitionId=17?branchName=master)| ## Code Coverage From 03030a92bf16445b984bf0493175da322f22910d Mon Sep 17 00:00:00 2001 From: Pascal Berger Date: Tue, 8 Jan 2019 21:20:18 +0100 Subject: [PATCH 09/49] Build with Cake 0.32.0 --- tools/packages.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/packages.config b/tools/packages.config index 878c59d..7d3a604 100644 --- a/tools/packages.config +++ b/tools/packages.config @@ -1,4 +1,4 @@ - + \ No newline at end of file From 74eeef53464db572913107cecaad413fe84d3ef6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" Date: Fri, 11 Jan 2019 04:42:01 +0000 Subject: [PATCH 10/49] Bump Microsoft.CodeAnalysis.FxCopAnalyzers from 2.6.2 to 2.6.3 in /src Bumps [Microsoft.CodeAnalysis.FxCopAnalyzers](https://github.com/dotnet/roslyn-analyzers) from 2.6.2 to 2.6.3. - [Release notes](https://github.com/dotnet/roslyn-analyzers/releases) - [Commits](https://github.com/dotnet/roslyn-analyzers/compare/v2.6.2...v2.6.3) Signed-off-by: dependabot[bot] --- .../Cake.Issues.PullRequests.GitHub.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Cake.Issues.PullRequests.GitHub/Cake.Issues.PullRequests.GitHub.csproj b/src/Cake.Issues.PullRequests.GitHub/Cake.Issues.PullRequests.GitHub.csproj index c5b511b..a966f65 100644 --- a/src/Cake.Issues.PullRequests.GitHub/Cake.Issues.PullRequests.GitHub.csproj +++ b/src/Cake.Issues.PullRequests.GitHub/Cake.Issues.PullRequests.GitHub.csproj @@ -25,7 +25,7 @@ - + From 2608ce3a4cc56940f6259e688b3756ebc8f00e91 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" Date: Fri, 1 Mar 2019 05:08:03 +0000 Subject: [PATCH 11/49] Bump Microsoft.NET.Test.Sdk from 15.9.0 to 16.0.0 in /src Bumps [Microsoft.NET.Test.Sdk](https://github.com/microsoft/vstest) from 15.9.0 to 16.0.0. - [Release notes](https://github.com/microsoft/vstest/releases) - [Commits](https://github.com/microsoft/vstest/commits) Signed-off-by: dependabot[bot] --- .../Cake.Issues.PullRequests.GitHub.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Cake.Issues.PullRequests.GitHub.Tests/Cake.Issues.PullRequests.GitHub.Tests.csproj b/src/Cake.Issues.PullRequests.GitHub.Tests/Cake.Issues.PullRequests.GitHub.Tests.csproj index 3fa50dc..137600d 100644 --- a/src/Cake.Issues.PullRequests.GitHub.Tests/Cake.Issues.PullRequests.GitHub.Tests.csproj +++ b/src/Cake.Issues.PullRequests.GitHub.Tests/Cake.Issues.PullRequests.GitHub.Tests.csproj @@ -15,7 +15,7 @@ - + From fa47269aee6a89ce11a2c6c833d7b0d614c3789e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" Date: Mon, 4 Mar 2019 17:42:48 +0000 Subject: [PATCH 12/49] Bump Microsoft.NET.Test.Sdk from 16.0.0 to 16.0.1 in /src Bumps [Microsoft.NET.Test.Sdk](https://github.com/microsoft/vstest) from 16.0.0 to 16.0.1. - [Release notes](https://github.com/microsoft/vstest/releases) - [Commits](https://github.com/microsoft/vstest/commits) Signed-off-by: dependabot[bot] --- .../Cake.Issues.PullRequests.GitHub.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Cake.Issues.PullRequests.GitHub.Tests/Cake.Issues.PullRequests.GitHub.Tests.csproj b/src/Cake.Issues.PullRequests.GitHub.Tests/Cake.Issues.PullRequests.GitHub.Tests.csproj index 137600d..f37d792 100644 --- a/src/Cake.Issues.PullRequests.GitHub.Tests/Cake.Issues.PullRequests.GitHub.Tests.csproj +++ b/src/Cake.Issues.PullRequests.GitHub.Tests/Cake.Issues.PullRequests.GitHub.Tests.csproj @@ -15,7 +15,7 @@ - + From 9bdcdf037d3ee8bc57e852eb492ea2b22415b035 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" Date: Wed, 27 Mar 2019 04:24:33 +0000 Subject: [PATCH 13/49] Bump Microsoft.CodeAnalysis.FxCopAnalyzers from 2.6.3 to 2.9.0 in /src Bumps [Microsoft.CodeAnalysis.FxCopAnalyzers](https://github.com/dotnet/roslyn-analyzers) from 2.6.3 to 2.9.0. - [Release notes](https://github.com/dotnet/roslyn-analyzers/releases) - [Commits](https://github.com/dotnet/roslyn-analyzers/commits) Signed-off-by: dependabot[bot] --- .../Cake.Issues.PullRequests.GitHub.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Cake.Issues.PullRequests.GitHub/Cake.Issues.PullRequests.GitHub.csproj b/src/Cake.Issues.PullRequests.GitHub/Cake.Issues.PullRequests.GitHub.csproj index a966f65..6f24a99 100644 --- a/src/Cake.Issues.PullRequests.GitHub/Cake.Issues.PullRequests.GitHub.csproj +++ b/src/Cake.Issues.PullRequests.GitHub/Cake.Issues.PullRequests.GitHub.csproj @@ -25,7 +25,7 @@ - + From 335bebad9771d9bba1af55a341649fd7eaa526b0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" Date: Fri, 29 Mar 2019 04:42:16 +0000 Subject: [PATCH 14/49] Bump Microsoft.CodeAnalysis.FxCopAnalyzers from 2.9.0 to 2.9.1 in /src Bumps [Microsoft.CodeAnalysis.FxCopAnalyzers](https://github.com/dotnet/roslyn-analyzers) from 2.9.0 to 2.9.1. - [Release notes](https://github.com/dotnet/roslyn-analyzers/releases) - [Commits](https://github.com/dotnet/roslyn-analyzers/compare/v2.9.0...v2.9.1) Signed-off-by: dependabot[bot] --- .../Cake.Issues.PullRequests.GitHub.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Cake.Issues.PullRequests.GitHub/Cake.Issues.PullRequests.GitHub.csproj b/src/Cake.Issues.PullRequests.GitHub/Cake.Issues.PullRequests.GitHub.csproj index 6f24a99..e489433 100644 --- a/src/Cake.Issues.PullRequests.GitHub/Cake.Issues.PullRequests.GitHub.csproj +++ b/src/Cake.Issues.PullRequests.GitHub/Cake.Issues.PullRequests.GitHub.csproj @@ -25,7 +25,7 @@ - + From 518b5d115f9c747deeed96a0449213d2d9056307 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" Date: Thu, 18 Apr 2019 04:33:47 +0000 Subject: [PATCH 15/49] Bump Microsoft.CodeAnalysis.FxCopAnalyzers from 2.9.1 to 2.9.2 in /src Bumps [Microsoft.CodeAnalysis.FxCopAnalyzers](https://github.com/dotnet/roslyn-analyzers) from 2.9.1 to 2.9.2. - [Release notes](https://github.com/dotnet/roslyn-analyzers/releases) - [Commits](https://github.com/dotnet/roslyn-analyzers/compare/v2.9.1...v2.9.2) Signed-off-by: dependabot[bot] --- .../Cake.Issues.PullRequests.GitHub.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Cake.Issues.PullRequests.GitHub/Cake.Issues.PullRequests.GitHub.csproj b/src/Cake.Issues.PullRequests.GitHub/Cake.Issues.PullRequests.GitHub.csproj index e489433..dd9fa97 100644 --- a/src/Cake.Issues.PullRequests.GitHub/Cake.Issues.PullRequests.GitHub.csproj +++ b/src/Cake.Issues.PullRequests.GitHub/Cake.Issues.PullRequests.GitHub.csproj @@ -25,7 +25,7 @@ - + From a306e9d4e149d331309226ba1601488b11179bf2 Mon Sep 17 00:00:00 2001 From: Pascal Berger Date: Mon, 22 Jul 2019 15:36:09 +0200 Subject: [PATCH 16/49] Fix link of Azure DevOps Windows badge --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ad5d8a0..66ca839 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ and for general information about the Cake build automation system see the [Cake | | Develop | Master | |:--:|:--:|:--:| |AppVeyor Windows|[![Build status](https://ci.appveyor.com/api/projects/status/trj0g753r3hcw22k/branch/develop?svg=true)](https://ci.appveyor.com/project/cakecontrib/cake-issues-pullrequests-github/branch/develop)|[![Build status](https://ci.appveyor.com/api/projects/status/trj0g753r3hcw22k/branch/master?svg=true)](https://ci.appveyor.com/project/cakecontrib/cake-issues-pullrequests-github/branch/master)| -|Azure DevOps Windows|[![Build Status](https://dev.azure.com/cake-contrib/Cake.Issues.PullRequests.GitHub/_apis/build/status/cake-contrib.Cake.Issues.PullRequests.GitHub?branchName=develop&jobName=Windows)](https://dev.azure.com/cake-contrib/Cake.Issues.PullRequests.GitHub/_build/latest?definitionId=17?branchName=develop)|[![Build Status](https://dev.azure.com/cake-contrib/Cake.Issues.PullRequests.GitHub/_apis/build/status/cake-contrib.Cake.Issues.PullRequests.GitHub?branchName=master&jobName=Windows)](https://dev.azure.com/cake-contrib/Cake.Issues.PullRequests.GitHub/_build/latest?definitionId=17?branchName=master)| +|Azure DevOps Windows|[![Build Status](https://dev.azure.com/cake-contrib/Cake.Issues.PullRequests.GitHub/_apis/build/status/cake-contrib.Cake.Issues.PullRequests.GitHub?branchName=develop&jobName=Windows)](https://dev.azure.com/cake-contrib/Cake.Issues.PullRequests.GitHub/_build/latest?definitionId=17&branchName=develop)|[![Build Status](https://dev.azure.com/cake-contrib/Cake.Issues.PullRequests.GitHub/_apis/build/status/cake-contrib.Cake.Issues.PullRequests.GitHub?branchName=master&jobName=Windows)](https://dev.azure.com/cake-contrib/Cake.Issues.PullRequests.GitHub/_build/latest?definitionId=17&branchName=master)| ## Code Coverage From 336ce60374db7db15494ccc80dc7f22951a2e7eb Mon Sep 17 00:00:00 2001 From: Pascal Berger Date: Sun, 19 Jan 2020 23:01:58 +0100 Subject: [PATCH 17/49] Update bootstrappers --- build.ps1 | 119 ++++++++++++++++++++++++++++++++++++++---------------- build.sh | 91 +++++++++++++++++++++++++---------------- 2 files changed, 140 insertions(+), 70 deletions(-) diff --git a/build.ps1 b/build.ps1 index bdfb32b..405b10f 100644 --- a/build.ps1 +++ b/build.ps1 @@ -5,11 +5,14 @@ ########################################################################## <# + .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 @@ -18,19 +21,22 @@ The build script target to run. 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 -Tells Cake to use the latest Roslyn release. -.PARAMETER WhatIf -Performs a dry run of the build script. -No tasks will be executed. +Uses the nightly builds of the Roslyn script engine. .PARAMETER Mono -Tells Cake to use the Mono scripting engine. +Uses the Mono compiler rather than the Roslyn script engine. .PARAMETER SkipToolPackageRestore Skips restoring of packages. .PARAMETER ScriptArgs Remaining arguments are added here. + .LINK -http://cakebuild.net +https://cakebuild.net + #> [CmdletBinding()] @@ -41,9 +47,10 @@ Param( [string]$Configuration = "Release", [ValidateSet("Quiet", "Minimal", "Normal", "Verbose", "Diagnostic")] [string]$Verbosity = "Verbose", + [switch]$ShowDescription, + [Alias("WhatIf", "Noop")] + [switch]$DryRun, [switch]$Experimental, - [Alias("DryRun","Noop")] - [switch]$WhatIf, [switch]$Mono, [switch]$SkipToolPackageRestore, [Parameter(Position=0,Mandatory=$false,ValueFromRemainingArguments=$true)] @@ -75,6 +82,15 @@ function MD5HashFile([string] $filePath) } } +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){ @@ -82,31 +98,15 @@ if(!$PSScriptRoot){ } $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" - -# Should we use mono? -$UseMono = ""; -if($Mono.IsPresent) { - Write-Verbose -Message "Using the Mono based scripting engine." - $UseMono = "-mono" -} - -# Should we use the new Roslyn? -$UseExperimental = ""; -if($Experimental.IsPresent -and !($Mono.IsPresent)) { - Write-Verbose -Message "Using experimental version of Roslyn." - $UseExperimental = "-experimental" -} - -# Is this a dry run? -$UseDryRun = ""; -if($WhatIf.IsPresent) { - $UseDryRun = "-dryrun" -} +$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)) { @@ -116,8 +116,10 @@ if ((Test-Path $PSScriptRoot) -and !(Test-Path $TOOLS_DIR)) { # 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 { + 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." } } @@ -125,7 +127,7 @@ if (!(Test-Path $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 $_) } + $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)." @@ -137,7 +139,8 @@ if (!(Test-Path $NUGET_EXE)) { if (!(Test-Path $NUGET_EXE)) { Write-Verbose -Message "Downloading NuGet.exe..." try { - (New-Object System.Net.WebClient).DownloadFile($NUGET_URL, $NUGET_EXE) + $wc = GetProxyEnabledWebClient + $wc.DownloadFile($NUGET_URL, $NUGET_EXE) } catch { Throw "Could not download NuGet.exe." } @@ -160,16 +163,51 @@ if(-Not $SkipToolPackageRestore.IsPresent) { } 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" + $NuGetOutput = Invoke-Expression "&`"$NUGET_EXE`" install -ExcludeVersion -OutputDirectory `"$TOOLS_DIR`"" if ($LASTEXITCODE -ne 0) { - Throw "An error occured while restoring NuGet tools." + 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 } @@ -178,7 +216,18 @@ 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..." -Invoke-Expression "& `"$CAKE_EXE`" `"$Script`" -target=`"$Target`" -configuration=`"$Configuration`" -verbosity=`"$Verbosity`" $UseMono $UseDryRun $UseExperimental $ScriptArgs" +&$CAKE_EXE $cakeArguments exit $LASTEXITCODE \ No newline at end of file diff --git a/build.sh b/build.sh index a541ec1..4b690aa 100644 --- a/build.sh +++ b/build.sh @@ -1,33 +1,36 @@ #!/usr/bin/env bash -############################################################### -# This is the Cake bootstrapper script that is responsible for -# downloading Cake and all specified tools from NuGet. -############################################################### +########################################################################## +# 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. +########################################################################## # Define directories. SCRIPT_DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) TOOLS_DIR=$SCRIPT_DIR/tools NUGET_EXE=$TOOLS_DIR/nuget.exe -CAKE_EXE=$TOOLS_DIR/Cake/Cake.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 + +# Temporarily skip verification of addins. +export CAKE_SETTINGS_SKIPVERIFICATION='true' # Define default arguments. -SCRIPT="setup.cake" +SCRIPT="recipe.cake" TARGET="Default" CONFIGURATION="Release" VERBOSITY="verbose" DRYRUN= -SHOW_VERSION=false SCRIPT_ARGUMENTS=() # Parse arguments. for i in "$@"; do case $1 in - -s|--script) SCRIPT="$2"; shift ;; -t|--target) TARGET="$2"; shift ;; -c|--configuration) CONFIGURATION="$2"; shift ;; -v|--verbosity) VERBOSITY="$2"; shift ;; -d|--dryrun) DRYRUN="-dryrun" ;; - --version) SHOW_VERSION=true ;; --) shift; SCRIPT_ARGUMENTS+=("$@"); break ;; *) SCRIPT_ARGUMENTS+=("$1") ;; esac @@ -35,48 +38,66 @@ for i in "$@"; do done # Make sure the tools folder exist. -if [ ! -d $TOOLS_DIR ]; then - mkdir $TOOLS_DIR +if [ ! -d "$TOOLS_DIR" ]; then + mkdir "$TOOLS_DIR" fi -# Make sure that packages.config exist. -if [ ! -f $TOOLS_DIR/packages.config ]; then - echo "Downloading packages.config..." - curl -Lsfo $TOOLS_DIR/packages.config http://cakebuild.net/bootstrapper/packages - if [ $? -ne 0 ]; then - echo "An error occured while downloading packages.config." - exit 1 - 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 +if [ ! -f "$NUGET_EXE" ]; then echo "Downloading NuGet..." - curl -Lsfo $NUGET_EXE https://dist.nuget.org/win-x86-commandline/latest/nuget.exe + curl -Lsfo "$NUGET_EXE" $NUGET_URL if [ $? -ne 0 ]; then - echo "An error occured while downloading nuget.exe." + echo "An error occurred while downloading nuget.exe." exit 1 fi fi -# Restore tools from NuGet. -pushd $TOOLS_DIR >/dev/null -mono $NUGET_EXE install -ExcludeVersion -PreRelease -Source https://www.myget.org/F/cake/api/v3/index.json -if [ $? -ne 0 ]; then - echo "Could not restore NuGet packages." - exit 1 +########################################################################### +# 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 -popd >/dev/null # Make sure that Cake has been installed. -if [ ! -f $CAKE_EXE ]; then +if [ ! -f "$CAKE_EXE" ]; then echo "Could not find Cake.exe at '$CAKE_EXE'." exit 1 fi +########################################################################### +# RUN BUILD SCRIPT +########################################################################### + # Start Cake -if $SHOW_VERSION; then - exec mono $CAKE_EXE -version -else - exec mono $CAKE_EXE $SCRIPT -verbosity=$VERBOSITY -configuration=$CONFIGURATION -target=$TARGET $DRYRUN "${SCRIPT_ARGUMENTS[@]}" -fi +exec mono "$CAKE_EXE" $SCRIPT --verbosity=$VERBOSITY --configuration=$CONFIGURATION --target=$TARGET $DRYRUN "${SCRIPT_ARGUMENTS[@]}" From b0864ed9ef1ac41346678b99d08aa118070d1789 Mon Sep 17 00:00:00 2001 From: Pascal Berger Date: Sun, 19 Jan 2020 23:07:28 +0100 Subject: [PATCH 18/49] Pin to Cake.Recipe 1.1.1 and Cake 0.32.1 --- build.ps1 | 2 +- setup.cake => recipe.cake | 2 +- tools/packages.config | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) rename setup.cake => recipe.cake (91%) diff --git a/build.ps1 b/build.ps1 index 405b10f..9a6ade2 100644 --- a/build.ps1 +++ b/build.ps1 @@ -41,7 +41,7 @@ https://cakebuild.net [CmdletBinding()] Param( - [string]$Script = "setup.cake", + [string]$Script = "recipe.cake", [string]$Target = "Default", [ValidateSet("Release", "Debug")] [string]$Configuration = "Release", diff --git a/setup.cake b/recipe.cake similarity index 91% rename from setup.cake rename to recipe.cake index 8ec3eed..7c0a345 100644 --- a/setup.cake +++ b/recipe.cake @@ -1,4 +1,4 @@ -#load nuget:https://www.myget.org/F/cake-contrib/api/v2?package=Cake.Recipe&prerelease +#load nuget:?package=Cake.Recipe&version=1.1.1 Environment.SetVariableNames(); diff --git a/tools/packages.config b/tools/packages.config index 7d3a604..e7f7fdd 100644 --- a/tools/packages.config +++ b/tools/packages.config @@ -1,4 +1,4 @@ - + \ No newline at end of file From 056ddee186717c4577f16a2bd3397ea1fc5e57ab Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 3 Aug 2020 14:15:41 +0000 Subject: [PATCH 19/49] Bump xunit.runner.visualstudio from 2.4.1 to 2.4.3 in /src Bumps [xunit.runner.visualstudio](https://github.com/xunit/visualstudio.xunit) from 2.4.1 to 2.4.3. - [Release notes](https://github.com/xunit/visualstudio.xunit/releases) - [Commits](https://github.com/xunit/visualstudio.xunit/commits/v2.4.3) Signed-off-by: dependabot-preview[bot] --- .../Cake.Issues.PullRequests.GitHub.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Cake.Issues.PullRequests.GitHub.Tests/Cake.Issues.PullRequests.GitHub.Tests.csproj b/src/Cake.Issues.PullRequests.GitHub.Tests/Cake.Issues.PullRequests.GitHub.Tests.csproj index f37d792..34e3e0a 100644 --- a/src/Cake.Issues.PullRequests.GitHub.Tests/Cake.Issues.PullRequests.GitHub.Tests.csproj +++ b/src/Cake.Issues.PullRequests.GitHub.Tests/Cake.Issues.PullRequests.GitHub.Tests.csproj @@ -21,7 +21,7 @@ - + From 2ab1c58468e1e8ce4775e1dd4596241c0813ab4f Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Thu, 24 Sep 2020 18:50:26 +0000 Subject: [PATCH 20/49] Bump StyleCop.Analyzers from 1.1.0-beta009 to 1.1.118 in /src Bumps [StyleCop.Analyzers](https://github.com/DotNetAnalyzers/StyleCopAnalyzers) from 1.1.0-beta009 to 1.1.118. - [Release notes](https://github.com/DotNetAnalyzers/StyleCopAnalyzers/releases) - [Commits](https://github.com/DotNetAnalyzers/StyleCopAnalyzers/compare/1.1.0-beta009...1.1.118) Signed-off-by: dependabot[bot] --- .../Cake.Issues.PullRequests.GitHub.Tests.csproj | 2 +- .../Cake.Issues.PullRequests.GitHub.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Cake.Issues.PullRequests.GitHub.Tests/Cake.Issues.PullRequests.GitHub.Tests.csproj b/src/Cake.Issues.PullRequests.GitHub.Tests/Cake.Issues.PullRequests.GitHub.Tests.csproj index 34e3e0a..783dee8 100644 --- a/src/Cake.Issues.PullRequests.GitHub.Tests/Cake.Issues.PullRequests.GitHub.Tests.csproj +++ b/src/Cake.Issues.PullRequests.GitHub.Tests/Cake.Issues.PullRequests.GitHub.Tests.csproj @@ -19,7 +19,7 @@ - + diff --git a/src/Cake.Issues.PullRequests.GitHub/Cake.Issues.PullRequests.GitHub.csproj b/src/Cake.Issues.PullRequests.GitHub/Cake.Issues.PullRequests.GitHub.csproj index dd9fa97..f606909 100644 --- a/src/Cake.Issues.PullRequests.GitHub/Cake.Issues.PullRequests.GitHub.csproj +++ b/src/Cake.Issues.PullRequests.GitHub/Cake.Issues.PullRequests.GitHub.csproj @@ -26,7 +26,7 @@ - + From 8675f7fa228440f4ea8b1dc11641016fe4fa5df5 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Thu, 24 Sep 2020 19:07:34 +0000 Subject: [PATCH 21/49] Bump Microsoft.CodeAnalysis.FxCopAnalyzers from 2.9.2 to 3.3.0 in /src Bumps [Microsoft.CodeAnalysis.FxCopAnalyzers](https://github.com/dotnet/roslyn-analyzers) from 2.9.2 to 3.3.0. - [Release notes](https://github.com/dotnet/roslyn-analyzers/releases) - [Changelog](https://github.com/dotnet/roslyn-analyzers/blob/master/PostReleaseActivities.md) - [Commits](https://github.com/dotnet/roslyn-analyzers/compare/v2.9.2...v3.3.0) Signed-off-by: dependabot-preview[bot] --- .../Cake.Issues.PullRequests.GitHub.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Cake.Issues.PullRequests.GitHub/Cake.Issues.PullRequests.GitHub.csproj b/src/Cake.Issues.PullRequests.GitHub/Cake.Issues.PullRequests.GitHub.csproj index f606909..6f8d6fb 100644 --- a/src/Cake.Issues.PullRequests.GitHub/Cake.Issues.PullRequests.GitHub.csproj +++ b/src/Cake.Issues.PullRequests.GitHub/Cake.Issues.PullRequests.GitHub.csproj @@ -25,7 +25,7 @@ - + From c9044c13dba62ea5d69f436b8eca47286105bf75 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Thu, 24 Sep 2020 19:15:27 +0000 Subject: [PATCH 22/49] Bump Cake.Issues from 0.6.0 to 0.9.0 in /src Bumps [Cake.Issues](https://github.com/cake-contrib/Cake.Issues) from 0.6.0 to 0.9.0. - [Release notes](https://github.com/cake-contrib/Cake.Issues/releases) - [Changelog](https://github.com/cake-contrib/Cake.Issues/blob/develop/GitReleaseManager.yaml) - [Commits](https://github.com/cake-contrib/Cake.Issues/compare/0.6.0...0.9.0) Signed-off-by: dependabot-preview[bot] --- .../Cake.Issues.PullRequests.GitHub.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Cake.Issues.PullRequests.GitHub/Cake.Issues.PullRequests.GitHub.csproj b/src/Cake.Issues.PullRequests.GitHub/Cake.Issues.PullRequests.GitHub.csproj index 6f8d6fb..460480a 100644 --- a/src/Cake.Issues.PullRequests.GitHub/Cake.Issues.PullRequests.GitHub.csproj +++ b/src/Cake.Issues.PullRequests.GitHub/Cake.Issues.PullRequests.GitHub.csproj @@ -23,7 +23,7 @@ - + From 61a0b609d62f167252f4a4f4cb3679a18f5e9b16 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Sat, 19 Sep 2020 09:55:17 +0000 Subject: [PATCH 23/49] Bump Cake.Issues.Testing from 0.6.0 to 0.9.0 in /src Bumps [Cake.Issues.Testing](https://github.com/cake-contrib/Cake.Issues) from 0.6.0 to 0.9.0. - [Release notes](https://github.com/cake-contrib/Cake.Issues/releases) - [Changelog](https://github.com/cake-contrib/Cake.Issues/blob/develop/GitReleaseManager.yaml) - [Commits](https://github.com/cake-contrib/Cake.Issues/compare/0.6.0...0.9.0) Signed-off-by: dependabot-preview[bot] --- .../Cake.Issues.PullRequests.GitHub.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Cake.Issues.PullRequests.GitHub.Tests/Cake.Issues.PullRequests.GitHub.Tests.csproj b/src/Cake.Issues.PullRequests.GitHub.Tests/Cake.Issues.PullRequests.GitHub.Tests.csproj index 783dee8..3e282b8 100644 --- a/src/Cake.Issues.PullRequests.GitHub.Tests/Cake.Issues.PullRequests.GitHub.Tests.csproj +++ b/src/Cake.Issues.PullRequests.GitHub.Tests/Cake.Issues.PullRequests.GitHub.Tests.csproj @@ -14,7 +14,7 @@ - + From 1680233055b71d7fd0ce327dc7b8a51c73e9b3a5 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Thu, 24 Sep 2020 19:15:28 +0000 Subject: [PATCH 24/49] Bump Cake.Issues.PullRequests from 0.6.0 to 0.9.0 in /src Bumps [Cake.Issues.PullRequests](https://github.com/cake-contrib/Cake.Issues.PullRequests) from 0.6.0 to 0.9.0. - [Release notes](https://github.com/cake-contrib/Cake.Issues.PullRequests/releases) - [Changelog](https://github.com/cake-contrib/Cake.Issues.PullRequests/blob/develop/GitReleaseManager.yaml) - [Commits](https://github.com/cake-contrib/Cake.Issues.PullRequests/compare/0.6.0...0.9.0) Signed-off-by: dependabot-preview[bot] --- .../Cake.Issues.PullRequests.GitHub.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Cake.Issues.PullRequests.GitHub/Cake.Issues.PullRequests.GitHub.csproj b/src/Cake.Issues.PullRequests.GitHub/Cake.Issues.PullRequests.GitHub.csproj index 460480a..053b8e2 100644 --- a/src/Cake.Issues.PullRequests.GitHub/Cake.Issues.PullRequests.GitHub.csproj +++ b/src/Cake.Issues.PullRequests.GitHub/Cake.Issues.PullRequests.GitHub.csproj @@ -24,7 +24,7 @@ - + From 6e047b3b9624db735841f730421721ea3cefe20e Mon Sep 17 00:00:00 2001 From: Pascal Berger Date: Thu, 24 Sep 2020 21:24:54 +0200 Subject: [PATCH 25/49] Build against Cake 0.33.3 --- .../Cake.Issues.PullRequests.GitHub.Tests.csproj | 4 ++-- .../Cake.Issues.PullRequests.GitHub.csproj | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Cake.Issues.PullRequests.GitHub.Tests/Cake.Issues.PullRequests.GitHub.Tests.csproj b/src/Cake.Issues.PullRequests.GitHub.Tests/Cake.Issues.PullRequests.GitHub.Tests.csproj index 3e282b8..7cd6dff 100644 --- a/src/Cake.Issues.PullRequests.GitHub.Tests/Cake.Issues.PullRequests.GitHub.Tests.csproj +++ b/src/Cake.Issues.PullRequests.GitHub.Tests/Cake.Issues.PullRequests.GitHub.Tests.csproj @@ -16,8 +16,8 @@ - - + + diff --git a/src/Cake.Issues.PullRequests.GitHub/Cake.Issues.PullRequests.GitHub.csproj b/src/Cake.Issues.PullRequests.GitHub/Cake.Issues.PullRequests.GitHub.csproj index 053b8e2..e837a58 100644 --- a/src/Cake.Issues.PullRequests.GitHub/Cake.Issues.PullRequests.GitHub.csproj +++ b/src/Cake.Issues.PullRequests.GitHub/Cake.Issues.PullRequests.GitHub.csproj @@ -22,7 +22,7 @@ - + From 532bed1bcd6a3ef82281e3cae38d01b14d7e2550 Mon Sep 17 00:00:00 2001 From: Pascal Berger Date: Thu, 24 Sep 2020 22:11:50 +0200 Subject: [PATCH 26/49] Rename to Cake.Issues.PullRequests.GitHubActions --- LICENSE | 2 +- README.md | 22 +++++------ ....Issues.PullRequests.GitHubActions.nuspec} | 26 ++++++------- recipe.cake | 8 ++-- .../GitHubPullRequestSettings.cs | 15 -------- ....PullRequests.GitHubActions.Tests.ruleset} | 4 +- ...s.PullRequests.GitHubActions.Tests.csproj} | 6 +-- .../GitHubActionsBuildSettingsTests.cs} | 4 +- ...Issues.PullRequests.GitHubActions.ruleset} | 2 +- ...ake.Issues.PullRequests.GitHubActions.sln} | 4 +- ...ullRequests.GitHubActions.sln.DotSettings} | 0 ....Issues.PullRequests.GitHubActions.csproj} | 8 ++-- .../GitHubActionsBuildSettings.cs | 15 ++++++++ .../GitHubActionsBuildsAliases.cs} | 38 +++++++++---------- .../GitHubPullRequestSystem.cs | 17 +++++---- 15 files changed, 86 insertions(+), 85 deletions(-) rename nuspec/nuget/{Cake.Issues.PullRequests.GitHub.nuspec => Cake.Issues.PullRequests.GitHubActions.nuspec} (54%) delete mode 100644 src/Cake.Issues.PullRequests.GitHub/GitHubPullRequestSettings.cs rename src/{Cake.Issues.PullRequests.GitHub.Tests.ruleset => Cake.Issues.PullRequests.GitHubActions.Tests.ruleset} (52%) rename src/{Cake.Issues.PullRequests.GitHub.Tests/Cake.Issues.PullRequests.GitHub.Tests.csproj => Cake.Issues.PullRequests.GitHubActions.Tests/Cake.Issues.PullRequests.GitHubActions.Tests.csproj} (80%) rename src/{Cake.Issues.PullRequests.GitHub.Tests/GitHubPullRequestSettingsTests.cs => Cake.Issues.PullRequests.GitHubActions.Tests/GitHubActionsBuildSettingsTests.cs} (61%) rename src/{Cake.Issues.PullRequests.GitHub.ruleset => Cake.Issues.PullRequests.GitHubActions.ruleset} (98%) rename src/{Cake.Issues.PullRequests.GitHub.sln => Cake.Issues.PullRequests.GitHubActions.sln} (80%) rename src/{Cake.Issues.PullRequests.GitHub.sln.DotSettings => Cake.Issues.PullRequests.GitHubActions.sln.DotSettings} (100%) rename src/{Cake.Issues.PullRequests.GitHub/Cake.Issues.PullRequests.GitHub.csproj => Cake.Issues.PullRequests.GitHubActions/Cake.Issues.PullRequests.GitHubActions.csproj} (84%) create mode 100644 src/Cake.Issues.PullRequests.GitHubActions/GitHubActionsBuildSettings.cs rename src/{Cake.Issues.PullRequests.GitHub/GitHubPullRequestAliases.cs => Cake.Issues.PullRequests.GitHubActions/GitHubActionsBuildsAliases.cs} (62%) rename src/{Cake.Issues.PullRequests.GitHub => Cake.Issues.PullRequests.GitHubActions}/GitHubPullRequestSystem.cs (56%) diff --git a/LICENSE b/LICENSE index 84f6451..8021318 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2018 Pascal Berger +Copyright (c) 2018-2020 Pascal Berger Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index 66ca839..919d1dc 100644 --- a/README.md +++ b/README.md @@ -1,34 +1,34 @@ -# GitHub support for Cake Issues Addin +# GitHub Actions support for Cake Issues Addin This addin for the Cake Build Automation System allows you to write issues found using any code -analyzer or linter to GitHub pull requests using the [Cake Issues addin](https://github.com/cake-contrib/Cake.Issues). +analyzer or linter to GitHub Actions builds using the [Cake Issues addin](https://github.com/cake-contrib/Cake.Issues). -For more information about this add-in see the [Cake.Issues website](https://cake-contrib.github.io/Cake.Issues.Website) -and for general information about the Cake build automation system see the [Cake website](http://cakebuild.net) +For more information about this add-in see the [Cake.Issues website](https://cakeissues.net) +and for general information about the Cake build automation system see the [Cake website](https://cakebuild.net) -[![License](http://img.shields.io/:license-mit-blue.svg)](https://github.com/cake-contrib/Cake.Issues.PullRequests.GitHub/blob/feature/build/LICENSE) +[![License](http://img.shields.io/:license-mit-blue.svg)](https://github.com/cake-contrib/Cake.Issues.PullRequests.GitHubActions/blob/feature/build/LICENSE) ## Information | | Stable | Pre-release | |:--:|:--:|:--:| -|GitHub Release|-|[![GitHub release](https://img.shields.io/github/release/cake-contrib/Cake.Issues.PullRequests.GitHub.svg)](https://github.com/cake-contrib/Cake.Issues.PullRequests.GitHub/releases/latest)| -|NuGet|[![NuGet](https://img.shields.io/nuget/v/Cake.Issues.PullRequests.GitHub.svg)](https://www.nuget.org/packages/Cake.Issues.PullRequests.GitHub)|[![NuGet](https://img.shields.io/nuget/vpre/Cake.Issues.PullRequests.GitHub.svg)](https://www.nuget.org/packages/Cake.Issues.PullRequests.GitHub)| +|GitHub Release|-|[![GitHub release](https://img.shields.io/github/release/cake-contrib/Cake.Issues.PullRequests.GitHubActions.svg)](https://github.com/cake-contrib/Cake.Issues.PullRequests.GitHubActions/releases/latest)| +|NuGet|[![NuGet](https://img.shields.io/nuget/v/Cake.Issues.PullRequests.GitHubActions.svg)](https://www.nuget.org/packages/Cake.Issues.PullRequests.GitHubActions)|[![NuGet](https://img.shields.io/nuget/vpre/Cake.Issues.PullRequests.GitHubActions.svg)](https://www.nuget.org/packages/Cake.Issues.PullRequests.GitHubActions)| ## Build Status | | Develop | Master | |:--:|:--:|:--:| -|AppVeyor Windows|[![Build status](https://ci.appveyor.com/api/projects/status/trj0g753r3hcw22k/branch/develop?svg=true)](https://ci.appveyor.com/project/cakecontrib/cake-issues-pullrequests-github/branch/develop)|[![Build status](https://ci.appveyor.com/api/projects/status/trj0g753r3hcw22k/branch/master?svg=true)](https://ci.appveyor.com/project/cakecontrib/cake-issues-pullrequests-github/branch/master)| -|Azure DevOps Windows|[![Build Status](https://dev.azure.com/cake-contrib/Cake.Issues.PullRequests.GitHub/_apis/build/status/cake-contrib.Cake.Issues.PullRequests.GitHub?branchName=develop&jobName=Windows)](https://dev.azure.com/cake-contrib/Cake.Issues.PullRequests.GitHub/_build/latest?definitionId=17&branchName=develop)|[![Build Status](https://dev.azure.com/cake-contrib/Cake.Issues.PullRequests.GitHub/_apis/build/status/cake-contrib.Cake.Issues.PullRequests.GitHub?branchName=master&jobName=Windows)](https://dev.azure.com/cake-contrib/Cake.Issues.PullRequests.GitHub/_build/latest?definitionId=17&branchName=master)| +|AppVeyor Windows|[![Build status](https://ci.appveyor.com/api/projects/status/trj0g753r3hcw22k/branch/develop?svg=true)](https://ci.appveyor.com/project/cakecontrib/cake-issues-pullrequests-githubactions/branch/develop)|[![Build status](https://ci.appveyor.com/api/projects/status/trj0g753r3hcw22k/branch/master?svg=true)](https://ci.appveyor.com/project/cakecontrib/cake-issues-pullrequests-githubactions/branch/master)| +|Azure DevOps Windows|[![Build Status](https://dev.azure.com/cake-contrib/Cake.Issues.PullRequests.GitHubActions/_apis/build/status/cake-contrib.Cake.Issues.PullRequests.GitHubActions?branchName=develop&jobName=Windows)](https://dev.azure.com/cake-contrib/Cake.Issues.PullRequests.GitHubActions/_build/latest?definitionId=17&branchName=develop)|[![Build Status](https://dev.azure.com/cake-contrib/Cake.Issues.PullRequests.GitHubActions/_apis/build/status/cake-contrib.Cake.Issues.PullRequests.GitHubActions?branchName=master&jobName=Windows)](https://dev.azure.com/cake-contrib/Cake.Issues.PullRequests.GitHubActions/_build/latest?definitionId=17&branchName=master)| ## Code Coverage -[![Coverage Status](https://coveralls.io/repos/github/cake-contrib/Cake.Issues.PullRequests.GitHub/badge.svg?branch=develop)](https://coveralls.io/github/cake-contrib/Cake.Issues.PullRequests.GitHub?branch=develop) +[![Coverage Status](https://coveralls.io/repos/github/cake-contrib/Cake.Issues.PullRequests.GitHubActions/badge.svg?branch=develop)](https://coveralls.io/github/cake-contrib/Cake.Issues.PullRequests.GitHubActions?branch=develop) ## Quick Links -- [Documentation](https://cake-contrib.github.io/Cake.Issues.Website) +- [Documentation](https://cakeissues.net) ## Chat Room diff --git a/nuspec/nuget/Cake.Issues.PullRequests.GitHub.nuspec b/nuspec/nuget/Cake.Issues.PullRequests.GitHubActions.nuspec similarity index 54% rename from nuspec/nuget/Cake.Issues.PullRequests.GitHub.nuspec rename to nuspec/nuget/Cake.Issues.PullRequests.GitHubActions.nuspec index 4364e80..2496cb9 100644 --- a/nuspec/nuget/Cake.Issues.PullRequests.GitHub.nuspec +++ b/nuspec/nuget/Cake.Issues.PullRequests.GitHubActions.nuspec @@ -1,32 +1,32 @@  - Cake.Issues.PullRequests.GitHub - Cake.Issues.PullRequests.GitHub + Cake.Issues.PullRequests.GitHubActions + Cake.Issues.PullRequests.GitHubActions 0.0.0 Pascal Berger pascalberger, cake-contrib - GitHub support for the Cake.Issues addin for Cake Build Automation System + GitHub Actions support for the Cake.Issues addin for Cake Build Automation System - GitHub support for the Cake.Issues addin for Cake allows you to report to GitHub pull requests. + GitHub Actions support for the Cake.Issues addin for Cake allows you to report to GitHub Actions builds. - This addin provides the aliases for writing to GitHub pull requests. + This addin provides the aliases for writing to GitHub Actions builds. It also requires the core Cake.Issues and Cake.Issues.PullRequests addins and one or more issue providers. See the Project Site for an overview of the whole ecosystem of addins for working with issues in Cake scripts. - https://github.com/cake-contrib/Cake.Issues.PullRequests.GitHub/blob/develop/LICENSE - http://cake-contrib.github.io/Cake.Issues.Website + https://github.com/cake-contrib/Cake.Issues.PullRequests.GitHubActions/blob/develop/LICENSE + https://cakeissues.net https://cdn.rawgit.com/cake-contrib/graphics/a5cf0f881c390650144b2243ae551d5b9f836196/png/cake-contrib-medium.png false - + Copyright © Pascal Berger - Cake Script Cake-Issues Cake-PullRequestSystem Issues PullRequest AppVeyor - https://github.com/cake-contrib/Cake.Issues.PullRequests.GitHub/releases/tag/0.6.0 + Cake Script Cake-Issues Cake-PullRequestSystem Issues PullRequest GitHub GitHub-Actions + https://github.com/cake-contrib/Cake.Issues.PullRequests.GitHubActions/releases/tag/0.9.0 - - - + + + \ No newline at end of file diff --git a/recipe.cake b/recipe.cake index 7c0a345..94f1d42 100644 --- a/recipe.cake +++ b/recipe.cake @@ -3,12 +3,12 @@ Environment.SetVariableNames(); BuildParameters.SetParameters( - context: Context, + context: Context, buildSystem: BuildSystem, sourceDirectoryPath: "./src", - title: "Cake.Issues.PullRequests.GitHub", + title: "Cake.Issues.PullRequests.GitHubActions", repositoryOwner: "cake-contrib", - repositoryName: "Cake.Issues.PullRequests.GitHub", + repositoryName: "Cake.Issues.PullRequests.GitHubActions", appVeyorAccountName: "cakecontrib", shouldRunCodecov: false); @@ -16,7 +16,7 @@ BuildParameters.PrintParameters(Context); ToolSettings.SetToolSettings( context: Context, - dupFinderExcludePattern: new string[] { BuildParameters.RootDirectoryPath + "/src/Cake.Issues.PullRequests.GitHub.Tests/*.cs" }, + dupFinderExcludePattern: new string[] { BuildParameters.RootDirectoryPath + "/src/Cake.Issues.PullRequests.GitHubActions.Tests/*.cs" }, testCoverageFilter: "+[*]* -[xunit.*]* -[Cake.Core]* -[Cake.Testing]* -[*.Tests]* -[Cake.Issues]* -[Cake.Issues.Testing]* -[Cake.Issues.PullRequests]*", testCoverageExcludeByAttribute: "*.ExcludeFromCodeCoverage*", testCoverageExcludeByFile: "*/*Designer.cs;*/*.g.cs;*/*.g.i.cs"); diff --git a/src/Cake.Issues.PullRequests.GitHub/GitHubPullRequestSettings.cs b/src/Cake.Issues.PullRequests.GitHub/GitHubPullRequestSettings.cs deleted file mode 100644 index 7e0f69c..0000000 --- a/src/Cake.Issues.PullRequests.GitHub/GitHubPullRequestSettings.cs +++ /dev/null @@ -1,15 +0,0 @@ -namespace Cake.Issues.PullRequests.GitHub -{ - /// - /// Settings for . - /// - public class GitHubPullRequestSettings - { - /// - /// Initializes a new instance of the class. - /// - public GitHubPullRequestSettings() - { - } - } -} \ No newline at end of file diff --git a/src/Cake.Issues.PullRequests.GitHub.Tests.ruleset b/src/Cake.Issues.PullRequests.GitHubActions.Tests.ruleset similarity index 52% rename from src/Cake.Issues.PullRequests.GitHub.Tests.ruleset rename to src/Cake.Issues.PullRequests.GitHubActions.Tests.ruleset index 872413a..70ad3ab 100644 --- a/src/Cake.Issues.PullRequests.GitHub.Tests.ruleset +++ b/src/Cake.Issues.PullRequests.GitHubActions.Tests.ruleset @@ -1,6 +1,6 @@  - - + + diff --git a/src/Cake.Issues.PullRequests.GitHub.Tests/Cake.Issues.PullRequests.GitHub.Tests.csproj b/src/Cake.Issues.PullRequests.GitHubActions.Tests/Cake.Issues.PullRequests.GitHubActions.Tests.csproj similarity index 80% rename from src/Cake.Issues.PullRequests.GitHub.Tests/Cake.Issues.PullRequests.GitHub.Tests.csproj rename to src/Cake.Issues.PullRequests.GitHubActions.Tests/Cake.Issues.PullRequests.GitHubActions.Tests.csproj index 7cd6dff..975077c 100644 --- a/src/Cake.Issues.PullRequests.GitHub.Tests/Cake.Issues.PullRequests.GitHub.Tests.csproj +++ b/src/Cake.Issues.PullRequests.GitHubActions.Tests/Cake.Issues.PullRequests.GitHubActions.Tests.csproj @@ -5,12 +5,12 @@ false Cake.Issues Copyright © Pascal Berger and contributors - Tests for the Cake.Issues.PullRequests.GitHub addin + Tests for the Cake.Issues.PullRequests.GitHubActions addin Pascal Berger - ..\Cake.Issues.PullRequests.GitHub.Tests.ruleset + ..\Cake.Issues.PullRequests.GitHubActions.Tests.ruleset @@ -25,7 +25,7 @@ - + diff --git a/src/Cake.Issues.PullRequests.GitHub.Tests/GitHubPullRequestSettingsTests.cs b/src/Cake.Issues.PullRequests.GitHubActions.Tests/GitHubActionsBuildSettingsTests.cs similarity index 61% rename from src/Cake.Issues.PullRequests.GitHub.Tests/GitHubPullRequestSettingsTests.cs rename to src/Cake.Issues.PullRequests.GitHubActions.Tests/GitHubActionsBuildSettingsTests.cs index 22a9924..1d5d4ac 100644 --- a/src/Cake.Issues.PullRequests.GitHub.Tests/GitHubPullRequestSettingsTests.cs +++ b/src/Cake.Issues.PullRequests.GitHubActions.Tests/GitHubActionsBuildSettingsTests.cs @@ -1,4 +1,4 @@ -namespace Cake.Issues.PullRequests.GitHub.Tests +namespace Cake.Issues.PullRequests.GitHubActions.Tests { using System; using Cake.Issues.Testing; @@ -6,7 +6,7 @@ using Shouldly; using Xunit; - public sealed class GitHubPullRequestSettingsTests + public sealed class GitHubActionsBuildSettingsTests { public sealed class TheCtor { diff --git a/src/Cake.Issues.PullRequests.GitHub.ruleset b/src/Cake.Issues.PullRequests.GitHubActions.ruleset similarity index 98% rename from src/Cake.Issues.PullRequests.GitHub.ruleset rename to src/Cake.Issues.PullRequests.GitHubActions.ruleset index 4d1b4f9..ea23c99 100644 --- a/src/Cake.Issues.PullRequests.GitHub.ruleset +++ b/src/Cake.Issues.PullRequests.GitHubActions.ruleset @@ -1,5 +1,5 @@  - + diff --git a/src/Cake.Issues.PullRequests.GitHub.sln b/src/Cake.Issues.PullRequests.GitHubActions.sln similarity index 80% rename from src/Cake.Issues.PullRequests.GitHub.sln rename to src/Cake.Issues.PullRequests.GitHubActions.sln index 0a53f2d..2fa0f91 100644 --- a/src/Cake.Issues.PullRequests.GitHub.sln +++ b/src/Cake.Issues.PullRequests.GitHubActions.sln @@ -3,9 +3,9 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 15 VisualStudioVersion = 15.0.27703.1 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Cake.Issues.PullRequests.GitHub", "Cake.Issues.PullRequests.GitHub\Cake.Issues.PullRequests.GitHub.csproj", "{CC3D0C2D-6AC5-44DC-A0DD-D826D76FC00D}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Cake.Issues.PullRequests.GitHubActions", "Cake.Issues.PullRequests.GitHubActions\Cake.Issues.PullRequests.GitHubActions.csproj", "{CC3D0C2D-6AC5-44DC-A0DD-D826D76FC00D}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Cake.Issues.PullRequests.GitHub.Tests", "Cake.Issues.PullRequests.GitHub.Tests\Cake.Issues.PullRequests.GitHub.Tests.csproj", "{0C70A4C8-732B-4870-B914-C86FF2D2CB2F}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Cake.Issues.PullRequests.GitHubActions.Tests", "Cake.Issues.PullRequests.GitHubActions.Tests\Cake.Issues.PullRequests.GitHubActions.Tests.csproj", "{0C70A4C8-732B-4870-B914-C86FF2D2CB2F}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/src/Cake.Issues.PullRequests.GitHub.sln.DotSettings b/src/Cake.Issues.PullRequests.GitHubActions.sln.DotSettings similarity index 100% rename from src/Cake.Issues.PullRequests.GitHub.sln.DotSettings rename to src/Cake.Issues.PullRequests.GitHubActions.sln.DotSettings diff --git a/src/Cake.Issues.PullRequests.GitHub/Cake.Issues.PullRequests.GitHub.csproj b/src/Cake.Issues.PullRequests.GitHubActions/Cake.Issues.PullRequests.GitHubActions.csproj similarity index 84% rename from src/Cake.Issues.PullRequests.GitHub/Cake.Issues.PullRequests.GitHub.csproj rename to src/Cake.Issues.PullRequests.GitHubActions/Cake.Issues.PullRequests.GitHubActions.csproj index e837a58..e8a3423 100644 --- a/src/Cake.Issues.PullRequests.GitHub/Cake.Issues.PullRequests.GitHub.csproj +++ b/src/Cake.Issues.PullRequests.GitHubActions/Cake.Issues.PullRequests.GitHubActions.csproj @@ -2,7 +2,7 @@ netstandard2.0 - Addin for writing code analyzer or linter issues to GitHub + Addin for writing code analyzer or linter issues to GitHub Actions Pascal Berger Copyright © Pascal Berger and contributors @@ -10,15 +10,15 @@ full true - ..\Cake.Issues.PullRequests.GitHub.ruleset + ..\Cake.Issues.PullRequests.GitHubActions.ruleset - bin\Debug\netstandard2.0\Cake.Issues.PullRequests.GitHub.xml + bin\Debug\netstandard2.0\Cake.Issues.PullRequests.GitHubActions.xml - bin\Release\netstandard2.0\Cake.Issues.PullRequests.GitHub.xml + bin\Release\netstandard2.0\Cake.Issues.PullRequests.GitHubActions.xml diff --git a/src/Cake.Issues.PullRequests.GitHubActions/GitHubActionsBuildSettings.cs b/src/Cake.Issues.PullRequests.GitHubActions/GitHubActionsBuildSettings.cs new file mode 100644 index 0000000..3f4f401 --- /dev/null +++ b/src/Cake.Issues.PullRequests.GitHubActions/GitHubActionsBuildSettings.cs @@ -0,0 +1,15 @@ +namespace Cake.Issues.PullRequests.GitHubActions +{ + /// + /// Settings for . + /// + public class GitHubActionsBuildSettings + { + /// + /// Initializes a new instance of the class. + /// + public GitHubActionsBuildSettings() + { + } + } +} \ No newline at end of file diff --git a/src/Cake.Issues.PullRequests.GitHub/GitHubPullRequestAliases.cs b/src/Cake.Issues.PullRequests.GitHubActions/GitHubActionsBuildsAliases.cs similarity index 62% rename from src/Cake.Issues.PullRequests.GitHub/GitHubPullRequestAliases.cs rename to src/Cake.Issues.PullRequests.GitHubActions/GitHubActionsBuildsAliases.cs index 966957c..811f1fa 100644 --- a/src/Cake.Issues.PullRequests.GitHub/GitHubPullRequestAliases.cs +++ b/src/Cake.Issues.PullRequests.GitHubActions/GitHubActionsBuildsAliases.cs @@ -1,54 +1,54 @@ -namespace Cake.Issues.PullRequests.GitHub +namespace Cake.Issues.PullRequests.GitHubActions { using Cake.Core; using Cake.Core.Annotations; /// - /// Contains functionality related to writing code analysis issues to GitHub pull requests. + /// Contains functionality related to writing code analysis issues to GitHub Actions. /// [CakeAliasCategory(IssuesAliasConstants.MainCakeAliasCategory)] - public static class GitHubPullRequestAliases + public static class GitHubActionsBuildsAliases { /// - /// Gets an object for writing issues to GitHub pull requests using the default settings. + /// Gets an object for writing issues to GitHub Actions using the default settings. /// /// The context. - /// Object for writing issues to GitHub pull requests. + /// Object for writing issues to GitHub Actions. /// - /// Report code analysis issues reported as MsBuild warnings to a GitHub pull request: + /// Report code analysis issues reported as MsBuild warnings to GitHub Actions: /// /// /// /// [CakeMethodAlias] [CakeAliasCategory(PullRequestsAliasConstants.PullRequestSystemCakeAliasCategory)] - public static IPullRequestSystem GitHubPullRequests( + public static IPullRequestSystem GitHubActionsBuilds( this ICakeContext context) { context.NotNull(nameof(context)); - return new GitHubPullRequestSystem(context, new GitHubPullRequestSettings()); + return new GitHubActionsPullRequestSystem(context, new GitHubActionsBuildSettings()); } /// - /// Gets an object for writing issues to GitHub pull requests using the specified settings. + /// Gets an object for writing issues to GitHub Actions using the specified settings. /// /// The context. - /// Settings for writing issues to GitHub pull requests. - /// Object for writing issues to GitHub pull requests. + /// Settings for writing issues to GitHub Actions. + /// Object for writing issues to GitHub Actions. /// - /// Report code analysis issues reported as MsBuild warnings to a GitHub pull request: + /// Report code analysis issues reported as MsBuild warnings to GitHub Actions: /// /// /// /// [CakeMethodAlias] [CakeAliasCategory(PullRequestsAliasConstants.PullRequestSystemCakeAliasCategory)] - public static IPullRequestSystem GitHubPullRequests( + public static IPullRequestSystem GitHubActionsBuilds( this ICakeContext context, - GitHubPullRequestSettings settings) + GitHubActionsBuildSettings settings) { context.NotNull(nameof(context)); settings.NotNull(nameof(settings)); - return new GitHubPullRequestSystem(context, settings); + return new GitHubActionsPullRequestSystem(context, settings); } } } diff --git a/src/Cake.Issues.PullRequests.GitHub/GitHubPullRequestSystem.cs b/src/Cake.Issues.PullRequests.GitHubActions/GitHubPullRequestSystem.cs similarity index 56% rename from src/Cake.Issues.PullRequests.GitHub/GitHubPullRequestSystem.cs rename to src/Cake.Issues.PullRequests.GitHubActions/GitHubPullRequestSystem.cs index 20073c1..c8c17db 100644 --- a/src/Cake.Issues.PullRequests.GitHub/GitHubPullRequestSystem.cs +++ b/src/Cake.Issues.PullRequests.GitHubActions/GitHubPullRequestSystem.cs @@ -1,22 +1,23 @@ -namespace Cake.Issues.PullRequests.GitHub +namespace Cake.Issues.PullRequests.GitHubActions { using System.Collections.Generic; using Cake.Core; /// - /// Class for posting issues to GitHub. + /// Class for posting issues to GitHub Actions. /// - public class GitHubPullRequestSystem : BasePullRequestSystem + public class GitHubActionsPullRequestSystem : BasePullRequestSystem { private readonly ICakeContext context; - private readonly GitHubPullRequestSettings settings; + + private readonly GitHubActionsBuildSettings settings; /// - /// Initializes a new instance of the class. + /// Initializes a new instance of the class. /// /// The Cake context. - /// Settings for writing the issues to GitHub. - public GitHubPullRequestSystem(ICakeContext context, GitHubPullRequestSettings settings) + /// Settings for writing the issues to GitHub Actions. + public GitHubActionsPullRequestSystem(ICakeContext context, GitHubActionsBuildSettings settings) : base(context?.Log) { settings.NotNull(nameof(settings)); @@ -28,7 +29,7 @@ public GitHubPullRequestSystem(ICakeContext context, GitHubPullRequestSettings s /// protected override void InternalPostDiscussionThreads(IEnumerable issues, string commentSource) { - // TODO post issues to GitHub through an app + // TODO post issues to GitHub Actions } } } From fc97c6732782a4f63b133370e120867c860b5474 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Fri, 25 Sep 2020 20:29:27 +0000 Subject: [PATCH 27/49] Bump Microsoft.NET.Test.Sdk from 16.0.1 to 16.7.1 in /src Bumps [Microsoft.NET.Test.Sdk](https://github.com/microsoft/vstest) from 16.0.1 to 16.7.1. - [Release notes](https://github.com/microsoft/vstest/releases) - [Commits](https://github.com/microsoft/vstest/compare/v16.0.1...v16.7.1) Signed-off-by: dependabot-preview[bot] --- .../Cake.Issues.PullRequests.GitHubActions.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Cake.Issues.PullRequests.GitHubActions.Tests/Cake.Issues.PullRequests.GitHubActions.Tests.csproj b/src/Cake.Issues.PullRequests.GitHubActions.Tests/Cake.Issues.PullRequests.GitHubActions.Tests.csproj index 975077c..a738f83 100644 --- a/src/Cake.Issues.PullRequests.GitHubActions.Tests/Cake.Issues.PullRequests.GitHubActions.Tests.csproj +++ b/src/Cake.Issues.PullRequests.GitHubActions.Tests/Cake.Issues.PullRequests.GitHubActions.Tests.csproj @@ -15,7 +15,7 @@ - + From dd604da2c4915e8439505d6fc396b4a036f45387 Mon Sep 17 00:00:00 2001 From: Pascal Berger Date: Fri, 25 Sep 2020 22:30:36 +0200 Subject: [PATCH 28/49] Target .NET Core 2.1 in test project --- .../Cake.Issues.PullRequests.GitHubActions.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Cake.Issues.PullRequests.GitHubActions.Tests/Cake.Issues.PullRequests.GitHubActions.Tests.csproj b/src/Cake.Issues.PullRequests.GitHubActions.Tests/Cake.Issues.PullRequests.GitHubActions.Tests.csproj index a738f83..68fd0d0 100644 --- a/src/Cake.Issues.PullRequests.GitHubActions.Tests/Cake.Issues.PullRequests.GitHubActions.Tests.csproj +++ b/src/Cake.Issues.PullRequests.GitHubActions.Tests/Cake.Issues.PullRequests.GitHubActions.Tests.csproj @@ -1,7 +1,7 @@ - netcoreapp2.0 + netcoreapp2.1 false Cake.Issues Copyright © Pascal Berger and contributors From b3e38014ceb85e5506c1aeec945e87f1eec083dd Mon Sep 17 00:00:00 2001 From: Pascal Berger Date: Fri, 25 Sep 2020 22:33:03 +0200 Subject: [PATCH 29/49] Fix caching on AppVeyor build --- .appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.appveyor.yml b/.appveyor.yml index 1dbceb1..0d21fc4 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -27,4 +27,4 @@ branches: # Build Cache # #---------------------------------# cache: -- tools -> setup.cake +- tools -> recipe.cake From dbcc4082acf8544c644d78f9374e2ff98beac6bc Mon Sep 17 00:00:00 2001 From: Pascal Berger Date: Fri, 25 Sep 2020 22:36:00 +0200 Subject: [PATCH 30/49] Build on Visual Studio 2019 on AppVeyor --- .appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.appveyor.yml b/.appveyor.yml index 0d21fc4..06c5830 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -1,7 +1,7 @@ #---------------------------------# # Build Image # #---------------------------------# -image: Visual Studio 2017 +image: Visual Studio 2019 #---------------------------------# # Build Script # From 679f0f33409ce976d372f99aa838a0947d9052f4 Mon Sep 17 00:00:00 2001 From: Pascal Berger Date: Fri, 25 Sep 2020 22:43:54 +0200 Subject: [PATCH 31/49] Use embedded icon in NuGet package --- .appveyor.yml | 4 ++++ ...ake.Issues.PullRequests.GitHubActions.nuspec | 3 ++- nuspec/nuget/icon.png | Bin 0 -> 15580 bytes 3 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 nuspec/nuget/icon.png diff --git a/.appveyor.yml b/.appveyor.yml index 06c5830..877eb1c 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -6,6 +6,10 @@ image: Visual Studio 2019 #---------------------------------# # Build Script # #---------------------------------# +install: + # Update to latest NuGet version since we require 5.3.0 for embedded icon + - ps: nuget update -self + build_script: - ps: .\build.ps1 -Target AppVeyor diff --git a/nuspec/nuget/Cake.Issues.PullRequests.GitHubActions.nuspec b/nuspec/nuget/Cake.Issues.PullRequests.GitHubActions.nuspec index 2496cb9..55cd960 100644 --- a/nuspec/nuget/Cake.Issues.PullRequests.GitHubActions.nuspec +++ b/nuspec/nuget/Cake.Issues.PullRequests.GitHubActions.nuspec @@ -17,7 +17,7 @@ https://github.com/cake-contrib/Cake.Issues.PullRequests.GitHubActions/blob/develop/LICENSE https://cakeissues.net - https://cdn.rawgit.com/cake-contrib/graphics/a5cf0f881c390650144b2243ae551d5b9f836196/png/cake-contrib-medium.png + icon.png false Copyright © Pascal Berger @@ -25,6 +25,7 @@ https://github.com/cake-contrib/Cake.Issues.PullRequests.GitHubActions/releases/tag/0.9.0 + diff --git a/nuspec/nuget/icon.png b/nuspec/nuget/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..9881edc4e937ff34999ecf375c550249d82acc32 GIT binary patch literal 15580 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 literal 0 HcmV?d00001 From 802ec450c6700c2c721ad57666ce9b308702ec28 Mon Sep 17 00:00:00 2001 From: Pascal Berger Date: Fri, 25 Sep 2020 22:53:04 +0200 Subject: [PATCH 32/49] Remove Travis build configuration --- .travis.yml | 10 ---------- 1 file changed, 10 deletions(-) delete mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index eb79eee..0000000 --- a/.travis.yml +++ /dev/null @@ -1,10 +0,0 @@ -language: csharp -script: - - ./build.sh -v diagnostic -os: - - linux - - osx -cache: - directories: - - packages - - tools From 70407d0378ae22cbb904f5fc9f320c0f47beeeee Mon Sep 17 00:00:00 2001 From: Pascal Berger Date: Fri, 25 Sep 2020 22:54:46 +0200 Subject: [PATCH 33/49] Trigger builds for PRs targetting release and hotfix branches --- azure-pipelines.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 8f395df..d7198be 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -6,6 +6,8 @@ trigger: pr: - develop +- release/* +- hotfix/* jobs: - job: Windows From 09627d24fe30d89e60877ef4c4901080588f6bed Mon Sep 17 00:00:00 2001 From: Pascal Berger Date: Fri, 25 Sep 2020 22:58:46 +0200 Subject: [PATCH 34/49] Ignore Shouldly for code coverage --- recipe.cake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/recipe.cake b/recipe.cake index 94f1d42..1ec4328 100644 --- a/recipe.cake +++ b/recipe.cake @@ -17,7 +17,7 @@ BuildParameters.PrintParameters(Context); ToolSettings.SetToolSettings( context: Context, dupFinderExcludePattern: new string[] { BuildParameters.RootDirectoryPath + "/src/Cake.Issues.PullRequests.GitHubActions.Tests/*.cs" }, - testCoverageFilter: "+[*]* -[xunit.*]* -[Cake.Core]* -[Cake.Testing]* -[*.Tests]* -[Cake.Issues]* -[Cake.Issues.Testing]* -[Cake.Issues.PullRequests]*", + testCoverageFilter: "+[*]* -[xunit.*]* -[Cake.Core]* -[Cake.Testing]* -[*.Tests]* -[Shouldly]* -[Cake.Issues]* -[Cake.Issues.Testing]* -[Cake.Issues.PullRequests]*", testCoverageExcludeByAttribute: "*.ExcludeFromCodeCoverage*", testCoverageExcludeByFile: "*/*Designer.cs;*/*.g.cs;*/*.g.i.cs"); From 997ec5914432106cf140ea72233808ca35dbe48d Mon Sep 17 00:00:00 2001 From: Pascal Berger Date: Fri, 25 Sep 2020 23:02:16 +0200 Subject: [PATCH 35/49] Disable publishing to MyGet --- recipe.cake | 1 + 1 file changed, 1 insertion(+) diff --git a/recipe.cake b/recipe.cake index 1ec4328..c274050 100644 --- a/recipe.cake +++ b/recipe.cake @@ -10,6 +10,7 @@ BuildParameters.SetParameters( repositoryOwner: "cake-contrib", repositoryName: "Cake.Issues.PullRequests.GitHubActions", appVeyorAccountName: "cakecontrib", + shouldPublishMyGet: false, shouldRunCodecov: false); BuildParameters.PrintParameters(Context); From 1b547c2c194b289467f84b2bcf9a2f727fba28b4 Mon Sep 17 00:00:00 2001 From: Pascal Berger Date: Fri, 25 Sep 2020 23:05:18 +0200 Subject: [PATCH 36/49] Enable running of GitVersion on all operating systems --- recipe.cake | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/recipe.cake b/recipe.cake index c274050..b602b8c 100644 --- a/recipe.cake +++ b/recipe.cake @@ -11,7 +11,8 @@ BuildParameters.SetParameters( repositoryName: "Cake.Issues.PullRequests.GitHubActions", appVeyorAccountName: "cakecontrib", shouldPublishMyGet: false, - shouldRunCodecov: false); + shouldRunCodecov: false, + shouldRunGitVersion: true); BuildParameters.PrintParameters(Context); From ab79c9632b8bc7f61ee6be4e27a4328c700cdff7 Mon Sep 17 00:00:00 2001 From: Pascal Berger Date: Fri, 25 Sep 2020 23:13:18 +0200 Subject: [PATCH 37/49] Enable Codecov --- recipe.cake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/recipe.cake b/recipe.cake index b602b8c..c6d8abf 100644 --- a/recipe.cake +++ b/recipe.cake @@ -11,7 +11,7 @@ BuildParameters.SetParameters( repositoryName: "Cake.Issues.PullRequests.GitHubActions", appVeyorAccountName: "cakecontrib", shouldPublishMyGet: false, - shouldRunCodecov: false, + shouldRunCodecov: true, shouldRunGitVersion: true); BuildParameters.PrintParameters(Context); From 6740bb3992cdbffb74b4012ad4a0fe756efa65ac Mon Sep 17 00:00:00 2001 From: Pascal Berger Date: Fri, 25 Sep 2020 23:18:48 +0200 Subject: [PATCH 38/49] Use license expression for NuGet package --- nuspec/nuget/Cake.Issues.PullRequests.GitHubActions.nuspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nuspec/nuget/Cake.Issues.PullRequests.GitHubActions.nuspec b/nuspec/nuget/Cake.Issues.PullRequests.GitHubActions.nuspec index 55cd960..f39698d 100644 --- a/nuspec/nuget/Cake.Issues.PullRequests.GitHubActions.nuspec +++ b/nuspec/nuget/Cake.Issues.PullRequests.GitHubActions.nuspec @@ -15,7 +15,7 @@ See the Project Site for an overview of the whole ecosystem of addins for working with issues in Cake scripts. - https://github.com/cake-contrib/Cake.Issues.PullRequests.GitHubActions/blob/develop/LICENSE + MIT https://cakeissues.net icon.png false From 7d9802e556acb408ba3342f18408a95141789068 Mon Sep 17 00:00:00 2001 From: Pascal Berger Date: Sat, 26 Sep 2020 11:36:13 +0200 Subject: [PATCH 39/49] Add code owners --- .github/CODEOWNERS | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .github/CODEOWNERS diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 0000000..59b22b9 --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1,3 @@ +# These owners will be the default owners for everything in the repo and +# will be requested for review when someone opens a pull request. +* @pascalberger \ No newline at end of file From bbf7a6a999fb73049634e990b4c7aa66032cfc06 Mon Sep 17 00:00:00 2001 From: Pascal Berger Date: Sat, 26 Sep 2020 13:58:50 +0200 Subject: [PATCH 40/49] Update Cake.Recipe to 1.1.2 --- recipe.cake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/recipe.cake b/recipe.cake index c6d8abf..f1b65ce 100644 --- a/recipe.cake +++ b/recipe.cake @@ -1,4 +1,4 @@ -#load nuget:?package=Cake.Recipe&version=1.1.1 +#load nuget:?package=Cake.Recipe&version=1.1.2 Environment.SetVariableNames(); From 383c99d916d95de107e6a37772fb4e9b6aec86b3 Mon Sep 17 00:00:00 2001 From: Pascal Berger Date: Sat, 26 Sep 2020 11:38:56 +0200 Subject: [PATCH 41/49] Add build on GitHub Actions --- .github/workflows/build.yml | 20 ++++++++++++++++++++ README.md | 1 + 2 files changed, 21 insertions(+) create mode 100644 .github/workflows/build.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..60fbf32 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,20 @@ +name: Build and tests +on: [push, pull_request] +jobs: + # Build + Build: + name: Build + runs-on: windows-latest + steps: + - name: Get the sources + uses: actions/checkout@v2 + - name: Fetch all tags and branches + run: git fetch --prune --unshallow + - name: Build + run: .\build.ps1 + shell: powershell + - name: Publish NuGet package as build artifact + uses: actions/upload-artifact@v2 + with: + name: NuGet Package + path: ./BuildArtifacts/Packages/NuGet/ \ No newline at end of file diff --git a/README.md b/README.md index 919d1dc..754f05a 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,7 @@ and for general information about the Cake build automation system see the [Cake |:--:|:--:|:--:| |AppVeyor Windows|[![Build status](https://ci.appveyor.com/api/projects/status/trj0g753r3hcw22k/branch/develop?svg=true)](https://ci.appveyor.com/project/cakecontrib/cake-issues-pullrequests-githubactions/branch/develop)|[![Build status](https://ci.appveyor.com/api/projects/status/trj0g753r3hcw22k/branch/master?svg=true)](https://ci.appveyor.com/project/cakecontrib/cake-issues-pullrequests-githubactions/branch/master)| |Azure DevOps Windows|[![Build Status](https://dev.azure.com/cake-contrib/Cake.Issues.PullRequests.GitHubActions/_apis/build/status/cake-contrib.Cake.Issues.PullRequests.GitHubActions?branchName=develop&jobName=Windows)](https://dev.azure.com/cake-contrib/Cake.Issues.PullRequests.GitHubActions/_build/latest?definitionId=17&branchName=develop)|[![Build Status](https://dev.azure.com/cake-contrib/Cake.Issues.PullRequests.GitHubActions/_apis/build/status/cake-contrib.Cake.Issues.PullRequests.GitHubActions?branchName=master&jobName=Windows)](https://dev.azure.com/cake-contrib/Cake.Issues.PullRequests.GitHubActions/_build/latest?definitionId=17&branchName=master)| +|GitHub Actions Windows|[![Build Status](https://github.com/cake-contrib/Cake.Issues.PullRequests.GitHubActions/workflows/Build%20and%20tests/badge.svg?branch=develop)](https://github.com/cake-contrib/Cake.Issues.PullRequests.GitHubActions/actions?query=workflow%3A"Build+and+tests"+branch%3Adevelop)|[![Build Status](https://github.com/cake-contrib/Cake.Issues.PullRequests.GitHubActions/workflows/Build%20and%20tests/badge.svg?branch=master)](https://github.com/cake-contrib/Cake.Issues.PullRequests.GitHubActions/actions?query=workflow%3A"Build+and+tests"+branch%3Amaster)| ## Code Coverage From d7722511ea00a0f72842656015b4455869f3a791 Mon Sep 17 00:00:00 2001 From: Pascal Berger Date: Sat, 26 Sep 2020 15:47:29 +0200 Subject: [PATCH 42/49] Disable DupFinder DupFinder throws an exception while running on GitHub Actions --- recipe.cake | 1 + 1 file changed, 1 insertion(+) diff --git a/recipe.cake b/recipe.cake index f1b65ce..741e918 100644 --- a/recipe.cake +++ b/recipe.cake @@ -12,6 +12,7 @@ BuildParameters.SetParameters( appVeyorAccountName: "cakecontrib", shouldPublishMyGet: false, shouldRunCodecov: true, + shouldRunDupFinder: false, shouldRunGitVersion: true); BuildParameters.PrintParameters(Context); From 33d0cc1a22bf1d003d27ad493ed465b131047557 Mon Sep 17 00:00:00 2001 From: Pascal Berger Date: Sat, 26 Sep 2020 15:51:47 +0200 Subject: [PATCH 43/49] Disable InspectCode InspectCode throws an exception while running on GitHub Actions --- recipe.cake | 1 + 1 file changed, 1 insertion(+) diff --git a/recipe.cake b/recipe.cake index 741e918..396dfe2 100644 --- a/recipe.cake +++ b/recipe.cake @@ -13,6 +13,7 @@ BuildParameters.SetParameters( shouldPublishMyGet: false, shouldRunCodecov: true, shouldRunDupFinder: false, + shouldRunInspectCode: false, shouldRunGitVersion: true); BuildParameters.PrintParameters(Context); From 062313b045717c16b2f4547ef5c5afe87c82ecfb Mon Sep 17 00:00:00 2001 From: Pascal Berger Date: Fri, 25 Sep 2020 23:39:22 +0200 Subject: [PATCH 44/49] Implement reporting of issues to GitHub Actions --- .../GitHubActionsBuildSettings.cs | 7 +- .../GitHubActionsPullRequestSystem.cs | 123 ++++++++++++++++++ .../GitHubPullRequestSystem.cs | 35 ----- 3 files changed, 126 insertions(+), 39 deletions(-) create mode 100644 src/Cake.Issues.PullRequests.GitHubActions/GitHubActionsPullRequestSystem.cs delete mode 100644 src/Cake.Issues.PullRequests.GitHubActions/GitHubPullRequestSystem.cs diff --git a/src/Cake.Issues.PullRequests.GitHubActions/GitHubActionsBuildSettings.cs b/src/Cake.Issues.PullRequests.GitHubActions/GitHubActionsBuildSettings.cs index 3f4f401..beb2aed 100644 --- a/src/Cake.Issues.PullRequests.GitHubActions/GitHubActionsBuildSettings.cs +++ b/src/Cake.Issues.PullRequests.GitHubActions/GitHubActionsBuildSettings.cs @@ -6,10 +6,9 @@ public class GitHubActionsBuildSettings { /// - /// Initializes a new instance of the class. + /// Gets or sets a value indicating whether issues should be grouped by issue provider and run information. + /// Enabled by default. /// - public GitHubActionsBuildSettings() - { - } + public bool GroupIssues { get; set; } = true; } } \ No newline at end of file diff --git a/src/Cake.Issues.PullRequests.GitHubActions/GitHubActionsPullRequestSystem.cs b/src/Cake.Issues.PullRequests.GitHubActions/GitHubActionsPullRequestSystem.cs new file mode 100644 index 0000000..dd0cbaf --- /dev/null +++ b/src/Cake.Issues.PullRequests.GitHubActions/GitHubActionsPullRequestSystem.cs @@ -0,0 +1,123 @@ +namespace Cake.Issues.PullRequests.GitHubActions +{ + using System; + using System.Collections.Generic; + using System.Linq; + using Cake.Core; + using Cake.Core.Diagnostics; + using Cake.Core.IO; + + /// + /// Class for posting issues to GitHub Actions. + /// + public class GitHubActionsPullRequestSystem : BasePullRequestSystem + { + private readonly GitHubActionsBuildSettings settings; + + /// + /// Initializes a new instance of the class. + /// + /// The Cake context. + /// Settings for writing the issues to GitHub Actions. + public GitHubActionsPullRequestSystem(ICakeContext context, GitHubActionsBuildSettings settings) + : base(context?.Log) + { + settings.NotNull(nameof(settings)); + + this.settings = settings; + } + + /// + protected override void InternalPostDiscussionThreads(IEnumerable issues, string commentSource) + { + issues.NotNull(nameof(issues)); + + if (this.settings.GroupIssues) + { + this.WriteGroupedIssues(issues); + } + else + { + this.WriteIssues(issues); + } + } + + /// + /// Formats the options for the warning service message. + /// + /// The root path of the file, relative to the repository root. + /// The file path relative to the project root. + /// The line where the issue ocurred. + /// The column where the issue ocurred. + /// Formatted options string for the warning service message. + private static string FormatWarningOptions(DirectoryPath rootDirectoryPath, FilePath filePath, int? line, int? column) + { + var result = new List(); + + if (filePath != null) + { + result.Add($"file={rootDirectoryPath.CombineWithFilePath(filePath)}"); + } + + if (line.HasValue) + { + result.Add($"line={line.Value}"); + } + + if (column.HasValue) + { + result.Add($"col={column}"); + } + + return string.Join(",", result); + } + + /// + /// Writes services messages to report issues to GitHub Actions grouped by provider and run. + /// + /// Issues which should be reported. + private void WriteGroupedIssues(IEnumerable issues) + { + // Group annotations by provider type and run + var groupedIssues = + from issue in issues + group issue by new { issue.ProviderType, issue.Run }; + + foreach (var group in groupedIssues) + { + var groupName = group.First().ProviderName; + + if (!string.IsNullOrWhiteSpace(group.Key.Run)) + { + groupName += " - " + group.Key.Run; + } + + this.Log.Information($"::group::{groupName}"); + + this.WriteIssues(group); + + this.Log.Information($"::endgroup::{groupName}"); + } + } + + /// + /// Writes services message to report issues to GitHub Actions. + /// + /// Issues which should be reported. + private void WriteIssues(IEnumerable issues) + { + foreach (var issue in issues.OrderByDescending(x => x.Priority)) + { + // Commands don't support line breaks, therefore we only use the first line of the message. + var message = + issue.MessageText + .Split(new[] { '\n' }, StringSplitOptions.RemoveEmptyEntries) + .FirstOrDefault() + ?.Trim(); + + this.Log.Information( + $"::warning {FormatWarningOptions(this.Settings.RepositoryRoot, issue.AffectedFileRelativePath, issue.Line, issue.Column)}::{message}"); + } + } + } +} diff --git a/src/Cake.Issues.PullRequests.GitHubActions/GitHubPullRequestSystem.cs b/src/Cake.Issues.PullRequests.GitHubActions/GitHubPullRequestSystem.cs deleted file mode 100644 index c8c17db..0000000 --- a/src/Cake.Issues.PullRequests.GitHubActions/GitHubPullRequestSystem.cs +++ /dev/null @@ -1,35 +0,0 @@ -namespace Cake.Issues.PullRequests.GitHubActions -{ - using System.Collections.Generic; - using Cake.Core; - - /// - /// Class for posting issues to GitHub Actions. - /// - public class GitHubActionsPullRequestSystem : BasePullRequestSystem - { - private readonly ICakeContext context; - - private readonly GitHubActionsBuildSettings settings; - - /// - /// Initializes a new instance of the class. - /// - /// The Cake context. - /// Settings for writing the issues to GitHub Actions. - public GitHubActionsPullRequestSystem(ICakeContext context, GitHubActionsBuildSettings settings) - : base(context?.Log) - { - settings.NotNull(nameof(settings)); - - this.context = context; - this.settings = settings; - } - - /// - protected override void InternalPostDiscussionThreads(IEnumerable issues, string commentSource) - { - // TODO post issues to GitHub Actions - } - } -} From 2010ee8ac6bededb7e3dfb7982442b9e3b1c8454 Mon Sep 17 00:00:00 2001 From: Pascal Berger Date: Sat, 26 Sep 2020 10:54:09 +0200 Subject: [PATCH 45/49] Add integration tests --- .github/workflows/build.yml | 40 +- tests/integration/.config/dotnet-tools.json | 12 + tests/integration/.gitignore | 379 ++++++++++++++++++ tests/integration/build.cake | 101 +++++ tests/integration/build.ps1 | 234 +++++++++++ tests/integration/build.sh | 103 +++++ tests/integration/buildData.cake | 29 ++ tests/integration/nuget.config | 11 + tests/integration/src/ClassLibrary1.sln | 22 + tests/integration/src/ClassLibrary1/Class1.cs | 31 ++ .../src/ClassLibrary1/ClassLibrary1.csproj | 21 + tests/integration/tools/packages.config | 4 + 12 files changed, 986 insertions(+), 1 deletion(-) create mode 100644 tests/integration/.config/dotnet-tools.json create mode 100644 tests/integration/.gitignore create mode 100644 tests/integration/build.cake create mode 100644 tests/integration/build.ps1 create mode 100644 tests/integration/build.sh create mode 100644 tests/integration/buildData.cake create mode 100644 tests/integration/nuget.config create mode 100644 tests/integration/src/ClassLibrary1.sln create mode 100644 tests/integration/src/ClassLibrary1/Class1.cs create mode 100644 tests/integration/src/ClassLibrary1/ClassLibrary1.csproj create mode 100644 tests/integration/tools/packages.config diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 60fbf32..8e72601 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -17,4 +17,42 @@ jobs: uses: actions/upload-artifact@v2 with: name: NuGet Package - path: ./BuildArtifacts/Packages/NuGet/ \ No newline at end of file + path: ./BuildArtifacts/Packages/NuGet/ + # Integration Tests Windows (.NET Framework) + Test_Windows_DotNetFramework: + name: Integration Tests Windows (.NET Framework) + needs: Build + runs-on: windows-latest + steps: + - name: Get the sources + uses: actions/checkout@v2 + - name: Download build artifact + uses: actions/download-artifact@v2 + with: + name: NuGet Package + path: ./BuildArtifacts/Packages/NuGet + - name: Run integration tests + run: ./build.ps1 -verbosity diagnostic + working-directory: ./tests/integration/ + shell: powershell + # Integration Tests Windows (.NET Core tool) + Test_Windows_DotNetCoreTool: + name: Integration Tests Windows (.NET Core tool) + needs: Build + runs-on: windows-latest + steps: + - name: Get the sources + uses: actions/checkout@v2 + - name: Download build artifact + uses: actions/download-artifact@v2 + with: + name: NuGet Package + path: ./BuildArtifacts/Packages/NuGet + - name: Restore .NET Core tool + run: dotnet tool restore + working-directory: ./tests/integration/ + shell: powershell + - name: Run integration tests + run: dotnet cake + working-directory: ./tests/integration/ + shell: powershell diff --git a/tests/integration/.config/dotnet-tools.json b/tests/integration/.config/dotnet-tools.json new file mode 100644 index 0000000..38bd0ea --- /dev/null +++ b/tests/integration/.config/dotnet-tools.json @@ -0,0 +1,12 @@ +{ + "version": 1, + "isRoot": true, + "tools": { + "cake.tool": { + "version": "0.38.4", + "commands": [ + "dotnet-cake" + ] + } + } +} \ No newline at end of file diff --git a/tests/integration/.gitignore b/tests/integration/.gitignore new file mode 100644 index 0000000..e7c4962 --- /dev/null +++ b/tests/integration/.gitignore @@ -0,0 +1,379 @@ + +# Created by https://www.gitignore.io/api/cake,windows,visualstudio,visualstudiocode + +### Cake ### +tools/* +!tools/packages.config + +### VisualStudioCode ### +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json + +### Windows ### +# Windows thumbnail cache files +Thumbs.db +ehthumbs.db +ehthumbs_vista.db + +# Dump file +*.stackdump + +# Folder config file +[Dd]esktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msix +*.msm +*.msp + +# Windows shortcuts +*.lnk + +### VisualStudio ### +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore + +# User-specific files +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUNIT +*.VisualState.xml +TestResult.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_i.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# JustCode is a .NET coding add-in +.JustCode + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# JetBrains Rider +.idea/ +*.sln.iml + +# CodeRush +.cr/ + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + + +# End of https://www.gitignore.io/api/cake,windows,visualstudio,visualstudiocode + + +# Project specific folders +BuildArtifacts diff --git a/tests/integration/build.cake b/tests/integration/build.cake new file mode 100644 index 0000000..d4fd926 --- /dev/null +++ b/tests/integration/build.cake @@ -0,0 +1,101 @@ +#load "buildData.cake" + +#addin "Cake.Markdownlint" +#addin "Cake.Issues&prerelease" +#addin "Cake.Issues.MsBuild&prerelease" +#addin "Cake.Issues.PullRequests&prerelease" +#addin "Cake.Issues.PullRequests.GitHubActions&prerelease" + +////////////////////////////////////////////////// +// ARGUMENTS +////////////////////////////////////////////////// + +var target = Argument("target", "Default"); + +////////////////////////////////////////////////// +// SETUP / TEARDOWN +////////////////////////////////////////////////// + +Setup(setupContext => +{ + return new BuildData(); +}); + +var repoRootFolder = MakeAbsolute(Directory("./")); +var logPath = repoRootFolder.Combine("BuildArtifacts").Combine("logs"); + +////////////////////////////////////////////////// +// TARGETS +////////////////////////////////////////////////// + +Task("Build") + .Does((data) => +{ + var msBuildLogPath = logPath.CombineWithFilePath("msbuild.binlog"); + var solutionFile = + repoRootFolder + .Combine("src") + .CombineWithFilePath("ClassLibrary1.sln"); + +#if NETCOREAPP + DotNetCoreRestore(solutionFile.FullPath); + + var settings = + new DotNetCoreMSBuildSettings() + .WithTarget("Rebuild") + .WithLogger( + "BinaryLogger," + Context.Tools.Resolve("Cake.Issues.MsBuild*/**/StructuredLogger.dll"), + "", + msBuildLogPath.FullPath + ); + + DotNetCoreBuild( + solutionFile.FullPath, + new DotNetCoreBuildSettings + { + MSBuildSettings = settings + }); +#else + NuGetRestore(solutionFile); + + var settings = + new MSBuildSettings() + .WithTarget("Rebuild") + .WithLogger( + Context.Tools.Resolve("Cake.Issues.MsBuild*/**/StructuredLogger.dll").FullPath, + "BinaryLogger", + msBuildLogPath.FullPath); + MSBuild(solutionFile, settings); +#endif + + data.AddIssues( + ReadIssues( + MsBuildIssuesFromFilePath( + msBuildLogPath, + MsBuildBinaryLogFileFormat), + repoRootFolder) + ); +}); + +Task("Report-IssuesToBuildServer") + .Does((data) => +{ + ReportIssuesToPullRequest( + data.Issues, + GitHubActionsBuilds(), + repoRootFolder); +}); + +Task("Lint") + .IsDependentOn("Build"); + +// Run issues task by default. +Task("Default") + .IsDependentOn("Lint") + .IsDependentOn("Report-IssuesToBuildServer"); + +////////////////////////////////////////////////// +// EXECUTION +////////////////////////////////////////////////// + +RunTarget(target); \ No newline at end of file diff --git a/tests/integration/build.ps1 b/tests/integration/build.ps1 new file mode 100644 index 0000000..05b31be --- /dev/null +++ b/tests/integration/build.ps1 @@ -0,0 +1,234 @@ +########################################################################## +# 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 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 = "build.cake", + [string]$Target, + [string]$Configuration, + [ValidateSet("Quiet", "Minimal", "Normal", "Verbose", "Diagnostic")] + [string]$Verbosity, + [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 diff --git a/tests/integration/build.sh b/tests/integration/build.sh new file mode 100644 index 0000000..51f8617 --- /dev/null +++ b/tests/integration/build.sh @@ -0,0 +1,103 @@ +#!/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. +########################################################################## + +# 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.38.0 +CAKE_EXE=$TOOLS_DIR/Cake.$CAKE_VERSION/Cake.exe + +# Temporarily skip verification of addins. +export CAKE_SETTINGS_SKIPVERIFICATION='true' + +# Define default arguments. +SCRIPT="build.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[@]}" diff --git a/tests/integration/buildData.cake b/tests/integration/buildData.cake new file mode 100644 index 0000000..8a22d41 --- /dev/null +++ b/tests/integration/buildData.cake @@ -0,0 +1,29 @@ +public class BuildData +{ + private readonly List issues = new List(); + + /// + /// Gets issues determined during building. + /// + public IEnumerable Issues + { + get + { + return issues.AsReadOnly(); + } + } + + /// + /// Add issues to . + /// + /// List of issues which should be added. + public void AddIssues(IEnumerable issues) + { + if (issues == null) + { + throw new NullReferenceException(nameof(issues)); + } + + this.issues.AddRange(issues); + } +} \ No newline at end of file diff --git a/tests/integration/nuget.config b/tests/integration/nuget.config new file mode 100644 index 0000000..a202f0a --- /dev/null +++ b/tests/integration/nuget.config @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/tests/integration/src/ClassLibrary1.sln b/tests/integration/src/ClassLibrary1.sln new file mode 100644 index 0000000..62df92e --- /dev/null +++ b/tests/integration/src/ClassLibrary1.sln @@ -0,0 +1,22 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 14 +VisualStudioVersion = 14.0.25420.1 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ClassLibrary1", "ClassLibrary1\ClassLibrary1.csproj", "{9B73BB5B-06A3-46F3-9068-E3607A8217B0}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {9B73BB5B-06A3-46F3-9068-E3607A8217B0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9B73BB5B-06A3-46F3-9068-E3607A8217B0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9B73BB5B-06A3-46F3-9068-E3607A8217B0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9B73BB5B-06A3-46F3-9068-E3607A8217B0}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/tests/integration/src/ClassLibrary1/Class1.cs b/tests/integration/src/ClassLibrary1/Class1.cs new file mode 100644 index 0000000..4ea0004 --- /dev/null +++ b/tests/integration/src/ClassLibrary1/Class1.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ClassLibrary1 +{ + public class Class1 + { + public void Foo() + { + var foo = "foo"; + var bar = "bar"; + if (!string.IsNullOrEmpty(foo) && !string.IsNullOrEmpty(bar)) + { + var foobar = foo + bar; + } + } + + public void Bar() + { + var foo = "foo"; + var bar = "bar"; + if (!string.IsNullOrEmpty(foo) && !string.IsNullOrEmpty(bar)) + { + var foobar = foo + bar; + } + } + } +} diff --git a/tests/integration/src/ClassLibrary1/ClassLibrary1.csproj b/tests/integration/src/ClassLibrary1/ClassLibrary1.csproj new file mode 100644 index 0000000..9ec4dd9 --- /dev/null +++ b/tests/integration/src/ClassLibrary1/ClassLibrary1.csproj @@ -0,0 +1,21 @@ + + + + netstandard2.0 + + + + + all + 3.0.0 + + + all + 1.1.118 + + + + + + + \ No newline at end of file diff --git a/tests/integration/tools/packages.config b/tests/integration/tools/packages.config new file mode 100644 index 0000000..a36acb6 --- /dev/null +++ b/tests/integration/tools/packages.config @@ -0,0 +1,4 @@ + + + + From e7bc900cbaeeb460eebe42dc98bd505ca33bb587 Mon Sep 17 00:00:00 2001 From: Pascal Berger Date: Sat, 26 Sep 2020 16:49:03 +0200 Subject: [PATCH 46/49] Add documentation --- docs/examples/githubactions-annotations.png | Bin 0 -> 109893 bytes docs/examples/githubactions-log-output.png | Bin 0 -> 111012 bytes .../githubactions-pullrequest-integration.png | Bin 0 -> 29207 bytes docs/examples/index.cshtml | 7 +++ docs/examples/write-annotations.md | 54 ++++++++++++++++++ docs/features.md | 22 +++++++ docs/index.cshtml | 10 ++++ docs/requirements.md | 9 +++ recipe.cake | 1 + 9 files changed, 103 insertions(+) create mode 100644 docs/examples/githubactions-annotations.png create mode 100644 docs/examples/githubactions-log-output.png create mode 100644 docs/examples/githubactions-pullrequest-integration.png create mode 100644 docs/examples/index.cshtml create mode 100644 docs/examples/write-annotations.md create mode 100644 docs/features.md create mode 100644 docs/index.cshtml create mode 100644 docs/requirements.md diff --git a/docs/examples/githubactions-annotations.png b/docs/examples/githubactions-annotations.png new file mode 100644 index 0000000000000000000000000000000000000000..d9c8bb6932cc9ef0eb51353abff7bd94f248b3c9 GIT binary patch literal 109893 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

2Xs>MQ*CfD?i3Dmk4(_VG@N-L*8TkYCw+tz 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 b!Iy`nQ&d0nLrJ3lvjhW6DN0s~fB*SEp9h0A literal 0 HcmV?d00001 diff --git a/docs/examples/githubactions-log-output.png b/docs/examples/githubactions-log-output.png new file mode 100644 index 0000000000000000000000000000000000000000..779bc0b9b69f6dfc2e8010c207b06a14b98b02be GIT binary patch literal 111012 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

0N|4&Fl6^>i)CyuF<2wZ$}_d0 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 z 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.Raw(Model.String(DocsKeys.Description))

+ +@Html.Partial("_ChildPages") \ No newline at end of file diff --git a/docs/examples/write-annotations.md b/docs/examples/write-annotations.md new file mode 100644 index 0000000..02c5242 --- /dev/null +++ b/docs/examples/write-annotations.md @@ -0,0 +1,54 @@ +--- +Order: 10 +Title: Create annotations in GitHub Actions +Description: Example how to write issues as annotations to a GitHub Actions build. +--- +This example shows how to report issues as annotations to a GitHub Actions build. + +To report issues as annotations to a GitHub Actions build you need to import the core addin, +the core pull request addin, the GitHub Actions support and one or more issue providers, +in this example for JetBrains InspectCode: + +```csharp +#addin "Cake.Issues" +#addin "Cake.Issues.InspectCode" +#addin "Cake.Issues.PullRequests" +#addin "Cake.Issues.PullRequests.GitHubActions" +``` + +:::{.alert .alert-warning} +Please note that you always should pin addins to a specific version to make sure your builds are deterministic and +won't break due to updates to one of the addins. + +See [pinning addin versions](https://cakebuild.net/docs/tutorials/pinning-cake-version#pinning-addin-version) for details. +::: + +In the following task we'll first determine the remote repository URL and +source branch of the pull request and with this information call the [GitHubActionsBuilds] alias: + +```csharp +Task("ReportIssuesToGitHubActions").Does(() => +{ + var repoRootFolder = MakeAbsolute(Directory("./")); + + ReportIssuesToPullRequest( + InspectCodeIssuesFromFilePath( + @"C:\build\inspectcode.log"), + GitHubActionsBuilds(), + repoRootFolder); +}); +``` + +The output will show up in the build log grouped by issue provider / run: + +![Log output](githubactions-log-output.png "Log output") + +Additionally the issues show up as annotations: + +![Annotations](githubactions-annotations.png "Annotations") + +Having issues available as annotations also means that they will be shown in pull requests on the related file / position: + +![Pull request integration](githubactions-pullrequest-integration.png "Pull request integration") + +[GitHubActionsBuilds]: ../../../../api/Cake.Issues.PullRequests.GitHubActions/GitHubActionsBuildsAliases/ \ No newline at end of file diff --git a/docs/features.md b/docs/features.md new file mode 100644 index 0000000..853f929 --- /dev/null +++ b/docs/features.md @@ -0,0 +1,22 @@ +--- +Order: 20 +Title: Features +Description: Features of the Cake.Issues.PullRequests.GitHubActions addin. +--- +The [Cake.Issues.PullRequests.GitHubActions addin] provides the following features. + +# Basic features + +* Reports issues as annotations to GitHub Actions builds. + +# Supported capabilities + +The [Cake.Issues.PullRequests.GitHubActions addin] doesn't support any additional capabilities. + +| | Capability | Remarks | +|--------------------------------------------------------------------|--------------------------------|--------------------------------| +| | Checking commit ID | | +| | Discussion threads | | +| | Filtering by modified files | | + +[Cake.Issues.PullRequests.GitHubActions addin]: https://www.nuget.org/packages/Cake.Issues.PullRequests.GitHubActions \ No newline at end of file diff --git a/docs/index.cshtml b/docs/index.cshtml new file mode 100644 index 0000000..aba3619 --- /dev/null +++ b/docs/index.cshtml @@ -0,0 +1,10 @@ +--- +Title: GitHub Actions +Description: Support for GitHub Actions. +--- +

+ Support for GitHub Actions is implemented in the + Cake.Issues.PullRequests.GitHubActions addin. +

+ +@Html.Partial("_ChildPages") \ No newline at end of file diff --git a/docs/requirements.md b/docs/requirements.md new file mode 100644 index 0000000..0a25cfb --- /dev/null +++ b/docs/requirements.md @@ -0,0 +1,9 @@ +--- +Order: 10 +Title: Requirements +Description: Requirements for the Cake.Issues.PullRequests.GitHubActions addin. +--- +The requirements for using the [Cake.Issues.PullRequests.GitHubActions addin] are listed in the [release notes] for any specific version. + +[Cake.Issues.PullRequests.GitHubActions addin]: https://www.nuget.org/packages/Cake.Issues.PullRequests.GitHubActions +[release notes]: release-notes \ No newline at end of file diff --git a/recipe.cake b/recipe.cake index 396dfe2..d6d97fa 100644 --- a/recipe.cake +++ b/recipe.cake @@ -11,6 +11,7 @@ BuildParameters.SetParameters( repositoryName: "Cake.Issues.PullRequests.GitHubActions", appVeyorAccountName: "cakecontrib", shouldPublishMyGet: false, + shouldGenerateDocumentation: false, shouldRunCodecov: true, shouldRunDupFinder: false, shouldRunInspectCode: false, From 2a8194b7974065d1c0ec44bbd2ac52c96bf855d1 Mon Sep 17 00:00:00 2001 From: Pascal Berger Date: Sat, 26 Sep 2020 20:10:26 +0200 Subject: [PATCH 47/49] Commit for versioning From da4a8d7259448095cdc8fae49e19be1cc6857222 Mon Sep 17 00:00:00 2001 From: Pascal Berger Date: Sat, 26 Sep 2020 20:44:32 +0200 Subject: [PATCH 48/49] Improve documentation --- docs/examples/write-annotations.md | 8 ++++---- docs/features.md | 7 +++++-- docs/{examples => }/githubactions-annotations.png | Bin docs/{examples => }/githubactions-log-output.png | Bin .../githubactions-pullrequest-integration.png | Bin docs/requirements.md | 2 +- 6 files changed, 10 insertions(+), 7 deletions(-) rename docs/{examples => }/githubactions-annotations.png (100%) rename docs/{examples => }/githubactions-log-output.png (100%) rename docs/{examples => }/githubactions-pullrequest-integration.png (100%) diff --git a/docs/examples/write-annotations.md b/docs/examples/write-annotations.md index 02c5242..719a519 100644 --- a/docs/examples/write-annotations.md +++ b/docs/examples/write-annotations.md @@ -41,14 +41,14 @@ Task("ReportIssuesToGitHubActions").Does(() => The output will show up in the build log grouped by issue provider / run: -![Log output](githubactions-log-output.png "Log output") +![Log output](../githubactions-log-output.png "Log output") Additionally the issues show up as annotations: -![Annotations](githubactions-annotations.png "Annotations") +![Annotations](../githubactions-annotations.png "Annotations") Having issues available as annotations also means that they will be shown in pull requests on the related file / position: -![Pull request integration](githubactions-pullrequest-integration.png "Pull request integration") +![Pull request integration](../githubactions-pullrequest-integration.png "Pull request integration") -[GitHubActionsBuilds]: ../../../../api/Cake.Issues.PullRequests.GitHubActions/GitHubActionsBuildsAliases/ \ No newline at end of file +[GitHubActionsBuilds]: ../../../../api/Cake.Issues.PullRequests.GitHubActions/GitHubActionsBuildsAliases/ diff --git a/docs/features.md b/docs/features.md index 853f929..91dea5e 100644 --- a/docs/features.md +++ b/docs/features.md @@ -3,11 +3,14 @@ Order: 20 Title: Features Description: Features of the Cake.Issues.PullRequests.GitHubActions addin. --- -The [Cake.Issues.PullRequests.GitHubActions addin] provides the following features. +The [Cake.Issues.PullRequests.GitHubActions addin] creates annotations from issues when running on GitHub actions. + +![Pull request integration](githubactions-pullrequest-integration.png "Pull request integration") # Basic features * Reports issues as annotations to GitHub Actions builds. +* Group issues in log output by provider and run information. # Supported capabilities @@ -19,4 +22,4 @@ The [Cake.Issues.PullRequests.GitHubActions addin] doesn't support any additiona | | Discussion threads | | | | Filtering by modified files | | -[Cake.Issues.PullRequests.GitHubActions addin]: https://www.nuget.org/packages/Cake.Issues.PullRequests.GitHubActions \ No newline at end of file +[Cake.Issues.PullRequests.GitHubActions addin]: https://www.nuget.org/packages/Cake.Issues.PullRequests.GitHubActions diff --git a/docs/examples/githubactions-annotations.png b/docs/githubactions-annotations.png similarity index 100% rename from docs/examples/githubactions-annotations.png rename to docs/githubactions-annotations.png diff --git a/docs/examples/githubactions-log-output.png b/docs/githubactions-log-output.png similarity index 100% rename from docs/examples/githubactions-log-output.png rename to docs/githubactions-log-output.png diff --git a/docs/examples/githubactions-pullrequest-integration.png b/docs/githubactions-pullrequest-integration.png similarity index 100% rename from docs/examples/githubactions-pullrequest-integration.png rename to docs/githubactions-pullrequest-integration.png diff --git a/docs/requirements.md b/docs/requirements.md index 0a25cfb..e1e6694 100644 --- a/docs/requirements.md +++ b/docs/requirements.md @@ -6,4 +6,4 @@ Description: Requirements for the Cake.Issues.PullRequests.GitHubActions addin. The requirements for using the [Cake.Issues.PullRequests.GitHubActions addin] are listed in the [release notes] for any specific version. [Cake.Issues.PullRequests.GitHubActions addin]: https://www.nuget.org/packages/Cake.Issues.PullRequests.GitHubActions -[release notes]: release-notes \ No newline at end of file +[release notes]: release-notes From dcd20725d44259217f83cdf1dd379ea9c0488068 Mon Sep 17 00:00:00 2001 From: Pascal Berger Date: Sat, 26 Sep 2020 20:44:48 +0200 Subject: [PATCH 49/49] Fixe whitespace in NuGet package description --- .../nuget/Cake.Issues.PullRequests.GitHubActions.nuspec | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/nuspec/nuget/Cake.Issues.PullRequests.GitHubActions.nuspec b/nuspec/nuget/Cake.Issues.PullRequests.GitHubActions.nuspec index f39698d..b507209 100644 --- a/nuspec/nuget/Cake.Issues.PullRequests.GitHubActions.nuspec +++ b/nuspec/nuget/Cake.Issues.PullRequests.GitHubActions.nuspec @@ -8,12 +8,12 @@ pascalberger, cake-contrib GitHub Actions support for the Cake.Issues addin for Cake Build Automation System - GitHub Actions support for the Cake.Issues addin for Cake allows you to report to GitHub Actions builds. +GitHub Actions support for the Cake.Issues addin for Cake allows you to report to GitHub Actions builds. - This addin provides the aliases for writing to GitHub Actions builds. - It also requires the core Cake.Issues and Cake.Issues.PullRequests addins and one or more issue providers. +This addin provides the aliases for writing to GitHub Actions builds. +It also requires the core Cake.Issues and Cake.Issues.PullRequests addins and one or more issue providers. - See the Project Site for an overview of the whole ecosystem of addins for working with issues in Cake scripts. +See the Project Site for an overview of the whole ecosystem of addins for working with issues in Cake scripts. MIT https://cakeissues.net