analyze-selective-test…
Analyzes Xcode selective testing effectiveness for a test run, showing which test targets…
Compares two Xcode build runs to identify duration regressions, cache changes, and new issues. Can be invoked with build IDs, dashboard URLs, or branch names (e.g. `tuist compare-builds --base main --head feature-branch`).
$ npx -y skills add tuist/tuist --skill compare-builds --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/compare-buildsContext preview
The summary Claude sees to decide when to auto-load this skill.
Compares two Xcode build runs to identify duration regressions, cache changes, and new issues. Can be invoked with build IDs, dashboard URLs, or branch names (e.g. `tuist compare-builds --base main --head feature-branch`).
name: compare-builds description: Compares two Xcode build runs to identify duration regressions, cache changes, and new issues. Can be invoked with build IDs, dashboard URLs, or branch names (e.g. `tuist compare-builds --base main --head feature-branch`).
You'll typically receive two build identifiers (IDs, dashboard URLs, or branch names). Follow these steps:
1. Run `tuist build list --json` to find builds on each branch. 2. Run `tuist build show <build-id> --json` for both base and head builds. 3. Fetch sub-resource details: targets (`tuist build xcode target list <id> --json`), issues (`tuist build xcode issue list <id> --json`), and cache tasks (`tuist build xcode cache-task list <id> --json`). 4. Compare duration, status, cache hit rates, and other metrics. 5. Summarize regressions, improvements, and recommendations.
If only one identifier is provided, use the project's default branch as the baseline.
Fetch each directly:
tuist build show <base-id> --json tuist build show <head-id> --json
List recent builds on each branch and pick the latest:
tuist build list --git-branch <base-branch> --json --page-size 1 tuist build list --git-branch <head-branch> --json --page-size 1
Then fetch full details with `tuist build show <id> --json`.
After fetching both builds with `tuist build show <id> --json`, drill down into sub-resources for a deeper comparison.
tuist build xcode target list <base-id> --json tuist build xcode target list <head-id> --json
Look for targets that changed status (e.g., success to failure) or had significant duration changes.
tuist build xcode issue list <base-id> --json tuist build xcode issue list <head-id> --json
Look for new warnings or errors introduced in the head build.
tuist build xcode cache-task list <base-id> --json tuist build xcode cache-task list <head-id> --json
Identify which specific targets had cache misses or hits and whether that changed between builds.
After fetching both builds, compare:
| Metric | What to check | |---|---| | `duration` | Flag if head is >10% slower than base | | `status` | Flag if base succeeded but head failed | | `cacheable_tasks_count` | Note if task count changed | | `cacheable_task_local_hits_count` | Compare local hit counts | | `cacheable_task_remote_hits_count` | Compare remote hit counts | | Cache hit rate | `(local_hits + remote_hits) / cacheable_tasks_count * 100` | | `category` | Note if one is `clean` and the other `incremental` (makes duration comparison less meaningful) | | `scheme` / `configuration` | Ensure both builds used the same scheme and configuration for a fair comparison |
Compute the cache miss delta: `base_misses - head_misses`. Positive means head has fewer misses (improvement). Negative means regression.
If the head build is significantly slower:
1. Check if the `category` differs (clean vs incremental builds are not directly comparable). 2. Check if cache hit rate dropped, which would explain longer builds. 3. If both are incremental with similar cache rates, the regression is likely in compilation time.
Compare cache statistics:
Compare environment details:
Produce a summary with:
1. **Overall verdict**: Better, worse, or neutral compared to base. 2. **Duration**: Absolute and percentage change. 3. **Cache hit rate**: Change in hit rate with explanation. 4. **Status**: Any status changes (pass to fail or vice versa). 5. **Environment**: Note any environment differences that affect comparability. 6. **Recommendations**: Actionable next steps based on findings.
Example:
Build Comparison: base (abc123 on main) vs head (def456 on feature-x) Duration: 45.2s -> 62.8s (+39%) -- REGRESSION Cache hit rate: 85% -> 72% (-13%) -- 8 new cache misses Status: success -> success Root cause: Cache hit rate dropped due to 8 targets with invalidated caches. The dependency hash changed for FeatureModule, cascading to 7 downstream targets. Recommendations: - Investigate why FeatureModule's cache was invalidated - Consider splitting large targets to reduce cascade impact
Tuist supercharges your build system, whether you build with Xcode, Gradle, or Bazel.
Analyzes Xcode selective testing effectiveness for a test run, showing which test targets…
Compares two app bundles to identify size changes, new or removed artifacts, and platform…
Compares two `tuist cache` runs to identify cache hit rate changes and root-cause analysis of…
Compares two `tuist generate` runs to identify cache hit rate changes and root-cause analysis…
Compares two Gradle build runs to identify duration regressions, cache changes, and task…
Compares a single test case's behavior across two branches, analyzing pass/fail status,…