diff --git a/.gitignore b/.gitignore index e97b4720ac45c49088f54d0a712f717cac1a2a98..7c2965eda294e35b644059bf493b44aa290aebb6 100644 --- a/.gitignore +++ b/.gitignore @@ -1,10 +1,7 @@ ## 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 -*.rsuser *.suo *.user *.userosscache @@ -20,21 +17,16 @@ [Rr]eleases/ x64/ x86/ -[Aa][Rr][Mm]/ -[Aa][Rr][Mm]64/ bld/ [Bb]in/ [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.* @@ -48,28 +40,19 @@ TestResult.xml [Rr]eleasePS/ dlldata.c -# Benchmark Results -BenchmarkDotNet.Artifacts/ - -# .NET Core +# DNX project.lock.json project.fragment.lock.json artifacts/ -# StyleCop -StyleCopReport.xml - -# Files built by Visual Studio *_i.c *_p.c -*_h.h +*_i.h *.ilk *.meta *.obj -*.iobj *.pch *.pdb -*.ipdb *.pgc *.pgd *.rsp @@ -79,7 +62,6 @@ StyleCopReport.xml *.tlh *.tmp *.tmp_proj -*_wpftmp.csproj *.log *.vspscc *.vssscc @@ -108,9 +90,6 @@ ipch/ *.vspx *.sap -# Visual Studio Trace Files -*.e2e - # TFS 2012 Local Workspace $tf/ @@ -121,6 +100,7 @@ $tf/ _ReSharper*/ *.[Rr]e[Ss]harper *.DotSettings.user +Resharper # JustCode is a .NET coding add-in .JustCode @@ -131,14 +111,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 - # NCrunch _NCrunch_* .*crunch*.local.xml @@ -170,9 +142,9 @@ 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 +#*.pubxml *.publishproj # Microsoft Azure Web App publish settings. Comment the next line if you want to @@ -183,12 +155,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 @@ -205,13 +177,12 @@ 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/ +!*.[Cc]ache/ # Others ClientBin/ @@ -222,17 +193,12 @@ ClientBin/ *.jfm *.pfx *.publishsettings +node_modules/ 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/ -# ASP.NET Core default setup: bower directory is configured as wwwroot/lib/ and bower restore is true -**/wwwroot/lib/ # RIA/Silverlight projects Generated_Code/ @@ -244,20 +210,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 -*- Backup*.rdl # Microsoft Fakes FakesAssemblies/ @@ -267,7 +228,6 @@ FakesAssemblies/ # Node.js Tools for Visual Studio .ntvs_analysis.dat -node_modules/ # Visual Studio 6 build log *.plg @@ -275,9 +235,6 @@ node_modules/ # 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 @@ -297,49 +254,13 @@ paket-files/ .idea/ *.sln.iml -# CodeRush personal settings -.cr/personal +# 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/ - -# BeatPulse healthcheck temp database -healthchecksdb - -# Backup folder for Package Reference Convert tool in Visual Studio 2017 -MigrationBackup/ \ No newline at end of file +#cake +tools/ +dist/ \ No newline at end of file diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000000000000000000000000000000000000..a60ae9cac3363615b4f1ae284ba69ccae900c97e --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,108 @@ + + +stages: + - build + - test + - docs + - update-assembly-info + - build-release + - semantic-release + - release + +build: + before_script: + - PowerShell .\build.ps1 -Target Clean + - PowerShell .\build.ps1 -Target Restore-NuGet-Packages + stage: build + script: + - PowerShell .\build.ps1 -Target Build + except: + variables: + - $GITLAB_USER_ID == $GIT_BOT_USER_ID + +test: + stage: test + script: + - PowerShell .\build.ps1 -Target Resharper + - PowerShell .\build.ps1 -Target Run-Unit-Tests + variables: + GIT_STRATEGY: none + dependencies: + - build + artifacts: + reports: + junit: TestResult.xml + except: + variables: + - $GITLAB_USER_ID == $GIT_BOT_USER_ID + +update-assembly-info: + stage: update-assembly-info + script: + - PowerShell .\build.ps1 -Target Update-Assembly-Info + variables: + GIT_STRATEGY: none + dependencies: + - test + only: + - master + except: + variables: + - $GITLAB_USER_ID == $GIT_BOT_USER_ID + +build-release: + before_script: + - PowerShell .\build.ps1 -Target Clean + - PowerShell .\build.ps1 -Target Restore-NuGet-Packages + stage: build-release + script: + - PowerShell .\build.ps1 -Target Build-Release + variables: + GIT_STRATEGY: none + dependencies: + - update-assembly-info + only: + - master + except: + variables: + - $GITLAB_USER_ID == $GIT_BOT_USER_ID + +docs: + stage: docs + script: + - .\publishDocs.ps1 $GITLAB_TOKEN + variables: + GIT_STRATEGY: none + dependencies: + - test + only: + - master + except: + variables: + - $GITLAB_USER_ID == $GIT_BOT_USER_ID + +semantic-release: + stage: semantic-release + script: + - PowerShell .\build.ps1 -Target Semantic-Release + variables: + GIT_STRATEGY: none + dependencies: + - test + only: + - master + except: + variables: + - $GITLAB_USER_ID == $GIT_BOT_USER_ID + +release: + stage: release + script: + - PowerShell .\build.ps1 -Target Build-Release + variables: + GIT_STRATEGY: none + artifacts: + paths: + - dist + only: + - tags diff --git a/.releaserc b/.releaserc new file mode 100644 index 0000000000000000000000000000000000000000..576a3f725c1310a69365c11aae327a9f61e5dc47 --- /dev/null +++ b/.releaserc @@ -0,0 +1,23 @@ +{ + "plugins": [ + ["@semantic-release/commit-analyzer", { + "preset": "eslint" + }], + ["@semantic-release/release-notes-generator", { + "preset": "eslint", + }], + ["@semantic-release/gitlab", { + "preset": "eslint", + "gitlabUrl": "https://git.rwth-aachen.de" + }], + ["@semantic-release/exec", { + "prepareCmd" : "echo ${nextRelease.version}", + "publishCmd" : "echo test" + }], + ["@semantic-release/git", { + "preset": "eslint", + "assets": "src/**/Properties/AssemblyInfo.cs", + "message": "Chore: ${nextRelease.version}\n\n${nextRelease.notes}" + }] + ] +} \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..1cacbda86167c5f5629e9d3f8605295ad009460f --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2019 RWTH Aachen University + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/README.md b/README.md index 92628d69beff45f1e476f2799e6dd2b755335ea2..26fed1bb9c9fc5544894faf7ba099ded199ec796 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,5 @@ +## ConfigurationUpdater + Call this program with the method "SetValue", "GetValue", "SetValueOnConfiguration", "RestartNomadJob" or "Listen". Call "SetValue" with "Key" and "Value". diff --git a/build.cake b/build.cake new file mode 100644 index 0000000000000000000000000000000000000000..9167f136cd91b4c3805451f5c14b6009130cae7c --- /dev/null +++ b/build.cake @@ -0,0 +1,241 @@ +#tool nuget:?package=NUnit.ConsoleRunner&version=3.9.0 +#tool nuget:?package=JetBrains.ReSharper.CommandLineTools&version=2018.3.4 + +#addin nuget:https://api.nuget.org/v3/index.json?package=Cake.Npx&version=1.3.0 +#addin nuget:https://api.nuget.org/v3/index.json?package=Cake.Issues&version=0.6.2 +#addin nuget:https://api.nuget.org/v3/index.json?package=Cake.Issues.InspectCode&version=0.6.1 +#addin nuget:https://api.nuget.org/v3/index.json?package=Cake.FileHelpers&version=3.1.0 + +////////////////////////////////////////////////////////////////////// +// ARGUMENTS +////////////////////////////////////////////////////////////////////// + +var target = Argument("target", "Default"); +var configuration = Argument("configuration", "Release"); + +////////////////////////////////////////////////////////////////////// +// PREPARATION +////////////////////////////////////////////////////////////////////// + +// Define directories. +string projectName; +string projectPath; +DirectoryPath buildDir; +FilePath solutionFile; + +// Error rules for resharper +// Example: {"InconsistentNaming", "RedundantUsingDirective"}; +string [] resharperErrorRules = {}; + +Action<NpxSettings> requiredSemanticVersionPackages = settings => settings + .AddPackage("semantic-release") + .AddPackage("@semantic-release/commit-analyzer") + .AddPackage("@semantic-release/release-notes-generator") + .AddPackage("@semantic-release/gitlab") + .AddPackage("@semantic-release/git") + .AddPackage("@semantic-release/exec") + .AddPackage("conventional-changelog-eslint"); + +////////////////////////////////////////////////////////////////////// +// TASKS +////////////////////////////////////////////////////////////////////// + +Task("Get-Project-Name") + .Does(() => +{ + var solutions = GetFiles("./**/*.sln"); + projectName = solutions.First().GetFilenameWithoutExtension().ToString(); + Information("Project Name: {0}", projectName); + + solutionFile = solutions.First().ToString(); + Information("Solution File: {0}", solutionFile.ToString()); + + projectPath = Context.Environment.WorkingDirectory.ToString().ToString() + "/src"; + Information("Project Directory: {0}", projectPath); + + buildDir = Directory(projectPath + "/" + projectName + "/bin") + Directory(configuration); + Information("Build Directory: {0}", buildDir.ToString()); +}); + +Task("Clean") + .IsDependentOn("Get-Project-Name") + .Does(() => +{ + CleanDirectory(buildDir); + CleanDirectory("./dist"); +}); + +Task("Restore-NuGet-Packages") + .IsDependentOn("Get-Project-Name") + .Does(() => +{ + NuGetRestore(solutionFile); +}); + +Task("Resharper") + .IsDependentOn("Get-Project-Name") + .Does(() => +{ + FilePath dupLog = Context.Environment.WorkingDirectory + "/Resharper/dupfinder.xml"; + FilePath inspectLog = Context.Environment.WorkingDirectory + "/Resharper/inspectcode.xml"; + + DupFinder(solutionFile, new DupFinderSettings() { + OutputFile = dupLog.ToString() + }); + + Information("DupFinder Log:{0}{1}", Environment.NewLine, FileReadText(dupLog)); + + InspectCode(solutionFile, new InspectCodeSettings() { + OutputFile = inspectLog.ToString() + }); + + var issues = ReadIssues( + InspectCodeIssuesFromFilePath(inspectLog.ToString()), + Context.Environment.WorkingDirectory); + + Information("{0} issues are found.", issues.Count()); + + Information("InspectCode Log:{0}{1}", Environment.NewLine, FileReadText(inspectLog)); + + var errorIssues = issues.Where(issue => resharperErrorRules.Any(issue.Rule.Contains)).ToList(); + + if(errorIssues.Any()) + { + var errorMessage = errorIssues.Aggregate(new StringBuilder(), (stringBuilder, issue) => stringBuilder.AppendFormat("FileName: {0} Line: {1} Message: {2}{3}", issue.AffectedFileRelativePath, issue.Line, issue.Message, Environment.NewLine)); + throw new CakeException($"{errorIssues.Count} errors detected: {Environment.NewLine}{errorMessage}."); + } +}); + +Task("Update-Assembly-Info") + .IsDependentOn("Get-Project-Name") + .Does(() => +{ + + Information("Running semantic-release in dry run mode to extract next semantic version number"); + + string[] semanticReleaseOutput; + Npx("semantic-release", "--dry-run", requiredSemanticVersionPackages, out semanticReleaseOutput); + + Information(string.Join(Environment.NewLine, semanticReleaseOutput)); + + var nextSemanticVersionNumber = ExtractNextSemanticVersionNumber(semanticReleaseOutput); + + if (nextSemanticVersionNumber == null) { + Warning("There are no relevant changes. AssemblyInfo won't be updated!"); + } else { + Information("Next semantic version number is {0}", nextSemanticVersionNumber); + + var assemblyVersion = $"{nextSemanticVersionNumber}.0"; + + CreateAssemblyInfo(projectPath + "/" + projectName + "/Properties/AssemblyInfo.cs", new AssemblyInfoSettings{ + Product = projectName, + Title = projectName, + Company = "RWTH Aachen University IT Center", + Version = assemblyVersion, + FileVersion = assemblyVersion, + InformationalVersion = assemblyVersion, + Copyright = "RWTH Aachen University IT Center " + DateTime.Now.Year + }); + } +}); + +Task("Build-Release") + .IsDependentOn("Get-Project-Name") + .Does(() => +{ + if(IsRunningOnWindows()) + { + // Use MSBuild + MSBuild(solutionFile, settings => + { + settings.SetConfiguration(configuration); + settings.WithProperty("DebugSymbols", "false"); + settings.WithProperty("DebugType", "None"); + }); + } + else + { + // Use XBuild + XBuild(solutionFile, settings => + { + settings.SetConfiguration(configuration); + settings.WithProperty("DebugSymbols", "false"); + settings.WithProperty("DebugType", "None"); + }); + } + CopyDirectory(buildDir, "./dist"); +}); + +Task("Build") + .IsDependentOn("Get-Project-Name") + .Does(() => +{ + if(IsRunningOnWindows()) + { + // Use MSBuild + MSBuild(solutionFile, settings => + { + settings.SetConfiguration(configuration); + settings.WithProperty("RunCodeAnalysis", "true"); + }); + } + else + { + // Use XBuild + XBuild(solutionFile, settings => + { + settings.SetConfiguration(configuration); + settings.WithProperty("RunCodeAnalysis", "true"); + }); + } +}); + +Task("Run-Unit-Tests") + .Does(() => +{ + NUnit3("./src/**/bin/" + configuration + "/*.Tests.dll", new NUnit3Settings { + // generate the xml file + NoResults = false, + Results = new NUnit3Result[]{new NUnit3Result(){ + FileName = Context.Environment.WorkingDirectory + "/TestResult.xml", + Transform = Context.Environment.WorkingDirectory + "/nunit3-junit.xslt" + }} + }); +}); + +Task("Semantic-Release") + .Does(() => +{ + Npx("semantic-release", requiredSemanticVersionPackages); +}); + +////////////////////////////////////////////////////////////////////// +// TASK TARGETS +////////////////////////////////////////////////////////////////////// + +Task("Default") + .IsDependentOn("Clean") + .IsDependentOn("Restore-NuGet-Packages") + .IsDependentOn("Resharper") + .IsDependentOn("Build") + .IsDependentOn("Run-Unit-Tests"); + +////////////////////////////////////////////////////////////////////// +// EXECUTION +////////////////////////////////////////////////////////////////////// + +RunTarget(target); + +/////////////////////////////////////////////////////////////////////////////// +// Helpers +/////////////////////////////////////////////////////////////////////////////// + +string ExtractNextSemanticVersionNumber(string[] semanticReleaseOutput) +{ + var extractRegEx = new System.Text.RegularExpressions.Regex("^.+next release version is (?<SemanticVersionNumber>.*)$"); + + return semanticReleaseOutput + .Select(line => extractRegEx.Match(line).Groups["SemanticVersionNumber"].Value) + .Where(line => !string.IsNullOrWhiteSpace(line)) + .SingleOrDefault(); +} \ No newline at end of file diff --git a/build.ps1 b/build.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..f83382e8e4092ba6cf32a47f9dfa4e211c878430 --- /dev/null +++ b/build.ps1 @@ -0,0 +1,255 @@ +#The MIT License (MIT) +# +#Copyright (c) 2014 - 2016 Patrik Svensson, Mattias Karlsson, Gary Ewan Park and contributors +# +#Permission is hereby granted, free of charge, to any person obtaining a copy of +#this software and associated documentation files (the "Software"), to deal in +#the Software without restriction, including without limitation the rights to +#use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +#the Software, and to permit persons to whom the Software is furnished to do so, +#subject to the following conditions: +# +#The above copyright notice and this permission notice shall be included in all +#copies or substantial portions of the Software. +# +#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +#IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +#FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +#COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +#IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +#CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +########################################################################## +# 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/build.sh b/build.sh new file mode 100644 index 0000000000000000000000000000000000000000..d088917ed78538ff57cf654cf71aad6bf045d655 --- /dev/null +++ b/build.sh @@ -0,0 +1,122 @@ +#!/usr/bin/env bash + +#The MIT License (MIT) +# +#Copyright (c) 2014 - 2016 Patrik Svensson, Mattias Karlsson, Gary Ewan Park and contributors +# +#Permission is hereby granted, free of charge, to any person obtaining a copy of +#this software and associated documentation files (the "Software"), to deal in +#the Software without restriction, including without limitation the rights to +#use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +#the Software, and to permit persons to whom the Software is furnished to do so, +#subject to the following conditions: +# +#The above copyright notice and this permission notice shall be included in all +#copies or substantial portions of the Software. +# +#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +#IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +#FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +#COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +#IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +#CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +########################################################################## +# 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 +PACKAGES_CONFIG=$TOOLS_DIR/packages.config +PACKAGES_CONFIG_MD5=$TOOLS_DIR/packages.config.md5sum + +# Define md5sum or md5 depending on Linux/OSX +MD5_EXE= +if [[ "$(uname -s)" == "Darwin" ]]; then + MD5_EXE="md5 -r" +else + MD5_EXE="md5sum" +fi + +# Define default arguments. +SCRIPT="build.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" https://cakebuild.net/download/bootstrapper/packages + if [ $? -ne 0 ]; then + echo "An error occurred 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 occurred while downloading nuget.exe." + exit 1 + fi +fi + +# Restore tools from NuGet. +pushd "$TOOLS_DIR" >/dev/null +if [ ! -f $PACKAGES_CONFIG_MD5 ] || [ "$( cat $PACKAGES_CONFIG_MD5 | sed 's/\r$//' )" != "$( $MD5_EXE $PACKAGES_CONFIG | awk '{ print $1 }' )" ]; then + find . -type d ! -name . | xargs rm -rf +fi + +mono "$NUGET_EXE" install -ExcludeVersion +if [ $? -ne 0 ]; then + echo "Could not restore NuGet packages." + exit 1 +fi + +$MD5_EXE $PACKAGES_CONFIG | awk '{ print $1 }' >| $PACKAGES_CONFIG_MD5 + +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 \ No newline at end of file diff --git a/docs/ESLintConvention.md b/docs/ESLintConvention.md new file mode 100644 index 0000000000000000000000000000000000000000..001dba56ac6f0f96234f03d0278f618826728495 --- /dev/null +++ b/docs/ESLintConvention.md @@ -0,0 +1,45 @@ +## ESLint Convention + +Make the changes to the code and tests and then commit to your branch. Be sure to follow the commit message conventions. + +Commit message summaries must follow this basic format: + +``` +Tag: Message (fixes #1234) +``` + +`Tag` should not be confused with git tag. +`Message` should not be confused with git commit message. + +The `Tag` is one of the following: + +* `Fix` - for a bug fix. +* `Update` - for a backwards-compatible enhancement. +* `Breaking` - for a backwards-incompatible enhancement. +* `Docs` - changes to documentation only. +* `Build` - changes to build process only. +* `New` - implemented a new feature. +* `Upgrade` - for a dependency upgrade. + +The message summary should be a one-sentence description of the change. The issue number should be mentioned at the end. * The commit message should say "(fixes #1234)" at the end of the description if it closes out an existing issue (replace 1234 with the issue number). If the commit doesn't completely fix the issue, then use `(refs #1234)` instead of `(fixes #1234)`. + +Here are some good commit message summary examples: + +``` +Build: Update Travis to only test Node 0.10 (refs #734) +Fix: Semi rule incorrectly flagging extra semicolon (fixes #840) +Upgrade: Esprima to 1.2, switch to using Esprima comment attachment (fixes #730) +``` + +The commit message format is important because these messages are used to create a changelog for each release. The tag and issue number help to create more consistent and useful changelogs. + +Based on https://github.com/eslint/eslint.github.io/blob/master/docs/developer-guide/contributing.md#step-2-make-your-changes + +[npm-image]: https://badge.fury.io/js/conventional-changelog-eslint.svg +[npm-url]: https://npmjs.org/package/conventional-changelog-eslint +[travis-image]: https://travis-ci.org/stevemao/conventional-changelog-eslint.svg?branch=master +[travis-url]: https://travis-ci.org/stevemao/conventional-changelog-eslint +[daviddm-image]: https://david-dm.org/stevemao/conventional-changelog-eslint.svg?theme=shields.io +[daviddm-url]: https://david-dm.org/stevemao/conventional-changelog-eslint +[coveralls-image]: https://coveralls.io/repos/stevemao/conventional-changelog-eslint/badge.svg +[coveralls-url]: https://coveralls.io/r/stevemao/conventional-changelog-eslint \ No newline at end of file diff --git a/docs/home.md b/docs/home.md new file mode 100644 index 0000000000000000000000000000000000000000..26fed1bb9c9fc5544894faf7ba099ded199ec796 --- /dev/null +++ b/docs/home.md @@ -0,0 +1,13 @@ +## ConfigurationUpdater + +Call this program with the method "SetValue", "GetValue", "SetValueOnConfiguration", "RestartNomadJob" or "Listen". + +Call "SetValue" with "Key" and "Value". + +Call "GetValue" with "Key". + +Call "SetValueOnConfiguration" with "Key", "TemplateConfigurationFile", "OutputConfigurationFile" and n-combinations of "ReplaceKey" and "ConsulKey". + +Call "RestartNomadJob" with the "JobId". + +Call "Listen" with "JobId", "Key", "TemplateConfigurationFile", "OutputConfigurationFile" and n-combinations of "ReplaceKey" and "ConsulKey". \ No newline at end of file diff --git a/docs/images/add_a_package.png b/docs/images/add_a_package.png new file mode 100644 index 0000000000000000000000000000000000000000..e8e8ed2121edfc81d8fb2e4f3e03ed4807c66eea Binary files /dev/null and b/docs/images/add_a_package.png differ diff --git a/docs/images/add_a_reference.png b/docs/images/add_a_reference.png new file mode 100644 index 0000000000000000000000000000000000000000..4ee38c9951bc5739297b78abb2c82113286f6e71 Binary files /dev/null and b/docs/images/add_a_reference.png differ diff --git a/docs/images/create_class_library.png b/docs/images/create_class_library.png new file mode 100644 index 0000000000000000000000000000000000000000..89a252c6e358c73fb9b7299464f851e69127285a Binary files /dev/null and b/docs/images/create_class_library.png differ diff --git a/docs/images/create_project.png b/docs/images/create_project.png new file mode 100644 index 0000000000000000000000000000000000000000..f7ae1a1701c9287d5f7a959bf856f55966293081 Binary files /dev/null and b/docs/images/create_project.png differ diff --git a/docs/images/select_framework.png b/docs/images/select_framework.png new file mode 100644 index 0000000000000000000000000000000000000000..bba5b07168b73cb1005150aad92d6d925bada649 Binary files /dev/null and b/docs/images/select_framework.png differ diff --git a/docs/images/select_project.png b/docs/images/select_project.png new file mode 100644 index 0000000000000000000000000000000000000000..6f42cc3a18e89d6e2a26cd76de9730f39feb51bf Binary files /dev/null and b/docs/images/select_project.png differ diff --git a/docs/images/test_code.png b/docs/images/test_code.png new file mode 100644 index 0000000000000000000000000000000000000000..e9d9b5f88107c03fb19d4d2c6567981d25658154 Binary files /dev/null and b/docs/images/test_code.png differ diff --git a/docs/nunit.md b/docs/nunit.md new file mode 100644 index 0000000000000000000000000000000000000000..020e56f85510b1319edbe89e76cdd0891b5abe43 --- /dev/null +++ b/docs/nunit.md @@ -0,0 +1,33 @@ +## Add NUnit Tests + +### Add Nunit test adapter +1. Choose **Tools > Extensions and Updates** +2. In the **Extensions and Updates** dialog box, expand the **Online** category and then **Visual Studio Marketplace**. Then, choose **Tools > Testing**. +2. Select the **NUnit test adapter** and then choose **Download.** +### Add Tests + +1. Create a class library project and add it to your solution. + + For convinience name it like your main project and add **.Tests** as a suffix. +  + +2. Install the plug-in. In **Solution Explorer**, select the class library project, and then choose **Manage NuGet Packages** from its right-click or context menu. + +  + +3. In the **NuGet Package Manager** window, search for and select the plug-in (NUnit), and then choose **Install**. +  + + The framework is now referenced in your project under **References**. + +4. From the class library project's **References** node, select **Add Reference**. + +  + +5. In the **Reference Manager** dialog box, select the project that contains the code you'll test. + +  + +6. Code your unit test. + +  diff --git a/docs/testdoc.md b/docs/testdoc.md new file mode 100644 index 0000000000000000000000000000000000000000..938b6eb3d01ae251f10a000bda25fd4538d87d7a --- /dev/null +++ b/docs/testdoc.md @@ -0,0 +1,78 @@ +It's very easy to make some words **bold** and other words *italic* with Markdown. You can even [link to Google!](http://google.com) + +Sometimes you want numbered lists: + +1. One +2. Two +3. Three + +Sometimes you want bullet points: + +* Start a line with a star +* Profit! + +Alternatively, + +- Dashes work just as well +- And if you have sub points, put two spaces before the dash or star: + - Like this + - And this + +If you want to embed images, this is how you do it: + + + +# Structured documents + +Sometimes it's useful to have different levels of headings to structure your documents. Start lines with a `#` to create headings. Multiple `##` in a row denote smaller heading sizes. + +### This is a third-tier heading + +You can use one `#` all the way up to `######` six for different heading sizes. + +If you'd like to quote someone, use the > character before the line: + +> Coffee. The finest organic suspension ever devised... I beat the Borg with it. +> - Captain Janeway + +[200~There are many different ways to style code with GitHub's markdown. If you have inline code blocks, wrap them in backticks: `var example = true`. If you've got a longer block of code, you can indent with four spaces: + + if (isAwesome){ + return true + } + +GitHub also supports something called code fencing, which allows for multiple lines without indentation: + +``` +if (isAwesome){ + return true +} +``` + +And if you'd like to use syntax highlighting, include the language: + +```javascript +if (isAwesome){ + return true +} +``` + +GitHub supports many extras in Markdown that help you reference and link to people. If you ever want to direct a comment at someone, you can prefix their name with an @ symbol: Hey @kneath — love your sweater! + +But I have to admit, tasks lists are my favorite: + +- [x] This is a complete item +- [ ] This is an incomplete item + +When you include a task list in the first comment of an Issue, you will see a helpful progress bar in your list of issues. It works in Pull Requests, too! + +And, of course emoji! +GitHub supports many extras in Markdown that help you reference and link to people. If you ever want to direct a comment at someone, you can prefix their name with an @ symbol: Hey @kneath — love your sweater! + +But I have to admit, tasks lists are my favorite: + + This is a complete item + This is an incomplete item +When you include a task list in the first comment of an Issue, you will see a helpful progress bar in your list of issues. It works in Pull Requests, too! + +And, of course emoji! diff --git a/nunit3-junit.xslt b/nunit3-junit.xslt new file mode 100644 index 0000000000000000000000000000000000000000..bf69bdb1d2cd6fc2fdbeb915b4eb6732f720848e --- /dev/null +++ b/nunit3-junit.xslt @@ -0,0 +1,71 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + Taken from: https://github.com/nunit/nunit-transforms/tree/master/nunit3-junit +--> +<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> + <xsl:output method="xml" indent="yes"/> + + <xsl:template match="/test-run"> + <testsuites tests="{@testcasecount}" failures="{@failed}" disabled="{@skipped}" time="{@duration}"> + <xsl:apply-templates/> + </testsuites> + </xsl:template> + + <xsl:template match="test-suite"> + <xsl:if test="test-case"> + <testsuite tests="{@testcasecount}" time="{@duration}" errors="{@testcasecount - @passed - @skipped - @failed}" failures="{@failed}" skipped="{@skipped}" timestamp="{@start-time}"> + <xsl:attribute name="name"> + <xsl:for-each select="ancestor-or-self::test-suite/@name"> + <xsl:value-of select="concat(., '.')"/> + </xsl:for-each> + </xsl:attribute> + <xsl:apply-templates select="test-case"/> + </testsuite> + <xsl:apply-templates select="test-suite"/> + </xsl:if> + <xsl:if test="not(test-case)"> + <xsl:apply-templates/> + </xsl:if> + </xsl:template> + + <xsl:template match="test-case"> + <testcase name="{@name}" assertions="{@asserts}" time="{@duration}" status="{@result}" classname="{@classname}"> + <xsl:if test="@runstate = 'Skipped' or @runstate = 'Ignored'"> + <skipped/> + </xsl:if> + + <xsl:apply-templates/> + </testcase> + </xsl:template> + + <xsl:template match="command-line"/> + <xsl:template match="settings"/> + + <xsl:template match="output"> + <system-out> + <xsl:value-of select="."/> + </system-out> + </xsl:template> + + <xsl:template match="stack-trace"> + </xsl:template> + + <xsl:template match="test-case/failure"> + <failure message="{./message}"> + <xsl:value-of select="./stack-trace"/> + </failure> + </xsl:template> + + <xsl:template match="test-suite/failure"/> + + <xsl:template match="test-case/reason"> + <skipped message="{./message}"/> + </xsl:template> + + <xsl:template match="test-case/assertions"> + </xsl:template> + + <xsl:template match="test-suite/reason"/> + + <xsl:template match="properties"/> +</xsl:stylesheet> \ No newline at end of file diff --git a/publishDocs.ps1 b/publishDocs.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..f49b3b93e477ca9d57f7b1163b2bcf246f86d35d --- /dev/null +++ b/publishDocs.ps1 @@ -0,0 +1,19 @@ +param( + $token +) + +$remoteUrl = git config --get remote.origin.url +$remoteUrl = $remoteUrl.replace("git@", "") +$remoteUrl = $remoteUrl -replace "https(.*?)@","" +$remoteUrl = $remoteUrl.replace(":", "/") +$remoteUrl = $remoteUrl.replace(".git", ".wiki.git") + +$temporaryFolderName = "publishDocsTempFolder" + +git clone "https://gitlab-ci-token:$($token)@$($remoteUrl)" $temporaryFolderName +cd $temporaryFolderName +Remove-Item * +cp -r ../docs/* ./ +git add . +git commit -m "Docs: Documentation Update" +git push \ No newline at end of file diff --git a/ConfigurationUpdater.sln b/src/ConfigurationUpdater.sln similarity index 100% rename from ConfigurationUpdater.sln rename to src/ConfigurationUpdater.sln diff --git a/ConfigurationUpdater/App.config b/src/ConfigurationUpdater/App.config similarity index 100% rename from ConfigurationUpdater/App.config rename to src/ConfigurationUpdater/App.config diff --git a/ConfigurationUpdater/ConfigurationUpdater.csproj b/src/ConfigurationUpdater/ConfigurationUpdater.csproj similarity index 100% rename from ConfigurationUpdater/ConfigurationUpdater.csproj rename to src/ConfigurationUpdater/ConfigurationUpdater.csproj diff --git a/ConfigurationUpdater/Consul.cs b/src/ConfigurationUpdater/Consul.cs similarity index 100% rename from ConfigurationUpdater/Consul.cs rename to src/ConfigurationUpdater/Consul.cs diff --git a/ConfigurationUpdater/Nomad.cs b/src/ConfigurationUpdater/Nomad.cs similarity index 100% rename from ConfigurationUpdater/Nomad.cs rename to src/ConfigurationUpdater/Nomad.cs diff --git a/ConfigurationUpdater/Program.cs b/src/ConfigurationUpdater/Program.cs similarity index 100% rename from ConfigurationUpdater/Program.cs rename to src/ConfigurationUpdater/Program.cs diff --git a/ConfigurationUpdater/Properties/AssemblyInfo.cs b/src/ConfigurationUpdater/Properties/AssemblyInfo.cs similarity index 100% rename from ConfigurationUpdater/Properties/AssemblyInfo.cs rename to src/ConfigurationUpdater/Properties/AssemblyInfo.cs diff --git a/ConfigurationUpdater/packages.config b/src/ConfigurationUpdater/packages.config similarity index 100% rename from ConfigurationUpdater/packages.config rename to src/ConfigurationUpdater/packages.config