Skip to content

Commit acc46d3

Browse files
committed
Add back github self-hosted build
1 parent 9987e54 commit acc46d3

File tree

1 file changed

+168
-0
lines changed

1 file changed

+168
-0
lines changed

.github/workflows/pull_request.yml

Lines changed: 168 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,171 @@ jobs:
2121
name: docker-logs
2222
path: |
2323
*.log
24+
25+
android-build:
26+
name: Android ${{ matrix.build-type }} ${{ matrix.swift-version }} ${{ matrix.arch }} ${{ matrix.runner }} (compiler=${{ matrix.build-compiler }})
27+
strategy:
28+
fail-fast: false
29+
matrix:
30+
include:
31+
#- swift-version: 'swift-6.2-branch'
32+
# build-type: 'docker'
33+
# build-compiler: '1'
34+
# runner: 'self-hosted'
35+
#- swift-version: 'development'
36+
# build-type: 'docker'
37+
# build-compiler: '1'
38+
# runner: 'self-hosted'
39+
- swift-version: 'swift-6.2-branch'
40+
build-type: 'docker'
41+
build-compiler: '0'
42+
runner: 'ubuntu-24.04'
43+
- swift-version: 'development'
44+
build-type: 'docker'
45+
build-compiler: '0'
46+
runner: 'ubuntu-24.04'
47+
runs-on: ${{ matrix.runner }}
48+
# 15 hour timeout
49+
timeout-minutes: 900
50+
steps:
51+
- name: Free Disk Space
52+
if: ${{ matrix.runner != 'self-hosted' }}
53+
run: |
54+
df -h
55+
# brings available space from 25G to 32G
56+
# otherwise we sometimes run out of space during the build
57+
sudo rm -rf /usr/share/miniconda /usr/share/az* /usr/share/glade* /usr/local/share/chromium /usr/local/share/powershell /usr/share/dotnet /opt/ghc /opt/hostedtoolcache /usr/local/graalvm/ /usr/local/.ghcup/ /usr/local/lib/node_modules /usr/local/share/boost
58+
sudo docker image prune --all --force
59+
sudo docker builder prune -a
60+
df -h
61+
- name: Setup
62+
id: config
63+
run: |
64+
# these variabes are used by build-docker and build-local
65+
# to determine which Swift version to build for
66+
echo "BUILD_SCHEME=${{ matrix.swift-version }}" >> $GITHUB_ENV
67+
# pass the build-compiler matrix through to the build script
68+
echo "BUILD_COMPILER=${{ matrix.build-compiler }}" >> $GITHUB_ENV
69+
echo "TARGET_ARCHS=${{ matrix.arch }}" >> $GITHUB_ENV
70+
echo "WORKDIR=${{ runner.temp }}/swift-android-sdk" >> $GITHUB_ENV
71+
- name: Checkout repository
72+
uses: actions/checkout@v4
73+
- name: Build Android SDK (Local)
74+
if: ${{ matrix.build-type == 'local' }}
75+
working-directory: swift-ci/sdks/android
76+
run: |
77+
sudo apt install -q patchelf build-essential cmake ninja-build python3 golang git gnupg2 libcurl4-openssl-dev libedit-dev libicu-dev libncurses5-dev libpython3-dev libsqlite3-dev libxml2-dev rsync uuid-dev uuid-runtime tzdata curl unzip
78+
./build-local ${BUILD_SCHEME} ${WORKDIR}
79+
- name: Build Android SDK (Docker)
80+
if: ${{ matrix.build-type == 'docker' }}
81+
working-directory: swift-ci/sdks/android
82+
run: |
83+
./build-docker ${BUILD_SCHEME} ${WORKDIR}
84+
- name: Install Host Toolchain
85+
if: ${{ matrix.build-type == 'docker' }}
86+
working-directory: swift-ci/sdks/android
87+
run: |
88+
# when building in a Docker container, we don't have a local host toolchain,
89+
# but we need one in order to run the SDK validation tests, so we install it now
90+
HOST_OS=ubuntu$(lsb_release -sr)
91+
source ./scripts/toolchain-vars.sh
92+
mkdir -p ${WORKDIR}/host-toolchain
93+
./scripts/install-swift.sh ${WORKDIR}/host-toolchain/$SWIFT_BASE/usr
94+
ls ${WORKDIR}/host-toolchain
95+
${WORKDIR}/host-toolchain/*/usr/bin/swift --version
96+
- name: Get artifact info
97+
id: info
98+
shell: bash
99+
run: |
100+
set -ex
101+
SWIFT_ROOT=$(dirname ${WORKDIR}/host-toolchain/*/usr)
102+
echo "swift-root=${SWIFT_ROOT}" >> $GITHUB_OUTPUT
103+
echo "swift-path=${SWIFT_ROOT}/usr/bin/swift" >> $GITHUB_OUTPUT
104+
105+
ARTIFACT_PATH=$(realpath ${WORKDIR}/products/*.artifactbundle.tar.gz)
106+
echo "artifact-path=${ARTIFACT_PATH}" >> $GITHUB_OUTPUT
107+
echo "sdk-id=x86_64-unknown-linux-android28" >> $GITHUB_OUTPUT
108+
109+
ARTIFACT_EXT=".artifactbundle.tar.gz"
110+
ARTIFACT_NAME="$(basename ${ARTIFACT_PATH} ${ARTIFACT_EXT})"
111+
# depending on whether we are building locally or in a container, add a maker to the name
112+
if [[ "${{ matrix.build-type }}" == 'local' ]]; then
113+
ARTIFACT_NAME="${ARTIFACT_NAME}-local"
114+
fi
115+
if [[ "${{ matrix.build-compiler }}" == '1' ]]; then
116+
ARTIFACT_NAME="${ARTIFACT_NAME}-hostbuild"
117+
fi
118+
# artifacts need a unique name so we suffix with the matrix arch(s)
119+
if [[ ! -z "${{ matrix.arch }}" ]]; then
120+
ARTIFACT_NAME="${ARTIFACT_NAME}-$(echo ${{ matrix.arch }} | tr ',' '-')"
121+
fi
122+
ARTIFACT_NAME="${ARTIFACT_NAME}${ARTIFACT_EXT}"
123+
124+
# There is no way to prevent even a single-file artifact from being zipped:
125+
# https://github.com/actions/upload-artifact?tab=readme-ov-file#zip-archives
126+
# so the actual artifact download will look like:
127+
# swift-6.1-RELEASE_android-0.1-x86_64.artifactbundle.tar.gz.zip
128+
echo "artifact-name=${ARTIFACT_NAME}" >> $GITHUB_OUTPUT
129+
- name: Upload SDK artifactbundle
130+
uses: actions/upload-artifact@v4
131+
with:
132+
compression-level: 0
133+
name: ${{ steps.info.outputs.artifact-name }}
134+
path: ${{ steps.info.outputs.artifact-path }}
135+
- name: Cleanup
136+
if: ${{ matrix.runner != 'self-hosted' }}
137+
run: |
138+
# need to free up some space or else when installing we get: No space left on device
139+
df -h
140+
rm -rf ${WORKDIR}/{build,source}
141+
sudo docker image prune --all --force
142+
sudo docker builder prune -a
143+
df -h
144+
- name: Install artifactbundle
145+
if: ${{ matrix.runner != 'self-hosted' }}
146+
shell: bash
147+
run: |
148+
set -ex
149+
${{ steps.info.outputs.swift-path }} sdk install ${{ steps.info.outputs.artifact-path }}
150+
${{ steps.info.outputs.swift-path }} sdk configure --show-configuration $(${{ steps.info.outputs.swift-path }} sdk list | head -n 1) ${{ steps.info.outputs.sdk-id }}
151+
# recent releases require that ANDROID_NDK_ROOT *not* be set
152+
# see https://github.com/swiftlang/swift-driver/pull/1879
153+
echo "ANDROID_NDK_ROOT=" >> $GITHUB_ENV
154+
155+
- name: Create Demo Project
156+
if: ${{ matrix.runner != 'self-hosted' }}
157+
run: |
158+
cd ${{ runner.temp }}
159+
mkdir DemoProject
160+
cd DemoProject
161+
${{ steps.info.outputs.swift-path }} --version
162+
${{ steps.info.outputs.swift-path }} package init
163+
echo 'import Foundation' >> Sources/DemoProject/DemoProject.swift
164+
echo 'import FoundationEssentials' >> Sources/DemoProject/DemoProject.swift
165+
echo 'import FoundationXML' >> Sources/DemoProject/DemoProject.swift
166+
echo 'import FoundationNetworking' >> Sources/DemoProject/DemoProject.swift
167+
echo 'import Dispatch' >> Sources/DemoProject/DemoProject.swift
168+
echo 'import Android' >> Sources/DemoProject/DemoProject.swift
169+
- name: Test Demo Project on Android
170+
uses: skiptools/swift-android-action@main
171+
if: ${{ matrix.runner != 'self-hosted' }}
172+
with:
173+
# only test for the complete arch SDK build to speed up CI
174+
#run-tests: ${{ matrix.arch == '' }}
175+
package-path: ${{ runner.temp }}/DemoProject
176+
installed-sdk: ${{ steps.info.outputs.sdk-id }}
177+
installed-swift: ${{ steps.info.outputs.swift-root }}
178+
179+
- name: Checkout swift-algorithms
180+
if: ${{ matrix.runner != 'self-hosted' }}
181+
uses: actions/checkout@v4
182+
with:
183+
repository: apple/swift-algorithms
184+
path: swift-algorithms
185+
- name: Test swift-algorithms
186+
if: ${{ matrix.runner != 'self-hosted' }}
187+
uses: skiptools/swift-android-action@main
188+
with:
189+
package-path: swift-algorithms
190+
installed-sdk: ${{ steps.info.outputs.sdk-id }}
191+
installed-swift: ${{ steps.info.outputs.swift-root }}

0 commit comments

Comments
 (0)