Skip to content

Commit 48b03c2

Browse files
authored
Merge pull request #331 from tayloraswift/per-edition-builds
track running builds and completed builds separately
2 parents a26917a + edfecaf commit 48b03c2

File tree

86 files changed

+4575
-2020
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

86 files changed

+4575
-2020
lines changed

Assets/css/Main.css

Lines changed: 2298 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Assets/css/Main.css.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Sources/Availability/Domains/Availability.PlatformDomain.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ extension Availability
1010
case macCatalyst
1111
case openBSD = "OpenBSD"
1212
case tvOS
13+
case visionOS
1314
case watchOS
1415
case windows = "Windows"
1516

@@ -41,6 +42,7 @@ extension Availability.PlatformDomain:CustomStringConvertible
4142
case .macCatalyst: "Mac Catalyst"
4243
case .openBSD: "OpenBSD"
4344
case .tvOS: "tvOS"
45+
case .visionOS: "visionOS"
4446
case .watchOS: "watchOS"
4547
case .windows: "Windows"
4648
case .iOSApplicationExtension: "iOS App Extension"

Sources/SymbolGraphs/Declarations/Availability.CodingKey.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ extension Availability.CodingKey:RawRepresentable
3131
case "m": self.init(.platform(.macOS))
3232
case "c": self.init(.platform(.macCatalyst))
3333
case "t": self.init(.platform(.tvOS))
34+
case "v": self.init(.platform(.visionOS))
3435
case "w": self.init(.platform(.watchOS))
3536
case "n": self.init(.platform(.windows))
3637
case "o": self.init(.platform(.openBSD))
@@ -54,6 +55,7 @@ extension Availability.CodingKey:RawRepresentable
5455
case .platform(.macOS): "m"
5556
case .platform(.macCatalyst): "c"
5657
case .platform(.tvOS): "t"
58+
case .platform(.visionOS): "v"
5759
case .platform(.watchOS): "w"
5860
case .platform(.windows): "n"
5961
case .platform(.openBSD): "o"

Sources/SymbolGraphs/SymbolGraphABI.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,5 @@ import SemanticVersions
33
@frozen public
44
enum SymbolGraphABI
55
{
6-
@inlinable public static var version:PatchVersion { .v(0, 11, 0) }
6+
@inlinable public static var version:PatchVersion { .v(0, 11, 1) }
77
}

Sources/Symbols/Identifiers/Symbol.Edition.swift

Lines changed: 0 additions & 41 deletions
This file was deleted.

