55 workflow_dispatch :
66 pull_request :
77 schedule :
8- - cron : ' 0 1,7,13,20 * * *'
8+ - cron : ' 0 13 * * *'
99
1010jobs :
1111 install-sdk :
2727 EMULATOR_ARCH : ' x86_64'
2828 EMULATOR_ARCH_TRIPLE : ' x86_64'
2929
30+ - name : ' macOS 15 X64 API 30'
31+ os : ' macos-15-intel'
32+ ANDROID_API : 30
33+ NDK_VERSION : ' r27d'
34+ EMULATOR_ARCH : ' x86_64'
35+ EMULATOR_ARCH_TRIPLE : ' x86_64'
36+
3037 - name : ' Ubuntu X64 API 35'
3138 os : ' ubuntu-latest'
3239 ANDROID_API : 35
5057 # EMULATOR_ARCH_TRIPLE: 'aarch64'
5158
5259 runs-on : ${{ matrix.os }}
53- env :
54- ANDROID_API : ${{ matrix.ANDROID_API }}
55- ANDROID_EMULATOR_ARCH : ${{ matrix.EMULATOR_ARCH }}
56- ANDROID_EMULATOR_ARCH_TRIPLE : ${{ matrix.EMULATOR_ARCH_TRIPLE }}
57- ANDROID_TARGET : ' default'
58- # ANDROID_BUILD_TOOLS_VERSION: 36.0.0
59- ANDROID_BUILD_TOOLS_VERSION : ' latest'
60- BUILD_TOOLS_VERSION : " 35.0.0"
61- ANDROID_EMULATOR_NAME : ' demo'
62- ANDROID_PROFILE : " Nexus 10"
63- ANDROID_CHANNEL : " 3"
64- ANDROID_NDK_VERSION : " ${{ matrix.NDK_VERSION }}"
6560 steps :
61+ - uses : actions/checkout@v4
62+
6663 - name : Free Disk Space
6764 if : runner.os == 'Linux'
6865 run : |
7168 sudo rm -rf "/usr/local/share/boost"
7269 sudo rm -rf "$AGENT_TOOLSDIRECTORY"
7370
71+ - name : Setup Android Environment
72+ run : |
73+ echo "$ANDROID_HOME/cmdline-tools/latest/bin" >> $GITHUB_PATH
74+ echo "$ANDROID_HOME/platform-tools" >> $GITHUB_PATH
75+ echo "$ANDROID_HOME/build-tools/latest" >> $GITHUB_PATH
76+ echo "$ANDROID_HOME/tools" >> $GITHUB_PATH
77+ echo "$ANDROID_HOME/emulator" >> $GITHUB_PATH
78+
79+ echo "ANDROID_API=${{ matrix.ANDROID_API }}" >> $GITHUB_ENV
80+ echo "ANDROID_EMULATOR_ARCH=${{ matrix.EMULATOR_ARCH }}" >> $GITHUB_ENV
81+ echo "ANDROID_EMULATOR_ARCH_TRIPLE=${{ matrix.EMULATOR_ARCH_TRIPLE }}" >> $GITHUB_ENV
82+ echo "ANDROID_TARGET=default" >> $GITHUB_ENV
83+ #echo "ANDROID_PROFILE=Pixel 6" >> $GITHUB_ENV
84+ echo "ANDROID_PROFILE=Nexus 10" >> $GITHUB_ENV
85+ echo "ANDROID_CHANNEL=3" >> $GITHUB_ENV
86+ echo "ANDROID_NDK_VERSION=${{ matrix.NDK_VERSION }}" >> $GITHUB_ENV
87+
88+ if [[ "${RUNNER_OS}" == "Linux" ]]; then
89+ # needed for Linux or else the emulator will be created in
90+ # ~/.android/avd but it will be sought in ~/.config/.android/avd
91+ echo "ANDROID_AVD_HOME=${XDG_CONFIG_HOME:-$HOME}/.android/avd" >> $GITHUB_ENV
92+
93+ # enable KVM on Linux, else error on emulator launch:
94+ # CPU acceleration status: This user doesn't have permissions to use KVM (/dev/kvm).
95+ echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
96+ sudo udevadm control --reload-rules
97+ sudo udevadm trigger --name-match=kvm
98+ fi
99+
100+ - name : Create and Launch Android Emulator
101+ run : |
102+ EMULATOR_SPEC="system-images;android-${ANDROID_API};default;${ANDROID_EMULATOR_ARCH}"
103+ EMULATOR_NAME="swiftemu"
104+ sdkmanager --list_installed
105+ yes | sdkmanager --licenses > /dev/null
106+ sdkmanager --install "${EMULATOR_SPEC}" "emulator" "platform-tools" "platforms;android-${ANDROID_API}"
107+ avdmanager create avd -n "${EMULATOR_NAME}" -k "${EMULATOR_SPEC}" --device "${ANDROID_PROFILE}"
108+ emulator -list-avds
109+ # launch the emulator in the background; we will cat the logs at the end
110+ nohup emulator -memory 4096 -avd "${EMULATOR_NAME}" -wipe-data -no-window -no-snapshot -noaudio -no-boot-anim 2>&1 > emulator.log &
111+ adb logcat 2>&1 > logcat.log &
112+
74113 - name : Install Prerequisites
75114 run : |
76115 if [[ "${RUNNER_OS}" == "Linux" ]]; then
@@ -138,19 +177,12 @@ jobs:
138177 # https://github.com/swiftlang/swift-driver/pull/1879
139178 echo "ANDROID_NDK_ROOT=" >> $GITHUB_ENV
140179
141- - name : Setup Android Environment
142- run : |
143- echo "$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/emulator:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools:$ANDROID_HOME/build-tools/${{ env.ANDROID_BUILD_TOOLS_VERSION }}" >> $GITHUB_PATH
144- # needed for Linux or else the emulator will be created in
145- # ~/.android/avd but it will be sought in ~/.config/.android/avd
146- if [[ "${RUNNER_OS}" == "Linux" ]]; then
147- echo "ANDROID_AVD_HOME=${XDG_CONFIG_HOME:-$HOME}/.android/avd" >> $GITHUB_ENV
148- fi
149-
150180 - name : Setup Swift SDK for Android
151181 run : |
152182 cd ~/Library/org.swift.swiftpm || cd ${XDG_CONFIG_HOME}/swiftpm || cd ~/.local/swiftpm || cd ~/.swiftpm
153183 ./swift-sdks/${SWIFT_ANDROID_SDK_VERSION}*.artifactbundle/swift-android/scripts/setup-android-sdk.sh
184+ cd ./swift-sdks/${SWIFT_ANDROID_SDK_VERSION}*.artifactbundle
185+ echo "SWIFT_ANDROID_SDK_HOME=${PWD}" >> $GITHUB_ENV
154186
155187 - name : Build Swift Executable for Android
156188 run : |
@@ -160,55 +192,12 @@ jobs:
160192 swiftly run swift build --swift-sdk "${ANDROID_EMULATOR_ARCH_TRIPLE}-unknown-linux-android${ANDROID_API}" --static-swift-stdlib
161193 file .build/debug/hello
162194
163- - name : Enable KVM
164- if : runner.os == 'Linux'
165- run : |
166- if [[ "${RUNNER_ARCH}" == "X64" ]]; then
167- echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
168- sudo udevadm control --reload-rules
169- sudo udevadm trigger --name-match=kvm
170- fi
171-
172- - name : Android SDKs - list installed SDKs
173- run : sdkmanager --list_installed
174-
175- - name : Android SDKs - setup environment
176- run : yes y | sdkmanager --licenses > /dev/null
177-
178- - name : Android SKDs - setup build tools
179- run : sdkmanager --install "build-tools;${BUILD_TOOLS_VERSION}" platform-tools "platforms;android-${ANDROID_API}" --channel="${ANDROID_CHANNEL}"
180-
181- - name : Android SKDs - setup emulator
182- run : sdkmanager --install emulator --channel="${ANDROID_CHANNEL}"
183-
184- - name : Android Emulator - download required images
185- run : sdkmanager --install "system-images;android-${ANDROID_API};${ANDROID_TARGET};${ANDROID_EMULATOR_ARCH}" --channel="${ANDROID_CHANNEL}"
186-
187- - name : Android Emulator - Create
188- run : avdmanager --verbose create avd --force -n "${ANDROID_EMULATOR_NAME}" --device "${ANDROID_PROFILE}" --abi "${ANDROID_TARGET}/${ANDROID_EMULATOR_ARCH}" --package "system-images;android-${ANDROID_API};${ANDROID_TARGET};${ANDROID_EMULATOR_ARCH}" --sdcard 512M
189-
190- # - name: Android - Find AVDs
191- # run: find ~/ -type d -name '*.avd'
192-
193- # - name: Android - List AVDs
194- # run: emulator -list-avds
195-
196- - name : Android - Boot
197- run : nohup emulator -memory 4096 -avd "${ANDROID_EMULATOR_NAME}" -wipe-data -no-window -no-snapshot -noaudio -no-boot-anim 2>&1 > emulator.log &
198-
199- - name : ADB Wait For Device
195+ - name : Wait for Android Emulator
200196 run : adb wait-for-any-device
201197 timeout-minutes : 5
202198
203- - name : Pause briefly
204- run : sleep 30
205-
206- # - name: ADB Press Power Button
207- # run: adb shell input keyevent 82
208-
209199 - name : Check Android Emulator
210- run : |
211- adb shell 'echo Hello Android!'
200+ run : adb shell 'echo Hello Android!'
212201
213202 - name : Run Swift Executable on Android Emulator
214203 run : |
@@ -217,72 +206,47 @@ jobs:
217206 adb push $ANDROID_NDK_HOME/toolchains/llvm/prebuilt/*/sysroot/usr/lib/${ANDROID_EMULATOR_ARCH_TRIPLE}-linux-android/libc++_shared.so /data/local/tmp/
218207 adb shell /data/local/tmp/hello
219208
220- - name : Create run-tests script
221- run : |
222- cat > run-tests.sh << "EOF"
223- #!/bin/bash -ex
224- ORG=$(echo "${1}" | cut -d '/' -f 1)
225- PACKAGE=$(echo "${1}" | cut -d '/' -f 2)
226-
227- git clone https://github.com/${ORG}/${PACKAGE}
228- cd ${PACKAGE}
229-
230- swiftly run swift build --swift-sdk "${ANDROID_EMULATOR_ARCH_TRIPLE}-unknown-linux-android${ANDROID_API}" --build-tests +"${SWIFT_TOOLCHAIN_VERSION}"
231-
232- adb push .build/debug/${PACKAGE}PackageTests.xctest /data/local/tmp/
233- # copy up any test resources
234- adb push .build/debug/*.resources /data/local/tmp/ || true
209+ - run : ./android-ci.sh test apple/swift-numerics
235210
236- # push potential dependent libraries
237- adb push $ANDROID_NDK_HOME/toolchains/llvm/prebuilt/*/sysroot/usr/lib/${ANDROID_EMULATOR_ARCH_TRIPLE}-linux-android/libc++_shared.so /data/local/tmp/
211+ - run : ./android-ci.sh test apple/swift-algorithms
238212
239- # Since we are building with --static-swift-stdlib, we don't
240- # need to copy any of the other libraries
241- cd ~/Library/org.swift.swiftpm || cd ${XDG_CONFIG_HOME}/swiftpm || cd ~/.local/swiftpm || cd ~/.swiftpm
242- adb push swift-sdks/${SWIFT_ANDROID_SDK_VERSION}*.artifactbundle/swift-android/swift-resources/usr/lib/swift-${ANDROID_EMULATOR_ARCH_TRIPLE}/android/*.so /data/local/tmp/
243- cd -
213+ - run : ./android-ci.sh test apple/swift-atomics
244214
245- adb shell ls /data/local/tmp/
215+ - run : ./android-ci.sh build swiftlang/swift-subprocess
246216
247- adb shell /data/local/tmp/${PACKAGE}PackageTests.xctest
248- EOF
217+ # build-only because it uses hardwired StringLiteralRepresentedLiteralValueTests.swift
218+ - run : ./android-ci.sh build swiftlang/swift-syntax
249219
250- chmod +x run-tests.sh
251- cat run-tests.sh
220+ # build-only because tests crash in NetrcTests.testNoErrorMixedAccount
221+ # and tests use abslute file paths
222+ - run : ./android-ci.sh build swiftlang/swift-tools-support-core
252223
253- - name : Run swift-collections tests
254- # too slow
255- if : false
256- run : ./run-tests.sh apple/swift-collections
224+ # build-only because it tries to write to "/tmp/old.txt" and "/tmp/" does not exist
225+ - run : ./android-ci.sh build swiftlang/swift-markdown
257226
258- - name : Run swift-numerics tests
259- run : ./run-tests .sh apple /swift-numerics
227+ # no tests in swift-toolchain-sqlite
228+ - run : ./android-ci .sh build swiftlang /swift-toolchain-sqlite
260229
261- - name : Run swift-algorithms tests
262- run : ./run-tests .sh apple/swift-algorithms
230+ # build-only: tests work, but they take a very long time
231+ - run : ./android-ci .sh build apple/swift-collections
263232
264- - name : Run swift-atomics tests
265- run : ./run-tests .sh apple/swift-atomics
233+ # build-only: https://github.com/apple/ swift-system/pull/272
234+ - run : ./android-ci .sh build apple/swift-system
266235
267- - name : Run swift-system tests
268- run : ./run-tests .sh apple/swift-system
236+ # build-only: tests references Tests/ file paths by absolute filename
237+ - run : ./android-ci .sh build apple/swift-crypto
269238
270- - name : Run swift-crypto tests
271- # needs: Tests/CryptoExtrasVectors/rfc-7914-scrypt.txt
272- if : false
273- run : ./run-tests.sh apple/swift-crypto
239+ - run : ./android-ci.sh build apple/swift-nio
274240
275- - name : Run swift-nio tests
276- if : false
277- run : ./run-tests .sh apple/swift-nio
241+ # build-only, since tests needs local files:
242+ # error: MathExampleTests.testMath_AddHelp : failed - No executable at '/data/local/tmp/math'.
243+ # - run: ./android-ci .sh build apple/swift-argument-parser
278244
279- - name : Run swift-argument-parser tests
280- # needs local files:
281- # error: MathExampleTests.testMath_AddHelp : failed - No executable at '/data/local/tmp/math'.
282- if : false
283- run : ./run-tests.sh apple/swift-argument-parser
245+ - name : Show Android Emulator Log
246+ if : always()
247+ run : cat emulator.log
284248
285- - name : Android - Show Emulator Log
249+ - name : Show Android Logcat Output
286250 if : always()
287- run : cat emulator .log || true
251+ run : cat logcat .log
288252
0 commit comments