-
Notifications
You must be signed in to change notification settings - Fork 0
173 lines (165 loc) · 5.6 KB
/
Copy pathswift.yml
File metadata and controls
173 lines (165 loc) · 5.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
name: Swift
on: [push]
jobs:
macos:
name: macOS
runs-on: macos-26
strategy:
fail-fast: false
matrix:
config: ["debug", "release"]
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Swift Version
run: swift --version
- name: Build
run: swift build -c ${{ matrix.config }}
- name: Test
run: swift test -c ${{ matrix.config }}
coverage:
name: Code Coverage
runs-on: macos-26
permissions:
contents: read
code-quality: write # required by actions/upload-code-coverage
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Swift Version
run: swift --version
- name: Export coverage and enforce threshold
run: Scripts/coverage.sh
- name: Upload coverage to GitHub Code Quality
uses: actions/upload-code-coverage@v1
with:
file: .build/coverage/coverage.xml
language: Swift
label: code-coverage/llvm-cov
# Code Quality is in public preview; don't fail CI if the upload/feature
# is unavailable on the repo. Drop this once it's generally available.
fail-on-error: false
- name: Upload coverage artifacts
if: always()
uses: actions/upload-artifact@v4
with:
name: code-coverage
path: .build/coverage/
if-no-files-found: error
linux:
name: Linux (${{ matrix.container }})
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
container: ["swift:latest", "swiftlang/swift:nightly-noble"]
config: ["debug", "release"]
container: ${{ matrix.container }}
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Swift Version
run: swift --version
- name: Build
run: swift build -c ${{ matrix.config }}
- name: Test
run: swift test -c ${{ matrix.config }}
windows:
runs-on: windows-latest
steps:
- uses: compnerd/gha-setup-swift@main
with:
branch: swift-6.3.2-release
tag: 6.3.2-RELEASE
- uses: actions/checkout@v4
- name: Swift version
run: swift --version
- name: Build
run: swift build -v
- name: Test
run: swift test -v
skip-fuse:
name: Skip Fuse (Android)
runs-on: macos-26
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Swift Version
run: swift --version
- name: Build (Skip Fuse)
run: SKIP_FUSE=1 swift build --target CoreModelSQLite
android:
name: Android
runs-on: macos-15
strategy:
fail-fast: false
matrix:
config: ["debug", "release"]
env:
SWIFT_VERSION: "6.3.2"
ANDROID_NDK_VERSION: "27.2.12479018"
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install Swift
run: |
curl -O https://download.swift.org/swiftly/darwin/swiftly.pkg
installer -pkg swiftly.pkg -target CurrentUserHomeDirectory
~/.swiftly/bin/swiftly init --assume-yes --skip-install
echo "$HOME/.swiftly/bin" >> "$GITHUB_PATH"
source ~/.swiftly/env.sh
swiftly install ${{ env.SWIFT_VERSION }}
swiftly use ${{ env.SWIFT_VERSION }}
echo "$(swiftly use --print-location)/usr/bin" >> "$GITHUB_PATH"
- name: Install Android NDK
run: $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager --install "ndk;${{ env.ANDROID_NDK_VERSION }}"
- name: Install Swift SDK for Android
run: |
curl -L -o android-sdk.artifactbundle.tar.gz "https://download.swift.org/swift-${{ env.SWIFT_VERSION }}-release/android-sdk/swift-${{ env.SWIFT_VERSION }}-RELEASE/swift-${{ env.SWIFT_VERSION }}-RELEASE_android.artifactbundle.tar.gz"
CHECKSUM=$(swift package compute-checksum android-sdk.artifactbundle.tar.gz)
swift sdk install android-sdk.artifactbundle.tar.gz --checksum "$CHECKSUM"
ANDROID_NDK_HOME="$ANDROID_HOME/ndk/${{ env.ANDROID_NDK_VERSION }}" \
bash "$HOME/Library/org.swift.swiftpm/swift-sdks/swift-${{ env.SWIFT_VERSION }}-RELEASE_android.artifactbundle/swift-android/scripts/setup-android-sdk.sh"
- name: Build
run: TARGET_OS_ANDROID=1 swift build --swift-sdk aarch64-unknown-linux-android28 -c ${{ matrix.config }}
ios:
name: iOS
runs-on: macos-26
strategy:
fail-fast: false
matrix:
config: ["debug", "release"]
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Select Simulator
run: |
DEVICE_ID=$(xcrun simctl list devices available -j | python3 -c "import json,sys; d=json.load(sys.stdin)['devices']; devices=[v for vs in d.values() for v in vs if 'iPhone' in v['name']]; print(devices[0]['udid'])")
echo "DEVICE_ID=${DEVICE_ID}" >> "$GITHUB_ENV"
- name: Build
run: >
xcodebuild build -scheme CoreModel-SQLite
-destination "generic/platform=iOS"
-configuration ${{ matrix.config == 'release' && 'Release' || 'Debug' }}
-skipMacroValidation -skipPackagePluginValidation
- name: Test
run: >
xcodebuild test -scheme CoreModel-SQLite
-destination "id=${{ env.DEVICE_ID }}"
-configuration ${{ matrix.config == 'release' && 'Release' || 'Debug' }}
-skipMacroValidation -skipPackagePluginValidation
ENABLE_TESTABILITY=YES
android-test:
name: Android Test
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Test on Android emulator
uses: skiptools/swift-android-action@v2
with:
swift-version: "6.3.2"
android-api-level: 28
swift-configuration: debug
free-disk-space: true
run-tests: true