Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
50 commits
Select commit Hold shift + click to select a range
7645e81
Attempting to do CI to run unit tests on all PRs.
LowAmmo Mar 19, 2026
96581e0
Specify "iPhone 17"
LowAmmo Mar 19, 2026
c82e40f
Adding .xctestplans into the xcode project file and remo
LowAmmo Mar 19, 2026
c93cd9f
Generate code coverage
LowAmmo Apr 7, 2026
78d6363
Add code coverage results
LowAmmo Apr 7, 2026
31c0f50
Upload xcresult as an xcresult
LowAmmo Apr 8, 2026
4c1efa3
Attempting to indent the imbedded python script
LowAmmo Apr 8, 2026
fd2ac21
Debugging around the xcrun simctl command
LowAmmo Apr 8, 2026
9ae206a
Try to NOT escape out the back slashes in the regex strings
LowAmmo Apr 8, 2026
b9db292
Trim up the output.
LowAmmo Apr 8, 2026
36f0788
Fix model name
LowAmmo Apr 8, 2026
c696a83
no udid variable...dummy
LowAmmo Apr 8, 2026
0f75a18
I made myself laugh!
LowAmmo Apr 8, 2026
2ca5e82
Prefer arm64
LowAmmo Apr 8, 2026
a6ecc72
Update to cleanly support Node.js 24 (and 20)
LowAmmo Apr 8, 2026
232308f
Attempting to publish up the code coverage results for pull requests
LowAmmo Apr 8, 2026
cf15580
Better string manipulation
LowAmmo Apr 8, 2026
9d84000
Clean up
LowAmmo Apr 8, 2026
b7a7f14
Attempt to publish coverage to the pull request
LowAmmo Apr 8, 2026
dd4443e
more clean up
LowAmmo Apr 8, 2026
5658976
Try to fix the combined code coverage logic
LowAmmo Apr 8, 2026
8b41cb5
Muck with the indentation
LowAmmo Apr 8, 2026
86fb1f0
Clean up the code coverage summary handling logic
LowAmmo Apr 8, 2026
83d71f6
Hopefully fix the indentation issue
LowAmmo Apr 8, 2026
a4dc7cc
Fixing more indents
LowAmmo Apr 8, 2026
dfa0882
remove some indents
LowAmmo Apr 8, 2026
283d219
trying again
LowAmmo Apr 8, 2026
ec9138b
getting desperate
LowAmmo Apr 8, 2026
91c2426
WTF?!?!?
LowAmmo Apr 8, 2026
ecfc277
getting ridiculous
LowAmmo Apr 8, 2026
2335b8d
Going Plaid!
LowAmmo Apr 8, 2026
505397f
All this indenting!
LowAmmo Apr 8, 2026
9250d5a
Getting fancy
LowAmmo Apr 8, 2026
18b8f53
Clean up code coverage comment
LowAmmo Apr 8, 2026
5a1c470
Calculate coverage 1 time
LowAmmo Apr 8, 2026
3cc7782
"mapfile" not available
LowAmmo Apr 8, 2026
beadc23
Print coverage results to the github action
LowAmmo Apr 8, 2026
d241e62
Update to also build main/master and add badges to the readme.
LowAmmo Apr 8, 2026
cf58a5e
Use a random device for testing
LowAmmo Apr 10, 2026
692ccbe
Don't try to publish coverage anywhere. Keep it local for now.
LowAmmo Apr 10, 2026
b14a70b
Trying some reusable github actions
LowAmmo Apr 17, 2026
ee365e0
Attempt to separate out a "pick-my-xcode-tricorder" reusable action.
LowAmmo Apr 17, 2026
c957494
enhance coverage calculation logic to properly handle multiple xcresu…
LowAmmo Apr 17, 2026
a530865
Making a github action to run unit tests
LowAmmo Apr 17, 2026
0c7eec7
environment variables?
LowAmmo Apr 17, 2026
fad3db2
hopefully upload the directory of xcresults now...
LowAmmo Apr 17, 2026
88ade5b
An action just to combine code coverage info
LowAmmo Apr 17, 2026
5afede0
Create a json file to be more re-usable
LowAmmo Apr 17, 2026
c86e035
Attempting a little clean up
LowAmmo Apr 17, 2026
3b93b1b
Maybe checkout...
LowAmmo Apr 17, 2026
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
1 change: 0 additions & 1 deletion .coveralls.yml

