Compare commits

..
141 changed files with 6537 additions and 2660 deletions
+1
View File
@@ -39,6 +39,7 @@ body:
- label: Ubuntu 20.04
- label: Ubuntu 22.04
- label: Ubuntu 24.04
- label: macOS 12
- label: macOS 13
- label: macOS 13 Arm64
- label: macOS 14
+1
View File
@@ -22,6 +22,7 @@ body:
- label: Ubuntu 20.04
- label: Ubuntu 22.04
- label: Ubuntu 24.04
- label: macOS 12
- label: macOS 13
- label: macOS 13 Arm64
- label: macOS 14
+1
View File
@@ -60,6 +60,7 @@ body:
- label: Ubuntu 20.04
- label: Ubuntu 22.04
- label: Ubuntu 24.04
- label: macOS 12
- label: macOS 13
- label: macOS 13 Arm64
- label: macOS 14
@@ -1,22 +0,0 @@
name: Check Outdated Version Pinning
on:
schedule:
- cron: '0 12 * * 1' # Run at 12:00 UTC every Monday
permissions:
issues: write
contents: read
jobs:
check-pinning-dates:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Validate JSON Schema
shell: pwsh
run: ./helpers/CheckOutdatedVersionPinning.ps1
env:
GH_TOKEN: ${{ github.token }}
+1 -1
View File
@@ -34,7 +34,7 @@ jobs:
strategy:
fail-fast: false
matrix:
language: [ 'python' ]
language: [ 'python', 'ruby' ]
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]
# Learn more about CodeQL language support at https://git.io/codeql-language-support
@@ -1,20 +0,0 @@
name: Validate JSON Schema
on:
push:
branches:
- main
pull_request:
branches:
- main
jobs:
validate-json-schema:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Validate JSON Schema
shell: pwsh
run: ./helpers/CheckJsonSchema.ps1
+1 -10
View File
@@ -21,14 +21,5 @@
],
"shellcheck.customArgs": [
"-x"
],
"json.schemas": [
{
"fileMatch": [
"**/toolset-*.json"
],
"url": "./schemas/toolset-schema.json"
}
]
]
}
+1 -1
View File
@@ -1,6 +1,6 @@
MIT License
Copyright (c) 2025 GitHub
Copyright (c) 2024 GitHub
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
+8 -6
View File
@@ -1,3 +1,4 @@
# GitHub Actions Runner Images
**Table of Contents**
@@ -20,15 +21,16 @@ To build a VM machine from this repo's source, see the [instructions](docs/creat
| Image | YAML Label | Included Software | Rollout Status of Latest Image Release |
| --------------------|---------------------|--------------------|--------------------|
| Ubuntu 24.04 | `ubuntu-latest` or `ubuntu-24.04` | [ubuntu-24.04] | ![Endpoint Badge](https://img.shields.io/endpoint?url=https%3A%2F%2Fgist.githubusercontent.com%2Fsubir0071%2F385e39188f4280878bada99250e99db7%2Fraw%2Fubuntu24.json) |
| Ubuntu 22.04 | `ubuntu-22.04` | [ubuntu-22.04] | ![Endpoint Badge](https://img.shields.io/endpoint?url=https%3A%2F%2Fgist.githubusercontent.com%2Fsubir0071%2F385e39188f4280878bada99250e99db7%2Fraw%2Fubuntu22.json) |
| Ubuntu 20.04 <sup>deprecated</sup> | `ubuntu-20.04` | [ubuntu-20.04] | ![Endpoint Badge](https://img.shields.io/endpoint?url=https%3A%2F%2Fgist.githubusercontent.com%2Fsubir0071%2F385e39188f4280878bada99250e99db7%2Fraw%2Fubuntu20.json) |
| Ubuntu 24.04 | `ubuntu-24.04` | [ubuntu-24.04] | ![Endpoint Badge](https://img.shields.io/endpoint?url=https%3A%2F%2Fgist.githubusercontent.com%2Fsubir0071%2F385e39188f4280878bada99250e99db7%2Fraw%2Fubuntu24.json) |
| Ubuntu 22.04 | `ubuntu-latest` or `ubuntu-22.04` | [ubuntu-22.04] | ![Endpoint Badge](https://img.shields.io/endpoint?url=https%3A%2F%2Fgist.githubusercontent.com%2Fsubir0071%2F385e39188f4280878bada99250e99db7%2Fraw%2Fubuntu22.json) |
| Ubuntu 20.04 | `ubuntu-20.04` | [ubuntu-20.04] | ![Endpoint Badge](https://img.shields.io/endpoint?url=https%3A%2F%2Fgist.githubusercontent.com%2Fsubir0071%2F385e39188f4280878bada99250e99db7%2Fraw%2Fubuntu20.json) |
| macOS 15 <sup>beta</sup> | `macos-15-large`| [macOS-15] | ![Endpoint Badge](https://img.shields.io/endpoint?url=https%3A%2F%2Fgist.githubusercontent.com%2Fsubir0071%2F385e39188f4280878bada99250e99db7%2Fraw%2Fmacos-15.json) |
| macOS 15 Arm64 <sup>beta</sup> | `macos-15` or `macos-15-xlarge` | [macOS-15-arm64] | ![Endpoint Badge](https://img.shields.io/endpoint?url=https%3A%2F%2Fgist.githubusercontent.com%2Fsubir0071%2F385e39188f4280878bada99250e99db7%2Fraw%2Fmacos-15-arm64.json) |
| macOS 14 | `macos-latest-large` or `macos-14-large`| [macOS-14] | ![Endpoint Badge](https://img.shields.io/endpoint?url=https%3A%2F%2Fgist.githubusercontent.com%2Fsubir0071%2F385e39188f4280878bada99250e99db7%2Fraw%2Fmacos-14.json) |
| macOS 14 Arm64 |`macos-latest`, `macos-14`, `macos-latest-xlarge` or `macos-14-xlarge`| [macOS-14-arm64] | ![Endpoint Badge](https://img.shields.io/endpoint?url=https%3A%2F%2Fgist.githubusercontent.com%2Fsubir0071%2F385e39188f4280878bada99250e99db7%2Fraw%2Fmacos-14-arm64.json) |
| macOS 13 | `macos-13` or `macos-13-large` | [macOS-13] | ![Endpoint Badge](https://img.shields.io/endpoint?url=https%3A%2F%2Fgist.githubusercontent.com%2Fsubir0071%2F385e39188f4280878bada99250e99db7%2Fraw%2Fmacos-13.json) |
| macOS 13 Arm64 | `macos-13-xlarge` | [macOS-13-arm64] | ![Endpoint Badge](https://img.shields.io/endpoint?url=https%3A%2F%2Fgist.githubusercontent.com%2Fsubir0071%2F385e39188f4280878bada99250e99db7%2Fraw%2Fmacos-13-arm64.json) |
| macOS 12 <sup>deprecated</sup> | `macos-12` or `macos-12-large`| [macOS-12] | ![Endpoint Badge](https://img.shields.io/endpoint?url=https%3A%2F%2Fgist.githubusercontent.com%2Fsubir0071%2F385e39188f4280878bada99250e99db7%2Fraw%2Fmacos-12.json) |
| Windows Server 2025 <sup>beta</sup> | `windows-2025` | [windows-2025] | ![Endpoint Badge](https://img.shields.io/endpoint?url=https%3A%2F%2Fgist.githubusercontent.com%2Fsubir0071%2F385e39188f4280878bada99250e99db7%2Fraw%2Fwin25.json) |
| Windows Server 2022 | `windows-latest` or `windows-2022` | [windows-2022] | ![Endpoint Badge](https://img.shields.io/endpoint?url=https%3A%2F%2Fgist.githubusercontent.com%2Fsubir0071%2F385e39188f4280878bada99250e99db7%2Fraw%2Fwin22.json) |
| Windows Server 2019 | `windows-2019` | [windows-2019] | ![Endpoint Badge](https://img.shields.io/endpoint?url=https%3A%2F%2Fgist.githubusercontent.com%2Fsubir0071%2F385e39188f4280878bada99250e99db7%2Fraw%2Fwin19.json) |
@@ -44,6 +46,7 @@ To build a VM machine from this repo's source, see the [instructions](docs/creat
[windows-2025]: https://github.com/actions/runner-images/blob/main/images/windows/Windows2025-Readme.md
[windows-2022]: https://github.com/actions/runner-images/blob/main/images/windows/Windows2022-Readme.md
[windows-2019]: https://github.com/actions/runner-images/blob/main/images/windows/Windows2019-Readme.md
[macOS-12]: https://github.com/actions/runner-images/blob/main/images/macos/macos-12-Readme.md
[macOS-13]: https://github.com/actions/runner-images/blob/main/images/macos/macos-13-Readme.md
[macOS-13-arm64]: https://github.com/actions/runner-images/blob/main/images/macos/macos-13-arm64-Readme.md
[macOS-14]: https://github.com/actions/runner-images/blob/main/images/macos/macos-14-Readme.md
@@ -118,7 +121,7 @@ The `-latest` migration process is gradual and happens over 1-2 months in order
| Go | 3 latest minor versions |
| Python <br/> Ruby | 5 most popular `major.minor` versions |
| PyPy | 3 most popular `major.minor` versions |
| .NET Core | 2 latest LTS versions and 1 latest version. For each feature version only latest patch is installed. Note for [Ubuntu images see details.](./docs/dotnet-ubuntu.md) |
| .NET Core | 2 latest LTS versions and 1 latest version. For each feature version only latest patch is installed |
| GCC <br/> GNU Fortran <br/> Clang <br/> GNU C++ | 3 latest major versions |
| Android NDK | 1 latest non-LTS, 2 latest LTS versions |
| Xcode | - only one major version of Xcode will be supported per macOS version <br/> - all minor versions of the supported major version will be available <br/> - 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 <br/> - when a new patch version is released, the previous patch version will be replaced |
@@ -126,8 +129,7 @@ The `-latest` migration process is gradual and happens over 1-2 months in order
### Package managers usage
We use third-party package managers to install software during the image generation process. The table below lists the package managers and the software installed.
> [!NOTE]
> Third-party repositories are re-evaluated every year to identify if they are still useful and secure.
> **Note**: third-party repositories are re-evaluated every year to identify if they are still useful and secure.
| Operating system | Package manager | Third-party repos and packages |
| :--- | :---: | ---: |
+4 -6
View File
@@ -75,7 +75,7 @@ In any case, you will need these software installed:
## Manual image generation
This repository includes a script that assists in generating images in Azure.
All you need is an Azure subscription, a resource group in that subscription and a build agent configured as described above.
All you need is an Azure subscription and a build agent configured as described above.
We suggest starting with building the UbuntuMinimal image because it includes only basic software and builds in less than 30 minutes.
All the commands below should be executed in PowerShell.
@@ -96,10 +96,9 @@ Import-Module .\helpers\GenerateResourcesAndImage.ps1
Finally, run the `GenerateResourcesAndImage` function, setting the mandatory arguments: image type and where to build and store the resulting managed image:
- `SubscriptionId` - your Azure Subscription ID;
- `ResourceGroupName` - the name of the resource group that will store the resulting artifact (e.g., "imagegen-test").
The resource group must already exist in your Azure subscription;
- `ResourceGroupName` - the name of the resource group that will be created within your subscription (e.g., "imagegen-test");
- `AzureLocation` - the location where resources will be created (e.g., "East US");
- `ImageType` - the type of image to build (we suggest choosing "UbuntuMinimal" here; other valid options are "Windows2019", "Windows2022", "Windows2025", "Ubuntu2004", "Ubuntu2204", "Ubuntu2404").
- `ImageType` - the type of image to build (we suggest choosing "UbuntuMinimal" here; other valid options are "Windows2019", "Windows2022", "Ubuntu2004", "Ubuntu2204").
This function automatically creates all required Azure resources and initiates the Packer image generation for the selected image type.
@@ -196,10 +195,9 @@ you can use Packer directly. To do this, you will need:
- a resource group created in your Azure subscription where the managed image will be stored;
- a string to be used as a password for the user used to install software (Windows only).
Then, you can invoke Packer in your CI/CD pipeline using the following commands:
Then, you can invoke Packer in your CI/CD pipeline using the following command:
```powershell
packer plugins install github.com/hashicorp/azure 2.2.1
packer build -var "subscription_id=$SubscriptionId" `
-var "client_id=$ClientId" `
-var "client_secret=$ClientSecret" `
-34
View File
@@ -1,34 +0,0 @@
# Ubuntu .NET Core Versions
.NET has changed the recommended install methods for Ubuntu from 2404.
This document gives an overview of these change and the impact this has on the `runner-images`.
## .NET Core for Ubuntu 2004 and 2204
2004 and 2204 use the [Microsoft Package repository](https://learn.microsoft.com/en-us/dotnet/core/install/linux-ubuntu-install?tabs=dotnet8&pivots=os-linux-ubuntu-2004) to install .NET deb files built and published by the .NET team.
## .NET Core Versions from Ubuntu 2404
The .NET Core team have worked with Canonical and Ubuntu now provides its own .NET packages.
These are the recommended install path and, as-such what is installed on the image.
> The release of Ubuntu 24.04 is just around the corner. Canonical-produced .NET 6, 7, and 8 packages will be available on day one, for "Noble Numbat". Microsoft will not be publishing .NET packages to the 24.04 feed at packages.microsoft.com.
You can read the [full announcement from .NET team here](https://github.com/dotnet/core/discussions/9258). We'll briefly summarize how this change may impact users of the image.
### [`Feature Bands`](https://learn.microsoft.com/dotnet/core/porting/versioning-sdk-msbuild-vs)
Going forward only the `1xx` feature band will be present in the image as Ubuntu only build and publish this band.
> Most distros, including Ubuntu, stick to the .1xx feature band for the lifetime of a major .NET version. They make this choice because .1xx is (effectively) the "compatibility band". Higher bands can have breaking changes.
> This means there will no longer be packages available for .2xx and later feature bands. Such packages have been exclusively available from Microsoft. If users see an incompatibility between .1xx and higher feature bands, we ask that you please report it in the dotnet/sdk repo. [link: dotnet/core discussion](https://github.com/dotnet/core/discussions/9258)
If you need a higher feature band for your Actions the recommendation is to use the [`setup-dotnet`](https://github.com/actions/setup-dotnet) action to install the desired version.
### .NET MAUI
.NET MAUI is [not included](https://github.com/dotnet/core/discussions/9258#discussioncomment-9548857) in the Ubuntu .NET package. There is work [ongoing to fix.](https://github.com/dotnet/core/discussions/9258#discussioncomment-9548857)
You should be able to resolve this by using the [`setup-dotnet`](https://github.com/actions/setup-dotnet) action to install the desired version.
-42
View File
@@ -1,42 +0,0 @@
$ErrorActionPreference = 'Stop'
# A JSON schema validator which supports outputting line numbers for errors
# this allows us to put annotations on builds for errors in the JSON files
# `Test-Json` built in cmdline doesn't. No existing cli tool supports this
# that I could find either. See: https://github.com/lawrencegripper/gripdev-json-schema-validator
Install-Module -Name GripDevJsonSchemaValidator -Force -Scope CurrentUser
# Find all toolset JSON files
$toolsetFiles = Get-ChildItem -Recurse -Filter "toolset-*.json" | Where-Object { $_.Name -notlike "*schema.json" }
$schemaFilePath = "./schemas/toolset-schema.json"
$toolsetHasErrors = $false
foreach ($file in $toolsetFiles) {
Write-Host ""
Write-Host "🔍 Validating $($file.FullName)" -ForegroundColor Cyan
$validationResult = Test-JsonSchema -SchemaPath $schemaFilePath -JsonPath $file.FullName -PrettyPrint $false
if ($validationResult.Valid) {
Write-Host "✅ JSON is valid." -ForegroundColor Green
} else {
# File has been modified since the commit, enforce validation
$toolsetHasErrors = $true
Write-Host "`n❌ JSON validation failed!" -ForegroundColor Red
Write-Host " Found the following errors:`n" -ForegroundColor Yellow
$validationResult.Errors | ForEach-Object {
Write-Host $_.UserMessage
if ($env:GITHUB_ACTIONS -eq 'true') {
Write-Host "Adding annotation"
Write-Host "::error file=$($file.Name),line=$($_.LineNumber)::$($_.UserMessage.Replace("`n", '%0A'))"
}
}
}
}
if ($toolsetHasErrors) {
Write-Error "One or more toolset JSON files failed schema validation. See the error output above for more details."
} else {
Write-Host "Schema validation completed successfully"
}
-85
View File
@@ -1,85 +0,0 @@
$ErrorActionPreference = 'Stop'
# Find all toolset JSON files
$toolsetFiles = Get-ChildItem -Recurse -Filter "toolset-*.json" | Where-Object { $_.Name -notlike "*schema.json" }
$expiringPins = @()
$now = Get-Date
$warningDays = 30 # Warn if expiring within 30 days
foreach ($file in $toolsetFiles) {
Write-Host "Processing $($file.Name)"
$content = Get-Content $file.FullName | ConvertFrom-Json
# Recursively search for pinnedDetails in the JSON
function Search-PinnedDetails {
param($obj, $path)
$foundPins = @()
if ($obj -is [System.Management.Automation.PSCustomObject]) {
foreach ($prop in $obj.PSObject.Properties) {
if ($prop.Name -eq "pinnedDetails") {
Write-Host "Found pinned version at $path"
$reviewAt = [DateTime]::Parse($prop.Value.'review-at')
$daysUntilExpiry = ($reviewAt - $now).Days
if ($daysUntilExpiry -lt $warningDays) {
Write-Host "Adding to expiringPins array"
$foundPins += @{
Path = $path
File = $file.Name
ReviewAt = $reviewAt
DaysUntilExpiry = $daysUntilExpiry
Reason = $prop.Value.reason
Link = $prop.Value.link
}
}
} else {
$foundPins += Search-PinnedDetails -obj $prop.Value -path "$path.$($prop.Name)"
}
}
} elseif ($obj -is [Array]) {
for ($i = 0; $i -lt $obj.Count; $i++) {
$foundPins += Search-PinnedDetails -obj $obj[$i] -path "$path[$i]"
}
}
return $foundPins
}
$expiringPins += Search-PinnedDetails -obj $content -path $file.Name
}
if ($expiringPins) {
$issueBody = "# Version Pinning Review Required`n`n"
$issueBody += "The following pinned versions need review:`n`n"
foreach ($pin in $expiringPins) {
$status = if ($pin.DaysUntilExpiry -lt 0) { "EXPIRED" } else { "Expiring Soon" }
$issueBody += "## $($status) - $($pin.Path)`n"
$issueBody += "- **File**: $($pin.File)`n"
$issueBody += "- **Review Date**: $($pin.ReviewAt.ToString('yyyy-MM-dd'))`n"
$issueBody += "- **Days until expiry**: $($pin.DaysUntilExpiry)`n"
$issueBody += "- **Reason**: $($pin.Reason)`n"
$issueBody += "- **Original PR**: $($pin.Link)`n`n"
}
if ($env:GITHUB_ACTIONS -eq 'true') {
# In GitHub Actions, create an issue
Write-Host "Creating issue"
$tempFile = [System.IO.Path]::GetTempFileName()
Set-Content -Path $tempFile -Value $issueBody
gh issue create --title "Version Pinning Review Found Expired Pinned Versions" --body-file $tempFile
Remove-Item -Path $tempFile
}
Write-Host "`nIssue Content:`n"
Write-Host $issueBody
}
else {
Write-Host "No expiring pins found."
if ($env:GITHUB_ACTIONS -eq 'true') {
"expired_pins=0" >> $env:GITHUB_OUTPUT
}
}
+92 -17
View File
@@ -3,11 +3,10 @@ $ErrorActionPreference = 'Stop'
enum ImageType {
Windows2019 = 1
Windows2022 = 2
Windows2025 = 3
Ubuntu2004 = 4
Ubuntu2204 = 5
Ubuntu2404 = 6
UbuntuMinimal = 7
Ubuntu2004 = 3
Ubuntu2204 = 4
Ubuntu2404 = 5
UbuntuMinimal = 6
}
Function Get-PackerTemplatePath {
@@ -26,9 +25,6 @@ Function Get-PackerTemplatePath {
([ImageType]::Windows2022) {
$relativeTemplatePath = Join-Path (Join-Path "windows" "templates") "windows-2022.pkr.hcl"
}
([ImageType]::Windows2025) {
$relativeTemplatePath = Join-Path (Join-Path "windows" "templates") "windows-2025.pkr.hcl"
}
([ImageType]::Ubuntu2004) {
$relativeTemplatePath = Join-Path (Join-Path "ubuntu" "templates") "ubuntu-20.04.pkr.hcl"
}
@@ -83,9 +79,9 @@ Function GenerateResourcesAndImage {
.PARAMETER SubscriptionId
The Azure subscription id where the Azure resources will be created.
.PARAMETER ResourceGroupName
The name of the resource group to store the resulting artifact. Resource group must already exist.
The name of the resource group to create the Azure resources in.
.PARAMETER ImageType
The type of image to generate. Valid values are: Windows2019, Windows2022, Windows2025, Ubuntu2004, Ubuntu2204, Ubuntu2404, UbuntuMinimal.
The type of image to generate. Valid values are: Windows2019, Windows2022, Ubuntu2004, Ubuntu2204, UbuntuMinimal.
.PARAMETER ManagedImageName
The name of the managed image to create. The default is "Runner-Image-{{ImageType}}".
.PARAMETER AzureLocation
@@ -103,6 +99,12 @@ Function GenerateResourcesAndImage {
.PARAMETER RestrictToAgentIpAddress
If set, access to the VM used by packer to generate the image is restricted to the public IP address this script is run from.
This parameter cannot be used in combination with the virtual_network_name packer parameter.
.PARAMETER Force
Delete the resource group if it exists without user confirmation.
This parameter is deprecated and will be removed in a future release.
.PARAMETER ReuseResourceGroup
Reuse the resource group if it exists without user confirmation.
This parameter is deprecated and will be removed in a future release.
.PARAMETER OnError
Specify how packer handles an error during image creation.
Options:
@@ -113,8 +115,6 @@ Function GenerateResourcesAndImage {
The default is 'ask'.
.PARAMETER Tags
Tags to be applied to the Azure resources created.
.PARAMETER PluginVersion
Specify the version of the packer Azure plugin to use. The default is "2.2.1".
.EXAMPLE
GenerateResourcesAndImage -SubscriptionId {YourSubscriptionId} -ResourceGroupName "shsamytest1" -ImageGenerationRepositoryRoot "C:\runner-images" -ImageType Ubuntu2004 -AzureLocation "East US"
#>
@@ -140,16 +140,26 @@ Function GenerateResourcesAndImage {
[Parameter(Mandatory = $False)]
[string] $AzureTenantId,
[Parameter(Mandatory = $False)]
[string] $PluginVersion = "2.2.1",
[Parameter(Mandatory = $False)]
[switch] $RestrictToAgentIpAddress,
[Parameter(Mandatory = $False)]
[switch] $Force,
[Parameter(Mandatory = $False)]
[switch] $ReuseResourceGroup,
[Parameter(Mandatory = $False)]
[ValidateSet("abort", "ask", "cleanup", "run-cleanup-provisioner")]
[string] $OnError = "ask",
[Parameter(Mandatory = $False)]
[hashtable] $Tags = @{}
)
if ($Force -or $ReuseResourceGroup) {
Write-Warning "The `ReuseResourceGroup` and `Force` parameters are deprecated and will be removed in a future release. The resource group will be reused when it already exists and an error will be thrown when it doesn't. If you want to delete the resource group, please delete it manually."
}
if ($Force -and $ReuseResourceGroup) {
throw "Force and ReuseResourceGroup cannot be used together."
}
Show-LatestCommit -ErrorAction SilentlyContinue
# Validate packer is installed
@@ -204,7 +214,7 @@ Function GenerateResourcesAndImage {
$InstallPassword = $env:UserName + [System.GUID]::NewGuid().ToString().ToUpper()
Write-Host "Downloading packer plugins..."
& $PackerBinary plugins install github.com/hashicorp/azure $PluginVersion
& $PackerBinary init $TemplatePath
if ($LastExitCode -ne 0) {
throw "Packer plugins download failed."
@@ -248,8 +258,73 @@ Function GenerateResourcesAndImage {
if ($ResourceGroupExists) {
Write-Verbose "Resource group '$ResourceGroupName' already exists."
}
else {
throw "Resource group '$ResourceGroupName' does not exist."
# Remove resource group if it exists and we are not reusing it
if ($ResourceGroupExists -and -not $ReuseResourceGroup) {
if ($Force) {
# Delete and recreate the resource group
Write-Host "Deleting resource group '$ResourceGroupName'..."
az group delete --name $ResourceGroupName --yes --output none
if ($LastExitCode -ne 0) {
throw "Failed to delete resource group '$ResourceGroupName'."
}
Write-Host "Resource group '$ResourceGroupName' was deleted."
$ResourceGroupExists = $false
}
else {
# are we running in a non-interactive session?
# https://stackoverflow.com/questions/9738535/powershell-test-for-noninteractive-mode
if ([System.Console]::IsOutputRedirected -or ![Environment]::UserInteractive -or !!([Environment]::GetCommandLineArgs() | Where-Object { $_ -ilike '-noni*' })) {
throw "Non-interactive mode, resource group '$ResourceGroupName' already exists, either specify -Force to delete it, or -ReuseResourceGroup to reuse."
}
else {
# Resource group already exists, ask the user what to do
$title = "Resource group '$ResourceGroupName' already exists"
$message = "Do you want to delete the resource group and all resources in it?"
$options = @(
[System.Management.Automation.Host.ChoiceDescription]::new("&Yes", "Delete the resource group and all resources in it."),
[System.Management.Automation.Host.ChoiceDescription]::new("&No", "Keep the resource group and continue."),
[System.Management.Automation.Host.ChoiceDescription]::new("&Abort", "Abort execution.")
)
$result = $Host.UI.PromptForChoice($title, $message, $options, 0)
}
switch ($result) {
0 {
# Delete and recreate the resource group
Write-Host "Deleting resource group '$ResourceGroupName'..."
az group delete --name $ResourceGroupName --yes
if ($LastExitCode -ne 0) {
throw "Failed to delete resource group '$ResourceGroupName'."
}
Write-Host "Resource group '$ResourceGroupName' was deleted."
$ResourceGroupExists = $false
}
1 {
# Keep the resource group and continue
}
2 {
# Stop the current action
Write-Error "User stopped the action."
exit 1
}
}
}
}
# Create resource group
if (-not $ResourceGroupExists) {
Write-Host "Creating resource group '$ResourceGroupName' in location '$AzureLocation'..."
if ($TagsList) {
az group create --name $ResourceGroupName --location $AzureLocation --tags $TagsList --query id
}
else {
az group create --name $ResourceGroupName --location $AzureLocation --query id
}
if ($LastExitCode -ne 0) {
throw "Failed to create resource group '$ResourceGroupName'."
}
}
# Create service principal
+14
View File
@@ -0,0 +1,14 @@
param(
[String] [Parameter (Mandatory=$true)] $RepoUrl,
[String] [Parameter (Mandatory=$true)] $RepoBranch
)
Write-Host "Clean up default repository"
Remove-Item -path './*' -Recurse -Force
Write-Host "Download ${RepoBranch} branch from ${RepoUrl}"
$env:GIT_REDIRECT_STDERR = '2>&1'
git clone $RepoUrl . -b $RepoBranch --single-branch --depth 1
Write-Host "Latest commit:"
git --no-pager log --pretty=format:"Date: %cd; Commit: %H - %s; Author: %an <%ae>" -1
@@ -0,0 +1,181 @@
# Ideally we would use GitHub Actions for this, but since we use self-hosted machines to run image builds
# we need the following features to use GitHub Actions for Images CI:
# - https://github.community/t5/GitHub-Actions/Make-secrets-available-to-builds-of-forks/m-p/30678#M508
# - https://github.community/t5/GitHub-Actions/GitHub-Actions-Manual-Trigger-Approvals/td-p/31504
# - https://github.community/t5/GitHub-Actions/Protecting-github-workflows/td-p/30290
parameters:
- name: job_id
type: string
default: 'generate_image'
- name: image_type
type: string
- name: image_template_name
type: string
- name: image_readme_name
type: string
- name: agent_pool
type: object
default:
name: 'ci-agent-pool'
- name: variable_group_name
type: string
default: 'Image Generation Variables'
- name: create_release
type: boolean
default: true
- name: repository_ref
type: string
default: 'self'
jobs:
- job: ${{ parameters.job_id }}
displayName: Image Generation (${{ parameters.image_type }})
timeoutInMinutes: 600
cancelTimeoutInMinutes: 30
pool: ${{ parameters.agent_pool }}
variables:
- group: ${{ parameters.variable_group_name }}
steps:
- checkout: ${{ parameters.repository_ref }}
clean: true
fetchDepth: 0
fetchTags: false
- task: PowerShell@2
displayName: 'Download custom repository'
condition: and(ne(variables['CUSTOM_REPOSITORY_URL'], ''), ne(variables['CUSTOM_REPOSITORY_BRANCH'], ''))
inputs:
targetType: 'filePath'
filePath: ./images.CI/download-repo.ps1
arguments: -RepoUrl $(CUSTOM_REPOSITORY_URL) `
-RepoBranch $(CUSTOM_REPOSITORY_BRANCH)
- task: AzureCLI@2
displayName: 'Set variables'
inputs:
azureSubscription: 'spn-hosted-runners'
scriptType: 'pscore'
scriptLocation: 'inlineScript'
inlineScript: |
$ImageType = "${{ parameters.image_type }}"
$TemplateDirectoryName = if ($ImageType.StartsWith("ubuntu")) { "ubuntu/templates" } else { "windows/templates" }
$TemplateDirectoryPath = Join-Path "images" $TemplateDirectoryName | Resolve-Path
$TemplateFileName = "${{ parameters.image_template_name }}"
$TemplatePath = Join-Path $TemplateDirectoryPath $TemplateFileName
Write-Host "##vso[task.setvariable variable=TemplateDirectoryPath;]$TemplateDirectoryPath"
Write-Host "##vso[task.setvariable variable=TemplatePath;]$TemplatePath"
$ManagedImageName = "${{ parameters.image_type }}-$(Build.BuildId)"
Write-Host "##vso[task.setvariable variable=ManagedImageName;]$ManagedImageName"
$TempResourceGroupName = "packer-temp-$ManagedImageName"
Write-Host "##vso[task.setvariable variable=TempResourceGroupName;]$TempResourceGroupName"
$clientSecret = $(az keyvault secret show --name "spnhostedrunners" --vault-name "gh-imagegeneration" --query value -o tsv)
Write-Host "##vso[task.setvariable variable=ClientSecret;issecret=true]$clientSecret"
- task: PowerShell@2
displayName: 'Build VM'
inputs:
targetType: filePath
filePath: ./images.CI/linux-and-win/build-image.ps1
arguments: -ClientId $(CLIENT_ID) `
-ClientSecret "$(ClientSecret)" `
-TemplatePath $(TemplatePath) `
-ImageName "$(ManagedImageName)" `
-ImageResourceGroupName $(AZURE_RESOURCE_GROUP) `
-TempResourceGroupName "$(TempResourceGroupName)" `
-SubscriptionId $(AZURE_SUBSCRIPTION) `
-TenantId $(AZURE_TENANT) `
-Location $(AZURE_LOCATION) `
-VirtualNetworkName $(BUILD_AGENT_VNET_NAME) `
-VirtualNetworkRG $(BUILD_AGENT_VNET_RESOURCE_GROUP) `
-VirtualNetworkSubnet $(BUILD_AGENT_SUBNET_NAME)
env:
PACKER_LOG: 1
PACKER_LOG_PATH: "$(Agent.TempDirectory)/packer-log.txt"
- task: PowerShell@2
displayName: 'Copy image artifacts to the separate directory'
inputs:
targetType: 'inline'
script: |
$ImageType = "${{ parameters.image_type }}"
$rootDirectoryName = if ($ImageType.StartsWith("ubuntu")) { "ubuntu" } else { "windows" }
$rootDirectoryPath = Join-Path "images" $rootDirectoryName | Resolve-Path
$readmePath = Join-Path $rootDirectoryPath "${{ parameters.image_readme_name }}"
$softwareReportPath = Join-Path $rootDirectoryPath "software-report.json"
Copy-Item -Path $readmePath -Destination "$(Build.ArtifactStagingDirectory)/"
if (Test-Path $softwareReportPath) {
Copy-Item -Path $softwareReportPath -Destination "$(Build.ArtifactStagingDirectory)/"
}
- task: PowerShell@2
displayName: 'Print markdown software report'
inputs:
targetType: 'inline'
script: |
Get-Content -Path "$(Build.ArtifactStagingDirectory)/${{ parameters.image_readme_name }}"
- task: PowerShell@2
displayName: 'Print json software report'
inputs:
targetType: 'inline'
script: |
$softwareReportPath = "$(Build.ArtifactStagingDirectory)/software-report.json"
if (Test-Path $softwareReportPath) {
Get-Content -Path $softwareReportPath
}
- task: PublishBuildArtifacts@1
inputs:
ArtifactName: 'Built_VM_Artifacts'
displayName: Publish Artifacts
- task: PowerShell@2
displayName: 'Print provisioners duration'
inputs:
targetType: 'filePath'
filePath: ./images.CI/measure-provisioners-duration.ps1
arguments: -PackerLogPath "$(Agent.TempDirectory)/packer-log.txt" `
-PrefixToPathTrim "$(TemplateDirectoryPath)" `
-PrintTopNLongest 25
- ${{ if eq(parameters.create_release, true) }}:
- task: PowerShell@2
displayName: 'Create release for VM deployment'
inputs:
targetType: filePath
filePath: ./images.CI/linux-and-win/create-release.ps1
arguments: -BuildId $(Build.BuildId) `
-Organization $(RELEASE_TARGET_ORGANIZATION) `
-DefinitionId $(RELEASE_TARGET_DEFINITION_ID) `
-Project $(RELEASE_TARGET_PROJECT) `
-ImageType "${{ parameters.image_type }}" `
-ManagedImageName "$(ManagedImageName)" `
-AccessToken $(RELEASE_TARGET_TOKEN)
- task: PowerShell@2
displayName: 'Clean up resources'
condition: always()
inputs:
targetType: filePath
filePath: ./images.CI/linux-and-win/cleanup.ps1
arguments: -TempResourceGroupName "$(TempResourceGroupName)" `
-SubscriptionId $(AZURE_SUBSCRIPTION) `
-ClientId $(CLIENT_ID) `
-ClientSecret "$(ClientSecret)" `
-TenantId $(AZURE_TENANT)
@@ -0,0 +1,21 @@
schedules:
- cron: "0 0 * * *"
displayName: Daily
branches:
include:
- main
always: true
trigger: none
pr:
autoCancel: true
branches:
include:
- main
jobs:
- template: image-generation.yml
parameters:
image_type: ubuntu2004
image_readme_name: Ubuntu2004-Readme.md
image_template_name: ubuntu-20.04.pkr.hcl
@@ -0,0 +1,21 @@
schedules:
- cron: "0 0 * * *"
displayName: Daily
branches:
include:
- main
always: true
trigger: none
pr:
autoCancel: true
branches:
include:
- main
jobs:
- template: image-generation.yml
parameters:
image_type: ubuntu2204
image_readme_name: Ubuntu2204-Readme.md
image_template_name: ubuntu-22.04.pkr.hcl
@@ -0,0 +1,21 @@
schedules:
- cron: "0 0 * * *"
displayName: Daily
branches:
include:
- main
always: true
trigger: none
pr:
autoCancel: true
branches:
include:
- main
jobs:
- template: image-generation.yml
parameters:
image_type: ubuntu2404
image_readme_name: Ubuntu2404-Readme.md
image_template_name: ubuntu-24.04.pkr.hcl
@@ -0,0 +1,21 @@
schedules:
- cron: "0 0 * * *"
displayName: Daily
branches:
include:
- main
always: true
trigger: none
pr:
autoCancel: true
branches:
include:
- main
jobs:
- template: image-generation.yml
parameters:
image_type: windows2019
image_readme_name: Windows2019-Readme.md
image_template_name: windows-2019.pkr.hcl
@@ -0,0 +1,21 @@
schedules:
- cron: "0 0 * * *"
displayName: Daily
branches:
include:
- main
always: true
trigger: none
pr:
autoCancel: true
branches:
include:
- main
jobs:
- template: image-generation.yml
parameters:
image_type: windows2022
image_readme_name: Windows2022-Readme.md
image_template_name: windows-2022.pkr.hcl
+3 -8
View File
@@ -1,19 +1,17 @@
param(
[String] [Parameter (Mandatory=$true)] $TemplatePath,
[String] [Parameter (Mandatory=$true)] $ClientId,
[String] [Parameter (Mandatory=$false)] $ClientSecret,
[String] [Parameter (Mandatory=$true)] $ClientSecret,
[String] [Parameter (Mandatory=$true)] $Location,
[String] [Parameter (Mandatory=$true)] $ImageName,
[String] [Parameter (Mandatory=$true)] $ImageResourceGroupName,
[String] [Parameter (Mandatory=$true)] $TempResourceGroupName,
[String] [Parameter (Mandatory=$true)] $SubscriptionId,
[String] [Parameter (Mandatory=$true)] $TenantId,
[String] [Parameter (Mandatory=$false)] $pluginVersion = "2.2.1",
[String] [Parameter (Mandatory=$false)] $VirtualNetworkName,
[String] [Parameter (Mandatory=$false)] $VirtualNetworkRG,
[String] [Parameter (Mandatory=$false)] $VirtualNetworkSubnet,
[String] [Parameter (Mandatory=$false)] $AllowedInboundIpAddresses = "[]",
[hashtable] [Parameter (Mandatory=$false)] $Tags = @{}
[String] [Parameter (Mandatory=$false)] $AllowedInboundIpAddresses = "[]"
)
if (-not (Test-Path $TemplatePath))
@@ -35,13 +33,11 @@ $SensitiveData = @(
': ->'
)
$azure_tags = $Tags | ConvertTo-Json -Compress
Write-Host "Show Packer Version"
packer --version
Write-Host "Download packer plugins"
packer plugins install github.com/hashicorp/azure $pluginVersion
packer init $TemplatePath
Write-Host "Validate packer template"
packer validate -syntax-only $TemplatePath
@@ -60,7 +56,6 @@ packer build -var "client_id=$ClientId" `
-var "virtual_network_resource_group_name=$VirtualNetworkRG" `
-var "virtual_network_subnet_name=$VirtualNetworkSubnet" `
-var "allowed_inbound_ip_addresses=$($AllowedInboundIpAddresses)" `
-var "azure_tags=$azure_tags" `
-color=false `
$TemplatePath `
| Where-Object {
+8 -1
View File
@@ -1,7 +1,14 @@
param(
[Parameter (Mandatory=$true)] [string] $TempResourceGroupName
[Parameter (Mandatory=$true)] [string] $TempResourceGroupName,
[Parameter (Mandatory=$true)] [string] $SubscriptionId,
[Parameter (Mandatory=$true)] [string] $ClientId,
[Parameter (Mandatory=$true)] [string] $ClientSecret,
[Parameter (Mandatory=$true)] [string] $TenantId
)
az login --service-principal --username $ClientId --password=$ClientSecret --tenant $TenantId | Out-Null
az account set --subscription $SubscriptionId | Out-Null
$groupExist = az group exists --name $TempResourceGroupName
if ($groupExist -eq "true") {
Write-Host "Found a match, deleting temporary files"
+248
View File
@@ -0,0 +1,248 @@
function Push-AnkaTemplateToRegistry {
param (
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[string] $RegistryUrl,
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[string] $TagName,
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[string] $TemplateName
)
# if registry uuid doesn't match then delete an image in registry
$AnkaCaCrtPath="$HOME/.config/anka/certs/anka-ca-crt.pem"
$images = anka --machine-readable registry --cacert $AnkaCaCrtPath --registry-path $RegistryUrl list | ConvertFrom-Json | ForEach-Object body
$images | Where-Object name -eq $TemplateName | ForEach-Object {
$id = $_.uuid
Show-StringWithFormat "Deleting '$TemplateName[$id]' VM and '$TagName' tag"
$curlCommand='curl -s -X DELETE -k "{0}/registry/vm?id={1}"' -f $RegistryUrl, $id
Invoke-AnkaCommand -Command $curlCommand
}
$command = "anka registry --cacert $AnkaCaCrtPath --registry-path $RegistryUrl push --force --tag $TagName $TemplateName"
Invoke-AnkaCommand -Command $command
}
function Get-AnkaVM {
param(
[string] $VMName
)
$command = "anka --machine-readable list"
if (-not [string]::IsNullOrEmpty($VMName)) {
$command = "anka --machine-readable show $VMName"
}
Invoke-AnkaCommand -Command $command | ConvertFrom-Json | Foreach-Object body
}
function Get-AnkaVMStatus {
param(
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[string] $VMName
)
$command = "anka --machine-readable list $VMName"
Invoke-AnkaCommand -Command $command | ConvertFrom-Json | Foreach-Object { $_.body.status }
}
function Get-AnkaVMIPAddress {
param(
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[string] $VMName
)
Get-AnkaVM -VMName $VMName | Foreach-Object ip
}
function Invoke-AnkaCommand {
param (
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[string] $Command
)
$result = bash -c "$Command 2>&1"
if ($LASTEXITCODE -ne 0) {
Write-Error "There is an error during command execution:`n$result"
exit 1
}
$result
}
function New-AnkaVMTemplate {
param (
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[string] $InstallerPath,
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[string] $TemplateName,
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[string] $TemplateUsername,
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[string] $TemplatePassword,
[Parameter(Mandatory)]
[int] $CPUCount,
[Parameter(Mandatory)]
[int] $RamSizeGb,
[Parameter(Mandatory)]
[int] $DiskSizeGb
)
$env:ANKA_DEFAULT_USER = $TemplateUsername
$env:ANKA_DEFAULT_PASSWD = $TemplatePassword
$env:ANKA_CREATE_SUSPEND = 0
$command = "anka create --cpu-count '$CPUCount' --ram-size '${RamSizeGb}G' --disk-size '${DiskSizeGb}G' --app '$InstallerPath' $TemplateName"
Invoke-AnkaCommand -Command $command
}
function Remove-AnkaVM {
param(
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[string] $VMName
)
$command = "anka delete $VMName --yes"
$isTemplateExists = Get-AnkaVM | Where-Object name -eq $VMName
if ($isTemplateExists) {
$null = Invoke-AnkaCommand -Command $command
}
}
function Set-AnkaVMVideoController {
param(
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[string] $VMName,
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[string] $ShortMacOSVersion,
[ValidateSet("fbuf", "pg")]
[string] $Controller = "pg"
)
$command = "anka modify $VMName set display -c $Controller"
$null = Invoke-AnkaCommand -Command $command
}
function Set-AnkaVMDisplayResolution {
param (
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[string] $VMName,
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[string] $DisplayResolution
)
$command = "anka modify $VMName set display -r $DisplayResolution"
$null = Invoke-AnkaCommand -Command $command
}
function Start-AnkaVM {
param(
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[string] $VMName
)
$command = "anka start $VMName"
$vmStatus = Get-AnkaVMStatus -VMName $VMName
if ($vmStatus -eq "stopped") {
$null = Invoke-AnkaCommand -Command $command
}
}
function Stop-AnkaVM {
param(
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[string] $VMName
)
$command = "anka stop $VMName"
$vmStatus = Get-AnkaVMStatus -VMName $VMName
if ($vmStatus -eq "running") {
$null = Invoke-AnkaCommand -Command $command
}
}
function Wait-AnkaVMIPAddress {
param(
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[string] $VMName,
[int] $RetryCount = 20,
[int] $Seconds = 60
)
$condition = {
$vmStatus = Get-AnkaVMStatus -VMName $VMName
if ($vmStatus -eq "failed") {
Write-Host "`t [-] $VMName is in failed status"
exit 1
}
Get-AnkaVMIPAddress -VMName $VMName
}
$null = Invoke-WithRetry -BreakCondition $condition -RetryCount $RetryCount -Seconds $Seconds
}
function Wait-AnkaVMSSHService {
param (
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[string] $VMName,
[int] $RetryCount = 20,
[int] $Seconds = 60
)
Start-Sleep -Seconds $Seconds
Write-Host "`t[*] Waiting for '$VMName' VM to get an IP address"
Wait-AnkaVMIPAddress -VMName $VMName -RetryCount $RetryCount -Seconds $Seconds
$ipAddress = Get-AnkaVMIPAddress -VMName $VMName
Write-Host "`t[*] The '$ipAddress' IP address for '$VMName' VM"
Write-Host "`t[*] Checking if SSH on a port is open"
$isSSHPortOpen = Test-SSHPort -IPAddress $ipAddress
if (-not $isSSHPortOpen) {
Write-Host "`t[x] SSH port is closed"
exit 1
}
}
function Set-AnkaVMUuid {
param(
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[string] $VMName,
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[string] $Uuid
)
$command = "anka modify $VMName set custom-variable hw.uuid $Uuid"
Write-Host "`t[*] Setting $VMName uuid to $Uuid"
Invoke-AnkaCommand -Command $command
}
@@ -0,0 +1,227 @@
[CmdletBinding()]
param(
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[version] $MacOSVersion,
[ValidateNotNullOrEmpty()]
[string] $TemplateUsername,
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[string] $TemplatePassword,
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[string] $RegistryUrl,
[ValidateNotNullOrEmpty()]
[string] $TemplateName,
[bool] $DownloadLatestVersion = $true,
[bool] $PushToRegistry = $true,
[bool] $BetaSearch = $false,
[bool] $InstallSoftwareUpdate = $true,
[bool] $EnableAutoLogon = $true,
[int] $CPUCount = 6,
[int] $RamSizeGb = 7,
[int] $DiskSizeGb = 325,
[string] $DisplayResolution = "1920x1080",
[string] $TagName = [DateTimeOffset]::Now.ToUnixTimeSeconds(),
[string] $Uuid = "4203018E-580F-C1B5-9525-B745CECA79EB"
)
$ErrorActionPreference = "Stop"
$WarningPreference = "SilentlyContinue"
# Import helper modules
Import-Module "$PSScriptRoot/Anka.Helpers.psm1"
Import-Module "$PSScriptRoot/Service.Helpers.psm1"
# Helper functions
function Invoke-EnableAutoLogon {
if (-not $EnableAutoLogon) {
Write-Host "`t[*] Skip configuring AutoLogon"
return
}
$ipAddress = Get-AnkaVMIPAddress -VMName $TemplateName
Wait-AnkaVMSSHService -VMName $TemplateName -Seconds 30
Write-Host "`t[*] Enable AutoLogon"
Enable-AutoLogon -HostName $ipAddress -UserName $TemplateUsername -Password $TemplatePassword
Write-Host "`t[*] Reboot '$TemplateName' VM to enable AutoLogon"
Restart-VMSSH -HostName $ipAddress | Show-StringWithFormat
Wait-AnkaVMSSHService -VMName $TemplateName -Seconds 30
Write-Host "`t[*] Checking if AutoLogon is enabled"
Test-AutoLogon -VMName $TemplateName -UserName $TemplateUsername
}
function Invoke-SoftwareUpdate {
param (
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[string] $Password
)
if (-not $InstallSoftwareUpdate) {
Write-Host "`t[*] Skip installing software updates"
return
}
$ipAddress = Get-AnkaVMIPAddress -VMName $TemplateName
# Unenroll Seed
Write-Host "`t[*] Resetting the seed before requesting stable versions"
Remove-CurrentBetaSeed -HostName $ipAddress | Show-StringWithFormat
# Install Software Updates
# Security updates may not be able to install(hang, freeze) when AutoLogon is turned off
Write-Host "`t[*] Finding available software"
$newUpdates = Get-SoftwareUpdate -HostName $ipAddress
if (-not $newUpdates) {
Write-Host "`t[*] No Updates Available"
return
}
# Define the next macOS version
$command = "sw_vers"
$guestMacosVersion = Invoke-SSHPassCommand -HostName $ipAddress -Command $command
switch -regex ($guestMacosVersion[1]) {
'12.\d' { $nextOSVersion = 'macOS Ventura|macOS Sonoma|macOS Sequoia' }
'13.\d' { $nextOSVersion = 'macOS Sonoma|macOS Sequoia' }
'14.\d' { $nextOSVersion = 'macOS Sequoia' }
}
Write-Host "`t[*] Fetching Software Updates ready to install on '$TemplateName' VM:"
Show-StringWithFormat $newUpdates
$listOfNewUpdates = $($($newUpdates.Split("*")).Split("Title").where({$_ -match "Label:"}).Replace("Label: ", '').where({$_ -notmatch $nextOSVersion}))
Write-Host "`t[*] Installing Software Updates on '$TemplateName' VM:"
Install-SoftwareUpdate -HostName $ipAddress -listOfUpdates $listOfNewUpdates -Password $Password | Show-StringWithFormat
Write-Host "`t[*] Sleep 60 seconds before the software updates have been installed"
Start-Sleep -Seconds 60
Write-Host "`t[*] Waiting for loginwindow process"
Wait-LoginWindow -HostName $ipAddress | Show-StringWithFormat
# Re-enable AutoLogon after installing a new security software update
Invoke-EnableAutoLogon
foreach ($newupdate in $listOfNewUpdates) {
# Check software updates have been installed
$updates = Get-SoftwareUpdate -HostName $ipAddress
if ($updates.Contains("Action: restart") -and !($updates -match $nextOSVersion)) {
Write-Host "`t[x] Software updates failed to install: "
Show-StringWithFormat $updates
exit 1
}
}
Write-Host "`t[*] Show the install history:"
$hUpdates = Get-SoftwareUpdateHistory -HostName $ipAddress
Show-StringWithFormat $hUpdates
Write-Host "`t[*] The current macOS version:"
$command = "sw_vers"
Invoke-SSHPassCommand -HostName $ipAddress -Command $command | Show-StringWithFormat
}
function Invoke-UpdateSettings {
param (
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[string] $Password
)
$isConfRequired = $InstallSoftwareUpdate -or $EnableAutoLogon
if (-not $isConfRequired) {
Write-Host "`t[*] Skip additional configuration"
return
}
Write-Host "`t[*] Starting '$TemplateName' VM"
Start-AnkaVM -VMName $TemplateName
Write-Host "`t[*] Waiting for SSH service on '$TemplateName' VM"
Wait-AnkaVMSSHService -VMName $TemplateName -Seconds 30
# Configure AutoLogon
Invoke-EnableAutoLogon
# Install software updates
Invoke-SoftwareUpdate -Password $Password
Write-Host "`t[*] Stopping '$TemplateName' VM"
Stop-AnkaVM -VMName $TemplateName
}
function Test-VMStopped {
$vmStatus = Get-AnkaVMStatus -VMName $TemplateName
if ($vmStatus -ne "stopped") {
Write-Host "`t[x] VM '$TemplateName' state is not stopped. The current state is '$vmStatus'"
exit 1
}
}
# Password is passed as env-var "SSHPASS"
$env:SSHUSER = $TemplateUsername
$env:SSHPASS = $TemplatePassword
Write-Host "`n[#1] Download macOS application installer:"
$shortMacOSVersion = Get-ShortMacOSVersion -MacOSVersion $MacOSVersion
if ([string]::IsNullOrEmpty($TemplateName)) {
$osArch = $(arch)
if ($osArch -eq "arm64") {
$macOSInstaller = Get-MacOSIPSWInstaller -MacOSVersion $MacOSVersion -DownloadLatestVersion $DownloadLatestVersion -BetaSearch $BetaSearch
$TemplateName = "clean_macos_${shortMacOSVersion}_${osArch}"
} else {
$macOSInstaller = Get-MacOSInstaller -MacOSVersion $MacOSVersion -DownloadLatestVersion $DownloadLatestVersion -BetaSearch $BetaSearch
$TemplateName = "clean_macos_${shortMacOSVersion}"
}
}
Write-Host "`n[#2] Create a VM template:"
Write-Host "`t[*] Deleting existed template with name '$TemplateName' before creating a new one"
Remove-AnkaVM -VMName $TemplateName
# Temporary disable VNC for macOS 14
# It's probably Anka's bug fixed in 3.3.2
if ($shortMacOSVersion -eq "14") {
$env:ANKA_CREATE_VNC = 0
}
Write-Host "`t[*] Creating Anka VM template with name '$TemplateName' and '$TemplateUsername' user"
Write-Host "`t[*] CPU Count: $CPUCount, RamSize: ${RamSizeGb}G, DiskSizeGb: ${DiskSizeGb}G, InstallerPath: $macOSInstaller, TemplateName: $TemplateName"
New-AnkaVMTemplate -InstallerPath "$macOSInstaller" `
-TemplateName $TemplateName `
-TemplateUsername $TemplateUsername `
-TemplatePassword $TemplatePassword `
-CPUCount $CPUCount `
-RamSizeGb $RamSizeGb `
-DiskSizeGb $DiskSizeGb | Show-StringWithFormat
Write-Host "`n[#3] Configure AutoLogon and/or install software updates:"
Invoke-UpdateSettings -Password $TemplatePassword
Write-Host "`n[#4] Finalization '$TemplateName' configuration and push to the registry:"
Write-Host "`t[*] The '$TemplateName' VM status is stopped"
Test-VMStopped
# Configure graphics settings
Write-Host "`t[*] Enabling Graphics Acceleration with Apple Metal for '$TemplateName' VM"
Set-AnkaVMVideoController -VMName $TemplateName -ShortMacOSVersion $ShortMacOSVersion
Write-Host "`t[*] Setting screen resolution to $DisplayResolution for $TemplateName"
Set-AnkaVMDisplayResolution -VMName $TemplateName -DisplayResolution $DisplayResolution
# Set static UUID
Set-AnkaVMUuid -VMName $TemplateName -Uuid $Uuid
if ($PushToRegistry) {
# Push a VM template (and tag) to the Cloud
Write-Host "`t[*] Pushing '$TemplateName' image with '$TagName' tag to the '$RegistryUrl' registry..."
Push-AnkaTemplateToRegistry -RegistryUrl $registryUrl -TagName $TagName -TemplateName $TemplateName
}
+478
View File
@@ -0,0 +1,478 @@
function Enable-AutoLogon {
param (
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[string] $HostName,
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[string] $UserName,
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[string] $Password
)
$url = "https://raw.githubusercontent.com/actions/runner-images/main/images/macos/assets/bootstrap-provisioner/setAutoLogin.sh"
$script = Invoke-RestMethod -Uri $url
$base64 = [Convert]::ToBase64String($script.ToCharArray())
$command = "echo $base64 | base64 --decode > ./setAutoLogin.sh;sudo bash ./setAutoLogin.sh '${UserName}' '${Password}';rm ./setAutoLogin.sh"
Invoke-SSHPassCommand -HostName $HostName -Command $command
}
function Invoke-SoftwareUpdateArm64 {
param (
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[string] $HostName,
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[string] $Password,
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[array] $ListOfUpdates
)
# Define the next macOS version
$command = "sw_vers"
$guestMacosVersion = Invoke-SSHPassCommand -HostName $HostName -Command $command
switch -regex ($guestMacosVersion[1]) {
'12.\d' { $nextOSVersion = 'macOS Ventura|macOS Sonoma|macOS Sequoia' }
'13.\d' { $nextOSVersion = 'macOS Sonoma|macOS Sequoia' }
'14.\d' { $nextOSVersion = 'macOS Sequoia' }
}
$url = "https://raw.githubusercontent.com/actions/runner-images/main/images/macos/assets/auto-software-update-arm64.exp"
$script = Invoke-RestMethod -Uri $url
foreach ($update in $ListOfUpdates) {
if ($update -notmatch $nextOSVersion) {
$updatedScript = $script.Replace("MACOSUPDATE", $($($update.trim()).Replace(" ","\ ")))
$base64 = [Convert]::ToBase64String($updatedScript.ToCharArray())
$command = "echo $base64 | base64 --decode > ./auto-software-update-arm64.exp;chmod +x ./auto-software-update-arm64.exp; ./auto-software-update-arm64.exp ${Password};rm ./auto-software-update-arm64.exp"
Invoke-SSHPassCommand -HostName $HostName -Command $command
}
}
}
function Get-AvailableVersions {
param (
[bool] $IsBeta = $false
)
if ($IsBeta) {
$searchPostfix = " beta"
}
$command = { /usr/sbin/softwareupdate --list-full-installers | grep "macOS" }
$condition = { $LASTEXITCODE -eq 0 }
$softwareUpdates = Invoke-WithRetry -Command $command -BreakCondition $condition | Where-Object { $_.Contains("Title: macOS") -and $_ -match $searchPostfix }
$allVersions = $softwareUpdates -replace "(\* )?(Title|Version|Size):" | ConvertFrom-Csv -Header OSName, OSVersion | Select-Object OSName, OSVersion -Unique
$allVersions
}
function Get-AvailableIPSWVersions {
param (
[bool] $IsBeta = $false,
[bool] $IsLatest = $true,
[string] $MacOSCodeNameOrVersion
)
if ($IsBeta) {
$command = { mist list firmware "$MacOSCodeNameOrVersion" --compatible --include-betas --latest --export "/Applications/export.json" }
} elseif ($IsLatest) {
$command = { mist list firmware "$MacOSCodeNameOrVersion" --compatible --latest --export "/Applications/export.json" }
} else {
$command = { mist list firmware "$MacOSCodeNameOrVersion" --compatible --export "/Applications/export.json" }
}
$condition = { $LASTEXITCODE -eq 0 }
Invoke-WithRetry -Command $command -BreakCondition $condition | Out-Null
$softwareList = get-content -Path "/Applications/export.json"
$availableBuilds = ($softwareList | ConvertFrom-Json).build
if ($null -eq $availableBuilds) {
Write-Host "Requested macOS '$MacOSCodeNameOrVersion' version not found in the list of available installers."
$command = { mist list firmware "$($MacOSCodeNameOrVersion.split('.')[0])" }
Invoke-WithRetry -Command $command -BreakCondition $condition
exit 1
}
return $availableBuilds
}
function Get-MacOSIPSWInstaller {
param (
[Parameter(Mandatory)]
[version] $MacOSVersion,
[bool] $DownloadLatestVersion = $false,
[bool] $BetaSearch = $false
)
if ($MacOSVersion -eq [version] "12.0") {
$MacOSName = "macOS Monterey"
} elseif ($MacOSVersion -eq [version] "13.0") {
$MacOSName = "macOS Ventura"
} elseif ($MacOSVersion -eq [version] "14.0") {
$MacOSName = "macOS Sonoma"
} else {
$MacOSName = $MacOSVersion.ToString()
}
Write-Host "`t[*] Finding available full installers"
if ($DownloadLatestVersion -eq $true) {
$targetBuild = Get-AvailableIPSWVersions -IsLatest $true -MacOSCodeNameOrVersion $MacOSName
Write-Host "`t[*] The 'DownloadLatestVersion' flag is set to true. Latest compatible macOS build of '$MacOSName' is '$targetBuild'"
} elseif ($BetaSearch -eq $true) {
$targetBuild = Get-AvailableIPSWVersions -IsBeta $true -MacOSCodeNameOrVersion $MacOSName
Write-Host "`t[*] The 'BetaSearch' flag is set to true. Latest compatible beta macOS build of '$MacOSName' is '$targetBuild'"
} else {
$targetBuild = Get-AvailableIPSWVersions -MacOSCodeNameOrVersion $MacOSName -IsLatest $false
Write-Host "`t[*] Available compatible macOS builds of '$MacOSName' are: $($targetBuild -join ', ')"
if ($targetBuild.Count -gt 1) {
Write-Error "`t[*] Please specify the exact build number of macOS you want to install"
exit 1
}
}
$installerPathPattern = "/Applications/Install ${macOSName}*.ipsw"
if (Test-Path $installerPathPattern) {
$previousInstallerPath = Get-Item -Path $installerPathPattern
Write-Host "`t[*] Removing '$previousInstallerPath' installation app before downloading the new one"
sudo rm -rf "$previousInstallerPath"
}
# Download macOS installer
$installerDir = "/Applications/"
$installerName = "Install ${macOSName}.ipsw"
Write-Host "`t[*] Requested macOS '$targetBuild' version installer found, fetching it from mist database"
Invoke-WithRetry { mist download firmware "$targetBuild" --output-directory $installerDir --firmware-name "$installerName" } { $LASTEXITCODE -eq 0 } | Out-Null
if (Test-Path "$installerDir$installerName") {
$result = "$installerDir$installerName"
} else {
Write-Error "`t[*] Requested macOS '$targetBuild' version installer failed to download"
exit 1
}
return $result
}
function Get-MacOSInstaller {
param (
[Parameter(Mandatory)]
[version] $MacOSVersion,
[bool] $DownloadLatestVersion = $false,
[bool] $BetaSearch = $false
)
# Enroll machine to DeveloperSeed if we need beta and unenroll otherwise
$seedutil = "/System/Library/PrivateFrameworks/Seeding.framework/Versions/Current/Resources/seedutil"
if ($BetaSearch) {
Write-Host "`t[*] Beta Version requested. Enrolling machine to DeveloperSeed"
sudo $seedutil enroll DeveloperSeed | Out-Null
} else {
Write-Host "`t[*] Resetting the seed before requesting stable versions"
sudo $seedutil unenroll | Out-Null
}
# Validate there is no software update at the moment
Test-SoftwareUpdate
# Validate availability OSVersion
Write-Host "`t[*] Finding available full installers"
$availableVersions = Get-AvailableVersions -IsBeta $BetaSearch
if ($DownloadLatestVersion) {
$shortMacOSVersion = Get-ShortMacOSVersion -MacOSVersion $MacOSVersion
$filterSearch = "${shortMacOSVersion}."
$filteredVersions = $availableVersions.Where{ $_.OSVersion.StartsWith($filterSearch) }
if (-not $filteredVersions) {
Write-Host "`t[x] Failed to find any macOS versions using '$filterSearch' search condition"
Show-StringWithFormat $availableVersions
exit 1
}
Show-StringWithFormat $filteredVersions
$osVersions = $filteredVersions.OSVersion | Sort-Object { [version]$_ }
$MacOSVersion = $osVersions | Select-Object -Last 1
Write-Host "`t[*] The 'DownloadLatestVersion' flag is set. Latest macOS version is '$MacOSVersion' now"
}
$macOSName = $availableVersions.Where{ $MacOSVersion -eq $_.OSVersion }.OSName.Split(" ")[1]
if (-not $macOSName) {
Write-Host "`t[x] Requested macOS '$MacOSVersion' version not found in the list of available installers. Available versions are:`n$($availableVersions.OSVersion)"
Write-Host "`t[x] Make sure to pass '-BetaSearch `$true' if you need a beta version installer"
exit 1
}
# Clear LastRecommendedMajorOSBundleIdentifier to prevent error during fetching updates
# Install failed with error: Update not found
Update-SoftwareBundle
# Download macOS installer
Write-Host "`t[*] Requested macOS '$MacOSVersion' version installer found, fetching it from Apple Software Update"
Invoke-WithRetry -Command { sudo /usr/local/bin/mist download installer $MacOSVersion application --force --export installer.json --output-directory /Applications } -BreakCondition { $LASTEXITCODE -eq 0 } | Out-Null
if (-not(Test-Path installer.json -PathType leaf)) {
Write-Host "`t[x] Failed to fetch $MacOSVersion macOS"
exit 1
}
$installerPath = (Get-Content installer.json | Out-String | ConvertFrom-Json).options.applicationPath
if (-not $installerPath) {
Write-Host "`t[x] Path not found using '$installerPathPattern'"
exit 1
}
Write-Host "`t[*] Installer successfully downloaded to '$installerPath'"
$installerPath
}
function Get-ShortMacOSVersion {
param (
[Parameter(Mandatory)]
[version] $MacOSVersion
)
# Take Major.Minor version for macOS 10 (10.14 or 10.15) and Major for all further versions
$MacOSVersion.Major -eq 10 ? $MacOSVersion.ToString(2) : $MacOSVersion.ToString(1)
}
function Get-SoftwareUpdate {
param(
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[string] $HostName
)
$command = "/usr/sbin/softwareupdate --list"
$result = Invoke-SSHPassCommand -HostName $HostName -Command $command
$result | Where-Object { $_ -match "(Label|Title):" } | Out-String
}
function Get-SoftwareUpdateHistory {
param (
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[string] $HostName
)
$command = "/usr/sbin/softwareupdate --history"
Invoke-SSHPassCommand -HostName $HostName -Command $command | Out-String
}
function Install-SoftwareUpdate {
param(
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[string] $HostName,
[array] $listOfUpdates,
[string] $Password
)
# If an update is happening on macOS arm64 we will use the additional tool to install updates.
$osArch = $(arch)
if ($osArch -eq "arm64") {
Invoke-SoftwareUpdateArm64 -HostName $HostName -Password $Password -ListOfUpdates $listOfUpdates
} else {
foreach ($update in $listOfUpdates) {
$command = "sudo /usr/sbin/softwareupdate --restart --verbose --install '$($update.trim())'"
Invoke-SSHPassCommand -HostName $HostName -Command $command
}
}
}
function Invoke-SSHPassCommand {
param(
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[string] $HostName,
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[string] $Command,
[int] $ConnectTimeout = 10,
[int] $ConnectionAttempts = 10,
[int] $ServerAliveInterval = 30
)
$sshArg = @(
"sshpass"
"-e"
"ssh"
"-o UserKnownHostsFile=/dev/null"
"-o StrictHostKeyChecking=no"
"-o ConnectTimeout=$ConnectTimeout"
"-o ConnectionAttempts=$ConnectionAttempts"
"-o LogLevel=ERROR"
"-o ServerAliveInterval=$ServerAliveInterval"
"${env:SSHUSER}@${HostName}"
)
$sshPassOptions = $sshArg -join " "
if ($PSVersionTable.PSVersion.Major -eq 7 -and $PSVersionTable.PSVersion.Minor -le 2) {
$result = bash -c "$sshPassOptions \""$Command\"" 2>&1"
} else {
$result = bash -c "$sshPassOptions `"$Command`" 2>&1"
}
if ($LASTEXITCODE -ne 0) {
Write-Error "There is an error during command execution:`n$result"
exit 1
}
$result
}
function Invoke-WithRetry {
param(
[scriptblock] $Command,
[scriptblock] $BreakCondition,
[int] $RetryCount = 20,
[int] $Seconds = 60
)
while ($RetryCount -gt 0) {
try {
if ($Command) {
$result = & $Command
}
if (& $BreakCondition) {
return $result
}
} catch {
Write-Host "`t [!] Error during command execution: $_"
}
$RetryCount--
if ($RetryCount -eq 0) {
Write-Error "No more attempts left: $BreakCondition"
}
Write-Host "`t [/] Waiting $Seconds seconds before retrying. Retries left: $RetryCount"
Start-Sleep -Seconds $Seconds
}
$result
}
function Restart-VMSSH {
param(
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[string] $HostName
)
#
# https://unix.stackexchange.com/questions/58271/closing-connection-after-executing-reboot-using-ssh-command
#
$command = '(sleep 1 && sudo reboot &) && exit'
Invoke-SSHPassCommand -HostName $HostName -Command $command
}
function Show-StringWithFormat {
param(
[Parameter(ValuefromPipeline)]
[object] $string
)
process {
($string | Out-String).Trim().split("`n") | ForEach-Object { Write-Host "`t $_" }
}
}
function Remove-CurrentBetaSeed {
param(
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[string] $HostName
)
$command = "sudo /System/Library/PrivateFrameworks/Seeding.framework/Versions/Current/Resources/seedutil unenroll"
Invoke-SSHPassCommand -HostName $HostName -Command $command | Out-String
}
function Test-AutoLogon {
param(
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[string] $VMName,
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[string] $UserName
)
Invoke-WithRetry -BreakCondition {
# pwsh crashes if it invokes directly
# https://github.com/dotnet/runtime/issues/59059
$ankaUser = "" | bash -c "anka run $VMName /usr/bin/id -nu"
$UserName -eq $ankaUser
}
}
function Test-SoftwareUpdate {
param (
[string] $UpdateProcessName = "softwareupdate"
)
$command = {
$updateProcess = (Get-Process -Name $UpdateProcessName -ErrorAction SilentlyContinue).id
if ($updateProcess) {
# Workaround to get commandline param as it doesn't work for macOS atm https://github.com/PowerShell/PowerShell/issues/13943
$processName = /bin/ps -o command= $updateProcess
Write-Host "`t[*] Another software update process with '$updateProcess' id is in place with the following arguments '$processName'"
}
}
$condition = {
$null -eq (Get-Process -Name $UpdateProcessName -ErrorAction SilentlyContinue)
}
Invoke-WithRetry -Command $command -BreakCondition $condition
}
function Test-SSHPort {
param(
[Parameter(Mandatory)]
[ipaddress] $IPAddress,
[int] $Port = 22,
[int] $Timeout = 2000
)
Invoke-WithRetry -Command {$true} -BreakCondition {
try {
$client = [System.Net.Sockets.TcpClient]::new()
$client.ConnectAsync($IPAddress, $Port).Wait($Timeout)
}
catch {
$false
}
finally {
$client.Close()
}
}
}
function Wait-LoginWindow {
param (
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[string] $HostName,
[int] $RetryCount = 60,
[int] $Seconds = 60
)
$condition = {
$psCommand = "/bin/ps auxww"
$lw = "/System/Library/CoreServices/loginwindow.app/Contents/MacOS/loginwindow"
$ctk = "/System/Library/Frameworks/CryptoTokenKit.framework/ctkahp.bundle/Contents/MacOS/ctkahp"
$proc = Invoke-SSHPassCommand -HostName $HostName -Command $psCommand | Out-String
$proc.Contains($lw) -and $proc.Contains($ctk)
}
Invoke-WithRetry -RetryCount $RetryCount -Seconds $Seconds -BreakCondition $condition
}
function Update-SoftwareBundle {
$productVersion = sw_vers -productVersion
if ( $productVersion.StartsWith('11.') ) {
sudo rm -rf /Library/Preferences/com.apple.commerce.plist
sudo /usr/bin/defaults delete /Library/Preferences/com.apple.SoftwareUpdate.plist LastRecommendedMajorOSBundleIdentifier | Out-Null
}
}
@@ -0,0 +1,53 @@
#!/bin/bash -e -o pipefail
# Select any Xamarin SDK versions as the default ones independently by specifying only those versions that need to be changed.
# Examples:
# 1. Change all versions: $VM_ASSETS/select-xamarin-sdkv-v2.sh --mono=6.12 --ios=14.8 --android=10.2 --mac=7.8
# 2. Change default Mono and iOS only: $VM_ASSETS/select-xamarin-sdkv-v2.sh --mono=6.12 --ios=14.8
# 3. Change default Android only: $VM_ASSETS/select-xamarin-sdkv-v2.sh --android=11.1
get_framework_path() {
case $1 in
--mono) echo '/Library/Frameworks/Mono.framework/Versions' ;;
--ios) echo '/Library/Frameworks/Xamarin.iOS.framework/Versions' ;;
--android) echo '/Library/Frameworks/Xamarin.Android.framework/Versions' ;;
--mac) echo '/Library/Frameworks/Xamarin.Mac.framework/Versions' ;;
*) ;;
esac
}
change_framework_version() {
local framework=$1
local version=$2
echo "Select $framework $version"
local countDigit=$(echo "${version}" | grep -o "\." | grep -c "\.")
if [[ countDigit -gt 1 ]]; then
echo "[WARNING] It is not recommended to specify the exact framework version because your build can be broken with the next patch update. Consider using "major.minor" only format."
fi
local framework_path=$(get_framework_path "$framework")
if [ -d "${framework_path}/${version}" ]; then
sudo rm -f ${framework_path}/Current
sudo ln -s "${framework_path}/${version}" "${framework_path}/Current"
else
echo "Invalid framework version ${framework_path}/${version}"
exit 1
fi
}
for arg in "$@"; do
key=$(echo $arg | cut -f1 -d=)
value=$(echo $arg | cut -f2 -d=)
case $key in
--mono | --ios | --android | --mac) change_framework_version $key $value ;;
*)
echo "Invalid parameter <${key}>"
exit 1
;;
esac
done
@@ -0,0 +1,22 @@
#!/bin/bash -e -o pipefail
if [ -z "$1" ]; then
echo "No Xamarin SDK specified."
exit 0
fi
XAMARIN_SDK=$1
echo "Set Xamarin SDK to ${XAMARIN_SDK}"
FOLDERS_LIST=(
'/Library/Frameworks/Mono.framework/Versions'
'/Library/Frameworks/Xamarin.iOS.framework/Versions'
'/Library/Frameworks/Xamarin.Android.framework/Versions'
'/Library/Frameworks/Xamarin.Mac.framework/Versions'
)
for FOLDER in "${FOLDERS_LIST[@]}"
do
echo "Set Current folder for ${FOLDER}"
sudo rm -f ${FOLDER}/Current
sudo ln -s ${FOLDER}/${XAMARIN_SDK} ${FOLDER}/Current
done
+378
View File
@@ -0,0 +1,378 @@
| Announcements |
|-|
| [macOS 15 (Sequoia) is now available as a public beta in GitHub Actions](https://github.com/actions/runner-images/issues/10686) |
| [[Macos 13 and 14] Android NDK versions <=25 will be removed from images on October 07,2024](https://github.com/actions/runner-images/issues/10614) |
| [[Macos 13 and 14] Go version 1.20.0 will be removed on October 07,2024.](https://github.com/actions/runner-images/issues/10612) |
***
# macOS 12
- OS Version: macOS 12.7.6 (21H1320)
- Kernel Version: Darwin 21.6.0
- Image Version: 20240926.174
## Installed Software
### Language and Runtime
- .NET Core SDK: 6.0.425, 7.0.102, 7.0.202, 7.0.306, 7.0.410, 8.0.101, 8.0.204, 8.0.303, 8.0.402
- Bash 3.2.57(1)-release
- Clang/LLVM 14.0.0
- Clang/LLVM (Homebrew) 15.0.7 - available on `$(brew --prefix llvm@15)/bin/clang`
- GCC 12 (Homebrew GCC 12.4.0) - available by `gcc-12` alias
- GCC 13 (Homebrew GCC 13.3.0) - available by `gcc-13` alias
- GCC 14 (Homebrew GCC 14.2.0) - available by `gcc-14` alias
- GNU Fortran 12 (Homebrew GCC 12.4.0) - available by `gfortran-12` alias
- GNU Fortran 13 (Homebrew GCC 13.3.0) - available by `gfortran-13` alias
- GNU Fortran 14 (Homebrew GCC 14.2.0) - available by `gfortran-14` alias
- Julia 1.10.5
- Kotlin 2.0.20-release-360
- Go 1.21.13
- Mono 6.12.0.188
- Node.js 18.20.4
- MSBuild 16.10.1.51301 (Mono 6.12.0.188)
- NVM 0.39.7
- NVM - Cached node versions: 16.20.2, 18.20.4, 20.17.0
- Perl 5.38.2
- PHP 8.3.11
- Python 2.7.18
- Python3 3.12.6
- R 4.4.1
- Ruby 3.0.7p220
### Package Management
- Bundler 2.5.20
- Carthage 0.40.0
- CocoaPods 1.15.2
- Composer 2.7.9
- Homebrew 4.3.24
- Miniconda 24.7.1
- NPM 10.7.0
- NuGet 6.3.1.1
- Pip 20.3.4 (python 2.7)
- Pip3 24.2 (python 3.12)
- Pipx 1.7.1
- RubyGems 3.5.20
- Vcpkg 2024 (build from commit 3d8959985)
- Yarn 1.22.22
#### Environment variables
| Name | Value |
| ----------------------- | ---------------------- |
| CONDA | /usr/local/miniconda |
| VCPKG_INSTALLATION_ROOT | /usr/local/share/vcpkg |
### Project Management
- Apache Ant 1.10.15
- Apache Maven 3.9.9
- Gradle 8.10.2
- Sbt 1.10.2
### Utilities
- 7-Zip 17.05
- aria2 1.37.0
- azcopy 10.26.0
- bazel 7.3.1
- bazelisk 1.21.0
- bsdtar 3.5.1 - available by 'tar' alias
- Curl 8.10.1
- Git 2.46.2
- Git LFS 3.5.1
- GitHub CLI 2.57.0
- GNU Tar 1.35 - available by 'gtar' alias
- GNU Wget 1.24.5
- gpg (GnuPG) 2.4.5
- ImageMagick 7.1.1-38
- jq 1.7.1
- mongo 5.0.29
- mongod 5.0.29
- OpenSSL 1.1.1w 11 Sep 2023
- Packer 1.9.4
- pkg-config 0.29.2
- PostgreSQL 14.13 (Homebrew)
- psql (PostgreSQL) 14.13 (Homebrew)
- Sox 14.4.2
- Subversion (SVN) 1.14.3
- Switchaudio-osx 1.2.2
- Vagrant 2.4.1
- VirtualBox 6.1.38r153438
- yq 4.44.3
- zstd 1.5.6
### Tools
- App Center CLI 3.0.1
- AWS CLI 2.17.59
- AWS SAM CLI 1.124.0
- AWS Session Manager CLI 1.2.650.0
- Azure CLI 2.64.0
- Azure CLI (azure-devops) 1.0.1
- Bicep CLI 0.30.23
- Cabal 3.10.3.0
- Cmake 3.30.3
- CodeQL Action Bundle 2.19.0
- Colima 0.7.5
- Fastlane 2.222.0
- GHC 9.10.1
- GHCup 0.1.30.0
- Jazzy 0.15.2
- Stack 3.1.1
- SwiftFormat 0.54.5
- Swig 4.2.1
- Xcbeautify 1.6.0
- Xcode Command Line Tools 14.2.0.0.1.1668646533
- Xcodes 1.5.0
### Linters
- SwiftLint 0.53.0
- Yamllint 1.35.1
### Browsers
- Safari 17.6 (17618.3.11.11.7)
- SafariDriver 17.6 (17618.3.11.11.7)
- Google Chrome 129.0.6668.71
- Google Chrome for Testing 129.0.6668.70
- ChromeDriver 129.0.6668.70
- Microsoft Edge 129.0.2792.52
- Microsoft Edge WebDriver 129.0.2792.46
- Mozilla Firefox 130.0.1
- geckodriver 0.35.0
- Selenium server 4.25.0
#### Environment variables
| Name | Value |
| --------------- | ------------------------------------- |
| CHROMEWEBDRIVER | /usr/local/share/chromedriver-mac-x64 |
| EDGEWEBDRIVER | /usr/local/share/edge_driver |
| GECKOWEBDRIVER | /usr/local/opt/geckodriver/bin |
### Java
| Version | Environment Variable |
| --------------------- | -------------------- |
| 8.0.422+5.1 (default) | JAVA_HOME_8_X64 |
| 11.0.24+8 | JAVA_HOME_11_X64 |
| 17.0.12+7 | JAVA_HOME_17_X64 |
| 21.0.4+7.0 | JAVA_HOME_21_X64 |
### Cached Tools
#### PyPy
- 2.7.18 [PyPy 7.3.17]
- 3.7.13 [PyPy 7.3.9]
- 3.8.16 [PyPy 7.3.11]
- 3.9.19 [PyPy 7.3.16]
- 3.10.14 [PyPy 7.3.17]
#### Ruby
- 3.0.7
- 3.1.6
- 3.2.5
- 3.3.5
#### Python
- 3.7.17
- 3.8.18
- 3.9.20
- 3.10.15
- 3.11.9
- 3.12.6
#### Node.js
- 16.20.2
- 18.20.4
- 20.17.0
#### Go
- 1.20.14
- 1.21.13
- 1.22.7
- 1.23.1
### Rust Tools
- Cargo 1.81.0
- Rust 1.81.0
- Rustdoc 1.81.0
- Rustup 1.27.1
#### Packages
- Bindgen 0.70.1
- Cargo-audit 0.20.1
- Cargo-outdated 0.15.0
- Cbindgen 0.27.0
- Clippy 0.1.81
- Rustfmt 1.7.1-stable
### PowerShell Tools
- PowerShell 7.4.5
#### PowerShell Modules
- Az: 12.3.0
- MarkdownPS: 1.10
- Pester: 5.6.1
- PSScriptAnalyzer: 1.22.0
### Web Servers
| Name | Version | ConfigFile | ServiceStatus | ListenPort |
| ----- | ------- | ------------------------------- | ------------- | ---------- |
| httpd | 2.4.62 | /usr/local/etc/httpd/httpd.conf | none | 80 |
| nginx | 1.27.1 | /usr/local/etc/nginx/nginx.conf | none | 80 |
### Xamarin
#### Visual Studio for Mac
| Version | Build | Path |
| -------------- | ----------- | ------------------------------------ |
| 2019 | 8.10.25.2 | /Applications/Visual Studio 2019.app |
| 2022 (default) | 17.6.14.413 | /Applications/Visual Studio.app |
##### Notes
```
To use Visual Studio 2019 by default rename the app:
mv "/Applications/Visual Studio.app" "/Applications/Visual Studio 2022.app"
mv "/Applications/Visual Studio 2019.app" "/Applications/Visual Studio.app"
```
#### Xamarin bundles
| symlink | Xamarin.Mono | Xamarin.iOS | Xamarin.Mac | Xamarin.Android |
| ----------------- | ------------ | ----------- | ----------- | --------------- |
| 6_12_25 | 6.12 | 16.4 | 9.3 | 13.2 |
| 6_12_24 | 6.12 | 16.2 | 9.1 | 13.2 |
| 6_12_23 | 6.12 | 16.2 | 9.1 | 13.1 |
| 6_12_22 | 6.12 | 16.1 | 9.0 | 13.1 |
| 6_12_21 (default) | 6.12 | 16.0 | 8.12 | 13.1 |
| 6_12_20 | 6.12 | 16.0 | 8.12 | 13.0 |
| 6_12_19 | 6.12 | 15.12 | 8.12 | 13.0 |
| 6_12_18 | 6.12 | 15.10 | 8.10 | 12.3 |
| 6_12_17 | 6.12 | 15.10 | 8.10 | 12.2 |
| 6_12_16 | 6.12 | 15.8 | 8.8 | 12.2 |
| 6_12_15 | 6.12 | 15.8 | 8.8 | 12.1 |
| 6_12_14 | 6.12 | 15.8 | 8.8 | 12.0 |
| 6_12_13 | 6.12 | 15.6 | 8.6 | 12.0 |
| 6_12_12 | 6.12 | 15.4 | 8.4 | 12.0 |
| 6_12_11 | 6.12 | 15.2 | 8.2 | 12.0 |
| 6_12_10 | 6.12 | 15.0 | 7.14 | 11.3 |
#### Unit Test Framework
- NUnit 3.6.1
### Xcode
| Version | Build | Path |
| -------------- | -------- | ------------------------------ |
| 14.2 (default) | 14C18 | /Applications/Xcode_14.2.app |
| 14.1 | 14B47b | /Applications/Xcode_14.1.app |
| 14.0.1 | 14A400 | /Applications/Xcode_14.0.1.app |
| 13.4.1 | 13F100 | /Applications/Xcode_13.4.1.app |
| 13.3.1 | 13E500a | /Applications/Xcode_13.3.1.app |
| 13.2.1 | 13C100 | /Applications/Xcode_13.2.1.app |
| 13.1 | 13A1030d | /Applications/Xcode_13.1.app |
#### Xcode Support Tools
- xcpretty 0.3.0
- xcversion 2.8.1
#### Installed SDKs
| SDK | SDK Name | Xcode Version |
| ----------------------- | -------------------- | ---------------------- |
| macOS 12.0 | macosx12.0 | 13.1 |
| macOS 12.1 | macosx12.1 | 13.2.1 |
| macOS 12.3 | macosx12.3 | 13.3.1, 13.4.1, 14.0.1 |
| macOS 13.0 | macosx13.0 | 14.1 |
| macOS 13.1 | macosx13.1 | 14.2 |
| iOS 15.0 | iphoneos15.0 | 13.1 |
| iOS 15.2 | iphoneos15.2 | 13.2.1 |
| iOS 15.4 | iphoneos15.4 | 13.3.1 |
| iOS 15.5 | iphoneos15.5 | 13.4.1 |
| iOS 16.0 | iphoneos16.0 | 14.0.1 |
| iOS 16.1 | iphoneos16.1 | 14.1 |
| iOS 16.2 | iphoneos16.2 | 14.2 |
| Simulator - iOS 15.0 | iphonesimulator15.0 | 13.1 |
| Simulator - iOS 15.2 | iphonesimulator15.2 | 13.2.1 |
| Simulator - iOS 15.4 | iphonesimulator15.4 | 13.3.1 |
| Simulator - iOS 15.5 | iphonesimulator15.5 | 13.4.1 |
| Simulator - iOS 16.0 | iphonesimulator16.0 | 14.0.1 |
| Simulator - iOS 16.1 | iphonesimulator16.1 | 14.1 |
| Simulator - iOS 16.2 | iphonesimulator16.2 | 14.2 |
| tvOS 15.0 | appletvos15.0 | 13.1 |
| tvOS 15.2 | appletvos15.2 | 13.2.1 |
| tvOS 15.4 | appletvos15.4 | 13.3.1, 13.4.1 |
| tvOS 16.0 | appletvos16.0 | 14.0.1 |
| tvOS 16.1 | appletvos16.1 | 14.1, 14.2 |
| Simulator - tvOS 15.0 | appletvsimulator15.0 | 13.1 |
| Simulator - tvOS 15.2 | appletvsimulator15.2 | 13.2.1 |
| Simulator - tvOS 15.4 | appletvsimulator15.4 | 13.3.1, 13.4.1 |
| Simulator - tvOS 16.0 | appletvsimulator16.0 | 14.0.1 |
| Simulator - tvOS 16.1 | appletvsimulator16.1 | 14.1, 14.2 |
| watchOS 8.0 | watchos8.0 | 13.1 |
| watchOS 8.3 | watchos8.3 | 13.2.1 |
| watchOS 8.5 | watchos8.5 | 13.3.1, 13.4.1 |
| watchOS 9.0 | watchos9.0 | 14.0.1 |
| watchOS 9.1 | watchos9.1 | 14.1, 14.2 |
| Simulator - watchOS 8.0 | watchsimulator8.0 | 13.1 |
| Simulator - watchOS 8.3 | watchsimulator8.3 | 13.2.1 |
| Simulator - watchOS 8.5 | watchsimulator8.5 | 13.3.1, 13.4.1 |
| Simulator - watchOS 9.0 | watchsimulator9.0 | 14.0.1 |
| Simulator - watchOS 9.1 | watchsimulator9.1 | 14.1, 14.2 |
| DriverKit 21.0.1 | driverkit21.0.1 | 13.1 |
| DriverKit 21.2 | driverkit21.2 | 13.2.1 |
| DriverKit 21.4 | driverkit21.4 | 13.3.1, 13.4.1, 14.0.1 |
| DriverKit 22.1 | driverkit22.1 | 14.1 |
| DriverKit 22.2 | driverkit22.2 | 14.2 |
#### Installed Simulators
| OS | Simulators |
| ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| iOS 15.0 | iPod touch (7th generation)<br>iPhone 11<br>iPhone 11 Pro<br>iPhone 11 Pro Max<br>iPhone 12<br>iPhone 12 mini<br>iPhone 12 Pro<br>iPhone 12 Pro Max<br>iPhone 13<br>iPhone 13 mini<br>iPhone 13 Pro<br>iPhone 13 Pro Max<br>iPhone 8<br>iPhone 8 Plus<br>iPhone SE (2nd generation)<br>iPad (9th generation)<br>iPad Air (4th generation)<br>iPad mini (6th generation)<br>iPad Pro (11-inch) (3rd generation)<br>iPad Pro (12.9-inch) (5th generation)<br>iPad Pro (9.7-inch) |
| iOS 15.2 | iPod touch (7th generation)<br>iPhone 11<br>iPhone 11 Pro<br>iPhone 11 Pro Max<br>iPhone 12<br>iPhone 12 mini<br>iPhone 12 Pro<br>iPhone 12 Pro Max<br>iPhone 13<br>iPhone 13 mini<br>iPhone 13 Pro<br>iPhone 13 Pro Max<br>iPhone 8<br>iPhone 8 Plus<br>iPhone SE (2nd generation)<br>iPad (9th generation)<br>iPad Air (4th generation)<br>iPad mini (6th generation)<br>iPad Pro (11-inch) (3rd generation)<br>iPad Pro (12.9-inch) (5th generation)<br>iPad Pro (9.7-inch) |
| iOS 15.4 | iPod touch (7th generation)<br>iPhone 11<br>iPhone 11 Pro<br>iPhone 11 Pro Max<br>iPhone 12<br>iPhone 12 mini<br>iPhone 12 Pro<br>iPhone 12 Pro Max<br>iPhone 13<br>iPhone 13 mini<br>iPhone 13 Pro<br>iPhone 13 Pro Max<br>iPhone 8<br>iPhone 8 Plus<br>iPhone SE (2nd generation)<br>iPhone SE (3rd generation)<br>iPad (9th generation)<br>iPad Air (4th generation)<br>iPad Air (5th generation)<br>iPad mini (6th generation)<br>iPad Pro (11-inch) (3rd generation)<br>iPad Pro (12.9-inch) (5th generation)<br>iPad Pro (9.7-inch) |
| iOS 15.5 | iPod touch (7th generation)<br>iPhone 11<br>iPhone 11 Pro<br>iPhone 11 Pro Max<br>iPhone 12<br>iPhone 12 mini<br>iPhone 12 Pro<br>iPhone 12 Pro Max<br>iPhone 13<br>iPhone 13 mini<br>iPhone 13 Pro<br>iPhone 13 Pro Max<br>iPhone 8<br>iPhone 8 Plus<br>iPhone SE (2nd generation)<br>iPhone SE (3rd generation)<br>iPad (9th generation)<br>iPad Air (4th generation)<br>iPad Air (5th generation)<br>iPad mini (6th generation)<br>iPad Pro (11-inch) (3rd generation)<br>iPad Pro (12.9-inch) (5th generation)<br>iPad Pro (9.7-inch) |
| iOS 16.0 | iPhone 11<br>iPhone 11 Pro<br>iPhone 11 Pro Max<br>iPhone 12<br>iPhone 12 mini<br>iPhone 12 Pro<br>iPhone 12 Pro Max<br>iPhone 13<br>iPhone 13 mini<br>iPhone 13 Pro<br>iPhone 13 Pro Max<br>iPhone 14<br>iPhone 14 Plus<br>iPhone 14 Pro<br>iPhone 14 Pro Max<br>iPhone 8<br>iPhone 8 Plus<br>iPhone SE (2nd generation)<br>iPhone SE (3rd generation)<br>iPad (9th generation)<br>iPad Air (4th generation)<br>iPad Air (5th generation)<br>iPad mini (6th generation)<br>iPad Pro (11-inch) (3rd generation)<br>iPad Pro (12.9-inch) (5th generation)<br>iPad Pro (9.7-inch) |
| iOS 16.1 | iPhone 11<br>iPhone 11 Pro<br>iPhone 11 Pro Max<br>iPhone 12<br>iPhone 12 mini<br>iPhone 12 Pro<br>iPhone 12 Pro Max<br>iPhone 13<br>iPhone 13 mini<br>iPhone 13 Pro<br>iPhone 13 Pro Max<br>iPhone 14<br>iPhone 14 Plus<br>iPhone 14 Pro<br>iPhone 14 Pro Max<br>iPhone 8<br>iPhone 8 Plus<br>iPhone SE (2nd generation)<br>iPhone SE (3rd generation)<br>iPad (10th generation)<br>iPad (9th generation)<br>iPad Air (4th generation)<br>iPad Air (5th generation)<br>iPad mini (6th generation)<br>iPad Pro (11-inch) (3rd generation)<br>iPad Pro (11-inch) (4th generation)<br>iPad Pro (12.9-inch) (5th generation)<br>iPad Pro (12.9-inch) (6th generation)<br>iPad Pro (9.7-inch) |
| iOS 16.2 | iPod touch (7th generation)<br>iPhone 11<br>iPhone 11 Pro<br>iPhone 11 Pro Max<br>iPhone 12<br>iPhone 12 mini<br>iPhone 12 Pro<br>iPhone 12 Pro Max<br>iPhone 13<br>iPhone 13 mini<br>iPhone 13 Pro<br>iPhone 13 Pro Max<br>iPhone 14<br>iPhone 14 Plus<br>iPhone 14 Pro<br>iPhone 14 Pro Max<br>iPhone 8<br>iPhone 8 Plus<br>iPhone SE (2nd generation)<br>iPhone SE (3rd generation)<br>iPad (10th generation)<br>iPad (9th generation)<br>iPad Air (4th generation)<br>iPad Air (5th generation)<br>iPad mini (6th generation)<br>iPad Pro (11-inch) (3rd generation)<br>iPad Pro (11-inch) (4th generation)<br>iPad Pro (12.9-inch) (5th generation)<br>iPad Pro (12.9-inch) (6th generation)<br>iPad Pro (9.7-inch) |
| tvOS 15.0 | Apple TV<br>Apple TV 4K (2nd generation)<br>Apple TV 4K (at 1080p) (2nd generation) |
| tvOS 15.2 | Apple TV<br>Apple TV 4K (2nd generation)<br>Apple TV 4K (at 1080p) (2nd generation) |
| tvOS 15.4 | Apple TV<br>Apple TV 4K (2nd generation)<br>Apple TV 4K (at 1080p) (2nd generation) |
| tvOS 16.0 | Apple TV<br>Apple TV 4K (2nd generation)<br>Apple TV 4K (at 1080p) (2nd generation) |
| tvOS 16.1 | Apple TV<br>Apple TV 4K (2nd generation)<br>Apple TV 4K (3rd generation)<br>Apple TV 4K (3rd generation) (at 1080p)<br>Apple TV 4K (at 1080p) (2nd generation) |
| watchOS 8.0 | Apple Watch Series 5 - 40mm<br>Apple Watch Series 5 - 44mm<br>Apple Watch Series 6 - 40mm<br>Apple Watch Series 6 - 44mm<br>Apple Watch Series 7 - 41mm<br>Apple Watch Series 7 - 45mm |
| watchOS 8.3 | Apple Watch Series 5 - 40mm<br>Apple Watch Series 5 - 44mm<br>Apple Watch Series 6 - 40mm<br>Apple Watch Series 6 - 44mm<br>Apple Watch Series 7 - 41mm<br>Apple Watch Series 7 - 45mm |
| watchOS 8.5 | Apple Watch Series 5 - 40mm<br>Apple Watch Series 5 - 44mm<br>Apple Watch Series 6 - 40mm<br>Apple Watch Series 6 - 44mm<br>Apple Watch Series 7 - 41mm<br>Apple Watch Series 7 - 45mm |
| watchOS 9.0 | Apple Watch SE (40mm) (2nd generation)<br>Apple Watch SE (44mm) (2nd generation)<br>Apple Watch Series 5 (40mm)<br>Apple Watch Series 5 (44mm)<br>Apple Watch Series 6 (40mm)<br>Apple Watch Series 6 (44mm)<br>Apple Watch Series 7 (41mm)<br>Apple Watch Series 7 (45mm)<br>Apple Watch Series 8 (41mm)<br>Apple Watch Series 8 (45mm)<br>Apple Watch Ultra (49mm) |
| watchOS 9.1 | Apple Watch SE (40mm) (2nd generation)<br>Apple Watch SE (44mm) (2nd generation)<br>Apple Watch Series 5 (40mm)<br>Apple Watch Series 5 (44mm)<br>Apple Watch Series 6 (40mm)<br>Apple Watch Series 6 (44mm)<br>Apple Watch Series 7 (41mm)<br>Apple Watch Series 7 (45mm)<br>Apple Watch Series 8 (41mm)<br>Apple Watch Series 8 (45mm)<br>Apple Watch Ultra (49mm) |
### Android
| Package Name | Version |
| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Android Command Line Tools | 8.0 |
| Android Emulator | 35.1.21 |
| Android SDK Build-tools | 35.0.0<br>34.0.0<br>33.0.0 33.0.1 33.0.2 33.0.3<br>32.0.0<br>31.0.0 |
| Android SDK Platforms | android-35 (rev 1)<br>android-34-ext8 (rev 1)<br>android-34-ext12 (rev 1)<br>android-34-ext11 (rev 1)<br>android-34-ext10 (rev 1)<br>android-34 (rev 3)<br>android-33-ext5 (rev 1)<br>android-33-ext4 (rev 1)<br>android-33 (rev 3)<br>android-32 (rev 1)<br>android-31 (rev 1) |
| Android SDK Platform-Tools | 35.0.2 |
| Android Support Repository | 47.0.0 |
| CMake | 3.18.1<br>3.22.1 |
| Google Play services | 49 |
| Google Repository | 58 |
| NDK | 24.0.8215888<br>25.2.9519653 (default)<br>26.3.11579264<br>27.1.12297006 |
#### Environment variables
| Name | Value |
| ----------------------- | --------------------------------------------------- |
| ANDROID_HOME | /Users/runner/Library/Android/sdk |
| ANDROID_NDK | /Users/runner/Library/Android/sdk/ndk/25.2.9519653 |
| ANDROID_NDK_HOME | /Users/runner/Library/Android/sdk/ndk/25.2.9519653 |
| ANDROID_NDK_LATEST_HOME | /Users/runner/Library/Android/sdk/ndk/27.1.12297006 |
| ANDROID_NDK_ROOT | /Users/runner/Library/Android/sdk/ndk/25.2.9519653 |
| ANDROID_SDK_ROOT | /Users/runner/Library/Android/sdk |
### Miscellaneous
- libXext 1.3.6
- libXft 2.3.8
- Tcl/Tk 8.6.15
- Zlib 1.3.1
#### Environment variables
| Name | Value |
| ----------------- | ----------------------------------------------------------------------------------------- |
| PARALLELS_DMG_URL | https://download.parallels.com/desktop/v20/20.0.1-55659/ParallelsDesktop-20.0.1-55659.dmg |
##### Notes
```
If you want to use Parallels Desktop you should download a package from URL stored in
PARALLELS_DMG_URL environment variable. A system extension is allowed for this version.
```
+80 -80
View File
@@ -1,18 +1,18 @@
| Announcements |
|-|
| [[ macOS ] .NET 7.x will be removed from macOS-13 and macOS-14 images on February 24,2025.](https://github.com/actions/runner-images/issues/11501) |
| [macOS 15 (Sequoia) will be generally available in GitHub Actions and Azure DevOps from March, 18](https://github.com/actions/runner-images/issues/11486) |
| [[macOS] Ruby version 3.0 will be removed from the images on Feb 17, 2025 and 3.3 will be set as default. ](https://github.com/actions/runner-images/issues/11345) |
| [[macOS 14] Xcode 16.0 will be replaced by Xcode 16.2 in macOS-14 images on January 6, 2025](https://github.com/actions/runner-images/issues/11203) |
| [[macOS] The macOS 12 Actions runner image will begin deprecation on 10/7/24 and will be fully unsupported by 12/3/24 for GitHub and by 01/13/25 for ADO](https://github.com/actions/runner-images/issues/10721) |
| [macOS 15 (Sequoia) is now available as a public beta in GitHub Actions](https://github.com/actions/runner-images/issues/10686) |
***
# macOS 13
- OS Version: macOS 13.7.4 (22H420)
- OS Version: macOS 13.7.2 (22H313)
- Kernel Version: Darwin 22.6.0
- Image Version: 20250303.763
- Image Version: 20241216.479
## Installed Software
### Language and Runtime
- .NET Core SDK: 8.0.101, 8.0.204, 8.0.303, 8.0.406, 9.0.102, 9.0.200
- .NET Core SDK: 7.0.102, 7.0.202, 7.0.306, 7.0.410, 8.0.101, 8.0.204, 8.0.303, 8.0.404
- Bash 3.2.57(1)-release
- Clang/LLVM 14.0.0
- Clang/LLVM (Homebrew) 15.0.7 - available on `$(brew --prefix llvm@15)/bin/clang`
@@ -22,84 +22,84 @@
- GNU Fortran 12 (Homebrew GCC 12.4.0) - available by `gfortran-12` alias
- GNU Fortran 13 (Homebrew GCC 13.3.0) - available by `gfortran-13` alias
- GNU Fortran 14 (Homebrew GCC 14.2.0_1) - available by `gfortran-14` alias
- Kotlin 2.1.10-release-473
- Kotlin 2.1.0-release-394
- Mono 6.12.0.188
- Node.js 20.18.3
- Perl 5.40.1
- PHP 8.4.4
- Python3 3.13.2
- Ruby 3.3.7
- Node.js 20.18.1
- Perl 5.40.0
- PHP 8.4.1
- Python3 3.13.1
- Ruby 3.0.7p220
### Package Management
- Bundler 2.6.5
- Bundler 2.5.23
- Carthage 0.40.0
- CocoaPods 1.16.2
- Composer 2.8.6
- Homebrew 4.4.22
- Composer 2.8.4
- Homebrew 4.4.11
- NPM 10.8.2
- NuGet 6.3.1.1
- Pip3 25.0.1 (python 3.13)
- Pip3 24.3.1 (python 3.13)
- Pipx 1.7.1
- RubyGems 3.6.5
- Vcpkg 2025 (build from commit efb1e74369)
- RubyGems 3.5.23
- Vcpkg 2024 (build from commit b545373a9)
- Yarn 1.22.22
### Project Management
- Apache Ant 1.10.15
- Apache Maven 3.9.9
- Gradle 8.13
- Gradle 8.11.1
### Utilities
- 7-Zip 17.05
- aria2 1.37.0
- azcopy 10.28.0
- bazel 8.1.1
- azcopy 10.27.1
- bazel 8.0.0
- bazelisk 1.25.0
- bsdtar 3.5.3 - available by 'tar' alias
- Curl 8.12.1
- Git 2.48.1
- Git LFS 3.6.1
- GitHub CLI 2.67.0
- Curl 8.11.1
- Git 2.47.1
- Git LFS 3.6.0
- GitHub CLI 2.63.2
- GNU Tar 1.35 - available by 'gtar' alias
- GNU Wget 1.25.0
- gpg (GnuPG) 2.4.7
- gpg (GnuPG) 2.4.6
- jq 1.7.1
- OpenSSL 1.1.1w 11 Sep 2023
- Packer 1.12.0
- Packer 1.11.2
- pkgconf 2.3.0
- Unxip 3.1
- yq 4.45.1
- zstd 1.5.7
- yq 4.44.6
- zstd 1.5.6
### Tools
- AWS CLI 2.24.15
- AWS SAM CLI 1.134.0
- AWS Session Manager CLI 1.2.707.0
- Azure CLI 2.69.0
- AWS CLI 2.22.17
- AWS SAM CLI 1.132.0
- AWS Session Manager CLI 1.2.694.0
- Azure CLI 2.67.0
- Azure CLI (azure-devops) 1.0.1
- Bicep CLI 0.33.93
- Cmake 3.31.6
- CodeQL Action Bundle 2.20.1
- Bicep CLI 0.32.4
- Cmake 3.31.2
- CodeQL Action Bundle 2.20.0
- Fastlane 2.226.0
- SwiftFormat 0.55.5
- Xcbeautify 2.27.0
- SwiftFormat 0.55.3
- Xcbeautify 2.16.0
- Xcode Command Line Tools 14.3.1.0.1.1683849156
- Xcodes 1.6.0
### Linters
- SwiftLint 0.58.2
- SwiftLint 0.57.1
### Browsers
- Safari 18.3 (18620.2.4.111.8)
- SafariDriver 18.3 (18620.2.4.111.8)
- Google Chrome 133.0.6943.142
- Google Chrome for Testing 133.0.6943.141
- ChromeDriver 133.0.6943.141
- Microsoft Edge 133.0.3065.92
- Microsoft Edge WebDriver 133.0.3065.92
- Mozilla Firefox 135.0.1
- geckodriver 0.36.0
- Selenium server 4.29.0
- Safari 18.2 (18620.1.16.111.6)
- SafariDriver 18.2 (18620.1.16.111.6)
- Google Chrome 131.0.6778.140
- Google Chrome for Testing 131.0.6778.108
- ChromeDriver 131.0.6778.108
- Microsoft Edge 131.0.2903.99
- Microsoft Edge WebDriver 131.0.2903.87
- Mozilla Firefox 133.0.3
- geckodriver 0.35.0
- Selenium server 4.27.0
#### Environment variables
| Name | Value |
@@ -109,62 +109,62 @@
| GECKOWEBDRIVER | /usr/local/opt/geckodriver/bin |
### Java
| Version | Environment Variable |
| ------------------- | -------------------- |
| 8.0.442+6 | JAVA_HOME_8_X64 |
| 11.0.26+4 | JAVA_HOME_11_X64 |
| 17.0.14+7 (default) | JAVA_HOME_17_X64 |
| 21.0.6+7.0 | JAVA_HOME_21_X64 |
| Version | Environment Variable |
| -------------------- | -------------------- |
| 8.0.432+6 | JAVA_HOME_8_X64 |
| 11.0.25+9 | JAVA_HOME_11_X64 |
| 17.0.13+11 (default) | JAVA_HOME_17_X64 |
| 21.0.5+11.0 | JAVA_HOME_21_X64 |
### Cached Tools
#### PyPy
- 2.7.18 [PyPy 7.3.19]
- 2.7.18 [PyPy 7.3.17]
- 3.7.13 [PyPy 7.3.9]
- 3.8.16 [PyPy 7.3.11]
- 3.9.19 [PyPy 7.3.16]
- 3.10.16 [PyPy 7.3.19]
- 3.10.14 [PyPy 7.3.17]
#### Ruby
- 3.0.7
- 3.1.6
- 3.2.7
- 3.3.7
- 3.4.2
- 3.2.6
- 3.3.6
#### Python
- 3.8.18
- 3.9.21
- 3.10.16
- 3.9.20
- 3.10.15
- 3.11.9
- 3.12.9
- 3.13.2
- 3.12.8
- 3.13.1
#### Node.js
- 18.20.7
- 20.18.3
- 22.14.0
- 18.20.5
- 20.18.1
- 22.12.0
#### Go
- 1.21.13
- 1.22.12
- 1.23.6
- 1.22.10
- 1.23.4
### Rust Tools
- Cargo 1.85.0
- Rust 1.85.0
- Rustdoc 1.85.0
- Cargo 1.83.0
- Rust 1.83.0
- Rustdoc 1.83.0
- Rustup 1.27.1
#### Packages
- Clippy 0.1.85
- Clippy 0.1.83
- Rustfmt 1.8.0-stable
### PowerShell Tools
- PowerShell 7.4.7
- PowerShell 7.4.6
#### PowerShell Modules
- Az: 12.4.0
- Pester: 5.7.1
- Pester: 5.6.1
- PSScriptAnalyzer: 1.23.0
### Xcode
@@ -211,8 +211,8 @@
| Simulator - watchOS 9.4 | watchsimulator9.4 | 14.3.1 |
| Simulator - watchOS 10.0 | watchsimulator10.0 | 15.0.1 |
| Simulator - watchOS 10.2 | watchsimulator10.2 | 15.1, 15.2 |
| visionOS 1.0 | xros1.0 | 15.2 |
| Simulator - visionOS 1.0 | xrsimulator1.0 | 15.2 |
| visionOS 1.0 | xros1.0 | 15.2 |
| Asset Runtime SDK for macOS hosts targeting watchOS 9.4 | assetruntime.host.macosx.target.watchos9.4 | 14.3.1 |
| Asset Runtime SDK for macOS hosts targeting iOS 16.4 | assetruntime.host.macosx.target.iphoneos16.4 | 14.3.1 |
| Asset Runtime SDK for macOS hosts targeting tvOS 16.4 | assetruntime.host.macosx.target.appletvos16.4 | 14.3.1 |
@@ -243,9 +243,9 @@
| Package Name | Version |
| -------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Android Command Line Tools | 11.0 |
| Android Emulator | 35.3.12 |
| Android SDK Build-tools | 35.0.0 35.0.1<br>34.0.0<br>33.0.2 33.0.3 |
| Android SDK Platforms | android-35-ext14 (rev 1)<br>android-35 (rev 2)<br>android-34-ext8 (rev 1)<br>android-34-ext12 (rev 1)<br>android-34-ext11 (rev 1)<br>android-34-ext10 (rev 1)<br>android-34 (rev 3)<br>android-33-ext5 (rev 1)<br>android-33-ext4 (rev 1)<br>android-33 (rev 3) |
| Android Emulator | 35.2.10 |
| Android SDK Build-tools | 35.0.0<br>34.0.0<br>33.0.2 33.0.3 |
| Android SDK Platforms | android-35-ext14 (rev 1)<br>android-35 (rev 1)<br>android-34-ext8 (rev 1)<br>android-34-ext12 (rev 1)<br>android-34-ext11 (rev 1)<br>android-34-ext10 (rev 1)<br>android-34 (rev 3)<br>android-33-ext5 (rev 1)<br>android-33-ext4 (rev 1)<br>android-33 (rev 3) |
| Android SDK Platform-Tools | 35.0.2 |
| Android Support Repository | 47.0.0 |
| CMake | 3.31.0 |
@@ -269,7 +269,7 @@
#### Environment variables
| Name | Value |
| ----------------- | ----------------------------------------------------------------------------------------- |
| PARALLELS_DMG_URL | https://download.parallels.com/desktop/v20/20.2.2-55879/ParallelsDesktop-20.2.2-55879.dmg |
| PARALLELS_DMG_URL | https://download.parallels.com/desktop/v20/20.1.2-55742/ParallelsDesktop-20.1.2-55742.dmg |
##### Notes
```
+66 -66
View File
@@ -1,18 +1,18 @@
| Announcements |
|-|
| [[ macOS ] .NET 7.x will be removed from macOS-13 and macOS-14 images on February 24,2025.](https://github.com/actions/runner-images/issues/11501) |
| [macOS 15 (Sequoia) will be generally available in GitHub Actions and Azure DevOps from March, 18](https://github.com/actions/runner-images/issues/11486) |
| [[macOS] Ruby version 3.0 will be removed from the images on Feb 17, 2025 and 3.3 will be set as default. ](https://github.com/actions/runner-images/issues/11345) |
| [[macOS 14] Xcode 16.0 will be replaced by Xcode 16.2 in macOS-14 images on January 6, 2025](https://github.com/actions/runner-images/issues/11203) |
| [[macOS] The macOS 12 Actions runner image will begin deprecation on 10/7/24 and will be fully unsupported by 12/3/24 for GitHub and by 01/13/25 for ADO](https://github.com/actions/runner-images/issues/10721) |
| [macOS 15 (Sequoia) is now available as a public beta in GitHub Actions](https://github.com/actions/runner-images/issues/10686) |
***
# macOS 13
- OS Version: macOS 13.7.4 (22H420)
- OS Version: macOS 13.7.2 (22H313)
- Kernel Version: Darwin 22.6.0
- Image Version: 20250303.855
- Image Version: 20241216.537
## Installed Software
### Language and Runtime
- .NET Core SDK: 8.0.101, 8.0.204, 8.0.303, 8.0.406, 9.0.102, 9.0.200
- .NET Core SDK: 7.0.102, 7.0.202, 7.0.306, 7.0.410, 8.0.101, 8.0.204, 8.0.303, 8.0.404
- Bash 3.2.57(1)-release
- Clang/LLVM 14.0.0
- Clang/LLVM (Homebrew) 15.0.7 - available on `$(brew --prefix llvm@15)/bin/clang`
@@ -22,76 +22,76 @@
- GNU Fortran 12 (Homebrew GCC 12.4.0) - available by `gfortran-12` alias
- GNU Fortran 13 (Homebrew GCC 13.3.0) - available by `gfortran-13` alias
- GNU Fortran 14 (Homebrew GCC 14.2.0_1) - available by `gfortran-14` alias
- Kotlin 2.1.10-release-473
- Kotlin 2.1.0-release-394
- Mono 6.12.0.188
- Node.js 20.18.3
- Perl 5.40.1
- Python3 3.13.2
- Ruby 3.3.7
- Node.js 20.18.1
- Perl 5.40.0
- Python3 3.13.1
- Ruby 3.0.7p220
### Package Management
- Bundler 2.6.5
- Bundler 2.5.23
- Carthage 0.40.0
- CocoaPods 1.16.2
- Homebrew 4.4.22
- Homebrew 4.4.11
- NPM 10.8.2
- NuGet 6.3.1.1
- Pip3 25.0 (python 3.13)
- Pip3 24.3.1 (python 3.13)
- Pipx 1.7.1
- RubyGems 3.6.5
- RubyGems 3.5.23
- Yarn 1.22.22
### Project Management
- Apache Ant 1.10.15
- Apache Maven 3.9.9
- Gradle 8.13
- Gradle 8.11.1
### Utilities
- 7-Zip 17.05
- aria2 1.37.0
- azcopy 10.28.0
- bazel 8.1.1
- azcopy 10.27.1
- bazel 8.0.0
- bazelisk 1.25.0
- bsdtar 3.5.3 - available by 'tar' alias
- Curl 8.7.1
- Git 2.48.1
- Git LFS 3.6.1
- GitHub CLI 2.67.0
- Git 2.47.1
- Git LFS 3.6.0
- GitHub CLI 2.63.2
- GNU Tar 1.35 - available by 'gtar' alias
- GNU Wget 1.25.0
- gpg (GnuPG) 2.4.7
- gpg (GnuPG) 2.4.6
- jq 1.7.1
- OpenSSL 1.1.1w 11 Sep 2023
- Packer 1.12.0
- Packer 1.11.2
- pkgconf 2.3.0
- Unxip 3.1
- yq 4.45.1
- zstd 1.5.7
- yq 4.44.6
- zstd 1.5.6
### Tools
- AWS CLI 2.24.15
- AWS SAM CLI 1.134.0
- AWS Session Manager CLI 1.2.707.0
- Azure CLI 2.69.0
- AWS CLI 2.22.17
- AWS SAM CLI 1.132.0
- AWS Session Manager CLI 1.2.694.0
- Azure CLI 2.67.0
- Azure CLI (azure-devops) 1.0.1
- Bicep CLI 0.33.93
- Cmake 3.31.6
- CodeQL Action Bundle 2.20.1
- Bicep CLI 0.32.4
- Cmake 3.31.2
- CodeQL Action Bundle 2.20.0
- Fastlane 2.226.0
- SwiftFormat 0.55.5
- Xcbeautify 2.27.0
- SwiftFormat 0.55.3
- Xcbeautify 2.16.0
- Xcode Command Line Tools 14.3.1.0.1.1683849156
- Xcodes 1.6.0
### Linters
### Browsers
- Safari 18.3 (18620.2.4.111.8)
- SafariDriver 18.3 (18620.2.4.111.8)
- Google Chrome 133.0.6943.142
- Google Chrome for Testing 133.0.6943.141
- ChromeDriver 133.0.6943.141
- Selenium server 4.29.0
- Safari 18.2 (18620.1.16.111.6)
- SafariDriver 18.2 (18620.1.16.111.6)
- Google Chrome 131.0.6778.140
- Google Chrome for Testing 131.0.6778.108
- ChromeDriver 131.0.6778.108
- Selenium server 4.27.0
#### Environment variables
| Name | Value |
@@ -101,51 +101,51 @@
| GECKOWEBDRIVER | |
### Java
| Version | Environment Variable |
| ------------------- | -------------------- |
| 11.0.26+4 | JAVA_HOME_11_arm64 |
| 17.0.14+7 (default) | JAVA_HOME_17_arm64 |
| 21.0.6+7.0 | JAVA_HOME_21_arm64 |
| Version | Environment Variable |
| -------------------- | -------------------- |
| 11.0.25+9 | JAVA_HOME_11_arm64 |
| 17.0.13+11 (default) | JAVA_HOME_17_arm64 |
| 21.0.5+11.0 | JAVA_HOME_21_arm64 |
### Cached Tools
#### Ruby
- 3.0.7
- 3.1.6
- 3.2.7
- 3.3.7
- 3.4.2
- 3.2.6
- 3.3.6
#### Python
- 3.11.9
- 3.12.9
- 3.13.2
- 3.12.8
- 3.13.1
#### Node.js
- 18.20.7
- 20.18.3
- 22.14.0
- 18.20.5
- 20.18.1
- 22.12.0
#### Go
- 1.21.13
- 1.22.12
- 1.23.6
- 1.22.10
- 1.23.4
### Rust Tools
- Cargo 1.85.0
- Rust 1.85.0
- Rustdoc 1.85.0
- Cargo 1.83.0
- Rust 1.83.0
- Rustdoc 1.83.0
- Rustup 1.27.1
#### Packages
- Clippy 0.1.85
- Clippy 0.1.83
- Rustfmt 1.8.0-stable
### PowerShell Tools
- PowerShell 7.4.7
- PowerShell 7.4.6
#### PowerShell Modules
- Az: 12.4.0
- Pester: 5.7.1
- Pester: 5.6.1
- PSScriptAnalyzer: 1.23.0
### Xcode
@@ -192,11 +192,11 @@
| Simulator - watchOS 9.4 | watchsimulator9.4 | 14.3.1 |
| Simulator - watchOS 10.0 | watchsimulator10.0 | 15.0.1 |
| Simulator - watchOS 10.2 | watchsimulator10.2 | 15.1, 15.2 |
| visionOS 1.0 | xros1.0 | 15.2 |
| Simulator - visionOS 1.0 | xrsimulator1.0 | 15.2 |
| visionOS 1.0 | xros1.0 | 15.2 |
| Asset Runtime SDK for macOS hosts targeting watchOS 9.4 | assetruntime.host.macosx.target.watchos9.4 | 14.3.1 |
| Asset Runtime SDK for macOS hosts targeting iOS 16.4 | assetruntime.host.macosx.target.iphoneos16.4 | 14.3.1 |
| Asset Runtime SDK for macOS hosts targeting tvOS 16.4 | assetruntime.host.macosx.target.appletvos16.4 | 14.3.1 |
| Asset Runtime SDK for macOS hosts targeting iOS 16.4 | assetruntime.host.macosx.target.iphoneos16.4 | 14.3.1 |
| DriverKit 22.1 | driverkit22.1 | 14.1 |
| DriverKit 22.2 | driverkit22.2 | 14.2 |
| DriverKit 22.4 | driverkit22.4 | 14.3.1 |
@@ -225,9 +225,9 @@
| Package Name | Version |
| -------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Android Command Line Tools | 11.0 |
| Android Emulator | 35.3.12 |
| Android SDK Build-tools | 35.0.0 35.0.1<br>34.0.0<br>33.0.2 33.0.3 |
| Android SDK Platforms | android-35-ext14 (rev 1)<br>android-35 (rev 2)<br>android-34-ext8 (rev 1)<br>android-34-ext12 (rev 1)<br>android-34-ext11 (rev 1)<br>android-34-ext10 (rev 1)<br>android-34 (rev 3)<br>android-33-ext5 (rev 1)<br>android-33-ext4 (rev 1)<br>android-33 (rev 3) |
| Android Emulator | 35.2.10 |
| Android SDK Build-tools | 35.0.0<br>34.0.0<br>33.0.2 33.0.3 |
| Android SDK Platforms | android-35-ext14 (rev 1)<br>android-35 (rev 1)<br>android-34-ext8 (rev 1)<br>android-34-ext12 (rev 1)<br>android-34-ext11 (rev 1)<br>android-34-ext10 (rev 1)<br>android-34 (rev 3)<br>android-33-ext5 (rev 1)<br>android-33-ext4 (rev 1)<br>android-33 (rev 3) |
| Android SDK Platform-Tools | 35.0.2 |
| Android Support Repository | 47.0.0 |
| CMake | 3.31.0 |
+118 -118
View File
@@ -1,18 +1,18 @@
| Announcements |
|-|
| [[ macOS ] .NET 7.x will be removed from macOS-13 and macOS-14 images on February 24,2025.](https://github.com/actions/runner-images/issues/11501) |
| [macOS 15 (Sequoia) will be generally available in GitHub Actions and Azure DevOps from March, 18](https://github.com/actions/runner-images/issues/11486) |
| [[macOS] Ruby version 3.0 will be removed from the images on Feb 17, 2025 and 3.3 will be set as default. ](https://github.com/actions/runner-images/issues/11345) |
| [[macOS 14] Xcode 16.0 will be replaced by Xcode 16.2 in macOS-14 images on January 6, 2025](https://github.com/actions/runner-images/issues/11203) |
| [[macOS] The macOS 12 Actions runner image will begin deprecation on 10/7/24 and will be fully unsupported by 12/3/24 for GitHub and by 01/13/25 for ADO](https://github.com/actions/runner-images/issues/10721) |
| [macOS 15 (Sequoia) is now available as a public beta in GitHub Actions](https://github.com/actions/runner-images/issues/10686) |
***
# macOS 14
- OS Version: macOS 14.7.4 (23H420)
- OS Version: macOS 14.7.2 (23H311)
- Kernel Version: Darwin 23.6.0
- Image Version: 20250304.890
- Image Version: 20241216.504
## Installed Software
### Language and Runtime
- .NET Core SDK: 8.0.101, 8.0.204, 8.0.303, 8.0.406, 9.0.102, 9.0.200
- .NET Core SDK: 7.0.102, 7.0.202, 7.0.306, 7.0.410, 8.0.101, 8.0.204, 8.0.303, 8.0.404
- Bash 3.2.57(1)-release
- Clang/LLVM 15.0.0
- Clang/LLVM (Homebrew) 15.0.7 - available on `$(brew --prefix llvm@15)/bin/clang`
@@ -22,83 +22,83 @@
- GNU Fortran 12 (Homebrew GCC 12.4.0) - available by `gfortran-12` alias
- GNU Fortran 13 (Homebrew GCC 13.3.0) - available by `gfortran-13` alias
- GNU Fortran 14 (Homebrew GCC 14.2.0_1) - available by `gfortran-14` alias
- Kotlin 2.1.10-release-473
- Kotlin 2.1.0-release-394
- Mono 6.12.0.188
- Node.js 20.18.3
- Perl 5.40.1
- PHP 8.4.4
- Python3 3.13.2
- Ruby 3.3.7
- Node.js 20.18.1
- Perl 5.40.0
- PHP 8.4.1
- Python3 3.13.1
- Ruby 3.0.7p220
### Package Management
- Bundler 2.6.5
- Bundler 2.5.23
- Carthage 0.40.0
- CocoaPods 1.16.2
- Composer 2.8.6
- Homebrew 4.4.23
- Composer 2.8.4
- Homebrew 4.4.11
- NPM 10.8.2
- NuGet 6.3.1.1
- Pip3 25.0.1 (python 3.13)
- Pip3 24.3.1 (python 3.13)
- Pipx 1.7.1
- RubyGems 3.6.5
- RubyGems 3.5.23
- Yarn 1.22.22
### Project Management
- Apache Ant 1.10.15
- Apache Maven 3.9.9
- Gradle 8.13
- Gradle 8.11.1
### Utilities
- 7-Zip 17.05
- aria2 1.37.0
- azcopy 10.28.0
- bazel 8.1.1
- azcopy 10.27.1
- bazel 8.0.0
- bazelisk 1.25.0
- bsdtar 3.5.3 - available by 'tar' alias
- Curl 8.12.1
- Git 2.48.1
- Git LFS 3.6.1
- GitHub CLI 2.67.0
- Curl 8.11.1
- Git 2.47.1
- Git LFS 3.6.0
- GitHub CLI 2.63.2
- GNU Tar 1.35 - available by 'gtar' alias
- GNU Wget 1.25.0
- gpg (GnuPG) 2.4.7
- gpg (GnuPG) 2.4.6
- jq 1.7.1
- OpenSSL 1.1.1w 11 Sep 2023
- Packer 1.12.0
- Packer 1.11.2
- pkgconf 2.3.0
- Unxip 3.1
- yq 4.45.1
- zstd 1.5.7
- yq 4.44.6
- zstd 1.5.6
### Tools
- AWS CLI 2.24.16
- AWS SAM CLI 1.134.0
- AWS Session Manager CLI 1.2.707.0
- Azure CLI 2.69.0
- AWS CLI 2.22.17
- AWS SAM CLI 1.132.0
- AWS Session Manager CLI 1.2.694.0
- Azure CLI 2.67.0
- Azure CLI (azure-devops) 1.0.1
- Bicep CLI 0.33.93
- Cmake 3.31.6
- CodeQL Action Bundle 2.20.1
- Bicep CLI 0.32.4
- Cmake 3.31.2
- CodeQL Action Bundle 2.20.0
- Fastlane 2.226.0
- SwiftFormat 0.55.5
- Xcbeautify 2.27.0
- SwiftFormat 0.55.3
- Xcbeautify 2.16.0
- Xcode Command Line Tools 16.2.0.0.1.1733547573
- Xcodes 1.6.0
### Linters
- SwiftLint 0.58.2
- SwiftLint 0.57.1
### Browsers
- Safari 18.3 (19620.2.4.111.8)
- SafariDriver 18.3 (19620.2.4.111.8)
- Google Chrome 133.0.6943.142
- Google Chrome for Testing 133.0.6943.141
- ChromeDriver 133.0.6943.141
- Microsoft Edge 133.0.3065.92
- Microsoft Edge WebDriver 133.0.3065.92
- Mozilla Firefox 135.0.1
- geckodriver 0.36.0
- Selenium server 4.29.0
- Safari 18.2 (19620.1.16.111.6)
- SafariDriver 18.2 (19620.1.16.111.6)
- Google Chrome 131.0.6778.140
- Google Chrome for Testing 131.0.6778.108
- ChromeDriver 131.0.6778.108
- Microsoft Edge 131.0.2903.99
- Microsoft Edge WebDriver 131.0.2903.87
- Mozilla Firefox 133.0.3
- geckodriver 0.35.0
- Selenium server 4.27.0
#### Environment variables
| Name | Value |
@@ -108,66 +108,66 @@
| GECKOWEBDRIVER | /usr/local/opt/geckodriver/bin |
### Java
| Version | Environment Variable |
| -------------------- | -------------------- |
| 8.0.442+6 | JAVA_HOME_8_X64 |
| 11.0.26+4 | JAVA_HOME_11_X64 |
| 17.0.14+7 | JAVA_HOME_17_X64 |
| 21.0.6+7.0 (default) | JAVA_HOME_21_X64 |
| Version | Environment Variable |
| --------------------- | -------------------- |
| 8.0.432+6 | JAVA_HOME_8_X64 |
| 11.0.25+9 | JAVA_HOME_11_X64 |
| 17.0.13+11 | JAVA_HOME_17_X64 |
| 21.0.5+11.0 (default) | JAVA_HOME_21_X64 |
### Cached Tools
#### Ruby
- 3.0.7
- 3.1.6
- 3.2.7
- 3.3.7
- 3.4.2
- 3.2.6
- 3.3.6
#### Python
- 3.9.21
- 3.10.16
- 3.9.20
- 3.10.15
- 3.11.9
- 3.12.9
- 3.13.2
- 3.12.8
- 3.13.1
#### Node.js
- 18.20.7
- 20.18.3
- 22.14.0
- 18.20.5
- 20.18.1
- 22.12.0
#### Go
- 1.21.13
- 1.22.12
- 1.23.6
- 1.22.10
- 1.23.4
### Rust Tools
- Cargo 1.85.0
- Rust 1.85.0
- Rustdoc 1.85.0
- Cargo 1.83.0
- Rust 1.83.0
- Rustdoc 1.83.0
- Rustup 1.27.1
#### Packages
- Clippy 0.1.85
- Clippy 0.1.83
- Rustfmt 1.8.0-stable
### PowerShell Tools
- PowerShell 7.4.7
- PowerShell 7.4.6
#### PowerShell Modules
- Az: 12.4.0
- Pester: 5.7.1
- Pester: 5.6.1
- PSScriptAnalyzer: 1.23.0
### Xcode
| Version | Build | Path | Symlinks |
| -------------- | -------- | ------------------------------ | --------------------------------------------------------- |
| 16.2 | 16C5032a | /Applications/Xcode_16.2.app | /Applications/Xcode_16.2.0.app |
| 16.1 | 16B40 | /Applications/Xcode_16.1.app | /Applications/Xcode_16.1.0.app |
| 15.4 (default) | 15F31d | /Applications/Xcode_15.4.app | /Applications/Xcode_15.4.0.app<br>/Applications/Xcode.app |
| 15.3 | 15E204a | /Applications/Xcode_15.3.app | /Applications/Xcode_15.3.0.app |
| 15.2 | 15C500b | /Applications/Xcode_15.2.app | /Applications/Xcode_15.2.0.app |
| 15.1 | 15C65 | /Applications/Xcode_15.1.app | /Applications/Xcode_15.1.0.app |
| 15.0.1 | 15A507 | /Applications/Xcode_15.0.1.app | /Applications/Xcode_15.0.app |
| Version | Build | Path | Symlinks |
| -------------- | ------- | ------------------------------ | -------------------------------------------------------------- |
| 16.1 | 16B40 | /Applications/Xcode_16.1.app | /Applications/Xcode_16.1.0.app |
| 16.0 | 16A242d | /Applications/Xcode_16.app | /Applications/Xcode_16.0.0.app<br>/Applications/Xcode_16.0.app |
| 15.4 (default) | 15F31d | /Applications/Xcode_15.4.app | /Applications/Xcode_15.4.0.app<br>/Applications/Xcode.app |
| 15.3 | 15E204a | /Applications/Xcode_15.3.app | /Applications/Xcode_15.3.0.app |
| 15.2 | 15C500b | /Applications/Xcode_15.2.app | /Applications/Xcode_15.2.0.app |
| 15.1 | 15C65 | /Applications/Xcode_15.1.app | /Applications/Xcode_15.1.0.app |
| 15.0.1 | 15A507 | /Applications/Xcode_15.0.1.app | /Applications/Xcode_15.0.app |
#### Installed SDKs
| SDK | SDK Name | Xcode Version |
@@ -176,90 +176,90 @@
| macOS 14.2 | macosx14.2 | 15.1, 15.2 |
| macOS 14.4 | macosx14.4 | 15.3 |
| macOS 14.5 | macosx14.5 | 15.4 |
| macOS 15.0 | macosx15.0 | 16.0 |
| macOS 15.1 | macosx15.1 | 16.1 |
| macOS 15.2 | macosx15.2 | 16.2 |
| iOS 17.0 | iphoneos17.0 | 15.0.1 |
| iOS 17.2 | iphoneos17.2 | 15.1, 15.2 |
| iOS 17.4 | iphoneos17.4 | 15.3 |
| iOS 17.5 | iphoneos17.5 | 15.4 |
| iOS 18.0 | iphoneos18.0 | 16.0 |
| iOS 18.1 | iphoneos18.1 | 16.1 |
| iOS 18.2 | iphoneos18.2 | 16.2 |
| Simulator - iOS 17.0 | iphonesimulator17.0 | 15.0.1 |
| Simulator - iOS 17.2 | iphonesimulator17.2 | 15.1, 15.2 |
| Simulator - iOS 17.4 | iphonesimulator17.4 | 15.3 |
| Simulator - iOS 17.5 | iphonesimulator17.5 | 15.4 |
| Simulator - iOS 18.0 | iphonesimulator18.0 | 16.0 |
| Simulator - iOS 18.1 | iphonesimulator18.1 | 16.1 |
| Simulator - iOS 18.2 | iphonesimulator18.2 | 16.2 |
| tvOS 17.0 | appletvos17.0 | 15.0.1 |
| tvOS 17.2 | appletvos17.2 | 15.1, 15.2 |
| tvOS 17.4 | appletvos17.4 | 15.3 |
| tvOS 17.5 | appletvos17.5 | 15.4 |
| tvOS 18.0 | appletvos18.0 | 16.0 |
| tvOS 18.1 | appletvos18.1 | 16.1 |
| tvOS 18.2 | appletvos18.2 | 16.2 |
| Simulator - tvOS 17.0 | appletvsimulator17.0 | 15.0.1 |
| Simulator - tvOS 17.2 | appletvsimulator17.2 | 15.1, 15.2 |
| Simulator - tvOS 17.4 | appletvsimulator17.4 | 15.3 |
| Simulator - tvOS 17.5 | appletvsimulator17.5 | 15.4 |
| Simulator - tvOS 18.0 | appletvsimulator18.0 | 16.0 |
| Simulator - tvOS 18.1 | appletvsimulator18.1 | 16.1 |
| Simulator - tvOS 18.2 | appletvsimulator18.2 | 16.2 |
| watchOS 10.0 | watchos10.0 | 15.0.1 |
| watchOS 10.2 | watchos10.2 | 15.1, 15.2 |
| watchOS 10.4 | watchos10.4 | 15.3 |
| watchOS 10.5 | watchos10.5 | 15.4 |
| watchOS 11.0 | watchos11.0 | 16.0 |
| watchOS 11.1 | watchos11.1 | 16.1 |
| watchOS 11.2 | watchos11.2 | 16.2 |
| Simulator - watchOS 10.0 | watchsimulator10.0 | 15.0.1 |
| Simulator - watchOS 10.2 | watchsimulator10.2 | 15.1, 15.2 |
| Simulator - watchOS 10.4 | watchsimulator10.4 | 15.3 |
| Simulator - watchOS 10.5 | watchsimulator10.5 | 15.4 |
| Simulator - watchOS 11.0 | watchsimulator11.0 | 16.0 |
| Simulator - watchOS 11.1 | watchsimulator11.1 | 16.1 |
| Simulator - watchOS 11.2 | watchsimulator11.2 | 16.2 |
| visionOS 1.0 | xros1.0 | 15.2 |
| visionOS 1.1 | xros1.1 | 15.3 |
| visionOS 1.2 | xros1.2 | 15.4 |
| visionOS 2.1 | xros2.1 | 16.1 |
| visionOS 2.2 | xros2.2 | 16.2 |
| Simulator - visionOS 1.0 | xrsimulator1.0 | 15.2 |
| Simulator - visionOS 1.1 | xrsimulator1.1 | 15.3 |
| visionOS 1.1 | xros1.1 | 15.3 |
| Simulator - visionOS 1.2 | xrsimulator1.2 | 15.4 |
| visionOS 1.2 | xros1.2 | 15.4 |
| Simulator - visionOS 2.0 | xrsimulator2.0 | 16.0 |
| visionOS 2.0 | xros2.0 | 16.0 |
| visionOS 2.1 | xros2.1 | 16.1 |
| Simulator - visionOS 2.1 | xrsimulator2.1 | 16.1 |
| Simulator - visionOS 2.2 | xrsimulator2.2 | 16.2 |
| DriverKit 23.0 | driverkit23.0 | 15.0.1 |
| DriverKit 23.2 | driverkit23.2 | 15.1, 15.2 |
| DriverKit 23.4 | driverkit23.4 | 15.3 |
| DriverKit 23.5 | driverkit23.5 | 15.4 |
| DriverKit 24.0 | driverkit24.0 | 16.0 |
| DriverKit 24.1 | driverkit24.1 | 16.1 |
| DriverKit 24.2 | driverkit24.2 | 16.2 |
#### Installed Simulators
| OS | Simulators |
| ------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| iOS 17.0 | iPhone 15<br>iPhone 15 Plus<br>iPhone 15 Pro<br>iPhone 15 Pro Max<br>iPhone SE (3rd generation)<br>iPad (10th generation)<br>iPad Air (5th generation)<br>iPad mini (6th generation)<br>iPad Pro (11-inch) (4th generation)<br>iPad Pro (12.9-inch) (6th generation) |
| iOS 17.2 | iPhone 15<br>iPhone 15 Plus<br>iPhone 15 Pro<br>iPhone 15 Pro Max<br>iPhone SE (3rd generation)<br>iPad (10th generation)<br>iPad Air (5th generation)<br>iPad mini (6th generation)<br>iPad Pro (11-inch) (4th generation)<br>iPad Pro (12.9-inch) (6th generation) |
| iOS 17.4 | iPhone 15<br>iPhone 15 Plus<br>iPhone 15 Pro<br>iPhone 15 Pro Max<br>iPhone SE (3rd generation)<br>iPad (10th generation)<br>iPad Air 11-inch (M2)<br>iPad Air 13-inch (M2)<br>iPad mini (6th generation)<br>iPad Pro 11-inch (M4)<br>iPad Pro 13-inch (M4) |
| iOS 17.5 | iPhone 15<br>iPhone 15 Plus<br>iPhone 15 Pro<br>iPhone 15 Pro Max<br>iPhone SE (3rd generation)<br>iPad (10th generation)<br>iPad Air 11-inch (M2)<br>iPad Air 13-inch (M2)<br>iPad mini (6th generation)<br>iPad Pro 11-inch (M4)<br>iPad Pro 13-inch (M4) |
| iOS 18.1 | iPhone 16<br>iPhone 16 Plus<br>iPhone 16 Pro<br>iPhone 16 Pro Max<br>iPhone SE (3rd generation)<br>iPad (10th generation)<br>iPad Air 11-inch (M2)<br>iPad Air 13-inch (M2)<br>iPad mini (A17 Pro)<br>iPad Pro 11-inch (M4)<br>iPad Pro 13-inch (M4) |
| iOS 18.2 | iPhone 16<br>iPhone 16 Plus<br>iPhone 16 Pro<br>iPhone 16 Pro Max<br>iPhone SE (3rd generation)<br>iPad (10th generation)<br>iPad Air 11-inch (M2)<br>iPad Air 13-inch (M2)<br>iPad mini (A17 Pro)<br>iPad Pro 11-inch (M4)<br>iPad Pro 13-inch (M4) |
| tvOS 17.0 | Apple TV<br>Apple TV 4K (3rd generation)<br>Apple TV 4K (3rd generation) (at 1080p) |
| tvOS 17.2 | Apple TV<br>Apple TV 4K (3rd generation)<br>Apple TV 4K (3rd generation) (at 1080p) |
| tvOS 17.4 | Apple TV<br>Apple TV 4K (3rd generation)<br>Apple TV 4K (3rd generation) (at 1080p) |
| tvOS 17.5 | Apple TV<br>Apple TV 4K (3rd generation)<br>Apple TV 4K (3rd generation) (at 1080p) |
| tvOS 18.1 | Apple TV<br>Apple TV 4K (3rd generation)<br>Apple TV 4K (3rd generation) (at 1080p) |
| tvOS 18.2 | Apple TV<br>Apple TV 4K (3rd generation)<br>Apple TV 4K (3rd generation) (at 1080p) |
| watchOS 10.0 | Apple Watch SE (40mm) (2nd generation)<br>Apple Watch SE (44mm) (2nd generation)<br>Apple Watch Series 9 (41mm)<br>Apple Watch Series 9 (45mm)<br>Apple Watch Ultra 2 (49mm) |
| watchOS 10.2 | Apple Watch SE (40mm) (2nd generation)<br>Apple Watch SE (44mm) (2nd generation)<br>Apple Watch Series 9 (41mm)<br>Apple Watch Series 9 (45mm)<br>Apple Watch Ultra 2 (49mm) |
| watchOS 10.4 | Apple Watch SE (40mm) (2nd generation)<br>Apple Watch SE (44mm) (2nd generation)<br>Apple Watch Series 9 (41mm)<br>Apple Watch Series 9 (45mm)<br>Apple Watch Ultra 2 (49mm) |
| watchOS 10.5 | Apple Watch SE (40mm) (2nd generation)<br>Apple Watch SE (44mm) (2nd generation)<br>Apple Watch Series 9 (41mm)<br>Apple Watch Series 9 (45mm)<br>Apple Watch Ultra 2 (49mm) |
| watchOS 11.1 | Apple Watch SE (40mm) (2nd generation)<br>Apple Watch SE (44mm) (2nd generation)<br>Apple Watch Series 10 (42mm)<br>Apple Watch Series 10 (46mm)<br>Apple Watch Ultra 2 (49mm) |
| watchOS 11.2 | Apple Watch SE (40mm) (2nd generation)<br>Apple Watch SE (44mm) (2nd generation)<br>Apple Watch Series 10 (42mm)<br>Apple Watch Series 10 (46mm)<br>Apple Watch Ultra 2 (49mm) |
| OS | Simulators |
| ------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| iOS 17.0 | iPhone 15<br>iPhone 15 Plus<br>iPhone 15 Pro<br>iPhone 15 Pro Max<br>iPhone SE (3rd generation)<br>iPad (10th generation)<br>iPad Air (5th generation)<br>iPad mini (6th generation)<br>iPad Pro (11-inch) (4th generation)<br>iPad Pro (12.9-inch) (6th generation) |
| iOS 17.2 | iPhone 15<br>iPhone 15 Plus<br>iPhone 15 Pro<br>iPhone 15 Pro Max<br>iPhone SE (3rd generation)<br>iPad (10th generation)<br>iPad Air (5th generation)<br>iPad mini (6th generation)<br>iPad Pro (11-inch) (4th generation)<br>iPad Pro (12.9-inch) (6th generation) |
| iOS 17.4 | iPhone 15<br>iPhone 15 Plus<br>iPhone 15 Pro<br>iPhone 15 Pro Max<br>iPhone SE (3rd generation)<br>iPad (10th generation)<br>iPad Air (5th generation)<br>iPad Air 11-inch (M2)<br>iPad Air 13-inch (M2)<br>iPad mini (6th generation)<br>iPad Pro (11-inch) (4th generation)<br>iPad Pro (12.9-inch) (6th generation)<br>iPad Pro 11-inch (M4)<br>iPad Pro 13-inch (M4) |
| iOS 17.5 | iPhone 15<br>iPhone 15 Plus<br>iPhone 15 Pro<br>iPhone 15 Pro Max<br>iPhone SE (3rd generation)<br>iPad (10th generation)<br>iPad Air (5th generation)<br>iPad Air 11-inch (M2)<br>iPad Air 13-inch (M2)<br>iPad mini (6th generation)<br>iPad Pro (11-inch) (4th generation)<br>iPad Pro (12.9-inch) (6th generation)<br>iPad Pro 11-inch (M4)<br>iPad Pro 13-inch (M4) |
| iOS 18.0 | iPhone 15<br>iPhone 15 Plus<br>iPhone 15 Pro<br>iPhone 15 Pro Max<br>iPhone 16<br>iPhone 16 Plus<br>iPhone 16 Pro<br>iPhone 16 Pro Max<br>iPhone SE (3rd generation)<br>iPad (10th generation)<br>iPad Air (5th generation)<br>iPad Air 11-inch (M2)<br>iPad Air 13-inch (M2)<br>iPad mini (6th generation)<br>iPad Pro (11-inch) (4th generation)<br>iPad Pro (12.9-inch) (6th generation)<br>iPad Pro 11-inch (M4)<br>iPad Pro 13-inch (M4) |
| iOS 18.1 | iPhone 15<br>iPhone 15 Plus<br>iPhone 15 Pro<br>iPhone 15 Pro Max<br>iPhone 16<br>iPhone 16 Plus<br>iPhone 16 Pro<br>iPhone 16 Pro Max<br>iPhone SE (3rd generation)<br>iPad (10th generation)<br>iPad Air (5th generation)<br>iPad Air 11-inch (M2)<br>iPad Air 13-inch (M2)<br>iPad mini (6th generation)<br>iPad mini (A17 Pro)<br>iPad Pro (11-inch) (4th generation)<br>iPad Pro (12.9-inch) (6th generation)<br>iPad Pro 11-inch (M4)<br>iPad Pro 13-inch (M4) |
| tvOS 17.0 | Apple TV<br>Apple TV 4K (3rd generation)<br>Apple TV 4K (3rd generation) (at 1080p) |
| tvOS 17.2 | Apple TV<br>Apple TV 4K (3rd generation)<br>Apple TV 4K (3rd generation) (at 1080p) |
| tvOS 17.4 | Apple TV<br>Apple TV 4K (3rd generation)<br>Apple TV 4K (3rd generation) (at 1080p) |
| tvOS 17.5 | Apple TV<br>Apple TV 4K (3rd generation)<br>Apple TV 4K (3rd generation) (at 1080p) |
| tvOS 18.0 | Apple TV<br>Apple TV 4K (3rd generation)<br>Apple TV 4K (3rd generation) (at 1080p) |
| tvOS 18.1 | Apple TV<br>Apple TV 4K (3rd generation)<br>Apple TV 4K (3rd generation) (at 1080p) |
| watchOS 10.0 | Apple Watch SE (40mm) (2nd generation)<br>Apple Watch SE (44mm) (2nd generation)<br>Apple Watch Series 5 (40mm)<br>Apple Watch Series 5 (44mm)<br>Apple Watch Series 6 (40mm)<br>Apple Watch Series 6 (44mm)<br>Apple Watch Series 7 (41mm)<br>Apple Watch Series 7 (45mm)<br>Apple Watch Series 9 (41mm)<br>Apple Watch Series 9 (45mm)<br>Apple Watch Ultra 2 (49mm) |
| watchOS 10.2 | Apple Watch SE (40mm) (2nd generation)<br>Apple Watch SE (44mm) (2nd generation)<br>Apple Watch Series 5 (40mm)<br>Apple Watch Series 5 (44mm)<br>Apple Watch Series 6 (40mm)<br>Apple Watch Series 6 (44mm)<br>Apple Watch Series 7 (41mm)<br>Apple Watch Series 7 (45mm)<br>Apple Watch Series 9 (41mm)<br>Apple Watch Series 9 (45mm)<br>Apple Watch Ultra 2 (49mm) |
| watchOS 10.4 | Apple Watch SE (40mm) (2nd generation)<br>Apple Watch SE (44mm) (2nd generation)<br>Apple Watch Series 5 (40mm)<br>Apple Watch Series 5 (44mm)<br>Apple Watch Series 6 (40mm)<br>Apple Watch Series 6 (44mm)<br>Apple Watch Series 7 (41mm)<br>Apple Watch Series 7 (45mm)<br>Apple Watch Series 9 (41mm)<br>Apple Watch Series 9 (45mm)<br>Apple Watch Ultra 2 (49mm) |
| watchOS 10.5 | Apple Watch SE (40mm) (2nd generation)<br>Apple Watch SE (44mm) (2nd generation)<br>Apple Watch Series 5 (40mm)<br>Apple Watch Series 5 (44mm)<br>Apple Watch Series 6 (40mm)<br>Apple Watch Series 6 (44mm)<br>Apple Watch Series 7 (41mm)<br>Apple Watch Series 7 (45mm)<br>Apple Watch Series 9 (41mm)<br>Apple Watch Series 9 (45mm)<br>Apple Watch Ultra 2 (49mm) |
| watchOS 11.0 | Apple Watch SE (40mm) (2nd generation)<br>Apple Watch SE (44mm) (2nd generation)<br>Apple Watch Series 10 (42mm)<br>Apple Watch Series 10 (46mm)<br>Apple Watch Series 5 (40mm)<br>Apple Watch Series 5 (44mm)<br>Apple Watch Series 6 (40mm)<br>Apple Watch Series 6 (44mm)<br>Apple Watch Series 7 (41mm)<br>Apple Watch Series 7 (45mm)<br>Apple Watch Series 9 (41mm)<br>Apple Watch Series 9 (45mm)<br>Apple Watch Ultra 2 (49mm) |
| watchOS 11.1 | Apple Watch SE (40mm) (2nd generation)<br>Apple Watch SE (44mm) (2nd generation)<br>Apple Watch Series 10 (42mm)<br>Apple Watch Series 10 (46mm)<br>Apple Watch Series 5 (40mm)<br>Apple Watch Series 5 (44mm)<br>Apple Watch Series 6 (40mm)<br>Apple Watch Series 6 (44mm)<br>Apple Watch Series 7 (41mm)<br>Apple Watch Series 7 (45mm)<br>Apple Watch Series 9 (41mm)<br>Apple Watch Series 9 (45mm)<br>Apple Watch Ultra 2 (49mm) |
### Android
| Package Name | Version |
| -------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Android Command Line Tools | 11.0 |
| Android Emulator | 35.3.12 |
| Android SDK Build-tools | 35.0.0 35.0.1<br>34.0.0<br>33.0.2 33.0.3 |
| Android SDK Platforms | android-35-ext14 (rev 1)<br>android-35 (rev 2)<br>android-34-ext8 (rev 1)<br>android-34-ext12 (rev 1)<br>android-34-ext11 (rev 1)<br>android-34-ext10 (rev 1)<br>android-34 (rev 3)<br>android-33-ext5 (rev 1)<br>android-33-ext4 (rev 1)<br>android-33 (rev 3) |
| Android Emulator | 35.2.10 |
| Android SDK Build-tools | 35.0.0<br>34.0.0<br>33.0.2 33.0.3 |
| Android SDK Platforms | android-35-ext14 (rev 1)<br>android-35 (rev 1)<br>android-34-ext8 (rev 1)<br>android-34-ext12 (rev 1)<br>android-34-ext11 (rev 1)<br>android-34-ext10 (rev 1)<br>android-34 (rev 3)<br>android-33-ext5 (rev 1)<br>android-33-ext4 (rev 1)<br>android-33 (rev 3) |
| Android SDK Platform-Tools | 35.0.2 |
| Android Support Repository | 47.0.0 |
| CMake | 3.31.0 |
@@ -283,7 +283,7 @@
#### Environment variables
| Name | Value |
| ----------------- | ----------------------------------------------------------------------------------------- |
| PARALLELS_DMG_URL | https://download.parallels.com/desktop/v20/20.2.2-55879/ParallelsDesktop-20.2.2-55879.dmg |
| PARALLELS_DMG_URL | https://download.parallels.com/desktop/v20/20.1.2-55742/ParallelsDesktop-20.1.2-55742.dmg |
##### Notes
```
+109 -109
View File
@@ -1,18 +1,18 @@
| Announcements |
|-|
| [[ macOS ] .NET 7.x will be removed from macOS-13 and macOS-14 images on February 24,2025.](https://github.com/actions/runner-images/issues/11501) |
| [macOS 15 (Sequoia) will be generally available in GitHub Actions and Azure DevOps from March, 18](https://github.com/actions/runner-images/issues/11486) |
| [[macOS] Ruby version 3.0 will be removed from the images on Feb 17, 2025 and 3.3 will be set as default. ](https://github.com/actions/runner-images/issues/11345) |
| [[macOS 14] Xcode 16.0 will be replaced by Xcode 16.2 in macOS-14 images on January 6, 2025](https://github.com/actions/runner-images/issues/11203) |
| [[macOS] The macOS 12 Actions runner image will begin deprecation on 10/7/24 and will be fully unsupported by 12/3/24 for GitHub and by 01/13/25 for ADO](https://github.com/actions/runner-images/issues/10721) |
| [macOS 15 (Sequoia) is now available as a public beta in GitHub Actions](https://github.com/actions/runner-images/issues/10686) |
***
# macOS 14
- OS Version: macOS 14.7.4 (23H420)
- OS Version: macOS 14.7.2 (23H311)
- Kernel Version: Darwin 23.6.0
- Image Version: 20250304.1018
- Image Version: 20241216.651
## Installed Software
### Language and Runtime
- .NET Core SDK: 8.0.101, 8.0.204, 8.0.303, 8.0.406, 9.0.102, 9.0.200
- .NET Core SDK: 7.0.102, 7.0.202, 7.0.306, 7.0.410, 8.0.101, 8.0.204, 8.0.303, 8.0.404
- Bash 3.2.57(1)-release
- Clang/LLVM 15.0.0
- Clang/LLVM (Homebrew) 15.0.7 - available on `$(brew --prefix llvm@15)/bin/clang`
@@ -22,76 +22,76 @@
- GNU Fortran 12 (Homebrew GCC 12.4.0) - available by `gfortran-12` alias
- GNU Fortran 13 (Homebrew GCC 13.3.0) - available by `gfortran-13` alias
- GNU Fortran 14 (Homebrew GCC 14.2.0_1) - available by `gfortran-14` alias
- Kotlin 2.1.10-release-473
- Kotlin 2.1.0-release-394
- Mono 6.12.0.188
- Node.js 20.18.3
- Perl 5.40.1
- Python3 3.13.2
- Ruby 3.3.7
- Node.js 20.18.1
- Perl 5.40.0
- Python3 3.13.1
- Ruby 3.0.7p220
### Package Management
- Bundler 2.6.5
- Bundler 2.5.23
- Carthage 0.40.0
- CocoaPods 1.16.2
- Homebrew 4.4.23
- Homebrew 4.4.11
- NPM 10.8.2
- NuGet 6.3.1.1
- Pip3 25.0 (python 3.13)
- Pip3 24.3.1 (python 3.13)
- Pipx 1.7.1
- RubyGems 3.6.5
- RubyGems 3.5.23
- Yarn 1.22.22
### Project Management
- Apache Ant 1.10.15
- Apache Maven 3.9.9
- Gradle 8.13
- Gradle 8.11.1
### Utilities
- 7-Zip 17.05
- aria2 1.37.0
- azcopy 10.28.0
- bazel 8.1.1
- azcopy 10.27.1
- bazel 8.0.0
- bazelisk 1.25.0
- bsdtar 3.5.3 - available by 'tar' alias
- Curl 8.7.1
- Git 2.48.1
- Git LFS 3.6.1
- GitHub CLI 2.67.0
- Git 2.47.1
- Git LFS 3.6.0
- GitHub CLI 2.63.2
- GNU Tar 1.35 - available by 'gtar' alias
- GNU Wget 1.25.0
- gpg (GnuPG) 2.4.7
- gpg (GnuPG) 2.4.6
- jq 1.7.1
- OpenSSL 1.1.1w 11 Sep 2023
- Packer 1.12.0
- Packer 1.11.2
- pkgconf 2.3.0
- Unxip 3.1
- yq 4.45.1
- zstd 1.5.7
- yq 4.44.6
- zstd 1.5.6
### Tools
- AWS CLI 2.24.16
- AWS SAM CLI 1.134.0
- AWS Session Manager CLI 1.2.707.0
- Azure CLI 2.70.0
- AWS CLI 2.22.17
- AWS SAM CLI 1.132.0
- AWS Session Manager CLI 1.2.694.0
- Azure CLI 2.67.0
- Azure CLI (azure-devops) 1.0.1
- Bicep CLI 0.33.93
- Cmake 3.31.6
- CodeQL Action Bundle 2.20.1
- Bicep CLI 0.32.4
- Cmake 3.31.2
- CodeQL Action Bundle 2.20.0
- Fastlane 2.226.0
- SwiftFormat 0.55.5
- Xcbeautify 2.27.0
- SwiftFormat 0.55.3
- Xcbeautify 2.16.0
- Xcode Command Line Tools 16.2.0.0.1.1733547573
- Xcodes 1.6.0
### Linters
### Browsers
- Safari 18.3 (19620.2.4.111.8)
- SafariDriver 18.3 (19620.2.4.111.8)
- Google Chrome 133.0.6943.142
- Google Chrome for Testing 133.0.6943.141
- ChromeDriver 133.0.6943.141
- Selenium server 4.29.0
- Safari 18.2 (19620.1.16.111.6)
- SafariDriver 18.2 (19620.1.16.111.6)
- Google Chrome 131.0.6778.140
- Google Chrome for Testing 131.0.6778.108
- ChromeDriver 131.0.6778.108
- Selenium server 4.27.0
#### Environment variables
| Name | Value |
@@ -101,63 +101,63 @@
| GECKOWEBDRIVER | |
### Java
| Version | Environment Variable |
| -------------------- | -------------------- |
| 11.0.26+4 | JAVA_HOME_11_arm64 |
| 17.0.14+7 | JAVA_HOME_17_arm64 |
| 21.0.6+7.0 (default) | JAVA_HOME_21_arm64 |
| Version | Environment Variable |
| --------------------- | -------------------- |
| 11.0.25+9 | JAVA_HOME_11_arm64 |
| 17.0.13+11 | JAVA_HOME_17_arm64 |
| 21.0.5+11.0 (default) | JAVA_HOME_21_arm64 |
### Cached Tools
#### Ruby
- 3.0.7
- 3.1.6
- 3.2.7
- 3.3.7
- 3.4.2
- 3.2.6
- 3.3.6
#### Python
- 3.11.9
- 3.12.9
- 3.13.2
- 3.12.8
- 3.13.1
#### Node.js
- 18.20.7
- 20.18.3
- 22.14.0
- 18.20.5
- 20.18.1
- 22.12.0
#### Go
- 1.21.13
- 1.22.12
- 1.23.6
- 1.22.10
- 1.23.4
### Rust Tools
- Cargo 1.85.0
- Rust 1.85.0
- Rustdoc 1.85.0
- Cargo 1.83.0
- Rust 1.83.0
- Rustdoc 1.83.0
- Rustup 1.27.1
#### Packages
- Clippy 0.1.85
- Clippy 0.1.83
- Rustfmt 1.8.0-stable
### PowerShell Tools
- PowerShell 7.4.7
- PowerShell 7.4.6
#### PowerShell Modules
- Az: 12.4.0
- Pester: 5.7.1
- Pester: 5.6.1
- PSScriptAnalyzer: 1.23.0
### Xcode
| Version | Build | Path | Symlinks |
| -------------- | -------- | ------------------------------ | --------------------------------------------------------- |
| 16.2 | 16C5032a | /Applications/Xcode_16.2.app | /Applications/Xcode_16.2.0.app |
| 16.1 | 16B40 | /Applications/Xcode_16.1.app | /Applications/Xcode_16.1.0.app |
| 15.4 (default) | 15F31d | /Applications/Xcode_15.4.app | /Applications/Xcode_15.4.0.app<br>/Applications/Xcode.app |
| 15.3 | 15E204a | /Applications/Xcode_15.3.app | /Applications/Xcode_15.3.0.app |
| 15.2 | 15C500b | /Applications/Xcode_15.2.app | /Applications/Xcode_15.2.0.app |
| 15.1 | 15C65 | /Applications/Xcode_15.1.app | /Applications/Xcode_15.1.0.app |
| 15.0.1 | 15A507 | /Applications/Xcode_15.0.1.app | /Applications/Xcode_15.0.app |
| Version | Build | Path | Symlinks |
| -------------- | ------- | ------------------------------ | -------------------------------------------------------------- |
| 16.1 | 16B40 | /Applications/Xcode_16.1.app | /Applications/Xcode_16.1.0.app |
| 16.0 | 16A242d | /Applications/Xcode_16.app | /Applications/Xcode_16.0.0.app<br>/Applications/Xcode_16.0.app |
| 15.4 (default) | 15F31d | /Applications/Xcode_15.4.app | /Applications/Xcode_15.4.0.app<br>/Applications/Xcode.app |
| 15.3 | 15E204a | /Applications/Xcode_15.3.app | /Applications/Xcode_15.3.0.app |
| 15.2 | 15C500b | /Applications/Xcode_15.2.app | /Applications/Xcode_15.2.0.app |
| 15.1 | 15C65 | /Applications/Xcode_15.1.app | /Applications/Xcode_15.1.0.app |
| 15.0.1 | 15A507 | /Applications/Xcode_15.0.1.app | /Applications/Xcode_15.0.app |
#### Installed SDKs
| SDK | SDK Name | Xcode Version |
@@ -166,93 +166,93 @@
| macOS 14.2 | macosx14.2 | 15.1, 15.2 |
| macOS 14.4 | macosx14.4 | 15.3 |
| macOS 14.5 | macosx14.5 | 15.4 |
| macOS 15.0 | macosx15.0 | 16.0 |
| macOS 15.1 | macosx15.1 | 16.1 |
| macOS 15.2 | macosx15.2 | 16.2 |
| iOS 17.0 | iphoneos17.0 | 15.0.1 |
| iOS 17.2 | iphoneos17.2 | 15.1, 15.2 |
| iOS 17.4 | iphoneos17.4 | 15.3 |
| iOS 17.5 | iphoneos17.5 | 15.4 |
| iOS 18.0 | iphoneos18.0 | 16.0 |
| iOS 18.1 | iphoneos18.1 | 16.1 |
| iOS 18.2 | iphoneos18.2 | 16.2 |
| Simulator - iOS 17.0 | iphonesimulator17.0 | 15.0.1 |
| Simulator - iOS 17.2 | iphonesimulator17.2 | 15.1, 15.2 |
| Simulator - iOS 17.4 | iphonesimulator17.4 | 15.3 |
| Simulator - iOS 17.5 | iphonesimulator17.5 | 15.4 |
| Simulator - iOS 18.0 | iphonesimulator18.0 | 16.0 |
| Simulator - iOS 18.1 | iphonesimulator18.1 | 16.1 |
| Simulator - iOS 18.2 | iphonesimulator18.2 | 16.2 |
| tvOS 17.0 | appletvos17.0 | 15.0.1 |
| tvOS 17.2 | appletvos17.2 | 15.1, 15.2 |
| tvOS 17.4 | appletvos17.4 | 15.3 |
| tvOS 17.5 | appletvos17.5 | 15.4 |
| tvOS 18.0 | appletvos18.0 | 16.0 |
| tvOS 18.1 | appletvos18.1 | 16.1 |
| tvOS 18.2 | appletvos18.2 | 16.2 |
| Simulator - tvOS 17.0 | appletvsimulator17.0 | 15.0.1 |
| Simulator - tvOS 17.2 | appletvsimulator17.2 | 15.1, 15.2 |
| Simulator - tvOS 17.4 | appletvsimulator17.4 | 15.3 |
| Simulator - tvOS 17.5 | appletvsimulator17.5 | 15.4 |
| Simulator - tvOS 18.0 | appletvsimulator18.0 | 16.0 |
| Simulator - tvOS 18.1 | appletvsimulator18.1 | 16.1 |
| Simulator - tvOS 18.2 | appletvsimulator18.2 | 16.2 |
| watchOS 10.0 | watchos10.0 | 15.0.1 |
| watchOS 10.2 | watchos10.2 | 15.1, 15.2 |
| watchOS 10.4 | watchos10.4 | 15.3 |
| watchOS 10.5 | watchos10.5 | 15.4 |
| watchOS 11.0 | watchos11.0 | 16.0 |
| watchOS 11.1 | watchos11.1 | 16.1 |
| watchOS 11.2 | watchos11.2 | 16.2 |
| Simulator - watchOS 10.0 | watchsimulator10.0 | 15.0.1 |
| Simulator - watchOS 10.2 | watchsimulator10.2 | 15.1, 15.2 |
| Simulator - watchOS 10.4 | watchsimulator10.4 | 15.3 |
| Simulator - watchOS 10.5 | watchsimulator10.5 | 15.4 |
| Simulator - watchOS 11.0 | watchsimulator11.0 | 16.0 |
| Simulator - watchOS 11.1 | watchsimulator11.1 | 16.1 |
| Simulator - watchOS 11.2 | watchsimulator11.2 | 16.2 |
| Simulator - visionOS 1.0 | xrsimulator1.0 | 15.2 |
| visionOS 1.0 | xros1.0 | 15.2 |
| visionOS 1.1 | xros1.1 | 15.3 |
| visionOS 1.2 | xros1.2 | 15.4 |
| visionOS 2.1 | xros2.1 | 16.1 |
| visionOS 2.2 | xros2.2 | 16.2 |
| Simulator - visionOS 1.0 | xrsimulator1.0 | 15.2 |
| Simulator - visionOS 1.1 | xrsimulator1.1 | 15.3 |
| Simulator - visionOS 1.2 | xrsimulator1.2 | 15.4 |
| visionOS 1.2 | xros1.2 | 15.4 |
| visionOS 2.0 | xros2.0 | 16.0 |
| Simulator - visionOS 2.0 | xrsimulator2.0 | 16.0 |
| visionOS 2.1 | xros2.1 | 16.1 |
| Simulator - visionOS 2.1 | xrsimulator2.1 | 16.1 |
| Simulator - visionOS 2.2 | xrsimulator2.2 | 16.2 |
| DriverKit 23.0 | driverkit23.0 | 15.0.1 |
| DriverKit 23.2 | driverkit23.2 | 15.1, 15.2 |
| DriverKit 23.4 | driverkit23.4 | 15.3 |
| DriverKit 23.5 | driverkit23.5 | 15.4 |
| DriverKit 24.0 | driverkit24.0 | 16.0 |
| DriverKit 24.1 | driverkit24.1 | 16.1 |
| DriverKit 24.2 | driverkit24.2 | 16.2 |
#### Installed Simulators
| OS | Simulators |
| ------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| iOS 17.0 | iPhone 15<br>iPhone 15 Plus<br>iPhone 15 Pro<br>iPhone 15 Pro Max<br>iPhone SE (3rd generation)<br>iPad (10th generation)<br>iPad Air (5th generation)<br>iPad mini (6th generation)<br>iPad Pro (11-inch) (4th generation)<br>iPad Pro (12.9-inch) (6th generation) |
| iOS 17.2 | iPhone 15<br>iPhone 15 Plus<br>iPhone 15 Pro<br>iPhone 15 Pro Max<br>iPhone SE (3rd generation)<br>iPad (10th generation)<br>iPad Air (5th generation)<br>iPad mini (6th generation)<br>iPad Pro (11-inch) (4th generation)<br>iPad Pro (12.9-inch) (6th generation) |
| iOS 17.4 | iPhone 15<br>iPhone 15 Plus<br>iPhone 15 Pro<br>iPhone 15 Pro Max<br>iPhone SE (3rd generation)<br>iPad (10th generation)<br>iPad Air 11-inch (M2)<br>iPad Air 13-inch (M2)<br>iPad mini (6th generation)<br>iPad Pro 11-inch (M4)<br>iPad Pro 13-inch (M4) |
| iOS 17.5 | iPhone 15<br>iPhone 15 Plus<br>iPhone 15 Pro<br>iPhone 15 Pro Max<br>iPhone SE (3rd generation)<br>iPad (10th generation)<br>iPad Air 11-inch (M2)<br>iPad Air 13-inch (M2)<br>iPad mini (6th generation)<br>iPad Pro 11-inch (M4)<br>iPad Pro 13-inch (M4) |
| iOS 18.1 | iPhone 16<br>iPhone 16 Plus<br>iPhone 16 Pro<br>iPhone 16 Pro Max<br>iPhone SE (3rd generation)<br>iPad (10th generation)<br>iPad Air 11-inch (M2)<br>iPad Air 13-inch (M2)<br>iPad mini (A17 Pro)<br>iPad Pro 11-inch (M4)<br>iPad Pro 13-inch (M4) |
| iOS 18.2 | iPhone 16<br>iPhone 16 Plus<br>iPhone 16 Pro<br>iPhone 16 Pro Max<br>iPhone SE (3rd generation)<br>iPad (10th generation)<br>iPad Air 11-inch (M2)<br>iPad Air 13-inch (M2)<br>iPad mini (A17 Pro)<br>iPad Pro 11-inch (M4)<br>iPad Pro 13-inch (M4) |
| tvOS 17.0 | Apple TV<br>Apple TV 4K (3rd generation)<br>Apple TV 4K (3rd generation) (at 1080p) |
| tvOS 17.2 | Apple TV<br>Apple TV 4K (3rd generation)<br>Apple TV 4K (3rd generation) (at 1080p) |
| tvOS 17.4 | Apple TV<br>Apple TV 4K (3rd generation)<br>Apple TV 4K (3rd generation) (at 1080p) |
| tvOS 17.5 | Apple TV<br>Apple TV 4K (3rd generation)<br>Apple TV 4K (3rd generation) (at 1080p) |
| tvOS 18.1 | Apple TV<br>Apple TV 4K (3rd generation)<br>Apple TV 4K (3rd generation) (at 1080p) |
| tvOS 18.2 | Apple TV<br>Apple TV 4K (3rd generation)<br>Apple TV 4K (3rd generation) (at 1080p) |
| watchOS 10.0 | Apple Watch SE (40mm) (2nd generation)<br>Apple Watch SE (44mm) (2nd generation)<br>Apple Watch Series 9 (41mm)<br>Apple Watch Series 9 (45mm)<br>Apple Watch Ultra 2 (49mm) |
| watchOS 10.2 | Apple Watch SE (40mm) (2nd generation)<br>Apple Watch SE (44mm) (2nd generation)<br>Apple Watch Series 9 (41mm)<br>Apple Watch Series 9 (45mm)<br>Apple Watch Ultra 2 (49mm) |
| watchOS 10.4 | Apple Watch SE (40mm) (2nd generation)<br>Apple Watch SE (44mm) (2nd generation)<br>Apple Watch Series 9 (41mm)<br>Apple Watch Series 9 (45mm)<br>Apple Watch Ultra 2 (49mm) |
| watchOS 10.5 | Apple Watch SE (40mm) (2nd generation)<br>Apple Watch SE (44mm) (2nd generation)<br>Apple Watch Series 9 (41mm)<br>Apple Watch Series 9 (45mm)<br>Apple Watch Ultra 2 (49mm) |
| watchOS 11.1 | Apple Watch SE (40mm) (2nd generation)<br>Apple Watch SE (44mm) (2nd generation)<br>Apple Watch Series 10 (42mm)<br>Apple Watch Series 10 (46mm)<br>Apple Watch Ultra 2 (49mm) |
| watchOS 11.2 | Apple Watch SE (40mm) (2nd generation)<br>Apple Watch SE (44mm) (2nd generation)<br>Apple Watch Series 10 (42mm)<br>Apple Watch Series 10 (46mm)<br>Apple Watch Ultra 2 (49mm) |
| visionOS 1.0 | Apple Vision Pro |
| visionOS 1.1 | Apple Vision Pro |
| visionOS 1.2 | Apple Vision Pro |
| OS | Simulators |
| ------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| iOS 17.0 | iPhone 15<br>iPhone 15 Plus<br>iPhone 15 Pro<br>iPhone 15 Pro Max<br>iPhone SE (3rd generation)<br>iPad (10th generation)<br>iPad Air (5th generation)<br>iPad mini (6th generation)<br>iPad Pro (11-inch) (4th generation)<br>iPad Pro (12.9-inch) (6th generation) |
| iOS 17.2 | iPhone 15<br>iPhone 15 Plus<br>iPhone 15 Pro<br>iPhone 15 Pro Max<br>iPhone SE (3rd generation)<br>iPad (10th generation)<br>iPad Air (5th generation)<br>iPad mini (6th generation)<br>iPad Pro (11-inch) (4th generation)<br>iPad Pro (12.9-inch) (6th generation) |
| iOS 17.4 | iPhone 15<br>iPhone 15 Plus<br>iPhone 15 Pro<br>iPhone 15 Pro Max<br>iPhone SE (3rd generation)<br>iPad (10th generation)<br>iPad Air (5th generation)<br>iPad Air 11-inch (M2)<br>iPad Air 13-inch (M2)<br>iPad mini (6th generation)<br>iPad Pro (11-inch) (4th generation)<br>iPad Pro (12.9-inch) (6th generation)<br>iPad Pro 11-inch (M4)<br>iPad Pro 13-inch (M4) |
| iOS 17.5 | iPhone 15<br>iPhone 15 Plus<br>iPhone 15 Pro<br>iPhone 15 Pro Max<br>iPhone SE (3rd generation)<br>iPad (10th generation)<br>iPad Air (5th generation)<br>iPad Air 11-inch (M2)<br>iPad Air 13-inch (M2)<br>iPad mini (6th generation)<br>iPad Pro (11-inch) (4th generation)<br>iPad Pro (12.9-inch) (6th generation)<br>iPad Pro 11-inch (M4)<br>iPad Pro 13-inch (M4) |
| iOS 18.0 | iPhone 15<br>iPhone 15 Plus<br>iPhone 15 Pro<br>iPhone 15 Pro Max<br>iPhone 16<br>iPhone 16 Plus<br>iPhone 16 Pro<br>iPhone 16 Pro Max<br>iPhone SE (3rd generation)<br>iPad (10th generation)<br>iPad Air (5th generation)<br>iPad Air 11-inch (M2)<br>iPad Air 13-inch (M2)<br>iPad mini (6th generation)<br>iPad Pro (11-inch) (4th generation)<br>iPad Pro (12.9-inch) (6th generation)<br>iPad Pro 11-inch (M4)<br>iPad Pro 13-inch (M4) |
| iOS 18.1 | iPhone 15<br>iPhone 15 Plus<br>iPhone 15 Pro<br>iPhone 15 Pro Max<br>iPhone 16<br>iPhone 16 Plus<br>iPhone 16 Pro<br>iPhone 16 Pro Max<br>iPhone SE (3rd generation)<br>iPad (10th generation)<br>iPad Air (5th generation)<br>iPad Air 11-inch (M2)<br>iPad Air 13-inch (M2)<br>iPad mini (6th generation)<br>iPad mini (A17 Pro)<br>iPad Pro (11-inch) (4th generation)<br>iPad Pro (12.9-inch) (6th generation)<br>iPad Pro 11-inch (M4)<br>iPad Pro 13-inch (M4) |
| tvOS 17.0 | Apple TV<br>Apple TV 4K (3rd generation)<br>Apple TV 4K (3rd generation) (at 1080p) |
| tvOS 17.2 | Apple TV<br>Apple TV 4K (3rd generation)<br>Apple TV 4K (3rd generation) (at 1080p) |
| tvOS 17.4 | Apple TV<br>Apple TV 4K (3rd generation)<br>Apple TV 4K (3rd generation) (at 1080p) |
| tvOS 17.5 | Apple TV<br>Apple TV 4K (3rd generation)<br>Apple TV 4K (3rd generation) (at 1080p) |
| tvOS 18.0 | Apple TV<br>Apple TV 4K (3rd generation)<br>Apple TV 4K (3rd generation) (at 1080p) |
| tvOS 18.1 | Apple TV<br>Apple TV 4K (3rd generation)<br>Apple TV 4K (3rd generation) (at 1080p) |
| watchOS 10.0 | Apple Watch SE (40mm) (2nd generation)<br>Apple Watch SE (44mm) (2nd generation)<br>Apple Watch Series 5 (40mm)<br>Apple Watch Series 5 (44mm)<br>Apple Watch Series 6 (40mm)<br>Apple Watch Series 6 (44mm)<br>Apple Watch Series 7 (41mm)<br>Apple Watch Series 7 (45mm)<br>Apple Watch Series 9 (41mm)<br>Apple Watch Series 9 (45mm)<br>Apple Watch Ultra 2 (49mm) |
| watchOS 10.2 | Apple Watch SE (40mm) (2nd generation)<br>Apple Watch SE (44mm) (2nd generation)<br>Apple Watch Series 5 (40mm)<br>Apple Watch Series 5 (44mm)<br>Apple Watch Series 6 (40mm)<br>Apple Watch Series 6 (44mm)<br>Apple Watch Series 7 (41mm)<br>Apple Watch Series 7 (45mm)<br>Apple Watch Series 9 (41mm)<br>Apple Watch Series 9 (45mm)<br>Apple Watch Ultra 2 (49mm) |
| watchOS 10.4 | Apple Watch SE (40mm) (2nd generation)<br>Apple Watch SE (44mm) (2nd generation)<br>Apple Watch Series 5 (40mm)<br>Apple Watch Series 5 (44mm)<br>Apple Watch Series 6 (40mm)<br>Apple Watch Series 6 (44mm)<br>Apple Watch Series 7 (41mm)<br>Apple Watch Series 7 (45mm)<br>Apple Watch Series 9 (41mm)<br>Apple Watch Series 9 (45mm)<br>Apple Watch Ultra 2 (49mm) |
| watchOS 10.5 | Apple Watch SE (40mm) (2nd generation)<br>Apple Watch SE (44mm) (2nd generation)<br>Apple Watch Series 5 (40mm)<br>Apple Watch Series 5 (44mm)<br>Apple Watch Series 6 (40mm)<br>Apple Watch Series 6 (44mm)<br>Apple Watch Series 7 (41mm)<br>Apple Watch Series 7 (45mm)<br>Apple Watch Series 9 (41mm)<br>Apple Watch Series 9 (45mm)<br>Apple Watch Ultra 2 (49mm) |
| watchOS 11.0 | Apple Watch SE (40mm) (2nd generation)<br>Apple Watch SE (44mm) (2nd generation)<br>Apple Watch Series 10 (42mm)<br>Apple Watch Series 10 (46mm)<br>Apple Watch Series 5 (40mm)<br>Apple Watch Series 5 (44mm)<br>Apple Watch Series 6 (40mm)<br>Apple Watch Series 6 (44mm)<br>Apple Watch Series 7 (41mm)<br>Apple Watch Series 7 (45mm)<br>Apple Watch Series 9 (41mm)<br>Apple Watch Series 9 (45mm)<br>Apple Watch Ultra 2 (49mm) |
| watchOS 11.1 | Apple Watch SE (40mm) (2nd generation)<br>Apple Watch SE (44mm) (2nd generation)<br>Apple Watch Series 10 (42mm)<br>Apple Watch Series 10 (46mm)<br>Apple Watch Series 5 (40mm)<br>Apple Watch Series 5 (44mm)<br>Apple Watch Series 6 (40mm)<br>Apple Watch Series 6 (44mm)<br>Apple Watch Series 7 (41mm)<br>Apple Watch Series 7 (45mm)<br>Apple Watch Series 9 (41mm)<br>Apple Watch Series 9 (45mm)<br>Apple Watch Ultra 2 (49mm) |
| visionOS 1.0 | Apple Vision Pro |
| visionOS 1.1 | Apple Vision Pro |
| visionOS 1.2 | Apple Vision Pro |
### Android
| Package Name | Version |
| -------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Android Command Line Tools | 11.0 |
| Android Emulator | 35.3.12 |
| Android SDK Build-tools | 35.0.0 35.0.1<br>34.0.0<br>33.0.2 33.0.3 |
| Android SDK Platforms | android-35-ext14 (rev 1)<br>android-35 (rev 2)<br>android-34-ext8 (rev 1)<br>android-34-ext12 (rev 1)<br>android-34-ext11 (rev 1)<br>android-34-ext10 (rev 1)<br>android-34 (rev 3)<br>android-33-ext5 (rev 1)<br>android-33-ext4 (rev 1)<br>android-33 (rev 3) |
| Android Emulator | 35.2.10 |
| Android SDK Build-tools | 35.0.0<br>34.0.0<br>33.0.2 33.0.3 |
| Android SDK Platforms | android-35-ext14 (rev 1)<br>android-35 (rev 1)<br>android-34-ext8 (rev 1)<br>android-34-ext12 (rev 1)<br>android-34-ext11 (rev 1)<br>android-34-ext10 (rev 1)<br>android-34 (rev 3)<br>android-33-ext5 (rev 1)<br>android-33-ext4 (rev 1)<br>android-33 (rev 3) |
| Android SDK Platform-Tools | 35.0.2 |
| Android Support Repository | 47.0.0 |
| CMake | 3.31.0 |
+57 -58
View File
@@ -1,18 +1,18 @@
| Announcements |
|-|
| [[macOS] Ruby version 3.0 will be removed from the images on Feb 10, 2025 and 3.3 will be set as default. ](https://github.com/actions/runner-images/issues/11345) |
| [[macOS 14] Xcode 16.0 will be replaced by Xcode 16.2 in macOS-14 images on January 6, 2025](https://github.com/actions/runner-images/issues/11203) |
| [[macOS] The macOS 12 Actions runner image will begin deprecation on 10/7/24 and will be fully unsupported by 12/3/24 for GitHub and by 01/13/25 for ADO](https://github.com/actions/runner-images/issues/10721) |
| [macOS 15 (Sequoia) is now available as a public beta in GitHub Actions](https://github.com/actions/runner-images/issues/10686) |
***
# macOS 15
- OS Version: macOS 15.2 (24C101)
- Kernel Version: Darwin 24.2.0
- Image Version: 20250120.591
- Image Version: 20241217.493
## Installed Software
### Language and Runtime
- .NET Core SDK: 8.0.101, 8.0.204, 8.0.303, 8.0.405, 9.0.102
- .NET Core SDK: 8.0.101, 8.0.204, 8.0.303, 8.0.404
- Bash 3.2.57(1)-release
- Clang/LLVM 15.0.0
- Clang/LLVM (Homebrew) 18.1.8 - available on `$(brew --prefix llvm@18)/bin/clang`
@@ -23,78 +23,78 @@
- GNU Fortran 13 (Homebrew GCC 13.3.0) - available by `gfortran-13` alias
- GNU Fortran 14 (Homebrew GCC 14.2.0_1) - available by `gfortran-14` alias
- Kotlin 2.1.0-release-394
- Node.js 22.13.0
- Perl 5.40.1
- PHP 8.4.3
- Node.js 22.12.0
- Perl 5.40.0
- PHP 8.4.1
- Python3 3.13.1
- Ruby 3.3.7
- Ruby 3.3.6
### Package Management
- Bundler 2.6.3
- Bundler 2.6.0
- Carthage 0.40.0
- CocoaPods 1.16.2
- Composer 2.8.4
- Homebrew 4.4.16
- NPM 10.9.2
- Homebrew 4.4.12
- NPM 10.9.0
- Pip3 24.3.1 (python 3.13)
- Pipx 1.7.1
- RubyGems 3.6.3
- RubyGems 3.6.0
- Yarn 1.22.22
### Project Management
- Apache Ant 1.10.15
- Apache Maven 3.9.9
- Gradle 8.12
- Gradle 8.11.1
### Utilities
- 7-Zip 17.05
- aria2 1.37.0
- azcopy 10.27.1
- bazel 8.0.1
- bazel 8.0.0
- bazelisk 1.25.0
- bsdtar 3.5.3 - available by 'tar' alias
- Curl 8.11.1
- Git 2.48.1
- Git LFS 3.6.1
- GitHub CLI 2.65.0
- Git 2.47.1
- Git LFS 3.6.0
- GitHub CLI 2.63.2
- GNU Tar 1.35 - available by 'gtar' alias
- GNU Wget 1.25.0
- gpg (GnuPG) 2.4.7
- gpg (GnuPG) 2.4.6
- jq 1.7.1
- OpenSSL 1.1.1w 11 Sep 2023
- Packer 1.11.2
- pkgconf 2.3.0
- Unxip 3.1
- yq 4.45.1
- yq 4.44.6
- zstd 1.5.6
### Tools
- AWS CLI 2.23.2
- AWS CLI 2.22.18
- AWS SAM CLI 1.132.0
- AWS Session Manager CLI 1.2.694.0
- Azure CLI 2.68.0
- Azure CLI 2.67.0
- Azure CLI (azure-devops) 1.0.1
- Bicep CLI 0.32.4
- Cmake 3.31.4
- CodeQL Action Bundle 2.20.1
- Cmake 3.31.2
- CodeQL Action Bundle 2.20.0
- Fastlane 2.226.0
- SwiftFormat 0.55.4
- Xcbeautify 2.17.0
- SwiftFormat 0.55.3
- Xcbeautify 2.16.0
- Xcode Command Line Tools 16.2.0.0.1.1733547573
- Xcodes 1.6.0
### Linters
- SwiftLint 0.58.2
- SwiftLint 0.57.1
### Browsers
- Safari 18.2 (20620.1.16.11.8)
- SafariDriver 18.2 (20620.1.16.11.8)
- Google Chrome 132.0.6834.84
- Google Chrome for Testing 132.0.6834.83
- ChromeDriver 132.0.6834.83
- Microsoft Edge 132.0.2957.115
- Microsoft Edge WebDriver 132.0.2957.115
- Mozilla Firefox 134.0.1
- Google Chrome 131.0.6778.140
- Google Chrome for Testing 131.0.6778.108
- ChromeDriver 131.0.6778.108
- Microsoft Edge 131.0.2903.99
- Microsoft Edge WebDriver 131.0.2903.87
- Mozilla Firefox 133.0.3
- geckodriver 0.35.0
- Selenium server 4.27.0
@@ -117,8 +117,7 @@
#### Ruby
- 3.1.6
- 3.2.6
- 3.3.7
- 3.4.1
- 3.3.6
#### Python
- 3.9.21
@@ -130,7 +129,7 @@
#### Node.js
- 18.20.5
- 20.18.1
- 22.13.0
- 22.12.0
#### Go
- 1.21.13
@@ -138,13 +137,13 @@
- 1.23.4
### Rust Tools
- Cargo 1.84.0
- Rust 1.84.0
- Rustdoc 1.84.0
- Cargo 1.83.0
- Rust 1.83.0
- Rustdoc 1.83.0
- Rustup 1.27.1
#### Packages
- Clippy 0.1.84
- Clippy 0.1.83
- Rustfmt 1.8.0-stable
### PowerShell Tools
@@ -152,7 +151,7 @@
#### PowerShell Modules
- Az: 12.4.0
- Pester: 5.7.1
- Pester: 5.6.1
- PSScriptAnalyzer: 1.23.0
### Xcode
@@ -196,10 +195,10 @@
| Simulator - watchOS 11.2 | watchsimulator11.2 | 16.2 |
| Simulator - visionOS 1.2 | xrsimulator1.2 | 15.4 |
| visionOS 1.2 | xros1.2 | 15.4 |
| visionOS 2.0 | xros2.0 | 16.0 |
| Simulator - visionOS 2.0 | xrsimulator2.0 | 16.0 |
| Simulator - visionOS 2.1 | xrsimulator2.1 | 16.1 |
| visionOS 2.0 | xros2.0 | 16.0 |
| visionOS 2.1 | xros2.1 | 16.1 |
| Simulator - visionOS 2.1 | xrsimulator2.1 | 16.1 |
| Simulator - visionOS 2.2 | xrsimulator2.2 | 16.2 |
| visionOS 2.2 | xros2.2 | 16.2 |
| DriverKit 23.5 | driverkit23.5 | 15.4 |
@@ -208,28 +207,28 @@
| DriverKit 24.2 | driverkit24.2 | 16.2 |
#### Installed Simulators
| OS | Simulators |
| ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| iOS 17.5 | iPhone 15<br>iPhone 15 Plus<br>iPhone 15 Pro<br>iPhone 15 Pro Max<br>iPhone SE (3rd generation)<br>iPad (10th generation)<br>iPad Air 11-inch (M2)<br>iPad Air 13-inch (M2)<br>iPad mini (6th generation)<br>iPad Pro 11-inch (M4)<br>iPad Pro 13-inch (M4) |
| iOS 18.0 | iPhone 16<br>iPhone 16 Plus<br>iPhone 16 Pro<br>iPhone 16 Pro Max<br>iPhone SE (3rd generation)<br>iPad (10th generation)<br>iPad Air 11-inch (M2)<br>iPad Air 13-inch (M2)<br>iPad mini (6th generation)<br>iPad Pro 11-inch (M4)<br>iPad Pro 13-inch (M4) |
| iOS 18.1 | iPhone 16<br>iPhone 16 Plus<br>iPhone 16 Pro<br>iPhone 16 Pro Max<br>iPhone SE (3rd generation)<br>iPad (10th generation)<br>iPad Air 11-inch (M2)<br>iPad Air 13-inch (M2)<br>iPad mini (A17 Pro)<br>iPad Pro 11-inch (M4)<br>iPad Pro 13-inch (M4) |
| iOS 18.2 | iPhone 16<br>iPhone 16 Plus<br>iPhone 16 Pro<br>iPhone 16 Pro Max<br>iPhone SE (3rd generation)<br>iPad (10th generation)<br>iPad Air 11-inch (M2)<br>iPad Air 13-inch (M2)<br>iPad mini (A17 Pro)<br>iPad Pro 11-inch (M4)<br>iPad Pro 13-inch (M4) |
| tvOS 17.5 | Apple TV<br>Apple TV 4K (3rd generation)<br>Apple TV 4K (3rd generation) (at 1080p) |
| tvOS 18.0 | Apple TV<br>Apple TV 4K (3rd generation)<br>Apple TV 4K (3rd generation) (at 1080p) |
| tvOS 18.1 | Apple TV<br>Apple TV 4K (3rd generation)<br>Apple TV 4K (3rd generation) (at 1080p) |
| tvOS 18.2 | Apple TV<br>Apple TV 4K (3rd generation)<br>Apple TV 4K (3rd generation) (at 1080p) |
| watchOS 10.5 | Apple Watch SE (40mm) (2nd generation)<br>Apple Watch SE (44mm) (2nd generation)<br>Apple Watch Series 5 (40mm)<br>Apple Watch Series 5 (44mm)<br>Apple Watch Series 6 (40mm)<br>Apple Watch Series 6 (44mm)<br>Apple Watch Series 7 (41mm)<br>Apple Watch Series 7 (45mm)<br>Apple Watch Series 9 (41mm)<br>Apple Watch Series 9 (45mm)<br>Apple Watch Ultra 2 (49mm) |
| watchOS 11.0 | Apple Watch SE (40mm) (2nd generation)<br>Apple Watch SE (44mm) (2nd generation)<br>Apple Watch Series 10 (42mm)<br>Apple Watch Series 10 (46mm)<br>Apple Watch Ultra 2 (49mm) |
| watchOS 11.1 | Apple Watch SE (40mm) (2nd generation)<br>Apple Watch SE (44mm) (2nd generation)<br>Apple Watch Series 10 (42mm)<br>Apple Watch Series 10 (46mm)<br>Apple Watch Ultra 2 (49mm) |
| watchOS 11.2 | Apple Watch SE (40mm) (2nd generation)<br>Apple Watch SE (44mm) (2nd generation)<br>Apple Watch Series 10 (42mm)<br>Apple Watch Series 10 (46mm)<br>Apple Watch Ultra 2 (49mm) |
| OS | Simulators |
| ------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| iOS 17.5 | iPhone 15<br>iPhone 15 Plus<br>iPhone 15 Pro<br>iPhone 15 Pro Max<br>iPhone SE (3rd generation)<br>iPad (10th generation)<br>iPad Air 11-inch (M2)<br>iPad Air 13-inch (M2)<br>iPad mini (6th generation)<br>iPad Pro 11-inch (M4)<br>iPad Pro 13-inch (M4) |
| iOS 18.0 | iPhone 16<br>iPhone 16 Plus<br>iPhone 16 Pro<br>iPhone 16 Pro Max<br>iPhone SE (3rd generation)<br>iPad (10th generation)<br>iPad Air 11-inch (M2)<br>iPad Air 13-inch (M2)<br>iPad mini (6th generation)<br>iPad Pro 11-inch (M4)<br>iPad Pro 13-inch (M4) |
| iOS 18.1 | iPhone 16<br>iPhone 16 Plus<br>iPhone 16 Pro<br>iPhone 16 Pro Max<br>iPhone SE (3rd generation)<br>iPad (10th generation)<br>iPad Air 11-inch (M2)<br>iPad Air 13-inch (M2)<br>iPad mini (A17 Pro)<br>iPad Pro 11-inch (M4)<br>iPad Pro 13-inch (M4) |
| iOS 18.2 | iPhone 16<br>iPhone 16 Plus<br>iPhone 16 Pro<br>iPhone 16 Pro Max<br>iPhone SE (3rd generation)<br>iPad (10th generation)<br>iPad Air 11-inch (M2)<br>iPad Air 13-inch (M2)<br>iPad mini (A17 Pro)<br>iPad Pro 11-inch (M4)<br>iPad Pro 13-inch (M4) |
| tvOS 17.5 | Apple TV<br>Apple TV 4K (3rd generation)<br>Apple TV 4K (3rd generation) (at 1080p) |
| tvOS 18.0 | Apple TV<br>Apple TV 4K (3rd generation)<br>Apple TV 4K (3rd generation) (at 1080p) |
| tvOS 18.1 | Apple TV<br>Apple TV 4K (3rd generation)<br>Apple TV 4K (3rd generation) (at 1080p) |
| tvOS 18.2 | Apple TV<br>Apple TV 4K (3rd generation)<br>Apple TV 4K (3rd generation) (at 1080p) |
| watchOS 10.5 | Apple Watch SE (40mm) (2nd generation)<br>Apple Watch SE (44mm) (2nd generation)<br>Apple Watch Series 9 (41mm)<br>Apple Watch Series 9 (45mm)<br>Apple Watch Ultra 2 (49mm) |
| watchOS 11.0 | Apple Watch SE (40mm) (2nd generation)<br>Apple Watch SE (44mm) (2nd generation)<br>Apple Watch Series 10 (42mm)<br>Apple Watch Series 10 (46mm)<br>Apple Watch Ultra 2 (49mm) |
| watchOS 11.1 | Apple Watch SE (40mm) (2nd generation)<br>Apple Watch SE (44mm) (2nd generation)<br>Apple Watch Series 10 (42mm)<br>Apple Watch Series 10 (46mm)<br>Apple Watch Ultra 2 (49mm) |
| watchOS 11.2 | Apple Watch SE (40mm) (2nd generation)<br>Apple Watch SE (44mm) (2nd generation)<br>Apple Watch Series 10 (42mm)<br>Apple Watch Series 10 (46mm)<br>Apple Watch Ultra 2 (49mm) |
### Android
| Package Name | Version |
| -------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Android Command Line Tools | 16.0 |
| Android Emulator | 35.3.11 |
| Android SDK Build-tools | 35.0.0 35.0.1 |
| Android SDK Platforms | android-35-ext14 (rev 1)<br>android-35 (rev 2)<br>android-34-ext8 (rev 1)<br>android-34-ext12 (rev 1)<br>android-34-ext11 (rev 1)<br>android-34-ext10 (rev 1)<br>android-34 (rev 3)<br>android-33-ext5 (rev 1)<br>android-33-ext4 (rev 1) |
| Android Emulator | 35.2.10 |
| Android SDK Build-tools | 35.0.0 |
| Android SDK Platforms | android-35-ext14 (rev 1)<br>android-35 (rev 1)<br>android-34-ext8 (rev 1)<br>android-34-ext12 (rev 1)<br>android-34-ext11 (rev 1)<br>android-34-ext10 (rev 1)<br>android-34 (rev 3)<br>android-33-ext5 (rev 1)<br>android-33-ext4 (rev 1) |
| Android SDK Platform-Tools | 35.0.2 |
| Android Support Repository | 47.0.0 |
| CMake | 3.31.0 |
+92 -110
View File
@@ -1,16 +1,18 @@
| Announcements |
|-|
| [macOS 15 (Sequoia) will be generally available in GitHub Actions and Azure DevOps from March, 18](https://github.com/actions/runner-images/issues/11486) |
| [[macOS 14] Xcode 16.0 will be replaced by Xcode 16.2 in macOS-14 images on January 6, 2025](https://github.com/actions/runner-images/issues/11203) |
| [[macOS] The macOS 12 Actions runner image will begin deprecation on 10/7/24 and will be fully unsupported by 12/3/24 for GitHub and by 01/13/25 for ADO](https://github.com/actions/runner-images/issues/10721) |
| [macOS 15 (Sequoia) is now available as a public beta in GitHub Actions](https://github.com/actions/runner-images/issues/10686) |
***
# macOS 15
- OS Version: macOS 15.3.1 (24D70)
- Kernel Version: Darwin 24.3.0
- Image Version: 20250312.1001
- OS Version: macOS 15.2 (24C101)
- Kernel Version: Darwin 24.2.0
- Image Version: 20250106.544
## Installed Software
### Language and Runtime
- .NET Core SDK: 8.0.101, 8.0.204, 8.0.303, 8.0.407, 9.0.102, 9.0.201
- .NET Core SDK: 8.0.101, 8.0.204, 8.0.303, 8.0.404
- Bash 3.2.57(1)-release
- Clang/LLVM 15.0.0
- Clang/LLVM (Homebrew) 18.1.8 - available on `$(brew --prefix llvm@18)/bin/clang`
@@ -20,75 +22,74 @@
- GNU Fortran 12 (Homebrew GCC 12.4.0) - available by `gfortran-12` alias
- GNU Fortran 13 (Homebrew GCC 13.3.0) - available by `gfortran-13` alias
- GNU Fortran 14 (Homebrew GCC 14.2.0_1) - available by `gfortran-14` alias
- Kotlin 2.1.10-release-473
- Node.js 22.14.0
- Perl 5.40.1
- Python3 3.13.2
- Ruby 3.3.7
- Kotlin 2.1.0-release-394
- Node.js 22.12.0
- Perl 5.40.0
- Python3 3.13.1
- Ruby 3.3.6
### Package Management
- Bundler 2.6.5
- Bundler 2.6.2
- Carthage 0.40.0
- CocoaPods 1.16.2
- Homebrew 4.4.24
- NPM 10.9.2
- Pip3 25.0 (python 3.13)
- Homebrew 4.4.14
- NPM 10.9.0
- Pip3 24.3.1 (python 3.13)
- Pipx 1.7.1
- RubyGems 3.6.5
- RubyGems 3.6.2
- Yarn 1.22.22
### Project Management
- Apache Ant 1.10.15
- Apache Maven 3.9.9
- Gradle 8.13
- Gradle 8.12
### Utilities
- 7-Zip 17.05
- aria2 1.37.0
- azcopy 10.28.0
- bazel 8.1.1
- azcopy 10.27.1
- bazel 8.0.0
- bazelisk 1.25.0
- bsdtar 3.5.3 - available by 'tar' alias
- Curl 8.7.1
- Git 2.48.1
- Git LFS 3.6.1
- GitHub CLI 2.68.1
- Git 2.47.1
- Git LFS 3.6.0
- GitHub CLI 2.64.0
- GNU Tar 1.35 - available by 'gtar' alias
- GNU Wget 1.25.0
- gpg (GnuPG) 2.4.7
- jq 1.7.1
- OpenSSL 1.1.1w 11 Sep 2023
- Packer 1.12.0
- pkgconf 2.4.3
- Packer 1.11.2
- pkgconf 2.3.0
- Unxip 3.1
- yq 4.45.1
- zstd 1.5.7
- Ninja 1.12.1
- yq 4.44.6
- zstd 1.5.6
### Tools
- AWS CLI 2.24.22
- AWS SAM CLI 1.135.0
- AWS Session Manager CLI 1.2.707.0
- Azure CLI 2.70.0
- AWS CLI 2.22.28
- AWS SAM CLI 1.132.0
- AWS Session Manager CLI 1.2.694.0
- Azure CLI 2.67.0
- Azure CLI (azure-devops) 1.0.1
- Bicep CLI 0.33.93
- Cmake 3.31.6
- CodeQL Action Bundle 2.20.1
- Bicep CLI 0.32.4
- Cmake 3.31.3
- CodeQL Action Bundle 2.20.0
- Fastlane 2.226.0
- SwiftFormat 0.55.5
- Xcbeautify 2.27.0
- SwiftFormat 0.55.4
- Xcbeautify 2.17.0
- Xcode Command Line Tools 16.2.0.0.1.1733547573
- Xcodes 1.6.0
### Linters
### Browsers
- Safari 18.3 (20620.2.4.11.5)
- SafariDriver 18.3 (20620.2.4.11.5)
- Google Chrome 134.0.6998.89
- Google Chrome for Testing 134.0.6998.88
- ChromeDriver 134.0.6998.88
- Selenium server 4.29.0
- Safari 18.2 (20620.1.16.11.8)
- SafariDriver 18.2 (20620.1.16.11.8)
- Google Chrome 131.0.6778.205
- Google Chrome for Testing 131.0.6778.204
- ChromeDriver 131.0.6778.204
- Selenium server 4.27.0
#### Environment variables
| Name | Value |
@@ -98,62 +99,59 @@
| GECKOWEBDRIVER | |
### Java
| Version | Environment Variable |
| -------------------- | -------------------- |
| 11.0.26+4 | JAVA_HOME_11_arm64 |
| 17.0.14+7 | JAVA_HOME_17_arm64 |
| 21.0.6+7.0 (default) | JAVA_HOME_21_arm64 |
| Version | Environment Variable |
| --------------------- | -------------------- |
| 11.0.25+9 | JAVA_HOME_11_arm64 |
| 17.0.13+11 | JAVA_HOME_17_arm64 |
| 21.0.5+11.0 (default) | JAVA_HOME_21_arm64 |
### Cached Tools
#### Ruby
- 3.1.6
- 3.2.7
- 3.3.7
- 3.4.2
- 3.2.6
- 3.3.6
#### Python
- 3.11.9
- 3.12.9
- 3.13.2
- 3.12.8
- 3.13.1
#### Node.js
- 18.20.7
- 20.18.3
- 22.14.0
- 18.20.5
- 20.18.1
- 22.12.0
#### Go
- 1.21.13
- 1.22.12
- 1.23.7
- 1.24.1
- 1.22.10
- 1.23.4
### Rust Tools
- Cargo 1.85.0
- Rust 1.85.0
- Rustdoc 1.85.0
- Rustup 1.28.1
- Cargo 1.83.0
- Rust 1.83.0
- Rustdoc 1.83.0
- Rustup 1.27.1
#### Packages
- Clippy 0.1.85
- Clippy 0.1.83
- Rustfmt 1.8.0-stable
### PowerShell Tools
- PowerShell 7.4.7
- PowerShell 7.4.6
#### PowerShell Modules
- Az: 12.4.0
- Pester: 5.7.1
- Pester: 5.6.1
- PSScriptAnalyzer: 1.23.0
### Xcode
| Version | Build | Path | Symlinks |
| -------------- | -------- | ----------------------------------- | ----------------------------------------------------------------------------------------- |
| 16.3 (beta) | 16E5121h | /Applications/Xcode_16.3_beta_2.app | /Applications/Xcode_16.3.0.app<br>/Applications/Xcode_16.3.app |
| 16.2 | 16C5032a | /Applications/Xcode_16.2.app | /Applications/Xcode_16.2.0.app |
| 16.1 | 16B40 | /Applications/Xcode_16.1.app | /Applications/Xcode_16.1.0.app |
| 16.0 (default) | 16A242d | /Applications/Xcode_16.app | /Applications/Xcode_16.0.0.app<br>/Applications/Xcode_16.0.app<br>/Applications/Xcode.app |
| 15.4 | 15F31d | /Applications/Xcode_15.4.app | /Applications/Xcode_15.4.0.app |
| Version | Build | Path | Symlinks |
| -------------- | -------- | ---------------------------- | ----------------------------------------------------------------------------------------- |
| 16.2 | 16C5032a | /Applications/Xcode_16.2.app | /Applications/Xcode_16.2.0.app |
| 16.1 | 16B40 | /Applications/Xcode_16.1.app | /Applications/Xcode_16.1.0.app |
| 16.0 (default) | 16A242d | /Applications/Xcode_16.app | /Applications/Xcode_16.0.0.app<br>/Applications/Xcode_16.0.app<br>/Applications/Xcode.app |
| 15.4 | 15F31d | /Applications/Xcode_15.4.app | /Applications/Xcode_15.4.0.app |
#### Installed SDKs
| SDK | SDK Name | Xcode Version |
@@ -162,85 +160,69 @@
| macOS 15.0 | macosx15.0 | 16.0 |
| macOS 15.1 | macosx15.1 | 16.1 |
| macOS 15.2 | macosx15.2 | 16.2 |
| macOS 15.4 | macosx15.4 | 16.3 |
| iOS 17.5 | iphoneos17.5 | 15.4 |
| iOS 18.0 | iphoneos18.0 | 16.0 |
| iOS 18.1 | iphoneos18.1 | 16.1 |
| iOS 18.2 | iphoneos18.2 | 16.2 |
| iOS 18.4 | iphoneos18.4 | 16.3 |
| Simulator - iOS 17.5 | iphonesimulator17.5 | 15.4 |
| Simulator - iOS 18.0 | iphonesimulator18.0 | 16.0 |
| Simulator - iOS 18.1 | iphonesimulator18.1 | 16.1 |
| Simulator - iOS 18.2 | iphonesimulator18.2 | 16.2 |
| Simulator - iOS 18.4 | iphonesimulator18.4 | 16.3 |
| tvOS 17.5 | appletvos17.5 | 15.4 |
| tvOS 18.0 | appletvos18.0 | 16.0 |
| tvOS 18.1 | appletvos18.1 | 16.1 |
| tvOS 18.2 | appletvos18.2 | 16.2 |
| tvOS 18.4 | appletvos18.4 | 16.3 |
| Simulator - tvOS 17.5 | appletvsimulator17.5 | 15.4 |
| Simulator - tvOS 18.0 | appletvsimulator18.0 | 16.0 |
| Simulator - tvOS 18.1 | appletvsimulator18.1 | 16.1 |
| Simulator - tvOS 18.2 | appletvsimulator18.2 | 16.2 |
| Simulator - tvOS 18.4 | appletvsimulator18.4 | 16.3 |
| watchOS 10.5 | watchos10.5 | 15.4 |
| watchOS 11.0 | watchos11.0 | 16.0 |
| watchOS 11.1 | watchos11.1 | 16.1 |
| watchOS 11.2 | watchos11.2 | 16.2 |
| watchOS 11.4 | watchos11.4 | 16.3 |
| Simulator - watchOS 10.5 | watchsimulator10.5 | 15.4 |
| Simulator - watchOS 11.0 | watchsimulator11.0 | 16.0 |
| Simulator - watchOS 11.1 | watchsimulator11.1 | 16.1 |
| Simulator - watchOS 11.2 | watchsimulator11.2 | 16.2 |
| Simulator - watchOS 11.4 | watchsimulator11.4 | 16.3 |
| visionOS 1.2 | xros1.2 | 15.4 |
| visionOS 2.0 | xros2.0 | 16.0 |
| visionOS 2.1 | xros2.1 | 16.1 |
| visionOS 2.2 | xros2.2 | 16.2 |
| visionOS 2.4 | xros2.4 | 16.3 |
| Simulator - visionOS 1.2 | xrsimulator1.2 | 15.4 |
| Simulator - visionOS 2.0 | xrsimulator2.0 | 16.0 |
| visionOS 2.0 | xros2.0 | 16.0 |
| Simulator - visionOS 2.1 | xrsimulator2.1 | 16.1 |
| visionOS 2.1 | xros2.1 | 16.1 |
| Simulator - visionOS 2.2 | xrsimulator2.2 | 16.2 |
| Simulator - visionOS 2.4 | xrsimulator2.4 | 16.3 |
| visionOS 2.2 | xros2.2 | 16.2 |
| DriverKit 23.5 | driverkit23.5 | 15.4 |
| DriverKit 24.0 | driverkit24.0 | 16.0 |
| DriverKit 24.1 | driverkit24.1 | 16.1 |
| DriverKit 24.2 | driverkit24.2 | 16.2 |
| DriverKit 24.4 | driverkit24.4 | 16.3 |
#### Installed Simulators
| OS | Simulators |
| ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| iOS 17.5 | iPhone 15<br>iPhone 15 Plus<br>iPhone 15 Pro<br>iPhone 15 Pro Max<br>iPhone SE (3rd generation)<br>iPad (10th generation)<br>iPad Air 11-inch (M2)<br>iPad Air 13-inch (M2)<br>iPad mini (6th generation)<br>iPad Pro 11-inch (M4)<br>iPad Pro 13-inch (M4) |
| iOS 18.0 | iPhone 16<br>iPhone 16 Plus<br>iPhone 16 Pro<br>iPhone 16 Pro Max<br>iPhone SE (3rd generation)<br>iPad (10th generation)<br>iPad Air 11-inch (M2)<br>iPad Air 13-inch (M2)<br>iPad mini (6th generation)<br>iPad Pro 11-inch (M4)<br>iPad Pro 13-inch (M4) |
| iOS 18.1 | iPhone 16<br>iPhone 16 Plus<br>iPhone 16 Pro<br>iPhone 16 Pro Max<br>iPhone SE (3rd generation)<br>iPad (10th generation)<br>iPad Air 11-inch (M2)<br>iPad Air 13-inch (M2)<br>iPad mini (A17 Pro)<br>iPad Pro 11-inch (M4)<br>iPad Pro 13-inch (M4) |
| iOS 18.2 | iPhone 16<br>iPhone 16 Plus<br>iPhone 16 Pro<br>iPhone 16 Pro Max<br>iPhone SE (3rd generation)<br>iPad (10th generation)<br>iPad Air 11-inch (M2)<br>iPad Air 13-inch (M2)<br>iPad mini (A17 Pro)<br>iPad Pro 11-inch (M4)<br>iPad Pro 13-inch (M4) |
| iOS 18.3 | iPhone 16<br>iPhone 16 Plus<br>iPhone 16 Pro<br>iPhone 16 Pro Max<br>iPhone 16e<br>iPhone SE (3rd generation)<br>iPad (10th generation)<br>iPad (A16)<br>iPad Air 11-inch (M2)<br>iPad Air 11-inch (M3)<br>iPad Air 13-inch (M2)<br>iPad Air 13-inch (M3)<br>iPad mini (A17 Pro)<br>iPad Pro 11-inch (M4)<br>iPad Pro 13-inch (M4) |
| iOS 18.4 | iPhone 16<br>iPhone 16 Plus<br>iPhone 16 Pro<br>iPhone 16 Pro Max<br>iPhone 16e<br>iPhone SE (3rd generation)<br>iPad (10th generation)<br>iPad Air 11-inch (M2)<br>iPad Air 13-inch (M2)<br>iPad mini (A17 Pro)<br>iPad Pro 11-inch (M4)<br>iPad Pro 13-inch (M4) |
| tvOS 17.5 | Apple TV<br>Apple TV 4K (3rd generation)<br>Apple TV 4K (3rd generation) (at 1080p) |
| tvOS 18.0 | Apple TV<br>Apple TV 4K (3rd generation)<br>Apple TV 4K (3rd generation) (at 1080p) |
| tvOS 18.1 | Apple TV<br>Apple TV 4K (3rd generation)<br>Apple TV 4K (3rd generation) (at 1080p) |
| tvOS 18.2 | Apple TV<br>Apple TV 4K (3rd generation)<br>Apple TV 4K (3rd generation) (at 1080p) |
| tvOS 18.4 | Apple TV<br>Apple TV 4K (3rd generation)<br>Apple TV 4K (3rd generation) (at 1080p) |
| watchOS 10.5 | Apple Watch SE (40mm) (2nd generation)<br>Apple Watch SE (44mm) (2nd generation)<br>Apple Watch Series 9 (41mm)<br>Apple Watch Series 9 (45mm)<br>Apple Watch Ultra 2 (49mm) |
| watchOS 11.0 | Apple Watch SE (40mm) (2nd generation)<br>Apple Watch SE (44mm) (2nd generation)<br>Apple Watch Series 10 (42mm)<br>Apple Watch Series 10 (46mm)<br>Apple Watch Ultra 2 (49mm) |
| watchOS 11.1 | Apple Watch SE (40mm) (2nd generation)<br>Apple Watch SE (44mm) (2nd generation)<br>Apple Watch Series 10 (42mm)<br>Apple Watch Series 10 (46mm)<br>Apple Watch Ultra 2 (49mm) |
| watchOS 11.2 | Apple Watch SE (40mm) (2nd generation)<br>Apple Watch SE (44mm) (2nd generation)<br>Apple Watch Series 10 (42mm)<br>Apple Watch Series 10 (46mm)<br>Apple Watch Ultra 2 (49mm) |
| watchOS 11.4 | Apple Watch SE (40mm) (2nd generation)<br>Apple Watch SE (44mm) (2nd generation)<br>Apple Watch Series 10 (42mm)<br>Apple Watch Series 10 (46mm)<br>Apple Watch Ultra 2 (49mm) |
| visionOS 1.2 | Apple Vision Pro |
| visionOS 2.0 | Apple Vision Pro |
| visionOS 2.1 | Apple Vision Pro |
| visionOS 2.2 | Apple Vision Pro |
| visionOS 2.3 | Apple Vision Pro |
| visionOS 2.4 | Apple Vision Pro |
| OS | Simulators |
| ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| iOS 17.5 | iPhone 15<br>iPhone 15 Plus<br>iPhone 15 Pro<br>iPhone 15 Pro Max<br>iPhone SE (3rd generation)<br>iPad (10th generation)<br>iPad Air 11-inch (M2)<br>iPad Air 13-inch (M2)<br>iPad mini (6th generation)<br>iPad Pro 11-inch (M4)<br>iPad Pro 13-inch (M4) |
| iOS 18.0 | iPhone 16<br>iPhone 16 Plus<br>iPhone 16 Pro<br>iPhone 16 Pro Max<br>iPhone SE (3rd generation)<br>iPad (10th generation)<br>iPad Air 11-inch (M2)<br>iPad Air 13-inch (M2)<br>iPad mini (6th generation)<br>iPad Pro 11-inch (M4)<br>iPad Pro 13-inch (M4) |
| iOS 18.1 | iPhone 16<br>iPhone 16 Plus<br>iPhone 16 Pro<br>iPhone 16 Pro Max<br>iPhone SE (3rd generation)<br>iPad (10th generation)<br>iPad Air 11-inch (M2)<br>iPad Air 13-inch (M2)<br>iPad mini (A17 Pro)<br>iPad Pro 11-inch (M4)<br>iPad Pro 13-inch (M4) |
| iOS 18.2 | iPhone 16<br>iPhone 16 Plus<br>iPhone 16 Pro<br>iPhone 16 Pro Max<br>iPhone SE (3rd generation)<br>iPad (10th generation)<br>iPad Air 11-inch (M2)<br>iPad Air 13-inch (M2)<br>iPad mini (A17 Pro)<br>iPad Pro 11-inch (M4)<br>iPad Pro 13-inch (M4) |
| tvOS 17.5 | Apple TV<br>Apple TV 4K (3rd generation)<br>Apple TV 4K (3rd generation) (at 1080p) |
| tvOS 18.0 | Apple TV<br>Apple TV 4K (3rd generation)<br>Apple TV 4K (3rd generation) (at 1080p) |
| tvOS 18.1 | Apple TV<br>Apple TV 4K (3rd generation)<br>Apple TV 4K (3rd generation) (at 1080p) |
| tvOS 18.2 | Apple TV<br>Apple TV 4K (3rd generation)<br>Apple TV 4K (3rd generation) (at 1080p) |
| watchOS 10.5 | Apple Watch SE (40mm) (2nd generation)<br>Apple Watch SE (44mm) (2nd generation)<br>Apple Watch Series 5 (40mm)<br>Apple Watch Series 5 (44mm)<br>Apple Watch Series 6 (40mm)<br>Apple Watch Series 6 (44mm)<br>Apple Watch Series 7 (41mm)<br>Apple Watch Series 7 (45mm)<br>Apple Watch Series 9 (41mm)<br>Apple Watch Series 9 (45mm)<br>Apple Watch Ultra 2 (49mm) |
| watchOS 11.0 | Apple Watch SE (40mm) (2nd generation)<br>Apple Watch SE (44mm) (2nd generation)<br>Apple Watch Series 10 (42mm)<br>Apple Watch Series 10 (46mm)<br>Apple Watch Ultra 2 (49mm) |
| watchOS 11.1 | Apple Watch SE (40mm) (2nd generation)<br>Apple Watch SE (44mm) (2nd generation)<br>Apple Watch Series 10 (42mm)<br>Apple Watch Series 10 (46mm)<br>Apple Watch Ultra 2 (49mm) |
| watchOS 11.2 | Apple Watch SE (40mm) (2nd generation)<br>Apple Watch SE (44mm) (2nd generation)<br>Apple Watch Series 10 (42mm)<br>Apple Watch Series 10 (46mm)<br>Apple Watch Ultra 2 (49mm) |
| visionOS 1.2 | Apple Vision Pro |
| visionOS 2.0 | Apple Vision Pro |
| visionOS 2.1 | Apple Vision Pro |
| visionOS 2.2 | Apple Vision Pro |
### Android
| Package Name | Version |
| -------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Android Command Line Tools | 16.0 |
| Android Emulator | 35.4.9 |
| Android SDK Build-tools | 35.0.0 35.0.1 |
| Android Emulator | 35.2.10 |
| Android SDK Build-tools | 35.0.0 |
| Android SDK Platforms | android-35-ext14 (rev 1)<br>android-35 (rev 2)<br>android-34-ext8 (rev 1)<br>android-34-ext12 (rev 1)<br>android-34-ext11 (rev 1)<br>android-34-ext10 (rev 1)<br>android-34 (rev 3)<br>android-33-ext5 (rev 1)<br>android-33-ext4 (rev 1) |
| Android SDK Platform-Tools | 35.0.2 |
| Android Support Repository | 47.0.0 |
+11 -1
View File
@@ -33,7 +33,17 @@ Write-Host "Configuring Xcode versions..."
$xcodeVersions | ForEach-Object {
Write-Host "Configuring Xcode $($_.link) ..."
Invoke-XcodeRunFirstLaunch -Version $_.link
Install-AdditionalSimulatorRuntimes -Version $_.link -Runtimes $_.install_runtimes
if ($_.install_runtimes -eq 'true') {
# Additional simulator runtimes are included by default for Xcode < 14
Install-AdditionalSimulatorRuntimes -Version $_.link
}
ForEach($runtime in $_.runtimes) {
Write-Host "Installing Additional runtimes for Xcode '$runtime' ..."
$xcodebuildPath = Get-XcodeToolPath -Version $_.link -ToolName 'xcodebuild'
Invoke-ValidateCommand "sudo $xcodebuildPath -downloadPlatform $runtime" | Out-Null
}
}
Invoke-XcodeRunFirstLaunch -Version $defaultXcode
@@ -90,12 +90,6 @@ if [[ ! "$(automationmodetool)" =~ "DOES NOT REQUIRE" ]]; then
exit 1
fi
# Fix sudoers file permissions
sudo chmod 440 /etc/sudoers.d/*
# Add NOPASSWD for the current user to sudoers
sudo sed -i '' 's/%admin ALL = (ALL) ALL/%admin ALL = (ALL) NOPASSWD: ALL/g' /etc/sudoers
# Create symlink for tests running
if [[ ! -d "/usr/local/bin" ]];then
sudo mkdir -p -m 775 /usr/local/bin
@@ -0,0 +1,44 @@
#!/bin/bash -e -o pipefail
################################################################################
## File: configure-max-files-limitation.sh
## Desc: Configure max files limitation
################################################################################
Launch_Daemons="/Library/LaunchDaemons"
# EOF in quotes to disable variable expansion
echo "Creating limit.maxfiles.plist"
cat > ${Launch_Daemons}/limit.maxfiles.plist << EOF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>limit.maxfiles</string>
<key>Program</key>
<string>/Users/runner/limit-maxfiles.sh</string>
<key>RunAtLoad</key>
<true/>
<key>ServiceIPC</key>
<false/>
</dict>
</plist>
EOF
# Creating script for applying workaround https://developer.apple.com/forums/thread/735798
cat > /Users/runner/limit-maxfiles.sh << EOF
#!/bin/bash
sudo launchctl limit maxfiles 256 unlimited
sudo launchctl limit maxfiles 65536 524288
EOF
echo "limit.maxfiles.sh permissions changing"
chmod +x /Users/runner/limit-maxfiles.sh
echo "limit.maxfiles.plist permissions changing"
chown root:wheel "${Launch_Daemons}/limit.maxfiles.plist"
chmod 0644 ${Launch_Daemons}/limit.maxfiles.plist
echo "Done, limit.maxfiles has been updated"
@@ -0,0 +1,39 @@
#!/bin/bash -e -o pipefail
################################################################################
## File: configure-network-interface-detection.sh
## Desc: add a Daemon to re-detect the attached network interfaces after vm is booted.
## Maintainer: @timsutton
## script was taken from https://github.com/timsutton/osx-vm-templates/blob/master/scripts/add-network-interface-detection.sh
################################################################################
PLIST=/Library/LaunchDaemons/sonoma.detectnewhardware.plist
cat <<EOF > ${PLIST}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>sonoma.detectnewhardware</string>
<key>ProgramArguments</key>
<array>
<string>/usr/sbin/networksetup</string>
<string>-detectnewhardware</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
EOF
# These should be already set as follows, but since they're required
# in order to load properly, we set them explicitly.
/bin/chmod 644 ${PLIST}
/usr/sbin/chown root:wheel ${PLIST}
: '
The MIT License (MIT)
Copyright (c) 2013-2017 Timothy Sutton
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
'
@@ -0,0 +1,30 @@
#!/bin/bash -e -o pipefail
################################################################################
## File: configure-screensaver.sh
## Desc: Configure screensaver
################################################################################
# set screensaver idleTime to 0, to prevent turning screensaver on
macUUID=$(ioreg -rd1 -c IOPlatformExpertDevice | grep -i "UUID" | cut -c27-62)
rm -rf /Users/$USERNAME/Library/Preferences/com.apple.screensaver.$macUUID.plist
rm -rf /Users/$USERNAME/Library/Preferences/ByHost/com.apple.screensaver.$macUUID.plist
rm -rf /Users/$USERNAME/Library/Preferences/com.apple.screensaver.plist
rm -rf /Users/$USERNAME/Library/Preferences/ByHost/com.apple.screensaver.plist
defaults write /Users/$USERNAME/Library/Preferences/com.apple.screensaver.$macUUID.plist idleTime -string 0
defaults write /Users/$USERNAME/Library/Preferences/com.apple.screensaver.$macUUID.plist CleanExit "YES"
defaults write /Users/$USERNAME/Library/Preferences/ByHost/com.apple.screensaver.$macUUID.plist idleTime -string 0
defaults write /Users/$USERNAME/Library/Preferences/ByHost/com.apple.screensaver.$macUUID.plist CleanExit "YES"
defaults write /Users/$USERNAME/Library/Preferences/com.apple.screensaver.plist idleTime -string 0
defaults write /Users/$USERNAME/Library/Preferences/com.apple.screensaver.plist CleanExit "YES"
defaults write /Users/$USERNAME/Library/Preferences/ByHost/com.apple.screensaver.plist idleTime -string 0
defaults write /Users/$USERNAME/Library/Preferences/ByHost/com.apple.screensaver.plist CleanExit "YES"
chown -R $USERNAME:staff /Users/$USERNAME/Library/Preferences/ByHost/
chown -R $USERNAME:staff /Users/$USERNAME/Library/Preferences/
killall cfprefsd
# Set values to 0, to prevent sleep at all
pmset -a displaysleep 0 sleep 0 disksleep 0
@@ -12,13 +12,20 @@ close_finder_window
# Remove Parallels Desktop
# https://github.com/actions/runner-images/issues/6105
# https://github.com/actions/runner-images/issues/10143
if is_SonomaX64 || is_VenturaX64 || is_SequoiaX64; then
if is_Monterey || is_SonomaX64 || is_VenturaX64; then
brew uninstall parallels
fi
# Put documentation to $HOME root
cp $HOME/image-generation/output/software-report/systeminfo.* $HOME/
# Put build vm assets (xamarin-selector) scripts to proper directory
if is_Monterey || is_Sonoma || is_Ventura; then
mkdir -p /usr/local/opt/$USER/scripts
mv $HOME/image-generation/assets/* /usr/local/opt/$USER/scripts
find /usr/local/opt/$USER/scripts -type f -name "*\.sh" -exec chmod +x {} \;
fi
# Remove fastlane cached cookie
rm -rf ~/.fastlane
@@ -19,13 +19,11 @@ systemValuesArray=(
"'kTCCServiceAccessibility','com.apple.Terminal',0,2,0,1,X'fade0c000000003000000001000000060000000200000012636f6d2e6170706c652e5465726d696e616c000000000003',NULL,NULL,'UNUSED',NULL,0,1591180502"
"'kTCCServiceAccessibility','/bin/bash',1,2,0,1,NULL,NULL,NULL,'UNUSED',NULL,0,1583997993"
"'kTCCServiceMicrophone','/usr/local/opt/runner/runprovisioner.sh',1,2,0,1,NULL,NULL,NULL,'UNUSED',NULL,NULL,1576661342"
"'kTCCServiceMicrophone','/usr/local/opt/runner/provisioner/provisioner',1,2,4,1,NULL,NULL,NULL,'UNUSED',NULL,NULL,1736467200"
"'kTCCServiceScreenCapture','/bin/bash',1,2,0,1,NULL,NULL,NULL,'UNUSED',NULL,0,1599831148"
"'kTCCServiceScreenCapture','com.devexpress.testcafe-browser-tools',0,2,3,1,X'fade0c0000000068000000010000000700000007000000080000001443fa4ca5141baeda21aeca1f50894673b440d4690000000800000014f8afcf6e69791b283e55bd0b03e39e422745770e0000000800000014bf4fc1aed64c871a49fc6bc9dd3878ce5d4d17c6',NULL,0,'UNUSED',NULL,0,1687952810"
"'kTCCServicePostEvent','/Library/Application Support/Veertu/Anka/addons/ankarund',1,2,4,1,NULL,NULL,0,'UNUSED',NULL,0,1644565949"
"'kTCCServiceScreenCapture','/usr/local/opt/runner/provisioner/provisioner',1,2,4,1,NULL,NULL,0,'UNUSED',NULL,0,1687786159"
"'kTCCServiceAppleEvents','/usr/local/opt/runner/provisioner/provisioner',1,2,3,1,NULL,NULL,0,'com.apple.finder',X'fade0c000000002c00000001000000060000000200000010636f6d2e6170706c652e66696e64657200000003',NULL,1592919552"
"'kTCCServiceAppleEvents','/bin/bash',1,2,0,1,NULL,NULL,0,'com.apple.systemevents',NULL,NULL,1591532620"
"'kTCCServiceAccessibility','/usr/local/opt/runner/provisioner/provisioner',1,2,4,1,NULL,NULL,0,'UNUSED',NULL,NULL,1592919552"
# Allow Full Disk Access for "Microsoft Defender for macOS" to bypass installation on-flight
"'kTCCServiceSystemPolicyAllFiles','com.microsoft.wdav',0,2,4,1,NULL,NULL,NULL,'UNUSED',NULL,0,1643970979"
@@ -56,7 +54,6 @@ userValuesArray=(
"'kTCCServiceAppleEvents','/bin/bash',1,2,0,1,NULL,NULL,0,'com.apple.finder',NULL,NULL,1592919552"
"'kTCCServiceMicrophone','com.apple.CoreSimulator.SimulatorTrampoline',0,2,0,1,NULL,NULL,NULL,'UNUSED',NULL,NULL,1576347152"
"'kTCCServiceMicrophone','/usr/local/opt/runner/runprovisioner.sh',1,2,0,1,NULL,NULL,NULL,'UNUSED',NULL,NULL,1576661342"
"'kTCCServiceMicrophone','/usr/local/opt/runner/provisioner/provisioner',1,2,4,1,NULL,NULL,NULL,'UNUSED',NULL,NULL,1736467200"
"'kTCCServiceUbiquity','/System/Library/PrivateFrameworks/PhotoLibraryServices.framework/Versions/A/Support/photolibraryd',1,2,5,1,NULL,NULL,NULL,'UNUSED',NULL,0,1619461750"
"'kTCCServiceUbiquity','com.apple.PassKitCore',0,2,5,1,NULL,NULL,NULL,'UNUSED',NULL,0,1619516250"
"'kTCCServiceAppleEvents','/Library/Application Support/Veertu/Anka/addons/ankarund',1,2,3,1,NULL,NULL,0,'com.apple.finder',X'fade0c000000002c00000001000000060000000200000010636f6d2e6170706c652e66696e64657200000003',NULL,1629294900"
@@ -0,0 +1,144 @@
#!/usr/bin/env ruby
################################################################################
## File: configure-xcode-simulators.rb
## Desc: List all simulators, find duplicate type and delete them.
## Maintainer: @vlas-voloshin
## script was taken from https://gist.github.com/vlas-voloshin/f9982128200345cd3fb7
################################################################################
class SimDevice
attr_accessor :runtime
attr_accessor :name
attr_accessor :identifier
attr_accessor :timestamp
def initialize(runtime, name, identifier, timestamp)
@runtime = runtime
@name = name
@identifier = identifier
@timestamp = timestamp
end
def to_s
return "#{@name} - #{@runtime} (#{@identifier}) [#{@timestamp}]"
end
def equivalent_to_device(device)
return @runtime == device.runtime && @name == device.name
end
end
# Executes a shell command and returns the result from stdout
def execute_simctl_command(command)
return %x[xcrun simctl #{command}]
end
# Retrieves the creation date/time of simulator with specified identifier
def simulator_creation_date(identifier)
directory = Dir.home() + "/Library/Developer/CoreSimulator/Devices/" + identifier
if (Dir.exists?(directory))
if (File::Stat.method_defined?(:birthtime))
return File.stat(directory).birthtime
else
return File.stat(directory).ctime
end
else
# Simulator directory is not yet created - treat it as if it was created right now (happens with new iOS 9 sims)
return Time.now
end
end
# Deletes specified simulator
def delete_device(device)
execute_simctl_command("delete #{device.identifier}")
end
puts("Searching for simulators...")
# Retrieve the list of existing simulators
devices = []
runtime = ""
execute_simctl_command("list devices").lines.each do |line|
case line[0]
when '='
# First header, skip it
when '-'
# Runtime header
runtime = line.scan(/-- (.+?) --/).flatten[0]
else
name_and_identifier = line.scan(/\s+(.+?) \(([\w\d]+-[\w\d]+-[\w\d-]+)\)/)[0]
name = name_and_identifier[0]
identifier = name_and_identifier[1]
timestamp = simulator_creation_date(identifier)
device = SimDevice.new(runtime, name, identifier, timestamp)
devices.push(device)
end
end
# Sort the simulators by their creation timestamp, ascending
devices = devices.sort { |a, b| a.timestamp <=> b.timestamp }
duplicates = {}
# Enumerate all devices except for the last one
for i in 0..devices.count-2
device = devices[i]
# Enumerate all devices *after* this one (created *later*)
for j in i+1..devices.count-1
potential_duplicate = devices[j]
if potential_duplicate.equivalent_to_device(device)
duplicates[potential_duplicate] = device
# Break out of the inner loop if a duplicate is found - if another duplicate exists,
# it will be found when this one is reached in the outer loop
break
end
end
end
if duplicates.count == 0
puts("You don't have duplicate simulators!")
exit()
end
puts("Looks like you have #{duplicates.count} duplicate simulator#{duplicates.count > 1 ? "s" : ""}:")
duplicates.each_pair do |duplicate, original|
puts
puts("#{duplicate}")
puts("--- duplicate of ---")
puts("#{original}")
end
puts
puts("Each duplicate was determined as the one created later than the 'original'.")
puts("Deleting...")
duplicates.each_key do |duplicate|
delete_device(duplicate)
end
puts("Done!")
=begin
MIT License
Copyright (c) 2015-2019 Vlas Voloshin
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
=end
@@ -0,0 +1,12 @@
#!/bin/bash -e -o pipefail
################################################################################
## File: install-apache.sh
## Desc: Install Apache HTTP Server
################################################################################
source ~/utils/utils.sh
brew_smart_install httpd
sudo sed -Ei '' 's/Listen .*/Listen 80/' $(brew --prefix)/etc/httpd/httpd.conf
invoke_tests "WebServers" "Apache"
@@ -6,20 +6,29 @@
source ~/utils/utils.sh
# Monterey needs future review:
# aliyun-cli, gnupg, helm have issues with building from the source code.
# Added gmp for now, because toolcache ruby needs its libs. Remove it when php starts to build from source code.
common_packages=$(get_toolset_value '.brew.common_packages[]')
for package in $common_packages; do
echo "Installing $package..."
if [[ $package == "packer" ]]; then
# Packer has been deprecated in Homebrew. Use tap to install Packer.
brew install hashicorp/tap/packer
if is_Monterey && [[ $package == "xcbeautify" ]]; then
# Pin the version on Monterey as 2.0.x requires Xcode >=15.0 which is not available on OS12
xcbeautify_path=$(download_with_retry "https://raw.githubusercontent.com/Homebrew/homebrew-core/d3653e83f9c029a3fddb828ac804b07ac32f7b3b/Formula/x/xcbeautify.rb")
brew install "$xcbeautify_path"
else
if (is_VenturaX64 || is_SonomaX64) && [[ $package == "tcl-tk@8" ]]; then
brew_smart_install "$package"
# Fix for https://github.com/actions/runner-images/issues/11074
ln -sf $(brew --prefix tcl-tk@8)/lib/libtcl8.6.dylib /usr/local/lib/libtcl8.6.dylib
ln -sf $(brew --prefix tcl-tk@8)/lib/libtk8.6.dylib /usr/local/lib/libtk8.6.dylib
if [[ $package == "packer" ]]; then
# Packer has been deprecated in Homebrew. Use tap to install Packer.
brew install hashicorp/tap/packer
else
brew_smart_install "$package"
if (is_VenturaX64 || is_SonomaX64) && [[ $package == "tcl-tk@8" ]]; then
brew_smart_install "$package"
# Fix for https://github.com/actions/runner-images/issues/11074
ln -sf $(brew --prefix tcl-tk@8)/lib/libtcl8.6.dylib /usr/local/lib/libtcl8.6.dylib
ln -sf $(brew --prefix tcl-tk@8)/lib/libtk8.6.dylib /usr/local/lib/libtk8.6.dylib
else
brew_smart_install "$package"
fi
fi
fi
done
@@ -27,26 +36,37 @@ done
cask_packages=$(get_toolset_value '.brew.cask_packages[]')
for package in $cask_packages; do
echo "Installing $package..."
if is_Arm64 && [[ $package == "parallels" ]]; then
echo "Parallels installation is skipped for arm64 architecture"
if is_Monterey && [[ $package == "virtualbox" ]]; then
# Do not update VirtualBox on macOS 12 due to the issue with VMs in gurumediation state which blocks Vagrant on macOS: https://github.com/actions/runner-images/issues/8730
# macOS host: Dropped all kernel extensions. VirtualBox relies fully on the hypervisor and vmnet frameworks provided by Apple now.
virtualbox_cask_path=$(download_with_retry "https://raw.githubusercontent.com/Homebrew/homebrew-cask/aa3c55951fc9d687acce43e5c0338f42c1ddff7b/Casks/virtualbox.rb")
brew install $virtualbox_cask_path
else
brew install --cask $package
if is_Arm64 && [[ $package == "parallels" ]]; then
echo "Parallels installation is skipped for arm64 architecture"
else
brew install --cask $package
fi
fi
done
# Load "Parallels International GmbH"
if is_SonomaX64 || is_VenturaX64 || is_SequoiaX64; then
if is_Monterey || is_SonomaX64 || is_VenturaX64; then
sudo kextload /Applications/Parallels\ Desktop.app/Contents/Library/Extensions/10.9/prl_hypervisor.kext || true
fi
# Execute AppleScript to change security preferences for macOS12, macOS13, macOS14 and macOS15
# Execute AppleScript to change security preferences for macOS12, macOS13 and macOS14
# System Preferences -> Security & Privacy -> General -> Unlock -> Allow -> Not now
if is_SonomaX64 || is_VenturaX64 || is_SequoiaX64; then
if is_Monterey || is_SonomaX64 || is_VenturaX64; then
for retry in {4..0}; do
echo "Executing AppleScript to change security preferences. Retries left: $retry"
{
set -e
osascript -e 'tell application "System Events" to get application processes where visible is true'
if is_Monterey; then
osascript $HOME/utils/confirm-identified-developers.scpt $USER_PASSWORD
fi
if is_VenturaX64; then
osascript $HOME/utils/confirm-identified-developers-macos13.scpt $USER_PASSWORD
fi
@@ -54,9 +74,6 @@ if is_SonomaX64 || is_VenturaX64 || is_SequoiaX64; then
if is_SonomaX64; then
osascript $HOME/utils/confirm-identified-developers-macos14.scpt $USER_PASSWORD
fi
if is_SequoiaX64; then
osascript $HOME/utils/confirm-identified-developers-macos15.scpt $USER_PASSWORD
fi
} && break
if [[ $retry -eq 0 ]]; then
@@ -70,10 +87,17 @@ if is_SonomaX64 || is_VenturaX64 || is_SequoiaX64; then
fi
# Validate "Parallels International GmbH" kext
if is_SonomaX64 || is_VenturaX64 || is_SequoiaX64; then
if is_Monterey || is_SonomaX64 || is_VenturaX64; then
echo "Closing System Settings window if it is still opened"
killall "System Settings" || true
if is_Monterey; then
echo "Closing System Preferences window if it is still opened"
killall "System Preferences" || true
fi
if is_SonomaX64 || is_VenturaX64; then
echo "Closing System Settings window if it is still opened"
killall "System Settings" || true
fi
echo "Checking parallels kexts"
dbName="/var/db/SystemPolicyConfiguration/KextPolicy"
@@ -0,0 +1,15 @@
#!/bin/bash -e -o pipefail
################################################################################
## File: install-compilable-brew-packages.sh
## Desc: Install compilable brew packages
################################################################################
source ~/utils/utils.sh
compilable_packages=$(get_toolset_value '.brew.compilable_packages[]')
for package in $compilable_packages; do
echo "Installing $package..."
brew_smart_install "$package"
done
invoke_tests "Common" "Compiled"
+12 -6
View File
@@ -23,12 +23,18 @@ dotnet_versions=($(get_toolset_value ".dotnet.arch[\"$arch\"].versions | .[]"))
for dotnet_version in ${dotnet_versions[@]}; do
release_url="https://raw.githubusercontent.com/dotnet/core/main/release-notes/${dotnet_version}/releases.json"
releases_json_file=$(download_with_retry "$release_url")
args_list+=(
$(cat $releases_json_file | \
jq -r '.releases[].sdk."version"' | \
grep -v -E '\-(preview|rc)\d*' | \
sort -r | rev | uniq -s 2 | rev)
)
if [[ $dotnet_version == "6.0" ]]; then
args_list+=(
$(cat $releases_json_file | jq -r 'first(.releases[].sdks[]?.version | select(contains("preview") or contains("rc") | not))')
)
else
args_list+=(
$(cat $releases_json_file | \
jq -r '.releases[].sdk."version"' | grep -v -E '\-(preview|rc)\d*' | \
sort -r | rev | uniq -s 2 | rev)
)
fi
done
for ARGS in ${args_list[@]}; do
@@ -0,0 +1,16 @@
#!/bin/bash -e -o pipefail
################################################################################
## File: install-golang.sh
## Desc: Install Go
################################################################################
source ~/utils/utils.sh
default_go_version=$(get_toolset_value '.go.default')
echo "Installing Go..."
brew_smart_install "go@${default_go_version}"
# Create symlinks to preserve backward compatibility. Symlinks are not created when non-latest go is being installed
ln -sf $(brew --prefix go@${default_go_version})/bin/* /usr/local/bin/
invoke_tests "Common" "Go"
@@ -0,0 +1,31 @@
#!/bin/bash -e -o pipefail
################################################################################
## File: install-haskell.sh
## Desc: Install Haskell
################################################################################
source ~/utils/utils.sh
curl --proto '=https' --tlsv1.2 -fsSL https://get-ghcup.haskell.org | bash
export PATH="$HOME/.ghcup/bin:$PATH"
echo 'export PATH="$PATH:$HOME/.ghcup/bin"' >> $HOME/.bashrc
# ghcup output looks like this "ghc 8.6.4 base-4.12.0.0 hls-powered", need to take all the first versions only(8.6.4 in that case) and avoid pre-release ones
availableVersions=$(ghcup list -t ghc -r | grep -v "prerelease" | awk '{print $2}')
# Install 3 latest major versions(For instance 8.6.5, 8.8.4, 8.10.2)
minorMajorVersions=$(echo "$availableVersions" | cut -d"." -f 1,2 | uniq | tail -n3)
for majorMinorVersion in $minorMajorVersions; do
fullVersion=$(echo "$availableVersions" | grep "$majorMinorVersion." | tail -n1)
echo "install ghc version $fullVersion..."
ghcup install $fullVersion
ghcup set $fullVersion
done
echo "install cabal..."
ghcup install-cabal
echo "Updating stack..."
ghcup install stack latest
invoke_tests "Haskell"
@@ -0,0 +1,24 @@
#!/bin/bash -e -o pipefail
################################################################################
## File: install-miniconda.sh
## Desc: Install Miniconda
################################################################################
source ~/utils/utils.sh
miniconda_installer_path=$(download_with_retry "https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-x86_64.sh")
chmod +x $miniconda_installer_path
sudo $miniconda_installer_path -b -p /usr/local/miniconda
# Chmod with full permissions recursively to avoid permissions restrictions
sudo chmod -R 777 /usr/local/miniconda
sudo ln -s /usr/local/miniconda/bin/conda /usr/local/bin/conda
if [[ -d $HOME/.conda ]]; then
sudo chown -R $USER $HOME/.conda
fi
echo "export CONDA=/usr/local/miniconda" >> $HOME/.bashrc
invoke_tests "Common" "Miniconda"
@@ -0,0 +1,23 @@
#!/bin/bash -e -o pipefail
################################################################################
## File: install-mongodb.sh
## Desc: Install MongoDB
################################################################################
source ~/utils/utils.sh
# MongoDB object-value database
# Install latest release version of MongoDB Community Edition
# https://docs.mongodb.com/manual/tutorial/install-mongodb-on-os-x
toolsetVersion=$(get_toolset_value '.mongodb.version')
brew tap mongodb/brew
versionToInstall=$(brew search --formulae /mongodb-community@$toolsetVersion/ | awk -F'/' '{print $3}' | tail -1)
echo "Installing mongodb $versionToInstall"
brew_smart_install $versionToInstall
if ! which mongo ; then
brew link $versionToInstall
fi
invoke_tests "Databases" "MongoDB"
+2 -2
View File
@@ -47,5 +47,5 @@ sudo mv $nunit3_console_wrapper "${MONO_VERSIONS_PATH}/${mono_version}/Commands/
echo "Creating short symlink '${mono_version_short}'..."
sudo ln -s ${MONO_VERSIONS_PATH}/${mono_version} ${MONO_VERSIONS_PATH}/${mono_version_short}
# Invoke tests and Mono
invoke_tests "Mono"
# Invoke tests for Xamarin and Mono
invoke_tests "Xamarin" "Mono"
@@ -16,4 +16,12 @@ echo Installing yarn...
yarn_installer_path=$(download_with_retry "https://yarnpkg.com/install.sh")
bash $yarn_installer_path
if is_Monterey; then
npm_global_packages=$(get_toolset_value '.npm.global_packages[].name')
for module in ${npm_global_packages[@]}; do
echo "Install $module"
npm install -g $module
done
fi
invoke_tests "Node" "Node.js"
@@ -0,0 +1,18 @@
#!/bin/bash -e -o pipefail
################################################################################
## File: install-pipx-packages.sh
## Desc: Install Pipx Packages
################################################################################
source ~/utils/utils.sh
export PATH="$PATH:/opt/pipx_bin"
pipx_packages=$(get_toolset_value '.pipx[].package')
for package in $pipx_packages; do
echo "Install $package into default python"
pipx install $package
done
invoke_tests "PipxPackages"
@@ -8,6 +8,30 @@ source ~/utils/utils.sh
echo "Installing Python Tooling"
if is_Monterey; then
echo "Install latest Python 2"
python2_pkg=$(download_with_retry "https://www.python.org/ftp/python/2.7.18/python-2.7.18-macosx10.9.pkg")
python2_pkg_sha256="c570f38b05dd8b112ad21b418cdf51a9816d62f9f44746452739d421be24d50c"
use_checksum_comparison $python2_pkg $python2_pkg_sha256
choice_changes_xml=$(mktemp /tmp/python2_choice_changes.xml.XXXXXX)
sudo installer -showChoiceChangesXML -pkg $python2_pkg -target / | tee $choice_changes_xml > /dev/null
# To avoid symlink conflicts, remove tools installation in /usr/local/bin using installer choices
xmllint --shell $choice_changes_xml <<EOF
cd //array/dict[string[text()='org.python.Python.PythonUnixTools-2.7']]/integer
set 0
save
EOF
sudo installer -applyChoiceChangesXML $choice_changes_xml -pkg $python2_pkg -target /
pip install --upgrade pip
echo "Install Python2 certificates"
bash -c "/Applications/Python\ 2.7/Install\ Certificates.command"
fi
# Close Finder window
close_finder_window
@@ -9,8 +9,8 @@ source ~/utils/utils.sh
echo "Updating RubyGems..."
gem update --system
# Temporarily install activesupport 7.2.2.1 due to compatibility issues with cocoapods https://github.com/CocoaPods/CocoaPods/issues/12081
gem install activesupport -v 7.2.2.1
# Temporarily install activesupport 7.0.8 due to compatibility issues with cocoapods https://github.com/CocoaPods/CocoaPods/issues/12081
gem install activesupport -v 7.0.8
gemsToInstall=$(get_toolset_value '.ruby.rubygems | .[]')
if [[ -n $gemsToInstall ]]; then
@@ -1,21 +0,0 @@
#!/bin/bash -e -o pipefail
################################################################################
## File: install-runner-package.sh
## Desc: Download and Install runner package
################################################################################
# Source the helpers for use with the script
source ~/utils/utils.sh
AGENT_PATH="/opt/runner-cache"
arch=$(get_arch)
download_url=$(resolve_github_release_asset_url "actions/runner" 'test("actions-runner-osx-'"$arch"'-[0-9]+\\.[0-9]{3}\\.[0-9]+\\.tar\\.gz$")' "latest" "$API_PAT")
archive_name="${download_url##*/}"
archive_path=$(download_with_retry "$download_url")
if [[ ! -d $AGENT_PATH ]]; then
sudo mkdir -p -m 775 $AGENT_PATH
sudo chown $USER:admin $AGENT_PATH
fi
sudo mv "$archive_path" "$AGENT_PATH/$archive_name"
@@ -18,6 +18,10 @@ CARGO_HOME=$HOME/.cargo
echo "Install common tools..."
rustup component add rustfmt clippy
if is_Monterey; then
cargo install bindgen-cli cbindgen cargo-audit cargo-outdated
fi
echo "Cleanup Cargo registry cached data..."
rm -rf $CARGO_HOME/registry/*
@@ -7,7 +7,15 @@
source ~/utils/utils.sh
echo "Installing Swiftlint..."
if is_Monterey; then
# SwiftLint now requires Xcode 15.3 or higher to build https://github.com/realm/SwiftLint/releases/tag/0.55.1
COMMIT=d91dabd087cb0b906c92a825df9e5e5e1a4f59f8
FORMULA_URL="https://raw.githubusercontent.com/Homebrew/homebrew-core/$COMMIT/Formula/s/swiftlint.rb"
brew_smart_install "swiftlint"
curl -fsSL $FORMULA_URL > $(find $(brew --repository) -name swiftlint.rb)
HOMEBREW_NO_AUTO_UPDATE=1 HOMEBREW_NO_INSTALL_FROM_API=1 brew install swiftlint
else
brew_smart_install "swiftlint"
fi
invoke_tests "Linters" "SwiftLint"
@@ -0,0 +1,52 @@
#!/bin/bash -e -o pipefail
################################################################################
## File: install-visualstudio.sh
## Desc: Install Visual Studio
################################################################################
source ~/utils/utils.sh
source ~/utils/xamarin-utils.sh
install_vsmac() {
local vsmac_version=$1
local vsmac_default=$2
if [[ $vsmac_version == "2019" ]]; then
vsmac_download_url=$(curl -fsSL "https://aka.ms/manifest/stable" | jq -r '.items[] | select(.genericName=="VisualStudioMac").url')
elif [[ $vsmac_version == "2022" ]]; then
vsmac_download_url=$(curl -fsSL "https://aka.ms/manifest/stable-2022" | jq -r '.items[] | select(.genericName=="VisualStudioMac").url')
elif [[ $vsmac_version == "preview" ]]; then
vsmac_download_url=$(curl -fsSL "https://aka.ms/manifest/preview" | jq -r '.items[] | select(.genericName=="VisualStudioMac").url')
else
vsmac_download_url=$(buildVSMacDownloadUrl $vsmac_version)
fi
echo "Installing Visual Studio ${vsmac_version} for Mac"
TMPMOUNT=$(/usr/bin/mktemp -d /tmp/visualstudio.XXXX)
mkdir -p "$TMPMOUNT/downloads"
vsmac_installer=$(download_with_retry $vsmac_download_url "$TMPMOUNT/downloads/${vsmac_download_url##*/}")
echo "Mounting Visual Studio..."
hdiutil attach $vsmac_installer -mountpoint $TMPMOUNT
echo "Moving Visual Studio to /Applications/..."
pushd $TMPMOUNT
tar cf - "./Visual Studio.app" | tar xf - -C /Applications/
if [[ $vsmac_version != $vsmac_default ]]; then
mv "/Applications/Visual Studio.app" "/Applications/Visual Studio ${vsmac_version}.app"
fi
popd
sudo hdiutil detach $TMPMOUNT
sudo rm -rf $TMPMOUNT
}
vsmac_versions=($(get_toolset_value '.xamarin.vsmac.versions[]'))
default_vsmac_version=$(get_toolset_value '.xamarin.vsmac.default')
for version in ${vsmac_versions[@]}; do
install_vsmac $version $default_vsmac_version
done
invoke_tests "Common" "VSMac"
@@ -0,0 +1,92 @@
#!/bin/bash -e -o pipefail
################################################################################
## File: install-xamarin.sh
## Desc: Install Xamarin
################################################################################
source ~/utils/utils.sh
source ~/utils/xamarin-utils.sh
mono_versions=($(get_toolset_value '.xamarin."mono_versions" | reverse | .[]'))
xamarin_ios_versions=($(get_toolset_value '.xamarin."ios_versions" | reverse | .[]'))
xamarin_mac_versions=($(get_toolset_value '.xamarin."mac_versions" | reverse | .[]'))
xamarin_android_versions=($(get_toolset_value '.xamarin."android_versions" | reverse | .[]'))
latest_sdk_symlink=$(get_toolset_value '.xamarin.bundles[0].symlink')
current_sdk_symlink=$(get_toolset_value '.xamarin."bundle_default"')
default_xcode_version=$(get_toolset_value '.xcode.default')
if [[ $current_sdk_symlink == "latest" ]]; then
current_sdk_symlink=$latest_sdk_symlink
fi
MONO_VERSIONS_PATH="/Library/Frameworks/Mono.framework/Versions"
IOS_VERSIONS_PATH="/Library/Frameworks/Xamarin.iOS.framework/Versions"
ANDROID_VERSIONS_PATH="/Library/Frameworks/Xamarin.Android.framework/Versions"
MAC_VERSIONS_PATH="/Library/Frameworks/Xamarin.Mac.framework/Versions"
TMPMOUNT=$(/usr/bin/mktemp -d /tmp/visualstudio.XXXX)
TMPMOUNT_FRAMEWORKS=$TMPMOUNT/frameworks
createBackupFolders
pushd $TMPMOUNT
# Download NUnit console
downloadNUnitConsole
# Install Mono sdks
for version in ${mono_versions[@]}; do installMono $version; done
sudo mv -v $TMPMOUNT_FRAMEWORKS/mono/* $MONO_VERSIONS_PATH/
# Install Xamarin.iOS sdks
for version in ${xamarin_ios_versions[@]}; do installXamarinIOS $version; done
sudo mv -v $TMPMOUNT_FRAMEWORKS/ios/* $IOS_VERSIONS_PATH/
# Install Xamarin.Mac sdks
for version in ${xamarin_mac_versions[@]}; do installXamarinMac $version; done
sudo mv -v $TMPMOUNT_FRAMEWORKS/mac/* $MAC_VERSIONS_PATH/
# Install Xamarin.Android sdks
for version in ${xamarin_android_versions[@]}; do installXamarinAndroid $version; done
sudo mv -v $TMPMOUNT_FRAMEWORKS/android/* $ANDROID_VERSIONS_PATH/
# Create bundles
bundles_count=$(get_toolset_value '.xamarin.bundles | length')
for ((bundle_index=0; bundle_index<bundles_count; bundle_index++)); do
symlink=$(get_toolset_value ".xamarin.bundles[$bundle_index].symlink")
mono=$(get_toolset_value ".xamarin.bundles[$bundle_index].mono")
ios=$(get_toolset_value ".xamarin.bundles[$bundle_index].ios")
mac=$(get_toolset_value ".xamarin.bundles[$bundle_index].mac")
android=$(get_toolset_value ".xamarin.bundles[$bundle_index].android")
createBundle $symlink $mono $ios $mac $android
done
# Symlinks for the latest Xamarin bundle
createBundleLink $latest_sdk_symlink "Latest"
createBundleLink $current_sdk_symlink "Current"
#
# Fix nuget in some mono versions because of known bugs
#
# Creating UWP Shim to hack UWP build failure
createUWPShim
popd
echo "Clean up packages..."
sudo rm -rf $TMPMOUNT
# Fix Xamarin issue with Xcode symlink: https://github.com/xamarin/xamarin-macios/issues/9960
PREFERENCES_XAMARIN_DIR="${HOME}/Library/Preferences/Xamarin"
mkdir -p $PREFERENCES_XAMARIN_DIR
/usr/libexec/PlistBuddy -c "add :AppleSdkRoot string /Applications/Xcode_${default_xcode_version}.app" $PREFERENCES_XAMARIN_DIR/Settings.plist
# Temporary workaround to recreate nuget.config file with a correct feed https://github.com/actions/runner-images/issues/5768
rm -rf $HOME/.config/NuGet/NuGet.Config
nuget config
# Temporary workaround to point Mono to the proper NUnit console
sudo sed -Ei '' 's/3.6.0/3.6.1/' /Library/Frameworks/Mono.framework/Versions/Current/Commands/nunit3-console
invoke_tests "Xamarin"
@@ -13,8 +13,10 @@ Import-Module "$PSScriptRoot/SoftwareReport.Common.psm1" -DisableNameChecking
Import-Module "$PSScriptRoot/SoftwareReport.Xcode.psm1" -DisableNameChecking
Import-Module "$PSScriptRoot/SoftwareReport.Android.psm1" -DisableNameChecking
Import-Module "$PSScriptRoot/SoftwareReport.Java.psm1" -DisableNameChecking
Import-Module "$PSScriptRoot/SoftwareReport.Xamarin.psm1" -DisableNameChecking
Import-Module "$PSScriptRoot/SoftwareReport.Toolcache.psm1" -DisableNameChecking
Import-Module "$PSScriptRoot/SoftwareReport.Browsers.psm1" -DisableNameChecking
Import-Module "$PSScriptRoot/SoftwareReport.WebServers.psm1" -DisableNameChecking
Import-Module "$PSScriptRoot/SoftwareReport.Helpers.psm1" -DisableNameChecking
Import-Module "$PSScriptRoot/../helpers/Common.Helpers.psm1"
Import-Module "$PSScriptRoot/../helpers/Xcode.Helpers.psm1"
@@ -36,16 +38,37 @@ $languageAndRuntime.AddToolVersion("Bash", $(Get-BashVersion))
$languageAndRuntime.AddNodes($(Get-ClangLLVMVersions))
$languageAndRuntime.AddNodes($(Get-GccVersions))
$languageAndRuntime.AddNodes($(Get-FortranVersions))
if ((-not $os.IsVentura) -and (-not $os.IsSonoma) -and (-not $os.IsSequoia)) {
$languageAndRuntime.AddToolVersion("Julia", $(Get-JuliaVersion))
}
$languageAndRuntime.AddToolVersion("Kotlin", $(Get-KotlinVersion))
if ((-not $os.IsVentura) -and (-not $os.IsSonoma) -and (-not $os.IsSequoia)) {
$languageAndRuntime.AddToolVersion("Go", $(Get-GoVersion))
}
if ((-not $os.IsSequoia)) {
$languageAndRuntime.AddToolVersion("Mono", $(Get-MonoVersion))
}
$languageAndRuntime.AddToolVersion("Node.js", $(Get-NodeVersion))
if ((-not $os.IsVentura) -and (-not $os.IsSonoma) -and (-not $os.IsSequoia)) {
$languageAndRuntime.AddToolVersion("MSBuild", $(Get-MSBuildVersion))
$languageAndRuntime.AddToolVersion("NVM", $(Get-NVMVersion))
$languageAndRuntime.AddToolVersionsListInline("NVM - Cached node versions", $(Get-NVMNodeVersionList), '^\d+')
}
$languageAndRuntime.AddToolVersion("Perl", $(Get-PerlVersion))
if ((-not $os.IsVenturaArm64) -and (-not $os.IsSonomaArm64) -and (-not $os.IsSequoiaArm64)) {
$languageAndRuntime.AddToolVersion("PHP", $(Get-PHPVersion))
}
if ((-not $os.IsVentura) -and (-not $os.IsSonoma) -and (-not $os.IsSequoia)) {
$languageAndRuntime.AddToolVersion("Python", $(Get-PythonVersion))
}
$languageAndRuntime.AddToolVersion("Python3", $(Get-Python3Version))
if ((-not $os.IsVentura) -and (-not $os.IsSonoma) -and (-not $os.IsSequoia)) {
$languageAndRuntime.AddToolVersion("R", $(Get-RVersion))
}
$languageAndRuntime.AddToolVersion("Ruby", $(Get-RubyVersion))
# Package Management
@@ -57,23 +80,37 @@ if ((-not $os.IsVenturaArm64) -and (-not $os.IsSonomaArm64) -and (-not $os.IsSeq
$packageManagement.AddToolVersion("Composer", $(Get-ComposerVersion))
}
$packageManagement.AddToolVersion("Homebrew", $(Get-HomebrewVersion))
if ((-not $os.IsVentura) -and (-not $os.IsSonoma) -and (-not $os.IsSequoia)) {
$packageManagement.AddToolVersion("Miniconda", $(Get-CondaVersion))
}
$packageManagement.AddToolVersion("NPM", $(Get-NPMVersion))
if ((-not $os.IsSequoia)) {
$packageManagement.AddToolVersion("NuGet", $(Get-NuGetVersion))
}
$packageManagement.AddToolVersion("Pip3", $(Get-Pip3Version))
if ((-not $os.IsVentura) -and (-not $os.IsSonoma) -and (-not $os.IsSequoia)) {
$packageManagement.AddToolVersion("Pip", $(Get-PipVersion -Version 2))
}
$packageManagement.AddToolVersion("Pip3", $(Get-PipVersion -Version 3))
$packageManagement.AddToolVersion("Pipx", $(Get-PipxVersion))
$packageManagement.AddToolVersion("RubyGems", $(Get-RubyGemsVersion))
if ((-not $os.IsVenturaArm64) -and (-not $os.IsSonoma) -and (-not $os.IsSequoia)) {
$packageManagement.AddToolVersion("Vcpkg", $(Get-VcpkgVersion))
}
$packageManagement.AddToolVersion("Yarn", $(Get-YarnVersion))
if ((-not $os.IsVentura) -and (-not $os.IsSonoma) -and (-not $os.IsSequoia)) {
$packageManagement.AddNode($(Build-PackageManagementEnvironmentTable))
}
# Project Management
$projectManagement = $installedSoftware.AddHeader("Project Management")
$projectManagement.AddToolVersion("Apache Ant", $(Get-ApacheAntVersion))
$projectManagement.AddToolVersion("Apache Maven", $(Get-MavenVersion))
$projectManagement.AddToolVersion("Gradle", $(Get-GradleVersion))
if ((-not $os.IsVentura) -and (-not $os.IsSonoma) -and (-not $os.IsSequoia)) {
$projectManagement.AddToolVersion("Sbt", $(Get-SbtVersion))
}
# Utilities
$utilities = $installedSoftware.AddHeader("Utilities")
@@ -90,27 +127,62 @@ $utilities.AddToolVersion("GitHub CLI", $(Get-GitHubCLIVersion))
$utilities.AddToolVersion("GNU Tar", $(Get-GnuTarVersion))
$utilities.AddToolVersion("GNU Wget", $(Get-WgetVersion))
$utilities.AddToolVersion("gpg (GnuPG)", $(Get-GPGVersion))
if ((-not $os.IsVentura) -and (-not $os.IsSonoma) -and (-not $os.IsSequoia)) {
$utilities.AddToolVersion("ImageMagick", $(Get-ImageMagickVersion))
}
$utilities.AddToolVersion("jq", $(Get-JqVersion))
if ((-not $os.IsVentura) -and (-not $os.IsSonoma) -and (-not $os.IsSequoia)) {
$utilities.AddToolVersion("mongo", $(Get-MongoVersion))
$utilities.AddToolVersion("mongod", $(Get-MongodVersion))
}
$utilities.AddToolVersion("OpenSSL", $(Get-OpenSSLVersion))
$utilities.AddToolVersion("Packer", $(Get-PackerVersion))
$utilities.AddToolVersion("pkgconf", $(Get-PKGConfVersion))
if ((-not $os.IsVentura) -and (-not $os.IsSonoma) -and (-not $os.IsSequoia)) {
$utilities.AddToolVersion("PostgreSQL", $(Get-PostgresServerVersion))
$utilities.AddToolVersion("psql (PostgreSQL)", $(Get-PostgresClientVersion))
$utilities.AddToolVersion("Sox", $(Get-SoxVersion))
$utilities.AddToolVersion("Subversion (SVN)", $(Get-SVNVersion))
$utilities.AddToolVersion("Switchaudio-osx", $(Get-SwitchAudioOsxVersion))
}
if ($os.IsMonterey) {
$utilities.AddToolVersion("Vagrant", $(Get-VagrantVersion))
$utilities.AddToolVersion("VirtualBox", $(Get-VirtualBoxVersion))
}
$utilities.AddToolVersion("Unxip", $(Get-UnxipVersion))
$utilities.AddToolVersion("yq", $(Get-YqVersion))
$utilities.AddToolVersion("zstd", $(Get-ZstdVersion))
$utilities.AddToolVersion("Ninja", $(Get-NinjaVersion))
# Tools
$tools = $installedSoftware.AddHeader("Tools")
if ((-not $os.IsVentura) -and (-not $os.IsSonoma) -and (-not $os.IsSequoia)) {
$tools.AddToolVersion("App Center CLI", $(Get-AppCenterCLIVersion))
}
$tools.AddToolVersion("AWS CLI", $(Get-AWSCLIVersion))
$tools.AddToolVersion("AWS SAM CLI", $(Get-AWSSAMCLIVersion))
$tools.AddToolVersion("AWS Session Manager CLI", $(Get-AWSSessionManagerCLIVersion))
$tools.AddToolVersion("Azure CLI", $(Get-AzureCLIVersion))
$tools.AddToolVersion("Azure CLI (azure-devops)", $(Get-AzureDevopsVersion))
$tools.AddToolVersion("Bicep CLI", $(Get-BicepVersion))
if ((-not $os.IsVentura) -and (-not $os.IsSonoma) -and (-not $os.IsSequoia)) {
$tools.AddToolVersion("Cabal", $(Get-CabalVersion))
}
$tools.AddToolVersion("Cmake", $(Get-CmakeVersion))
$tools.AddToolVersion("CodeQL Action Bundle", $(Get-CodeQLBundleVersion))
if ($os.IsMonterey) {
$tools.AddToolVersion("Colima", $(Get-ColimaVersion))
}
$tools.AddToolVersion("Fastlane", $(Get-FastlaneVersion))
if ((-not $os.IsVentura) -and (-not $os.IsSonoma) -and (-not $os.IsSequoia)) {
$tools.AddToolVersion("GHC", $(Get-GHCVersion))
$tools.AddToolVersion("GHCup", $(Get-GHCupVersion))
$tools.AddToolVersion("Jazzy", $(Get-JazzyVersion))
$tools.AddToolVersion("Stack", $(Get-StackVersion))
}
$tools.AddToolVersion("SwiftFormat", $(Get-SwiftFormatVersion))
if ((-not $os.IsVentura) -and (-not $os.IsSonoma) -and (-not $os.IsSequoia)) {
$tools.AddToolVersion("Swig", $(Get-SwigVersion))
}
$tools.AddToolVersion("Xcbeautify", $(Get-XcbeautifyVersion))
$tools.AddToolVersion("Xcode Command Line Tools", $(Get-XcodeCommandLineToolsVersion))
$tools.AddToolVersion("Xcodes", $(Get-XcodesVersion))
@@ -120,6 +192,9 @@ $linters = $installedSoftware.AddHeader("Linters")
if ((-not $os.IsVenturaArm64) -and (-not $os.IsSonomaArm64) -and (-not $os.IsSequoiaArm64)) {
$linters.AddToolVersion("SwiftLint", $(Get-SwiftLintVersion))
}
if ((-not $os.IsVentura) -and (-not $os.IsSonoma) -and (-not $os.IsSequoia)) {
$linters.AddToolVersion("Yamllint", $(Get-YamllintVersion))
}
# Browsers
$browsers = $installedSoftware.AddHeader("Browsers")
@@ -142,6 +217,12 @@ $rust.AddToolVersion("Rustdoc", $(Get-RustdocVersion))
$rust.AddToolVersion("Rustup", $(Get-RustupVersion))
$rustPackages = $rust.AddHeader("Packages")
if ((-not $os.IsVentura) -and (-not $os.IsSonoma) -and (-not $os.IsSequoia)) {
$rustPackages.AddToolVersion("Bindgen", $(Get-Bindgen))
$rustPackages.AddToolVersion("Cargo-audit", $(Get-Cargoaudit))
$rustPackages.AddToolVersion("Cargo-outdated", $(Get-Cargooutdated))
$rustPackages.AddToolVersion("Cbindgen", $(Get-Cbindgen))
}
$rustPackages.AddToolVersion("Clippy", $(Get-RustClippyVersion))
$rustPackages.AddToolVersion("Rustfmt", $(Get-RustfmtVersion))
@@ -152,6 +233,33 @@ $powerShell.AddToolVersion("PowerShell", $(Get-PowershellVersion))
$powerShellModules = $powerShell.AddHeader("PowerShell Modules")
$powerShellModules.AddNodes($(Get-PowerShellModules))
# Web Servers
if ((-not $os.IsVentura) -and (-not $os.IsSonoma) -and (-not $os.IsSequoia)) {
$webServers = $installedSoftware.AddHeader("Web Servers")
$webServers.AddTable($(Build-WebServersSection))
}
# Xamarin section
if ((-not $os.IsVentura) -and (-not $os.IsSonoma) -and (-not $os.IsSequoia)) {
$xamarin = $installedSoftware.AddHeader("Xamarin")
$vsForMac = $xamarin.AddHeader("Visual Studio for Mac")
$vsForMac.AddTable($(Build-VSMacTable))
$note =
@'
To use Visual Studio 2019 by default rename the app:
mv "/Applications/Visual Studio.app" "/Applications/Visual Studio 2022.app"
mv "/Applications/Visual Studio 2019.app" "/Applications/Visual Studio.app"
'@
$vsForMacNotes = $vsForMac.AddHeader("Notes")
$vsForMacNotes.AddNote($note)
$xamarinBundles = $xamarin.AddHeader("Xamarin bundles")
$xamarinBundles.AddTable($(Build-XamarinTable))
$unitTestFramework = $xamarin.AddHeader("Unit Test Framework")
$unitTestFramework.AddToolVersion("NUnit", $(Get-NUnitVersion))
}
# Xcode section
$xcode = $installedSoftware.AddHeader("Xcode")
# First run doesn't provide full data about devices and runtimes
@@ -159,6 +267,10 @@ Get-XcodeInfoList | Out-Null
$xcodeInfo = Get-XcodeInfoList
$xcode.AddTable($(Build-XcodeTable $xcodeInfo))
if ((-not $os.IsVentura) -and (-not $os.IsSonoma) -and (-not $os.IsSequoia)) {
$xcodeTools = $xcode.AddHeader("Xcode Support Tools")
$xcodeTools.AddNodes($(Build-XcodeSupportToolsSection))
}
$installedSdks = $xcode.AddHeader("Installed SDKs")
$installedSdks.AddTable($(Build-XcodeSDKTable $xcodeInfo))
@@ -174,15 +286,20 @@ $android.AddTable($androidTable)
$androidEnv = $android.AddHeader("Environment variables")
$androidEnv.AddTable($(Build-AndroidEnvironmentTable))
if ($os.IsSonoma -or $os.IsVentura -or $os.IsSequoiaX64) {
if ($os.IsMonterey) {
$miscellaneous = $installedSoftware.AddHeader("Miscellaneous")
$miscellaneous.AddToolVersion("libXext", $(Get-LibXextVersion))
$miscellaneous.AddToolVersion("libXft", $(Get-LibXftVersion))
$miscellaneous.AddToolVersion("Tcl/Tk", $(Get-TclTkVersion))
$miscellaneous.AddToolVersion("Zlib", $(Get-ZlibVersion))
}
if ($os.IsSonoma -or $os.IsVentura) {
$miscellaneous = $installedSoftware.AddHeader("Miscellaneous")
$miscellaneous.AddToolVersion("Tcl/Tk", $(Get-TclTkVersion))
}
if ($os.IsSonomaX64 -or $os.IsVenturaX64 -or $os.IsSequoiaX64) {
if ($os.IsMonterey -or $os.IsSonomaX64 -or $os.IsVenturaX64) {
Write-Host "Adding environment variables for parallels"
@@ -10,6 +10,20 @@ function Get-DotnetVersionList {
return $sdkRawList | ForEach-Object { Take-Part $_ -Part 0 }
}
function Get-GoVersion {
$goOutput = Run-Command "go version" | Take-Part -Part 2
if ($goOutput.StartsWith("go")) {
$goOutput = $goOutput.Substring(2)
}
return $goOutput
}
function Get-RVersion {
$rVersion = Run-Command "R --version | grep 'R version'" | Take-Part -Part 2
return $rVersion
}
function Get-RustVersion {
$rustVersion = Run-Command "rustc --version" | Take-Part -Part 1
return $rustVersion
@@ -35,6 +49,26 @@ function Get-RustClippyVersion {
return $version
}
function Get-Bindgen {
$bindgenVersion = Run-Command "bindgen --version" | Take-Part -Part 1
return $bindgenVersion
}
function Get-Cbindgen {
$cbindgenVersion = Run-Command "cbindgen --version" | Take-Part -Part 1
return $cbindgenVersion
}
function Get-Cargooutdated {
$cargoOutdatedVersion = Run-Command "cargo outdated --version" | Take-Part -Part 1
return $cargoOutdatedVersion
}
function Get-Cargoaudit {
$cargoAuditVersion = Run-Command "cargo-audit --version" | Take-Part -Part 1
return $cargoAuditVersion
}
function Get-RustupVersion {
$rustupVersion = Run-Command "rustup --version" | Select-Object -First 1 | Take-Part -Part 1
return $rustupVersion
@@ -80,8 +114,20 @@ function Get-ClangLLVMVersions {
)
}
function Get-Pip3Version {
$command = "pip3 --version"
function Get-NVMVersion {
$nvmPath = Join-Path $env:HOME ".nvm" "nvm.sh"
$nvmInitCommand = ". ${nvmPath} > /dev/null 2>&1 || true"
$nodejsVersion = Run-Command "${nvmInitCommand} && nvm --version"
return $nodejsVersion
}
function Get-PipVersion {
param (
[Parameter(Mandatory)][ValidateRange(2, 3)]
[int] $Version
)
$command = If ($Version -eq 2) { "/Library/Frameworks/Python.framework/Versions/2.7/bin/pip --version" } Else { "pip3 --version" }
$commandOutput = Run-Command $command
$versionPart1 = $commandOutput | Take-Part -Part 1
$versionPart2 = $commandOutput | Take-Part -Part 4
@@ -94,6 +140,14 @@ function Get-PipxVersion {
return $pipxVersion
}
function Get-NVMNodeVersionList {
$nvmPath = Join-Path $env:HOME ".nvm" "nvm.sh"
$nvmInitCommand = ". ${nvmPath} > /dev/null 2>&1 || true"
$nodejsVersionsRaw = Run-Command "${nvmInitCommand} && nvm ls"
$nodeVersions = $nodejsVersionsRaw | ForEach-Object { $_.TrimStart(" ").TrimEnd(" *") } | Where-Object { $_.StartsWith("v") }
return $nodeVersions | ForEach-Object { $_.TrimStart("v") }
}
function Build-OSInfoSection {
param (
[string] $ImageName
@@ -119,6 +173,12 @@ function Get-MonoVersion {
return $monoVersion
}
function Get-MSBuildVersion {
$msbuildVersion = Run-Command "msbuild -version" | Select-Object -Last 1
$monoVersion = Get-MonoVersion
return "$msbuildVersion (Mono $monoVersion)"
}
function Get-NodeVersion {
$nodeVersion = Run-Command "node --version"
return $nodeVersion.TrimStart("v")
@@ -129,6 +189,11 @@ function Get-PerlVersion {
return $version
}
function Get-PythonVersion {
$pythonVersion = Run-Command "/Library/Frameworks/Python.framework/Versions/2.7/bin/python --version"
return ($pythonVersion -replace "^Python").Trim()
}
function Get-Python3Version {
$python3Version = Run-Command "python3 --version"
return ($python3Version -replace "^Python").Trim()
@@ -144,6 +209,11 @@ function Get-PHPVersion {
return ($PHPVersion -replace "^PHP").Trim()
}
function Get-JuliaVersion {
$juliaVersion = Run-Command "julia --version" | Take-Part -Part 0,2
return ($juliaVersion -replace "^Julia").Trim()
}
function Get-BundlerVersion {
$bundlerVersion = Run-Command "bundle --version"
return ($bundlerVersion -replace "^Bundler version").Trim()
@@ -179,6 +249,11 @@ function Get-NuGetVersion {
return $nugetVersion
}
function Get-CondaVersion {
$condaVersion = Run-Command "conda --version"
return ($condaVersion -replace "^conda").Trim()
}
function Get-RubyGemsVersion {
$rubyGemsVersion = Run-Command "gem --version"
return $rubyGemsVersion
@@ -230,6 +305,11 @@ function Get-WgetVersion {
return $wgetVersion
}
function Get-SVNVersion {
$svnVersion = Run-Command "svn --version --quiet"
return $svnVersion
}
function Get-PackerVersion {
# Packer 1.7.1 has a bug and outputs version to stderr instead of stdout https://github.com/hashicorp/packer/issues/10855
$result = Run-Command "packer --version"
@@ -252,6 +332,16 @@ function Get-GPGVersion {
return ($gpgVersion.Line -replace "^gpg \(GnuPG\)").Trim()
}
function Get-PostgresClientVersion {
$postgresClientVersion = Run-Command "psql --version"
return ($postgresClientVersion -replace "^psql \(PostgreSQL\)").Trim()
}
function Get-PostgresServerVersion {
$postgresServerVersion = Run-Command "pg_config --version"
return ($postgresServerVersion -replace "^PostgreSQL").Trim()
}
function Get-Aria2Version {
$aria2Version = Run-Command "aria2c --version" | Select-Object -First 1 | Take-Part -Part 2
return $aria2Version
@@ -277,6 +367,16 @@ function Get-BazeliskVersion {
return ($bazeliskVersion -replace "^bazelisk").Trim()
}
function Get-MongoVersion {
$mongo = Run-Command "mongo --version" | Select-String "MongoDB shell version" | Take-Part -Part 3
return $mongo.TrimStart("v").Trim()
}
function Get-MongodVersion {
$mongod = Run-Command "mongod --version" | Select-String "db version " | Take-Part -Part 2
return $mongod.TrimStart("v").Trim()
}
function Get-7zipVersion {
$7zip = Run-Command "7z i" | Select-String "7-Zip" | Take-Part -Part 0,2
return ($7zip -replace "^7-Zip").Trim()
@@ -292,6 +392,16 @@ function Get-BsdtarVersion {
return "$bsdtar - available by 'tar' alias"
}
function Get-VirtualBoxVersion {
$virtualBox = Run-Command "vboxmanage -v"
return $virtualBox
}
function Get-VagrantVersion {
$vagrant = Run-Command "vagrant -v"
return ($vagrant -replace "^Vagrant").Trim()
}
function Get-ParallelVersion {
$parallelVersion = Run-Command "parallel --version" | Select-String "GNU parallel" | Select-Object -First 1
return ($parallelVersion -replace "^GNU parallel").Trim()
@@ -307,6 +417,11 @@ function Get-CmakeVersion {
return $cmakeVersion
}
function Get-AppCenterCLIVersion {
$appcenterCLIVersion = Run-Command "appcenter --version" | Take-Part -Part 2
return $appcenterCLIVersion
}
function Get-AzureCLIVersion {
$azureCLIVersion = (az version | ConvertFrom-Json).'azure-cli'
return $azureCLIVersion
@@ -332,11 +447,46 @@ function Get-AWSSessionManagerCLIVersion {
return $awsSessionManagerVersion
}
function Get-GHCupVersion {
$ghcUpVersion = (Run-Command "ghcup --version" | Take-Part -Part 5).Replace('v','')
return $ghcUpVersion
}
function Get-GHCVersion {
$ghcVersion = Run-Command "ghc --version" | Take-Part -Part 7
return $ghcVersion
}
function Get-CabalVersion {
$cabalVersion = Run-Command "cabal --version" | Take-Part -Part 3
return $cabalVersion
}
function Get-SwitchAudioOsxVersion {
$switchAudioVersion = Get-BrewPackageVersion -CommandName "SwitchAudioSource"
return $switchAudioVersion
}
function Get-SoxVersion {
$soxVersion = Get-BrewPackageVersion -CommandName "sox"
return $soxVersion
}
function Get-StackVersion {
$stackVersion = Run-Command "stack --version" | Take-Part -Part 1 | ForEach-Object {$_.replace(",","")}
return $stackVersion
}
function Get-SwiftFormatVersion {
$swiftFormatVersion = Run-Command "swiftformat --version"
return $swiftFormatVersion
}
function Get-YamllintVersion {
$yamllintVersion = Run-Command "yamllint --version"
return ($yamllintVersion -replace "^Yamllint").Trim()
}
function Get-SwiftLintVersion {
$swiftlintVersion = Run-Command "swiftlint version"
return $swiftlintVersion
@@ -347,6 +497,11 @@ function Get-PowershellVersion {
return ($powershellVersion -replace "^PowerShell").Trim()
}
function Get-SwigVersion {
$swigVersion = Run-Command "swig -version" | Select-Object -First 2 | Take-Part -Part 2
return $swigVersion
}
function Get-BicepVersion {
$bicepVersion = Run-Command "bicep --version" | Take-Part -Part 3
return $bicepVersion
@@ -357,6 +512,31 @@ function Get-KotlinVersion {
return $kotlinVersion
}
function Get-SbtVersion {
$sbtVersion = Run-Command "sbt -version" | Take-Part -Part 3
return $sbtVersion
}
function Get-JazzyVersion {
$jazzyVersion = Run-Command "jazzy --version" | Take-Part -Part 2
return $jazzyVersion
}
function Get-ZlibVersion {
$zlibVersion = (Run-Command "brew info --json zlib" | ConvertFrom-Json).installed.version
return $zlibVersion
}
function Get-LibXftVersion {
$libXftVersion = (Run-Command "brew info --json libxft" | ConvertFrom-Json).installed.version
return $libXftVersion
}
function Get-LibXextVersion {
$libXextVersion = (Run-Command "brew info --json libxext" | ConvertFrom-Json).installed.version
return $libXextVersion
}
function Get-TclTkVersion {
$tcltkVersion = (Run-Command "brew info --json tcl-tk@8" | ConvertFrom-Json).installed.version
return $tcltkVersion
@@ -368,6 +548,35 @@ function Get-YqVersion {
return ($Matches[0])
}
function Get-ImageMagickVersion {
$imagemagickVersion = Run-Command "magick --version" | Select-Object -First 1 | Take-Part -Part 1,2
return ($imagemagickVersion -replace "^ImageMagick").Trim()
}
function Build-PackageManagementEnvironmentTable {
$node = [HeaderNode]::new("Environment variables")
$table = @(
@{
"Name" = "CONDA"
"Value" = $env:CONDA
},
@{
"Name" = "VCPKG_INSTALLATION_ROOT"
"Value" = $env:VCPKG_INSTALLATION_ROOT
}
) | ForEach-Object {
[PSCustomObject] @{
"Name" = $_.Name
"Value" = $_.Value
}
}
$node.AddTable($table)
return $node
}
function Build-MiscellaneousEnvironmentTable {
return @(
@{
@@ -382,6 +591,7 @@ function Build-MiscellaneousEnvironmentTable {
}
}
function Get-CodeQLBundleVersion {
$CodeQLVersionWildcard = Join-Path $Env:AGENT_TOOLSDIRECTORY -ChildPath "CodeQL" | Join-Path -ChildPath "*"
$CodeQLVersionPath = Get-ChildItem $CodeQLVersionWildcard | Select-Object -First 1 -Expand FullName
@@ -390,6 +600,11 @@ function Get-CodeQLBundleVersion {
return $CodeQLVersion
}
function Get-ColimaVersion {
$colimaVersion = Run-Command "colima version" | Select-String "colima version" | Take-Part -Part 2
return $colimaVersion
}
function Get-PKGConfVersion {
$pkgconfVersion = Run-Command "pkgconf --version"
return $pkgconfVersion
@@ -409,7 +624,3 @@ function Get-UnxipVersion {
$unxipVersion = Run-Command "unxip --version" | Take-Part -Part 1
return $unxipVersion
}
function Get-NinjaVersion {
return $(ninja --version)
}
@@ -0,0 +1,36 @@
function Get-ApacheVersion {
$name = "httpd"
$port = 80
$version = brew list $name --versions | Take-Part -Part 1
$serviceStatus = (brew services list) -match $name | Take-Part -Part 1
$configFile = "$(brew --prefix)/etc/httpd/httpd.conf"
return [PsCustomObject]@{
"Name" = $name
"Version" = $version
"ConfigFile" = $configFile
"ServiceStatus" = $serviceStatus
"ListenPort" = $port
}
}
function Get-NginxVersion {
$name = "nginx"
$port = 80
$version = brew list $name --versions | Take-Part -Part 1
$serviceStatus = (brew services list) -match $name | Take-Part -Part 1
$configFile = "$(brew --prefix)/etc/nginx/nginx.conf"
return [PsCustomObject]@{
"Name" = $name
"Version" = $version
"ConfigFile" = $configFile
"ServiceStatus" = $serviceStatus
"ListenPort" = $port
}
}
function Build-WebServersSection {
return @(
(Get-ApacheVersion),
(Get-NginxVersion)
)
}
@@ -0,0 +1,48 @@
Import-Module "$PSScriptRoot/../helpers/Common.Helpers.psm1"
function Build-VSMacTable {
$vsMacVersions = (Get-ToolsetContent).xamarin.vsmac.versions
$defaultVSMacVersion = (Get-ToolsetContent).xamarin.vsmac.default
return $vsMacVersions | ForEach-Object {
$isDefault = $_ -eq $defaultVSMacVersion
$vsPath = "/Applications/Visual Studio $_.app"
if ($isDefault) {
$vsPath = "/Applications/Visual Studio.app"
}
$plistPath = "$vsPath/Contents/Info.plist"
$build = Run-Command "/usr/libexec/PlistBuddy -c 'Print CFBundleVersion' '$plistPath'"
$defaultPostfix = $isDefault ? " (default)" : ""
[PSCustomObject] @{
"Version" = $_ + $defaultPostfix
"Build" = $build
"Path" = $vsPath
}
}
}
function Get-NUnitVersion {
$version = Run-Command "nunit3-console --version" | Select-Object -First 1 | Take-Part -Part 3
return $version
}
function Build-XamarinTable {
$xamarinBundles = (Get-ToolsetContent).xamarin.bundles
$defaultSymlink = (Get-ToolsetContent).xamarin.bundle_default
if ($defaultSymlink -eq "latest") {
$defaultSymlink = $xamarinBundles[0].symlink
}
return $xamarinBundles | ForEach-Object {
$defaultPostfix = ($_.symlink -eq $defaultSymlink ) ? " (default)" : ""
[PSCustomObject] @{
"symlink" = $_.symlink + $defaultPostfix
"Xamarin.Mono" = $_.mono
"Xamarin.iOS" = $_.ios
"Xamarin.Mac" = $_.mac
"Xamarin.Android" = $_.android
}
}
}
@@ -72,8 +72,6 @@ function Get-XcodePlatformOrder {
"Simulator - tvOS" { 5 }
"watchOS" { 6 }
"Simulator - watchOS" { 7 }
"visionOS" { 8 }
"Simulator - visionOS" { 9 }
Default { 100 }
}
}
@@ -239,3 +237,22 @@ function Build-XcodeSimulatorsTable {
return [System.Version]::Parse($sdkNameParts[-1])
}
}
function Build-XcodeSupportToolsSection {
$toolNodes = @()
$xcpretty = Run-Command "xcpretty --version"
$xcversion = Run-Command "xcversion --version" | Select-String "^[0-9]"
$toolNodes += [ToolVersionNode]::new("xcpretty", $xcpretty)
if ($os.IsMonterey) {
$toolNodes += [ToolVersionNode]::new("xcversion", $xcversion)
}
$nomadOutput = Run-Command "gem list nomad-cli"
$nomadCLI = [regex]::matches($nomadOutput, "(\d+.){2}\d+").Value
$nomadShenzhenOutput = Run-Command "ipa -version"
$nomadShenzhen = [regex]::matches($nomadShenzhenOutput, "(\d+.){2}\d+").Value
return $toolNodes
}
@@ -29,6 +29,7 @@ function Get-OSVersion {
Version = $osVersion.Version
Platform = $osVersion.Platform
IsArm64 = $processorArchitecture -eq "arm64"
IsMonterey = $osVersion.Version.Major -eq "12"
IsVentura = $($osVersion.Version.Major -eq "13")
IsVenturaArm64 = $($osVersion.Version.Major -eq "13" -and $processorArchitecture -eq "arm64")
IsVenturaX64 = $($osVersion.Version.Major -eq "13" -and $processorArchitecture -ne "arm64")
@@ -165,6 +165,10 @@ function Invoke-XcodeRunFirstLaunch {
[string] $Version
)
if ($Version.StartsWith("8") -or $Version.StartsWith("9")) {
return
}
Write-Host "Running 'runFirstLaunch' for Xcode $Version..."
$xcodeRootPath = Get-XcodeToolPath -Version $Version -ToolName "xcodebuild"
Invoke-ValidateCommand "sudo $xcodeRootPath -runFirstLaunch"
@@ -173,36 +177,12 @@ function Invoke-XcodeRunFirstLaunch {
function Install-AdditionalSimulatorRuntimes {
param (
[Parameter(Mandatory)]
[string] $Version,
[Parameter(Mandatory)]
[array] $Runtimes
[string] $Version
)
Write-Host "Installing Simulator Runtimes for Xcode $Version ..."
$xcodebuildPath = Get-XcodeToolPath -Version $Version -ToolName 'xcodebuild'
$validRuntimes = @("iOS", "watchOS", "tvOS", "visionOS")
# Install all runtimes / skip all runtimes installation
if ($Runtimes.Count -eq 1) {
if ($Runtimes[0] -eq "true") {
Write-Host "Installing all runtimes for Xcode $Version ..."
Invoke-ValidateCommand "sudo $xcodebuildPath -downloadAllPlatforms" | Out-Null
return
} elseif ($Runtimes[0] -eq "false") {
Write-Host "Skipping runtimes installation for Xcode $Version ..."
return
}
}
# Validate and install specified runtimes
$invalidRuntimes = $Runtimes | Where-Object { $_ -notmatch "^($( $validRuntimes -join '|' ))(\s.*|$)" }
if ($invalidRuntimes) {
throw "Error: Invalid runtimes detected: $($invalidRuntimes -join ', '). Valid values are: $validRuntimes."
}
foreach ($runtime in $Runtimes) {
Write-Host "Installing runtime $runtime ..."
Invoke-ValidateCommand "sudo $xcodebuildPath -downloadPlatform $runtime" | Out-Null
}
$xcodebuildPath = Get-XcodeToolPath -Version $Version -ToolName "xcodebuild"
Invoke-ValidateCommand "$xcodebuildPath -downloadAllPlatforms" | Out-Null
}
function Build-XcodeSymlinks {
@@ -1,34 +0,0 @@
# This AppleScript clicks "Allow" for "System Software from developer "Parallels International GmbH"
# Steps:
# - Open System Settings -> Privacy & Security
# - Click 'Allow' for 'System Software from developer "Parallels International GmbH'
# - Enter password for runner
on run argv
set userpassword to item 1 of argv
tell application "System Settings"
activate
delay 5
end tell
tell application "System Events"
tell process "System Settings"
set frontmost to true
repeat until exists window 1
delay 2
end repeat
tell splitter group 1 of group 1 of window 1
select row 27 of outline 1 of scroll area 1 of group 1
delay 5
click UI element 1 of row 27 of outline 1 of scroll area 1 of group 1
delay 5
keystroke userpassword
delay 5
keystroke return
delay 5
end tell
end tell
end tell
end run
@@ -0,0 +1,49 @@
# This AppleScript confirms developers in security preferences via macOS UI.
# It uses after VirtualBox installation to add 'Oracle Inc' as identified developer.
# Steps:
# - Close security preferences pop-up (it can be open after VirtualBox installation)
# - Open System Preferences -> Security & Privacy -> General
# - Unlock security preferences with user password (button 'Click the lock to make changes')
# - Click 'Allow' or 'Details…' button to confirm developers
# - Click 'Not now' button on restarting pop-up
# - Close System Preferences
on run argv
set userpassword to item 1 of argv
set secpane to "Security & Privacy"
activate application "System Preferences"
delay 5
tell application "System Events"
tell process "System Preferences"
set frontmost to true
delay 2
click menu item secpane of menu "View" of menu bar 1
delay 5
click button 1 of window 1
delay 5
keystroke userpassword
delay 5
keystroke return
delay 5
click radio button "General" of tab group 1 of window 1
delay 5
if exists of UI element "Details…" of tab group 1 of window 1 then
click button "Details…" of tab group 1 of window 1
delay 5
keystroke return
delay 5
keystroke return
delay 5
end if
if exists of UI element "Allow" of tab group 1 of window 1 then
click button "Allow" of tab group 1 of window 1
delay 5
keystroke return
delay 5
end if
click button 5 of window 1
end tell
end tell
end run
+4
View File
@@ -81,6 +81,10 @@ is_VenturaX64() {
is_Ventura && ! is_Arm64
}
is_Monterey() {
[ "$OSTYPE" = "darwin21" ]
}
get_toolset_value() {
local toolset_path=$(echo "$IMAGE_FOLDER/toolset.json")
local query=$1
@@ -0,0 +1,215 @@
#!/bin/bash -e -o pipefail
source ~/utils/utils.sh
# Xamarin can clean their SDKs while updating to newer versions,
# so we should be able to detect it during image generation
buildVSMacDownloadUrl() {
echo "https://dl.xamarin.com/VsMac/VisualStudioForMac-${1}.dmg"
}
buildMonoDownloadUrl() {
echo "https://dl.xamarin.com/MonoFrameworkMDK/Macx86/MonoFramework-MDK-${1}.macos10.xamarin.universal.pkg"
}
buildXamariniIOSDownloadUrl() {
echo "https://dl.xamarin.com/MonoTouch/Mac/xamarin.ios-${1}.pkg"
}
buildXamarinMacDownloadUrl() {
echo "https://dl.xamarin.com/XamarinforMac/Mac/xamarin.mac-${1}.pkg"
}
buildXamarinAndroidDownloadUrl() {
echo "https://dl.xamarin.com/MonoforAndroid/Mac/xamarin.android-${1}.pkg"
}
installMono() {
local VERSION=$1
echo "Installing Mono ${VERSION}..."
local MONO_FOLDER_NAME=$(echo $VERSION | cut -d. -f 1,2,3)
local SHORT_VERSION=$(echo $VERSION | cut -d. -f 1,2)
local PKG_URL=$(buildMonoDownloadUrl $VERSION)
sudo installer -pkg "$(download_with_retry "$PKG_URL")" -target /
echo "Installing nunit3-console for Mono "$VERSION
installNunitConsole $MONO_FOLDER_NAME
echo "Creating short symlink '${SHORT_VERSION}'"
sudo ln -s ${MONO_VERSIONS_PATH}/${MONO_FOLDER_NAME} ${MONO_VERSIONS_PATH}/${SHORT_VERSION}
echo "Move to backup folder"
sudo mv -v $MONO_VERSIONS_PATH/* $TMPMOUNT_FRAMEWORKS/mono/
}
installXamarinIOS() {
local VERSION=$1
echo "Installing Xamarin.iOS ${VERSION}..."
local SHORT_VERSION=$(echo $VERSION | cut -d. -f 1,2)
local PKG_URL=$(buildXamariniIOSDownloadUrl $VERSION)
sudo installer -pkg "$(download_with_retry "$PKG_URL")" -target /
echo "Creating short symlink '${SHORT_VERSION}'"
sudo ln -s ${IOS_VERSIONS_PATH}/${VERSION} ${IOS_VERSIONS_PATH}/${SHORT_VERSION}
echo "Move to backup folder"
sudo mv -v $IOS_VERSIONS_PATH/* $TMPMOUNT_FRAMEWORKS/ios/
}
installXamarinMac() {
local VERSION=$1
echo "Installing Xamarin.Mac ${VERSION}..."
local SHORT_VERSION=$(echo $VERSION | cut -d. -f 1,2)
local PKG_URL=$(buildXamarinMacDownloadUrl $VERSION)
sudo installer -pkg "$(download_with_retry "$PKG_URL")" -target /
echo "Creating short symlink '${SHORT_VERSION}'"
sudo ln -s ${MAC_VERSIONS_PATH}/${VERSION} ${MAC_VERSIONS_PATH}/${SHORT_VERSION}
echo "Move to backup folder"
sudo mv -v $MAC_VERSIONS_PATH/* $TMPMOUNT_FRAMEWORKS/mac/
}
installXamarinAndroid() {
local VERSION=$1
echo "Installing Xamarin.Android ${VERSION}..."
local SHORT_VERSION=$(echo $VERSION | cut -d. -f 1,2)
local PKG_URL=$(buildXamarinAndroidDownloadUrl $VERSION)
sudo installer -pkg "$(download_with_retry "$PKG_URL")" -target /
if [ "$VERSION" == "9.4.1.0" ]; then
# Fix symlinks for broken Xamarin.Android
fixXamarinAndroidSymlinksInLibDir $VERSION
fi
echo "Creating short symlink '${SHORT_VERSION}'"
sudo ln -s ${ANDROID_VERSIONS_PATH}/${VERSION} ${ANDROID_VERSIONS_PATH}/${SHORT_VERSION}
echo "Move to backup folder"
sudo mv -v $ANDROID_VERSIONS_PATH/* $TMPMOUNT_FRAMEWORKS/android/
}
createBundle() {
local SYMLINK=$1
local MONO_SDK=$2
local IOS_SDK=$3
local MAC_SDK=$4
local ANDROID_SDK=$5
echo "Creating bundle '$SYMLINK' (Mono $MONO_SDK; iOS $IOS_SDK; Mac $MAC_SDK; Android $ANDROID_SDK"
deleteSymlink ${SYMLINK}
sudo ln -s ${MONO_VERSIONS_PATH}/${MONO_SDK} ${MONO_VERSIONS_PATH}/${SYMLINK}
sudo ln -s ${IOS_VERSIONS_PATH}/${IOS_SDK} ${IOS_VERSIONS_PATH}/${SYMLINK}
sudo ln -s ${MAC_VERSIONS_PATH}/${MAC_SDK} ${MAC_VERSIONS_PATH}/${SYMLINK}
sudo ln -s ${ANDROID_VERSIONS_PATH}/${ANDROID_SDK} ${ANDROID_VERSIONS_PATH}/${SYMLINK}
}
createBundleLink() {
local SOURCE=$1
local TARGET=$2
echo "Creating bundle symlink '$SOURCE' -> '$TARGET'"
deleteSymlink ${TARGET}
sudo ln -s ${MONO_VERSIONS_PATH}/$SOURCE ${MONO_VERSIONS_PATH}/$TARGET
sudo ln -s ${IOS_VERSIONS_PATH}/$SOURCE ${IOS_VERSIONS_PATH}/$TARGET
sudo ln -s ${MAC_VERSIONS_PATH}/$SOURCE ${MAC_VERSIONS_PATH}/$TARGET
sudo ln -s ${ANDROID_VERSIONS_PATH}/$SOURCE ${ANDROID_VERSIONS_PATH}/$TARGET
}
# https://github.com/xamarin/xamarin-android/issues/3457
# Recreate missing symlinks in lib for new Xamarin.Android package
# Symlink path /Library/Frameworks/Xamarin.Android.framework/Libraries
# xbuild -> xamarin.android/xbuild
# xbuild-frameworks -> xamarin.android/xbuild-frameworks
fixXamarinAndroidSymlinksInLibDir() {
local XAMARIN_ANDROID_VERSION=$1
local XAMARIN_ANDROID_LIB_PATH="${ANDROID_VERSIONS_PATH}/${XAMARIN_ANDROID_VERSION}/lib"
if [ -d "${XAMARIN_ANDROID_LIB_PATH}" ]; then
pushd "${XAMARIN_ANDROID_LIB_PATH}" > /dev/null
local XAMARIN_ANDROID_XBUILD_DIR="${XAMARIN_ANDROID_LIB_PATH}/xbuild"
if [ ! -d "${XAMARIN_ANDROID_XBUILD_DIR}" ]; then
echo "${XAMARIN_ANDROID_XBUILD_DIR}"
sudo ln -sf xamarin.android/xbuild xbuild
fi
local XAMARIN_ANDROID_XBUILD_FRAMEWORKS_DIR="${XAMARIN_ANDROID_LIB_PATH}/xbuild-frameworks"
if [ ! -d "${XAMARIN_ANDROID_XBUILD_FRAMEWORKS_DIR}" ]; then
echo "${XAMARIN_ANDROID_XBUILD_FRAMEWORKS_DIR}"
sudo ln -sf xamarin.android/xbuild-frameworks xbuild-frameworks
fi
popd > /dev/null
fi
}
installNunitConsole() {
local MONO_VERSION=$1
local TMP_WRAPPER_PATH=$(mktemp)
cat <<EOF > "$TMP_WRAPPER_PATH"
#!/bin/bash -e -o pipefail
exec /Library/Frameworks/Mono.framework/Versions/${MONO_VERSION}/bin/mono --debug \$MONO_OPTIONS $NUNIT3_PATH/nunit3-console.exe "\$@"
EOF
sudo chmod +x $TMP_WRAPPER_PATH
sudo mv "$TMP_WRAPPER_PATH" "${MONO_VERSIONS_PATH}/${MONO_VERSION}/Commands/nunit3-console"
}
downloadNUnitConsole() {
echo "Downloading NUnit 3..."
local NUNIT3_VERSION='3.6.1'
local NUNIT3_LOCATION="https://github.com/nunit/nunit-console/releases/download/${NUNIT3_VERSION}/NUnit.Console-${NUNIT3_VERSION}.zip"
local NUNIT3_PATH="/Library/Developer/nunit/${NUNIT3_VERSION}"
NUNIT3_ARCHIVE=$(download_with_retry $NUNIT3_LOCATION)
echo "Installing NUnit 3..."
sudo mkdir -p $NUNIT3_PATH
sudo unzip "$NUNIT3_ARCHIVE" -d $NUNIT3_PATH
}
createUWPShim() {
echo "Creating UWP Shim to hack UWP build failure..."
cat <<EOF > ${TMPMOUNT}/Microsoft.Windows.UI.Xaml.CSharp.Targets
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name = "Build"/>
<Target Name = "Rebuild"/>
</Project>
EOF
local UWPTARGET_PATH=/Library/Frameworks/Mono.framework/External/xbuild/Microsoft/WindowsXaml
sudo mkdir -p $UWPTARGET_PATH/v11.0/
sudo cp ${TMPMOUNT}/Microsoft.Windows.UI.Xaml.CSharp.Targets $UWPTARGET_PATH/v11.0/
sudo mkdir -p $UWPTARGET_PATH/v12.0/
sudo cp ${TMPMOUNT}/Microsoft.Windows.UI.Xaml.CSharp.Targets $UWPTARGET_PATH/v12.0/
sudo mkdir -p $UWPTARGET_PATH/v14.0/
sudo cp ${TMPMOUNT}/Microsoft.Windows.UI.Xaml.CSharp.Targets $UWPTARGET_PATH/v14.0/
sudo mkdir -p $UWPTARGET_PATH/v15.0/
sudo cp ${TMPMOUNT}/Microsoft.Windows.UI.Xaml.CSharp.Targets $UWPTARGET_PATH/v15.0/
sudo mkdir -p $UWPTARGET_PATH/v16.0/
sudo cp ${TMPMOUNT}/Microsoft.Windows.UI.Xaml.CSharp.Targets $UWPTARGET_PATH/v16.0/
}
createBackupFolders() {
mkdir -p $TMPMOUNT_FRAMEWORKS/mono
mkdir -p $TMPMOUNT_FRAMEWORKS/ios
mkdir -p $TMPMOUNT_FRAMEWORKS/mac
mkdir -p $TMPMOUNT_FRAMEWORKS/android
}
deleteSymlink() {
sudo rm -f ${MONO_VERSIONS_PATH}/${1}
sudo rm -f ${IOS_VERSIONS_PATH}/${1}
sudo rm -f ${MAC_VERSIONS_PATH}/${1}
sudo rm -f ${ANDROID_VERSIONS_PATH}/${1}
}
@@ -57,6 +57,14 @@ Describe "Android" {
Sdkmanager = "$env:ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager"
}
)
if ($os.IsMonterey) {
$testCases += @(
@{
PackageName = "SDK tools"
Sdkmanager = "$env:ANDROID_HOME/tools/bin/sdkmanager"
}
)
}
It "Sdkmanager from <PackageName> is available" -TestCases $testCases {
"$Sdkmanager --version" | Should -ReturnZeroExitCode
+38 -24
View File
@@ -26,6 +26,12 @@ Describe "cmake" {
}
}
Describe "Subversion" -Skip:($os.IsVentura -or $os.IsSonoma -or $os.IsSequoia) {
It "Subversion" {
"svn --version" | Should -ReturnZeroExitCode
}
}
Describe "SwiftFormat" {
It "SwiftFormat" {
"swiftformat --version" | Should -ReturnZeroExitCode
@@ -81,7 +87,7 @@ Describe "7-Zip" {
}
}
Describe "Apache Ant" {
Describe "Apache Ant" -Skip:($os.IsMonterey) {
It "Apache Ant" {
"ant -version" | Should -ReturnZeroExitCode
}
@@ -105,6 +111,12 @@ Describe "bazel" {
}
}
Describe "Julia" -Skip:($os.IsVentura -or $os.IsSonoma -or $os.IsSequoia) {
It "Julia" {
"julia --version" | Should -ReturnZeroExitCode
}
}
Describe "jq" {
It "jq" {
"jq --version" | Should -ReturnZeroExitCode
@@ -123,13 +135,31 @@ Describe "wget" {
}
}
Describe "vagrant" -Skip:($os.IsVentura -or $os.IsSonoma -or $os.IsSequoia) {
It "vagrant" {
"vagrant --version" | Should -ReturnZeroExitCode
}
}
Describe "virtualbox" -Skip:($os.IsVentura -or $os.IsSonoma -or $os.IsSequoia) {
It "virtualbox" {
"vboxmanage -v" | Should -ReturnZeroExitCode
}
}
Describe "R" -Skip:($os.IsVentura -or $os.IsSonoma -or $os.IsSequoia) {
It "R" {
"R --version" | Should -ReturnZeroExitCode
}
}
Describe "Homebrew" {
It "Homebrew" {
"brew --version" | Should -ReturnZeroExitCode
}
}
Describe "Kotlin" {
Describe "Kotlin" -Skip:($os.IsMonterey) {
$kotlinPackages = @("kapt", "kotlin", "kotlinc", "kotlinc-jvm", "kotlinc-js")
It "<toolName> is available" -TestCases ($kotlinPackages | ForEach-Object { @{ toolName = $_ } }) {
@@ -143,30 +173,14 @@ Describe "yq" {
}
}
Describe "imagemagick" -Skip:($os.IsVentura -or $os.IsSonoma -or $os.IsSequoia) {
It "imagemagick" {
"magick -version" | Should -ReturnZeroExitCode
}
}
Describe "pkgconf" {
It "pkgconf" {
"pkgconf --version" | Should -ReturnZeroExitCode
}
}
Describe "Ninja" {
New-item -Path "/tmp/ninjaproject" -ItemType Directory -Force
Set-Location '/tmp/ninjaproject'
@'
cmake_minimum_required(VERSION 3.10)
project(NinjaTest NONE)
'@ | Out-File -FilePath "./CMakeLists.txt"
It "Make a simple ninja project" {
"cmake -GNinja /tmp/ninjaproject" | Should -ReturnZeroExitCode
}
It "build.ninja file should exist" {
$buildFilePath = Join-Path "/tmp/ninjaproject" "build.ninja"
$buildFilePath | Should -Exist
}
It "Ninja" {
"ninja --version" | Should -ReturnZeroExitCode
}
}
+81 -9
View File
@@ -58,18 +58,77 @@ Describe "AzCopy" {
}
}
Describe "Miniconda" -Skip:($os.IsVentura -or $os.IsSonoma -or $os.IsSequoia) {
It "Conda" {
[System.Environment]::GetEnvironmentVariable("CONDA") | Should -Not -BeNullOrEmpty
$condaBinPath = Join-Path $env:CONDA "bin" "conda"
"$condaBinPath --version" | Should -ReturnZeroExitCode
}
}
Describe "Stack" -Skip:($os.IsVentura -or $os.IsSonoma -or $os.IsSequoia) {
It "Stack" {
"stack --version" | Should -ReturnZeroExitCode
}
}
Describe "CocoaPods" {
It "CocoaPods" {
"pod --version" | Should -ReturnZeroExitCode
}
}
Describe "VSMac" -Skip:($os.IsVentura -or $os.IsSonoma -or $os.IsSequoia) {
$vsMacVersions = (Get-ToolsetContent).xamarin.vsmac.versions
$defaultVSMacVersion = (Get-ToolsetContent).xamarin.vsmac.default
$testCases = $vsMacVersions | ForEach-Object {
$vsPath = "/Applications/Visual Studio $_.app"
if ($_ -eq $defaultVSMacVersion) {
$vsPath = "/Applications/Visual Studio.app"
}
@{ vsversion = $_ ; vspath = $vsPath }
}
It "Visual Studio <vsversion> for Mac is installed" -TestCases $testCases {
$vstoolPath = Join-Path $vsPath "Contents/MacOS/vstool"
$vsPath | Should -Exist
$vstoolPath | Should -Exist
}
It "Visual Studio $defaultVSMacVersion for Mac is default" {
$vsPath = "/Applications/Visual Studio.app"
$vstoolPath = Join-Path $vsPath "Contents/MacOS/vstool"
$vsPath | Should -Exist
$vstoolPath | Should -Exist
}
}
Describe "Swig" -Skip:($os.IsVentura -or $os.IsSonoma -or $os.IsSequoia) {
It "Swig" {
"swig -version" | Should -ReturnZeroExitCode
}
}
Describe "Bicep" {
It "Bicep" {
"bicep --version" | Should -ReturnZeroExitCode
}
}
Describe "Go" -Skip:($os.IsVentura -or $os.IsSonoma -or $os.IsSequoia) {
It "Go" {
"go version" | Should -ReturnZeroExitCode
}
}
Describe "VirtualBox" -Skip:($os.IsVentura -or $os.IsSonoma -or $os.IsSequoia) {
It "Check kext kernel modules" {
kextstat | Out-String | Should -Match "org.virtualbox.kext"
}
}
Describe "CodeQL Bundle" {
It "Is installed" {
$CodeQLVersionWildcard = Join-Path $Env:AGENT_TOOLSDIRECTORY -ChildPath "CodeQL" | Join-Path -ChildPath "*"
@@ -82,17 +141,30 @@ Describe "CodeQL Bundle" {
}
}
Describe "Colima" -Skip:($os.IsVentura -or $os.IsSonoma -or $os.IsSequoia) {
It "Colima" {
"colima version" | Should -ReturnZeroExitCode
}
}
Describe "Compiled" -Skip:(-not $os.IsMonterey) {
It "Apache Ant" {
"ant -version" | Should -ReturnZeroExitCode
}
$kotlinPackages = @("kapt", "kotlin", "kotlinc", "kotlinc-jvm", "kotlin-dce-js")
It "<toolName> is available" -TestCases ($kotlinPackages | ForEach-Object { @{ toolName = $_ } }) {
"$toolName -version" | Should -ReturnZeroExitCode
}
It "sbt" {
"sbt -version" | Should -ReturnZeroExitCode
}
}
Describe "Unxip" {
It "Unxip" {
"unxip --version" | Should -ReturnZeroExitCode
}
}
Describe "Sudoers" {
It "Sudo Cache" {
"sudo -v" | Should -ReturnZeroExitCode
}
It "Sudoers files" {
"sudo visudo -c" | Should -ReturnZeroExitCode
}
}
@@ -0,0 +1,30 @@
Import-Module "$PSScriptRoot/../helpers/Common.Helpers.psm1"
$os = Get-OSVersion
Describe "Haskell" -Skip:($os.IsVentura -or $os.IsSonoma -or $os.IsSequoia) {
Context "GHCup" {
It "GHCup" {
"ghcup --version" | Should -ReturnZeroExitCode
}
}
Context "GHC" {
It "GHC" {
"ghc --version" | Should -ReturnZeroExitCode
}
}
Context "Cabal" {
It "Cabal" {
"cabal --version" | Should -ReturnZeroExitCode
}
}
Context "Stack" {
It "Stack" {
"stack --version" | Should -ReturnZeroExitCode
}
It "Stack hook is not installed" {
"$HOME/.stack/hooks/ghc-install.sh" | Should -Not -Exist
}
}
}
-76
View File
@@ -1,76 +0,0 @@
Import-Module "$PSScriptRoot/../helpers/Common.Helpers.psm1"
Import-Module "$PSScriptRoot/Helpers.psm1" -DisableNameChecking
$os = Get-OSVersion
BeforeAll {
function Get-ShortSymlink {
param (
[string] $Version
)
$versionParts = $Version.Split(".")
return [String]::Join(".", $versionParts[0..1])
}
}
if ($os.IsVentura -or $os.IsSonoma) {
Describe "Mono" {
$MONO_VERSIONS_PATH = "/Library/Frameworks/Mono.framework/Versions"
$monoToolsetVersion = @((Get-ToolsetContent).mono.framework.version)
$versionFolderPath = Join-Path $MONO_VERSIONS_PATH ([System.Version]::Parse($monoToolsetVersion).ToString(3))
$testCase = @{ MonoVersion = $monoToolsetVersion; VersionFolderPath = $versionFolderPath; MonoVersionsPath = $MONO_VERSIONS_PATH }
It "is installed" -TestCases $testCase {
param ( [string] $VersionFolderPath )
$monoBinPath = Join-Path $VersionFolderPath "bin" "mono"
$VersionFolderPath | Should -Exist
$monoBinPath | Should -Exist
}
It "is available via short link" -TestCases $testCase {
param (
[string] $MonoVersion,
[string] $MonoVersionsPath,
[string] $VersionFolderPath
)
$shortSymlink = Get-ShortSymlink $MonoVersion # only 'major.minor'
$shortSymlinkFolderPath = Join-Path $MonoVersionsPath $shortSymlink
if ($shortSymlink -eq "4.8") { return } # Skip this test for Mono 4.8 because it doesn't contain VERSION file
$shortVersionPath = Join-Path $shortSymlinkFolderPath "VERSION"
$fullVersionPath = Join-Path $VersionFolderPath "VERSION"
Confirm-IdenticalFileContent -File1 $shortVersionPath -File2 $fullVersionPath
}
It "NUnit console is installed" -TestCases $testCase {
param ( [string] $VersionFolderPath )
$nunitPath = Join-Path $VersionFolderPath "Commands" "nunit3-console"
$nunitPath | Should -Exist
}
It "Nuget is installed" -TestCases $testCase {
param ( [string] $VersionFolderPath )
$nugetBinaryPath = Join-Path $VersionFolderPath "lib" "mono" "nuget" "nuget.exe"
$nugetBinaryWrapperPath = Join-Path $VersionFolderPath "bin" "nuget"
$nugetCommandPath = Join-Path $VersionFolderPath "Commands" "nuget"
$nugetBinaryPath | Should -Exist
$nugetCommandPath | Should -Exist
$nugetBinaryWrapperPath | Should -Exist
}
It "Nuget is valid" -TestCases $testCase {
param ( [string] $VersionFolderPath )
$nugetBinaryWrapperPath = Join-Path $VersionFolderPath "bin" "nuget"
"$nugetBinaryWrapperPath" | Should -ReturnZeroExitCode
}
It "MSBuild is available" {
"msbuild -version" | Should -ReturnZeroExitCode
}
}
}
@@ -0,0 +1,12 @@
Import-Module "$PSScriptRoot/../helpers/Common.Helpers.psm1"
$os = Get-OSVersion
Describe "PipxPackages" -Skip:($os.IsVentura -or $os.IsSonoma -or $os.IsSequoia) {
$pipxToolset = (Get-ToolsetContent).pipx
$testCases = $pipxToolset | ForEach-Object { @{package = $_.package; cmd = $_.cmd} }
It "<package>" -TestCases $testCases {
"$cmd" | Should -ReturnZeroExitCode
}
}
@@ -1,7 +0,0 @@
Describe "RunnerCache" {
Context "runner cache directory not empty" {
It "<RunnerCachePath> not empty" -TestCases @{ RunnerCachePath = "/opt/runner-cache" } {
(Get-ChildItem -Path "$RunnerCachePath/*.tar.gz" -Recurse).Count | Should -BeGreaterThan 0
}
}
}
@@ -6,6 +6,11 @@ function Get-ShortVersion([System.Version] $Version) {
return [System.Version]::Parse($Version).ToString(2)
}
function Invoke-BashUtilsFunction([string] $FunctionName, [string]$parameter) {
$xamarinUtilsPath = "$PSScriptRoot/../provision/utils/xamarin-utils.sh"
return Invoke-Expression "bash -c `"source $xamarinUtilsPath && $FunctionName $parameter`""
}
Describe "Toolset JSON validation" {
$toolsets | ForEach-Object {
It "$($_.Name) is valid" {
@@ -28,5 +33,109 @@ $toolsets | ForEach-Object {
$toolset.xcode.versions | Should -Contain $toolset.xcode.default
}
}
Context "VSMac" {
$vsmacVersion = $toolset.xamarin.vsmac
It "Version '$vsmacVersion' is available and can be downloaded" {
$vsmacUrl = Invoke-BashUtilsFunction("buildVSMacDownloadUrl", $vsmacVersion)
Confirm-UrlAvailability $vsmacUrl
}
}
Context "Mono" {
$sdkVersions = $toolset.xamarin.mono_versions
$sdkVersions | ForEach-Object {
It "Version '$_' is available and can be downloaded" {
$sdkUrl = Invoke-BashUtilsFunction("buildMonoDownloadUrl", $_)
Confirm-UrlAvailability $sdkUrl
}
}
It "Version list doesn't contain versions with the same major/minor version" {
$versions = $sdkVersions | ForEach-Object { Get-ShortVersion $_ }
Confirm-ArrayWithoutDuplicates $versions -Because "It doesn't allow to install more than one version with the same major/minor"
}
}
Context "Xamarin.iOS" {
$sdkVersions = $toolset.xamarin.ios_versions
$sdkVersions | ForEach-Object {
It "Version '$_' is available and can be downloaded" {
$sdkUrl = Invoke-BashUtilsFunction("buildXamariniIOSDownloadUrl", $_)
Confirm-UrlAvailability $sdkUrl
}
}
It "Version list doesn't contain versions with the same major/minor version" {
$versions = $sdkVersions | ForEach-Object { Get-ShortVersion $_ }
Confirm-ArrayWithoutDuplicates $versions -Because "It doesn't allow to install more than one version with the same major/minor"
}
}
Context "Xamarin.Mac" {
$sdkVersions = $toolset.xamarin.mac_versions
$sdkVersions | ForEach-Object {
It "Version '$_' is available and can be downloaded" {
$sdkUrl = Invoke-BashUtilsFunction("buildXamarinMacDownloadUrl", $_)
Confirm-UrlAvailability $sdkUrl
}
}
It "Version list doesn't contain versions with the same major/minor version" {
$versions = $sdkVersions | ForEach-Object { Get-ShortVersion $_ }
Confirm-ArrayWithoutDuplicates $versions -Because "It doesn't allow to install more than one version with the same major/minor"
}
}
Context "Xamarin.Android" {
$sdkVersions = $toolset.xamarin.android_versions
$sdkVersions | ForEach-Object {
It "Version '$_' is available and can be downloaded" {
$sdkUrl = Invoke-BashUtilsFunction("buildXamarinAndroidDownloadUrl", $_)
Confirm-UrlAvailability $sdkUrl
}
}
It "Version list doesn't contain versions with the same major/minor version" {
$versions = $sdkVersions | ForEach-Object { $_.Replace("-", ".") } | ForEach-Object { Get-ShortVersion $_ }
Confirm-ArrayWithoutDuplicates $versions -Because "It doesn't allow to install more than one version with the same major/minor"
}
}
Context "Xamarin bundles" {
$monoVersions = $toolset.xamarin.mono_versions | ForEach-Object { Get-ShortVersion $_ }
$iOSVersions = $toolset.xamarin.ios_versions | ForEach-Object { Get-ShortVersion $_ }
$macVersions = $toolset.xamarin.mac_versions | ForEach-Object { Get-ShortVersion $_ }
# Old Xamarin.Android version looks like "9.0.0-18" that doesn't support by System.Version
$androidVersions = $toolset.xamarin.android_versions | ForEach-Object { Get-ShortVersion $_.Replace("-", ".") }
$bundles = $toolset.xamarin.bundles
$bundles | ForEach-Object {
It "'$($_.symlink)' is valid" {
$monoVersions | Should -Contain $_.mono
$iOSVersions | Should -Contain $_.ios
$macVersions | Should -Contain $_.mac
$androidVersions | Should -Contain $_.android
}
}
It "Each bundle has unique symlink" {
$symlinks = $bundles | ForEach-Object { $_.symlink }
Confirm-ArrayWithoutDuplicates $symlinks -Because "Bundle symlinks should be unique"
}
It "Current bundle is valid" {
$currentBundleSymlink = $toolset.xamarin.bundle_default
if ($currentBundleSymlink -ne "latest") {
$bundleSymlinks = $bundles | ForEach-Object { $_.symlink }
$bundleSymlinks | Should -Contain $currentBundleSymlink -Because "Current bundle should be installed"
}
}
}
}
}
@@ -0,0 +1,25 @@
Import-Module "$PSScriptRoot/../helpers/Common.Helpers.psm1"
$os = Get-OSVersion
Describe "Apache" -Skip:($os.IsVentura -or $os.IsSonoma -or $os.IsSequoia) {
It "Apache CLI" {
"httpd -v" | Should -ReturnZeroExitCode
}
It "Apache Service" {
$service = brew services list --json | ConvertFrom-Json | Where-Object { $_.name -eq "httpd" }
$service.status | Should -Match "(stopped|none)"
}
}
Describe "Nginx" -Skip:($os.IsVentura -or $os.IsSonoma -or $os.IsSequoia) {
It "Nginx CLI" {
"nginx -v" | Should -ReturnZeroExitCode
}
It "Nginx Service" {
$service = brew services list --json | ConvertFrom-Json | Where-Object { $_.name -eq "nginx" }
$service.status | Should -Match "(stopped|none)"
}
}
@@ -0,0 +1,317 @@
Import-Module "$PSScriptRoot/../helpers/Common.Helpers.psm1"
Import-Module "$PSScriptRoot/Helpers.psm1" -DisableNameChecking
$os = Get-OSVersion
if ($os.IsVentura -or $os.IsSonoma) {
$MONO_VERSIONS = @((Get-ToolsetContent).mono.framework.version)
$XAMARIN_IOS_VERSIONS = @()
$XAMARIN_MAC_VERSIONS = @()
$XAMARIN_ANDROID_VERSIONS = @()
} elseif ($os.IsMonterey) {
$MONO_VERSIONS = (Get-ToolsetContent).xamarin.mono_versions
$XAMARIN_IOS_VERSIONS = (Get-ToolsetContent).xamarin.ios_versions
$XAMARIN_MAC_VERSIONS = (Get-ToolsetContent).xamarin.mac_versions
$XAMARIN_ANDROID_VERSIONS = (Get-ToolsetContent).xamarin.android_versions
} elseif ($os.IsSequoia) {
Write-Host "Skipping all the Mono and Xamarin tests as deprecated"
# Dummy workaround for the issue with the tests discovery
$MONO_VERSIONS = @()
$XAMARIN_IOS_VERSIONS = @()
$XAMARIN_MAC_VERSIONS = @()
$XAMARIN_ANDROID_VERSIONS = @()
}
BeforeAll {
function Get-ShortSymlink {
param (
[string] $Version
)
$versionParts = $Version.Split(".")
return [String]::Join(".", $versionParts[0..1])
}
}
Describe "Mono" -Skip:($os.IsSequoia) {
$MONO_VERSIONS | ForEach-Object {
Context "$_" {
$MONO_VERSIONS_PATH = "/Library/Frameworks/Mono.framework/Versions"
$versionFolderPath = Join-Path $MONO_VERSIONS_PATH ([System.Version]::Parse($_).ToString(3))
$testCase = @{ MonoVersion = $_; VersionFolderPath = $versionFolderPath; MonoVersionsPath = $MONO_VERSIONS_PATH }
It "is installed" -TestCases $testCase {
param ( [string] $VersionFolderPath )
$monoBinPath = Join-Path $VersionFolderPath "bin" "mono"
$VersionFolderPath | Should -Exist
$monoBinPath | Should -Exist
}
It "is available via short link" -TestCases $testCase {
param (
[string] $MonoVersion,
[string] $MonoVersionsPath,
[string] $VersionFolderPath
)
$shortSymlink = Get-ShortSymlink $MonoVersion # only 'major.minor'
$shortSymlinkFolderPath = Join-Path $MonoVersionsPath $shortSymlink
if ($shortSymlink -eq "4.8") { return } # Skip this test for Mono 4.8 because it doesn't contain VERSION file
$shortVersionPath = Join-Path $shortSymlinkFolderPath "VERSION"
$fullVersionPath = Join-Path $VersionFolderPath "VERSION"
Confirm-IdenticalFileContent -File1 $shortVersionPath -File2 $fullVersionPath
}
It "NUnit console is installed" -TestCases $testCase {
param ( [string] $VersionFolderPath )
$nunitPath = Join-Path $VersionFolderPath "Commands" "nunit3-console"
$nunitPath | Should -Exist
}
It "Nuget is installed" -TestCases $testCase {
param ( [string] $VersionFolderPath )
$nugetBinaryPath = Join-Path $VersionFolderPath "lib" "mono" "nuget" "nuget.exe"
$nugetBinaryWrapperPath = Join-Path $VersionFolderPath "bin" "nuget"
$nugetCommandPath = Join-Path $VersionFolderPath "Commands" "nuget"
$nugetBinaryPath | Should -Exist
$nugetCommandPath | Should -Exist
$nugetBinaryWrapperPath | Should -Exist
}
It "Nuget is valid" -TestCases $testCase {
param ( [string] $VersionFolderPath )
$nugetBinaryWrapperPath = Join-Path $VersionFolderPath "bin" "nuget"
"$nugetBinaryWrapperPath" | Should -ReturnZeroExitCode
}
}
}
It "MSBuild is available" {
"msbuild -version" | Should -ReturnZeroExitCode
}
}
Describe "Xamarin.iOS" -Skip:($os.IsVentura -or $os.IsSonoma -or $os.IsSequoia) {
$XAMARIN_IOS_VERSIONS | ForEach-Object {
Context "$_" {
$XAMARIN_IOS_VERSIONS_PATH = "/Library/Frameworks/Xamarin.iOS.framework/Versions"
$versionFolderPath = Join-Path $XAMARIN_IOS_VERSIONS_PATH $_
$testCase = @{ XamarinIosVersion = $_; VersionFolderPath = $versionFolderPath; IosVersionsPath = $XAMARIN_IOS_VERSIONS_PATH }
It "is installed" -TestCases $testCase {
param ( [string] $VersionFolderPath )
$xamarinBinPath = Join-Path $VersionFolderPath "bin"
$VersionFolderPath | Should -Exist
$xamarinBinPath | Should -Exist
}
It "is available via short link" -TestCases $testCase {
param (
[string] $XamarinIosVersion,
[string] $IosVersionsPath,
[string] $VersionFolderPath
)
$shortSymlink = Get-ShortSymlink $XamarinIosVersion # only 'major.minor'
$shortSymlinkFolderPath = Join-Path $IosVersionsPath $shortSymlink
$shortVersionPath = Join-Path $shortSymlinkFolderPath "VERSION"
$fullVersionPath = Join-Path $VersionFolderPath "VERSION"
Confirm-IdenticalFileContent -File1 $shortVersionPath -File2 $fullVersionPath
}
}
}
}
Describe "Xamarin.Mac" -Skip:($os.IsVentura -or $os.IsSonoma -or $os.IsSequoia) {
$XAMARIN_MAC_VERSIONS | ForEach-Object {
Context "$_" {
$XAMARIN_MAC_VERSIONS_PATH = "/Library/Frameworks/Xamarin.Mac.framework/Versions"
$versionFolderPath = Join-Path $XAMARIN_MAC_VERSIONS_PATH $_
$testCase = @{ XamarinMacVersion = $_; VersionFolderPath = $versionFolderPath; MacVersionsPath = $XAMARIN_MAC_VERSIONS_PATH }
It "is installed" -TestCases $testCase {
param ( [string] $VersionFolderPath )
$xamarinBinPath = Join-Path $VersionFolderPath "bin"
$VersionFolderPath | Should -Exist
$xamarinBinPath | Should -Exist
}
It "is available via short link" -TestCases $testCase {
param (
[string] $XamarinMacVersion,
[string] $MacVersionsPath,
[string] $VersionFolderPath
)
$shortSymlink = Get-ShortSymlink $XamarinMacVersion # only 'major.minor'
$shortSymlinkFolderPath = Join-Path $MacVersionsPath $shortSymlink
$shortVersionPath = Join-Path $shortSymlinkFolderPath "VERSION"
$fullVersionPath = Join-Path $VersionFolderPath "VERSION"
Confirm-IdenticalFileContent -File1 $shortVersionPath -File2 $fullVersionPath
}
}
}
}
Describe "Xamarin.Android" -Skip:($os.IsVentura -or $os.IsSonoma -or $os.IsSequoia) {
$XAMARIN_ANDROID_VERSIONS | ForEach-Object {
Context "$_" {
$XAMARIN_ANDROID_VERSIONS_PATH = "/Library/Frameworks/Xamarin.Android.framework/Versions"
$versionFolderPath = Join-Path $XAMARIN_ANDROID_VERSIONS_PATH $_
$testCase = @{ XamarinAndroidVersion = $_; VersionFolderPath = $versionFolderPath; AndroidVersionsPath = $XAMARIN_ANDROID_VERSIONS_PATH }
It "is installed" -TestCases $testCase {
param ( [string] $VersionFolderPath )
$xamarinLibPath = Join-Path $VersionFolderPath "lib"
$xamarinLibPath | Should -Exist
}
It "is available via short link" -TestCases $testCase {
param (
[string] $XamarinAndroidVersion,
[string] $AndroidVersionsPath,
[string] $VersionFolderPath
)
$shortSymlink = Get-ShortSymlink $XamarinAndroidVersion # only 'major.minor'
$shortSymlinkFolderPath = Join-Path $AndroidVersionsPath $shortSymlink
$shortVersionPath = Join-Path $shortSymlinkFolderPath "VERSION"
$fullVersionPath = Join-Path $VersionFolderPath "VERSION"
Confirm-IdenticalFileContent -File1 $shortVersionPath -File2 $fullVersionPath
}
It "has correct symlinks" -TestCases $testCase {
param ( [string] $VersionFolderPath )
$xamarinLibPath = Join-Path $VersionFolderPath "lib"
Join-Path $xamarinLibPath "xbuild" | Should -Exist
Join-Path $xamarinLibPath "xbuild-frameworks" | Should -Exist
}
}
}
}
Describe "Xamarin Bundles" -Skip:($os.IsVentura -or $os.IsSonoma -or $os.IsSequoia) {
BeforeAll {
$MONO_VERSIONS_PATH = "/Library/Frameworks/Mono.framework/Versions"
$XAMARIN_IOS_VERSIONS_PATH = "/Library/Frameworks/Xamarin.iOS.framework/Versions"
$XAMARIN_MAC_VERSIONS_PATH = "/Library/Frameworks/Xamarin.Mac.framework/Versions"
$XAMARIN_ANDROID_VERSIONS_PATH = "/Library/Frameworks/Xamarin.Android.framework/Versions"
}
If ($XAMARIN_BUNDLES.Count -eq 0) { return } # Skip this test if there are no bundles
[array]$XAMARIN_BUNDLES = (Get-ToolsetContent).xamarin.bundles
$XAMARIN_DEFAULT_BUNDLE = (Get-ToolsetContent).xamarin.bundle_default
If ($XAMARIN_DEFAULT_BUNDLE -eq "latest") { $XAMARIN_DEFAULT_BUNDLE = $XAMARIN_BUNDLES[0].symlink }
$currentBundle = [PSCustomObject] @{
symlink = "Current"
mono = $XAMARIN_DEFAULT_BUNDLE
ios = $XAMARIN_DEFAULT_BUNDLE
mac = $XAMARIN_DEFAULT_BUNDLE
android = $XAMARIN_DEFAULT_BUNDLE
}
$latestBundle = [PSCustomObject] @{
symlink = "Latest"
mono = $XAMARIN_BUNDLES[0].mono
ios = $XAMARIN_BUNDLES[0].ios
mac = $XAMARIN_BUNDLES[0].mac
android = $XAMARIN_BUNDLES[0].android
}
$bundles = $XAMARIN_BUNDLES + $currentBundle + $latestBundle
$allBundles = $bundles | ForEach-Object { @{BundleSymlink = $_.symlink; BundleMono = $_.mono; BundleIos = $_.ios; BundleMac = $_.mac; BundleAndroid = $_.android } }
It "Mono symlink <BundleSymlink> exists" -TestCases $allBundles {
param ( [string] $BundleSymlink )
(Join-Path $MONO_VERSIONS_PATH $BundleSymlink) | Should -Exist
}
It "Mono symlink <BundleSymlink> points to the correct version" -TestCases $allBundles {
param (
[string] $BundleSymlink,
[string] $BundleMono
)
if ($BundleMono -eq "4.8") { return } # Skip this test for Mono 4.8 because it doesn't contain VERSION file
$sourceVersionPath = Join-Path $MONO_VERSIONS_PATH $BundleMono "VERSION"
$targetVersionPath = Join-Path $MONO_VERSIONS_PATH $BundleSymlink "VERSION"
Confirm-IdenticalFileContent -File1 $targetVersionPath -File2 $sourceVersionPath
}
It "iOS symlink <BundleSymlink> exists" -TestCases $allBundles {
param ( [string] $BundleSymlink )
(Join-Path $XAMARIN_IOS_VERSIONS_PATH $BundleSymlink) | Should -Exist
}
It "iOS symlink <BundleSymlink> points to the correct version" -TestCases $allBundles {
param (
[string] $BundleSymlink,
[string] $BundleIos
)
$sourceVersionPath = Join-Path $XAMARIN_IOS_VERSIONS_PATH $BundleIos "VERSION"
$targetVersionPath = Join-Path $XAMARIN_IOS_VERSIONS_PATH $BundleSymlink "VERSION"
Confirm-IdenticalFileContent -File1 $targetVersionPath -File2 $sourceVersionPath
}
It "Mac symlink <BundleSymlink> exists" -TestCases $allBundles {
param ( [string] $BundleSymlink )
(Join-Path $XAMARIN_MAC_VERSIONS_PATH $BundleSymlink) | Should -Exist
}
It "Mac symlink <BundleSymlink> points to the correct version" -TestCases $allBundles {
param (
[string] $BundleSymlink,
[string] $BundleMac
)
$sourceVersionPath = Join-Path $XAMARIN_MAC_VERSIONS_PATH $BundleMac "VERSION"
$targetVersionPath = Join-Path $XAMARIN_MAC_VERSIONS_PATH $BundleSymlink "VERSION"
Confirm-IdenticalFileContent -File1 $targetVersionPath -File2 $sourceVersionPath
}
It "Xamarin.Android symlink <BundleSymlink> exists" -TestCases $allBundles {
param ( [string] $BundleSymlink )
(Join-Path $XAMARIN_ANDROID_VERSIONS_PATH $BundleSymlink) | Should -Exist
}
It "Android symlink <BundleSymlink> points to the correct version" -TestCases $allBundles {
param (
[string] $BundleSymlink,
[string] $BundleAndroid
)
$sourceVersionPath = Join-Path $XAMARIN_ANDROID_VERSIONS_PATH $BundleAndroid "VERSION"
$targetVersionPath = Join-Path $XAMARIN_ANDROID_VERSIONS_PATH $BundleSymlink "VERSION"
Confirm-IdenticalFileContent -File1 $targetVersionPath -File2 $sourceVersionPath
}
}
Describe "Nuget" -Skip:($os.IsVentura -or $os.IsSonoma -or $os.IsSequoia) {
It "Nuget config contains nuget.org feed" {
Get-Content $env:HOME/.config/NuGet/NuGet.Config | Out-String | Should -Match "nuget.org"
}
}
@@ -122,3 +122,20 @@ Describe "Xcode simulators" {
Switch-Xcode -Version $defaultXcode
}
}
Describe "Xcode Simulators Naming" -Skip:(-not $os.IsMonterey) {
$testCases = Get-BrokenXcodeSimulatorsList
It "Simulator '<SimulatorName> [<RuntimeId>]'" -TestCases $testCases {
$simctlPath = Get-XcodeToolPath -Version $XcodeVersion -ToolName "simctl"
[string]$rawDevicesInfo = Invoke-Expression "$simctlPath list devices --json"
$jsonDevicesInfo = ($rawDevicesInfo | ConvertFrom-Json).devices
$foundSimulators = $jsonDevicesInfo.$RuntimeId | Where-Object { $_.deviceTypeIdentifier -eq $DeviceId }
$foundSimulators | Should -HaveCount 1
$foundSimulators[0].name | Should -Be $SimulatorName
$foundSimulators = $jsonDevicesInfo.$RuntimeId | Where-Object { $_.name -eq $SimulatorName }
$foundSimulators | Should -HaveCount 1
$foundSimulators[0].deviceTypeIdentifier | Should -Be $DeviceId
}
}
@@ -0,0 +1,315 @@
packer {
required_plugins {
veertu-anka = {
version = ">= v3.2.0"
source = "github.com/veertuinc/veertu-anka"
}
}
}
locals {
image_folder = "/Users/${var.vm_username}/image-generation"
}
variable "builder_type" {
type = string
default = "veertu-anka-vm-clone"
validation {
condition = contains(["veertu-anka-vm-clone", "null"], var.builder_type)
error_message = "The builder_type value must be one of [veertu-anka-vm-clone, null]."
}
}
variable "source_vm_name" {
type = string
}
variable "source_vm_port" {
type = number
default = 22
}
variable "source_vm_tag" {
type = string
default = ""
}
variable "socks_proxy" {
type = string
default = ""
}
variable "build_id" {
type = string
}
variable "vm_username" {
type = string
sensitive = true
}
variable "vm_password" {
type = string
sensitive = true
}
variable "github_api_pat" {
type = string
sensitive = true
default = ""
}
variable "xcode_install_storage_url" {
type = string
sensitive = true
}
variable "xcode_install_sas" {
type = string
sensitive = true
}
variable "vcpu_count" {
type = string
default = "6"
}
variable "ram_size" {
type = string
default = "24G"
}
variable "image_os" {
type = string
default = "macos12"
}
source "veertu-anka-vm-clone" "template" {
vm_name = "${var.build_id}"
source_vm_name = "${var.source_vm_name}"
source_vm_tag = "${var.source_vm_tag}"
vcpu_count = "${var.vcpu_count}"
ram_size = "${var.ram_size}"
stop_vm = "true"
}
source "null" "template" {
ssh_host = "${var.source_vm_name}"
ssh_port = "${var.source_vm_port}"
ssh_username = "${var.vm_username}"
ssh_password = "${var.vm_password}"
ssh_proxy_host = "${var.socks_proxy}"
}
build {
sources = ["source.${var.builder_type}.template"]
provisioner "shell" {
inline = ["mkdir ${local.image_folder}"]
}
provisioner "file" {
destination = "${local.image_folder}/"
sources = [
"${path.root}/../assets/xamarin-selector",
"${path.root}/../scripts/tests",
"${path.root}/../scripts/docs-gen",
"${path.root}/../scripts/helpers"
]
}
provisioner "file" {
destination = "${local.image_folder}/docs-gen/"
source = "${path.root}/../../../helpers/software-report-base"
}
provisioner "file" {
destination = "${local.image_folder}/add-certificate.swift"
source = "${path.root}/../assets/add-certificate.swift"
}
provisioner "file" {
destination = ".bashrc"
source = "${path.root}/../assets/bashrc"
}
provisioner "file" {
destination = ".bash_profile"
source = "${path.root}/../assets/bashprofile"
}
provisioner "shell" {
inline = [ "mkdir ~/bootstrap" ]
}
provisioner "file" {
destination = "bootstrap"
source = "${path.root}/../assets/bootstrap-provisioner/"
}
provisioner "file" {
destination = "${local.image_folder}/toolset.json"
source = "${path.root}/../toolsets/toolset-12.json"
}
provisioner "shell" {
execute_command = "sudo sh -c '{{ .Vars }} {{ .Path }}'"
inline = [
"mv ${local.image_folder}/docs-gen ${local.image_folder}/software-report",
"mv ${local.image_folder}/xamarin-selector ${local.image_folder}/assets",
"mkdir ~/utils",
"mv ${local.image_folder}/helpers/confirm-identified-developers.scpt ~/utils",
"mv ${local.image_folder}/helpers/invoke-tests.sh ~/utils",
"mv ${local.image_folder}/helpers/utils.sh ~/utils",
"mv ${local.image_folder}/helpers/xamarin-utils.sh ~/utils"
]
}
provisioner "shell" {
execute_command = "chmod +x {{ .Path }}; source $HOME/.bash_profile; {{ .Vars }} {{ .Path }}"
scripts = [
"${path.root}/../scripts/build/install-xcode-clt.sh",
"${path.root}/../scripts/build/install-homebrew.sh"
]
}
provisioner "shell" {
environment_vars = ["PASSWORD=${var.vm_password}", "USERNAME=${var.vm_username}"]
execute_command = "chmod +x {{ .Path }}; source $HOME/.bash_profile; sudo {{ .Vars }} {{ .Path }}"
scripts = [
"${path.root}/../scripts/build/configure-tccdb-macos.sh",
"${path.root}/../scripts/build/configure-network-interface-detection.sh",
"${path.root}/../scripts/build/configure-autologin.sh",
"${path.root}/../scripts/build/configure-auto-updates.sh",
"${path.root}/../scripts/build/configure-screensaver.sh",
"${path.root}/../scripts/build/configure-ntpconf.sh",
"${path.root}/../scripts/build/configure-max-files-limitation.sh",
"${path.root}/../scripts/build/configure-shell.sh"
]
}
provisioner "shell" {
environment_vars = ["IMAGE_VERSION=${var.build_id}", "IMAGE_OS=${var.image_os}", "PASSWORD=${var.vm_password}"]
execute_command = "chmod +x {{ .Path }}; source $HOME/.bash_profile; {{ .Vars }} {{ .Path }}"
scripts = [
"${path.root}/../scripts/build/configure-preimagedata.sh",
"${path.root}/../scripts/build/configure-ssh.sh",
"${path.root}/../scripts/build/configure-machine.sh"
]
}
provisioner "shell" {
execute_command = "source $HOME/.bash_profile; sudo {{ .Vars }} {{ .Path }}"
expect_disconnect = true
inline = ["echo 'Reboot VM'", "shutdown -r now"]
}
provisioner "shell" {
environment_vars = ["API_PAT=${var.github_api_pat}", "USER_PASSWORD=${var.vm_password}", "IMAGE_FOLDER=${local.image_folder}"]
execute_command = "chmod +x {{ .Path }}; source $HOME/.bash_profile; {{ .Vars }} {{ .Path }}"
pause_before = "30s"
scripts = [
"${path.root}/../scripts/build/configure-windows.sh",
"${path.root}/../scripts/build/install-powershell.sh",
"${path.root}/../scripts/build/install-dotnet.sh",
"${path.root}/../scripts/build/install-python.sh",
"${path.root}/../scripts/build/install-azcopy.sh",
"${path.root}/../scripts/build/install-openssl.sh",
"${path.root}/../scripts/build/install-ruby.sh",
"${path.root}/../scripts/build/install-rubygems.sh",
"${path.root}/../scripts/build/install-git.sh",
"${path.root}/../scripts/build/install-mongodb.sh",
"${path.root}/../scripts/build/install-node.sh",
"${path.root}/../scripts/build/install-common-utils.sh"
]
}
provisioner "shell" {
environment_vars = ["XCODE_INSTALL_STORAGE_URL=${var.xcode_install_storage_url}", "XCODE_INSTALL_SAS=${var.xcode_install_sas}", "IMAGE_FOLDER=${local.image_folder}"]
execute_command = "chmod +x {{ .Path }}; source $HOME/.bash_profile; {{ .Vars }} pwsh -f {{ .Path }}"
script = "${path.root}/../scripts/build/Install-Xcode.ps1"
}
provisioner "shell" {
execute_command = "source $HOME/.bash_profile; sudo {{ .Vars }} {{ .Path }}"
expect_disconnect = true
inline = ["echo 'Reboot VM'", "shutdown -r now"]
}
provisioner "shell" {
environment_vars = ["API_PAT=${var.github_api_pat}", "IMAGE_FOLDER=${local.image_folder}"]
execute_command = "chmod +x {{ .Path }}; source $HOME/.bash_profile; {{ .Vars }} {{ .Path }}"
scripts = [
"${path.root}/../scripts/build/install-actions-cache.sh",
"${path.root}/../scripts/build/install-llvm.sh",
"${path.root}/../scripts/build/install-golang.sh",
"${path.root}/../scripts/build/install-swiftlint.sh",
"${path.root}/../scripts/build/install-openjdk.sh",
"${path.root}/../scripts/build/install-php.sh",
"${path.root}/../scripts/build/install-aws-tools.sh",
"${path.root}/../scripts/build/install-rust.sh",
"${path.root}/../scripts/build/install-gcc.sh",
"${path.root}/../scripts/build/install-haskell.sh",
"${path.root}/../scripts/build/install-cocoapods.sh",
"${path.root}/../scripts/build/install-android-sdk.sh",
"${path.root}/../scripts/build/install-xamarin.sh",
"${path.root}/../scripts/build/install-visualstudio.sh",
"${path.root}/../scripts/build/install-nvm.sh",
"${path.root}/../scripts/build/install-apache.sh",
"${path.root}/../scripts/build/install-nginx.sh",
"${path.root}/../scripts/build/install-postgresql.sh",
"${path.root}/../scripts/build/install-audiodevice.sh",
"${path.root}/../scripts/build/install-vcpkg.sh",
"${path.root}/../scripts/build/install-miniconda.sh",
"${path.root}/../scripts/build/install-safari.sh",
"${path.root}/../scripts/build/install-chrome.sh",
"${path.root}/../scripts/build/install-edge.sh",
"${path.root}/../scripts/build/install-firefox.sh",
"${path.root}/../scripts/build/install-pypy.sh",
"${path.root}/../scripts/build/install-pipx-packages.sh",
"${path.root}/../scripts/build/install-bicep.sh",
"${path.root}/../scripts/build/install-codeql-bundle.sh",
"${path.root}/../scripts/build/install-compilable-brew-packages.sh"
]
}
provisioner "shell" {
environment_vars = ["IMAGE_FOLDER=${local.image_folder}"]
execute_command = "chmod +x {{ .Path }}; source $HOME/.bash_profile; {{ .Vars }} pwsh -f {{ .Path }}"
scripts = [
"${path.root}/../scripts/build/Install-Toolset.ps1",
"${path.root}/../scripts/build/Configure-Toolset.ps1"
]
}
provisioner "shell" {
execute_command = "source $HOME/.bash_profile; ruby {{ .Path }}"
script = "${path.root}/../scripts/build/configure-xcode-simulators.rb"
}
provisioner "shell" {
execute_command = "chmod +x {{ .Path }}; {{ .Vars }} pwsh -f {{ .Path }}"
script = "${path.root}/../scripts/build/Update-XcodeSimulators.ps1"
}
provisioner "shell" {
environment_vars = ["IMAGE_FOLDER=${local.image_folder}"]
execute_command = "source $HOME/.bash_profile; {{ .Vars }} {{ .Path }}"
inline = [
"pwsh -File \"${local.image_folder}/software-report/Generate-SoftwareReport.ps1\" -OutputDirectory \"${local.image_folder}/output/software-report\" -ImageName ${var.build_id}",
"pwsh -File \"${local.image_folder}/tests/RunAll-Tests.ps1\""
]
}
provisioner "file" {
destination = "${path.root}/../../image-output/"
direction = "download"
source = "${local.image_folder}/output/"
}
provisioner "shell" {
execute_command = "chmod +x {{ .Path }}; source $HOME/.bash_profile; {{ .Vars }} {{ .Path }}"
scripts = [
"${path.root}/../scripts/build/configure-hostname.sh",
"${path.root}/../scripts/build/configure-system.sh"
]
}
}
+3 -1
View File
@@ -111,6 +111,7 @@ build {
provisioner "file" {
destination = "${local.image_folder}/"
sources = [
"${path.root}/../assets/xamarin-selector",
"${path.root}/../scripts/tests",
"${path.root}/../scripts/docs-gen",
"${path.root}/../scripts/helpers"
@@ -155,10 +156,12 @@ build {
execute_command = "sudo sh -c '{{ .Vars }} {{ .Path }}'"
inline = [
"mv ${local.image_folder}/docs-gen ${local.image_folder}/software-report",
"mv ${local.image_folder}/xamarin-selector ${local.image_folder}/assets",
"mkdir ~/utils",
"mv ${local.image_folder}/helpers/confirm-identified-developers-macos13.scpt ~/utils",
"mv ${local.image_folder}/helpers/invoke-tests.sh ~/utils",
"mv ${local.image_folder}/helpers/utils.sh ~/utils",
"mv ${local.image_folder}/helpers/xamarin-utils.sh ~/utils"
]
}
@@ -236,7 +239,6 @@ build {
execute_command = "chmod +x {{ .Path }}; source $HOME/.bash_profile; {{ .Vars }} {{ .Path }}"
scripts = [
"${path.root}/../scripts/build/install-actions-cache.sh",
"${path.root}/../scripts/build/install-runner-package.sh",
"${path.root}/../scripts/build/install-llvm.sh",
"${path.root}/../scripts/build/install-swiftlint.sh",
"${path.root}/../scripts/build/install-openjdk.sh",
@@ -112,6 +112,7 @@ build {
provisioner "file" {
destination = "${local.image_folder}/"
sources = [
"${path.root}/../assets/xamarin-selector",
"${path.root}/../scripts/tests",
"${path.root}/../scripts/docs-gen",
"${path.root}/../scripts/helpers"
@@ -156,9 +157,12 @@ build {
execute_command = "sudo sh -c '{{ .Vars }} {{ .Path }}'"
inline = [
"mv ${local.image_folder}/docs-gen ${local.image_folder}/software-report",
"mv ${local.image_folder}/xamarin-selector ${local.image_folder}/assets",
"mkdir ~/utils",
"mv ${local.image_folder}/helpers/confirm-identified-developers.scpt ~/utils",
"mv ${local.image_folder}/helpers/invoke-tests.sh ~/utils",
"mv ${local.image_folder}/helpers/utils.sh ~/utils",
"mv ${local.image_folder}/helpers/xamarin-utils.sh ~/utils"
]
}
@@ -237,7 +241,6 @@ build {
execute_command = "chmod +x {{ .Path }}; source $HOME/.bash_profile; {{ .Vars }} {{ .Path }}"
scripts = [
"${path.root}/../scripts/build/install-actions-cache.sh",
"${path.root}/../scripts/build/install-runner-package.sh",
"${path.root}/../scripts/build/install-llvm.sh",
"${path.root}/../scripts/build/install-openjdk.sh",
"${path.root}/../scripts/build/install-aws-tools.sh",
+3 -1
View File
@@ -111,6 +111,7 @@ build {
provisioner "file" {
destination = "${local.image_folder}/"
sources = [
"${path.root}/../assets/xamarin-selector",
"${path.root}/../scripts/tests",
"${path.root}/../scripts/docs-gen",
"${path.root}/../scripts/helpers"
@@ -155,10 +156,12 @@ build {
execute_command = "sudo sh -c '{{ .Vars }} {{ .Path }}'"
inline = [
"mv ${local.image_folder}/docs-gen ${local.image_folder}/software-report",
"mv ${local.image_folder}/xamarin-selector ${local.image_folder}/assets",
"mkdir ~/utils",
"mv ${local.image_folder}/helpers/confirm-identified-developers-macos14.scpt ~/utils",
"mv ${local.image_folder}/helpers/invoke-tests.sh ~/utils",
"mv ${local.image_folder}/helpers/utils.sh ~/utils",
"mv ${local.image_folder}/helpers/xamarin-utils.sh ~/utils"
]
}
@@ -235,7 +238,6 @@ build {
execute_command = "chmod +x {{ .Path }}; source $HOME/.bash_profile; {{ .Vars }} {{ .Path }}"
scripts = [
"${path.root}/../scripts/build/install-actions-cache.sh",
"${path.root}/../scripts/build/install-runner-package.sh",
"${path.root}/../scripts/build/install-llvm.sh",
"${path.root}/../scripts/build/install-swiftlint.sh",
"${path.root}/../scripts/build/install-openjdk.sh",
@@ -112,6 +112,7 @@ build {
provisioner "file" {
destination = "${local.image_folder}/"
sources = [
"${path.root}/../assets/xamarin-selector",
"${path.root}/../scripts/tests",
"${path.root}/../scripts/docs-gen",
"${path.root}/../scripts/helpers"
@@ -156,9 +157,12 @@ build {
execute_command = "sudo sh -c '{{ .Vars }} {{ .Path }}'"
inline = [
"mv ${local.image_folder}/docs-gen ${local.image_folder}/software-report",
"mv ${local.image_folder}/xamarin-selector ${local.image_folder}/assets",
"mkdir ~/utils",
"mv ${local.image_folder}/helpers/confirm-identified-developers.scpt ~/utils",
"mv ${local.image_folder}/helpers/invoke-tests.sh ~/utils",
"mv ${local.image_folder}/helpers/utils.sh ~/utils",
"mv ${local.image_folder}/helpers/xamarin-utils.sh ~/utils"
]
}
@@ -236,7 +240,6 @@ build {
execute_command = "chmod +x {{ .Path }}; source $HOME/.bash_profile; {{ .Vars }} {{ .Path }}"
scripts = [
"${path.root}/../scripts/build/install-actions-cache.sh",
"${path.root}/../scripts/build/install-runner-package.sh",
"${path.root}/../scripts/build/install-llvm.sh",
"${path.root}/../scripts/build/install-openjdk.sh",
"${path.root}/../scripts/build/install-aws-tools.sh",
@@ -156,7 +156,6 @@ build {
inline = [
"mv ${local.image_folder}/docs-gen ${local.image_folder}/software-report",
"mkdir ~/utils",
"mv ${local.image_folder}/helpers/confirm-identified-developers-macos15.scpt ~/utils",
"mv ${local.image_folder}/helpers/invoke-tests.sh ~/utils",
"mv ${local.image_folder}/helpers/utils.sh ~/utils"
]
@@ -234,7 +233,6 @@ build {
execute_command = "chmod +x {{ .Path }}; source $HOME/.bash_profile; {{ .Vars }} {{ .Path }}"
scripts = [
"${path.root}/../scripts/build/install-actions-cache.sh",
"${path.root}/../scripts/build/install-runner-package.sh",
"${path.root}/../scripts/build/install-llvm.sh",
"${path.root}/../scripts/build/install-swiftlint.sh",
"${path.root}/../scripts/build/install-openjdk.sh",
@@ -235,7 +235,6 @@ build {
execute_command = "chmod +x {{ .Path }}; source $HOME/.bash_profile; {{ .Vars }} {{ .Path }}"
scripts = [
"${path.root}/../scripts/build/install-actions-cache.sh",
"${path.root}/../scripts/build/install-runner-package.sh",
"${path.root}/../scripts/build/install-llvm.sh",
"${path.root}/../scripts/build/install-openjdk.sh",
"${path.root}/../scripts/build/install-aws-tools.sh",
+64 -8
View File
@@ -6,19 +6,19 @@
- `link` property points to the place where Xcode will be located on image. `/Applications/Xcode_<link>.app`
- `version` points to Xcode version that will be downloaded and installed
- `symlinks` describes the list of aliases where symlinks will be created to
- `install_runtimes` is an array or boolean function to control over the related simulator runtimes, set of possible values: [ `iOS`, `watchOS`, `visionOS`, `tvOS` ], use `true` if you want to install all runtimes, use `false` if you want to skip runtimes installation
- `install_runtimes` is boolean function to control over the related simulator runtimes
- `sha256` used to check integrity of the Xcode installer file
- `default` - version of Xcode to set as default (should be metched with any `link` in `versions` property)
**Example:** `"11.2"`
**Note:**
- `version` is specified with `+` or `-`, exact Xcode name should be like `16.2.0-Beta.3+16C5023f` or `16.2_Release_Candidate+16C5031c` and will be matching `.xip` file name.
- `link` is specified with `_` and doesn't contain spaces, example: `16.2_Release_Candidate` or `16.1`; pattern description:
- DOWNLOAD_URL="https://download.developer.apple.com/Developer_Tools/$SOURCE_FILE_LOCATION/$SOURCE_FILE_NAME.$FILE_EXTENSION"
- SOURCE_FILE_NAME: "Xcode_$link"
- SOURCE_FILE_LOCATION: "Xcode_$link"
- FILE_EXTENSION: xip
- If `version` is specified with spaces, it is considered as exact Xcode name like `12.1.1 Release Candidate`.
- If `version` doesn't contain spaces, the latest version will be resolved with the following priority:
- stable version like `12.1`
- release candidate version like `12.1 Release Candidate N` (the latest N will be chosen)
- GM version like `12.1 GM Seed N` (the latest N will be chosen)
- beta version like `12.1 beta N` (the latest N will be chosen)
**Example:**
@@ -29,6 +29,62 @@
]
```
## Xamarin
- `vsmac` - version of Visual Studio For Mac to install.
**Example:** `"8.3.11.1"`
- `mono_versions` - the array of Mono versions to install.
**Example:** `[ "6.4.0.208", "6.0.0.334" ]`
- `ios_versions` - the array of Xamarin iOS versions to install.
**Example:** `[ "13.6.0.12", "13.4.0.2", "13.2.0.47" ]`
- `mac_versions` - the array of Xamarin iOS versions to install.
**Example:** `[ "6.6.0.12", "6.4.0.2", "6.2.0.47" ]`
- `android_versions` - the array of Xamarin iOS versions to install.
**Example:** `[ "10.0.6.2", "9.4.1.0" ]`
**Note:** More than one version of SDK with the same major.minor version should not be installed. It applies to `mono_versions`, `ios_versions`, `mac_versions`, `android_versions` fields.
For example, if Mono `6.4.0.100` is installed and Mono `6.4.1.2` was released recently, we should not install both, just update `6.4.0.100` -> `6.4.1.2`. Only major and minor version changes can break backward compatibility so it is safe.
- `bundle_default` - the symlink of the bundle that will be set as default on the image.
This bundle will be set as `Current`.
**Example:** `"5_12_0"` (set bundle with symlink `5_12_0` as default)
**Example:** `"latest"` (set latest bundle as default)
- `bundles` - the array of objects that describe bundles that will be created on image after sdk installation.
The first bundle in the list will be as `Latest`.
Each object should contain the following fields:
- `symlink` - unique id of the bundle (usually looks like "<major_mono_version>_<minor_mono_version>_<index>")
- `mono` - version of Mono that will be set in this bundle. Only two numbers (`major.minor`) should be specified.
- `ios` - version of Xamarin.iOS that will be set in this bundle. Only two numbers (`major.minor`) should be specified.
- `mac` - version of Xamarin.Mac that will be set in this bundle. Only two numbers (`major.minor`) should be specified.
- `android` - version of Xamarin.Android that will be set in this bundle. Only two numbers (`major.minor`) should be specified.
**Example:**
```json
[
{
"symlink": "6_4_2",
"mono": "6.4",
"ios": "13.6",
"mac": "6.6",
"android": "10.0"
},
{
"symlink": "6_4_1",
"mono": "6.4",
"ios": "13.4",
"mac": "6.4",
"android": "10.0"
}
]
```
## Android
- `platform-list` - the array of android platforms to install.
@@ -40,7 +96,7 @@
- `extras` - the array of android extra items to install.
**Example:** `[ "google;google_play_services", "intel;Hardware_Accelerated_Execution_Manager" ]`
- `addons` - the array of android add-ons to install.
- `addons` - the array of android addons to install.
**Example:** `[ "addon-google_apis-google-24", "addon-google_apis-google-23" ]`
## Toolset JSON validation
+368
View File
@@ -0,0 +1,368 @@
{
"xcode": {
"default": "14.2",
"x64": {
"versions": [
{ "link": "14.2", "version": "14.2.0+14C18", "install_runtimes": "true", "sha256": "686B9D53CA49E50D563BC0104B1E8B4F7CCFE80064A6D689965FB819BF8EFE72" },
{ "link": "14.1", "version": "14.1.0+14B47b", "install_runtimes": "true", "sha256": "12F8A3AEF78BF354470AD8B351ADDD925C8EDAD888137D138CA50A8130EB9F2F" },
{ "link": "14.0.1", "version": "14.0.1+14A400", "symlinks": ["14.0"], "install_runtimes": "true", "sha256": "EDB4DDCE02F92338E3D10B011FC86CD26520E3238585F06F3C182880DDD3B2AF" },
{ "link": "13.4.1", "version": "13.4.1+13F100", "symlinks": ["13.4"], "sha256": "A1E0DBD6D5A96C4A6D3D63600B58486759AA836C2D9F7E8FA6D7DA4C7399638B" },
{ "link": "13.3.1", "version": "13.3.1+13E500a", "symlinks": ["13.3"], "sha256": "D10B4644DB84BA43F7B18CE94FB3CA1ACD255D39781F4AF8FC88BD8581E08F97" },
{ "link": "13.2.1", "version": "13.2.1+13C100", "symlinks": ["13.2"], "sha256": "D3BFCC6225D531587490C0DFC0926C80B7D50D17671DC8F25868F965F5D65F9D" },
{ "link": "13.1", "version": "13.1.0+13A1030d", "sha256": "4EFDEEA0EEEDA1957BB394128CCCD1DAAC3CB0A3D074224E0FAB90855CCA09C4" }
]
}
},
"xamarin": {
"vsmac": {
"default": "2022",
"versions": [ "2019", "2022" ]
},
"mono_versions": [
"6.12.0.188"
],
"ios_versions": [
"16.4.0.23", "16.2.0.5", "16.1.1.27", "16.0.0.72", "15.12.0.2", "15.10.0.5", "15.8.0.3", "15.6.0.3", "15.4.0.0", "15.2.0.17", "15.0.0.6"
],
"mac_versions": [
"9.3.0.23", "9.1.0.5", "9.0.0.27", "8.12.0.2", "8.10.0.5", "8.8.0.3", "8.6.0.3", "8.4.0.0", "8.2.0.17", "7.14.0.27"
],
"android_versions": [
"13.2.2.0", "13.1.0.1", "13.0.0.0", "12.3.3.3", "12.2.8.3", "12.1.0.2", "12.0.0.3", "11.3.0.4"
],
"bundle_default": "6_12_21",
"bundles": [
{
"symlink": "6_12_25",
"mono":"6.12",
"ios": "16.4",
"mac": "9.3",
"android": "13.2"
},
{
"symlink": "6_12_24",
"mono":"6.12",
"ios": "16.2",
"mac": "9.1",
"android": "13.2"
},
{
"symlink": "6_12_23",
"mono":"6.12",
"ios": "16.2",
"mac": "9.1",
"android": "13.1"
},
{
"symlink": "6_12_22",
"mono":"6.12",
"ios": "16.1",
"mac": "9.0",
"android": "13.1"
},
{
"symlink": "6_12_21",
"mono":"6.12",
"ios": "16.0",
"mac": "8.12",
"android": "13.1"
},
{
"symlink": "6_12_20",
"mono":"6.12",
"ios": "16.0",
"mac": "8.12",
"android": "13.0"
},
{
"symlink": "6_12_19",
"mono":"6.12",
"ios": "15.12",
"mac": "8.12",
"android": "13.0"
},
{
"symlink": "6_12_18",
"mono":"6.12",
"ios": "15.10",
"mac": "8.10",
"android": "12.3"
},
{
"symlink": "6_12_17",
"mono":"6.12",
"ios": "15.10",
"mac": "8.10",
"android": "12.2"
},
{
"symlink": "6_12_16",
"mono":"6.12",
"ios": "15.8",
"mac": "8.8",
"android": "12.2"
},
{
"symlink": "6_12_15",
"mono":"6.12",
"ios": "15.8",
"mac": "8.8",
"android": "12.1"
},
{
"symlink": "6_12_14",
"mono":"6.12",
"ios": "15.8",
"mac": "8.8",
"android": "12.0"
},
{
"symlink": "6_12_13",
"mono":"6.12",
"ios": "15.6",
"mac": "8.6",
"android": "12.0"
},
{
"symlink": "6_12_12",
"mono":"6.12",
"ios": "15.4",
"mac": "8.4",
"android": "12.0"
},
{
"symlink": "6_12_11",
"mono":"6.12",
"ios": "15.2",
"mac": "8.2",
"android": "12.0"
},
{
"symlink": "6_12_10",
"mono":"6.12",
"ios": "15.0",
"mac": "7.14",
"android": "11.3"
}
]
},
"java": {
"x64": {
"default": "8",
"versions": [ "8", "11", "17", "21"]
}
},
"android": {
"cmdline-tools": "commandlinetools-mac-9123335_latest.zip",
"platform_min_version": "31",
"build_tools_min_version": "31.0.0",
"extras": [
"android;m2repository", "google;m2repository", "google;google_play_services"
],
"addons": [],
"additional_tools": [
"cmake;3.18.1",
"cmake;3.22.1"
],
"ndk": {
"default": "25",
"versions": [
"24", "25", "26", "27"
]
}
},
"powershellModules": [
{ "name": "Az" },
{ "name": "MarkdownPS" },
{ "name": "Pester" },
{ "name": "PSScriptAnalyzer" }
],
"npm": {
"global_packages": [
{ "name": "appcenter-cli", "test": "appcenter --version" }
]
},
"brew": {
"common_packages": [
"aria2",
"azure-cli",
"bazelisk",
"carthage",
"cmake",
"colima",
"gh",
"gnupg",
"gnu-tar",
"libpq",
"p7zip",
"packer",
"perl",
"pkg-config",
"subversion",
"swiftformat",
"swig",
"zstd",
"gmp",
"zlib",
"libxext",
"libxft",
"tcl-tk",
"r",
"yq",
"imagemagick",
"unxip",
"xcbeautify",
"xcodes"
],
"cask_packages": [
"julia",
"vagrant",
"virtualbox",
"parallels"
],
"compilable_packages": [
"ant",
"kotlin",
"sbt"
]
},
"gcc": {
"versions": [
"12",
"13",
"14"
]
},
"toolcache": [
{
"name": "Python",
"url" : "https://raw.githubusercontent.com/actions/python-versions/main/versions-manifest.json",
"platform" : "darwin",
"arch": {
"x64": {
"versions": [
"3.7.*",
"3.8.*",
"3.9.*",
"3.10.*",
"3.11.*",
"3.12.*"
]
}
}
},
{
"name": "PyPy",
"platform" : "darwin",
"arch": {
"x64": {
"versions": [
"2.7",
"3.7",
"3.8",
"3.9",
"3.10"
]
}
}
},
{
"name": "Node",
"url" : "https://raw.githubusercontent.com/actions/node-versions/main/versions-manifest.json",
"platform" : "darwin",
"arch": {
"x64": {
"versions": [
"16.*",
"18.*",
"20.*"
]
}
}
},
{
"name": "Go",
"url" : "https://raw.githubusercontent.com/actions/go-versions/main/versions-manifest.json",
"platform" : "darwin",
"arch": {
"x64": {
"variable_template" : "GOROOT_{0}_{1}_X64",
"versions": [
"1.20.*",
"1.21.*",
"1.22.*",
"1.23.*"
]
}
}
},
{
"name": "Ruby",
"arch": {
"x64": {
"versions": [
"3.0.*",
"3.1.*",
"3.2.*",
"3.3.*"
]
}
}
}
],
"pipx": [
{
"package": "yamllint",
"cmd": "yamllint --version"
}
],
"dotnet": {
"arch":{
"x64": {
"versions": [
"6.0",
"7.0",
"8.0"
]
}
}
},
"ruby": {
"default": "3.0",
"rubygems": [
"xcode-install",
"cocoapods",
"xcpretty",
"bundler",
"fastlane",
"jazzy"
]
},
"go": {
"default": "1.21"
},
"node": {
"default": "18",
"nvm_installer": "0.39.7",
"nvm_versions": [
"16",
"18",
"20"
]
},
"llvm": {
"version": "15"
},
"php": {
"version": "8.3"
},
"mongodb": {
"version": "5.0"
},
"postgresql": {
"version": "14"
},
"pwsh": {
"version": "7.4"
}
}
+12 -15
View File
@@ -81,7 +81,6 @@
"swiftformat",
"tcl-tk@8",
"zstd",
"ninja",
"gmp",
"yq",
"xcbeautify",
@@ -101,21 +100,21 @@
"dotnet": {
"arch":{
"x64": {
"versions": [
"8.0",
"9.0"
"versions": [
"7.0",
"8.0"
]
},
"arm64": {
"versions": [
"8.0",
"9.0"
"7.0",
"8.0"
]
}
}
},
"ruby": {
"default": "3.3",
"default": "3.0",
"rubygems": [
"cocoapods",
"bundler",
@@ -193,8 +192,7 @@
"versions": [
"1.21.*",
"1.22.*",
"1.23.*",
"1.24.*"
"1.23.*"
]
},
"arm64": {
@@ -202,8 +200,7 @@
"versions": [
"1.21.*",
"1.22.*",
"1.23.*",
"1.24.*"
"1.23.*"
]
}
}
@@ -213,18 +210,18 @@
"arch": {
"x64": {
"versions": [
"3.0.*",
"3.1.*",
"3.2.*",
"3.3.*",
"3.4.*"
"3.3.*"
]
},
"arm64": {
"versions": [
"3.0.*",
"3.1.*",
"3.2.*",
"3.3.*",
"3.4.*"
"3.3.*"
]
}
}
+16 -19
View File
@@ -3,8 +3,8 @@
"default": "15.4",
"x64": {
"versions": [
{ "link": "16.2", "version": "16.2+16C5032a", "install_runtimes": ["iOS -buildVersion 18.2", "watchOS", "tvOS"], "sha256": "0e367d06eb7c334ea143bada5e4422f56688aabff571bedf0d2ad9434b7290de"},
{ "link": "16.1", "version": "16.1+16B40", "install_runtimes": ["iOS", "watchOS", "tvOS"], "sha256": "8ca961d55981f983d21b99a95a6b0ac04905b837f6e11346ee86d28f12afe720"},
{ "link": "16.2", "version": "16.2+16C5032a", "install_runtimes": ["iOS", "watchOS", "tvOS"], "sha256": "0e367d06eb7c334ea143bada5e4422f56688aabff571bedf0d2ad9434b7290de"},
{ "link": "16.1", "version": "16.1+16B40", "runtimes": ["iOS", "watchOS", "tvOS"], "sha256": "8ca961d55981f983d21b99a95a6b0ac04905b837f6e11346ee86d28f12afe720"},
{ "link": "15.4", "version": "15.4.0+15F31d", "install_runtimes": "true", "sha256": "82d3d61804ff3f4c7c82085e91dc701037ddaa770e542848b2477e22f4e8aa7a"},
{ "link": "15.3", "version": "15.3.0+15E204a", "install_runtimes": "true", "sha256": "f13f6a2e2df432c3008e394640b8549a18c285acd7fd148d6c4bac8c3a5af234"},
{ "link": "15.2", "version": "15.2.0+15C500b", "install_runtimes": "true", "sha256": "04E93680C6DDBEC84666531BE412DE778AFC8EAC6AB2037F4C2BE7290818B59B"},
@@ -14,8 +14,8 @@
},
"arm64":{
"versions": [
{ "link": "16.2", "version": "16.2+16C5032a", "install_runtimes": ["iOS -buildVersion 18.2", "watchOS", "tvOS"], "sha256": "0e367d06eb7c334ea143bada5e4422f56688aabff571bedf0d2ad9434b7290de"},
{ "link": "16.1", "version": "16.1+16B40", "install_runtimes": ["iOS", "watchOS", "tvOS"], "sha256": "8ca961d55981f983d21b99a95a6b0ac04905b837f6e11346ee86d28f12afe720"},
{ "link": "16.2", "version": "16.2+16C5032a", "install_runtimes": ["iOS", "watchOS", "tvOS"], "sha256": "0e367d06eb7c334ea143bada5e4422f56688aabff571bedf0d2ad9434b7290de"},
{ "link": "16.1", "version": "16.1+16B40", "runtimes": ["iOS", "watchOS", "tvOS"], "sha256": "8ca961d55981f983d21b99a95a6b0ac04905b837f6e11346ee86d28f12afe720"},
{ "link": "15.4", "version": "15.4.0+15F31d", "install_runtimes": "true", "sha256": "82d3d61804ff3f4c7c82085e91dc701037ddaa770e542848b2477e22f4e8aa7a"},
{ "link": "15.3", "version": "15.3.0+15E204a", "install_runtimes": "true", "sha256": "f13f6a2e2df432c3008e394640b8549a18c285acd7fd148d6c4bac8c3a5af234"},
{ "link": "15.2", "version": "15.2.0+15C500b", "install_runtimes": "true", "sha256": "04E93680C6DDBEC84666531BE412DE778AFC8EAC6AB2037F4C2BE7290818B59B"},
@@ -84,7 +84,6 @@
"swiftformat",
"tcl-tk@8",
"zstd",
"ninja",
"gmp",
"yq",
"unxip",
@@ -105,21 +104,21 @@
"dotnet": {
"arch":{
"x64": {
"versions": [
"8.0",
"9.0"
"versions": [
"7.0",
"8.0"
]
},
"arm64": {
"versions": [
"8.0",
"9.0"
"7.0",
"8.0"
]
}
}
},
"ruby": {
"default": "3.3",
"default": "3.0",
"rubygems": [
"cocoapods",
"bundler",
@@ -181,8 +180,7 @@
"versions": [
"1.21.*",
"1.22.*",
"1.23.*",
"1.24.*"
"1.23.*"
]
},
"arm64": {
@@ -190,8 +188,7 @@
"versions": [
"1.21.*",
"1.22.*",
"1.23.*",
"1.24.*"
"1.23.*"
]
}
}
@@ -201,18 +198,18 @@
"arch": {
"x64": {
"versions": [
"3.0.*",
"3.1.*",
"3.2.*",
"3.3.*",
"3.4.*"
"3.3.*"
]
},
"arm64": {
"versions": [
"3.0.*",
"3.1.*",
"3.2.*",
"3.3.*",
"3.4.*"
"3.3.*"
]
}
}
+14 -44
View File
@@ -3,40 +3,17 @@
"default": "16",
"x64": {
"versions": [
{
"link": "16.3_beta_2", "version": "16.3.0-Beta.2+16E5121h", "symlinks": ["16.3"],
"install_runtimes":
[
"iOS -buildVersion 18.0", "iOS -buildVersion 18.1", "iOS -buildVersion 18.2", "iOS -buildVersion 18.3.1", "iOS -buildVersion 22E5216h",
"watchOS -buildVersion 11.0", "watchOS -buildVersion 11.1", "watchOS -buildVersion 11.2", "watchOS -buildVersion 22T5212l",
"tvOS -buildVersion 18.0", "tvOS -buildVersion 18.1", "tvOS -buildVersion 18.2", "tvOS -buildVersion 22L5218l"
],
"sha256": "f4bb80c2e93d3561ecbabc82d1a92c830d831c96afc48944baa8116e3fd0013d"
},
{ "link": "16.2", "version": "16.2+16C5032a", "install_runtimes": "false", "sha256": "0e367d06eb7c334ea143bada5e4422f56688aabff571bedf0d2ad9434b7290de"},
{ "link": "16.1", "version": "16.1+16B40", "install_runtimes": "false", "sha256": "8ca961d55981f983d21b99a95a6b0ac04905b837f6e11346ee86d28f12afe720"},
{ "link": "16", "version": "16.0.0+16A242d", "symlinks": ["16.0"], "install_runtimes": "false", "sha256": "4a26c3d102a55c7222fb145e0ee1503249c9c26c6e02dc64d783c8810b37b1e3"},
{ "link": "16.2", "version": "16.2+16C5032a", "install_runtimes": "true", "sha256": "0e367d06eb7c334ea143bada5e4422f56688aabff571bedf0d2ad9434b7290de"},
{ "link": "16.1", "version": "16.1+16B40", "install_runtimes": "true", "sha256": "8ca961d55981f983d21b99a95a6b0ac04905b837f6e11346ee86d28f12afe720"},
{ "link": "16", "version": "16.0.0+16A242d", "symlinks": ["16.0"], "install_runtimes": "true", "sha256": "4a26c3d102a55c7222fb145e0ee1503249c9c26c6e02dc64d783c8810b37b1e3"},
{ "link": "15.4", "version": "15.4.0+15F31d", "install_runtimes": "true", "sha256": "82d3d61804ff3f4c7c82085e91dc701037ddaa770e542848b2477e22f4e8aa7a"}
]
},
"arm64":{
"versions": [
{
"link": "16.3_beta_2",
"version": "16.3.0-Beta.2+16E5121h",
"symlinks": ["16.3"],
"install_runtimes":
[
"iOS -buildVersion 18.0", "iOS -buildVersion 18.1", "iOS -buildVersion 18.2", "iOS -buildVersion 18.3.1", "iOS -buildVersion 22E5216h",
"watchOS -buildVersion 11.0", "watchOS -buildVersion 11.1", "watchOS -buildVersion 11.2", "watchOS -buildVersion 22T5212l",
"tvOS -buildVersion 18.0", "tvOS -buildVersion 18.1", "tvOS -buildVersion 18.2", "tvOS -buildVersion 22L5218l",
"visionOS -buildVersion 2.0", "visionOS -buildVersion 2.1", "visionOS -buildVersion 2.2", "visionOS -buildVersion 2.3", "visionOS -buildVersion 22O5215f"
],
"sha256": "f4bb80c2e93d3561ecbabc82d1a92c830d831c96afc48944baa8116e3fd0013d"
},
{ "link": "16.2", "version": "16.2+16C5032a", "install_runtimes": "false", "sha256": "0e367d06eb7c334ea143bada5e4422f56688aabff571bedf0d2ad9434b7290de"},
{ "link": "16.1", "version": "16.1+16B40", "install_runtimes": "false", "sha256": "8ca961d55981f983d21b99a95a6b0ac04905b837f6e11346ee86d28f12afe720"},
{ "link": "16", "version": "16.0.0+16A242d", "symlinks": ["16.0"], "install_runtimes": "false", "sha256": "4a26c3d102a55c7222fb145e0ee1503249c9c26c6e02dc64d783c8810b37b1e3"},
{ "link": "16.2", "version": "16.2+16C5032a", "install_runtimes": "true", "sha256": "0e367d06eb7c334ea143bada5e4422f56688aabff571bedf0d2ad9434b7290de"},
{ "link": "16.1", "version": "16.1+16B40", "install_runtimes": "true", "sha256": "8ca961d55981f983d21b99a95a6b0ac04905b837f6e11346ee86d28f12afe720"},
{ "link": "16", "version": "16.0.0+16A242d", "symlinks": ["16.0"], "install_runtimes": "true", "sha256": "4a26c3d102a55c7222fb145e0ee1503249c9c26c6e02dc64d783c8810b37b1e3"},
{ "link": "15.4", "version": "15.4.0+15F31d", "install_runtimes": "true", "sha256": "82d3d61804ff3f4c7c82085e91dc701037ddaa770e542848b2477e22f4e8aa7a"}
]
}
@@ -100,7 +77,6 @@
"pkgconf",
"swiftformat",
"zstd",
"ninja",
"gmp",
"yq",
"unxip",
@@ -108,7 +84,7 @@
"xcodes"
],
"cask_packages": [
"parallels"
""
]
},
"gcc": {
@@ -121,15 +97,13 @@
"dotnet": {
"arch":{
"x64": {
"versions": [
"8.0",
"9.0"
"versions": [
"8.0"
]
},
"arm64": {
"versions": [
"8.0",
"9.0"
"8.0"
]
}
}
@@ -197,8 +171,7 @@
"versions": [
"1.21.*",
"1.22.*",
"1.23.*",
"1.24.*"
"1.23.*"
]
},
"arm64": {
@@ -206,8 +179,7 @@
"versions": [
"1.21.*",
"1.22.*",
"1.23.*",
"1.24.*"
"1.23.*"
]
}
}
@@ -219,16 +191,14 @@
"versions": [
"3.1.*",
"3.2.*",
"3.3.*",
"3.4.*"
"3.3.*"
]
},
"arm64": {
"versions": [
"3.1.*",
"3.2.*",
"3.3.*",
"3.4.*"
"3.3.*"
]
}
}
+117 -118
View File
@@ -1,11 +1,13 @@
| Announcements |
|-|
| [[Ubuntu] Breaking change : PostgreSQL version 14.* for Ubuntu 22.04, PostgreSQL version 16.* for Ubuntu 24.04 will be updated to version 17.* from 2025-05-09](https://github.com/actions/runner-images/issues/11723) |
| [[Windows & Ubuntu] Breaking change : Maven 3.8.* version will be updated to Maven 3.9.* from January 10,2025](https://github.com/actions/runner-images/issues/11093) |
| [[Ubuntu] Breaking Change: runner user will have UID 1001 instead of 1000 for larger runners](https://github.com/actions/runner-images/issues/10936) |
| [Ubuntu-latest workflows will use Ubuntu-24.04 image](https://github.com/actions/runner-images/issues/10636) |
***
# Ubuntu 20.04
- OS Version: 20.04.6 LTS
- Kernel Version: 5.15.0-1079-azure
- Image Version: 20250309.1.0
- Kernel Version: 5.15.0-1074-azure
- Image Version: 20241215.1.0
- Systemd version: 245.4-4ubuntu3.24
## Installed Software
@@ -16,15 +18,15 @@
- Clang-format: 10.0.0, 11.0.0, 12.0.0
- Clang-tidy: 10.0.0, 11.0.0, 12.0.0
- Dash 0.5.10.2-6
- Erlang 25.3.2 (Eshell 13.2.2)
- Erlang 25.3 (Eshell 13.2)
- Erlang rebar3 3.24.0
- GNU C++: 10.5.0
- GNU Fortran: 10.5.0
- Julia 1.11.3
- Kotlin 2.1.10-release-473
- Julia 1.11.2
- Kotlin 2.1.0-release-394
- Mono 6.12.0.200
- MSBuild 16.10.1.31701 (Mono 6.12.0.200)
- Node.js 18.20.7
- Node.js 18.20.5
- Perl 5.30.0
- Python 3.8.10
- Ruby 2.7.0p0
@@ -32,16 +34,16 @@
### Package Management
- cpan 1.64
- Helm 3.17.1
- Homebrew 4.4.23
- Miniconda 25.1.1
- Helm 3.16.3
- Homebrew 4.4.11
- Miniconda 24.9.2
- Npm 10.8.2
- NuGet 6.6.1.2
- Pip 20.0.2
- Pip3 20.0.2
- Pipx 1.7.1
- RubyGems 3.1.2
- Vcpkg (build from commit 300239058e)
- Vcpkg (build from commit b545373a9)
- Yarn 1.22.22
#### Environment variables
@@ -60,37 +62,37 @@ to accomplish this.
### Project Management
- Ant 1.10.7
- Gradle 8.13
- Lerna 8.2.1
- Maven 3.9.9
- Sbt 1.10.10
- Gradle 8.11.1
- Lerna 8.1.9
- Maven 3.8.8
- Sbt 1.10.6
### Tools
- Ansible 2.13.13
- apt-fast 1.10.0
- AzCopy 10.28.0 - available by `azcopy` and `azcopy10` aliases
- Bazel 8.1.1
- AzCopy 10.27.1 - available by `azcopy` and `azcopy10` aliases
- Bazel 8.0.0
- Bazelisk 1.25.0
- Bicep 0.33.93
- Bicep 0.32.4
- Buildah 1.22.3
- CMake 3.31.6
- CodeQL Action Bundle 2.20.1
- Docker Amazon ECR Credential Helper 0.9.1
- CMake 3.31.2
- CodeQL Action Bundle 2.20.0
- Docker Amazon ECR Credential Helper 0.9.0
- Docker Compose v2 2.27.1
- Docker-Buildx 0.21.2
- Docker-Buildx 0.19.2
- Docker Client 26.1.3
- Docker Server 26.1.3
- Fastlane 2.226.0
- Git 2.48.1
- Git LFS 3.6.1
- Git 2.47.1
- Git LFS 3.6.0
- Git-ftp 1.6.0
- Haveged 1.9.1
- Heroku 10.2.0
- Heroku 10.0.0
- HHVM (HipHop VM) 4.172.1
- jq 1.6
- Kind 0.27.0
- Kubectl 1.32.2
- Kustomize 5.6.0
- Kind 0.25.0
- Kubectl 1.32.0
- Kustomize 5.5.0
- Leiningen 2.11.2
- MediaInfo 19.09
- Mercurial 5.3.1
@@ -98,81 +100,80 @@ to accomplish this.
- n 10.1.0
- Newman 6.2.1
- nvm 0.40.1
- OpenSSL 1.1.1f-1ubuntu2.24
- Packer 1.12.0
- Parcel 2.13.3
- OpenSSL 1.1.1f-1ubuntu2.23
- Packer 1.11.2
- Parcel 2.13.2
- PhantomJS 2.1.1 2.1.1
- Podman 3.4.2
- Pulumi 3.154.0
- R 4.4.3
- Pulumi 3.143.0
- R 4.4.2
- Skopeo 1.5.0
- Sphinx Open Source Search Server 2.2.11
- SVN 1.13.0
- Terraform 1.11.1
- Terraform 1.10.2
- yamllint 1.35.1
- yq 4.45.1
- zstd 1.5.7
- Ninja 1.12.1
- yq 4.44.6
- zstd 1.5.6
### CLI Tools
- Alibaba Cloud CLI 3.0.174
- AWS CLI 2.24.20
- AWS CLI Session Manager Plugin 1.2.707.0
- AWS SAM CLI 1.134.0
- Azure CLI 2.70.0
- AWS CLI 2.22.17
- AWS CLI Session Manager Plugin 1.2.694.0
- AWS SAM CLI 1.132.0
- Azure CLI 2.67.0
- Azure CLI (azure-devops) 1.0.1
- GitHub CLI 2.68.1
- Google Cloud CLI 513.0.0
- Netlify CLI 19.0.2
- GitHub CLI 2.63.2
- Google Cloud CLI 503.0.0
- Netlify CLI 17.38.0
- OpenShift CLI 4.15.19
- ORAS CLI 1.2.2
- Vercel CLI 41.3.2
- ORAS CLI 1.2.1
- Vercel CLI 39.2.2
### Java
| Version | Environment Variable |
| ------------------- | -------------------- |
| 8.0.442+6 | JAVA_HOME_8_X64 |
| 11.0.26+4 (default) | JAVA_HOME_11_X64 |
| 17.0.14+7 | JAVA_HOME_17_X64 |
| 21.0.6+7 | JAVA_HOME_21_X64 |
| 8.0.432+6 | JAVA_HOME_8_X64 |
| 11.0.25+9 (default) | JAVA_HOME_11_X64 |
| 17.0.13+11 | JAVA_HOME_17_X64 |
| 21.0.5+11 | JAVA_HOME_21_X64 |
### PHP Tools
- PHP: 7.4.33, 8.0.30, 8.1.31, 8.2.27, 8.3.17
- Composer 2.8.6
- PHP: 7.4.33, 8.0.30, 8.1.31, 8.2.26, 8.3.14
- Composer 2.8.4
- PHPUnit 8.5.41
```
Both Xdebug and PCOV extensions are installed, but only Xdebug is enabled.
```
### Haskell Tools
- Cabal 3.14.1.1
- GHC 9.12.1
- GHCup 0.1.40.0
- Stack 3.3.1
- Cabal 3.12.1.0
- GHC 9.10.1
- GHCup 0.1.30.0
- Stack 3.1.1
### Rust Tools
- Cargo 1.85.0
- Rust 1.85.0
- Rustdoc 1.85.0
- Rustup 1.28.1
- Cargo 1.83.0
- Rust 1.83.0
- Rustdoc 1.83.0
- Rustup 1.27.1
#### Packages
- Bindgen 0.71.1
- Cargo audit 0.21.2
- Cargo clippy 0.1.85
- Cargo audit 0.21.0
- Cargo clippy 0.1.83
- Cargo outdated 0.16.0
- Cbindgen 0.28.0
- Cbindgen 0.27.0
- Rustfmt 1.8.0
### Browsers and Drivers
- Google Chrome 134.0.6998.35
- ChromeDriver 134.0.6998.35
- Chromium 134.0.6998.0
- Microsoft Edge 134.0.3124.51
- Microsoft Edge WebDriver 134.0.3124.51
- Selenium server 4.29.0
- Mozilla Firefox 136.0
- Geckodriver 0.36.0
- Google Chrome 131.0.6778.139
- ChromeDriver 131.0.6778.108
- Chromium 131.0.6778.0
- Microsoft Edge 131.0.2903.99
- Microsoft Edge WebDriver 131.0.2903.87
- Selenium server 4.27.0
- Mozilla Firefox 133.0
- Geckodriver 0.35.0
#### Environment variables
| Name | Value |
@@ -183,15 +184,15 @@ Both Xdebug and PCOV extensions are installed, but only Xdebug is enabled.
| SELENIUM_JAR_PATH | /usr/share/java/selenium-server.jar |
### .NET Tools
- .NET Core SDK: 6.0.428, 8.0.406, 9.0.200
- nbgv 3.7.115+d31f50f4d1
- .NET Core SDK: 6.0.428, 7.0.410, 8.0.404
- nbgv 3.7.112+63bbe780b0
### Databases
- MongoDB 5.0.31
- MongoDB 5.0.30
- sqlite3 3.31.1
#### PostgreSQL
- PostgreSQL 14.17
- PostgreSQL 14.15
```
User: postgres
PostgreSQL service is disabled by default.
@@ -199,7 +200,7 @@ Use the following command as a part of your job to start the service: 'sudo syst
```
#### MySQL
- MySQL 8.0.41-0ubuntu0.20.04.1
- MySQL 8.0.40-0ubuntu0.20.04.1
```
User: root
Password: root
@@ -215,44 +216,43 @@ Use the following command as a part of your job to start the service: 'sudo syst
#### Go
- 1.21.13
- 1.22.12
- 1.23.7
- 1.22.10
- 1.23.4
#### Node.js
- 18.20.7
- 20.18.3
- 22.14.0
- 18.20.5
- 20.18.1
- 22.12.0
#### Python
- 3.7.17
- 3.8.18
- 3.9.21
- 3.10.16
- 3.9.20
- 3.10.15
- 3.11.11
- 3.12.9
- 3.13.2
- 3.12.8
#### PyPy
- 2.7.18 [PyPy 7.3.19]
- 2.7.18 [PyPy 7.3.17]
- 3.6.12 [PyPy 7.3.3]
- 3.7.13 [PyPy 7.3.9]
- 3.8.16 [PyPy 7.3.11]
- 3.9.19 [PyPy 7.3.16]
- 3.10.16 [PyPy 7.3.19]
- 3.10.14 [PyPy 7.3.17]
#### Ruby
- 3.0.7
- 3.1.6
- 3.2.7
- 3.3.7
- 3.2.6
### PowerShell Tools
- PowerShell 7.4.7
- PowerShell 7.4.6
#### PowerShell Modules
- Az: 12.1.0
- MarkdownPS: 1.10
- Microsoft.Graph: 2.26.1
- Pester: 5.7.1
- Microsoft.Graph: 2.25.0
- Pester: 5.6.1
- PSScriptAnalyzer: 1.23.0
### Web Servers
@@ -266,11 +266,10 @@ Use the following command as a part of your job to start the service: 'sudo syst
| Package Name | Version |
| -------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Android Command Line Tools | 9.0 |
| Android SDK Build-tools | 35.0.0 35.0.1<br>34.0.0<br>33.0.0 33.0.1 33.0.2 33.0.3<br>32.0.0<br>31.0.0 |
| Android SDK Platform-Tools | 35.0.2 |
| Android SDK Platforms | android-35-ext14 (rev 1)<br>android-35 (rev 2)<br>android-34-ext8 (rev 1)<br>android-34-ext12 (rev 1)<br>android-34-ext11 (rev 1)<br>android-34-ext10 (rev 1)<br>android-34 (rev 3)<br>android-33-ext5 (rev 1)<br>android-33-ext4 (rev 1)<br>android-33 (rev 3)<br>android-32 (rev 1)<br>android-31 (rev 1) |
| Android SDK Build-tools | 35.0.0<br>34.0.0<br>33.0.0 33.0.1 33.0.2 33.0.3<br>32.0.0<br>31.0.0 |
| Android SDK Platforms | android-35-ext14 (rev 1)<br>android-35 (rev 1)<br>android-34-ext8 (rev 1)<br>android-34-ext12 (rev 1)<br>android-34-ext11 (rev 1)<br>android-34-ext10 (rev 1)<br>android-34 (rev 3)<br>android-33-ext5 (rev 1)<br>android-33-ext4 (rev 1)<br>android-33 (rev 3)<br>android-32 (rev 1)<br>android-31 (rev 1) |
| Android Support Repository | 47.0.0 |
| CMake | 3.18.1<br>3.22.1<br>3.31.5 |
| CMake | 3.10.2<br>3.18.1<br>3.22.1 |
| Google Play services | 49 |
| Google Repository | 58 |
| NDK | 26.3.11579264<br>27.2.12479018 (default) |
@@ -290,18 +289,18 @@ Use the following command as a part of your job to start the service: 'sudo syst
| -------------------- | ------------------------------------------------------------------------ | ---------- |
| alpine:3.16 | sha256:452e7292acee0ee16c332324d7de05fa2c99f9994ecc9f0779c602916a672ae4 | 2024-01-27 |
| alpine:3.17 | sha256:8fc3dacfb6d69da8d44e42390de777e48577085db99aa4e4af35f483eb08b989 | 2024-09-06 |
| alpine:3.18 | sha256:de0eb0b3f2a47ba1eb89389859a9bd88b28e82f5826b6969ad604979713c2d4f | 2025-02-14 |
| alpine:3.19 | sha256:e5d0aea7f7d2954678a9a6269ca2d06e06591881161961ea59e974dff3f12377 | 2025-02-14 |
| alpine:3.18 | sha256:2995c82e8e723d9a5c8585cb8e901d1c50e3c2759031027d3bff577449435157 | 2024-09-06 |
| alpine:3.19 | sha256:7a85bf5dc56c949be827f84f9185161265c58f589bb8b2a6b6bb6d3076c1be21 | 2024-09-06 |
| debian:10 | sha256:58ce6f1271ae1c8a2006ff7d3e54e9874d839f573d8009c20154ad0f2fb0a225 | 2024-06-13 |
| debian:11 | sha256:a6cec654bb08bdc6a563cd7507b62f57c916290e195142e79a0d41a70ebb26fa | 2025-02-24 |
| debian:11 | sha256:e91d1b0684e0f26a29c2353c52d4814f4d153e10b1faddf9fbde473ed71e2fcf | 2024-12-02 |
| debian:9 | sha256:c5c5200ff1e9c73ffbf188b4a67eb1c91531b644856b4aefe86a58d2f0cb05be | 2022-06-23 |
| moby/buildkit:latest | sha256:c5137fdd77377ea102a2622714df55459fe42e5867ba180bda07291aa7952d9b | 2025-03-05 |
| node:18 | sha256:ba756f198b4b1e0114b53b23121c8ae27f7ae4d5d95ca4a0554b0649cc9c7dcf | 2025-02-20 |
| node:18-alpine | sha256:e0340f26173b41066d68e3fe9bfbdb6571ab3cad0a4272919a52e36f4ae56925 | 2025-02-20 |
| node:20 | sha256:bcf90f85634194bc51e92f8add1221c7fdeeff94b7f1ff360aeaa7498086d641 | 2025-02-10 |
| node:20-alpine | sha256:053c1d99e608fe9fa0db6821edd84276277c0a663cd181f4a3e59ee20f5f07ea | 2025-02-10 |
| node:22 | sha256:f6b9c31ace05502dd98ef777aaa20464362435dcc5e312b0e213121dcf7d8b95 | 2025-02-13 |
| node:22-alpine | sha256:9bef0ef1e268f60627da9ba7d7605e8831d5b56ad07487d24d1aa386336d1944 | 2025-02-13 |
| moby/buildkit:latest | sha256:58e6d150a3c5a4b92e99ea8df2cbe976ad6d2ae5beab39214e84fada05b059d5 | 2024-12-04 |
| node:18 | sha256:b57ae84fe7880a23b389f8260d726b784010ed470c2ee26d4e2cbdb955d25b12 | 2024-11-15 |
| node:18-alpine | sha256:6eb9c3d9bd191bd2cc6ce7ec3d5ec4c2127616140c8586af96a6bec8f28689d1 | 2024-12-05 |
| node:20 | sha256:f4755c9039bdeec5c736b2e0dd5b47700d6393b65688b9e9f807ec12f54a8690 | 2024-11-20 |
| node:20-alpine | sha256:426f843809ae05f324883afceebaa2b9cab9cb697097dbb1a2a7a41c5701de72 | 2024-12-05 |
| node:22 | sha256:35a5dd72bcac4bce43266408b58a02be6ff0b6098ffa6f5435aeea980a8951d7 | 2024-12-03 |
| node:22-alpine | sha256:6e80991f69cc7722c561e5d14d5e72ab47c0d6b6cfb3ae50fb9cf9a7b30fdf97 | 2024-12-05 |
| ubuntu:20.04 | sha256:8e5c4f0285ecbb4ead070431d29b576a530d3166df73ec44affc1cd27555141b | 2024-10-11 |
### Installed apt packages
@@ -311,14 +310,14 @@ Use the following command as a part of your job to start the service: 'sudo syst
| aria2 | 1.35.0-1build1 |
| autoconf | 2.69-11.1 |
| automake | 1:1.16.1-4ubuntu6 |
| binutils | 2.34-6ubuntu1.10 |
| binutils | 2.34-6ubuntu1.9 |
| bison | 2:3.5.1+dfsg-1 |
| brotli | 1.0.7-6ubuntu0.1 |
| bzip2 | 1.0.8-2 |
| coreutils | 8.30-3ubuntu2 |
| curl | 7.68.0-1ubuntu2.25 |
| curl | 7.68.0-1ubuntu2.24 |
| dbus | 1.12.16-2ubuntu2.3 |
| dnsutils | 1:9.18.30-0ubuntu0.20.04.2 |
| dnsutils | 1:9.18.28-0ubuntu0.20.04.1 |
| dpkg | 1.19.7ubuntu3.2 |
| dpkg-dev | 1.19.7ubuntu3.2 |
| fakeroot | 1.24-1 |
@@ -338,8 +337,8 @@ Use the following command as a part of your job to start the service: 'sudo syst
| lib32z1 | 1:1.2.11.dfsg-2ubuntu1.5 |
| libc++-dev | 1:10.0-50\~exp1 |
| libc++abi-dev | 1:10.0-50\~exp1 |
| libc6-dev | 2.31-0ubuntu9.17 |
| libcurl4 | 7.68.0-1ubuntu2.25 |
| libc6-dev | 2.31-0ubuntu9.16 |
| libcurl4 | 7.68.0-1ubuntu2.24 |
| libgbm-dev | 21.2.6-0ubuntu0.1\~20.04.2 |
| libgconf-2-4 | 3.2.6-6ubuntu1 |
| libgsl-dev | 2.5+dfsg-6+deb10u1build0.20.04.1 |
@@ -354,14 +353,14 @@ Use the following command as a part of your job to start the service: 'sudo syst
| libxkbfile-dev | 1:1.1.0-1 |
| libxss1 | 1:1.2.3-1 |
| libyaml-dev | 0.2.2-1 |
| locales | 2.31-0ubuntu9.17 |
| locales | 2.31-0ubuntu9.16 |
| m4 | 1.4.18-4 |
| make | 4.2.1-1.2 |
| mediainfo | 19.09-1build1 |
| mercurial | 5.3.1-1ubuntu1 |
| net-tools | 1.60+git20180626.aebd88e-1ubuntu1 |
| netcat | 1.206-1ubuntu1 |
| openssh-client | 1:8.2p1-4ubuntu0.12 |
| openssh-client | 1:8.2p1-4ubuntu0.11 |
| p7zip-full | 16.02+dfsg-7build1 |
| p7zip-rar | 16.02-3build1 |
| parallel | 20161222-1.1 |
@@ -369,14 +368,14 @@ Use the following command as a part of your job to start the service: 'sudo syst
| patchelf | 0.10-2build1 |
| pigz | 2.4-1 |
| pkg-config | 0.29.1-0ubuntu4 |
| pollinate | 4.33-3ubuntu1.20.04.2 |
| pollinate | 4.33-3ubuntu1.20.04.1 |
| python-is-python3 | 3.8.2-4 |
| rpm | 4.14.2.1+dfsg1-1build2 |
| rsync | 3.1.3-8ubuntu0.9 |
| rsync | 3.1.3-8ubuntu0.7 |
| shellcheck | 0.7.0-2build2 |
| sphinxsearch | 2.2.11-2ubuntu2 |
| sqlite3 | 3.31.1-4ubuntu0.6 |
| ssh | 1:8.2p1-4ubuntu0.12 |
| ssh | 1:8.2p1-4ubuntu0.11 |
| sshpass | 1.06-1 |
| subversion | 1.13.0-3ubuntu0.2 |
| sudo | 1.8.31-1ubuntu1.5 |
@@ -387,12 +386,12 @@ Use the following command as a part of your job to start the service: 'sudo syst
| texinfo | 6.7.0.dfsg.2-5 |
| time | 1.7-25.1build1 |
| tk | 8.6.9+1 |
| tzdata | 2024b-0ubuntu0.20.04.1 |
| tzdata | 2024a-0ubuntu0.20.04.1 |
| unzip | 6.0-25ubuntu1.2 |
| upx | 3.95-2build1 |
| wget | 1.20.3-1ubuntu2.1 |
| xorriso | 1.5.2-1 |
| xvfb | 2:1.20.13-1ubuntu1\~20.04.19 |
| xvfb | 2:1.20.13-1ubuntu1\~20.04.18 |
| xz-utils | 5.2.4-1ubuntu1.1 |
| zip | 3.0-11build1 |
| zsync | 0.6.2-3ubuntu1 |
+119 -121
View File
@@ -1,12 +1,13 @@
| Announcements |
|-|
| [[Ubuntu] Breaking change : Docker Engine Version 26.* will be updated to Docker Engine Version 28* from 2025-05-09](https://github.com/actions/runner-images/issues/11766) |
| [[Ubuntu] Breaking change : PostgreSQL version 14.* for Ubuntu 22.04, PostgreSQL version 16.* for Ubuntu 24.04 will be updated to version 17.* from 2025-05-09](https://github.com/actions/runner-images/issues/11723) |
| [[Windows & Ubuntu] Breaking change : Maven 3.8.* version will be updated to Maven 3.9.* from January 10,2025](https://github.com/actions/runner-images/issues/11093) |
| [[Ubuntu] Breaking Change: runner user will have UID 1001 instead of 1000 for larger runners](https://github.com/actions/runner-images/issues/10936) |
| [Ubuntu-latest workflows will use Ubuntu-24.04 image](https://github.com/actions/runner-images/issues/10636) |
***
# Ubuntu 22.04
- OS Version: 22.04.5 LTS
- Kernel Version: 6.8.0-1021-azure
- Image Version: 20250309.1.0
- Kernel Version: 6.5.0-1025-azure
- Image Version: 20241215.1.0
- Systemd version: 249.11-0ubuntu3.12
## Installed Software
@@ -19,11 +20,11 @@
- Dash 0.5.11+git20210903+057cd650a4ed-3build1
- GNU C++: 10.5.0, 11.4.0, 12.3.0
- GNU Fortran: 10.5.0, 11.4.0, 12.3.0
- Julia 1.11.3
- Kotlin 2.1.10-release-473
- Julia 1.11.2
- Kotlin 2.1.0-release-394
- Mono 6.12.0.200
- MSBuild 16.10.1.31701 (Mono 6.12.0.200)
- Node.js 18.20.7
- Node.js 18.20.5
- Perl 5.34.0
- Python 3.10.12
- Ruby 3.0.2p107
@@ -31,16 +32,16 @@
### Package Management
- cpan 1.64
- Helm 3.17.1
- Homebrew 4.4.23
- Miniconda 25.1.1
- Helm 3.16.3
- Homebrew 4.4.11
- Miniconda 24.9.2
- Npm 10.8.2
- NuGet 6.6.1.2
- Pip 22.0.2
- Pip3 22.0.2
- Pipx 1.7.1
- RubyGems 3.3.5
- Vcpkg (build from commit 300239058e)
- Vcpkg (build from commit b545373a9)
- Yarn 1.22.22
#### Environment variables
@@ -59,36 +60,36 @@ to accomplish this.
### Project Management
- Ant 1.10.12
- Gradle 8.13
- Lerna 8.2.1
- Maven 3.9.9
- Sbt 1.10.10
- Gradle 8.11.1
- Lerna 8.1.9
- Maven 3.8.8
- Sbt 1.10.6
### Tools
- Ansible 2.17.9
- Ansible 2.17.7
- apt-fast 1.10.0
- AzCopy 10.28.0 - available by `azcopy` and `azcopy10` aliases
- Bazel 8.1.1
- AzCopy 10.27.1 - available by `azcopy` and `azcopy10` aliases
- Bazel 8.0.0
- Bazelisk 1.25.0
- Bicep 0.33.93
- Bicep 0.32.4
- Buildah 1.23.1
- CMake 3.31.6
- CodeQL Action Bundle 2.20.1
- Docker Amazon ECR Credential Helper 0.9.1
- CMake 3.31.2
- CodeQL Action Bundle 2.20.0
- Docker Amazon ECR Credential Helper 0.9.0
- Docker Compose v2 2.27.1
- Docker-Buildx 0.21.2
- Docker-Buildx 0.19.2
- Docker Client 26.1.3
- Docker Server 26.1.3
- Fastlane 2.226.0
- Git 2.48.1
- Git LFS 3.6.1
- Git 2.47.1
- Git LFS 3.6.0
- Git-ftp 1.6.0
- Haveged 1.9.14
- Heroku 10.2.0
- Heroku 10.0.0
- jq 1.6
- Kind 0.27.0
- Kubectl 1.32.2
- Kustomize 5.6.0
- Kind 0.25.0
- Kubectl 1.32.0
- Kustomize 5.5.0
- Leiningen 2.11.2
- MediaInfo 21.09
- Mercurial 6.1.1
@@ -96,80 +97,79 @@ to accomplish this.
- n 10.1.0
- Newman 6.2.1
- nvm 0.40.1
- OpenSSL 3.0.2-0ubuntu1.19
- Packer 1.12.0
- Parcel 2.13.3
- OpenSSL 3.0.2-0ubuntu1.18
- Packer 1.11.2
- Parcel 2.13.2
- Podman 3.4.4
- Pulumi 3.154.0
- R 4.4.3
- Pulumi 3.143.0
- R 4.4.2
- Skopeo 1.4.1
- Sphinx Open Source Search Server 2.2.11
- SVN 1.14.1
- Terraform 1.11.1
- Terraform 1.10.2
- yamllint 1.35.1
- yq 4.45.1
- zstd 1.5.7
- Ninja 1.12.1
- yq 4.44.6
- zstd 1.5.6
### CLI Tools
- Alibaba Cloud CLI 3.0.256
- AWS CLI 2.24.20
- AWS CLI Session Manager Plugin 1.2.707.0
- AWS SAM CLI 1.134.0
- Azure CLI 2.70.0
- Alibaba Cloud CLI 3.0.237
- AWS CLI 2.22.17
- AWS CLI Session Manager Plugin 1.2.694.0
- AWS SAM CLI 1.132.0
- Azure CLI 2.67.0
- Azure CLI (azure-devops) 1.0.1
- GitHub CLI 2.68.1
- Google Cloud CLI 513.0.0
- Netlify CLI 19.0.2
- OpenShift CLI 4.18.3
- ORAS CLI 1.2.2
- Vercel CLI 41.3.2
- GitHub CLI 2.63.2
- Google Cloud CLI 503.0.0
- Netlify CLI 17.38.0
- OpenShift CLI 4.17.8
- ORAS CLI 1.2.1
- Vercel CLI 39.2.2
### Java
| Version | Environment Variable |
| ------------------- | -------------------- |
| 8.0.442+6 | JAVA_HOME_8_X64 |
| 11.0.26+4 (default) | JAVA_HOME_11_X64 |
| 17.0.14+7 | JAVA_HOME_17_X64 |
| 21.0.6+7 | JAVA_HOME_21_X64 |
| 8.0.432+6 | JAVA_HOME_8_X64 |
| 11.0.25+9 (default) | JAVA_HOME_11_X64 |
| 17.0.13+11 | JAVA_HOME_17_X64 |
| 21.0.5+11 | JAVA_HOME_21_X64 |
### PHP Tools
- PHP: 8.1.2
- Composer 2.8.6
- Composer 2.8.4
- PHPUnit 8.5.41
```
Both Xdebug and PCOV extensions are installed, but only Xdebug is enabled.
```
### Haskell Tools
- Cabal 3.14.1.1
- GHC 9.12.1
- GHCup 0.1.40.0
- Stack 3.3.1
- Cabal 3.12.1.0
- GHC 9.10.1
- GHCup 0.1.30.0
- Stack 3.1.1
### Rust Tools
- Cargo 1.85.0
- Rust 1.85.0
- Rustdoc 1.85.0
- Rustup 1.28.1
- Cargo 1.83.0
- Rust 1.83.0
- Rustdoc 1.83.0
- Rustup 1.27.1
#### Packages
- Bindgen 0.71.1
- Cargo audit 0.21.2
- Cargo clippy 0.1.85
- Cargo audit 0.21.0
- Cargo clippy 0.1.83
- Cargo outdated 0.16.0
- Cbindgen 0.28.0
- Cbindgen 0.27.0
- Rustfmt 1.8.0
### Browsers and Drivers
- Google Chrome 134.0.6998.35
- ChromeDriver 134.0.6998.35
- Chromium 134.0.6998.0
- Microsoft Edge 134.0.3124.51
- Microsoft Edge WebDriver 134.0.3124.51
- Selenium server 4.29.0
- Mozilla Firefox 136.0
- Geckodriver 0.36.0
- Google Chrome 131.0.6778.139
- ChromeDriver 131.0.6778.108
- Chromium 131.0.6778.0
- Microsoft Edge 131.0.2903.99
- Microsoft Edge WebDriver 131.0.2903.87
- Selenium server 4.27.0
- Mozilla Firefox 133.0
- Geckodriver 0.35.0
#### Environment variables
| Name | Value |
@@ -180,14 +180,14 @@ Both Xdebug and PCOV extensions are installed, but only Xdebug is enabled.
| SELENIUM_JAR_PATH | /usr/share/java/selenium-server.jar |
### .NET Tools
- .NET Core SDK: 6.0.428, 8.0.406, 9.0.200
- nbgv 3.7.115+d31f50f4d1
- .NET Core SDK: 6.0.428, 7.0.410, 8.0.404
- nbgv 3.7.112+63bbe780b0
### Databases
- sqlite3 3.37.2
#### PostgreSQL
- PostgreSQL 14.17
- PostgreSQL 14.15
```
User: postgres
PostgreSQL service is disabled by default.
@@ -195,7 +195,7 @@ Use the following command as a part of your job to start the service: 'sudo syst
```
#### MySQL
- MySQL 8.0.41-0ubuntu0.22.04.1
- MySQL 8.0.40-0ubuntu0.22.04.1
```
User: root
Password: root
@@ -211,41 +211,40 @@ Use the following command as a part of your job to start the service: 'sudo syst
#### Go
- 1.21.13
- 1.22.12
- 1.23.7
- 1.22.10
- 1.23.4
#### Node.js
- 18.20.7
- 20.18.3
- 22.14.0
- 18.20.5
- 20.18.1
- 22.12.0
#### Python
- 3.7.17
- 3.8.18
- 3.9.21
- 3.10.16
- 3.9.20
- 3.10.15
- 3.11.11
- 3.12.9
- 3.13.2
- 3.12.8
#### PyPy
- 3.7.13 [PyPy 7.3.9]
- 3.8.16 [PyPy 7.3.11]
- 3.9.19 [PyPy 7.3.16]
- 3.10.16 [PyPy 7.3.19]
- 3.10.14 [PyPy 7.3.17]
#### Ruby
- 3.1.6
- 3.2.7
- 3.3.7
- 3.2.6
### PowerShell Tools
- PowerShell 7.4.7
- PowerShell 7.4.6
#### PowerShell Modules
- Az: 12.1.0
- MarkdownPS: 1.10
- Microsoft.Graph: 2.26.1
- Pester: 5.7.1
- Microsoft.Graph: 2.25.0
- Pester: 5.6.1
- PSScriptAnalyzer: 1.23.0
### Web Servers
@@ -258,11 +257,10 @@ Use the following command as a part of your job to start the service: 'sudo syst
| Package Name | Version |
| -------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Android Command Line Tools | 9.0 |
| Android SDK Build-tools | 35.0.0 35.0.1<br>34.0.0<br>33.0.0 33.0.1 33.0.2 33.0.3<br>32.0.0<br>31.0.0 |
| Android SDK Platform-Tools | 35.0.2 |
| Android SDK Platforms | android-35-ext14 (rev 1)<br>android-35 (rev 2)<br>android-34-ext8 (rev 1)<br>android-34-ext12 (rev 1)<br>android-34-ext11 (rev 1)<br>android-34-ext10 (rev 1)<br>android-34 (rev 3)<br>android-33-ext5 (rev 1)<br>android-33-ext4 (rev 1)<br>android-33 (rev 3)<br>android-32 (rev 1)<br>android-31 (rev 1) |
| Android SDK Build-tools | 35.0.0<br>34.0.0<br>33.0.0 33.0.1 33.0.2 33.0.3<br>32.0.0<br>31.0.0 |
| Android SDK Platforms | android-35-ext14 (rev 1)<br>android-35 (rev 1)<br>android-34-ext8 (rev 1)<br>android-34-ext12 (rev 1)<br>android-34-ext11 (rev 1)<br>android-34-ext10 (rev 1)<br>android-34 (rev 3)<br>android-33-ext5 (rev 1)<br>android-33-ext4 (rev 1)<br>android-33 (rev 3)<br>android-32 (rev 1)<br>android-31 (rev 1) |
| Android Support Repository | 47.0.0 |
| CMake | 3.18.1<br>3.22.1<br>3.31.5 |
| CMake | 3.10.2<br>3.18.1<br>3.22.1 |
| Google Play services | 49 |
| Google Repository | 58 |
| NDK | 26.3.11579264<br>27.2.12479018 (default) |
@@ -282,19 +280,19 @@ Use the following command as a part of your job to start the service: 'sudo syst
| -------------------- | ------------------------------------------------------------------------ | ---------- |
| alpine:3.16 | sha256:452e7292acee0ee16c332324d7de05fa2c99f9994ecc9f0779c602916a672ae4 | 2024-01-27 |
| alpine:3.17 | sha256:8fc3dacfb6d69da8d44e42390de777e48577085db99aa4e4af35f483eb08b989 | 2024-09-06 |
| alpine:3.18 | sha256:de0eb0b3f2a47ba1eb89389859a9bd88b28e82f5826b6969ad604979713c2d4f | 2025-02-14 |
| alpine:3.19 | sha256:e5d0aea7f7d2954678a9a6269ca2d06e06591881161961ea59e974dff3f12377 | 2025-02-14 |
| alpine:3.18 | sha256:2995c82e8e723d9a5c8585cb8e901d1c50e3c2759031027d3bff577449435157 | 2024-09-06 |
| alpine:3.19 | sha256:7a85bf5dc56c949be827f84f9185161265c58f589bb8b2a6b6bb6d3076c1be21 | 2024-09-06 |
| debian:10 | sha256:58ce6f1271ae1c8a2006ff7d3e54e9874d839f573d8009c20154ad0f2fb0a225 | 2024-06-13 |
| debian:11 | sha256:a6cec654bb08bdc6a563cd7507b62f57c916290e195142e79a0d41a70ebb26fa | 2025-02-24 |
| moby/buildkit:latest | sha256:c5137fdd77377ea102a2622714df55459fe42e5867ba180bda07291aa7952d9b | 2025-03-05 |
| node:18 | sha256:ba756f198b4b1e0114b53b23121c8ae27f7ae4d5d95ca4a0554b0649cc9c7dcf | 2025-02-20 |
| node:18-alpine | sha256:e0340f26173b41066d68e3fe9bfbdb6571ab3cad0a4272919a52e36f4ae56925 | 2025-02-20 |
| node:20 | sha256:bcf90f85634194bc51e92f8add1221c7fdeeff94b7f1ff360aeaa7498086d641 | 2025-02-10 |
| node:20-alpine | sha256:053c1d99e608fe9fa0db6821edd84276277c0a663cd181f4a3e59ee20f5f07ea | 2025-02-10 |
| node:22 | sha256:f6b9c31ace05502dd98ef777aaa20464362435dcc5e312b0e213121dcf7d8b95 | 2025-02-13 |
| node:22-alpine | sha256:9bef0ef1e268f60627da9ba7d7605e8831d5b56ad07487d24d1aa386336d1944 | 2025-02-13 |
| debian:11 | sha256:e91d1b0684e0f26a29c2353c52d4814f4d153e10b1faddf9fbde473ed71e2fcf | 2024-12-02 |
| moby/buildkit:latest | sha256:58e6d150a3c5a4b92e99ea8df2cbe976ad6d2ae5beab39214e84fada05b059d5 | 2024-12-04 |
| node:18 | sha256:b57ae84fe7880a23b389f8260d726b784010ed470c2ee26d4e2cbdb955d25b12 | 2024-11-15 |
| node:18-alpine | sha256:6eb9c3d9bd191bd2cc6ce7ec3d5ec4c2127616140c8586af96a6bec8f28689d1 | 2024-12-05 |
| node:20 | sha256:f4755c9039bdeec5c736b2e0dd5b47700d6393b65688b9e9f807ec12f54a8690 | 2024-11-20 |
| node:20-alpine | sha256:426f843809ae05f324883afceebaa2b9cab9cb697097dbb1a2a7a41c5701de72 | 2024-12-05 |
| node:22 | sha256:35a5dd72bcac4bce43266408b58a02be6ff0b6098ffa6f5435aeea980a8951d7 | 2024-12-03 |
| node:22-alpine | sha256:6e80991f69cc7722c561e5d14d5e72ab47c0d6b6cfb3ae50fb9cf9a7b30fdf97 | 2024-12-05 |
| ubuntu:20.04 | sha256:8e5c4f0285ecbb4ead070431d29b576a530d3166df73ec44affc1cd27555141b | 2024-10-11 |
| ubuntu:22.04 | sha256:ed1544e454989078f5dec1bfdabd8c5cc9c48e0705d07b678ab6ae3fb61952d2 | 2025-01-26 |
| ubuntu:22.04 | sha256:0e5e4a57c2499249aafc3b40fcd541e9a456aab7296681a3994d631587203f97 | 2024-09-11 |
### Installed apt packages
| Name | Version |
@@ -303,21 +301,21 @@ Use the following command as a part of your job to start the service: 'sudo syst
| aria2 | 1.36.0-1 |
| autoconf | 2.71-2 |
| automake | 1:1.16.5-1.3 |
| binutils | 2.38-4ubuntu2.7 |
| binutils | 2.38-4ubuntu2.6 |
| bison | 2:3.8.2+dfsg-1build1 |
| brotli | 1.0.9-2build6 |
| bzip2 | 1.0.8-5build1 |
| coreutils | 8.32-4.1ubuntu1.2 |
| curl | 7.81.0-1ubuntu1.20 |
| curl | 7.81.0-1ubuntu1.19 |
| dbus | 1.12.20-2ubuntu4.1 |
| dnsutils | 1:9.18.30-0ubuntu0.22.04.2 |
| dnsutils | 1:9.18.28-0ubuntu0.22.04.1 |
| dpkg | 1.21.1ubuntu2.3 |
| dpkg-dev | 1.21.1ubuntu2.3 |
| fakeroot | 1.28-1ubuntu1 |
| file | 1:5.41-3ubuntu0.1 |
| findutils | 4.8.0-1ubuntu3 |
| flex | 2.6.4-8build2 |
| fonts-noto-color-emoji | 2.047-0ubuntu0.22.04.1 |
| fonts-noto-color-emoji | 2.042-0ubuntu0.22.04.1 |
| ftp | 20210827-4build1 |
| g++ | 4:11.2.0-1ubuntu1 |
| gcc | 4:11.2.0-1ubuntu1 |
@@ -330,8 +328,8 @@ Use the following command as a part of your job to start the service: 'sudo syst
| lib32z1 | 1:1.2.11.dfsg-2ubuntu9.2 |
| libc++-dev | 1:14.0-55\~exp2 |
| libc++abi-dev | 1:14.0-55\~exp2 |
| libc6-dev | 2.35-0ubuntu3.9 |
| libcurl4 | 7.81.0-1ubuntu1.20 |
| libc6-dev | 2.35-0ubuntu3.8 |
| libcurl4 | 7.81.0-1ubuntu1.19 |
| libgbm-dev | 23.2.1-1ubuntu3.1\~22.04.3 |
| libgconf-2-4 | 3.2.6-7ubuntu2 |
| libgsl-dev | 2.7.1+dfsg-3 |
@@ -341,13 +339,13 @@ Use the following command as a part of your job to start the service: 'sudo syst
| libmagickwand-dev | 8:6.9.11.60+dfsg-1.3ubuntu0.22.04.5 |
| libsecret-1-dev | 0.20.5-2 |
| libsqlite3-dev | 3.37.2-2ubuntu0.3 |
| libssl-dev | 3.0.2-0ubuntu1.19 |
| libssl-dev | 3.0.2-0ubuntu1.18 |
| libtool | 2.4.6-15build2 |
| libunwind8 | 1.3.2-2build2.1 |
| libxkbfile-dev | 1:1.1.0-1build3 |
| libxss1 | 1:1.2.3-1build2 |
| libyaml-dev | 0.2.2-1build2 |
| locales | 2.35-0ubuntu3.9 |
| locales | 2.35-0ubuntu3.8 |
| lz4 | 1.9.3-2build2 |
| m4 | 1.4.18-5ubuntu2 |
| make | 4.3-4.1build1 |
@@ -355,7 +353,7 @@ Use the following command as a part of your job to start the service: 'sudo syst
| mercurial | 6.1.1-1ubuntu1 |
| net-tools | 1.60+git20181103.0eebece-1ubuntu5 |
| netcat | 1.218-4ubuntu1 |
| openssh-client | 1:8.9p1-3ubuntu0.11 |
| openssh-client | 1:8.9p1-3ubuntu0.10 |
| p7zip-full | 16.02+dfsg-8 |
| p7zip-rar | 16.02-3build1 |
| parallel | 20210822+ds-2 |
@@ -363,14 +361,14 @@ Use the following command as a part of your job to start the service: 'sudo syst
| patchelf | 0.14.3-1 |
| pigz | 2.6-1 |
| pkg-config | 0.29.2-1ubuntu3 |
| pollinate | 4.33-3ubuntu2.1 |
| pollinate | 4.33-3ubuntu2 |
| python-is-python3 | 3.9.2-2 |
| rpm | 4.17.0+dfsg1-4build1 |
| rsync | 3.2.7-0ubuntu0.22.04.4 |
| rsync | 3.2.7-0ubuntu0.22.04.2 |
| shellcheck | 0.8.0-2 |
| sphinxsearch | 2.2.11-8 |
| sqlite3 | 3.37.2-2ubuntu0.3 |
| ssh | 1:8.9p1-3ubuntu0.11 |
| ssh | 1:8.9p1-3ubuntu0.10 |
| sshpass | 1.09-1 |
| subversion | 1.14.1-3ubuntu0.22.04.1 |
| sudo | 1.9.9-1ubuntu2.4 |
@@ -381,12 +379,12 @@ Use the following command as a part of your job to start the service: 'sudo syst
| texinfo | 6.8-4build1 |
| time | 1.9-0.1build2 |
| tk | 8.6.11+1build2 |
| tzdata | 2024b-0ubuntu0.22.04.1 |
| tzdata | 2024a-0ubuntu0.22.04.1 |
| unzip | 6.0-26ubuntu3.2 |
| upx | 3.96-3 |
| wget | 1.21.2-2ubuntu1.1 |
| xorriso | 1.5.4-2 |
| xvfb | 2:21.1.4-2ubuntu1.7\~22.04.13 |
| xvfb | 2:21.1.4-2ubuntu1.7\~22.04.12 |
| xz-utils | 5.2.5-2ubuntu1 |
| zip | 3.0-12build2 |
| zsync | 0.6.2-3ubuntu1 |
+100 -107
View File
@@ -1,12 +1,14 @@
| Announcements |
|-|
| [[Ubuntu] Breaking change : PostgreSQL version 14.* for Ubuntu 22.04, PostgreSQL version 16.* for Ubuntu 24.04 will be updated to version 17.* from 2025-05-09](https://github.com/actions/runner-images/issues/11723) |
| [[Windows & Ubuntu] Breaking change : Maven 3.8.* version will be updated to Maven 3.9.* from January 10,2025](https://github.com/actions/runner-images/issues/11093) |
| [[Ubuntu] Breaking Change: runner user will have UID 1001 instead of 1000 for larger runners](https://github.com/actions/runner-images/issues/10936) |
| [Ubuntu-latest workflows will use Ubuntu-24.04 image](https://github.com/actions/runner-images/issues/10636) |
***
# Ubuntu 24.04
- OS Version: 24.04.2 LTS
- Kernel Version: 6.8.0-1021-azure
- Image Version: 20250309.1.0
- Systemd version: 255.4-1ubuntu8.5
- OS Version: 24.04.1 LTS
- Kernel Version: 6.8.0-1017-azure
- Image Version: 20241215.1.0
- Systemd version: 255.4-1ubuntu8.4
## Installed Software
@@ -18,9 +20,9 @@
- Dash 0.5.12-6ubuntu5
- GNU C++: 12.3.0, 13.3.0, 14.2.0
- GNU Fortran: 12.3.0, 13.3.0, 14.2.0
- Julia 1.11.3
- Kotlin 2.1.10-release-473
- Node.js 20.18.3
- Julia 1.11.2
- Kotlin 2.1.0-release-394
- Node.js 20.18.1
- Perl 5.38.2
- Python 3.12.3
- Ruby 3.2.3
@@ -28,15 +30,15 @@
### Package Management
- cpan 1.64
- Helm 3.17.1
- Homebrew 4.4.23
- Miniconda 25.1.1
- Helm 3.16.3
- Homebrew 4.4.11
- Miniconda 24.9.2
- Npm 10.8.2
- Pip 24.0
- Pip3 24.0
- Pipx 1.7.1
- RubyGems 3.4.20
- Vcpkg (build from commit 300239058e)
- Vcpkg (build from commit b545373a9)
- Yarn 1.22.22
#### Environment variables
@@ -55,100 +57,99 @@ to accomplish this.
### Project Management
- Ant 1.10.14
- Gradle 8.13
- Lerna 8.2.1
- Maven 3.9.9
- Gradle 8.11.1
- Lerna 8.1.9
- Maven 3.8.8
### Tools
- Ansible 2.18.3
- AzCopy 10.28.0 - available by `azcopy` and `azcopy10` aliases
- Bazel 8.1.1
- Ansible 2.18.1
- AzCopy 10.27.1 - available by `azcopy` and `azcopy10` aliases
- Bazel 8.0.0
- Bazelisk 1.25.0
- Bicep 0.33.93
- Bicep 0.32.4
- Buildah 1.33.7
- CMake 3.31.6
- CodeQL Action Bundle 2.20.1
- Docker Amazon ECR Credential Helper 0.9.1
- CMake 3.31.2
- CodeQL Action Bundle 2.20.0
- Docker Amazon ECR Credential Helper 0.9.0
- Docker Compose v2 2.27.1
- Docker-Buildx 0.21.2
- Docker-Buildx 0.19.2
- Docker Client 26.1.3
- Docker Server 26.1.3
- Fastlane 2.226.0
- Git 2.48.1
- Git LFS 3.6.1
- Git 2.47.1
- Git LFS 3.6.0
- Git-ftp 1.6.0
- Haveged 1.9.14
- jq 1.7
- Kind 0.27.0
- Kubectl 1.32.2
- Kustomize 5.6.0
- Kind 0.25.0
- Kubectl 1.32.0
- Kustomize 5.5.0
- MediaInfo 24.01
- Mercurial 6.7.2
- Minikube 1.34.0
- n 10.1.0
- Newman 6.2.1
- nvm 0.40.1
- OpenSSL 3.0.13-0ubuntu3.5
- Packer 1.12.0
- Parcel 2.13.3
- OpenSSL 3.0.13-0ubuntu3.4
- Packer 1.11.2
- Parcel 2.13.2
- Podman 4.9.3
- Pulumi 3.154.0
- Pulumi 3.143.0
- Skopeo 1.13.3
- Sphinx Open Source Search Server 2.2.11
- yamllint 1.35.1
- yq 4.45.1
- zstd 1.5.7
- Ninja 1.12.1
- yq 4.44.6
- zstd 1.5.6
### CLI Tools
- AWS CLI 2.24.20
- AWS CLI Session Manager Plugin 1.2.707.0
- AWS SAM CLI 1.134.0
- Azure CLI 2.70.0
- AWS CLI 2.22.17
- AWS CLI Session Manager Plugin 1.2.694.0
- AWS SAM CLI 1.132.0
- Azure CLI 2.67.0
- Azure CLI (azure-devops) 1.0.1
- GitHub CLI 2.68.1
- Google Cloud CLI 513.0.0
- GitHub CLI 2.63.2
- Google Cloud CLI 503.0.0
### Java
| Version | Environment Variable |
| ------------------- | -------------------- |
| 8.0.442+6 | JAVA_HOME_8_X64 |
| 11.0.26+4 | JAVA_HOME_11_X64 |
| 17.0.14+7 (default) | JAVA_HOME_17_X64 |
| 21.0.6+7 | JAVA_HOME_21_X64 |
| Version | Environment Variable |
| -------------------- | -------------------- |
| 8.0.432+6 | JAVA_HOME_8_X64 |
| 11.0.25+9 | JAVA_HOME_11_X64 |
| 17.0.13+11 (default) | JAVA_HOME_17_X64 |
| 21.0.5+11 | JAVA_HOME_21_X64 |
### PHP Tools
- PHP: 8.3.6
- Composer 2.8.6
- Composer 2.8.4
- PHPUnit 8.5.41
```
Both Xdebug and PCOV extensions are installed, but only Xdebug is enabled.
```
### Haskell Tools
- Cabal 3.14.1.1
- GHC 9.12.1
- GHCup 0.1.40.0
- Stack 3.3.1
- Cabal 3.12.1.0
- GHC 9.10.1
- GHCup 0.1.30.0
- Stack 3.1.1
### Rust Tools
- Cargo 1.85.0
- Rust 1.85.0
- Rustdoc 1.85.0
- Rustup 1.28.1
- Cargo 1.83.0
- Rust 1.83.0
- Rustdoc 1.83.0
- Rustup 1.27.1
#### Packages
- Rustfmt 1.8.0
### Browsers and Drivers
- Google Chrome 134.0.6998.35
- ChromeDriver 134.0.6998.35
- Chromium 134.0.6998.0
- Microsoft Edge 134.0.3124.51
- Microsoft Edge WebDriver 134.0.3124.51
- Selenium server 4.29.0
- Mozilla Firefox 136.0
- Geckodriver 0.36.0
- Google Chrome 131.0.6778.139
- ChromeDriver 131.0.6778.108
- Chromium 131.0.6778.0
- Microsoft Edge 131.0.2903.99
- Microsoft Edge WebDriver 131.0.2903.87
- Selenium server 4.27.0
- Mozilla Firefox 133.0
- Geckodriver 0.35.0
#### Environment variables
| Name | Value |
@@ -159,14 +160,14 @@ Both Xdebug and PCOV extensions are installed, but only Xdebug is enabled.
| SELENIUM_JAR_PATH | /usr/share/java/selenium-server.jar |
### .NET Tools
- .NET Core SDK: 8.0.112
- nbgv 3.7.115+d31f50f4d1
- .NET Core SDK: 8.0.111
- nbgv 3.7.112+63bbe780b0
### Databases
- sqlite3 3.45.1
#### PostgreSQL
- PostgreSQL 16.8
- PostgreSQL 16.6
```
User: postgres
PostgreSQL service is disabled by default.
@@ -174,7 +175,7 @@ Use the following command as a part of your job to start the service: 'sudo syst
```
#### MySQL
- MySQL 8.0.41-0ubuntu0.24.04.1
- MySQL 8.0.40-0ubuntu0.24.04.1
```
User: root
Password: root
@@ -186,36 +187,31 @@ Use the following command as a part of your job to start the service: 'sudo syst
#### Go
- 1.21.13
- 1.22.12
- 1.23.7
- 1.22.10
- 1.23.4
#### Node.js
- 18.20.7
- 20.18.3
- 22.14.0
- 18.20.5
- 20.18.1
- 22.12.0
#### Python
- 3.9.21
- 3.10.16
- 3.9.20
- 3.10.15
- 3.11.11
- 3.12.9
- 3.13.2
- 3.12.8
#### PyPy
- 3.9.19 [PyPy 7.3.16]
- 3.10.16 [PyPy 7.3.19]
#### Ruby
- 3.2.7
- 3.3.7
- 3.10.14 [PyPy 7.3.17]
### PowerShell Tools
- PowerShell 7.4.7
- PowerShell 7.4.6
#### PowerShell Modules
- Az: 12.1.0
- Microsoft.Graph: 2.26.1
- Pester: 5.7.1
- Microsoft.Graph: 2.25.0
- Pester: 5.6.1
- PSScriptAnalyzer: 1.23.0
### Web Servers
@@ -228,14 +224,12 @@ Use the following command as a part of your job to start the service: 'sudo syst
| Package Name | Version |
| -------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Android Command Line Tools | 12.0 |
| Android SDK Build-tools | 35.0.0 35.0.1<br>34.0.0 |
| Android SDK Platform-Tools | 35.0.2 |
| Android SDK Platforms | android-35-ext14 (rev 1)<br>android-35 (rev 2)<br>android-34-ext8 (rev 1)<br>android-34-ext12 (rev 1)<br>android-34-ext11 (rev 1)<br>android-34-ext10 (rev 1)<br>android-34 (rev 3)<br>android-33-ext5 (rev 1)<br>android-33-ext4 (rev 1) |
| Android SDK Build-tools | 35.0.0<br>34.0.0 |
| Android SDK Platforms | android-35-ext14 (rev 1)<br>android-35 (rev 1)<br>android-34-ext8 (rev 1)<br>android-34-ext12 (rev 1)<br>android-34-ext11 (rev 1)<br>android-34-ext10 (rev 1)<br>android-34 (rev 3)<br>android-33-ext5 (rev 1)<br>android-33-ext4 (rev 1) |
| Android Support Repository | 47.0.0 |
| CMake | 3.31.5 |
| Google Play services | 49 |
| Google Repository | 58 |
| NDK | 26.3.11579264<br>27.2.12479018 (default)<br>28.0.13004108 |
| NDK | 26.3.11579264<br>27.2.12479018 (default) |
#### Environment variables
| Name | Value |
@@ -243,7 +237,7 @@ Use the following command as a part of your job to start the service: 'sudo syst
| ANDROID_HOME | /usr/local/lib/android/sdk |
| ANDROID_NDK | /usr/local/lib/android/sdk/ndk/27.2.12479018 |
| ANDROID_NDK_HOME | /usr/local/lib/android/sdk/ndk/27.2.12479018 |
| ANDROID_NDK_LATEST_HOME | /usr/local/lib/android/sdk/ndk/28.0.13004108 |
| ANDROID_NDK_LATEST_HOME | /usr/local/lib/android/sdk/ndk/27.2.12479018 |
| ANDROID_NDK_ROOT | /usr/local/lib/android/sdk/ndk/27.2.12479018 |
| ANDROID_SDK_ROOT | /usr/local/lib/android/sdk |
@@ -254,21 +248,21 @@ Use the following command as a part of your job to start the service: 'sudo syst
| aria2 | 1.37.0+debian-1build3 |
| autoconf | 2.71-3 |
| automake | 1:1.16.5-1.3ubuntu1 |
| binutils | 2.42-4ubuntu2.4 |
| binutils | 2.42-4ubuntu2.3 |
| bison | 2:3.8.2+dfsg-1build2 |
| brotli | 1.1.0-2build2 |
| bzip2 | 1.0.8-5.1build0.1 |
| coreutils | 9.4-3ubuntu6 |
| curl | 8.5.0-2ubuntu10.6 |
| curl | 8.5.0-2ubuntu10.5 |
| dbus | 1.14.10-4ubuntu4.1 |
| dnsutils | 1:9.18.30-0ubuntu0.24.04.2 |
| dnsutils | 1:9.18.28-0ubuntu0.24.04.1 |
| dpkg | 1.22.6ubuntu6.1 |
| dpkg-dev | 1.22.6ubuntu6.1 |
| fakeroot | 1.33-1 |
| file | 1:5.45-3build1 |
| findutils | 4.9.0-5build1 |
| flex | 2.6.4-8.2build1 |
| fonts-noto-color-emoji | 2.047-0ubuntu0.24.04.1 |
| fonts-noto-color-emoji | 2.042-1 |
| ftp | 20230507-2build3 |
| g++ | 4:13.2.0-7ubuntu1 |
| gcc | 4:13.2.0-7ubuntu1 |
@@ -277,11 +271,10 @@ Use the following command as a part of your job to start the service: 'sudo syst
| iproute2 | 6.1.0-1ubuntu6 |
| iputils-ping | 3:20240117-1build1 |
| jq | 1.7.1-3build1 |
| libsqlite3-dev | 3.45.1-1ubuntu2.1 |
| libssl-dev | 3.0.13-0ubuntu3.5 |
| libssl-dev | 3.0.13-0ubuntu3.4 |
| libtool | 2.4.7-7build1 |
| libyaml-dev | 0.2.5-1build1 |
| locales | 2.39-0ubuntu8.4 |
| locales | 2.39-0ubuntu8.3 |
| lz4 | 1.9.4-1build1.1 |
| m4 | 1.4.19-4build1 |
| make | 4.3-4.1build2 |
@@ -289,37 +282,37 @@ Use the following command as a part of your job to start the service: 'sudo syst
| mercurial | 6.7.2-1ubuntu2.2 |
| net-tools | 2.10-0.1ubuntu4 |
| netcat | 1.226-1ubuntu2 |
| openssh-client | 1:9.6p1-3ubuntu13.8 |
| openssh-client | 1:9.6p1-3ubuntu13.5 |
| p7zip-full | 16.02+transitional.1 |
| p7zip-rar | 16.02+transitional.1 |
| parallel | 20231122+ds-1 |
| patchelf | 0.18.0-1.1build1 |
| pigz | 2.8-1 |
| pkg-config | 1.8.1-2build1 |
| pollinate | 4.33-3.1ubuntu1.1 |
| pollinate | 4.33-3.1ubuntu1 |
| python-is-python3 | 3.11.4-1 |
| rpm | 4.18.2+dfsg-2.1build2 |
| rsync | 3.2.7-1ubuntu1.2 |
| rsync | 3.2.7-1ubuntu1 |
| shellcheck | 0.9.0-1 |
| sphinxsearch | 2.2.11-8build1 |
| sqlite3 | 3.45.1-1ubuntu2.1 |
| ssh | 1:9.6p1-3ubuntu13.8 |
| sqlite3 | 3.45.1-1ubuntu2 |
| ssh | 1:9.6p1-3ubuntu13.5 |
| sshpass | 1.09-1 |
| sudo | 1.9.15p5-3ubuntu5 |
| swig | 4.2.0-2ubuntu1 |
| systemd-coredump | 255.4-1ubuntu8.5 |
| systemd-coredump | 255.4-1ubuntu8.4 |
| tar | 1.35+dfsg-3build1 |
| telnet | 0.17+2.5-3ubuntu4 |
| texinfo | 7.1-3build2 |
| time | 1.9-0.2build1 |
| tk | 8.6.14build1 |
| tree | 2.1.1-2ubuntu3 |
| tzdata | 2024b-0ubuntu0.24.04.1 |
| tzdata | 2024a-3ubuntu1.1 |
| unzip | 6.0-28ubuntu4.1 |
| upx | 4.2.2-3 |
| wget | 1.21.4-1ubuntu4.1 |
| xvfb | 2:21.1.12-1ubuntu1.2 |
| xvfb | 2:21.1.12-1ubuntu1.1 |
| xz-utils | 5.6.1+really5.4.5-1build0.1 |
| zip | 3.0-13ubuntu0.2 |
| zip | 3.0-13ubuntu0.1 |
| zsync | 0.6.2-5build1 |
@@ -6,7 +6,7 @@
# Source the helpers for use with the script
source $HELPER_SCRIPTS/etc-environment.sh
source $HELPER_SCRIPTS/os.sh
# This is the anti-frontend. It never interacts with you at all,
# and makes the default answers be used for all questions. It
# might mail error messages to root, but that's it; otherwise it
@@ -30,9 +30,3 @@ cat <<EOF >> /etc/apt/apt.conf.d/10apt-autoremove
APT::Get::AutomaticRemove "0";
APT::Get::HideAutoRemove "1";
EOF
# Install libicu70 package for Ubuntu 24
if is_ubuntu24 ; then
wget http://archive.ubuntu.com/ubuntu/pool/main/i/icu/libicu70_70.1-2_amd64.deb
sudo apt-get install -y ./libicu70_70.1-2_amd64.deb
fi
@@ -110,9 +110,6 @@ available_build_tools=$(echo ${all_build_tools[@]//*rc[0-9]/})
add_filtered_installation_components $minimum_platform_version "${available_platforms[@]}"
add_filtered_installation_components $minimum_build_tool_version "${available_build_tools[@]}"
# Add platform tools to the list of components to install
components+=("platform-tools")
# Install components
echo "y" | $SDKMANAGER ${components[@]}

Some files were not shown because too many files have changed in this diff Show More