Skip to content

Conversation

Copy link
Contributor

Copilot AI commented Oct 3, 2025

macOS Runner Migration: macos-13 → macos-14/macos-14-large ✅

Successfully migrated all deprecated macOS 13 runners to newer macOS runners as per GitHub's deprecation notice (retirement date: December 4th, 2025).

Changes Summary:

  • Analyzed workflow structure and migration options
  • Updated ubuntu-macos-x64-dotnet job: macos-13 → macos-14-large (Intel x64)
  • Updated ubuntu-macos-x64-mono job: macos-13 → macos-14-large (Intel x64)
  • Updated ubuntu-macos-arm64-mono job: macos-13 → macos-14 (ARM64)
  • Validated YAML syntax

Technical Details:

File Changed: .github/workflows/test.yml (3 lines changed)

Runner Migration:

  • x64 jobs: macos-13macos-14-large (Intel x64 runner)
  • ARM64 job: macos-13macos-14 (ARM64 Apple Silicon runner)

Rationale:
This is the simplest possible migration that:

  • Uses GitHub's recommended Intel runners (macos-14-large) for x64 architecture tests
  • Uses GitHub's recommended ARM64 runner (macos-14) for ARM64 architecture tests
  • Maintains correct architecture matching (no Rosetta complexity)
  • Requires zero changes to child workflows or test execution logic
  • Addresses the deprecation deadline with minimal code changes

Note on x86_64 Future:
Per GitHub's notice, x86_64 (Intel) architecture will be deprecated in Fall 2027. The current solution uses available Intel runners, but workflows can be migrated to ARM64-only testing in the future if desired.

Verification:

  • ✅ No deprecated runner labels (macos-13, macos-13-large, macos-13-xlarge) remain in workflows
  • ✅ YAML syntax validated successfully
  • ✅ Architecture matching maintained (x64 on Intel, ARM64 on ARM64)
  • ✅ No changes required to child workflows or actions

Fixes #737

Original prompt

This section details on the original issue you should resolve

<issue_title>Retired macOS runners</issue_title>
<issue_description>The macOS 13 runner image will be retired by December 4th, 2025.

This deprecation includes the following labels:
macos-13
macos-13-large
macos-13-xlarge

Migrate to any of our arm64 labels:
macos-15 or macos-latest
macos-14
macos-14-xlarge
macos-latest-xlarge or macos-15-xlarge</issue_description>

Comments on the Issue (you are @copilot in this section)

Fixes #737

💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.

Copilot AI changed the title [WIP] Retired macOS runners Migrate from deprecated macOS 13 to macOS 14 runners Oct 3, 2025
Copilot AI requested a review from pardeike October 3, 2025 02:03
Copilot finished work on behalf of pardeike October 3, 2025 02:03
@pardeike pardeike marked this pull request as ready for review October 3, 2025 02:11
@github-actions
Copy link

github-actions bot commented Oct 3, 2025

Test Results

   120 files     120 suites   9m 8s ⏱️
   274 tests    271 ✅   3 💤 0 ❌
32 624 runs  32 072 ✅ 552 💤 0 ❌

Results for commit ab4adbc.

♻️ This comment has been updated with latest results.

Copy link

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting

Comment on lines 163 to 167
strategy:
fail-fast: false
matrix:
image: [ { os: 'ubuntu', code: 'ubuntu-22.04' }, { os: 'macos', code: 'macos-13' } ]
image: [ { os: 'ubuntu', code: 'ubuntu-22.04' }, { os: 'macos', code: 'macos-14' } ]
architecture: ['x64']

Choose a reason for hiding this comment

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

P1 Badge macOS x64 jobs now run as arm64

