Skip to content

Check for versions of macOS and Xcode that are unsupported for traced analysis - #4221

Open
mbg wants to merge 23 commits into
mainfrom
mbg/macos27/warn
Open

mbg wants to merge 23 commits into
mainfrom
mbg/macos27/warn

Conversation

@mbg

@mbg mbg commented Oct 9, 2026 •

Copy link
Copy Markdown
Member

Traced analysis is unsupported on macOS 27 (or newer) or with Xcode 27 (or newer). This PR adds a check for traced analyses which checks whether the macOS version is < 27 and the Xcode version is < 27.

If either is >= 27, then we report this issue to the user with a suitable diagnostic. I have also added a FF which controls whether this is just a warning or a fatal error which aborts the analysis.

Further, there is a new ToolsFeature for Swift which allows the CLI to indicate to us when it is ready to support swift on all platforms. Once the CLI reports that it supports this, we skip all of the checks for swift.

There are two new FFs: one which controls whether the new checks are performed and one which controls whether a failing check is a fatal error or not.

Notes for reviewers

  • We have to be careful about the checks in checkRunnerSupportsTracedAnalysis with respect to determining whether an analysis is traced.

Risk assessment

For internal use only. Please select the risk level of this change:

  • Low risk: Changes are fully under feature flags, or have been fully tested and validated in pre-production environments and are highly observable, or are documentation or test only.

Which use cases does this change impact?

Workflow types:

  • Advanced setup - Impacts users who have custom CodeQL workflows.
  • Managed - Impacts users with dynamic workflows (Default Setup, Code Quality, ...).

Products:

  • Code Scanning - The changes impact analyses when analysis-kinds: code-scanning.
  • Code Quality - The changes impact analyses when analysis-kinds: code-quality.
  • Other first-party - The changes impact other first-party analyses.

Environments:

  • Dotcom - Impacts CodeQL workflows on github.com and/or GitHub Enterprise Cloud with Data Residency.
  • GHES - Impacts CodeQL workflows on GitHub Enterprise Server.

How did/will you validate this change?

  • Unit tests - I am depending on unit test coverage (i.e. tests in .test.ts files).
  • End-to-end tests - I am depending on PR checks (i.e. tests in pr-checks).

If something goes wrong after this change is released, what are the mitigation and rollback strategies?

  • Feature flags - All new or changed code paths can be fully disabled with corresponding feature flags.

How will you know if something goes wrong after this change is released?

  • Telemetry - I rely on existing telemetry or have made changes to the telemetry.
    • Dashboards - I will watch relevant dashboards for issues after the release. Consider whether this requires this change to be released at a particular time rather than as part of a regular release.
    • Alerts - New or existing monitors will trip if something goes wrong with this change.

Are there any special considerations for merging or releasing this change?

  • Special considerations - This change should only be merged once certain preconditions are met. Please provide details of those or link to this PR from an internal issue.

Merge / deployment checklist

  • Confirm this change is backwards compatible with existing workflows.
  • Consider adding a changelog entry for this change.
  • Confirm the readme and docs have been updated if necessary.

@github-actions github-actions Bot added the size/XL May be very hard to review label Oct 9, 2026
@mbg
mbg changed the base branch from main to mbg/diagnostics/failed-sarif October 9, 2026 22:42
@mbg
mbg force-pushed the mbg/macos27/warn branch from b6de93b to 8baf1db Compare October 9, 2026 22:44
@mbg
mbg added this pull request to stack #4224 October 9, 2026 22:45
@mbg
mbg removed this pull request from stack #4224 October 12, 2026 11:00
@mbg
mbg force-pushed the mbg/macos27/warn branch from 8baf1db to b9e004d Compare October 12, 2026 13:48
@mbg
mbg added this pull request to stack #4227 October 12, 2026 13:49
@mbg
mbg force-pushed the mbg/macos27/warn branch 2 times, most recently from 1599deb to 0171ce3 Compare October 14, 2026 09:35
@mbg
mbg removed this pull request from stack #4227 October 16, 2026 16:16
@mbg
mbg added this pull request to stack #4250 October 16, 2026 16:20
@mbg mbg changed the title Check for versions of macOS and Xcode that are unsupported for traced Swift analysis Check for versions of macOS and Xcode that are unsupported for traced analysis Oct 16, 2026
@mbg
mbg force-pushed the mbg/macos27/warn branch 5 times, most recently from bcaccd9 to dd2f5ad Compare October 19, 2026 11:45
@github-actions github-actions Bot added size/XXL May be extremely hard to review and removed size/XL May be very hard to review labels Oct 19, 2026
@mbg
mbg force-pushed the mbg/macos27/warn branch from b0c1139 to 87997d1 Compare October 20, 2026 16:07
@mbg
mbg force-pushed the mbg/macos27/warn branch from 9a476c8 to 17685f3 Compare October 28, 2026 13:10
@mbg
mbg marked this pull request as ready for review October 28, 2026 13:23
@mbg
mbg requested a review from a team as a code owner October 28, 2026 13:23
@mbg
mbg requested review from henrymercer and a max review from Copilot October 28, 2026 13:23

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 Changes recommended

Swift capability handling can still reject supported configurations, workflow conditions let cancellation bypass the Dependabot exclusion, and missing feature flags prevent key CI checks and regression tests from exercising the intended paths.

6 open issues
5 resolved since last review
2 files not reviewed

Review effort: Max

Comment thread pr-checks/checks/unsupported-macos.yml
Comment thread pr-checks/sync.ts
if: "github.triggering_actor != 'dependabot[bot]'",
if:
jobSpecification.if !== undefined
? `${baseCondition} && ${jobSpecification.if}`
Comment on lines +100 to +102
logger,
}),
createTestConfig({ buildMode: BuildMode.None }),
platform: "darwin",
osRelease: "27.0.0",
env,
logger,
Comment thread src/languages/traced.ts
}

// If none of the languages are traced, then we can skip the compatibility checks below as well.
const tracedLanguages = await hasTracedLanguages(config, codeql);

@henrymercer henrymercer left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I'd like to dig deeper into the robustness of this method of checking the Xcode version. For instance, my machine has Xcode installed, but xcodeVersion would report "Xcode is probably not installed" because /private/var/db/xcode_select_link is missing. Also, Xcode is installed at /Applications/Xcode.app on my machine so even if Xcode was found, so the check would report that the path does not contain the expected pattern and we'd fail to determine the version number. I'm running macOS 27, and perhaps the behaviour would be different on a previous OS version, but I think we need to consider the variance in how Xcode might be installed if we're going to ship this to self-hosted runners.

Would you be able to share some discussion on why you chose this method? For instance, given we only care about checking whether the major version is >= 27, I'm curious how the check in the PR weighs up against e.g. xcrun --sdk macosx --show-sdk-version.

It might also be helpful to ship this more incrementally, e.g. we could ship the macOS 27 check as is in one PR, and we could ship the Xcode check as is but for hosted runners only in another. We could also add telemetry to measure whether the detection mechanism works in production. For instance, it might be useful to record if a Swift analysis completes successfully but the detection mechanism says Xcode is not installed.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/XXL May be extremely hard to review

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants