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 Peppermint, reference main (a2ade2), with Swift 6.0 for macOS (SPM) on 29 Nov 2024 02:45:11 UTC.

Swift 6 data race errors: 0

Build Command

env DEVELOPER_DIR=/Applications/Xcode-16.1.0.app xcrun swift build --arch arm64 -Xswiftc -Xfrontend -Xswiftc -stats-output-dir -Xswiftc -Xfrontend -Xswiftc .stats -Xswiftc -strict-concurrency=complete -Xswiftc -enable-upcoming-feature -Xswiftc StrictConcurrency -Xswiftc -enable-upcoming-feature -Xswiftc DisableOutwardActorInference -Xswiftc -enable-upcoming-feature -Xswiftc GlobalActorIsolatedTypesUsability -Xswiftc -enable-upcoming-feature -Xswiftc InferSendableFromCaptures

Build Log

========================================
RunAll
========================================
Builder version: 4.58.0
Interrupt handler set up.
========================================
Checkout
========================================
Clone URL: https://github.com/nsagora/peppermint.git
Reference: main
Initialized empty Git repository in /Users/admin/builder/spi-builder-workspace/.git/
From https://github.com/nsagora/peppermint
 * branch            main       -> FETCH_HEAD
 * [new branch]      main       -> origin/main
HEAD is now at a2ade2c Add concurency support for the build-linux and build-macos workflows
Cloned https://github.com/nsagora/peppermint.git
Revision (git rev-parse @):
a2ade2c78156fe7e29bbe6978f9dd7f2865d58f3
SUCCESS checkout https://github.com/nsagora/peppermint.git at main
Fetching https://github.com/apple/swift-docc-symbolkit
Fetching https://github.com/apple/swift-docc-plugin
[1/2038] Fetching swift-docc-plugin
[226/5224] Fetching swift-docc-plugin, swift-docc-symbolkit
Fetched https://github.com/apple/swift-docc-symbolkit from cache (1.33s)
Fetched https://github.com/apple/swift-docc-plugin from cache (1.33s)
Computing version for https://github.com/apple/swift-docc-plugin
Computed https://github.com/apple/swift-docc-plugin at 1.3.0 (0.60s)
Computing version for https://github.com/apple/swift-docc-symbolkit
Computed https://github.com/apple/swift-docc-symbolkit at 1.0.0 (0.62s)
Creating working copy for https://github.com/apple/swift-docc-symbolkit
Working copy of https://github.com/apple/swift-docc-symbolkit resolved at 1.0.0
Creating working copy for https://github.com/apple/swift-docc-plugin
Working copy of https://github.com/apple/swift-docc-plugin resolved at 1.3.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": "peppermint",
      "name": "Peppermint",
      "url": "https://github.com/nsagora/peppermint.git",
      "version": "unspecified",
      "path": "/Users/admin/builder/spi-builder-workspace/.resolve-product-dependencies/.build/checkouts/peppermint",
      "dependencies": [
        {
          "identity": "swift-docc-plugin",
          "name": "SwiftDocCPlugin",
          "url": "https://github.com/apple/swift-docc-plugin",
          "version": "1.4.3",
          "path": "/Users/admin/builder/spi-builder-workspace/.resolve-product-dependencies/.build/checkouts/swift-docc-plugin",
          "dependencies": [
            {
              "identity": "swift-docc-symbolkit",
              "name": "SymbolKit",
              "url": "https://github.com/swiftlang/swift-docc-symbolkit",
              "version": "1.0.0",
              "path": "/Users/admin/builder/spi-builder-workspace/.resolve-product-dependencies/.build/checkouts/swift-docc-symbolkit",
              "dependencies": [
              ]
            }
          ]
        }
      ]
    }
  ]
}
Fetching https://github.com/nsagora/peppermint.git
[1/4266] Fetching peppermint
Fetched https://github.com/nsagora/peppermint.git from cache (1.25s)
Fetching https://github.com/apple/swift-docc-plugin from cache
Fetched https://github.com/apple/swift-docc-plugin from cache (0.47s)
Computing version for https://github.com/apple/swift-docc-plugin
Computed https://github.com/apple/swift-docc-plugin at 1.4.3 (0.59s)
Fetching https://github.com/swiftlang/swift-docc-symbolkit
[1/3186] Fetching swift-docc-symbolkit
Fetched https://github.com/swiftlang/swift-docc-symbolkit from cache (1.27s)
Computing version for https://github.com/swiftlang/swift-docc-symbolkit
Computed https://github.com/swiftlang/swift-docc-symbolkit at 1.0.0 (0.57s)
Creating working copy for https://github.com/swiftlang/swift-docc-symbolkit
Working copy of https://github.com/swiftlang/swift-docc-symbolkit resolved at 1.0.0
Creating working copy for https://github.com/apple/swift-docc-plugin
Working copy of https://github.com/apple/swift-docc-plugin resolved at 1.4.3
Creating working copy for https://github.com/nsagora/peppermint.git
Working copy of https://github.com/nsagora/peppermint.git resolved at main (a2ade2c)
warning: '.resolve-product-dependencies': dependency 'peppermint' is not used by any target
Found 1 product dependencies
  - SwiftDocCPlugin
