Build Android image #65
This file contains hidden or 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: Build Docker images | |
on: [pull_request] | |
env: | |
ghprbPullId: ${{ github.event.number }} | |
ghprbGhRepository: ${{ github.repository_owner }}/${{ github.event.repository.name }} | |
jobs: | |
build: | |
name: Build Docker images | |
runs-on: ubuntu-latest | |
if: false | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Build Docker images | |
run: ./ci_test.py | |
- name: Archive production artifacts | |
uses: actions/upload-artifact@v4 | |
if: always() | |
with: | |
name: docker-logs | |
path: | | |
*.log | |
static-linux-build: | |
name: Build Static Linux image | |
runs-on: ubuntu-latest | |
if: false | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Build Docker images | |
working-directory: swift-ci/sdks/static-linux | |
run: ./build | |
android-build: | |
name: Build Android ${{ matrix.arch }} SDK | |
strategy: | |
fail-fast: false | |
matrix: | |
# build only x86_64 to speed up the validation | |
#arch: ['x86_64'] | |
arch: ['x86_64', ''] | |
runs-on: ubuntu-24.04 | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Install Dependencies | |
run: | | |
sudo apt install -q ninja-build patchelf | |
- name: Build Android SDK | |
working-directory: swift-ci/sdks/android | |
run: | | |
TARGET_ARCHS=${{ matrix.arch }} ./build | |
- name: Get artifact info | |
id: info | |
shell: bash | |
run: | | |
set -ex | |
SWIFT_ROOT=$(dirname ${{ runner.temp }}/swift-android-sdk/host-toolchain/*/usr) | |
echo "swift-root=${SWIFT_ROOT}" >> $GITHUB_OUTPUT | |
echo "swift-path=${SWIFT_ROOT}/usr/bin/swift" >> $GITHUB_OUTPUT | |
ARTIFACT_BUILD=$(realpath ${{ runner.temp }}/swift-android-sdk/build/*.artifactbundle) | |
ARTIFACT_PATH=$(realpath ${{ runner.temp }}/swift-android-sdk/products/*.artifactbundle.tar.gz) | |
echo "artifact-path=${ARTIFACT_PATH}" >> $GITHUB_OUTPUT | |
echo "sdk-id=x86_64-unknown-linux-android28" >> $GITHUB_OUTPUT | |
ARTIFACT_EXT=".artifactbundle.tar.gz" | |
ARTIFACT_NAME="$(basename ${ARTIFACT_PATH} ${ARTIFACT_EXT})" | |
# artifacts need a unique name so we suffix with the matrix arch(s) | |
if [[ ! -z "${{ matrix.arch }}" ]]; then | |
ARTIFACT_NAME="${ARTIFACT_NAME}-$(echo ${{ matrix.arch }} | tr ',' '-')" | |
fi | |
ARTIFACT_NAME="${ARTIFACT_NAME}${ARTIFACT_EXT}" | |
# There is no way to prevent even a single-file artifact from being zipped: | |
# https://github.com/actions/upload-artifact?tab=readme-ov-file#zip-archives | |
# so we tack ".zip" on to the end of the name | |
ARTIFACT_NAME="${ARTIFACT_NAME}.zip" | |
# e.g.: swift-6.1-RELEASE_android-0.1-x86_64.artifactbundle.tar.gz | |
echo "artifact-name=${ARTIFACT_NAME}" >> $GITHUB_OUTPUT | |
# validate some required paths in the artifactbundle | |
pushd ${ARTIFACT_BUILD}/*/*/usr | |
ls lib/swift/android | |
ls lib/swift/android/* | |
ls lib/swift/android/*/swiftrt.o | |
ls lib/*-linux-android/*/crtbegin_dynamic.o | |
ls lib/swift_static-* | |
ls lib/swift_static-*/android | |
ls lib/swift_static-*/android/libFoundationEssentials.a | |
ls lib/*-linux-android/libFoundationEssentials.so | |
ls lib/*-linux-android/libFoundationNetworking.so | |
ls lib/*-linux-android/libFoundationInternationalization.so | |
ls lib/*-linux-android/lib_FoundationICU.so | |
ls lib/*-linux-android/libFoundationXML.so | |
ls lib/*-linux-android/libTesting.so | |
ls lib/swift/clang/lib | |
ls lib/swift/clang/lib/linux | |
ls lib/swift/clang/lib/linux/*/libunwind.a | |
popd | |
- name: Upload SDK artifactbundle | |
uses: actions/upload-artifact@v4 | |
with: | |
compression-level: 0 | |
name: ${{ steps.info.outputs.artifact-name }} | |
path: ${{ steps.info.outputs.artifact-path }} | |
- name: Cleanup | |
run: | | |
# need to free up some space or else when installing we get: No space left on device | |
rm -rf ${{ runner.temp }}/swift-android-sdk/{build,src} | |
- name: Install artifactbundle | |
shell: bash | |
run: | | |
set -ex | |
${{ steps.info.outputs.swift-path }} sdk install ${{ steps.info.outputs.artifact-path }} | |
${{ steps.info.outputs.swift-path }} sdk configure --show-configuration $(${{ steps.info.outputs.swift-path }} sdk list | head -n 1) ${{ steps.info.outputs.sdk-id }} | |
# recent releases require that ANDROID_NDK_ROOT *not* be set | |
# see https://github.com/finagolfin/swift-android-sdk/issues/207 | |
echo "ANDROID_NDK_ROOT=" >> $GITHUB_ENV | |
- name: Build Demo Project | |
run: | | |
cd ${{ runner.temp }} | |
mkdir DemoProject | |
cd DemoProject | |
${{ steps.info.outputs.swift-path }} --version | |
${{ steps.info.outputs.swift-path }} package init | |
echo 'import Foundation' >> Sources/DemoProject/DemoProject.swift | |
echo 'import FoundationEssentials' >> Sources/DemoProject/DemoProject.swift | |
echo 'import FoundationXML' >> Sources/DemoProject/DemoProject.swift | |
echo 'import FoundationNetworking' >> Sources/DemoProject/DemoProject.swift | |
echo 'import Dispatch' >> Sources/DemoProject/DemoProject.swift | |
echo 'import Android' >> Sources/DemoProject/DemoProject.swift | |
${{ steps.info.outputs.swift-path }} build --build-tests --swift-sdk ${{ steps.info.outputs.sdk-id }} | |
- name: Test Demo Project on Android | |
uses: skiptools/swift-android-action@main | |
with: | |
package-path: ${{ runner.temp }}/DemoProject | |
installed-sdk: ${{ steps.info.outputs.sdk-id }} | |
installed-swift: ${{ steps.info.outputs.swift-root }} | |
- name: Build swift-algorithms | |
run: | | |
cd ${{ runner.temp }} | |
git clone https://github.com/apple/swift-algorithms.git | |
cd swift-algorithms | |
${{ steps.info.outputs.swift-path }} build --build-tests --swift-sdk ${{ steps.info.outputs.sdk-id }} | |
- name: Test swift-algorithms on Android | |
uses: skiptools/swift-android-action@main | |
with: | |
#package-path: ${{ runner.temp }}/DemoProject | |
package-path: ${{ runner.temp }}/swift-algorithms | |
installed-sdk: ${{ steps.info.outputs.sdk-id }} | |
installed-swift: ${{ steps.info.outputs.swift-root }} |