From 13ffa92129ebdd5f0f6cb28c3bc6b4bae3372e73 Mon Sep 17 00:00:00 2001 From: Franz Busch Date: Mon, 22 Sep 2025 12:33:39 +0200 Subject: [PATCH] Enable 6.2 CI and enable Windows CI --- .github/workflows/main.yml | 10 +++++++--- .github/workflows/pull_request.yml | 10 +++++++--- Sources/UnixSignals/UnixSignal.swift | 6 ++++++ Sources/UnixSignals/UnixSignalsSequence.swift | 7 ++++--- .../ServiceGroupAddServiceTests.swift | 2 ++ .../ServiceGroupTests.swift | 18 ++++++++++++++++++ Tests/UnixSignalsTests/UnixSignalTests.swift | 4 ++++ 7 files changed, 48 insertions(+), 9 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 7401b20..7af4233 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -11,12 +11,16 @@ jobs: name: Unit tests uses: apple/swift-nio/.github/workflows/unit_tests.yml@main with: - linux_5_9_arguments_override: "--explicit-target-dependency-import-check error" - linux_5_10_arguments_override: "--explicit-target-dependency-import-check error" linux_6_0_arguments_override: "-Xswiftc -warnings-as-errors --explicit-target-dependency-import-check error -Xswiftc -require-explicit-sendable" linux_6_1_arguments_override: "-Xswiftc -warnings-as-errors --explicit-target-dependency-import-check error -Xswiftc -require-explicit-sendable" - linux_nightly_6_0_arguments_override: "--explicit-target-dependency-import-check error -Xswiftc -require-explicit-sendable" + linux_6_2_arguments_override: "-Xswiftc -warnings-as-errors --explicit-target-dependency-import-check error -Xswiftc -require-explicit-sendable" + linux_nightly_next_arguments_override: "--explicit-target-dependency-import-check error -Xswiftc -require-explicit-sendable" linux_nightly_main_arguments_override: "--explicit-target-dependency-import-check error -Xswiftc -require-explicit-sendable" + windows_6_0_enabled: true + windows_6_1_enabled: true + windows_6_2_enabled: true + windows_nightly_next_enabled: true + windows_nightly_main_enabled: true cxx-interop: name: Cxx interop diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index dc66827..901bbba 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -15,12 +15,16 @@ jobs: name: Unit tests uses: apple/swift-nio/.github/workflows/unit_tests.yml@main with: - linux_5_9_arguments_override: "--explicit-target-dependency-import-check error" - linux_5_10_arguments_override: "--explicit-target-dependency-import-check error" linux_6_0_arguments_override: "-Xswiftc -warnings-as-errors --explicit-target-dependency-import-check error -Xswiftc -require-explicit-sendable" linux_6_1_arguments_override: "-Xswiftc -warnings-as-errors --explicit-target-dependency-import-check error -Xswiftc -require-explicit-sendable" - linux_nightly_6_0_arguments_override: "--explicit-target-dependency-import-check error -Xswiftc -require-explicit-sendable" + linux_6_2_arguments_override: "-Xswiftc -warnings-as-errors --explicit-target-dependency-import-check error -Xswiftc -require-explicit-sendable" + linux_nightly_next_arguments_override: "--explicit-target-dependency-import-check error -Xswiftc -require-explicit-sendable" linux_nightly_main_arguments_override: "--explicit-target-dependency-import-check error -Xswiftc -require-explicit-sendable" + windows_6_0_enabled: true + windows_6_1_enabled: true + windows_6_2_enabled: true + windows_nightly_next_enabled: true + windows_nightly_main_enabled: true cxx-interop: name: Cxx interop diff --git a/Sources/UnixSignals/UnixSignal.swift b/Sources/UnixSignals/UnixSignal.swift index 9a0f9cb..03394a3 100644 --- a/Sources/UnixSignals/UnixSignal.swift +++ b/Sources/UnixSignals/UnixSignal.swift @@ -26,6 +26,8 @@ import Dispatch /// A struct representing a Unix signal. /// /// Signals are standardized messages sent to a running program to trigger specific behavior, such as quitting or error handling +/// +/// - Important: Unix signals are only functional on platforms supporting signals. public struct UnixSignal: Hashable, Sendable, CustomStringConvertible { internal enum Wrapped { case sigabrt @@ -118,6 +120,9 @@ extension UnixSignal.Wrapped: CustomStringConvertible { extension UnixSignal.Wrapped { var rawValue: Int32 { + #if os(Windows) + return -1 + #else switch self { case .sigabrt: return SIGABRT @@ -146,5 +151,6 @@ extension UnixSignal.Wrapped { case .sigpipe: return SIGPIPE } + #endif } } diff --git a/Sources/UnixSignals/UnixSignalsSequence.swift b/Sources/UnixSignals/UnixSignalsSequence.swift index 4627792..cd10d3e 100644 --- a/Sources/UnixSignals/UnixSignalsSequence.swift +++ b/Sources/UnixSignals/UnixSignalsSequence.swift @@ -15,14 +15,15 @@ #if canImport(Darwin) import Darwin import Dispatch -#elseif canImport(Glibc) +#else @preconcurrency import Dispatch +#endif + +#if canImport(Glibc) import Glibc #elseif canImport(Musl) -@preconcurrency import Dispatch import Musl #elseif canImport(Android) -@preconcurrency import Dispatch import Android #endif import ConcurrencyHelpers diff --git a/Tests/ServiceLifecycleTests/ServiceGroupAddServiceTests.swift b/Tests/ServiceLifecycleTests/ServiceGroupAddServiceTests.swift index 9bed364..792feb6 100644 --- a/Tests/ServiceLifecycleTests/ServiceGroupAddServiceTests.swift +++ b/Tests/ServiceLifecycleTests/ServiceGroupAddServiceTests.swift @@ -239,6 +239,7 @@ final class ServiceGroupAddServiceTests: XCTestCase { } } + #if !os(Windows) func testGracefulShutdownOrdering_withAddedServices() async throws { let service1 = MockService(description: "Service1") let service2 = MockService(description: "Service2") @@ -369,6 +370,7 @@ final class ServiceGroupAddServiceTests: XCTestCase { await service2.resumeRunContinuation(with: .success(())) } } + #endif // MARK: - Helpers diff --git a/Tests/ServiceLifecycleTests/ServiceGroupTests.swift b/Tests/ServiceLifecycleTests/ServiceGroupTests.swift index 0120251..0559cfb 100644 --- a/Tests/ServiceLifecycleTests/ServiceGroupTests.swift +++ b/Tests/ServiceLifecycleTests/ServiceGroupTests.swift @@ -81,6 +81,7 @@ final class ServiceGroupTests: XCTestCase { } } + #if !os(Windows) func test_whenRun_ShutdownGracefully() async throws { let mockService = MockService(description: "Service1") let serviceGroup = self.makeServiceGroup( @@ -103,6 +104,7 @@ final class ServiceGroupTests: XCTestCase { await mockService.resumeRunContinuation(with: .success(())) } } + #endif func testRun_whenServiceExitsEarly() async throws { let mockService = MockService(description: "Service1") @@ -469,6 +471,7 @@ final class ServiceGroupTests: XCTestCase { } } + #if !os(Windows) func testCancellationSignal() async throws { let service1 = MockService(description: "Service1") let service2 = MockService(description: "Service2") @@ -507,7 +510,9 @@ final class ServiceGroupTests: XCTestCase { await XCTAsyncAssertNoThrow(try await group.next()) } } + #endif + #if !os(Windows) func testCancellationSignal_afterGracefulShutdownSignal() async throws { let service1 = MockService(description: "Service1") let service2 = MockService(description: "Service2") @@ -560,7 +565,9 @@ final class ServiceGroupTests: XCTestCase { await XCTAsyncAssertNoThrow(try await group.next()) } } + #endif + #if !os(Windows) func testGracefulShutdownOrdering() async throws { let service1 = MockService(description: "Service1") let service2 = MockService(description: "Service2") @@ -624,7 +631,9 @@ final class ServiceGroupTests: XCTestCase { await service1.resumeRunContinuation(with: .success(())) } } + #endif + #if !os(Windows) func testGracefulShutdownOrdering_whenServiceThrows() async throws { let service1 = MockService(description: "Service1") let service2 = MockService(description: "Service2") @@ -688,7 +697,9 @@ final class ServiceGroupTests: XCTestCase { } } } + #endif + #if !os(Windows) func testGracefulShutdownOrdering_whenServiceThrows_andServiceGracefullyShutsdown() async throws { let service1 = MockService(description: "Service1") let service2 = MockService(description: "Service2") @@ -756,7 +767,9 @@ final class ServiceGroupTests: XCTestCase { } } } + #endif + #if !os(Windows) func testGracefulShutdownOrdering_whenServiceExits() async throws { let service1 = MockService(description: "Service1") let service2 = MockService(description: "Service2") @@ -816,7 +829,9 @@ final class ServiceGroupTests: XCTestCase { await service2.resumeRunContinuation(with: .success(())) } } + #endif + #if !os(Windows) func testGracefulShutdownOrdering_whenServiceExits_andIgnoringThrows() async throws { let service1 = MockService(description: "Service1") let service2 = MockService(description: "Service2") @@ -886,7 +901,9 @@ final class ServiceGroupTests: XCTestCase { } } } + #endif + #if !os(Windows) func testNestedServiceLifecycle() async throws { struct NestedGroupService: Service { let group: ServiceGroup @@ -1007,6 +1024,7 @@ final class ServiceGroupTests: XCTestCase { await service2.resumeRunContinuation(with: .success(())) } } + #endif func testGracefulShutdownEscalation() async throws { let mockService = MockService(description: "Service1") diff --git a/Tests/UnixSignalsTests/UnixSignalTests.swift b/Tests/UnixSignalsTests/UnixSignalTests.swift index abea2da..39a69ac 100644 --- a/Tests/UnixSignalsTests/UnixSignalTests.swift +++ b/Tests/UnixSignalsTests/UnixSignalTests.swift @@ -12,6 +12,8 @@ // //===----------------------------------------------------------------------===// +#if !os(Windows) + import UnixSignals import XCTest #if canImport(Darwin) @@ -154,3 +156,5 @@ final class UnixSignalTests: XCTestCase { await task.value } } + +#endif