Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
188 changes: 55 additions & 133 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,16 @@ on:
- "Source/**"
- "Tests/**"

permissions:
contents: read

concurrency:
group: typhoon-${{ github.head_ref }}
cancel-in-progress: true

env:
SCHEME_NAME: "Typhoon"

jobs:
SwiftLint:
runs-on: ubuntu-latest
Expand All @@ -24,37 +34,8 @@ jobs:
args: --strict
env:
DIFF_BASE: ${{ github.base_ref }}
macOS:
name: ${{ matrix.name }}
runs-on: ${{ matrix.runsOn }}
env:
DEVELOPER_DIR: "/Applications/${{ matrix.xcode }}.app/Contents/Developer"
timeout-minutes: 20
strategy:
fail-fast: false
matrix:
include:
- xcode: "Xcode_26.0.1"
runsOn: macOS-26
name: "macOS 26, Xcode 26.0, Swift 6.2.0"
- xcode: "Xcode_16.1"
runsOn: macOS-14
name: "macOS 14, Xcode 16.1, Swift 6.0.2"
- xcode: "Xcode_15.4"
runsOn: macOS-14
name: "macOS 14, Xcode 15.4, Swift 5.10"
steps:
- uses: actions/checkout@v5
- name: ${{ matrix.name }}
run: xcodebuild test -scheme "Typhoon" -destination "platform=macOS" clean -enableCodeCoverage YES -resultBundlePath "test_output/${{ matrix.name }}.xcresult" || exit 1
- name: Upload test coverage reports to Codecov
uses: space-code/oss-common-actions/.github/actions/upload_test_coverage_report@main
with:
scheme_name: Typhoon
filename: ${{ matrix.name }}
token: ${{ secrets.CODECOV_TOKEN }}

iOS:
test-apple-platforms:
name: ${{ matrix.name }}
runs-on: ${{ matrix.runsOn }}
env:
Expand All @@ -64,100 +45,45 @@ jobs:
fail-fast: false
matrix:
include:
- destination: "OS=26.0.1,name=iPhone 17 Pro"
xcode: "Xcode_26.0.1"
runsOn: macOS-26
name: "OS=26.0, Xcode 26.0, Swift 6.2.0"
- destination: "OS=18.1,name=iPhone 16 Pro"
name: "iOS 18.1"
xcode: "Xcode_16.1"
runsOn: macOS-14
- destination: "OS=17.4,name=iPhone 15 Pro"
name: "iOS 17.4"
xcode: "Xcode_15.3"
runsOn: macos-14
steps:
- uses: actions/checkout@v5
- name: ${{ matrix.name }}
run: xcodebuild test -scheme "Typhoon" -destination "${{ matrix.destination }}" clean -enableCodeCoverage YES -resultBundlePath "test_output/${{ matrix.name }}.xcresult" || exit 1
- name: Upload test coverage reports to Codecov
uses: space-code/oss-common-actions/.github/actions/upload_test_coverage_report@main
with:
scheme_name: Typhoon
filename: ${{ matrix.name }}
token: ${{ secrets.CODECOV_TOKEN }}
# macOS
- { platform: macOS, name: "macOS 26, Xcode 26.0, Swift 6.2.0", xcode: "Xcode_26.0.1", runsOn: macOS-26, destination: "platform=macOS" }
- { platform: macOS, name: "macOS 14, Xcode 16.1, Swift 6.0.2", xcode: "Xcode_16.1", runsOn: macOS-14, destination: "platform=macOS" }
- { platform: macOS, name: "macOS 14, Xcode 15.4, Swift 5.10", xcode: "Xcode_15.4", runsOn: macOS-14, destination: "platform=macOS" }