Sources/Symbols/Identifiers/Symbol.PackageAtRef.swift

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,12 @@ extension Symbol
55
{
66
public
77
var package:Package
8+
/// A name corresponding to a git ref.
89
public
9-
var ref:Substring?
10+
var ref:String
1011

1112
@inlinable public
12-
init(package:Package, ref:Substring?)
13+
init(package:Package, ref:String)
1314
{
1415
self.package = package
1516
self.ref = ref
@@ -19,24 +20,22 @@ extension Symbol
1920
extension Symbol.PackageAtRef:CustomStringConvertible
2021
{
2122
@inlinable public
22-
var description:String
23-
{
24-
self.ref.map { "\(self.package)/\($0)" } ?? "\(self.package)"
25-
}
23+
var description:String { "\(self.package)/\(self.ref)" }
2624
}
2725
extension Symbol.PackageAtRef:LosslessStringConvertible
2826
{
29-
public
30-
init(_ trunk:String)
27+
@inlinable public
28+
init?(_ description:some StringProtocol)
3129
{
32-
if let slash:String.Index = trunk.firstIndex(of: "/")
30+
if let slash:String.Index = description.firstIndex(of: "/")
3331
{
34-
self.init(package: .init(trunk[..<slash]),
35-
ref: trunk[trunk.index(after: slash)...])
32+
self.init(
33+
package: .init(description[..<slash]),
34+
ref: .init(description[description.index(after: slash)...]))
3635
}
3736
else
3837
{
39-
self.init(package: .init(trunk), ref: nil)
38+
return nil
4039
}
4140
}
4241
}

Sources/UnidocAPI/Building/Unidoc.BuildStatus.swift

Lines changed: 11 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,19 @@ extension Unidoc
66
struct BuildStatus
77
{
88
public
9-
let request:Unidoc.BuildRequest<Void>?
9+
let request:Edition
1010
public
11-
let stage:Unidoc.BuildStage?
11+
let pending:BuildStage?
1212
public
13-
let failure:Unidoc.BuildFailure?
13+
let failure:BuildFailure?
1414

1515
@inlinable public
16-
init(request:Unidoc.BuildRequest<Void>?,
17-
stage:Unidoc.BuildStage?,
18-
failure:Unidoc.BuildFailure?)
16+
init(request:Edition,
17+
pending:Unidoc.BuildStage?,
18+
failure:BuildFailure?)
1919
{
2020
self.request = request
21-
self.stage = stage
21+
self.pending = pending
2222
self.failure = failure
2323
}
2424
}
@@ -29,8 +29,6 @@ extension Unidoc.BuildStatus
2929
enum CodingKey:String, Sendable
3030
{
3131
case version
32-
case series
33-
case force
3432
case stage
3533
case failure
3634
}
@@ -40,21 +38,8 @@ extension Unidoc.BuildStatus:JSONObjectEncodable
4038
public
4139
func encode(to json:inout JSON.ObjectEncoder<CodingKey>)
4240
{
43-
if let request:Unidoc.BuildRequest<Void> = self.request
44-
{
45-
switch request.version
46-
{
47-
case .latest(let series, of: ()):
48-
json[.series] = series
49-
50-
case .id(let id):
51-
json[.version] = id
52-
}
53-
54-
json[.force] = request.rebuild
55-
}
56-
57-
json[.stage] = self.stage
41+
json[.version] = request
42+
json[.stage] = self.pending
5843
json[.failure] = self.failure
5944
}
6045
}
@@ -63,23 +48,8 @@ extension Unidoc.BuildStatus:JSONObjectDecodable
6348
public
6449
init(json:JSON.ObjectDecoder<CodingKey>) throws
6550
{
66-
let request:Unidoc.BuildRequest<Void>?
67-
if let series:Unidoc.VersionSeries = try json[.series]?.decode()
68-
{
69-
request = .init(version: .latest(series), rebuild: try json[.force].decode())
70-
}
71-
else if
72-
let id:Unidoc.Edition = try json[.version]?.decode()
73-
{
74-
request = .init(version: .id(id), rebuild: try json[.force].decode())
75-
}
76-
else
77-
{
78-
request = nil
79-
}
80-
81-
self.init(request: request,
82-
stage: try json[.stage]?.decode(),
51+
self.init(request: try json[.version].decode(),
52+
pending: try json[.stage]?.decode(),
8353
failure: try json[.failure]?.decode())
8454
}
8555
}

Sources/UnidocAPI/Building/Unidoc.EditionStateReport.swift

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ extension Unidoc.EditionStateReport
6363
}
6464
}
6565
else if
66-
let stage:Unidoc.BuildStage = build.stage
66+
let stage:Unidoc.BuildStage = build.pending
6767
{
6868
switch stage
6969
{
@@ -75,20 +75,7 @@ extension Unidoc.EditionStateReport
7575
}
7676
else
7777
{
78-
switch build.request?.version
79-
{
80-
case .latest?:
81-
return .QUEUED_FLOATING_VERSION
82-
83-
case .id(self.id)?:
84-
return .QUEUED
85-
86-
case .id?:
87-
return .QUEUED_DIFFERENT_VERSION
88-
89-
case .none:
90-
return .DEFAULT
91-
}
78+
return self.id == build.request ? .QUEUED : .QUEUED_DIFFERENT_VERSION
9279
}
9380
}
9481
}

