runner-images icon indicating copy to clipboard operation
runner-images copied to clipboard

[macOS] Support policy changes; Xcode 14 and 16 will be removed from macOS 14 on November 4

Open erik-bershel opened this issue 1 year ago • 13 comments

Breaking changes

Current support policy:

- all OS compatible versions side-by-side
- for beta, GM versions - latest beta only
- old patch versions are deprecated in 3 months

New support policy:

- only one major version of Xcode will be supported per macOS version
- all minor versions of the supported major version will be available
- beta and RC versions will be provided "as-is" in the latest available macOS image only no matter of beta/GA status of the image
- when a new patch version is released, the previous patch version will be replaced
  • What does it means in general terms? Starting from the specified date, all minor versions of Xcode 14 and Xcode 16 will be removed from the macOS-14 image.
  • What about other images? These changes will not affect macOS-12 and macOS-13 images. The changes will affect macOS-14 and all subsequent images. As a result, macOS-14-based images will contain only Xcode 15.x versions, macOS-15 images will contain only Xcode 16.x versions, and so on.
  • What happens when a new major Xcode beta is released and there is no next revision of the macOS image? Such a beta will be shipped as part of the latest macOS image that supports this Xcode, until the next base macOS image is released, for example: Xcode 16 was shipped as part of macOS-14 until we released macOS-15.

Target date

November 4, 2024

The motivation for the changes

Recently, mainly due to the introduction of the new visionOS platform, macOS-based images have grown to such sizes that they are becoming more difficult to maintain, and users are experiencing difficulties with available disk space, which is critical for completing builds. Parent issue:

  • https://github.com/actions/runner-images/issues/10511

Possible impact

Workflows based on macOS-14 will stop running if they depend on Xcode 14 and/or Xcode 16

Platforms affected

  • [X] Azure DevOps
  • [X] GitHub Actions

Runner images affected

  • [ ] Ubuntu 20.04
  • [ ] Ubuntu 22.04
  • [ ] Ubuntu 24.04
  • [ ] macOS 12
  • [ ] macOS 13
  • [ ] macOS 13 Arm64
  • [X] macOS 14
  • [X] macOS 14 Arm64
  • [X] macOS 15
  • [X] macOS 15 Arm64
  • [ ] Windows Server 2019
  • [ ] Windows Server 2022

Mitigation ways

Users whose workflows depend on Xcode 14 and/or Xcode 16 will be forced to use the macOS-13 image for Xcode-14 and the macOS-15 image for Xcode-16, respectively. Be aware that macos-13 YAML label refer to Intel-based image.

erik-bershel avatar Sep 30 '24 11:09 erik-bershel

This is a bit messed up since macos-15 is not available in Azure DevOps Pipelines. Will they be available in time for this change?

Cheesebaron avatar Oct 01 '24 07:10 Cheesebaron

This is a bit messed up since macos-15 is not available in Azure DevOps Pipelines. Will they be available in time for this change?

Can we get a response on this?

LotskiAndrej avatar Oct 03 '24 14:10 LotskiAndrej

Hey @Cheesebaron and @LotskiAndrej!

We are working on adding macOS-15 to ADO, but no ETA or promises are available now. I'll publish info in https://github.com/actions/runner-images/issues/10686 once available.

erik-bershel avatar Oct 03 '24 15:10 erik-bershel

Is there any way to use Xcode 16 currently using macOS-14 ? I run task for checking Xcode version on ADO and got this, but it says it cannot locate xcode 16 Xcode.app Xcode_14.3.1.app Xcode_14.3.app Xcode_15.0.1.app Xcode_15.0.app Xcode_15.1.0.app Xcode_15.1.app Xcode_15.2.0.app Xcode_15.2.app Xcode_15.3.0.app Xcode_15.3.app Xcode_15.4.0.app Xcode_15.4.app Xcode_16.0.0.app Xcode_16.0.app Xcode_16.1.0.app Xcode_16.1.app Xcode_16.1_beta_2.app Xcode_16.app

mjosipovic-tgr avatar Oct 04 '24 14:10 mjosipovic-tgr

Is there any way to use Xcode 16 currently using macOS-14 ?

Yes, we have not removed Xcode 16 from macOS-14. It will be done on October 28.

I run task for checking Xcode version on ADO and got this, but it says it cannot locate xcode 16

Recommended task: https://learn.microsoft.com/en-us/azure/devops/pipelines/ecosystems/xcode?view=azure-devops

erik-bershel avatar Oct 04 '24 15:10 erik-bershel

Thanks for the response, but since I'm using MAUI, I cannot add xcWorkspacePath, and ADO crashes if I don't enter anything. I tried like this also

- task: Bash@3
  displayName: 'Set Xcode Version to 16'
  inputs:
    targetType: 'inline'
    script: |
      sudo xcode-select -s /Applications/Xcode_16.0.app/Contents/Developer

But it cannot locate the file

mjosipovic-tgr avatar Oct 04 '24 15:10 mjosipovic-tgr

@mjosipovic-tgr, I am currently using the same command line command you are using with macOS-14 to set it to use Xcode 16 and it works fine.

