Skip to content

Commit bd2ec17

Browse files
committed
Setup a basic run of cmake-smoke-test in CI
1 parent a3caaf5 commit bd2ec17

File tree

2 files changed

+36
-30
lines changed

2 files changed

+36
-30
lines changed

.github/workflows/pull_request.yml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,21 @@ jobs:
4545
linux_swift_versions: '["nightly-main", "nightly-6.2"]'
4646
windows_swift_versions: '["nightly-main"]'
4747
windows_build_command: 'swift test --no-parallel'
48+
cmake-smoke-test:
49+
name: cmake-smoke-test
50+
uses: swiftlang/github-workflows/.github/workflows/swift_package_test.yml@main
51+
with:
52+
linux_os_versions: '["noble"]'
53+
linux_pre_build_command: |
54+
apt-get update -y
55+
56+
# Build dependencies
57+
apt-get install -y libsqlite3-dev libncurses-dev
58+
59+
apt-get install -y cmake ninja-build
60+
linux_build_command: 'TERM=xterm-256color swift package cmake-smoke-test --disable-sandbox --cmake-path `which cmake` --ninja-path `which ninja`'
61+
linux_swift_versions: '["nightly-main"]'
62+
windows_swift_versions: '[]'
4863
soundness:
4964
name: Soundness
5065
uses: swiftlang/github-workflows/.github/workflows/soundness.yml@main

Plugins/cmake-smoke-test/cmake-smoke-test.swift

