Skip to content

fix: read-your-write consistency defects #1136

fix: read-your-write consistency defects

fix: read-your-write consistency defects #1136

Workflow file for this run

name: iOS CI
on:
pull_request:
branches:
- '**'
paths-ignore:
- '.github/**'
- 'README.md'
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
env:
KMP_XCFRAMEWORK_PATH: OneSignal-KMP-SDK/kmp/build/XCFrameworks/release/OneSignalKMP.xcframework
jobs:
lint:
name: Swift Lint
runs-on: macos-latest
steps:
- name: Checkout OneSignal-iOS-SDK
uses: actions/checkout@v7
- name: Run Swift Lint
uses: cirruslabs/swiftlint-action@v1
with:
version: latest
kmp-xcframework:
name: Build OneSignalKMP XCFramework
runs-on: macos-latest
steps:
- name: Checkout OneSignal-iOS-SDK
uses: actions/checkout@v7
with:
submodules: recursive
- name: Create KMP cache key
id: kmp
run: |
kmp_sha="$(git rev-parse HEAD:OneSignal-KMP-SDK)"
xcode_hash="$(xcodebuild -version | shasum -a 256 | awk '{print $1}')"
echo "cache-key=kmp-xcframework-${{ runner.os }}-${{ runner.arch }}-${xcode_hash}-${kmp_sha}" >> "$GITHUB_OUTPUT"
- name: Restore OneSignalKMP XCFramework
id: kmp-cache
uses: actions/cache/restore@v6
with:
path: ${{ env.KMP_XCFRAMEWORK_PATH }}
key: ${{ steps.kmp.outputs.cache-key }}
- name: Setup JDK 17
if: steps.kmp-cache.outputs.cache-hit != 'true'
uses: actions/setup-java@v5
with:
distribution: temurin
java-version: "17"
- name: Setup Gradle
if: steps.kmp-cache.outputs.cache-hit != 'true'
uses: gradle/actions/setup-gradle@v6
- name: Assemble OneSignalKMP XCFramework
if: steps.kmp-cache.outputs.cache-hit != 'true'
run: |
iOS_SDK/OneSignalSDK/build_kmp_xcframework.sh \
:kmp:assembleOneSignalKMPReleaseXCFramework
- name: Save OneSignalKMP XCFramework
if: steps.kmp-cache.outputs.cache-hit != 'true'
uses: actions/cache/save@v6
with:
path: ${{ env.KMP_XCFRAMEWORK_PATH }}
key: ${{ steps.kmp.outputs.cache-key }}
- name: Package OneSignalKMP XCFramework
run: |
tar -czf "$RUNNER_TEMP/OneSignalKMP.xcframework.tar.gz" \
-C "$(dirname "$KMP_XCFRAMEWORK_PATH")" \
"$(basename "$KMP_XCFRAMEWORK_PATH")"
- name: Upload OneSignalKMP XCFramework
uses: actions/upload-artifact@v7
with:
name: OneSignalKMP-XCFramework
path: ${{ runner.temp }}/OneSignalKMP.xcframework.tar.gz
retention-days: 1
ios-simulator:
name: Build and Test using any available iPhone simulator
runs-on: macos-latest
needs: kmp-xcframework
steps:
- name: Checkout OneSignal-iOS-SDK
uses: actions/checkout@v7
- name: Download OneSignalKMP XCFramework
uses: actions/download-artifact@v8
with:
name: OneSignalKMP-XCFramework
path: ${{ runner.temp }}
- name: Extract OneSignalKMP XCFramework
run: |
mkdir -p "$(dirname "$KMP_XCFRAMEWORK_PATH")"
tar -xzf "$RUNNER_TEMP/OneSignalKMP.xcframework.tar.gz" \
-C "$(dirname "$KMP_XCFRAMEWORK_PATH")"
- name: Select iPhone simulator
id: simulator
run: |
runtime_id="$(xcrun simctl list runtimes available --json | jq -r \
'[.runtimes[] | select(.platform == "iOS")] | sort_by(.version | split(".") | map(tonumber)) | last.identifier')"
device_id="$(xcrun simctl list devices available --json | jq -r --arg runtime "$runtime_id" \
'.devices[$runtime] | map(select(.name | startswith("iPhone"))) | first.udid')"
if [[ -z "$device_id" || "$device_id" == "null" ]]; then
echo "No available iPhone simulator found" >&2
exit 1
fi
echo "device-id=$device_id" >> "$GITHUB_OUTPUT"
- name: Build
env:
scheme: ${{ 'UnitTestApp' }}
file_to_build: ${{ 'iOS_SDK/OneSignalSDK/OneSignal.xcodeproj' }}
filetype_parameter: ${{ 'project' }}
run: |
xcodebuild build-for-testing \
-quiet \
-scheme "$scheme" \
-"$filetype_parameter" "$file_to_build" \
-destination "generic/platform=iOS Simulator" \
-enableCodeCoverage NO \
ARCHS=arm64 \
ONLY_ACTIVE_ARCH=YES
- name: Start simulator boot
env:
device_id: ${{ steps.simulator.outputs.device-id }}
run: |
device_state="$(xcrun simctl list devices --json | jq -r --arg device "$device_id" \
'[.devices[][] | select(.udid == $device)] | first.state')"
if [[ "$device_state" != "Booted" ]]; then
xcrun simctl boot "$device_id"
fi
- name: Wait for simulator boot
env:
device_id: ${{ steps.simulator.outputs.device-id }}
run: xcrun simctl bootstatus "$device_id" -b
- name: Test
env:
scheme: ${{ 'UnitTestApp' }}
test_plan: ${{ 'UnitTestApp_TestPlan_Reduced' }}
platform: ${{ 'iOS Simulator' }}
file_to_build: ${{ 'iOS_SDK/OneSignalSDK/OneSignal.xcodeproj' }}
filetype_parameter: ${{ 'project' }}
device_id: ${{ steps.simulator.outputs.device-id }}
run: |
xcodebuild test-without-building \
-quiet \
-scheme "$scheme" \
-testPlan "$test_plan" \
-"$filetype_parameter" "$file_to_build" \
-destination "platform=$platform,id=$device_id,arch=arm64" \
-maximum-parallel-testing-workers 1 \
-enableCodeCoverage NO
catalyst:
name: KMP logger Mac Catalyst integration
runs-on: macos-latest
needs: kmp-xcframework
steps:
- name: Checkout OneSignal-iOS-SDK
uses: actions/checkout@v7
- name: Download OneSignalKMP XCFramework
uses: actions/download-artifact@v8
with:
name: OneSignalKMP-XCFramework
path: ${{ runner.temp }}
- name: Extract OneSignalKMP XCFramework
run: |
mkdir -p "$(dirname "$KMP_XCFRAMEWORK_PATH")"
tar -xzf "$RUNNER_TEMP/OneSignalKMP.xcframework.tar.gz" \
-C "$(dirname "$KMP_XCFRAMEWORK_PATH")"
- name: Archive OneSignalFramework for Catalyst
run: |
xcodebuild archive \
-scheme OneSignalFramework \
-configuration Release \
-project iOS_SDK/OneSignalSDK/OneSignal.xcodeproj \
-destination 'generic/platform=macOS,variant=Mac Catalyst' \
-archivePath "$RUNNER_TEMP/OneSignalFramework-Catalyst.xcarchive" \
SKIP_INSTALL=NO \
BUILD_LIBRARY_FOR_DISTRIBUTION=YES \
CODE_SIGN_IDENTITY= \
CODE_SIGNING_REQUIRED=NO \
CODE_SIGNING_ALLOWED=NO
- name: Run KMP logger Catalyst host
run: |
frameworks="$RUNNER_TEMP/OneSignalFramework-Catalyst.xcarchive/Products/Library/Frameworks"
host="$RUNNER_TEMP/CatalystLoggerHost"
xcrun --sdk macosx swiftc \
-target "$(uname -m)-apple-ios14.0-macabi" \
-F "$frameworks" \
-framework OneSignalOSCore \
-framework OneSignalCore \
-Xlinker -rpath \
-Xlinker "$frameworks" \
iOS_SDK/OneSignalSDK/CatalystLoggerHost/main.swift \
-o "$host"
DYLD_FRAMEWORK_PATH="$frameworks" "$host"