Xcode 26.2 Beta 2 (#307)
* Xcode 26.2 Beta 2 Plus wait for simulators to become available. * Update expected runtimes for Xcode 26.2 Beta 2 * Try to wait an hour * Cleanup LLM generated script * Add `exex-script.pkr.hcl` template and adjust simulator wait logic * Finalize * Fixed script name * Fixed typo * Use scrript option.
This commit is contained in:
parent
329c3e137e
commit
062ecd3e0e
|
|
@ -12,7 +12,7 @@ task:
|
||||||
XCODE_COMPONENTS: "\"MetalToolchain\""
|
XCODE_COMPONENTS: "\"MetalToolchain\""
|
||||||
DISK_SIZE: 400
|
DISK_SIZE: 400
|
||||||
- MACOS_VERSION: tahoe
|
- MACOS_VERSION: tahoe
|
||||||
XCODE_VERSIONS: "\"26.1.1\",\"26.0.1\",\"26.2-beta\""
|
XCODE_VERSIONS: "\"26.1.1\",\"26.0.1\",\"26.2-beta-2\""
|
||||||
XCODE_COMPONENTS: "\"MetalToolchain\""
|
XCODE_COMPONENTS: "\"MetalToolchain\""
|
||||||
ADDITIONAL_IOS_BUILDS: "18.6"
|
ADDITIONAL_IOS_BUILDS: "18.6"
|
||||||
DISK_SIZE: 290
|
DISK_SIZE: 290
|
||||||
|
|
@ -30,6 +30,14 @@ task:
|
||||||
-var xcode_components="[$XCODE_COMPONENTS]" \
|
-var xcode_components="[$XCODE_COMPONENTS]" \
|
||||||
-var expected_runtimes_file="data/expected.$MACOS_VERSION.runtimes.txt" \
|
-var expected_runtimes_file="data/expected.$MACOS_VERSION.runtimes.txt" \
|
||||||
templates/xcode.pkr.hcl
|
templates/xcode.pkr.hcl
|
||||||
|
finalize_script: |
|
||||||
|
if [[ -f "scripts/finalize-$MACOS_VERSION.sh" ]]; then
|
||||||
|
packer build -var vm_name="$MACOS_VERSION-xcode:runner" \
|
||||||
|
-var script_path="scripts/finalize-$MACOS_VERSION.sh" \
|
||||||
|
templates/exex-script.pkr.hcl
|
||||||
|
else
|
||||||
|
echo "Skipping prepare script for $MACOS_VERSION"
|
||||||
|
fi
|
||||||
push_script: |
|
push_script: |
|
||||||
if [[ -z "$CIRRUS_PR" ]]; then
|
if [[ -z "$CIRRUS_PR" ]]; then
|
||||||
tart push "$MACOS_VERSION-xcode:runner" ghcr.io/cirruslabs/macos-runner:$MACOS_VERSION
|
tart push "$MACOS_VERSION-xcode:runner" ghcr.io/cirruslabs/macos-runner:$MACOS_VERSION
|
||||||
|
|
|
||||||
|
|
@ -2,13 +2,13 @@
|
||||||
iOS 18.6 (18.6 - 22G86) - com.apple.CoreSimulator.SimRuntime.iOS-18-6
|
iOS 18.6 (18.6 - 22G86) - com.apple.CoreSimulator.SimRuntime.iOS-18-6
|
||||||
iOS 26.0 (26.0.1 - 23A8464) - com.apple.CoreSimulator.SimRuntime.iOS-26-0
|
iOS 26.0 (26.0.1 - 23A8464) - com.apple.CoreSimulator.SimRuntime.iOS-26-0
|
||||||
iOS 26.1 (26.1 - 23B86) - com.apple.CoreSimulator.SimRuntime.iOS-26-1
|
iOS 26.1 (26.1 - 23B86) - com.apple.CoreSimulator.SimRuntime.iOS-26-1
|
||||||
iOS 26.2 (26.2 - 23C5027f) - com.apple.CoreSimulator.SimRuntime.iOS-26-2
|
iOS 26.2 (26.2 - 23C5044b) - com.apple.CoreSimulator.SimRuntime.iOS-26-2
|
||||||
tvOS 26.0 (26.0 - 23J352) - com.apple.CoreSimulator.SimRuntime.tvOS-26-0
|
tvOS 26.0 (26.0 - 23J352) - com.apple.CoreSimulator.SimRuntime.tvOS-26-0
|
||||||
tvOS 26.1 (26.1 - 23J579) - com.apple.CoreSimulator.SimRuntime.tvOS-26-1
|
tvOS 26.1 (26.1 - 23J579) - com.apple.CoreSimulator.SimRuntime.tvOS-26-1
|
||||||
tvOS 26.2 (26.2 - 23K5029e) - com.apple.CoreSimulator.SimRuntime.tvOS-26-2
|
tvOS 26.2 (26.2 - 23K5046a) - com.apple.CoreSimulator.SimRuntime.tvOS-26-2
|
||||||
watchOS 26.0 (26.0 - 23R353) - com.apple.CoreSimulator.SimRuntime.watchOS-26-0
|
watchOS 26.0 (26.0 - 23R353) - com.apple.CoreSimulator.SimRuntime.watchOS-26-0
|
||||||
watchOS 26.1 (26.1 - 23S36) - com.apple.CoreSimulator.SimRuntime.watchOS-26-1
|
watchOS 26.1 (26.1 - 23S36) - com.apple.CoreSimulator.SimRuntime.watchOS-26-1
|
||||||
watchOS 26.2 (26.2 - 23S5280e) - com.apple.CoreSimulator.SimRuntime.watchOS-26-2
|
watchOS 26.2 (26.2 - 23S5297b) - com.apple.CoreSimulator.SimRuntime.watchOS-26-2
|
||||||
visionOS 26.0 (26.0 - 23M336) - com.apple.CoreSimulator.SimRuntime.xrOS-26-0
|
visionOS 26.0 (26.0 - 23M336) - com.apple.CoreSimulator.SimRuntime.xrOS-26-0
|
||||||
visionOS 26.1 (26.1 - 23N47) - com.apple.CoreSimulator.SimRuntime.xrOS-26-1
|
visionOS 26.1 (26.1 - 23N47) - com.apple.CoreSimulator.SimRuntime.xrOS-26-1
|
||||||
visionOS 26.2 (26.2 - 23N5279e) - com.apple.CoreSimulator.SimRuntime.xrOS-26-2
|
visionOS 26.2 (26.2 - 23N5296a) - com.apple.CoreSimulator.SimRuntime.xrOS-26-2
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,72 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
source ~/.zprofile
|
||||||
|
|
||||||
|
# Set shell options to enable fail-fast behavior
|
||||||
|
#
|
||||||
|
# * -e: fail the script when an error occurs or command fails
|
||||||
|
# * -u: fail the script when attempting to reference unset parameters
|
||||||
|
# * -o pipefail: by default an exit status of a pipeline is that of its
|
||||||
|
# last command, this fails the pipe early if an error in
|
||||||
|
# any of its commands occurs
|
||||||
|
#
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
# Wait until `xcrun simctl list devices -v` no longer reports any devices as "unavailable".
|
||||||
|
#
|
||||||
|
# Exit codes:
|
||||||
|
# 0 - Success: no devices are marked as unavailable within the timeout window
|
||||||
|
# 1 - Failure: timed out waiting for devices to become available
|
||||||
|
# 2 - Failure: prerequisites missing (e.g., xcrun not found)
|
||||||
|
|
||||||
|
DEFAULT_TIMEOUT_MINUTES=60
|
||||||
|
TIMEOUT_MINUTES=${1:-$DEFAULT_TIMEOUT_MINUTES}
|
||||||
|
|
||||||
|
if ! [[ "$TIMEOUT_MINUTES" =~ ^[0-9]+$ ]]; then
|
||||||
|
echo "[wait-simulators] ERROR: TIMEOUT_MINUTES must be an integer number of minutes (got: '$TIMEOUT_MINUTES')." >&2
|
||||||
|
exit 2
|
||||||
|
fi
|
||||||
|
|
||||||
|
SECONDS_TOTAL=$(( TIMEOUT_MINUTES * 60 ))
|
||||||
|
DEADLINE=$(( $(date +%s) + SECONDS_TOTAL ))
|
||||||
|
SLEEP_SECONDS=15
|
||||||
|
|
||||||
|
# Print a one-line status snapshot of current unavailable devices (if any)
|
||||||
|
print_status() {
|
||||||
|
if xcrun simctl list devices -v | grep -qi "unavailable"; then
|
||||||
|
echo "[wait-simulators] Still seeing 'unavailable' devices at $(date '+%Y-%m-%d %H:%M:%S')"
|
||||||
|
# Show a concise list of unavailable lines for debugging
|
||||||
|
xcrun simctl list devices -v | grep -i "unavailable" | sed 's/^/[wait-simulators] /'
|
||||||
|
else
|
||||||
|
echo "[wait-simulators] No 'unavailable' devices detected at $(date '+%Y-%m-%d %H:%M:%S')"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
trap 'echo "[wait-simulators] Interrupted" >&2; exit 130' INT TERM
|
||||||
|
|
||||||
|
echo "[wait-simulators] Waiting up to ${TIMEOUT_MINUTES} minute(s) for simulators to become available..."
|
||||||
|
|
||||||
|
while true; do
|
||||||
|
if ! xcrun simctl list devices -v | grep -qi "unavailable"; then
|
||||||
|
echo "[wait-simulators] All simulators are available."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
NOW=$(date +%s)
|
||||||
|
if (( NOW >= DEADLINE )); then
|
||||||
|
echo "[wait-simulators] TIMEOUT after ${TIMEOUT_MINUTES} minute(s). Some simulators remain 'unavailable'." >&2
|
||||||
|
echo "[wait-simulators] Final snapshot of unavailable devices:" >&2
|
||||||
|
xcrun simctl list devices -v | grep -i "unavailable" | sed 's/^/[wait-simulators] /' >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
print_status
|
||||||
|
REMAIN=$(( DEADLINE - NOW ))
|
||||||
|
# Sleep in chunks to allow quicker exit when they become available
|
||||||
|
SLEEP=$SLEEP_SECONDS
|
||||||
|
if (( REMAIN < SLEEP_SECONDS )); then SLEEP=$REMAIN; fi
|
||||||
|
sleep "$SLEEP"
|
||||||
|
# Loop and re-check
|
||||||
|
done
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,39 @@
|
||||||
|
packer {
|
||||||
|
required_plugins {
|
||||||
|
tart = {
|
||||||
|
version = ">= 1.12.0"
|
||||||
|
source = "github.com/cirruslabs/tart"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "vm_name" {
|
||||||
|
type = string
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "script_path" {
|
||||||
|
type = string
|
||||||
|
description = "Path to a local script that should be uploaded and executed inside the VM."
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "pause_before" {
|
||||||
|
type = string
|
||||||
|
default = "60s"
|
||||||
|
description = "How long Packer should wait before running the uploaded script."
|
||||||
|
}
|
||||||
|
|
||||||
|
source "tart-cli" "tart" {
|
||||||
|
vm_name = "${var.vm_name}"
|
||||||
|
ssh_password = "admin"
|
||||||
|
ssh_username = "admin"
|
||||||
|
ssh_timeout = "120s"
|
||||||
|
}
|
||||||
|
|
||||||
|
build {
|
||||||
|
sources = ["source.tart-cli.tart"]
|
||||||
|
|
||||||
|
provisioner "shell" {
|
||||||
|
script = var.script_path
|
||||||
|
pause_before = var.pause_before
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -341,30 +341,12 @@ build {
|
||||||
#
|
#
|
||||||
# [1]: https://apple.stackexchange.com/questions/412101/update-dyld-sim-shared-cache-is-taking-up-a-lot-of-memory
|
# [1]: https://apple.stackexchange.com/questions/412101/update-dyld-sim-shared-cache-is-taking-up-a-lot-of-memory
|
||||||
# [2]: https://stackoverflow.com/a/68394101/9316533
|
# [2]: https://stackoverflow.com/a/68394101/9316533
|
||||||
provisioner "shell" {
|
|
||||||
inline = [
|
|
||||||
"source ~/.zprofile",
|
|
||||||
"xcrun simctl runtime dyld_shared_cache update --all || sleep 180",
|
|
||||||
"xcrun simctl list -v",
|
|
||||||
]
|
|
||||||
}
|
|
||||||
|
|
||||||
// Restart the VM
|
|
||||||
provisioner "shell" {
|
|
||||||
inline = [
|
|
||||||
"sudo shutdown -r now"
|
|
||||||
]
|
|
||||||
expect_disconnect = true
|
|
||||||
}
|
|
||||||
|
|
||||||
// Wait for VM to come back up and run simctl commands again
|
|
||||||
provisioner "shell" {
|
provisioner "shell" {
|
||||||
inline = [
|
inline = [
|
||||||
"source ~/.zprofile",
|
"source ~/.zprofile",
|
||||||
"xcrun simctl runtime dyld_shared_cache update --all || sleep 180",
|
"xcrun simctl runtime dyld_shared_cache update --all || sleep 180",
|
||||||
"xcrun simctl list -v"
|
"xcrun simctl list -v"
|
||||||
]
|
]
|
||||||
pause_before = "60s"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Compatibility with GitHub Actions Runner Images, where
|
# Compatibility with GitHub Actions Runner Images, where
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue