From 1ee70ae9a2dc67627a379b3dbcb890254a069b24 Mon Sep 17 00:00:00 2001 From: Pascal Berger Date: Mon, 1 Aug 2022 11:33:11 +0200 Subject: [PATCH] (GH-129) Add integration tests --- azure-pipelines.yml | 174 ++++++++- tests/.config/dotnet-tools.json | 12 + tests/.gitignore | 348 ++++++++++++++++++ tests/.markdownlint.json | 10 + tests/build.cake | 39 ++ tests/build.ps1 | 15 + tests/build.sh | 11 + tests/build/analyze/analyze.cake | 72 ++++ .../build/create-reports/create-reports.cake | 15 + tests/docs/index.md | 7 + tests/nuget.config | 11 + 11 files changed, 712 insertions(+), 2 deletions(-) create mode 100644 tests/.config/dotnet-tools.json create mode 100644 tests/.gitignore create mode 100644 tests/.markdownlint.json create mode 100644 tests/build.cake create mode 100644 tests/build.ps1 create mode 100644 tests/build.sh create mode 100644 tests/build/analyze/analyze.cake create mode 100644 tests/build/create-reports/create-reports.cake create mode 100644 tests/docs/index.md create mode 100644 tests/nuget.config diff --git a/azure-pipelines.yml b/azure-pipelines.yml index c2b96e3..7c4b8eb 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -10,9 +10,179 @@ pr: - hotfix/* jobs: -- job: Windows +# Build +- job: Build pool: vmImage: 'windows-2022' steps: - powershell: ./build.ps1 - displayName: 'Cake Build' \ No newline at end of file + displayName: 'Cake Build' + - publish: $(Build.SourcesDirectory)/BuildArtifacts/Packages/NuGet + artifact: NuGet Package + displayName: 'Publish NuGet package as build artifact' +# Integration Tests Windows Server 2019 (.NET Core tool) +- job: Test_Windows_2019_DotNetCoreTool + displayName: Integration Tests Windows Server 2019 (.NET Core tool) + dependsOn: Build + pool: + vmImage: 'windows-2019' + steps: + - task: NodeTool@0 + inputs: + versionSpec: '18.x' + displayName: 'Install NodeJs 18.x' + - powershell: choco install markdownlint-cli --no-progress + displayName: 'Install required tools' + - download: current + artifact: NuGet Package + displayName: 'Download build artifact' + - task: CopyFiles@2 + inputs: + sourceFolder: $(Pipeline.Workspace)/NuGet Package + targetFolder: $(Build.SourcesDirectory)/BuildArtifacts/Packages/NuGet + displayName: 'Copy build artifact for test run' + - powershell: ./build.ps1 --verbosity=diagnostic + workingDirectory: ./tests/ + displayName: 'Run integration tests' + - publish: $(Build.SourcesDirectory)/tests/output/report.html + artifact: Integration Tests Windows Server 2019 (.NET Core tool) + displayName: 'Publish generated reports as build artifact' +# Integration Tests Windows Server 2022 (.NET Core tool) +- job: Test_Windows_2022_DotNetCoreTool + displayName: Integration Tests Windows Server 2022 (.NET Core tool) + dependsOn: Build + pool: + vmImage: 'windows-2019' + steps: + - task: NodeTool@0 + inputs: + versionSpec: '18.x' + displayName: 'Install NodeJs 18.x' + - powershell: choco install markdownlint-cli --no-progress + displayName: 'Install required tools' + - download: current + artifact: NuGet Package + displayName: 'Download build artifact' + - task: CopyFiles@2 + inputs: + sourceFolder: $(Pipeline.Workspace)/NuGet Package + targetFolder: $(Build.SourcesDirectory)/BuildArtifacts/Packages/NuGet + displayName: 'Copy build artifact for test run' + - powershell: ./build.ps1 --verbosity=diagnostic + workingDirectory: ./tests/ + displayName: 'Run integration tests' + - publish: $(Build.SourcesDirectory)/tests/output/report.html + artifact: Integration Tests Windows Server 2022 (.NET Core tool) + displayName: 'Publish generated reports as build artifact' +# Integration Tests macOS 11 (.NET Core tool) +- job: Test_macOS_11_DotNetCoreTool + displayName: Integration Tests macOS 11 (.NET Core tool) + dependsOn: Build + pool: + vmImage: 'macOS-11' + steps: + - task: NodeTool@0 + inputs: + versionSpec: '18.x' + displayName: 'Install NodeJs 18.x' + - bash: | + npm install -g markdownlint-cli + displayName: 'Install required tools' + - download: current + artifact: NuGet Package + displayName: 'Download build artifact' + - task: CopyFiles@2 + inputs: + sourceFolder: $(Pipeline.Workspace)/NuGet Package + targetFolder: $(Build.SourcesDirectory)/BuildArtifacts/Packages/NuGet + displayName: 'Copy build artifact for test run' + - powershell: ./build.ps1 --verbosity=diagnostic + workingDirectory: ./tests/ + displayName: 'Run integration tests' + - publish: $(Build.SourcesDirectory)/tests/output/report.html + artifact: Integration Tests macOS 11 (.NET Core tool) + displayName: 'Publish generated reports as build artifact' +# Integration Tests macOS 12 (.NET Core tool) +- job: Test_macOS_12_DotNetCoreTool + displayName: Integration Tests macOS 12 (.NET Core tool) + dependsOn: Build + pool: + vmImage: 'macOS-12' + steps: + - task: NodeTool@0 + inputs: + versionSpec: '18.x' + displayName: 'Install NodeJs 18.x' + - bash: | + npm install -g markdownlint-cli + displayName: 'Install required tools' + - download: current + artifact: NuGet Package + displayName: 'Download build artifact' + - task: CopyFiles@2 + inputs: + sourceFolder: $(Pipeline.Workspace)/NuGet Package + targetFolder: $(Build.SourcesDirectory)/BuildArtifacts/Packages/NuGet + displayName: 'Copy build artifact for test run' + - powershell: ./build.ps1 --verbosity=diagnostic + workingDirectory: ./tests/ + displayName: 'Run integration tests' + - publish: $(Build.SourcesDirectory)/tests/output/report.html + artifact: Integration Tests macOS 12 (.NET Core tool) + displayName: 'Publish generated reports as build artifact' +# Integration Tests Ubuntu 18.04 (.NET Core tool) +- job: Test_ubuntu_18_04_DotNetCoreTool + displayName: Integration Tests Ubuntu 18.04 (.NET Core tool) + dependsOn: Build + pool: + vmImage: 'ubuntu-18.04' + steps: + - task: NodeTool@0 + inputs: + versionSpec: '16.x' + displayName: 'Install NodeJs 16.x' + - bash: | + npm install -g markdownlint-cli + displayName: 'Install required tools' + - download: current + artifact: NuGet Package + displayName: 'Download build artifact' + - task: CopyFiles@2 + inputs: + sourceFolder: $(Pipeline.Workspace)/NuGet Package + targetFolder: $(Build.SourcesDirectory)/BuildArtifacts/Packages/NuGet + displayName: 'Copy build artifact for test run' + - powershell: ./build.ps1 --verbosity=diagnostic + workingDirectory: ./tests/ + displayName: 'Run integration tests' + - publish: $(Build.SourcesDirectory)/tests/output/report.html + artifact: Integration Tests Ubuntu 18.04 (.NET Core tool) + displayName: 'Publish generated reports as build artifact' +# Integration Tests Ubuntu 20.04 (.NET Core tool) +- job: Test_ubuntu_20_04_DotNetCoreTool + displayName: Integration Tests Ubuntu 20.04 (.NET Core tool) + dependsOn: Build + pool: + vmImage: 'ubuntu-20.04' + steps: + - task: NodeTool@0 + inputs: + versionSpec: '18.x' + displayName: 'Install NodeJs 18.x' + - bash: | + npm install -g markdownlint-cli + displayName: 'Install required tools' + - download: current + artifact: NuGet Package + displayName: 'Download build artifact' + - task: CopyFiles@2 + inputs: + sourceFolder: $(Pipeline.Workspace)/NuGet Package + targetFolder: $(Build.SourcesDirectory)/BuildArtifacts/Packages/NuGet + displayName: 'Copy build artifact for test run' + - powershell: ./build.ps1 --verbosity=diagnostic + workingDirectory: ./tests/ + displayName: 'Run integration tests' + - publish: $(Build.SourcesDirectory)/tests/output/report.html + artifact: Integration Tests Ubuntu 20.04 (.NET Core tool) + displayName: 'Publish generated reports as build artifact' diff --git a/tests/.config/dotnet-tools.json b/tests/.config/dotnet-tools.json new file mode 100644 index 0000000..31e896e --- /dev/null +++ b/tests/.config/dotnet-tools.json @@ -0,0 +1,12 @@ +{ + "version": 1, + "isRoot": true, + "tools": { + "cake.tool": { + "version": "2.0.0", + "commands": [ + "dotnet-cake" + ] + } + } +} \ No newline at end of file diff --git a/tests/.gitignore b/tests/.gitignore new file mode 100644 index 0000000..03f0fc2 --- /dev/null +++ b/tests/.gitignore @@ -0,0 +1,348 @@ +### Project specific ### + +output/ + +# Created by https://www.gitignore.io/api/cake,visualstudio + +### Cake ### +tools/* +!tools/packages.config + +### 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/ + +### VisualStudio Patch ### +# By default, sensitive information, such as encrypted password +# should be stored in the .pubxml.user file. +*.pubxml.user + + +# End of https://www.gitignore.io/api/cake,visualstudio diff --git a/tests/.markdownlint.json b/tests/.markdownlint.json new file mode 100644 index 0000000..5bcc68a --- /dev/null +++ b/tests/.markdownlint.json @@ -0,0 +1,10 @@ +{ + "default": true, + "MD003": { "style": "atx" }, + "MD004": { "style": "asterisk" }, + "MD007": { "indent": 4 }, + "MD009": { "br_spaces": 2 }, + "MD013": { "line_length": 100, "tables": false, "code_blocks": false }, + "MD029": { "style": "ordered" }, + "MD035": { "style": "----------------------------------------------------------------------------------------------------" } +} \ No newline at end of file diff --git a/tests/build.cake b/tests/build.cake new file mode 100644 index 0000000..586af54 --- /dev/null +++ b/tests/build.cake @@ -0,0 +1,39 @@ +#addin "Cake.Markdownlint" +#addin "Cake.Issues&prerelease" +#addin "Cake.Issues.Markdownlint&prerelease" +#addin "Cake.Issues.Reporting&prerelease" +#addin "Cake.Issues.Reporting.Generic&prerelease" + +#load build/analyze/analyze.cake +#load build/create-reports/create-reports.cake + +var target = Argument("target", "Default"); + +public class BuildData +{ + public DirectoryPath RepoRootFolder { get; } + public DirectoryPath TestRootFolder { get; } + public DirectoryPath DocsFolder { get; } + public DirectoryPath OutputFolder { get; } + public List Issues { get; } + + public BuildData(ICakeContext context) + { + this.TestRootFolder = context.MakeAbsolute(context.Directory("./")); + this.RepoRootFolder = this.TestRootFolder.Combine(".."); + this.DocsFolder = this.TestRootFolder.Combine("docs"); + this.OutputFolder = this.TestRootFolder.Combine("output"); + + this.Issues = new List(); + } +} + +Setup(setupContext => +{ + return new BuildData(setupContext); +}); + +Task("Default") + .IsDependentOn("Create-Reports"); + +RunTarget(target); diff --git a/tests/build.ps1 b/tests/build.ps1 new file mode 100644 index 0000000..fe60276 --- /dev/null +++ b/tests/build.ps1 @@ -0,0 +1,15 @@ +$ErrorActionPreference = 'Stop' + +$SCRIPT_NAME = "build.cake" + +Write-Host "Restoring .NET Core tools" +dotnet tool restore +if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } + +Write-Host "Bootstrapping Cake" +dotnet cake $SCRIPT_NAME --bootstrap +if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } + +Write-Host "Running Build" +dotnet cake $SCRIPT_NAME @args +if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } \ No newline at end of file diff --git a/tests/build.sh b/tests/build.sh new file mode 100644 index 0000000..921a324 --- /dev/null +++ b/tests/build.sh @@ -0,0 +1,11 @@ +#!/bin/bash +SCRIPT_NAME="build.cake" + +echo "Restoring .NET Core tools" +dotnet tool restore + +echo "Bootstrapping Cake" +dotnet cake $SCRIPT_NAME --bootstrap + +echo "Running Build" +dotnet cake $SCRIPT_NAME "$@" \ No newline at end of file diff --git a/tests/build/analyze/analyze.cake b/tests/build/analyze/analyze.cake new file mode 100644 index 0000000..dc9d94b --- /dev/null +++ b/tests/build/analyze/analyze.cake @@ -0,0 +1,72 @@ +Task("Analyze") + .IsDependentOn("Lint-Documentation"); + +Task("Lint-Documentation") + .IsDependentOn("Lint-TestDocumentation") + .IsDependentOn("Lint-AddinDocumentation"); + +Task("Lint-TestDocumentation") + .Description("Runs Markdownint on test documentation") + .Does(data => +{ + var markdownLintLogFilePath = data.OutputFolder.CombineWithFilePath("markdownlint-tests.log"); + + // Run markdownlint + var settings = + MarkdownlintNodeJsRunnerSettings.ForDirectory(data.DocsFolder); + settings.OutputFile = markdownLintLogFilePath; + settings.ThrowOnIssue = false; + RunMarkdownlintNodeJs(settings); + + // Read issues + var readIssuesSettings = new ReadIssuesSettings(data.RepoRootFolder) + { + Run = "Test files", + FileLinkSettings = + IssueFileLinkSettingsForGitHubBranch( + new System.Uri("https://github.com/cake-contrib/Cake.Issues.Reporting.Sarif"), + "develop", + "tests" + ) + }; + + data.Issues.AddRange( + ReadIssues( + MarkdownlintIssuesFromFilePath( + markdownLintLogFilePath, + MarkdownlintCliLogFileFormat), + readIssuesSettings)); +}); + +Task("Lint-AddinDocumentation") + .Description("Runs Markdownint on addin documentation") + .Does(data => +{ + var markdownLintLogFilePath = data.OutputFolder.CombineWithFilePath("markdownlint-addin.log"); + + // Run markdownlint + var settings = + MarkdownlintNodeJsRunnerSettings.ForDirectory(data.RepoRootFolder.Combine("docs")); + settings.OutputFile = markdownLintLogFilePath; + settings.ThrowOnIssue = false; + RunMarkdownlintNodeJs(settings); + + // Read issues + var readIssuesSettings = new ReadIssuesSettings(data.RepoRootFolder) + { + Run = "Addin documentation", + FileLinkSettings = + IssueFileLinkSettingsForGitHubBranch( + new System.Uri("https://github.com/cake-contrib/Cake.Issues.Reporting.Sarif"), + "develop", + "docs" + ) + }; + + data.Issues.AddRange( + ReadIssues( + MarkdownlintIssuesFromFilePath( + markdownLintLogFilePath, + MarkdownlintCliLogFileFormat), + readIssuesSettings)); +}); \ No newline at end of file diff --git a/tests/build/create-reports/create-reports.cake b/tests/build/create-reports/create-reports.cake new file mode 100644 index 0000000..bd110f9 --- /dev/null +++ b/tests/build/create-reports/create-reports.cake @@ -0,0 +1,15 @@ +Task("Create-Reports") + .Description("Creates all demo reports") + .IsDependentOn("Create-Reports-Default"); + +Task("Create-Reports-Default") + .Description("Creates default report") + .IsDependentOn("Analyze") + .Does(data => +{ + CreateIssueReport( + data.Issues, + GenericIssueReportFormatFromEmbeddedTemplate(GenericIssueReportTemplate.HtmlDxDataGrid), + data.RepoRootFolder, + data.OutputFolder.CombineWithFilePath("report.html")); +}); \ No newline at end of file diff --git a/tests/docs/index.md b/tests/docs/index.md new file mode 100644 index 0000000..68eae70 --- /dev/null +++ b/tests/docs/index.md @@ -0,0 +1,7 @@ +# foo +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean fermentum dictum mauris, sed feugiat nibh rutrum eget. Fusce sed purus nec sem faucibus semper sed id est. Cras vestibulum leo nec ipsum posuere eleifend. Nullam iaculis quam in sapien efficitur consequat. In hac habitasse platea dictumst. Interdum et malesuada fames ac ante ipsum primis in faucibus. Vivamus pulvinar bibendum sapien ac ultrices. Sed imperdiet mi non felis imperdiet, at interdum ante volutpat. Pellentesque eu cursus dolor, non iaculis ipsum. Quisque in tortor viverra, sodales nibh vitae, vehicula urna. Integer dolor mauris, condimentum ac accumsan quis, placerat eget tellus. Duis volutpat interdum nisi, vel efficitur nisl viverra vitae. Maecenas eget lacus vel lacus congue lobortis. Etiam ornare dictum nulla nec commodo. + +# bar +``` +Praesent euismod est vel quam volutpat ultrices. Cras luctus lorem quis nibh tincidunt, a auctor velit fermentum. Cras et nisl neque. Sed mi lorem, efficitur et purus eu, vehicula ornare felis. Aliquam sagittis ultricies sem, nec dignissim erat porta at. Suspendisse in justo lacus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Pellentesque ornare neque porttitor tortor auctor lobortis posuere id dui. Phasellus et felis a nibh viverra cursus ut blandit ante. Suspendisse lacus tortor, pharetra non pulvinar vulputate, semper sed augue. Aenean feugiat finibus quam quis iaculis. Maecenas ac quam quis risus scelerisque rhoncus. Donec eget aliquam metus. Nam feugiat sem dui, quis consectetur lorem lobortis in. Maecenas eu bibendum sapien. +``` \ No newline at end of file diff --git a/tests/nuget.config b/tests/nuget.config new file mode 100644 index 0000000..a6fa525 --- /dev/null +++ b/tests/nuget.config @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file