========================================
Build
========================================
Selected platform:         macosSpm
Swift version:             6.0
Building package at path:  $PWD
https://github.com/nsagora/peppermint.git
Running build ...
env DEVELOPER_DIR=/Applications/Xcode-16.1.0.app xcrun swift build --arch arm64 -Xswiftc -Xfrontend -Xswiftc -stats-output-dir -Xswiftc -Xfrontend -Xswiftc .stats -Xswiftc -strict-concurrency=complete -Xswiftc -enable-upcoming-feature -Xswiftc StrictConcurrency -Xswiftc -enable-upcoming-feature -Xswiftc DisableOutwardActorInference -Xswiftc -enable-upcoming-feature -Xswiftc GlobalActorIsolatedTypesUsability -Xswiftc -enable-upcoming-feature -Xswiftc InferSendableFromCaptures
[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--7754E27361AE5C74.txt
[5/32] Emitting module Peppermint
[6/34] Compiling Peppermint LengthPredicate.swift
[7/34] Compiling Peppermint RangePredicate.swift
[8/34] Compiling Peppermint RegexPredicate.swift
[9/34] Compiling Peppermint Constraint.swift
[10/34] Compiling Peppermint ConstraintBuilder.swift
[11/34] Compiling Peppermint QueuedConstraint.swift
[12/34] Compiling Peppermint RequiredPredicate.swift
[13/34] Compiling Peppermint URLPredicate.swift
[14/34] Compiling Peppermint AnyPredicate.swift
[15/34] Compiling Peppermint Predicate.swift
[16/34] Compiling Peppermint BlockPredicate.swift
[17/34] Compiling Peppermint QueuedConstraintWrapper.swift
/Users/admin/builder/spi-builder-workspace/Sources/Constraints/QueuedConstraintWrapper.swift:19:26: warning: capture of 'self' with non-sendable type 'QueuedConstraintWrapper<T, E>' in a `@Sendable` closure; this is an error in the Swift 6 language mode
 1 | import Foundation
 2 |
 3 | public struct QueuedConstraintWrapper<T, E: Error>: QueuedConstraint {
   |               `- note: consider making generic struct 'QueuedConstraintWrapper' conform to the 'Sendable' protocol
 4 |
 5 |     public typealias InputType = T
   :
17 |     public func evaluate(with input: T, on queue: DispatchQueue, completionHandler: @escaping (Result<Void, Summary<E>>) -> Void) {
18 |         workQueue.async {
19 |             let result = constraint.evaluate(with: input)
   |                          `- warning: capture of 'self' with non-sendable type 'QueuedConstraintWrapper<T, E>' in a `@Sendable` closure; this is an error in the Swift 6 language mode
20 |             queue.async {
21 |                 completionHandler(result)
/Users/admin/builder/spi-builder-workspace/Sources/Constraints/QueuedConstraintWrapper.swift:19:52: warning: capture of 'input' with non-sendable type 'T' in a `@Sendable` closure; this is an error in the Swift 6 language mode
 1 | import Foundation
 2 |
 3 | public struct QueuedConstraintWrapper<T, E: Error>: QueuedConstraint {
   |                                       `- note: consider making generic parameter 'T' conform to the 'Sendable' protocol
 4 |
 5 |     public typealias InputType = T
   :
17 |     public func evaluate(with input: T, on queue: DispatchQueue, completionHandler: @escaping (Result<Void, Summary<E>>) -> Void) {
18 |         workQueue.async {
19 |             let result = constraint.evaluate(with: input)
   |                                                    `- warning: capture of 'input' with non-sendable type 'T' in a `@Sendable` closure; this is an error in the Swift 6 language mode
20 |             queue.async {
21 |                 completionHandler(result)
/Users/admin/builder/spi-builder-workspace/Sources/Constraints/QueuedConstraintWrapper.swift:21:17: warning: capture of 'completionHandler' with non-sendable type '(Result<Void, Summary<E>>) -> Void' in a `@Sendable` closure; this is an error in the Swift 6 language mode
19 |             let result = constraint.evaluate(with: input)
20 |             queue.async {
21 |                 completionHandler(result)
   |                 |- warning: capture of 'completionHandler' with non-sendable type '(Result<Void, Summary<E>>) -> Void' in a `@Sendable` closure; this is an error in the Swift 6 language mode
   |                 `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
22 |             }
23 |         }
/Users/admin/builder/spi-builder-workspace/Sources/Constraints/QueuedConstraintWrapper.swift:21:17: warning: capture of 'completionHandler' with non-sendable type '(Result<Void, Summary<E>>) -> Void' in a `@Sendable` closure; this is an error in the Swift 6 language mode
19 |             let result = constraint.evaluate(with: input)
20 |             queue.async {
21 |                 completionHandler(result)
   |                 |- warning: capture of 'completionHandler' with non-sendable type '(Result<Void, Summary<E>>) -> Void' in a `@Sendable` closure; this is an error in the Swift 6 language mode
   |                 `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
22 |             }
23 |         }
[18/34] Compiling Peppermint BlockConstraint.swift
/Users/admin/builder/spi-builder-workspace/Sources/Constraints/QueuedConstraintWrapper.swift:19:26: warning: capture of 'self' with non-sendable type 'QueuedConstraintWrapper<T, E>' in a `@Sendable` closure; this is an error in the Swift 6 language mode
 1 | import Foundation
 2 |
 3 | public struct QueuedConstraintWrapper<T, E: Error>: QueuedConstraint {
   |               `- note: consider making generic struct 'QueuedConstraintWrapper' conform to the 'Sendable' protocol
 4 |
 5 |     public typealias InputType = T
   :
17 |     public func evaluate(with input: T, on queue: DispatchQueue, completionHandler: @escaping (Result<Void, Summary<E>>) -> Void) {
18 |         workQueue.async {
19 |             let result = constraint.evaluate(with: input)
   |                          `- warning: capture of 'self' with non-sendable type 'QueuedConstraintWrapper<T, E>' in a `@Sendable` closure; this is an error in the Swift 6 language mode
20 |             queue.async {
21 |                 completionHandler(result)
/Users/admin/builder/spi-builder-workspace/Sources/Constraints/QueuedConstraintWrapper.swift:19:52: warning: capture of 'input' with non-sendable type 'T' in a `@Sendable` closure; this is an error in the Swift 6 language mode
 1 | import Foundation
 2 |
 3 | public struct QueuedConstraintWrapper<T, E: Error>: QueuedConstraint {
   |                                       `- note: consider making generic parameter 'T' conform to the 'Sendable' protocol
 4 |
 5 |     public typealias InputType = T
   :
17 |     public func evaluate(with input: T, on queue: DispatchQueue, completionHandler: @escaping (Result<Void, Summary<E>>) -> Void) {
18 |         workQueue.async {
19 |             let result = constraint.evaluate(with: input)
   |                                                    `- warning: capture of 'input' with non-sendable type 'T' in a `@Sendable` closure; this is an error in the Swift 6 language mode
20 |             queue.async {
21 |                 completionHandler(result)
/Users/admin/builder/spi-builder-workspace/Sources/Constraints/QueuedConstraintWrapper.swift:21:17: warning: capture of 'completionHandler' with non-sendable type '(Result<Void, Summary<E>>) -> Void' in a `@Sendable` closure; this is an error in the Swift 6 language mode
19 |             let result = constraint.evaluate(with: input)
20 |             queue.async {
21 |                 completionHandler(result)
   |                 |- warning: capture of 'completionHandler' with non-sendable type '(Result<Void, Summary<E>>) -> Void' in a `@Sendable` closure; this is an error in the Swift 6 language mode
   |                 `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
22 |             }
23 |         }
/Users/admin/builder/spi-builder-workspace/Sources/Constraints/QueuedConstraintWrapper.swift:21:17: warning: capture of 'completionHandler' with non-sendable type '(Result<Void, Summary<E>>) -> Void' in a `@Sendable` closure; this is an error in the Swift 6 language mode
19 |             let result = constraint.evaluate(with: input)
20 |             queue.async {
21 |                 completionHandler(result)
   |                 |- warning: capture of 'completionHandler' with non-sendable type '(Result<Void, Summary<E>>) -> Void' in a `@Sendable` closure; this is an error in the Swift 6 language mode
   |                 `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
22 |             }
23 |         }
[19/34] Compiling Peppermint GroupConstraint+AllStrategy.swift
/Users/admin/builder/spi-builder-workspace/Sources/Constraints/QueuedConstraintWrapper.swift:19:26: warning: capture of 'self' with non-sendable type 'QueuedConstraintWrapper<T, E>' in a `@Sendable` closure; this is an error in the Swift 6 language mode
 1 | import Foundation
 2 |
 3 | public struct QueuedConstraintWrapper<T, E: Error>: QueuedConstraint {
   |               `- note: consider making generic struct 'QueuedConstraintWrapper' conform to the 'Sendable' protocol
 4 |
 5 |     public typealias InputType = T
   :
17 |     public func evaluate(with input: T, on queue: DispatchQueue, completionHandler: @escaping (Result<Void, Summary<E>>) -> Void) {
18 |         workQueue.async {
19 |             let result = constraint.evaluate(with: input)
   |                          `- warning: capture of 'self' with non-sendable type 'QueuedConstraintWrapper<T, E>' in a `@Sendable` closure; this is an error in the Swift 6 language mode
20 |             queue.async {
21 |                 completionHandler(result)
/Users/admin/builder/spi-builder-workspace/Sources/Constraints/QueuedConstraintWrapper.swift:19:52: warning: capture of 'input' with non-sendable type 'T' in a `@Sendable` closure; this is an error in the Swift 6 language mode
 1 | import Foundation
 2 |
 3 | public struct QueuedConstraintWrapper<T, E: Error>: QueuedConstraint {
   |                                       `- note: consider making generic parameter 'T' conform to the 'Sendable' protocol
 4 |
 5 |     public typealias InputType = T
   :
17 |     public func evaluate(with input: T, on queue: DispatchQueue, completionHandler: @escaping (Result<Void, Summary<E>>) -> Void) {
18 |         workQueue.async {
19 |             let result = constraint.evaluate(with: input)
   |                                                    `- warning: capture of 'input' with non-sendable type 'T' in a `@Sendable` closure; this is an error in the Swift 6 language mode
20 |             queue.async {
21 |                 completionHandler(result)
/Users/admin/builder/spi-builder-workspace/Sources/Constraints/QueuedConstraintWrapper.swift:21:17: warning: capture of 'completionHandler' with non-sendable type '(Result<Void, Summary<E>>) -> Void' in a `@Sendable` closure; this is an error in the Swift 6 language mode
19 |             let result = constraint.evaluate(with: input)
20 |             queue.async {
21 |                 completionHandler(result)
   |                 |- warning: capture of 'completionHandler' with non-sendable type '(Result<Void, Summary<E>>) -> Void' in a `@Sendable` closure; this is an error in the Swift 6 language mode
   |                 `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
22 |             }
23 |         }
/Users/admin/builder/spi-builder-workspace/Sources/Constraints/QueuedConstraintWrapper.swift:21:17: warning: capture of 'completionHandler' with non-sendable type '(Result<Void, Summary<E>>) -> Void' in a `@Sendable` closure; this is an error in the Swift 6 language mode
19 |             let result = constraint.evaluate(with: input)
20 |             queue.async {
21 |                 completionHandler(result)
   |                 |- warning: capture of 'completionHandler' with non-sendable type '(Result<Void, Summary<E>>) -> Void' in a `@Sendable` closure; this is an error in the Swift 6 language mode
   |                 `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
22 |             }
23 |         }
[20/34] Compiling Peppermint AnyConstraint.swift
/Users/admin/builder/spi-builder-workspace/Sources/Constraints/AsyncConstraintWrapper.swift:16:20: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
14 |
15 |     public func evaluate(with input: T) async -> Result<Void, Summary<E>> {
16 |         await Task {
   |                    `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
17 |             constraint.evaluate(with: input)
   |             |                         `- note: closure captures non-Sendable 'input'
   |             `- note: closure captures non-Sendable 'self'
18 |         }.value
19 |     }
[21/34] Compiling Peppermint AsyncConstraint.swift
/Users/admin/builder/spi-builder-workspace/Sources/Constraints/AsyncConstraintWrapper.swift:16:20: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
14 |
15 |     public func evaluate(with input: T) async -> Result<Void, Summary<E>> {
16 |         await Task {
   |                    `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
17 |             constraint.evaluate(with: input)
   |             |                         `- note: closure captures non-Sendable 'input'
   |             `- note: closure captures non-Sendable 'self'
18 |         }.value
19 |     }
[22/34] Compiling Peppermint AsyncConstraintWrapper.swift
/Users/admin/builder/spi-builder-workspace/Sources/Constraints/AsyncConstraintWrapper.swift:16:20: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
14 |
15 |     public func evaluate(with input: T) async -> Result<Void, Summary<E>> {
16 |         await Task {
   |                    `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
17 |             constraint.evaluate(with: input)
   |             |                         `- note: closure captures non-Sendable 'input'
   |             `- note: closure captures non-Sendable 'self'
18 |         }.value
19 |     }
[23/34] Compiling Peppermint OptionalConstraint.swift
[24/34] Compiling Peppermint PredicateConstraint.swift
[25/34] Compiling Peppermint RequiredConstraint.swift
[26/34] Compiling Peppermint CharacterSetPredicate.swift
[27/34] Compiling Peppermint DatePredicate.swift
[28/34] Compiling Peppermint EmailPredicate.swift
[29/34] Compiling Peppermint TypeConstraint.swift
[30/34] Compiling Peppermint Summary+Result.swift
[31/34] Compiling Peppermint Summary.swift
[32/34] Compiling Peppermint GroupConstraint+AnyStrategy.swift
[33/34] Compiling Peppermint GroupConstraint.swift
[34/34] Compiling Peppermint KeyPathConstraint.swift
Build complete! (29.49s)
Build complete.
{
  "dependencies" : [
    {
      "identity" : "swift-docc-plugin",
      "requirement" : {
        "range" : [
          {
            "lower_bound" : "1.1.0",
            "upper_bound" : "2.0.0"
          }
        ]
      },
      "type" : "sourceControl",
      "url" : "https://github.com/apple/swift-docc-plugin"
    }
  ],
  "manifest_display_name" : "Peppermint",
  "name" : "Peppermint",
  "path" : "/Users/admin/builder/spi-builder-workspace",
  "platforms" : [
  ],
  "products" : [
    {
      "name" : "Peppermint",
      "targets" : [
        "Peppermint"
      ],
      "type" : {
        "library" : [
          "automatic"
        ]
      }
    }
  ],
  "targets" : [
    {
      "c99name" : "PeppermintTests",
      "module_type" : "SwiftTarget",
      "name" : "PeppermintTests",
      "path" : "Tests",
      "sources" : [
        "Constraints/AsyncConstraintWrapperTests.swift",
        "Constraints/ConstraintBuilderTests.swift",
        "Constraints/ContratintTests.swift",
        "Constraints/QueuedConstraintWrapperTests.swift",
        "Constraints/Standard/BlockConstraintTests.swift",
        "Constraints/Standard/GroupConstraintTests.swift",
        "Constraints/Standard/OptionalConstraintTests.swift",
        "Constraints/Standard/PredicateConstraintTests.swift",
        "Constraints/Standard/RequiredConstraintTests.swift",
        "Constraints/Standard/TypeConstraintTests.swift",
        "Constraints/SummaryTests.swift",
        "Predicates/AnyPredicateTests.swift",
        "Predicates/Standard/BlockPredicateTests.swift",
        "Predicates/Standard/CharacterSetPredicateTests.swift",
        "Predicates/Standard/DatePredicateTests.swift",
        "Predicates/Standard/EmailPredicateTests.swift",
        "Predicates/Standard/LengthPredicateTests.swift",
        "Predicates/Standard/RangePredicateTests.swift",
        "Predicates/Standard/RegexPredicateTests.swift",
        "Predicates/Standard/RequiredPredicateTests.swift",
        "Predicates/Standard/URLPredicateTests.swift",
        "Shared/FakeError.swift",
        "Shared/FakePredicate.swift"
      ],
      "target_dependencies" : [
        "Peppermint"
      ],
      "type" : "test"
    },
    {
      "c99name" : "Peppermint",
      "module_type" : "SwiftTarget",
      "name" : "Peppermint",
      "path" : "Sources",
      "product_memberships" : [
        "Peppermint"
      ],
      "sources" : [
        "Constraints/AnyConstraint.swift",
        "Constraints/AsyncConstraint.swift",
        "Constraints/AsyncConstraintWrapper.swift",
        "Constraints/Constraint.swift",
        "Constraints/ConstraintBuilder.swift",
        "Constraints/QueuedConstraint.swift",
        "Constraints/QueuedConstraintWrapper.swift",
        "Constraints/Standard/BlockConstraint.swift",
        "Constraints/Standard/GroupConstraint+AllStrategy.swift",
        "Constraints/Standard/GroupConstraint+AnyStrategy.swift",
        "Constraints/Standard/GroupConstraint.swift",
        "Constraints/Standard/KeyPathConstraint.swift",
        "Constraints/Standard/OptionalConstraint.swift",
        "Constraints/Standard/PredicateConstraint.swift",
        "Constraints/Standard/RequiredConstraint.swift",
        "Constraints/Standard/TypeConstraint.swift",
        "Constraints/Summary+Result.swift",
        "Constraints/Summary.swift",
        "Predicates/AnyPredicate.swift",
        "Predicates/Predicate.swift",
        "Predicates/Standard/BlockPredicate.swift",
        "Predicates/Standard/CharacterSetPredicate.swift",
        "Predicates/Standard/DatePredicate.swift",
        "Predicates/Standard/EmailPredicate.swift",
        "Predicates/Standard/LengthPredicate.swift",
        "Predicates/Standard/RangePredicate.swift",
        "Predicates/Standard/RegexPredicate.swift",
        "Predicates/Standard/RequiredPredicate.swift",
        "Predicates/Standard/URLPredicate.swift"
      ],
      "type" : "library"
    }
  ],
  "tools_version" : "5.1"
}
Done.