Skip to content
This repository was archived by the owner on Sep 3, 2024. It is now read-only.

Commit fb813fc

Browse files
Merge branch 'docker'
2 parents eabb74c + dc290c6 commit fb813fc

12 files changed

Lines changed: 120 additions & 74 deletions

File tree

build.cake

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,9 @@ Task("RunTests")
3636
{
3737
var testProjects = new string[] { "SqlStreamStore.HAL.Tests" };
3838

39-
foreach(var testProject in testProjects) {
40-
var projectDir = srcDir + Directory(testProject);
41-
StartProcess("dotnet", new ProcessSettings {
42-
Arguments = $"xunit -quiet -parallel all -configuration {configuration} -nobuild",
43-
WorkingDirectory = projectDir
44-
});
45-
}
39+
Parallel.Invoke(new ParallelOptions {
40+
41+
}, Array.ConvertAll(testProjects, RunTest));
4642
});
4743

4844
Task("Publish")
@@ -74,4 +70,9 @@ Task("Default")
7470
.IsDependentOn("RunTests")
7571
.IsDependentOn("NuGetPack");
7672

77-
RunTarget(target);
73+
RunTarget(target);
74+
75+
Action RunTest(string testProject) => () => DotNetCoreTest(srcDir + Directory(testProject), new DotNetCoreTestSettings {
76+
NoBuild = true,
77+
NoRestore = true
78+
});