sudo xcode-select -s /Applications/Xcode_16.app/Contents/Developer

I'm using the classic pipeline editor:

image

randyburden avatar Oct 04 '24 17:10 randyburden

I tried it few times, changed the order of the tasks in yaml, and managed to get it to work, tnx for the responses.

mjosipovic-tgr avatar Oct 07 '24 13:10 mjosipovic-tgr

Hey @Cheesebaron and @LotskiAndrej!

We are working on adding macOS-15 to ADO, but no ETA or promises are available now. I'll publish info in #10686 once available.

We have numerous customers with production MAUI applications that are targeting the Apple App Store, actively being built with Xcode 16, as is currently supported [and 'required' by the current .NET 8 MAUI workloads]. Many of those same customers pay for ADO hosted pipeline time so they can successfully build, test and deploy their applications. Removing this support before Azure DevOps has an available macos-15 alternative feels short sighted at best. Doing so with less than 1 month notice will be hard to explain to our customers that rely on this functionality.

I understand the difficulty of managing all the various Xcode versions, but the answer cannot be that we leave customers without viable options.

bengavin avatar Oct 10 '24 15:10 bengavin

👋 We are shifting our plans for the week due to a number of circumstances.

erik-bershel avatar Oct 22 '24 11:10 erik-bershel

👋 We are shifting our plans for the week due to a number of circumstances.

Thanks that gives us a bit more time to figure out how to tackle this issue, whether to run on our own hardware or move from Azure DevOps Pipelines.

Cheesebaron avatar Oct 22 '24 15:10 Cheesebaron

Hey @Cheesebaron, macos-15 image with Xcode 16 will be available on Azure DevOps before the deprecation anyway.

erik-bershel avatar Oct 22 '24 15:10 erik-bershel

macOS-15 is available using Azure DevOps 🚀 More info: https://learn.microsoft.com/en-us/azure/devops/pipelines/agents/hosted?view=azure-devops&tabs=yaml

erik-bershel avatar Oct 24 '24 10:10 erik-bershel

macOS-15 is available using Azure DevOps 🚀 More info: https://learn.microsoft.com/en-us/azure/devops/pipelines/agents/hosted?view=azure-devops&tabs=yaml

Thank you to the team!

bengavin avatar Oct 24 '24 11:10 bengavin

