The Swift Package Index logo.Swift Package Index

Track the adoption of Swift 6 strict concurrency checks for data race safety. How many packages are Ready for Swift 6?

Build Information

Successful build of swift-concurrency-extras, reference main (0a250b), with Swift 6.0 for macOS (SPM) on 3 Jan 2025 04:46:53 UTC.

Swift 6 data race errors: 0

Build Command

env DEVELOPER_DIR=/Applications/Xcode-16.2.0.app xcrun swift build --arch arm64 -Xswiftc -Xfrontend -Xswiftc -stats-output-dir -Xswiftc -Xfrontend -Xswiftc .stats

Build Log

========================================
RunAll
========================================
Builder version: 4.60.0
Interrupt handler set up.
========================================
Checkout
========================================
Clone URL: https://github.com/pointfreeco/swift-concurrency-extras.git
Reference: main
Initialized empty Git repository in /Users/admin/builder/spi-builder-workspace/.git/
From https://github.com/pointfreeco/swift-concurrency-extras
 * branch            main       -> FETCH_HEAD
 * [new branch]      main       -> origin/main
HEAD is now at 0a250bb Update README.md
Cloned https://github.com/pointfreeco/swift-concurrency-extras.git
Revision (git rev-parse @):
0a250bb1029e1e439b9523e61e2bef65842072b2
SPI manifest file found: $PWD/.spi.yml
SUCCESS checkout https://github.com/pointfreeco/swift-concurrency-extras.git at main
Fetching https://github.com/apple/swift-docc-plugin
[1/2048] Fetching swift-docc-plugin
Fetched https://github.com/apple/swift-docc-plugin from cache (1.29s)
Computing version for https://github.com/apple/swift-docc-plugin
Computed https://github.com/apple/swift-docc-plugin at 1.0.0 (2.87s)
Creating working copy for https://github.com/apple/swift-docc-plugin
Working copy of https://github.com/apple/swift-docc-plugin resolved at 1.0.0
========================================
ResolveProductDependencies
========================================
Resolving dependencies ...
{
  "identity": ".resolve-product-dependencies",
  "name": "resolve-dependencies",
  "url": "/Users/admin/builder/spi-builder-workspace/.resolve-product-dependencies",
  "version": "unspecified",
  "path": "/Users/admin/builder/spi-builder-workspace/.resolve-product-dependencies",
  "dependencies": [
    {
      "identity": "swift-concurrency-extras",
      "name": "swift-concurrency-extras",
      "url": "https://github.com/pointfreeco/swift-concurrency-extras.git",
      "version": "unspecified",
      "path": "/Users/admin/builder/spi-builder-workspace/.resolve-product-dependencies/.build/checkouts/swift-concurrency-extras",
      "dependencies": [
      ]
    }
  ]
}
Fetching https://github.com/pointfreeco/swift-concurrency-extras.git
[1/828] Fetching swift-concurrency-extras
Fetched https://github.com/pointfreeco/swift-concurrency-extras.git from cache (1.00s)
Creating working copy for https://github.com/pointfreeco/swift-concurrency-extras.git
Working copy of https://github.com/pointfreeco/swift-concurrency-extras.git resolved at main (0a250bb)
warning: '.resolve-product-dependencies': dependency 'swift-concurrency-extras' is not used by any target
Found 0 product dependencies
========================================
Build
========================================
Selected platform:         macosSpm
Swift version:             6.0
Building package at path:  $PWD
https://github.com/pointfreeco/swift-concurrency-extras.git
https://github.com/pointfreeco/swift-concurrency-extras.git
{
  "dependencies" : [
    {
      "identity" : "swift-docc-plugin",
      "requirement" : {
        "range" : [
          {
            "lower_bound" : "1.0.0",
            "upper_bound" : "2.0.0"
          }
        ]
      },
      "type" : "sourceControl",
      "url" : "https://github.com/apple/swift-docc-plugin"
    }
  ],
  "manifest_display_name" : "swift-concurrency-extras",
  "name" : "swift-concurrency-extras",
  "path" : "/Users/admin/builder/spi-builder-workspace",
  "platforms" : [
    {
      "name" : "ios",
      "version" : "13.0"
    },
    {
      "name" : "macos",
      "version" : "10.15"
    },
    {
      "name" : "tvos",
      "version" : "13.0"
    },
    {
      "name" : "watchos",
      "version" : "6.0"
    }
  ],
  "products" : [
    {
      "name" : "ConcurrencyExtras",
      "targets" : [
        "ConcurrencyExtras"
      ],
      "type" : {
        "library" : [
          "automatic"
        ]
      }
    }
  ],
  "swift_languages_versions" : [
    "6"
  ],
  "targets" : [
    {
      "c99name" : "ConcurrencyExtrasTests",
      "module_type" : "SwiftTarget",
      "name" : "ConcurrencyExtrasTests",
      "path" : "Tests/ConcurrencyExtrasTests",
      "sources" : [
        "ActorIsolatedTests.swift",
        "AnyHashableSendableTests.swift",
        "AsyncStreamTests.swift",
        "LockIsolatedTests.swift",
        "MainSerialExecutorTests.swift",
        "ResultTests.swift"
      ],
      "target_dependencies" : [
        "ConcurrencyExtras"
      ],
      "type" : "test"
    },
    {
      "c99name" : "ConcurrencyExtras",
      "module_type" : "SwiftTarget",
      "name" : "ConcurrencyExtras",
      "path" : "Sources/ConcurrencyExtras",
      "product_memberships" : [
        "ConcurrencyExtras"
      ],
      "sources" : [
        "ActorIsolated.swift",
        "AnyHashableSendable.swift",
        "AsyncStream.swift",
        "AsyncThrowingStream.swift",
        "Internal/Locking.swift",
        "Internal/UncheckedBox.swift",
        "LockIsolated.swift",
        "MainSerialExecutor.swift",
        "Result.swift",
        "Task.swift",
        "UncheckedSendable.swift"
      ],
      "type" : "library"
    }
  ],
  "tools_version" : "6.0"
}
Running build ...
env DEVELOPER_DIR=/Applications/Xcode-16.2.0.app xcrun swift build --arch arm64 -Xswiftc -Xfrontend -Xswiftc -stats-output-dir -Xswiftc -Xfrontend -Xswiftc .stats
[1/1] Compiling plugin Swift-DocC
[2/2] Compiling plugin Swift-DocC Preview
Building for debugging...
[2/4] Write sources
[3/4] Write swift-version-5BDAB9E9C0126B9D.txt
[5/15] Compiling ConcurrencyExtras Task.swift
[6/16] Compiling ConcurrencyExtras Result.swift
[7/16] Compiling ConcurrencyExtras MainSerialExecutor.swift
[8/16] Compiling ConcurrencyExtras LockIsolated.swift
[9/16] Compiling ConcurrencyExtras UncheckedBox.swift
[10/16] Compiling ConcurrencyExtras ActorIsolated.swift
[11/16] Compiling ConcurrencyExtras AnyHashableSendable.swift
[12/16] Emitting module ConcurrencyExtras
[13/16] Compiling ConcurrencyExtras AsyncThrowingStream.swift
[14/16] Compiling ConcurrencyExtras AsyncStream.swift
[15/16] Compiling ConcurrencyExtras Locking.swift
[16/16] Compiling ConcurrencyExtras UncheckedSendable.swift
Build complete! (19.03s)
Build complete.
{
  "dependencies" : [
    {
      "identity" : "swift-docc-plugin",
      "requirement" : {
        "range" : [
          {
            "lower_bound" : "1.0.0",
            "upper_bound" : "2.0.0"
          }
        ]
      },
      "type" : "sourceControl",
      "url" : "https://github.com/apple/swift-docc-plugin"
    }
  ],
  "manifest_display_name" : "swift-concurrency-extras",
  "name" : "swift-concurrency-extras",
  "path" : "/Users/admin/builder/spi-builder-workspace",
  "platforms" : [
    {
      "name" : "ios",
      "version" : "13.0"
    },
    {
      "name" : "macos",
      "version" : "10.15"
    },
    {
      "name" : "tvos",
      "version" : "13.0"
    },
    {
      "name" : "watchos",
      "version" : "6.0"
    }
  ],
  "products" : [
    {
      "name" : "ConcurrencyExtras",
      "targets" : [
        "ConcurrencyExtras"
      ],
      "type" : {
        "library" : [
          "automatic"
        ]
      }
    }
  ],
  "swift_languages_versions" : [
    "6"
  ],
  "targets" : [
    {
      "c99name" : "ConcurrencyExtrasTests",
      "module_type" : "SwiftTarget",
      "name" : "ConcurrencyExtrasTests",
      "path" : "Tests/ConcurrencyExtrasTests",
      "sources" : [
        "ActorIsolatedTests.swift",
        "AnyHashableSendableTests.swift",
        "AsyncStreamTests.swift",
        "LockIsolatedTests.swift",
        "MainSerialExecutorTests.swift",
        "ResultTests.swift"
      ],
      "target_dependencies" : [
        "ConcurrencyExtras"
      ],
      "type" : "test"
    },
    {
      "c99name" : "ConcurrencyExtras",
      "module_type" : "SwiftTarget",
      "name" : "ConcurrencyExtras",
      "path" : "Sources/ConcurrencyExtras",
      "product_memberships" : [
        "ConcurrencyExtras"
      ],
      "sources" : [
        "ActorIsolated.swift",
        "AnyHashableSendable.swift",
        "AsyncStream.swift",
        "AsyncThrowingStream.swift",
        "Internal/Locking.swift",
        "Internal/UncheckedBox.swift",
        "LockIsolated.swift",
        "MainSerialExecutor.swift",
        "Result.swift",
        "Task.swift",
        "UncheckedSendable.swift"
      ],
      "type" : "library"
    }
  ],
  "tools_version" : "6.0"
}
✅  Doc result (pending) reported
========================================
GenerateDocs
========================================
Generating docs at path:  $PWD/.docs/pointfreeco/swift-concurrency-extras/main
Repository:               pointfreeco/swift-concurrency-extras
Swift version used:       6.0
    .package(url: "https://github.com/apple/swift-docc-plugin", from: "1.0.0")
    .package(url: "https://github.com/apple/swift-docc-plugin", from: "1.0.0")