build.ps1

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ $proj = @"
5555
##########################
5656
# Install .NET Core CLI
5757
##########################
58-
$dotNetCoreVersion = "2.0.0"
58+
$dotNetCoreVersion = "2.1.301"
5959
$dotNetInstallerUri = "https://dot.net/dotnet-install.ps1"
6060
Function Remove-PathVariable([string]$variableToRemove)
6161
{

build.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ fi
2121
###########################################################################
2222
# Install .NET Core CLI
2323
###########################################################################
24-
curl -sSL https://dot.net/dotnet-install.sh | bash /dev/stdin --channel current --version 2.0.0 --install-dir $DOTNET_INSTALL_PATH
24+
curl -sSL https://dot.net/dotnet-install.sh | bash /dev/stdin --channel current --version 2.1.301 --install-dir $DOTNET_INSTALL_PATH
2525

2626
###########################################################################
2727
# INSTALL CAKE

global.json

Lines changed: 0 additions & 5 deletions
This file was deleted.

src/Dockerfile

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
FROM microsoft/dotnet:2.1.301-sdk-alpine3.7 AS build
2+
WORKDIR /src
3+
4+
# copy csproj and restore as distinct layers
5+
COPY SqlStreamStore.HAL/*.csproj ./SqlStreamStore.HAL/
6+
COPY SqlStreamStore.HAL.DevServer/*.csproj ./SqlStreamStore.HAL.DevServer/
7+
8+
WORKDIR /src/SqlStreamStore.HAL.DevServer
9+
RUN dotnet restore
10+
11+
# copy everything else and build app
12+
WORKDIR /src
13+
COPY SqlStreamStore.HAL/. ./SqlStreamStore.HAL/
14+
COPY SqlStreamStore.HAL.DevServer/. ./SqlStreamStore.HAL.DevServer/
15+
WORKDIR /src/SqlStreamStore.HAL.DevServer
16+
RUN dotnet publish -c Release -o /build
17+
18+
FROM microsoft/dotnet:2.1.1-aspnetcore-runtime-alpine3.7 AS runtime
19+
20+
WORKDIR /app
21+
COPY --from=build /build ./
22+
23+
ENTRYPOINT ["dotnet", "SqlStreamStore.HAL.DevServer.dll"]

src/SqlStreamStore.HAL.DevServer/DevServerStartup.cs

Lines changed: 11 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public void Configure(IApplicationBuilder app) => app
3535
.UseResponseCompression()
3636
.Use(VaryAccept)
3737
.Use(CatchAndDisplayErrors)
38-
.Use(SqlStreamStreamBrowserJavascript)
38+
.Use(SqlStreamStreamBrowserStatic)
3939
.Use(SqlStreamStreamBrowserHtml)
4040
.UseSqlStreamStoreHal(_streamStore);
4141

@@ -55,34 +55,25 @@ public void Configure(IApplicationBuilder app) => app
5555
{
5656
Task Vary(object state)
5757
{
58-
var response = (HttpResponse)state;
58+
var response = (HttpResponse) state;
5959

6060
response.Headers.AppendCommaSeparatedValues("Vary", "Accept");
6161

6262
return Task.CompletedTask;
6363
}
64-
64+
6565
context.Response.OnStarting(Vary, context.Response);
66-
66+
6767
return next();
6868
};
6969

70-
private MidFunc SqlStreamStreamBrowserJavascript => (context, next) =>
71-
{
72-
if(context.Request.Path.Value?.EndsWith(".js") ?? false)
73-
{
74-
var segments = context.Request.Path.ToUriComponent().Split('/');
75-
if(segments.Length > 2)
76-
{
77-
return RedirectToPathBase(context, $"/{segments.Last()}");
78-
}
79-
80-
return ForwardToClientDevServer(
70+
private MidFunc SqlStreamStreamBrowserStatic => (context, next)
71+
=> context.Request.Path.StartsWithSegments(new PathString("/static"))
72+
|| context.Request.Path.StartsWithSegments(new PathString("/sockjs-node"))
73+
? ForwardToClientDevServer(
8174
context,
82-
context.Request.PathBase + context.Request.Path);
83-
}
84-
return next();
85-
};
75+
context.Request.Path)
76+
: next();
8677

8778
private MidFunc SqlStreamStreamBrowserHtml => (context, next)
8879
=> GetAcceptHeaders(context.Request)
@@ -100,7 +91,7 @@ private static string[] GetAcceptHeaders(HttpRequest contextRequest)
10091
private Task RedirectToPathBase(HttpContext context, PathString path)
10192
{
10293
context.Response.Redirect(context.Request.PathBase + path);
103-
94+
10495
return Task.CompletedTask;
10596
}
10697

src/SqlStreamStore.HAL.DevServer/Program.cs

Lines changed: 62 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -5,42 +5,77 @@
55
using System.Threading;
66
using System.Threading.Tasks;
77
using Microsoft.AspNetCore.Hosting;
8+
using Microsoft.Extensions.Configuration;
9+
using Serilog;
810
using SqlStreamStore.Streams;
911

10-
internal static class Program
12+
internal class Program : IDisposable
1113
{
1214
private static readonly Random s_random = new Random();
13-
private const int DefaultPort = 8001;
15+
private readonly CancellationTokenSource _cts;
16+
private readonly InMemoryStreamStore _streamStore;
17+
private readonly IWebHost _host;
18+
private readonly IConfigurationRoot _configuration;
19+
20+
private bool Interactive => _configuration.GetValue<bool>("interactive");
1421

1522
public static async Task<int> Main(string[] args)
1623
{
17-
if(!int.TryParse(args.FirstOrDefault(), out var port))
24+
Log.Logger = new LoggerConfiguration()
25+
.MinimumLevel.Debug()
26+
.Enrich.FromLogContext()
27+
.WriteTo.Console()
28+
.CreateLogger();
29+
30+
using(var program = new Program(args))
1831
{
19-
port = DefaultPort;
32+
return await program.Run();
2033
}
34+
}
2135

22-
var url = new UriBuilder { Port = port }.Uri.ToString();
23-
24-
using(var cts = new CancellationTokenSource())
25-
using(var streamStore = new InMemoryStreamStore())
26-
using(var host = new WebHostBuilder()
27-
.UseUrls(url)
36+
private Program(string[] args)
37+
{
38+
_cts = new CancellationTokenSource();
39+
_streamStore = new InMemoryStreamStore();
40+
_host = new WebHostBuilder()
2841
.UseKestrel()
29-
.UseStartup(new DevServerStartup(streamStore))
30-
.Build())
31-
{
42+
.UseStartup(new DevServerStartup(_streamStore))
43+
.UseSerilog()
44+
.Build();
45+
_configuration = new ConfigurationBuilder()
46+
.AddEnvironmentVariables()
47+
.AddCommandLine(args)
48+
.Build();
49+
}
3250

33-
var serverTask = host.RunAsync(cts.Token);
51+
private async Task<int> Run()
52+
{
53+
try
54+
{
55+
var serverTask = _host.RunAsync(_cts.Token);
3456

35-
DisplayMenu(streamStore, url);
57+
if(Interactive)
58+
{
59+
Log.Warning("Running interactively.");
60+
DisplayMenu(_streamStore);
61+
}
3662

3763
await serverTask;
38-
}
3964

40-
return 0;
65+
return 0;
66+
}
67+
catch(Exception ex)
68+
{
69+
Log.Fatal(ex, "Host terminated unexpectedly.");
70+
return 1;
71+
}
72+
finally
73+
{
74+
Log.CloseAndFlush();
75+
}
4176
}
4277

43-
private static void DisplayMenu(IStreamStore streamStore, string url)
78+
private static void DisplayMenu(IStreamStore streamStore, string url = null)
4479
{
4580
while(true)
4681
{
@@ -79,14 +114,14 @@ private static void Write(IStreamStore streamStore, string url, int messageCount
79114

80115
Task.Run(() => Task.WhenAll(
81116
from streamId in streams
82-
select streamStore.AppendToStream(streamId,
117+
select streamStore.AppendToStream(
118+
streamId,
83119
ExpectedVersion.NoStream,
84120
GenerateMessages(messageCount))));
85121
}
86122

87123
private static NewStreamMessage[] GenerateMessages(int messageCount)
88-
{
89-
return Enumerable.Range(0, messageCount)
124+
=> Enumerable.Range(0, messageCount)
90125
.Select(_ => new NewStreamMessage(
91126
Guid.NewGuid(),
92127
"test",
@@ -97,6 +132,12 @@ private static NewStreamMessage[] GenerateMessages(int messageCount)
97132
} ] }}",
98133
"{}"))
99134
.ToArray();
135+
136+
public void Dispose()
137+
{
138+
_host?.Dispose();
139+
_streamStore?.Dispose();
140+
_cts?.Dispose();
100141
}
101142
}
102143
}

src/SqlStreamStore.HAL.DevServer/SqlStreamStore.HAL.DevServer.csproj

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,17 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22
<PropertyGroup>
33
<OutputType>Exe</OutputType>
4-
<TargetFramework>netcoreapp2.0</TargetFramework>
4+
<TargetFramework>netcoreapp2.1</TargetFramework>
55
<LangVersion>7.1</LangVersion>
66
</PropertyGroup>
77
<ItemGroup>
8-
<PackageReference Include="Microsoft.AspNetCore.Hosting" Version="2.0.2" />
9-
<PackageReference Include="Microsoft.AspNetCore.Server.Kestrel" Version="2.0.2" />
10-
<PackageReference Include="Microsoft.AspNetCore.ResponseCompression" Version="2.0.2" />
8+
<PackageReference Include="Microsoft.AspNetCore.Hosting" Version="2.1.1" />
9+
<PackageReference Include="Microsoft.AspNetCore.Server.Kestrel" Version="2.1.1" />
10+
<PackageReference Include="Microsoft.AspNetCore.ResponseCompression" Version="2.1.1" />
11+
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="2.1.1" />
12+
<PackageReference Include="Microsoft.Extensions.Configuration.CommandLine" Version="2.1.1" />
13+
<PackageReference Include="Serilog.AspNetCore" Version="2.1.1" />
14+
<PackageReference Include="Serilog.Sinks.Console" Version="3.1.1" />
1115
</ItemGroup>
1216
<ItemGroup>
1317
<ProjectReference Include="..\SqlStreamStore.HAL\SqlStreamStore.HAL.csproj" />

src/SqlStreamStore.HAL.Tests/SqlStreamStore.HAL.Tests.csproj

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22
<PropertyGroup>
3-
<TargetFrameworks>netcoreapp2.0</TargetFrameworks>
3+
<TargetFrameworks>netcoreapp2.1</TargetFrameworks>
44
<AssemblyName>SqlStreamStore.HAL.Tests</AssemblyName>
55
<PackageId>SqlStreamStore.HAL.Tests</PackageId>
66
<GenerateAssemblyTitleAttribute>false</GenerateAssemblyTitleAttribute>
@@ -18,12 +18,11 @@
1818
<ProjectReference Include="..\SqlStreamStore.HAL\SqlStreamStore.HAL.csproj" />
1919
</ItemGroup>
2020
<ItemGroup>
21-
<PackageReference Include="Microsoft.AspNetCore.TestHost" Version="2.0.2" />
22-
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.3.0" />
23-
<PackageReference Include="Shouldly" Version="2.8.2" />
21+
<PackageReference Include="Microsoft.AspNetCore.TestHost" Version="2.1.1" />
22+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.7.2" />
23+
<PackageReference Include="Shouldly" Version="3.0.0" />
2424
<PackageReference Include="xunit" Version="2.3.1" />
2525
<PackageReference Include="xunit.runner.visualstudio" Version="2.3.1" />
2626
<DotNetCliToolReference Include="dotnet-xunit" Version="2.3.1" />
27-
<DotNetCliToolReference Include="Microsoft.DotNet.Watcher.Tools" Version="2.0.0" />
2827
</ItemGroup>
2928
</Project>

src/SqlStreamStore.HAL/Constants.cs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
11
namespace SqlStreamStore.HAL
22
{
3-
using System.Collections.Generic;
4-
using System.Collections.ObjectModel;
5-
63
internal static class Constants
74
{
85
public static class Headers

0 commit comments

Comments
 (0)