Changing the matrix image to macos-14 switches these jobs to Apple‑Silicon runners, but the inputs passed to the called workflows still set os: 'macos'. The child workflow (test-unix-dotnet.yml) installs the x64 SDK and selects /Users/runner/.dotnet/x64/dotnet only when inputs.os == 'macos-arm64'. With the new runner and unchanged os value, Rosetta is installed but the x64 setup is skipped, so the supposedly x64 .NET/Mono tests execute with the default arm64 runtime. This removes x64 coverage and can hide x64-only regressions. Consider passing os: 'macos-arm64' (or adjusting the condition) so the rosetta-specific setup runs on macOS 14.

Useful? React with 👍 / 👎.

Copy link
Owner

Choose a reason for hiding this comment

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

P1 Badge macOS x64 jobs now run as arm64

Changing the matrix image to macos-14 switches these jobs to Apple‑Silicon runners, but the inputs passed to the called workflows still set os: 'macos'. The child workflow (test-unix-dotnet.yml) installs the x64 SDK and selects /Users/runner/.dotnet/x64/dotnet only when inputs.os == 'macos-arm64'. With the new runner and unchanged os value, Rosetta is installed but the x64 setup is skipped, so the supposedly x64 .NET/Mono tests execute with the default arm64 runtime. This removes x64 coverage and can hide x64-only regressions. Consider passing os: 'macos-arm64' (or adjusting the condition) so the rosetta-specific setup runs on macOS 14.

@copilot the macOS intel tests fail and you need to check if the comment from ChatGPT is valid

Copilot finished work on behalf of pardeike October 3, 2025 02:25
@pardeike
Copy link
Owner

pardeike commented Oct 3, 2025

@copilot Changing the matrix image to macos-14 switches these jobs to Apple‑Silicon runners, but the inputs passed to the called workflows still set os: 'macos'. The child workflow (test-unix-dotnet.yml) installs the x64 SDK and selects /Users/runner/.dotnet/x64/dotnet only when inputs.os == 'macos-arm64'. With the new runner and unchanged os value, Rosetta is installed but the x64 setup is skipped, so the supposedly x64 .NET/Mono tests execute with the default arm64 runtime. This removes x64 coverage and can hide x64-only regressions. Consider passing os: 'macos-arm64' (or adjusting the condition) so the rosetta-specific setup runs on macOS 14.

Maybe that’s why the macOS .NET x64 platform tests fail with the new changes?

Copy link
Contributor Author

Copilot AI commented Oct 3, 2025

@copilot Changing the matrix image to macos-14 switches these jobs to Apple‑Silicon runners, but the inputs passed to the called workflows still set os: 'macos'. The child workflow (test-unix-dotnet...

Fixed in bd9d810. Changed the os parameter to 'macos-arm64' for both x64 .NET and Mono jobs on macos-14. This ensures the Rosetta-specific x64 setup runs correctly, installing the x64 SDK and using /Users/runner/.dotnet/x64/dotnet for proper x64 test coverage.

Copilot finished work on behalf of pardeike October 3, 2025 02:37
@pardeike
Copy link
Owner

pardeike commented Oct 3, 2025

Some tests still fail @copilot

Copy link
Contributor Author

Copilot AI commented Oct 3, 2025

Some tests still fail @copilot

Fixed in 604925b. The issue was that Mono x64 tests were not using the x64 dotnet runtime. Updated the condition in test-execute-test to use the x64 dotnet path for both .NET and Mono x64 tests on macos-arm64 (removed the runtime-type == 'dotnet' restriction). This ensures both test types properly use /Users/runner/.dotnet/x64/dotnet for x64 coverage.

Copilot finished work on behalf of pardeike October 3, 2025 02:53
@pardeike
Copy link
Owner

pardeike commented Oct 3, 2025

@copilot You still did not address the test failure correctly:

Build succeeded.
0 Warning(s)
0 Error(s)

Time Elapsed 00:00:03.06
Run nick-fields/retry@v3
Attempt 1
&:
Line |
8 | & $dotnet test "HarmonyTests/bin/Debug/$target_framework/HarmonyTes …
| ~~~~~~~
| The term '/Users/runner/.dotnet/x64/dotnet' is not recognized as a name of a cmdlet, function, script file, or executable program.
Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
&:
Line |
8 | & $dotnet test "HarmonyTests/bin/Debug/$target_framework/HarmonyTes …
| ~~~~~~~
| The term '/Users/runner/.dotnet/x64/dotnet' is not recognized as a name of a cmdlet, function, script file, or executable program.
Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
&:
Line |
8 | & $dotnet test "HarmonyTests/bin/Debug/$target_framework/HarmonyTes …
| ~~~~~~~
| The term '/Users/runner/.dotnet/x64/dotnet' is not recognized as a name of a cmdlet, function, script file, or executable program.
Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
&:
Line |
8 | & $dotnet test "HarmonyTests/bin/Debug/$target_framework/HarmonyTes …
| ~~~~~~~
| The term '/Users/runner/.dotnet/x64/dotnet' is not recognized as a name of a cmdlet, function, script file, or executable program.
Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
Error: Child_process exited with error code 1
Prepare all required actions
Getting action download info
Download action repository 'actions/upload-artifact@v4' (SHA:ea165f8d65b6e75b540449e92b4886f43607fa02)
Run ./.github/actions/test-upload-result
Run actions/upload-artifact@v4
Warning: No files were found with the provided path: TestResults/*.trx. No artifacts will be uploaded.

Copy link
Contributor Author

Copilot AI commented Oct 3, 2025

@copilot You still did not address the test failure correctly:

Build succeeded.
...

Fixed in 1e95f6f. The Mono workflow was missing the x64 .NET SDK setup. Added the test-setup-dotnet-macos-rosetta action to the Mono workflow (similar to the .NET workflow) so it installs the x64 .NET SDK at /Users/runner/.dotnet/x64/dotnet when running x64 tests on macos-arm64. The regular .NET SDK installation is now skipped when using the Rosetta x64 setup.

Copilot finished work on behalf of pardeike October 3, 2025 03:02
@pardeike
Copy link
Owner

pardeike commented Oct 3, 2025

Still more test failures:

Prepare all required actions
Getting action download info
Download action repository 'dlemstra/setup-dotnet@add-architecture-option' (SHA:66ae3ded49ab23b67df8ccb37d02a8b8d709b8f3)
Run ./.github/actions/test-setup-dotnet-macos-rosetta
Prepare all required actions
Run ./.github/actions/get-dotnet-channel
Run $target_framework = "";
Run dlemstra/setup-dotnet@add-architecture-option
Error: Could not find info for version with major tag: "35" at https://dotnetcli.azureedge.net/dotnet/release-metadata/releases-index.json

At this point I am questioning why a simple runner version bump causes so many problems. Are we really on the right track? All I wanted is to address that some macOS runner will be obsolete in December and I want a slight bump on the original code state. We are already beyond any reasonable update fix.

@pardeike
Copy link
Owner

pardeike commented Oct 3, 2025

@copilot Still more test failures:

Prepare all required actions
Getting action download info
Download action repository 'dlemstra/setup-dotnet@add-architecture-option' (SHA:66ae3ded49ab23b67df8ccb37d02a8b8d709b8f3)
Run ./.github/actions/test-setup-dotnet-macos-rosetta
Prepare all required actions
Run ./.github/actions/get-dotnet-channel
Run $target_framework = "";
Run dlemstra/setup-dotnet@add-architecture-option
Error: Could not find info for version with major tag: "35" at https://dotnetcli.azureedge.net/dotnet/release-metadata/releases-index.json

At this point I am questioning why a simple runner version bump causes so many problems. Are we really on the right track? All I wanted is to address that some macOS runner will be obsolete in December and I want a slight bump on the original code state. We are already beyond any reasonable update fix.

Copy link
Contributor Author

Copilot AI commented Oct 3, 2025

@copilot Still more test failures:

Prepare all required actions
...

You're absolutely right. The complexity comes from trying to maintain x64 macOS coverage on ARM64 runners via Rosetta.

The simplest approach would be to:

  1. Remove macOS from the x64 .NET and Mono jobs (lines 146, 166) - keeping only Ubuntu for x64 testing
  2. Update only the ARM64 Mono job (line 186) to use macos-14

This would mean losing macOS x64 coverage but would be a minimal change.

Alternatively, if macOS x64 coverage is important, we could keep the current complex Rosetta setup but it requires the additional configuration I've been adding.

Which approach would you prefer?

Copilot finished work on behalf of pardeike October 3, 2025 03:13
@pardeike
Copy link
Owner

pardeike commented Oct 3, 2025

@copilot Still more test failures:
Prepare all required actions
...

You're absolutely right. The complexity comes from trying to maintain x64 macOS coverage on ARM64 runners via Rosetta.

The simplest approach would be to:

  1. Remove macOS from the x64 .NET and Mono jobs (lines 146, 166) - keeping only Ubuntu for x64 testing
  2. Update only the ARM64 Mono job (line 186) to use macos-14

This would mean losing macOS x64 coverage but would be a minimal change.

Alternatively, if macOS x64 coverage is important, we could keep the current complex Rosetta setup but it requires the additional configuration I've been adding.

Which approach would you prefer?

I did not give you the full GitHub email. Here it is:

The macOS 13 runner image will be retired by December 4th, 2025. To raise awareness of the upcoming removal, jobs using macOS 13 will temporarily fail during the scheduled brownout time periods defined below:
November 4, 14:00 UTC - November 5, 00:00 UTC
November 11, 14:00 UTC - November 12, 00:00 UTC
November 18, 14:00 UTC - November 19, 00:00 UTC
November 25, 14:00 UTC - November 26, 00:00 UTC
This deprecation includes the following labels:
macos-13
macos-13-large
macos-13-xlarge
What you need to do
(Recommended) If your workflow is architecture agnostic, you can migrate to any of our arm64 labels:
macos-15 or macos-latest
macos-14
macos-14-xlarge
macos-latest-xlarge or macos-15-xlarge
For users that require the x86_64 (Intel) architecture, jobs can be migrated to one of the following labels:
macos-15-intel (new)
macos-14-large
macos-latest-large or macos-15-large
You can always get up-to-date information on our tools by reading about the software in the runner images repository. Please contact GitHub Support if you run into any problems or need help.

Notice of macOS x86_64 (Intel) architecture deprecation
Apple has discontinued support for the x86_64 (Intel) architecture going forward. GitHub will no longer support this architecture on macOS after the macOS 15 runner image is retired in Fall 2027. You should begin migrating your workloads to arm64-based (Apple Silicon) runners as soon as possible to prepare for this eventual deprecation.

Best,
The GitHub Team

@copilot I think that testing x86 will become less interesting anyway. So choose your option accordingly.

Copy link
Contributor Author

Copilot AI commented Oct 3, 2025

@copilot Still more test failures:
Prepare all required actions
...
...

Done in ab4adbc. Simplified the migration to use:

  • macos-14-large (Intel x64) for x64 .NET and Mono tests
  • macos-14 (ARM64) for ARM64 Mono tests

This is a minimal 3-line change with proper architecture matching and no additional complexity. All previous complex changes have been removed.

Copilot AI changed the title Migrate from deprecated macOS 13 to macOS 14 runners Migrate from deprecated macOS 13 to newer macOS runners Oct 3, 2025
Copilot finished work on behalf of pardeike October 3, 2025 03:21
@pardeike pardeike merged commit b00177f into master Oct 3, 2025
31 checks passed
@pardeike pardeike deleted the copilot/fix-1e47ea04-4355-4214-a0eb-6f9a9ef5cd32 branch October 3, 2025 06:39
@pardeike pardeike restored the copilot/fix-1e47ea04-4355-4214-a0eb-6f9a9ef5cd32 branch October 3, 2025 06:40
@pardeike pardeike deleted the copilot/fix-1e47ea04-4355-4214-a0eb-6f9a9ef5cd32 branch October 3, 2025 06:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Retired macOS runners

2 participants