Skip to content

Commit a7f0bdb

Browse files
committed
Support .NET 8, 9, 10 in NPM package
1 parent a1c4260 commit a7f0bdb

3 files changed

Lines changed: 58 additions & 3 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 -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.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

build.ps1

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,16 @@ try {
3131
}
3232

3333
if ($PSCmdlet.ShouldProcess('src/nbgv', 'dotnet publish')) {
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+
3444
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"
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", "net10.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)