tvOS:
name: ${{ matrix.name }}
runs-on: ${{ matrix.runsOn }}
env:
DEVELOPER_DIR: "/Applications/${{ matrix.xcode }}.app/Contents/Developer"
timeout-minutes: 20
strategy:
fail-fast: false
matrix:
include:
- destination: "OS=26.0,name=Apple TV"
xcode: "Xcode_26.0.1"
runsOn: macOS-26
name: "tvOS 26.0"
- destination: "OS=18.1,name=Apple TV"
name: "tvOS 18.1"
xcode: "Xcode_16.1"
runsOn: macOS-14
- destination: "OS=17.4,name=Apple TV"
name: "tvOS 17.4"
xcode: "Xcode_15.3"
runsOn: macos-14
steps:
- uses: actions/checkout@v5
- name: ${{ matrix.name }}
run: xcodebuild test -scheme "Typhoon" -destination "${{ matrix.destination }}" clean -enableCodeCoverage YES -resultBundlePath "test_output/${{ matrix.name }}.xcresult" || exit 1
- name: Upload test coverage reports to Codecov
uses: space-code/oss-common-actions/.github/actions/upload_test_coverage_report@main
with:
scheme_name: Typhoon
filename: ${{ matrix.name }}
token: ${{ secrets.CODECOV_TOKEN }}
# iOS
- { platform: iOS, name: "iOS 26.0, Xcode 26.0, Swift 6.2.0", xcode: "Xcode_26.0.1", runsOn: macOS-26, destination: "OS=26.0.1,name=iPhone 17 Pro" }
- { platform: iOS, name: "iOS 18.1", xcode: "Xcode_16.1", runsOn: macOS-14, destination: "OS=18.1,name=iPhone 16 Pro" }
- { platform: iOS, name: "iOS 17.4", xcode: "Xcode_15.3", runsOn: macOS-14, destination: "OS=17.4,name=iPhone 15 Pro" }

watchOS:
name: ${{ matrix.name }}
runs-on: ${{ matrix.runsOn }}
env:
DEVELOPER_DIR: "/Applications/${{ matrix.xcode }}.app/Contents/Developer"
timeout-minutes: 20
strategy:
fail-fast: false
matrix:
include:
- destination: "OS=26.0,name=Apple Watch Ultra 3 (49mm)"
xcode: "Xcode_26.0.1"
runsOn: macOS-26
name: "watchOS 26.0"
- destination: "OS=11.1,name=Apple Watch Series 10 (46mm)"
name: "watchOS 11.1"
xcode: "Xcode_16.1"
runsOn: macOS-14
- destination: "OS=10.5,name=Apple Watch Series 9 (45mm)"
name: "watchOS 10.5"
xcode: "Xcode_15.3"
runsOn: macOS-14
- destination: "OS=10.4,name=Apple Watch Series 9 (45mm)"
name: "watchOS 10.4"
xcode: "Xcode_15.3"
runsOn: macos-14
# tvOS
- { platform: tvOS, name: "tvOS 26.0", xcode: "Xcode_26.0.1", runsOn: macOS-26, destination: "OS=26.0,name=Apple TV" }
- { platform: tvOS, name: "tvOS 18.1", xcode: "Xcode_16.1", runsOn: macOS-14, destination: "OS=18.1,name=Apple TV" }
- { platform: tvOS, name: "tvOS 17.4", xcode: "Xcode_15.3", runsOn: macOS-14, destination: "OS=17.4,name=Apple TV" }

# watchOS
- { platform: watchOS, name: "watchOS 26.0", xcode: "Xcode_26.0.1", runsOn: macOS-26, destination: "OS=26.0,name=Apple Watch Ultra 3 (49mm)" }
- { platform: watchOS, name: "watchOS 11.1", xcode: "Xcode_16.1", runsOn: macOS-14, destination: "OS=11.1,name=Apple Watch Series 10 (46mm)" }
- { platform: watchOS, name: "watchOS 10.5", xcode: "Xcode_15.3", runsOn: macOS-14, destination: "OS=10.5,name=Apple Watch Series 9 (45mm)" }
- { platform: watchOS, name: "watchOS 10.4", xcode: "Xcode_15.3", runsOn: macOS-14, destination: "OS=10.4,name=Apple Watch Series 9 (45mm)" }
steps:
- uses: actions/checkout@v5
- name: ${{ matrix.name }}
run: xcodebuild test -scheme "Typhoon" -destination "${{ matrix.destination }}" clean -enableCodeCoverage YES -resultBundlePath "test_output/${{ matrix.name }}.xcresult" || exit 1
- name: Upload test coverage reports to Codecov
- name: Checkout code
uses: actions/checkout@v5
- name: Run tests - ${{ matrix.name }}
run: |
xcodebuild test \
-scheme "${{ env.SCHEME_NAME }}" \
-destination "${{ matrix.destination }}" \
-enableCodeCoverage YES \
-resultBundlePath "test_output/${{ matrix.name }}.xcresult" \
clean || exit 1
- name: Upload test coverage to Codecov
uses: space-code/oss-common-actions/.github/actions/upload_test_coverage_report@main
with:
scheme_name: Typhoon
scheme_name: ${{ env.SCHEME_NAME }}
filename: ${{ matrix.name }}
token: ${{ secrets.CODECOV_TOKEN }}

