Repository navigation
Expand file tree
/
Copy pathDirectory.Build.props
More file actions
142 lines (125 loc) · 7.61 KB
/
Copy pathDirectory.Build.props
File metadata and controls
142 lines (125 loc) · 7.61 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
<Project>
<!-- Common properties for all projects -->
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<LangVersion>14.0</LangVersion>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<AnalysisLevel>latest-all</AnalysisLevel>
<EnforceCodeStyleInBuild>true</EnforceCodeStyleInBuild>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
<!--
NuGet audit: every package in the graph, direct and transitive, with an advisory of any severity
(NU1901-NU1904) fails the restore through TreatWarningsAsErrors. No NuGet warning is suppressed;
an advisory without a patched version would get one NuGetAuditSuppress item with its link and reason.
CA-level conventions live in .editorconfig, each with its reason.
-->
<NuGetAudit>true</NuGetAudit>
<NuGetAuditMode>all</NuGetAuditMode>
<NuGetAuditLevel>low</NuGetAuditLevel>
</PropertyGroup>
<!-- Centralized build output paths -->
<PropertyGroup>
<!-- Define the artifacts root directory -->
<ArtifactsPath>$(MSBuildThisFileDirectory)artifacts\</ArtifactsPath>
<!-- Redirect intermediate output (obj) -->
<BaseIntermediateOutputPath>$(ArtifactsPath)obj\$(MSBuildProjectName)\</BaseIntermediateOutputPath>
<IntermediateOutputPath>$(BaseIntermediateOutputPath)$(Configuration)\</IntermediateOutputPath>
<!-- Redirect final output (bin) -->
<BaseOutputPath>$(ArtifactsPath)bin\$(MSBuildProjectName)\</BaseOutputPath>
<OutputPath>$(BaseOutputPath)$(Configuration)\</OutputPath>
<!-- Redirect package output -->
<PackageOutputPath>$(ArtifactsPath)pkg\</PackageOutputPath>
<!-- GeneratePackageOnBuild set below, conditional on IsPackable -->
<!-- Redirect publish output -->
<PublishDir>$(ArtifactsPath)pub\$(MSBuildProjectName)\$(Configuration)\</PublishDir>
</PropertyGroup>
<!-- What belongs on nuget.org?
A project is packable as long as it is something someone can REFERENCE. That is
the default, and it is right: libraries, plugins and the dotnet tool all ship through
NuGet - plugins explicitly too: `surgewave plugins install` loads a plugin with
the `from-nuget` option from a configured feed.
Exactly one category drops out: HOSTS. An Exe or Web SDK project that is started and
not referenced cannot be consumed - a package of it would be an ID that
nobody can meaningfully install. These projects set `IsPackable=false` and are
shipped through scripts/publish.ps1 and the container image: Broker.App, Control,
Gateway, Marketplace, Connect.Worker, Schema.Registry.App.
(Broker used to be the documented exception - an Exe and packable nonetheless, because the
engine logic lived in the Exe project and Runtime/Hosting had to reference it. Since the
engine/host split Kuestenlogik.Surgewave.Broker is a normal library and Broker.App
the host; the exception no longer exists.)
So when creating a new project the only question is: host or not? -->
<!--
XML documentation for the shipped libraries under src/ (API reference). Tests, benchmarks and samples
generate none: IsPackable / IsTestProject are only set in the project file, after this file is evaluated,
so the condition goes by location.
CS1591 / CS1573 stay off for now: 8 898 public members have no doc comment and 58 doc comments lack a
<param> tag; the documented members ship their comments. Tracked for removal in #185.
-->
<PropertyGroup Condition="$(MSBuildProjectDirectory.StartsWith('$(MSBuildThisFileDirectory)src'))">
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<NoWarn>$(NoWarn);CS1591;CS1573</NoWarn>
</PropertyGroup>
<!-- Common metadata for library projects.
Authors/Company use ASCII spelling for NuGet metadata compatibility;
human-facing copyright keeps the umlaut. -->
<PropertyGroup Condition="'$(IsPackable)' != 'false'">
<Authors>Kuestenlogik</Authors>
<Company>Kuestenlogik</Company>
<Copyright>Copyright (c) 2026 Küstenlogik</Copyright>
<PackageTags>streaming, kafka, message-broker, grpc, dotnet, csharp, high-performance</PackageTags>
<RepositoryType>git</RepositoryType>
<RepositoryUrl>https://github.com/Kuestenlogik/Surgewave</RepositoryUrl>
<PackageProjectUrl>https://surgewave.io</PackageProjectUrl>
<PackageLicenseExpression>Apache-2.0</PackageLicenseExpression>
<PackageIcon>icon.png</PackageIcon>
<PackageReadmeFile>README.md</PackageReadmeFile>
</PropertyGroup>
<!-- Version information. <Version> is the floor for builds without a tag (local +
CI without a tag); the release pipeline overrides it with -p:Version=$V from the
Git tag. Floor = last released + patch + "-dev" (so after v0.5.0
0.5.1-dev), raised after every release by
.github/workflows/post-release-floor-bump.yml.
Why the NEXT patch version and not the one just released: under
SemVer 0.5.0-dev sorts BELOW 0.5.0. A main build after the tag would
thereby call itself older than the release it contains. 0.5.1-dev
sorts in between - above the last release, below the next one -
and stays at Major.Minor 0.5, which the VersionCompatibilityChecker
needs: it rejects a minor mismatch, but a dev build should still be
allowed to mix into a 0.5 cluster. Deliberately applies to
ALL projects (including IsPackable=false), so that exe banners and
rolling-upgrade checks carry the same version. -->
<PropertyGroup>
<Version>0.6.0-dev</Version>
<!-- AssemblyVersion + FileVersion follow $(Version), so that the
release workflow bumps all three in sync with -p:Version=$V.
MSBuild pads to four parts (0.1.6 -> 0.1.6.0).
The SemVer prerelease suffix (e.g. "-ci.37.abc" from ci.yml) is
stripped, because AssemblyVersionAttribute strictly accepts only
major.minor.build.revision. -->
<AssemblyVersion>$([System.Text.RegularExpressions.Regex]::Replace($(Version), '-.*$', ''))</AssemblyVersion>
<FileVersion>$([System.Text.RegularExpressions.Regex]::Replace($(Version), '-.*$', ''))</FileVersion>
<SourceRevisionId>$(SourceRevisionId)</SourceRevisionId>
<IncludeSourceRevisionInInformationalVersion>true</IncludeSourceRevisionInInformationalVersion>
</PropertyGroup>
<!-- DebugType=embedded folds the PDB into the assembly itself, so
SourceLink data ships inside every .dll inside the .nupkg — no
separate .snupkg required. Avoids the nuget.org symbol-server
race where a back-to-back .snupkg push 404s while the parent
.nupkg is still in validation. Consumer-side source-stepping is
identical (debuggers read the embedded PDB transparently). -->
<PropertyGroup>
<PublishRepositoryUrl>true</PublishRepositoryUrl>
<EmbedUntrackedSources>true</EmbedUntrackedSources>
<DebugType>embedded</DebugType>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.SourceLink.GitHub" PrivateAssets="all" />
</ItemGroup>
<!-- Include icon and README for NuGet packages -->
<ItemGroup Condition="'$(IsPackable)' != 'false'">
<None Include="$(MSBuildThisFileDirectory)icon.png" Pack="true" PackagePath="\" Link="icon.png" Visible="false" Condition="Exists('$(MSBuildThisFileDirectory)icon.png')" />
<None Include="$(MSBuildThisFileDirectory)README.md" Pack="true" PackagePath="\" Link="README.md" Visible="false" Condition="Exists('$(MSBuildThisFileDirectory)README.md')" />
<None Include="$(MSBuildThisFileDirectory)LICENSE" Pack="true" PackagePath="\" Link="LICENSE" Visible="false" Condition="Exists('$(MSBuildThisFileDirectory)LICENSE')" />
</ItemGroup>
</Project>