Skip to content

Commit 41b9b2c

Browse files
committed
More work for multi-versioning
1 parent 72481c8 commit 41b9b2c

File tree

3 files changed

+117
-31
lines changed

3 files changed

+117
-31
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -479,6 +479,7 @@ excluded-platforms.txt
479479
#/docs/
480480
src/Website/Silk.NET.Statiq/temp
481481
src/Website/Silk.NET.Statiq/cache
482+
.nuke/temp
482483

483484
# SilkTouch configs
484485
!eng/silktouch/**/*.rsp

eng/build/Build.Website.cs

Lines changed: 101 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,117 @@
11
// Licensed to the .NET Foundation under one or more agreements.
22
// The .NET Foundation licenses this file to you under the MIT license.
33

4+
using System.Collections.Generic;
5+
using System.IO;
6+
using System.Linq;
7+
using System.Text.Json;
8+
using System.Text.Json.Serialization;
49
using Nuke.Common;
510
using Nuke.Common.IO;
11+
using Nuke.Common.Tooling;
612
using static Nuke.Common.Tools.Git.GitTasks;
713
using static Nuke.Common.Tools.Npm.NpmTasks;
814

915
partial class Build
1016
{
17+
readonly record struct VersionDescription(
18+
AbsolutePath Path,
19+
AbsolutePath StaticPath,
20+
string Name,
21+
bool IsSilk2
22+
);
23+
24+
// From oldest to newest. Last one is current.
25+
VersionDescription[] Versions =>
26+
[
27+
new(
28+
RootDirectory / "eng" / "submodules" / "silk.net-2.x" / "documentation",
29+
RootDirectory / "eng" / "submodules" / "silk.net-2.x" / "documentation" / "images",
30+
"v2",
31+
true
32+
),
33+
new(
34+
RootDirectory / "docs",
35+
RootDirectory / "sources" / "Website" / "static" / "img",
36+
"v3",
37+
false
38+
),
39+
];
40+
41+
readonly record struct JsonVersion(
42+
string Label,
43+
[property: JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] string? Path
44+
);
45+
1146
void FullBuildWebsite()
1247
{
13-
if (!GitHasCleanWorkingCopy())
48+
// Copy the current docs directory to a temporary directory, as we'll be making a lot of changes to this.
49+
(TemporaryDirectory / "docs").CreateOrCleanDirectory();
50+
(RootDirectory / "docs").Copy(
51+
TemporaryDirectory / "docs",
52+
ExistsPolicy.MergeAndOverwriteIfNewer
53+
);
54+
(TemporaryDirectory / "website").CreateOrCleanDirectory();
55+
(RootDirectory / "sources" / "Website").Copy(
56+
TemporaryDirectory / "website",
57+
ExistsPolicy.MergeAndOverwriteIfNewer
58+
);
59+
try
1460
{
15-
Assert.Fail("Working directory is not clean.");
61+
var versions = Versions;
62+
var jsonVersions = new Dictionary<string, JsonVersion>(versions.Length);
63+
for (var i = 0; i < versions.Length; i++)
64+
{
65+
var version = versions[i];
66+
(RootDirectory / "docs").CreateOrCleanDirectory();
67+
(
68+
version.Path == RootDirectory / "docs"
69+
? TemporaryDirectory / "docs"
70+
: version.Path
71+
).Copy(RootDirectory / "docs", ExistsPolicy.MergeAndOverwriteIfNewer);
72+
if (i != versions.Length - 1)
73+
{
74+
version.StaticPath.CopyToDirectory(
75+
RootDirectory / "sources" / "Website" / "static",
76+
ExistsPolicy.MergeAndOverwriteIfNewer
77+
);
78+
79+
Npm(
80+
$"run docusaurus docs:version {version.Name}",
81+
RootDirectory / "sources" / "Website"
82+
);
83+
}
84+
85+
jsonVersions[i == versions.Length - 1 ? "current" : version.Name] = new JsonVersion(
86+
Git($"describe --tags --abbrev=0", version.Path)
87+
.First(x => x.Type == OutputType.Std)
88+
.Text.Trim(),
89+
version.Name
90+
);
91+
}
92+
93+
(RootDirectory / "artifacts" / "docs").CreateOrCleanDirectory();
94+
File.WriteAllText(
95+
RootDirectory / "sources" / "Website" / "silkversions.json",
96+
JsonSerializer.Serialize(jsonVersions)
97+
);
98+
Npm($"run build -- --out-dir {RootDirectory / "artifacts" / "docs"}");
99+
}
100+
finally
101+
{
102+
File.Delete(RootDirectory / "sources" / "Website" / "silkversions.json");
103+
(RootDirectory / "docs").CreateOrCleanDirectory();
104+
(TemporaryDirectory / "docs").Copy(
105+
RootDirectory / "docs",
106+
ExistsPolicy.MergeAndOverwriteIfNewer
107+
);
108+
(TemporaryDirectory / "docs").CreateOrCleanDirectory();
109+
(RootDirectory / "sources" / "Website").CreateOrCleanDirectory();
110+
(TemporaryDirectory / "website").Copy(
111+
RootDirectory / "sources" / "Website",
112+
ExistsPolicy.MergeAndOverwriteIfNewer
113+
);
114+
(TemporaryDirectory / "website").CreateOrCleanDirectory();
16115
}
17-
(RootDirectory / "docs").CreateOrCleanDirectory();
18-
(RootDirectory / "eng" / "submodules" / "silk.net-2.x" / "documentation").Copy(
19-
RootDirectory / "docs",
20-
ExistsPolicy.DirectoryMerge
21-
);
22-
(RootDirectory / "docs" / "images").CreateOrCleanDirectory();
23-
Npm($"npm run docusaurus docs:version v2", RootDirectory / "sources" / "Website");
24-
(RootDirectory / "docs").CreateOrCleanDirectory();
25-
Git($"checkout HEAD {RootDirectory / "docs"}");
26116
}
27117
}