Lines changed: 21 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import Foundation
1616
@main
1717
struct CMakeSmokeTest: CommandPlugin {
1818
func performCommand(context: PluginContext, arguments: [String]) async throws {
19+
print(arguments)
1920
var args = ArgumentExtractor(arguments)
2021
let hostOS = try OS.host()
2122

@@ -33,6 +34,7 @@ struct CMakeSmokeTest: CommandPlugin {
3334
if let sysrootPath {
3435
print("using sysroot at \(sysrootPath)")
3536
}
37+
let extraCMakeArgs = args.extractOption(named: "extra-cmake-arg")
3638

3739
let moduleCachePath = context.pluginWorkDirectoryURL.appending(component: "module-cache").path()
3840

@@ -80,38 +82,38 @@ struct CMakeSmokeTest: CommandPlugin {
8082
"-DCMAKE_MAKE_PROGRAM=\(ninjaPath)",
8183
"-DCMAKE_BUILD_TYPE:=Debug",
8284
"-DCMAKE_Swift_FLAGS='\(sharedSwiftFlags.joined(separator: " "))'"
83-
] + cMakeProjectArgs
85+
] + cMakeProjectArgs + extraCMakeArgs
8486

8587
print("Building swift-tools-support-core")
86-
try await Process.checkNonZeroExit(url: cmakeURL, arguments: sharedCMakeArgs + [swiftToolsSupportCoreURL.path()], workingDirectory: swiftToolsSupportCoreBuildURL)
87-
try await Process.checkNonZeroExit(url: ninjaURL, arguments: [], workingDirectory: swiftToolsSupportCoreBuildURL)
88+
try Process.checkNonZeroExit(url: cmakeURL, arguments: sharedCMakeArgs + [swiftToolsSupportCoreURL.path()], workingDirectory: swiftToolsSupportCoreBuildURL)
89+
try Process.checkNonZeroExit(url: ninjaURL, arguments: [], workingDirectory: swiftToolsSupportCoreBuildURL)
8890
print("Built swift-tools-support-core")
8991

9092
if hostOS != .macOS {
9193
print("Building swift-system")
92-
try await Process.checkNonZeroExit(url: cmakeURL, arguments: sharedCMakeArgs + [swiftSystemURL.path()], workingDirectory: swiftSystemBuildURL)
93-
try await Process.checkNonZeroExit(url: ninjaURL, arguments: [], workingDirectory: swiftSystemBuildURL)
94+
try Process.checkNonZeroExit(url: cmakeURL, arguments: sharedCMakeArgs + [swiftSystemURL.path()], workingDirectory: swiftSystemBuildURL)
95+
try Process.checkNonZeroExit(url: ninjaURL, arguments: [], workingDirectory: swiftSystemBuildURL)
9496
print("Built swift-system")
9597
}
9698

9799
print("Building llbuild")
98-
try await Process.checkNonZeroExit(url: cmakeURL, arguments: sharedCMakeArgs + ["-DLLBUILD_SUPPORT_BINDINGS:=Swift", llbuildURL.path()], workingDirectory: llbuildBuildURL)
99-
try await Process.checkNonZeroExit(url: ninjaURL, arguments: [], workingDirectory: llbuildBuildURL)
100+
try Process.checkNonZeroExit(url: cmakeURL, arguments: sharedCMakeArgs + ["-DLLBUILD_SUPPORT_BINDINGS:=Swift", llbuildURL.path()], workingDirectory: llbuildBuildURL)
101+
try Process.checkNonZeroExit(url: ninjaURL, arguments: [], workingDirectory: llbuildBuildURL)
100102
print("Built llbuild")
101103

102104
print("Building swift-argument-parser")
103-
try await Process.checkNonZeroExit(url: cmakeURL, arguments: sharedCMakeArgs + ["-DBUILD_TESTING=NO", "-DBUILD_EXAMPLES=NO", swiftArgumentParserURL.path()], workingDirectory: swiftArgumentParserBuildURL)
104-
try await Process.checkNonZeroExit(url: ninjaURL, arguments: [], workingDirectory: swiftArgumentParserBuildURL)
105+
try Process.checkNonZeroExit(url: cmakeURL, arguments: sharedCMakeArgs + ["-DBUILD_TESTING=NO", "-DBUILD_EXAMPLES=NO", swiftArgumentParserURL.path()], workingDirectory: swiftArgumentParserBuildURL)
106+
try Process.checkNonZeroExit(url: ninjaURL, arguments: [], workingDirectory: swiftArgumentParserBuildURL)
105107
print("Built swift-argument-parser")
106108

107109
print("Building swift-driver")
108-
try await Process.checkNonZeroExit(url: cmakeURL, arguments: sharedCMakeArgs + [swiftDriverURL.path()], workingDirectory: swiftDriverBuildURL)
109-
try await Process.checkNonZeroExit(url: ninjaURL, arguments: [], workingDirectory: swiftDriverBuildURL)
110+
try Process.checkNonZeroExit(url: cmakeURL, arguments: sharedCMakeArgs + [swiftDriverURL.path()], workingDirectory: swiftDriverBuildURL)
111+
try Process.checkNonZeroExit(url: ninjaURL, arguments: [], workingDirectory: swiftDriverBuildURL)
110112
print("Built swift-driver")
111113

112114
print("Building swift-build in \(swiftBuildBuildURL)")
113-
try await Process.checkNonZeroExit(url: cmakeURL, arguments: sharedCMakeArgs + [swiftBuildURL.path()], workingDirectory: swiftBuildBuildURL)
114-
try await Process.checkNonZeroExit(url: ninjaURL, arguments: [], workingDirectory: swiftBuildBuildURL)
115+
try Process.checkNonZeroExit(url: cmakeURL, arguments: sharedCMakeArgs + [swiftBuildURL.path()], workingDirectory: swiftBuildBuildURL)
116+
try Process.checkNonZeroExit(url: ninjaURL, arguments: [], workingDirectory: swiftBuildBuildURL)
115117
print("Built swift-build")
116118
}
117119

@@ -166,29 +168,18 @@ enum OS {
166168
}
167169

168170
extension Process {
169-
func run() async throws {
170-
try await withCheckedThrowingContinuation { continuation in
171-
terminationHandler = { _ in
172-
continuation.resume()
173-
}
174-
175-
do {
176-
try run()
177-
} catch {
178-
terminationHandler = nil
179-
continuation.resume(throwing: error)
180-
}
181-
}
182-
}
183-
184-
static func checkNonZeroExit(url: URL, arguments: [String], workingDirectory: URL, environment: [String: String]? = nil) async throws {
171+
static func checkNonZeroExit(url: URL, arguments: [String], workingDirectory: URL, environment: [String: String]? = nil) throws {
185172
print("\(url.path()) \(arguments.joined(separator: " "))")
186173
let process = Process()
187174
process.executableURL = url
188175
process.arguments = arguments
189176
process.currentDirectoryURL = workingDirectory
190177
process.environment = environment
191-
try await process.run()
178+
process.standardOutput = nil
179+
process.standardError = nil
180+
process.standardInput = nil
181+
try process.run()
182+
process.waitUntilExit()
192183
if process.terminationStatus != 0 {
193184
throw Errors.processError(terminationReason: process.terminationReason, terminationStatus: process.terminationStatus)
194185
}

0 commit comments

Comments
 (0)