Target:                   ConcurrencyExtras
Generating documentation for 'ConcurrencyExtras'...
Converting documentation...
warning: '79jpc' isn't a disambiguation for 'withMainSerialExecutor(operation:)' at '/ConcurrencyExtras'
  --> ConcurrencyExtras.md:92:47-92:53
90 | Some asynchronous code is [notoriously difficult][reliably-testing-swift-concurrency] to test in
91 | Swift due to how suspension points are processed by the runtime. The library comes with a static
92 + function, ``withMainSerialExecutor(operation:)-79jpc``, that runs all tasks spawned in an operation
   |                                               ├─suggestion: Replace '-79jpc' with '-6s3c0' for'@MainActor func withMainSerialExecutor(operation: @isolated(any) () async throws -> Void) async rethrows'
   |                                               ╰─suggestion: Replace '-79jpc' with '-7fqt1' for'func withMainSerialExecutor(operation: () throws -> Void) rethrows'
93 | serially and deterministically. This function can be used to make asynchronous tests faster and less
94 | flakey.
warning: '79jpc' isn't a disambiguation for 'withMainSerialExecutor(operation:)' at '/ConcurrencyExtras'
   --> ConcurrencyExtras.md:189:67-189:73
187 | causing a test failure.
188 |
189 + If we wrap the entire test in ``withMainSerialExecutor(operation:)-79jpc``, then it will pass
    |                                                                   ├─suggestion: Replace '-79jpc' with '-6s3c0' for'@MainActor func withMainSerialExecutor(operation: @isolated(any) () async throws -> Void) async rethrows'
    |                                                                   ╰─suggestion: Replace '-79jpc' with '-7fqt1' for'func withMainSerialExecutor(operation: () throws -> Void) rethrows'