Some of the tooling for migrating from macOS-14 to 15 is inaccessible and first should be fixed: (https://github.com/actions/runner-images/pull/10856)

Pastajello avatar Oct 30 '24 07:10 Pastajello

We changed to macOS-15 vM, but we are having issues with android build

tarting: Build Android MAUI app
==============================================================================
Task         : Bash
Description  : Run a Bash script on macOS, Linux, or Windows
Version      : 3.246.1
Author       : Microsoft Corporation
Help         : https://docs.microsoft.com/azure/devops/pipelines/tasks/utility/bash
==============================================================================
Generating script.
Script contents:
.
.
.
========================== Starting Command Output ===========================
.
.
.
.


/Users/runner/hostedtoolcache/dotnet/packs/Microsoft.Android.Sdk.Darwin/34.0.143/targets/Microsoft.Android.Sdk.Tooling.targets(31,5): error XA5205: Cannot find `aapt`. Please install the Android SDK Build-Tools package with the `/Users/runner/Library/Android/sdk/tools/android` program. 

Workload updates are available. Run `dotnet workload list` for more information.

##[error]Bash exited with code '1'.
Finishing: Build Android MAUI app

Is this a known issue, on macOS-14 it worked ok, but iOS stopped working on macOS-14

ILLINK : error MT2362: The linker step 'ClassHandleRewriter' failed during processing: One or more errors occurred. (The type 'UIKit.UITextFormattingViewController' (used as a parameter in UIKit.UITextView/_UITextViewDelegate.DidBeginFormatting) is not available in iOS 17.5 (it was introduced in iOS 18.0). Please build with a newer iOS SDK (usually done by using the most recent version of Xcode). 

a lot of these errors were popping up

mjosipovic-tgr avatar Nov 01 '24 11:11 mjosipovic-tgr

@mjosipovic-tgr Were you able to solve your issue? I am asking because I am facing the same issue currently.

thisisthekap avatar Nov 05 '24 16:11 thisisthekap

@mjosipovic-tgr Were you able to solve your issue? I am asking because I am facing the same issue currently.

We just do our Android builds on macos-14, which continues to work fine :)

bengavin avatar Nov 05 '24 16:11 bengavin

@bengavin I get your point, but I prefer to have all systems (including dev machines) on the same os.

thisisthekap avatar Nov 05 '24 17:11 thisisthekap

macOS-15 is available using Azure DevOps 🚀 More info: https://learn.microsoft.com/en-us/azure/devops/pipelines/agents/hosted?view=azure-devops&tabs=yaml

Hi @erik-bershel , Is there any plan to support macOS-15-arm in ADO?

zjhch123 avatar Nov 07 '24 07:11 zjhch123

Hey @zjhch123!

Not at the moment as I know. Updates will be available here: https://github.com/actions/runner-images/issues/8971 List of available images and related updates also are available to track here.

erik-bershel avatar Nov 07 '24 10:11 erik-bershel

@erik-bershel It would be nice if in the future blog posts like this one included ALL breaking changes upcoming. https://github.blog/changelog/2024-11-05-notice-of-breaking-changes-for-github-actions/

Since this change was not in the blog post, we were blind sided by this change, as we don't check the runner-images repository regularly for CI that has continued to work for a long time.

ADKaster avatar Nov 07 '24 22:11 ADKaster

With this change, I no longer have an image that has both Xcode 16 and visionOS (needs an ARM machine) with Azure Pipelines. That breaks our workflows heavily. I opened https://github.com/actions/runner-images/issues/10955 to document that.

Saadnajmi avatar Nov 12 '24 19:11 Saadnajmi

Looking at the PR's that have been mentioned in this issue and the thumbs down emoticons from people, a very large number of people don't like this change and is blocked by this change.

I understand that lack of disk space is an issue, but at least it can be solved simply by rm xcode16.0.app. However, removing the pre-installed Xcode 16.0 would require users to spend a long time manually downloading it themselves.

@erik-bershel So can we think about revert this change?Or at least we can consider this change after ADO provides MacOS-15 Arm64? Or at least provide a recent version of Xcode, e.g. Xcode 16.1.app.

Anyway, I'd like to say that I understand the motivation to address available disk space, but the negative impact of this change is mostly more than disk space(At least in my opinion.).

We should be able to come up with a better solution that again reduces disk space and ensures that the toolchain used by most people exists. Instead of a simple and crude support policy for disk space issue.

isnine avatar Nov 13 '24 03:11 isnine

@mjosipovic-tgr Were you able to solve your issue? I am asking because I am facing the same issue currently.

@thisisthekap , Yes, I added new task into the yaml file

 - task: Bash@3
    displayName: "Install Android SDK and Build Tools"
    inputs:   targetType: "inline"
      script: | 
       export ANDROID_HOME=$HOME/Library/Android/sdk
       export PATH=$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/build-tools/34.0.0:$ANDROID_HOME/platform-tools:$PATH
        mkdir -p $ANDROID_HOME/cmdline-tools/latest
        mkdir -p $ANDROID_HOME/build-tools
        sdkmanager --install "cmdline-tools;latest" "platform-tools" "build-tools;34.0.0" "platforms;android-34"
        yes | sdkmanager --licenses

and for the iOS certificate issue, in task for installing certificates I added this

 opensslPkcsArgs: "-legacy"
            continueOnError: true

Now both android and iOS works on macOS-15

mjosipovic-tgr avatar Nov 13 '24 07:11 mjosipovic-tgr

@mjosipovic-tgr Is there any specific reason why you added continueOnError: true for iOS?

thisisthekap avatar Nov 13 '24 08:11 thisisthekap

@mjosipovic-tgr Is there any specific reason why you added continueOnError: true for iOS?

@thisisthekap ah yes, sorry, I have tasks for both SSL compatibility, in case one of them fails, it will continue and won't stop the build. Depending what you are using you can use only one of them, if you using old certificate and new version of OpenSSL you can remove the one without legacy flag, vice versa. Hope this helps

 # Two tasks for handling OpenSSL compatibility
          - task: InstallAppleCertificate@2
            inputs:
              certSecureFile: nameOfFile.p.12
              keychain: "temp"
              certPwd: yourPassword
              deleteCert: true
              opensslPkcsArgs: "-legacy"
            continueOnError: true
            displayName: "Install Apple Certificate with Legacy Flag"

          - task: InstallAppleCertificate@2
            inputs:
              certSecureFile: nameOfFile.p.12
              keychain: "temp"
              certPwd: yourPassword
              deleteCert: true
            continueOnError: true
            displayName: "Install Apple Certificate without Legacy Flag"

mjosipovic-tgr avatar Nov 13 '24 08:11 mjosipovic-tgr

@mjosipovic-tgr Thank you for that! Thats a perfect workaround for the mess with different image versions used randomly we are currently facing.

thisisthekap avatar Nov 13 '24 08:11 thisisthekap

Looking at the PR's that have been mentioned in this issue and the thumbs down emoticons from people, a very large number of people don't like this change and is blocked by this change.

This change has completely disrupted our release process, and it was with zero notice. This PR doesn't satisfy any kind of "notice".

And to rub salt in that, we've been getting billed for the minimum time, every. time. we. restart.

Why? because this has been intermittently failing our builds, but today it's been near-every-time.

Since this wasn't any kind of notification, we assumed it was something wrong with our builds, then later chalked up to "that terrible github experience" - turns out we were correct, just the reasons for the terrible experience were outright choices on GH's end.

Fix this; revert it and give us time.

tsal avatar Nov 13 '24 20:11 tsal

It makes no sense to remove new software from a system (XCode 16) while preserving older software (XCode 15), unless there are known problems with the newer software. If you want to keep just one version, keep XCode 16.

This change forced us to migrate to macos-15, but this doesn't work because of https://github.com/microsoft/azure-pipelines-tasks/issues/20628#issuecomment-2472701880 .

charlesroddie avatar Nov 13 '24 20:11 charlesroddie