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

Commit 944b42d

Browse files
Merge pull request #29 from thefringeninja/version-suite
Display Version Information on Index Resource
2 parents 4b92e83 + 8db7741 commit 944b42d

6 files changed

Lines changed: 106 additions & 28 deletions

File tree

Dockerfile

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
FROM microsoft/dotnet:2.1.403-sdk-alpine3.7 AS build
22
ARG TRAVIS_BUILD_NUMBER
3+
ARG TRAVIS_PULL_REQUEST_SHA
4+
ARG TRAVIS_COMMIT
5+
ARG TRAVIS_PULL_REQUEST
6+
ARG TRAVIS_BRANCH
37
ARG MYGET_API_KEY
48
WORKDIR /src
59

@@ -23,7 +27,13 @@ COPY ./build .
2327

2428
WORKDIR /
2529

26-
RUN TRAVIS_BUILD_NUMBER=$TRAVIS_BUILD_NUMBER MYGET_API_KEY=$MYGET_API_KEY dotnet run --project build/build.csproj
30+
RUN TRAVIS_BUILD_NUMBER=$TRAVIS_BUILD_NUMBER \
31+
MYGET_API_KEY=$MYGET_API_KEY \
32+
TRAVIS_PULL_REQUEST_SHA=$TRAVIS_PULL_REQUEST_SHA \
33+
TRAVIS_COMMIT=$TRAVIS_COMMIT \
34+
TRAVIS_PULL_REQUEST=$TRAVIS_PULL_REQUEST \
35+
TRAVIS_BRANCH=$TRAVIS_BRANCH \
36+
dotnet run --project build/build.csproj
2737

2838
FROM build as publish
2939

build.sh

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@ DOCKERTAG=${TRAVIS_TAG:-latest}
44
docker build \
55
--build-arg TRAVIS_BUILD_NUMBER=$TRAVIS_BUILD_NUMBER \
66
--build-arg MYGET_API_KEY=$MYGET_API_KEY \
7+
--build-arg TRAVIS_PULL_REQUEST_SHA=$TRAVIS_PULL_REQUEST_SHA \
8+
--build-arg TRAVIS_COMMIT=$TRAVIS_COMMIT \
9+
--build-arg TRAVIS_PULL_REQUEST=$TRAVIS_PULL_REQUEST \
10+
--build-arg TRAVIS_BRANCH=$TRAVIS_BRANCH \
711
--tag sql-stream-store-server:${DOCKERTAG} \
812
. && \
913
docker images --filter=reference="sql-stream-store-server:${DOCKERTAG}"

build/Program.cs

Lines changed: 49 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,10 @@ static class Program
1515

1616
public static void Main(string[] args)
1717
{
18-
var buildNumber = Environment.GetEnvironmentVariable("TRAVIS_BUILD_NUMBER") ?? "0";
19-
var versionSuffix = "build" + buildNumber.PadLeft(5, '0');
18+
var buildNumber = GetBuildNumber();
19+
var branch = GetBranch();
20+
var commitHash = GetCommitHash();
21+
var buildMetadata = $"build.{buildNumber}.{branch}.{commitHash}";
2022
var apiKey = Environment.GetEnvironmentVariable("MYGET_API_KEY");
2123

2224
Target(Clean, () =>
@@ -27,7 +29,11 @@ public static void Main(string[] args)
2729
}
2830
});
2931

30-
Target(Build, () => Run("dotnet", "build src/SqlStreamStore.HAL.sln -c Release"));
32+
Target(
33+
Build,
34+
() => Run(
35+
"dotnet",
36+
$"build src/SqlStreamStore.HAL.sln -c Release /p:BuildMetadata={buildMetadata}"));
3137

3238
Target(
3339
RunTests,
@@ -38,30 +44,49 @@ public static void Main(string[] args)
3844

3945
Target(
4046
Pack,
41-
DependsOn(Build),
42-
() => Run("dotnet",
43-
$"pack src/SqlStreamStore.HAL -c Release -o ../../{ArtifactsDir} --no-build --version-suffix {versionSuffix}"));
44-
45-
Target(Publish, DependsOn(Pack), () =>
46-
{
47-
var packagesToPush = Directory.GetFiles(ArtifactsDir, "*.nupkg", SearchOption.TopDirectoryOnly);
48-
Console.WriteLine($"Found packages to publish: {string.Join("; ", packagesToPush)}");
49-
50-
if (string.IsNullOrWhiteSpace(apiKey))
51-
{
52-
Console.WriteLine("MyGet API key not available. Packages will not be pushed.");
53-
return;
54-
}
47+
DependsOn(Build),
48+
() => Run(
49+
"dotnet",
50+
$"pack src/SqlStreamStore.HAL -c Release -o ../../{ArtifactsDir} --no-build"));
5551

56-
foreach (var packageToPush in packagesToPush)
57-
{
58-
Run("dotnet",
59-
$"nuget push {packageToPush} -s https://www.myget.org/F/sqlstreamstore/api/v3/index.json -k {apiKey}");
60-
}
61-
});
52+
Target(
53+
Publish,
54+
DependsOn(Pack),
55+
() => {
56+
var packagesToPush = Directory.GetFiles(ArtifactsDir, "*.nupkg", SearchOption.TopDirectoryOnly);
57+
Console.WriteLine($"Found packages to publish: {string.Join("; ", packagesToPush)}");
58+
59+
if (string.IsNullOrWhiteSpace(apiKey))
60+
{
61+
Console.WriteLine("MyGet API key not available. Packages will not be pushed.");
62+
return;
63+
}
64+
65+
foreach (var packageToPush in packagesToPush)
66+
{
67+
Run(
68+
"dotnet",
69+
$"nuget push {packageToPush} -s https://www.myget.org/F/sqlstreamstore/api/v3/index.json -k {apiKey}");
70+
}
71+
});
6272