190 | deterministically, 100% of the time:
191 |
warning: '79jpc' isn't a disambiguation for 'withMainSerialExecutor(operation:)' at '/ConcurrencyExtras'
   --> ConcurrencyExtras.md:220:56-220:62
218 | Now the entire `FeatureModelTests` test case will be run on the main, serial executor.
219 |
220 + Note that by using ``withMainSerialExecutor(operation:)-79jpc`` you are technically making your
    |                                                        ├─suggestion: Replace '-79jpc' with '-6s3c0' for'@MainActor func withMainSerialExecutor(operation: @isolated(any) () async throws -> Void) async rethrows'
    |                                                        ╰─suggestion: Replace '-79jpc' with '-7fqt1' for'func withMainSerialExecutor(operation: () throws -> Void) rethrows'
221 | tests behave in a manner that is different from how they would run in production. However, many
222 | tests written on a day-to-day basis due not invoke the full-blown vagaries of concurrency. Instead
warning: '79jpc' isn't a disambiguation for 'withMainSerialExecutor(operation:)' at '/ConcurrencyExtras'
   --> ConcurrencyExtras.md:228:37-228:43
226 | If your code has truly complex asynchronous and concurrent operations, then it may be handy to write
227 | two sets of tests: one set that targets the main executor (using
228 + ``withMainSerialExecutor(operation:)-79jpc``) so that you can deterministically assert how the core
    |                                     ├─suggestion: Replace '-79jpc' with '-6s3c0' for'@MainActor func withMainSerialExecutor(operation: @isolated(any) () async throws -> Void) async rethrows'
    |                                     ╰─suggestion: Replace '-79jpc' with '-7fqt1' for'func withMainSerialExecutor(operation: () throws -> Void) rethrows'
