Test tweaks for CI #2344
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: SDKs | |
on: | |
pull_request: | |
schedule: | |
- cron: '0 9 * * *' | |
jobs: | |
bundle-tests: | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
version: [release, devel, trunk] | |
os: [ubuntu-24.04, macos-13] | |
env: | |
ANDROID_API_LEVEL: 24 | |
BUNDLE_VERSION: 0.1 | |
NDK_VERSION: 27c | |
steps: | |
- name: Check for latest Swift ${{ matrix.version }} toolchain | |
id: version | |
run: | | |
if [ ${{ matrix.version }} = 'release' ]; then | |
LATEST_TOOLCHAIN_VERSION=$(curl -sL https://github.com/apple/swift/releases | grep -m1 swift-6.0 | cut -d- -f2) | |
SWIFT_TAG="swift-${LATEST_TOOLCHAIN_VERSION}-RELEASE" | |
elif [ ${{ matrix.version }} = 'devel' ]; then | |
LATEST_TOOLCHAIN_VERSION=$(curl -sL https://github.com/apple/swift/tags | grep -m1 swift-6.1-DEV | cut -d- -f8-10) | |
SWIFT_TAG="swift-6.1-DEVELOPMENT-SNAPSHOT-${LATEST_TOOLCHAIN_VERSION}-a" | |
else | |
LATEST_TOOLCHAIN_VERSION=$(curl -sL https://github.com/apple/swift/tags | grep -m1 swift-DEV | cut -d- -f7-9) | |
SWIFT_TAG="swift-DEVELOPMENT-SNAPSHOT-${LATEST_TOOLCHAIN_VERSION}-a" | |
fi | |
echo "tag=$SWIFT_TAG" >> $GITHUB_OUTPUT | |
echo "key=$SWIFT_TAG-ndk-${NDK_VERSION}-fm-bundle" >> $GITHUB_OUTPUT | |
- name: Get cached SDK bundle | |
id: cache-bundle | |
uses: actions/cache/restore@v4 | |
with: | |
path: ~/${{ steps.version.outputs.tag }}-android-${{ env.ANDROID_API_LEVEL }}-${{ env.BUNDLE_VERSION }}.artifactbundle.tar.gz | |
key: ${{ steps.version.outputs.key }} | |
fail-on-cache-miss: ${{ startsWith(matrix.os, 'macos') && 'true' || 'false' }} | |
- name: Get cached ${{ matrix.os }} ${{ steps.version.outputs.tag }} toolchain | |
id: cache-toolchain | |
uses: actions/cache@v4 | |
with: | |
path: ~/${{ steps.version.outputs.tag }}-${{ startsWith(matrix.os, 'macos') && 'osx.pkg' || 'ubuntu24.04.tar.gz' }} | |
key: swift-${{ matrix.os }}-${{ steps.version.outputs.tag }}-toolchain | |
- name: Download toolchain | |
if: ${{ steps.cache-toolchain.outputs.cache-hit != 'true' }} | |
env: | |
SWIFT_TAG: ${{ steps.version.outputs.tag }} | |
run: | | |
if [ ${{ matrix.version }} != 'trunk' ]; then | |
SWIFT_BRANCH="swift-$(echo $SWIFT_TAG | cut -d- -f2)-${{ matrix.version == 'release' && 'release' || 'branch' }}" | |
else | |
SWIFT_BRANCH="development" | |
fi | |
cd | |
if ${{ steps.cache-toolchain.outputs.cache-hit != 'true' }}; then | |
wget -q https://download.swift.org/$SWIFT_BRANCH/${{ startsWith(matrix.os, 'macos') && 'xcode' || 'ubuntu2404' }}/$SWIFT_TAG/$SWIFT_TAG-${{ startsWith(matrix.os, 'macos') && 'osx.pkg' || 'ubuntu24.04.tar.gz' }} | |
echo "downloaded latest ${{ matrix.os }} toolchain: ${SWIFT_TAG}" | |
fi | |
- name: Extract toolchain and set it up | |
env: | |
SWIFT_TAG: ${{ steps.version.outputs.tag }} | |
run: | | |
if ${{ startsWith(matrix.os, 'macos') }}; then | |
mkdir ${SWIFT_TAG} | |
pushd ${SWIFT_TAG} | |
xar -x -C . -f ~/${SWIFT_TAG}-osx.pkg | |
tar xz -C . -f ${SWIFT_TAG}-osx-package.pkg/Payload | |
TOOLCHAIN=${PWD}/usr | |
popd | |
elif ${{ startsWith(matrix.os, 'ubuntu') }}; then | |
SWIFT_TOOLS=$SWIFT_TAG-$(echo ${{ matrix.os }} | tr -d - ) | |
tar xf ~/$SWIFT_TOOLS.tar.gz | |
TOOLCHAIN=${PWD}/$SWIFT_TOOLS/usr | |
fi | |
echo "TOOLCHAIN=${TOOLCHAIN}" >> $GITHUB_ENV | |
${TOOLCHAIN}/bin/swift --version | |
- name: Get cached Android NDK sysroot and runtime libraries | |
id: cache-ndk | |
uses: actions/cache@v4 | |
if: ${{ (steps.cache-bundle.outputs.cache-hit != 'true') && startsWith(matrix.os, 'ubuntu') }} | |
with: | |
path: ~/android-sysroot.tar.xz | |
key: android-ndk-${{ env.NDK_VERSION }} | |
- name: Extract Android NDK sysroot if not cached before | |
if: ${{ steps.cache-bundle.outputs.cache-hit != 'true' && steps.cache-ndk.outputs.cache-hit != 'true' && startsWith(matrix.os, 'ubuntu') }} | |
run: | | |
wget -q https://dl.google.com/android/repository/android-ndk-r$NDK_VERSION-linux.zip | |
if [ "$(sha1sum android-ndk-r$NDK_VERSION-linux.zip | cut -f1 -d" ")" != '090e8083a715fdb1a3e402d0763c388abb03fb4e' ]; then | |
echo "NDK checksum didn't match" | |
exit 1 | |
fi | |
unzip -q android-ndk-r$NDK_VERSION-linux.zip | |
rm android-ndk-r$NDK_VERSION-linux.zip | |
mv android-ndk-r$NDK_VERSION/toolchains/llvm/prebuilt/linux-x86_64/sysroot . | |
rm -r sysroot/usr/{include,lib}/{i686,riscv64}-linux-android | |
mv android-ndk-r$NDK_VERSION/toolchains/llvm/prebuilt/linux-x86_64/lib/clang/*/lib/linux sysroot | |
rm -r sysroot/linux/*{i[36]86,riscv64}* android-ndk-r$NDK_VERSION | |
tar cJf ~/android-sysroot.tar.xz sysroot | |
- name: Clone | |
uses: actions/checkout@v4 | |
with: | |
path: sdk-config | |
- name: Build Swift ${{ matrix.version }} Android SDK bundle if not the latest | |
# build-script currently only works on ubuntu | |
if: ${{ (steps.cache-bundle.outputs.cache-hit != 'true') && startsWith(matrix.os, 'ubuntu') }} | |
env: | |
SWIFT_TAG: ${{ steps.version.outputs.tag }} | |
run: | | |
set -x | |
if ${{ startsWith(matrix.os, 'macos') }}; then | |
brew install ninja patchelf | |
elif ${{ startsWith(matrix.os, 'ubuntu') }}; then | |
sudo apt install ninja-build | |
fi | |
cd sdk-config | |
for arch in aarch64 x86_64 armv7; do | |
ANDROID_ARCH=$arch BUILD_SWIFT_PM=1 ${TOOLCHAIN}/bin/swift get-packages-and-swift-source.swift | |
done | |
git apply swift-android.patch swift-android-ci.patch swift-crypto.patch swift-system.patch | |
if [ ${{ matrix.version }} = 'release' ]; then | |
git apply swift-android-ci-release.patch swift-android-foundation-release.patch | |
perl -pi -e 's%r26%ndk/27%' swift/stdlib/cmake/modules/AddSwiftStdlib.cmake | |
else | |
if [ ${{ matrix.version }} = 'devel' ]; then | |
perl -pi -e 's%r26%ndk/27%' swift/stdlib/cmake/modules/AddSwiftStdlib.cmake | |
fi | |
git apply swift-android-ci-except-release.patch swift-android-foundation-except-release.patch | |
fi | |
perl -pi -e 's%String\(cString: getpass%\"fake\" //%' swiftpm/Sources/PackageRegistryCommand/PackageRegistryCommand+Auth.swift | |
VERSION="$(echo ${{ steps.version.outputs.tag }} | cut -f1,2 -d-)-${{ matrix.version }}" | |
# e.g. swift-6.0.1-release-android-24-sdk | |
SDK_DIR=$VERSION-android-${ANDROID_API_LEVEL}-sdk | |
ROOT=android-${NDK_VERSION}-sysroot | |
SYSROOT=$SDK_DIR/$ROOT | |
mkdir ${SDK_DIR} | |
tar xf ~/android-sysroot.tar.xz | |
mv sysroot $SYSROOT | |
for arch in aarch64 x86_64 armv7; do | |
SDK_NAME=$(ls | grep swift-${{ matrix.version }}-android-$arch) | |
SDK=`pwd`/$SDK_NAME | |
if [ ${{ matrix.version }} = 'release' ]; then | |
perl -pi -e "s%/data/data/com.termux/files%$SDK%g" $SDK/usr/lib/pkgconfig/sqlite3.pc | |
fi | |
./swift/utils/build-script -RA --skip-build-cmark --build-llvm=0 --android --android-ndk $ANDROID_NDK_LATEST_HOME --android-arch $arch --android-api-level $ANDROID_API_LEVEL --build-swift-tools=0 --native-swift-tools-path=${TOOLCHAIN}/bin --native-clang-tools-path=${TOOLCHAIN}/bin --cross-compile-hosts=android-$arch --cross-compile-deps-path=$SDK --skip-local-build --build-swift-static-stdlib --xctest --skip-early-swift-driver --install-swift --install-libdispatch --install-foundation --install-xctest --install-destdir=$SDK --swift-install-components='compiler;clang-resource-dir-symlink;license;stdlib;sdk-overlay' --cross-compile-append-host-target-to-destdir=False -b -p --install-llbuild --sourcekit-lsp --skip-early-swiftsyntax | |
pushd ${SDK_NAME}/usr | |
patchelf --set-rpath \$ORIGIN lib/swift/android/lib[dFXs]*.so | |
# Remove executables and unused toolchain headers/libraries | |
rm -r bin lib/libsqlite3.so lib/lib{curses,ncurses}.so lib/terminfo share/{tabset,terminfo} | |
if [ ${{ matrix.version }} = 'release' ]; then | |
rm -r lib/swift/pm | |
fi | |
mv include/curl include/libxml2 include/spawn.h . | |
rm -r include/* | |
mv curl libxml2 spawn.h include/ | |
cp -r ../../swift/lib/ClangImporter/SwiftBridging/{module.modulemap,swift} include/ | |
TRIPLE="$arch-linux-android" | |
if [[ $arch == 'armv7' ]]; then | |
TRIPLE="arm-linux-androideabi" | |
fi | |
mkdir lib/${TRIPLE} | |
mv lib/lib[a-z]*.so lib/pkgconfig lib/swift/android/lib*.{a,so} lib/${TRIPLE} | |
mv lib/swift_static lib/swift_static-$arch | |
mv lib/libandroid-spawn.a lib/swift_static-$arch/android | |
rm lib/swift{,_static-$arch}/clang | |
popd | |
# copy all the processed SDK files into the Android sysroot | |
rsync -ar ${SDK_NAME}/ $SYSROOT | |
done | |
# Copy necessary headers and libraries from the toolchain and NDK clang resource directories | |
mkdir -p $SYSROOT/usr/lib/swift/clang/lib | |
cp -r $TOOLCHAIN/lib/clang/*/include $SYSROOT/usr/lib/swift/clang | |
mv $SYSROOT/linux $SYSROOT/usr/lib/swift/clang/lib | |
ln -s ../swift/clang $SYSROOT/usr/lib/swift_static-aarch64/clang | |
ln -s ../swift/clang $SYSROOT/usr/lib/swift_static-armv7/clang | |
ln -s ../swift/clang $SYSROOT/usr/lib/swift_static-x86_64/clang | |
# Patch a single libc++ header to work around a Swift compiler bug | |
cd $SYSROOT | |
git apply ../../libc++-stdlib.h.patch | |
cd ../.. | |
BUNDLE=${{ steps.version.outputs.tag }}-android-${ANDROID_API_LEVEL}-${BUNDLE_VERSION} | |
BUNDLE_DIR=$BUNDLE.artifactbundle | |
mkdir ${BUNDLE_DIR} | |
mv ${SDK_DIR} ${BUNDLE_DIR} | |
cat > $BUNDLE_DIR/info.json << EOF | |
{ | |
"schemaVersion": "1.0", | |
"artifacts": { | |
"${BUNDLE}": { | |
"variants": [ { "path": "${SDK_DIR}" } ], | |
"version": "${BUNDLE_VERSION}", | |
"type": "swiftSDK" | |
} | |
} | |
} | |
EOF | |
cat > $BUNDLE_DIR/$SDK_DIR/swift-sdk.json << EOF | |
{ | |
"schemaVersion": "4.0", | |
"targetTriples": { | |
"aarch64-unknown-linux-android${ANDROID_API_LEVEL}": { | |
"sdkRootPath": "${ROOT}", | |
"swiftResourcesPath": "${ROOT}/usr/lib/swift", | |
"swiftStaticResourcesPath": "${ROOT}/usr/lib/swift_static-aarch64", | |
"toolsetPaths": ["swift-toolset.json"] | |
}, | |
"x86_64-unknown-linux-android${ANDROID_API_LEVEL}": { | |
"sdkRootPath": "${ROOT}", | |
"swiftResourcesPath": "${ROOT}/usr/lib/swift", | |
"swiftStaticResourcesPath": "${ROOT}/usr/lib/swift_static-x86_64", | |
"toolsetPaths": ["swift-toolset.json"] | |
}, | |
"armv7-unknown-linux-androideabi${ANDROID_API_LEVEL}": { | |
"sdkRootPath": "${ROOT}", | |
"swiftResourcesPath": "${ROOT}/usr/lib/swift", | |
"swiftStaticResourcesPath": "${ROOT}/usr/lib/swift_static-armv7", | |
"toolsetPaths": ["swift-toolset.json"] | |
} | |
} | |
} | |
EOF | |
cat > $BUNDLE_DIR/$SDK_DIR/swift-toolset.json << EOF | |
{ | |
"cCompiler": { "extraCLIOptions": ["-fPIC"] }, | |
"swiftCompiler": { "extraCLIOptions": ["-Xclang-linker", "-fuse-ld=lld"] }, | |
"schemaVersion": "1.0" | |
} | |
EOF | |
cat > $BUNDLE_DIR/$SYSROOT/SDKSettings.json << EOF | |
{ | |
"DisplayName": "Android NDK ${NDK_VERSION} sysroot with ${VERSION} runtime libraries for API ${ANDROID_API_LEVEL}", | |
"Version": "27.2.12479018", | |
"VersionMap": {}, | |
"CanonicalName": "${VERSION}-android${ANDROID_API_LEVEL}" | |
} | |
EOF | |
# output visualization of the SDK bundle file tree | |
tree $BUNDLE_DIR | |
du -skh "${BUNDLE_DIR}" | |
tar czf ~/${BUNDLE_DIR}.tar.gz "${BUNDLE_DIR}" | |
du -skh ~/${BUNDLE_DIR}.tar.gz | |
shasum -a 256 ~/${BUNDLE_DIR}.tar.gz | |
rm -rf build/ swift-${{ matrix.version }}-android-*-sdk/ $BUNDLE_DIR llvm-project/ | |
- name: Cache SDK bundle | |
uses: actions/cache/save@v4 | |
if: ${{ (steps.cache-bundle.outputs.cache-hit != 'true') && startsWith(matrix.os, 'ubuntu') }} | |
with: | |
path: ~/${{ steps.version.outputs.tag }}-android-${{ env.ANDROID_API_LEVEL }}-${{ env.BUNDLE_VERSION }}.artifactbundle.tar.gz | |
key: ${{ steps.version.outputs.key }} | |
- name: Upload SDK bundle | |
if: ${{ startsWith(matrix.os, 'ubuntu') }} | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ steps.version.outputs.tag }}-android-${{ env.ANDROID_API_LEVEL }}-${{ env.BUNDLE_VERSION }}.artifactbundle.tar.gz | |
path: ~/${{ steps.version.outputs.tag }}-android-${{ env.ANDROID_API_LEVEL }}-${{ env.BUNDLE_VERSION }}.artifactbundle.tar.gz | |
compression-level: 0 | |
- name: Install ${{ matrix.version }} Android SDK bundle and set SwiftPM flags | |
run: | | |
${TOOLCHAIN}/bin/swift sdk install ~/${{ steps.version.outputs.tag }}-android-*.artifactbundle.tar.gz | |
${TOOLCHAIN}/bin/swift sdk configure --show-configuration ${{ steps.version.outputs.tag }}-android-${ANDROID_API_LEVEL}-${BUNDLE_VERSION} armv7-unknown-linux-androideabi${ANDROID_API_LEVEL} | |
if ${{ matrix.version != 'release' }}; then | |
FLAGS="-Xswiftc -disallow-use-new-driver" | |
fi | |
SFLAGS="--swift-sdk aarch64-unknown-linux-android${ANDROID_API_LEVEL} ${FLAGS}" | |
echo "SWIFTPM_AARCH_FLAGS=${SFLAGS}" >> $GITHUB_ENV | |
XFLAGS="--swift-sdk x86_64-unknown-linux-android${ANDROID_API_LEVEL} ${FLAGS}" | |
echo "SWIFTPM_X_FLAGS=${XFLAGS}" >> $GITHUB_ENV | |
AFLAGS="--swift-sdk armv7-unknown-linux-androideabi${ANDROID_API_LEVEL} ${FLAGS}" | |
echo "SWIFTPM_ARM_FLAGS=${AFLAGS}" >> $GITHUB_ENV | |
- name: Get Swift Argument Parser package | |
uses: actions/checkout@v4 | |
with: | |
repository: apple/swift-argument-parser | |
path: swift-argument-parser | |
- name: Build Swift Argument Parser package | |
run: | | |
cd swift-argument-parser | |
rm Examples/count-lines/CountLines.swift Tools/changelog-authors/*.swift | |
${TOOLCHAIN}/bin/swift build --build-tests ${SWIFTPM_AARCH_FLAGS} | |
${TOOLCHAIN}/bin/swift build --build-tests ${SWIFTPM_X_FLAGS} | |
${TOOLCHAIN}/bin/swift build --build-tests ${SWIFTPM_ARM_FLAGS} | |
- name: Get Swift crypto package | |
uses: actions/checkout@v4 | |
with: | |
repository: apple/swift-crypto | |
path: swift-crypto | |
- name: Build Swift crypto package | |
run: | | |
cd swift-crypto | |
perl -pi -e 's%\\\\(testsDirectory)/.*Vectors%/data/local/tmp/pack/crypto-vectors%' Tests/{Crypto,_CryptoExtras}Tests/Utils/{RFCVector,Wycheproof}.swift | |
perl -pi -e 's%#file%"/data/local/tmp/pack/crypto-vectors"%;s%../_CryptoExtrasVectors/%%' Tests/_CryptoExtrasTests/TestRSABlindSigning.swift | |
${TOOLCHAIN}/bin/swift build --build-tests ${SWIFTPM_AARCH_FLAGS} | |
${TOOLCHAIN}/bin/swift build --build-tests ${SWIFTPM_X_FLAGS} | |
${TOOLCHAIN}/bin/swift build --build-tests ${SWIFTPM_ARM_FLAGS} | |
- name: Get Swift NIO package | |
uses: actions/checkout@v4 | |
with: | |
repository: apple/swift-nio | |
path: swift-nio | |
- name: Build Swift NIO package | |
run: | | |
cd swift-nio | |
git apply ../sdk-config/swift-nio-disable-ecn-tests.patch ../sdk-config/swift-nio-filesystem.patch | |
${TOOLCHAIN}/bin/swift build --build-tests ${SWIFTPM_AARCH_FLAGS} | |
${TOOLCHAIN}/bin/swift build --build-tests ${SWIFTPM_X_FLAGS} | |
${TOOLCHAIN}/bin/swift build --build-tests ${SWIFTPM_ARM_FLAGS} | |
- name: Get cached Termux debug app for NIO tests | |
id: cache-termux | |
uses: actions/cache@v4 | |
with: | |
path: ~/termux-debug.apk | |
key: termux-app | |
- name: Get Termux debug app if not cached | |
if: ${{ steps.cache-termux.outputs.cache-hit != 'true' }} | |
run: wget -O ~/termux-debug.apk https://github.com/termux/termux-app/releases/download/v0.118.0/termux-app_v0.118.0+github-debug_x86_64.apk | |
- name: Prepare Android emulator test package and script | |
run: | | |
set -x | |
# create the test runner script | |
cat > ~/test-toolchain.sh << EOF | |
adb install ~/termux-debug.apk | |
adb push pack /data/local/tmp | |
adb shell "run-as com.termux mkdir /data/data/com.termux/pack" | |
adb shell "run-as com.termux cp /data/local/tmp/pack/{lib*.so,swift-nioPackageTests.xctest,FileHandleTests.swift} /data/data/com.termux/pack" | |
adb shell "run-as com.termux cp -r /data/local/tmp/pack/Test\ Data /data/data/com.termux/pack" | |
adb shell "run-as com.termux ln -s README.md /data/data/com.termux/pack/Test\ Data/README.md.symlink" | |
adb shell "run-as com.termux ln -s Foo /data/data/com.termux/pack/Test\ Data/Foo.symlink" | |
adb shell "run-as com.termux sh -c 'TMPDIR=/data/data/com.termux /data/data/com.termux/pack/swift-nioPackageTests.xctest'" | |
EOF | |
mkdir pack | |
TARGET="x86_64-unknown-linux-android$ANDROID_API_LEVEL" | |
cp swift-argument-parser/.build/$TARGET/debug/{generate-manual,math,repeat,roll,swift-argument-parserPackageTests.xctest} pack | |
echo 'adb shell /data/local/tmp/pack/swift-argument-parserPackageTests.xctest' >> ~/test-toolchain.sh | |
wget -q https://raw.githubusercontent.com/termux/termux-elf-cleaner/v2.1.1/elf-cleaner.cpp | |
wget -q https://raw.githubusercontent.com/termux/termux-elf-cleaner/v2.1.1/elf.h | |
wget -q https://raw.githubusercontent.com/termux/termux-elf-cleaner/v2.1.1/arghandling.h | |
wget -q https://raw.githubusercontent.com/termux/termux-elf-cleaner/v2.1.1/arghandling.c | |
clang -c arghandling.c | |
clang -o elf-cleaner arghandling.o elf-cleaner.cpp -DCOPYRIGHT=\"foo\" -DPACKAGE_NAME=\"termux-elf-cleaner\" -DPACKAGE_VERSION=\"2.2.1\" | |
./elf-cleaner --api-level $ANDROID_API_LEVEL pack/{generate-manual,math,repeat,roll} || true | |
cp swift-crypto/.build/$TARGET/debug/swift-cryptoPackageTests.xctest pack | |
echo 'adb shell /data/local/tmp/pack/swift-cryptoPackageTests.xctest' >> ~/test-toolchain.sh | |
cp swift-nio/.build/$TARGET/debug/swift-nioPackageTests.xctest pack | |
mkdir pack/crypto-vectors pack/swift-crypto_CryptoTests.resources | |
cp swift-crypto/Tests/Test\ Vectors/* swift-crypto/Tests/_CryptoExtrasVectors/* pack/crypto-vectors | |
cp swift-crypto/Tests/CryptoTests/HPKE/hpke-test-vectors.json pack/swift-crypto_CryptoTests.resources | |
rm swift-nio/Tests/NIOFileSystemIntegrationTests/Test\ Data/*symlink | |
cp -r swift-nio/Tests/NIOFileSystemIntegrationTests/Test\ Data/ swift-nio/Tests/NIOFileSystemIntegrationTests/FileHandleTests.swift pack | |
cp ~/.${{ startsWith(matrix.os, 'ubuntu') && 'config/' || '' }}swiftpm/swift-sdks/${{ steps.version.outputs.tag }}-android-${ANDROID_API_LEVEL}-*.artifactbundle/swift*sdk/android*sysroot/usr/lib/x86_64-linux-android/lib*so pack | |
# need to free up some space or else the emulator fails to launch: | |
# ERROR | Not enough space to create userdata partition. Available: 6086.191406 MB at /home/runner/.android/avd/../avd/test.avd, need 7372.800000 MB. | |
rm -rf ${{ steps.version.outputs.tag }}-$(echo ${{ matrix.os }} | tr -d - )/ */.build | |
chmod +x ~/test-toolchain.sh | |
echo "TEST SCRIPT:" | |
cat ~/test-toolchain.sh | |
mv ~/{termux-debug.apk,test-toolchain.sh} pack | |
tar cvf pack.tar pack | |
- name: Upload test directory tarfile | |
uses: actions/upload-artifact@v4 | |
with: | |
name: sdk-tests-${{ matrix.version }}-${{ matrix.os }} | |
path: pack.tar | |
run-tests-on-android-x86_64-emulator: | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
version: [release, devel, trunk] | |
os: [ubuntu-24.04, macos-13] | |
needs: bundle-tests | |
steps: | |
- name: Download test directory tarfile | |
uses: actions/download-artifact@v4 | |
with: | |
name: sdk-tests-${{ matrix.version }}-${{ startsWith(matrix.os, 'ubuntu') && 'macos-13' || 'ubuntu-24.04' }} | |
- name: Unpack tests for Android x86_64 emulator | |
run: | | |
tar xf pack.tar | |
mv pack/{termux-debug.apk,test-toolchain.sh} ~ | |
if ${{ startsWith(matrix.os, 'ubuntu') }}; then | |
echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules | |
sudo udevadm control --reload-rules | |
sudo udevadm trigger --name-match=kvm | |
fi | |
- name: Run tests on Android x86_64 emulator | |
uses: reactivecircus/android-emulator-runner@v2 | |
with: | |
api-level: ${{ matrix.version == 'release' && '29' || '24' }} | |
arch: x86_64 | |
script: ~/test-toolchain.sh |