Skip to content

Commit 3bf9aaf

Browse files
authored
Merge pull request #1369 from dotnet/fix1368
Build nbgv CLI tool for .NET 9 and 10
2 parents 3abf762 + a7f0bdb commit 3bf9aaf

5 files changed

Lines changed: 60 additions & 7 deletions

File tree

.github/workflows/build.yml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,11 @@ jobs:
6666
run: dotnet pack -c ${{ env.BUILDCONFIGURATION }} --no-build -p:PackLKG=true /bl:"${{ runner.temp }}/_artifacts/build_logs/msbuild_lkg.binlog"
6767
working-directory: src/Nerdbank.GitVersioning.Tasks
6868
- name: 📢 Publish nbgv tool
69-
run: dotnet publish -c ${{ env.BUILDCONFIGURATION }} -o ../nerdbank-gitversioning.npm/out/nbgv.cli/tools/net8.0/any /bl:"${{ runner.temp }}/_artifacts/build_logs/nbgv_publish.binlog"
69+
shell: pwsh
70+
run: |
71+
dotnet publish -f net8.0 -c ${{ env.BUILDCONFIGURATION }} -o ../nerdbank-gitversioning.npm/out/nbgv.cli/tools/net8.0/any /bl:"${{ runner.temp }}/_artifacts/build_logs/nbgv_publish_net8.binlog"
72+
dotnet publish -f net9.0 -c ${{ env.BUILDCONFIGURATION }} -o ../nerdbank-gitversioning.npm/out/nbgv.cli/tools/net9.0/any /bl:"${{ runner.temp }}/_artifacts/build_logs/nbgv_publish_net9.binlog"
73+
dotnet publish -f net10.0 -c ${{ env.BUILDCONFIGURATION }} -o ../nerdbank-gitversioning.npm/out/nbgv.cli/tools/net10.0/any /bl:"${{ runner.temp }}/_artifacts/build_logs/nbgv_publish_net10.binlog"
7074
working-directory: src/nbgv
7175
- name: 🛠️ Build nerdbank-gitversioning NPM package
7276
run: yarn build

Directory.Packages.props

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@
3030
<PackageVersion Include="Newtonsoft.Json" Version="13.0.4" />
3131
<PackageVersion Include="NuGet.PackageManagement" Version="7.6.0" />
3232
<PackageVersion Include="System.CommandLine" Version="2.0.5" />
33-
<PackageVersion Include="System.Diagnostics.Tools" Version="4.3.0" />
3433
<PackageVersion Include="System.Drawing.Common" Version="9.0.14" />
3534
<PackageVersion Include="System.Memory" Version="4.6.3" />
3635
<PackageVersion Include="System.Runtime.Loader" Version="4.3.0" />

build.ps1

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,17 @@ try {
3131
}
3232

3333
if ($PSCmdlet.ShouldProcess('src/nbgv', 'dotnet publish')) {
34-
dotnet publish src/nbgv -c $Configuration -o src/nerdbank-gitversioning.npm/out/nbgv.cli/tools/net8.0/any
34+
dotnet publish src/nbgv -f net8.0 -c $Configuration -o src/nerdbank-gitversioning.npm/out/nbgv.cli/tools/net8.0/any
35+
if ($LASTEXITCODE -ne 0) {
36+
throw "dotnet publish failed"
37+
}
38+
39+
dotnet publish src/nbgv -f net9.0 -c $Configuration -o src/nerdbank-gitversioning.npm/out/nbgv.cli/tools/net9.0/any
40+
if ($LASTEXITCODE -ne 0) {
41+
throw "dotnet publish failed"
42+
}
43+
44+
dotnet publish src/nbgv -f net10.0 -c $Configuration -o src/nerdbank-gitversioning.npm/out/nbgv.cli/tools/net10.0/any
3545
if ($LASTEXITCODE -ne 0) {
3646
throw "dotnet publish failed"
3747
}

src/nbgv/nbgv.csproj

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<ToolCommandName>nbgv</ToolCommandName>
55
<PackAsTool>True</PackAsTool>
66
<OutputType>Exe</OutputType>
7-
<TargetFramework>net8.0</TargetFramework>
7+
<TargetFrameworks>net8.0;net9.0;net10.0</TargetFrameworks>
88
<RootNamespace>Nerdbank.GitVersioning.Tool</RootNamespace>
99
<Description>A .NET Core Tool that can install, read and set version information based on git history, using Nerdbank.GitVersioning.</Description>
1010
</PropertyGroup>
@@ -13,7 +13,6 @@
1313
<PackageReference Include="NuGet.PackageManagement" />
1414
<PackageReference Include="System.CommandLine" />
1515
<PackageReference Include="Nerdbank.GitVersioning.LKG" PrivateAssets="all" />
16-
<PackageReference Include="System.Diagnostics.Tools" />
1716
<PackageReference Include="Microsoft.Build" />
1817
</ItemGroup>
1918

Lines changed: 43 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,50 @@
1+
import * as fs from 'fs';
12
import * as path from 'path';
3+
import { execSync } from 'child_process';
24

35
const nbgvPath = 'nbgv.cli';
6+
const preferredFrameworks = ["net10.0", "net9.0", "net8.0"];
7+
8+
function getInstalledRuntimeMajors(dotnetCommand: string): Set<number> {
9+
try {
10+
const output = execSync(`${dotnetCommand} --list-runtimes`, { encoding: 'utf8' });
11+
const majors = new Set<number>();
12+
for (const line of output.split(/\r?\n/)) {
13+
const match = line.match(/^Microsoft\.NETCore\.App\s+(\d+)\./);
14+
if (match) {
15+
majors.add(Number(match[1]));
16+
}
17+
}
18+
19+
return majors;
20+
} catch {
21+
return new Set<number>();
22+
}
23+
}
24+
25+
function getFrameworkMajor(targetFramework: string): number | undefined {
26+
const match = targetFramework.match(/^net(\d+)\.0$/);
27+
return match ? Number(match[1]) : undefined;
28+
}
429

530
export function getNbgvCommand(dotnetCommand?: string): string {
631
var command = dotnetCommand || 'dotnet';
7-
const nbgvDll = path.join(__dirname, nbgvPath, "tools", "net8.0", "any", "nbgv.dll");
8-
return `${command} "${nbgvDll}"`;
32+
const installedRuntimes = getInstalledRuntimeMajors(command);
33+
34+
for (const targetFramework of preferredFrameworks) {
35+
const nbgvDll = path.join(__dirname, nbgvPath, "tools", targetFramework, "any", "nbgv.dll");
36+
const major = getFrameworkMajor(targetFramework);
37+
if (fs.existsSync(nbgvDll) && major !== undefined && installedRuntimes.has(major)) {
38+
return `${command} "${nbgvDll}"`;
39+
}
40+
}
41+
42+
for (const targetFramework of preferredFrameworks) {
43+
const nbgvDll = path.join(__dirname, nbgvPath, "tools", targetFramework, "any", "nbgv.dll");
44+
if (fs.existsSync(nbgvDll)) {
45+
return `${command} "${nbgvDll}"`;
46+
}
47+
}
48+
49+
throw new Error(`Could not find nbgv tool under any of: ${preferredFrameworks.join(', ')}`);
950
}

0 commit comments

Comments
 (0)