Skip to content

Commit adfb7fb

Browse files
authored
Merge pull request #25 from tayloraswift/build-automation-2
get proof-of-concept UnidocBuild tool working
2 parents b25bbcb + 1ad3508 commit adfb7fb

File tree

2 files changed

+51
-28
lines changed

2 files changed

+51
-28
lines changed

Sources/HTTPClient/HTTP2Client.Connection.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ extension HTTP2Client.Connection
8585
async
8686
let _:Void =
8787
{
88-
try await Task.sleep(for: .seconds(3))
88+
try await Task.sleep(for: .seconds(15))
8989
source.finish(throwing: HTTP2Client.RequestTimeoutError.init())
9090
}()
9191

Sources/UnidocBuild/Main.swift

Lines changed: 50 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -40,39 +40,52 @@ enum Main
4040

4141
let edition:PackageBuildStatus.Edition
4242

43-
if package.release.graphs == 0
43+
if options.build
4444
{
45-
edition = package.release
46-
}
47-
else if
48-
let prerelease:PackageBuildStatus.Edition = package.prerelease,
49-
prerelease.graphs == 0
50-
{
51-
edition = prerelease
52-
}
53-
else
54-
{
55-
print("No new documentation to build")
56-
return
57-
}
45+
if package.release.graphs == 0 || options.force
46+
{
47+
edition = package.release
48+
}
49+
else if
50+
let prerelease:PackageBuildStatus.Edition = package.prerelease,
51+
prerelease.graphs == 0
52+
{
53+
edition = prerelease
54+
}
55+
else
56+
{
57+
print("No new documentation to build")
58+
return
59+
}
60+
61+
let build:PackageBuild = try await .remote(
62+
package: options.package,
63+
from: package.repo,
64+
at: edition.tag,
65+
in: workspace,
66+
clean: true)
5867

59-
let build:PackageBuild = try await .remote(
60-
package: options.package,
61-
from: package.repo,
62-
at: edition.tag,
63-
in: workspace,
64-
clean: true)
68+
let snapshot:Snapshot = .init(
69+
package: package.coordinate,
70+
version: edition.coordinate,
71+
archive: try await toolchain.generateDocs(for: build, pretty: options.pretty))
6572

66-
let snapshot:Snapshot = .init(
67-
package: package.coordinate,
68-
version: edition.coordinate,
69-
archive: try await toolchain.generateDocs(for: build, pretty: options.pretty))
73+
let bson:BSON.Document = .init(encoding: consume snapshot)
7074

71-
let bson:BSON.Document = .init(encoding: consume snapshot)
75+
print("Uploading symbol graph...")
7276

73-
try await $0.put(bson: bson, to: "/api/symbolgraph")
77+
try await $0.put(bson: bson, to: "/api/symbolgraph")
7478

75-
print("Successfully uploaded symbol graph (tag: \(edition.tag))")
79+
print("Successfully uploaded symbol graph (tag: \(edition.tag))")
80+
}
81+
else
82+
{
83+
edition = package.release
84+
}
85+
86+
try await $0.post(
87+
urlencoded: "package=\(package.coordinate)&version=\(edition.coordinate)",
88+
to: "/api/uplink")
7689
}
7790
}
7891
}
@@ -85,6 +98,8 @@ extension Main
8598
var cookie:String
8699
var remote:String
87100
var pretty:Bool
101+
var build:Bool
102+
var force:Bool
88103

89104
private
90105
init(package:PackageIdentifier)
@@ -93,6 +108,8 @@ extension Main
93108
self.cookie = ""
94109
self.remote = "swiftinit.org"
95110
self.pretty = false
111+
self.build = true
112+
self.force = false
96113
}
97114
}
98115
}
@@ -139,6 +156,12 @@ extension Main.Options
139156
case "--pretty", "-p":
140157
options.pretty = true
141158

159+
case "--force", "-f":
160+
options.force = true
161+
162+
case "--uplink-only", "-u":
163+
options.build = false
164+
142165
case let option:
143166
fatalError("Unknown option '\(option)'")
144167
}

0 commit comments

Comments
 (0)