6373
Target("default", DependsOn(Clean, RunTests, Publish));
6474

6575
RunTargets(args);
6676
}
67-
}
77+
78+
private static string GetBranch()
79+
=> (Environment.GetEnvironmentVariable("TRAVIS_PULL_REQUEST")?.ToLower() == "false"
80+
? null
81+
: $"pr-{Environment.GetEnvironmentVariable("TRAVIS_PULL_REQUEST")}")
82+
?? Environment.GetEnvironmentVariable("TRAVIS_BRANCH")
83+
?? "none";
84+
85+
private static string GetCommitHash()
86+
=> Environment.GetEnvironmentVariable("TRAVIS_PULL_REQUEST_SHA")
87+
?? Environment.GetEnvironmentVariable("TRAVIS_COMMIT")
88+
?? "none";
89+
90+
private static string GetBuildNumber()
91+
=> (Environment.GetEnvironmentVariable("TRAVIS_BUILD_NUMBER") ?? "0").PadLeft(5, '0');
92+
}

src/Directory.Build.props

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<Project>
33
<PropertyGroup>
4-
<VersionPrefix>1.0.0-rc2</VersionPrefix>
4+
<VersionPrefix>1.0.0</VersionPrefix>
5+
<VersionSuffix>rc2</VersionSuffix>
6+
<InformationalVersion>$(VersionPrefix)-$(VersionSuffix)+$(BuildMetadata)</InformationalVersion>
57
<Authors>João P. Bragança</Authors>
68
<PackageProjectUrl>https://github.com/SqlStreamStore/SqlStreamStore.HAL</PackageProjectUrl>
79
<PackageLicenseUrl>https://github.com/SqlStreamStore/SqlStreamStore.HAL/blob/master/LICENSE</PackageLicenseUrl>
Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,49 @@
11
namespace SqlStreamStore.HAL.Index
22
{
3+
using System;
4+
using System.Reflection;
35
using Halcyon.HAL;
6+
using Newtonsoft.Json;
7+
using Newtonsoft.Json.Linq;
48

59
internal class IndexResource : IResource
610
{
711
public SchemaSet Schema { get; }
812

9-
public Response Get() => new HalJsonResponse(new HALResponse(null)
13+
private readonly JObject _data;
14+
15+
public IndexResource(IStreamStore streamStore)
16+
{
17+
var streamStoreType = streamStore.GetType();
18+
var streamStoreTypeName = streamStoreType.Name;
19+
_data = JObject.FromObject(new
20+
{
21+
provider = streamStoreTypeName.Substring(0, streamStoreTypeName.Length - "StreamStore".Length),
22+
versions = new
23+
{
24+
streamStore = GetVersion(streamStoreType),
25+
server = GetVersion(typeof(IndexResource))
26+
}
27+
});
28+
}
29+
30+
private static string GetVersion(Type type)
31+
=> type.Assembly
32+
.GetCustomAttribute<AssemblyInformationalVersionAttribute>()
33+
?.InformationalVersion
34+
?? type.Assembly
35+
.GetCustomAttribute<AssemblyVersionAttribute>()
36+
?.Version
37+
?? "unknown";
38+
39+
public Response Get() => new HalJsonResponse(new HALResponse(_data)
1040
.AddLinks(
1141
Links
1242
.RootedAt(string.Empty)
1343
.Index().Self()
1444
.Find()
1545
.Add(Constants.Relations.Feed, Constants.Streams.All)));
46+
47+
public override string ToString() => _data.ToString(Formatting.None);
1648
}
1749
}

src/SqlStreamStore.HAL/SqlStreamStoreHalMiddleware.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
using SqlStreamStore.HAL.AllStreamMessage;
1313
using SqlStreamStore.HAL.Docs;
1414
using SqlStreamStore.HAL.Index;
15+
using SqlStreamStore.HAL.Logging;
1516
using SqlStreamStore.HAL.StreamMessage;
1617
using SqlStreamStore.HAL.StreamMetadata;
1718
using SqlStreamStore.HAL.Streams;
@@ -23,6 +24,8 @@
2324

2425
public static class SqlStreamStoreHalMiddleware
2526
{
27+
private static ILog s_Log = LogProvider.GetLogger(typeof(SqlStreamStoreHalMiddleware));
28+
2629
private static MidFunc CaseSensitiveQueryStrings => (context, next) =>
2730
{
2831
if(context.Request.QueryString != QueryString.Empty)
@@ -74,13 +77,15 @@ public static IApplicationBuilder UseSqlStreamStoreHal(
7477

7578
options = options ?? new SqlStreamStoreMiddlewareOptions();
7679

77-
var index = new IndexResource();
80+
var index = new IndexResource(streamStore);
7881
var allStream = new AllStreamResource(streamStore, options.UseCanonicalUrls);
7982
var allStreamMessages = new AllStreamMessageResource(streamStore);
8083
var streams = new StreamResource(streamStore);
8184
var streamMetadata = new StreamMetadataResource(streamStore);
8285
var streamMessages = new StreamMessageResource(streamStore);
8386

87+
s_Log.Info(index.ToString);
88+
8489
return builder
8590
.UseExceptionHandling()
8691
.Use(CaseSensitiveQueryStrings)

0 commit comments

Comments
 (0)