Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 31 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -414,6 +414,35 @@ jobs:
- name: Build and test
run: ./Android/android.py ci --fast-ci ${{ matrix.arch }}-linux-android

build-ios:
name: iOS (${{ matrix.arch }})
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We include the arch for Android to differentiate the two, so can skip it here:

Suggested change
name: iOS (${{ matrix.arch }})
name: iOS

needs: build-context
if: needs.build-context.outputs.run-tests == 'true'
timeout-minutes: 60
strategy:
fail-fast: false
matrix:
include:
- arch: aarch64
runs-on: macos-15
runs-on: ${{ matrix.runs-on }}
Comment on lines +424 to +428
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In fact, arch isn't being used anywhere (other than in name:).

And we can use runs-on: macos-15 directly too:

Suggested change
matrix:
include:
- arch: aarch64
runs-on: macos-15
runs-on: ${{ matrix.runs-on }}
runs-on: macos-15

steps:
- uses: actions/checkout@v4
with:
persist-credentials: false

# GitHub recommends explicitly selecting the desired Xcode version:
# https://github.com/actions/runner-images/issues/12541#issuecomment-3083850140
# This became a necessity as a result of
# https://github.com/actions/runner-images/issues/12541 and
# https://github.com/actions/runner-images/issues/12751.
- name: Select Xcode version
run: |
sudo xcode-select --switch /Applications/Xcode_16.4.app
- name: Build and test
run: python3 Apple ci iOS --fast-ci --simulator 'iPhone 16e,OS=18.5'

build-wasi:
name: 'WASI'
needs: build-context
Expand Down Expand Up @@ -723,6 +752,7 @@ jobs:
- build-ubuntu-ssltests-awslc
- build-ubuntu-ssltests-openssl
- build-android
- build-ios
- build-wasi
- test-hypothesis
- build-asan
Expand Down Expand Up @@ -759,6 +789,7 @@ jobs:
build-ubuntu-ssltests-awslc,
build-ubuntu-ssltests-openssl,
build-android,
build-ios,
build-wasi,
test-hypothesis,
build-asan,
Expand Down
54 changes: 45 additions & 9 deletions Apple/__main__.py
Original file line number Diff line number Diff line change
Expand Up @@ -823,7 +823,7 @@ def test(context: argparse.Namespace, host: str | None = None) -> None:
+ [
"--",
"test",
"--slow-ci" if context.slow else "--fast-ci",
f"--{context.ci_mode}-ci",
"--single-process",
"--no-randomize",
# Timeout handling requires subprocesses; explicitly setting
Expand All @@ -836,11 +836,39 @@ def test(context: argparse.Namespace, host: str | None = None) -> None:
)


def apple_sim_host(platform_name: str) -> str:
"""Determine the native simulator target for this platform."""
for _, slice_parts in HOSTS[platform_name].items():
for host_triple in slice_parts:
parts = host_triple.split('-')
if parts[0] == platform.machine() and parts[-1] == "simulator":
return host_triple

raise KeyError(platform_name)


def ci(context: argparse.Namespace) -> None:
"""The implementation of the "ci" command."""
"""The implementation of the "ci" command.

In "Fast" mode, this compiles the build python, and the simulator for the
build machine's architecture; and runs the test suite with `--fast-ci`
configuration.

In "Slow" mode, it compiles the build python, plus all candidate
architectures (both device and simulator); then runs the test suite with
`--slow-ci` configuration.
"""
clean(context, "all")
build(context, host="all")
test(context, host="all")
if context.ci_mode == "slow":
# In slow mode, build and test the full XCframework
build(context, host="all")
test(context, host="all")
else:
# In fast mode, just build the simulator platform.
sim_host = apple_sim_host(context.platform)
build(context, host="build")
build(context, host=sim_host)
test(context, host=sim_host)


def parse_args() -> argparse.Namespace:
Expand Down Expand Up @@ -947,11 +975,13 @@ def parse_args() -> argparse.Namespace:
"an ARM64 iPhone 16 Pro simulator running iOS 26.0."
),
)
cmd.add_argument(
"--slow",
action="store_true",
help="Run tests with --slow-ci options.",
)
group = cmd.add_mutually_exclusive_group()
group.add_argument(
"--fast-ci", action="store_const", dest="ci_mode", const="fast",
help="Add test arguments for GitHub Actions")
group.add_argument(
"--slow-ci", action="store_const", dest="ci_mode", const="slow",
help="Add test arguments for buildbots")

for subcommand in [configure_build, configure_host, build, ci]:
subcommand.add_argument(
Expand Down Expand Up @@ -1012,4 +1042,10 @@ def signal_handler(*args):


if __name__ == "__main__":
# Under the buildbot, stdout is not a TTY, but we must still flush after
# every line to make sure our output appears in the correct order relative
# to the output of our subprocesses.
for stream in [sys.stdout, sys.stderr]:
stream.reconfigure(line_buffering=True)

main()
5 changes: 5 additions & 0 deletions Apple/testbed/__main__.py
Original file line number Diff line number Diff line change
Expand Up @@ -412,4 +412,9 @@ def main():


if __name__ == "__main__":
# Under the buildbot, stdout is not a TTY, but we must still flush after
# every line to make sure our output appears in the correct order relative
# to the output of our subprocesses.
for stream in [sys.stdout, sys.stderr]:
stream.reconfigure(line_buffering=True)
main()
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
iOS builds were added to CI.
Loading