From 25da780d38adb21380fe640f950eb6a1be0d501d Mon Sep 17 00:00:00 2001 From: Corey Date: Sat, 5 Feb 2022 10:49:03 -0500 Subject: [PATCH 01/12] feat: add Linux, Windows, and Android support --- .github/workflows/ci.yml | 70 +++++++++++++++++++ .gitignore | 1 + Package.swift | 11 +-- Papyrus.xcodeproj/project.pbxproj | 8 +-- Papyrus/Source/Logger.swift | 3 + Papyrus/Source/PapyrusStore.swift | 31 +++++++- .../CollectionObserverPublisher.swift | 2 + .../CollectionObserverSubscription.swift | 2 + .../Object/ObjectObserverPublisher.swift | 3 + .../Object/ObjectObserverSubscription.swift | 2 + Papyrus/Source/Queries/CollectionQuery.swift | 8 ++- Papyrus/Source/Queries/ObjectQuery.swift | 6 +- .../CollectionObserverPublisherTests.swift | 2 + .../Source/Tests/CollectionQueryTests.swift | 4 ++ .../Tests/ObjectObserverPublisherTests.swift | 2 + .../Source/Tests/ObjectQueryTests.swift | 4 ++ .../Source/Tests/PapyrusStoreTests.swift | 4 ++ 17 files changed, 150 insertions(+), 13 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 33afc68..d47cd9f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -32,3 +32,73 @@ jobs: if [ "`ls -A | grep -i \\.xcworkspace\$`" ]; then filetype_parameter="workspace" && file_to_build="`ls -A | grep -i \\.xcworkspace\$`"; else filetype_parameter="project" && file_to_build="`ls -A | grep -i \\.xcodeproj\$`"; fi file_to_build=`echo $file_to_build | awk '{$1=$1;print}'` xcodebuild test -scheme "$scheme" -"$filetype_parameter" "$file_to_build" -destination "platform=iOS Simulator,name=iPhone 13 Pro,OS=15.2" + - name: Prepare codecov + uses: sersoft-gmbh/swift-coverage-action@v2 + id: coverage-files + with: + format: lcov + search-paths: ./DerivedData + env: + DEVELOPER_DIR: ${{ env.CI_XCODE_13 }} + - name: Upload coverage to Codecov + uses: codecov/codecov-action@v2 + with: + files: ${{join(fromJSON(steps.coverage-files.outputs.files), ',')}} + env_vars: IOS + + spm-test: + runs-on: macos-latest + steps: + - uses: maxim-lobanov/setup-xcode@v1 + with: + xcode-version: latest-stable + - name: Checkout + uses: actions/checkout@v2 + - name: Build and Test + run: swift test --enable-code-coverage -v + - name: Prepare codecov + uses: sersoft-gmbh/swift-coverage-action@v2 + id: coverage-files + with: + format: lcov + search-paths: ./.build + env: + DEVELOPER_DIR: ${{ env.CI_XCODE_13 }} + - name: Upload coverage to Codecov + uses: codecov/codecov-action@v2 + with: + files: ${{join(fromJSON(steps.coverage-files.outputs.files), ',')}} + env_vars: SPM + + linux: + runs-on: ubuntu-18.04 + steps: + - uses: actions/checkout@v2 + - uses: sersoft-gmbh/SwiftyActions@v1 + with: + release-version: "5" + github-token: ${{ secrets.GITHUB_TOKEN }} + - name: Build and Test + run: swift test --enable-test-discovery --enable-code-coverage -v + - name: Prepare codecov + run: | + llvm-cov export -format="lcov" .build/x86_64-unknown-linux-gnu/debug/PapyrusPackageTests.xctest -instr-profile .build/x86_64-unknown-linux-gnu/debug/codecov/default.profdata > info_linux.lcov + - name: Upload coverage to Codecov + uses: codecov/codecov-action@v2 + with: + env_vars: LINUX + fail_ci_if_error: true + + windows: + runs-on: windows-2019 + steps: + - uses: actions/checkout@v2 + - uses: MaxDesiatov/swift-windows-action@v1 + with: + swift-version: "5.5.1" + shell-action: swift test --enable-test-discovery --enable-code-coverage -v + - name: Upload coverage to Codecov + uses: codecov/codecov-action@v2 + with: + env_vars: WINDOWS + diff --git a/.gitignore b/.gitignore index 4c3f3d9..310ce4d 100644 --- a/.gitignore +++ b/.gitignore @@ -10,6 +10,7 @@ xcuserdata profile *.moved-aside +.swiftpm DerivedData .idea/ *.hmap diff --git a/Package.swift b/Package.swift index bd22d3f..ef6e021 100644 --- a/Package.swift +++ b/Package.swift @@ -1,4 +1,4 @@ -// swift-tools-version:5.3 +// swift-tools-version:5.5 // The swift-tools-version declares the minimum version of Swift required to build this package. import PackageDescription @@ -7,8 +7,10 @@ import PackageDescription let package = Package( name: "Papyrus", platforms: [ - .iOS("15.0"), - .macOS("12.0") + .iOS(.v13), + .macOS(.v10_15), + .tvOS(.v13), + .watchOS(.v6) ], products: [ .library( @@ -24,7 +26,8 @@ let package = Package( .testTarget( name: "PapyrusTests", dependencies: ["Papyrus"], - path: "PapyrusTests" + path: "PapyrusTests", + exclude: ["Supporting Files/Info.plist"] ) ] ) diff --git a/Papyrus.xcodeproj/project.pbxproj b/Papyrus.xcodeproj/project.pbxproj index 2c62188..1306f0d 100644 --- a/Papyrus.xcodeproj/project.pbxproj +++ b/Papyrus.xcodeproj/project.pbxproj @@ -675,7 +675,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 12.0; + MACOSX_DEPLOYMENT_TARGET = 10.15; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; @@ -733,7 +733,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 12.0; + MACOSX_DEPLOYMENT_TARGET = 10.15; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; SDKROOT = iphoneos; @@ -762,7 +762,7 @@ "@executable_path/../Frameworks", "@loader_path/Frameworks", ); - MACOSX_DEPLOYMENT_TARGET = 12.0; + MACOSX_DEPLOYMENT_TARGET = 10.15; PRODUCT_BUNDLE_IDENTIFIER = com.reddavis.Papyrus; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = ""; @@ -791,7 +791,7 @@ "@executable_path/../Frameworks", "@loader_path/Frameworks", ); - MACOSX_DEPLOYMENT_TARGET = 12.0; + MACOSX_DEPLOYMENT_TARGET = 10.15; PRODUCT_BUNDLE_IDENTIFIER = com.reddavis.Papyrus; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = ""; diff --git a/Papyrus/Source/Logger.swift b/Papyrus/Source/Logger.swift index 87bdeeb..3a1565f 100644 --- a/Papyrus/Source/Logger.swift +++ b/Papyrus/Source/Logger.swift @@ -1,3 +1,5 @@ +#if !os(Linux) && !os(Android) && !os(Windows) + import Foundation import os.log @@ -75,3 +77,4 @@ public enum LogLevel: Int { extension LogLevel: Comparable { public static func <(lhs: LogLevel, rhs: LogLevel) -> Bool { lhs.rawValue < rhs.rawValue } } +#endif diff --git a/Papyrus/Source/PapyrusStore.swift b/Papyrus/Source/PapyrusStore.swift index 1166c55..1dcc2a4 100644 --- a/Papyrus/Source/PapyrusStore.swift +++ b/Papyrus/Source/PapyrusStore.swift @@ -1,4 +1,6 @@ +#if canImport(Combine) import Combine +#endif import Foundation @@ -7,18 +9,23 @@ import Foundation /// `PapyrusStore` aims to hit the sweet spot between saving raw API responses to the file system /// and a fully fledged database like Realm. public final class PapyrusStore { - + #if !os(Linux) && !os(Android) && !os(Windows) /// The verboseness of the logger. public var logLevel: LogLevel { get { self.logger.logLevel } set { self.logger.logLevel = newValue } } + #endif // Private private let fileManager = FileManager.default + #if canImport(Combine) private var cancellables: Set = [] + #endif private let url: URL + #if !os(Linux) && !os(Android) && !os(Windows) private let logger: Logger + #endif private let encoder = JSONEncoder() private let decoder = JSONDecoder() @@ -29,10 +36,12 @@ public final class PapyrusStore { /// - Parameter url: The `URL` to persist data to. public init(url: URL) { self.url = url + #if !os(Linux) && !os(Android) && !os(Windows) self.logger = Logger( subsystem: "com.reddavis.PapyrusStore", category: "PapyrusStore" ) + #endif self.setupDataDirectory() } @@ -55,7 +64,11 @@ public final class PapyrusStore { do { try self.createDirectoryIfNeeded(at: self.url) } catch { + #if !os(Linux) && !os(Android) && !os(Windows) self.logger.fault("Unable to create store directory: \(error)") + #else + print("Fault: Unable to create store directory: \(error)") + #endif } } @@ -93,7 +106,9 @@ public final class PapyrusStore { // Create directory try self.fileManager.createDirectory(at: url, withIntermediateDirectories: true, attributes: nil) + #if !os(Linux) && !os(Android) && !os(Windows) self.logger.debug("Created directory: \(url.absoluteString)") + #endif } } @@ -115,9 +130,11 @@ public extension PapyrusStore { self.save($0, filename: $0.filename) touchedDirectories.insert(self.directoryURL(for: $0.typeDescription)) } - + + #if !os(Linux) && !os(Android) && !os(Windows) // Touch all changed directories self.logger.debug("Touching directories: \(touchedDirectories)") + #endif let now = Date() touchedDirectories.forEach { @@ -142,9 +159,15 @@ public extension PapyrusStore { try self.createDirectoryIfNeeded(for: object.typeDescription) let data = try self.encoder.encode(object) try data.write(to: self.fileURL(for: object.typeDescription, filename: filename)) + #if !os(Linux) && !os(Android) && !os(Windows) self.logger.debug("Saved: \(object.typeDescription) [Filename: \(filename)]") + #endif } catch { + #if !os(Linux) && !os(Android) && !os(Windows) self.logger.fault("Failed to save: \(error)") + #else + print("Fault: Failed to save: \(error)") + #endif } } } @@ -217,12 +240,16 @@ public extension PapyrusStore { group.addTask { let url = self.fileURL(for: String(describing: type), id: id) try? self.fileManager.removeItem(at: url) + #if !os(Linux) && !os(Android) && !os(Windows) self.logger.debug("Deleted: \(url)") + #endif } } + #if !os(Linux) && !os(Android) && !os(Windows) // Touch all changed directories self.logger.debug("Touching directories: \(touchedDirectories)") + #endif let now = Date() for url in touchedDirectories { diff --git a/Papyrus/Source/Publishers/Collection/CollectionObserverPublisher.swift b/Papyrus/Source/Publishers/Collection/CollectionObserverPublisher.swift index 027e63f..ea9ca8b 100644 --- a/Papyrus/Source/Publishers/Collection/CollectionObserverPublisher.swift +++ b/Papyrus/Source/Publishers/Collection/CollectionObserverPublisher.swift @@ -1,3 +1,4 @@ +#if canImport(Combine) import Combine import Foundation @@ -22,3 +23,4 @@ struct CollectionObserverPublisher: Publisher where T: Papyrus { subscriber.receive(subscription: subscription) } } +#endif diff --git a/Papyrus/Source/Publishers/Collection/CollectionObserverSubscription.swift b/Papyrus/Source/Publishers/Collection/CollectionObserverSubscription.swift index e29181e..8898a00 100644 --- a/Papyrus/Source/Publishers/Collection/CollectionObserverSubscription.swift +++ b/Papyrus/Source/Publishers/Collection/CollectionObserverSubscription.swift @@ -1,3 +1,4 @@ +#if canImport(Combine) import Combine import Foundation @@ -69,3 +70,4 @@ where T.Input == [Output] { } } } +#endif diff --git a/Papyrus/Source/Publishers/Object/ObjectObserverPublisher.swift b/Papyrus/Source/Publishers/Object/ObjectObserverPublisher.swift index 256d860..1c0eeac 100644 --- a/Papyrus/Source/Publishers/Object/ObjectObserverPublisher.swift +++ b/Papyrus/Source/Publishers/Object/ObjectObserverPublisher.swift @@ -1,3 +1,5 @@ +#if canImport(Combine) + import Combine import Foundation @@ -28,3 +30,4 @@ struct ObjectObserverPublisher: Publisher where T: Papyrus & Equatable { subscriber.receive(subscription: subscription) } } +#endif diff --git a/Papyrus/Source/Publishers/Object/ObjectObserverSubscription.swift b/Papyrus/Source/Publishers/Object/ObjectObserverSubscription.swift index d2ba748..836e354 100644 --- a/Papyrus/Source/Publishers/Object/ObjectObserverSubscription.swift +++ b/Papyrus/Source/Publishers/Object/ObjectObserverSubscription.swift @@ -1,3 +1,4 @@ +#if canImport(Combine) import Combine import Foundation @@ -62,3 +63,4 @@ where T.Input == Output, } } } +#endif diff --git a/Papyrus/Source/Queries/CollectionQuery.swift b/Papyrus/Source/Queries/CollectionQuery.swift index a5b063a..e46a1d1 100644 --- a/Papyrus/Source/Queries/CollectionQuery.swift +++ b/Papyrus/Source/Queries/CollectionQuery.swift @@ -1,4 +1,6 @@ +#if canImport(Combine) import Combine +#endif import Foundation @@ -67,7 +69,8 @@ public class CollectionQuery where T: Papyrus { self.sort = onSort return self } - + + #if canImport(Combine) /// Observe changes to the query. /// - Returns: A publisher that emits values when /// valid objects are changed. @@ -78,7 +81,8 @@ public class CollectionQuery where T: Papyrus { .replaceError(with: []) .eraseToAnyPublisher() } - + #endif + /// Observe changes to the query. /// - Returns: A `AsyncThrowingStream` instance. public func stream() -> AsyncThrowingStream<[T], Error> { diff --git a/Papyrus/Source/Queries/ObjectQuery.swift b/Papyrus/Source/Queries/ObjectQuery.swift index d1a2557..67785f7 100644 --- a/Papyrus/Source/Queries/ObjectQuery.swift +++ b/Papyrus/Source/Queries/ObjectQuery.swift @@ -1,4 +1,6 @@ +#if canImport(Combine) import Combine +#endif import Foundation @@ -37,7 +39,8 @@ public class ObjectQuery { throw PapyrusStore.QueryError.invalidSchema(details: error) } } - + + #if canImport(Combine) /// Observe changes to the query via a publisher. /// - Returns: A publisher that emits values when /// valid objects are changed. @@ -48,6 +51,7 @@ public class ObjectQuery { ) .eraseToAnyPublisher() } + #endif /// Observe changes to the query via an async stream. /// - Returns: A `AsyncThrowingStream` instance. diff --git a/PapyrusTests/Source/Tests/CollectionObserverPublisherTests.swift b/PapyrusTests/Source/Tests/CollectionObserverPublisherTests.swift index 8688559..0c94dc6 100644 --- a/PapyrusTests/Source/Tests/CollectionObserverPublisherTests.swift +++ b/PapyrusTests/Source/Tests/CollectionObserverPublisherTests.swift @@ -1,3 +1,4 @@ +#if canImport(Combine) import Combine import XCTest @testable import Papyrus @@ -104,3 +105,4 @@ final class CollectionObserverPublisherTests: XCTestCase { self.waitForExpectations(timeout: 2.0) } } +#endif diff --git a/PapyrusTests/Source/Tests/CollectionQueryTests.swift b/PapyrusTests/Source/Tests/CollectionQueryTests.swift index 688f302..4c5fba5 100644 --- a/PapyrusTests/Source/Tests/CollectionQueryTests.swift +++ b/PapyrusTests/Source/Tests/CollectionQueryTests.swift @@ -1,4 +1,6 @@ +#if canImport(Combine) import Combine +#endif import XCTest @testable import Papyrus @@ -6,7 +8,9 @@ import XCTest final class CollectionQueryTests: XCTestCase { private var storeDirectory: URL! private let numberOfDummyObjects = 10 + #if canImport(Combine) private var cancellables: Set! + #endif // MARK: Setup diff --git a/PapyrusTests/Source/Tests/ObjectObserverPublisherTests.swift b/PapyrusTests/Source/Tests/ObjectObserverPublisherTests.swift index 0354fc0..ab61e7b 100644 --- a/PapyrusTests/Source/Tests/ObjectObserverPublisherTests.swift +++ b/PapyrusTests/Source/Tests/ObjectObserverPublisherTests.swift @@ -1,3 +1,4 @@ +#if canImport(Combine) import Combine import XCTest @testable import Papyrus @@ -183,3 +184,4 @@ extension ObjectObserverPublisherTests { ) } } +#endif diff --git a/PapyrusTests/Source/Tests/ObjectQueryTests.swift b/PapyrusTests/Source/Tests/ObjectQueryTests.swift index 3cb4b4f..4274377 100644 --- a/PapyrusTests/Source/Tests/ObjectQueryTests.swift +++ b/PapyrusTests/Source/Tests/ObjectQueryTests.swift @@ -1,4 +1,6 @@ +#if canImport(Combine) import Combine +#endif import XCTest @testable import Papyrus @@ -6,7 +8,9 @@ import XCTest final class ObjectQueryTests: XCTestCase { private let fileManager = FileManager.default private var storeDirectory: URL! + #if canImport(Combine) private var cancellables: Set! + #endif // MARK: Setup diff --git a/PapyrusTests/Source/Tests/PapyrusStoreTests.swift b/PapyrusTests/Source/Tests/PapyrusStoreTests.swift index 5850ae4..fd5393e 100644 --- a/PapyrusTests/Source/Tests/PapyrusStoreTests.swift +++ b/PapyrusTests/Source/Tests/PapyrusStoreTests.swift @@ -1,4 +1,6 @@ +#if canImport(Combine) import Combine +#endif import XCTest @testable import Papyrus @@ -7,7 +9,9 @@ final class PapyrusStoreTests: XCTestCase { private let fileManager = FileManager.default private var store: PapyrusStore! private var storeDirectory: URL! + #if canImport(Combine) private var cancellables: Set! + #endif // MARK: Setup From 38b862382857b0cfbf5a118b367f755d720f2e6b Mon Sep 17 00:00:00 2001 From: Corey Date: Sat, 5 Feb 2022 12:03:44 -0500 Subject: [PATCH 02/12] move OS's back up --- Package.swift | 8 ++++---- Papyrus.xcodeproj/project.pbxproj | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Package.swift b/Package.swift index ef6e021..fe20b49 100644 --- a/Package.swift +++ b/Package.swift @@ -7,10 +7,10 @@ import PackageDescription let package = Package( name: "Papyrus", platforms: [ - .iOS(.v13), - .macOS(.v10_15), - .tvOS(.v13), - .watchOS(.v6) + .iOS(.v15, + .macOS(.v12), + .tvOS(.v15), + .watchOS(.v8) ], products: [ .library( diff --git a/Papyrus.xcodeproj/project.pbxproj b/Papyrus.xcodeproj/project.pbxproj index 1306f0d..2c62188 100644 --- a/Papyrus.xcodeproj/project.pbxproj +++ b/Papyrus.xcodeproj/project.pbxproj @@ -675,7 +675,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.15; + MACOSX_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; @@ -733,7 +733,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.15; + MACOSX_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; SDKROOT = iphoneos; @@ -762,7 +762,7 @@ "@executable_path/../Frameworks", "@loader_path/Frameworks", ); - MACOSX_DEPLOYMENT_TARGET = 10.15; + MACOSX_DEPLOYMENT_TARGET = 12.0; PRODUCT_BUNDLE_IDENTIFIER = com.reddavis.Papyrus; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = ""; @@ -791,7 +791,7 @@ "@executable_path/../Frameworks", "@loader_path/Frameworks", ); - MACOSX_DEPLOYMENT_TARGET = 10.15; + MACOSX_DEPLOYMENT_TARGET = 12.0; PRODUCT_BUNDLE_IDENTIFIER = com.reddavis.Papyrus; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = ""; From 5908668f52b4d0a41a4600f5b35b4ad6b1b2d125 Mon Sep 17 00:00:00 2001 From: Corey Date: Sun, 20 Feb 2022 13:27:44 -0500 Subject: [PATCH 03/12] merge main --- Papyrus/Source/PapyrusStore.swift | 4 ---- 1 file changed, 4 deletions(-) diff --git a/Papyrus/Source/PapyrusStore.swift b/Papyrus/Source/PapyrusStore.swift index 25e886f..28a8de4 100644 --- a/Papyrus/Source/PapyrusStore.swift +++ b/Papyrus/Source/PapyrusStore.swift @@ -74,8 +74,6 @@ public final class PapyrusStore { } catch { #if !os(Linux) && !os(Android) && !os(Windows) self.logger.fault("Unable to create store directory: \(error)") - #else - print("Fault: Unable to create store directory: \(error)") #endif } } @@ -173,8 +171,6 @@ public extension PapyrusStore { } catch { #if !os(Linux) && !os(Android) && !os(Windows) self.logger.fault("Failed to save: \(error)") - #else - print("Fault: Failed to save: \(error)") #endif } } From 2b2360277332c805b013e21c172e9558700b5ca8 Mon Sep 17 00:00:00 2001 From: Corey Date: Sun, 20 Feb 2022 13:32:52 -0500 Subject: [PATCH 04/12] fix SPM build --- Package.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Package.swift b/Package.swift index fe20b49..eea7281 100644 --- a/Package.swift +++ b/Package.swift @@ -7,7 +7,7 @@ import PackageDescription let package = Package( name: "Papyrus", platforms: [ - .iOS(.v15, + .iOS(.v15), .macOS(.v12), .tvOS(.v15), .watchOS(.v8) From 874978562c3efb93b57c339c3e0df3902497b513 Mon Sep 17 00:00:00 2001 From: Corey Date: Sun, 20 Feb 2022 13:43:45 -0500 Subject: [PATCH 05/12] fix SPM build --- .github/workflows/ci.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d47cd9f..242b0a3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -49,9 +49,6 @@ jobs: spm-test: runs-on: macos-latest steps: - - uses: maxim-lobanov/setup-xcode@v1 - with: - xcode-version: latest-stable - name: Checkout uses: actions/checkout@v2 - name: Build and Test From 71f8c13b68b84a84e9beb839eb6601f7a9ee91c0 Mon Sep 17 00:00:00 2001 From: Corey Date: Sun, 20 Feb 2022 14:00:41 -0500 Subject: [PATCH 06/12] fix CI --- .github/workflows/ci.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 242b0a3..f40e297 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -49,6 +49,9 @@ jobs: spm-test: runs-on: macos-latest steps: + - uses: maxim-lobanov/setup-xcode@v1 + with: + xcode-version: latest-stable - name: Checkout uses: actions/checkout@v2 - name: Build and Test @@ -59,8 +62,6 @@ jobs: with: format: lcov search-paths: ./.build - env: - DEVELOPER_DIR: ${{ env.CI_XCODE_13 }} - name: Upload coverage to Codecov uses: codecov/codecov-action@v2 with: From 219325ce44f50e1ef2e6466dffeaeef9fd82501c Mon Sep 17 00:00:00 2001 From: Corey Date: Sun, 20 Feb 2022 14:04:52 -0500 Subject: [PATCH 07/12] try build again --- .github/workflows/ci.yml | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f40e297..2719458 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -5,6 +5,8 @@ on: branches: [ main ] pull_request: branches: [ main ] + env: + CI_XCODE_13: '/Applications/Xcode_13.2.1.app/Contents/Developer' jobs: build: @@ -49,9 +51,6 @@ jobs: spm-test: runs-on: macos-latest steps: - - uses: maxim-lobanov/setup-xcode@v1 - with: - xcode-version: latest-stable - name: Checkout uses: actions/checkout@v2 - name: Build and Test @@ -62,11 +61,15 @@ jobs: with: format: lcov search-paths: ./.build + env: + DEVELOPER_DIR: ${{ env.CI_XCODE_13 }} - name: Upload coverage to Codecov uses: codecov/codecov-action@v2 with: files: ${{join(fromJSON(steps.coverage-files.outputs.files), ',')}} env_vars: SPM + env: + DEVELOPER_DIR: ${{ env.CI_XCODE_13 }} linux: runs-on: ubuntu-18.04 From c4b6c07808840657cfac9248fd6338639eef7791 Mon Sep 17 00:00:00 2001 From: Corey Date: Sun, 20 Feb 2022 14:06:52 -0500 Subject: [PATCH 08/12] fix env --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2719458..89c24a9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -5,8 +5,8 @@ on: branches: [ main ] pull_request: branches: [ main ] - env: - CI_XCODE_13: '/Applications/Xcode_13.2.1.app/Contents/Developer' +env: + CI_XCODE_13: '/Applications/Xcode_13.2.1.app/Contents/Developer' jobs: build: From b86033ed68276dc0228ee604e681664aeb3176d8 Mon Sep 17 00:00:00 2001 From: Corey Date: Sun, 20 Feb 2022 14:11:29 -0500 Subject: [PATCH 09/12] remove codecov --- .github/workflows/ci.yml | 31 ++++++++++++++----------------- 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 89c24a9..7748b96 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -5,8 +5,6 @@ on: branches: [ main ] pull_request: branches: [ main ] -env: - CI_XCODE_13: '/Applications/Xcode_13.2.1.app/Contents/Developer' jobs: build: @@ -51,25 +49,24 @@ jobs: spm-test: runs-on: macos-latest steps: + - uses: maxim-lobanov/setup-xcode@v1 + with: + xcode-version: latest-stable - name: Checkout uses: actions/checkout@v2 - name: Build and Test run: swift test --enable-code-coverage -v - - name: Prepare codecov - uses: sersoft-gmbh/swift-coverage-action@v2 - id: coverage-files - with: - format: lcov - search-paths: ./.build - env: - DEVELOPER_DIR: ${{ env.CI_XCODE_13 }} - - name: Upload coverage to Codecov - uses: codecov/codecov-action@v2 - with: - files: ${{join(fromJSON(steps.coverage-files.outputs.files), ',')}} - env_vars: SPM - env: - DEVELOPER_DIR: ${{ env.CI_XCODE_13 }} +# - name: Prepare codecov +# uses: sersoft-gmbh/swift-coverage-action@v2 +# id: coverage-files +# with: +# format: lcov +# search-paths: ./.build +# - name: Upload coverage to Codecov +# uses: codecov/codecov-action@v2 +# with: +# files: ${{join(fromJSON(steps.coverage-files.outputs.files), ',')}} +# env_vars: SPM linux: runs-on: ubuntu-18.04 From e10ee64fae2bf33187e7c8e71abbcb3a4c11ff8c Mon Sep 17 00:00:00 2001 From: Corey Date: Sun, 20 Feb 2022 14:20:28 -0500 Subject: [PATCH 10/12] comment out SPM build --- .github/workflows/ci.yml | 20 ++++++++++---------- default.profraw | Bin 0 -> 33840 bytes 2 files changed, 10 insertions(+), 10 deletions(-) create mode 100644 default.profraw diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7748b96..c2c5847 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -46,16 +46,16 @@ jobs: files: ${{join(fromJSON(steps.coverage-files.outputs.files), ',')}} env_vars: IOS - spm-test: - runs-on: macos-latest - steps: - - uses: maxim-lobanov/setup-xcode@v1 - with: - xcode-version: latest-stable - - name: Checkout - uses: actions/checkout@v2 - - name: Build and Test - run: swift test --enable-code-coverage -v +# spm-test: +# runs-on: macos-latest +# steps: +# - uses: maxim-lobanov/setup-xcode@v1 +# with: +# xcode-version: latest-stable +# - name: Checkout +# uses: actions/checkout@v2 +# - name: Build and Test +# run: swift test --enable-code-coverage -v # - name: Prepare codecov # uses: sersoft-gmbh/swift-coverage-action@v2 # id: coverage-files diff --git a/default.profraw b/default.profraw new file mode 100644 index 0000000000000000000000000000000000000000..3d3f0d7d44dea29024c34a40b81260e4755550da GIT binary patch literal 33840 zcmd7ZWn2|q-#2_jxk=+SenW&AHF(esO>94#NfY zl%7!!sDE~$1~;z|VmED#X5zvB&`ZT;XfrS3rLC-yRbJ3jN3a zo@(`sz|%bb_xTR1|J#G{jDP?68Rqo42H;sB-&lg!A2ol`tiLG@KmTFCHzD>)t7c-2 zpUoeGe16EIG$Z!@1{qHdtCns7F9LbbHpE`AkxpZ@R7?_hDUc5qKrPtctmBA}vY!rF z!D=NW{>mMa{H--l65ur;ulEsgJ>~k{CIjcg6oA)5l5ZGptSO>+C&LkGZAai6k$95H#+2O>?lj=rk@#3X;uWV0=VF2HL*mD$u2`KX z!ZZSY6!M-sh{s2?Wi;Bi=HnOOXU@n6$CnQG^F{L}vNhnhkobvTE>G0i`Y!>GV*Ky< zr}PkUJ=9KwOk9pejlg3;9`r#Aj@PIZiNh++fE!p&bcP4@_ljg+!HSLz1D*!*Guw#k zag6%3-Mh3%13U}lx6rEpx*q`bG;dtFW{i(c2|VnKdVud0hdp>O@M#`+ek8s<#b#Ht z!vlVO5kcbV?}X)CCSs=r`BF&ytd~J2kAJBv@JdL0pRAOJ72WI;;5Cr=6E)oytcRKb z!0RFLUY{a-E=q90ukWUiSHeR){w}FRtxkRdTOi;1jC^ndll?-|PWvUNGVs-BcyPSd z@SN=Wsg0q#NEDPt$Tw0TuIH7HX?l{d(J{zxKO_G<1n#BFVhAy55CA^|`7Lb3`F%u2 zQ?_H(4#2NK-kJ%qM}Hr|Cgy|70Q?r@J(&@Evs%>B1ii;#xKQ>X-*|?f)Bcva_uWDs z>L;rw}=bW{(chVI_upSHYA}omO$)~pUdwL~s3V0$U`6So7mvVEhtAQs+ z;vbRTj;2&0JU`?`coBO_{xRB;(s%a2i$EUqK?}y;(gDWg^V*5I{#gTwzl=NJ)bdH}1mx=>@%giicAnoqQ~+;^#HU-*HNzx6tO9S1 z#7nMq9%5awhd&QGpW(svMN&@UTpv}~1CSp8c_l%_#|!giv)?5D#2etl&d3Mz!$QH> zH}6y-0pRn_@Zk8WB^Ta$hr1#Ceykdal(w1q8c4)Pn3_#KOv zEU}bCe!#aQ@pMafB1HQh!soX>B>tWVeN6AWl0A?=io{DFDoe6`;>ZAg2J&I@h>usJ ztk?t397*{2ubhz&&Ih7blvc%Prttgu{WCl`UT>=_KF&@S;DUNkO#k!zNfIuiN+_`v z2Rs(!xAYL#|E1oqV>!F48F(U)Z}_(d^*c5NS;zYe^Z`!;c|DWAJ*eMBC1eDL%R?P_ z7Rb{)MeOYpW^gS{hP8l)L0-fHvA@Obe6-$itiv`)4RB zxVJ9>fLc(GvF(en{`CO({ZAeeuhT00@QDQCT_vg6vbUd5`(x|^k7D-k`IhJ{Vn2Me&qJ$s1AKi@upsYQf!M!7Nz@@r zdt?Uki6Gxt`L_r2ZDNM%Wj7~{1mI~vKHuLSjKAQAULP;Auf)K!Kpyl#3w$-haIQ+y zJyozA2J#OO=N}0Nc2N6%fZq@ELmqaB*vm~-)z}Zb!~yvtkS9W|LHNA9Vw@Bc@n8@B zen|>R{hF8guM1Ok!RJpUBwmB$W>C{)e-o%j1Bpi?)MhnQ?d1Vp5ArZH#PuJF6VmT< zyTQlb6iL2Kc4k^~RK`1yZ;iwgMVR`u>vPZn?~KHsY_CN2c;|8h?+JM#9K`jP$QqU< zF_XCi9{_o4T*RJbS-N~@{tkTp4?CkC@CBjsU2FNReohbM=bhof`I%C~E1LBaj}-XQ zGd%ddbj;xIKP?NM0lx7J5At)LlTZ=y-7N>c{R|KCInH6wM}~fezYiY;9s}|CJiPZb z|4}#!3CN!T9xQ-bP>;Y1+Jv9c*Mh<76(s(|h+&2KzybdJxCQwzTEz8iNFTU<>Q0#j z`TLNcp-1eGyybpBwT^Sxh5BWY`#GXD_D^Fk#3qC)KAgSkf{n}uAAvgT}t<)JF11jL~hEXXs zYK$zX#~Jc^*AUkey3?dn))C1LyeH(9#1Z=k-Fc2*-+O!lKH!Xc!1>>nY$rY+c;y@L zVMzQW-jqfOzV!g`agZ00KwJ;YT*fQrQC?Qy(;&Zf7qO@Ey{#iir49dmEe}aOY^o2{ ziG#!NL4GOZ`=tNQhtG%VxF2Y8iN=9%N0QG{GN!9#zv}_x-{t34WfMlK1pErf*Ffxf%(3a%_PSGm--7(s8Gc6Y*ZDH@82IzlKF9|F zPz&l2Hp|{(mW|5Yj&hTJ=6-YT>C3r`i01tz_k`&_lGnd5Jy~)`vf#-*O zpA}-SEEVdy+oKO39}y(=lm(M!u;g)5fP5(=KAlyBBlxACE$~W6yn4SwTF;l3B;YlW z_>uGL=9ji3%z@W~e5u{v`wPBb4F|hKD}q$Tz&k^p#_ewp#(%W(tFaI3J$v9iA+Prg zv5&eOwD8b#9R5B(07?C9flW50du@3jKkN(-Uch!am&%9O%ERvuOV9A2e&L~RMfR}u zMyNqZtGboN{6D`}BFUG;QJM&%9D&bo?MVExS!KekK@0qP(Fgg)AjI{Y z>?K!M8fmhD`bUxE&(HY!DC~ZRU$18%zZHx)|K}BbQ5x;*_dxy%lKi2CzDq%D#|pr2 zf&5p9^8?EC-UxMLy8yqBB>(O6yPB^03U0uoJpK3lHWP_BzaL%aCRy`@7Vub*w~j{a zonux!KkNms15X5b&<8Czf4+<*NS?n^p$(RkLtZHnael5yObF(F0sQ(!gCu_^@lHer zh7kOGU;+8bi1T;N$EA7`tL}q(V33EUA@)fH1#+#o+u-^9kPpj1?2WV%i9e;P>41C@ zke`LvAJ+`i6K40oe}9((z8JA@(L2%`v@%Zy`AU%2JLSRkB1?c|0Pl6<0q}Z|FD?B$ zANZ!)fjfg+_+-FagL=vl`;qp6Td8;b|7U)Kd|3709-I&2#u#dpn~d=L?EuJI*CF=T zKVXc^yI?MYdcq(N`k)2*Nqz+{M^wIggXM9Mr&&atf3PN|{0VQu1Nbz^_nqORmc|s6 z_q$}UkdrgWyGH6R;`{9$^&`et07Ocir8b&2x-`CJ$VIu zBjjl|5c^3NrDh{Rk8R-FA&-Jpi}3x40JEbIy2;I1;QK&5*oghMh1(Oo+Pm=gC!-)A z1VAk~UX}@ap9jPW;PuZyeufEgen4a5{yi;+7a(p0@?p$~eXE?SVN{XS2Jl;uS7Jfz z-)ICL{OHYq`+dlJvLg1>aiJI)r1Cx>AI0K7-%pk}%A?giZdwK&3yCL+!$AvPj>rI> z2#MFY@+Q?S%@_XtB8R-EB;xwnV8<3Y8a?1}pwJ-652ii8{PpP}{QP8ry!Cy=`BcVL zTo2WUOF{iGB>9icG?RtAWz>M@N8;rU4ipp|Y~l5YAn|$XZ|sCGGCP5MDae=VAg*8U zQHtJPfM^}?N=WiAl6=G1jM;{(FQe zlKcZ&Mz*H;u6j_vH4;Baz(Jz$`Z4@@))|Sv*UOtb-lht_U-E>!^%KPP^TmEH8<%l{ z-){sU$;S((>uL?V0M8GDypkQ_e6q^q)@#jr@b@!uNb>!MM?Ysv4mgAHNrOC%2jYC? zpt(qc5JmX&MIMrT?LGVUi)9S(<5h~pKT^<77qVR!1oc!S@rQD-Xwe}Q_r{yB9$HtzgdN~mDG4T74w=P2L_k@nc zx#rrGfk(0Y&-4H2eT_atLJRo)9v0;LiV^42G)ym#U{1rY*F=z4dV|=X%Z#M#9omAQ z&*YFNszmIcg?}QuFpL@v>Zd_cf4{o##qsN(;pYzv@HL3@Z8*;v;eQQs0QoS;i_|0b zqf5(eYgMiA_X+%v*K0=XIjeV2CZ3&J1^FVN9Vw#hWjv6{62uLt?kF2ugPuP-mYL)$j|g4uE&ipA<=0%4}Si5Lf(1?v9I_- zo)m==0 zL->4Q-Fj%$YyH6j_!%ViyMFZ)sBm#h0DcAXTW91y^ESB6f42-ie{O+%bj0;=Y?11# zx?{uNSL_21J`ifbe1dYI@eam63x8jYV)gI&zYz~{euIfb)|K?b6%dC7dC&(f$d`JX zOO?QY4!_?Zf;B?4@{U*pEN0Lu}`I}NhRf{?BG>|W)Mx6it#{IBk6ap{c zSs))qi`a+b;&MGKNb3h426-4gVxMty`LbYiF#P(+kEH%LgM^-GQt6Q(Uj*`vXXNK^ zU2>y}7BK=|3V2q;_1FqUh!Z(%m;kSYq@HKfUaB?Pbny438jz>CjyT^9-+aq+k*XWy z>mkW6_8ARRwY(ewyeZ_jZXnK&8$KUmd@==pUu2CWKanHZWmO{r{`V@*NIdRwdcSAu zuV0`ZPsr0qBCcm-ZFk~FK_~qFHULTfRG#7w;pe8LAU_Q9O3H}ytEFGRuL*h=1AH8k zeA3LQesZz!3gFX_cwCD@Hkqa>V&LL_*hA5@6*oFxB}k}c_K^1o(g;MF)D`?{O>dSAm8Wkw?~5l;}$Je z`L40UuU}h8>No08B@vEcg@1qdk@)6E!M?bWEAZzL6zl(dzx~FZ%fa3@z(xiZX2{>qww9RbS!T)#{qua}P4n}0o=%gZc=&p+0n{vyPl_VX@z z?eQY~_X}qv^^@I{uAW&+0f!sK6VzXfIDh-?=S$C$6}iCp1e}qN34!Xv3pxRY&*ASg z8zCQ7jyON9ubWi8HZvXMw?n?~Jz`&gRaAO?|5X_9eP`4I&QIUFBYQQ^n$L-N&st)m6M8NAI@v}^-@}8F{-T`ll#CKf$ zg5u|w@f>(-B;Hdc`#{Z3sSJ2$$b0f2-rqW*WQTi>0xy8rciB|bNM;%z0v~{+ zo}#KJtvl$h@cBOsi4RRVW~^x!(gpc(khfMuTu(G$i?-)gF9&Sw0QF zpUFewV^*0@Ol&>ie?L%)%qzH#+r@qG0QFZR@k5RB6R23&e84wCUdaLR{;u@M2^0jC zJpjHPNxme*{KS_VOIyJAA@Qz>Wh|ep4F-W9MdEXw(y?9>b%(#tpF!dmn_aZ?E-J%+ z&s{;{U5N!@t;~3Npq?!xUKBrJcYxBS0{DH%Z&e{4PYxUn6(xD15#Uj5|MUF+cvd*R zZnXpc{DOtVdspdBGVy|}OWh_^pf)46|A*rW-Coqb$bA=3eek8uLkKHZo5-~hq z1oCNL{;mfV1U}RvuXc3d23;k{(`^0i&qJW>34_c>Q`RuxO(74vSdZ}fmF*BL$CSHZ z2)s3t`d_gs@lWBNgI_P4A>T-WI3FGNJ4R}Ps0+yV1fKeD5B4{F$S_2>rnV9IFeLQ| zD3j0YKi~QQd>rJr`2Wra_j{w99M;^chc|&wLz171d!=^WHl7yvJdiJhIDbx)yKm>b zTL$o@kk=DK>=k9tZFS3$z@Ja6k<@cNOhLq>I|)9YH$py5;_rMgo|3$A6=hr4L7<*K zB>D4w-EI^(=fLec$|w?_{5|$leQ}%!$e)3HnDO8Bfbrk4^!&wO<^lizRacPYtBgwT z)USMp*S`gM&nJlUzX{axy=u_E1nSvGlKh zcoxWuWc=+xet)nTe_1vs*c=50d8JIm{;<$7_-e&@W{}U1r2g+5vO)45QSk8>fqdT? z`7``I@y1H7cYXM8Io6UMU-KKCf?vE-PDo zF7SFt^0D9C%p+q%(kj0w4n_0 zJ&}0uVvhjYfD&rKaxifG&~i_xHHBKx;DLXf(ORBbZg#2Gt%;feQ)P9^``UfCry@6)ZTT1?#Dy^{3m@o1H!%PWMmy)BUqN zI|Q*$Z2Q_Jr&e~^&l3U7nh+0;5-B^_QJG~tAL0!Os z?*&*7THwHXupeMT1}*R)5A;C`jt^+T^3&~E>%q8z_29e!?dcq_9Qf1Q6Q14x>VxY9 zXaNKB1n7g72l@wS!E!KeV7x#d%pafy9$5?O1@jFu53YY;98P;M9-sy19cV$_U_EI6 z+s_9cg!{*NwB*BikNqhb#wtAAtw^1^WMO3yw1wC(wdC z(Eo4qfCu9WzW1PBkPG_%+gwmD*baOi=z|t~&gmA^1zKbtY!BRj+x~C210L)TXu;=! z^`QUXwx_oPeb9pO1pU)3SpVOC-dXPS{+xEF?-x$j0s6q5-v0lUKC=D%Kdtk>Jq}=; zz~`LqgXO2&({-QT4q5+n9;g?zXRSZI{B$2|e^wiQKKq>Wc>OC;+!rE5zS|AXmg(YR zd>x!psD>Bcan^>WKULTWjygJcAQr&ou*$pH^xJRmnMy8A$Lsoasgi>6>(#o8?lhd* zX^ZoQxq-02kXs)gDrTXDexT)ZW2WPsBBu?f;1FddpoDq5*C)Pi?x7(1-qWWN!ub+k z>$U`DecD5v?eUZBwyf)#+2d}@SXabrIE1A0#XIPWe|hk{FXH)a)_>8DA)+}C_069` zD?&wanqfqDx4CpE*#=*juZt1kyiu9-;Z?X1aZ}$|C2``R#5=D-LXYj~&VWkhpp|Wv z;ad#B4;C54HXE%&giy-R$M=Q4;3agogznklge_w+(T!niv(a%n$%uA)Z}d;9Z4it^ zn_`81kWQoztmm`w43~b}_CyFnyW&{wAOJ(+22ZfjQ8kK?ySeLFiqqK1i^!<& zy8KgK_gP6I9WQ9uJp38rdOl#;#-kfO64iOUJ4{jb1B|G3Y;$gG&^S@eirb7(WmSyi zgRE)!fYPd^%yH3=3Cc0wjFM8aru%U&JT46`D`Q>`D{oW@FWF=^6YNf>lRd7a;TwME z6}Xs_Y)l!W9;Zi|Hg1Z)J6=y%-%w}!OPcAU5c|DMbN)stvloW1n7j4Y{D&S#y80f6 z;Y&&eKfWiEvJ^bSAb;KQm2@o^o33rMi?Xpmp}9VBKbBdN5q6N0aDx`%@9C~`qM;L- zn6Z6|$7m5zmwvL2wW*tomUG&RQqT70=@q|eC~&8|ccP<%w}W-at4MV51Gi9$EH(S; z!}NxQ>Zg;z#&LHg8wm{2yWmEx%P#JmO1AU>Hb_hznK18L-w}w_?C|=1VKsVW9At zQAMTWzx^|&Ls6XyEq_jg)`n6h#{nkJx?yP_B^g}h3%5Jvl6dn*n_khK+`(QupHJM4 zkzG_o(H-5JOfm7$tmG}9iS_GuQZL+>n@u;-je1s9I`|0WtBoq|?>Zazv&~G;Ra~%o z=>8x-M~SUUacZTv09G|}YtqcxSw$SiRe+z$(!ELDL{m}wg?#5fbhA6uq5j`xC? z_clyoKsv#g7@bhFKhHp-(m`3rU$Kvp@-NV7Y6@~+f;PtlYho-wZUFTR*m@flz_?<@%Icm#@m_gW%F}dqGbaso9y9a ztt6Al9Z&k^L-~2SqN|3*%&dC$AGk<-Uy^-Lv3pZHhfb6A7i+an$>?<6(xv>TBxKXJ z=B=2yk1VI|a&-3liK)d#G9T#}{oKhU=uz?58d1g5SBo;}VT-}_RU#%PxhqbtpcK%C zf=7pUUYO>5Djse8zTVAD;^0fXl?CK8Ekf*9-~Ddt_>Ja$S=G_NlO{$!`g-oY^}R94 z2L2Zhs?~=YG-;Ch7hfa|-Z3X2&-E>HQ=ve;6@K>ud1NBSz`I8h=|x+isx>PThIo&c z_CIlo=WdAW@TgK=-223JC^z`b>DI{9VYBjH(43amz;)D=;z-LQ3L7;W5wRLv}wk;ZAr&%8$CLG~TsF3=!He~r{`61iR z!J@Ql11f*@lqXGB=at0pKoYr8$2GV27JGL{Ft%Czuo~N6VT8_O9P6$8LQ%+#JMR=a zuSR;#UU1=Y??LK{FYA{6N1gCH1Kw>*Qu@N|cYk~1R%j_ySknf$+<%yKwHpRka}9T3MzbZ?DPDF-KvRwt$}CJ)8-Yj(s##tXaudla~0fkjkHm*vQb=4t_j(;^V9C4qH(xv zm^3Zngg4x@Zt-MgtR_d`2;Lwo4wLfJ+t=CB_g( zV+j4*pKD0B^1r4Il9PTO>7;6|$;l4_eRQf4B35cohNG3uA3hi99vO)8M@iqs${i|l zG&bR-SG-g&&vlS=Db7s)YLxDmx@j$ICv<`ivGcn8kG-$guBQx}WM(G4d_dWEbcvv9 ztQd2-d|g+&rih!)QWP_lbB}5U*W{|`#%$f>@`ju}s?f|U!sTPl4r`Z5^jX+bnrpba z(E-61Qk1Sgb{JF35)G)}EaZ9;4C`Fpi4qiG@tk*LQZS}U9MVe~zI_$#?vJI%7at#) z=zCPqzc(4jrucQ@6esxjd>Hp~u8gxeIr@&OzrW^hoI^Bh*=FGvn9k#i@v`?PU__p| zC%$&u^t9=G`pmRMS6k0>GKbK;4te+yr;MuT@Zb}HLOOTJggpsMZt(TpZ&iiv9pkcY zu|`}jF_-h!vD=zfKXN2Bq8j+%xiyQ8RBQN9?~dPzdp_Er;FbH^#3yCTJ@)fcjF(b- z4Ju3L-!E)XDpfp-syP0s(Z>3qQ|0*M4_cfLxtCjWC?vR(!hL)iEhrPGT1w0ax~6CH zHm~C2b*@sSrG#L7qrJ5@F>Ex)JwG!^Sx}|jqS@uW!l~z{MZ+mWjAJ90!=3e&Wz(ov zzuYX!b4>K5{c{}ad*eyJU)NMPPxLrX1`hH1amYTSql+0GQIDj&^9++Mdjf-93^Ve( znSA)TcUD;2$*4z;%bZRUp_!lEY<{XmC?XK0`e-l6V{^H%X}&RcHvr6 z*s}Lk(W7OqGN!jgpj%(auXU^lew537H0SHnmDa}4dr|xj=ZDwLONxEw0bfY0gj&QD zA3TjsMz7;Ya=Z1cCHq6-r-9erG%Y7y_!uRHyU9@;BA*UpXmD5A__O=f)Mg#>!`G5t zbXf{ug)wv)!meJC zX1&+>Fk>XW_+{2R#;W^Tr9&Ze?A!(G^hOC}i*t4u+P7rZ?zCk@jgKC3^H~c%y=3_& zP4~IbgpBy2Z)ljE(&bu$Aj6;jI7JmP85dQzRWMh@@le&mY<+*M$ZhW9RGk~JG15}5 zr2Ii$e|?wq9*IPtylY9<=5`St$z!$hhFIU9_!G4TE^5J#o^SYyRJ46tUQ{iZ^0u(X zv6?F6C+8fRDda46s%Wia(SO}K9HJ04@kP{tv9^xJ1_QOB;ph<`-n@H)#qiBf-|(EV zlKrJ7zZ&70^*_4wIw`0Aepsx;WPXW%sN{nIo0-k_J{yHjO^=U0)4aI}#P6`@V@-K= zsrw=Yz7J(k;OEy}CC!v5m5gs)+N2Bd=v9g3H|%Du$7j5}uCV!K;ECeTVJR))FK-`D z=u02qR_jFNTENz2Ra3>uvr+eFIdEJAVq|;>dJ9_Rxz`Vie7l$5&Rs68?J2Mf3@iWj z6+a~9i;n90nyXZw=P}B!Q2CdY=fD4%calRz6pmJn)5k*S=%l!w5vyydBv4v2t+NtmASWSM-Ui^|3a1yRto;M(s(`2Sf zS{~o!BUR>1TV~%B7tq@6(Ck9oZP&CE%&4hc3gdgel5if@)$+5to_|v-LV?<;!K^=D z{=kZc`SQvI4O4e>(zQ$0uIpJ*p}UU7SKA9-sof0?N%bU`P2sEE!-~$-pXy`ZJ}TY& zCcF2GS-vt&aF8PP&xLU+=F6W8BhknCld|Q{GH6qj?4^%Cn+==p-jfjsL(i`)9Xojr zbFh18(6^E8mLXi7nfhDzRrwN5RvA;Uuv916J6%yt*7f)xw2XL?YmJGk!NnCt4Ji)> zBfM`E&eN%P4xhVl_w&1ipzo&qA(YFnY0R#$bL}|PITlZUe_LCl@@+akM1hhhc;KBU zHoGQ9e`V%#B0OnW>6I@Pzn{Y{^MCkh<2*s_EbigcvK@!BAlP5}2Iqo{POeMu!AV^F zg|H)r*zWgXuE)IJBwi}BtX#ErWEt3iEj?=qN zJli(8Ms896dvmdRj@1LR)-kK)1TE@c&nN$LFRhRv_^GEm6BWH8WGFxXTga8-k~TIa>I;zQeFhm0^y~H8#f&F-O+X#wF(7u?H0fRx`vJuU+O`kg!!5)ABed z?qoN+?omQsc&&(C#cY~c-GzP~)dnS&Wq>U-13l?WU2TcO7VK-tbdMwJka|@68`4Ph zF$xX~3D)#;<-J}X7#|ucngkG!C{G78(L{}li67&O?Jc%X5H9~2m&JeG(-D0v-z-~J zRyw!mhs6|x+jFm+4|UO6$J0PI`DmB@$>g)RRr-#U1oKUIVu{r#6woL}=NP z^s~=pZqG@kvtQ01CsQ3T7N>PQArDdc7&HfqOK+_D3JauPa2u$(eTDubw(&)`ciINe zM(=2}FuX~AVSChGJzf-hkN;+1{L{dq*OJ`h1mpxS?c&b!iQS%?vNoGUT`OV@7I_yo zBw*24xvhFGyn5%p|JQWRRpB(M4aI{ETXP8tG!{bTyxr9~-jp1%h$31gR?Yatrb_RzWl_2$sp?JZ;eZk)oxFOLe?x|@D$d0oq*NJQ{Q!!|Il~Q_OW_I zUw1q2_ufXsEpq8Ex;GemfAK`k&RR|5C;xNwqGYWy|J+|zoILIgl9y0%wZl?!7>K}^ zA57tZiLa547EyB^@8McxS`bK0$z~-LZNGa@(K|X}rZis1K3e=;En@7F&*y3SNYcKL zhz2kGxtx`xvXdTdt=7ihk40_zbk#zQGZ&t(sOu)KZ@O;l2W>N3_}Fw)R04b8<5>%3FOY06?pAUr;F4lMqh ztKP84W=ddcN0#R3SlR3W#UNdTMF+ZGDpr-i^fw(vEILu4A7peS=xhr3ZCCCzh2E+(3&XMjbp!5C zDvrw0VU)qtA{E;2^2;+5augSpurng(mv+{E;PQXF^in(ZIG-h(`FBd%QQXGPWs005 zJGy_P8Up%8!x_ z@yswHGXL3}{6##IG#%Gl`X|%evE;c5~G z&lnJYgF0<|T}~~e*rTUwQ0<(HUxj`4=Y3r@sjCbM*_I_X4=;WDhNGEkd?fzu*F*L~ zoR}Kzk+2S9rxO9{FxiXN3N=oVD~@{k>N{L|JIQQMxc5z74Y_doSz`r>(y%-ZPc5an z!X48GTjZu5mw*BT>Pm59hq;61<^=f>R82fL zEq1oql%B6YZhy?b_od<7Gn30kI;vmT?!@e#lN&R#nlf#=7|Zn@MOWDQ_~iUQkAU^B z{(Z$8^3V^tnEQdNj+c;#L|HjJ!;)iOK}N~^;Z=Vo4@Io-QHizCA=7&%B|VIq9xuV@PnMm|*D4nO)W6MN%|aYpCb+=L{+;nvdDyi% zPh;-hz<}QKm3oD$5oi(1^M+TW>c3}eNsm`J6>k;DFps({cA1HUJ>I%MfX#k5&wGWi zN2Go=4F58{u3RHYydFR)1FK+a**@b)8|9O5V=;7tX`S&|P z0%=YzR>vEh9bNLAB}GMeJwHONe>xgIXv)kXEpBR@Lic@ z!<|eX=k=yF67x}C{y7+b-hKYHqm|ahQeB+w(hfL0pX9Lrysj{L(3Ic&mV-N&H`6(n z!upai{+CNzx~P!;HsiFVvwZ?-_R>;pc0v~E;HfC5?sB*@5YJKIIk@E7) zN8=cr?b_a@$d?taMlJ>EBxQ!d2YzIm2dFhPrVNt#1PNO*73fj;5rqXRQgk|ZM1SrI zOScV3JSbKZQScP@GTPUgxm|Z7(d-f*g&qg{oAds*ZSGF1u9KMxrM7VvJUym*Pjw7Q z{i2jju5Gh)a$SAnaZYni$Eoa`#(x+@?EkYt#6t-!6>0CF{_xL3i<#h)M3=c(V`QauI6?HUxWq*Qd5 z1%(d*1?l0WwUUQ ziAHEM_bM`6I8i?eHdGXJX|OZZBxu9p#BpA``T^OE0xqxIM5&<)g-&s?WHggORQFNF zyW(jDfn_g3Yb(b+hZ!wU2w&Xum-MuDWqFe7hZ?`Bn?Ko>lo;AC9MM_zO`?BEt1a=_ zPz&m#gzCG>tVF#cp5OE>{P7<#l$48MdQqRSuIZo?2C`@_Pc%C|0ygHJWN^Xmfm-BEsdupN@BqUGpTk`Lc) zt)ZfHpSwkju9C1?!0=4)O-p5uih}DN!Q-2&nhP}l+*VFSPbkd)xvi|&Z2rk)Mohfh zlZ8!8Qc=X}U&vyUTO58-QmFCZ>j>wZHZ6TMO#5yM|NKekArHY4u@9aCr7gz`ZsuBV z-Hw^SE%ZU2CM(a;#UhH}zE{0=VK)P6E}^~neYc6C{2}XRFE3U({&9?xeg5%Ahv|>Q z7MRSVuR?f1Ea8E;5l-*i2nZ zkk4>FcCz(SuPS`x#VnOsI--MXP)oI5!ZYCLR(g><=cNHq2cdtMwht$5e)M4VMM}7;F{vF~x9~RvuHlCK^IJuPvZD8&R|n;rbLAGIaXS_yFdI2C_FBIF=>8#7+3^>% z6BADd;y9QDE#01c^Vn;s`;wjZc2c7>Yop2YLHV~xc9W)r)dY3+%r62vvw@Y~tIxlX zS=LM0n~-DvripG-f5IbZ@vJ2!G5MKAgVFrA5)PbWE!u>uL(D|IYt-C$g$&~72qMQw zx>bUgVK{vjB(3}}^)`I-SctkDa-Xbasp^{rq~C{P2DU^8TyA( zwws@5zfIiJC3zJWe8t|dhJAu>wKASth>zp@n`x9=sZ+Qr*zdAstn1dTWvUK6x@T7m z%X5l)Tz~z#bD_l``NmYXb)(%m+QgRGhI3rMm=B`~JN_Av`|@^w-lbgmGc7TmlYPU7 z^||u70_!m4MOwXEQgI9#JDZdaYd@4s7Vh2ox?wrp`TnTXK-%|h4udL;EA4z!c3d>gW?;S7NZCpLN5T!>V@gYD9Ki|mKae)6`$U*lWf^7xH67s)z@29kYt ztuXZVt~H^0KFwRHTzY|Z<+^^q_R7A+9RJHr402x-f@g%jl@lI#RD^#X_8PrM{Rktm z(Zr`8PzWf!FewcV)cIU~i`^mY2#v(tss`2T0d*PlxV9e4n4u7CNFQ^1(CX2 zCVWLDD;0;YujL1>6Xx91z$)i)6?`f^8#fTK_DoeuDZ_L(qPM!)&3Hz#=Ue4r!9ixl z)z{Y33@17Pp#i(@gqt0eTxO+I*)Bp!rh}v*_cmiaA#eY2}z#)<57# zb!kXBBm^j-s46`#w5$nCjX!sVGlV%=Z9C_o`w@}4&T~sI^VKij8;(!1z4a~$54hKP z|H44WLXRArp|St`ioi!m&832+fJ1m>Ep4(uoO{iJ0Cjj!)BGk`a53i>!tax^f!is8 zk8&e0Y-iN8ipwU~9eyTKGZS9YHPXHL$yQ$fkgeguMjGGE+MD|{UA;G6gsA(NNLI=3 zOC?_JDlJAY>~`V_)(sgEl%Vg7a_CBxnV`<=Z^vt(KmO;a{drOF=cxJRo@6i6d0n|( zuP-E6oIK+p$@>?TZ*nP^`*a(b?@4WZqp!cFMIS+vWfL3L+iWeM z?4}pZn}XF#GmUkOA8^$&LY#AOXNO(t==y>T5$rksi?^B-S+~Y7e7Kj*7>yp__}%+Z zVP|dL?Pd24O8Z-`XB8r$(mb7kN0bBFGY_8{5Z3I(2i2oj=JXU>Wh7!(PX4@w*D__Z z*F(;NkwJa+mN%M1y>+Po!kqp5inoMTcWfSS7Kf7jsM_q5c zm^jqK>RC?3yCIm%SZYLgr8QsqU=6)sWlO5C`JxzZj_$8J^j+-r#)(ll3+IW_B-_VX zyoY*yUnmkcrOPm0;2rvjNxnMbPkh-9%^~=y&xYA(TvyXd5UO$&B^ihG)z*3M%C9wh z^kyhz59K{e&Nc0>4@Jfnnj3t^9M}}%NyKAb4Q)<%P3qp1V*0Xe{gb-O$N8@303y*JW z*umvr?$>I*?yYlrD>hNRHqopZ$&=xxd*tQH;W@Q)0jrF?QFXm+hv_g^Fx)p$;+A+} zoum2jCtr->m=ctup%*#DT0-ewve`QX@4`MQW|@Tv`;Y|xIRl0s$lw2SRk(5zWFpljGue}_8EiNs=Xx)eoOULDU_uIYktYM$xiCsC9-=zJ- zs8;KF5lCvZr}7T9qW915#+oOSifK<_q!n2+&+dGSnMftPAvJ*3GkCl6=VE@dWgV9O z*wK$DU~>Lp%fP8Zx&GtlDjxZBaB|Na{Tfy|JTPz%($!p$fL!+}Z@ z`;eu0AqCNGWwy25t3P{~h0bX$B!$MxccA|{9`RFFf4-58|9bg@PbspLBCcTnyYV>p@B z`0Uqlc!(BUYuG6WPdr*CRB{cEri^c%SvAA zdvsVN>#S(e@HT@R&vIFoSl+H`mUamj zOW9$-9OAMV?&jy9CRRqda&Y(J@qMBcO1BMNZ&&3blAo?j*^UqGD8{}yO=-Oryshc^ zJ!tW!Ve~cHs77;*o85OtWNz6Tm`la*#yXV`F?}QDd}(pv`-<8WSxE_Qwbx`;rB)D* zOV_k#2wmW2qvC-j%GbJcq4i}+Qy2&7(?9axPB(^RR!%pe^t<7jZgN_?T6s;l;rb0< zT6UheLheCw_vV*{iagtDg<$Eay*H88@~zj=zOJDs?JDAv5E!Bs6>p}RLtxpJ`B zKFG9@`^}m9ni8TU$6dU*ptR|*kz^Hl>-Qs>JscX_mlw1JC?Nw z3u5#eFLKNAgBktf`(6Ai(+!@Qy+*yK^5V7rCjIvG)LW-5cZTV@i6&f+zRz#yYj;Hl z4`1?-#q(Z!Ocb2)(UZW=m)k=1qu~^Hn~BFfBR%(Aqk@%ts>EP05!!1)R$X4qYY9PQ g76D}4EkQTM0xI3m`PzbRzC1y7BUJwi{ej;92g|Y(@c;k- literal 0 HcmV?d00001 From 0afb89019d72796d640867658e7bd7f29724feb0 Mon Sep 17 00:00:00 2001 From: Corey Date: Sun, 20 Feb 2022 14:21:57 -0500 Subject: [PATCH 11/12] comment out linux and windows build --- .github/workflows/ci.yml | 60 ++++++++++++++++++++-------------------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c2c5847..2cf762a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -68,35 +68,35 @@ jobs: # files: ${{join(fromJSON(steps.coverage-files.outputs.files), ',')}} # env_vars: SPM - linux: - runs-on: ubuntu-18.04 - steps: - - uses: actions/checkout@v2 - - uses: sersoft-gmbh/SwiftyActions@v1 - with: - release-version: "5" - github-token: ${{ secrets.GITHUB_TOKEN }} - - name: Build and Test - run: swift test --enable-test-discovery --enable-code-coverage -v - - name: Prepare codecov - run: | - llvm-cov export -format="lcov" .build/x86_64-unknown-linux-gnu/debug/PapyrusPackageTests.xctest -instr-profile .build/x86_64-unknown-linux-gnu/debug/codecov/default.profdata > info_linux.lcov - - name: Upload coverage to Codecov - uses: codecov/codecov-action@v2 - with: - env_vars: LINUX - fail_ci_if_error: true +# linux: +# runs-on: ubuntu-18.04 +# steps: +# - uses: actions/checkout@v2 +# - uses: sersoft-gmbh/SwiftyActions@v1 +# with: +# release-version: "5" +# github-token: ${{ secrets.GITHUB_TOKEN }} +# - name: Build and Test +# run: swift test --enable-test-discovery --enable-code-coverage -v +# - name: Prepare codecov +# run: | +# llvm-cov export -format="lcov" .build/x86_64-unknown-linux-gnu/debug/PapyrusPackageTests.xctest -instr-profile .build/x86_64-unknown-linux-gnu/debug/codecov/default.profdata > info_linux.lcov +# - name: Upload coverage to Codecov +# uses: codecov/codecov-action@v2 +# with: +# env_vars: LINUX +# fail_ci_if_error: true - windows: - runs-on: windows-2019 - steps: - - uses: actions/checkout@v2 - - uses: MaxDesiatov/swift-windows-action@v1 - with: - swift-version: "5.5.1" - shell-action: swift test --enable-test-discovery --enable-code-coverage -v - - name: Upload coverage to Codecov - uses: codecov/codecov-action@v2 - with: - env_vars: WINDOWS +# windows: +# runs-on: windows-2019 +# steps: +# - uses: actions/checkout@v2 +# - uses: MaxDesiatov/swift-windows-action@v1 +# with: +# swift-version: "5.5.1" +# shell-action: swift test --enable-test-discovery --enable-code-coverage -v +# - name: Upload coverage to Codecov +# uses: codecov/codecov-action@v2 +# with: +# env_vars: WINDOWS From 009495ca01d82f202963b93943f9ad75f9500cea Mon Sep 17 00:00:00 2001 From: Corey Date: Sun, 20 Feb 2022 14:22:45 -0500 Subject: [PATCH 12/12] remove files that shouldn't have been uploaded --- default.profraw | Bin 33840 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 default.profraw diff --git a/default.profraw b/default.profraw deleted file mode 100644 index 3d3f0d7d44dea29024c34a40b81260e4755550da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33840 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