sources/Website/docusaurus.config.ts

Lines changed: 15 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,7 @@ import remarkGithubAdmonitionsToDirectives from "remark-github-admonitions-to-di
55
import { visit } from 'unist-util-visit';
66
import { pathToFileURL } from 'node:url';
77
import path from 'node:path';
8-
import { exec } from 'node:child_process';
9-
10-
function getSilk2Version(): string {
11-
let ver = "";
12-
exec(
13-
"git describe --tags HEAD --abbrev=0",
14-
{ cwd: "../../eng/submodules/silk.net-2.x" },
15-
(_a, stdout, _b)=> ver = stdout
16-
);
17-
return ver;
18-
}
8+
import { readFileSync, existsSync } from 'node:fs';
199

2010
// This runs in Node.js - Don't use client-side code here (browser APIs, JSX...)
2111

@@ -59,6 +49,18 @@ const rewriteSourceLinks = (options) => {
5949
return transformer;
6050
};
6151

52+
// Used in the NUKE workflow
53+
function addSilkVersionsJson(dict: object): object {
54+
if (existsSync("silkversions.json")) {
55+
for (const [key, value] of Object.entries(JSON.parse(readFileSync("silkversions.json", "utf8")))) {
56+
dict[key] = value;
57+
}
58+
}
59+
return dict;
60+
}
61+
62+
// @ts-ignore
63+
// @ts-ignore
6264
const config: Config = {
6365
title: 'Silk.NET',
6466
tagline: 'Your one-stop-shop for high performance .NET graphics & compute.',
@@ -108,15 +110,8 @@ const config: Config = {
108110
],
109111
// TODO uncomment when v3 is released
110112
// lastVersion: "current",
111-
versions: {
112-
current: {
113-
label: 'v3.0.0',
114-
path: "v3"
115-
},
116-
"v2": {
117-
label: getSilk2Version()
118-
}
119-
},
113+
// @ts-ignore
114+
versions: addSilkVersionsJson({}),
120115
},
121116
blog: {
122117
showReadingTime: true,

0 commit comments

Comments
 (0)