mirror of
https://github.com/tgstation/tgstation-server.git
synced 2026-08-26 06:27:19 +01:00
Merge pull request #878 from tgstation/853-OkBuddyGuyFriendPal
Fixing the build
This commit is contained in:
+1
-1
@@ -7,13 +7,13 @@
|
||||
.travis.yml
|
||||
.codecov.yml
|
||||
appveyor.yml
|
||||
LICENSE
|
||||
README
|
||||
build/**
|
||||
!build/analyzers.ruleset
|
||||
!build/tgs.docker.sh
|
||||
!build/tgs.ico
|
||||
!build/stylecop.json
|
||||
!build/Version.props
|
||||
*/bin
|
||||
*/obj
|
||||
tests
|
||||
|
||||
+15
-6
@@ -5,6 +5,7 @@ git:
|
||||
matrix:
|
||||
include:
|
||||
- env:
|
||||
- DockerBuild=false
|
||||
- DMAPI=true
|
||||
- BYOND_MAJOR="511"
|
||||
- BYOND_MINOR="1385"
|
||||
@@ -21,34 +22,42 @@ matrix:
|
||||
- libc6-i386
|
||||
- libstdc++6:i386
|
||||
- env:
|
||||
- DockerBuild=false
|
||||
- DMAPI=false
|
||||
- CONFIG=Debug
|
||||
name: "Test Server Debug"
|
||||
language: csharp
|
||||
mono: none
|
||||
dotnet: 2.1.300
|
||||
dotnet: 2.2.207
|
||||
services:
|
||||
- mysql
|
||||
cache:
|
||||
directories:
|
||||
- $HOME/.nuget/packages:
|
||||
- env:
|
||||
- DockerBuild=false
|
||||
- DMAPI=false
|
||||
- CONFIG=Release
|
||||
name: "Test Server Release"
|
||||
language: csharp
|
||||
mono: none
|
||||
dotnet: 2.1.300
|
||||
dotnet: 2.2.207
|
||||
services:
|
||||
- mysql
|
||||
cache:
|
||||
directories:
|
||||
- $HOME/.nuget/packages:
|
||||
- env:
|
||||
- DockerBuild=true
|
||||
name: "Docker Build"
|
||||
services:
|
||||
- docker
|
||||
|
||||
install:
|
||||
- if [ $DMAPI = true ]; then build/install_byond.sh; fi
|
||||
- if [ $DMAPI = false ]; then dotnet restore tgstation-server.sln; fi
|
||||
- if [ $DockerBuild = false ] && [ $DMAPI = true ]; then build/install_byond.sh; fi
|
||||
- if [ $DockerBuild = false ] && [ $DMAPI = false ]; then dotnet restore tgstation-server.sln; fi
|
||||
|
||||
script:
|
||||
- if [ $DMAPI = true ]; then tests/DMAPI/build_byond.sh || travis_terminate 1; fi
|
||||
- if [ $DMAPI = false ]; then build/test_core.sh; fi
|
||||
- if [ $DockerBuild = false ] && [ $DMAPI = true ]; then tests/DMAPI/build_byond.sh || travis_terminate 1; fi
|
||||
- if [ $DockerBuild = false ] && [ $DMAPI = false ]; then build/test_core.sh; fi
|
||||
- if [ $DockerBuild = true ]; then docker build . -f build/Dockerfile; fi
|
||||
|
||||
+7
-7
@@ -8,11 +8,12 @@ environment:
|
||||
secure: lJNGAXwiB5HlWdthz3K4PetqpTG5IEAyRgKaiKxFMQ8HW8CcOjRtB97B05op7BsK
|
||||
TGS_RELEASE_NOTES_TOKEN:
|
||||
secure: lJNGAXwiB5HlWdthz3K4PetqpTG5IEAyRgKaiKxFMQ8HW8CcOjRtB97B05op7BsK
|
||||
|
||||
branches:
|
||||
only:
|
||||
- master
|
||||
skip_tags: true
|
||||
image: Visual Studio 2017
|
||||
image: Visual Studio 2019
|
||||
configuration:
|
||||
- Debug
|
||||
- Release
|
||||
@@ -35,7 +36,7 @@ cache:
|
||||
services:
|
||||
- mssql2017
|
||||
install:
|
||||
- choco install doxygen.portable codecov graphviz.portable opencover.portable
|
||||
- choco install doxygen.install codecov graphviz.portable opencover.portable
|
||||
- nuget restore tgstation-server.sln
|
||||
- ps: Install-Product node 10
|
||||
build:
|
||||
@@ -56,9 +57,8 @@ test_script:
|
||||
- OpenCover.Console.exe -returntargetcode -register:user -target:"C:/Program Files/dotnet/dotnet.exe" -targetargs:"test -c %CONFIGURATION% --logger:trx;LogFileName=results.trx /p:DebugType=full tests/Tgstation.Server.Host.Console.Tests/Tgstation.Server.Host.Console.Tests.csproj" -filter:"+[Tgstation.Server*]* -[Tgstation.Server.Host.Console.Tests*]*" -output:".\console_coverage.xml" -oldstyle
|
||||
- ps: $wc = New-Object 'System.Net.WebClient'
|
||||
- ps: $wc.UploadFile("https://ci.appveyor.com/api/testresults/mstest/$($env:APPVEYOR_JOB_ID)", (Resolve-Path .\tests\Tgstation.Server.Host.Console.Tests\TestResults\results.trx))
|
||||
- set path=%ProgramFiles(x86)%\Microsoft Visual Studio\2017\TestAgent\Common7\IDE\CommonExtensions\Microsoft\TestWindow;%path%
|
||||
- copy "%ProgramFiles(x86)%\Microsoft Visual Studio\2017\Community\Common7\IDE\CommonExtensions\Microsoft\TestWindow\Extensions\appveyor.*" "%ProgramFiles(x86)%\Microsoft Visual Studio\2017\TestAgent\Common7\IDE\CommonExtensions\Microsoft\TestWindow\Extensions" /y
|
||||
- vstest.console /logger:trx;LogFileName=results.trx "tests\Tgstation.Server.Host.Service.Tests\bin\%CONFIGURATION%\Tgstation.Server.Host.Service.Tests.dll" /Enablecodecoverage /inIsolation /Platform:x64
|
||||
- set path=%ProgramFiles(x86)%\Microsoft Visual Studio\2019\TestAgent\Common7\IDE\CommonExtensions\Microsoft\TestWindow;%path%
|
||||
- vstest.console /logger:trx;LogFileName=results.trx "tests\Tgstation.Server.Host.Service.Tests\bin\%CONFIGURATION%\net471\Tgstation.Server.Host.Service.Tests.dll" /inIsolation /Platform:x64
|
||||
- ps: $wc = New-Object 'System.Net.WebClient'
|
||||
- ps: $wc.UploadFile("https://ci.appveyor.com/api/testresults/mstest/$($env:APPVEYOR_JOB_ID)", (Resolve-Path .\TestResults\results.trx))
|
||||
- OpenCover.Console.exe -returntargetcode -register:user -target:"C:/Program Files/dotnet/dotnet.exe" -targetargs:"test -c %CONFIGURATION% --logger:trx;LogFileName=results.trx /p:DebugType=full tests/Tgstation.Server.Host.Watchdog.Tests/Tgstation.Server.Host.Watchdog.Tests.csproj" -filter:"+[Tgstation.Server*]* -[Tgstation.Server.Host.Watchdog.Tests*]*" -output:".\watchdog_coverage.xml" -oldstyle
|
||||
@@ -71,9 +71,9 @@ after_test:
|
||||
- ps: build/UploadCoverage.ps1
|
||||
- ps: build/BuildDox.ps1
|
||||
#host updater
|
||||
- dotnet publish src/Tgstation.Server.Host/Tgstation.Server.Host.csproj -o ../../artifacts/ServerHost -c %CONFIGURATION%
|
||||
- dotnet publish src/Tgstation.Server.Host/Tgstation.Server.Host.csproj -o artifacts/ServerHost -c %CONFIGURATION%
|
||||
#console
|
||||
- dotnet publish src/Tgstation.Server.Host.Console/Tgstation.Server.Host.Console.csproj -o ../../artifacts/ServerConsole -c %CONFIGURATION%
|
||||
- dotnet publish src/Tgstation.Server.Host.Console/Tgstation.Server.Host.Console.csproj -o artifacts/ServerConsole -c %CONFIGURATION%
|
||||
- ps: Copy-Item -path "artifacts/ServerHost" -destination artifacts/ServerConsole/lib/Default -recurse
|
||||
- ps: Move-Item -path artifacts/ServerConsole/lib/Default/appsettings.json -destination artifacts/ServerConsole/
|
||||
#service
|
||||
|
||||
+1
-1
@@ -16,7 +16,7 @@ if($publish_dox){
|
||||
Add-Content "$bf\docs\Doxyfile" "`nPROJECT_NUMBER = $version`nINPUT = $bf`nOUTPUT_DIRECTORY = $doxdir`nPROJECT_LOGO = $bf/build/tgs.ico`nHAVE_DOT=YES"
|
||||
}
|
||||
|
||||
doxygen.exe "$bf\docs\Doxyfile"
|
||||
&"C:\Program Files\doxygen\bin\doxygen.exe" "$bf\docs\Doxyfile"
|
||||
|
||||
if($publish_dox){
|
||||
cd $doxdir
|
||||
|
||||
@@ -1,16 +1,7 @@
|
||||
$coverageFilePaths = Get-ChildItem -Path TestResults -Filter *.coverage -Recurse -ErrorAction SilentlyContinue -Force | %{ $_.fullname }
|
||||
|
||||
$coverageFilePathList = [string]$coverageFilePaths
|
||||
|
||||
Write-Host "Running CodeCoverage.exe..."
|
||||
&"C:\Program Files (x86)\Microsoft Visual Studio\2017\TestAgent\Team Tools\Dynamic Code Coverage Tools\CodeCoverage.exe" analyze /output:service.coveragexml "$coverageFilePathList"
|
||||
|
||||
rm -r TestResults
|
||||
|
||||
codecov -f api_coverage.xml --flag unittests
|
||||
codecov -f client_coverage.xml --flag unittests
|
||||
codecov -f host_coverage.xml --flag unittests
|
||||
codecov -f console_coverage.xml --flag unittests
|
||||
codecov -f watchdog_coverage.xml --flag unittests
|
||||
codecov -f service.coveragexml --flag unittests
|
||||
#codecov -f service.coveragexml --flag unittests
|
||||
codecov -f server_coverage.xml --flag integration
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<TgsCoreVersion>4.0.1.4</TgsCoreVersion>
|
||||
<TgsApiVersion>4.0.2</TgsApiVersion>
|
||||
<TgsClientVersion>4.0.3.0</TgsClientVersion>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
@@ -30,7 +30,7 @@
|
||||
<Rule Id="CA1027" Action="Warning" />
|
||||
<Rule Id="CA1028" Action="Warning" />
|
||||
<Rule Id="CA1030" Action="Warning" />
|
||||
<Rule Id="CA1031" Action="Warning" />
|
||||
<Rule Id="CA1031" Action="None" />
|
||||
<Rule Id="CA1032" Action="Warning" />
|
||||
<Rule Id="CA1033" Action="Warning" />
|
||||
<Rule Id="CA1034" Action="Warning" />
|
||||
@@ -66,7 +66,7 @@
|
||||
<Rule Id="CA1300" Action="Warning" />
|
||||
<Rule Id="CA1301" Action="Warning" />
|
||||
<Rule Id="CA1302" Action="Warning" />
|
||||
<Rule Id="CA1303" Action="Warning" />
|
||||
<Rule Id="CA1303" Action="None" />
|
||||
<Rule Id="CA1304" Action="Warning" />
|
||||
<Rule Id="CA1305" Action="Warning" />
|
||||
<Rule Id="CA1306" Action="Warning" />
|
||||
|
||||
@@ -100,7 +100,7 @@ namespace Tgstation.Server.Api
|
||||
/// </summary>
|
||||
/// <param name="otherVersion">The <see cref="Version"/> to test</param>
|
||||
/// <returns><see langword="true"/> if the given version is compatible with the API. <see langword="false"/> otherwise</returns>
|
||||
public static bool CheckCompatibility(Version otherVersion) => !(Version.Major != otherVersion.Major || Version.Minor > otherVersion.Minor);
|
||||
public static bool CheckCompatibility(Version otherVersion) => !(Version.Major != (otherVersion?.Major ?? throw new ArgumentNullException(nameof(otherVersion))) || Version.Minor > otherVersion.Minor);
|
||||
|
||||
/// <summary>
|
||||
/// Construct <see cref="ApiHeaders"/> for JWT authentication
|
||||
@@ -137,6 +137,9 @@ namespace Tgstation.Server.Api
|
||||
/// <param name="requestHeaders">The <see cref="RequestHeaders"/> containing the <see cref="ApiHeaders"/></param>
|
||||
public ApiHeaders(RequestHeaders requestHeaders)
|
||||
{
|
||||
if (requestHeaders == null)
|
||||
throw new ArgumentNullException(nameof(requestHeaders));
|
||||
|
||||
var jsonAccept = new Microsoft.Net.Http.Headers.MediaTypeHeaderValue(ApplicationJson);
|
||||
if (!requestHeaders.Accept.Any(x => x.MediaType == jsonAccept.MediaType))
|
||||
throw new InvalidOperationException(String.Format(CultureInfo.InvariantCulture, "Client does not accept {0}!", ApplicationJson));
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
using System;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
|
||||
namespace Tgstation.Server.Api.Models.Internal
|
||||
{
|
||||
@@ -37,31 +36,31 @@ namespace Tgstation.Server.Api.Models.Internal
|
||||
public string ConnectionString { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The <see cref="ChatConnectionStringBuilder"/> which maps to the <see cref="ConnectionString"/>
|
||||
/// Get the <see cref="ChatConnectionStringBuilder"/> which maps to the <see cref="ConnectionString"/>.
|
||||
/// </summary>
|
||||
[NotMapped]
|
||||
public ChatConnectionStringBuilder ConnectionStringBuilder
|
||||
/// <returns>A <see cref="ChatConnectionStringBuilder"/> for the <see cref="ChatBot"/>.</returns>
|
||||
public ChatConnectionStringBuilder CreateConnectionStringBuilder()
|
||||
{
|
||||
get
|
||||
if (ConnectionString == null)
|
||||
return null;
|
||||
switch (Provider)
|
||||
{
|
||||
if (ConnectionString == null)
|
||||
return null;
|
||||
switch (Provider)
|
||||
{
|
||||
case ChatProvider.Discord:
|
||||
return new DiscordConnectionStringBuilder(ConnectionString);
|
||||
case ChatProvider.Irc:
|
||||
return new IrcConnectionStringBuilder(ConnectionString);
|
||||
default:
|
||||
throw new InvalidOperationException("Invalid Provider!");
|
||||
}
|
||||
}
|
||||
set
|
||||
{
|
||||
if (value?.Valid == false)
|
||||
throw new InvalidOperationException("Cannot set invalid ChatConnectionStringBuilder!");
|
||||
ConnectionString = value?.ToString();
|
||||
case ChatProvider.Discord:
|
||||
return new DiscordConnectionStringBuilder(ConnectionString);
|
||||
case ChatProvider.Irc:
|
||||
return new IrcConnectionStringBuilder(ConnectionString);
|
||||
default:
|
||||
throw new InvalidOperationException("Invalid Provider!");
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Set the <see cref="ChatConnectionStringBuilder"/> for the <see cref="ChatBot"/>. Also updates the <see cref="ConnectionString"/>.
|
||||
/// </summary>
|
||||
/// <param name="stringBuilder">The optional <see cref="ChatConnectionStringBuilder"/>.</param>
|
||||
public void SetConnectionStringBuilder(ChatConnectionStringBuilder stringBuilder)
|
||||
{
|
||||
ConnectionString = stringBuilder?.ToString();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
|
||||
namespace Tgstation.Server.Api.Models.Internal
|
||||
{
|
||||
@@ -43,7 +44,7 @@ namespace Tgstation.Server.Api.Models.Internal
|
||||
/// <param name="otherParameters">The <see cref="DreamDaemonLaunchParameters"/> to compare against</param>
|
||||
/// <returns><see langword="true"/> if they match, <see langword="false"/> otherwise</returns>
|
||||
public bool Match(DreamDaemonLaunchParameters otherParameters) =>
|
||||
AllowWebClient == otherParameters.AllowWebClient
|
||||
AllowWebClient == (otherParameters?.AllowWebClient ?? throw new ArgumentNullException(nameof(otherParameters)))
|
||||
&& SecurityLevel == otherParameters.SecurityLevel
|
||||
&& PrimaryPort == otherParameters.PrimaryPort
|
||||
&& SecondaryPort == otherParameters.SecondaryPort
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<Import Project="../../build/Version.props" />
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>netstandard2.0</TargetFramework>
|
||||
@@ -7,15 +8,15 @@
|
||||
<Authors>Cyberboss</Authors>
|
||||
<Company>/tg/station</Company>
|
||||
<Description>API definitions for tgstation-server</Description>
|
||||
<PackageLicenseUrl>https://github.com/tgstation/tgstation-server/blob/master/LICENSE.md</PackageLicenseUrl>
|
||||
<PackageLicenseFile>LICENSE</PackageLicenseFile>
|
||||
<PackageIcon>tgs.ico</PackageIcon>
|
||||
<PackageProjectUrl>https://tgstation.github.io/tgstation-server</PackageProjectUrl>
|
||||
<PackageIconUrl>https://raw.githubusercontent.com/tgstation/tgstation-server/master/build/tgs.ico</PackageIconUrl>
|
||||
<RepositoryType>Git</RepositoryType>
|
||||
<RepositoryUrl>https://github.com/tgstation/tgstation-server</RepositoryUrl>
|
||||
<Copyright>2018</Copyright>
|
||||
<PackageTags>json web api tgstation-server tgstation ss13 byond</PackageTags>
|
||||
<PackageReleaseNotes>Added ApiHeaders.RawUserAgent</PackageReleaseNotes>
|
||||
<Version>4.0.2.0</Version>
|
||||
<Version>$(TgsApiVersion)</Version>
|
||||
<CodeAnalysisRuleSet>../../build/analyzers.ruleset</CodeAnalysisRuleSet>
|
||||
<LangVersion>latest</LangVersion>
|
||||
</PropertyGroup>
|
||||
@@ -33,19 +34,21 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.AspNetCore.Http.Extensions" Version="2.1.1" />
|
||||
<PackageReference Include="Microsoft.CodeAnalysis.FxCopAnalyzers" Version="2.6.2">
|
||||
<PackageReference Include="Microsoft.AspNetCore.Http.Extensions" Version="2.2.0" />
|
||||
<PackageReference Include="Microsoft.CodeAnalysis.FxCopAnalyzers" Version="2.9.8">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>compile; build; native; contentfiles; analyzers</IncludeAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="StyleCop.Analyzers" Version="1.1.1-beta.61">
|
||||
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="System.ComponentModel.Annotations" Version="4.5.0" />
|
||||
<PackageReference Include="System.ComponentModel.Annotations" Version="4.7.0" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
<ItemGroup>
|
||||
<AdditionalFiles Include="../../build/stylecop.json" />
|
||||
<None Include="../../LICENSE" Pack="true" PackagePath="" />
|
||||
<None Include="../../build/tgs.ico" Pack="true" PackagePath="" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<Import Project="../../build/Version.props" />
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>netstandard2.0</TargetFramework>
|
||||
<DebugType>Full</DebugType>
|
||||
<Version>4.0.3.0</Version>
|
||||
<Version>$(TgsClientVersion)</Version>
|
||||
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
|
||||
<Authors>Cyberboss</Authors>
|
||||
<Company>/tg/station 13</Company>
|
||||
@@ -13,8 +14,8 @@
|
||||
<RepositoryUrl>https://github.com/tgstation/tgstation-server</RepositoryUrl>
|
||||
<RepositoryType>Git</RepositoryType>
|
||||
<NeutralLanguage>en-CA</NeutralLanguage>
|
||||
<PackageIconUrl>https://raw.githubusercontent.com/tgstation/tgstation-server/master/build/tgs.ico</PackageIconUrl>
|
||||
<PackageLicenseUrl>https://github.com/tgstation/tgstation-server/blob/master/LICENSE</PackageLicenseUrl>
|
||||
<PackageLicenseFile>LICENSE</PackageLicenseFile>
|
||||
<PackageIcon>tgs.ico</PackageIcon>
|
||||
<PackageTags>json web api tgstation-server tgstation ss13 byond client</PackageTags>
|
||||
<PackageReleaseNotes>Added the ability to change the Token of IServerClient</PackageReleaseNotes>
|
||||
<Copyright>2018</Copyright>
|
||||
@@ -35,12 +36,8 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.CodeAnalysis.FxCopAnalyzers" Version="2.6.2">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>compile; build; native; contentfiles; analyzers</IncludeAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Newtonsoft.Json" Version="11.0.2" />
|
||||
<PackageReference Include="StyleCop.Analyzers" Version="1.1.1-beta.61">
|
||||
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
|
||||
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
|
||||
</PackageReference>
|
||||
@@ -52,5 +49,7 @@
|
||||
|
||||
<ItemGroup>
|
||||
<AdditionalFiles Include="../../build/stylecop.json" />
|
||||
<None Include="../../LICENSE" Pack="true" PackagePath="" />
|
||||
<None Include="../../build/tgs.ico" Pack="true" PackagePath="" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
||||
@@ -30,7 +30,9 @@ namespace Tgstation.Server.Host.Console
|
||||
var trace = arguments.Remove("--trace-host-watchdog");
|
||||
var debug = arguments.Remove("--debug-host-watchdog");
|
||||
|
||||
#pragma warning disable CS0618 // Type or member is obsolete
|
||||
loggerFactory.AddConsole(trace ? LogLevel.Trace : debug ? LogLevel.Debug : LogLevel.Information, true);
|
||||
#pragma warning restore CS0618 // Type or member is obsolete
|
||||
|
||||
if (trace && debug)
|
||||
{
|
||||
|
||||
@@ -1,12 +1,14 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<Import Project="../../build/Version.props" />
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>netcoreapp2.1</TargetFramework>
|
||||
<DebugType>Full</DebugType>
|
||||
<Version>4.0.1.4</Version>
|
||||
<Version>$(TgsCoreVersion)</Version>
|
||||
<CodeAnalysisRuleSet>../../build/analyzers.ruleset</CodeAnalysisRuleSet>
|
||||
<LangVersion>latest</LangVersion>
|
||||
<GeneratePackageOnBuild>false</GeneratePackageOnBuild>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
|
||||
@@ -21,12 +23,12 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.CodeAnalysis.FxCopAnalyzers" Version="2.6.2">
|
||||
<PackageReference Include="Microsoft.CodeAnalysis.FxCopAnalyzers" Version="2.9.8">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>compile; build; native; contentfiles; analyzers</IncludeAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="2.1.1" />
|
||||
<PackageReference Include="StyleCop.Analyzers" Version="1.1.1-beta.61">
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="2.2.0" />
|
||||
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
|
||||
</PackageReference>
|
||||
|
||||
Binary file not shown.
@@ -143,7 +143,8 @@ namespace Tgstation.Server.Host.Service
|
||||
installer.Uninstall(null);
|
||||
}
|
||||
else if (!Configure)
|
||||
ServiceBase.Run(new ServerService(WatchdogFactory, loggerFactory, Trace ? LogLevel.Trace : Debug ? LogLevel.Debug : LogLevel.Information));
|
||||
using (var service = new ServerService(WatchdogFactory, loggerFactory, Trace ? LogLevel.Trace : Debug ? LogLevel.Debug : LogLevel.Information))
|
||||
ServiceBase.Run(service);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,11 +1,3 @@
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Runtime.CompilerServices;
|
||||
|
||||
[assembly: AssemblyTitle("Tgstation.Server.Host.Service")]
|
||||
[assembly: ComVisible(false)]
|
||||
[assembly: Guid("29927416-3b78-49a7-a560-5ccaa638b6b4")]
|
||||
[assembly: InternalsVisibleTo("Tgstation.Server.Host.Service.Tests")]
|
||||
|
||||
[assembly: AssemblyVersion("4.0.1.4")]
|
||||
[assembly: AssemblyFileVersion("4.0.1.4")]
|
||||
[assembly:InternalsVisibleTo("Tgstation.Server.Host.Service.Tests")]
|
||||
|
||||
@@ -1,9 +1,7 @@
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Microsoft.Extensions.Logging.EventLog;
|
||||
using Microsoft.Extensions.Logging.EventLog.Internal;
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Globalization;
|
||||
using System.ServiceProcess;
|
||||
using System.Threading;
|
||||
@@ -15,7 +13,7 @@ namespace Tgstation.Server.Host.Service
|
||||
/// <summary>
|
||||
/// Represents a <see cref="IWatchdog"/> as a <see cref="ServiceBase"/>
|
||||
/// </summary>
|
||||
sealed class ServerService : ServiceBase, IEventLog
|
||||
sealed class ServerService : ServiceBase
|
||||
{
|
||||
/// <summary>
|
||||
/// The canonical windows service name
|
||||
@@ -50,22 +48,20 @@ namespace Tgstation.Server.Host.Service
|
||||
if (loggerFactory == null)
|
||||
throw new ArgumentNullException(nameof(loggerFactory));
|
||||
|
||||
#pragma warning disable CS0618 // Type or member is obsolete
|
||||
loggerFactory.AddEventLog(new EventLogSettings
|
||||
{
|
||||
EventLog = this,
|
||||
LogName = EventLog.Log,
|
||||
MachineName = EventLog.MachineName,
|
||||
SourceName = EventLog.Source,
|
||||
Filter = (message, logLevel) => logLevel >= minumumLogLevel
|
||||
});
|
||||
#pragma warning restore CS0618 // Type or member is obsolete
|
||||
|
||||
ServiceName = Name;
|
||||
watchdog = watchdogFactory.CreateWatchdog(loggerFactory);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public int MaxMessageSize => (int)EventLog.MaximumKilobytes * 1024;
|
||||
|
||||
/// <inheritdoc />
|
||||
public void WriteEntry(string message, EventLogEntryType type, int eventID, short category) => EventLog.WriteEntry(message, type, eventID, category);
|
||||
|
||||
/// <summary>
|
||||
/// Executes the <see cref="watchdog"/>, stopping the service if it exits
|
||||
/// </summary>
|
||||
@@ -74,7 +70,7 @@ namespace Tgstation.Server.Host.Service
|
||||
/// <returns>A <see cref="Task"/> representing the running operation</returns>
|
||||
async Task RunWatchdog(string[] args, CancellationToken cancellationToken)
|
||||
{
|
||||
await watchdog.RunAsync(false, args, cancellationToken).ConfigureAwait(false);
|
||||
await watchdog.RunAsync(false, args, cancellationTokenSource.Token).ConfigureAwait(false);
|
||||
|
||||
void StopServiceAsync()
|
||||
{
|
||||
@@ -93,7 +89,6 @@ namespace Tgstation.Server.Host.Service
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
[SuppressMessage("Microsoft.Usage", "CA2213:DisposableFieldsShouldBeDisposed", MessageId = "cancellationTokenSource", Justification = "IT'S DISPOSED RIGHT THERE YOU FUCCBOI!")]
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
cancellationTokenSource?.Dispose();
|
||||
|
||||
@@ -1,116 +1,51 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<Import Project="../../build/Version.props" />
|
||||
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProjectGuid>{29927416-3B78-49A7-A560-5CCAA638B6B4}</ProjectGuid>
|
||||
<OutputType>WinExe</OutputType>
|
||||
<RootNamespace>Tgstation.Server.Host.Service</RootNamespace>
|
||||
<AssemblyName>Tgstation.Server.Host.Service</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.7.1</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
|
||||
<PublishUrl>publish\</PublishUrl>
|
||||
<Install>true</Install>
|
||||
<InstallFrom>Disk</InstallFrom>
|
||||
<UpdateEnabled>false</UpdateEnabled>
|
||||
<UpdateMode>Foreground</UpdateMode>
|
||||
<UpdateInterval>7</UpdateInterval>
|
||||
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
|
||||
<UpdatePeriodically>false</UpdatePeriodically>
|
||||
<UpdateRequired>false</UpdateRequired>
|
||||
<MapFileExtensions>true</MapFileExtensions>
|
||||
<ApplicationRevision>0</ApplicationRevision>
|
||||
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
|
||||
<IsWebBootstrapper>false</IsWebBootstrapper>
|
||||
<UseApplicationTrust>false</UseApplicationTrust>
|
||||
<BootstrapperEnabled>true</BootstrapperEnabled>
|
||||
<LangVersion>latest</LangVersion>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net471</TargetFramework>
|
||||
<RuntimeIdentifier>win</RuntimeIdentifier>
|
||||
<DebugType>Full</DebugType>
|
||||
<Version>$(TgsCoreVersion)</Version>
|
||||
<CodeAnalysisRuleSet>../../build/analyzers.ruleset</CodeAnalysisRuleSet>
|
||||
<RunCodeAnalysis>true</RunCodeAnalysis>
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<CodeAnalysisRuleSet />
|
||||
<LangVersion>latest</LangVersion>
|
||||
<DocumentationFile>bin\Debug\Tgstation.Server.Host.Console.xml</DocumentationFile>
|
||||
<GeneratePackageOnBuild>false</GeneratePackageOnBuild>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<DocumentationFile>bin\Debug\Tgstation.Server.Host.Service.xml</DocumentationFile>
|
||||
<NoWarn>SA1101;SA1121;SA1200;SA1202;SA1208;SA1400;SA1413;SA1501;SA1503;SA1519;SA1520;SA1623;SA1629;SA1633;SA1642</NoWarn>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
|
||||
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
|
||||
<DocumentationFile>bin\Release\Tgstation.Server.Host.Service.xml</DocumentationFile>
|
||||
<NoWarn>SA1101;SA1121;SA1200;SA1202;SA1208;SA1400;SA1413;SA1501;SA1503;SA1519;SA1520;SA1623;SA1629;SA1633;SA1642</NoWarn>
|
||||
<WarningsAsErrors />
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<StartupObject>Tgstation.Server.Host.Service.Program</StartupObject>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup />
|
||||
<PropertyGroup>
|
||||
<ApplicationIcon>../../build/tgs.ico</ApplicationIcon>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||
<NoWarn>1701;1702;SA1652</NoWarn>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Compile Include="GlobalSuppressions.cs" />
|
||||
<Compile Include="Program.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="ServerService.cs">
|
||||
<SubType>Component</SubType>
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<BootstrapperPackage Include=".NETFramework,Version=v4.7.1">
|
||||
<Visible>False</Visible>
|
||||
<ProductName>Microsoft .NET Framework 4.7.1 %28x86 and x64%29</ProductName>
|
||||
<Install>true</Install>
|
||||
</BootstrapperPackage>
|
||||
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
|
||||
<Visible>False</Visible>
|
||||
<ProductName>.NET Framework 3.5 SP1</ProductName>
|
||||
<Install>false</Install>
|
||||
</BootstrapperPackage>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Configuration.Install" />
|
||||
<Reference Include="System.ServiceProcess" />
|
||||
<Reference Include="System.Windows.Forms" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Tgstation.Server.Host.Watchdog\Tgstation.Server.Host.Watchdog.csproj">
|
||||
<Project>{5d2d682c-6bf0-439c-850b-6ab945bbeaea}</Project>
|
||||
<Name>Tgstation.Server.Host.Watchdog</Name>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="McMaster.Extensions.CommandLineUtils">
|
||||
<Version>2.2.5</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Microsoft.CodeAnalysis.FxCopAnalyzers" Version="2.6.2">
|
||||
<PackageReference Include="McMaster.Extensions.CommandLineUtils" Version="2.4.4" />
|
||||
<PackageReference Include="Microsoft.CodeAnalysis.FxCopAnalyzers" Version="2.9.8">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>compile; build; native; contentfiles; analyzers</IncludeAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.EventLog">
|
||||
<Version>2.1.1</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="StyleCop.Analyzers" Version="1.1.1-beta.61">
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.EventLog" Version="2.2.0" />
|
||||
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
|
||||
</PackageReference>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<AdditionalFiles Include="..\..\build\stylecop.json">
|
||||
<Link>stylecop.json</Link>
|
||||
</AdditionalFiles>
|
||||
<ProjectReference Include="..\Tgstation.Server.Host.Watchdog\Tgstation.Server.Host.Watchdog.csproj" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
</Project>
|
||||
|
||||
<ItemGroup>
|
||||
<AdditionalFiles Include="../../build/stylecop.json" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Reference Include="System.Configuration.Install" />
|
||||
<Reference Include="System.ServiceProcess" />
|
||||
<Reference Include="System.Windows.Forms" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
||||
@@ -1,12 +1,14 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<Import Project="../../build/Version.props" />
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>netstandard2.0</TargetFramework>
|
||||
<DebugType>Full</DebugType>
|
||||
<AddSyntheticProjectReferencesForSolutionDependencies>false</AddSyntheticProjectReferencesForSolutionDependencies>
|
||||
<Version>4.0.1.4</Version>
|
||||
<Version>$(TgsCoreVersion)</Version>
|
||||
<CodeAnalysisRuleSet>../../build/analyzers.ruleset</CodeAnalysisRuleSet>
|
||||
<LangVersion>latest</LangVersion>
|
||||
<GeneratePackageOnBuild>false</GeneratePackageOnBuild>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
|
||||
@@ -21,12 +23,12 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.CodeAnalysis.FxCopAnalyzers" Version="2.6.2">
|
||||
<PackageReference Include="Microsoft.CodeAnalysis.FxCopAnalyzers" Version="2.9.8">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>compile; build; native; contentfiles; analyzers</IncludeAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Microsoft.Extensions.Logging" Version="2.1.1" />
|
||||
<PackageReference Include="StyleCop.Analyzers" Version="1.1.1-beta.61">
|
||||
<PackageReference Include="Microsoft.Extensions.Logging" Version="2.2.0" />
|
||||
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
|
||||
</PackageReference>
|
||||
|
||||
@@ -29,6 +29,32 @@ namespace Tgstation.Server.Host.Watchdog
|
||||
this.logger = logger ?? throw new ArgumentNullException(nameof(logger));
|
||||
}
|
||||
|
||||
string GetDotnetPath(bool isWindows)
|
||||
{
|
||||
var enviromentPath = Environment.GetEnvironmentVariable("PATH");
|
||||
var paths = enviromentPath.Split(';');
|
||||
|
||||
var exeName = "dotnet";
|
||||
IEnumerable<string> enumerator;
|
||||
if (isWindows)
|
||||
{
|
||||
exeName += ".exe";
|
||||
enumerator = paths;
|
||||
}
|
||||
else
|
||||
enumerator = paths.Select(x => x.Split(':')).SelectMany(x => x);
|
||||
|
||||
enumerator = enumerator.Select(x => Path.Combine(x, exeName));
|
||||
|
||||
return enumerator
|
||||
.Where(x =>
|
||||
{
|
||||
logger.LogTrace("Checking for dotnet at {0}", x);
|
||||
return File.Exists(x);
|
||||
})
|
||||
.FirstOrDefault();
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
#pragma warning disable CA1502 // TODO: Decomplexify
|
||||
public async Task RunAsync(bool runConfigure, string[] args, CancellationToken cancellationToken)
|
||||
@@ -38,30 +64,8 @@ namespace Tgstation.Server.Host.Watchdog
|
||||
string updateDirectory = null;
|
||||
try
|
||||
{
|
||||
var enviromentPath = Environment.GetEnvironmentVariable("PATH");
|
||||
var paths = enviromentPath.Split(';');
|
||||
var isWindows = RuntimeInformation.IsOSPlatform(OSPlatform.Windows);
|
||||
|
||||
var exeName = "dotnet";
|
||||
IEnumerable<string> enumerator;
|
||||
if (isWindows)
|
||||
{
|
||||
exeName += ".exe";
|
||||
enumerator = paths;
|
||||
}
|
||||
else
|
||||
enumerator = paths.Select(x => x.Split(':')).SelectMany(x => x);
|
||||
|
||||
enumerator = enumerator.Select(x => Path.Combine(x, exeName));
|
||||
|
||||
var dotnetPath = enumerator
|
||||
.Where(x =>
|
||||
{
|
||||
logger.LogTrace("Checking for dotnet at {0}", x);
|
||||
return File.Exists(x);
|
||||
})
|
||||
.FirstOrDefault();
|
||||
|
||||
var dotnetPath = GetDotnetPath(isWindows);
|
||||
if (dotnetPath == default)
|
||||
{
|
||||
logger.LogCritical("Unable to locate dotnet executable in PATH! Please ensure the .NET Core runtime is installed and is in your PATH!");
|
||||
@@ -126,7 +130,7 @@ namespace Tgstation.Server.Host.Watchdog
|
||||
'"' + updateDirectory + '"'
|
||||
};
|
||||
|
||||
if (Environment.GetCommandLineArgs().Any(x => x == "--attach-host-debugger"))
|
||||
if (Environment.GetCommandLineArgs().Any(x => x.Equals("--attach-host-debugger", StringComparison.OrdinalIgnoreCase)))
|
||||
arguments.Add("--attach-debugger");
|
||||
|
||||
if (runConfigure)
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
"tgstation-server-control-panel": "0.1.6"
|
||||
},
|
||||
"scripts": {
|
||||
"build": "npm run clean && tslint -p tsconfig.json && react-scripts build && cp-cli node_modules/tgstation-server-control-panel/build/public/ build/ && cp-cli ../../../build/tgs.ico build/favicon.ico && minify-json build && rimraf ../wwwroot && move-cli build ../wwwroot",
|
||||
"msbuild": "npm run clean && tslint -p tsconfig.json && react-scripts build && cp-cli node_modules/tgstation-server-control-panel/build/public/ build/ && cp-cli ../../../build/tgs.ico build/favicon.ico && minify-json build && rimraf ../wwwroot && move-cli build ../wwwroot",
|
||||
"clean": "rimraf build"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
||||
@@ -66,6 +66,7 @@ namespace Tgstation.Server.Host.Components.Chat
|
||||
public void Dispose()
|
||||
{
|
||||
logger.LogTrace("Disposing...");
|
||||
channelsSemaphore.Dispose();
|
||||
onDispose();
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
using Microsoft.Extensions.Logging;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using Tgstation.Server.Api.Models;
|
||||
using Tgstation.Server.Host.Components.Chat.Providers;
|
||||
@@ -44,7 +43,7 @@ namespace Tgstation.Server.Host.Components.Chat
|
||||
{
|
||||
if (settings == null)
|
||||
throw new ArgumentNullException(nameof(settings));
|
||||
var builder = settings.ConnectionStringBuilder;
|
||||
var builder = settings.CreateConnectionStringBuilder();
|
||||
if (builder == null || !builder.Valid)
|
||||
throw new InvalidOperationException("Invalid ChatConnectionStringBuilder!");
|
||||
switch (settings.Provider)
|
||||
|
||||
@@ -54,6 +54,11 @@ namespace Tgstation.Server.Host.Components.Compiler
|
||||
/// </summary>
|
||||
readonly CancellationTokenSource cleanupCts;
|
||||
|
||||
/// <summary>
|
||||
/// Map of <see cref="CompileJob.JobId"/>s to locks on them.
|
||||
/// </summary>
|
||||
readonly IDictionary<long, int> jobLockCounts;
|
||||
|
||||
/// <summary>
|
||||
/// <see cref="Task"/> representing calls to <see cref="CleanJob(CompileJob)"/>
|
||||
/// </summary>
|
||||
@@ -69,8 +74,6 @@ namespace Tgstation.Server.Host.Components.Compiler
|
||||
/// </summary>
|
||||
IDmbProvider nextDmbProvider;
|
||||
|
||||
Dictionary<long, int> jobLockCounts;
|
||||
|
||||
/// <summary>
|
||||
/// Construct a <see cref="DmbFactory"/>
|
||||
/// </summary>
|
||||
|
||||
@@ -176,9 +176,9 @@ namespace Tgstation.Server.Host.Components.Compiler
|
||||
var dirA = ioManager.ConcatPath(job.DirectoryName.ToString(), ADirectoryName);
|
||||
|
||||
job.MinimumSecurityLevel = securityLevel; // needed for the TempDmbProvider
|
||||
var provider = new TemporaryDmbProvider(ioManager.ResolvePath(dirA), String.Concat(job.DmeName, DmbExtension), job);
|
||||
|
||||
var timeoutAt = DateTimeOffset.Now.AddSeconds(timeout);
|
||||
|
||||
using (var provider = new TemporaryDmbProvider(ioManager.ResolvePath(dirA), String.Concat(job.DmeName, DmbExtension), job))
|
||||
using (var controller = await sessionControllerFactory.LaunchNew(launchParameters, provider, byondLock, true, true, true, cancellationToken).ConfigureAwait(false))
|
||||
{
|
||||
var launchResult = await controller.LaunchResult.ConfigureAwait(false);
|
||||
|
||||
@@ -296,29 +296,30 @@ namespace Tgstation.Server.Host.Components.Watchdog
|
||||
{
|
||||
networkPromptReaper.RegisterProcess(process);
|
||||
result = new SessionController(reattachInformation, process, byondLock, byondTopicSender, chatJsonTrackingContext, context, chat, loggerFactory.CreateLogger<SessionController>(), null, null);
|
||||
|
||||
process = null;
|
||||
context = null;
|
||||
byondLock = null;
|
||||
chatJsonTrackingContext = null;
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (result == null)
|
||||
process.Dispose();
|
||||
process?.Dispose();
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (result == null)
|
||||
context.Dispose();
|
||||
context?.Dispose();
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (result == null)
|
||||
byondLock.Dispose();
|
||||
byondLock?.Dispose();
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (result == null)
|
||||
chatJsonTrackingContext.Dispose();
|
||||
chatJsonTrackingContext?.Dispose();
|
||||
}
|
||||
|
||||
return result;
|
||||
|
||||
@@ -208,6 +208,10 @@ namespace Tgstation.Server.Host.Components.Watchdog
|
||||
DisposeAndNullControllers();
|
||||
semaphore.Dispose();
|
||||
restartRegistration.Dispose();
|
||||
|
||||
// mostly here to please fxcop, but it definitely should be disposed already
|
||||
Debug.Assert(monitorCts == null, "We reached Disposes() an monitorCts is not null!");
|
||||
monitorCts?.Dispose();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -679,6 +683,7 @@ namespace Tgstation.Server.Host.Components.Watchdog
|
||||
monitorCts.Cancel();
|
||||
await monitorTask.ConfigureAwait(false);
|
||||
monitorCts.Dispose();
|
||||
monitorCts = null;
|
||||
monitorTask = null;
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -98,6 +98,58 @@ namespace Tgstation.Server.Host.Controllers
|
||||
return StatusCode(429);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Try to download and apply an update with a given <paramref name="newVersion"/>.
|
||||
/// </summary>
|
||||
/// <param name="newVersion">The version of the server to update to.</param>
|
||||
/// <param name="cancellationToken">The <see cref="CancellationToken"/> for the operation.</param>
|
||||
/// <returns>A <see cref="Task{TResult}"/> resulting in the <see cref="IActionResult"/> of the operation.</returns>
|
||||
async Task<IActionResult> CheckReleasesAndApplyUpdate(Version newVersion, CancellationToken cancellationToken)
|
||||
{
|
||||
Logger.LogDebug("Looking for GitHub releases version {0}...", newVersion);
|
||||
IEnumerable<Release> releases;
|
||||
try
|
||||
{
|
||||
var gitHubClient = GetGitHubClient();
|
||||
releases = await gitHubClient
|
||||
.Repository
|
||||
.Release
|
||||
.GetAll(updatesConfiguration.GitHubRepositoryId)
|
||||
.WithToken(cancellationToken)
|
||||
.ConfigureAwait(false);
|
||||
}
|
||||
catch (RateLimitExceededException e)
|
||||
{
|
||||
return RateLimit(e);
|
||||
}
|
||||
catch (ApiException e)
|
||||
{
|
||||
Logger.LogWarning(OctokitException, e);
|
||||
return StatusCode((int)HttpStatusCode.FailedDependency);
|
||||
}
|
||||
|
||||
releases = releases.Where(x => x.TagName.StartsWith(updatesConfiguration.GitTagPrefix, StringComparison.InvariantCulture));
|
||||
|
||||
Logger.LogTrace("Release query complete!");
|
||||
|
||||
foreach (var release in releases)
|
||||
if (Version.TryParse(release.TagName.Replace(updatesConfiguration.GitTagPrefix, String.Empty, StringComparison.Ordinal), out var version) && version == newVersion)
|
||||
{
|
||||
var asset = release.Assets.Where(x => x.Name.Equals(updatesConfiguration.UpdatePackageAssetName, StringComparison.Ordinal)).FirstOrDefault();
|
||||
if (asset == default)
|
||||
continue;
|
||||
|
||||
if (!serverUpdater.ApplyUpdate(version, new Uri(asset.BrowserDownloadUrl), ioManager))
|
||||
return Conflict(new ErrorMessage
|
||||
{
|
||||
Message = "An update operation is already in progress!"
|
||||
});
|
||||
return Accepted(); // gtfo of here before all the cancellation tokens fire
|
||||
}
|
||||
|
||||
return StatusCode((int)HttpStatusCode.Gone);
|
||||
}
|
||||
|
||||
IGitHubClient GetGitHubClient() => String.IsNullOrEmpty(generalConfiguration.GitHubAccessToken) ? gitHubClientFactory.CreateClient() : gitHubClientFactory.CreateClient(generalConfiguration.GitHubAccessToken);
|
||||
|
||||
/// <inheritdoc />
|
||||
@@ -163,41 +215,7 @@ namespace Tgstation.Server.Host.Controllers
|
||||
Message = RestartNotSupportedException
|
||||
});
|
||||
|
||||
Logger.LogDebug("Looking for GitHub releases version {0}...", model.NewVersion);
|
||||
IEnumerable<Release> releases;
|
||||
try
|
||||
{
|
||||
var gitHubClient = GetGitHubClient();
|
||||
releases = (await gitHubClient.Repository.Release.GetAll(updatesConfiguration.GitHubRepositoryId).ConfigureAwait(false)).Where(x => x.TagName.StartsWith(updatesConfiguration.GitTagPrefix, StringComparison.InvariantCulture));
|
||||
cancellationToken.ThrowIfCancellationRequested();
|
||||
}
|
||||
catch (RateLimitExceededException e)
|
||||
{
|
||||
return RateLimit(e);
|
||||
}
|
||||
catch (ApiException e)
|
||||
{
|
||||
Logger.LogWarning(OctokitException, e);
|
||||
return StatusCode((int)HttpStatusCode.FailedDependency);
|
||||
}
|
||||
|
||||
Logger.LogTrace("Release query complete!");
|
||||
foreach (var release in releases)
|
||||
if (Version.TryParse(release.TagName.Replace(updatesConfiguration.GitTagPrefix, String.Empty, StringComparison.Ordinal), out var version) && version == model.NewVersion)
|
||||
{
|
||||
var asset = release.Assets.Where(x => x.Name == updatesConfiguration.UpdatePackageAssetName).FirstOrDefault();
|
||||
if (asset == default)
|
||||
continue;
|
||||
|
||||
if (!serverUpdater.ApplyUpdate(version, new Uri(asset.BrowserDownloadUrl), ioManager))
|
||||
return Conflict(new ErrorMessage
|
||||
{
|
||||
Message = "An update operation is already in progress!"
|
||||
});
|
||||
return Accepted(); // gtfo of here before all the cancellation tokens fire
|
||||
}
|
||||
|
||||
return StatusCode((int)HttpStatusCode.Gone);
|
||||
return await CheckReleasesAndApplyUpdate(model.NewVersion, cancellationToken).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -18,7 +18,6 @@ namespace Tgstation.Server.Host.Controllers
|
||||
/// A <see cref="Controller"/> for API functions
|
||||
/// </summary>
|
||||
[Produces(ApiHeaders.ApplicationJson)]
|
||||
[Consumes(ApiHeaders.ApplicationJson)]
|
||||
public abstract class ApiController : Controller
|
||||
{
|
||||
/// <summary>
|
||||
|
||||
@@ -123,24 +123,24 @@ namespace Tgstation.Server.Host.Controllers
|
||||
if (ApiHeaders.IsTokenAuthentication)
|
||||
return BadRequest(new Api.Models.ErrorMessage { Message = "Cannot create a token using another token!" });
|
||||
|
||||
ISystemIdentity identity;
|
||||
ISystemIdentity systemIdentity;
|
||||
try
|
||||
{
|
||||
// trust the system over the database because a user's name can change while still having the same SID
|
||||
identity = await systemIdentityFactory.CreateSystemIdentity(ApiHeaders.Username, ApiHeaders.Password, cancellationToken).ConfigureAwait(false);
|
||||
systemIdentity = await systemIdentityFactory.CreateSystemIdentity(ApiHeaders.Username, ApiHeaders.Password, cancellationToken).ConfigureAwait(false);
|
||||
}
|
||||
catch (NotImplementedException)
|
||||
{
|
||||
identity = null;
|
||||
systemIdentity = null;
|
||||
}
|
||||
|
||||
using (identity)
|
||||
using (systemIdentity)
|
||||
{
|
||||
IQueryable<User> query;
|
||||
if (identity == null)
|
||||
if (systemIdentity == null)
|
||||
query = DatabaseContext.Users.Where(x => x.CanonicalName == ApiHeaders.Username.ToUpperInvariant());
|
||||
else
|
||||
query = DatabaseContext.Users.Where(x => x.SystemIdentifier == identity.Uid);
|
||||
query = DatabaseContext.Users.Where(x => x.SystemIdentifier == systemIdentity.Uid);
|
||||
var user = await query.Select(x => new User
|
||||
{
|
||||
Id = x.Id,
|
||||
@@ -152,13 +152,14 @@ namespace Tgstation.Server.Host.Controllers
|
||||
if (user == null)
|
||||
return Unauthorized();
|
||||
|
||||
if (identity == null)
|
||||
if (systemIdentity == null)
|
||||
{
|
||||
var originalHash = user.PasswordHash;
|
||||
if (!cryptographySuite.CheckUserPassword(user, ApiHeaders.Password))
|
||||
return Unauthorized();
|
||||
if (user.PasswordHash != originalHash)
|
||||
{
|
||||
Logger.LogDebug("User ID {0}'s password hash needs a refresh, updating database.", user.Id);
|
||||
var updatedUser = new User
|
||||
{
|
||||
Id = user.Id
|
||||
@@ -170,25 +171,27 @@ namespace Tgstation.Server.Host.Controllers
|
||||
}
|
||||
|
||||
// check if the name changed and updoot accordingly
|
||||
else if (identity.Username != user.Name)
|
||||
else if (systemIdentity.Username != user.Name)
|
||||
{
|
||||
Logger.LogDebug("User ID {0}'s system identity needs a refresh, updating database.", user.Id);
|
||||
DatabaseContext.Users.Attach(user);
|
||||
user.Name = identity.Username;
|
||||
user.Name = systemIdentity.Username;
|
||||
user.CanonicalName = user.Name.ToUpperInvariant();
|
||||
await DatabaseContext.Save(cancellationToken).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
// Now that the bookeeping is done, tell them to fuck off if necessary
|
||||
if (!user.Enabled.Value)
|
||||
return Forbid();
|
||||
|
||||
var token = await tokenFactory.CreateToken(user, cancellationToken).ConfigureAwait(false);
|
||||
if (identity != null)
|
||||
if (systemIdentity != null)
|
||||
{
|
||||
// expire the identity slightly after the auth token in case of lag
|
||||
var identExpiry = token.ExpiresAt.Value;
|
||||
identExpiry += tokenFactory.ValidationParameters.ClockSkew;
|
||||
identExpiry += TimeSpan.FromSeconds(15);
|
||||
identityCache.CacheSystemIdentity(user, identity, identExpiry);
|
||||
identityCache.CacheSystemIdentity(user, systemIdentity, identExpiry);
|
||||
}
|
||||
|
||||
Logger.LogDebug("Successfully logged in user {0}!", user.Id);
|
||||
|
||||
@@ -104,6 +104,9 @@ namespace Tgstation.Server.Host.Core
|
||||
// enable options which give us config reloading
|
||||
services.AddOptions();
|
||||
|
||||
// this is needful for the setup wizard
|
||||
services.AddLogging();
|
||||
|
||||
// other stuff needed for for setup wizard and configuration
|
||||
services.AddSingleton<IIOManager, DefaultIOManager>();
|
||||
services.AddSingleton<IConsole, IO.Console>();
|
||||
@@ -231,9 +234,8 @@ namespace Tgstation.Server.Host.Core
|
||||
// enable browser detection
|
||||
services.AddDetectionCore().AddBrowser();
|
||||
|
||||
// enable CORS if necessary
|
||||
if (controlPanelConfiguration.AllowAnyOrigin || controlPanelConfiguration.AllowedOrigins?.Count > 0)
|
||||
services.AddCors();
|
||||
// CORS conditionally enabled later
|
||||
services.AddCors();
|
||||
|
||||
void AddTypedContext<TContext>() where TContext : DatabaseContext<TContext>
|
||||
{
|
||||
@@ -369,12 +371,13 @@ namespace Tgstation.Server.Host.Core
|
||||
corsBuilder = builder => builder.WithOrigins(controlPanelConfiguration.AllowedOrigins.ToArray());
|
||||
}
|
||||
|
||||
if (corsBuilder != null)
|
||||
var originalBuilder = corsBuilder;
|
||||
corsBuilder = builder =>
|
||||
{
|
||||
var originalBuilder = corsBuilder;
|
||||
corsBuilder = builder => originalBuilder(builder.AllowAnyHeader().AllowAnyMethod());
|
||||
applicationBuilder.UseCors(corsBuilder);
|
||||
}
|
||||
builder.AllowAnyHeader().AllowAnyMethod();
|
||||
originalBuilder?.Invoke(builder);
|
||||
};
|
||||
applicationBuilder.UseCors(corsBuilder);
|
||||
|
||||
// Do not service requests until Ready is called, this will return 503 until that point
|
||||
applicationBuilder.UseAsyncInitialization(async cancellationToken =>
|
||||
|
||||
@@ -274,7 +274,10 @@ namespace Tgstation.Server.Host.Core
|
||||
await console.WriteAsync("Testing create DB permission...", true, cancellationToken).ConfigureAwait(false);
|
||||
using (var command = testConnection.CreateCommand())
|
||||
{
|
||||
command.CommandText = String.Format(CultureInfo.InvariantCulture, "CREATE DATABASE {0}", databaseName);
|
||||
// I really don't care about user sanitization here, they want to fuck their own DB? so be it
|
||||
#pragma warning disable CA2100 // Review SQL queries for security vulnerabilities
|
||||
command.CommandText = $"CREATE DATABASE {databaseName}";
|
||||
#pragma warning restore CA2100 // Review SQL queries for security vulnerabilities
|
||||
await command.ExecuteNonQueryAsync(cancellationToken).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
@@ -282,7 +285,9 @@ namespace Tgstation.Server.Host.Core
|
||||
await console.WriteAsync("Dropping test database...", true, cancellationToken).ConfigureAwait(false);
|
||||
using (var command = testConnection.CreateCommand())
|
||||
{
|
||||
command.CommandText = String.Format(CultureInfo.InvariantCulture, "DROP DATABASE {0}", databaseName);
|
||||
#pragma warning disable CA2100 // Review SQL queries for security vulnerabilities
|
||||
command.CommandText = $"DROP DATABASE {databaseName}";
|
||||
#pragma warning restore CA2100 // Review SQL queries for security vulnerabilities
|
||||
try
|
||||
{
|
||||
await command.ExecuteNonQueryAsync(cancellationToken).ConfigureAwait(false);
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
using System;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Tgstation.Server.Host.Core
|
||||
{
|
||||
/// <summary>
|
||||
/// Extensions for the <see cref="Task"/> <see langword="class"/>.
|
||||
/// </summary>
|
||||
static class TaskExtensions
|
||||
{
|
||||
/// <summary>
|
||||
/// Create a <see cref="Task"/> that can be awaited while respecting a given <paramref name="cancellationToken"/>.
|
||||
/// </summary>
|
||||
/// <param name="task">The <see cref="Task"/> to add cancel support to.</param>
|
||||
/// <param name="cancellationToken">The <see cref="CancellationToken"/> for the operation.</param>
|
||||
/// <returns>A <see cref="Task"/> representing the running operation.</returns>
|
||||
public static Task WithToken(this Task task, CancellationToken cancellationToken)
|
||||
{
|
||||
if (task == null)
|
||||
throw new ArgumentNullException(nameof(task));
|
||||
|
||||
async Task<object> Wrap()
|
||||
{
|
||||
await task.ConfigureAwait(false);
|
||||
return null;
|
||||
}
|
||||
|
||||
return Wrap().WithToken(cancellationToken);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Create a <see cref="Task{TResult}"/> that can be awaited while respecting a given <paramref name="cancellationToken"/>.
|
||||
/// </summary>
|
||||
/// <typeparam name="T">The result <see cref="Type"/> of the <paramref name="task"/>.</typeparam>
|
||||
/// <param name="task">The <see cref="Task{TResult}"/> to add cancel support to.</param>
|
||||
/// <param name="cancellationToken">The <see cref="CancellationToken"/> for the operation.</param>
|
||||
/// <returns>A <see cref="Task{TResult}"/> resulting in the result of <paramref name="task"/>.</returns>
|
||||
public static async Task<T> WithToken<T>(this Task<T> task, CancellationToken cancellationToken)
|
||||
{
|
||||
if (task == null)
|
||||
throw new ArgumentNullException(nameof(task));
|
||||
|
||||
var cancelTcs = new TaskCompletionSource<object>();
|
||||
using (cancellationToken.Register(() => cancelTcs.SetCanceled()))
|
||||
await Task.WhenAny(task, cancelTcs.Task).ConfigureAwait(false);
|
||||
cancellationToken.ThrowIfCancellationRequested();
|
||||
|
||||
return await task.ConfigureAwait(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -16,6 +16,9 @@ namespace Tgstation.Server.Host.Models.Migrations
|
||||
/// <param name="migrationBuilder">The <see cref="MigrationBuilder"/> to use</param>
|
||||
protected override void Up(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
if (migrationBuilder == null)
|
||||
throw new ArgumentNullException(nameof(migrationBuilder));
|
||||
|
||||
migrationBuilder.CreateTable(
|
||||
name: "Users",
|
||||
columns: table => new
|
||||
@@ -596,6 +599,9 @@ namespace Tgstation.Server.Host.Models.Migrations
|
||||
/// <param name="migrationBuilder">The <see cref="MigrationBuilder"/> to use</param>
|
||||
protected override void Down(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
if (migrationBuilder == null)
|
||||
throw new ArgumentNullException(nameof(migrationBuilder));
|
||||
|
||||
migrationBuilder.DropForeignKey(
|
||||
name: "FK_Jobs_Instances_InstanceId",
|
||||
table: "Jobs");
|
||||
|
||||
@@ -16,6 +16,9 @@ namespace Tgstation.Server.Host.Models.Migrations
|
||||
/// <param name="migrationBuilder">The <see cref="MigrationBuilder"/> to use</param>
|
||||
protected override void Up(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
if (migrationBuilder == null)
|
||||
throw new ArgumentNullException(nameof(migrationBuilder));
|
||||
|
||||
migrationBuilder.CreateTable(
|
||||
name: "Users",
|
||||
columns: table => new
|
||||
@@ -593,6 +596,9 @@ namespace Tgstation.Server.Host.Models.Migrations
|
||||
/// <param name="migrationBuilder">The <see cref="MigrationBuilder"/> to use</param>
|
||||
protected override void Down(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
if (migrationBuilder == null)
|
||||
throw new ArgumentNullException(nameof(migrationBuilder));
|
||||
|
||||
migrationBuilder.DropForeignKey(
|
||||
name: "FK_Jobs_Instances_InstanceId",
|
||||
table: "Jobs");
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
using System;
|
||||
using Tgstation.Server.Api.Models;
|
||||
|
||||
namespace Tgstation.Server.Host.Models.Migrations
|
||||
@@ -14,6 +15,9 @@ namespace Tgstation.Server.Host.Models.Migrations
|
||||
/// <param name="migrationBuilder">The <see cref="MigrationBuilder"/> to use</param>
|
||||
protected override void Up(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
if (migrationBuilder == null)
|
||||
throw new ArgumentNullException(nameof(migrationBuilder));
|
||||
|
||||
migrationBuilder.AddColumn<int>(
|
||||
name: "ApiValidationSecurityLevel",
|
||||
table: "DreamMakerSettings",
|
||||
@@ -33,6 +37,9 @@ namespace Tgstation.Server.Host.Models.Migrations
|
||||
/// <param name="migrationBuilder">The <see cref="MigrationBuilder"/> to use</param>
|
||||
protected override void Down(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
if (migrationBuilder == null)
|
||||
throw new ArgumentNullException(nameof(migrationBuilder));
|
||||
|
||||
migrationBuilder.DropColumn(
|
||||
name: "ApiValidationSecurityLevel",
|
||||
table: "DreamMakerSettings");
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
using System;
|
||||
using Tgstation.Server.Api.Models;
|
||||
|
||||
namespace Tgstation.Server.Host.Models.Migrations
|
||||
@@ -14,6 +15,9 @@ namespace Tgstation.Server.Host.Models.Migrations
|
||||
/// <param name="migrationBuilder">The <see cref="MigrationBuilder"/> to use</param>
|
||||
protected override void Up(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
if (migrationBuilder == null)
|
||||
throw new ArgumentNullException(nameof(migrationBuilder));
|
||||
|
||||
migrationBuilder.AddColumn<int>(
|
||||
name: "ApiValidationSecurityLevel",
|
||||
table: "DreamMakerSettings",
|
||||
@@ -33,6 +37,9 @@ namespace Tgstation.Server.Host.Models.Migrations
|
||||
/// <param name="migrationBuilder">The <see cref="MigrationBuilder"/> to use</param>
|
||||
protected override void Down(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
if (migrationBuilder == null)
|
||||
throw new ArgumentNullException(nameof(migrationBuilder));
|
||||
|
||||
migrationBuilder.DropColumn(
|
||||
name: "ApiValidationSecurityLevel",
|
||||
table: "DreamMakerSettings");
|
||||
|
||||
+6
@@ -14,6 +14,9 @@ namespace Tgstation.Server.Host.Models.Migrations
|
||||
/// <param name="migrationBuilder">The <see cref="MigrationBuilder"/> to use</param>
|
||||
protected override void Up(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
if (migrationBuilder == null)
|
||||
throw new ArgumentNullException(nameof(migrationBuilder));
|
||||
|
||||
migrationBuilder.DropForeignKey(
|
||||
name: "FK_Instances_WatchdogReattachInformations_WatchdogReattachInfor~",
|
||||
table: "Instances");
|
||||
@@ -122,6 +125,9 @@ namespace Tgstation.Server.Host.Models.Migrations
|
||||
/// <param name="migrationBuilder">The <see cref="MigrationBuilder"/> to use</param>
|
||||
protected override void Down(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
if (migrationBuilder == null)
|
||||
throw new ArgumentNullException(nameof(migrationBuilder));
|
||||
|
||||
migrationBuilder.DropForeignKey(
|
||||
name: "FK_TestMerges_RevisionInformations_PrimaryRevisionInformationId",
|
||||
table: "TestMerges");
|
||||
|
||||
+6
@@ -14,6 +14,9 @@ namespace Tgstation.Server.Host.Models.Migrations
|
||||
/// <param name="migrationBuilder">The <see cref="MigrationBuilder"/> to use</param>
|
||||
protected override void Up(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
if (migrationBuilder == null)
|
||||
throw new ArgumentNullException(nameof(migrationBuilder));
|
||||
|
||||
migrationBuilder.DropForeignKey(
|
||||
name: "FK_Instances_WatchdogReattachInformations_WatchdogReattachInformationId",
|
||||
table: "Instances");
|
||||
@@ -120,6 +123,9 @@ namespace Tgstation.Server.Host.Models.Migrations
|
||||
/// <param name="migrationBuilder">The <see cref="MigrationBuilder"/> to use</param>
|
||||
protected override void Down(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
if (migrationBuilder == null)
|
||||
throw new ArgumentNullException(nameof(migrationBuilder));
|
||||
|
||||
migrationBuilder.DropForeignKey(
|
||||
name: "FK_TestMerges_RevisionInformations_PrimaryRevisionInformationId",
|
||||
table: "TestMerges");
|
||||
|
||||
+7
@@ -1,4 +1,5 @@
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
using System;
|
||||
|
||||
namespace Tgstation.Server.Host.Models.Migrations
|
||||
{
|
||||
@@ -13,6 +14,9 @@ namespace Tgstation.Server.Host.Models.Migrations
|
||||
/// <param name="migrationBuilder">The <see cref="MigrationBuilder"/> to use</param>
|
||||
protected override void Up(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
if (migrationBuilder == null)
|
||||
throw new ArgumentNullException(nameof(migrationBuilder));
|
||||
|
||||
migrationBuilder.DropForeignKey(
|
||||
name: "FK_ReattachInformations_CompileJobs_CompileJobId",
|
||||
table: "ReattachInformations");
|
||||
@@ -39,6 +43,9 @@ namespace Tgstation.Server.Host.Models.Migrations
|
||||
/// <param name="migrationBuilder">The <see cref="MigrationBuilder"/> to use</param>
|
||||
protected override void Down(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
if (migrationBuilder == null)
|
||||
throw new ArgumentNullException(nameof(migrationBuilder));
|
||||
|
||||
migrationBuilder.DropForeignKey(
|
||||
name: "FK_ReattachInformations_CompileJobs_CompileJobId",
|
||||
table: "ReattachInformations");
|
||||
|
||||
+7
@@ -1,4 +1,5 @@
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
using System;
|
||||
|
||||
namespace Tgstation.Server.Host.Models.Migrations
|
||||
{
|
||||
@@ -13,6 +14,9 @@ namespace Tgstation.Server.Host.Models.Migrations
|
||||
/// <param name="migrationBuilder">The <see cref="MigrationBuilder"/> to use</param>
|
||||
protected override void Up(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
if (migrationBuilder == null)
|
||||
throw new ArgumentNullException(nameof(migrationBuilder));
|
||||
|
||||
migrationBuilder.DropForeignKey(
|
||||
name: "FK_ReattachInformations_CompileJobs_CompileJobId",
|
||||
table: "ReattachInformations");
|
||||
@@ -39,6 +43,9 @@ namespace Tgstation.Server.Host.Models.Migrations
|
||||
/// <param name="migrationBuilder">The <see cref="MigrationBuilder"/> to use</param>
|
||||
protected override void Down(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
if (migrationBuilder == null)
|
||||
throw new ArgumentNullException(nameof(migrationBuilder));
|
||||
|
||||
migrationBuilder.DropForeignKey(
|
||||
name: "FK_ReattachInformations_CompileJobs_CompileJobId",
|
||||
table: "ReattachInformations");
|
||||
|
||||
+7
@@ -1,4 +1,5 @@
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
using System;
|
||||
|
||||
namespace Tgstation.Server.Host.Models.Migrations
|
||||
{
|
||||
@@ -13,6 +14,9 @@ namespace Tgstation.Server.Host.Models.Migrations
|
||||
/// <param name="migrationBuilder">The <see cref="MigrationBuilder"/> to use</param>
|
||||
protected override void Up(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
if (migrationBuilder == null)
|
||||
throw new ArgumentNullException(nameof(migrationBuilder));
|
||||
|
||||
migrationBuilder.AddColumn<bool>(
|
||||
name: "PostTestMergeComment",
|
||||
table: "RepositorySettings",
|
||||
@@ -26,6 +30,9 @@ namespace Tgstation.Server.Host.Models.Migrations
|
||||
/// <param name="migrationBuilder">The <see cref="MigrationBuilder"/> to use</param>
|
||||
protected override void Down(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
if (migrationBuilder == null)
|
||||
throw new ArgumentNullException(nameof(migrationBuilder));
|
||||
|
||||
migrationBuilder.DropColumn(
|
||||
name: "PostTestMergeComment",
|
||||
table: "RepositorySettings");
|
||||
|
||||
+7
@@ -1,4 +1,5 @@
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
using System;
|
||||
|
||||
namespace Tgstation.Server.Host.Models.Migrations
|
||||
{
|
||||
@@ -13,6 +14,9 @@ namespace Tgstation.Server.Host.Models.Migrations
|
||||
/// <param name="migrationBuilder">The <see cref="MigrationBuilder"/> to use</param>
|
||||
protected override void Up(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
if (migrationBuilder == null)
|
||||
throw new ArgumentNullException(nameof(migrationBuilder));
|
||||
|
||||
migrationBuilder.AddColumn<bool>(
|
||||
name: "PostTestMergeComment",
|
||||
table: "RepositorySettings",
|
||||
@@ -26,6 +30,9 @@ namespace Tgstation.Server.Host.Models.Migrations
|
||||
/// <param name="migrationBuilder">The <see cref="MigrationBuilder"/> to use</param>
|
||||
protected override void Down(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
if (migrationBuilder == null)
|
||||
throw new ArgumentNullException(nameof(migrationBuilder));
|
||||
|
||||
migrationBuilder.DropColumn(
|
||||
name: "PostTestMergeComment",
|
||||
table: "RepositorySettings");
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
using System;
|
||||
|
||||
namespace Tgstation.Server.Host.Models.Migrations
|
||||
{
|
||||
@@ -13,6 +14,9 @@ namespace Tgstation.Server.Host.Models.Migrations
|
||||
/// <param name="migrationBuilder">The <see cref="MigrationBuilder"/> to use</param>
|
||||
protected override void Up(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
if (migrationBuilder == null)
|
||||
throw new ArgumentNullException(nameof(migrationBuilder));
|
||||
|
||||
migrationBuilder.DropIndex(
|
||||
name: "IX_RevisionInformations_CommitSha",
|
||||
table: "RevisionInformations");
|
||||
@@ -34,6 +38,9 @@ namespace Tgstation.Server.Host.Models.Migrations
|
||||
/// <param name="migrationBuilder">The <see cref="MigrationBuilder"/> to use</param>
|
||||
protected override void Down(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
if (migrationBuilder == null)
|
||||
throw new ArgumentNullException(nameof(migrationBuilder));
|
||||
|
||||
migrationBuilder.DropIndex(
|
||||
name: "IX_RevisionInformations_InstanceId_CommitSha",
|
||||
table: "RevisionInformations");
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
using System;
|
||||
|
||||
namespace Tgstation.Server.Host.Models.Migrations
|
||||
{
|
||||
@@ -13,6 +14,9 @@ namespace Tgstation.Server.Host.Models.Migrations
|
||||
/// <param name="migrationBuilder">The <see cref="MigrationBuilder"/> to use</param>
|
||||
protected override void Up(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
if (migrationBuilder == null)
|
||||
throw new ArgumentNullException(nameof(migrationBuilder));
|
||||
|
||||
migrationBuilder.DropForeignKey(
|
||||
name: "FK_RevisionInformations_Instances_InstanceId",
|
||||
table: "RevisionInformations");
|
||||
@@ -46,6 +50,9 @@ namespace Tgstation.Server.Host.Models.Migrations
|
||||
/// <param name="migrationBuilder">The <see cref="MigrationBuilder"/> to use</param>
|
||||
protected override void Down(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
if (migrationBuilder == null)
|
||||
throw new ArgumentNullException(nameof(migrationBuilder));
|
||||
|
||||
migrationBuilder.DropForeignKey(
|
||||
name: "FK_RevisionInformations_Instances_InstanceId",
|
||||
table: "RevisionInformations");
|
||||
|
||||
@@ -7,7 +7,7 @@ using Tgstation.Server.Host.Configuration;
|
||||
namespace Tgstation.Server.Host.Models.Migrations
|
||||
{
|
||||
/// <summary>
|
||||
/// Contains helpers for creating design time <see cref="Models.DatabaseContext{TParentContext}"/>s
|
||||
/// Contains helpers for creating design time <see cref="DatabaseContext{TParentContext}"/>s
|
||||
/// </summary>
|
||||
static class DesignTimeDbContextFactoryHelpers
|
||||
{
|
||||
|
||||
@@ -10,6 +10,12 @@ namespace Tgstation.Server.Host.Models.Migrations
|
||||
sealed class MySqlDesignTimeDbContextFactory : IDesignTimeDbContextFactory<MySqlDatabaseContext>
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public MySqlDatabaseContext CreateDbContext(string[] args) => new MySqlDatabaseContext(new DbContextOptions<MySqlDatabaseContext>(), DesignTimeDbContextFactoryHelpers.GetDbContextOptions(), new DatabaseSeeder(new CryptographySuite(new PasswordHasher<User>())), new LoggerFactory().CreateLogger<MySqlDatabaseContext>());
|
||||
public MySqlDatabaseContext CreateDbContext(string[] args)
|
||||
{
|
||||
using (var loggerFactory = new LoggerFactory())
|
||||
{
|
||||
return new MySqlDatabaseContext(new DbContextOptions<MySqlDatabaseContext>(), DesignTimeDbContextFactoryHelpers.GetDbContextOptions(), new DatabaseSeeder(new CryptographySuite(new PasswordHasher<User>())), loggerFactory.CreateLogger<MySqlDatabaseContext>());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,6 +10,12 @@ namespace Tgstation.Server.Host.Models.Migrations
|
||||
sealed class SqlServerDesignTimeDbContextFactory : IDesignTimeDbContextFactory<SqlServerDatabaseContext>
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public SqlServerDatabaseContext CreateDbContext(string[] args) => new SqlServerDatabaseContext(new DbContextOptions<SqlServerDatabaseContext>(), DesignTimeDbContextFactoryHelpers.GetDbContextOptions(), new DatabaseSeeder(new CryptographySuite(new PasswordHasher<User>())), new LoggerFactory().CreateLogger<SqlServerDatabaseContext>());
|
||||
public SqlServerDatabaseContext CreateDbContext(string[] args)
|
||||
{
|
||||
using (var loggerFactory = new LoggerFactory())
|
||||
{
|
||||
return new SqlServerDatabaseContext(new DbContextOptions<SqlServerDatabaseContext>(), DesignTimeDbContextFactoryHelpers.GetDbContextOptions(), new DatabaseSeeder(new CryptographySuite(new PasswordHasher<User>())), loggerFactory.CreateLogger<SqlServerDatabaseContext>());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk.Web">
|
||||
<Project Sdk="Microsoft.NET.Sdk.Web">
|
||||
<Import Project="../../build/Version.props" />
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>netcoreapp2.1</TargetFramework>
|
||||
<DebugType>Full</DebugType>
|
||||
<Version>4.0.1.4</Version>
|
||||
<Version>$(TgsCoreVersion)</Version>
|
||||
<LangVersion>latest</LangVersion>
|
||||
<CodeAnalysisRuleSet>../../build/analyzers.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
@@ -15,7 +16,7 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||
<NoWarn>1701;1702;SA1652</NoWarn>
|
||||
<NoWarn>1701;1702;SA1652;CA1063</NoWarn>
|
||||
<DocumentationFile>bin\Debug\netcoreapp2.1\Tgstation.Server.Host.xml</DocumentationFile>
|
||||
</PropertyGroup>
|
||||
|
||||
@@ -36,11 +37,17 @@
|
||||
<Content Remove="ClientApp\public\manifest.json" />
|
||||
<Content Remove="ClientApp\tsconfig.json" />
|
||||
<Content Remove="ClientApp\tslint.json" />
|
||||
<ClientApp Include="ClientApp\src;ClientApp\public;ClientApp\tsconfig.json;ClientApp\tslint.json;ClientApp\package-lock.json" />
|
||||
<ClientApp Include="ClientApp\src\**\*;ClientApp\public\**\*;ClientApp\tsconfig.json;ClientApp\tslint.json;ClientApp\package.json;ClientApp\package-lock.json" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
<Target Name="NpmBuild" BeforeTargets="BeforeBuild" DependsOnTargets="NpmInstall" Inputs="@(ClientApp)" Outputs="wwwroot\index.html">
|
||||
<Exec WorkingDirectory="ClientApp" Command="npm run build" />
|
||||
<Message Text="Building web control panel..." Importance="high" />
|
||||
<Exec WorkingDirectory="ClientApp" Command="npm run msbuild" />
|
||||
</Target>
|
||||
|
||||
<Target Name="NpmClean" AfterTargets="Clean">
|
||||
<Message Text="Cleaning web control panel..." Importance="high" />
|
||||
<RemoveDir Directories="wwwroot" />
|
||||
</Target>
|
||||
|
||||
<ItemGroup>
|
||||
@@ -48,39 +55,39 @@
|
||||
<PackageReference Include="Byond.TopicSender" Version="1.1.4" />
|
||||
<PackageReference Include="Cyberboss.AspNetCore.AsyncInitializer" Version="1.2.0" />
|
||||
<PackageReference Include="Cyberboss.SmartIrc4net.Standard" Version="0.4.6" />
|
||||
<PackageReference Include="Discord.Net.WebSocket" Version="2.0.0-beta" />
|
||||
<PackageReference Include="LibGit2Sharp" Version="0.25.3" />
|
||||
<PackageReference Include="Microsoft.AspNetCore" Version="2.1.4" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="2.1.2" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Identity" Version="2.1.3" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.1.3" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="2.1.1" />
|
||||
<PackageReference Include="Microsoft.CodeAnalysis.FxCopAnalyzers" Version="2.6.2">
|
||||
<PackageReference Include="Discord.Net.WebSocket" Version="2.1.1" />
|
||||
<PackageReference Include="LibGit2Sharp" Version="0.26.2" />
|
||||
<PackageReference Include="Microsoft.AspNetCore" Version="2.2.0" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="2.2.0" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Identity" Version="2.2.0" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.2.0" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="2.2.0" />
|
||||
<PackageReference Include="Microsoft.CodeAnalysis.FxCopAnalyzers" Version="2.9.8">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="2.1.4" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="2.1.4" PrivateAssets="All" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="2.1.4" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.1.4">
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="2.2.6" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="2.2.6" PrivateAssets="All" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="2.2.6" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.2.6">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Mono.Posix.NETStandard" Version="1.0.0" />
|
||||
<PackageReference Include="Octokit" Version="0.32.0" />
|
||||
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="2.1.2" />
|
||||
<PackageReference Include="Serilog.Extensions.Logging" Version="2.0.2" />
|
||||
<PackageReference Include="Serilog.Sinks.Async" Version="1.3.0" />
|
||||
<PackageReference Include="Octokit" Version="0.36.0" />
|
||||
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="2.2.6" />
|
||||
<PackageReference Include="Serilog.Extensions.Logging" Version="3.0.1" />
|
||||
<PackageReference Include="Serilog.Sinks.Async" Version="1.4.0" />
|
||||
<PackageReference Include="Serilog.Sinks.RollingFile" Version="3.3.0" />
|
||||
<PackageReference Include="StyleCop.Analyzers" Version="1.1.1-beta.61">
|
||||
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="System.Diagnostics.PerformanceCounter" Version="4.5.0" />
|
||||
<PackageReference Include="System.DirectoryServices.AccountManagement" Version="4.5.0" />
|
||||
<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="5.3.0" />
|
||||
<PackageReference Include="Wangkanai.Detection.Browser" Version="2.0.0-beta9" />
|
||||
<PackageReference Include="Z.EntityFramework.Plus.EFCore" Version="1.8.10" />
|
||||
<PackageReference Include="System.Diagnostics.PerformanceCounter" Version="4.7.0" />
|
||||
<PackageReference Include="System.DirectoryServices.AccountManagement" Version="4.7.0" />
|
||||
<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="5.6.0" />
|
||||
<PackageReference Include="Wangkanai.Detection.Browser" Version="2.0.0" />
|
||||
<PackageReference Include="Z.EntityFramework.Plus.EFCore" Version="2.0.32" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
@@ -97,7 +104,6 @@
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Folder Include="Properties\" />
|
||||
<Folder Include="wwwroot\" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>netcoreapp2.1</TargetFramework>
|
||||
@@ -9,10 +9,10 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.AspNetCore.Http" Version="2.2.0" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Http" Version="2.2.2" />
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.9.0" />
|
||||
<PackageReference Include="MSTest.TestAdapter" Version="1.3.2" />
|
||||
<PackageReference Include="MSTest.TestFramework" Version="1.3.2" />
|
||||
<PackageReference Include="MSTest.TestAdapter" Version="2.0.0" />
|
||||
<PackageReference Include="MSTest.TestFramework" Version="2.0.0" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>netcoreapp2.1</TargetFramework>
|
||||
@@ -10,9 +10,9 @@
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.9.0" />
|
||||
<PackageReference Include="Moq" Version="4.10.0" />
|
||||
<PackageReference Include="MSTest.TestAdapter" Version="1.3.2" />
|
||||
<PackageReference Include="MSTest.TestFramework" Version="1.3.2" />
|
||||
<PackageReference Include="Moq" Version="4.13.1" />
|
||||
<PackageReference Include="MSTest.TestAdapter" Version="2.0.0" />
|
||||
<PackageReference Include="MSTest.TestFramework" Version="2.0.0" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
+4
-4
@@ -1,4 +1,4 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>netcoreapp2.1</TargetFramework>
|
||||
@@ -10,9 +10,9 @@
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.9.0" />
|
||||
<PackageReference Include="Moq" Version="4.10.0" />
|
||||
<PackageReference Include="MSTest.TestAdapter" Version="1.3.2" />
|
||||
<PackageReference Include="MSTest.TestFramework" Version="1.3.2" />
|
||||
<PackageReference Include="Moq" Version="4.13.1" />
|
||||
<PackageReference Include="MSTest.TestAdapter" Version="2.0.0" />
|
||||
<PackageReference Include="MSTest.TestFramework" Version="2.0.0" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
using System.Reflection;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
[assembly: AssemblyTitle("Tgstation.Server.Host.Service.Tests")]
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
[assembly: Guid("aa80a190-52e2-4be3-bfeb-1f148d9e9007")]
|
||||
|
||||
[assembly: AssemblyVersion("4.0.0.0")]
|
||||
[assembly: AssemblyFileVersion("4.0.0.0")]
|
||||
[assembly: AssemblyInformationalVersion("4.0.0.0")]
|
||||
@@ -34,30 +34,23 @@ namespace Tgstation.Server.Host.Service.Tests
|
||||
|
||||
var mockWatchdog = new Mock<IWatchdog>();
|
||||
var args = Array.Empty<string>();
|
||||
CancellationToken cancellationToken, originalToken;
|
||||
using(var cts = new CancellationTokenSource())
|
||||
{
|
||||
originalToken = cts.Token;
|
||||
cancellationToken = originalToken;
|
||||
}
|
||||
var cancelled = false;
|
||||
|
||||
mockWatchdog.Setup(x => x.RunAsync(false, args, It.IsAny<CancellationToken>())).Callback((bool x, string[] _, CancellationToken token) => token.Register(() => cancelled = true)).Returns(Task.CompletedTask).Verifiable();
|
||||
CancellationToken cancellationToken;
|
||||
mockWatchdog.Setup(x => x.RunAsync(false, args, It.IsAny<CancellationToken>())).Callback((bool x, string[] _, CancellationToken token) => cancellationToken = token).Returns(Task.CompletedTask).Verifiable();
|
||||
var mockWatchdogFactory = new Mock<IWatchdogFactory>();
|
||||
var mockLoggerFactory = new LoggerFactory();
|
||||
mockWatchdogFactory.Setup(x => x.CreateWatchdog(mockLoggerFactory)).Returns(mockWatchdog.Object).Verifiable();
|
||||
|
||||
using (var service = new ServerService(mockWatchdogFactory.Object, mockLoggerFactory, default))
|
||||
{
|
||||
Assert.IsFalse(cancelled);
|
||||
onStart.Invoke(service, new object[] { args });
|
||||
mockWatchdog.VerifyAll();
|
||||
|
||||
Assert.AreNotSame(cancellationToken, originalToken);
|
||||
Assert.IsFalse(cancellationToken.IsCancellationRequested);
|
||||
|
||||
onStop.Invoke(service, Array.Empty<object>());
|
||||
Assert.IsTrue(cancelled);
|
||||
Assert.IsTrue(cancellationToken.IsCancellationRequested);
|
||||
mockWatchdog.VerifyAll();
|
||||
}
|
||||
|
||||
mockWatchdogFactory.VerifyAll();
|
||||
}
|
||||
}
|
||||
|
||||
+24
-73
@@ -1,81 +1,32 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProjectGuid>{AA80A190-52E2-4BE3-BFEB-1F148D9E9007}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>Tgstation.Server.Host.Service.Tests</RootNamespace>
|
||||
<AssemblyName>Tgstation.Server.Host.Service.Tests</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.7.1</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
|
||||
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">15.0</VisualStudioVersion>
|
||||
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
|
||||
<ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages</ReferencePath>
|
||||
<IsCodedUITest>False</IsCodedUITest>
|
||||
<TestProjectType>UnitTest</TestProjectType>
|
||||
<TargetFramework>net471</TargetFramework>
|
||||
|
||||
<IsPackable>false</IsPackable>
|
||||
<LangVersion>latest</LangVersion>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<CodeAnalysisRuleSet />
|
||||
<NuGetPackageImportStamp>
|
||||
</NuGetPackageImportStamp>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
|
||||
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
|
||||
<WarningsAsErrors />
|
||||
<DocumentationFile></DocumentationFile>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Moq" Version="4.13.1" />
|
||||
<PackageReference Include="MSTest.TestAdapter" Version="2.0.0" />
|
||||
<PackageReference Include="MSTest.TestFramework" Version="2.0.0" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\src\Tgstation.Server.Host.Service\Tgstation.Server.Host.Service.csproj" />
|
||||
<ProjectReference Include="..\..\src\Tgstation.Server.Host.Watchdog\Tgstation.Server.Host.Watchdog.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Configuration" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Data.OracleClient" />
|
||||
<Reference Include="System.Drawing" />
|
||||
<Reference Include="System.Net" />
|
||||
<Reference Include="System.Numerics" />
|
||||
<Reference Include="System.ServiceProcess" />
|
||||
<Reference Include="System.Transactions" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="TestServerService.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\src\Tgstation.Server.Host.Service\Tgstation.Server.Host.Service.csproj">
|
||||
<Project>{29927416-3b78-49a7-a560-5ccaa638b6b4}</Project>
|
||||
<Name>Tgstation.Server.Host.Service</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\..\src\Tgstation.Server.Host.Watchdog\Tgstation.Server.Host.Watchdog.csproj">
|
||||
<Project>{5d2d682c-6bf0-439c-850b-6ab945bbeaea}</Project>
|
||||
<Name>Tgstation.Server.Host.Watchdog</Name>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.EventLog">
|
||||
<Version>2.1.1</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Moq">
|
||||
<Version>4.10.0</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="MSTest.TestAdapter">
|
||||
<Version>1.3.2</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="MSTest.TestFramework">
|
||||
<Version>1.3.2</Version>
|
||||
</PackageReference>
|
||||
</ItemGroup>
|
||||
<Import Project="$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets" Condition="Exists('$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets')" />
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
</Project>
|
||||
|
||||
</Project>
|
||||
|
||||
@@ -202,15 +202,25 @@ namespace Tgstation.Server.Host.Core.Tests
|
||||
|
||||
mockApplication.SetupGet(x => x.VersionPrefix).Returns("sumfuk").Verifiable();
|
||||
|
||||
|
||||
// This list is here for ease of debugging.
|
||||
var consolePlayback = new List<string>();
|
||||
|
||||
mockConsole.Setup(x => x.PressAnyKeyAsync(It.IsAny<CancellationToken>())).Returns(Task.CompletedTask).Verifiable();
|
||||
mockConsole.Setup(x => x.ReadLineAsync(It.IsAny<bool>(), It.IsAny<CancellationToken>())).Returns(() =>
|
||||
{
|
||||
if (inputPos == finalInputSequence.Count)
|
||||
Assert.Fail("Exhausted input sequence!");
|
||||
var res = finalInputSequence[inputPos++];
|
||||
consolePlayback.Add($"Input: {res}");
|
||||
return Task.FromResult(res);
|
||||
}).Verifiable();
|
||||
mockConsole.Setup(x => x.WriteAsync(It.IsAny<string>(), It.IsAny<bool>(), It.IsAny<CancellationToken>())).Returns(Task.CompletedTask).Verifiable();
|
||||
|
||||
mockConsole
|
||||
.Setup(x => x.WriteAsync(It.IsAny<string>(), It.IsAny<bool>(), It.IsAny<CancellationToken>()))
|
||||
.Callback<string, bool, CancellationToken>((message, error, token) => consolePlayback.Add($"Output: {message}"))
|
||||
.Returns(Task.CompletedTask)
|
||||
.Verifiable();
|
||||
|
||||
Assert.IsFalse(await wizard.CheckRunWizard(default).ConfigureAwait(false));
|
||||
//first real run
|
||||
|
||||
@@ -10,9 +10,9 @@
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.9.0" />
|
||||
<PackageReference Include="Moq" Version="4.10.0" />
|
||||
<PackageReference Include="MSTest.TestAdapter" Version="1.3.2" />
|
||||
<PackageReference Include="MSTest.TestFramework" Version="1.3.2" />
|
||||
<PackageReference Include="Moq" Version="4.13.1" />
|
||||
<PackageReference Include="MSTest.TestAdapter" Version="2.0.0" />
|
||||
<PackageReference Include="MSTest.TestFramework" Version="2.0.0" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
+4
-4
@@ -1,4 +1,4 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>netcoreapp2.1</TargetFramework>
|
||||
@@ -16,9 +16,9 @@
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.9.0" />
|
||||
<PackageReference Include="Moq" Version="4.10.0" />
|
||||
<PackageReference Include="MSTest.TestAdapter" Version="1.3.2" />
|
||||
<PackageReference Include="MSTest.TestFramework" Version="1.3.2" />
|
||||
<PackageReference Include="Moq" Version="4.13.1" />
|
||||
<PackageReference Include="MSTest.TestAdapter" Version="2.0.0" />
|
||||
<PackageReference Include="MSTest.TestFramework" Version="2.0.0" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -117,7 +117,7 @@ namespace Tgstation.Server.Tests
|
||||
}
|
||||
catch (ServiceUnavailableException)
|
||||
{
|
||||
//migrating, to be expected
|
||||
// migrating, to be expected
|
||||
if (DateTimeOffset.Now > giveUpAt)
|
||||
throw;
|
||||
await Task.Delay(TimeSpan.FromSeconds(1), cancellationToken);
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>netcoreapp2.1</TargetFramework>
|
||||
@@ -10,8 +10,8 @@
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.9.0" />
|
||||
<PackageReference Include="MSTest.TestAdapter" Version="1.3.2" />
|
||||
<PackageReference Include="MSTest.TestFramework" Version="1.3.2" />
|
||||
<PackageReference Include="MSTest.TestAdapter" Version="2.0.0" />
|
||||
<PackageReference Include="MSTest.TestFramework" Version="2.0.0" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio 15
|
||||
VisualStudioVersion = 15.0.27130.2036
|
||||
# Visual Studio Version 16
|
||||
VisualStudioVersion = 16.0.29613.14
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{DA32568D-1D8D-4A4C-9943-BFD3CE796B3F}"
|
||||
ProjectSection(SolutionItems) = preProject
|
||||
@@ -25,19 +25,21 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "build", "build", "{6FF654E6
|
||||
build\BuildDox.ps1 = build\BuildDox.ps1
|
||||
build\Dockerfile = build\Dockerfile
|
||||
build\install_byond.sh = build\install_byond.sh
|
||||
build\InstallCodeCoverage.ps1 = build\InstallCodeCoverage.ps1
|
||||
build\prep_deployment.ps1 = build\prep_deployment.ps1
|
||||
build\stylecop.json = build\stylecop.json
|
||||
build\test_core.sh = build\test_core.sh
|
||||
build\tgs.docker.sh = build\tgs.docker.sh
|
||||
build\tgs.ico = build\tgs.ico
|
||||
build\UploadCoverage.ps1 = build\UploadCoverage.ps1
|
||||
build\Version.props = build\Version.props
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tgstation.Server.Host", "src\Tgstation.Server.Host\Tgstation.Server.Host.csproj", "{2B69AD6D-2B5A-4023-8EAD-0BD1B18E028A}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tgstation.Server.Api", "src\Tgstation.Server.Api\Tgstation.Server.Api.csproj", "{8B4A208D-A48A-4A5D-8B94-E2661138865D}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tgstation.Server.Host.Service", "src\Tgstation.Server.Host.Service\Tgstation.Server.Host.Service.csproj", "{29927416-3B78-49A7-A560-5CCAA638B6B4}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tgstation.Server.Host.Service", "src\Tgstation.Server.Host.Service\Tgstation.Server.Host.Service.csproj", "{29927416-3B78-49A7-A560-5CCAA638B6B4}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tgstation.Server.Client", "src\Tgstation.Server.Client\Tgstation.Server.Client.csproj", "{E0AC911F-7675-4A91-9499-D8A2E2390AAD}"
|
||||
EndProject
|
||||
@@ -54,7 +56,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tgstation.Server.Host.Watch
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tgstation.Server.Host.Watchdog.Tests", "tests\Tgstation.Server.Host.Watchdog.Tests\Tgstation.Server.Host.Watchdog.Tests.csproj", "{7500F776-4384-4B5F-A8D8-22461CAD108B}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tgstation.Server.Host.Service.Tests", "tests\Tgstation.Server.Host.Service.Tests\Tgstation.Server.Host.Service.Tests.csproj", "{AA80A190-52E2-4BE3-BFEB-1F148D9E9007}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tgstation.Server.Host.Service.Tests", "tests\Tgstation.Server.Host.Service.Tests\Tgstation.Server.Host.Service.Tests.csproj", "{AA80A190-52E2-4BE3-BFEB-1F148D9E9007}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DMAPI", "DMAPI", "{7E4E7CF6-A48D-410E-8191-C49C6B5AB9CC}"
|
||||
EndProject
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="octokit" Version="0.32.0" />
|
||||
<PackageReference Include="octokit" Version="0.36.0" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
Reference in New Issue
Block a user