This file was deleted.

61 changes: 61 additions & 0 deletions .github/actions/simctl-pick-a-tricorder/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
# Simctl Pick A Tricorder

Local composite action for choosing an installed simulator device from `xcrun simctl list devices --json`.

## Inputs

- `device_types`
- Ordered, comma-separated list of device types to return simulators for.
- Supported values: `iphone`, `ipad`, `macos`, `watch`, `vision`
- `selection_mode`
- `random-compatible`
- `random-latest-compatible`
- `model-type`
- `latest-model`
- `model_preferences`
- Semicolon-separated mappings such as `iphone=Pro Max;ipad=Pro;watch=Ultra`
- `iphoneos_version`, `ipados_version`, `macos_version`, `watchos_version`, `visionos_version`
- A specific version like `18`, `18.2`, `15.0`
- Or `latest`

`device_types` is required. The action returns exactly one simulator destination per requested device type, in the same order the device types were specified. If any requested device type cannot be satisfied, the action fails.

## Outputs

- `simulator_jsons`
- `destination_ids`

`simulator_jsons` returns one object per found simulator with:
- `udid`
- `name`
- `os`
- `modelType`
- `safe_name`

## Example

```yaml
- name: Pick simulator
id: simulator
uses: ./.github/actions/simctl-pick-a-tricorder
with:
device_types: iphone,ipad
iphoneos_version: latest
ipados_version: latest
selection_mode: random-latest-compatible

- name: Run tests
id: tests
uses: ./.github/actions/xcode-test-the-tricorders
with:
scheme: libPhoneNumber
xcode_container: libPhoneNumber.xcodeproj
destination_ids: ${{ steps.simulator.outputs.destination_ids }}
simulator_jsons: ${{ steps.simulator.outputs.simulator_jsons }}

- name: Upload unit test results
uses: actions/upload-artifact@v6
with:
name: project-unit-tests-libPhoneNumber
path: ${{ steps.tests.outputs.result_bundle_directory }}
```
61 changes: 61 additions & 0 deletions .github/actions/simctl-pick-a-tricorder/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
name: Simctl Pick A Tricorder
description: Select a compatible Apple simulator device from the installed simctl inventory.

inputs:
device_types:
description: "Ordered, comma-separated list of device types to consider. Supported values: iphone, ipad, macos, watch, vision."
required: true
selection_mode:
description: "One of random-compatible, random-latest-compatible, model-type, latest-model."
required: false
default: random-compatible
model_preferences:
description: 'Semicolon-separated device type mappings such as "iphone=Pro Max;ipad=Pro;watch=Ultra;vision=Pro".'
required: false
default: ""
iphoneos_version:
description: "Specific iOS version for iPhone devices, or latest."
required: false
default: latest
ipados_version:
description: "Specific iOS version for iPad devices, or latest."
required: false
default: latest
macos_version:
description: "Specific macOS version for macOS simulator devices, or latest."
required: false
default: latest
watchos_version:
description: "Specific watchOS version for watch devices, or latest."
required: false
default: latest
visionos_version:
description: "Specific visionOS version for Vision devices, or latest."
required: false
default: latest

outputs:
simulator_jsons:
description: "The selected simulators as a JSON array of objects with udid, name, os, and modelType."
value: ${{ steps.pick.outputs.simulator_jsons }}
destination_ids:
description: "The selected simulator UDIDs as a newline-separated list."
value: ${{ steps.pick.outputs.destination_ids }}

runs:
using: composite
steps:
- name: Pick simulator
id: pick
shell: bash
run: |
set -eo pipefail
python3 "${{ github.action_path }}/pick_simulator.py" \
--device-types "${{ inputs.device_types }}" \
--selection-mode "${{ inputs.selection_mode }}" \
--model-preferences "${{ inputs.model_preferences }}" \
--iphoneos-version "${{ inputs.iphoneos_version }}" \
--ipados-version "${{ inputs.ipados_version }}" \
--macos-version "${{ inputs.macos_version }}" \
--watchos-version "${{ inputs.watchos_version }}" \
--visionos-version "${{ inputs.visionos_version }}"
Loading
Loading