Sources/UnidocClient/Unidoc.Client.swift

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -70,14 +70,14 @@ extension Unidoc.Client<HTTP.Client2>
7070
/// Listens for SSGC updates over the provided pipe, uploading any intermediate reports to
7171
/// Unidoc server and returning the final report, without uploading it.
7272
private
73-
func stream(from pipe:FilePath, package:Unidoc.Package) async throws -> Unidoc.BuildFailure?
73+
func stream(from pipe:FilePath, edition:Unidoc.Edition) async throws -> Unidoc.BuildFailure?
7474
{
7575
try await SSGC.StatusStream.read(from: pipe)
7676
{
7777
// Acknowledge the build request.
7878
try? await self.connect
7979
{
80-
try await $0.upload(.init(package: package, entered: .cloningRepository))
80+
try await $0.upload(.init(edition: edition, entered: .cloningRepository))
8181
}
8282

8383
while let update:SSGC.StatusUpdate = try $0.next()
@@ -119,7 +119,7 @@ extension Unidoc.Client<HTTP.Client2>
119119

120120
try await self.connect
121121
{
122-
try await $0.upload(.init(package: package, entered: stage))
122+
try await $0.upload(.init(edition: edition, entered: stage))
123123
}
124124
}
125125

@@ -237,9 +237,9 @@ extension Unidoc.Client<HTTP.Client2>
237237
}
238238

239239
let failure:Unidoc.BuildFailure? = try await self.stream(from: status,
240-
package: labels.coordinate.package)
240+
edition: labels.coordinate)
241241

242-
var artifact:Unidoc.BuildArtifact = .init(package: labels.coordinate.package,
242+
var artifact:Unidoc.BuildArtifact = .init(edition: labels.coordinate,
243243
outcome: .failure(failure ?? .failedForUnknownReason))
244244

245245
// Check the exit status of the child process.
@@ -254,10 +254,13 @@ extension Unidoc.Client<HTTP.Client2>
254254
action: action))
255255
}
256256

257-
/// Attach build logs.
257+
// Attach build logs.
258258
try artifact.attach(log: output, as: .ssgc)
259259
try artifact.attach(log: diagnostics, as: .ssgcDiagnostics)
260260

261+
// If the repo URL contains a token, we should keep the logs secret.
262+
artifact.logsAreSecret = labels.repo.contains("@")
263+
261264
artifact.seconds = (.now - started).components.seconds
262265

263266
try await self.connect

Sources/UnidocDB/Building/Unidoc.BuildBehavior.swift

Lines changed: 0 additions & 46 deletions
This file was deleted.
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import BSON
2+
import MongoQL
3+
import UnidocRecords
4+
import UnixTime
5+
6+
extension Unidoc
7+
{
8+
@frozen public
9+
struct BuildIdentifier:Equatable, Hashable, Sendable
10+
{
11+
public
12+
let edition:Unidoc.Edition
13+
public
14+
let run:UnixMillisecond
15+
16+
@inlinable public
17+
init(edition:Unidoc.Edition, run:UnixMillisecond)
18+
{
19+
self.edition = edition
20+
self.run = run
21+
}
22+
}
23+
}
24+
extension Unidoc.BuildIdentifier:Mongo.MasterCodingModel
25+
{
26+
@frozen public
27+
enum CodingKey:String, Sendable, BSONDecodable
28+
{
29+
case edition = "e"
30+
case run = "T"
31+
}
32+
}
33+
extension Unidoc.BuildIdentifier:BSONDocumentEncodable
34+
{
35+
public
36+
func encode(to bson:inout BSON.DocumentEncoder<CodingKey>)
37+
{
38+
bson[.edition] = self.edition
39+
bson[.run] = self.run
40+
}
41+
}
42+
extension Unidoc.BuildIdentifier:BSONDocumentDecodable
43+
{
44+
@inlinable public
45+
init(bson:BSON.DocumentDecoder<CodingKey>) throws
46+
{
47+
self.init(edition: try bson[.edition].decode(), run: try bson[.run].decode())
48+
}
49+
}

0 commit comments

Comments
 (0)