Compare commits

...
10 Commits
Author SHA1 Message Date
Fedor Korotkov 0682bdb108 Xcode 26.2 (#313)
* Xcode 26.2

* Corrected Xcode version to 26.1.1 in Cirrus config.

* Updated Tahoe runtime build number for iOS 26.2.
2025-12-13 10:30:58 -05:00
Fedor Korotkov 3abe5ef330 Fixed syntax 2025-12-06 17:44:39 -05:00
Fedor Korotkov 36c1f1d9b7 Updated Tahoe runtimes to Xcode 26.2 release versions 2025-12-05 16:30:31 -05:00
Fedor Korotkov 413eb891fe Xcode 26.2 RC 2025-12-05 16:30:31 -05:00
Dominik Abilio de Jesus MoreiraandDominik Wunderlich be895f2507 Fix Gatekeeper disable step in boot command (#311)
Added the missing "tab" command in the "Disable GateKeeper (2/2)" section. Without this command, Gatekeeper was not fully disabled, causing the provisioner check to fail when verifying that Gatekeeper is disabled.

Co-authored-by: Dominik Wunderlich <dominik.wunderlich@teamviewer.com>
2025-12-05 14:42:22 +01:00
Fedor Korotkov 9115ef2553 Increase DISK_SIZE from 290 to 300 2025-11-22 11:36:44 -05:00
Fedor Korotkov 11b22ea0d0 Preinstall common AI agents (#308)
So it's possible to automate things within VMs.
2025-11-20 12:24:31 -05:00
Fedor Korotkov 062ecd3e0e 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.
2025-11-20 10:16:45 -05:00
Fedor Korotkov 329c3e137e Add iOS 18.6 runtime to Tahoe (#306)
* Add iOS 18.7.2 runtime to Tahoe

* 18.6

* Updated expected runtimes

* Bump disk
2025-11-14 11:35:52 -05:00
Dominik Wunderlich e681fe0983 Remove explicit FileVault step from Packer boot command for macOS 26.1 compatibility (#305)
Remove the explicit FileVault step from the Packer boot command sequence used during macOS setup.
In macOS 26.1, the FileVault setup screen no longer appears consistently during initial setup because FileVault encryption is now automatically handled via system defaults, Apple ID, or MDM profiles.
This change prevents script failure or waiting on a missing UI prompt.
2025-11-13 19:57:38 +04:00
7 changed files with 136 additions and 31 deletions
+11 -2
View File
@@ -12,9 +12,10 @@ task:
XCODE_COMPONENTS: "\"MetalToolchain\""
DISK_SIZE: 400
- MACOS_VERSION: tahoe
XCODE_VERSIONS: "\"26.1.1\",\"26.0.1\",\"26.2-beta\""
XCODE_VERSIONS: "\"26.2\",\"26.1.1\",\"26.0.1\""
XCODE_COMPONENTS: "\"MetalToolchain\""
DISK_SIZE: 280
ADDITIONAL_IOS_BUILDS: "18.6"
DISK_SIZE: 300
<<: *defaults
pull_base_script:
- tart pull ghcr.io/cirruslabs/macos-$MACOS_VERSION-base:latest
@@ -29,6 +30,14 @@ task:
-var xcode_components="[$XCODE_COMPONENTS]" \
-var expected_runtimes_file="data/expected.$MACOS_VERSION.runtimes.txt" \
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: |
if [[ -z "$CIRRUS_PR" ]]; then
tart push "$MACOS_VERSION-xcode:runner" ghcr.io/cirruslabs/macos-runner:$MACOS_VERSION
+5 -2
View File
@@ -4,9 +4,12 @@ task:
env:
matrix:
- MACOS_VERSION: tahoe
XCODE_VERSION: "26.1.1"
XCODE_VERSION: "26.2"
XCODE_COMPONENTS: "MetalToolchain"
LATEST: true
- MACOS_VERSION: tahoe
XCODE_VERSION: "26.1.1"
XCODE_COMPONENTS: "MetalToolchain"
- MACOS_VERSION: tahoe
XCODE_VERSION: "26.0.1"
XCODE_COMPONENTS: "MetalToolchain"
@@ -33,7 +36,7 @@ task:
- tart pull ghcr.io/cirruslabs/macos-$MACOS_VERSION-base:latest
build_xcode_script:
- packer init templates/xcode.pkr.hcl
- packer build -var macos_version="$MACOS_VERSION" -var xcode_version="[\"$XCODE_VERSION\"]" -var xcode_components="[$XCODE_COMPONENTS]" templates/xcode.pkr.hcl
- packer build -var macos_version="$MACOS_VERSION" -var xcode_version="[\"$XCODE_VERSION\"]" -var xcode_components="[\"$XCODE_COMPONENTS\"]" templates/xcode.pkr.hcl
push_script: |
if [[ -z "$LATEST" ]]
then
+5 -4
View File
@@ -1,13 +1,14 @@
== Runtimes ==
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.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 - 23C54) - com.apple.CoreSimulator.SimRuntime.iOS-26-2
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.2 (26.2 - 23K5029e) - com.apple.CoreSimulator.SimRuntime.tvOS-26-2
tvOS 26.2 (26.2 - 23K51) - com.apple.CoreSimulator.SimRuntime.tvOS-26-2
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.2 (26.2 - 23S5280e) - com.apple.CoreSimulator.SimRuntime.watchOS-26-2
watchOS 26.2 (26.2 - 23S303) - com.apple.CoreSimulator.SimRuntime.watchOS-26-2
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.2 (26.2 - 23N5279e) - com.apple.CoreSimulator.SimRuntime.xrOS-26-2
visionOS 26.2 (26.2 - 23N301) - com.apple.CoreSimulator.SimRuntime.xrOS-26-2
+72
View File
@@ -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
+39
View File
@@ -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
}
}
+1 -5
View File
@@ -65,10 +65,6 @@ source "tart-cli" "tart" {
"<wait10s><tab><tab><spacebar>",
# Siri
"<wait10s><tab><spacebar><leftShiftOn><tab><leftShiftOff><spacebar>",
# You Mac is Ready for FileVault
"<wait10s><leftShiftOn><tab><tab><leftShiftOff><spacebar>",
# Mac Data Will Not Be Securely Encrypted
"<wait10s><tab><spacebar>",
# Choose Your Look
"<wait10s><leftShiftOn><tab><leftShiftOff><spacebar>",
# Update Mac Automatically
@@ -99,7 +95,7 @@ source "tart-cli" "tart" {
# On Tahoe opening System Settings through Spotlight is not very reliable, sometimes opens System information
"<wait10s>open '/System/Applications/System Settings.app'<enter>",
"<wait10s><leftCtrlOn><f2><leftCtrlOff><right><right><right><down>Privacy & Security<enter>",
"<wait10s><leftShiftOn><tab><tab><tab><tab><tab><leftShiftOff>",
"<wait10s><leftShiftOn><tab><tab><tab><tab><tab><tab><leftShiftOff>",
"<wait10s><down><wait1s><down><wait1s><enter>",
"<wait10s>admin<enter>",
"<wait10s><leftShiftOn><tab><leftShiftOff><wait1s><spacebar>",
+3 -18
View File
@@ -100,6 +100,9 @@ build {
"brew --version",
"brew update",
"brew upgrade",
"brew install codex",
"brew install --cask claude-code",
"brew install --cask amazon-q"
]
}
@@ -341,30 +344,12 @@ build {
#
# [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
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" {
inline = [
"source ~/.zprofile",
"xcrun simctl runtime dyld_shared_cache update --all || sleep 180",
"xcrun simctl list -v"
]
pause_before = "60s"
}
# Compatibility with GitHub Actions Runner Images, where