229 | system behaves, and then another set that targets the default, global executor that will probably
230 | need to make weaker assertions due to non-determinism, but can still assert on some things.
warning: '5wq73' isn't a disambiguation for 'withMainSerialExecutor(operation:)' at '/ConcurrencyExtras'
   --> ConcurrencyExtras.md:244:39-244:45
242 |
243 | - <doc:ReliablyTestingAsync>
244 + - ``withMainSerialExecutor(operation:)-5wq73``
    |                                       ├─suggestion: Replace '-5wq73' with '-6s3c0' for'@MainActor func withMainSerialExecutor(operation: @isolated(any) () async throws -> Void) async rethrows'
    |                                       ╰─suggestion: Replace '-5wq73' with '-7fqt1' for'func withMainSerialExecutor(operation: () throws -> Void) rethrows'
245 |
246 | ### Preconcurrency
warning: '79jpc' isn't a disambiguation for 'withMainSerialExecutor(operation:)' at '/ConcurrencyExtras'
   --> ReliablyTestingAsync.md:178:68-178:74
176 | And so if Apple can write tests like this, why can't we?
177 |
178 + Well, now we can thanks to the ``withMainSerialExecutor(operation:)-79jpc`` tool that ships with
    |                                                                    ├─suggestion: Replace '-79jpc' with '-6s3c0' for'@MainActor func withMainSerialExecutor(operation: @isolated(any) () async throws -> Void) async rethrows'
    |                                                                    ╰─suggestion: Replace '-79jpc' with '-7fqt1' for'func withMainSerialExecutor(operation: () throws -> Void) rethrows'
179 | this library. It temporarily alters the manner in which Swift enqueues asynchronous work in order
180 | to serialize it to the main thread. This allows you to test every facet of the async code, including
warning: '79jpc' isn't a disambiguation for 'withMainSerialExecutor(operation:)' at '/ConcurrencyExtras'
   --> ReliablyTestingAsync.md:226:56-226:62
224 | ## Testing reality
225 |
226 + Note that by using ``withMainSerialExecutor(operation:)-79jpc`` you are technically making your
    |                                                        ├─suggestion: Replace '-79jpc' with '-6s3c0' for'@MainActor func withMainSerialExecutor(operation: @isolated(any) () async throws -> Void) async rethrows'
    |                                                        ╰─suggestion: Replace '-79jpc' with '-7fqt1' for'func withMainSerialExecutor(operation: () throws -> Void) rethrows'
227 | tests behave in a manner that is different from how they would run in production. However, many
228 | tests written on a day-to-day basis do not invoke the full-blown vagaries of concurrency. Instead,
warning: '79jpc' isn't a disambiguation for 'withMainSerialExecutor(operation:)' at '/ConcurrencyExtras'
   --> ReliablyTestingAsync.md:251:37-251:43
249 | a deterministic sequence of outputs, the same is true of user actions in an application. And so we
250 | too feel that many of the tests we write on a daily basis can be run inside
251 + ``withMainSerialExecutor(operation:)-79jpc`` and that we are not weakening the strength of those
    |                                     ├─suggestion: Replace '-79jpc' with '-6s3c0' for'@MainActor func withMainSerialExecutor(operation: @isolated(any) () async throws -> Void) async rethrows'
    |                                     ╰─suggestion: Replace '-79jpc' with '-7fqt1' for'func withMainSerialExecutor(operation: () throws -> Void) rethrows'
252 | tests in the least.
253 |
warning: '79jpc' isn't a disambiguation for 'withMainSerialExecutor(operation:)' at '/ConcurrencyExtras'
   --> ReliablyTestingAsync.md:255:111-255:117
253 |
254 | However, if your code has truly complex asynchronous and concurrent operations, then it may be handy
255 + to write two sets of tests: one set that targets the main executor (using ``withMainSerialExecutor(operation:)-79jpc``)
    |                                                                                                               ├─suggestion: Replace '-79jpc' with '-6s3c0' for'@MainActor func withMainSerialExecutor(operation: @isolated(any) () async throws -> Void) async rethrows'
    |                                                                                                               ╰─suggestion: Replace '-79jpc' with '-7fqt1' for'func withMainSerialExecutor(operation: () throws -> Void) rethrows'
256 | so that you can deterministically assert how the core system behaves, and then another set that
257 | targets the default, global executor. The latter tests will probably need to make weaker assertions
warning: No symbol matched 'ConcurrencyExtras/withMainSerialExecutor(operation:)-79jpc'. '79jpc' isn't a disambiguation for 'withMainSerialExecutor(operation:)' at '/ConcurrencyExtras'.
 --> WithMainSerialExecutor.md:1:3-1:65
1 + # ``ConcurrencyExtras/withMainSerialExecutor(operation:)-79jpc``
  |                                                         ├─suggestion: Replace '-79jpc' with '-6s3c0' for'@MainActor func withMainSerialExecutor(operation: @isolated(any) () async throws -> Void) async rethrows'
  |                                                         ╰─suggestion: Replace '-79jpc' with '-7fqt1' for'func withMainSerialExecutor(operation: () throws -> Void) rethrows'
2 |
3 | ## TopicsConversion complete! (0.38s)
Generated DocC archive at '/Users/admin/builder/spi-builder-workspace/.docs/pointfreeco/swift-concurrency-extras/main'
Building for debugging...
[0/1] Write swift-version-5BDAB9E9C0126B9D.txt
[2/12] Compiling ConcurrencyExtras MainSerialExecutor.swift
[3/12] Compiling ConcurrencyExtras Result.swift
[4/12] Compiling ConcurrencyExtras AsyncThrowingStream.swift
[5/12] Compiling ConcurrencyExtras LockIsolated.swift
[6/12] Compiling ConcurrencyExtras AsyncStream.swift
[7/12] Compiling ConcurrencyExtras UncheckedBox.swift
[8/12] Compiling ConcurrencyExtras Locking.swift
[9/12] Compiling ConcurrencyExtras ActorIsolated.swift
[10/12] Compiling ConcurrencyExtras AnyHashableSendable.swift
[11/12] Emitting module ConcurrencyExtras
[12/12] Compiling ConcurrencyExtras Task.swift
[13/13] Compiling ConcurrencyExtras UncheckedSendable.swift
Build of target: 'ConcurrencyExtras' complete! (1.37s)
     236
3	/Users/admin/builder/spi-builder-workspace/.docs/pointfreeco/swift-concurrency-extras/main
✅  Doc result (uploading) reported
========================================
SyncDocs
========================================
Doc archive source directory: $PWD/.docs/pointfreeco/swift-concurrency-extras/main
File count: 236
Doc size:   3.0MB
Preparing doc bundle ...
Uploading prod-pointfreeco-swift-concurrency-extras-main-884e5af8.zip to s3://spi-docs-inbox/prod-pointfreeco-swift-concurrency-extras-main-884e5af8.zip
Copying... [12%]
Copying... [23%]
Copying... [35%]
Copying... [46%]
Copying... [58%]
Copying... [69%]
Copying... [81%]
Copying... [92%]
Copying... [100%]
Done.