spm:
spm-build:
name: ${{ matrix.name }}
runs-on: ${{ matrix.runsOn }}
env:
Expand All @@ -167,37 +93,33 @@ jobs:
fail-fast: false
matrix:
include:
- destination: "macOS 26, SPM 6.2.0 Test"
xcode: "Xcode_26.0.1"
runsOn: macOS-26
- destination: "macOS 15, SPM 6.0.2 Test"
xcode: "Xcode_16.0"
runsOn: macOS-15
- name: "macOS 14, SPM 6.0.2 Test"
xcode: "Xcode_16.1"
runsOn: macOS-14
- name: "macOS 14, SPM 5.10.0 Test"
xcode: "Xcode_15.3"
runsOn: macos-14
- { name: "macOS 26, SPM 6.2.0", xcode: "Xcode_26.0.1", runsOn: macOS-26 }
- { name: "macOS 15, SPM 6.0.2", xcode: "Xcode_16.0", runsOn: macOS-15 }
- { name: "macOS 14, SPM 6.0.2", xcode: "Xcode_16.1", runsOn: macOS-14 }
- { name: "macOS 14, SPM 5.10.0", xcode: "Xcode_15.3", runsOn: macOS-14 }
steps:
- uses: actions/checkout@v5
- name: ${{ matrix.name }}
- name: Checkout code
uses: actions/checkout@v5
- name: Build with Swift Package Manager - ${{ matrix.name }}
run: swift build -c release

merge-test-reports:
needs: [iOS, macOS, watchOS, tvOS]
needs: test-apple-platforms
runs-on: macos-15
steps:
- name: Download artifacts
uses: actions/download-artifact@v6
with:
path: test_output

- run: xcrun xcresulttool merge test_output/**/*.xcresult --output-path test_output/final/final.xcresult
- name: Upload Merged Artifact

- name: Upload merged test results
uses: actions/upload-artifact@v5
with:
name: MergedResult
name: MergedTestResults
path: test_output/final
retention-days: 30

discover-typos:
name: Discover Typos
Expand Down
2 changes: 1 addition & 1 deletion .swiftformat
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Stream rules

--swiftversion 5.3
--swiftversion 5.10

# Use 'swiftformat --options' to list all of the possible options

Expand Down
2 changes: 0 additions & 2 deletions .swiftlint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ disabled_rules:
- opening_brace

opt_in_rules: # some rules are only opt-in
- anyobject_protocol
- array_init
- attributes
- closure_body_length
Expand Down Expand Up @@ -44,7 +43,6 @@ opt_in_rules: # some rules are only opt-in
- ibinspectable_in_extension
- identical_operands
- implicit_return
- inert_defer
- joined_default_parameter
- last_where
- legacy_multiple
Expand Down
19 changes: 0 additions & 19 deletions Makefile

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
//
// Typhoon
// Copyright © 2024 Space Code. All rights reserved.
// Copyright © 2023 Space Code. All rights reserved.
//

import Foundation
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
//
// Typhoon
// Copyright © 2024 Space Code. All rights reserved.
// Copyright © 2023 Space Code. All rights reserved.
//

import Foundation
Expand Down
14 changes: 7 additions & 7 deletions Sources/Typhoon/Classes/Strategy/RetryPolicyStrategy.swift
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
//
// Typhoon
// Copyright © 2024 Space Code. All rights reserved.
// Copyright © 2023 Space Code. All rights reserved.
//

import Foundation
Expand Down Expand Up @@ -42,23 +42,23 @@ public enum RetryPolicyStrategy: Sendable {
public var retries: Int {
switch self {
case let .constant(retry, _):
return retry
retry
case let .exponential(retry, _, _):
return retry
retry
case let .exponentialWithJitter(retry, _, _, _, _):
return retry
retry
}
}

/// The time duration between retries based on the strategy.
public var duration: DispatchTimeInterval {
switch self {
case let .constant(_, duration):
return duration
duration
case let .exponential(_, _, duration):
return duration
duration
case let .exponentialWithJitter(_, _, _, _, duration):
return duration
duration
}
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
//
// Typhoon
// Copyright © 2024 Space Code. All rights reserved.
// Copyright © 2023 Space Code. All rights reserved.
//

import Typhoon
Expand Down
38 changes: 0 additions & 38 deletions hooks/pre-commit

This file was deleted.

10 changes: 10 additions & 0 deletions mise.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
[tools]
git-cliff = "2.9.1"
swiftlint = "0.62.2"
swiftformat = "0.58.7"

[settings]
experimental = true

[hooks]
postinstall = "mise run install"
Loading