diff --git a/.github/ISSUE_TEMPLATE/announcement.yml b/.github/ISSUE_TEMPLATE/announcement.yml index 7ad957a508..91464c8d3b 100644 --- a/.github/ISSUE_TEMPLATE/announcement.yml +++ b/.github/ISSUE_TEMPLATE/announcement.yml @@ -38,12 +38,12 @@ body: options: - label: Ubuntu 22.04 - label: Ubuntu 24.04 - - label: macOS 13 - - label: macOS 13 Arm64 + - label: Ubuntu Slim - label: macOS 14 - label: macOS 14 Arm64 - label: macOS 15 - label: macOS 15 Arm64 + - label: macOS 26 Arm64 - label: Windows Server 2019 - label: Windows Server 2022 - label: Windows Server 2025 diff --git a/.github/ISSUE_TEMPLATE/bug-report.yml b/.github/ISSUE_TEMPLATE/bug-report.yml index 64ae26c41a..6827473eda 100644 --- a/.github/ISSUE_TEMPLATE/bug-report.yml +++ b/.github/ISSUE_TEMPLATE/bug-report.yml @@ -21,12 +21,12 @@ body: options: - label: Ubuntu 22.04 - label: Ubuntu 24.04 - - label: macOS 13 - - label: macOS 13 Arm64 + - label: Ubuntu Slim - label: macOS 14 - label: macOS 14 Arm64 - label: macOS 15 - label: macOS 15 Arm64 + - label: macOS 26 Arm64 - label: Windows Server 2019 - label: Windows Server 2022 - label: Windows Server 2025 diff --git a/.github/ISSUE_TEMPLATE/tool-request.yml b/.github/ISSUE_TEMPLATE/tool-request.yml index 0983d76a42..58ca205ade 100644 --- a/.github/ISSUE_TEMPLATE/tool-request.yml +++ b/.github/ISSUE_TEMPLATE/tool-request.yml @@ -59,12 +59,12 @@ body: options: - label: Ubuntu 22.04 - label: Ubuntu 24.04 - - label: macOS 13 - - label: macOS 13 Arm64 + - label: Ubuntu Slim - label: macOS 14 - label: macOS 14 Arm64 - label: macOS 15 - label: macOS 15 Arm64 + - label: macOS 26 Arm64 - label: Windows Server 2019 - label: Windows Server 2022 - label: Windows Server 2025 diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md new file mode 100644 index 0000000000..3e75a0acca --- /dev/null +++ b/.github/copilot-instructions.md @@ -0,0 +1,39 @@ +# GitHub Copilot Instructions for Actions Runner Images Repository + +## Scope and goals + +- This repository serves as the source for building GitHub Actions runner and Azure DevOps agent images for Windows, Ubuntu, and macOS. You can find exact versions in the [Available Images](../README.md#available-images) section of README.md. Windows and Ubuntu images build on Azure infrastructure using Packer; macOS images use Anka virtualization. +- Emphasize best practices for contributing to open-source projects, including code style, commit messages, and pull request etiquette. +- Prefer clarity and correctness over creativity. If information is missing, ask clarifying questions or insert TODOs instead of guessing. + +## Code and command instructions + +- Follow the code style guide in [CONTRIBUTING.md](../CONTRIBUTING.md#code-style-guide) for Bash and PowerShell scripts, including naming conventions, file structure, and indentation rules. +- Focus on re-using helpers when writing scripts. Windows, Linux and Ubuntu scripts have helper functions available to simplify installation and validation. +- Always confirm versions and installation paths against existing toolset files and installation scripts. + +## Output format + +- Use GitHub Flavored Markdown only. Avoid raw HTML unless necessary. +- One H1 (`#`) per page, followed by logical, sequential headings (`##`, `###`, …). +- Use fenced code blocks with language identifiers (` ```bash `, ` ```json `, ` ```yaml `, etc.). +- Use blockquote callouts for notes: + > [!NOTE] Context or nuance + > [!TIP] Helpful hint + > [!WARNING] Risks or breaking changes + > [!IMPORTANT] Critical requirement for functionality + +## Style and tone + +- Audience: Open-source contributors, GitHub Actions maintainers, and developers building custom runner images. Assume familiarity with CI/CD concepts, Packer, and basic infrastructure provisioning, but explain platform-specific details (Azure for Windows/Ubuntu, Anka for macOS) when relevant. +- Voice: Second person ("you"), active voice, imperative for operational steps. +- Be concise: short paragraphs and sentences. Prefer lists and step-by-steps, especially for operational procedures and troubleshooting. +- Use inclusive, accessible language. Avoid idioms, sarcasm, and culturally specific references. +- English: en-US (spelling, punctuation, and units). + +## Safety and integrity + +- Do not expose sensitive credentials (API tokens, Azure subscription IDs, etc.) in code examples. +- Do not fabricate tool versions, installation paths, or software availability without verifying against toolset files or actual installation scripts. +- Always call out assumptions and limitations explicitly, especially for changes affecting runner image behavior or software availability. +- If ambiguous requests are made about image modifications, ask clarifying questions about target OS, tool versions, and compatibility requirements before proceeding. diff --git a/.github/workflows/check-pinned-versions.yml b/.github/workflows/check-pinned-versions.yml index e7e481e106..19fc0dbebb 100644 --- a/.github/workflows/check-pinned-versions.yml +++ b/.github/workflows/check-pinned-versions.yml @@ -10,10 +10,10 @@ permissions: jobs: check-pinning-dates: - runs-on: ubuntu-latest + runs-on: ubuntu-slim steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Validate JSON Schema shell: pwsh diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 22c10f958e..986170bf8e 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -40,7 +40,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v5 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL diff --git a/.github/workflows/create_github_release.yml b/.github/workflows/create_github_release.yml index e0c8afc181..5ef99cd8e9 100644 --- a/.github/workflows/create_github_release.yml +++ b/.github/workflows/create_github_release.yml @@ -10,13 +10,12 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 - - name: Create release for ${{ github.event.client_payload.ReleaseBranchName }} - uses: ncipollo/release-action@v1.16.0 + uses: ncipollo/release-action@b7eabc95ff50cbeeedec83973935c8f306dfcd0b #v1.20.0 with: tag: ${{ github.event.client_payload.ReleaseBranchName }} name: ${{ github.event.client_payload.ReleaseTitle }} body: ${{ github.event.client_payload.ReleaseBody }} prerelease: ${{ github.event.client_payload.Prerelease }} commit: ${{ github.event.client_payload.Commitish }} + allowUpdates: true diff --git a/.github/workflows/create_pull_request.yml b/.github/workflows/create_pull_request.yml index b3de3b7b62..ae818f6551 100644 --- a/.github/workflows/create_pull_request.yml +++ b/.github/workflows/create_pull_request.yml @@ -7,10 +7,10 @@ on: jobs: Create_pull_request: - runs-on: ubuntu-latest + runs-on: ubuntu-slim steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: fetch-depth: 0 @@ -22,22 +22,36 @@ jobs: - name: Create pull request for ${{ github.event.client_payload.ReleaseBranchName }} id: create-pr - uses: actions/github-script@v7 + uses: actions/github-script@v8 with: github-token: ${{secrets.GITHUB_TOKEN}} script: | - let response = await github.rest.pulls.create({ + const pulls = await github.rest.pulls.list({ owner: context.repo.owner, repo: context.repo.repo, - title: "${{ github.event.client_payload.PullRequestTitle }}", - head: "${{ github.event.client_payload.ReleaseBranchName }}-docs", + head: `${context.repo.owner}:${{ github.event.client_payload.ReleaseBranchName }}-docs`, base: "${{ github.event.client_payload.PullRequestBase }}", - body: `${{ github.event.client_payload.PullRequestBody }}` + state: 'open' }); - return response.data.number + + if (pulls.data.length > 0) { + console.log(`Pull request already exists: ${pulls.data[0].html_url}`); + return pulls.data[0].number; + } else { + console.log('No existing pull request found, creating new one'); + let response = await github.rest.pulls.create({ + owner: context.repo.owner, + repo: context.repo.repo, + title: "${{ github.event.client_payload.PullRequestTitle }}", + head: "${{ github.event.client_payload.ReleaseBranchName }}-docs", + base: "${{ github.event.client_payload.PullRequestBase }}", + body: `${{ github.event.client_payload.PullRequestBody }}` + }); + return response.data.number; + } - name: Request reviewers - uses: actions/github-script@v7 + uses: actions/github-script@v8 with: github-token: ${{secrets.PRAPPROVAL_SECRET}} script: | diff --git a/.github/workflows/create_sbom_report.yml b/.github/workflows/create_sbom_report.yml index 4c9b1dfc99..7131104b2b 100644 --- a/.github/workflows/create_sbom_report.yml +++ b/.github/workflows/create_sbom_report.yml @@ -1,97 +1,112 @@ name: Create SBOM for the release -# Inherited variables: -# github.event.client_payload.agentSpec - Current YAML Label -# github.event.client_payload.ReleaseID - Current release ID -# github.event.client_payload.imageVersion - AzDO image version "major.minor" -# github.event.client_payload.ReleaseBranchName - Necessary to identify workflow run -# -# Current SYFT tool issues: -# macOS (major): prompt privilegies that blocking process indefinetely (https://github.com/anchore/syft/issues/1367) -run-name: Collecting SBOM for ${{ github.event.client_payload.ReleaseBranchName || 'unknown release' }} + +run-name: Collecting SBOM for ${{ github.event.client_payload.agentSpec || 'unknown image' }} - ${{ github.event.client_payload.imageVersion || 'unknown version' }} + on: repository_dispatch: types: [generate-sbom] + defaults: run: shell: pwsh + jobs: - #Checking current release for SBOM sbom-check: outputs: check_status: ${{ steps.check.outputs.status }} runs-on: ubuntu-latest + env: + RELEASE_ID: ${{ github.event.client_payload.ReleaseID }} steps: - - name: Check release for ${{ github.event.client_payload.ReleaseBranchName }} + - name: Check SBOM asset for release ${{ env.RELEASE_ID }} id: check shell: pwsh run: | - $apiUrl = "https://api.github.com/repos/actions/runner-images/releases/${{ github.event.client_payload.ReleaseID }}" + $apiUrl = "https://api.github.com/repos/actions/runner-images/releases/$env:RELEASE_ID" $response = Invoke-RestMethod -Uri $apiUrl -Method Get -SkipHttpErrorCheck if ($response.message -ilike "Not Found") { echo "status=release_not_found" >> $env:GITHUB_OUTPUT - Write-Error "Release ${{ github.event.client_payload.ReleaseID }} wasn't found" + Write-Error "Release $env:RELEASE_ID wasn't found" exit 1 } foreach ($asset in $response.assets) { if ($asset.name -like '*sbom*') { echo "status=sbom_exists" >> $env:GITHUB_OUTPUT - return "Release ${{ github.event.client_payload.ReleaseID }} already contains a SBOM" + return "Release $env:RELEASE_ID already contains a SBOM" } } Write-Host "Release has been found, SBOM is not attached, starting generation." echo "status=okay" >> $env:GITHUB_OUTPUT - #Generating SBOM + building-sbom: needs: sbom-check if: ${{ needs.sbom-check.outputs.check_status == 'okay' }} runs-on: ${{ github.event.client_payload.agentSpec }} + env: + AGENT_SPEC: ${{ github.event.client_payload.agentSpec }} + RELEASE_ID: ${{ github.event.client_payload.ReleaseID }} + IMAGE_VERSION: ${{ github.event.client_payload.imageVersion }} steps: - - name: Available image version check for ${{ github.event.client_payload.ReleaseBranchName }} + - name: Available image version check run: | - $imageVersionComponents = $env:ImageVersion.Split('.') - $imageMajorVersion = $imageVersionComponents[0] - $imageMinorVersion = $imageVersionComponents[1] - if ("$imageMajorVersion.$imageMinorVersion" -ne '${{ github.event.client_payload.imageVersion }}') { - throw "Current runner $imageMajorVersion.$imageMinorVersion image version doesn't match ${{ github.event.client_payload.imageVersion }}." + $expectedVersion = $env:IMAGE_VERSION + $runnerVersion = $env:ImageVersion + + # Split versions by dot + $expectedParts = $expectedVersion.Split('.') + $runnerParts = $runnerVersion.Split('.') + + # Determine what parts to compare + $minLength = [Math]::Min($expectedParts.Length, $runnerParts.Length) + $expectedComparable = $expectedParts[0..($minLength-1)] -join '.' + $runnerComparable = $runnerParts[0..($minLength-1)] -join '.' + + # Perform the comparison + if ($expectedComparable -ne $runnerComparable) { + throw "Version mismatch: Expected version '$expectedVersion' doesn't match runner version '$runnerVersion'" } + - name: Install SYFT tool on Windows if: ${{ runner.os == 'Windows' }} - run: curl -sSfL https://raw.githubusercontent.com/anchore/syft/main/install.sh | sh -s -- -b D:/syft + run: curl -sSfL https://raw.githubusercontent.com/anchore/syft/main/install.sh | sh -s -- -b C:/syft + - name: Install SYFT tool on Ubuntu if: ${{ runner.os == 'Linux' }} run: curl -sSfL https://raw.githubusercontent.com/anchore/syft/main/install.sh | sh -s -- -b /usr/local/bin + - name: Install SYFT v1.24.0 on macOS if: ${{ runner.os == 'macOS' }} run: curl -sSfL https://raw.githubusercontent.com/anchore/syft/main/install.sh | sh -s -- -b /usr/local/bin v1.24.0 - #Running section. - name: Run SYFT on Windows if: ${{ runner.os == 'Windows' }} - run: D:/syft/syft dir:C:/ -vv -o spdx-json=sbom.json + run: C:/syft/syft dir:C:/ -vv -o spdx-json=sbom.json + - name: Run SYFT on Ubuntu if: ${{ runner.os == 'Linux' }} run: syft dir:/ -vv -o spdx-json=sbom.json + - name: Run SYFT on macOS if: ${{ runner.os == 'macOS' }} + # Skip protected folders to avoid prompt privileges that block process indefinitely (https://github.com/anchore/syft/issues/1367) run: sudo syft dir:/ -vv -o spdx-json=sbom.json --exclude ./Users --exclude ./System/Volumes --exclude ./private shell: bash - #Preparing artifact (raw SBOM.json is too big) + - name: Compress SBOM file run: Compress-Archive sbom.json sbom.json.zip - #Upload artifact action + - uses: actions/upload-artifact@v4 with: - name: sbom-${{ github.event.client_payload.agentSpec }}-${{ github.event.client_payload.imageVersion }} + name: sbom-${{ env.AGENT_SPEC }}-${{ env.IMAGE_VERSION }} path: sbom.json.zip if-no-files-found: warn - #Upload release asset action - #Might be changed to softprops/action-gh-release after additional check + - name: Upload release asset uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: - upload_url: "https://uploads.github.com/repos/actions/runner-images/releases/${{ github.event.client_payload.ReleaseID }}/assets{?name,label}" + upload_url: "https://uploads.github.com/repos/actions/runner-images/releases/${{ env.RELEASE_ID }}/assets{?name,label}" asset_path: ./sbom.json.zip - asset_name: sbom.${{ github.event.client_payload.agentSpec }}.json.zip + asset_name: sbom.${{ env.AGENT_SPEC }}.json.zip asset_content_type: application/zip diff --git a/.github/workflows/docker-images.yml b/.github/workflows/docker-images.yml new file mode 100644 index 0000000000..6c1b5d7335 --- /dev/null +++ b/.github/workflows/docker-images.yml @@ -0,0 +1,31 @@ +name: Test Docker Images + +on: + push: + branches: + - main + paths: + - 'images/ubuntu-slim/**' + - '.github/workflows/docker-images.yml' + pull_request: + paths: + - 'images/ubuntu-slim/**' + - '.github/workflows/docker-images.yml' + workflow_dispatch: + +permissions: + contents: read + +jobs: + test-images: + runs-on: ubuntu-latest + strategy: + matrix: + directory: + - images/ubuntu-slim + steps: + - uses: actions/checkout@v6 + + - name: Run test.sh + working-directory: ${{ matrix.directory }} + run: ./test.sh diff --git a/.github/workflows/linter.yml b/.github/workflows/linter.yml index 167d4d2748..e5adb40b18 100644 --- a/.github/workflows/linter.yml +++ b/.github/workflows/linter.yml @@ -17,7 +17,7 @@ jobs: steps: - name: Checkout Code - uses: actions/checkout@v4 + uses: actions/checkout@v5 with: fetch-depth: 0 diff --git a/.github/workflows/merge_pull_request.yml b/.github/workflows/merge_pull_request.yml index 916e7db4f6..6973010661 100644 --- a/.github/workflows/merge_pull_request.yml +++ b/.github/workflows/merge_pull_request.yml @@ -7,10 +7,10 @@ on: jobs: Merge_pull_request: - runs-on: ubuntu-latest + runs-on: ubuntu-slim steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: fetch-depth: 0 @@ -24,7 +24,7 @@ jobs: sleep 30 - name: Approve pull request by GitHub-Actions bot - uses: actions/github-script@v7 + uses: actions/github-script@v8 with: github-token: ${{secrets.PRAPPROVAL_SECRET}} script: | @@ -36,7 +36,7 @@ jobs: }); - name: Merge pull request for ${{ github.event.client_payload.ReleaseBranchName }} - uses: actions/github-script@v7 + uses: actions/github-script@v8 with: github-token: ${{secrets.GITHUB_TOKEN}} script: | diff --git a/.github/workflows/powershell-tests.yml b/.github/workflows/powershell-tests.yml index 28afce838e..88b7a88eda 100644 --- a/.github/workflows/powershell-tests.yml +++ b/.github/workflows/powershell-tests.yml @@ -15,7 +15,7 @@ jobs: steps: - name: Checkout Repository - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Run Software Report module tests shell: pwsh diff --git a/.github/workflows/trigger-ubuntu-win-build.yml b/.github/workflows/trigger-ubuntu-win-build.yml index 6016890103..e314247c8c 100644 --- a/.github/workflows/trigger-ubuntu-win-build.yml +++ b/.github/workflows/trigger-ubuntu-win-build.yml @@ -23,7 +23,7 @@ jobs: CI_REPO: ${{ vars.CI_REPO }} steps: - name: Checkout Code - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Trigger Build workflow run: | @@ -78,7 +78,7 @@ jobs: needs: trigger-workflow steps: - name: Checkout Code - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Wait for workflow completion env: @@ -106,7 +106,7 @@ jobs: if: cancelled() steps: - name: Checkout Code - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Cancel workflow env: diff --git a/.github/workflows/update_github_release.yml b/.github/workflows/update_github_release.yml index 2121575085..636fd88caf 100644 --- a/.github/workflows/update_github_release.yml +++ b/.github/workflows/update_github_release.yml @@ -7,13 +7,11 @@ on: jobs: Update_GitHub_release: - runs-on: ubuntu-latest + runs-on: ubuntu-slim steps: - - uses: actions/checkout@v4 - - name: Update release for ${{ github.event.client_payload.ReleaseBranchName }} - uses: actions/github-script@v7 + uses: actions/github-script@v8 with: github-token: ${{secrets.GITHUB_TOKEN}} script: | diff --git a/.github/workflows/validate-json-schema.yml b/.github/workflows/validate-json-schema.yml index a93dded618..c82bac2fad 100644 --- a/.github/workflows/validate-json-schema.yml +++ b/.github/workflows/validate-json-schema.yml @@ -13,7 +13,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Validate JSON Schema shell: pwsh diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 9f9547a459..eddd7d5b81 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -10,11 +10,18 @@ Contributions to this project are [released](https://help.github.com/articles/gi Please note that this project is released with a [Contributor Code of Conduct][code-of-conduct]. By participating in this project, you agree to abide by its terms. +## Contents + +- [Submitting a pull request](#submitting-a-pull-request) +- [Adding a new tool to an image](#adding-a-new-tool-to-an-image) +- [Code style guide](#code-style-guide) + + ## Submitting a pull request 1. [Fork][fork] and clone the repository. 1. Create a new branch: `git checkout -b my-branch-name`. -1. Make your changes, ensuring that they include steps to install, validate post-install, and update the software report (please see [How to add a new tool](CONTRIBUTING.md#how-to-add-a-new-tool) for details). +1. Make your changes, ensuring that they include steps to install, validate post-install, and update the software report (please see [Adding a new tool to an image](#adding-a-new-tool-to-an-image) for details). 1. Test your changes by [creating an image and deploying a VM](docs/create-image-and-azure-resources.md). 1. Push to your fork and [submit a pull request][pr]. @@ -28,7 +35,7 @@ Here are a few things you can do that will increase the likelihood of your pull - Make sure that the tool satisfies the [Software Guidelines](README.md#software-guidelines). - Create an issue and get approval from us to add this tool to the image before creating the pull request. -## How to add a new tool +## Adding a new tool to an image ### General rules @@ -60,6 +67,185 @@ Use existing scripts such as [github-cli.sh](images/ubuntu/scripts/build/github- The macOS source lives in this repository and is available for everyone. However, the macOS image-generation CI doesn't support external contributions yet, so we are not able to accept pull requests for now. We are in the process of preparing the macOS CI to accept contributions. Until then, we appreciate your patience and ask that you continue to make tool requests by filing issues. +## Code style guide + +The principles of clean code apply to all languages. The main points are: + +- Use meaningful names for variables, functions, files, etc. +- Keep functions short and simple. +- Use comments to explain what the code does. +- Use a consistent code style, naming convention, and file structure. + +### File structure + +- Each file should have a header with a title and a short description of the file. +- Each file should have a newline at the end. +- Use blank lines to separate logical blocks of code, but don't abuse blank lines: + - Don't add a blank line in the beginning and end of a block or function. + - Don't add blank lines between logically connected statements. +- Avoid trailing whitespace. + +### Bash scripts + +#### Naming convention for bash scripts + +- Use lowercase letters for variable names. +- Use uppercase letters for constants. +- Use underscores to separate words in variable names. + +#### Bash script structure + +Each script should start with the following shebang: + +```bash +#!/bin/bash -e +``` + +> TODO: do we need to set pipefail? + +This will make the script exit if any command fails. + +After the shebang, add a header with the following format: + +```bash +################################################################################ +## File: +## Desc: +################################################################################ +``` + +Then import helpers that are used in the script. + +For Linux: + +```bash +source $HELPER_SCRIPTS/os.sh +source $HELPER_SCRIPTS/install.sh +source $HELPER_SCRIPTS/etc-environment.sh +``` + +For macOS: + +```bash +source ~/utils/utils.sh +``` + +> [!NOTE] +> You don't need to import all helpers, only the ones that are used in the script. + +After that, add the script code. + +### Indentations and line breaks in bash scripts + +- Use 4 spaces for indentation. +- Use 1 space between `if`/`for`/`while` and `[[` and between `[[` and the condition. +- Place `then`/`do` on the new line. +- For short `if`/`for`/`while` statements, use the one-line format. +- Break long pipelines using `\`. + +### Other recommendations for bash scripts + +- For command substitution, use `$()` instead of backticks. +- Use `[[` instead of `[` for conditional expressions. +- Prefer using long options instead of short keys, but there are exceptions, e.g.: + - `tar -xzf` + - `apt-get -yqq` + - `curl -sSLf` + - `wget -qO-` + +### PowerShell scripts + +#### Naming convention for PowerShell scripts + +- Use camelCase for variable names. +- Use uppercase letters for constants. +- Use `Verb-Noun` and PascalCase for function names. + +### PowerShell script structure + +Each script should start with the following header: + +```powershell +################################################################################ +## File: +## Desc: +################################################################################ +``` + +Then declare functions that are used in the script. + +> TODO: do we need to set the error action preference and progress preference? +> +> ```powershell +> $ErrorActionPreference = "Stop" +> $ProgressPreference = "SilentlyContinue" +> ``` + +For Linux and macOS, import helpers that are used in the script: + +For Linux: + +```powershell +Import-Module "$env:HELPER_SCRIPTS/Tests.Helpers.psm1" -DisableNameChecking +``` + +For macOS: + +```powershell +Import-Module "$env:HOME/image-generation/helpers/Common.Helpers.psm1" +Import-Module "$env:HOME/image-generation/helpers/Xcode.Helpers.psm1" -DisableNameChecking +``` + +> [!NOTE] +> You don't need to import all helpers, only the ones that are used in the script. + +After that, add the script code. + +### Indentations and line breaks in PowerShell scripts + +- Use 4 spaces for indentation. +- Use 1 space between `if`/`elseif`/`foreach` and `(` but not between `(` and the condition. +- Add a space before and after pipe `|` and redirection `>` operators. +- Align properties in hash tables. +- Use [1TBS](https://en.wikipedia.org/wiki/Indentation_style#Variant:_1TBS_(OTBS)) style for curly braces: + - If block of statement is long, then place it on the new line, indent it, and add a closing curly brace on the new line. + - If block of statement is short, then place it on the same line as the statement. + + ```powershell + function Show-Example1 { + $exampleVariable = Get-ChildItem $env:TEMP + $exampleVariable | ForEach-Object { + $itemName = $_.Name + $itemPath = $_.FullName + } + } + + $Example2 | Some-Function -Arguments @{Parameter1 = "Disabled"} + ``` + +- Avoid using aliases. +- Break long pipelines using backticks or use [splatting](https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_splatting?view=powershell-7.3): + + ```powershell + # Instead of this + Copy-Item -Path "test.txt" -Destination "test2.txt" -WhatIf + + # you can use this + $HashArguments = @{ + Path = "test.txt" + Destination = "test2.txt" + WhatIf = $true + } + Copy-Item @HashArguments + ``` + + When using backticks be extra careful with trailing whitespace as they can cause errors. + +### Other recommendations for PowerShell scripts + +- Verify exit codes of commands. +- When writing a function, provide a docstring that describes what the function does. + ## Resources - [How to Contribute to Open Source](https://opensource.guide/how-to-contribute/) diff --git a/README.md b/README.md index 5a7842b1d6..a11e511a3c 100644 --- a/README.md +++ b/README.md @@ -18,19 +18,19 @@ To build a VM machine from this repo's source, see the [instructions](docs/creat ## Available Images -| 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) | -| macOS 15 | `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 | `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) | -| Windows Server 2025 | `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] | ![Deprecated](https://img.shields.io/badge/-Deprecated-red) | +| Image | YAML Label | Included Software | +| --------------------|---------------------|--------------------| +| Ubuntu 24.04 | `ubuntu-latest` or `ubuntu-24.04` | [ubuntu-24.04] | +| Ubuntu 22.04 | `ubuntu-22.04` | [ubuntu-22.04] | +| Ubuntu Slim | `ubuntu-slim` | [ubuntu-slim] | +| macOS 26 Arm64 `beta` | `macos-26` or `macos-26-xlarge` | [macOS-26-arm64] | +| macOS 15 | `macos-latest-large`, `macos-15-large`, or `macos-15-intel` | [macOS-15] | +| macOS 15 Arm64 | `macos-latest`, `macos-15`, or `macos-15-xlarge` | [macOS-15-arm64] | +| macOS 14 | `macos-14-large`| [macOS-14] | +| macOS 14 Arm64 | `macos-14` or `macos-14-xlarge`| [macOS-14-arm64] | +| Windows Server 2025 | `windows-latest` or `windows-2025` | [windows-2025] | +| Windows Server 2022 | `windows-2022` | [windows-2022] | +| Windows Server 2019 [![Deprecated badge](https://img.shields.io/badge/-Deprecated-red)](https://github.com/actions/runner-images/issues/12045) | `windows-2019` | [windows-2019] | ### Label scheme @@ -39,15 +39,15 @@ To build a VM machine from this repo's source, see the [instructions](docs/creat [ubuntu-24.04]: https://github.com/actions/runner-images/blob/main/images/ubuntu/Ubuntu2404-Readme.md [ubuntu-22.04]: https://github.com/actions/runner-images/blob/main/images/ubuntu/Ubuntu2204-Readme.md +[ubuntu-slim]: https://github.com/actions/runner-images/blob/main/images/ubuntu-slim/ubuntu-slim-Readme.md [windows-2019]: https://github.com/actions/runner-images/blob/main/images/windows/Windows2019-Readme.md [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 -[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 [macOS-14-arm64]: https://github.com/actions/runner-images/blob/main/images/macos/macos-14-arm64-Readme.md [macOS-15]: https://github.com/actions/runner-images/blob/main/images/macos/macos-15-Readme.md [macOS-15-arm64]: https://github.com/actions/runner-images/blob/main/images/macos/macos-15-arm64-Readme.md +[macOS-26-arm64]: https://github.com/actions/runner-images/blob/main/images/macos/macos-26-arm64-Readme.md [self-hosted runners]: https://help.github.com/en/actions/hosting-your-own-runners ## Announcements @@ -120,6 +120,7 @@ The `-latest` migration process is gradual and happens over 1-2 months in order | GCC
GNU Fortran
Clang
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
- all minor versions of the supported major version will be available
- beta and RC versions will be provided "as-is" in the latest available macOS image only no matter of beta/GA status of the image
- when a new patch version is released, the previous patch version will be replaced | +| Xcode Platforms | - only three major.minor versions of platform tools and simulator runtimes will be available for installed Xcode, including beta/RC versions | ### Package managers usage diff --git a/images/macos/assets/bashrc b/images/macos/assets/bashrc index ca021fd78d..a56b77a0e5 100644 --- a/images/macos/assets/bashrc +++ b/images/macos/assets/bashrc @@ -22,8 +22,9 @@ export PATH="/usr/local/opt/curl/bin:$PATH" export PATH=$HOME/.cargo/bin:$PATH export RCT_NO_LAUNCH_PACKAGER=1 -export DOTNET_ROOT=$HOME/.dotnet export DOTNET_MULTILEVEL_LOOKUP=0 +export DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1 +export DOTNET_NOLOGO=1 export HOMEBREW_NO_AUTO_UPDATE=1 export HOMEBREW_NO_INSTALL_CLEANUP=1 diff --git a/images/macos/macos-13-Readme.md b/images/macos/macos-13-Readme.md index b744ce6244..c88b46beb9 100644 --- a/images/macos/macos-13-Readme.md +++ b/images/macos/macos-13-Readme.md @@ -1,105 +1,108 @@ | Announcements | |-| -| [[macOS] Xcode support policy will be changed on August 11, 2025](https://github.com/actions/runner-images/issues/12541) | +| [[macOS] Cmake will be updated to version 4.* on September 8th](https://github.com/actions/runner-images/issues/12934) | +| [[macOS] Deprecation of 4 tools on November 3rd.](https://github.com/actions/runner-images/issues/12873) | | [[macOS] macos-latest YAML-label will use macos-15 in August 2025](https://github.com/actions/runner-images/issues/12520) | *** # macOS 13 - OS Version: macOS 13.7.6 (22H625) - Kernel Version: Darwin 22.6.0 -- Image Version: 20250721.1353 +- Image Version: 20250908.1476 ## Installed Software ### Language and Runtime -- .NET Core SDK: 8.0.101, 8.0.204, 8.0.303, 8.0.412, 9.0.102, 9.0.203, 9.0.303 +- .NET Core SDK: 8.0.101, 8.0.204, 8.0.303, 8.0.413, 9.0.102, 9.0.203, 9.0.304 - 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.4.0) - available by `gcc-13` alias - GCC 14 (Homebrew GCC 14.3.0) - available by `gcc-14` alias +- GCC 15 (Homebrew GCC 15.1.0) - available by `gcc-15` alias - GNU Fortran 12 (Homebrew GCC 12.4.0) - available by `gfortran-12` alias - GNU Fortran 13 (Homebrew GCC 13.4.0) - available by `gfortran-13` alias - GNU Fortran 14 (Homebrew GCC 14.3.0) - available by `gfortran-14` alias -- Kotlin 2.2.0-release-294 +- GNU Fortran 15 (Homebrew GCC 15.1.0) - available by `gfortran-15` alias +- Kotlin 2.2.10-release-430 - Mono 6.12.0.188 -- Node.js 20.19.4 +- Node.js 20.19.5 - Perl 5.40.2 -- PHP 8.4.10 -- Python3 3.13.5 -- Ruby 3.3.8 +- PHP 8.4.12 +- Python3 3.13.7 +- Ruby 3.3.9 ### Package Management -- Bundler 2.7.0 +- Bundler 2.7.1 - Carthage 0.40.0 - CocoaPods 1.16.2 -- Composer 2.8.10 -- Homebrew 4.5.10 +- Composer 2.8.11 +- Homebrew 4.6.9 - NPM 10.8.2 - NuGet 6.3.1.1 -- Pip3 25.1.1 (python 3.13) +- Pip3 25.2 (python 3.13) - Pipx 1.7.1 -- RubyGems 3.7.0 -- Vcpkg 2025 (build from commit ef97fc17c7) +- RubyGems 3.7.1 +- Vcpkg 2025 (build from commit 4a7ce81d91) - Yarn 1.22.22 ### Project Management - Apache Ant 1.10.15 - Apache Maven 3.9.11 -- Gradle 8.14.3 +- Gradle 9.0.0 ### Utilities - 7-Zip 17.05 - aria2 1.37.0 -- azcopy 10.29.1 -- bazel 8.3.1 -- bazelisk 1.26.0 +- azcopy 10.30.0 +- bazel 8.4.0 +- bazelisk 1.27.0 - bsdtar 3.5.3 - available by 'tar' alias - Curl 8.15.0 - Git 2.50.1 - Git LFS 3.7.0 -- GitHub CLI 2.76.0 +- GitHub CLI 2.78.0 - GNU Tar 1.35 - available by 'gtar' alias - GNU Wget 1.25.0 - gpg (GnuPG) 2.4.8 - jq 1.8.1 - OpenSSL 1.1.1w 11 Sep 2023 -- Packer 1.13.1 +- Packer 1.14.0 - pkgconf 2.5.1 - Unxip 3.1 -- yq 4.46.1 +- yq 4.47.1 - zstd 1.5.7 - Ninja 1.13.1 ### Tools -- AWS CLI 2.27.55 -- AWS SAM CLI 1.142.1 +- AWS CLI 2.28.25 +- AWS SAM CLI 1.143.0 - AWS Session Manager CLI 1.2.707.0 -- Azure CLI 2.75.0 +- Azure CLI 2.77.0 - Azure CLI (azure-devops) 1.0.2 -- Bicep CLI 0.36.177 -- Cmake 3.31.6 -- CodeQL Action Bundle 2.22.1 +- Bicep CLI 0.37.4 +- Cmake 4.1.1 +- CodeQL Action Bundle 2.23.0 - Fastlane 2.228.0 - SwiftFormat 0.57.2 -- Xcbeautify 2.29.0 +- Xcbeautify 2.30.1 - Xcode Command Line Tools 14.3.1.0.1.1683849156 - Xcodes 1.6.2 ### Linters -- SwiftLint 0.59.1 +- SwiftLint 0.61.0 ### Browsers - Safari 18.5 (18621.2.5.18.1) - SafariDriver 18.5 (18621.2.5.18.1) -- Google Chrome 138.0.7204.158 -- Google Chrome for Testing 138.0.7204.157 -- ChromeDriver 138.0.7204.157 -- Microsoft Edge 138.0.3351.95 -- Microsoft Edge WebDriver 138.0.3351.95 -- Mozilla Firefox 140.0.4 +- Google Chrome 140.0.7339.81 +- Google Chrome for Testing 140.0.7339.80 +- ChromeDriver 140.0.7339.80 +- Microsoft Edge 140.0.3485.54 +- Microsoft Edge WebDriver 140.0.3485.54 +- Mozilla Firefox 142.0.1 - geckodriver 0.36.0 -- Selenium server 4.34.0 +- Selenium server 4.35.0 #### Environment variables | Name | Value | @@ -111,7 +114,7 @@ ### Java | Version | Environment Variable | | ------------------- | -------------------- | -| 8.0.452+9 | JAVA_HOME_8_X64 | +| 8.0.462+8 | JAVA_HOME_8_X64 | | 11.0.28+6 | JAVA_HOME_11_X64 | | 17.0.16+8 (default) | JAVA_HOME_17_X64 | | 21.0.8+9.0 | JAVA_HOME_21_X64 | @@ -127,8 +130,8 @@ #### Ruby - 3.1.7 -- 3.2.8 -- 3.3.8 +- 3.2.9 +- 3.3.9 - 3.4.5 #### Python @@ -137,26 +140,27 @@ - 3.10.18 - 3.11.9 - 3.12.10 -- 3.13.5 +- 3.13.7 #### Node.js - 18.20.8 -- 20.19.4 -- 22.17.1 +- 20.19.5 +- 22.19.0 #### Go - 1.22.12 -- 1.23.11 -- 1.24.5 +- 1.23.12 +- 1.24.7 +- 1.25.1 ### Rust Tools -- Cargo 1.88.0 -- Rust 1.88.0 -- Rustdoc 1.88.0 +- Cargo 1.89.0 +- Rust 1.89.0 +- Rustdoc 1.89.0 - Rustup 1.28.2 #### Packages -- Clippy 0.1.88 +- Clippy 0.1.89 - Rustfmt 1.8.0-stable ### PowerShell Tools @@ -214,8 +218,8 @@ | visionOS 1.0 | xros1.0 | 15.2 | | Simulator - visionOS 1.0 | xrsimulator1.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 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 | +| Asset Runtime SDK for macOS hosts targeting tvOS 16.4 | assetruntime.host.macosx.target.appletvos16.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 | @@ -240,18 +244,18 @@ | watchOS 10.2 | Apple Watch SE (40mm) (2nd generation)
Apple Watch SE (44mm) (2nd generation)
Apple Watch Series 5 (40mm)
Apple Watch Series 5 (44mm)
Apple Watch Series 6 (40mm)
Apple Watch Series 6 (44mm)
Apple Watch Series 7 (41mm)
Apple Watch Series 7 (45mm)
Apple Watch Series 8 (41mm)
Apple Watch Series 8 (45mm)
Apple Watch Series 9 (41mm)
Apple Watch Series 9 (45mm)
Apple Watch Ultra (49mm)
Apple Watch Ultra 2 (49mm) | ### Android -| Package Name | Version | -| -------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Android Command Line Tools | 11.0 | -| Android Emulator | 35.6.11 | -| Android SDK Build-tools | 36.0.0
35.0.0 35.0.1
34.0.0
33.0.2 33.0.3 | -| Android SDK Platforms | android-36 (rev 2)
android-35-ext15 (rev 1)
android-35-ext14 (rev 1)
android-35 (rev 2)
android-34-ext8 (rev 1)
android-34-ext12 (rev 1)
android-34-ext11 (rev 1)
android-34-ext10 (rev 1)
android-34 (rev 3)
android-33-ext5 (rev 1)
android-33-ext4 (rev 1)
android-33 (rev 3) | -| Android SDK Platform-Tools | 36.0.0 | -| Android Support Repository | 47.0.0 | -| CMake | 3.31.5 | -| Google Play services | 49 | -| Google Repository | 58 | -| NDK | 26.3.11579264 (default)
27.3.13750724
28.2.13676358 | +| Package Name | Version | +| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Android Command Line Tools | 11.0 | +| Android Emulator | 36.1.9 | +| Android SDK Build-tools | 36.0.0
35.0.0 35.0.1
34.0.0
33.0.2 33.0.3 | +| Android SDK Platforms | android-36-ext19 (rev 1)
android-36-ext18 (rev 1)
android-36 (rev 2)
android-35-ext15 (rev 1)
android-35-ext14 (rev 1)
android-35 (rev 2)
android-34-ext8 (rev 1)
android-34-ext12 (rev 1)
android-34-ext11 (rev 1)
android-34-ext10 (rev 1)
android-34 (rev 3)
android-33-ext5 (rev 1)
android-33-ext4 (rev 1)
android-33 (rev 3) | +| Android SDK Platform-Tools | 36.0.0 | +| Android Support Repository | 47.0.0 | +| CMake | 3.31.5 | +| Google Play services | 49 | +| Google Repository | 58 | +| NDK | 26.3.11579264 (default)
27.3.13750724
28.2.13676358 | #### Environment variables | Name | Value | @@ -264,12 +268,12 @@ | ANDROID_SDK_ROOT | /Users/runner/Library/Android/sdk | ### Miscellaneous -- Tcl/Tk 8.6.16 +- Tcl/Tk 8.6.17 #### Environment variables | Name | Value | | ----------------- | ----------------------------------------------------------------------------------------- | -| PARALLELS_DMG_URL | https://download.parallels.com/desktop/v20/20.4.0-55980/ParallelsDesktop-20.4.0-55980.dmg | +| PARALLELS_DMG_URL | https://download.parallels.com/desktop/v26/26.0.1-57243/ParallelsDesktop-26.0.1-57243.dmg | ##### Notes ``` diff --git a/images/macos/macos-13-arm64-Readme.md b/images/macos/macos-13-arm64-Readme.md index ea6d4b4a12..fe84bfd7e5 100644 --- a/images/macos/macos-13-arm64-Readme.md +++ b/images/macos/macos-13-arm64-Readme.md @@ -1,85 +1,88 @@ | Announcements | |-| -| [[macOS] Xcode support policy will be changed on August 11, 2025](https://github.com/actions/runner-images/issues/12541) | +| [[macOS] Cmake will be updated to version 4.* on September 8th](https://github.com/actions/runner-images/issues/12934) | +| [[macOS] Deprecation of 4 tools on November 3rd.](https://github.com/actions/runner-images/issues/12873) | | [[macOS] macos-latest YAML-label will use macos-15 in August 2025](https://github.com/actions/runner-images/issues/12520) | *** # macOS 13 - OS Version: macOS 13.7.6 (22H625) - Kernel Version: Darwin 22.6.0 -- Image Version: 20250714.1403 +- Image Version: 20250908.1545 ## Installed Software ### Language and Runtime -- .NET Core SDK: 8.0.101, 8.0.204, 8.0.303, 8.0.412, 9.0.102, 9.0.203, 9.0.302 +- .NET Core SDK: 8.0.101, 8.0.204, 8.0.303, 8.0.413, 9.0.102, 9.0.203, 9.0.304 - 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.4.0) - available by `gcc-13` alias - GCC 14 (Homebrew GCC 14.3.0) - available by `gcc-14` alias +- GCC 15 (Homebrew GCC 15.1.0) - available by `gcc-15` alias - GNU Fortran 12 (Homebrew GCC 12.4.0) - available by `gfortran-12` alias - GNU Fortran 13 (Homebrew GCC 13.4.0) - available by `gfortran-13` alias - GNU Fortran 14 (Homebrew GCC 14.3.0) - available by `gfortran-14` alias -- Kotlin 2.1.10-release-473 +- GNU Fortran 15 (Homebrew GCC 15.1.0) - available by `gfortran-15` alias +- Kotlin 2.2.10-release-430 - Mono 6.12.0.188 -- Node.js 20.19.3 +- Node.js 20.19.5 - Perl 5.40.2 -- Python3 3.13.5 -- Ruby 3.3.8 +- Python3 3.13.7 +- Ruby 3.3.9 ### Package Management -- Bundler 2.6.9 +- Bundler 2.7.1 - Carthage 0.40.0 - CocoaPods 1.16.2 -- Homebrew 4.5.9 +- Homebrew 4.6.9 - NPM 10.8.2 - NuGet 6.3.1.1 -- Pip3 25.1.1 (python 3.13) +- Pip3 25.2 (python 3.13) - Pipx 1.7.1 -- RubyGems 3.6.9 +- RubyGems 3.7.1 - Yarn 1.22.22 ### Project Management - Apache Ant 1.10.15 -- Apache Maven 3.9.10 -- Gradle 8.14.3 +- Apache Maven 3.9.11 +- Gradle 9.0.0 ### Utilities - 7-Zip 17.05 - aria2 1.37.0 -- azcopy 10.29.1 -- bazel 8.3.1 -- bazelisk 1.26.0 +- azcopy 10.30.0 +- bazel 8.4.0 +- bazelisk 1.27.0 - bsdtar 3.5.3 - available by 'tar' alias - Curl 8.7.1 - Git 2.50.1 - Git LFS 3.7.0 -- GitHub CLI 2.75.0 +- GitHub CLI 2.78.0 - GNU Tar 1.35 - available by 'gtar' alias - GNU Wget 1.25.0 - gpg (GnuPG) 2.4.8 - jq 1.8.1 - OpenSSL 1.1.1w 11 Sep 2023 -- Packer 1.13.1 +- Packer 1.14.0 - pkgconf 2.5.1 - Unxip 3.1 -- yq 4.46.1 +- yq 4.47.1 - zstd 1.5.7 - Ninja 1.13.1 ### Tools -- AWS CLI 2.27.50 -- AWS SAM CLI 1.142.1 +- AWS CLI 2.28.25 +- AWS SAM CLI 1.143.0 - AWS Session Manager CLI 1.2.707.0 -- Azure CLI 2.75.0 +- Azure CLI 2.77.0 - Azure CLI (azure-devops) 1.0.2 -- Bicep CLI 0.36.177 -- Cmake 3.31.6 -- CodeQL Action Bundle 2.22.1 +- Bicep CLI 0.37.4 +- Cmake 4.1.1 +- CodeQL Action Bundle 2.23.0 - Fastlane 2.228.0 -- SwiftFormat 0.57.0 -- Xcbeautify 2.29.0 +- SwiftFormat 0.57.2 +- Xcbeautify 2.30.1 - Xcode Command Line Tools 14.3.1.0.1.1683849156 - Xcodes 1.6.2 @@ -88,58 +91,61 @@ ### Browsers - Safari 18.5 (18621.2.5.18.1) - SafariDriver 18.5 (18621.2.5.18.1) -- Google Chrome 138.0.7204.101 -- Google Chrome for Testing 138.0.7204.94 -- ChromeDriver 138.0.7204.94 -- Mozilla Firefox 140.0.4 +- Google Chrome 140.0.7339.81 +- Google Chrome for Testing 140.0.7339.80 +- ChromeDriver 140.0.7339.80 +- Microsoft Edge 140.0.3485.54 +- Microsoft Edge WebDriver 140.0.3485.54 +- Mozilla Firefox 142.0.1 - geckodriver 0.36.0 -- Selenium server 4.34.0 +- Selenium server 4.35.0 #### Environment variables | Name | Value | | --------------- | --------------------------------------- | | CHROMEWEBDRIVER | /usr/local/share/chromedriver-mac-arm64 | -| EDGEWEBDRIVER | | +| EDGEWEBDRIVER | /usr/local/share/edge_driver | | GECKOWEBDRIVER | /opt/homebrew/opt/geckodriver/bin | ### Java | Version | Environment Variable | | ------------------- | -------------------- | -| 11.0.27+6 | JAVA_HOME_11_arm64 | -| 17.0.15+6 (default) | JAVA_HOME_17_arm64 | -| 21.0.7+6.0 | JAVA_HOME_21_arm64 | +| 11.0.28+6 | JAVA_HOME_11_arm64 | +| 17.0.16+8 (default) | JAVA_HOME_17_arm64 | +| 21.0.8+9.0 | JAVA_HOME_21_arm64 | ### Cached Tools #### Ruby - 3.1.7 -- 3.2.8 -- 3.3.8 -- 3.4.4 +- 3.2.9 +- 3.3.9 +- 3.4.5 #### Python - 3.11.9 - 3.12.10 -- 3.13.5 +- 3.13.7 #### Node.js - 18.20.8 -- 20.19.3 -- 22.17.0 +- 20.19.5 +- 22.19.0 #### Go - 1.22.12 -- 1.23.11 -- 1.24.5 +- 1.23.12 +- 1.24.7 +- 1.25.1 ### Rust Tools -- Cargo 1.88.0 -- Rust 1.88.0 -- Rustdoc 1.88.0 +- Cargo 1.89.0 +- Rust 1.89.0 +- Rustdoc 1.89.0 - Rustup 1.28.2 #### Packages -- Clippy 0.1.88 +- Clippy 0.1.89 - Rustfmt 1.8.0-stable ### PowerShell Tools @@ -197,8 +203,8 @@ | visionOS 1.0 | xros1.0 | 15.2 | | Simulator - visionOS 1.0 | xrsimulator1.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 | @@ -224,18 +230,18 @@ | visionOS 1.0 | Apple Vision Pro | ### Android -| Package Name | Version | -| -------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Android Command Line Tools | 11.0 | -| Android Emulator | 35.6.11 | -| Android SDK Build-tools | 36.0.0
35.0.0 35.0.1
34.0.0
33.0.2 33.0.3 | -| Android SDK Platforms | android-36 (rev 2)
android-35-ext15 (rev 1)
android-35-ext14 (rev 1)
android-35 (rev 2)
android-34-ext8 (rev 1)
android-34-ext12 (rev 1)
android-34-ext11 (rev 1)
android-34-ext10 (rev 1)
android-34 (rev 3)
android-33-ext5 (rev 1)
android-33-ext4 (rev 1)
android-33 (rev 3) | -| Android SDK Platform-Tools | 36.0.0 | -| Android Support Repository | 47.0.0 | -| CMake | 3.31.5 | -| Google Play services | 49 | -| Google Repository | 58 | -| NDK | 26.3.11579264 (default)
27.2.12479018
28.2.13676358 | +| Package Name | Version | +| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Android Command Line Tools | 11.0 | +| Android Emulator | 36.1.9 | +| Android SDK Build-tools | 36.0.0
35.0.0 35.0.1
34.0.0
33.0.2 33.0.3 | +| Android SDK Platforms | android-36-ext19 (rev 1)
android-36-ext18 (rev 1)
android-36 (rev 2)
android-35-ext15 (rev 1)
android-35-ext14 (rev 1)
android-35 (rev 2)
android-34-ext8 (rev 1)
android-34-ext12 (rev 1)
android-34-ext11 (rev 1)
android-34-ext10 (rev 1)
android-34 (rev 3)
android-33-ext5 (rev 1)
android-33-ext4 (rev 1)
android-33 (rev 3) | +| Android SDK Platform-Tools | 36.0.0 | +| Android Support Repository | 47.0.0 | +| CMake | 3.31.5 | +| Google Play services | 49 | +| Google Repository | 58 | +| NDK | 26.3.11579264 (default)
27.3.13750724
28.2.13676358 | #### Environment variables | Name | Value | @@ -248,5 +254,5 @@ | ANDROID_SDK_ROOT | /Users/runner/Library/Android/sdk | ### Miscellaneous -- Tcl/Tk 8.6.16 +- Tcl/Tk 8.6.17 diff --git a/images/macos/macos-14-Readme.md b/images/macos/macos-14-Readme.md index 9d0c27949a..bff8742c5b 100644 --- a/images/macos/macos-14-Readme.md +++ b/images/macos/macos-14-Readme.md @@ -1,105 +1,112 @@ | Announcements | |-| -| [[macOS] Xcode support policy will be changed on August 11, 2025](https://github.com/actions/runner-images/issues/12541) | -| [[macOS] macos-latest YAML-label will use macos-15 in August 2025](https://github.com/actions/runner-images/issues/12520) | +| [[macOS] Default Xcode on macOS 26 Tahoe will be set to Xcode 26.2 on January 26th](https://github.com/actions/runner-images/issues/13519) | +| [[macOS] The macOS 14 Sonoma based runner images will begin deprecation on July 6th and will be fully unsupported by November 2nd for GitHub Actions and Azure DevOps](https://github.com/actions/runner-images/issues/13518) | +| [[all OSs] Updating Azure PowerShell Module version to 14.6.0 on January 26th, 2026.](https://github.com/actions/runner-images/issues/13473) | +| [[macOS] DOTNET_ROOT environment variable variable will be removed on January 12th, 2026](https://github.com/actions/runner-images/issues/13470) | +| [[Ubuntu-22.04, macOS-14, Windows-2022] Android SDK platforms and build tools older than version 34 will be removed on January 12th, 2026.](https://github.com/actions/runner-images/issues/13469) | +| [[all OSs] Python 3.9 will be removed; Python 3.12 will become the default on Windows images on January 12th, 2026.](https://github.com/actions/runner-images/issues/13468) | +| [[all OSs] Android NDK 26 will be removed, Android NDK 27 will be used by default on January 12th, 2026.](https://github.com/actions/runner-images/issues/13467) | +| [[macOS] Deprecation of simulator runtimes for Xcode 16.3 and older on macOS 15 on January 12th, 2026.](https://github.com/actions/runner-images/issues/13392) | +| [macOS 26 (Tahoe) is now available as a public beta in GitHub Actions](https://github.com/actions/runner-images/issues/13008) | *** # macOS 14 -- OS Version: macOS 14.7.6 (23H626) +- OS Version: macOS 14.8.3 (23J220) - Kernel Version: Darwin 23.6.0 -- Image Version: 20250715.1434 +- Image Version: 20260112.0114.1 ## Installed Software ### Language and Runtime -- .NET Core SDK: 8.0.101, 8.0.204, 8.0.303, 8.0.412, 9.0.102, 9.0.203, 9.0.302 +- .NET Core SDK: 8.0.101, 8.0.204, 8.0.303, 8.0.416, 9.0.102, 9.0.203, 9.0.308, 10.0.101 - 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` -- GCC 12 (Homebrew GCC 12.4.0) - available by `gcc-12` alias - GCC 13 (Homebrew GCC 13.4.0) - available by `gcc-13` alias - GCC 14 (Homebrew GCC 14.3.0) - available by `gcc-14` alias -- GNU Fortran 12 (Homebrew GCC 12.4.0) - available by `gfortran-12` alias +- GCC 15 (Homebrew GCC 15.2.0) - available by `gcc-15` alias - GNU Fortran 13 (Homebrew GCC 13.4.0) - available by `gfortran-13` alias - GNU Fortran 14 (Homebrew GCC 14.3.0) - available by `gfortran-14` alias -- Kotlin 2.1.10-release-473 +- GNU Fortran 15 (Homebrew GCC 15.2.0) - available by `gfortran-15` alias +- Kotlin 2.3.0-release-356 - Mono 6.12.0.188 -- Node.js 20.19.3 -- Perl 5.40.2 -- PHP 8.4.10 -- Python3 3.13.5 -- Ruby 3.3.8 +- Node.js 20.19.6 +- Perl 5.42.0 +- PHP 8.5.1 +- Python3 3.14.2 +- Ruby 3.3.10 ### Package Management -- Bundler 2.6.9 +- Bundler 4.0.3 - Carthage 0.40.0 - CocoaPods 1.16.2 -- Composer 2.8.10 -- Homebrew 4.5.10 +- Composer 2.9.3 +- Homebrew 5.0.9 - NPM 10.8.2 - NuGet 6.3.1.1 -- Pip3 25.1.1 (python 3.13) -- Pipx 1.7.1 -- RubyGems 3.6.9 -- Vcpkg 2025 (build from commit 30f771d4ac) +- Pip3 25.3 (python 3.14) +- Pipx 1.8.0 +- RubyGems 4.0.3 +- Vcpkg 2025 (build from commit fafcc0e93b) - Yarn 1.22.22 ### Project Management - Apache Ant 1.10.15 -- Apache Maven 3.9.10 -- Gradle 8.14.3 +- Apache Maven 3.9.12 +- Gradle 9.2.1 ### Utilities - 7-Zip 17.05 - aria2 1.37.0 -- azcopy 10.29.1 -- bazel 8.3.1 -- bazelisk 1.26.0 +- azcopy 10.31.1 +- bazel 8.5.0 +- bazelisk 1.27.0 - bsdtar 3.5.3 - available by 'tar' alias -- Curl 8.14.1 -- Git 2.50.1 -- Git LFS 3.7.0 -- GitHub CLI 2.75.1 +- Curl 8.18.0 +- Git 2.52.0 +- Git LFS 3.7.1 +- GitHub CLI 2.83.2 - GNU Tar 1.35 - available by 'gtar' alias - GNU Wget 1.25.0 -- gpg (GnuPG) 2.4.8 +- gpg (GnuPG) 2.4.9 - jq 1.8.1 - OpenSSL 1.1.1w 11 Sep 2023 -- Packer 1.13.1 +- Packer 1.14.3 - pkgconf 2.5.1 - Unxip 3.2 -- yq 4.46.1 +- yq 4.50.1 - zstd 1.5.7 -- Ninja 1.13.1 +- Ninja 1.13.2 ### Tools -- AWS CLI 2.27.50 -- AWS SAM CLI 1.142.1 -- AWS Session Manager CLI 1.2.707.0 -- Azure CLI 2.75.0 +- AWS CLI 2.32.32 +- AWS SAM CLI 1.151.0 +- AWS Session Manager CLI 1.2.764.0 +- Azure CLI 2.81.0 - Azure CLI (azure-devops) 1.0.2 -- Bicep CLI 0.36.177 -- Cmake 3.31.6 -- CodeQL Action Bundle 2.22.1 -- Fastlane 2.228.0 -- SwiftFormat 0.57.2 -- Xcbeautify 2.29.0 +- Bicep CLI 0.39.26 +- Cmake 4.2.1 +- CodeQL Action Bundle 2.23.8 +- Fastlane 2.230.0 +- SwiftFormat 0.58.7 +- Xcbeautify 3.1.2 - Xcode Command Line Tools 16.2.0.0.1.1733547573 - Xcodes 1.6.2 ### Linters -- SwiftLint 0.59.1 +- SwiftLint 0.63.0 ### Browsers -- Safari 18.5 (19621.2.5.18.1) -- SafariDriver 18.5 (19621.2.5.18.1) -- Google Chrome 138.0.7204.101 -- Google Chrome for Testing 138.0.7204.94 -- ChromeDriver 138.0.7204.94 -- Microsoft Edge 138.0.3351.83 -- Microsoft Edge WebDriver 138.0.3351.83 -- Mozilla Firefox 140.0.4 +- Safari 26.2 (19623.1.14.18.4) +- SafariDriver 26.2 (19623.1.14.18.4) +- Google Chrome 143.0.7499.193 +- Google Chrome for Testing 143.0.7499.192 +- ChromeDriver 143.0.7499.192 +- Microsoft Edge 143.0.3650.139 +- Microsoft Edge WebDriver 143.0.3650.139 +- Mozilla Firefox 146.0.1 - geckodriver 0.36.0 -- Selenium server 4.34.0 +- Selenium server 4.39.0 #### Environment variables | Name | Value | @@ -109,50 +116,51 @@ | GECKOWEBDRIVER | /usr/local/opt/geckodriver/bin | ### Java -| Version | Environment Variable | -| -------------------- | -------------------- | -| 8.0.452+9 | JAVA_HOME_8_X64 | -| 11.0.27+6 | JAVA_HOME_11_X64 | -| 17.0.15+6 | JAVA_HOME_17_X64 | -| 21.0.7+6.0 (default) | JAVA_HOME_21_X64 | +| Version | Environment Variable | +| --------------------- | -------------------- | +| 8.0.472+8 | JAVA_HOME_8_X64 | +| 11.0.29+7 | JAVA_HOME_11_X64 | +| 17.0.17+10 | JAVA_HOME_17_X64 | +| 21.0.9+10.0 (default) | JAVA_HOME_21_X64 | +| 25.0.1+8.0 | JAVA_HOME_25_X64 | ### Cached Tools #### Ruby -- 3.1.7 -- 3.2.8 -- 3.3.8 -- 3.4.4 +- 3.2.9 +- 3.3.10 +- 3.4.8 #### Python -- 3.9.23 -- 3.10.18 +- 3.10.19 - 3.11.9 - 3.12.10 -- 3.13.5 +- 3.13.11 +- 3.14.2 #### Node.js -- 18.20.8 -- 20.19.3 -- 22.17.0 +- 20.19.6 +- 22.21.1 +- 24.12.0 #### Go - 1.22.12 -- 1.23.11 -- 1.24.5 +- 1.23.12 +- 1.24.11 +- 1.25.5 ### Rust Tools -- Cargo 1.88.0 -- Rust 1.88.0 -- Rustdoc 1.88.0 +- Cargo 1.92.0 +- Rust 1.92.0 +- Rustdoc 1.92.0 - Rustup 1.28.2 #### Packages -- Clippy 0.1.88 +- Clippy 0.1.92 - Rustfmt 1.8.0-stable ### PowerShell Tools -- PowerShell 7.4.11 +- PowerShell 7.4.13 #### PowerShell Modules - Az: 12.5.0 @@ -233,58 +241,58 @@ | DriverKit 24.2 | driverkit24.2 | 16.2 | #### Installed Simulators -| OS | Simulators | -| ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| iOS 17.0 | iPhone 15
iPhone 15 Plus
iPhone 15 Pro
iPhone 15 Pro Max
iPhone SE (3rd generation)
iPad (10th generation)
iPad Air (5th generation)
iPad mini (6th generation)
iPad Pro (11-inch) (4th generation)
iPad Pro (12.9-inch) (6th generation) | -| iOS 17.2 | iPhone 15
iPhone 15 Plus
iPhone 15 Pro
iPhone 15 Pro Max
iPhone SE (3rd generation)
iPad (10th generation)
iPad Air (5th generation)
iPad mini (6th generation)
iPad Pro (11-inch) (4th generation)
iPad Pro (12.9-inch) (6th generation) | -| iOS 17.4 | iPhone 15
iPhone 15 Plus
iPhone 15 Pro
iPhone 15 Pro Max
iPhone SE (3rd generation)
iPad (10th generation)
iPad Air 11-inch (M2)
iPad Air 13-inch (M2)
iPad mini (6th generation)
iPad Pro (12.9-inch) (6th generation)
iPad Pro 11-inch (M4)
iPad Pro 13-inch (M4) | -| iOS 17.5 | iPhone 15
iPhone 15 Plus
iPhone 15 Pro
iPhone 15 Pro Max
iPhone SE (3rd generation)
iPad (10th generation)
iPad Air 11-inch (M2)
iPad Air 13-inch (M2)
iPad mini (6th generation)
iPad Pro 11-inch (M4)
iPad Pro 13-inch (M4) | -| iOS 18.1 | iPhone 16
iPhone 16 Plus
iPhone 16 Pro
iPhone 16 Pro Max
iPhone SE (3rd generation)
iPad (10th generation)
iPad Air 11-inch (M2)
iPad Air 13-inch (M2)
iPad mini (A17 Pro)
iPad Pro 11-inch (M4)
iPad Pro 13-inch (M4) | -| iOS 18.2 | iPhone 16
iPhone 16 Plus
iPhone 16 Pro
iPhone 16 Pro Max
iPhone SE (3rd generation)
iPad (10th generation)
iPad Air 11-inch (M2)
iPad Air 13-inch (M2)
iPad mini (A17 Pro)
iPad Pro 11-inch (M4)
iPad Pro 13-inch (M4) | -| tvOS 17.0 | Apple TV
Apple TV 4K (3rd generation)
Apple TV 4K (3rd generation) (at 1080p) | -| tvOS 17.2 | Apple TV
Apple TV 4K (3rd generation)
Apple TV 4K (3rd generation) (at 1080p) | -| tvOS 17.4 | Apple TV
Apple TV 4K (3rd generation)
Apple TV 4K (3rd generation) (at 1080p) | -| tvOS 17.5 | Apple TV
Apple TV 4K (3rd generation)
Apple TV 4K (3rd generation) (at 1080p) | -| tvOS 18.1 | Apple TV
Apple TV 4K (3rd generation)
Apple TV 4K (3rd generation) (at 1080p) | -| tvOS 18.2 | Apple TV
Apple TV 4K (3rd generation)
Apple TV 4K (3rd generation) (at 1080p) | -| watchOS 10.0 | Apple Watch SE (40mm) (2nd generation)
Apple Watch SE (44mm) (2nd generation)
Apple Watch Series 5 (40mm)
Apple Watch Series 5 (44mm)
Apple Watch Series 6 (40mm)
Apple Watch Series 6 (44mm)
Apple Watch Series 7 (41mm)
Apple Watch Series 7 (45mm)
Apple Watch Series 9 (41mm)
Apple Watch Series 9 (45mm)
Apple Watch Ultra 2 (49mm) | -| watchOS 10.2 | Apple Watch SE (40mm) (2nd generation)
Apple Watch SE (44mm) (2nd generation)
Apple Watch Series 5 (40mm)
Apple Watch Series 5 (44mm)
Apple Watch Series 6 (40mm)
Apple Watch Series 6 (44mm)
Apple Watch Series 7 (41mm)
Apple Watch Series 7 (45mm)
Apple Watch Series 9 (41mm)
Apple Watch Series 9 (45mm)
Apple Watch Ultra 2 (49mm) | -| watchOS 10.4 | Apple Watch SE (40mm) (2nd generation)
Apple Watch SE (44mm) (2nd generation)
Apple Watch Series 5 (40mm)
Apple Watch Series 5 (44mm)
Apple Watch Series 6 (40mm)
Apple Watch Series 6 (44mm)
Apple Watch Series 7 (41mm)
Apple Watch Series 7 (45mm)
Apple Watch Series 9 (41mm)
Apple Watch Series 9 (45mm)
Apple Watch Ultra 2 (49mm) | -| watchOS 10.5 | Apple Watch SE (40mm) (2nd generation)
Apple Watch SE (44mm) (2nd generation)
Apple Watch Series 9 (41mm)
Apple Watch Series 9 (45mm)
Apple Watch Ultra 2 (49mm) | -| watchOS 11.1 | Apple Watch SE (40mm) (2nd generation)
Apple Watch SE (44mm) (2nd generation)
Apple Watch Series 10 (42mm)
Apple Watch Series 10 (46mm)
Apple Watch Ultra 2 (49mm) | -| watchOS 11.2 | Apple Watch SE (40mm) (2nd generation)
Apple Watch SE (44mm) (2nd generation)
Apple Watch Series 10 (42mm)
Apple Watch Series 10 (46mm)
Apple Watch Ultra 2 (49mm) | +| Name | OS | Simulators | +| ------------ | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| iOS 17.0 | 17.0.1 | iPhone 15
iPhone 15 Plus
iPhone 15 Pro
iPhone 15 Pro Max
iPhone SE (3rd generation)
iPad (10th generation)
iPad Air (5th generation)
iPad mini (6th generation)
iPad Pro (11-inch) (4th generation)
iPad Pro (12.9-inch) (6th generation) | +| iOS 17.2 | 17.2 | iPhone 15
iPhone 15 Plus
iPhone 15 Pro
iPhone 15 Pro Max
iPhone SE (3rd generation)
iPad (10th generation)
iPad Air (5th generation)
iPad mini (6th generation)
iPad Pro (11-inch) (4th generation)
iPad Pro (12.9-inch) (6th generation) | +| iOS 17.4 | 17.4 | iPhone 15
iPhone 15 Plus
iPhone 15 Pro
iPhone 15 Pro Max
iPhone SE (3rd generation)
iPad (10th generation)
iPad Air 11-inch (M2)
iPad Air 13-inch (M2)
iPad mini (6th generation)
iPad Pro (12.9-inch) (6th generation)
iPad Pro 11-inch (M4)
iPad Pro 13-inch (M4) | +| iOS 17.5 | 17.5 | iPhone 15
iPhone 15 Plus
iPhone 15 Pro
iPhone 15 Pro Max
iPhone SE (3rd generation)
iPad (10th generation)
iPad Air 11-inch (M2)
iPad Air 13-inch (M2)
iPad mini (6th generation)
iPad Pro 11-inch (M4)
iPad Pro 13-inch (M4) | +| iOS 18.1 | 18.1 | iPhone 16
iPhone 16 Plus
iPhone 16 Pro
iPhone 16 Pro Max
iPhone SE (3rd generation)
iPad (10th generation)
iPad Air 11-inch (M2)
iPad Air 13-inch (M2)
iPad mini (A17 Pro)
iPad Pro 11-inch (M4)
iPad Pro 13-inch (M4) | +| iOS 18.2 | 18.2 | iPhone 16
iPhone 16 Plus
iPhone 16 Pro
iPhone 16 Pro Max
iPhone SE (3rd generation)
iPad (10th generation)
iPad Air 11-inch (M2)
iPad Air 13-inch (M2)
iPad mini (A17 Pro)
iPad Pro 11-inch (M4)
iPad Pro 13-inch (M4) | +| tvOS 17.0 | 17.0 | Apple TV
Apple TV 4K (3rd generation)
Apple TV 4K (3rd generation) (at 1080p) | +| tvOS 17.2 | 17.2 | Apple TV
Apple TV 4K (3rd generation)
Apple TV 4K (3rd generation) (at 1080p) | +| tvOS 17.4 | 17.4 | Apple TV
Apple TV 4K (3rd generation)
Apple TV 4K (3rd generation) (at 1080p) | +| tvOS 17.5 | 17.5 | Apple TV
Apple TV 4K (3rd generation)
Apple TV 4K (3rd generation) (at 1080p) | +| tvOS 18.1 | 18.1 | Apple TV
Apple TV 4K (3rd generation)
Apple TV 4K (3rd generation) (at 1080p) | +| tvOS 18.2 | 18.2 | Apple TV
Apple TV 4K (3rd generation)
Apple TV 4K (3rd generation) (at 1080p) | +| watchOS 10.0 | 10.0 | Apple Watch SE (40mm) (2nd generation)
Apple Watch SE (44mm) (2nd generation)
Apple Watch Series 5 (40mm)
Apple Watch Series 5 (44mm)
Apple Watch Series 6 (40mm)
Apple Watch Series 6 (44mm)
Apple Watch Series 7 (41mm)
Apple Watch Series 7 (45mm)
Apple Watch Series 9 (41mm)
Apple Watch Series 9 (45mm)
Apple Watch Ultra 2 (49mm) | +| watchOS 10.2 | 10.2 | Apple Watch SE (40mm) (2nd generation)
Apple Watch SE (44mm) (2nd generation)
Apple Watch Series 5 (40mm)
Apple Watch Series 5 (44mm)
Apple Watch Series 6 (40mm)
Apple Watch Series 6 (44mm)
Apple Watch Series 7 (41mm)
Apple Watch Series 7 (45mm)
Apple Watch Series 9 (41mm)
Apple Watch Series 9 (45mm)
Apple Watch Ultra 2 (49mm) | +| watchOS 10.4 | 10.4 | Apple Watch SE (40mm) (2nd generation)
Apple Watch SE (44mm) (2nd generation)
Apple Watch Series 5 (40mm)
Apple Watch Series 5 (44mm)
Apple Watch Series 6 (40mm)
Apple Watch Series 6 (44mm)
Apple Watch Series 7 (41mm)
Apple Watch Series 7 (45mm)
Apple Watch Series 9 (41mm)
Apple Watch Series 9 (45mm)
Apple Watch Ultra 2 (49mm) | +| watchOS 10.5 | 10.5 | Apple Watch SE (40mm) (2nd generation)
Apple Watch SE (44mm) (2nd generation)
Apple Watch Series 9 (41mm)
Apple Watch Series 9 (45mm)
Apple Watch Ultra 2 (49mm) | +| watchOS 11.1 | 11.1 | Apple Watch SE (40mm) (2nd generation)
Apple Watch SE (44mm) (2nd generation)
Apple Watch Series 10 (42mm)
Apple Watch Series 10 (46mm)
Apple Watch Ultra 2 (49mm) | +| watchOS 11.2 | 11.2 | Apple Watch SE (40mm) (2nd generation)
Apple Watch SE (44mm) (2nd generation)
Apple Watch Series 10 (42mm)
Apple Watch Series 10 (46mm)
Apple Watch Ultra 2 (49mm) | ### Android -| Package Name | Version | -| -------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Android Command Line Tools | 11.0 | -| Android Emulator | 35.6.11 | -| Android SDK Build-tools | 36.0.0
35.0.0 35.0.1
34.0.0
33.0.2 33.0.3 | -| Android SDK Platforms | android-36 (rev 2)
android-35-ext15 (rev 1)
android-35-ext14 (rev 1)
android-35 (rev 2)
android-34-ext8 (rev 1)
android-34-ext12 (rev 1)
android-34-ext11 (rev 1)
android-34-ext10 (rev 1)
android-34 (rev 3)
android-33-ext5 (rev 1)
android-33-ext4 (rev 1)
android-33 (rev 3) | -| Android SDK Platform-Tools | 36.0.0 | -| Android Support Repository | 47.0.0 | -| CMake | 3.31.5 | -| Google Play services | 49 | -| Google Repository | 58 | -| NDK | 26.3.11579264 (default)
27.2.12479018
28.2.13676358 | +| Package Name | Version | +| -------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Android Command Line Tools | 11.0 | +| Android Emulator | 36.3.10 | +| Android SDK Build-tools | 36.0.0 36.1.0
35.0.0 35.0.1
34.0.0 | +| Android SDK Platforms | android-36.1 (rev 1)
android-36-ext19 (rev 1)
android-36-ext18 (rev 1)
android-36 (rev 2)
android-35-ext15 (rev 1)
android-35-ext14 (rev 1)
android-35 (rev 2)
android-34-ext8 (rev 1)
android-34-ext12 (rev 1)
android-34-ext11 (rev 1)
android-34-ext10 (rev 1)
android-34 (rev 3) | +| Android SDK Platform-Tools | 36.0.2 | +| Android Support Repository | 47.0.0 | +| CMake | 3.31.5
4.1.2 | +| Google Play services | 49 | +| Google Repository | 58 | +| NDK | 27.3.13750724 (default)
28.2.13676358
29.0.14206865 | #### Environment variables | Name | Value | | ----------------------- | --------------------------------------------------- | | ANDROID_HOME | /Users/runner/Library/Android/sdk | -| ANDROID_NDK | /Users/runner/Library/Android/sdk/ndk/26.3.11579264 | -| ANDROID_NDK_HOME | /Users/runner/Library/Android/sdk/ndk/26.3.11579264 | -| ANDROID_NDK_LATEST_HOME | /Users/runner/Library/Android/sdk/ndk/28.2.13676358 | -| ANDROID_NDK_ROOT | /Users/runner/Library/Android/sdk/ndk/26.3.11579264 | +| ANDROID_NDK | /Users/runner/Library/Android/sdk/ndk/27.3.13750724 | +| ANDROID_NDK_HOME | /Users/runner/Library/Android/sdk/ndk/27.3.13750724 | +| ANDROID_NDK_LATEST_HOME | /Users/runner/Library/Android/sdk/ndk/29.0.14206865 | +| ANDROID_NDK_ROOT | /Users/runner/Library/Android/sdk/ndk/27.3.13750724 | | ANDROID_SDK_ROOT | /Users/runner/Library/Android/sdk | ### Miscellaneous -- Tcl/Tk 8.6.16 +- Tcl/Tk 8.6.17 #### Environment variables | Name | Value | | ----------------- | ----------------------------------------------------------------------------------------- | -| PARALLELS_DMG_URL | https://download.parallels.com/desktop/v20/20.4.0-55980/ParallelsDesktop-20.4.0-55980.dmg | +| PARALLELS_DMG_URL | https://download.parallels.com/desktop/v26/26.2.0-57363/ParallelsDesktop-26.2.0-57363.dmg | ##### Notes ``` diff --git a/images/macos/macos-14-arm64-Readme.md b/images/macos/macos-14-arm64-Readme.md index 1734c60860..7da1299453 100644 --- a/images/macos/macos-14-arm64-Readme.md +++ b/images/macos/macos-14-arm64-Readme.md @@ -1,150 +1,159 @@ | Announcements | |-| -| [[macOS] Xcode support policy will be changed on August 11, 2025](https://github.com/actions/runner-images/issues/12541) | -| [[macOS] macos-latest YAML-label will use macos-15 in August 2025](https://github.com/actions/runner-images/issues/12520) | +| [[macOS] Default Xcode on macOS 26 Tahoe will be set to Xcode 26.2 on January 26th](https://github.com/actions/runner-images/issues/13519) | +| [[macOS] The macOS 14 Sonoma based runner images will begin deprecation on July 6th and will be fully unsupported by November 2nd for GitHub Actions and Azure DevOps](https://github.com/actions/runner-images/issues/13518) | +| [[all OSs] Updating Azure PowerShell Module version to 14.6.0 on January 26th, 2026.](https://github.com/actions/runner-images/issues/13473) | +| [[macOS] DOTNET_ROOT environment variable variable will be removed on January 12th, 2026](https://github.com/actions/runner-images/issues/13470) | +| [[Ubuntu-22.04, macOS-14, Windows-2022] Android SDK platforms and build tools older than version 34 will be removed on January 12th, 2026.](https://github.com/actions/runner-images/issues/13469) | +| [[all OSs] Python 3.9 will be removed; Python 3.12 will become the default on Windows images on January 12th, 2026.](https://github.com/actions/runner-images/issues/13468) | +| [[all OSs] Android NDK 26 will be removed, Android NDK 27 will be used by default on January 12th, 2026.](https://github.com/actions/runner-images/issues/13467) | +| [[macOS] Deprecation of simulator runtimes for Xcode 16.3 and older on macOS 15 on January 12th, 2026.](https://github.com/actions/runner-images/issues/13392) | +| [macOS 26 (Tahoe) is now available as a public beta in GitHub Actions](https://github.com/actions/runner-images/issues/13008) | *** # macOS 14 -- OS Version: macOS 14.7.6 (23H626) +- OS Version: macOS 14.8.3 (23J220) - Kernel Version: Darwin 23.6.0 -- Image Version: 20250715.1663 +- Image Version: 20260112.0083.1 ## Installed Software ### Language and Runtime -- .NET Core SDK: 8.0.101, 8.0.204, 8.0.303, 8.0.412, 9.0.102, 9.0.203, 9.0.302 +- .NET Core SDK: 8.0.101, 8.0.204, 8.0.303, 8.0.416, 9.0.102, 9.0.203, 9.0.308, 10.0.101 - 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` -- GCC 12 (Homebrew GCC 12.4.0) - available by `gcc-12` alias - GCC 13 (Homebrew GCC 13.4.0) - available by `gcc-13` alias - GCC 14 (Homebrew GCC 14.3.0) - available by `gcc-14` alias -- GNU Fortran 12 (Homebrew GCC 12.4.0) - available by `gfortran-12` alias +- GCC 15 (Homebrew GCC 15.2.0) - available by `gcc-15` alias - GNU Fortran 13 (Homebrew GCC 13.4.0) - available by `gfortran-13` alias - GNU Fortran 14 (Homebrew GCC 14.3.0) - available by `gfortran-14` alias -- Kotlin 2.1.10-release-473 +- GNU Fortran 15 (Homebrew GCC 15.2.0) - available by `gfortran-15` alias +- Kotlin 2.3.0-release-356 - Mono 6.12.0.188 -- Node.js 20.19.3 -- Perl 5.40.2 -- Python3 3.13.5 -- Ruby 3.3.8 +- Node.js 20.19.6 +- Perl 5.42.0 +- Python3 3.14.2 +- Ruby 3.3.10 ### Package Management -- Bundler 2.6.9 +- Bundler 4.0.3 - Carthage 0.40.0 - CocoaPods 1.16.2 -- Homebrew 4.5.10 +- Homebrew 5.0.9 - NPM 10.8.2 - NuGet 6.3.1.1 -- Pip3 25.1.1 (python 3.13) -- Pipx 1.7.1 -- RubyGems 3.6.9 -- Vcpkg 2025 (build from commit 30f771d4ac) +- Pip3 25.3 (python 3.14) +- Pipx 1.8.0 +- RubyGems 4.0.3 +- Vcpkg 2025 (build from commit fafcc0e93b) - Yarn 1.22.22 ### Project Management - Apache Ant 1.10.15 -- Apache Maven 3.9.10 -- Gradle 8.14.3 +- Apache Maven 3.9.12 +- Gradle 9.2.1 ### Utilities - 7-Zip 17.05 - aria2 1.37.0 -- azcopy 10.29.1 -- bazel 8.3.1 -- bazelisk 1.26.0 +- azcopy 10.31.1 +- bazel 8.5.0 +- bazelisk 1.27.0 - bsdtar 3.5.3 - available by 'tar' alias - Curl 8.7.1 -- Git 2.50.1 -- Git LFS 3.7.0 -- GitHub CLI 2.75.1 +- Git 2.52.0 +- Git LFS 3.7.1 +- GitHub CLI 2.83.2 - GNU Tar 1.35 - available by 'gtar' alias - GNU Wget 1.25.0 -- gpg (GnuPG) 2.4.8 +- gpg (GnuPG) 2.4.9 - jq 1.8.1 - OpenSSL 1.1.1w 11 Sep 2023 -- Packer 1.13.1 +- Packer 1.14.3 - pkgconf 2.5.1 - Unxip 3.2 -- yq 4.46.1 +- yq 4.50.1 - zstd 1.5.7 -- Ninja 1.13.1 +- Ninja 1.13.2 ### Tools -- AWS CLI 2.27.50 -- AWS SAM CLI 1.142.1 -- AWS Session Manager CLI 1.2.707.0 -- Azure CLI 2.75.0 +- AWS CLI 2.32.32 +- AWS SAM CLI 1.151.0 +- AWS Session Manager CLI 1.2.764.0 +- Azure CLI 2.81.0 - Azure CLI (azure-devops) 1.0.2 -- Bicep CLI 0.36.177 -- Cmake 3.31.6 -- CodeQL Action Bundle 2.22.1 -- Fastlane 2.228.0 -- SwiftFormat 0.57.2 -- Xcbeautify 2.29.0 +- Bicep CLI 0.39.26 +- Cmake 4.2.1 +- CodeQL Action Bundle 2.23.8 +- Fastlane 2.230.0 +- SwiftFormat 0.58.7 +- Xcbeautify 3.1.2 - Xcode Command Line Tools 16.2.0.0.1.1733547573 - Xcodes 1.6.2 -### Linters - ### Browsers -- Safari 18.5 (19621.2.5.18.1) -- SafariDriver 18.5 (19621.2.5.18.1) -- Google Chrome 138.0.7204.101 -- Google Chrome for Testing 138.0.7204.94 -- ChromeDriver 138.0.7204.94 -- Mozilla Firefox 140.0.4 +- Safari 26.2 (19623.1.14.18.4) +- SafariDriver 26.2 (19623.1.14.18.4) +- Google Chrome 143.0.7499.193 +- Google Chrome for Testing 143.0.7499.192 +- ChromeDriver 143.0.7499.192 +- Microsoft Edge 143.0.3650.139 +- Microsoft Edge WebDriver 143.0.3650.139 +- Mozilla Firefox 146.0.1 - geckodriver 0.36.0 -- Selenium server 4.34.0 +- Selenium server 4.39.0 #### Environment variables | Name | Value | | --------------- | --------------------------------------- | | CHROMEWEBDRIVER | /usr/local/share/chromedriver-mac-arm64 | -| EDGEWEBDRIVER | | +| EDGEWEBDRIVER | /usr/local/share/edge_driver | | GECKOWEBDRIVER | /opt/homebrew/opt/geckodriver/bin | ### Java -| Version | Environment Variable | -| -------------------- | -------------------- | -| 11.0.27+6 | JAVA_HOME_11_arm64 | -| 17.0.15+6 | JAVA_HOME_17_arm64 | -| 21.0.7+6.0 (default) | JAVA_HOME_21_arm64 | +| Version | Environment Variable | +| --------------------- | -------------------- | +| 11.0.29+7 | JAVA_HOME_11_arm64 | +| 17.0.17+10 | JAVA_HOME_17_arm64 | +| 21.0.9+10.0 (default) | JAVA_HOME_21_arm64 | +| 25.0.1+8.0 | JAVA_HOME_25_arm64 | ### Cached Tools #### Ruby -- 3.1.7 -- 3.2.8 -- 3.3.8 -- 3.4.4 +- 3.2.9 +- 3.3.10 +- 3.4.8 #### Python - 3.11.9 - 3.12.10 -- 3.13.5 +- 3.13.11 +- 3.14.2 #### Node.js -- 18.20.8 -- 20.19.3 -- 22.17.0 +- 20.19.6 +- 22.21.1 +- 24.12.0 #### Go - 1.22.12 -- 1.23.11 -- 1.24.5 +- 1.23.12 +- 1.24.11 +- 1.25.5 ### Rust Tools -- Cargo 1.88.0 -- Rust 1.88.0 -- Rustdoc 1.88.0 +- Cargo 1.92.0 +- Rust 1.92.0 +- Rustdoc 1.92.0 - Rustup 1.28.2 #### Packages -- Clippy 0.1.88 +- Clippy 0.1.92 - Rustfmt 1.8.0-stable ### PowerShell Tools -- PowerShell 7.4.11 +- PowerShell 7.4.13 #### PowerShell Modules - Az: 12.5.0 @@ -225,56 +234,56 @@ | DriverKit 24.2 | driverkit24.2 | 16.2 | #### Installed Simulators -| OS | Simulators | -| ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| iOS 17.0 | iPhone 15
iPhone 15 Plus
iPhone 15 Pro
iPhone 15 Pro Max
iPhone SE (3rd generation)
iPad (10th generation)
iPad Air (5th generation)
iPad mini (6th generation)
iPad Pro (11-inch) (4th generation)
iPad Pro (12.9-inch) (6th generation) | -| iOS 17.2 | iPhone 15
iPhone 15 Plus
iPhone 15 Pro
iPhone 15 Pro Max
iPhone SE (3rd generation)
iPad (10th generation)
iPad Air (5th generation)
iPad mini (6th generation)
iPad Pro (11-inch) (4th generation)
iPad Pro (12.9-inch) (6th generation) | -| iOS 17.4 | iPhone 15
iPhone 15 Plus
iPhone 15 Pro
iPhone 15 Pro Max
iPhone SE (3rd generation)
iPad (10th generation)
iPad Air (5th generation)
iPad Air 11-inch (M2)
iPad Air 13-inch (M2)
iPad mini (6th generation)
iPad Pro (11-inch) (4th generation)
iPad Pro (12.9-inch) (6th generation)
iPad Pro 11-inch (M4)
iPad Pro 13-inch (M4) | -| iOS 17.5 | iPhone 15
iPhone 15 Plus
iPhone 15 Pro
iPhone 15 Pro Max
iPhone SE (3rd generation)
iPad (10th generation)
iPad Air 11-inch (M2)
iPad Air 13-inch (M2)
iPad mini (6th generation)
iPad Pro 11-inch (M4)
iPad Pro 13-inch (M4) | -| iOS 18.1 | iPhone 16
iPhone 16 Plus
iPhone 16 Pro
iPhone 16 Pro Max
iPhone SE (3rd generation)
iPad (10th generation)
iPad Air 11-inch (M2)
iPad Air 13-inch (M2)
iPad mini (A17 Pro)
iPad Pro 11-inch (M4)
iPad Pro 13-inch (M4) | -| iOS 18.2 | iPhone 16
iPhone 16 Plus
iPhone 16 Pro
iPhone 16 Pro Max
iPhone SE (3rd generation)
iPad (10th generation)
iPad Air 11-inch (M2)
iPad Air 13-inch (M2)
iPad mini (A17 Pro)
iPad Pro 11-inch (M4)
iPad Pro 13-inch (M4) | -| tvOS 17.0 | Apple TV
Apple TV 4K (3rd generation)
Apple TV 4K (3rd generation) (at 1080p) | -| tvOS 17.2 | Apple TV
Apple TV 4K (3rd generation)
Apple TV 4K (3rd generation) (at 1080p) | -| tvOS 17.4 | Apple TV
Apple TV 4K (3rd generation)
Apple TV 4K (3rd generation) (at 1080p) | -| tvOS 17.5 | Apple TV
Apple TV 4K (3rd generation)
Apple TV 4K (3rd generation) (at 1080p) | -| tvOS 18.1 | Apple TV
Apple TV 4K (3rd generation)
Apple TV 4K (3rd generation) (at 1080p) | -| tvOS 18.2 | Apple TV
Apple TV 4K (3rd generation)
Apple TV 4K (3rd generation) (at 1080p) | -| watchOS 10.0 | Apple Watch SE (40mm) (2nd generation)
Apple Watch SE (44mm) (2nd generation)
Apple Watch Series 5 (40mm)
Apple Watch Series 5 (44mm)
Apple Watch Series 6 (40mm)
Apple Watch Series 6 (44mm)
Apple Watch Series 7 (41mm)
Apple Watch Series 7 (45mm)
Apple Watch Series 9 (41mm)
Apple Watch Series 9 (45mm)
Apple Watch Ultra 2 (49mm) | -| watchOS 10.2 | Apple Watch SE (40mm) (2nd generation)
Apple Watch SE (44mm) (2nd generation)
Apple Watch Series 5 (40mm)
Apple Watch Series 5 (44mm)
Apple Watch Series 6 (40mm)
Apple Watch Series 6 (44mm)
Apple Watch Series 7 (41mm)
Apple Watch Series 7 (45mm)
Apple Watch Series 9 (41mm)
Apple Watch Series 9 (45mm)
Apple Watch Ultra 2 (49mm) | -| watchOS 10.4 | Apple Watch SE (40mm) (2nd generation)
Apple Watch SE (44mm) (2nd generation)
Apple Watch Series 5 (40mm)
Apple Watch Series 5 (44mm)
Apple Watch Series 6 (40mm)
Apple Watch Series 6 (44mm)
Apple Watch Series 7 (41mm)
Apple Watch Series 7 (45mm)
Apple Watch Series 9 (41mm)
Apple Watch Series 9 (45mm)
Apple Watch Ultra 2 (49mm) | -| watchOS 10.5 | Apple Watch SE (40mm) (2nd generation)
Apple Watch SE (44mm) (2nd generation)
Apple Watch Series 5 (40mm)
Apple Watch Series 5 (44mm)
Apple Watch Series 6 (40mm)
Apple Watch Series 6 (44mm)
Apple Watch Series 7 (41mm)
Apple Watch Series 7 (45mm)
Apple Watch Series 9 (41mm)
Apple Watch Series 9 (45mm)
Apple Watch Ultra 2 (49mm) | -| watchOS 11.1 | Apple Watch SE (40mm) (2nd generation)
Apple Watch SE (44mm) (2nd generation)
Apple Watch Series 10 (42mm)
Apple Watch Series 10 (46mm)
Apple Watch Ultra 2 (49mm) | -| watchOS 11.2 | Apple Watch SE (40mm) (2nd generation)
Apple Watch SE (44mm) (2nd generation)
Apple Watch Series 10 (42mm)
Apple Watch Series 10 (46mm)
Apple Watch Ultra 2 (49mm) | -| visionOS 1.0 | Apple Vision Pro | -| visionOS 1.1 | Apple Vision Pro | -| visionOS 1.2 | Apple Vision Pro | -| visionOS 2.1 | Apple Vision Pro | -| visionOS 2.2 | Apple Vision Pro | +| Name | OS | Simulators | +| ------------ | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| iOS 17.0 | 17.0.1 | iPhone 15
iPhone 15 Plus
iPhone 15 Pro
iPhone 15 Pro Max
iPhone SE (3rd generation)
iPad (10th generation)
iPad Air (5th generation)
iPad mini (6th generation)
iPad Pro (11-inch) (4th generation)
iPad Pro (12.9-inch) (6th generation) | +| iOS 17.2 | 17.2 | iPhone 15
iPhone 15 Plus
iPhone 15 Pro
iPhone 15 Pro Max
iPhone SE (3rd generation)
iPad (10th generation)
iPad Air (5th generation)
iPad mini (6th generation)
iPad Pro (11-inch) (4th generation)
iPad Pro (12.9-inch) (6th generation) | +| iOS 17.4 | 17.4 | iPhone 15
iPhone 15 Plus
iPhone 15 Pro
iPhone 15 Pro Max
iPhone SE (3rd generation)
iPad (10th generation)
iPad Air (5th generation)
iPad Air 11-inch (M2)
iPad Air 13-inch (M2)
iPad mini (6th generation)
iPad Pro (11-inch) (4th generation)
iPad Pro (12.9-inch) (6th generation)
iPad Pro 11-inch (M4)
iPad Pro 13-inch (M4) | +| iOS 17.5 | 17.5 | iPhone 15
iPhone 15 Plus
iPhone 15 Pro
iPhone 15 Pro Max
iPhone SE (3rd generation)
iPad (10th generation)
iPad Air 11-inch (M2)
iPad Air 13-inch (M2)
iPad mini (6th generation)
iPad Pro 11-inch (M4)
iPad Pro 13-inch (M4) | +| iOS 18.1 | 18.1 | iPhone 16
iPhone 16 Plus
iPhone 16 Pro
iPhone 16 Pro Max
iPhone SE (3rd generation)
iPad (10th generation)
iPad Air 11-inch (M2)
iPad Air 13-inch (M2)
iPad mini (A17 Pro)
iPad Pro 11-inch (M4)
iPad Pro 13-inch (M4) | +| iOS 18.2 | 18.2 | iPhone 16
iPhone 16 Plus
iPhone 16 Pro
iPhone 16 Pro Max
iPhone SE (3rd generation)
iPad (10th generation)
iPad Air 11-inch (M2)
iPad Air 13-inch (M2)
iPad mini (A17 Pro)
iPad Pro 11-inch (M4)
iPad Pro 13-inch (M4) | +| tvOS 17.0 | 17.0 | Apple TV
Apple TV 4K (3rd generation)
Apple TV 4K (3rd generation) (at 1080p) | +| tvOS 17.2 | 17.2 | Apple TV
Apple TV 4K (3rd generation)
Apple TV 4K (3rd generation) (at 1080p) | +| tvOS 17.4 | 17.4 | Apple TV
Apple TV 4K (3rd generation)
Apple TV 4K (3rd generation) (at 1080p) | +| tvOS 17.5 | 17.5 | Apple TV
Apple TV 4K (3rd generation)
Apple TV 4K (3rd generation) (at 1080p) | +| tvOS 18.1 | 18.1 | Apple TV
Apple TV 4K (3rd generation)
Apple TV 4K (3rd generation) (at 1080p) | +| tvOS 18.2 | 18.2 | Apple TV
Apple TV 4K (3rd generation)
Apple TV 4K (3rd generation) (at 1080p) | +| watchOS 10.0 | 10.0 | Apple Watch SE (40mm) (2nd generation)
Apple Watch SE (44mm) (2nd generation)
Apple Watch Series 5 (40mm)
Apple Watch Series 5 (44mm)
Apple Watch Series 6 (40mm)
Apple Watch Series 6 (44mm)
Apple Watch Series 7 (41mm)
Apple Watch Series 7 (45mm)
Apple Watch Series 9 (41mm)
Apple Watch Series 9 (45mm)
Apple Watch Ultra 2 (49mm) | +| watchOS 10.2 | 10.2 | Apple Watch SE (40mm) (2nd generation)
Apple Watch SE (44mm) (2nd generation)
Apple Watch Series 5 (40mm)
Apple Watch Series 5 (44mm)
Apple Watch Series 6 (40mm)
Apple Watch Series 6 (44mm)
Apple Watch Series 7 (41mm)
Apple Watch Series 7 (45mm)
Apple Watch Series 9 (41mm)
Apple Watch Series 9 (45mm)
Apple Watch Ultra 2 (49mm) | +| watchOS 10.4 | 10.4 | Apple Watch SE (40mm) (2nd generation)
Apple Watch SE (44mm) (2nd generation)
Apple Watch Series 5 (40mm)
Apple Watch Series 5 (44mm)
Apple Watch Series 6 (40mm)
Apple Watch Series 6 (44mm)
Apple Watch Series 7 (41mm)
Apple Watch Series 7 (45mm)
Apple Watch Series 9 (41mm)
Apple Watch Series 9 (45mm)
Apple Watch Ultra 2 (49mm) | +| watchOS 10.5 | 10.5 | Apple Watch SE (40mm) (2nd generation)
Apple Watch SE (44mm) (2nd generation)
Apple Watch Series 5 (40mm)
Apple Watch Series 5 (44mm)
Apple Watch Series 6 (40mm)
Apple Watch Series 6 (44mm)
Apple Watch Series 7 (41mm)
Apple Watch Series 7 (45mm)
Apple Watch Series 9 (41mm)
Apple Watch Series 9 (45mm)
Apple Watch Ultra 2 (49mm) | +| watchOS 11.1 | 11.1 | Apple Watch SE (40mm) (2nd generation)
Apple Watch SE (44mm) (2nd generation)
Apple Watch Series 10 (42mm)
Apple Watch Series 10 (46mm)
Apple Watch Ultra 2 (49mm) | +| watchOS 11.2 | 11.2 | Apple Watch SE (40mm) (2nd generation)
Apple Watch SE (44mm) (2nd generation)
Apple Watch Series 10 (42mm)
Apple Watch Series 10 (46mm)
Apple Watch Ultra 2 (49mm) | +| visionOS 1.0 | 1.0 | Apple Vision Pro | +| visionOS 1.1 | 1.1 | Apple Vision Pro | +| visionOS 1.2 | 1.2 | Apple Vision Pro | +| visionOS 2.1 | 2.1 | Apple Vision Pro | +| visionOS 2.2 | 2.2 | Apple Vision Pro | ### Android -| Package Name | Version | -| -------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Android Command Line Tools | 11.0 | -| Android Emulator | 35.6.11 | -| Android SDK Build-tools | 36.0.0
35.0.0 35.0.1
34.0.0
33.0.2 33.0.3 | -| Android SDK Platforms | android-36 (rev 2)
android-35-ext15 (rev 1)
android-35-ext14 (rev 1)
android-35 (rev 2)
android-34-ext8 (rev 1)
android-34-ext12 (rev 1)
android-34-ext11 (rev 1)
android-34-ext10 (rev 1)
android-34 (rev 3)
android-33-ext5 (rev 1)
android-33-ext4 (rev 1)
android-33 (rev 3) | -| Android SDK Platform-Tools | 36.0.0 | -| Android Support Repository | 47.0.0 | -| CMake | 3.31.5 | -| Google Play services | 49 | -| Google Repository | 58 | -| NDK | 26.3.11579264 (default)
27.2.12479018
28.2.13676358 | +| Package Name | Version | +| -------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Android Command Line Tools | 11.0 | +| Android Emulator | 36.3.10 | +| Android SDK Build-tools | 36.0.0 36.1.0
35.0.0 35.0.1
34.0.0 | +| Android SDK Platforms | android-36.1 (rev 1)
android-36-ext19 (rev 1)
android-36-ext18 (rev 1)
android-36 (rev 2)
android-35-ext15 (rev 1)
android-35-ext14 (rev 1)
android-35 (rev 2)
android-34-ext8 (rev 1)
android-34-ext12 (rev 1)
android-34-ext11 (rev 1)
android-34-ext10 (rev 1)
android-34 (rev 3) | +| Android SDK Platform-Tools | 36.0.2 | +| Android Support Repository | 47.0.0 | +| CMake | 3.31.5
4.1.2 | +| Google Play services | 49 | +| Google Repository | 58 | +| NDK | 27.3.13750724 (default)
28.2.13676358
29.0.14206865 | #### Environment variables | Name | Value | | ----------------------- | --------------------------------------------------- | | ANDROID_HOME | /Users/runner/Library/Android/sdk | -| ANDROID_NDK | /Users/runner/Library/Android/sdk/ndk/26.3.11579264 | -| ANDROID_NDK_HOME | /Users/runner/Library/Android/sdk/ndk/26.3.11579264 | -| ANDROID_NDK_LATEST_HOME | /Users/runner/Library/Android/sdk/ndk/28.2.13676358 | -| ANDROID_NDK_ROOT | /Users/runner/Library/Android/sdk/ndk/26.3.11579264 | +| ANDROID_NDK | /Users/runner/Library/Android/sdk/ndk/27.3.13750724 | +| ANDROID_NDK_HOME | /Users/runner/Library/Android/sdk/ndk/27.3.13750724 | +| ANDROID_NDK_LATEST_HOME | /Users/runner/Library/Android/sdk/ndk/29.0.14206865 | +| ANDROID_NDK_ROOT | /Users/runner/Library/Android/sdk/ndk/27.3.13750724 | | ANDROID_SDK_ROOT | /Users/runner/Library/Android/sdk | ### Miscellaneous -- Tcl/Tk 8.6.16 +- Tcl/Tk 8.6.17 diff --git a/images/macos/macos-15-Readme.md b/images/macos/macos-15-Readme.md index c550724674..3cb7ae9cce 100644 --- a/images/macos/macos-15-Readme.md +++ b/images/macos/macos-15-Readme.md @@ -1,103 +1,110 @@ | Announcements | |-| -| [[macOS] Xcode support policy will be changed on August 11, 2025](https://github.com/actions/runner-images/issues/12541) | -| [[macOS] macos-latest YAML-label will use macos-15 in August 2025](https://github.com/actions/runner-images/issues/12520) | +| [[macOS] Default Xcode on macOS 26 Tahoe will be set to Xcode 26.2 on January 26th](https://github.com/actions/runner-images/issues/13519) | +| [[macOS] The macOS 14 Sonoma based runner images will begin deprecation on July 6th and will be fully unsupported by November 2nd for GitHub Actions and Azure DevOps](https://github.com/actions/runner-images/issues/13518) | +| [[all OSs] Updating Azure PowerShell Module version to 14.6.0 on January 26th, 2026.](https://github.com/actions/runner-images/issues/13473) | +| [[macOS] DOTNET_ROOT environment variable variable will be removed on January 12th, 2026](https://github.com/actions/runner-images/issues/13470) | +| [[Ubuntu-22.04, macOS-14, Windows-2022] Android SDK platforms and build tools older than version 34 will be removed on January 12th, 2026.](https://github.com/actions/runner-images/issues/13469) | +| [[all OSs] Python 3.9 will be removed; Python 3.12 will become the default on Windows images on January 12th, 2026.](https://github.com/actions/runner-images/issues/13468) | +| [[all OSs] Android NDK 26 will be removed, Android NDK 27 will be used by default on January 12th, 2026.](https://github.com/actions/runner-images/issues/13467) | +| [[macOS] Deprecation of simulator runtimes for Xcode 16.3 and older on macOS 15 on January 12th, 2026.](https://github.com/actions/runner-images/issues/13392) | +| [macOS 26 (Tahoe) is now available as a public beta in GitHub Actions](https://github.com/actions/runner-images/issues/13008) | *** # macOS 15 -- OS Version: macOS 15.5 (24F5068b) -- Kernel Version: Darwin 24.5.0 -- Image Version: 20250721.1622 +- OS Version: macOS 15.7.3 (24G419) +- Kernel Version: Darwin 24.6.0 +- Image Version: 20260112.0116.1 ## Installed Software ### Language and Runtime -- .NET Core SDK: 8.0.101, 8.0.204, 8.0.303, 8.0.412, 9.0.102, 9.0.203, 9.0.303 +- .NET Core SDK: 8.0.101, 8.0.204, 8.0.303, 8.0.416, 9.0.102, 9.0.203, 9.0.308, 10.0.101 - Bash 3.2.57(1)-release -- Clang/LLVM 16.0.0 +- Clang/LLVM 17.0.0 - Clang/LLVM (Homebrew) 18.1.8 - available on `$(brew --prefix llvm@18)/bin/clang` -- GCC 12 (Homebrew GCC 12.4.0) - available by `gcc-12` alias - GCC 13 (Homebrew GCC 13.4.0) - available by `gcc-13` alias - GCC 14 (Homebrew GCC 14.3.0) - available by `gcc-14` alias -- GNU Fortran 12 (Homebrew GCC 12.4.0) - available by `gfortran-12` alias +- GCC 15 (Homebrew GCC 15.2.0) - available by `gcc-15` alias - GNU Fortran 13 (Homebrew GCC 13.4.0) - available by `gfortran-13` alias - GNU Fortran 14 (Homebrew GCC 14.3.0) - available by `gfortran-14` alias -- Kotlin 2.2.0-release-294 -- Node.js 22.17.1 -- Perl 5.40.2 -- PHP 8.4.10 -- Python3 3.13.5 -- Ruby 3.3.8 +- GNU Fortran 15 (Homebrew GCC 15.2.0) - available by `gfortran-15` alias +- Kotlin 2.3.0-release-356 +- Node.js 22.21.1 +- Perl 5.42.0 +- PHP 8.5.1 +- Python3 3.14.2 +- Ruby 3.3.10 ### Package Management -- Bundler 2.7.0 +- Bundler 4.0.3 - Carthage 0.40.0 - CocoaPods 1.16.2 -- Composer 2.8.10 -- Homebrew 4.5.10 -- NPM 10.9.2 -- Pip3 25.1.1 (python 3.13) -- Pipx 1.7.1 -- RubyGems 3.7.0 -- Vcpkg 2025 (build from commit ef97fc17c7) +- Composer 2.9.3 +- Homebrew 5.0.9 +- NPM 10.9.4 +- Pip3 25.3 (python 3.14) +- Pipx 1.8.0 +- RubyGems 4.0.3 +- Vcpkg 2025 (build from commit fafcc0e93b) - Yarn 1.22.22 ### Project Management - Apache Ant 1.10.15 -- Apache Maven 3.9.11 -- Gradle 8.14.3 +- Apache Maven 3.9.12 +- Gradle 9.2.1 ### Utilities - 7-Zip 17.05 - aria2 1.37.0 -- azcopy 10.29.1 -- bazel 8.3.1 -- bazelisk 1.26.0 +- azcopy 10.31.1 +- bazel 8.5.0 +- bazelisk 1.27.0 - bsdtar 3.5.3 - available by 'tar' alias -- Curl 8.15.0 -- Git 2.50.1 -- Git LFS 3.7.0 -- GitHub CLI 2.76.0 +- Curl 8.18.0 +- Git 2.52.0 +- Git LFS 3.7.1 +- GitHub CLI 2.83.2 - GNU Tar 1.35 - available by 'gtar' alias - GNU Wget 1.25.0 -- gpg (GnuPG) 2.4.8 +- gpg (GnuPG) 2.4.9 - jq 1.8.1 - OpenSSL 1.1.1w 11 Sep 2023 -- Packer 1.13.1 +- Packer 1.14.3 - pkgconf 2.5.1 - Unxip 3.2 -- yq 4.46.1 +- yq 4.50.1 - zstd 1.5.7 -- Ninja 1.13.1 +- Ninja 1.13.2 ### Tools -- AWS CLI 2.27.55 -- AWS SAM CLI 1.142.1 -- AWS Session Manager CLI 1.2.707.0 -- Azure CLI 2.75.0 +- AWS CLI 2.32.32 +- AWS SAM CLI 1.151.0 +- AWS Session Manager CLI 1.2.764.0 +- Azure CLI 2.81.0 - Azure CLI (azure-devops) 1.0.2 -- Bicep CLI 0.36.177 -- Cmake 3.31.6 -- CodeQL Action Bundle 2.22.1 -- Fastlane 2.228.0 -- SwiftFormat 0.57.2 -- Xcbeautify 2.29.0 +- Bicep CLI 0.39.26 +- Cmake 4.2.1 +- CodeQL Action Bundle 2.23.8 +- Fastlane 2.230.0 +- SwiftFormat 0.58.7 +- Xcbeautify 3.1.2 - Xcode Command Line Tools 16.4.0.0.1.1747106510 - Xcodes 1.6.2 ### Linters -- SwiftLint 0.59.1 +- SwiftLint 0.63.0 ### Browsers -- Safari 18.5 (20621.2.5.11.5) -- SafariDriver 18.5 (20621.2.5.11.5) -- Google Chrome 138.0.7204.158 -- Google Chrome for Testing 138.0.7204.157 -- ChromeDriver 138.0.7204.157 -- Microsoft Edge 138.0.3351.95 -- Microsoft Edge WebDriver 138.0.3351.95 -- Mozilla Firefox 140.0.4 +- Safari 26.2 (20623.1.14.18.4) +- SafariDriver 26.2 (20623.1.14.18.4) +- Google Chrome 143.0.7499.193 +- Google Chrome for Testing 143.0.7499.192 +- ChromeDriver 143.0.7499.192 +- Microsoft Edge 143.0.3650.139 +- Microsoft Edge WebDriver 143.0.3650.139 +- Mozilla Firefox 146.0.1 - geckodriver 0.36.0 -- Selenium server 4.34.0 +- Selenium server 4.39.0 #### Environment variables | Name | Value | @@ -107,49 +114,50 @@ | GECKOWEBDRIVER | /usr/local/opt/geckodriver/bin | ### Java -| Version | Environment Variable | -| -------------------- | -------------------- | -| 11.0.28+6 | JAVA_HOME_11_X64 | -| 17.0.16+8 | JAVA_HOME_17_X64 | -| 21.0.8+9.0 (default) | JAVA_HOME_21_X64 | +| Version | Environment Variable | +| --------------------- | -------------------- | +| 11.0.29+7 | JAVA_HOME_11_X64 | +| 17.0.17+10 | JAVA_HOME_17_X64 | +| 21.0.9+10.0 (default) | JAVA_HOME_21_X64 | +| 25.0.1+8.0 | JAVA_HOME_25_X64 | ### Cached Tools #### Ruby -- 3.1.7 -- 3.2.8 -- 3.3.8 -- 3.4.5 +- 3.2.9 +- 3.3.10 +- 3.4.8 #### Python -- 3.9.23 -- 3.10.18 +- 3.10.19 - 3.11.9 - 3.12.10 -- 3.13.5 +- 3.13.11 +- 3.14.2 #### Node.js -- 18.20.8 -- 20.19.4 -- 22.17.1 +- 20.19.6 +- 22.21.1 +- 24.12.0 #### Go - 1.22.12 -- 1.23.11 -- 1.24.5 +- 1.23.12 +- 1.24.11 +- 1.25.5 ### Rust Tools -- Cargo 1.88.0 -- Rust 1.88.0 -- Rustdoc 1.88.0 +- Cargo 1.92.0 +- Rust 1.92.0 +- Rustdoc 1.92.0 - Rustup 1.28.2 #### Packages -- Clippy 0.1.88 +- Clippy 0.1.92 - Rustfmt 1.8.0-stable ### PowerShell Tools -- PowerShell 7.4.11 +- PowerShell 7.4.13 #### PowerShell Modules - Az: 12.5.0 @@ -157,14 +165,16 @@ - PSScriptAnalyzer: 1.24.0 ### Xcode -| Version | Build | Path | Symlinks | -| -------------- | -------- | ------------------------------- | ----------------------------------------------------------------------------------------- | -| 26.0 (beta) | 17A5241e | /Applications/Xcode_26_beta.app | /Applications/Xcode_26.0.0.app
/Applications/Xcode_26.0.app | -| 16.4 | 16F6 | /Applications/Xcode_16.4.app | /Applications/Xcode_16.4.0.app | -| 16.3 | 16E140 | /Applications/Xcode_16.3.app | /Applications/Xcode_16.3.0.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
/Applications/Xcode_16.0.app
/Applications/Xcode.app | +| Version | Build | Path | Symlinks | +| -------------- | -------- | ------------------------------ | -------------------------------------------------------------- | +| 26.2 | 17C52 | /Applications/Xcode_26.2.app | /Applications/Xcode_26.2.0.app | +| 26.1.1 | 17B100 | /Applications/Xcode_26.1.1.app | /Applications/Xcode_26.1.app | +| 26.0.1 | 17A400 | /Applications/Xcode_26.0.1.app | /Applications/Xcode_26.0.app | +| 16.4 (default) | 16F6 | /Applications/Xcode_16.4.app | /Applications/Xcode_16.4.0.app
/Applications/Xcode.app | +| 16.3 | 16E140 | /Applications/Xcode_16.3.app | /Applications/Xcode_16.3.0.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 | 16A242d | /Applications/Xcode_16.app | /Applications/Xcode_16.0.0.app
/Applications/Xcode_16.0.app | #### Installed SDKs | SDK | SDK Name | Xcode Version | @@ -174,98 +184,112 @@ | macOS 15.2 | macosx15.2 | 16.2 | | macOS 15.4 | macosx15.4 | 16.3 | | macOS 15.5 | macosx15.5 | 16.4 | -| macOS 26.0 | macosx26.0 | 26.0 | +| macOS 26.0 | macosx26.0 | 26.0.1 | +| macOS 26.1 | macosx26.1 | 26.1.1 | +| macOS 26.2 | macosx26.2 | 26.2 | | 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 | | iOS 18.5 | iphoneos18.5 | 16.4 | -| iOS 26.0 | iphoneos26.0 | 26.0 | +| iOS 26.0 | iphoneos26.0 | 26.0.1 | +| iOS 26.1 | iphoneos26.1 | 26.1.1 | +| iOS 26.2 | iphoneos26.2 | 26.2 | | 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 | | Simulator - iOS 18.5 | iphonesimulator18.5 | 16.4 | -| Simulator - iOS 26.0 | iphonesimulator26.0 | 26.0 | +| Simulator - iOS 26.0 | iphonesimulator26.0 | 26.0.1 | +| Simulator - iOS 26.1 | iphonesimulator26.1 | 26.1.1 | +| Simulator - iOS 26.2 | iphonesimulator26.2 | 26.2 | | 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 | | tvOS 18.5 | appletvos18.5 | 16.4 | -| tvOS 26.0 | appletvos26.0 | 26.0 | +| tvOS 26.0 | appletvos26.0 | 26.0.1 | +| tvOS 26.1 | appletvos26.1 | 26.1.1 | +| tvOS 26.2 | appletvos26.2 | 26.2 | | 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 | | Simulator - tvOS 18.5 | appletvsimulator18.5 | 16.4 | -| Simulator - tvOS 26.0 | appletvsimulator26.0 | 26.0 | +| Simulator - tvOS 26.0 | appletvsimulator26.0 | 26.0.1 | +| Simulator - tvOS 26.1 | appletvsimulator26.1 | 26.1.1 | +| Simulator - tvOS 26.2 | appletvsimulator26.2 | 26.2 | | 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 | | watchOS 11.5 | watchos11.5 | 16.4 | -| watchOS 26.0 | watchos26.0 | 26.0 | +| watchOS 26.0 | watchos26.0 | 26.0.1 | +| watchOS 26.1 | watchos26.1 | 26.1.1 | +| watchOS 26.2 | watchos26.2 | 26.2 | | 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 | | Simulator - watchOS 11.5 | watchsimulator11.5 | 16.4 | -| Simulator - watchOS 26.0 | watchsimulator26.0 | 26.0 | +| Simulator - watchOS 26.0 | watchsimulator26.0 | 26.0.1 | +| Simulator - watchOS 26.1 | watchsimulator26.1 | 26.1.1 | +| Simulator - watchOS 26.2 | watchsimulator26.2 | 26.2 | | 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 | | visionOS 2.5 | xros2.5 | 16.4 | -| visionOS 26.0 | xros26.0 | 26.0 | +| visionOS 26.0 | xros26.0 | 26.0.1 | +| visionOS 26.1 | xros26.1 | 26.1.1 | +| visionOS 26.2 | xros26.2 | 26.2 | | Simulator - visionOS 2.0 | xrsimulator2.0 | 16.0 | | Simulator - visionOS 2.1 | xrsimulator2.1 | 16.1 | | Simulator - visionOS 2.2 | xrsimulator2.2 | 16.2 | | Simulator - visionOS 2.4 | xrsimulator2.4 | 16.3 | | Simulator - visionOS 2.5 | xrsimulator2.5 | 16.4 | -| Simulator - visionOS 26.0 | xrsimulator26.0 | 26.0 | +| Simulator - visionOS 26.0 | xrsimulator26.0 | 26.0.1 | +| Simulator - visionOS 26.1 | xrsimulator26.1 | 26.1.1 | +| Simulator - visionOS 26.2 | xrsimulator26.2 | 26.2 | | 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 | | DriverKit 24.5 | driverkit24.5 | 16.4 | -| DriverKit 25.0 | driverkit25.0 | 26.0 | +| DriverKit 25.0 | driverkit25.0 | 26.0.1 | +| DriverKit 25.1 | driverkit25.1 | 26.1.1 | +| DriverKit 25.2 | driverkit25.2 | 26.2 | #### Installed Simulators -| OS | Simulators | -| ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| iOS 18.0 | iPhone 16
iPhone 16 Plus
iPhone 16 Pro
iPhone 16 Pro Max
iPhone SE (3rd generation)
iPad (10th generation)
iPad Air 11-inch (M2)
iPad Air 13-inch (M2)
iPad mini (6th generation)
iPad Pro 11-inch (M4)
iPad Pro 13-inch (M4) | -| iOS 18.1 | iPhone 16
iPhone 16 Plus
iPhone 16 Pro
iPhone 16 Pro Max
iPhone SE (3rd generation)
iPad (10th generation)
iPad Air 11-inch (M2)
iPad Air 13-inch (M2)
iPad mini (A17 Pro)
iPad Pro 11-inch (M4)
iPad Pro 13-inch (M4) | -| iOS 18.2 | iPhone 16
iPhone 16 Plus
iPhone 16 Pro
iPhone 16 Pro Max
iPhone SE (3rd generation)
iPad (10th generation)
iPad Air 11-inch (M2)
iPad Air 13-inch (M2)
iPad mini (A17 Pro)
iPad Pro 11-inch (M4)
iPad Pro 13-inch (M4) | -| iOS 18.3 | iPhone 16
iPhone 16 Plus
iPhone 16 Pro
iPhone 16 Pro Max
iPhone 16e
iPhone SE (3rd generation)
iPad (10th generation)
iPad (A16)
iPad Air 11-inch (M2)
iPad Air 11-inch (M3)
iPad Air 13-inch (M2)
iPad Air 13-inch (M3)
iPad mini (A17 Pro)
iPad Pro 11-inch (M4)
iPad Pro 13-inch (M4) | -| iOS 18.4 | iPhone 16
iPhone 16 Plus
iPhone 16 Pro
iPhone 16 Pro Max
iPhone 16e
iPhone SE (3rd generation)
iPad (10th generation)
iPad (A16)
iPad Air 11-inch (M2)
iPad Air 11-inch (M3)
iPad Air 13-inch (M2)
iPad Air 13-inch (M3)
iPad mini (A17 Pro)
iPad Pro 11-inch (M4)
iPad Pro 13-inch (M4) | -| iOS 18.5 | iPhone 16
iPhone 16 Plus
iPhone 16 Pro
iPhone 16 Pro Max
iPhone 16e
iPhone SE (3rd generation)
iPad (10th generation)
iPad (A16)
iPad Air 11-inch (M2)
iPad Air 11-inch (M3)
iPad Air 13-inch (M2)
iPad Air 13-inch (M3)
iPad mini (A17 Pro)
iPad Pro 11-inch (M4)
iPad Pro 13-inch (M4) | -| iOS 26.0 | iPhone 16
iPhone 16 Plus
iPhone 16 Pro
iPhone 16 Pro Max
iPhone 16e
iPhone SE (3rd generation)
iPad (10th generation)
iPad (A16)
iPad Air 11-inch (M2)
iPad Air 11-inch (M3)
iPad Air 13-inch (M2)
iPad Air 13-inch (M3)
iPad mini (A17 Pro)
iPad Pro 11-inch (M4)
iPad Pro 13-inch (M4) | -| tvOS 18.0 | Apple TV
Apple TV 4K (3rd generation)
Apple TV 4K (3rd generation) (at 1080p) | -| tvOS 18.1 | Apple TV
Apple TV 4K (3rd generation)
Apple TV 4K (3rd generation) (at 1080p) | -| tvOS 18.2 | Apple TV
Apple TV 4K (3rd generation)
Apple TV 4K (3rd generation) (at 1080p) | -| tvOS 18.4 | Apple TV
Apple TV 4K (3rd generation)
Apple TV 4K (3rd generation) (at 1080p) | -| tvOS 18.5 | Apple TV
Apple TV 4K (3rd generation)
Apple TV 4K (3rd generation) (at 1080p) | -| tvOS 26.0 | Apple TV
Apple TV 4K (3rd generation)
Apple TV 4K (3rd generation) (at 1080p) | -| watchOS 11.0 | Apple Watch SE (40mm) (2nd generation)
Apple Watch SE (44mm) (2nd generation)
Apple Watch Series 10 (42mm)
Apple Watch Series 10 (46mm)
Apple Watch Ultra 2 (49mm) | -| watchOS 11.1 | Apple Watch SE (40mm) (2nd generation)
Apple Watch SE (44mm) (2nd generation)
Apple Watch Series 10 (42mm)
Apple Watch Series 10 (46mm)
Apple Watch Ultra 2 (49mm) | -| watchOS 11.2 | Apple Watch SE (40mm) (2nd generation)
Apple Watch SE (44mm) (2nd generation)
Apple Watch Series 10 (42mm)
Apple Watch Series 10 (46mm)
Apple Watch Ultra 2 (49mm) | -| watchOS 11.4 | Apple Watch SE (40mm) (2nd generation)
Apple Watch SE (44mm) (2nd generation)
Apple Watch Series 10 (42mm)
Apple Watch Series 10 (46mm)
Apple Watch Ultra 2 (49mm) | -| watchOS 11.5 | Apple Watch SE (40mm) (2nd generation)
Apple Watch SE (44mm) (2nd generation)
Apple Watch Series 10 (42mm)
Apple Watch Series 10 (46mm)
Apple Watch Ultra 2 (49mm) | -| watchOS 26.0 | Apple Watch SE (40mm) (2nd generation)
Apple Watch SE (44mm) (2nd generation)
Apple Watch Series 10 (42mm)
Apple Watch Series 10 (46mm)
Apple Watch Ultra 2 (49mm) | +| Name | OS | Simulators | +| ------------ | ------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| iOS 18.5 | 18.5 | iPhone 16
iPhone 16 Plus
iPhone 16 Pro
iPhone 16 Pro Max
iPhone 16e
iPhone SE (3rd generation)
iPad (10th generation)
iPad (A16)
iPad Air 11-inch (M2)
iPad Air 11-inch (M3)
iPad Air 13-inch (M2)
iPad Air 13-inch (M3)
iPad mini (A17 Pro)
iPad Pro 11-inch (M4)
iPad Pro 13-inch (M4) | +| iOS 18.6 | 18.6 | iPhone 16
iPhone 16 Plus
iPhone 16 Pro
iPhone 16 Pro Max
iPhone 16e
iPhone SE (3rd generation)
iPad (10th generation)
iPad (A16)
iPad Air 11-inch (M2)
iPad Air 11-inch (M3)
iPad Air 13-inch (M2)
iPad Air 13-inch (M3)
iPad mini (A17 Pro)
iPad Pro 11-inch (M4)
iPad Pro 13-inch (M4) | +| iOS 26.0 | 26.0.1 | iPhone 16
iPhone 16 Plus
iPhone 16 Pro
iPhone 16 Pro Max
iPhone 16e
iPhone 17
iPhone 17 Pro
iPhone 17 Pro Max
iPhone Air
iPhone SE (3rd generation)
iPad (10th generation)
iPad (A16)
iPad Air 11-inch (M2)
iPad Air 11-inch (M3)
iPad Air 13-inch (M2)
iPad Air 13-inch (M3)
iPad mini (A17 Pro)
iPad Pro 11-inch (M4)
iPad Pro 11-inch (M5)
iPad Pro 13-inch (M4)
iPad Pro 13-inch (M5) | +| iOS 26.1 | 26.1 | iPhone 16
iPhone 16 Plus
iPhone 16 Pro
iPhone 16 Pro Max
iPhone 16e
iPhone 17
iPhone 17 Pro
iPhone 17 Pro Max
iPhone Air
iPhone SE (3rd generation)
iPad (10th generation)
iPad (A16)
iPad Air 11-inch (M2)
iPad Air 11-inch (M3)
iPad Air 13-inch (M2)
iPad Air 13-inch (M3)
iPad mini (A17 Pro)
iPad Pro 11-inch (M4)
iPad Pro 11-inch (M5)
iPad Pro 13-inch (M4)
iPad Pro 13-inch (M5) | +| iOS 26.2 | 26.2 | iPhone 16
iPhone 16 Plus
iPhone 16 Pro
iPhone 16 Pro Max
iPhone 16e
iPhone 17
iPhone 17 Pro
iPhone 17 Pro Max
iPhone Air
iPhone SE (3rd generation)
iPad (10th generation)
iPad (A16)
iPad Air 11-inch (M2)
iPad Air 11-inch (M3)
iPad Air 13-inch (M2)
iPad Air 13-inch (M3)
iPad mini (A17 Pro)
iPad Pro 11-inch (M4)
iPad Pro 11-inch (M5)
iPad Pro 13-inch (M4)
iPad Pro 13-inch (M5) | +| tvOS 18.5 | 18.5 | Apple TV
Apple TV 4K (3rd generation)
Apple TV 4K (3rd generation) (at 1080p) | +| tvOS 26.0 | 26.0 | Apple TV
Apple TV 4K (3rd generation)
Apple TV 4K (3rd generation) (at 1080p) | +| tvOS 26.1 | 26.1 | Apple TV
Apple TV 4K (3rd generation)
Apple TV 4K (3rd generation) (at 1080p) | +| tvOS 26.2 | 26.2 | Apple TV
Apple TV 4K (3rd generation)
Apple TV 4K (3rd generation) (at 1080p) | +| watchOS 11.5 | 11.5 | Apple Watch SE (40mm) (2nd generation)
Apple Watch SE (44mm) (2nd generation)
Apple Watch Series 10 (42mm)
Apple Watch Series 10 (46mm)
Apple Watch Ultra 2 (49mm) | +| watchOS 26.0 | 26.0 | Apple Watch SE (40mm) (2nd generation)
Apple Watch SE (44mm) (2nd generation)
Apple Watch SE 3 (40mm)
Apple Watch SE 3 (44mm)
Apple Watch Series 10 (42mm)
Apple Watch Series 10 (46mm)
Apple Watch Series 11 (42mm)
Apple Watch Series 11 (46mm)
Apple Watch Ultra 2 (49mm)
Apple Watch Ultra 3 (49mm) | +| watchOS 26.1 | 26.1 | Apple Watch SE (40mm) (2nd generation)
Apple Watch SE (44mm) (2nd generation)
Apple Watch SE 3 (40mm)
Apple Watch SE 3 (44mm)
Apple Watch Series 10 (42mm)
Apple Watch Series 10 (46mm)
Apple Watch Series 11 (42mm)
Apple Watch Series 11 (46mm)
Apple Watch Ultra 2 (49mm)
Apple Watch Ultra 3 (49mm) | +| watchOS 26.2 | 26.2 | Apple Watch SE (40mm) (2nd generation)
Apple Watch SE (44mm) (2nd generation)
Apple Watch SE 3 (40mm)
Apple Watch SE 3 (44mm)
Apple Watch Series 10 (42mm)
Apple Watch Series 10 (46mm)
Apple Watch Series 11 (42mm)
Apple Watch Series 11 (46mm)
Apple Watch Ultra 2 (49mm)
Apple Watch Ultra 3 (49mm) | ### Android -| Package Name | Version | -| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Android Command Line Tools | 16.0 | -| Android Emulator | 35.6.11 | -| Android SDK Build-tools | 36.0.0
35.0.0 35.0.1 | -| Android SDK Platforms | android-36 (rev 2)
android-35-ext15 (rev 1)
android-35-ext14 (rev 1)
android-35 (rev 2)
android-34-ext8 (rev 1)
android-34-ext12 (rev 1)
android-34-ext11 (rev 1)
android-34-ext10 (rev 1)
android-34 (rev 3)
android-33-ext5 (rev 1)
android-33-ext4 (rev 1) | -| Android SDK Platform-Tools | 36.0.0 | -| Android Support Repository | 47.0.0 | -| CMake | 3.31.5 | -| Google Play services | 49 | -| Google Repository | 58 | -| NDK | 26.3.11579264
27.3.13750724 (default)
28.2.13676358 | +| Package Name | Version | +| -------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Android Command Line Tools | 16.0 | +| Android Emulator | 36.3.10 | +| Android SDK Build-tools | 36.0.0 36.1.0
35.0.0 35.0.1 | +| Android SDK Platforms | android-36.1 (rev 1)
android-36-ext19 (rev 1)
android-36-ext18 (rev 1)
android-36 (rev 2)
android-35-ext15 (rev 1)
android-35-ext14 (rev 1)
android-35 (rev 2)
android-34-ext8 (rev 1)
android-34-ext12 (rev 1)
android-34-ext11 (rev 1)
android-34-ext10 (rev 1)
android-34 (rev 3) | +| Android SDK Platform-Tools | 36.0.2 | +| Android Support Repository | 47.0.0 | +| CMake | 3.31.5
4.1.2 | +| Google Play services | 49 | +| Google Repository | 58 | +| NDK | 27.3.13750724 (default)
28.2.13676358
29.0.14206865 | #### Environment variables | Name | Value | @@ -273,16 +297,17 @@ | ANDROID_HOME | /Users/runner/Library/Android/sdk | | ANDROID_NDK | /Users/runner/Library/Android/sdk/ndk/27.3.13750724 | | ANDROID_NDK_HOME | /Users/runner/Library/Android/sdk/ndk/27.3.13750724 | -| ANDROID_NDK_LATEST_HOME | /Users/runner/Library/Android/sdk/ndk/28.2.13676358 | +| ANDROID_NDK_LATEST_HOME | /Users/runner/Library/Android/sdk/ndk/29.0.14206865 | | ANDROID_NDK_ROOT | /Users/runner/Library/Android/sdk/ndk/27.3.13750724 | | ANDROID_SDK_ROOT | /Users/runner/Library/Android/sdk | ### Miscellaneous +- Tcl/Tk 8.6.17 #### Environment variables | Name | Value | | ----------------- | ----------------------------------------------------------------------------------------- | -| PARALLELS_DMG_URL | https://download.parallels.com/desktop/v20/20.4.0-55980/ParallelsDesktop-20.4.0-55980.dmg | +| PARALLELS_DMG_URL | https://download.parallels.com/desktop/v26/26.2.0-57363/ParallelsDesktop-26.2.0-57363.dmg | ##### Notes ``` diff --git a/images/macos/macos-15-arm64-Readme.md b/images/macos/macos-15-arm64-Readme.md index 63d6ff09b4..9ff281a713 100644 --- a/images/macos/macos-15-arm64-Readme.md +++ b/images/macos/macos-15-arm64-Readme.md @@ -1,148 +1,155 @@ | Announcements | |-| -| [[macOS] Xcode support policy will be changed on August 11, 2025](https://github.com/actions/runner-images/issues/12541) | -| [[macOS] macos-latest YAML-label will use macos-15 in August 2025](https://github.com/actions/runner-images/issues/12520) | +| [[all OSs] Updating Azure PowerShell Module version to 14.6.0 on January 26th, 2026.](https://github.com/actions/runner-images/issues/13473) | +| [[macOS] DOTNET_ROOT environment variable variable will be removed on January 12th, 2026](https://github.com/actions/runner-images/issues/13470) | +| [[Ubuntu-22.04, macOS-14, Windows-2022] Android SDK platforms and build tools older than version 34 will be removed on January 12th, 2026.](https://github.com/actions/runner-images/issues/13469) | +| [[all OSs] Python 3.9 will be removed; Python 3.12 will become the default on Windows images on January 12th, 2026.](https://github.com/actions/runner-images/issues/13468) | +| [[all OSs] Android NDK 26 will be removed, Android NDK 27 will be used by default on January 12th, 2026.](https://github.com/actions/runner-images/issues/13467) | +| [[macOS] Deprecation of simulator runtimes for Xcode 16.3 and older on macOS 15 on January 12th, 2026.](https://github.com/actions/runner-images/issues/13392) | +| [macOS 26 (Tahoe) is now available as a public beta in GitHub Actions](https://github.com/actions/runner-images/issues/13008) | *** # macOS 15 -- OS Version: macOS 15.5 (24F74) -- Kernel Version: Darwin 24.5.0 -- Image Version: 20250714.1971 +- OS Version: macOS 15.7.3 (24G419) +- Kernel Version: Darwin 24.6.0 +- Image Version: 20260105.0094.1 ## Installed Software ### Language and Runtime -- .NET Core SDK: 8.0.101, 8.0.204, 8.0.303, 8.0.412, 9.0.102, 9.0.203, 9.0.302 +- .NET Core SDK: 8.0.101, 8.0.204, 8.0.303, 8.0.416, 9.0.102, 9.0.203, 9.0.308, 10.0.101 - Bash 3.2.57(1)-release -- Clang/LLVM 16.0.0 +- Clang/LLVM 17.0.0 - Clang/LLVM (Homebrew) 18.1.8 - available on `$(brew --prefix llvm@18)/bin/clang` -- GCC 12 (Homebrew GCC 12.4.0) - available by `gcc-12` alias - GCC 13 (Homebrew GCC 13.4.0) - available by `gcc-13` alias - GCC 14 (Homebrew GCC 14.3.0) - available by `gcc-14` alias -- GNU Fortran 12 (Homebrew GCC 12.4.0) - available by `gfortran-12` alias +- GCC 15 (Homebrew GCC 15.2.0) - available by `gcc-15` alias - GNU Fortran 13 (Homebrew GCC 13.4.0) - available by `gfortran-13` alias - GNU Fortran 14 (Homebrew GCC 14.3.0) - available by `gfortran-14` alias -- Kotlin 2.1.10-release-473 -- Node.js 22.17.0 -- Perl 5.40.2 -- Python3 3.13.5 -- Ruby 3.3.8 +- GNU Fortran 15 (Homebrew GCC 15.2.0) - available by `gfortran-15` alias +- Kotlin 2.3.0-release-356 +- Node.js 22.21.1 +- Perl 5.42.0 +- Python3 3.14.2 +- Ruby 3.3.10 ### Package Management -- Bundler 2.6.9 +- Bundler 4.0.3 - Carthage 0.40.0 - CocoaPods 1.16.2 -- Homebrew 4.5.9 -- NPM 10.9.2 -- Pip3 25.1.1 (python 3.13) -- Pipx 1.7.1 -- RubyGems 3.6.9 -- Vcpkg 2025 (build from commit e86ec03236) +- Homebrew 5.0.8 +- NPM 10.9.4 +- Pip3 25.3 (python 3.14) +- Pipx 1.8.0 +- RubyGems 4.0.3 +- Vcpkg 2025 (build from commit af752f21c9) - Yarn 1.22.22 ### Project Management - Apache Ant 1.10.15 -- Apache Maven 3.9.10 -- Gradle 8.14.3 +- Apache Maven 3.9.12 +- Gradle 9.2.1 ### Utilities - 7-Zip 17.05 - aria2 1.37.0 -- azcopy 10.29.1 -- bazel 8.3.1 -- bazelisk 1.26.0 +- azcopy 10.31.0 +- bazel 8.5.0 +- bazelisk 1.27.0 - bsdtar 3.5.3 - available by 'tar' alias - Curl 8.7.1 -- Git 2.50.1 -- Git LFS 3.7.0 -- GitHub CLI 2.75.0 +- Git 2.52.0 +- Git LFS 3.7.1 +- GitHub CLI 2.83.2 - GNU Tar 1.35 - available by 'gtar' alias - GNU Wget 1.25.0 -- gpg (GnuPG) 2.4.8 +- gpg (GnuPG) 2.4.9 - jq 1.8.1 - OpenSSL 1.1.1w 11 Sep 2023 -- Packer 1.13.1 +- Packer 1.14.3 - pkgconf 2.5.1 - Unxip 3.2 -- yq 4.46.1 +- yq 4.50.1 - zstd 1.5.7 -- Ninja 1.13.1 +- Ninja 1.13.2 ### Tools -- AWS CLI 2.27.50 -- AWS SAM CLI 1.142.1 -- AWS Session Manager CLI 1.2.707.0 -- Azure CLI 2.75.0 +- AWS CLI 2.32.28 +- AWS SAM CLI 1.151.0 +- AWS Session Manager CLI 1.2.764.0 +- Azure CLI 2.81.0 - Azure CLI (azure-devops) 1.0.2 -- Bicep CLI 0.36.177 -- Cmake 3.31.6 -- CodeQL Action Bundle 2.22.1 -- Fastlane 2.228.0 -- SwiftFormat 0.57.0 -- Xcbeautify 2.29.0 +- Bicep CLI 0.39.26 +- Cmake 4.2.1 +- CodeQL Action Bundle 2.23.8 +- Fastlane 2.230.0 +- SwiftFormat 0.58.7 +- Xcbeautify 3.1.2 - Xcode Command Line Tools 16.4.0.0.1.1747106510 - Xcodes 1.6.2 -### Linters - ### Browsers -- Safari 18.5 (20621.2.5.11.8) -- SafariDriver 18.5 (20621.2.5.11.8) -- Google Chrome 138.0.7204.101 -- Google Chrome for Testing 138.0.7204.94 -- ChromeDriver 138.0.7204.94 -- Mozilla Firefox 140.0.4 +- Safari 26.2 (20623.1.14.18.4) +- SafariDriver 26.2 (20623.1.14.18.4) +- Google Chrome 143.0.7499.170 +- Google Chrome for Testing 143.0.7499.169 +- ChromeDriver 143.0.7499.169 +- Microsoft Edge 143.0.3650.96 +- Microsoft Edge WebDriver 143.0.3650.96 +- Mozilla Firefox 146.0.1 - geckodriver 0.36.0 -- Selenium server 4.34.0 +- Selenium server 4.39.0 #### Environment variables | Name | Value | | --------------- | --------------------------------------- | | CHROMEWEBDRIVER | /usr/local/share/chromedriver-mac-arm64 | -| EDGEWEBDRIVER | | +| EDGEWEBDRIVER | /usr/local/share/edge_driver | | GECKOWEBDRIVER | /opt/homebrew/opt/geckodriver/bin | ### Java -| Version | Environment Variable | -| -------------------- | -------------------- | -| 11.0.27+6 | JAVA_HOME_11_arm64 | -| 17.0.15+6 | JAVA_HOME_17_arm64 | -| 21.0.7+6.0 (default) | JAVA_HOME_21_arm64 | +| Version | Environment Variable | +| --------------------- | -------------------- | +| 11.0.29+7 | JAVA_HOME_11_arm64 | +| 17.0.17+10 | JAVA_HOME_17_arm64 | +| 21.0.9+10.0 (default) | JAVA_HOME_21_arm64 | +| 25.0.1+8.0 | JAVA_HOME_25_arm64 | ### Cached Tools #### Ruby -- 3.1.7 -- 3.2.8 -- 3.3.8 -- 3.4.4 +- 3.2.9 +- 3.3.10 +- 3.4.8 #### Python - 3.11.9 - 3.12.10 -- 3.13.5 +- 3.13.11 +- 3.14.2 #### Node.js -- 18.20.8 -- 20.19.3 -- 22.17.0 +- 20.19.6 +- 22.21.1 +- 24.12.0 #### Go - 1.22.12 -- 1.23.11 -- 1.24.5 +- 1.23.12 +- 1.24.11 +- 1.25.5 ### Rust Tools -- Cargo 1.88.0 -- Rust 1.88.0 -- Rustdoc 1.88.0 +- Cargo 1.92.0 +- Rust 1.92.0 +- Rustdoc 1.92.0 - Rustup 1.28.2 #### Packages -- Clippy 0.1.88 +- Clippy 0.1.92 - Rustfmt 1.8.0-stable ### PowerShell Tools -- PowerShell 7.4.11 +- PowerShell 7.4.13 #### PowerShell Modules - Az: 12.5.0 @@ -150,14 +157,15 @@ - PSScriptAnalyzer: 1.24.0 ### Xcode -| Version | Build | Path | Symlinks | -| -------------- | -------- | ------------------------------- | ----------------------------------------------------------------------------------------- | -| 26.0 (beta) | 17A5241e | /Applications/Xcode_26_beta.app | /Applications/Xcode_26.0.0.app
/Applications/Xcode_26.0.app | -| 16.4 | 16F6 | /Applications/Xcode_16.4.app | /Applications/Xcode_16.4.0.app | -| 16.3 | 16E140 | /Applications/Xcode_16.3.app | /Applications/Xcode_16.3.0.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
/Applications/Xcode_16.0.app
/Applications/Xcode.app | +| Version | Build | Path | Symlinks | +| -------------- | -------- | ------------------------------ | -------------------------------------------------------------- | +| 26.1.1 | 17B100 | /Applications/Xcode_26.1.1.app | /Applications/Xcode_26.1.app | +| 26.0.1 | 17A400 | /Applications/Xcode_26.0.1.app | /Applications/Xcode_26.0.app | +| 16.4 (default) | 16F6 | /Applications/Xcode_16.4.app | /Applications/Xcode_16.4.0.app
/Applications/Xcode.app | +| 16.3 | 16E140 | /Applications/Xcode_16.3.app | /Applications/Xcode_16.3.0.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 | 16A242d | /Applications/Xcode_16.app | /Applications/Xcode_16.0.0.app
/Applications/Xcode_16.0.app | #### Installed SDKs | SDK | SDK Name | Xcode Version | @@ -167,109 +175,120 @@ | macOS 15.2 | macosx15.2 | 16.2 | | macOS 15.4 | macosx15.4 | 16.3 | | macOS 15.5 | macosx15.5 | 16.4 | -| macOS 26.0 | macosx26.0 | 26.0 | +| macOS 26.0 | macosx26.0 | 26.0.1 | +| macOS 26.1 | macosx26.1 | 26.1.1 | | 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 | | iOS 18.5 | iphoneos18.5 | 16.4 | -| iOS 26.0 | iphoneos26.0 | 26.0 | +| iOS 26.0 | iphoneos26.0 | 26.0.1 | +| iOS 26.1 | iphoneos26.1 | 26.1.1 | | 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 | | Simulator - iOS 18.5 | iphonesimulator18.5 | 16.4 | -| Simulator - iOS 26.0 | iphonesimulator26.0 | 26.0 | +| Simulator - iOS 26.0 | iphonesimulator26.0 | 26.0.1 | +| Simulator - iOS 26.1 | iphonesimulator26.1 | 26.1.1 | | 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 | | tvOS 18.5 | appletvos18.5 | 16.4 | -| tvOS 26.0 | appletvos26.0 | 26.0 | +| tvOS 26.0 | appletvos26.0 | 26.0.1 | +| tvOS 26.1 | appletvos26.1 | 26.1.1 | | 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 | | Simulator - tvOS 18.5 | appletvsimulator18.5 | 16.4 | -| Simulator - tvOS 26.0 | appletvsimulator26.0 | 26.0 | +| Simulator - tvOS 26.0 | appletvsimulator26.0 | 26.0.1 | +| Simulator - tvOS 26.1 | appletvsimulator26.1 | 26.1.1 | | 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 | | watchOS 11.5 | watchos11.5 | 16.4 | -| watchOS 26.0 | watchos26.0 | 26.0 | +| watchOS 26.0 | watchos26.0 | 26.0.1 | +| watchOS 26.1 | watchos26.1 | 26.1.1 | | 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 | | Simulator - watchOS 11.5 | watchsimulator11.5 | 16.4 | -| Simulator - watchOS 26.0 | watchsimulator26.0 | 26.0 | +| Simulator - watchOS 26.0 | watchsimulator26.0 | 26.0.1 | +| Simulator - watchOS 26.1 | watchsimulator26.1 | 26.1.1 | | 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 | | visionOS 2.5 | xros2.5 | 16.4 | -| visionOS 26.0 | xros26.0 | 26.0 | +| visionOS 26.0 | xros26.0 | 26.0.1 | +| visionOS 26.1 | xros26.1 | 26.1.1 | | Simulator - visionOS 2.0 | xrsimulator2.0 | 16.0 | | Simulator - visionOS 2.1 | xrsimulator2.1 | 16.1 | | Simulator - visionOS 2.2 | xrsimulator2.2 | 16.2 | | Simulator - visionOS 2.4 | xrsimulator2.4 | 16.3 | | Simulator - visionOS 2.5 | xrsimulator2.5 | 16.4 | -| Simulator - visionOS 26.0 | xrsimulator26.0 | 26.0 | +| Simulator - visionOS 26.0 | xrsimulator26.0 | 26.0.1 | +| Simulator - visionOS 26.1 | xrsimulator26.1 | 26.1.1 | | 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 | | DriverKit 24.5 | driverkit24.5 | 16.4 | -| DriverKit 25.0 | driverkit25.0 | 26.0 | +| DriverKit 25.0 | driverkit25.0 | 26.0.1 | +| DriverKit 25.1 | driverkit25.1 | 26.1.1 | #### Installed Simulators -| OS | Simulators | -| ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| iOS 18.0 | iPhone 16
iPhone 16 Plus
iPhone 16 Pro
iPhone 16 Pro Max
iPhone SE (3rd generation)
iPad (10th generation)
iPad Air 11-inch (M2)
iPad Air 13-inch (M2)
iPad mini (6th generation)
iPad Pro 11-inch (M4)
iPad Pro 13-inch (M4) | -| iOS 18.1 | iPhone 16
iPhone 16 Plus
iPhone 16 Pro
iPhone 16 Pro Max
iPhone SE (3rd generation)
iPad (10th generation)
iPad Air 11-inch (M2)
iPad Air 13-inch (M2)
iPad mini (A17 Pro)
iPad Pro 11-inch (M4)
iPad Pro 13-inch (M4) | -| iOS 18.2 | iPhone 16
iPhone 16 Plus
iPhone 16 Pro
iPhone 16 Pro Max
iPhone SE (3rd generation)
iPad (10th generation)
iPad Air 11-inch (M2)
iPad Air 13-inch (M2)
iPad mini (A17 Pro)
iPad Pro 11-inch (M4)
iPad Pro 13-inch (M4) | -| iOS 18.3 | iPhone 16
iPhone 16 Plus
iPhone 16 Pro
iPhone 16 Pro Max
iPhone 16e
iPhone SE (3rd generation)
iPad (10th generation)
iPad (A16)
iPad Air 11-inch (M2)
iPad Air 11-inch (M3)
iPad Air 13-inch (M2)
iPad Air 13-inch (M3)
iPad mini (A17 Pro)
iPad Pro 11-inch (M4)
iPad Pro 13-inch (M4) | -| iOS 18.4 | iPhone 16
iPhone 16 Plus
iPhone 16 Pro
iPhone 16 Pro Max
iPhone 16e
iPhone SE (3rd generation)
iPad (10th generation)
iPad (A16)
iPad Air 11-inch (M2)
iPad Air 11-inch (M3)
iPad Air 13-inch (M2)
iPad Air 13-inch (M3)
iPad mini (A17 Pro)
iPad Pro 11-inch (M4)
iPad Pro 13-inch (M4) | -| iOS 18.5 | iPhone 16
iPhone 16 Plus
iPhone 16 Pro
iPhone 16 Pro Max
iPhone 16e
iPhone SE (3rd generation)
iPad (10th generation)
iPad (A16)
iPad Air 11-inch (M2)
iPad Air 11-inch (M3)
iPad Air 13-inch (M2)
iPad Air 13-inch (M3)
iPad mini (A17 Pro)
iPad Pro 11-inch (M4)
iPad Pro 13-inch (M4) | -| tvOS 18.0 | Apple TV
Apple TV 4K (3rd generation)
Apple TV 4K (3rd generation) (at 1080p) | -| tvOS 18.1 | Apple TV
Apple TV 4K (3rd generation)
Apple TV 4K (3rd generation) (at 1080p) | -| tvOS 18.2 | Apple TV
Apple TV 4K (3rd generation)
Apple TV 4K (3rd generation) (at 1080p) | -| tvOS 18.4 | Apple TV
Apple TV 4K (3rd generation)
Apple TV 4K (3rd generation) (at 1080p) | -| tvOS 18.5 | Apple TV
Apple TV 4K (3rd generation)
Apple TV 4K (3rd generation) (at 1080p) | -| watchOS 11.0 | Apple Watch SE (40mm) (2nd generation)
Apple Watch SE (44mm) (2nd generation)
Apple Watch Series 10 (42mm)
Apple Watch Series 10 (46mm)
Apple Watch Ultra 2 (49mm) | -| watchOS 11.1 | Apple Watch SE (40mm) (2nd generation)
Apple Watch SE (44mm) (2nd generation)
Apple Watch Series 10 (42mm)
Apple Watch Series 10 (46mm)
Apple Watch Ultra 2 (49mm) | -| watchOS 11.2 | Apple Watch SE (40mm) (2nd generation)
Apple Watch SE (44mm) (2nd generation)
Apple Watch Series 10 (42mm)
Apple Watch Series 10 (46mm)
Apple Watch Ultra 2 (49mm) | -| watchOS 11.4 | Apple Watch SE (40mm) (2nd generation)
Apple Watch SE (44mm) (2nd generation)
Apple Watch Series 10 (42mm)
Apple Watch Series 10 (46mm)
Apple Watch Ultra 2 (49mm) | -| watchOS 11.5 | Apple Watch SE (40mm) (2nd generation)
Apple Watch SE (44mm) (2nd generation)
Apple Watch Series 10 (42mm)
Apple Watch Series 10 (46mm)
Apple Watch Ultra 2 (49mm) | -| 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 | -| visionOS 2.5 | Apple Vision Pro | +| Name | OS | Simulators | +| ------------- | ------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| iOS 18.4 | 18.4 | iPhone 16
iPhone 16 Plus
iPhone 16 Pro
iPhone 16 Pro Max
iPhone 16e
iPhone SE (3rd generation)
iPad (10th generation)
iPad (A16)
iPad Air 11-inch (M2)
iPad Air 11-inch (M3)
iPad Air 13-inch (M2)
iPad Air 13-inch (M3)
iPad mini (A17 Pro)
iPad Pro 11-inch (M4)
iPad Pro 13-inch (M4) | +| iOS 18.5 | 18.5 | iPhone 16
iPhone 16 Plus
iPhone 16 Pro
iPhone 16 Pro Max
iPhone 16e
iPhone SE (3rd generation)
iPad (10th generation)
iPad (A16)
iPad Air 11-inch (M2)
iPad Air 11-inch (M3)
iPad Air 13-inch (M2)
iPad Air 13-inch (M3)
iPad mini (A17 Pro)
iPad Pro 11-inch (M4)
iPad Pro 13-inch (M4) | +| iOS 18.6 | 18.6 | iPhone 16
iPhone 16 Plus
iPhone 16 Pro
iPhone 16 Pro Max
iPhone 16e
iPhone SE (3rd generation)
iPad (10th generation)
iPad (A16)
iPad Air 11-inch (M2)
iPad Air 11-inch (M3)
iPad Air 13-inch (M2)
iPad Air 13-inch (M3)
iPad mini (A17 Pro)
iPad Pro 11-inch (M4)
iPad Pro 13-inch (M4) | +| iOS 26.0 | 26.0.1 | iPhone 16
iPhone 16 Plus
iPhone 16 Pro
iPhone 16 Pro Max
iPhone 16e
iPhone 17
iPhone 17 Pro
iPhone 17 Pro Max
iPhone Air
iPhone SE (3rd generation)
iPad (10th generation)
iPad (A16)
iPad Air 11-inch (M2)
iPad Air 11-inch (M3)
iPad Air 13-inch (M2)
iPad Air 13-inch (M3)
iPad mini (A17 Pro)
iPad Pro 11-inch (M4)
iPad Pro 11-inch (M5)
iPad Pro 13-inch (M4)
iPad Pro 13-inch (M5) | +| iOS 26.1 | 26.1 | iPhone 16
iPhone 16 Plus
iPhone 16 Pro
iPhone 16 Pro Max
iPhone 16e
iPhone 17
iPhone 17 Pro
iPhone 17 Pro Max
iPhone Air
iPhone SE (3rd generation)
iPad (10th generation)
iPad (A16)
iPad Air 11-inch (M2)
iPad Air 11-inch (M3)
iPad Air 13-inch (M2)
iPad Air 13-inch (M3)
iPad mini (A17 Pro)
iPad Pro 11-inch (M4)
iPad Pro 11-inch (M5)
iPad Pro 13-inch (M4)
iPad Pro 13-inch (M5) | +| tvOS 18.2 | 18.2 | Apple TV
Apple TV 4K (3rd generation)
Apple TV 4K (3rd generation) (at 1080p) | +| tvOS 18.4 | 18.4 | Apple TV
Apple TV 4K (3rd generation)
Apple TV 4K (3rd generation) (at 1080p) | +| tvOS 18.5 | 18.5 | Apple TV
Apple TV 4K (3rd generation)
Apple TV 4K (3rd generation) (at 1080p) | +| tvOS 26.0 | 26.0 | Apple TV
Apple TV 4K (3rd generation)
Apple TV 4K (3rd generation) (at 1080p) | +| tvOS 26.1 | 26.1 | Apple TV
Apple TV 4K (3rd generation)
Apple TV 4K (3rd generation) (at 1080p) | +| watchOS 11.2 | 11.2 | Apple Watch SE (40mm) (2nd generation)
Apple Watch SE (44mm) (2nd generation)
Apple Watch Series 10 (42mm)
Apple Watch Series 10 (46mm)
Apple Watch Ultra 2 (49mm) | +| watchOS 11.4 | 11.4 | Apple Watch SE (40mm) (2nd generation)
Apple Watch SE (44mm) (2nd generation)
Apple Watch Series 10 (42mm)
Apple Watch Series 10 (46mm)
Apple Watch Ultra 2 (49mm) | +| watchOS 11.5 | 11.5 | Apple Watch SE (40mm) (2nd generation)
Apple Watch SE (44mm) (2nd generation)
Apple Watch Series 10 (42mm)
Apple Watch Series 10 (46mm)
Apple Watch Ultra 2 (49mm) | +| watchOS 26.0 | 26.0 | Apple Watch SE (40mm) (2nd generation)
Apple Watch SE (44mm) (2nd generation)
Apple Watch SE 3 (40mm)
Apple Watch SE 3 (44mm)
Apple Watch Series 10 (42mm)
Apple Watch Series 10 (46mm)
Apple Watch Series 11 (42mm)
Apple Watch Series 11 (46mm)
Apple Watch Ultra 2 (49mm)
Apple Watch Ultra 3 (49mm) | +| watchOS 26.1 | 26.1 | Apple Watch SE (40mm) (2nd generation)
Apple Watch SE (44mm) (2nd generation)
Apple Watch SE 3 (40mm)
Apple Watch SE 3 (44mm)
Apple Watch Series 10 (42mm)
Apple Watch Series 10 (46mm)
Apple Watch Series 11 (42mm)
Apple Watch Series 11 (46mm)
Apple Watch Ultra 2 (49mm)
Apple Watch Ultra 3 (49mm) | +| visionOS 2.3 | 2.3 | Apple Vision Pro | +| visionOS 2.4 | 2.4 | Apple Vision Pro | +| visionOS 2.5 | 2.5 | Apple Vision Pro | +| visionOS 26.0 | 26.0 | Apple Vision Pro | +| visionOS 26.1 | 26.1 | Apple Vision Pro | ### Android -| Package Name | Version | -| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Android Command Line Tools | 16.0 | -| Android Emulator | 35.6.11 | -| Android SDK Build-tools | 36.0.0
35.0.0 35.0.1 | -| Android SDK Platforms | android-36 (rev 2)
android-35-ext15 (rev 1)
android-35-ext14 (rev 1)
android-35 (rev 2)
android-34-ext8 (rev 1)
android-34-ext12 (rev 1)
android-34-ext11 (rev 1)
android-34-ext10 (rev 1)
android-34 (rev 3)
android-33-ext5 (rev 1)
android-33-ext4 (rev 1) | -| Android SDK Platform-Tools | 36.0.0 | -| Android Support Repository | 47.0.0 | -| CMake | 3.31.5 | -| Google Play services | 49 | -| Google Repository | 58 | -| NDK | 26.3.11579264
27.2.12479018 (default)
28.2.13676358 | +| Package Name | Version | +| -------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Android Command Line Tools | 16.0 | +| Android Emulator | 36.3.10 | +| Android SDK Build-tools | 36.0.0 36.1.0
35.0.0 35.0.1 | +| Android SDK Platforms | android-36.1 (rev 1)
android-36-ext19 (rev 1)
android-36-ext18 (rev 1)
android-36 (rev 2)
android-35-ext15 (rev 1)
android-35-ext14 (rev 1)
android-35 (rev 2)
android-34-ext8 (rev 1)
android-34-ext12 (rev 1)
android-34-ext11 (rev 1)
android-34-ext10 (rev 1)
android-34 (rev 3) | +| Android SDK Platform-Tools | 36.0.2 | +| Android Support Repository | 47.0.0 | +| CMake | 3.31.5
4.1.2 | +| Google Play services | 49 | +| Google Repository | 58 | +| NDK | 26.3.11579264
27.3.13750724 (default)
28.2.13676358
29.0.14206865 | #### Environment variables | Name | Value | | ----------------------- | --------------------------------------------------- | | ANDROID_HOME | /Users/runner/Library/Android/sdk | -| ANDROID_NDK | /Users/runner/Library/Android/sdk/ndk/27.2.12479018 | -| ANDROID_NDK_HOME | /Users/runner/Library/Android/sdk/ndk/27.2.12479018 | -| ANDROID_NDK_LATEST_HOME | /Users/runner/Library/Android/sdk/ndk/28.2.13676358 | -| ANDROID_NDK_ROOT | /Users/runner/Library/Android/sdk/ndk/27.2.12479018 | +| ANDROID_NDK | /Users/runner/Library/Android/sdk/ndk/27.3.13750724 | +| ANDROID_NDK_HOME | /Users/runner/Library/Android/sdk/ndk/27.3.13750724 | +| ANDROID_NDK_LATEST_HOME | /Users/runner/Library/Android/sdk/ndk/29.0.14206865 | +| ANDROID_NDK_ROOT | /Users/runner/Library/Android/sdk/ndk/27.3.13750724 | | ANDROID_SDK_ROOT | /Users/runner/Library/Android/sdk | +### Miscellaneous +- Tcl/Tk 8.6.17 + diff --git a/images/macos/macos-26-arm64-Readme.md b/images/macos/macos-26-arm64-Readme.md new file mode 100644 index 0000000000..6a1ddfa996 --- /dev/null +++ b/images/macos/macos-26-arm64-Readme.md @@ -0,0 +1,238 @@ +| Announcements | +|-| +| [[all OSs] Updating Azure PowerShell Module version to 14.6.0 on January 26th, 2026.](https://github.com/actions/runner-images/issues/13473) | +| [[macOS] DOTNET_ROOT environment variable variable will be removed on January 12th, 2026](https://github.com/actions/runner-images/issues/13470) | +| [[Ubuntu-22.04, macOS-14, Windows-2022] Android SDK platforms and build tools older than version 34 will be removed on January 12th, 2026.](https://github.com/actions/runner-images/issues/13469) | +| [[all OSs] Python 3.9 will be removed; Python 3.12 will become the default on Windows images on January 12th, 2026.](https://github.com/actions/runner-images/issues/13468) | +| [[all OSs] Android NDK 26 will be removed, Android NDK 27 will be used by default on January 12th, 2026.](https://github.com/actions/runner-images/issues/13467) | +| [[macOS] Deprecation of simulator runtimes for Xcode 16.3 and older on macOS 15 on January 12th, 2026.](https://github.com/actions/runner-images/issues/13392) | +| [macOS 26 (Tahoe) is now available as a public beta in GitHub Actions](https://github.com/actions/runner-images/issues/13008) | +*** +# macOS 26 +- OS Version: macOS 26.0.1 (25A362) +- Kernel Version: Darwin 25.0.0 +- Image Version: 20260106.0138.1 + +## Installed Software + +### Language and Runtime +- .NET Core SDK: 8.0.101, 8.0.204, 8.0.303, 8.0.416, 9.0.102, 9.0.203, 9.0.308, 10.0.101 +- Bash 3.2.57(1)-release +- Clang/LLVM 17.0.0 +- Clang/LLVM (Homebrew) 20.1.8 - available on `$(brew --prefix llvm@20)/bin/clang` +- GCC 13 (Homebrew GCC 13.4.0) - available by `gcc-13` alias +- GCC 14 (Homebrew GCC 14.3.0) - available by `gcc-14` alias +- GCC 15 (Homebrew GCC 15.2.0) - available by `gcc-15` alias +- GNU Fortran 13 (Homebrew GCC 13.4.0) - available by `gfortran-13` alias +- GNU Fortran 14 (Homebrew GCC 14.3.0) - available by `gfortran-14` alias +- GNU Fortran 15 (Homebrew GCC 15.2.0) - available by `gfortran-15` alias +- Kotlin 2.3.0-release-356 +- Node.js 24.12.0 +- Perl 5.42.0 +- Python3 3.14.2 +- Ruby 3.4.8 + +### Package Management +- Bundler 4.0.3 +- Carthage 0.40.0 +- CocoaPods 1.16.2 +- Homebrew 5.0.9 +- NPM 11.6.2 +- Pip3 25.3 (python 3.14) +- Pipx 1.8.0 +- RubyGems 4.0.3 +- Vcpkg 2025 (build from commit e3db8f65d2) +- Yarn 1.22.22 + +### Project Management +- Apache Ant 1.10.15 +- Apache Maven 3.9.12 +- Gradle 9.2.1 + +### Utilities +- 7-Zip 17.05 +- aria2 1.37.0 +- azcopy 10.31.0 +- bazel 8.5.0 +- bazelisk 1.27.0 +- bsdtar 3.5.3 - available by 'tar' alias +- Curl 8.7.1 +- Git 2.52.0 +- Git LFS 3.7.1 +- GitHub CLI 2.83.2 +- GNU Tar 1.35 - available by 'gtar' alias +- GNU Wget 1.25.0 +- gpg (GnuPG) 2.4.9 +- jq 1.8.1 +- OpenSSL 3.6.0 1 Oct 2025 (Library: OpenSSL 3.6.0 1 Oct 2025) +- Packer 1.14.3 +- pkgconf 2.5.1 +- Unxip 3.2 +- yq 4.50.1 +- zstd 1.5.7 +- Ninja 1.13.2 + +### Tools +- AWS CLI 2.32.29 +- AWS SAM CLI 1.151.0 +- AWS Session Manager CLI 1.2.764.0 +- Azure CLI 2.81.0 +- Azure CLI (azure-devops) 1.0.2 +- Bicep CLI 0.39.26 +- Cmake 4.2.1 +- CodeQL Action Bundle 2.23.8 +- Fastlane 2.230.0 +- SwiftFormat 0.58.7 +- Xcbeautify 3.1.2 +- Xcode Command Line Tools 26.2.0.0.1.1764812424 +- Xcodes 1.6.2 + +### Browsers +- Safari 26.0.1 (21622.1.22.11.15) +- SafariDriver 26.0.1 (21622.1.22.11.15) +- Google Chrome 143.0.7499.170 +- Google Chrome for Testing 143.0.7499.169 +- ChromeDriver 143.0.7499.169 +- Microsoft Edge 143.0.3650.96 +- Microsoft Edge WebDriver 143.0.3650.96 +- Mozilla Firefox 146.0.1 +- geckodriver 0.36.0 +- Selenium server 4.39.0 + +#### Environment variables +| Name | Value | +| --------------- | --------------------------------------- | +| CHROMEWEBDRIVER | /usr/local/share/chromedriver-mac-arm64 | +| EDGEWEBDRIVER | /usr/local/share/edge_driver | +| GECKOWEBDRIVER | /opt/homebrew/opt/geckodriver/bin | + +### Java +| Version | Environment Variable | +| --------------------- | -------------------- | +| 11.0.29+7 | JAVA_HOME_11_arm64 | +| 17.0.17+10 | JAVA_HOME_17_arm64 | +| 21.0.9+10.0 (default) | JAVA_HOME_21_arm64 | +| 25.0.1+8.0 | JAVA_HOME_25_arm64 | + +### Cached Tools + +#### Ruby +- 3.2.9 +- 3.3.10 +- 3.4.8 + +#### Python +- 3.11.9 +- 3.12.10 +- 3.13.11 +- 3.14.2 + +#### Node.js +- 20.19.6 +- 22.21.1 +- 24.12.0 + +#### Go +- 1.23.12 +- 1.24.11 +- 1.25.5 + +### Rust Tools +- Cargo 1.92.0 +- Rust 1.92.0 +- Rustdoc 1.92.0 +- Rustup 1.28.2 + +#### Packages +- Clippy 0.1.92 +- Rustfmt 1.8.0-stable + +### PowerShell Tools +- PowerShell 7.4.13 + +#### PowerShell Modules +- Az: 14.3.0 +- Pester: 5.7.1 +- PSScriptAnalyzer: 1.24.0 + +### Xcode +| Version | Build | Path | Symlinks | +| ---------------- | ------ | ------------------------------ | ------------------------------------------------------- | +| 26.2 | 17C52 | /Applications/Xcode_26.2.app | /Applications/Xcode_26.2.0.app | +| 26.1.1 | 17B100 | /Applications/Xcode_26.1.1.app | /Applications/Xcode_26.1.app | +| 26.0.1 (default) | 17A400 | /Applications/Xcode_26.0.1.app | /Applications/Xcode_26.0.app
/Applications/Xcode.app | + +#### Installed SDKs +| SDK | SDK Name | Xcode Version | +| ------------------------- | -------------------- | ------------- | +| macOS 26.0 | macosx26.0 | 26.0.1 | +| macOS 26.1 | macosx26.1 | 26.1.1 | +| macOS 26.2 | macosx26.2 | 26.2 | +| iOS 26.0 | iphoneos26.0 | 26.0.1 | +| iOS 26.1 | iphoneos26.1 | 26.1.1 | +| iOS 26.2 | iphoneos26.2 | 26.2 | +| Simulator - iOS 26.0 | iphonesimulator26.0 | 26.0.1 | +| Simulator - iOS 26.1 | iphonesimulator26.1 | 26.1.1 | +| Simulator - iOS 26.2 | iphonesimulator26.2 | 26.2 | +| tvOS 26.0 | appletvos26.0 | 26.0.1 | +| tvOS 26.1 | appletvos26.1 | 26.1.1 | +| tvOS 26.2 | appletvos26.2 | 26.2 | +| Simulator - tvOS 26.0 | appletvsimulator26.0 | 26.0.1 | +| Simulator - tvOS 26.1 | appletvsimulator26.1 | 26.1.1 | +| Simulator - tvOS 26.2 | appletvsimulator26.2 | 26.2 | +| watchOS 26.0 | watchos26.0 | 26.0.1 | +| watchOS 26.1 | watchos26.1 | 26.1.1 | +| watchOS 26.2 | watchos26.2 | 26.2 | +| Simulator - watchOS 26.0 | watchsimulator26.0 | 26.0.1 | +| Simulator - watchOS 26.1 | watchsimulator26.1 | 26.1.1 | +| Simulator - watchOS 26.2 | watchsimulator26.2 | 26.2 | +| visionOS 26.0 | xros26.0 | 26.0.1 | +| visionOS 26.1 | xros26.1 | 26.1.1 | +| visionOS 26.2 | xros26.2 | 26.2 | +| Simulator - visionOS 26.0 | xrsimulator26.0 | 26.0.1 | +| Simulator - visionOS 26.1 | xrsimulator26.1 | 26.1.1 | +| Simulator - visionOS 26.2 | xrsimulator26.2 | 26.2 | +| DriverKit 25.0 | driverkit25.0 | 26.0.1 | +| DriverKit 25.1 | driverkit25.1 | 26.1.1 | +| DriverKit 25.2 | driverkit25.2 | 26.2 | + +#### Installed Simulators +| Name | OS | Simulators | +| ------------- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| iOS 26.0 | 26.0.1 | iPhone 16e
iPhone 17
iPhone 17 Pro
iPhone 17 Pro Max
iPhone Air
iPad (A16)
iPad Air 11-inch (M3)
iPad Air 13-inch (M3)
iPad mini (A17 Pro)
iPad Pro 11-inch (M4)
iPad Pro 11-inch (M5)
iPad Pro 13-inch (M4)
iPad Pro 13-inch (M5) | +| iOS 26.1 | 26.1 | iPhone 16e
iPhone 17
iPhone 17 Pro
iPhone 17 Pro Max
iPhone Air
iPad (A16)
iPad Air 11-inch (M3)
iPad Air 13-inch (M3)
iPad mini (A17 Pro)
iPad Pro 11-inch (M5)
iPad Pro 13-inch (M5) | +| iOS 26.2 | 26.2 | iPhone 16e
iPhone 17
iPhone 17 Pro
iPhone 17 Pro Max
iPhone Air
iPad (A16)
iPad Air 11-inch (M3)
iPad Air 13-inch (M3)
iPad mini (A17 Pro)
iPad Pro 11-inch (M5)
iPad Pro 13-inch (M5) | +| tvOS 26.0 | 26.0 | Apple TV
Apple TV 4K (3rd generation)
Apple TV 4K (3rd generation) (at 1080p) | +| tvOS 26.1 | 26.1 | Apple TV
Apple TV 4K (3rd generation)
Apple TV 4K (3rd generation) (at 1080p) | +| tvOS 26.2 | 26.2 | Apple TV
Apple TV 4K (3rd generation)
Apple TV 4K (3rd generation) (at 1080p) | +| watchOS 26.0 | 26.0 | Apple Watch SE 3 (40mm)
Apple Watch SE 3 (44mm)
Apple Watch Series 11 (42mm)
Apple Watch Series 11 (46mm)
Apple Watch Ultra 3 (49mm) | +| watchOS 26.1 | 26.1 | Apple Watch SE 3 (40mm)
Apple Watch SE 3 (44mm)
Apple Watch Series 11 (42mm)
Apple Watch Series 11 (46mm)
Apple Watch Ultra 3 (49mm) | +| watchOS 26.2 | 26.2 | Apple Watch SE 3 (40mm)
Apple Watch SE 3 (44mm)
Apple Watch Series 11 (42mm)
Apple Watch Series 11 (46mm)
Apple Watch Ultra 3 (49mm) | +| visionOS 26.0 | 26.0 | Apple Vision Pro | +| visionOS 26.1 | 26.1 | Apple Vision Pro | +| visionOS 26.2 | 26.2 | Apple Vision Pro | + +### Android +| Package Name | Version | +| -------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Android Command Line Tools | 16.0 | +| Android Emulator | 36.3.10 | +| Android SDK Build-tools | 36.0.0 36.1.0
35.0.0 35.0.1 | +| Android SDK Platforms | android-36.1 (rev 1)
android-36-ext19 (rev 1)
android-36-ext18 (rev 1)
android-36 (rev 2)
android-35-ext15 (rev 1)
android-35-ext14 (rev 1)
android-35 (rev 2) | +| Android SDK Platform-Tools | 36.0.2 | +| Android Support Repository | 47.0.0 | +| CMake | 3.31.5
4.1.2 | +| Google Play services | 49 | +| Google Repository | 58 | +| NDK | 27.3.13750724 (default)
28.2.13676358
29.0.14206865 | + +#### Environment variables +| Name | Value | +| ----------------------- | --------------------------------------------------- | +| ANDROID_HOME | /Users/runner/Library/Android/sdk | +| ANDROID_NDK | /Users/runner/Library/Android/sdk/ndk/27.3.13750724 | +| ANDROID_NDK_HOME | /Users/runner/Library/Android/sdk/ndk/27.3.13750724 | +| ANDROID_NDK_LATEST_HOME | /Users/runner/Library/Android/sdk/ndk/29.0.14206865 | +| ANDROID_NDK_ROOT | /Users/runner/Library/Android/sdk/ndk/27.3.13750724 | +| ANDROID_SDK_ROOT | /Users/runner/Library/Android/sdk | + diff --git a/images/macos/scripts/build/Configure-Xcode-Simulators.ps1 b/images/macos/scripts/build/Configure-Xcode-Simulators.ps1 index d4bcd8cb73..3e2791e927 100644 --- a/images/macos/scripts/build/Configure-Xcode-Simulators.ps1 +++ b/images/macos/scripts/build/Configure-Xcode-Simulators.ps1 @@ -8,10 +8,11 @@ Import-Module "~/image-generation/helpers/Common.Helpers.psm1" Import-Module "~/image-generation/helpers/Xcode.Helpers.psm1" $arch = Get-Architecture $xcodeVersions = (Get-ToolsetContent).xcode.${arch}.versions +$defaultXcode = (Get-ToolsetContent).xcode.default # Switch to each Xcode version foreach ($xcodeVersion in $xcodeVersions.link) { - write-host "Switching to Xcode $xcodeVersion" + Write-Host "Switching to Xcode $xcodeVersion" Switch-Xcode -Version $XcodeVersion # Make object of all simulators @@ -50,8 +51,8 @@ foreach ($xcodeVersion in $xcodeVersions.link) { Write-Host "$($sameRuntimeDevices[$i+1].DeviceName) - DeviceId $($sameRuntimeDevices[$i+1].DeviceId)" Write-Host "-------------------------------------------------------------------" if ($sameRuntimeDevices[$i].DeviceName -eq $sameRuntimeDevices[$i+1].DeviceName) { - write-host "*******************************************************************" - write-host "** Duplicate found" + Write-Host "*******************************************************************" + Write-Host "** Duplicate found" if ($sameRuntimeDevices[$i].DeviceCreationTime -lt $sameRuntimeDevices[$i+1].DeviceCreationTime) { Write-Host "** will be removed $($sameRuntimeDevices[$i+1].DeviceName) with id $($sameRuntimeDevices[$i+1].DeviceId)" xcrun simctl delete $sameRuntimeDevices[$i+1].DeviceId @@ -61,8 +62,12 @@ foreach ($xcodeVersion in $xcodeVersions.link) { xcrun simctl delete $sameRuntimeDevices[$i].DeviceId $sameRuntimeDevices.RemoveAt($i) } - write-host "*******************************************************************" + Write-Host "*******************************************************************" } } } } + +# Restore default Xcode +Write-Host "Restoring default Xcode to $defaultXcode" +Switch-Xcode -Version $defaultXcode diff --git a/images/macos/scripts/build/Install-Toolset.ps1 b/images/macos/scripts/build/Install-Toolset.ps1 index 1e81cd27bd..a9a89665fb 100644 --- a/images/macos/scripts/build/Install-Toolset.ps1 +++ b/images/macos/scripts/build/Install-Toolset.ps1 @@ -54,4 +54,13 @@ foreach ($tool in $tools) { } } + +# Ensure python3 and pip3 point to the latest installed Python version +# Fix for ./setup.sh script behavior for python3 and pip3 symlinks +# Only Intel images are affected since /usr/local/bin is used for Intel +# ARM images use /opt/homebrew/bin which is managed by Homebrew +Write-Host "Ensuring python3 and pip3 point to the latest installed Python version from Homebrew" +brew unlink python@3.14 && brew link python@3.14 --force --overwrite +Split-Path (readlink (which python3)) + Invoke-PesterTests "Toolcache" diff --git a/images/macos/scripts/build/Install-Xcode.ps1 b/images/macos/scripts/build/Install-Xcode.ps1 index d8f3ac7b97..9ef03bd49f 100644 --- a/images/macos/scripts/build/Install-Xcode.ps1 +++ b/images/macos/scripts/build/Install-Xcode.ps1 @@ -8,9 +8,10 @@ $ErrorActionPreference = "Stop" Import-Module "$env:HOME/image-generation/helpers/Common.Helpers.psm1" Import-Module "$env:HOME/image-generation/helpers/Xcode.Installer.psm1" -DisableNameChecking +$os = Get-OSVersion $arch = Get-Architecture [Array]$xcodeVersions = (Get-ToolsetContent).xcode.$arch.versions -write-host $xcodeVersions +Write-Host $xcodeVersions $defaultXcode = (Get-ToolsetContent).xcode.default [Array]::Reverse($xcodeVersions) $threadCount = "5" @@ -33,7 +34,11 @@ Write-Host "Configuring Xcode versions..." $xcodeVersions | ForEach-Object { Write-Host "Configuring Xcode $($_.link) ..." Invoke-XcodeRunFirstLaunch -Version $_.link - Install-AdditionalSimulatorRuntimes -Version $_.link -Arch $arch -Runtimes $_.install_runtimes + Install-XcodeAdditionalSimulatorRuntimes -Version $_.link -Arch $arch -Runtimes $_.install_runtimes + if ($_.link -match '^(\d+)\.(\d+)(?:\.(\d+))?$' -and [int]$matches[1] -ge 26) { + Install-XcodeAdditionalComponents -Version $_.link + Update-DyldCache -Version $_.link + } } Invoke-XcodeRunFirstLaunch -Version $defaultXcode diff --git a/images/macos/scripts/build/configure-machine.sh b/images/macos/scripts/build/configure-machine.sh index 7c7b367054..cd28fc0401 100644 --- a/images/macos/scripts/build/configure-machine.sh +++ b/images/macos/scripts/build/configure-machine.sh @@ -10,9 +10,12 @@ echo "Enabling developer mode..." sudo /usr/sbin/DevToolsSecurity --enable # Turn off hibernation and get rid of the sleepimage -sudo pmset hibernatemode 0 +sudo pmset -a hibernatemode 0 sudo rm -f /var/vm/sleepimage +# Set computer, disk, and display sleep to never +sudo pmset -a sleep 0 disksleep 0 displaysleep 0 + # Disable App Nap System Wide defaults write NSGlobalDomain NSAppSleepDisabled -bool YES @@ -103,3 +106,7 @@ if [[ ! -d "/usr/local/bin" ]];then fi chmod +x $HOME/utils/invoke-tests.sh sudo ln -s $HOME/utils/invoke-tests.sh /usr/local/bin/invoke_tests + +# Fix share dir permissions +sudo chown "$USER":admin /usr/local/share +sudo chmod 775 /usr/local/share diff --git a/images/macos/scripts/build/configure-preimagedata.sh b/images/macos/scripts/build/configure-preimagedata.sh index d7492d2c4c..e5c05bad4a 100644 --- a/images/macos/scripts/build/configure-preimagedata.sh +++ b/images/macos/scripts/build/configure-preimagedata.sh @@ -9,6 +9,8 @@ source ~/utils/utils.sh arch=$(get_arch) imagedata_file="$HOME/imagedata.json" image_version=$(echo $IMAGE_VERSION | cut -d _ -f 2) +image_version_major=${image_version/.*/} +image_version_minor=$(echo $image_version | cut -d "." -f 2) os_name=$(sw_vers -productName) os_version=$(sw_vers -productVersion) os_build=$(sw_vers -buildVersion) @@ -20,8 +22,8 @@ else image_label="macos-${label_version}" fi -software_url="https://github.com/actions/runner-images/blob/${image_label}/${image_version}/images/macos/${image_label}-Readme.md" -releaseUrl="https://github.com/actions/runner-images/releases/tag/${image_label}%2F${image_version}" +software_url="https://github.com/actions/runner-images/blob/${image_label}/${image_version_major}.${image_version_minor}/images/macos/${image_label}-Readme.md" +releaseUrl="https://github.com/actions/runner-images/releases/tag/${image_label}%2F${image_version_major}.${image_version_minor}" cat < $imagedata_file [ diff --git a/images/macos/scripts/build/configure-system.sh b/images/macos/scripts/build/configure-system.sh index d88972135a..f4a537a79b 100644 --- a/images/macos/scripts/build/configure-system.sh +++ b/images/macos/scripts/build/configure-system.sh @@ -33,6 +33,12 @@ sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.backupd.plist echo "Disable Apple Push Notification Service daemon" sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.apsd.plist +echo "Set SMC monitoring cadence to 0 to reduce CPU usage" +sudo defaults -currentHost write /Library/Preferences/com.apple.powerlogd SMCMonitorCadence 0 + +echo "Disable Performance and Power Management daemon if possible" +sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.PerfPowerServices.plist + # Remove Parallels Desktop # https://github.com/actions/runner-images/issues/6105 # https://github.com/actions/runner-images/issues/10143 @@ -40,8 +46,14 @@ if is_SonomaX64 || is_VenturaX64 || is_SequoiaX64; then brew uninstall parallels fi +# Simple warmup of the default Xcode +echo "Warm up the default Xcode" +xcodebuild -version > /dev/null +xcrun simctl list > /dev/null +xcrun simctl list devices > /dev/null + echo "Put documentation to $HOME root" -cp $HOME/image-generation/output/software-report/systeminfo.* $HOME/ +cp $HOME/image-generation/output/software-report.* $HOME/ echo "Remove fastlane cached cookie" rm -rf ~/.fastlane diff --git a/images/macos/scripts/build/configure-tccdb-macos.sh b/images/macos/scripts/build/configure-tccdb-macos.sh index 062ca47a28..71dae6ef15 100644 --- a/images/macos/scripts/build/configure-tccdb-macos.sh +++ b/images/macos/scripts/build/configure-tccdb-macos.sh @@ -8,42 +8,48 @@ source ~/utils/utils.sh # /Library/Application\ Support/com.apple.TCC/TCC.db systemValuesArray=( - "'kTCCServiceAccessibility','/usr/local/opt/runner/runprovisioner.sh',1,2,0,1,NULL,NULL,NULL,'UNUSED',NULL,0,1566321319" - "'kTCCServicePostEvent','/usr/local/opt/runner/runprovisioner.sh',1,2,0,1,NULL,NULL,NULL,'UNUSED',NULL,0,1566321326" - "'kTCCServiceSystemPolicyAllFiles','/usr/local/opt/runner/runprovisioner.sh',1,2,0,1,NULL,NULL,NULL,'UNUSED',NULL,0,1583997993" - "'kTCCServiceAccessibility','com.apple.dt.Xcode-Helper',0,2,0,1,NULL,NULL,NULL,'UNUSED',NULL,NULL,1551941368" - "'kTCCServiceSystemPolicyAllFiles','/bin/bash',1,2,0,1,NULL,NULL,NULL,'UNUSED',NULL,0,1583997993" - "'kTCCServiceSystemPolicyAllFiles','/usr/libexec/sshd-keygen-wrapper',1,0,4,1,X'fade0c000000003c0000000100000006000000020000001d636f6d2e6170706c652e737368642d6b657967656e2d7772617070657200000000000003',NULL,0,'UNUSED',NULL,0,1639660695" - "'kTCCServiceSystemPolicyAllFiles','com.apple.Terminal',0,2,4,1,X'fade0c000000003000000001000000060000000200000012636f6d2e6170706c652e5465726d696e616c000000000003',NULL,0,'UNUSED',NULL,0,1678990068" + "'kTCCServiceAccessibility','/bin/bash',1,2,0,1,NULL,NULL,NULL,'UNUSED',NULL,0,1583997993" + "'kTCCServiceAccessibility','/opt/hca/hosted-compute-agent',1,2,4,1,NULL,NULL,0,'UNUSED',NULL,NULL,1592919552" + "'kTCCServiceAccessibility','/opt/hca/start_hca.sh',1,2,0,1,NULL,NULL,NULL,'UNUSED',NULL,0,1566321319" + "'kTCCServiceAccessibility','/usr/bin/osascript',1,2,0,1,NULL,NULL,NULL,'UNUSED',NULL,0,1566321319" "'kTCCServiceAccessibility','/usr/libexec/sshd-keygen-wrapper',1,2,4,1,X'fade0c000000003c0000000100000006000000020000001d636f6d2e6170706c652e737368642d6b657967656e2d7772617070657200000000000003',NULL,0,'UNUSED',NULL,0,1644564233" + "'kTCCServiceAccessibility','/usr/local/opt/runner/provisioner/provisioner',1,2,4,1,NULL,NULL,0,'UNUSED',NULL,NULL,1592919552" + "'kTCCServiceAccessibility','/usr/local/opt/runner/runprovisioner.sh',1,2,0,1,NULL,NULL,NULL,'UNUSED',NULL,0,1566321319" "'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" + "'kTCCServiceAccessibility','com.apple.dt.Xcode-Helper',0,2,0,1,NULL,NULL,NULL,'UNUSED',NULL,NULL,1551941368" + "'kTCCServiceAppleEvents','/bin/bash',1,2,0,1,NULL,NULL,0,'com.apple.systemevents',NULL,NULL,1591532620" + "'kTCCServiceAppleEvents','/opt/hca/hosted-compute-agent',1,2,3,1,NULL,NULL,0,'com.apple.finder',X'fade0c000000002c00000001000000060000000200000010636f6d2e6170706c652e66696e64657200000003',NULL,1592919552" + "'kTCCServiceAppleEvents','/usr/local/opt/runner/provisioner/provisioner',1,2,3,1,NULL,NULL,0,'com.apple.finder',X'fade0c000000002c00000001000000060000000200000010636f6d2e6170706c652e66696e64657200000003',NULL,1592919552" + "'kTCCServiceAppleEvents','com.apple.Terminal',0,2,0,1,X'fade0c000000003000000001000000060000000200000012636f6d2e6170706c652e5465726d696e616c000000000003',NULL,NULL,'UNUSED',NULL,0,1591180502" + "'kTCCServiceAppleEvents','/usr/bin/osascript',1,2,0,1,NULL,NULL,0,'com.apple.systemevents',NULL,NULL,1591532620" + "'kTCCServiceAppleEvents','/usr/bin/osascript',1,2,0,1,NULL,NULL,0,'com.apple.Safari',NULL,NULL,1755087312" + "'kTCCServiceAppleEvents','/bin/bash',1,2,0,1,NULL,NULL,0,'com.apple.Safari',NULL,NULL,1755087312" + "'kTCCServiceAppleEvents','/opt/hca/hosted-compute-agent',1,2,0,1,NULL,NULL,0,'com.apple.Safari',NULL,NULL,1755087312" + "'kTCCServiceBluetoothAlways','/opt/hca/hosted-compute-agent',1,2,4,1,NULL,NULL,NULL,'UNUSED',NULL,NULL,1736467200" + "'kTCCServiceBluetoothAlways','/usr/local/opt/runner/provisioner/provisioner',1,2,4,1,NULL,NULL,NULL,'UNUSED',NULL,NULL,1736467200" + "'kTCCServiceMicrophone','/opt/hca/hosted-compute-agent',1,2,4,1,NULL,NULL,NULL,'UNUSED',NULL,NULL,1736467200" + "'kTCCServiceMicrophone','/opt/hca/start_hca.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" + "'kTCCServiceMicrophone','/usr/local/opt/runner/runprovisioner.sh',1,2,0,1,NULL,NULL,NULL,'UNUSED',NULL,NULL,1576661342" "'kTCCServicePostEvent','/Library/Application Support/Veertu/Anka/addons/ankarund',1,2,4,1,NULL,NULL,0,'UNUSED',NULL,0,1644565949" + "'kTCCServicePostEvent','/opt/hca/start_hca.sh',1,2,0,1,NULL,NULL,NULL,'UNUSED',NULL,0,1566321326" + "'kTCCServicePostEvent','/usr/local/opt/runner/runprovisioner.sh',1,2,0,1,NULL,NULL,NULL,'UNUSED',NULL,0,1566321326" + "'kTCCServiceScreenCapture','/bin/bash',1,2,0,1,NULL,NULL,NULL,'UNUSED',NULL,0,1599831148" + "'kTCCServiceScreenCapture','/opt/hca/hosted-compute-agent',1,2,4,1,NULL,NULL,0,'UNUSED',NULL,0,1687786159" "'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','/bin/bash',1,2,0,1,NULL,NULL,NULL,'UNUSED',NULL,0,1583997993" + "'kTCCServiceSystemPolicyAllFiles','/opt/hca/start_hca.sh',1,2,0,1,NULL,NULL,NULL,'UNUSED',NULL,0,1583997993" + "'kTCCServiceSystemPolicyAllFiles','/usr/libexec/sshd-keygen-wrapper',1,0,4,1,X'fade0c000000003c0000000100000006000000020000001d636f6d2e6170706c652e737368642d6b657967656e2d7772617070657200000000000003',NULL,0,'UNUSED',NULL,0,1639660695" + "'kTCCServiceSystemPolicyAllFiles','/usr/local/opt/runner/runprovisioner.sh',1,2,0,1,NULL,NULL,NULL,'UNUSED',NULL,0,1583997993" + "'kTCCServiceSystemPolicyAllFiles','com.apple.Terminal',0,2,4,1,X'fade0c000000003000000001000000060000000200000012636f6d2e6170706c652e5465726d696e616c000000000003',NULL,0,'UNUSED',NULL,0,1678990068" "'kTCCServiceSystemPolicyAllFiles','com.microsoft.wdav',0,2,4,1,NULL,NULL,NULL,'UNUSED',NULL,0,1643970979" "'kTCCServiceSystemPolicyAllFiles','com.microsoft.wdav.epsext',0,2,4,1,NULL,NULL,NULL,'UNUSED',NULL,0,1643970979" "'kTCCServiceSystemPolicyNetworkVolumes','/bin/bash',1,2,0,1,NULL,NULL,NULL,'UNUSED',NULL,0,1583997993" "'kTCCServiceSystemPolicyNetworkVolumes','com.apple.Terminal',0,2,4,1,X'fade0c000000003000000001000000060000000200000012636f6d2e6170706c652e5465726d696e616c000000000003',NULL,0,'UNUSED',NULL,0,1678990068" - "'kTCCServiceAccessibility','/opt/hca/hosted-compute-agent',1,2,4,1,NULL,NULL,0,'UNUSED',NULL,NULL,1592919552" - "'kTCCServiceAppleEvents','/opt/hca/hosted-compute-agent',1,2,3,1,NULL,NULL,0,'com.apple.finder',X'fade0c000000002c00000001000000060000000200000010636f6d2e6170706c652e66696e64657200000003',NULL,1592919552" - "'kTCCServiceMicrophone','/opt/hca/hosted-compute-agent',1,2,4,1,NULL,NULL,NULL,'UNUSED',NULL,NULL,1736467200" - "'kTCCServiceScreenCapture','/opt/hca/hosted-compute-agent',1,2,4,1,NULL,NULL,0,'UNUSED',NULL,0,1687786159" - "'kTCCServiceAccessibility','/opt/hca/start_hca.sh',1,2,0,1,NULL,NULL,NULL,'UNUSED',NULL,0,1566321319" - "'kTCCServicePostEvent','/opt/hca/start_hca.sh',1,2,0,1,NULL,NULL,NULL,'UNUSED',NULL,0,1566321326" - "'kTCCServiceSystemPolicyAllFiles','/opt/hca/start_hca.sh',1,2,0,1,NULL,NULL,NULL,'UNUSED',NULL,0,1583997993" - "'kTCCServiceMicrophone','/opt/hca/start_hca.sh',1,2,0,1,NULL,NULL,NULL,'UNUSED',NULL,NULL,1576661342" ) for values in "${systemValuesArray[@]}"; do - if is_Sonoma || is_Sequoia; then - # TCC access table in Sonoma has extra 4 columns: pid, pid_version, boot_uuid, last_reminded + if ! is_Ventura; then + # TCC access table in Sonoma and later has extra 4 columns: pid, pid_version, boot_uuid, last_reminded configure_system_tccdb "$values,NULL,NULL,'UNUSED',${values##*,}" else configure_system_tccdb "$values" @@ -52,40 +58,50 @@ done # $HOME/Library/Application\ Support/com.apple.TCC/TCC.db userValuesArray=( - "'kTCCServiceUbiquity','com.apple.mail',0,2,0,1,NULL,NULL,NULL,'UNUSED',NULL,NULL,1551941469" - "'kTCCServiceUbiquity','com.apple.TextEdit',0,2,0,1,X'fade0c000000003000000001000000060000000200000012636f6d2e6170706c652e5465787445646974000000000003',NULL,NULL,'UNUSED',NULL,0,1566368356" - "'kTCCServiceUbiquity','com.apple.CloudDocs.MobileDocumentsFileProvider',0,2,0,1,X'fade0c000000004c0000000100000006000000020000002f636f6d2e6170706c652e436c6f7564446f63732e4d6f62696c65446f63756d656e747346696c6550726f76696465720000000003',NULL,NULL,'UNUSED',NULL,0,1570793290" - "'kTCCServiceAppleEvents','/usr/local/opt/runner/runprovisioner.sh',1,2,0,1,NULL,NULL,0,'com.apple.systemevents',NULL,NULL,1574241374" - "'kTCCServiceSystemPolicyAllFiles','/usr/local/opt/runner/runprovisioner.sh',1,2,0,1,NULL,NULL,NULL,'UNUSED',NULL,0,1583997993" - "'kTCCServiceAppleEvents','/usr/libexec/sshd-keygen-wrapper',1,2,3,1,X'fade0c000000003c0000000100000006000000020000001d636f6d2e6170706c652e737368642d6b657967656e2d7772617070657200000000000003',NULL,0,'com.apple.systemevents',X'fade0c000000003400000001000000060000000200000016636f6d2e6170706c652e73797374656d6576656e7473000000000003',NULL,1644564201" - "'kTCCServiceAppleEvents','com.apple.Terminal',0,2,0,1,X'fade0c000000003000000001000000060000000200000012636f6d2e6170706c652e5465726d696e616c000000000003',NULL,0,'com.apple.systemevents',X'fade0c000000003400000001000000060000000200000016636f6d2e6170706c652e73797374656d6576656e7473000000000003',NULL,1591180478" - "'kTCCServiceAppleEvents','/usr/libexec/sshd-keygen-wrapper',1,2,0,1,X'fade0c000000003c0000000100000006000000020000001d636f6d2e6170706c652e737368642d6b657967656e2d7772617070657200000000000003',NULL,0,'com.apple.finder',X'fade0c000000002c00000001000000060000000200000010636f6d2e6170706c652e66696e64657200000003',NULL,1591357685" - "'kTCCServiceAppleEvents','/bin/bash',1,2,0,1,NULL,NULL,0,'com.apple.systemevents',NULL,NULL,1591532620" - "'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" + "'kTCCServiceAccessibility','/bin/bash',1,2,0,1,NULL,NULL,NULL,'UNUSED',NULL,0,1583997993" + "'kTCCServiceAccessibility','/usr/bin/osascript',1,2,0,1,NULL,NULL,NULL,'UNUSED',NULL,0,1566321319" + "'kTCCServiceAccessibility','com.apple.Terminal',0,2,0,1,X'fade0c000000003000000001000000060000000200000012636f6d2e6170706c652e5465726d696e616c000000000003',NULL,NULL,'UNUSED',NULL,0,1591180502" + "'kTCCServiceAppleEvents','/Library/Application Support/Veertu/Anka/addons/ankarund',1,2,3,1,NULL,NULL,0,'com.apple.Terminal',X'fade0c000000003000000001000000060000000200000012636f6d2e6170706c652e5465726d696e616c000000000003',NULL,1655808179" "'kTCCServiceAppleEvents','/Library/Application Support/Veertu/Anka/addons/ankarund',1,2,3,1,NULL,NULL,0,'com.apple.finder',X'fade0c000000002c00000001000000060000000200000010636f6d2e6170706c652e66696e64657200000003',NULL,1629294900" "'kTCCServiceAppleEvents','/Library/Application Support/Veertu/Anka/addons/ankarund',1,2,3,1,NULL,NULL,0,'com.apple.systemevents',X'fade0c000000003400000001000000060000000200000016636f6d2e6170706c652e73797374656d6576656e7473000000000003',NULL,164456761" - "'kTCCServiceAppleEvents','/Library/Application Support/Veertu/Anka/addons/ankarund',1,2,3,1,NULL,NULL,0,'com.apple.Terminal',X'fade0c000000003000000001000000060000000200000012636f6d2e6170706c652e5465726d696e616c000000000003',NULL,1655808179" + "'kTCCServiceAppleEvents','/bin/bash',1,2,0,1,NULL,NULL,0,'com.apple.finder',NULL,NULL,1592919552" + "'kTCCServiceAppleEvents','/bin/bash',1,2,0,1,NULL,NULL,0,'com.apple.systemevents',NULL,NULL,1591532620" + "'kTCCServiceAppleEvents','/usr/bin/osascript',1,2,0,1,NULL,NULL,0,'com.apple.finder',NULL,NULL,1592919552" + "'kTCCServiceAppleEvents','/usr/bin/osascript',1,2,0,1,NULL,NULL,0,'com.apple.systemevents',NULL,NULL,1591532620" + "'kTCCServiceAppleEvents','/opt/hca/hosted-compute-agent',1,2,3,1,NULL,NULL,0,'com.apple.finder',X'fade0c000000002c00000001000000060000000200000010636f6d2e6170706c652e66696e64657200000003',NULL,1592919552" + "'kTCCServiceAppleEvents','/opt/hca/hosted-compute-agent',1,2,3,1,NULL,NULL,0,'com.apple.systemevents',X'fade0c000000003400000001000000060000000200000016636f6d2e6170706c652e73797374656d6576656e7473000000000003',NULL,1592919552" + "'kTCCServiceAppleEvents','/opt/hca/start_hca.sh',1,2,0,1,NULL,NULL,0,'com.apple.systemevents',NULL,NULL,1574241374" + "'kTCCServiceAppleEvents','/usr/libexec/sshd-keygen-wrapper',1,2,0,1,X'fade0c000000003c0000000100000006000000020000001d636f6d2e6170706c652e737368642d6b657967656e2d7772617070657200000000000003',NULL,0,'com.apple.finder',X'fade0c000000002c00000001000000060000000200000010636f6d2e6170706c652e66696e64657200000003',NULL,1591357685" + "'kTCCServiceAppleEvents','/usr/libexec/sshd-keygen-wrapper',1,2,3,1,X'fade0c000000003c0000000100000006000000020000001d636f6d2e6170706c652e737368642d6b657967656e2d7772617070657200000000000003',NULL,0,'com.apple.systemevents',X'fade0c000000003400000001000000060000000200000016636f6d2e6170706c652e73797374656d6576656e7473000000000003',NULL,1644564201" "'kTCCServiceAppleEvents','/usr/libexec/sshd-keygen-wrapper',1,2,3,1,X'fade0c000000003c0000000100000006000000020000001d636f6d2e6170706c652e737368642d6b657967656e2d7772617070657200000000000003',NULL,0,'com.apple.Terminal',X'fade0c000000003000000001000000060000000200000012636f6d2e6170706c652e5465726d696e616c000000000003',NULL,1650386089" - "'kTCCServicePostEvent','/bin/bash',1,2,0,1,NULL,NULL,NULL,'UNUSED',NULL,0,1583997993" "'kTCCServiceAppleEvents','/usr/local/opt/runner/provisioner/provisioner',1,2,3,1,NULL,NULL,0,'com.apple.finder',X'fade0c000000002c00000001000000060000000200000010636f6d2e6170706c652e66696e64657200000003',NULL,1592919552" - "'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.systemevents',X'fade0c000000003400000001000000060000000200000016636f6d2e6170706c652e73797374656d6576656e7473000000000003',NULL,1592919552" + "'kTCCServiceAppleEvents','/usr/local/opt/runner/runprovisioner.sh',1,2,0,1,NULL,NULL,0,'com.apple.systemevents',NULL,NULL,1574241374" + "'kTCCServiceAppleEvents','com.apple.Terminal',0,2,0,1,X'fade0c000000003000000001000000060000000200000012636f6d2e6170706c652e5465726d696e616c000000000003',NULL,0,'com.apple.systemevents',X'fade0c000000003400000001000000060000000200000016636f6d2e6170706c652e73797374656d6576656e7473000000000003',NULL,1591180478" + "'kTCCServiceBluetoothAlways','/opt/hca/hosted-compute-agent',1,2,3,1,NULL,NULL,NULL,'UNUSED',NULL,NULL,1736467200" + "'kTCCServiceBluetoothAlways','/usr/local/opt/runner/provisioner/provisioner',1,2,3,1,NULL,NULL,NULL,'UNUSED',NULL,NULL,1736467200" "'kTCCServiceMicrophone','/opt/hca/hosted-compute-agent',1,2,4,1,NULL,NULL,NULL,'UNUSED',NULL,NULL,1736467200" - "'kTCCServiceAppleEvents','/opt/hca/hosted-compute-agent',1,2,3,1,NULL,NULL,0,'com.apple.finder',X'fade0c000000002c00000001000000060000000200000010636f6d2e6170706c652e66696e64657200000003',NULL,1592919552" + "'kTCCServiceMicrophone','/opt/hca/start_hca.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" + "'kTCCServiceMicrophone','/usr/local/opt/runner/runprovisioner.sh',1,2,0,1,NULL,NULL,NULL,'UNUSED',NULL,NULL,1576661342" + "'kTCCServiceMicrophone','com.apple.CoreSimulator.SimulatorTrampoline',0,2,0,1,NULL,NULL,NULL,'UNUSED',NULL,NULL,1576347152" + "'kTCCServicePostEvent','/bin/bash',1,2,0,1,NULL,NULL,NULL,'UNUSED',NULL,0,1583997993" "'kTCCServiceScreenCapture','/opt/hca/hosted-compute-agent',1,2,4,1,NULL,NULL,0,'UNUSED',NULL,0,1687786159" - "'kTCCServiceAppleEvents','/opt/hca/hosted-compute-agent',1,2,3,1,NULL,NULL,0,'com.apple.systemevents',X'fade0c000000003400000001000000060000000200000016636f6d2e6170706c652e73797374656d6576656e7473000000000003',NULL,1592919552" - "'kTCCServiceAppleEvents','/opt/hca/start_hca.sh',1,2,0,1,NULL,NULL,0,'com.apple.systemevents',NULL,NULL,1574241374" + "'kTCCServiceScreenCapture','/usr/local/opt/runner/provisioner/provisioner',1,2,4,1,NULL,NULL,0,'UNUSED',NULL,0,1687786159" + "'kTCCServiceScreenCapture','/bin/bash',1,2,0,1,NULL,NULL,NULL,'UNUSED',NULL,0,1583997993" + "'kTCCServiceScreenCapture','/usr/bin/osascript',1,2,0,1,NULL,NULL,NULL,'UNUSED',NULL,0,1566321319" + "'kTCCServiceScreenCapture','com.apple.Terminal',0,2,4,1,X'fade0c000000003000000001000000060000000200000012636f6d2e6170706c652e5465726d696e616c000000000003',NULL,0,'UNUSED',NULL,0,1678990068" "'kTCCServiceSystemPolicyAllFiles','/opt/hca/start_hca.sh',1,2,0,1,NULL,NULL,NULL,'UNUSED',NULL,0,1583997993" - "'kTCCServiceMicrophone','/opt/hca/start_hca.sh',1,2,0,1,NULL,NULL,NULL,'UNUSED',NULL,NULL,1576661342" + "'kTCCServiceSystemPolicyAllFiles','/usr/local/opt/runner/runprovisioner.sh',1,2,0,1,NULL,NULL,NULL,'UNUSED',NULL,0,1583997993" + "'kTCCServiceUbiquity','/System/Library/PrivateFrameworks/PhotoLibraryServices.framework/Versions/A/Support/photolibraryd',1,2,5,1,NULL,NULL,NULL,'UNUSED',NULL,0,1619461750" + "'kTCCServiceUbiquity','com.apple.CloudDocs.MobileDocumentsFileProvider',0,2,0,1,X'fade0c000000004c0000000100000006000000020000002f636f6d2e6170706c652e436c6f7564446f63732e4d6f62696c65446f63756d656e747346696c6550726f76696465720000000003',NULL,NULL,'UNUSED',NULL,0,1570793290" + "'kTCCServiceUbiquity','com.apple.PassKitCore',0,2,5,1,NULL,NULL,NULL,'UNUSED',NULL,0,1619516250" + "'kTCCServiceUbiquity','com.apple.TextEdit',0,2,0,1,X'fade0c000000003000000001000000060000000200000012636f6d2e6170706c652e5465787445646974000000000003',NULL,NULL,'UNUSED',NULL,0,1566368356" + "'kTCCServiceUbiquity','com.apple.mail',0,2,0,1,NULL,NULL,NULL,'UNUSED',NULL,NULL,1551941469" ) for values in "${userValuesArray[@]}"; do - if is_Sonoma || is_Sequoia; then - # TCC access table in Sonoma has extra 4 columns: pid, pid_version, boot_uuid, last_reminded + if ! is_Ventura; then + # TCC access table in Sonoma and later has extra 4 columns: pid, pid_version, boot_uuid, last_reminded configure_user_tccdb "$values,NULL,NULL,'UNUSED',${values##*,}" else configure_user_tccdb "$values" diff --git a/images/macos/scripts/build/install-android-sdk.sh b/images/macos/scripts/build/install-android-sdk.sh index 1cabb1c905..10854358e8 100644 --- a/images/macos/scripts/build/install-android-sdk.sh +++ b/images/macos/scripts/build/install-android-sdk.sh @@ -12,9 +12,9 @@ add_filtered_installation_components() { local tools_array=("$@") for item in ${tools_array[@]}; do - # take the last argument after splitting string by ';'' and '-'' - version=$(echo "${item##*[-;]}") - if [[ "$(printf "${minimum_version}\n${version}\n" | sort -V | head -n1)" == "$minimum_version" ]]; then + # Take the last version number that appears after the last '-' or ';' + item_version=$(echo "$item" | grep -oE '[-;][0-9.]+' | grep -oE '[0-9.]+') + if [[ "$(printf "${minimum_version}\n${item_version}\n" | sort -V | head -n1)" == "$minimum_version" ]]; then components+=($item) fi done diff --git a/images/macos/scripts/build/install-common-utils.sh b/images/macos/scripts/build/install-common-utils.sh index d5aa901330..4514d276bc 100644 --- a/images/macos/scripts/build/install-common-utils.sh +++ b/images/macos/scripts/build/install-common-utils.sh @@ -15,18 +15,9 @@ for package in $common_packages; do brew install hashicorp/tap/packer ;; - cmake) - # Pin cmake bottle to 3.31.6 due to a backward compatibility issue with the latest version - # https://github.com/actions/runner-images/issues/11926 - cmake_commit="b4e46db74e74a8c1650b38b1da222284ce1ec5ce" - cmake_rb_link="https://raw.githubusercontent.com/Homebrew/homebrew-core/$cmake_commit/Formula/c/cmake.rb" - cmake_rb_path=$(download_with_retry "$cmake_rb_link") - brew install "$cmake_rb_path" - ;; - tcl-tk@8) brew_smart_install "$package" - if is_VenturaX64 || is_SonomaX64; then + if is_VenturaX64 || is_SonomaX64 || is_SequoiaX64; then # 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 @@ -70,6 +61,7 @@ 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 diff --git a/images/macos/scripts/build/install-edge.sh b/images/macos/scripts/build/install-edge.sh index 1bf8ac177c..edefd36f11 100644 --- a/images/macos/scripts/build/install-edge.sh +++ b/images/macos/scripts/build/install-edge.sh @@ -19,7 +19,12 @@ echo "Installing Microsoft Edge WebDriver..." edge_driver_version_file_path=$(download_with_retry "https://msedgedriver.microsoft.com/LATEST_RELEASE_${edge_version_major}_MACOS") edge_driver_latest_version=$(iconv -f utf-16 -t utf-8 "$edge_driver_version_file_path" | tr -d '\r') -edge_driver_url="https://msedgedriver.microsoft.com/${edge_driver_latest_version}/edgedriver_mac64.zip" + +if is_Arm64; then + edge_driver_url="https://msedgedriver.microsoft.com/${edge_driver_latest_version}/edgedriver_mac64_m1.zip" +else + edge_driver_url="https://msedgedriver.microsoft.com/${edge_driver_latest_version}/edgedriver_mac64.zip" +fi echo "Compatible version of WebDriver: ${edge_driver_latest_version}" diff --git a/images/macos/scripts/build/install-python.sh b/images/macos/scripts/build/install-python.sh index 084f88b894..5f3668afbc 100644 --- a/images/macos/scripts/build/install-python.sh +++ b/images/macos/scripts/build/install-python.sh @@ -11,9 +11,11 @@ echo "Installing Python Tooling" # Close Finder window close_finder_window -echo "Brew Installing Python 3" -brew_smart_install "python@3.12" +# Installing latest Homebrew Python 3 to handle python3 and pip3 symlinks +echo "Brew Installing default Python 3" +brew_smart_install "python3" +# Pipx has its own Python dependency echo "Installing pipx" if is_Arm64; then diff --git a/images/macos/scripts/build/install-ruby.sh b/images/macos/scripts/build/install-ruby.sh index 413e89349e..0f81a35e91 100644 --- a/images/macos/scripts/build/install-ruby.sh +++ b/images/macos/scripts/build/install-ruby.sh @@ -8,49 +8,49 @@ source ~/utils/utils.sh arch=$(get_arch) DEFAULT_RUBY_VERSION=$(get_toolset_value '.ruby.default') +RUBY_PATH=$AGENT_TOOLSDIRECTORY/Ruby +TOOLSET_VERSIONS=$(get_toolset_value '.toolcache[] | select(.name | contains("Ruby")) | .arch.'$arch'.versions[]') + echo "Installing Ruby..." brew_smart_install "ruby@${DEFAULT_RUBY_VERSION}" + +echo "Set Ruby ${DEFAULT_RUBY_VERSION} as default" if [[ $arch == "arm64" ]]; then export PATH=/opt/homebrew/opt/ruby@${DEFAULT_RUBY_VERSION}/bin:$PATH - ruby_suffix="macos-13-arm64" else export PATH=/usr/local/opt/ruby@${DEFAULT_RUBY_VERSION}/bin:$PATH - ruby_suffix="macos-latest" fi +echo "Setting up gem environment" GEM_PATH=$(gem env|awk '/EXECUTABLE DIRECTORY/ {print $4}') echo "GEM_PATH=$GEM_PATH" >> $HOME/.bashrc + if [[ $arch == "arm64" ]]; then echo 'export PATH="$GEM_PATH:/opt/homebrew/opt/ruby@'${DEFAULT_RUBY_VERSION}'/bin:$PATH"' >> $HOME/.bashrc else echo 'export PATH="$GEM_PATH:/usr/local/opt/ruby@'${DEFAULT_RUBY_VERSION}'/bin:$PATH"' >> $HOME/.bashrc fi -echo "Install Ruby from toolset..." -[ -n "$API_PAT" ] && authString=(-H "Authorization: token ${API_PAT}") -PACKAGE_TAR_NAMES=$(curl "${authString[@]}" -fsSL "https://api.github.com/repos/ruby/ruby-builder/releases/latest" | jq -r '.assets[].name') -TOOLSET_VERSIONS=$(get_toolset_value '.toolcache[] | select(.name | contains("Ruby")) | .arch.'$arch'.versions[]') -RUBY_PATH=$AGENT_TOOLSDIRECTORY/Ruby - -echo "Check if Ruby hostedtoolcache folder exists..." +echo "Check if Ruby hostedtoolcache folder exists" if [[ ! -d $RUBY_PATH ]]; then - mkdir -p $RUBY_PATH + mkdir -p "$RUBY_PATH" fi -echo "ruby path - $RUBY_PATH" for toolset_version in ${TOOLSET_VERSIONS[@]}; do - package_tar_name=$(echo "$PACKAGE_TAR_NAMES" | grep "^ruby-${toolset_version}-${ruby_suffix}.tar.gz$" | egrep -v "rc|preview" | sort -V | tail -1) + echo "Installing Ruby version: $toolset_version..." + download_url=$(resolve_github_release_asset_url "ruby/ruby-builder" "contains(\"darwin-$arch.tar.gz\")" "ruby-$toolset_version" "$API_PAT") + package_tar_name="${download_url##*/}" ruby_version=$(echo "$package_tar_name" | cut -d'-' -f 2) ruby_version_path="$RUBY_PATH/$ruby_version" - echo "Create Ruby $ruby_version directory..." - mkdir -p $ruby_version_path + echo "Create Ruby $ruby_version directory" + mkdir -p "$ruby_version_path" echo "Downloading tar archive $package_tar_name" - archive_path=$(download_with_retry "https://github.com/ruby/ruby-builder/releases/download/toolcache/${package_tar_name}") + archive_path=$(download_with_retry "$download_url") echo "Expand $package_tar_name to the $ruby_version_path folder" - tar xf $archive_path -C $ruby_version_path + tar xf "$archive_path" -C "$ruby_version_path" complete_file_path=$ruby_version_path/$arch.complete if [[ ! -f $complete_file_path ]]; then echo "Create complete file" diff --git a/images/macos/scripts/build/install-runner-package.sh b/images/macos/scripts/build/install-runner-package.sh deleted file mode 100644 index 9560d1a1b7..0000000000 --- a/images/macos/scripts/build/install-runner-package.sh +++ /dev/null @@ -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" diff --git a/images/macos/scripts/docs-gen/Generate-SoftwareReport.ps1 b/images/macos/scripts/docs-gen/Generate-SoftwareReport.ps1 index 054b7a1289..ad2bce12bf 100644 --- a/images/macos/scripts/docs-gen/Generate-SoftwareReport.ps1 +++ b/images/macos/scripts/docs-gen/Generate-SoftwareReport.ps1 @@ -37,12 +37,12 @@ $languageAndRuntime.AddNodes($(Get-ClangLLVMVersions)) $languageAndRuntime.AddNodes($(Get-GccVersions)) $languageAndRuntime.AddNodes($(Get-FortranVersions)) $languageAndRuntime.AddToolVersion("Kotlin", $(Get-KotlinVersion)) -if ((-not $os.IsSequoia)) { +if (($os.IsVentura -or $os.IsSonoma)) { $languageAndRuntime.AddToolVersion("Mono", $(Get-MonoVersion)) } $languageAndRuntime.AddToolVersion("Node.js", $(Get-NodeVersion)) $languageAndRuntime.AddToolVersion("Perl", $(Get-PerlVersion)) -if ((-not $os.IsVenturaArm64) -and (-not $os.IsSonomaArm64) -and (-not $os.IsSequoiaArm64)) { +if ((-not $os.IsArm64)) { $languageAndRuntime.AddToolVersion("PHP", $(Get-PHPVersion)) } $languageAndRuntime.AddToolVersion("Python3", $(Get-Python3Version)) @@ -53,12 +53,12 @@ $packageManagement = $installedSoftware.AddHeader("Package Management") $packageManagement.AddToolVersion("Bundler", $(Get-BundlerVersion)) $packageManagement.AddToolVersion("Carthage", $(Get-CarthageVersion)) $packageManagement.AddToolVersion("CocoaPods", $(Get-CocoaPodsVersion)) -if ((-not $os.IsVenturaArm64) -and (-not $os.IsSonomaArm64) -and (-not $os.IsSequoiaArm64)) { +if ((-not $os.IsArm64)) { $packageManagement.AddToolVersion("Composer", $(Get-ComposerVersion)) } $packageManagement.AddToolVersion("Homebrew", $(Get-HomebrewVersion)) $packageManagement.AddToolVersion("NPM", $(Get-NPMVersion)) -if ((-not $os.IsSequoia)) { +if (($os.IsVentura -or $os.IsSonoma)) { $packageManagement.AddToolVersion("NuGet", $(Get-NuGetVersion)) } $packageManagement.AddToolVersion("Pip3", $(Get-Pip3Version)) @@ -116,8 +116,8 @@ $tools.AddToolVersion("Xcode Command Line Tools", $(Get-XcodeCommandLineToolsVer $tools.AddToolVersion("Xcodes", $(Get-XcodesVersion)) # Linters -$linters = $installedSoftware.AddHeader("Linters") -if ((-not $os.IsVenturaArm64) -and (-not $os.IsSonomaArm64) -and (-not $os.IsSequoiaArm64)) { +if ((-not $os.IsArm64)) { + $linters = $installedSoftware.AddHeader("Linters") $linters.AddToolVersion("SwiftLint", $(Get-SwiftLintVersion)) } @@ -174,15 +174,12 @@ $android.AddTable($androidTable) $androidEnv = $android.AddHeader("Environment variables") $androidEnv.AddTable($(Build-AndroidEnvironmentTable)) -if ($os.IsSonoma -or $os.IsVentura -or $os.IsSequoiaX64) { +if ($os.IsSonoma -or $os.IsVentura -or $os.IsSequoia) { $miscellaneous = $installedSoftware.AddHeader("Miscellaneous") -} - -if ($os.IsSonoma -or $os.IsVentura) { $miscellaneous.AddToolVersion("Tcl/Tk", $(Get-TclTkVersion)) } -if ($os.IsSonomaX64 -or $os.IsVenturaX64 -or $os.IsSequoiaX64) { +if ((-not $os.IsArm64)) { Write-Host "Adding environment variables for parallels" @@ -203,5 +200,5 @@ if (-not (Test-Path $OutputDirectory)) { New-Item -Path $OutputDirectory -ItemTy # Write final reports # Write-Host $markdownExtended -$softwareReport.ToJson() | Out-File -FilePath "${OutputDirectory}/systeminfo.json" -Encoding UTF8NoBOM -$softwareReport.ToMarkdown() | Out-File -FilePath "${OutputDirectory}/systeminfo.md" -Encoding UTF8NoBOM +$softwareReport.ToJson() | Out-File -FilePath "${OutputDirectory}/software-report.json" -Encoding UTF8NoBOM +$softwareReport.ToMarkdown() | Out-File -FilePath "${OutputDirectory}/software-report.md" -Encoding UTF8NoBOM diff --git a/images/macos/scripts/docs-gen/SoftwareReport.Browsers.psm1 b/images/macos/scripts/docs-gen/SoftwareReport.Browsers.psm1 index 4acc8eac76..86683917da 100644 --- a/images/macos/scripts/docs-gen/SoftwareReport.Browsers.psm1 +++ b/images/macos/scripts/docs-gen/SoftwareReport.Browsers.psm1 @@ -9,15 +9,10 @@ function Build-BrowserSection { [ToolVersionNode]::new("Google Chrome", $(Get-ChromeVersion)) [ToolVersionNode]::new("Google Chrome for Testing", $(Get-ChromeForTestingVersion)) [ToolVersionNode]::new("ChromeDriver", $(Get-ChromeDriverVersion)) + [ToolVersionNode]::new("Microsoft Edge", $(Get-EdgeVersion)) + [ToolVersionNode]::new("Microsoft Edge WebDriver", $(Get-EdgeDriverVersion)) ) - if ((-not $os.IsVenturaArm64) -and (-not $os.IsSonomaArm64) -and (-not $os.IsSequoiaArm64)) { - $nodes += @( - [ToolVersionNode]::new("Microsoft Edge", $(Get-EdgeVersion)) - [ToolVersionNode]::new("Microsoft Edge WebDriver", $(Get-EdgeDriverVersion)) - ) - } - $nodes += @( [ToolVersionNode]::new("Mozilla Firefox", $(Get-FirefoxVersion)) [ToolVersionNode]::new("geckodriver", $(Get-GeckodriverVersion)) @@ -79,7 +74,7 @@ function Get-GeckodriverVersion { function Get-SeleniumVersion { $os = Get-OSVersion - if ($os.IsVenturaArm64 -or $os.IsSonomaArm64 -or $os.IsSequoiaArm64) { + if ($os.IsArm64) { $cellarPath = "/opt/homebrew/Cellar" } else { $cellarPath = "/usr/local/Cellar" diff --git a/images/macos/scripts/docs-gen/SoftwareReport.Common.psm1 b/images/macos/scripts/docs-gen/SoftwareReport.Common.psm1 index d3a6bddab2..de55609a18 100644 --- a/images/macos/scripts/docs-gen/SoftwareReport.Common.psm1 +++ b/images/macos/scripts/docs-gen/SoftwareReport.Common.psm1 @@ -231,10 +231,8 @@ function Get-WgetVersion { } 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" - $packerVersion = [regex]::matches($result, "(\d+.){2}\d+").Value - return $packerVersion + $packerVersion = Run-Command "packer --version" | Select-String "Packer" | Select-Object -First 1 | Take-Part -Part 1 + return ($packerVersion.Trim("v")) } function Get-OpenSSLVersion { diff --git a/images/macos/scripts/docs-gen/SoftwareReport.Java.psm1 b/images/macos/scripts/docs-gen/SoftwareReport.Java.psm1 index af762405b4..771e033e8a 100644 --- a/images/macos/scripts/docs-gen/SoftwareReport.Java.psm1 +++ b/images/macos/scripts/docs-gen/SoftwareReport.Java.psm1 @@ -2,7 +2,7 @@ function Get-JavaVersions { $defaultJavaPath = (Get-Item env:JAVA_HOME).value $os = Get-OSVersion - if ($os.IsVenturaArm64 -or $os.IsSonomaArm64 -or $os.IsSequoiaArm64) { + if ($os.IsArm64) { $javaVersions = Get-Item env:JAVA_HOME_*_arm64 } else { $javaVersions = Get-Item env:JAVA_HOME_*_X64 diff --git a/images/macos/scripts/docs-gen/SoftwareReport.Toolcache.psm1 b/images/macos/scripts/docs-gen/SoftwareReport.Toolcache.psm1 index 67576ec0d5..6eb2f3d4fe 100644 --- a/images/macos/scripts/docs-gen/SoftwareReport.Toolcache.psm1 +++ b/images/macos/scripts/docs-gen/SoftwareReport.Toolcache.psm1 @@ -37,7 +37,7 @@ function Build-ToolcacheSection { $nodes = @() - if ((-not $os.IsVenturaArm64) -and (-not $os.IsSonoma) -and (-not $os.IsSequoia)) { + if ($os.IsVenturaX64) { $nodes += @( [ToolVersionsListNode]::new("PyPy", $(Get-ToolcachePyPyVersions), '^\d+\.\d+', "List") ) diff --git a/images/macos/scripts/docs-gen/SoftwareReport.Xcode.psm1 b/images/macos/scripts/docs-gen/SoftwareReport.Xcode.psm1 index 54035e8ce2..054f1499c0 100644 --- a/images/macos/scripts/docs-gen/SoftwareReport.Xcode.psm1 +++ b/images/macos/scripts/docs-gen/SoftwareReport.Xcode.psm1 @@ -225,17 +225,18 @@ function Build-XcodeSimulatorsTable { } } return [PSCustomObject] @{ - "OS" = $runtime.name + "Name" = $runtime.name + "OS" = $runtime.version "Simulators" = [String]::Join("
", $sortedRuntimeDevices) } } | Sort-Object { # Sort rule 1 - $sdkNameParts = $_."OS".Split(" ") + $sdkNameParts = $_."Name".Split(" ") $platformName = [String]::Join(" ", $sdkNameParts[0..($sdkNameParts.Length - 2)]) return Get-XcodePlatformOrder $platformName }, { # Sort rule 2 - $sdkNameParts = $_."OS".Split(" ") + $sdkNameParts = $_."Name".Split(" ") return [System.Version]::Parse($sdkNameParts[-1]) } } diff --git a/images/macos/scripts/helpers/Common.Helpers.psm1 b/images/macos/scripts/helpers/Common.Helpers.psm1 index ec65b7c98c..bf98adc44c 100644 --- a/images/macos/scripts/helpers/Common.Helpers.psm1 +++ b/images/macos/scripts/helpers/Common.Helpers.psm1 @@ -35,9 +35,10 @@ function Get-OSVersion { IsSonoma = $($osVersion.Version.Major -eq "14") IsSonomaArm64 = $($osVersion.Version.Major -eq "14" -and $processorArchitecture -eq "arm64") IsSonomaX64 = $($osVersion.Version.Major -eq "14" -and $processorArchitecture -ne "arm64") - IsSequoia = $($osVersion.Version.Major -eq "15") - IsSequoiaArm64 = $($osVersion.Version.Major -eq "15" -and $processorArchitecture -eq "arm64") - IsSequoiaX64 = $($osVersion.Version.Major -eq "15" -and $processorArchitecture -ne "arm64") + IsSequoia = $($osVersion.Version.Major -eq "15") + IsSequoiaArm64 = $($osVersion.Version.Major -eq "15" -and $processorArchitecture -eq "arm64") + IsSequoiaX64 = $($osVersion.Version.Major -eq "15" -and $processorArchitecture -ne "arm64") + IsTahoe = $($osVersion.Version.Major -eq "26") } } diff --git a/images/macos/scripts/helpers/Xcode.Installer.psm1 b/images/macos/scripts/helpers/Xcode.Installer.psm1 index e65d745eae..fa4fd96137 100644 --- a/images/macos/scripts/helpers/Xcode.Installer.psm1 +++ b/images/macos/scripts/helpers/Xcode.Installer.psm1 @@ -42,46 +42,6 @@ function Invoke-DownloadXcodeArchive { return $tempXipDirectory } -function Resolve-ExactXcodeVersion { - param ( - [Parameter(Mandatory)] - [string] $Version - ) - - # if toolset string contains spaces, consider it as a full name of Xcode - if ($Version -match "\s") { - return $Version - } - - $semverVersion = [SemVer]::Parse($Version) - $availableVersions = Get-AvailableXcodeVersions - $satisfiedVersions = $availableVersions | Where-Object { $semverVersion -eq $_.stableSemver } - - return $satisfiedVersions | Select-Object -Last 1 -ExpandProperty rawVersion -} - -function Get-AvailableXcodeVersions { - $rawVersionsList = Invoke-XCVersion -Arguments "list" | ForEach-Object { $_.Trim() } | Where-Object { $_ -match "^\d" } - $availableVersions = $rawVersionsList | ForEach-Object { - $partStable,$partMajor = $_.Split(" ", 2) - $semver = $stableSemver = [SemVer]::Parse($partStable) - - if ($partMajor) { - # Convert 'beta 3' -> 'beta.3', 'Release Candidate' -> 'releasecandidate', 'GM Seed 2' -> 'gmseed.2' - $normalizedLabel = $partMajor.toLower() -replace " (\d)", '.$1' -replace " ([a-z])", '$1' - $semver = [SemVer]::new($stableSemver.Major, $stableSemver.Minor, $stableSemver.Patch, $normalizedLabel) - } - - return [PSCustomObject]@{ - semver = $semver - rawVersion = $_ - stableSemver = $stableSemver - } - } - - return $availableVersions | Sort-Object -Property semver -} - function Expand-XcodeXipArchive { param ( [Parameter(Mandatory)] @@ -145,18 +105,16 @@ function Approve-XcodeLicense { } } -function Install-XcodeAdditionalPackages { +function Install-XcodeAdditionalComponents { param ( [Parameter(Mandatory)] [string] $Version ) - Write-Host "Installing additional packages for Xcode $Version..." + Write-Host "Installing additional MetalToolchain component for Xcode $Version..." $xcodeRootPath = Get-XcodeRootPath -Version $Version - $packages = Get-ChildItem -Path "$xcodeRootPath/Contents/Resources/Packages" -Filter "*.pkg" -File - $packages | ForEach-Object { - Invoke-ValidateCommand "sudo installer -pkg $($_.FullName) -target / -allowUntrusted" - } + $xcodeBuildPath = Get-XcodeToolPath -XcodeRootPath $xcodeRootPath -ToolName "xcodebuild" + Invoke-ValidateCommand "$xcodeBuildPath -downloadComponent MetalToolchain" | Out-Null } function Invoke-XcodeRunFirstLaunch { @@ -170,7 +128,7 @@ function Invoke-XcodeRunFirstLaunch { Invoke-ValidateCommand "sudo $xcodeRootPath -runFirstLaunch" } -function Install-AdditionalSimulatorRuntimes { +function Install-XcodeAdditionalSimulatorRuntimes { param ( [Parameter(Mandatory)] [string] $Version, @@ -358,3 +316,14 @@ function Invoke-ValidateCommand { Receive-Job -Job $job } } + +function Update-DyldCache { + param ( + [Parameter(Mandatory)] + [string] $Version + ) + + Write-Host "Updating dyld shared cache for Xcode $Version ..." + Switch-Xcode -Version $Version + Invoke-ValidateCommand "xcrun simctl runtime dyld_shared_cache update --all" +} diff --git a/images/macos/scripts/helpers/utils.sh b/images/macos/scripts/helpers/utils.sh index df45ad58fd..8849cbcdfc 100644 --- a/images/macos/scripts/helpers/utils.sh +++ b/images/macos/scripts/helpers/utils.sh @@ -45,6 +45,10 @@ is_Arm64() { [ "$(arch)" = "arm64" ] } +is_Tahoe() { + [ "$OSTYPE" = "darwin25" ] +} + is_Sequoia() { [ "$OSTYPE" = "darwin24" ] } diff --git a/images/macos/scripts/tests/BasicTools.Tests.ps1 b/images/macos/scripts/tests/BasicTools.Tests.ps1 index a86d71a53b..b6e882413f 100644 --- a/images/macos/scripts/tests/BasicTools.Tests.ps1 +++ b/images/macos/scripts/tests/BasicTools.Tests.ps1 @@ -56,7 +56,7 @@ Describe "Perl" { } } -Describe "Tcl/Tk" -Skip:($os.IsVenturaArm64 -or $os.IsSonomaArm64 -or $os.IsSequoia) { +Describe "Tcl/Tk" -Skip:(-not ($os.IsVenturaX64 -or $os.IsSonomaX64)) { It "libtcl" { Test-Path "/usr/local/lib/libtcl8.6.dylib" | Should -BeTrue Test-Path "/usr/local/lib/libtk8.6.dylib" | Should -BeTrue @@ -69,7 +69,7 @@ Describe "bazelisk" { } } -Describe "Github CLI" { +Describe "GitHub CLI" { It "GitHub CLI" { "gh --version" | Should -ReturnZeroExitCode } diff --git a/images/macos/scripts/tests/Browsers.Tests.ps1 b/images/macos/scripts/tests/Browsers.Tests.ps1 index 2e10478677..d981829743 100644 --- a/images/macos/scripts/tests/Browsers.Tests.ps1 +++ b/images/macos/scripts/tests/Browsers.Tests.ps1 @@ -41,7 +41,7 @@ Describe "Selenium server" { } } -Describe "Edge" -Skip:($os.IsVenturaArm64 -or $os.IsSonomaArm64 -or $os.IsSequoiaArm64) { +Describe "Edge" { It "Microsoft Edge" { $edgeLocation = "/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge" $edgeLocation | Should -Exist diff --git a/images/macos/scripts/tests/Databases.Tests.ps1 b/images/macos/scripts/tests/Databases.Tests.ps1 deleted file mode 100644 index 38539136b2..0000000000 --- a/images/macos/scripts/tests/Databases.Tests.ps1 +++ /dev/null @@ -1,23 +0,0 @@ -Import-Module "$PSScriptRoot/../helpers/Common.Helpers.psm1" - -$os = Get-OSVersion - -Describe "MongoDB" -Skip:($os.IsVentura -or $os.IsSonoma -or $os.IsSequoia) { - It "" -TestCases @( - @{ ToolName = "mongo" } - @{ ToolName = "mongod" } - ) { - $toolsetVersion = (Get-ToolsetContent).mongodb.version - (&$ToolName --version)[2].Split('"')[-2] | Should -BeLike "$toolsetVersion*" - } -} - -Describe "PostgreSQL" -Skip:($os.IsVentura -or $os.IsSonoma -or $os.IsSequoia) { - It "PostgreSQL version should correspond to the version in the toolset" { - $toolsetVersion = (Get-ToolsetContent).postgresql.version - # Client version - (psql --version).split()[-2] | Should -BeLike "$toolsetVersion*" - # Server version - (pg_config --version).split()[-2] | Should -BeLike "$toolsetVersion*" - } -} diff --git a/images/macos/scripts/tests/Linters.Tests.ps1 b/images/macos/scripts/tests/Linters.Tests.ps1 index 93ac37e0e8..e3121ce677 100644 --- a/images/macos/scripts/tests/Linters.Tests.ps1 +++ b/images/macos/scripts/tests/Linters.Tests.ps1 @@ -2,7 +2,7 @@ Import-Module "$PSScriptRoot/Helpers.psm1" -DisableNameChecking $os = Get-OSVersion -Describe "SwiftLint" -Skip:($os.IsVenturaArm64 -or $os.IsSonomaArm64 -or $os.IsSequoiaArm64) { +Describe "SwiftLint" -Skip:($os.IsArm64) { It "SwiftLint" { "swiftlint version" | Should -ReturnZeroExitCode } diff --git a/images/macos/scripts/tests/OpenSSL.Tests.ps1 b/images/macos/scripts/tests/OpenSSL.Tests.ps1 index 1fb8886a8a..150eb25590 100644 --- a/images/macos/scripts/tests/OpenSSL.Tests.ps1 +++ b/images/macos/scripts/tests/OpenSSL.Tests.ps1 @@ -1,5 +1,7 @@ Import-Module "$PSScriptRoot/../helpers/Common.Helpers.psm1" +$os = Get-OSVersion + Describe "OpenSSL" { Context "OpenSSL Version" { It "OpenSSL is available" { @@ -7,17 +9,31 @@ Describe "OpenSSL" { } } - Context "OpenSSL 1.1 Path Check" { + Context "OpenSSL 1.1 Path Check" -Skip:($os.IsTahoe) { It "OpenSSL 1.1 path exists" { $openSSLpath = brew --prefix openssl@1.1 $openSSLpath | Should -Exist } } - Context "OpenSSL 1.1 is default" { + Context "OpenSSL 1.1 is default" -Skip:($os.IsTahoe) { It "Default OpenSSL version is 1.1" { $commandResult = Get-CommandResult "openssl version" $commandResult.Output | Should -Match "OpenSSL 1.1" } } + + Context "OpenSSL 3 Path Check" -Skip:(-not $os.IsTahoe) { + It "OpenSSL 3 path exists" { + $openSSLpath = brew --prefix openssl@3 + $openSSLpath | Should -Exist + } + } + + Context "OpenSSL 3 is default" -Skip:(-not $os.IsTahoe) { + It "Default OpenSSL version is 3" { + $commandResult = Get-CommandResult "openssl version" + $commandResult.Output | Should -Match "OpenSSL 3" + } + } } diff --git a/images/macos/scripts/tests/PHP.Tests.ps1 b/images/macos/scripts/tests/PHP.Tests.ps1 index 2a4ff8774c..2c6c1e34bf 100644 --- a/images/macos/scripts/tests/PHP.Tests.ps1 +++ b/images/macos/scripts/tests/PHP.Tests.ps1 @@ -3,7 +3,7 @@ Import-Module "$PSScriptRoot/../helpers/Common.Helpers.psm1" $os = Get-OSVersion Describe "PHP" { - Context "PHP" -Skip:($os.IsVenturaArm64 -or $os.IsSonomaArm64 -or $os.IsSequoiaArm64) { + Context "PHP" -Skip:($os.IsArm64) { It "PHP Path" { Get-ToolPath "php" | Should -Not -BeLike "/usr/bin/php*" } @@ -14,7 +14,7 @@ Describe "PHP" { } } - Context "Composer" -Skip:($os.IsVenturaArm64 -or $os.IsSonomaArm64 -or $os.IsSequoiaArm64) { + Context "Composer" -Skip:($os.IsArm64) { It "Composer" { "composer --version" | Should -ReturnZeroExitCode } diff --git a/images/macos/scripts/tests/Python.Tests.ps1 b/images/macos/scripts/tests/Python.Tests.ps1 index 079f76ba37..d5a7d3ad7e 100644 --- a/images/macos/scripts/tests/Python.Tests.ps1 +++ b/images/macos/scripts/tests/Python.Tests.ps1 @@ -8,13 +8,13 @@ Describe "Python3" { "python3 --version" | Should -ReturnZeroExitCode } - if ($os.IsVenturaArm64 -or $os.IsSonomaArm64 -or $os.IsSequoiaArm64) { + if ($os.IsArm64) { It "Python 3 is installed under /opt/homebrew/bin/" { Get-ToolPath "python3" | Should -BeLike "/opt/homebrew/bin/*" } } else { It "Python 3 is installed under /usr/local/bin" { - Get-ToolPath "python3" | Should -BeLike "/usr/local/bin*" + Get-ToolPath "python3" | Should -BeLike "/usr/local/bin/*" } } @@ -26,25 +26,15 @@ Describe "Python3" { "pipx --version" | Should -ReturnZeroExitCode } - It "Pip 3 and Python 3 came from the same brew formula" { + It "Pip 3 and Python 3 came from the same path prefix" { $pip3Path = Split-Path (readlink (which pip3)) $python3Path = Split-Path (readlink (which python3)) $pip3Path | Should -BeExactly $python3Path } -} - -Describe "Python2" -Skip:($os.IsVentura -or $os.IsSonoma -or $os.IsSequoia) { - It "Python 2 is available" { - "/Library/Frameworks/Python.framework/Versions/2.7/bin/python --version" | Should -ReturnZeroExitCode + It "Pip 3 and Python 3 came from brew formula" { + Split-Path (readlink (which pip3)) | Should -BeLike "*/Cellar/*" + Split-Path (readlink (which python3)) | Should -BeLike "*/Cellar/*" } - It "Pip 2 is available" { - "/Library/Frameworks/Python.framework/Versions/2.7/bin/pip --version" | Should -ReturnZeroExitCode - } - - It "2to3 symlink does not point to Python 2" { - $2to3path = (Get-ChildItem (Get-Command 2to3).Path).Target - $2to3path | Should -Not -BeLike '/Frameworks/Python.framework/Versions/2.*' - } } diff --git a/images/macos/scripts/tests/RubyGem.Tests.ps1 b/images/macos/scripts/tests/RubyGem.Tests.ps1 index 13a3a6f2c9..c05c6a444e 100644 --- a/images/macos/scripts/tests/RubyGem.Tests.ps1 +++ b/images/macos/scripts/tests/RubyGem.Tests.ps1 @@ -25,15 +25,3 @@ Describe "Fastlane" { "fastlane --version" | Should -ReturnZeroExitCode } } - -Describe "xcpretty" -Skip:($os.IsVentura -or $os.IsSonoma -or $os.IsSequoia) { - It "xcpretty" { - "xcpretty --version" | Should -ReturnZeroExitCode - } -} - -Describe "jazzy" -Skip:($os.IsVentura -or $os.IsSonoma -or $os.IsSequoia) { - It "jazzy" { - "jazzy --version" | Should -ReturnZeroExitCode - } -} diff --git a/images/macos/scripts/tests/RunnerCache.Tests.ps1 b/images/macos/scripts/tests/RunnerCache.Tests.ps1 deleted file mode 100644 index 8c8109ef07..0000000000 --- a/images/macos/scripts/tests/RunnerCache.Tests.ps1 +++ /dev/null @@ -1,7 +0,0 @@ -Describe "RunnerCache" { - Context "runner cache directory not empty" { - It " not empty" -TestCases @{ RunnerCachePath = "/opt/runner-cache" } { - (Get-ChildItem -Path "$RunnerCachePath/*.tar.gz" -Recurse).Count | Should -BeGreaterThan 0 - } - } -} diff --git a/images/macos/scripts/tests/Rust.Tests.ps1 b/images/macos/scripts/tests/Rust.Tests.ps1 index 34eab12206..df68ab1435 100644 --- a/images/macos/scripts/tests/Rust.Tests.ps1 +++ b/images/macos/scripts/tests/Rust.Tests.ps1 @@ -18,21 +18,4 @@ Describe "Rust" { "cargo --version" | Should -ReturnZeroExitCode } } - Context "Cargo dependencies" -Skip:($os.IsVentura -or $os.IsSonoma -or $os.IsSequoia) { - It "bindgen" { - "bindgen --version" | Should -ReturnZeroExitCode - } - - It "cbindgen" { - "cbindgen --version" | Should -ReturnZeroExitCode - } - - It "Cargo audit" { - "cargo audit --version" | Should -ReturnZeroExitCode - } - - It "Cargo outdated" { - "cargo outdated --version" | Should -ReturnZeroExitCode - } - } } diff --git a/images/macos/scripts/tests/System.Tests.ps1 b/images/macos/scripts/tests/System.Tests.ps1 index 767f9d88a9..8f26505190 100644 --- a/images/macos/scripts/tests/System.Tests.ps1 +++ b/images/macos/scripts/tests/System.Tests.ps1 @@ -3,17 +3,16 @@ Import-Module "$PSScriptRoot/../helpers/Common.Helpers.psm1" $os = Get-OSVersion Describe "Disk free space" { - It "Image has more than 25GB free space" { - # we should have at least 25 GB of free space on macOS images + It "Image has more than 30GB free space" { + # we should have at least 30 GB of free space on macOS images # 10GB here: https://docs.microsoft.com/en-us/azure/devops/pipelines/agents/hosted?view=azure-devops#capabilities-and-limitations # 14GB here: https://docs.github.com/en/actions/using-github-hosted-runners/using-github-hosted-runners/about-github-hosted-runners#standard-github-hosted-runners-for-public-repositories # 30GB due to: https://github.com/actions/runner-images/issues/10511 - # 25GB is the current minimum due to the size of Xcode 16.4 and it's dependencies $diskInfo = Get-PSDrive "/" $totalSpaceGB = [math]::Floor(($diskInfo.Used + $diskInfo.Free) / 1GB) $freeSpaceGB = [math]::Floor($diskInfo.Free / 1GB) Write-Host " [i] Disk size: ${totalSpaceGB} GB; Free space: ${freeSpaceGB} GB" - $freeSpaceGB | Should -BeGreaterOrEqual 25 + $freeSpaceGB | Should -BeGreaterOrEqual 30 } } @@ -31,16 +30,6 @@ Describe "Certificate" { } } -Describe "Audio device" -Skip:($os.IsVentura -or $os.IsSonoma -or $os.IsSequoia) { - It "Sox is installed" { - "sox --version" | Should -ReturnZeroExitCode - } - - It "SwitchAudioSource is installed" { - "SwitchAudioSource -c" | Should -ReturnZeroExitCode - } -} - Describe "AutomationModeTool" { It "Does not require user authentication" { automationmodetool | Out-String | Should -Match "DOES NOT REQUIRE" diff --git a/images/macos/scripts/tests/Toolcache.Tests.ps1 b/images/macos/scripts/tests/Toolcache.Tests.ps1 index 6a07313b63..98f229ab42 100644 --- a/images/macos/scripts/tests/Toolcache.Tests.ps1 +++ b/images/macos/scripts/tests/Toolcache.Tests.ps1 @@ -57,7 +57,7 @@ Describe "Toolcache" { } } - Context "Ruby" -Skip:($os.IsVenturaArm64 -or $os.IsSonomaArm64 -or $os.IsSequoiaArm64) { + Context "Ruby" { $rubyDirectory = Join-Path $toolcacheDirectory "Ruby" $rubyPackage = $packages | Where-Object { $_.ToolName -eq "Ruby" } | Select-Object -First 1 $testCase = @{ RubyDirectory = $rubyDirectory } @@ -99,7 +99,7 @@ Describe "Toolcache" { } } } - Context "PyPy" -Skip:($os.IsVenturaArm64 -or $os.IsSonoma -or $os.IsSequoia) { + Context "PyPy" -Skip:(-not $os.IsVenturaX64) { $pypyDirectory = Join-Path $toolcacheDirectory "PyPy" $pypyPackage = $packages | Where-Object { $_.ToolName -eq "pypy" } | Select-Object -First 1 $testCase = @{ PypyDirectory = $pypyDirectory } diff --git a/images/macos/templates/macOS-13.anka.pkr.hcl b/images/macos/templates/macOS-13.anka.pkr.hcl index 1aca6f1398..f764115fd6 100644 --- a/images/macos/templates/macOS-13.anka.pkr.hcl +++ b/images/macos/templates/macOS-13.anka.pkr.hcl @@ -236,7 +236,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", diff --git a/images/macos/templates/macOS-13.arm64.anka.pkr.hcl b/images/macos/templates/macOS-13.arm64.anka.pkr.hcl index 166d696354..55137b0ebf 100644 --- a/images/macos/templates/macOS-13.arm64.anka.pkr.hcl +++ b/images/macos/templates/macOS-13.arm64.anka.pkr.hcl @@ -237,7 +237,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", @@ -249,7 +248,8 @@ build { "${path.root}/../scripts/build/install-chrome.sh", "${path.root}/../scripts/build/install-firefox.sh", "${path.root}/../scripts/build/install-bicep.sh", - "${path.root}/../scripts/build/install-codeql-bundle.sh" + "${path.root}/../scripts/build/install-codeql-bundle.sh", + "${path.root}/../scripts/build/install-edge.sh" ] } diff --git a/images/macos/templates/macOS-14.anka.pkr.hcl b/images/macos/templates/macOS-14.anka.pkr.hcl index 0558594b9f..0ebdf537c4 100644 --- a/images/macos/templates/macOS-14.anka.pkr.hcl +++ b/images/macos/templates/macOS-14.anka.pkr.hcl @@ -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-swiftlint.sh", "${path.root}/../scripts/build/install-openjdk.sh", @@ -274,15 +273,21 @@ build { 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}/software-report/Generate-SoftwareReport.ps1\" -OutputDirectory \"${local.image_folder}/output\" -ImageName ${var.build_id}", "pwsh -File \"${local.image_folder}/tests/RunAll-Tests.ps1\"" ] } provisioner "file" { - destination = "${path.root}/../../image-output/" + destination = "${path.root}/../../image-output/macos-14-Readme.md" direction = "download" - source = "${local.image_folder}/output/" + source = "${local.image_folder}/output/software-report.md" + } + + provisioner "file" { + destination = "${path.root}/../../image-output/software-report.json" + direction = "download" + source = "${local.image_folder}/output/software-report.json" } provisioner "shell" { diff --git a/images/macos/templates/macOS-14.arm64.anka.pkr.hcl b/images/macos/templates/macOS-14.arm64.anka.pkr.hcl index 14f702f727..79fe9628c9 100644 --- a/images/macos/templates/macOS-14.arm64.anka.pkr.hcl +++ b/images/macos/templates/macOS-14.arm64.anka.pkr.hcl @@ -236,7 +236,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", @@ -249,7 +248,8 @@ build { "${path.root}/../scripts/build/install-chrome.sh", "${path.root}/../scripts/build/install-firefox.sh", "${path.root}/../scripts/build/install-bicep.sh", - "${path.root}/../scripts/build/install-codeql-bundle.sh" + "${path.root}/../scripts/build/install-codeql-bundle.sh", + "${path.root}/../scripts/build/install-edge.sh" ] } @@ -272,15 +272,21 @@ build { 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}/software-report/Generate-SoftwareReport.ps1\" -OutputDirectory \"${local.image_folder}/output\" -ImageName ${var.build_id}", "pwsh -File \"${local.image_folder}/tests/RunAll-Tests.ps1\"" ] } provisioner "file" { - destination = "${path.root}/../../image-output/" + destination = "${path.root}/../../image-output/macos-14-arm64-Readme.md" direction = "download" - source = "${local.image_folder}/output/" + source = "${local.image_folder}/output/software-report.md" + } + + provisioner "file" { + destination = "${path.root}/../../image-output/software-report.json" + direction = "download" + source = "${local.image_folder}/output/software-report.json" } provisioner "shell" { diff --git a/images/macos/templates/macOS-15.anka.pkr.hcl b/images/macos/templates/macOS-15.anka.pkr.hcl index de40a7c4de..d39e8f3ff0 100644 --- a/images/macos/templates/macOS-15.anka.pkr.hcl +++ b/images/macos/templates/macOS-15.anka.pkr.hcl @@ -234,7 +234,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", @@ -273,15 +272,21 @@ build { 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}/software-report/Generate-SoftwareReport.ps1\" -OutputDirectory \"${local.image_folder}/output\" -ImageName ${var.build_id}", "pwsh -File \"${local.image_folder}/tests/RunAll-Tests.ps1\"" ] } provisioner "file" { - destination = "${path.root}/../../image-output/" + destination = "${path.root}/../../image-output/macos-15-Readme.md" direction = "download" - source = "${local.image_folder}/output/" + source = "${local.image_folder}/output/software-report.md" + } + + provisioner "file" { + destination = "${path.root}/../../image-output/software-report.json" + direction = "download" + source = "${local.image_folder}/output/software-report.json" } provisioner "shell" { diff --git a/images/macos/templates/macOS-15.arm64.anka.pkr.hcl b/images/macos/templates/macOS-15.arm64.anka.pkr.hcl index 2d79d13a80..ab260c3068 100644 --- a/images/macos/templates/macOS-15.arm64.anka.pkr.hcl +++ b/images/macos/templates/macOS-15.arm64.anka.pkr.hcl @@ -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", @@ -248,7 +247,8 @@ build { "${path.root}/../scripts/build/install-chrome.sh", "${path.root}/../scripts/build/install-firefox.sh", "${path.root}/../scripts/build/install-bicep.sh", - "${path.root}/../scripts/build/install-codeql-bundle.sh" + "${path.root}/../scripts/build/install-codeql-bundle.sh", + "${path.root}/../scripts/build/install-edge.sh" ] } @@ -271,15 +271,21 @@ build { 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}/software-report/Generate-SoftwareReport.ps1\" -OutputDirectory \"${local.image_folder}/output\" -ImageName ${var.build_id}", "pwsh -File \"${local.image_folder}/tests/RunAll-Tests.ps1\"" ] } provisioner "file" { - destination = "${path.root}/../../image-output/" + destination = "${path.root}/../../image-output/macos-15-arm64-Readme.md" direction = "download" - source = "${local.image_folder}/output/" + source = "${local.image_folder}/output/software-report.md" + } + + provisioner "file" { + destination = "${path.root}/../../image-output/software-report.json" + direction = "download" + source = "${local.image_folder}/output/software-report.json" } provisioner "shell" { diff --git a/images/macos/templates/macOS-26.arm64.anka.pkr.hcl b/images/macos/templates/macOS-26.arm64.anka.pkr.hcl new file mode 100644 index 0000000000..ae4e525701 --- /dev/null +++ b/images/macos/templates/macOS-26.arm64.anka.pkr.hcl @@ -0,0 +1,297 @@ +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 = "8G" +} + +variable "image_os" { + type = string + default = "macos26" +} + +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" + log_level = "debug" +} + +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}/../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-26.json" + } + + provisioner "shell" { + execute_command = "sudo sh -c '{{ .Vars }} {{ .Path }}'" + inline = [ + "mv ${local.image_folder}/docs-gen ${local.image_folder}/software-report", + "mkdir ~/utils", + "mv ${local.image_folder}/helpers/invoke-tests.sh ~/utils", + "mv ${local.image_folder}/helpers/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", + "${path.root}/../scripts/build/install-rosetta.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-autologin.sh", + "${path.root}/../scripts/build/configure-auto-updates.sh", + "${path.root}/../scripts/build/configure-ntpconf.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-ruby.sh", + "${path.root}/../scripts/build/install-rubygems.sh", + "${path.root}/../scripts/build/install-git.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-openjdk.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-cocoapods.sh", + "${path.root}/../scripts/build/install-android-sdk.sh", + "${path.root}/../scripts/build/install-vcpkg.sh", + "${path.root}/../scripts/build/install-safari.sh", + "${path.root}/../scripts/build/install-chrome.sh", + "${path.root}/../scripts/build/install-firefox.sh", + "${path.root}/../scripts/build/install-bicep.sh", + "${path.root}/../scripts/build/install-codeql-bundle.sh", + "${path.root}/../scripts/build/install-edge.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" { + environment_vars = ["IMAGE_FOLDER=${local.image_folder}"] + execute_command = "chmod +x {{ .Path }}; source $HOME/.bash_profile; {{ .Vars }} pwsh -f {{ .Path }}" + script = "${path.root}/../scripts/build/Configure-Xcode-Simulators.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\" -ImageName ${var.build_id}", + "pwsh -File \"${local.image_folder}/tests/RunAll-Tests.ps1\"" + ] + } + + provisioner "file" { + destination = "${path.root}/../../image-output/macos-26-arm64-Readme.md" + direction = "download" + source = "${local.image_folder}/output/software-report.md" + } + + provisioner "file" { + destination = "${path.root}/../../image-output/software-report.json" + direction = "download" + source = "${local.image_folder}/output/software-report.json" + } + + 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" + ] + } +} diff --git a/images/macos/toolsets/toolset-13.json b/images/macos/toolsets/toolset-13.json index 631922b83a..3d181f1068 100644 --- a/images/macos/toolsets/toolset-13.json +++ b/images/macos/toolsets/toolset-13.json @@ -3,22 +3,22 @@ "default": "15.2", "x64": { "versions": [ - { "link": "15.2", "version": "15.2.0+15C500b", "install_runtimes": "default", "sha256": "04E93680C6DDBEC84666531BE412DE778AFC8EAC6AB2037F4C2BE7290818B59B"}, - { "link": "15.1", "version": "15.1.0+15C65", "install_runtimes": "default", "sha256": "857D8DB537BAC82BF99DE0E1D3895D214D4D02101C1340CEF3DAF6E821BA1D05"}, - { "link": "15.0.1", "version": "15.0.1+15A507", "symlinks": ["15.0"], "install_runtimes": "default", "sha256": "5AC17AE6060CAFC3C7112C6DA0B153450BE21F1DE6632777FBA9FBC9D999C9E8"}, - { "link": "14.3.1", "version": "14.3.1+14E300c","symlinks": ["14.3"], "install_runtimes": "default", "sha256": "B5CC7BF37447C32A971B37D71C7DA1AF7ABB45CEE4B96FE126A1D3B0D2C260AF"}, - { "link": "14.2", "version": "14.2.0+14C18", "install_runtimes": "default", "sha256": "686B9D53CA49E50D563BC0104B1E8B4F7CCFE80064A6D689965FB819BF8EFE72"}, - { "link": "14.1", "version": "14.1.0+14B47b", "install_runtimes": "default", "sha256": "12F8A3AEF78BF354470AD8B351ADDD925C8EDAD888137D138CA50A8130EB9F2F"} + { "link": "15.2", "filename": "Xcode_15.2", "version": "15.2.0+15C500b", "install_runtimes": "default", "sha256": "04E93680C6DDBEC84666531BE412DE778AFC8EAC6AB2037F4C2BE7290818B59B"}, + { "link": "15.1", "filename": "Xcode_15.1", "version": "15.1.0+15C65", "install_runtimes": "default", "sha256": "857D8DB537BAC82BF99DE0E1D3895D214D4D02101C1340CEF3DAF6E821BA1D05"}, + { "link": "15.0.1", "filename": "Xcode_15.0.1", "version": "15.0.1+15A507", "symlinks": ["15.0"], "install_runtimes": "default", "sha256": "5AC17AE6060CAFC3C7112C6DA0B153450BE21F1DE6632777FBA9FBC9D999C9E8"}, + { "link": "14.3.1", "filename": "Xcode_14.3.1", "version": "14.3.1+14E300c","symlinks": ["14.3"], "install_runtimes": "default", "sha256": "B5CC7BF37447C32A971B37D71C7DA1AF7ABB45CEE4B96FE126A1D3B0D2C260AF"}, + { "link": "14.2", "filename": "Xcode_14.2", "version": "14.2.0+14C18", "install_runtimes": "default", "sha256": "686B9D53CA49E50D563BC0104B1E8B4F7CCFE80064A6D689965FB819BF8EFE72"}, + { "link": "14.1", "filename": "Xcode_14.1", "version": "14.1.0+14B47b", "install_runtimes": "default", "sha256": "12F8A3AEF78BF354470AD8B351ADDD925C8EDAD888137D138CA50A8130EB9F2F"} ] }, "arm64":{ "versions": [ - { "link": "15.2", "version": "15.2.0+15C500b", "install_runtimes": "default", "sha256": "04E93680C6DDBEC84666531BE412DE778AFC8EAC6AB2037F4C2BE7290818B59B"}, - { "link": "15.1", "version": "15.1.0+15C65", "install_runtimes": "default", "sha256": "857D8DB537BAC82BF99DE0E1D3895D214D4D02101C1340CEF3DAF6E821BA1D05"}, - { "link": "15.0.1", "version": "15.0.1+15A507", "symlinks": ["15.0"], "install_runtimes": "default", "sha256": "5AC17AE6060CAFC3C7112C6DA0B153450BE21F1DE6632777FBA9FBC9D999C9E8"}, - { "link": "14.3.1", "version": "14.3.1+14E300c","symlinks": ["14.3"], "install_runtimes": "default", "sha256": "B5CC7BF37447C32A971B37D71C7DA1AF7ABB45CEE4B96FE126A1D3B0D2C260AF"}, - { "link": "14.2", "version": "14.2.0+14C18", "install_runtimes": "default", "sha256": "686B9D53CA49E50D563BC0104B1E8B4F7CCFE80064A6D689965FB819BF8EFE72"}, - { "link": "14.1", "version": "14.1.0+14B47b", "install_runtimes": "default", "sha256": "12F8A3AEF78BF354470AD8B351ADDD925C8EDAD888137D138CA50A8130EB9F2F"} + { "link": "15.2", "filename": "Xcode_15.2", "version": "15.2.0+15C500b", "install_runtimes": "default", "sha256": "04E93680C6DDBEC84666531BE412DE778AFC8EAC6AB2037F4C2BE7290818B59B"}, + { "link": "15.1", "filename": "Xcode_15.1", "version": "15.1.0+15C65", "install_runtimes": "default", "sha256": "857D8DB537BAC82BF99DE0E1D3895D214D4D02101C1340CEF3DAF6E821BA1D05"}, + { "link": "15.0.1", "filename": "Xcode_15.0.1", "version": "15.0.1+15A507", "symlinks": ["15.0"], "install_runtimes": "default", "sha256": "5AC17AE6060CAFC3C7112C6DA0B153450BE21F1DE6632777FBA9FBC9D999C9E8"}, + { "link": "14.3.1", "filename": "Xcode_14.3.1", "version": "14.3.1+14E300c","symlinks": ["14.3"], "install_runtimes": "default", "sha256": "B5CC7BF37447C32A971B37D71C7DA1AF7ABB45CEE4B96FE126A1D3B0D2C260AF"}, + { "link": "14.2", "filename": "Xcode_14.2", "version": "14.2.0+14C18", "install_runtimes": "default", "sha256": "686B9D53CA49E50D563BC0104B1E8B4F7CCFE80064A6D689965FB819BF8EFE72"}, + { "link": "14.1", "filename": "Xcode_14.1", "version": "14.1.0+14B47b", "install_runtimes": "default", "sha256": "12F8A3AEF78BF354470AD8B351ADDD925C8EDAD888137D138CA50A8130EB9F2F"} ] } }, @@ -95,7 +95,8 @@ "versions": [ "12", "13", - "14" + "14", + "15" ] }, "dotnet": { @@ -135,14 +136,16 @@ "3.10.*", "3.11.*", "3.12.*", - "3.13.*" + "3.13.*", + "3.14.*" ] }, "arm64": { "versions": [ "3.11.*", "3.12.*", - "3.13.*" + "3.13.*", + "3.14.*" ] } } @@ -193,7 +196,8 @@ "versions": [ "1.22.*", "1.23.*", - "1.24.*" + "1.24.*", + "1.25.*" ] }, "arm64": { @@ -201,7 +205,8 @@ "versions": [ "1.22.*", "1.23.*", - "1.24.*" + "1.24.*", + "1.25.*" ] } } diff --git a/images/macos/toolsets/toolset-14.json b/images/macos/toolsets/toolset-14.json index de3f599229..09dd84c10b 100644 --- a/images/macos/toolsets/toolset-14.json +++ b/images/macos/toolsets/toolset-14.json @@ -5,6 +5,7 @@ "versions": [ { "link": "16.2", + "filename": "Xcode_16.2", "version": "16.2+16C5032a", "sha256": "0e367d06eb7c334ea143bada5e4422f56688aabff571bedf0d2ad9434b7290de", "install_runtimes": [ @@ -15,36 +16,42 @@ }, { "link": "16.1", + "filename": "Xcode_16.1", "version": "16.1+16B40", "sha256": "8ca961d55981f983d21b99a95a6b0ac04905b837f6e11346ee86d28f12afe720", "install_runtimes": "default" }, { "link": "15.4", + "filename": "Xcode_15.4", "version": "15.4.0+15F31d", "sha256": "82d3d61804ff3f4c7c82085e91dc701037ddaa770e542848b2477e22f4e8aa7a", "install_runtimes": "default" }, { "link": "15.3", + "filename": "Xcode_15.3", "version": "15.3.0+15E204a", "sha256": "f13f6a2e2df432c3008e394640b8549a18c285acd7fd148d6c4bac8c3a5af234", "install_runtimes": "default" }, { "link": "15.2", + "filename": "Xcode_15.2", "version": "15.2.0+15C500b", "sha256": "04E93680C6DDBEC84666531BE412DE778AFC8EAC6AB2037F4C2BE7290818B59B", "install_runtimes": "default" }, { "link": "15.1", + "filename": "Xcode_15.1", "version": "15.1.0+15C65", "sha256": "857D8DB537BAC82BF99DE0E1D3895D214D4D02101C1340CEF3DAF6E821BA1D05", "install_runtimes": "default" }, { "link": "15.0.1", + "filename": "Xcode_15.0.1", "version": "15.0.1+15A507", "sha256": "5AC17AE6060CAFC3C7112C6DA0B153450BE21F1DE6632777FBA9FBC9D999C9E8", "symlinks": ["15.0"], @@ -56,6 +63,7 @@ "versions": [ { "link": "16.2", + "filename": "Xcode_16.2", "version": "16.2+16C5032a", "sha256": "0e367d06eb7c334ea143bada5e4422f56688aabff571bedf0d2ad9434b7290de", "install_runtimes": [ @@ -67,36 +75,42 @@ }, { "link": "16.1", + "filename": "Xcode_16.1", "version": "16.1+16B40", "sha256": "8ca961d55981f983d21b99a95a6b0ac04905b837f6e11346ee86d28f12afe720", "install_runtimes": "default" }, { "link": "15.4", + "filename": "Xcode_15.4", "version": "15.4.0+15F31d", "sha256": "82d3d61804ff3f4c7c82085e91dc701037ddaa770e542848b2477e22f4e8aa7a", "install_runtimes": "default" }, { "link": "15.3", + "filename": "Xcode_15.3", "version": "15.3.0+15E204a", "sha256": "f13f6a2e2df432c3008e394640b8549a18c285acd7fd148d6c4bac8c3a5af234", "install_runtimes": "default" }, { "link": "15.2", + "filename": "Xcode_15.2", "version": "15.2.0+15C500b", "sha256": "04E93680C6DDBEC84666531BE412DE778AFC8EAC6AB2037F4C2BE7290818B59B", "install_runtimes": "default" }, { "link": "15.1", + "filename": "Xcode_15.1", "version": "15.1.0+15C65", "sha256": "857D8DB537BAC82BF99DE0E1D3895D214D4D02101C1340CEF3DAF6E821BA1D05", "install_runtimes": "default" }, { "link": "15.0.1", + "filename": "Xcode_15.0.1", "version": "15.0.1+15A507", "sha256": "5AC17AE6060CAFC3C7112C6DA0B153450BE21F1DE6632777FBA9FBC9D999C9E8", "symlinks": ["15.0"], @@ -108,29 +122,30 @@ "java": { "x64": { "default": "21", - "versions": [ "8", "11", "17", "21"] + "versions": [ "8", "11", "17", "21", "25" ] }, "arm64": { "default": "21", - "versions": [ "11", "17", "21"] + "versions": [ "11", "17", "21", "25" ] } }, "android": { "cmdline-tools": "commandlinetools-mac-10406996_latest.zip", "sdk-tools": "sdk-tools-darwin-4333796.zip", - "platform_min_version": "33", - "build_tools_min_version": "33.0.2", + "platform_min_version": "34", + "build_tools_min_version": "34.0.0", "extras": [ "android;m2repository", "google;m2repository", "google;google_play_services" ], "addons": [], "additional_tools": [ - "cmake;3.31.5" + "cmake;3.31.5", + "cmake;4.1.2" ], "ndk": { - "default": "26", + "default": "27", "versions": [ - "26", "27", "28" + "27", "28", "29" ] } }, @@ -178,9 +193,9 @@ }, "gcc": { "versions": [ - "12", "13", - "14" + "14", + "15" ] }, "dotnet": { @@ -188,13 +203,15 @@ "x64": { "versions": [ "8.0", - "9.0" + "9.0", + "10.0" ] }, "arm64": { "versions": [ "8.0", - "9.0" + "9.0", + "10.0" ] } } @@ -215,18 +232,19 @@ "arch": { "x64": { "versions": [ - "3.9.*", "3.10.*", "3.11.*", "3.12.*", - "3.13.*" + "3.13.*", + "3.14.*" ] }, "arm64": { "versions": [ "3.11.*", "3.12.*", - "3.13.*" + "3.13.*", + "3.14.*" ] } } @@ -238,16 +256,16 @@ "arch": { "x64": { "versions": [ - "18.*", "20.*", - "22.*" + "22.*", + "24.*" ] }, "arm64": { "versions": [ - "18.*", "20.*", - "22.*" + "22.*", + "24.*" ] } } @@ -262,7 +280,8 @@ "versions": [ "1.22.*", "1.23.*", - "1.24.*" + "1.24.*", + "1.25.*" ] }, "arm64": { @@ -270,7 +289,8 @@ "versions": [ "1.22.*", "1.23.*", - "1.24.*" + "1.24.*", + "1.25.*" ] } } @@ -280,7 +300,6 @@ "arch": { "x64": { "versions": [ - "3.1.*", "3.2.*", "3.3.*", "3.4.*" @@ -288,7 +307,6 @@ }, "arm64": { "versions": [ - "3.1.*", "3.2.*", "3.3.*", "3.4.*" @@ -304,7 +322,7 @@ "version": "15" }, "php": { - "version": "8.4" + "version": "8.5" }, "pwsh": { "version": "7.4" diff --git a/images/macos/toolsets/toolset-15.json b/images/macos/toolsets/toolset-15.json index 7c2434fe1f..466d963338 100644 --- a/images/macos/toolsets/toolset-15.json +++ b/images/macos/toolsets/toolset-15.json @@ -1,45 +1,66 @@ { "xcode": { - "default": "16", + "default": "16.4", "x64": { "versions": [ { - "link": "26_beta", - "version": "26.0.0-Beta+17A5241e", + "link": "26.2", + "filename": "Xcode_26.2_Universal", + "version": "26.2+17C52", + "sha256": "8f29ab6a9ac6670d3cf53545ffdb1c317d11607fa8db38fc56d3391df7783fbd", + "install_runtimes": "default" + }, + { + "link": "26.1.1", + "filename": "Xcode_26.1.1_Universal", + "version": "26.1.1+17B100", + "symlinks": ["26.1"], + "sha256": "ed55d55fa28455c11a65e0809ba8fdf7d83fdeb268aabf9af7fcc1ee911543eb", + "install_runtimes": "default" + }, + { + "link": "26.0.1", + "filename": "Xcode_26.0.1_Universal", + "version": "26.0.1+17A400", "symlinks": ["26.0"], - "sha256": "664ad6ec7a3139e9c43b95620c73f8950a802c3d469bb47e6d89f3eab9541b1c", + "sha256": "9881c457068c86ac91e94cca2d7116dfd01cb7179c22b0863b63c7f3bb7e7695", "install_runtimes": "default" }, { "link": "16.4", + "filename": "Xcode_16.4", "version": "16.4.0+16F6", "sha256": "2dbf65ba28fb85b34e72c14c529a42d5c3189ab0f11fb29fdebd5f4ee6c87900", "install_runtimes": [ - { "iOS": ["18.0", "18.1", "18.2", "18.3.1", "18.4", "18.5"] }, - { "watchOS": ["11.0", "11.1", "11.2", "11.4", "11.5"] }, - { "tvOS": ["18.0", "18.1", "18.2", "18.4", "18.5"] } + { "iOS": ["18.5", "18.6"] }, + { "watchOS": ["11.5"] }, + { "tvOS": ["18.5"] } ] }, { "link": "16.3", + "filename": "Xcode_16.3", "version": "16.3+16E140", "sha256": "c593177b73e45f31e1cf7ced131760d8aa8e1532f5bbf8ba11a4ded01da14fbb", "install_runtimes": "none" }, { "link": "16.2", + "filename": "Xcode_16.2", "version": "16.2+16C5032a", "sha256": "0e367d06eb7c334ea143bada5e4422f56688aabff571bedf0d2ad9434b7290de", "install_runtimes": "none" }, { "link": "16.1", + "filename": "Xcode_16.1", "version": "16.1+16B40", "sha256": "8ca961d55981f983d21b99a95a6b0ac04905b837f6e11346ee86d28f12afe720", "install_runtimes": "none" }, { "link": "16", + "filename": "Xcode_16", "version": "16.0.0+16A242d", "sha256": "4a26c3d102a55c7222fb145e0ee1503249c9c26c6e02dc64d783c8810b37b1e3", "symlinks": ["16.0"], @@ -50,43 +71,64 @@ "arm64":{ "versions": [ { - "link": "26_beta", - "version": "26.0.0-Beta+17A5241e", + "link": "26.2", + "filename": "Xcode_26.2_Universal", + "version": "26.2+17C52", + "sha256": "8f29ab6a9ac6670d3cf53545ffdb1c317d11607fa8db38fc56d3391df7783fbd", + "install_runtimes": "default" + }, + { + "link": "26.1.1", + "filename": "Xcode_26.1.1_Universal", + "version": "26.1.1+17B100", + "symlinks": ["26.1"], + "sha256": "ed55d55fa28455c11a65e0809ba8fdf7d83fdeb268aabf9af7fcc1ee911543eb", + "install_runtimes": "default" + }, + { + "link": "26.0.1", + "filename": "Xcode_26.0.1_Universal", + "version": "26.0.1+17A400", "symlinks": ["26.0"], - "sha256": "664ad6ec7a3139e9c43b95620c73f8950a802c3d469bb47e6d89f3eab9541b1c", - "install_runtimes": "none" + "sha256": "9881c457068c86ac91e94cca2d7116dfd01cb7179c22b0863b63c7f3bb7e7695", + "install_runtimes": "default" }, { "link": "16.4", + "filename": "Xcode_16.4", "version": "16.4.0+16F6", "sha256": "2dbf65ba28fb85b34e72c14c529a42d5c3189ab0f11fb29fdebd5f4ee6c87900", "install_runtimes": [ - { "iOS": ["18.0", "18.1", "18.2", "18.3.1", "18.4", "18.5"] }, - { "watchOS": ["11.0", "11.1", "11.2", "11.4", "11.5"] }, - { "tvOS": ["18.0", "18.1", "18.2", "18.4", "18.5"] }, - { "visionOS": ["2.0", "2.1", "2.2", "2.3", "2.4", "2.5"] } + { "iOS": ["18.5", "18.6"] }, + { "watchOS": ["11.5"] }, + { "tvOS": ["18.5"] }, + { "visionOS": ["2.3", "2.4", "2.5"] } ] }, { "link": "16.3", + "filename": "Xcode_16.3", "version": "16.3+16E140", "sha256": "c593177b73e45f31e1cf7ced131760d8aa8e1532f5bbf8ba11a4ded01da14fbb", "install_runtimes": "none" }, { "link": "16.2", + "filename": "Xcode_16.2", "version": "16.2+16C5032a", "sha256": "0e367d06eb7c334ea143bada5e4422f56688aabff571bedf0d2ad9434b7290de", "install_runtimes": "none" }, { "link": "16.1", + "filename": "Xcode_16.1", "version": "16.1+16B40", "sha256": "8ca961d55981f983d21b99a95a6b0ac04905b837f6e11346ee86d28f12afe720", "install_runtimes": "none" }, { "link": "16", + "filename": "Xcode_16", "version": "16.0.0+16A242d", "sha256": "4a26c3d102a55c7222fb145e0ee1503249c9c26c6e02dc64d783c8810b37b1e3", "symlinks": ["16.0"], @@ -98,11 +140,11 @@ "java": { "x64": { "default": "21", - "versions": [ "11", "17", "21"] + "versions": [ "11", "17", "21", "25" ] }, "arm64": { "default": "21", - "versions": [ "11", "17", "21"] + "versions": [ "11", "17", "21", "25" ] } }, "android": { @@ -115,12 +157,13 @@ ], "addons": [], "additional_tools": [ - "cmake;3.31.5" + "cmake;3.31.5", + "cmake;4.1.2" ], "ndk": { "default": "27", "versions": [ - "26", "27","28" + "27", "28", "29" ] } }, @@ -153,6 +196,7 @@ "perl", "pkgconf", "swiftformat", + "tcl-tk@8", "zstd", "ninja", "gmp", @@ -167,9 +211,9 @@ }, "gcc": { "versions": [ - "12", "13", - "14" + "14", + "15" ] }, "dotnet": { @@ -177,13 +221,15 @@ "x64": { "versions": [ "8.0", - "9.0" + "9.0", + "10.0" ] }, "arm64": { "versions": [ "8.0", - "9.0" + "9.0", + "10.0" ] } } @@ -204,18 +250,19 @@ "arch": { "x64": { "versions": [ - "3.9.*", "3.10.*", "3.11.*", "3.12.*", - "3.13.*" + "3.13.*", + "3.14.*" ] }, "arm64": { "versions": [ "3.11.*", "3.12.*", - "3.13.*" + "3.13.*", + "3.14.*" ] } } @@ -227,16 +274,16 @@ "arch": { "x64": { "versions": [ - "18.*", "20.*", - "22.*" + "22.*", + "24.*" ] }, "arm64": { "versions": [ - "18.*", "20.*", - "22.*" + "22.*", + "24.*" ] } } @@ -251,7 +298,8 @@ "versions": [ "1.22.*", "1.23.*", - "1.24.*" + "1.24.*", + "1.25.*" ] }, "arm64": { @@ -259,7 +307,8 @@ "versions": [ "1.22.*", "1.23.*", - "1.24.*" + "1.24.*", + "1.25.*" ] } } @@ -269,7 +318,6 @@ "arch": { "x64": { "versions": [ - "3.1.*", "3.2.*", "3.3.*", "3.4.*" @@ -277,7 +325,6 @@ }, "arm64": { "versions": [ - "3.1.*", "3.2.*", "3.3.*", "3.4.*" @@ -293,7 +340,7 @@ "version": "18" }, "php": { - "version": "8.4" + "version": "8.5" }, "pwsh": { "version": "7.4" diff --git a/images/macos/toolsets/toolset-26.json b/images/macos/toolsets/toolset-26.json new file mode 100644 index 0000000000..f033413abc --- /dev/null +++ b/images/macos/toolsets/toolset-26.json @@ -0,0 +1,197 @@ +{ + "xcode": { + "default": "26.0.1", + "arm64":{ + "versions": [ + { + "link": "26.2", + "filename": "Xcode_26.2_Universal", + "version": "26.2+17C52", + "sha256": "8f29ab6a9ac6670d3cf53545ffdb1c317d11607fa8db38fc56d3391df7783fbd", + "install_runtimes": "default" + }, + { + "link": "26.1.1", + "filename": "Xcode_26.1.1_Universal", + "version": "26.1.1+17B100", + "symlinks": ["26.1"], + "sha256": "ed55d55fa28455c11a65e0809ba8fdf7d83fdeb268aabf9af7fcc1ee911543eb", + "install_runtimes": "default" + }, + { + "link": "26.0.1", + "filename": "Xcode_26.0.1_Universal", + "version": "26.0.1+17A400", + "symlinks": ["26.0"], + "sha256": "9881c457068c86ac91e94cca2d7116dfd01cb7179c22b0863b63c7f3bb7e7695", + "install_runtimes": "default" + } + ] + } + }, + "java": { + "x64": { + "default": "21", + "versions": [ "11", "17", "21", "25" ] + }, + "arm64": { + "default": "21", + "versions": [ "11", "17", "21", "25" ] + } + }, + "android": { + "cmdline-tools": "commandlinetools-mac-12266719_latest.zip", + "sdk-tools": "sdk-tools-darwin-4333796.zip", + "platform_min_version": "35", + "build_tools_min_version": "35.0.0", + "extras": [ + "android;m2repository", "google;m2repository", "google;google_play_services" + ], + "addons": [], + "additional_tools": [ + "cmake;3.31.5", + "cmake;4.1.2" + ], + "ndk": { + "default": "27", + "versions": [ + "27","28", "29" + ] + } + }, + "powershellModules": [ + { + "name": "Az", + "versions": [ + "14.3.0" + ] + }, + { "name": "Pester" }, + { "name": "PSScriptAnalyzer" } + ], + "brew": { + "common_packages": [ + "ant", + "aria2", + "azure-cli", + "bazelisk", + "carthage", + "cmake", + "gh", + "gnupg", + "gnu-tar", + "kotlin", + "libpq", + "libsodium", + "openssl", + "p7zip", + "packer", + "perl", + "pkgconf", + "swiftformat", + "zstd", + "ninja", + "gmp", + "yq", + "unxip", + "xcbeautify", + "xcodes" + ], + "cask_packages": [ + "parallels" + ] + }, + "gcc": { + "versions": [ + "13", + "14", + "15" + ] + }, + "dotnet": { + "arch":{ + "arm64": { + "versions": [ + "8.0", + "9.0", + "10.0" + ] + } + } + }, + "ruby": { + "default": "3.4", + "rubygems": [ + "cocoapods", + "bundler", + "fastlane" + ] + }, + "toolcache": [ + { + "name": "Python", + "url" : "https://raw.githubusercontent.com/actions/python-versions/main/versions-manifest.json", + "platform" : "darwin", + "arch": { + "arm64": { + "versions": [ + "3.11.*", + "3.12.*", + "3.13.*", + "3.14.*" + ] + } + } + }, + { + "name": "Node", + "url" : "https://raw.githubusercontent.com/actions/node-versions/main/versions-manifest.json", + "platform" : "darwin", + "arch": { + "arm64": { + "versions": [ + "20.*", + "22.*", + "24.*" + ] + } + } + }, + { + "name": "Go", + "url" : "https://raw.githubusercontent.com/actions/go-versions/main/versions-manifest.json", + "platform" : "darwin", + "arch": { + "arm64": { + "variable_template" : "GOROOT_{0}_{1}_ARM64", + "versions": [ + "1.23.*", + "1.24.*", + "1.25.*" + ] + } + } + }, + { + "name": "Ruby", + "arch": { + "arm64": { + "versions": [ + "3.2.*", + "3.3.*", + "3.4.*" + ] + } + } + } + ], + "node": { + "default": "24" + }, + "llvm": { + "version": "20" + }, + "pwsh": { + "version": "7.4" + } +} diff --git a/images/ubuntu-slim/Dockerfile b/images/ubuntu-slim/Dockerfile new file mode 100644 index 0000000000..82e7afc1ea --- /dev/null +++ b/images/ubuntu-slim/Dockerfile @@ -0,0 +1,60 @@ +FROM ubuntu:24.04 AS base + +ARG IMAGE_VERSION=1.0.0 +ARG IMAGE_OWNER="GitHub" + +ENV IMAGE_OWNER=$IMAGE_OWNER +ENV ImageVersion=$IMAGE_VERSION +ENV IMAGE_VERSION=$IMAGE_VERSION +ENV ImageOS="Linux" +ENV IMAGE_TARGET_PLATFORM="GitHub" +ENV POWERSHELL_DISTRIBUTION_CHANNEL="GitHub-Actions-$ImageOS" +ENV IMAGEDATA_NAME="ubuntu:24.04" +ENV NVM_DIR="/etc/skel/.nvm" +ENV HELPER_SCRIPTS="/tmp/scripts/helpers" +ENV INSTALLER_SCRIPT_FOLDER="/tmp/toolsets" + +# Avoid interactive prompts +ENV DEBIAN_FRONTEND=noninteractive + +COPY scripts/build /tmp/scripts/build +COPY scripts/helpers /tmp/scripts/helpers +COPY toolsets/ /tmp/toolsets/ +RUN find /tmp/scripts -name "*.sh" -type f -exec chmod +x {} \; + +COPY scripts/entrypoint.sh /opt/entrypoint.sh +RUN chmod +x /opt/entrypoint.sh + +RUN apt-get update && apt-get upgrade -y && apt-get install -y sudo lsb-release jq dpkg && \ + touch /run/.containerenv && \ + /tmp/scripts/build/configure-apt-sources.sh && \ + /tmp/scripts/build/configure-apt.sh && \ + /tmp/scripts/build/install-apt-vital.sh && \ + /tmp/scripts/build/install-ms-repos.sh && \ + /tmp/scripts/build/configure-image-data-file.sh && \ + /tmp/scripts/build/configure-environment.sh && \ + /tmp/scripts/build/install-actions-cache.sh && \ + /tmp/scripts/build/install-apt-common.sh && \ + /tmp/scripts/build/install-azcopy.sh && \ + /tmp/scripts/build/install-azure-cli.sh && \ + /tmp/scripts/build/install-azure-devops-cli.sh && \ + /tmp/scripts/build/install-bicep.sh && \ + /tmp/scripts/build/install-aws-tools.sh && \ + /tmp/scripts/build/install-git.sh && \ + /tmp/scripts/build/install-git-lfs.sh && \ + /tmp/scripts/build/install-github-cli.sh && \ + /tmp/scripts/build/install-google-cloud-cli.sh && \ + /tmp/scripts/build/install-nvm.sh && \ + /tmp/scripts/build/install-nodejs.sh && \ + /tmp/scripts/build/install-powershell.sh && \ + /tmp/scripts/build/configure-dpkg.sh && \ + /tmp/scripts/build/install-yq.sh && \ + /tmp/scripts/build/install-python.sh && \ + /tmp/scripts/build/install-zstd.sh && \ + /tmp/scripts/build/install-pipx-packages.sh && \ + /tmp/scripts/build/configure-system.sh && \ + /tmp/scripts/helpers/cleanup.sh + +ENTRYPOINT ["/opt/entrypoint.sh"] + +CMD [ "bash" ] diff --git a/images/ubuntu-slim/generate-software-report.sh b/images/ubuntu-slim/generate-software-report.sh new file mode 100755 index 0000000000..7696afdcdb --- /dev/null +++ b/images/ubuntu-slim/generate-software-report.sh @@ -0,0 +1,81 @@ +#!/bin/bash -e + +# This script builds and runs various tests on the ubuntu-slim Docker image +# to ensure it contains the expected software and configurations. +# The build and test workflows for docker images expect this script to be present. +# +# Usage: test.sh [IMAGE_NAME] +# If IMAGE_NAME is not provided, defaults to ubuntu-slim:test + +show_help() { + echo "Usage: $0 [IMAGE_NAME]" + echo "" + echo "Generate a software report for a Docker image." + echo "" + echo "Arguments:" + echo " IMAGE_NAME Docker image name to generate report for (default: ubuntu-slim:test)" + echo "" + echo "Examples:" + echo " $0 # Generate report for ubuntu-slim:test (builds image first)" + echo " $0 my-registry/ubuntu:latest # Generate report for existing image" + echo " $0 ubuntu-slim:v1.2.3 # Generate report for tagged image" + echo "" + echo "Options:" + echo " -h, --help Show this help message" +} + +# Handle help flags +if [[ "$1" == "-h" || "$1" == "--help" ]]; then + show_help + exit 0 +fi + +# Set the image name from parameter or use default +IMAGE_NAME="${1:-ubuntu-slim:test}" + +# Build the image only if using the default name (for backward compatibility) +if [[ "$IMAGE_NAME" == "ubuntu-slim:test" ]]; then + echo "Building image: $IMAGE_NAME" + docker build --debug --progress plain -t "$IMAGE_NAME" . +else + # Check if the image exists + if ! docker image inspect "$IMAGE_NAME" >/dev/null 2>&1; then + echo "Error: Image '$IMAGE_NAME' does not exist. Please build it first or provide a valid image name." + echo "Run '$0 --help' for usage information." + exit 1 + fi +fi + +echo "Generating software report for image: $IMAGE_NAME" + +# Get the script directory +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +BASE_DIR="$(cd ../../helpers/software-report-base && pwd)" + +echo $BASE_DIR + +# Create a temporary directory for output +OUTPUT_DIR=$(mktemp -d) +echo "Using temporary directory: $OUTPUT_DIR" + +# Run the container and execute the PowerShell script inside it +echo "Running Generate-SoftwareReport.ps1 inside the container..." +docker run --rm \ + -v "$OUTPUT_DIR:/output" \ + -v "$SCRIPT_DIR/scripts/docs-gen:/scripts/docs-gen:ro" \ + -v "$BASE_DIR:/scripts/software-report-base:ro" \ + "$IMAGE_NAME" \ + pwsh /scripts/docs-gen/Generate-SoftwareReport.ps1 -OutputDirectory /output + +if [ -f "$OUTPUT_DIR/software-report.md" ]; then + cp "$OUTPUT_DIR/software-report.md" ubuntu-slim-Readme.md + echo "✓ Copied software-report.md to current directory" +else + echo "✗ Error: software-report.md was not generated" + rm -rf "$OUTPUT_DIR" + exit 1 +fi + +# Clean up temporary directory +rm -rf "$OUTPUT_DIR" +echo "✓ Software report generation complete" diff --git a/images/ubuntu-slim/scripts/build/configure-apt-sources.sh b/images/ubuntu-slim/scripts/build/configure-apt-sources.sh new file mode 100644 index 0000000000..d1125cf60d --- /dev/null +++ b/images/ubuntu-slim/scripts/build/configure-apt-sources.sh @@ -0,0 +1,19 @@ +#!/bin/bash -e +################################################################################ +## File: configure-apt-sources.sh +## Desc: Configure apt sources with failover from Azure to Ubuntu archives. +################################################################################ + +source $HELPER_SCRIPTS/os.sh + +touch /etc/apt/apt-mirrors.txt + +printf "http://azure.archive.ubuntu.com/ubuntu/\tpriority:1\n" | tee -a /etc/apt/apt-mirrors.txt +printf "https://archive.ubuntu.com/ubuntu/\tpriority:2\n" | tee -a /etc/apt/apt-mirrors.txt +printf "https://security.ubuntu.com/ubuntu/\tpriority:3\n" | tee -a /etc/apt/apt-mirrors.txt + +if is_ubuntu24; then + sed -i 's|http://azure\.archive\.ubuntu\.com/ubuntu/|mirror+file:/etc/apt/apt-mirrors.txt|' /etc/apt/sources.list.d/ubuntu.sources +else + sed -i 's|http://azure\.archive\.ubuntu\.com/ubuntu/|mirror+file:/etc/apt/apt-mirrors.txt|' /etc/apt/sources.list +fi diff --git a/images/ubuntu-slim/scripts/build/configure-apt.sh b/images/ubuntu-slim/scripts/build/configure-apt.sh new file mode 100644 index 0000000000..849a1449c2 --- /dev/null +++ b/images/ubuntu-slim/scripts/build/configure-apt.sh @@ -0,0 +1,53 @@ +#!/bin/bash -e +################################################################################ +## File: configure-apt.sh +## Desc: Configure apt, install jq and apt-fast packages. +################################################################################ + +source $HELPER_SCRIPTS/os.sh + +# Stop and disable apt-daily upgrade services; +# systemctl stop apt-daily.timer +# systemctl disable apt-daily.timer +# systemctl disable apt-daily.service +# systemctl stop apt-daily-upgrade.timer +# systemctl disable apt-daily-upgrade.timer +# systemctl disable apt-daily-upgrade.service + +# Enable retry logic for apt up to 10 times +echo "APT::Acquire::Retries \"10\";" > /etc/apt/apt.conf.d/80-retries + +# Configure apt to always assume Y +echo "APT::Get::Assume-Yes \"true\";" > /etc/apt/apt.conf.d/90assumeyes + +# APT understands a field called Phased-Update-Percentage which can be used to control the rollout of a new version. It is an integer between 0 and 100. +# In case you have multiple systems that you want to receive the same set of updates, +# you can set APT::Machine-ID to a UUID such that they all phase the same, +# or set APT::Get::Never-Include-Phased-Updates or APT::Get::Always-Include-Phased-Updates to true such that APT will never/always consider phased updates. +# apt-cache policy pkgname +echo 'APT::Get::Always-Include-Phased-Updates "true";' > /etc/apt/apt.conf.d/99-phased-updates + +# Fix bad proxy and http headers settings +cat <> /etc/apt/apt.conf.d/99bad_proxy +Acquire::http::Pipeline-Depth 0; +Acquire::http::No-Cache true; +Acquire::https::Pipeline-Depth 0; +Acquire::https::No-Cache true; +Acquire::BrokenProxy true; +EOF + +# Uninstall unattended-upgrades +apt-get purge unattended-upgrades + +echo 'APT sources' +if ! is_ubuntu24; then + cat /etc/apt/sources.list +else + cat /etc/apt/sources.list.d/ubuntu.sources +fi + +apt-get update +# Install jq +apt-get install jq + +echo "ubuntu ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers diff --git a/images/ubuntu-slim/scripts/build/configure-dpkg.sh b/images/ubuntu-slim/scripts/build/configure-dpkg.sh new file mode 100644 index 0000000000..bff62a932d --- /dev/null +++ b/images/ubuntu-slim/scripts/build/configure-dpkg.sh @@ -0,0 +1,42 @@ +#!/bin/bash -e +################################################################################ +## File: configure-dpkg.sh +## Desc: Configure dpkg +################################################################################ + +# 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 +# is completely silent and unobtrusive, a perfect frontend for +# automatic installs. If you are using this front-end, and require +# non-default answers to questions, you will need to pre-seed the +# debconf database +set_etc_environment_variable "DEBIAN_FRONTEND" "noninteractive" + +# dpkg can be instructed not to ask for confirmation +# when replacing a configuration file (with the --force-confdef --force-confold options) +cat <> /etc/apt/apt.conf.d/10dpkg-options +Dpkg::Options { + "--force-confdef"; + "--force-confold"; +} +EOF + +# hide information about packages that are no longer required +cat <> /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 https://archive.ubuntu.com/ubuntu/pool/main/i/icu/libicu70_70.1-2_amd64.deb + + EXPECTED_LIBICU_SHA512="a6315482d93606e375c272718d2458870b95e4ed4b672ea8640cf7bc2d2c2f41aea13b798b1e417e1ffc472a90c6aad150d3d293aa9bddec48e39106e4042807" + ACTUAL_LIBICU_SHA512="$(sha512sum "./libicu70_70.1-2_amd64.deb" | awk '{print $1}')" + [ "$EXPECTED_LIBICU_SHA512" = "$ACTUAL_LIBICU_SHA512" ] || { echo "libicu checksum mismatch in configure-dpkg.sh"; exit 1;} + sudo apt-get install -y ./libicu70_70.1-2_amd64.deb +fi diff --git a/images/ubuntu-slim/scripts/build/configure-environment.sh b/images/ubuntu-slim/scripts/build/configure-environment.sh new file mode 100644 index 0000000000..806e9e9300 --- /dev/null +++ b/images/ubuntu-slim/scripts/build/configure-environment.sh @@ -0,0 +1,72 @@ +#!/bin/bash -e +################################################################################ +## File: configure-environment.sh +## Desc: Configure system and environment +################################################################################ + +# Source the helpers for use with the script +source $HELPER_SCRIPTS/os.sh +source $HELPER_SCRIPTS/etc-environment.sh + +whoami + +# Set ImageVersion and ImageOS env variables +set_etc_environment_variable "ImageVersion" "${IMAGE_VERSION}" +set_etc_environment_variable "ImageOS" "${IMAGE_OS}" + +# Set the ACCEPT_EULA variable to Y value to confirm your acceptance of the End-User Licensing Agreement +set_etc_environment_variable "ACCEPT_EULA" "Y" + +# This directory is supposed to be created in $HOME and owned by user(https://github.com/actions/runner-images/issues/491) +mkdir -p /etc/skel/.config/configstore +set_etc_environment_variable "XDG_CONFIG_HOME" '$HOME/.config' + +# Prepare directory and env variable for toolcache +echo "Setting up AGENT_TOOLSDIRECTORY and RUNNER_TOOL_CACHE variable to /opt/hostedtoolcache" +AGENT_TOOLSDIRECTORY=/opt/hostedtoolcache +mkdir $AGENT_TOOLSDIRECTORY +set_etc_environment_variable "AGENT_TOOLSDIRECTORY" "${AGENT_TOOLSDIRECTORY}" +set_etc_environment_variable "RUNNER_TOOL_CACHE" "${AGENT_TOOLSDIRECTORY}" +chmod -R 777 $AGENT_TOOLSDIRECTORY + +# https://www.elastic.co/guide/en/elasticsearch/reference/current/vm-max-map-count.html +# https://www.suse.com/support/kb/doc/?id=000016692 +echo 'vm.max_map_count=262144' | tee -a /etc/sysctl.conf + +# https://kind.sigs.k8s.io/docs/user/known-issues/#pod-errors-due-to-too-many-open-files +echo 'fs.inotify.max_user_watches=655360' | tee -a /etc/sysctl.conf +echo 'fs.inotify.max_user_instances=1280' | tee -a /etc/sysctl.conf + +# https://github.com/actions/runner-images/issues/9491 +echo 'vm.mmap_rnd_bits=28' | tee -a /etc/sysctl.conf + +# https://github.com/actions/runner-images/pull/7860 +netfilter_rule='/etc/udev/rules.d/50-netfilter.rules' +rules_directory="$(dirname "${netfilter_rule}")" +mkdir -p $rules_directory +touch $netfilter_rule +echo 'ACTION=="add", SUBSYSTEM=="module", KERNEL=="nf_conntrack", RUN+="/usr/sbin/sysctl net.netfilter.nf_conntrack_tcp_be_liberal=1"' | tee -a $netfilter_rule + +# Remove fwupd if installed. We're running on VMs in Azure and the fwupd package is not needed. +# Leaving it enable means periodic refreshes show in network traffic and firewall logs +# Check if fwupd-refresh.timer exists in systemd +if systemctl list-unit-files fwupd-refresh.timer &>/dev/null; then + echo "Masking fwupd-refresh.timer..." + systemctl mask fwupd-refresh.timer +fi + +# This is a legacy check, leaving for earlier versions of Ubuntu +# If fwupd config still exists, disable the motd updates +if [[ -f "/etc/fwupd/daemon.conf" ]]; then + sed -i 's/UpdateMotd=true/UpdateMotd=false/g' /etc/fwupd/daemon.conf +fi + +# Disable to load providers +# https://github.com/microsoft/azure-pipelines-agent/issues/3834 +if is_ubuntu22; then + sed -i 's/openssl_conf = openssl_init/#openssl_conf = openssl_init/g' /etc/ssl/openssl.cnf +fi + +# # Disable man-db auto update +# echo "set man-db/auto-update false" | debconf-communicate +# dpkg-reconfigure man-db diff --git a/images/ubuntu-slim/scripts/build/configure-image-data-file.sh b/images/ubuntu-slim/scripts/build/configure-image-data-file.sh new file mode 100644 index 0000000000..10b5a93a53 --- /dev/null +++ b/images/ubuntu-slim/scripts/build/configure-image-data-file.sh @@ -0,0 +1,40 @@ +#!/bin/bash -e + +function create_imagedata_json() { + + arch=$(uname -m) + if [[ $arch == "x86_64" ]]; then + arch="x64" + elif [[ $arch == "aarch64" ]]; then + arch="arm64" + else + echo "Unsupported architecture: $arch" + exit 1 + fi + + if [[ -n "$IMAGEDATA_INCLUDED_SOFTWARE" ]]; then + included_software="- Included Software: ${IMAGEDATA_INCLUDED_SOFTWARE}" + fi + + imagedata_file="/imagegeneration/imagedata.json" + + cat < $imagedata_file +[ + { + "group": "VM Image", + "detail": "- OS: Linux (${arch})\n- Source: Docker\n- Name: ${IMAGEDATA_NAME}\n- Version: ${IMAGE_VERSION}\n${included_software}" + } +] +EOF + +} + +mkdir -p /imagegeneration + +# Generate the imagedata JSON file displayed on workflow initialization +if [[ -n "$IMAGEDATA_NAME" ]]; then + echo "Generating imagedata JSON file" + create_imagedata_json +else + echo "IMAGEDATA_NAME is null or empty. Skipping imagedata JSON generation." +fi \ No newline at end of file diff --git a/images/ubuntu-slim/scripts/build/configure-system.sh b/images/ubuntu-slim/scripts/build/configure-system.sh new file mode 100644 index 0000000000..6359421415 --- /dev/null +++ b/images/ubuntu-slim/scripts/build/configure-system.sh @@ -0,0 +1,20 @@ +#!/bin/bash -e +################################################################################ +## File: configure-system.sh +## Desc: Post deployment system configuration actions +################################################################################ + +source $HELPER_SCRIPTS/etc-environment.sh +source $HELPER_SCRIPTS/os.sh + +echo "chmod -R 777 /opt" +chmod -R 777 /opt +echo "chmod -R 777 /usr/share" +chmod -R 777 /usr/share + +# Remove quotes around PATH +ENVPATH=$(grep 'PATH=' /etc/environment | head -n 1 | sed -z 's/^PATH=*//') +ENVPATH=${ENVPATH#"\""} +ENVPATH=${ENVPATH%"\""} +replace_etc_environment_variable "PATH" "${ENVPATH}" +echo "Updated /etc/environment: $(cat /etc/environment)" diff --git a/images/ubuntu-slim/scripts/build/install-actions-cache.sh b/images/ubuntu-slim/scripts/build/install-actions-cache.sh new file mode 100644 index 0000000000..6a3132e12b --- /dev/null +++ b/images/ubuntu-slim/scripts/build/install-actions-cache.sh @@ -0,0 +1,22 @@ +#!/bin/bash -e +################################################################################ +## File: install-actions-cache.sh +## Desc: Download latest release from https://github.com/actions/action-versions +## Maintainer: #actions-runtime and @TingluoHuang +################################################################################ + +# Source the helpers for use with the script +source $HELPER_SCRIPTS/install.sh +source $HELPER_SCRIPTS/etc-environment.sh + +# Prepare directory and env variable for ACTIONS_RUNNER_ACTION_ARCHIVE_CACHE +ACTION_ARCHIVE_CACHE_DIR=/opt/actionarchivecache +mkdir -p $ACTION_ARCHIVE_CACHE_DIR +chmod -R 777 $ACTION_ARCHIVE_CACHE_DIR +echo "Setting up ACTIONS_RUNNER_ACTION_ARCHIVE_CACHE variable to ${ACTION_ARCHIVE_CACHE_DIR}" +set_etc_environment_variable "ACTIONS_RUNNER_ACTION_ARCHIVE_CACHE" "${ACTION_ARCHIVE_CACHE_DIR}" + +# Download latest release from github.com/actions/action-versions and untar to /opt/actionarchivecache +download_url=$(resolve_github_release_asset_url "actions/action-versions" "endswith(\"action-versions.tar.gz\")" "latest") +archive_path=$(download_with_retry "$download_url") +tar -xzf "$archive_path" -C $ACTION_ARCHIVE_CACHE_DIR diff --git a/images/ubuntu-slim/scripts/build/install-apt-common.sh b/images/ubuntu-slim/scripts/build/install-apt-common.sh new file mode 100644 index 0000000000..a6fda80270 --- /dev/null +++ b/images/ubuntu-slim/scripts/build/install-apt-common.sh @@ -0,0 +1,18 @@ +#!/bin/bash -e +################################################################################ +## File: install-apt-common.sh +## Desc: Install basic command line utilities and dev packages +################################################################################ + +# Source the helpers for use with the script +source $HELPER_SCRIPTS/install.sh + +common_packages=$(get_toolset_value .apt.common_packages[]) +cmd_packages=$(get_toolset_value .apt.cmd_packages[]) + +apt-get install --no-install-recommends $common_packages $cmd_packages + +# for package in $common_packages $cmd_packages; do +# echo "Install $package" +# apt-get install --no-install-recommends $package +# done diff --git a/images/ubuntu-slim/scripts/build/install-apt-vital.sh b/images/ubuntu-slim/scripts/build/install-apt-vital.sh new file mode 100644 index 0000000000..305d4336b2 --- /dev/null +++ b/images/ubuntu-slim/scripts/build/install-apt-vital.sh @@ -0,0 +1,12 @@ +#!/bin/bash -e +################################################################################ +## File: install-apt-vital.sh +## Desc: Install vital command line utilities +################################################################################ + +# Source the helpers for use with the script +source $HELPER_SCRIPTS/install.sh + +vital_packages=$(get_toolset_value .apt.vital_packages[]) +apt-get install --no-install-recommends $vital_packages + diff --git a/images/ubuntu-slim/scripts/build/install-aws-tools.sh b/images/ubuntu-slim/scripts/build/install-aws-tools.sh new file mode 100644 index 0000000000..04ea661e9f --- /dev/null +++ b/images/ubuntu-slim/scripts/build/install-aws-tools.sh @@ -0,0 +1,30 @@ +#!/bin/bash -e +################################################################################ +## File: install-aws-tools.sh +## Desc: Install the AWS CLI, Session Manager plugin for the AWS CLI, and AWS SAM CLI +## Supply chain security: AWS SAM CLI - checksum validation +################################################################################ + +# Source the helpers for use with the script +source $HELPER_SCRIPTS/install.sh + +awscliv2_archive_path=$(download_with_retry "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip") +unzip -qq "$awscliv2_archive_path" -d /tmp/installers/ +/tmp/installers/aws/install -i /usr/local/aws-cli -b /usr/local/bin + +smplugin_deb_path=$(download_with_retry "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/ubuntu_64bit/session-manager-plugin.deb") +apt-get install "$smplugin_deb_path" + +# Download the latest aws sam cli release +aws_sam_cli_archive_name="aws-sam-cli-linux-x86_64.zip" +sam_cli_download_url=$(resolve_github_release_asset_url "aws/aws-sam-cli" "endswith(\"$aws_sam_cli_archive_name\")" "latest") +aws_sam_cli_archive_path=$(download_with_retry "$sam_cli_download_url") + +# Supply chain security - AWS SAM CLI +aws_sam_cli_hash=$(get_checksum_from_github_release "aws/aws-sam-cli" "${aws_sam_cli_archive_name}.. " "latest" "SHA256") +use_checksum_comparison "$aws_sam_cli_archive_path" "$aws_sam_cli_hash" + +# Install the latest aws sam cli release +mkdir -p /tmp/installers/aws-sam-cli +unzip "$aws_sam_cli_archive_path" -d /tmp/installers/aws-sam-cli +/tmp/installers/aws-sam-cli/install -i /usr/local/aws-sam-cli -b /usr/local/bin diff --git a/images/ubuntu-slim/scripts/build/install-azcopy.sh b/images/ubuntu-slim/scripts/build/install-azcopy.sh new file mode 100644 index 0000000000..402b264ee2 --- /dev/null +++ b/images/ubuntu-slim/scripts/build/install-azcopy.sh @@ -0,0 +1,16 @@ +#!/bin/bash -e +################################################################################ +## File: install-azcopy.sh +## Desc: Install AzCopy +################################################################################ + +# Source the helpers for use with the script +source $HELPER_SCRIPTS/install.sh + +# Install AzCopy10 +archive_path=$(download_with_retry "https://aka.ms/downloadazcopy-v10-linux") +tar xzf "$archive_path" --strip-components=1 -C /tmp +install /tmp/azcopy /usr/local/bin/azcopy + +# Create azcopy 10 alias for backward compatibility +ln -sf /usr/local/bin/azcopy /usr/local/bin/azcopy10 diff --git a/images/ubuntu-slim/scripts/build/install-azure-cli.sh b/images/ubuntu-slim/scripts/build/install-azure-cli.sh new file mode 100644 index 0000000000..df591179e9 --- /dev/null +++ b/images/ubuntu-slim/scripts/build/install-azure-cli.sh @@ -0,0 +1,13 @@ +#!/bin/bash -e +################################################################################ +## File: install-azure-cli.sh +## Desc: Install Azure CLI (az) +################################################################################ + +# Install Azure CLI (instructions taken from https://docs.microsoft.com/en-us/cli/azure/install-azure-cli) +curl -fsSL https://aka.ms/InstallAzureCLIDeb | sudo bash + +echo "azure-cli https://docs.microsoft.com/en-us/cli/azure/install-azure-cli-linux?pivots=apt" >> $HELPER_SCRIPTS/apt-sources.txt + +rm -f /etc/apt/sources.list.d/azure-cli.list +rm -f /etc/apt/sources.list.d/azure-cli.list.save diff --git a/images/ubuntu-slim/scripts/build/install-azure-devops-cli.sh b/images/ubuntu-slim/scripts/build/install-azure-devops-cli.sh new file mode 100644 index 0000000000..34ceee39a2 --- /dev/null +++ b/images/ubuntu-slim/scripts/build/install-azure-devops-cli.sh @@ -0,0 +1,16 @@ +#!/bin/bash -e +################################################################################ +## File: install-azure-devops-cli.sh +## Desc: Install Azure DevOps CLI (az devops) +################################################################################ + +# Source the helpers for use with the script +source $HELPER_SCRIPTS/etc-environment.sh + +# AZURE_EXTENSION_DIR shell variable defines where modules are installed +# https://docs.microsoft.com/en-us/cli/azure/azure-cli-extensions-overview +export AZURE_EXTENSION_DIR=/opt/az/azcliextensions +set_etc_environment_variable "AZURE_EXTENSION_DIR" "${AZURE_EXTENSION_DIR}" + +# install azure devops Cli extension +az extension add -n azure-devops diff --git a/images/ubuntu-slim/scripts/build/install-bicep.sh b/images/ubuntu-slim/scripts/build/install-bicep.sh new file mode 100644 index 0000000000..c23cfb280a --- /dev/null +++ b/images/ubuntu-slim/scripts/build/install-bicep.sh @@ -0,0 +1,15 @@ +#!/bin/bash -e +################################################################################ +## File: install-bicep.sh +## Desc: Install bicep cli +################################################################################ + +# Source the helpers for use with the script +source $HELPER_SCRIPTS/install.sh + +# Install Bicep CLI +download_url=$(resolve_github_release_asset_url "Azure/bicep" "endswith(\"bicep-linux-x64\")" "latest") +bicep_binary_path=$(download_with_retry "${download_url}") + +# Mark it as executable +install "$bicep_binary_path" /usr/local/bin/bicep diff --git a/images/ubuntu-slim/scripts/build/install-git-lfs.sh b/images/ubuntu-slim/scripts/build/install-git-lfs.sh new file mode 100644 index 0000000000..a8614a8176 --- /dev/null +++ b/images/ubuntu-slim/scripts/build/install-git-lfs.sh @@ -0,0 +1,20 @@ +#!/bin/bash -e +################################################################################ +## File: install-git-lfs.sh +## Desc: Install Git-lfs +################################################################################ + +# Source the helpers for use with the script +source $HELPER_SCRIPTS/install.sh + +GIT_LFS_REPO="https://packagecloud.io/install/repositories/github/git-lfs" + +# Install git-lfs +curl -fsSL $GIT_LFS_REPO/script.deb.sh | bash +apt-get install git-lfs + +# Remove source repo's +rm /etc/apt/sources.list.d/github_git-lfs.list + +# Document apt source repo's +echo "git-lfs $GIT_LFS_REPO" >> $HELPER_SCRIPTS/apt-sources.txt diff --git a/images/ubuntu-slim/scripts/build/install-git.sh b/images/ubuntu-slim/scripts/build/install-git.sh new file mode 100644 index 0000000000..2bbd23e26e --- /dev/null +++ b/images/ubuntu-slim/scripts/build/install-git.sh @@ -0,0 +1,34 @@ +#!/bin/bash -e +################################################################################ +## File: install-git.sh +## Desc: Install Git and Git-FTP +################################################################################ + +# Source the helpers for use with the script +source $HELPER_SCRIPTS/install.sh + +GIT_REPO="ppa:git-core/ppa" + +## Install git +add-apt-repository $GIT_REPO -y +apt-get update +apt-get install git + +# Git version 2.35.2 introduces security fix that breaks action\checkout https://github.com/actions/checkout/issues/760 +cat <> /etc/gitconfig +[safe] + directory = * +EOF + +# Install git-ftp +apt-get install git-ftp + +# Remove source repo's +add-apt-repository --remove $GIT_REPO + +# Document apt source repo's +echo "git-core $GIT_REPO" >> $HELPER_SCRIPTS/apt-sources.txt + +# Add well-known SSH host keys to known_hosts +ssh-keyscan -t rsa,ecdsa,ed25519 github.com >> /etc/ssh/ssh_known_hosts +ssh-keyscan -t rsa ssh.dev.azure.com >> /etc/ssh/ssh_known_hosts diff --git a/images/ubuntu-slim/scripts/build/install-github-cli.sh b/images/ubuntu-slim/scripts/build/install-github-cli.sh new file mode 100644 index 0000000000..7d120c95a5 --- /dev/null +++ b/images/ubuntu-slim/scripts/build/install-github-cli.sh @@ -0,0 +1,22 @@ +#!/bin/bash -e +################################################################################ +## File: install-github-cli.sh +## Desc: Install GitHub CLI +## Must be run as non-root user after homebrew +## Supply chain security: GitHub CLI - checksum validation +################################################################################ + +# Source the helpers for use with the script +source $HELPER_SCRIPTS/install.sh + +# Download GitHub CLI +gh_cli_url=$(resolve_github_release_asset_url "cli/cli" "contains(\"linux\") and contains(\"amd64\") and endswith(\".deb\")" "latest") +gh_cli_deb_path=$(download_with_retry "$gh_cli_url") + +# Supply chain security - GitHub CLI +hash_url=$(resolve_github_release_asset_url "cli/cli" "endswith(\"checksums.txt\")" "latest") +external_hash=$(get_checksum_from_url "$hash_url" "linux_amd64.deb" "SHA256") +use_checksum_comparison "$gh_cli_deb_path" "$external_hash" + +# Install GitHub CLI +apt-get install "$gh_cli_deb_path" diff --git a/images/ubuntu-slim/scripts/build/install-google-cloud-cli.sh b/images/ubuntu-slim/scripts/build/install-google-cloud-cli.sh new file mode 100644 index 0000000000..3c5b786264 --- /dev/null +++ b/images/ubuntu-slim/scripts/build/install-google-cloud-cli.sh @@ -0,0 +1,20 @@ +#!/bin/bash -e +################################################################################ +## File: install-google-cloud-cli.sh +## Desc: Install the Google Cloud CLI +################################################################################ + +REPO_URL="https://packages.cloud.google.com/apt" + +# Install the Google Cloud CLI +echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] $REPO_URL cloud-sdk main" > /etc/apt/sources.list.d/google-cloud-sdk.list +wget -qO- https://packages.cloud.google.com/apt/doc/apt-key.gpg | gpg --dearmor > /usr/share/keyrings/cloud.google.gpg +apt-get update +apt-get install google-cloud-cli + +# remove apt +rm /etc/apt/sources.list.d/google-cloud-sdk.list +rm /usr/share/keyrings/cloud.google.gpg + +# add repo to the apt-sources.txt +echo "google-cloud-sdk $REPO_URL" >> $HELPER_SCRIPTS/apt-sources.txt diff --git a/images/ubuntu-slim/scripts/build/install-ms-repos.sh b/images/ubuntu-slim/scripts/build/install-ms-repos.sh new file mode 100644 index 0000000000..b4a56e8bdf --- /dev/null +++ b/images/ubuntu-slim/scripts/build/install-ms-repos.sh @@ -0,0 +1,16 @@ +#!/bin/bash -e +################################################################################ +## File: install-ms-repos.sh +## Desc: Install official Microsoft package repos for the distribution +################################################################################ + +os_label=$(lsb_release -rs) + +# Install Microsoft repository +wget https://packages.microsoft.com/config/ubuntu/$os_label/packages-microsoft-prod.deb +dpkg -i packages-microsoft-prod.deb + +# update +apt-get install apt-transport-https ca-certificates curl software-properties-common +apt-get update +apt-get dist-upgrade diff --git a/images/ubuntu-slim/scripts/build/install-nodejs.sh b/images/ubuntu-slim/scripts/build/install-nodejs.sh new file mode 100644 index 0000000000..bb99ed6f72 --- /dev/null +++ b/images/ubuntu-slim/scripts/build/install-nodejs.sh @@ -0,0 +1,29 @@ +#!/bin/bash -e +################################################################################ +## File: install-nodejs.sh +## Desc: Install Node.js LTS and related tooling (Gulp, Grunt) +################################################################################ + +# Source the helpers for use with the script +source $HELPER_SCRIPTS/install.sh + +# Install default Node.js +default_version=$(get_toolset_value '.node.default') + +curl -fsSL https://raw.githubusercontent.com/tj/n/master/bin/n -o ~/n +sudo bash ~/n $default_version + +# Install node modules +node_modules=$(get_toolset_value '.node_modules[].name') +if [ -n "$node_modules" ]; then + npm install -g $node_modules +else + echo "No node modules to install" +fi + +# fix global modules installation as regular user +# related issue https://github.com/actions/runner-images/issues/3727 +sudo chmod -R 777 /usr/local/lib/node_modules +sudo chmod -R 777 /usr/local/bin + +rm -rf ~/n diff --git a/images/ubuntu-slim/scripts/build/install-nvm.sh b/images/ubuntu-slim/scripts/build/install-nvm.sh new file mode 100644 index 0000000000..c43273e2be --- /dev/null +++ b/images/ubuntu-slim/scripts/build/install-nvm.sh @@ -0,0 +1,22 @@ +#!/bin/bash -e +################################################################################ +## File: install-nvm.sh +## Desc: Install Nvm +################################################################################ + +# Source the helpers for use with the script +source $HELPER_SCRIPTS/etc-environment.sh + +export NVM_DIR="/etc/skel/.nvm" +mkdir ${NVM_DIR} +nvm_version=$(curl -fsSL https://api.github.com/repos/nvm-sh/nvm/releases/latest | jq -r '.tag_name') +curl -fsSL https://raw.githubusercontent.com/nvm-sh/nvm/$nvm_version/install.sh | bash +set_etc_environment_variable "NVM_DIR" '$HOME/.nvm' + +echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm' | tee -a /etc/skel/.bash_profile +[ -s "${NVM_DIR}/nvm.sh" ] && \. "${NVM_DIR}/nvm.sh" + +echo "source ${NVM_DIR}/nvm.sh" | tee -a /etc/skel/.bashrc + +# set system node.js as default one +nvm alias default system \ No newline at end of file diff --git a/images/ubuntu-slim/scripts/build/install-pipx-packages.sh b/images/ubuntu-slim/scripts/build/install-pipx-packages.sh new file mode 100644 index 0000000000..9dc496f010 --- /dev/null +++ b/images/ubuntu-slim/scripts/build/install-pipx-packages.sh @@ -0,0 +1,28 @@ +#!/bin/bash -e +################################################################################ +## File: install-pipx-packages.sh +## Desc: Install tools via pipx +################################################################################ + +# Source the helpers for use with the script +source $HELPER_SCRIPTS/install.sh + +export PATH="$PATH:/opt/pipx_bin" + +pipx_packages=$(get_toolset_value ".pipx[] .package") + +if [ -z "$pipx_packages" ]; then + echo "No pipx packages defined in toolset. Skipping pipx installation." + exit 0 +fi + +for package in $pipx_packages; do + echo "Install $package into default python" + pipx install $package + + # https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html + # Install ansible into an existing ansible-core Virtual Environment + if [[ $package == "ansible-core" ]]; then + pipx inject $package ansible + fi +done diff --git a/images/ubuntu-slim/scripts/build/install-powershell.sh b/images/ubuntu-slim/scripts/build/install-powershell.sh new file mode 100644 index 0000000000..f4e4e29ea1 --- /dev/null +++ b/images/ubuntu-slim/scripts/build/install-powershell.sh @@ -0,0 +1,15 @@ +#!/bin/bash -e +################################################################################ +## File: install-powershell.sh +## Desc: Install PowerShell Core +################################################################################ + +# Source the helpers for use with the script +source $HELPER_SCRIPTS/install.sh +source $HELPER_SCRIPTS/os.sh + +pwsh_version=$(get_toolset_value .pwsh.version) + +# Install Powershell + + apt-get install powershell=$pwsh_version* \ No newline at end of file diff --git a/images/ubuntu-slim/scripts/build/install-python.sh b/images/ubuntu-slim/scripts/build/install-python.sh new file mode 100644 index 0000000000..e208b3a3ef --- /dev/null +++ b/images/ubuntu-slim/scripts/build/install-python.sh @@ -0,0 +1,37 @@ +#!/bin/bash -e +################################################################################ +## File: install-python.sh +## Desc: Install Python 3 +################################################################################ + +set -e +# Source the helpers for use with the script +source $HELPER_SCRIPTS/etc-environment.sh +source $HELPER_SCRIPTS/os.sh + +# Install Python, Python 3, pip, pip3 +apt-get install -y --no-install-recommends python3 python3-dev python3-pip python3-venv + +if is_ubuntu24; then +# Create temporary workaround to allow user to continue using pip + sudo cat < /etc/pip.conf +[global] +break-system-packages = true +EOF +fi + +# Install pipx +# Set pipx custom directory +export PIPX_BIN_DIR=/opt/pipx_bin +export PIPX_HOME=/opt/pipx + +python3 -m pip install pipx +python3 -m pipx ensurepath + +# Update /etc/environment +set_etc_environment_variable "PIPX_BIN_DIR" $PIPX_BIN_DIR +set_etc_environment_variable "PIPX_HOME" $PIPX_HOME +prepend_etc_environment_path $PIPX_BIN_DIR + +# Adding this dir to PATH will make installed pip commands are immediately available. +prepend_etc_environment_path '$HOME/.local/bin' \ No newline at end of file diff --git a/images/ubuntu-slim/scripts/build/install-yq.sh b/images/ubuntu-slim/scripts/build/install-yq.sh new file mode 100644 index 0000000000..40f978c882 --- /dev/null +++ b/images/ubuntu-slim/scripts/build/install-yq.sh @@ -0,0 +1,22 @@ +#!/bin/bash -e +################################################################################ +## File: install-yq.sh +## Desc: Install yq - a command-line YAML, JSON and XML processor +## Supply chain security: yq - checksum validation +################################################################################ + +# Source the helpers for use with the script +source $HELPER_SCRIPTS/install.sh + +# Download yq +yq_url=$(resolve_github_release_asset_url "mikefarah/yq" "endswith(\"yq_linux_amd64\")" "latest") +binary_path=$(download_with_retry "${yq_url}") + +# Supply chain security - yq +hash_url=$(resolve_github_release_asset_url "mikefarah/yq" "endswith(\"checksums\")" "latest") +external_hash=$(get_checksum_from_url "${hash_url}" "yq_linux_amd64 " "SHA256" "true" " " "19") +use_checksum_comparison "$binary_path" "$external_hash" + +# Install yq +install "$binary_path" /usr/bin/yq + diff --git a/images/ubuntu-slim/scripts/build/install-zstd.sh b/images/ubuntu-slim/scripts/build/install-zstd.sh new file mode 100644 index 0000000000..fcb5768c9c --- /dev/null +++ b/images/ubuntu-slim/scripts/build/install-zstd.sh @@ -0,0 +1,36 @@ +#!/bin/bash -e +################################################################################ +## File: install-zstd.sh +## Desc: Install zstd +## Supply chain security: zstd - checksum validation +################################################################################ + +# Source the helpers for use with the script +source $HELPER_SCRIPTS/install.sh + +# Download zstd +release_tag=$(curl -fsSL https://api.github.com/repos/facebook/zstd/releases/latest | jq -r '.tag_name') +release_name="zstd-${release_tag//v}" +download_url="https://github.com/facebook/zstd/releases/download/${release_tag}/${release_name}.tar.gz" +archive_path=$(download_with_retry "${download_url}") + +# Supply chain security - zstd +external_hash=$(get_checksum_from_url "${download_url}.sha256" "${release_name}.tar.gz" "SHA256") +use_checksum_comparison "$archive_path" "$external_hash" + +# Install zstd +apt-get install liblz4-dev +tar xzf "$archive_path" -C /tmp + +make -C "/tmp/${release_name}/contrib/pzstd" -j $(nproc) all +make -C "/tmp/${release_name}" -j $(nproc) zstd-release + +for copyprocess in zstd zstdless zstdgrep; do + cp "/tmp/${release_name}/programs/${copyprocess}" /usr/local/bin/ +done + +cp "/tmp/${release_name}/contrib/pzstd/pzstd" /usr/local/bin/ + +for symlink in zstdcat zstdmt unzstd; do + ln -sf /usr/local/bin/zstd /usr/local/bin/${symlink} +done diff --git a/images/ubuntu-slim/scripts/docs-gen/Common.Helpers.psm1 b/images/ubuntu-slim/scripts/docs-gen/Common.Helpers.psm1 new file mode 100644 index 0000000000..5f64d2b9ef --- /dev/null +++ b/images/ubuntu-slim/scripts/docs-gen/Common.Helpers.psm1 @@ -0,0 +1,152 @@ +function Get-CommandResult { + <# + .SYNOPSIS + Runs a command in bash and returns the output and exit code. + + .DESCRIPTION + Function runs a provided command in bash and returns the output and exit code as hashtable. + + .PARAMETER Command + The command to run. + + .PARAMETER ExpectedExitCode + The expected exit code. If the actual exit code does not match, an exception is thrown. + + .PARAMETER Multiline + If true, the output is returned as an array of strings. Otherwise, the output is returned as a single string. + + .PARAMETER ValidateExitCode + If true, the actual exit code is compared to the expected exit code. + + .EXAMPLE + $result = Get-CommandResult "ls -la" + + This command runs "ls -la" in bash and returns the output and exit code as hashtable. + + #> + param( + [Parameter(Mandatory=$true)] + [string] $Command, + [int[]] $ExpectedExitCode = 0, + [switch] $Multiline, + [bool] $ValidateExitCode = $true + ) + + # Bash trick to suppress and show error output because some commands write to stderr (for example, "python --version") + $stdout = & bash -c "$Command 2>&1" + $exitCode = $LASTEXITCODE + + if ($ValidateExitCode) { + if ($ExpectedExitCode -notcontains $exitCode) { + try { + throw "StdOut: '$stdout' ExitCode: '$exitCode'" + } catch { + Write-Host $_.Exception.Message + Write-Host $_.ScriptStackTrace + exit $LASTEXITCODE + } + } + } + + return @{ + Output = If ($Multiline -eq $true) { $stdout } else { [string] $stdout } + ExitCode = $exitCode + } +} + +function Test-IsUbuntu22 { + return (lsb_release -rs) -eq "22.04" +} + +function Test-IsUbuntu24 { + return (lsb_release -rs) -eq "24.04" +} + +function Get-ToolsetContent { + <# + .SYNOPSIS + Retrieves the content of the toolset.json file. + + .DESCRIPTION + This function reads the toolset.json in path provided by INSTALLER_SCRIPT_FOLDER + environment variable and returns the content as a PowerShell object. + #> + + $toolsetPath = Join-Path $env:INSTALLER_SCRIPT_FOLDER "toolset.json" + $toolsetJson = Get-Content -Path $toolsetPath -Raw + ConvertFrom-Json -InputObject $toolsetJson +} + +function Invoke-DownloadWithRetry { + <# + .SYNOPSIS + Downloads a file from a given URL with retry functionality. + + .DESCRIPTION + The Invoke-DownloadWithRetry function downloads a file from the specified URL + to the specified path. It includes retry functionality in case the download fails. + + .PARAMETER Url + The URL of the file to download. + + .PARAMETER Path + The path where the downloaded file will be saved. If not provided, a temporary path + will be used. + + .EXAMPLE + Invoke-DownloadWithRetry -Url "https://example.com/file.zip" -Path "/usr/local/bin" + Downloads the file from the specified URL and saves it to the specified path. + + .EXAMPLE + Invoke-DownloadWithRetry -Url "https://example.com/file.zip" + Downloads the file from the specified URL and saves it to a temporary path. + + .OUTPUTS + The path where the downloaded file is saved. + #> + param( + [Parameter(Mandatory)] + [string] $Url, + [Alias("Destination")] + [string] $DestinationPath + ) + + if (-not $DestinationPath) { + $invalidChars = [IO.Path]::GetInvalidFileNameChars() -join '' + $re = "[{0}]" -f [RegEx]::Escape($invalidChars) + $fileName = [IO.Path]::GetFileName($Url) -replace $re + + if ([String]::IsNullOrEmpty($fileName)) { + $fileName = [System.IO.Path]::GetRandomFileName() + } + $DestinationPath = Join-Path -Path "/tmp" -ChildPath $fileName + } + + Write-Host "Downloading package from $Url to $DestinationPath..." + + $interval = 30 + $downloadStartTime = Get-Date + for ($retries = 20; $retries -gt 0; $retries--) { + try { + $attemptStartTime = Get-Date + Invoke-WebRequest -Uri $Url -Outfile $DestinationPath + $attemptSeconds = [math]::Round(($(Get-Date) - $attemptStartTime).TotalSeconds, 2) + Write-Host "Package downloaded in $attemptSeconds seconds" + break + } catch { + $attemptSeconds = [math]::Round(($(Get-Date) - $attemptStartTime).TotalSeconds, 2) + Write-Warning "Package download failed in $attemptSeconds seconds" + Write-Warning $_.Exception.Message + } + + if ($retries -eq 0) { + $totalSeconds = [math]::Round(($(Get-Date) - $downloadStartTime).TotalSeconds, 2) + throw "Package download failed after $totalSeconds seconds" + } + + Write-Warning "Waiting $interval seconds before retrying (retries left: $retries)..." + Start-Sleep -Seconds $interval + } + + return $DestinationPath +} diff --git a/images/ubuntu-slim/scripts/docs-gen/Generate-SoftwareReport.ps1 b/images/ubuntu-slim/scripts/docs-gen/Generate-SoftwareReport.ps1 new file mode 100644 index 0000000000..021a0920b2 --- /dev/null +++ b/images/ubuntu-slim/scripts/docs-gen/Generate-SoftwareReport.ps1 @@ -0,0 +1,75 @@ +using module ../software-report-base/SoftwareReport.psm1 +using module ../software-report-base/SoftwareReport.Nodes.psm1 + +param ( + [Parameter(Mandatory)] + [string] $OutputDirectory +) + +$global:ErrorActionPreference = "Stop" +$global:ErrorView = "NormalView" +Set-StrictMode -Version Latest + +Import-Module (Join-Path $PSScriptRoot "SoftwareReport.Common.psm1") -DisableNameChecking +Import-Module (Join-Path $PSScriptRoot "SoftwareReport.Helpers.psm1") -DisableNameChecking +Import-Module (Join-Path $PSScriptRoot "Common.Helpers.psm1") -DisableNameChecking +Import-Module (Join-Path $PSScriptRoot "SoftwareReport.Tools.psm1") -DisableNameChecking + +# Restore file owner in user profile +sudo chown -R ${env:USER}: $env:HOME + +# Software report +$softwareReport = [SoftwareReport]::new("Ubuntu-Slim") +$softwareReport.Root.AddToolVersion("OS Version:", $(Get-OSVersionFull)) +$softwareReport.Root.AddToolVersion("Kernel Version:", $(Get-KernelVersion)) +$softwareReport.Root.AddToolVersion("Image Version:", $env:IMAGE_VERSION) +$softwareReport.Root.AddToolVersion("Systemd version:", $(Get-SystemdVersion)) + +$installedSoftware = $softwareReport.Root.AddHeader("Installed Software") + +# Language and Runtime +$languageAndRuntime = $installedSoftware.AddHeader("Language and Runtime") +$languageAndRuntime.AddToolVersion("Bash", $(Get-BashVersion)) +$languageAndRuntime.AddToolVersion("Dash", $(Get-DashVersion)) +$languageAndRuntime.AddToolVersion("Node.js", $(Get-NodeVersion)) +$languageAndRuntime.AddToolVersion("Perl", $(Get-PerlVersion)) +$languageAndRuntime.AddToolVersion("Python", $(Get-PythonVersion)) + +# Package Management +$packageManagement = $installedSoftware.AddHeader("Package Management") +$packageManagement.AddToolVersion("Npm", $(Get-NpmVersion)) +$packageManagement.AddToolVersion("Pip", $(Get-PipVersion)) +$packageManagement.AddToolVersion("Pip3", $(Get-Pip3Version)) +$packageManagement.AddToolVersion("Pipx", $(Get-PipxVersion)) + +# Tools +$tools = $installedSoftware.AddHeader("Tools") +$tools.AddToolVersion("AzCopy", $(Get-AzCopyVersion)) +$tools.AddToolVersion("Bicep", $(Get-BicepVersion)) +$tools.AddToolVersion("Git", $(Get-GitVersion)) +$tools.AddToolVersion("Git LFS", $(Get-GitLFSVersion)) +$tools.AddToolVersion("Git-ftp", $(Get-GitFTPVersion)) +$tools.AddToolVersion("jq", $(Get-JqVersion)) +$tools.AddToolVersion("nvm", $(Get-NvmVersion)) +$tools.AddToolVersion("OpenSSL", $(Get-OpensslVersion)) +$tools.AddToolVersion("yq", $(Get-YqVersion)) +$tools.AddToolVersion("zstd", $(Get-ZstdVersion)) + +# CLI Tools +$cliTools = $installedSoftware.AddHeader("CLI Tools") +$cliTools.AddToolVersion("AWS CLI", $(Get-AWSCliVersion)) +$cliTools.AddToolVersion("AWS CLI Session Manager Plugin", $(Get-AWSCliSessionManagerPluginVersion)) +$cliTools.AddToolVersion("AWS SAM CLI", $(Get-AWSSAMVersion)) +$cliTools.AddToolVersion("Azure CLI", $(Get-AzureCliVersion)) +$cliTools.AddToolVersion("Azure CLI (azure-devops)", $(Get-AzureDevopsVersion)) +$cliTools.AddToolVersion("GitHub CLI", $(Get-GitHubCliVersion)) +$cliTools.AddToolVersion("Google Cloud CLI", $(Get-GoogleCloudCLIVersion)) + +# PowerShell Tools +$powerShellTools = $installedSoftware.AddHeader("PowerShell Tools") +$powerShellTools.AddToolVersion("PowerShell", $(Get-PowershellVersion)) + +$installedSoftware.AddHeader("Installed apt packages").AddTable($(Get-AptPackages)) + +$softwareReport.ToJson() | Out-File -FilePath "${OutputDirectory}/software-report.json" -Encoding UTF8NoBOM +$softwareReport.ToMarkdown() | Out-File -FilePath "${OutputDirectory}/software-report.md" -Encoding UTF8NoBOM diff --git a/images/ubuntu-slim/scripts/docs-gen/SoftwareReport.Common.psm1 b/images/ubuntu-slim/scripts/docs-gen/SoftwareReport.Common.psm1 new file mode 100644 index 0000000000..2c66bb72ac --- /dev/null +++ b/images/ubuntu-slim/scripts/docs-gen/SoftwareReport.Common.psm1 @@ -0,0 +1,81 @@ +function Get-BashVersion { + $version = bash -c 'echo ${BASH_VERSION}' + return $version +} + +function Get-DashVersion { + $version = dpkg-query -W -f '${Version}' dash + return $version +} + +function Get-NodeVersion { + $nodeVersion = $(node --version).Substring(1) + return $nodeVersion +} + +function Get-OpensslVersion { + $opensslVersion = $(dpkg-query -W -f '${Version}' openssl) + return $opensslVersion +} + +function Get-PerlVersion { + $version = $(perl -e 'print substr($^V,1)') + return $version +} + +function Get-PythonVersion { + $result = Get-CommandResult "python --version" + $version = $result.Output | Get-StringPart -Part 1 + return $version +} + +function Get-PowershellVersion { + $pwshVersion = $(pwsh --version) | Get-StringPart -Part 1 + return $pwshVersion +} + +function Get-NpmVersion { + $npmVersion = npm --version + return $npmVersion +} + +function Get-PipVersion { + $pipVersion = pip --version | Get-StringPart -Part 1 + return $pipVersion +} + +function Get-Pip3Version { + $pip3Version = pip3 --version | Get-StringPart -Part 1 + return $pip3Version +} + +function Get-AptPackages { + $apt = (Get-ToolsetContent).Apt + $output = @() + ForEach ($pkg in ($apt.vital_packages + $apt.common_packages + $apt.cmd_packages)) { + $version = $(dpkg-query -W -f '${Version}' $pkg) + if ($null -eq $version) { + $version = $(dpkg-query -W -f '${Version}' "$pkg*") + } + + $version = $version -replace '~','\~' + + $output += [PSCustomObject] @{ + Name = $pkg + Version = $version + } + } + return ($output | Sort-Object Name) +} + +function Get-PipxVersion { + $result = (Get-CommandResult "pipx --version").Output + $result -match "(?\d+\.\d+\.\d+\.?\d*)" | Out-Null + return $Matches.Version +} + +function Get-SystemdVersion { + $matchCollection = [regex]::Matches((systemctl --version | head -n 1), "\((.*?)\)") + $result = foreach ($match in $matchCollection) {$match.Groups[1].Value} + return $result +} diff --git a/images/ubuntu-slim/scripts/docs-gen/SoftwareReport.Helpers.psm1 b/images/ubuntu-slim/scripts/docs-gen/SoftwareReport.Helpers.psm1 new file mode 100644 index 0000000000..c74b85610f --- /dev/null +++ b/images/ubuntu-slim/scripts/docs-gen/SoftwareReport.Helpers.psm1 @@ -0,0 +1,37 @@ +function Get-StringPart { + param ( + [Parameter(ValueFromPipeline)] + [string] $ToolOutput, + [string] $Delimiter = " ", + [int[]] $Part + ) + + $parts = $ToolOutput.Split($Delimiter, [System.StringSplitOptions]::RemoveEmptyEntries) + $selectedParts = $parts[$Part] + return [string]::Join($Delimiter, $selectedParts) +} + +function Get-PathWithLink { + param ( + [string] $InputPath + ) + + $link = Get-Item $InputPath | Select-Object -ExpandProperty Target + if (-not [string]::IsNullOrEmpty($link)) { + return "${InputPath} -> ${link}" + } + return "${InputPath}" +} + +function Get-OSVersionShort { + $(Get-OSVersionFull) | Get-StringPart -Delimiter '.' -Part 0,1 +} + +function Get-OSVersionFull { + lsb_release -ds | Get-StringPart -Part 1, 2 +} + +function Get-KernelVersion { + $kernelVersion = uname -r + return $kernelVersion +} diff --git a/images/ubuntu-slim/scripts/docs-gen/SoftwareReport.Tools.psm1 b/images/ubuntu-slim/scripts/docs-gen/SoftwareReport.Tools.psm1 new file mode 100644 index 0000000000..bca9649135 --- /dev/null +++ b/images/ubuntu-slim/scripts/docs-gen/SoftwareReport.Tools.psm1 @@ -0,0 +1,79 @@ +function Get-AzCopyVersion { + $azcopyVersion = [string]$(azcopy --version) | Get-StringPart -Part 2 + return "$azcopyVersion - available by ``azcopy`` and ``azcopy10`` aliases" +} + +function Get-BicepVersion { + (bicep --version | Out-String) -match "bicep cli version (?\d+\.\d+\.\d+)" | Out-Null + return $Matches.Version +} + +function Get-GitVersion { + $gitVersion = git --version | Get-StringPart -Part -1 + return $gitVersion +} + +function Get-GitLFSVersion { + $result = Get-CommandResult "git-lfs --version" + $gitlfsversion = $result.Output | Get-StringPart -Part 0 | Get-StringPart -Part 1 -Delimiter "/" + return $gitlfsversion +} + +function Get-GitFTPVersion { + $gitftpVersion = git-ftp --version | Get-StringPart -Part 2 + return $gitftpVersion +} + +function Get-GoogleCloudCLIVersion { + return (gcloud --version | Select-Object -First 1) | Get-StringPart -Part 3 +} + +function Get-NvmVersion { + $nvmVersion = bash -c "source /etc/skel/.nvm/nvm.sh && nvm --version" + return $nvmVersion +} + +function Get-JqVersion { + $jqVersion = jq --version | Get-StringPart -Part 1 -Delimiter "-" + return $jqVersion +} + +function Get-AzureCliVersion { + $azcliVersion = (az version | ConvertFrom-Json).'azure-cli' + return $azcliVersion +} + +function Get-AzureDevopsVersion { + $azdevopsVersion = (az version | ConvertFrom-Json).extensions.'azure-devops' + return $azdevopsVersion +} + +function Get-AWSCliVersion { + $result = Get-CommandResult "aws --version" + $awsVersion = $result.Output | Get-StringPart -Part 0 | Get-StringPart -Part 1 -Delimiter "/" + return $awsVersion +} + +function Get-AWSCliSessionManagerPluginVersion { + $result = (Get-CommandResult "session-manager-plugin --version").Output + return $result +} + +function Get-AWSSAMVersion { + return $(sam --version | Get-StringPart -Part -1) +} + +function Get-GitHubCliVersion { + $ghVersion = gh --version | Select-String "gh version" | Get-StringPart -Part 2 + return $ghVersion +} + +function Get-ZstdVersion { + $zstdVersion = zstd --version | Get-StringPart -Part 1 -Delimiter "v" | Get-StringPart -Part 0 -Delimiter "," + return "$zstdVersion" +} + +function Get-YqVersion { + $yqVersion = $(yq -V) | Get-StringPart -Part 3 + return $yqVersion.TrimStart("v").Trim() +} diff --git a/images/ubuntu-slim/scripts/entrypoint.sh b/images/ubuntu-slim/scripts/entrypoint.sh new file mode 100644 index 0000000000..b5c8076a80 --- /dev/null +++ b/images/ubuntu-slim/scripts/entrypoint.sh @@ -0,0 +1,10 @@ +#!/bin/bash +# /opt/entrypoint.sh + +# Load environment variables from file +set -a +source /etc/environment +set +a + +# Execute the actual command +exec "$@" \ No newline at end of file diff --git a/images/ubuntu-slim/scripts/helpers/cleanup.sh b/images/ubuntu-slim/scripts/helpers/cleanup.sh new file mode 100644 index 0000000000..2b3daefba9 --- /dev/null +++ b/images/ubuntu-slim/scripts/helpers/cleanup.sh @@ -0,0 +1,12 @@ +#!/bin/bash -e + +# delete all .gz and rotated file +find /var/log -type f -regex ".*\.gz$" -delete +find /var/log -type f -regex ".*\.[0-9]$" -delete + +# wipe log files +find /var/log/ -type f -exec cp /dev/null {} \; + +rm -rf /tmp/downloads /tmp/installers + +apt-get clean && rm -rf /var/lib/apt/lists/* \ No newline at end of file diff --git a/images/ubuntu-slim/scripts/helpers/etc-environment.sh b/images/ubuntu-slim/scripts/helpers/etc-environment.sh new file mode 100644 index 0000000000..8673e4c3b0 --- /dev/null +++ b/images/ubuntu-slim/scripts/helpers/etc-environment.sh @@ -0,0 +1,89 @@ +#!/bin/bash -e +################################################################################ +## File: etc-environment.sh +## Desc: Helper functions for source and modify /etc/environment +################################################################################ + +# NB: sed expression use '%' as a delimiter in order to simplify handling +# values containing slashes (i.e. directory path) +# The values containing '%' will break the functions + +get_etc_environment_variable() { + local variable_name=$1 + + # remove `variable_name=` and possible quotes from the line + grep "^${variable_name}=" /etc/environment | sed -E "s%^${variable_name}=\"?([^\"]+)\"?.*$%\1%" +} + +add_etc_environment_variable() { + local variable_name=$1 + local variable_value=$2 + + echo "${variable_name}=${variable_value}" | sudo tee -a /etc/environment +} + +replace_etc_environment_variable() { + local variable_name=$1 + local variable_value=$2 + + # modify /etc/environment in place by replacing a string that begins with variable_name + sudo sed -i -e "s%^${variable_name}=.*$%${variable_name}=${variable_value}%" /etc/environment +} + +set_etc_environment_variable() { + local variable_name=$1 + local variable_value=$2 + + if grep "^${variable_name}=" /etc/environment > /dev/null; then + replace_etc_environment_variable $variable_name $variable_value + else + add_etc_environment_variable $variable_name $variable_value + fi +} + +prepend_etc_environment_variable() { + local variable_name=$1 + local element=$2 + + # TODO: handle the case if the variable does not exist + existing_value=$(get_etc_environment_variable "${variable_name}") + set_etc_environment_variable "${variable_name}" "${element}:${existing_value}" +} + +append_etc_environment_variable() { + local variable_name=$1 + local element=$2 + + # TODO: handle the case if the variable does not exist + existing_value=$(get_etc_environment_variable "${variable_name}") + set_etc_environment_variable "${variable_name}" "${existing_value}:${element}" +} + +prepend_etc_environment_path() { + local element=$1 + + prepend_etc_environment_variable PATH "${element}" +} + +append_etc_environment_path() { + local element=$1 + + append_etc_environment_variable PATH "${element}" +} + +# Process /etc/environment as if it were shell script with `export VAR=...` expressions +# The PATH variable is handled specially in order to do not override the existing PATH +# variable. The value of PATH variable read from /etc/environment is added to the end +# of value of the exiting PATH variable exactly as it would happen with real PAM app read +# /etc/environment +# +# TODO: there might be the others variables to be processed in the same way as "PATH" variable +# ie MANPATH, INFOPATH, LD_*, etc. In the current implementation the values from /etc/environment +# replace the values of the current environment +reload_etc_environment() { + # add `export ` to every variable of /etc/environment except PATH and eval the result shell script + eval $(grep -v '^PATH=' /etc/environment | sed -e 's%^%export %') + # handle PATH specially + etc_path=$(get_etc_environment_variable PATH) + export PATH="$PATH:$etc_path" +} diff --git a/images/ubuntu-slim/scripts/helpers/install.sh b/images/ubuntu-slim/scripts/helpers/install.sh new file mode 100644 index 0000000000..005fe69243 --- /dev/null +++ b/images/ubuntu-slim/scripts/helpers/install.sh @@ -0,0 +1,243 @@ +#!/bin/bash -e +################################################################################ +## File: install.sh +## Desc: Helper functions for installing tools +################################################################################ + +download_with_retry() { + local url=$1 + local download_path=$2 + + if [ -z "$download_path" ]; then + mkdir -p /tmp/downloads + download_path="/tmp/downloads/$(basename "$url")" + fi + + echo "Downloading package from $url to $download_path..." >&2 + + interval=30 + download_start_time=$(date +%s) + + for ((retries=20; retries>0; retries--)); do + attempt_start_time=$(date +%s) + if http_code=$(curl -4sSLo "$download_path" "$url" -w '%{http_code}'); then + attempt_seconds=$(($(date +%s) - attempt_start_time)) + if [ "$http_code" -eq 200 ]; then + echo "Package downloaded in $attempt_seconds seconds" >&2 + break + else + echo "Received HTTP status code $http_code after $attempt_seconds seconds" >&2 + fi + else + attempt_seconds=$(($(date +%s) - attempt_start_time)) + echo "Package download failed in $attempt_seconds seconds" >&2 + fi + + if [ "$retries" -le 1 ]; then + total_seconds=$(($(date +%s) - download_start_time)) + echo "Package download failed after $total_seconds seconds" >&2 + exit 1 + fi + + echo "Waiting $interval seconds before retrying (retries left: $retries)..." >&2 + sleep $interval + done + + echo "$download_path" +} + +get_github_releases_by_version() { + local repo=$1 + local version=${2:-".+"} + local allow_pre_release=${3:-false} + local with_assets_only=${4:-false} + + page_size="100" + + json=$(curl -fsSL "https://api.github.com/repos/${repo}/releases?per_page=${page_size}") + + if [[ -z "$json" ]]; then + echo "Failed to get releases" >&2 + exit 1 + fi + + if [[ $with_assets_only == "true" ]]; then + json=$(echo $json | jq -r '.[] | select(.assets | length > 0)') + else + json=$(echo $json | jq -r '.[]') + fi + + if [[ $allow_pre_release == "true" ]]; then + json=$(echo $json | jq -r '.') + else + json=$(echo $json | jq -r '. | select(.prerelease==false)') + fi + + # Filter out rc/beta/etc releases, convert to numeric version and sort + json=$(echo $json | jq '. | select(.tag_name | test(".*-[a-z]|beta") | not)' | jq '.tag_name |= gsub("[^\\d.]"; "")' | jq -s 'sort_by(.tag_name | split(".") | map(tonumber))') + + # Select releases matching version + if [[ $version == "latest" ]]; then + json_filtered=$(echo $json | jq .[-1]) + elif [[ $version == *"+"* ]] || [[ $version == *"*"* ]]; then + json_filtered=$(echo $json | jq --arg version $version '.[] | select(.tag_name | test($version))') + else + json_filtered=$(echo $json | jq --arg version $version '.[] | select(.tag_name | contains($version))') + fi + + if [[ -z "$json_filtered" ]]; then + echo "Failed to get releases from ${repo} matching version ${version}" >&2 + echo "Available versions: $(echo "$json" | jq -r '.tag_name')" >&2 + exit 1 + fi + + echo $json_filtered +} + +resolve_github_release_asset_url() { + local repo=$1 + local url_filter=$2 + local version=${3:-".+"} + local allow_pre_release=${4:-false} + local allow_multiple_matches=${5:-false} + + matching_releases=$(get_github_releases_by_version "${repo}" "${version}" "${allow_pre_release}" "true") + matched_url=$(echo $matching_releases | jq -r ".assets[].browser_download_url | select(${url_filter})") + + if [[ -z "$matched_url" ]]; then + echo "Found no download urls matching pattern: ${url_filter}" >&2 + echo "Available download urls: $(echo "$matching_releases" | jq -r '.assets[].browser_download_url')" >&2 + exit 1 + fi + + if [[ "$(echo "$matched_url" | wc -l)" -gt 1 ]]; then + if [[ $allow_multiple_matches == "true" ]]; then + matched_url=$(echo "$matched_url" | tail -n 1) + else + echo "Multiple matches found for ${version} version and ${url_filter} URL filter. Please make filters more specific" >&2 + exit 1 + fi + fi + + echo $matched_url +} + +get_checksum_from_github_release() { + local repo=$1 + local file_name=$2 + local version=${3:-".+"} + local hash_type=$4 + local allow_pre_release=${5:-false} + + if [[ -z "$file_name" ]]; then + echo "File name is not specified." >&2 + exit 1 + fi + + if [[ "$hash_type" == "SHA256" ]]; then + hash_pattern="[A-Fa-f0-9]{64}" + elif [[ "$hash_type" == "SHA512" ]]; then + hash_pattern="[A-Fa-f0-9]{128}" + else + echo "Unknown hash type: ${hash_type}" >&2 + exit 1 + fi + + matching_releases=$(get_github_releases_by_version "${repo}" "${version}" "${allow_pre_release}" "true") + matched_line=$(printf "$(echo $matching_releases | jq '.body')\n" | grep "$file_name") + + if [[ -z "$matched_line" ]]; then + echo "File name ${file_name} not found in release body" >&2 + exit 1 + fi + + if [[ "$(echo "$matched_line" | wc -l)" -gt 1 ]]; then + echo "Multiple matches found for ${file_name} in release body: ${matched_line}" >&2 + exit 1 + fi + + hash=$(echo $matched_line | grep -oP "$hash_pattern") + + if [[ -z "$hash" ]]; then + echo "Found ${file_name} in body of release, but failed to get hash from it: ${matched_line}" >&2 + exit 1 + fi + + echo "$hash" +} + +get_checksum_from_url() { + local url=$1 + local file_name=$2 + local hash_type=$3 + local use_custom_search_pattern=${4:-false} + local delimiter=${5:-' '} + local word_number=${6:-1} + + if [[ "$hash_type" == "SHA256" ]]; then + hash_pattern="[A-Fa-f0-9]{64}" + elif [[ "$hash_type" == "SHA512" ]]; then + hash_pattern="[A-Fa-f0-9]{128}" + else + echo "Unknown hash type: ${hash_type}" >&2 + exit 1 + fi + + checksums_file_path=$(download_with_retry "$url") + checksums=$(cat "$checksums_file_path") + rm "$checksums_file_path" + + matched_line=$(printf "$checksums\n" | grep "$file_name") + + if [[ "$(echo "$matched_line" | wc -l)" -gt 1 ]]; then + echo "Found multiple lines matching file name ${file_name} in checksum file." >&2 + exit 1 + fi + + if [[ -z "$matched_line" ]]; then + echo "File name ${file_name} not found in checksum file." >&2 + exit 1 + fi + + if [[ $use_custom_search_pattern == "true" ]]; then + hash=$(echo "$matched_line" | sed 's/ */ /g' | cut -d "$delimiter" -f "$word_number" | tr -d -c '[:alnum:]') + else + hash=$(echo $matched_line | grep -oP "$hash_pattern") + fi + + if [[ -z "$hash" ]]; then + echo "Found ${file_name} in checksum file, but failed to get hash from it: ${matched_line}" >&2 + exit 1 + fi + + echo "$hash" +} + +use_checksum_comparison() { + local file_path=$1 + local checksum=$2 + local sha_type=${3:-"256"} + + echo "Performing checksum verification" + + if [[ ! -f "$file_path" ]]; then + echo "File not found: $file_path" + exit 1 + fi + + local_file_hash=$(shasum --algorithm "$sha_type" "$file_path" | awk '{print $1}') + + if [[ "$local_file_hash" != "$checksum" ]]; then + echo "Checksum verification failed. Expected hash: $checksum; Actual hash: $local_file_hash." + exit 1 + else + echo "Checksum verification passed. Expected hash: $checksum; Actual hash: $local_file_hash." + fi +} + +get_toolset_value() { + local toolset_path="${INSTALLER_SCRIPT_FOLDER}/toolset.json" + local query=$1 + + echo "$(jq -r "$query" $toolset_path)" +} diff --git a/images/ubuntu-slim/scripts/helpers/os.sh b/images/ubuntu-slim/scripts/helpers/os.sh new file mode 100644 index 0000000000..8699a9d9e7 --- /dev/null +++ b/images/ubuntu-slim/scripts/helpers/os.sh @@ -0,0 +1,13 @@ +#!/bin/bash -e +################################################################################ +## File: os.sh +## Desc: Helper functions for OS releases +################################################################################ + +is_ubuntu22() { + lsb_release -rs | grep -q '22.04' +} + +is_ubuntu24() { + lsb_release -rs | grep -q '24.04' +} diff --git a/images/ubuntu-slim/test.sh b/images/ubuntu-slim/test.sh new file mode 100755 index 0000000000..bb9054f1fe --- /dev/null +++ b/images/ubuntu-slim/test.sh @@ -0,0 +1,96 @@ +#!/bin/bash -e + +# This script builds and runs various tests on the ubuntu-slim Docker image +# to ensure it contains the expected software and configurations. +# The build and test workflows for docker images expect this script to be present. +# +# Usage: test.sh [IMAGE_NAME] +# If IMAGE_NAME is not provided, defaults to ubuntu-slim:test + +show_help() { + echo "Usage: $0 [IMAGE_NAME]" + echo "" + echo "Test a Docker image to ensure it contains the expected software and configurations." + echo "" + echo "Arguments:" + echo " IMAGE_NAME Docker image name to test (default: ubuntu-slim:test)" + echo "" + echo "Examples:" + echo " $0 # Test ubuntu-slim:test (builds image first)" + echo " $0 my-registry/ubuntu:latest # Test existing image" + echo " $0 ubuntu-slim:v1.2.3 # Test tagged image" + echo "" + echo "Options:" + echo " -h, --help Show this help message" +} + +# Handle help flags +if [[ "$1" == "-h" || "$1" == "--help" ]]; then + show_help + exit 0 +fi + +# Set the image name from parameter or use default +IMAGE_NAME="${1:-ubuntu-slim:test}" + +echo "Testing image: $IMAGE_NAME" + +run_test() { + local desc="$1" + shift + if output=$(docker run --rm "$IMAGE_NAME" "$@" 2>&1); then + echo "PASS: $desc" + echo "$output" | sed 's/^/ /' + else + echo "FAIL: $desc" + echo "$output" | sed 's/^/ /' + exit 1 + fi +} + +# Build the image only if using the default name (for backward compatibility) +if [[ "$IMAGE_NAME" == "ubuntu-slim:test" ]]; then + echo "Building image: $IMAGE_NAME" + if ! docker build --no-cache --debug --progress plain -t "$IMAGE_NAME" .; then + echo "Error: Docker build failed" + exit 1 + fi +else + # Check if the image exists + if ! docker image inspect "$IMAGE_NAME" >/dev/null 2>&1; then + echo "Error: Image '$IMAGE_NAME' does not exist. Please build it first or provide a valid image name." + echo "Run '$0 --help' for usage information." + exit 1 + fi +fi + +echo "Running tests on image: $IMAGE_NAME" + +docker history --no-trunc "$IMAGE_NAME" +docker inspect -f "{{ .Size }}" "$IMAGE_NAME" | numfmt --to=iec | sed 's/^/Image size: /' + +# Ensure key software is installed and runnable +run_test "GitHub CLI is installed" gh --version +run_test "Azure CLI is installed" az version +run_test "AWS CLI is installed" aws --version +run_test "Session Manager plugin is installed" session-manager-plugin --version +run_test "AWS SAM CLI is installed" sam --version +run_test "jq is installed" jq --version +run_test "git is installed" git --version +run_test "node is installed" node --version +run_test "npm is installed" npm --version +run_test "python3 is installed" python3 --version +run_test "python is aliased" python --version +run_test "pipx is installed" pipx --version +run_test "curl is installed" curl --version +run_test "wget is installed" wget --version +run_test "yq is installed" yq --version +run_test "parallel is installed" parallel --version +run_test "bc is installed" bc --version +run_test "zstd is installed" zstd --version +run_test "google cloud SDK is installed" gcloud --version +run_test "git lfs is installed" git lfs version +run_test "powershell is installed" pwsh --version + +# Quick check: ensure the imagedata JSON file was created during image build +run_test "imagedata JSON file exists" test -f /imagegeneration/imagedata.json diff --git a/images/ubuntu-slim/toolsets/toolset.json b/images/ubuntu-slim/toolsets/toolset.json new file mode 100644 index 0000000000..0e3ed0dd15 --- /dev/null +++ b/images/ubuntu-slim/toolsets/toolset.json @@ -0,0 +1,109 @@ +{ + "toolcache": [ + { + "name": "node", + "url" : "https://raw.githubusercontent.com/actions/node-versions/main/versions-manifest.json", + "platform" : "linux", + "arch": "x64", + "versions": [ + "22.*", + "24.*" + ] + }, + { + "name": "CodeQL", + "platform" : "linux", + "arch": "x64", + "versions": [ + "*" + ] + } + ], + "apt": { + "vital_packages": [ + "apt-utils", + "bzip2", + "ca-certificates", + "curl", + "g++", + "gcc", + "make", + "jq", + "tar", + "unzip", + "wget" + ], + "common_packages": [ + "autoconf", + "automake", + "bc", + "dbus", + "dnsutils", + "dpkg", + "dpkg-dev", + "fakeroot", + "fonts-noto-color-emoji", + "gnupg2", + "iproute2", + "iputils-ping", + "libyaml-dev", + "libtool", + "libssl-dev", + "libsqlite3-dev", + "locales", + "lzma", + "mercurial", + "openssh-client", + "p7zip-rar", + "pkg-config", + "python-is-python3", + "rpm", + "texinfo", + "tk", + "tree", + "tzdata", + "upx", + "xvfb", + "xz-utils", + "zsync" + ], + "cmd_packages": [ + "acl", + "binutils", + "libnss3-tools", + "coreutils", + "file", + "findutils", + "flex", + "ftp", + "haveged", + "lz4", + "netcat-openbsd", + "net-tools", + "p7zip-full", + "parallel", + "patchelf", + "pigz", + "pollinate", + "rsync", + "shellcheck", + "sqlite3", + "ssh", + "sshpass", + "sudo", + "systemd-coredump", + "telnet", + "time", + "zip" + ] + }, + "brew": [ + ], + "node": { + "default": "24" + }, + "node_modules": [ ], + "pwsh": { + "version": "7.5" + } +} diff --git a/images/ubuntu-slim/ubuntu-slim-Readme.md b/images/ubuntu-slim/ubuntu-slim-Readme.md new file mode 100644 index 0000000000..6e11dbb707 --- /dev/null +++ b/images/ubuntu-slim/ubuntu-slim-Readme.md @@ -0,0 +1,118 @@ +# Ubuntu-Slim +- OS Version: 24.04.3 LTS +- Kernel Version: 6.14.0-36-generic +- Image Version: 1.0.0 +- Systemd version: 255.4-1ubuntu8.11 + +## Installed Software + +### Language and Runtime +- Bash 5.2.21(1)-release +- Dash 0.5.12-6ubuntu5 +- Node.js 24.12.0 +- Perl 5.38.2 +- Python 3.12.3 + +### Package Management +- Npm 11.6.2 +- Pip 24.0 +- Pip3 24.0 +- Pipx 1.8.0 + +### Tools +- AzCopy 10.31.0 - available by `azcopy` and `azcopy10` aliases +- Bicep 0.39.26 +- Git 2.52.0 +- Git LFS 3.7.1 +- Git-ftp 1.6.0 +- jq 1.7 +- nvm 0.40.3 +- OpenSSL 3.0.13-0ubuntu3.6 +- yq 4.49.2 +- zstd 1.5.7 + +### CLI Tools +- AWS CLI 2.32.14 +- AWS CLI Session Manager Plugin 1.2.764.0 +- AWS SAM CLI 1.150.1 +- Azure CLI 2.81.0 +- Azure CLI (azure-devops) 1.0.2 +- GitHub CLI 2.83.2 +- Google Cloud CLI 549.0.1 + +### PowerShell Tools +- PowerShell 7.5.4 + +### Installed apt packages +| Name | Version | +| ---------------------- | ---------------------------- | +| acl | 2.3.2-1build1.1 | +| apt-utils | 2.8.3 | +| autoconf | 2.71-3 | +| automake | 1:1.16.5-1.3ubuntu1 | +| bc | 1.07.1-3ubuntu4 | +| binutils | 2.42-4ubuntu2.8 | +| bzip2 | 1.0.8-5.1build0.1 | +| ca-certificates | 20240203 | +| coreutils | 9.4-3ubuntu6.1 | +| curl | 8.5.0-2ubuntu10.6 | +| dbus | 1.14.10-4ubuntu4.1 | +| dnsutils | 1:9.18.39-0ubuntu0.24.04.2 | +| dpkg | 1.22.6ubuntu6.5 | +| dpkg-dev | 1.22.6ubuntu6.5 | +| 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 | +| ftp | 20230507-2build3 | +| g++ | 4:13.2.0-7ubuntu1 | +| gcc | 4:13.2.0-7ubuntu1 | +| gnupg2 | 2.4.4-2ubuntu17.3 | +| haveged | 1.9.14-1ubuntu2 | +| iproute2 | 6.1.0-1ubuntu6.2 | +| iputils-ping | 3:20240117-1ubuntu0.1 | +| jq | 1.7.1-3ubuntu0.24.04.1 | +| libnss3-tools | 2:3.98-1build1 | +| libsqlite3-dev | 3.45.1-1ubuntu2.5 | +| libssl-dev | 3.0.13-0ubuntu3.6 | +| libtool | 2.4.7-7build1 | +| libyaml-dev | 0.2.5-1build1 | +| locales | 2.39-0ubuntu8.6 | +| lz4 | 1.9.4-1build1.1 | +| lzma | 9.22-2.2 | +| make | 4.3-4.1build2 | +| mercurial | 6.7.2-1ubuntu2.2 | +| net-tools | 2.10-0.1ubuntu4.4 | +| netcat-openbsd | 1.226-1ubuntu2 | +| openssh-client | 1:9.6p1-3ubuntu13.14 | +| 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 | +| python-is-python3 | 3.11.4-1 | +| rpm | 4.18.2+dfsg-2.1build2 | +| rsync | 3.2.7-1ubuntu1.2 | +| shellcheck | 0.9.0-1 | +| sqlite3 | 3.45.1-1ubuntu2.5 | +| ssh | 1:9.6p1-3ubuntu13.14 | +| sshpass | 1.09-1 | +| sudo | 1.9.15p5-3ubuntu5.24.04.1 | +| systemd-coredump | 255.4-1ubuntu8.11 | +| 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.24.04.2 | +| tzdata | 2025b-0ubuntu0.24.04.1 | +| unzip | 6.0-28ubuntu4.1 | +| upx | 4.2.2-3 | +| wget | 1.21.4-1ubuntu4.1 | +| xvfb | 2:21.1.12-1ubuntu1.5 | +| xz-utils | 5.6.1+really5.4.5-1ubuntu0.2 | +| zip | 3.0-13ubuntu0.2 | +| zsync | 0.6.2-5build1 | diff --git a/images/ubuntu/Ubuntu2204-Readme.md b/images/ubuntu/Ubuntu2204-Readme.md index 88f5b314de..91ac1e940f 100644 --- a/images/ubuntu/Ubuntu2204-Readme.md +++ b/images/ubuntu/Ubuntu2204-Readme.md @@ -1,12 +1,18 @@ | Announcements | |-| -| [[Windows & Ubuntu] .NET 6 will be removed from the images on 2025-08-01.](https://github.com/actions/runner-images/issues/12241) | +| [[Windows/Ubuntu] Docker Server and Client will be updated to version 29.1.*, Docker Compose will be updated to version 2.40.3 on February 9th, 2026](https://github.com/actions/runner-images/issues/13474) | +| [[all OSs] Updating Azure PowerShell Module version to 14.6.0 on January 26th, 2026.](https://github.com/actions/runner-images/issues/13473) | +| [[Ubuntu-22.04] Pre-cached Docker images will be removed from the image on January 12th, 2026](https://github.com/actions/runner-images/issues/13472) | +| [[Ubuntu] The additional Haskell (GHC) instance will be removed from images on January 12th, 2026](https://github.com/actions/runner-images/issues/13471) | +| [[Ubuntu-22.04, macOS-14, Windows-2022] Android SDK platforms and build tools older than version 34 will be removed on January 12th, 2026.](https://github.com/actions/runner-images/issues/13469) | +| [[all OSs] Python 3.9 will be removed; Python 3.12 will become the default on Windows images on January 12th, 2026.](https://github.com/actions/runner-images/issues/13468) | +| [[all OSs] Android NDK 26 will be removed, Android NDK 27 will be used by default on January 12th, 2026.](https://github.com/actions/runner-images/issues/13467) | *** # Ubuntu 22.04 - OS Version: 22.04.5 LTS -- Kernel Version: 6.8.0-1030-azure -- Image Version: 20250713.1.0 -- Systemd version: 249.11-0ubuntu3.16 +- Kernel Version: 6.8.0-1044-azure +- Image Version: 20260105.207.1 +- Systemd version: 249.11-0ubuntu3.17 ## Installed Software @@ -18,28 +24,28 @@ - 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.6 -- Kotlin 2.1.10-release-473 +- Julia 1.12.3 +- Kotlin 2.3.0-release-356 - Mono 6.12.0.200 - MSBuild 16.10.1.31701 (Mono 6.12.0.200) -- Node.js 20.19.3 +- Node.js 20.19.6 - Perl 5.34.0 - Python 3.10.12 - Ruby 3.0.2p107 -- Swift 6.1.2 +- Swift 6.2.3 ### Package Management - cpan 1.64 -- Helm 3.18.4 -- Homebrew 4.5.9 -- Miniconda 25.5.1 +- Helm 3.19.4 +- Homebrew 5.0.9 +- Miniconda 25.11.1 - Npm 10.8.2 - NuGet 6.6.1.2 - Pip 22.0.2 - Pip3 22.0.2 -- Pipx 1.7.1 +- Pipx 1.8.0 - RubyGems 3.3.5 -- Vcpkg (build from commit 09b8d93e61) +- Vcpkg (build from commit e3db8f65d2) - Yarn 1.22.22 #### Environment variables @@ -58,116 +64,117 @@ to accomplish this. ### Project Management - Ant 1.10.12 -- Gradle 8.14.3 -- Lerna 8.2.3 -- Maven 3.9.10 -- Sbt 1.11.3 +- Gradle 9.2.1 +- Lerna 9.0.3 +- Maven 3.9.12 +- Sbt 1.12.0 ### Tools -- Ansible 2.17.12 +- Ansible 2.17.14 - apt-fast 1.10.0 -- AzCopy 10.29.1 - available by `azcopy` and `azcopy10` aliases -- Bazel 8.3.1 +- AzCopy 10.31.0 - available by `azcopy` and `azcopy10` aliases +- Bazel 8.5.0 - Bazelisk 1.26.0 -- Bicep 0.36.177 +- Bicep 0.39.26 - Buildah 1.23.1 - CMake 3.31.6 -- CodeQL Action Bundle 2.22.1 -- Docker Amazon ECR Credential Helper 0.10.1 -- Docker Compose v2 2.36.2 -- Docker-Buildx 0.25.0 +- CodeQL Action Bundle 2.23.8 +- Docker Amazon ECR Credential Helper 0.11.0 +- Docker Compose v2 2.38.2 +- Docker-Buildx 0.30.1 - Docker Client 28.0.4 - Docker Server 28.0.4 -- Fastlane 2.228.0 -- Git 2.50.1 -- Git LFS 3.7.0 +- Fastlane 2.230.0 +- Git 2.52.0 +- Git LFS 3.7.1 - Git-ftp 1.6.0 - Haveged 1.9.14 -- Heroku 10.11.0 +- Heroku 10.16.0 - jq 1.6 -- Kind 0.29.0 -- Kubectl 1.33.2 -- Kustomize 5.7.0 -- Leiningen 2.11.2 +- Kind 0.31.0 +- Kubectl 1.35.0 +- Kustomize 5.8.0 +- Leiningen 2.12.0 - MediaInfo 21.09 - Mercurial 6.1.1 -- Minikube 1.36.0 +- Minikube 1.37.0 - n 10.2.0 - Newman 6.2.1 - nvm 0.40.3 -- OpenSSL 3.0.2-0ubuntu1.19 -- Packer 1.13.1 -- Parcel 2.15.4 +- OpenSSL 3.0.2-0ubuntu1.20 +- Packer 1.14.3 +- Parcel 2.16.3 - Podman 3.4.4 -- Pulumi 3.181.0 -- R 4.5.1 +- Pulumi 3.214.0 +- R 4.5.2 - Skopeo 1.4.1 - Sphinx Open Source Search Server 2.2.11 - SVN 1.14.1 -- Terraform 1.12.2 +- Terraform 1.14.3 - yamllint 1.37.1 -- yq 4.46.1 +- yq 4.50.1 - zstd 1.5.7 -- Ninja 1.13.1 +- Ninja 1.13.2 ### CLI Tools -- Alibaba Cloud CLI 3.0.289 -- AWS CLI 2.27.50 -- AWS CLI Session Manager Plugin 1.2.707.0 -- AWS SAM CLI 1.142.1 -- Azure CLI 2.75.0 +- Alibaba Cloud CLI 3.2.5 +- AWS CLI 2.32.29 +- AWS CLI Session Manager Plugin 1.2.764.0 +- AWS SAM CLI 1.151.0 +- Azure CLI 2.81.0 - Azure CLI (azure-devops) 1.0.2 -- GitHub CLI 2.75.0 -- Google Cloud CLI 529.0.0 -- Netlify CLI 22.2.2 -- OpenShift CLI 4.19.3 -- ORAS CLI 1.2.3 -- Vercel CLI 44.4.1 +- GitHub CLI 2.83.2 +- Google Cloud CLI 550.0.0 +- Netlify CLI 23.13.0 +- OpenShift CLI 4.20.8 +- ORAS CLI 1.3.0 +- Vercel CLI 50.1.4 ### Java | Version | Environment Variable | | ------------------- | -------------------- | -| 8.0.452+9 | JAVA_HOME_8_X64 | -| 11.0.27+6 (default) | JAVA_HOME_11_X64 | -| 17.0.15+6 | JAVA_HOME_17_X64 | -| 21.0.7+6 | JAVA_HOME_21_X64 | +| 8.0.472+8 | JAVA_HOME_8_X64 | +| 11.0.29+7 (default) | JAVA_HOME_11_X64 | +| 17.0.17+10 | JAVA_HOME_17_X64 | +| 21.0.9+10 | JAVA_HOME_21_X64 | +| 25.0.1+8 | JAVA_HOME_25_X64 | ### PHP Tools - PHP: 8.1.2 -- Composer 2.8.10 -- PHPUnit 8.5.42 +- Composer 2.9.3 +- PHPUnit 8.5.50 ``` Both Xdebug and PCOV extensions are installed, but only Xdebug is enabled. ``` ### Haskell Tools -- Cabal 3.14.2.0 -- GHC 9.12.2 +- Cabal 3.16.1.0 +- GHC 9.14.1 - GHCup 0.1.50.2 -- Stack 3.7.1 +- Stack 3.9.1 ### Rust Tools -- Cargo 1.88.0 -- Rust 1.88.0 -- Rustdoc 1.88.0 +- Cargo 1.92.0 +- Rust 1.92.0 +- Rustdoc 1.92.0 - Rustup 1.28.2 #### Packages -- Bindgen 0.72.0 -- Cargo audit 0.21.2 -- Cargo clippy 0.1.88 +- Bindgen 0.72.1 +- Cargo audit 0.22.0 +- Cargo clippy 0.1.92 - Cargo outdated 0.17.0 -- Cbindgen 0.29.0 +- Cbindgen 0.29.2 - Rustfmt 1.8.0 ### Browsers and Drivers -- Google Chrome 138.0.7204.100 -- ChromeDriver 138.0.7204.94 -- Chromium 138.0.7204.0 -- Microsoft Edge 138.0.3351.83 -- Microsoft Edge WebDriver 138.0.3351.83 -- Selenium server 4.34.0 -- Mozilla Firefox 140.0.4 +- Google Chrome 143.0.7499.169 +- ChromeDriver 143.0.7499.169 +- Chromium 143.0.7499.0 +- Microsoft Edge 143.0.3650.96 +- Microsoft Edge WebDriver 143.0.3650.96 +- Selenium server 4.39.0 +- Mozilla Firefox 146.0.1 - Geckodriver 0.36.0 #### Environment variables @@ -179,14 +186,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.412, 9.0.203 -- nbgv 3.7.115+d31f50f4d1 +- .NET Core SDK: 8.0.122, 8.0.206, 8.0.319, 8.0.416, 9.0.112, 9.0.205, 9.0.308, 10.0.101 +- nbgv 3.9.50+6feeb89450 ### Databases - sqlite3 3.37.2 #### PostgreSQL -- PostgreSQL 14.18 +- PostgreSQL 14.20 ``` User: postgres PostgreSQL service is disabled by default. @@ -194,7 +201,7 @@ Use the following command as a part of your job to start the service: 'sudo syst ``` #### MySQL -- MySQL 8.0.42-0ubuntu0.22.04.2 +- MySQL 8.0.44-0ubuntu0.22.04.2 ``` User: root Password: root @@ -204,45 +211,48 @@ Use the following command as a part of your job to start the service: 'sudo syst #### MS SQL - sqlcmd 17.10.0001.1 -- SqlPackage 170.0.94.3 +- SqlPackage 170.2.70.1 ### Cached Tools #### Go - 1.22.12 -- 1.23.11 -- 1.24.5 +- 1.23.12 +- 1.24.11 +- 1.25.5 #### Node.js -- 18.20.8 -- 20.19.3 -- 22.17.0 +- 20.19.6 +- 22.21.1 +- 24.12.0 #### Python -- 3.9.23 -- 3.10.18 -- 3.11.13 -- 3.12.11 -- 3.13.5 +- 3.9.25 +- 3.10.19 +- 3.11.14 +- 3.12.12 +- 3.13.11 +- 3.14.2 #### 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.11.13 [PyPy 7.3.20] #### Ruby -- 3.1.7 -- 3.2.8 -- 3.3.8 +- 3.2.9 +- 3.3.10 +- 3.4.8 ### PowerShell Tools -- PowerShell 7.4.10 +- PowerShell 7.4.13 #### PowerShell Modules - Az: 12.5.0 - MarkdownPS: 1.10 -- Microsoft.Graph: 2.29.0 +- Microsoft.Graph: 2.34.0 - Pester: 5.7.1 - PSScriptAnalyzer: 1.24.0 @@ -253,26 +263,26 @@ Use the following command as a part of your job to start the service: 'sudo syst | nginx | 1.18.0 | /etc/nginx/nginx.conf | inactive | 80 | ### Android -| Package Name | Version | -| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Android Command Line Tools | 9.0 | -| Android SDK Build-tools | 36.0.0
35.0.0 35.0.1
34.0.0
33.0.0 33.0.1 33.0.2 33.0.3
32.0.0
31.0.0 | -| Android SDK Platform-Tools | 36.0.0 | -| Android SDK Platforms | android-36 (rev 2)
android-35-ext15 (rev 1)
android-35-ext14 (rev 1)
android-35 (rev 2)
android-34-ext8 (rev 1)
android-34-ext12 (rev 1)
android-34-ext11 (rev 1)
android-34-ext10 (rev 1)
android-34 (rev 3)
android-33-ext5 (rev 1)
android-33-ext4 (rev 1)
android-33 (rev 3)
android-32 (rev 1)
android-31 (rev 1) | -| Android Support Repository | 47.0.0 | -| CMake | 3.18.1
3.22.1
3.31.5 | -| Google Play services | 49 | -| Google Repository | 58 | -| NDK | 26.3.11579264
27.2.12479018 (default) | +| Package Name | Version | +| -------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Android Command Line Tools | 9.0 | +| Android SDK Build-tools | 36.0.0 36.1.0
35.0.0 35.0.1
34.0.0
33.0.0 33.0.1 33.0.2 33.0.3
32.0.0
31.0.0 | +| Android SDK Platform-Tools | 36.0.2 | +| Android SDK Platforms | android-36.1 (rev 1)
android-36-ext19 (rev 1)
android-36-ext18 (rev 1)
android-36 (rev 2)
android-35-ext15 (rev 1)
android-35-ext14 (rev 1)
android-35 (rev 2)
android-34-ext8 (rev 1)
android-34-ext12 (rev 1)
android-34-ext11 (rev 1)
android-34-ext10 (rev 1)
android-34 (rev 3)
android-33-ext5 (rev 1)
android-33-ext4 (rev 1)
android-33 (rev 3)
android-32 (rev 1)
android-31 (rev 1) | +| Android Support Repository | 47.0.0 | +| CMake | 3.18.1
3.22.1
3.31.5 | +| Google Play services | 49 | +| Google Repository | 58 | +| NDK | 26.3.11579264
27.3.13750724 (default) | #### Environment variables | Name | Value | | ----------------------- | -------------------------------------------- | | 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/27.2.12479018 | -| ANDROID_NDK_ROOT | /usr/local/lib/android/sdk/ndk/27.2.12479018 | +| ANDROID_NDK | /usr/local/lib/android/sdk/ndk/27.3.13750724 | +| ANDROID_NDK_HOME | /usr/local/lib/android/sdk/ndk/27.3.13750724 | +| ANDROID_NDK_LATEST_HOME | /usr/local/lib/android/sdk/ndk/27.3.13750724 | +| ANDROID_NDK_ROOT | /usr/local/lib/android/sdk/ndk/27.3.13750724 | | ANDROID_SDK_ROOT | /usr/local/lib/android/sdk | ### Cached Docker images @@ -281,18 +291,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.19 | sha256:6baf43584bcb78f2e5847d1de515f23499913ac9f12bdf834811a3145eb11ca1 | 2025-10-08 | | debian:10 | sha256:58ce6f1271ae1c8a2006ff7d3e54e9874d839f573d8009c20154ad0f2fb0a225 | 2024-06-13 | -| debian:11 | sha256:6d4f6b40afca63b59a44ffcedbb2e457e83b645710916d7f094b79c6c591ac28 | 2025-06-30 | -| moby/buildkit:latest | sha256:ddd1ca44b21eda906e81ab14a3d467fa6c39cd73b9a39df1196210edcb8db59e | 2025-07-01 | +| debian:11 | sha256:3bbe51d205c8c0ea0473bb33fa6c18c836ca49ac3032c0bf71413cda8515354f | 2025-12-29 | +| moby/buildkit:latest | sha256:5601811fde88bb9e8a577bfe804af82bccb712e1cd07ff94663bded5e628cf75 | 2025-12-16 | | node:18 | sha256:c6ae79e38498325db67193d391e6ec1d224d96c693a8a4d943498556716d3783 | 2025-03-27 | | node:18-alpine | sha256:8d6421d663b4c28fd3ebc498332f249011d118945588d0a35cb9bc4b8ca09d9e | 2025-03-27 | -| node:20 | sha256:2c3f34d2d28e4c13b26f7244c653527d15544626e85b1a21fb67a95ba4df9a01 | 2025-07-02 | -| node:20-alpine | sha256:fa316946c0cb1f041fe46dda150f3085b71168555e5706ec0c7466a5bae12244 | 2025-07-02 | -| node:22 | sha256:2fa6c977460b56d4d8278947ab56faeb312bc4cc6c4cf78920c6de27812f51c5 | 2025-07-02 | -| node:22-alpine | sha256:10962e8568729b0cfd506170c5a2d1918a2c10ac08c0e6900180b4bac061adc9 | 2025-07-02 | +| node:20 | sha256:929de1eecc6450613bf37eea2f93f3d362b536a465d74e962488b5eca1168948 | 2025-12-30 | +| node:20-alpine | sha256:658d0f63e501824d6c23e06d4bb95c71e7d704537c9d9272f488ac03a370d448 | 2025-12-18 | +| node:22 | sha256:8739e532180cfe09e03bbb4545fc725b044c921280532d7c9c1480ba2396837e | 2025-12-30 | +| node:22-alpine | sha256:0340fa682d72068edf603c305bfbc10e23219fb0e40df58d9ea4d6f33a9798bf | 2025-12-18 | | ubuntu:20.04 | sha256:8feb4d8ca5354def3d8fce243717141ce31e2c428701f6682bd2fafe15388214 | 2025-04-08 | -| ubuntu:22.04 | sha256:3c61d3759c2639d4b836d32a2d3c83fa0214e36f195a3421018dbaaf79cbe37f | 2025-06-20 | +| ubuntu:22.04 | sha256:104ae83764a5119017b8e8d6218fa0832b09df65aae7d5a6de29a85d813da2fb | 2025-10-13 | ### Installed apt packages | Name | Version | @@ -301,16 +311,16 @@ 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.8 | +| binutils | 2.38-4ubuntu2.12 | | 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.21 | | dbus | 1.12.20-2ubuntu4.1 | -| dnsutils | 1:9.18.30-0ubuntu0.22.04.2 | -| dpkg | 1.21.1ubuntu2.3 | -| dpkg-dev | 1.21.1ubuntu2.3 | +| dnsutils | 1:9.18.39-0ubuntu0.22.04.2 | +| dpkg | 1.21.1ubuntu2.6 | +| dpkg-dev | 1.21.1ubuntu2.6 | | fakeroot | 1.28-1ubuntu1 | | file | 1:5.41-3ubuntu0.1 | | findutils | 4.8.0-1ubuntu3 | @@ -323,13 +333,13 @@ Use the following command as a part of your job to start the service: 'sudo syst | haveged | 1.9.14-1ubuntu1 | | imagemagick | 8:6.9.11.60+dfsg-1.3ubuntu0.22.04.5 | | iproute2 | 5.15.0-1ubuntu2 | -| iputils-ping | 3:20211215-1 | -| jq | 1.6-2.1ubuntu3 | +| iputils-ping | 3:20211215-1ubuntu0.1 | +| jq | 1.6-2.1ubuntu3.1 | | 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.10 | -| libcurl4 | 7.81.0-1ubuntu1.20 | +| libc6-dev | 2.35-0ubuntu3.11 | +| libcurl4 | 7.81.0-1ubuntu1.21 | | libgbm-dev | 23.2.1-1ubuntu3.1\~22.04.3 | | libgconf-2-4 | 3.2.6-7ubuntu2 | | libgsl-dev | 2.7.1+dfsg-3 | @@ -337,15 +347,16 @@ Use the following command as a part of your job to start the service: 'sudo syst | libmagic-dev | 1:5.41-3ubuntu0.1 | | libmagickcore-dev | 8:6.9.11.60+dfsg-1.3ubuntu0.22.04.5 | | libmagickwand-dev | 8:6.9.11.60+dfsg-1.3ubuntu0.22.04.5 | +| libnss3-tools | 2:3.98-0ubuntu0.22.04.2 | | libsecret-1-dev | 0.20.5-2 | -| libsqlite3-dev | 3.37.2-2ubuntu0.4 | -| libssl-dev | 3.0.2-0ubuntu1.19 | +| libsqlite3-dev | 3.37.2-2ubuntu0.5 | +| libssl-dev | 3.0.2-0ubuntu1.20 | | 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.10 | +| locales | 2.35-0ubuntu3.11 | | lz4 | 1.9.3-2build2 | | m4 | 1.4.18-5ubuntu2 | | make | 4.3-4.1build1 | @@ -367,13 +378,13 @@ Use the following command as a part of your job to start the service: 'sudo syst | rsync | 3.2.7-0ubuntu0.22.04.4 | | shellcheck | 0.8.0-2 | | sphinxsearch | 2.2.11-8 | -| sqlite3 | 3.37.2-2ubuntu0.4 | +| sqlite3 | 3.37.2-2ubuntu0.5 | | ssh | 1:8.9p1-3ubuntu0.13 | | sshpass | 1.09-1 | | subversion | 1.14.1-3ubuntu0.22.04.1 | | sudo | 1.9.9-1ubuntu2.5 | | swig | 4.0.2-1ubuntu1 | -| systemd-coredump | 249.11-0ubuntu3.16 | +| systemd-coredump | 249.11-0ubuntu3.17 | | tar | 1.34+dfsg-1ubuntu0.1.22.04.2 | | telnet | 0.17-44build1 | | texinfo | 6.8-4build1 | @@ -384,7 +395,7 @@ Use the following command as a part of your job to start the service: 'sudo syst | upx | 3.96-3 | | wget | 1.21.2-2ubuntu1.1 | | xorriso | 1.5.4-2 | -| xvfb | 2:21.1.4-2ubuntu1.7\~22.04.15 | +| xvfb | 2:21.1.4-2ubuntu1.7\~22.04.16 | | xz-utils | 5.2.5-2ubuntu1 | | zip | 3.0-12build2 | | zsync | 0.6.2-3ubuntu1 | diff --git a/images/ubuntu/Ubuntu2404-Readme.md b/images/ubuntu/Ubuntu2404-Readme.md index 7a1a1c33b4..49c17bd6a6 100644 --- a/images/ubuntu/Ubuntu2404-Readme.md +++ b/images/ubuntu/Ubuntu2404-Readme.md @@ -1,12 +1,18 @@ | Announcements | |-| -| [[Windows & Ubuntu] .NET 6 will be removed from the images on 2025-08-01.](https://github.com/actions/runner-images/issues/12241) | +| [[Windows/Ubuntu] Docker Server and Client will be updated to version 29.1.*, Docker Compose will be updated to version 2.40.3 on February 9th, 2026](https://github.com/actions/runner-images/issues/13474) | +| [[all OSs] Updating Azure PowerShell Module version to 14.6.0 on January 26th, 2026.](https://github.com/actions/runner-images/issues/13473) | +| [[Ubuntu-22.04] Pre-cached Docker images will be removed from the image on January 12th, 2026](https://github.com/actions/runner-images/issues/13472) | +| [[Ubuntu] The additional Haskell (GHC) instance will be removed from images on January 12th, 2026](https://github.com/actions/runner-images/issues/13471) | +| [[Ubuntu-22.04, macOS-14, Windows-2022] Android SDK platforms and build tools older than version 34 will be removed on January 12th, 2026.](https://github.com/actions/runner-images/issues/13469) | +| [[all OSs] Python 3.9 will be removed; Python 3.12 will become the default on Windows images on January 12th, 2026.](https://github.com/actions/runner-images/issues/13468) | +| [[all OSs] Android NDK 26 will be removed, Android NDK 27 will be used by default on January 12th, 2026.](https://github.com/actions/runner-images/issues/13467) | *** # Ubuntu 24.04 -- OS Version: 24.04.2 LTS +- OS Version: 24.04.3 LTS - Kernel Version: 6.11.0-1018-azure -- Image Version: 20250713.1.0 -- Systemd version: 255.4-1ubuntu8.8 +- Image Version: 20260105.202.1 +- Systemd version: 255.4-1ubuntu8.12 ## Installed Software @@ -16,27 +22,27 @@ - Clang-format: 16.0.6, 17.0.6, 18.1.3 - Clang-tidy: 16.0.6, 17.0.6, 18.1.3 - 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.6 -- Kotlin 2.1.10-release-473 -- Node.js 20.19.3 +- GNU C++: 12.4.0, 13.3.0, 14.2.0 +- GNU Fortran: 12.4.0, 13.3.0, 14.2.0 +- Julia 1.12.3 +- Kotlin 2.3.0-release-356 +- Node.js 20.19.6 - Perl 5.38.2 - Python 3.12.3 - Ruby 3.2.3 -- Swift 6.1.2 +- Swift 6.2.3 ### Package Management - cpan 1.64 -- Helm 3.18.4 -- Homebrew 4.5.9 -- Miniconda 25.5.1 +- Helm 3.19.4 +- Homebrew 5.0.9 +- Miniconda 25.11.1 - Npm 10.8.2 - Pip 24.0 - Pip3 24.0 -- Pipx 1.7.1 +- Pipx 1.8.0 - RubyGems 3.4.20 -- Vcpkg (build from commit 09b8d93e61) +- Vcpkg (build from commit e3db8f65d2) - Yarn 1.22.22 #### Environment variables @@ -55,99 +61,100 @@ to accomplish this. ### Project Management - Ant 1.10.14 -- Gradle 8.14.3 -- Lerna 8.2.3 -- Maven 3.9.10 +- Gradle 9.2.1 +- Lerna 9.0.3 +- Maven 3.9.12 ### Tools -- Ansible 2.18.6 -- AzCopy 10.29.1 - available by `azcopy` and `azcopy10` aliases -- Bazel 8.3.1 +- Ansible 2.20.1 +- AzCopy 10.31.0 - available by `azcopy` and `azcopy10` aliases +- Bazel 8.5.0 - Bazelisk 1.26.0 -- Bicep 0.36.177 +- Bicep 0.39.26 - Buildah 1.33.7 - CMake 3.31.6 -- CodeQL Action Bundle 2.22.1 -- Docker Amazon ECR Credential Helper 0.10.1 -- Docker Compose v2 2.36.2 -- Docker-Buildx 0.25.0 +- CodeQL Action Bundle 2.23.8 +- Docker Amazon ECR Credential Helper 0.11.0 +- Docker Compose v2 2.38.2 +- Docker-Buildx 0.30.1 - Docker Client 28.0.4 - Docker Server 28.0.4 -- Fastlane 2.228.0 -- Git 2.50.1 -- Git LFS 3.7.0 +- Fastlane 2.230.0 +- Git 2.52.0 +- Git LFS 3.7.1 - Git-ftp 1.6.0 - Haveged 1.9.14 - jq 1.7 -- Kind 0.29.0 -- Kubectl 1.33.2 -- Kustomize 5.7.0 +- Kind 0.31.0 +- Kubectl 1.35.0 +- Kustomize 5.8.0 - MediaInfo 24.01 - Mercurial 6.7.2 -- Minikube 1.36.0 +- Minikube 1.37.0 - n 10.2.0 - Newman 6.2.1 - nvm 0.40.3 -- OpenSSL 3.0.13-0ubuntu3.5 -- Packer 1.13.1 -- Parcel 2.15.4 +- OpenSSL 3.0.13-0ubuntu3.6 +- Packer 1.14.3 +- Parcel 2.16.3 - Podman 4.9.3 -- Pulumi 3.181.0 +- Pulumi 3.214.0 - Skopeo 1.13.3 - Sphinx Open Source Search Server 2.2.11 - yamllint 1.37.1 -- yq 4.46.1 +- yq 4.50.1 - zstd 1.5.7 -- Ninja 1.13.1 +- Ninja 1.13.2 ### CLI Tools -- AWS CLI 2.27.50 -- AWS CLI Session Manager Plugin 1.2.707.0 -- AWS SAM CLI 1.142.1 -- Azure CLI 2.75.0 +- AWS CLI 2.32.29 +- AWS CLI Session Manager Plugin 1.2.764.0 +- AWS SAM CLI 1.151.0 +- Azure CLI 2.81.0 - Azure CLI (azure-devops) 1.0.2 -- GitHub CLI 2.75.0 -- Google Cloud CLI 529.0.0 +- GitHub CLI 2.83.2 +- Google Cloud CLI 550.0.0 ### Java -| Version | Environment Variable | -| ------------------- | -------------------- | -| 8.0.452+9 | JAVA_HOME_8_X64 | -| 11.0.27+6 | JAVA_HOME_11_X64 | -| 17.0.15+6 (default) | JAVA_HOME_17_X64 | -| 21.0.7+6 | JAVA_HOME_21_X64 | +| Version | Environment Variable | +| -------------------- | -------------------- | +| 8.0.472+8 | JAVA_HOME_8_X64 | +| 11.0.29+7 | JAVA_HOME_11_X64 | +| 17.0.17+10 (default) | JAVA_HOME_17_X64 | +| 21.0.9+10 | JAVA_HOME_21_X64 | +| 25.0.1+8 | JAVA_HOME_25_X64 | ### PHP Tools - PHP: 8.3.6 -- Composer 2.8.10 -- PHPUnit 8.5.42 +- Composer 2.9.3 +- PHPUnit 8.5.50 ``` Both Xdebug and PCOV extensions are installed, but only Xdebug is enabled. ``` ### Haskell Tools -- Cabal 3.14.2.0 -- GHC 9.12.2 +- Cabal 3.16.1.0 +- GHC 9.14.1 - GHCup 0.1.50.2 -- Stack 3.7.1 +- Stack 3.9.1 ### Rust Tools -- Cargo 1.88.0 -- Rust 1.88.0 -- Rustdoc 1.88.0 +- Cargo 1.92.0 +- Rust 1.92.0 +- Rustdoc 1.92.0 - Rustup 1.28.2 #### Packages - Rustfmt 1.8.0 ### Browsers and Drivers -- Google Chrome 138.0.7204.100 -- ChromeDriver 138.0.7204.94 -- Chromium 138.0.7204.0 -- Microsoft Edge 138.0.3351.83 -- Microsoft Edge WebDriver 138.0.3351.83 -- Selenium server 4.34.0 -- Mozilla Firefox 140.0.4 +- Google Chrome 143.0.7499.169 +- ChromeDriver 143.0.7499.169 +- Chromium 143.0.7499.0 +- Microsoft Edge 143.0.3650.96 +- Microsoft Edge WebDriver 143.0.3650.96 +- Selenium server 4.39.0 +- Mozilla Firefox 146.0.1 - Geckodriver 0.36.0 #### Environment variables @@ -159,14 +166,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.117 -- nbgv 3.7.115+d31f50f4d1 +- .NET Core SDK: 8.0.122, 8.0.206, 8.0.319, 8.0.416, 9.0.112, 9.0.205, 9.0.308, 10.0.101 +- nbgv 3.9.50+6feeb89450 ### Databases - sqlite3 3.45.1 #### PostgreSQL -- PostgreSQL 16.9 +- PostgreSQL 16.11 ``` User: postgres PostgreSQL service is disabled by default. @@ -174,7 +181,7 @@ Use the following command as a part of your job to start the service: 'sudo syst ``` #### MySQL -- MySQL 8.0.42-0ubuntu0.24.04.2 +- MySQL 8.0.44-0ubuntu0.24.04.2 ``` User: root Password: root @@ -186,35 +193,39 @@ Use the following command as a part of your job to start the service: 'sudo syst #### Go - 1.22.12 -- 1.23.11 -- 1.24.5 +- 1.23.12 +- 1.24.11 +- 1.25.5 #### Node.js -- 18.20.8 -- 20.19.3 -- 22.17.0 +- 20.19.6 +- 22.21.1 +- 24.12.0 #### Python -- 3.9.23 -- 3.10.18 -- 3.11.13 -- 3.12.11 -- 3.13.5 +- 3.9.25 +- 3.10.19 +- 3.11.14 +- 3.12.12 +- 3.13.11 +- 3.14.2 #### PyPy - 3.9.19 [PyPy 7.3.16] - 3.10.16 [PyPy 7.3.19] +- 3.11.13 [PyPy 7.3.20] #### Ruby -- 3.2.8 -- 3.3.8 +- 3.2.9 +- 3.3.10 +- 3.4.8 ### PowerShell Tools -- PowerShell 7.4.10 +- PowerShell 7.4.13 #### PowerShell Modules - Az: 12.5.0 -- Microsoft.Graph: 2.29.0 +- Microsoft.Graph: 2.34.0 - Pester: 5.7.1 - PSScriptAnalyzer: 1.24.0 @@ -225,26 +236,26 @@ Use the following command as a part of your job to start the service: 'sudo syst | nginx | 1.24.0 | /etc/nginx/nginx.conf | inactive | 80 | ### Android -| Package Name | Version | -| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Android Command Line Tools | 12.0 | -| Android SDK Build-tools | 36.0.0
35.0.0 35.0.1
34.0.0 | -| Android SDK Platform-Tools | 36.0.0 | -| Android SDK Platforms | android-36 (rev 2)
android-35-ext15 (rev 1)
android-35-ext14 (rev 1)
android-35 (rev 2)
android-34-ext8 (rev 1)
android-34-ext12 (rev 1)
android-34-ext11 (rev 1)
android-34-ext10 (rev 1)
android-34 (rev 3)
android-33-ext5 (rev 1)
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
27.2.12479018 (default)
28.2.13676358 | +| Package Name | Version | +| -------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Android Command Line Tools | 12.0 | +| Android SDK Build-tools | 36.0.0 36.1.0
35.0.0 35.0.1
34.0.0 | +| Android SDK Platform-Tools | 36.0.2 | +| Android SDK Platforms | android-36.1 (rev 1)
android-36-ext19 (rev 1)
android-36-ext18 (rev 1)
android-36 (rev 2)
android-35-ext15 (rev 1)
android-35-ext14 (rev 1)
android-35 (rev 2)
android-34-ext8 (rev 1)
android-34-ext12 (rev 1)
android-34-ext11 (rev 1)
android-34-ext10 (rev 1)
android-34 (rev 3) | +| Android Support Repository | 47.0.0 | +| CMake | 3.31.5
4.1.2 | +| Google Play services | 49 | +| Google Repository | 58 | +| NDK | 26.3.11579264
27.3.13750724 (default)
28.2.13676358
29.0.14206865 | #### Environment variables | Name | Value | | ----------------------- | -------------------------------------------- | | 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.2.13676358 | -| ANDROID_NDK_ROOT | /usr/local/lib/android/sdk/ndk/27.2.12479018 | +| ANDROID_NDK | /usr/local/lib/android/sdk/ndk/27.3.13750724 | +| ANDROID_NDK_HOME | /usr/local/lib/android/sdk/ndk/27.3.13750724 | +| ANDROID_NDK_LATEST_HOME | /usr/local/lib/android/sdk/ndk/29.0.14206865 | +| ANDROID_NDK_ROOT | /usr/local/lib/android/sdk/ndk/27.3.13750724 | | ANDROID_SDK_ROOT | /usr/local/lib/android/sdk | ### Installed apt packages @@ -254,16 +265,16 @@ 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.5 | +| binutils | 2.42-4ubuntu2.8 | | bison | 2:3.8.2+dfsg-1build2 | | brotli | 1.1.0-2build2 | | bzip2 | 1.0.8-5.1build0.1 | -| coreutils | 9.4-3ubuntu6 | +| coreutils | 9.4-3ubuntu6.1 | | curl | 8.5.0-2ubuntu10.6 | | dbus | 1.14.10-4ubuntu4.1 | -| dnsutils | 1:9.18.30-0ubuntu0.24.04.2 | -| dpkg | 1.22.6ubuntu6.1 | -| dpkg-dev | 1.22.6ubuntu6.1 | +| dnsutils | 1:9.18.39-0ubuntu0.24.04.2 | +| dpkg | 1.22.6ubuntu6.5 | +| dpkg-dev | 1.22.6ubuntu6.5 | | fakeroot | 1.33-1 | | file | 1:5.45-3build1 | | findutils | 4.9.0-5build1 | @@ -274,14 +285,15 @@ Use the following command as a part of your job to start the service: 'sudo syst | gcc | 4:13.2.0-7ubuntu1 | | gnupg2 | 2.4.4-2ubuntu17.3 | | haveged | 1.9.14-1ubuntu2 | -| iproute2 | 6.1.0-1ubuntu6 | -| iputils-ping | 3:20240117-1build1 | -| jq | 1.7.1-3build1 | -| libsqlite3-dev | 3.45.1-1ubuntu2.3 | -| libssl-dev | 3.0.13-0ubuntu3.5 | +| iproute2 | 6.1.0-1ubuntu6.2 | +| iputils-ping | 3:20240117-1ubuntu0.1 | +| jq | 1.7.1-3ubuntu0.24.04.1 | +| libnss3-tools | 2:3.98-1build1 | +| libsqlite3-dev | 3.45.1-1ubuntu2.5 | +| libssl-dev | 3.0.13-0ubuntu3.6 | | libtool | 2.4.7-7build1 | | libyaml-dev | 0.2.5-1build1 | -| locales | 2.39-0ubuntu8.4 | +| locales | 2.39-0ubuntu8.6 | | lz4 | 1.9.4-1build1.1 | | m4 | 1.4.19-4build1 | | make | 4.3-4.1build2 | @@ -289,7 +301,7 @@ 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.4 | | netcat | 1.226-1ubuntu2 | -| openssh-client | 1:9.6p1-3ubuntu13.12 | +| openssh-client | 1:9.6p1-3ubuntu13.14 | | p7zip-full | 16.02+transitional.1 | | p7zip-rar | 16.02+transitional.1 | | parallel | 20231122+ds-1 | @@ -302,23 +314,23 @@ Use the following command as a part of your job to start the service: 'sudo syst | rsync | 3.2.7-1ubuntu1.2 | | shellcheck | 0.9.0-1 | | sphinxsearch | 2.2.11-8build1 | -| sqlite3 | 3.45.1-1ubuntu2.3 | -| ssh | 1:9.6p1-3ubuntu13.12 | +| sqlite3 | 3.45.1-1ubuntu2.5 | +| ssh | 1:9.6p1-3ubuntu13.14 | | sshpass | 1.09-1 | | sudo | 1.9.15p5-3ubuntu5.24.04.1 | | swig | 4.2.0-2ubuntu1 | -| systemd-coredump | 255.4-1ubuntu8.8 | +| systemd-coredump | 255.4-1ubuntu8.12 | | 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 | +| tree | 2.1.1-2ubuntu3.24.04.2 | | tzdata | 2025b-0ubuntu0.24.04.1 | | unzip | 6.0-28ubuntu4.1 | | upx | 4.2.2-3 | | wget | 1.21.4-1ubuntu4.1 | -| xvfb | 2:21.1.12-1ubuntu1.4 | +| xvfb | 2:21.1.12-1ubuntu1.5 | | xz-utils | 5.6.1+really5.4.5-1ubuntu0.2 | | zip | 3.0-13ubuntu0.2 | | zsync | 0.6.2-5build1 | diff --git a/images/ubuntu/scripts/build/Install-PowerShellAzModules.ps1 b/images/ubuntu/scripts/build/Install-PowerShellAzModules.ps1 index 626dc2f706..b3dba55844 100644 --- a/images/ubuntu/scripts/build/Install-PowerShellAzModules.ps1 +++ b/images/ubuntu/scripts/build/Install-PowerShellAzModules.ps1 @@ -11,6 +11,7 @@ Import-Module "$env:HELPER_SCRIPTS/../tests/Helpers.psm1" # Get modules content from toolset $modules = (Get-ToolsetContent).azureModules $installPSModulePath = "/usr/share" +$psModuleMachinePath = $env:PSModulePath + ":" foreach ($module in $modules) { $moduleName = $module.name @@ -19,9 +20,12 @@ foreach ($module in $modules) { foreach ($version in $module.versions) { $modulePath = Join-Path -Path $installPSModulePath -ChildPath "${moduleName}_${version}" Write-Host " - $version [$modulePath]" + $psModuleMachinePath += ($modulePath + ":") Save-Module -Path $modulePath -Name $moduleName -RequiredVersion $version -Force } - } +$finalLine = "PSModulePath=$($psModuleMachinePath.TrimEnd(':').Replace("\root", '$HOME'))" +Add-Content -Path "/etc/environment" -Value $finalLine + Invoke-PesterTests -TestFile "PowerShellModules" -TestName "AzureModules" diff --git a/images/ubuntu/scripts/build/configure-environment.sh b/images/ubuntu/scripts/build/configure-environment.sh index 27a607feca..609d31ab4d 100644 --- a/images/ubuntu/scripts/build/configure-environment.sh +++ b/images/ubuntu/scripts/build/configure-environment.sh @@ -78,3 +78,7 @@ fi if is_ubuntu22; then sed -i 's/openssl_conf = openssl_init/#openssl_conf = openssl_init/g' /etc/ssl/openssl.cnf fi + +# Disable man-db auto update +echo "set man-db/auto-update false" | debconf-communicate +dpkg-reconfigure man-db diff --git a/images/ubuntu/scripts/build/install-android-sdk.sh b/images/ubuntu/scripts/build/install-android-sdk.sh index b6928f1e2b..78de3d6cb6 100644 --- a/images/ubuntu/scripts/build/install-android-sdk.sh +++ b/images/ubuntu/scripts/build/install-android-sdk.sh @@ -15,8 +15,8 @@ add_filtered_installation_components() { local tools_array=("$@") for item in ${tools_array[@]}; do - # Take the last argument after splitting string by ';'' and '-'' - item_version=$(echo "${item##*[-;]}") + # Take the last version number that appears after the last '-' or ';' + item_version=$(echo "$item" | grep -oE '[-;][0-9.]+' | grep -oE '[0-9.]+') # Semver 'comparison'. Add item to components array, if item's version is greater than or equal to minimum version if [[ "$(printf "${minimum_version}\n${item_version}\n" | sort -V | head -n1)" == "$minimum_version" ]]; then diff --git a/images/ubuntu/scripts/build/install-docker.sh b/images/ubuntu/scripts/build/install-docker.sh index 35b55f2882..40090835b2 100644 --- a/images/ubuntu/scripts/build/install-docker.sh +++ b/images/ubuntu/scripts/build/install-docker.sh @@ -7,6 +7,7 @@ # Source the helpers for use with the script source $HELPER_SCRIPTS/install.sh +source $HELPER_SCRIPTS/os.sh REPO_URL="https://download.docker.com/linux/ubuntu" GPG_KEY="/usr/share/keyrings/docker.gpg" @@ -64,25 +65,9 @@ systemctl is-enabled --quiet docker.service || systemctl enable docker.service sleep 10 docker info -if [[ "${DOCKERHUB_PULL_IMAGES:-yes}" == "yes" ]]; then - # If credentials are provided, attempt to log into Docker Hub - # with a paid account to avoid Docker Hub's rate limit. - if [[ "${DOCKERHUB_LOGIN}" ]] && [[ "${DOCKERHUB_PASSWORD}" ]]; then - docker login --username "${DOCKERHUB_LOGIN}" --password "${DOCKERHUB_PASSWORD}" - fi - - # Pull images - images=$(get_toolset_value '.docker.images[]') - for image in $images; do - docker pull "$image" - done - - # Always attempt to logout so we do not leave our credentials on the built - # image. Logout _should_ return a zero exit code even if no credentials were - # stored from earlier. - docker logout -else - echo "Skipping docker images pulling" +# Pull Dependabot docker image +if ! is_ubuntu22; then + docker pull ghcr.io/dependabot/dependabot-updater-core:latest fi # Download amazon-ecr-credential-helper @@ -102,6 +87,3 @@ rm $GPG_KEY rm $REPO_PATH invoke_tests "Tools" "Docker" -if [[ "${DOCKERHUB_PULL_IMAGES:-yes}" == "yes" ]]; then - invoke_tests "Tools" "Docker images" -fi diff --git a/images/ubuntu/scripts/build/install-dotnetcore-sdk.sh b/images/ubuntu/scripts/build/install-dotnetcore-sdk.sh index f450f96360..5a500091cd 100644 --- a/images/ubuntu/scripts/build/install-dotnetcore-sdk.sh +++ b/images/ubuntu/scripts/build/install-dotnetcore-sdk.sh @@ -9,83 +9,59 @@ source $HELPER_SCRIPTS/etc-environment.sh source $HELPER_SCRIPTS/install.sh source $HELPER_SCRIPTS/os.sh -extract_dotnet_sdk() { - local archive_name=$1 - - set -e - destination="./tmp-$(basename -s .tar.gz $archive_name)" - - echo "Extracting $archive_name to $destination" - mkdir "$destination" && tar -C "$destination" -xzf "$archive_name" - rsync -qav --remove-source-files "$destination/shared/" /usr/share/dotnet/shared/ - rsync -qav --remove-source-files "$destination/host/" /usr/share/dotnet/host/ - rsync -qav --remove-source-files "$destination/sdk/" /usr/share/dotnet/sdk/ - rm -rf "$destination" "$archive_name" -} - -# Ubuntu 20 doesn't support EOL versions -latest_dotnet_packages=$(get_toolset_value '.dotnet.aptPackages[]') dotnet_versions=$(get_toolset_value '.dotnet.versions[]') dotnet_tools=$(get_toolset_value '.dotnet.tools[].name') # Disable telemetry export DOTNET_CLI_TELEMETRY_OPTOUT=1 -# Install .NET SDK from apt -# There is a versions conflict, that leads to -# Microsoft <-> Canonical repos dependencies mix up. -# Give Microsoft's repo higher priority to avoid collisions. -# See: https://github.com/dotnet/core/issues/7699 -cat << EOF > /etc/apt/preferences.d/dotnet -Package: *net* -Pin: origin packages.microsoft.com -Pin-Priority: 1001 -EOF - -apt-get update - -for latest_package in ${latest_dotnet_packages[@]}; do - echo "Determining if .NET Core ($latest_package) is installed" - if ! dpkg -S $latest_package &> /dev/null; then - echo "Could not find .NET Core ($latest_package), installing..." - apt-get install $latest_package - else - echo ".NET Core ($latest_package) is already installed" - fi -done - -rm /etc/apt/preferences.d/dotnet - +# Install dotnet dependencies +# https://learn.microsoft.com/en-us/dotnet/core/install/linux-ubuntu-decision#dependencies apt-get update +apt-get install --no-install-recommends \ + ca-certificates \ + libc6 \ + libgcc-s1 \ + libgssapi-krb5-2 \ + liblttng-ust1 \ + libssl3 \ + libstdc++6 \ + zlib1g + +if is_ubuntu22; then + apt-get install --no-install-recommends libicu70 +fi + +if is_ubuntu24; then + apt-get install --no-install-recommends libicu74 +fi + +# Install .NET SDKs and Runtimes +mkdir -p /usr/share/dotnet -# Install .NET SDK from home repository -# Get list of all released SDKs from channels which are not end-of-life or preview sdks=() for version in ${dotnet_versions[@]}; do release_url="https://dotnetcli.blob.core.windows.net/dotnet/release-metadata/${version}/releases.json" releases=$(cat "$(download_with_retry "$release_url")") - if [[ $version == "6.0" ]]; then - sdks=("${sdks[@]}" $(echo "${releases}" | jq -r 'first(.releases[].sdks[]?.version | select(contains("preview") or contains("rc") | not))')) - else - sdks=("${sdks[@]}" $(echo "${releases}" | jq -r '.releases[].sdk.version | select(contains("preview") or contains("rc") | not)')) - sdks=("${sdks[@]}" $(echo "${releases}" | jq -r '.releases[].sdks[]?.version | select(contains("preview") or contains("rc") | not)')) - fi + sdks=("${sdks[@]}" $(echo "${releases}" | jq -r '.releases[].sdk.version | select(contains("preview") or contains("rc") | not)')) + sdks=("${sdks[@]}" $(echo "${releases}" | jq -r '.releases[].sdks[]?.version | select(contains("preview") or contains("rc") | not)')) done sorted_sdks=$(echo ${sdks[@]} | tr ' ' '\n' | sort -r | uniq -w 5) -# Download/install additional SDKs in parallel -export -f download_with_retry -export -f extract_dotnet_sdk +## Download installer from dot.net +DOTNET_INSTALL_SCRIPT="https://dot.net/v1/dotnet-install.sh" +install_script_path=$(download_with_retry $DOTNET_INSTALL_SCRIPT) +chmod +x $install_script_path -parallel --jobs 0 --halt soon,fail=1 \ - 'url="https://dotnetcli.blob.core.windows.net/dotnet/Sdk/{}/dotnet-sdk-{}-linux-x64.tar.gz"; \ - download_with_retry $url' ::: "${sorted_sdks[@]}" +for sdk in ${sorted_sdks[@]}; do + echo "Installing .NET SDK $sdk" + $install_script_path --version $sdk --install-dir /usr/share/dotnet --no-path +done -find . -name "*.tar.gz" | parallel --halt soon,fail=1 'extract_dotnet_sdk {}' +## Dotnet installer doesn't create symlinks to executable or modify PATH +ln -s /usr/share/dotnet/dotnet /usr/bin/dotnet -# NuGetFallbackFolder at /usr/share/dotnet/sdk/NuGetFallbackFolder is warmed up by smoke test -# Additional FTE will just copy to ~/.dotnet/NuGet which provides no benefit on a fungible machine set_etc_environment_variable DOTNET_SKIP_FIRST_TIME_EXPERIENCE 1 set_etc_environment_variable DOTNET_NOLOGO 1 set_etc_environment_variable DOTNET_MULTILEVEL_LOOKUP 0 diff --git a/images/ubuntu/scripts/build/install-haskell.sh b/images/ubuntu/scripts/build/install-haskell.sh index b5a6b09c02..4af05755dc 100644 --- a/images/ubuntu/scripts/build/install-haskell.sh +++ b/images/ubuntu/scripts/build/install-haskell.sh @@ -23,8 +23,8 @@ prepend_etc_environment_path $ghcup_bin available_versions=$(ghcup list -t ghc -r | grep -v "prerelease" | awk '{print $2}') -# Install 2 latest Haskell Major.Minor versions -major_minor_versions=$(echo "$available_versions" | cut -d"." -f 1,2 | uniq | tail -n2) +# Install latest Haskell Major.Minor version +major_minor_versions=$(echo "$available_versions" | cut -d"." -f 1,2 | uniq | tail -n1) for major_minor_version in $major_minor_versions; do full_version=$(echo "$available_versions" | grep "$major_minor_version." | tail -n1) echo "install ghc version $full_version..." diff --git a/images/ubuntu/scripts/build/install-ruby.sh b/images/ubuntu/scripts/build/install-ruby.sh index be929857d0..be70c914c6 100644 --- a/images/ubuntu/scripts/build/install-ruby.sh +++ b/images/ubuntu/scripts/build/install-ruby.sh @@ -23,9 +23,9 @@ fi apt-get install libz-dev openssl libssl-dev echo "Install Ruby from toolset..." -package_tar_names=$(curl -fsSL "https://api.github.com/repos/ruby/ruby-builder/releases/latest" | jq -r '.assets[].name') toolset_versions=$(get_toolset_value '.toolcache[] | select(.name | contains("Ruby")) | .versions[]') platform_version=$(get_toolset_value '.toolcache[] | select(.name | contains("Ruby")) | .platform_version') +arch=$(get_toolset_value '.toolcache[] | select(.name | contains("Ruby")) | .arch') ruby_path="$AGENT_TOOLSDIRECTORY/Ruby" echo "Check if Ruby hostedtoolcache folder exist..." @@ -34,7 +34,8 @@ if [[ ! -d $ruby_path ]]; then fi for toolset_version in ${toolset_versions[@]}; do - package_tar_name=$(echo "$package_tar_names" | grep "^ruby-${toolset_version}-ubuntu-${platform_version}.tar.gz$" | sort -V | tail -1) + download_url=$(resolve_github_release_asset_url "ruby/ruby-builder" "test(\"ruby-${toolset_version}-ubuntu-${platform_version}-${arch}.tar.gz\")" "${toolset_version}" "false" "true") + package_tar_name="${download_url##*/}" ruby_version=$(echo "$package_tar_name" | cut -d'-' -f 2) ruby_version_path="$ruby_path/$ruby_version" @@ -42,7 +43,6 @@ for toolset_version in ${toolset_versions[@]}; do mkdir -p $ruby_version_path echo "Downloading tar archive $package_tar_name" - download_url="https://github.com/ruby/ruby-builder/releases/download/toolcache/${package_tar_name}" package_archive_path=$(download_with_retry "$download_url") echo "Expand '$package_tar_name' to the '$ruby_version_path' folder" diff --git a/images/ubuntu/scripts/build/install-runner-package.sh b/images/ubuntu/scripts/build/install-runner-package.sh deleted file mode 100644 index 019689ee40..0000000000 --- a/images/ubuntu/scripts/build/install-runner-package.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/bash -e -################################################################################ -## File: install-runner-package.sh -## Desc: Download and Install runner package -################################################################################ - -# Source the helpers for use with the script -source $HELPER_SCRIPTS/install.sh - -download_url=$(resolve_github_release_asset_url "actions/runner" 'test("actions-runner-linux-x64-[0-9]+\\.[0-9]{3}\\.[0-9]+\\.tar\\.gz$")' "latest") -archive_name="${download_url##*/}" -archive_path=$(download_with_retry "$download_url") - -mkdir -p /opt/runner-cache -mv "$archive_path" "/opt/runner-cache/$archive_name" diff --git a/images/ubuntu/scripts/build/list-dpkg.sh b/images/ubuntu/scripts/build/list-dpkg.sh new file mode 100644 index 0000000000..70d2a09665 --- /dev/null +++ b/images/ubuntu/scripts/build/list-dpkg.sh @@ -0,0 +1,8 @@ +#!/bin/bash -e +################################################################################ +## File: list-dpkg.sh +## Desc: List all installed dpkg packages +################################################################################ + +echo "Listing all installed dpkg packages..." +dpkg-query -W -f='${Package} ${Version}\n' | sort diff --git a/images/ubuntu/scripts/docs-gen/Generate-SoftwareReport.ps1 b/images/ubuntu/scripts/docs-gen/Generate-SoftwareReport.ps1 index c138501bcd..4f4be1bee3 100644 --- a/images/ubuntu/scripts/docs-gen/Generate-SoftwareReport.ps1 +++ b/images/ubuntu/scripts/docs-gen/Generate-SoftwareReport.ps1 @@ -254,9 +254,6 @@ $androidTools.AddTable($(Build-AndroidTable)) $androidTools.AddHeader("Environment variables").AddTable($(Build-AndroidEnvironmentTable)) -if (-not $(Test-IsUbuntu24)) { - $installedSoftware.AddHeader("Cached Docker images").AddTable($(Get-CachedDockerImagesTableData)) -} $installedSoftware.AddHeader("Installed apt packages").AddTable($(Get-AptPackages)) $softwareReport.ToJson() | Out-File -FilePath "${OutputDirectory}/software-report.json" -Encoding UTF8NoBOM diff --git a/images/ubuntu/scripts/docs-gen/SoftwareReport.Common.psm1 b/images/ubuntu/scripts/docs-gen/SoftwareReport.Common.psm1 index d4ebbebb51..7d94facdc4 100644 --- a/images/ubuntu/scripts/docs-gen/SoftwareReport.Common.psm1 +++ b/images/ubuntu/scripts/docs-gen/SoftwareReport.Common.psm1 @@ -266,11 +266,6 @@ function Get-PowerShellModules { $result += [ToolVersionsListNode]::new("Az", $azureInstalledModules, "^\d+\.\d+", "Inline") } - [Array] $azureCachedModules = Get-ChildItem /usr/share/az_*.zip -File | ForEach-Object { $_.Name.Split("_")[1] } - if ($azureCachedModules.Count -gt 0) { - $result += [ToolVersionsListNode]::new("Az (Cached)", $azureCachedModules, "^\d+\.\d+", "Inline") - } - (Get-ToolsetContent).powershellModules.name | ForEach-Object { $moduleName = $_ $moduleVersions = Get-Module -Name $moduleName -ListAvailable | Select-Object -ExpandProperty Version | Sort-Object -Unique diff --git a/images/ubuntu/scripts/helpers/etc-environment.sh b/images/ubuntu/scripts/helpers/etc-environment.sh index 7a235b784c..8673e4c3b0 100644 --- a/images/ubuntu/scripts/helpers/etc-environment.sh +++ b/images/ubuntu/scripts/helpers/etc-environment.sh @@ -26,7 +26,7 @@ replace_etc_environment_variable() { local variable_name=$1 local variable_value=$2 - # modify /etc/environemnt in place by replacing a string that begins with variable_name + # modify /etc/environment in place by replacing a string that begins with variable_name sudo sed -i -e "s%^${variable_name}=.*$%${variable_name}=${variable_value}%" /etc/environment } @@ -78,10 +78,10 @@ append_etc_environment_path() { # /etc/environment # # TODO: there might be the others variables to be processed in the same way as "PATH" variable -# ie MANPATH, INFOPATH, LD_*, etc. In the current implementation the values from /etc/evironments +# ie MANPATH, INFOPATH, LD_*, etc. In the current implementation the values from /etc/environment # replace the values of the current environment reload_etc_environment() { - # add `export ` to every variable of /etc/environemnt except PATH and eval the result shell script + # add `export ` to every variable of /etc/environment except PATH and eval the result shell script eval $(grep -v '^PATH=' /etc/environment | sed -e 's%^%export %') # handle PATH specially etc_path=$(get_etc_environment_variable PATH) diff --git a/images/ubuntu/scripts/tests/Apt.Tests.ps1 b/images/ubuntu/scripts/tests/Apt.Tests.ps1 index 844f1ceae8..7cb83938e9 100644 --- a/images/ubuntu/scripts/tests/Apt.Tests.ps1 +++ b/images/ubuntu/scripts/tests/Apt.Tests.ps1 @@ -8,6 +8,7 @@ Describe "Apt" { switch ($toolName) { "acl" { $toolName = "getfacl"; break } "aria2" { $toolName = "aria2c"; break } + "libnss3-tools" { $toolName = "certutil"; break } "p7zip-full" { $toolName = "p7zip"; break } "subversion" { $toolName = "svn"; break } "sphinxsearch" { $toolName = "searchd"; break } diff --git a/images/ubuntu/scripts/tests/Haskell.Tests.ps1 b/images/ubuntu/scripts/tests/Haskell.Tests.ps1 index a620df5c3d..18717ae120 100644 --- a/images/ubuntu/scripts/tests/Haskell.Tests.ps1 +++ b/images/ubuntu/scripts/tests/Haskell.Tests.ps1 @@ -2,12 +2,6 @@ Describe "Haskell" { $GHCCommonPath = "/usr/local/.ghcup/ghc" $GHCVersions = Get-ChildItem -Path $GHCCommonPath | Where-Object { $_.Name -match "\d+\.\d+" } - $testCase = @{ GHCVersions = $GHCVersions } - - It "GHC directory contains two version of GHC" -TestCases $testCase { - $GHCVersions.Count | Should -Be 2 - } - $testCases = $GHCVersions | ForEach-Object { @{ GHCPath = "${_}/bin/ghc"} } It "GHC version " -TestCases $testCases { diff --git a/images/ubuntu/scripts/tests/PowerShellModules.Tests.ps1 b/images/ubuntu/scripts/tests/PowerShellModules.Tests.ps1 index 9a1079ece2..bf1cd9466f 100644 --- a/images/ubuntu/scripts/tests/PowerShellModules.Tests.ps1 +++ b/images/ubuntu/scripts/tests/PowerShellModules.Tests.ps1 @@ -50,15 +50,6 @@ Describe "AzureModules" { $moduleVersion | Should -Match $expectedVersion } } - - if ($module.default) { - $moduleInfo = @{ moduleName = $moduleName; moduleDefault = $module.default } - - It " set as default" -TestCases $moduleInfo { - $moduleVersion = (Get-Module -ListAvailable -Name $moduleName).Version.ToString() - $moduleVersion | Should -Match $moduleDefault - } - } } } } diff --git a/images/ubuntu/scripts/tests/RunnerCache.Tests.ps1 b/images/ubuntu/scripts/tests/RunnerCache.Tests.ps1 deleted file mode 100644 index 8c8109ef07..0000000000 --- a/images/ubuntu/scripts/tests/RunnerCache.Tests.ps1 +++ /dev/null @@ -1,7 +0,0 @@ -Describe "RunnerCache" { - Context "runner cache directory not empty" { - It " not empty" -TestCases @{ RunnerCachePath = "/opt/runner-cache" } { - (Get-ChildItem -Path "$RunnerCachePath/*.tar.gz" -Recurse).Count | Should -BeGreaterThan 0 - } - } -} diff --git a/images/ubuntu/scripts/tests/System.Tests.ps1 b/images/ubuntu/scripts/tests/System.Tests.ps1 index e609fea7c5..b25ed75f0c 100644 --- a/images/ubuntu/scripts/tests/System.Tests.ps1 +++ b/images/ubuntu/scripts/tests/System.Tests.ps1 @@ -2,14 +2,17 @@ # If the test is running on the ADO pipeline or on the GitHub actions, the test will be skipped Describe "Disk free space" -Skip:(-not [String]::IsNullOrEmpty($env:AGENT_NAME) -or -not [String]::IsNullOrEmpty($env:RUNNER_NAME)) { It "Image has enough free space" { - $freeSpace = (Get-PSDrive "/").Free - $freeSpace | Should -BeGreaterOrEqual 17GB + $diskInfo = Get-PSDrive "/" + $totalSpaceGB = [math]::Floor(($diskInfo.Used + $diskInfo.Free) / 1GB) + $freeSpaceGB = [math]::Floor($diskInfo.Free / 1GB) + Write-Host " [i] Disk size: ${totalSpaceGB} GB; Free space: ${freeSpaceGB} GB" + $freeSpaceGB | Should -BeGreaterOrEqual 17 } } Describe "fwupd removed" { It "Is not present on box" { - $systemctlOutput = & systemctl list-unit fwupd-refresh.timer --no-legend + $systemctlOutput = & systemctl list-units fwupd-refresh.timer --no-legend # When disabled the output looks like this: #❯ systemctl list-units fwupd-refresh.timer --no-legend #● fwupd-refresh.timer masked failed failed fwupd-refresh.timer diff --git a/images/ubuntu/scripts/tests/Tools.Tests.ps1 b/images/ubuntu/scripts/tests/Tools.Tests.ps1 index a85d88dfff..3200cef29b 100644 --- a/images/ubuntu/scripts/tests/Tools.Tests.ps1 +++ b/images/ubuntu/scripts/tests/Tools.Tests.ps1 @@ -113,14 +113,6 @@ Describe "Docker" { } } -Describe "Docker images" { - $testCases = (Get-ToolsetContent).docker.images | ForEach-Object { @{ ImageName = $_ } } - - It "" -TestCases $testCases { - sudo docker images "$ImageName" --format "{{.Repository}}" | Should -Not -BeNullOrEmpty - } -} - Describe "Ansible" { It "Ansible" { "ansible --version" | Should -ReturnZeroExitCode diff --git a/images/ubuntu/templates/build.ubuntu-22_04.pkr.hcl b/images/ubuntu/templates/build.ubuntu-22_04.pkr.hcl index 05259514b3..135af613f1 100644 --- a/images/ubuntu/templates/build.ubuntu-22_04.pkr.hcl +++ b/images/ubuntu/templates/build.ubuntu-22_04.pkr.hcl @@ -99,7 +99,6 @@ build { execute_command = "sudo sh -c '{{ .Vars }} {{ .Path }}'" scripts = [ "${path.root}/../scripts/build/install-actions-cache.sh", - "${path.root}/../scripts/build/install-runner-package.sh", "${path.root}/../scripts/build/install-apt-common.sh", "${path.root}/../scripts/build/install-azcopy.sh", "${path.root}/../scripts/build/install-azure-cli.sh", @@ -163,7 +162,7 @@ build { } provisioner "shell" { - environment_vars = ["HELPER_SCRIPTS=${var.helper_script_folder}", "INSTALLER_SCRIPT_FOLDER=${var.installer_script_folder}", "DOCKERHUB_LOGIN=${var.dockerhub_login}", "DOCKERHUB_PASSWORD=${var.dockerhub_password}"] + environment_vars = ["HELPER_SCRIPTS=${var.helper_script_folder}", "INSTALLER_SCRIPT_FOLDER=${var.installer_script_folder}"] execute_command = "sudo sh -c '{{ .Vars }} {{ .Path }}'" scripts = ["${path.root}/../scripts/build/install-docker.sh"] } @@ -192,6 +191,11 @@ build { scripts = ["${path.root}/../scripts/build/configure-snap.sh"] } + provisioner "shell" { + execute_command = "sudo sh -c '{{ .Vars }} {{ .Path }}'" + script = "${path.root}/../scripts/build/list-dpkg.sh" + } + provisioner "shell" { execute_command = "sudo sh -c '{{ .Vars }} {{ .Path }}'" expect_disconnect = true @@ -200,7 +204,7 @@ build { provisioner "shell" { execute_command = "sudo sh -c '{{ .Vars }} {{ .Path }}'" - pause_before = "1m0s" + pause_before = "5m0s" scripts = ["${path.root}/../scripts/build/cleanup.sh"] start_retry_timeout = "10m" } diff --git a/images/ubuntu/templates/build.ubuntu-24_04.pkr.hcl b/images/ubuntu/templates/build.ubuntu-24_04.pkr.hcl index 94f595c33d..04dd1114eb 100644 --- a/images/ubuntu/templates/build.ubuntu-24_04.pkr.hcl +++ b/images/ubuntu/templates/build.ubuntu-24_04.pkr.hcl @@ -99,7 +99,6 @@ provisioner "shell" { execute_command = "sudo sh -c '{{ .Vars }} {{ .Path }}'" scripts = [ "${path.root}/../scripts/build/install-actions-cache.sh", - "${path.root}/../scripts/build/install-runner-package.sh", "${path.root}/../scripts/build/install-apt-common.sh", "${path.root}/../scripts/build/install-azcopy.sh", "${path.root}/../scripts/build/install-azure-cli.sh", @@ -152,7 +151,7 @@ provisioner "shell" { } provisioner "shell" { - environment_vars = ["HELPER_SCRIPTS=${var.helper_script_folder}", "INSTALLER_SCRIPT_FOLDER=${var.installer_script_folder}", "DOCKERHUB_PULL_IMAGES=NO"] + environment_vars = ["HELPER_SCRIPTS=${var.helper_script_folder}", "INSTALLER_SCRIPT_FOLDER=${var.installer_script_folder}"] execute_command = "sudo sh -c '{{ .Vars }} {{ .Path }}'" scripts = ["${path.root}/../scripts/build/install-docker.sh"] } @@ -181,6 +180,11 @@ provisioner "shell" { scripts = ["${path.root}/../scripts/build/configure-snap.sh"] } + provisioner "shell" { + execute_command = "sudo sh -c '{{ .Vars }} {{ .Path }}'" + script = "${path.root}/../scripts/build/list-dpkg.sh" + } + provisioner "shell" { execute_command = "sudo sh -c '{{ .Vars }} {{ .Path }}'" expect_disconnect = true @@ -189,7 +193,7 @@ provisioner "shell" { provisioner "shell" { execute_command = "sudo sh -c '{{ .Vars }} {{ .Path }}'" - pause_before = "1m0s" + pause_before = "5m0s" scripts = ["${path.root}/../scripts/build/cleanup.sh"] start_retry_timeout = "10m" } diff --git a/images/ubuntu/templates/locals.ubuntu.pkr.hcl b/images/ubuntu/templates/locals.ubuntu.pkr.hcl index fe9b189aba..469493d3f5 100644 --- a/images/ubuntu/templates/locals.ubuntu.pkr.hcl +++ b/images/ubuntu/templates/locals.ubuntu.pkr.hcl @@ -1,18 +1,15 @@ locals { image_properties_map = { "ubuntu22" = { - publisher = "canonical" - offer = "0001-com-ubuntu-server-jammy" - sku = "22_04-lts" - os_disk_size_gb = coalesce(var.os_disk_size_gb, 75) + source_image_marketplace_sku = "canonical:0001-com-ubuntu-server-jammy:22_04-lts" + os_disk_size_gb = 75 }, "ubuntu24" = { - publisher = "canonical" - offer = "ubuntu-24_04-lts" - sku = "server-gen1" - os_disk_size_gb = coalesce(var.os_disk_size_gb, 75) + source_image_marketplace_sku = "canonical:ubuntu-24_04-lts:server-gen1" + os_disk_size_gb = 75 } } - image_properties = local.image_properties_map[var.image_os] + source_image_marketplace_sku = local.image_properties_map[var.image_os].source_image_marketplace_sku + os_disk_size_gb = coalesce(var.os_disk_size_gb, local.image_properties_map[var.image_os].os_disk_size_gb) } diff --git a/images/ubuntu/templates/source.ubuntu.pkr.hcl b/images/ubuntu/templates/source.ubuntu.pkr.hcl index 4080b9b861..5b1db0ceae 100644 --- a/images/ubuntu/templates/source.ubuntu.pkr.hcl +++ b/images/ubuntu/templates/source.ubuntu.pkr.hcl @@ -11,17 +11,18 @@ source "azure-arm" "image" { allowed_inbound_ip_addresses = var.allowed_inbound_ip_addresses build_resource_group_name = var.build_resource_group_name - image_offer = local.image_properties.offer - image_publisher = local.image_properties.publisher - image_sku = local.image_properties.sku + image_publisher = split(":", local.source_image_marketplace_sku)[0] + image_offer = split(":", local.source_image_marketplace_sku)[1] + image_sku = split(":", local.source_image_marketplace_sku)[2] image_version = var.source_image_version location = var.location managed_image_name = var.managed_image_name managed_image_resource_group_name = var.managed_image_resource_group_name managed_image_storage_account_type = var.managed_image_storage_account_type - os_disk_size_gb = local.image_properties.os_disk_size_gb + os_disk_size_gb = local.os_disk_size_gb os_type = var.image_os_type private_virtual_network_with_public_ip = var.private_virtual_network_with_public_ip + ssh_clear_authorized_keys = var.ssh_clear_authorized_keys temp_resource_group_name = var.temp_resource_group_name virtual_network_name = var.virtual_network_name virtual_network_resource_group_name = var.virtual_network_resource_group_name @@ -37,6 +38,7 @@ source "azure-arm" "image" { image_version = var.gallery_image_version storage_account_type = var.gallery_storage_account_type } + shared_gallery_image_version_end_of_life_date = var.shared_gallery_image_version_end_of_life_date dynamic "azure_tag" { for_each = var.azure_tags diff --git a/images/ubuntu/templates/variable.ubuntu.pkr.hcl b/images/ubuntu/templates/variable.ubuntu.pkr.hcl index e2c6aaf760..c1b0e3cf03 100644 --- a/images/ubuntu/templates/variable.ubuntu.pkr.hcl +++ b/images/ubuntu/templates/variable.ubuntu.pkr.hcl @@ -70,6 +70,10 @@ variable "gallery_storage_account_type" { type = string default = "${env("GALLERY_STORAGE_ACCOUNT_TYPE")}" } +variable "shared_gallery_image_version_end_of_life_date" { + type = string + default = "${env("SHARED_GALLERY_IMAGE_VERSION_END_OF_LIFE_DATE")}" +} variable "image_os_type" { type = string default = "Linux" @@ -102,6 +106,10 @@ variable "source_image_version" { type = string default = "latest" } +variable "ssh_clear_authorized_keys" { + type = bool + default = true +} variable "temp_resource_group_name" { type = string default = "${env("TEMP_RESOURCE_GROUP_NAME")}" @@ -128,14 +136,6 @@ variable "winrm_username" { // The username used to connect to the VM vi } // Image related variables -variable "dockerhub_login" { - type = string - default = "${env("DOCKERHUB_LOGIN")}" -} -variable "dockerhub_password" { - type = string - default = "${env("DOCKERHUB_PASSWORD")}" -} variable "helper_script_folder" { type = string default = "/imagegeneration/helpers" diff --git a/images/ubuntu/toolsets/toolset-2204.json b/images/ubuntu/toolsets/toolset-2204.json index 1e1e29782f..a3e5c96e19 100644 --- a/images/ubuntu/toolsets/toolset-2204.json +++ b/images/ubuntu/toolsets/toolset-2204.json @@ -7,11 +7,11 @@ "platform_version": "22.04", "arch": "x64", "versions": [ - "3.9.*", "3.10.*", "3.11.*", "3.12.*", - "3.13.*" + "3.13.*", + "3.14.*" ] }, { @@ -22,7 +22,8 @@ "3.7", "3.8", "3.9", - "3.10" + "3.10", + "3.11" ] }, { @@ -31,9 +32,9 @@ "platform" : "linux", "arch": "x64", "versions": [ - "18.*", "20.*", - "22.*" + "22.*", + "24.*" ] }, { @@ -44,7 +45,8 @@ "versions": [ "1.22.*", "1.23.*", - "1.24.*" + "1.24.*", + "1.25.*" ], "default": "1.24.*" }, @@ -53,9 +55,9 @@ "platform_version": "22.04", "arch": "x64", "versions": [ - "3.1.*", "3.2.*", - "3.3.*" + "3.3.*", + "3.4.*" ] }, { @@ -69,13 +71,13 @@ ], "java": { "default": "11", - "versions": [ "8", "11", "17", "21"], - "maven": "3.9.11" + "versions": [ "8", "11", "17", "21", "25"], + "maven": "3.9.12" }, "android": { "cmdline-tools": "commandlinetools-linux-9477386_latest.zip", - "platform_min_version": "31", - "build_tools_min_version": "31.0.0", + "platform_min_version": "34", + "build_tools_min_version": "34.0.0", "extra_list": [ "android;m2repository", "google;m2repository", @@ -91,7 +93,7 @@ "ndk": { "default": "27", "versions": [ - "26", "27" + "27", "28", "29" ] } }, @@ -176,6 +178,7 @@ "binutils", "bison", "brotli", + "libnss3-tools", "coreutils", "file", "findutils", @@ -211,23 +214,6 @@ "brew": [ ], "docker": { - "images": [ - "alpine:3.16", - "alpine:3.17", - "alpine:3.18", - "alpine:3.19", - "debian:10", - "debian:11", - "moby/buildkit:latest", - "node:18", - "node:20", - "node:22", - "node:18-alpine", - "node:20-alpine", - "node:22-alpine", - "ubuntu:20.04", - "ubuntu:22.04" - ], "components": [ { "package": "containerd.io", @@ -250,7 +236,7 @@ }, { "plugin": "compose", - "version": "2.36.2", + "version": "2.38.2", "asset": "linux-x86_64" } ] @@ -266,15 +252,10 @@ } ], "dotnet": { - "aptPackages": [ - "dotnet-sdk-6.0", - "dotnet-sdk-8.0", - "dotnet-sdk-9.0" - ], "versions": [ - "6.0", "8.0", - "9.0" + "9.0", + "10.0" ], "tools": [ { "name": "nbgv", "test": "nbgv --version", "getversion" : "nbgv --version" } @@ -290,7 +271,6 @@ }, "gcc": { "versions": [ - "g++-9", "g++-10", "g++-12" ] diff --git a/images/ubuntu/toolsets/toolset-2404.json b/images/ubuntu/toolsets/toolset-2404.json index b275bf73c9..52cdcfcf4b 100644 --- a/images/ubuntu/toolsets/toolset-2404.json +++ b/images/ubuntu/toolsets/toolset-2404.json @@ -7,11 +7,11 @@ "platform_version": "24.04", "arch": "x64", "versions": [ - "3.9.*", "3.10.*", "3.11.*", "3.12.*", - "3.13.*" + "3.13.*", + "3.14.*" ] }, { @@ -20,7 +20,8 @@ "platform" : "linux", "versions": [ "3.9", - "3.10" + "3.10", + "3.11" ] }, { @@ -29,9 +30,9 @@ "platform" : "linux", "arch": "x64", "versions": [ - "18.*", "20.*", - "22.*" + "22.*", + "24.*" ] }, { @@ -42,7 +43,8 @@ "versions": [ "1.22.*", "1.23.*", - "1.24.*" + "1.24.*", + "1.25.*" ], "default": "1.24.*" }, @@ -52,7 +54,8 @@ "arch": "x64", "versions": [ "3.2.*", - "3.3.*" + "3.3.*", + "3.4.*" ] }, { @@ -66,8 +69,8 @@ ], "java": { "default": "17", - "versions": [ "8", "11", "17", "21"], - "maven": "3.9.11" + "versions": [ "8", "11", "17", "21", "25"], + "maven": "3.9.12" }, "android": { "cmdline-tools": "commandlinetools-linux-11076708_latest.zip", @@ -81,12 +84,13 @@ "addon_list": [ ], "additional_tools": [ - "cmake;3.31.5" + "cmake;3.31.5", + "cmake;4.1.2" ], "ndk": { "default": "27", "versions": [ - "26", "27", "28" + "27", "28", "29" ] } }, @@ -153,6 +157,7 @@ "binutils", "bison", "brotli", + "libnss3-tools", "coreutils", "file", "findutils", @@ -186,8 +191,6 @@ "brew": [ ], "docker": { - "images": [ - ], "components": [ { "package": "containerd.io", @@ -210,7 +213,7 @@ }, { "plugin": "compose", - "version": "2.36.2", + "version": "2.38.2", "asset": "linux-x86_64" } ] @@ -226,11 +229,10 @@ } ], "dotnet": { - "aptPackages": [ - "dotnet-sdk-8.0" - ], "versions": [ - "8.0" + "8.0", + "9.0", + "10.0" ], "tools": [ { "name": "nbgv", "test": "nbgv --version", "getversion" : "nbgv --version" } diff --git a/images/windows/Windows2022-Readme.md b/images/windows/Windows2022-Readme.md index 9dcd3fd56f..ba94ea9da8 100644 --- a/images/windows/Windows2022-Readme.md +++ b/images/windows/Windows2022-Readme.md @@ -1,11 +1,14 @@ | Announcements | |-| -| [[Windows Server 2025] image will no longer have D:/ drive accessible to users from 2025-07-14](https://github.com/actions/runner-images/issues/12416) | -| [[Windows & Ubuntu] .NET 6 will be removed from the images on 2025-08-01.](https://github.com/actions/runner-images/issues/12241) | +| [[Windows/Ubuntu] Docker Server and Client will be updated to version 29.1.*, Docker Compose will be updated to version 2.40.3 on February 9th, 2026](https://github.com/actions/runner-images/issues/13474) | +| [[all OSs] Updating Azure PowerShell Module version to 14.6.0 on January 26th, 2026.](https://github.com/actions/runner-images/issues/13473) | +| [[Ubuntu-22.04, macOS-14, Windows-2022] Android SDK platforms and build tools older than version 34 will be removed on January 12th, 2026.](https://github.com/actions/runner-images/issues/13469) | +| [[all OSs] Python 3.9 will be removed; Python 3.12 will become the default on Windows images on January 12th, 2026.](https://github.com/actions/runner-images/issues/13468) | +| [[all OSs] Android NDK 26 will be removed, Android NDK 27 will be used by default on January 12th, 2026.](https://github.com/actions/runner-images/issues/13467) | *** # Windows Server 2022 -- OS Version: 10.0.20348 Build 3932 -- Image Version: 20250713.1.0 +- OS Version: 10.0.20348 Build 4529 +- Image Version: 20260105.167.1 ## Windows features - Windows Subsystem for Linux (WSLv1): Enabled @@ -14,27 +17,27 @@ ### Language and Runtime - Bash 5.2.37(1)-release -- Go 1.24.5 -- Julia 1.11.6 -- Kotlin 2.1.10 -- LLVM 20.1.7 -- Node 20.19.3 +- Go 1.24.11 +- Julia 1.12.0 +- Kotlin 2.3.0 +- LLVM 20.1.8 +- Node 20.19.6 - Perl 5.32.1 -- PHP 8.4.8 +- PHP 8.4.16 - Python 3.9.13 -- Ruby 3.3.8 +- Ruby 3.3.10 ### Package Management -- Chocolatey 2.5.0 -- Composer 2.8.10 -- Helm 3.18.3 -- Miniconda 25.5.1 (pre-installed on the image but not added to PATH) +- Chocolatey 2.6.0 +- Composer 2.9.3 +- Helm 4.0.3 +- Miniconda 25.11.1 (pre-installed on the image but not added to PATH) - NPM 10.8.2 -- NuGet 6.14.0.116 -- pip 25.1.1 (python 3.9) -- Pipx 1.7.1 +- NuGet 7.0.1.1 +- pip 25.3 (python 3.9) +- Pipx 1.8.0 - RubyGems 3.5.22 -- Vcpkg (build from commit 09b8d93e61) +- Vcpkg (build from commit e3db8f65d2) - Yarn 1.22.22 #### Environment variables @@ -45,84 +48,84 @@ ### Project Management - Ant 1.10.15 -- Gradle 8.14 -- Maven 3.9.10 -- sbt 1.11.3 +- Gradle 9.1 +- Maven 3.9.12 +- sbt 1.11.7 ### Tools -- 7zip 25.00 +- 7zip 25.01 - aria2 1.37.0 -- azcopy 10.29.1 -- Bazel 8.3.1 +- azcopy 10.31.0 +- Bazel 8.5.0 - Bazelisk 1.26.0 -- Bicep 0.36.177 -- Cabal 3.14.2.0 +- Bicep 0.39.26 +- Cabal 3.16.1.0 - CMake 3.31.6 -- CodeQL Action Bundle 2.22.1 +- CodeQL Action Bundle 2.23.8 - Docker 27.5.1 - Docker Compose v2 2.32.2 -- Docker-wincred 0.9.3 -- ghc 9.12.2 -- Git 2.50.1.windows.1 -- Git LFS 3.7.0 -- ImageMagick 7.1.1-47 -- InnoSetup 6.4.0 -- jq 1.7.1 -- Kind 0.29.0 -- Kubectl 1.33.2 -- Mercurial 5.0 -- gcc 12.2.0 -- gdb 11.2 -- GNU Binutils 2.39 +- Docker-wincred 0.9.4 +- ghc 9.14.1 +- Git 2.52.0.windows.1 +- Git LFS 3.7.1 +- ImageMagick 7.1.2-10 +- InnoSetup 6.6.1 +- jq 1.8.1 +- Kind 0.31.0 +- Kubectl 1.35.0 +- Mercurial 6.3.1 +- gcc 14.2.0 +- gdb 16.2 +- GNU Binutils 2.44 - Newman 6.2.1 - NSIS 3.10 -- OpenSSL 1.1.1w -- Packer 1.12.0 -- Pulumi 3.181.0 -- R 4.4.2 +- OpenSSL 3.6.0 +- Packer 1.14.2 +- Pulumi 3.214.1 +- R 4.5.2 - Service Fabric SDK 10.1.2493.9590 -- Stack 3.7.1 +- Stack 3.9.1 - Subversion (SVN) 1.14.5 -- Swig 4.1.1 +- Swig 4.3.1 - VSWhere 3.1.7 - WinAppDriver 1.2.2009.02003 - WiX Toolset 3.14.1.8722 - yamllint 1.37.1 - zstd 1.5.7 -- Ninja 1.13.1 +- Ninja 1.13.2 ### CLI Tools -- Alibaba Cloud CLI 3.0.289 -- AWS CLI 2.27.50 -- AWS SAM CLI 1.142.1 -- AWS Session Manager CLI 1.2.707.0 -- Azure CLI 2.75.0 +- Alibaba Cloud CLI 3.2.5 +- AWS CLI 2.32.28 +- AWS SAM CLI 1.151.0 +- AWS Session Manager CLI 1.2.764.0 +- Azure CLI 2.81.0 - Azure DevOps CLI extension 1.0.2 -- GitHub CLI 2.75.0 +- GitHub CLI 2.83.2 ### Rust Tools -- Cargo 1.88.0 -- Rust 1.88.0 -- Rustdoc 1.88.0 +- Cargo 1.92.0 +- Rust 1.92.0 +- Rustdoc 1.92.0 - Rustup 1.28.2 #### Packages -- bindgen 0.72.0 -- cargo-audit 0.21.2 +- bindgen 0.72.1 +- cargo-audit 0.22.0 - cargo-outdated 0.17.0 -- cbindgen 0.29.0 -- Clippy 0.1.88 +- cbindgen 0.29.2 +- Clippy 0.1.92 - Rustfmt 1.8.0 ### Browsers and Drivers -- Google Chrome 138.0.7204.101 -- Chrome Driver 138.0.7204.94 -- Microsoft Edge 138.0.3351.83 -- Microsoft Edge Driver 138.0.3351.83 -- Mozilla Firefox 140.0.4 +- Google Chrome 143.0.7499.170 +- Chrome Driver 143.0.7499.169 +- Microsoft Edge 143.0.3650.96 +- Microsoft Edge Driver 143.0.3650.96 +- Mozilla Firefox 146.0.1 - Gecko Driver 0.36.0 - IE Driver 4.14.0.0 -- Selenium server 4.34.0 +- Selenium server 4.39.0 #### Environment variables | Name | Value | @@ -135,10 +138,11 @@ ### Java | Version | Environment Variable | | ------------------- | -------------------- | -| 8.0.452+9 (default) | JAVA_HOME_8_X64 | -| 11.0.27+6 | JAVA_HOME_11_X64 | -| 17.0.15+6 | JAVA_HOME_17_X64 | -| 21.0.7+6.0 | JAVA_HOME_21_X64 | +| 8.0.472+8 (default) | JAVA_HOME_8_X64 | +| 11.0.29+7 | JAVA_HOME_11_X64 | +| 17.0.17+10 | JAVA_HOME_17_X64 | +| 21.0.9+10.0 | JAVA_HOME_21_X64 | +| 25.0.1+8.0 | JAVA_HOME_25_X64 | ### Shells | Name | Target | @@ -161,20 +165,22 @@ Note: MSYS2 is pre-installed on image but not added to PATH. #### Go - 1.22.12 -- 1.23.11 -- 1.24.5 +- 1.23.12 +- 1.24.11 +- 1.25.5 #### Node.js -- 18.20.8 -- 20.19.3 -- 22.17.0 +- 20.19.6 +- 22.21.1 +- 24.12.0 #### Python - 3.9.13 - 3.10.11 - 3.11.9 - 3.12.10 -- 3.13.5 +- 3.13.11 +- 3.14.2 #### PyPy - 2.7.18 [PyPy 7.3.20] @@ -184,286 +190,280 @@ Note: MSYS2 is pre-installed on image but not added to PATH. - 3.10.16 [PyPy 7.3.19] #### Ruby -- 3.1.7 -- 3.2.8 -- 3.3.8 +- 3.2.9 +- 3.3.10 +- 3.4.8 ### Databases #### PostgreSQL -| Property | Value | -| -------------------- | ------------------------------------------------------------------------------------------------------------------------------------ | -| ServiceName | postgresql-x64-14 | -| Version | 14.18 | -| ServiceStatus | Stopped | -| ServiceStartType | Disabled | -| EnvironmentVariables | PGBIN=C:\Program Files\PostgreSQL\14\bin
PGDATA=C:\Program Files\PostgreSQL\14\data
PGROOT=C:\Program Files\PostgreSQL\14 | -| Path | C:\Program Files\PostgreSQL\14 | -| UserName | postgres | -| Password | root | +| Property | Value | +| -------------------- | ---------------------------------------------------------------------------------------------------------------------- | +| ServiceName | postgresql-x64-14 | +| Version | 14.20 | +| ServiceStatus | Stopped | +| ServiceStartType | Disabled | +| EnvironmentVariables | PGBIN=C:\Program Files\PostgreSQL\14\bin
PGDATA=C:\PostgreSQL\14\data
PGROOT=C:\Program Files\PostgreSQL\14 | +| Path | C:\Program Files\PostgreSQL\14 | +| UserName | postgres | +| Password | root | #### MongoDB | Version | ServiceName | ServiceStatus | ServiceStartType | | -------- | ----------- | ------------- | ---------------- | -| 5.0.31.0 | MongoDB | Stopped | Disabled | +| 7.0.28.0 | MongoDB | Stopped | Disabled | ### Database tools -- Azure CosmosDb Emulator 2.14.23.0 -- DacFx 170.0.94.3 -- MySQL 8.0.42.0 -- SQL OLEDB Driver 18.7.4.0 +- Azure CosmosDb Emulator 2.14.25.0 +- DacFx 170.2.70.1 +- MySQL 8.0.44.0 +- SQL OLEDB Driver 18 18.7.5.0 +- SQL OLEDB Driver 19 19.4.1.0 - SQLPS 1.0 +- MongoDB Shell (mongosh) 2.5.10 ### Web Servers | Name | Version | ConfigFile | ServiceName | ServiceStatus | ListenPort | | ------ | ------- | ------------------------------------- | ----------- | ------------- | ---------- | | Apache | 2.4.55 | C:\tools\Apache24\conf\httpd.conf | Apache | Stopped | 80 | -| Nginx | 1.29.0 | C:\tools\nginx-1.29.0\conf\nginx.conf | nginx | Stopped | 80 | +| Nginx | 1.29.4 | C:\tools\nginx-1.29.4\conf\nginx.conf | nginx | Stopped | 80 | ### Visual Studio Enterprise 2022 | Name | Version | Path | | ----------------------------- | ------------- | -------------------------------------------------------- | -| Visual Studio Enterprise 2022 | 17.14.36301.6 | C:\Program Files\Microsoft Visual Studio\2022\Enterprise | +| Visual Studio Enterprise 2022 | 17.14.36811.4 | C:\Program Files\Microsoft Visual Studio\2022\Enterprise | #### Workloads, components and extensions | Package | Version | | ------------------------------------------------------------------------- | --------------- | | android | 35.0.78.0 | -| Component.Android.NDK.R23C | 17.14.36015.10 | -| Component.Android.SDK.MAUI | 17.14.36015.10 | -| Component.Dotfuscator | 17.14.36015.10 | -| Component.Linux.CMake | 17.14.36108.8 | -| Component.Linux.RemoteFileExplorer | 17.14.36108.8 | -| Component.MDD.Android | 17.14.36015.10 | -| Component.MDD.Linux | 17.14.36108.8 | -| Component.MDD.Linux.GCC.arm | 17.14.36015.10 | -| Component.Microsoft.VisualStudio.LiveShare.2022 | 1.0.5949 | -| Component.Microsoft.VisualStudio.RazorExtension | 17.14.36015.10 | -| Component.Microsoft.VisualStudio.Tools.Applications.amd64 | 17.0.35906.1 | -| Component.Microsoft.VisualStudio.Web.AzureFunctions | 17.14.36015.10 | -| Component.Microsoft.Web.LibraryManager | 17.14.36015.10 | +| Component.Android.NDK.R23C | 17.14.36510.44 | +| Component.Android.SDK.MAUI | 17.14.36510.44 | +| Component.Dotfuscator | 17.14.36510.44 | +| Component.Linux.CMake | 17.14.36510.44 | +| Component.Linux.RemoteFileExplorer | 17.14.36510.44 | +| Component.MDD.Android | 17.14.36804.6 | +| Component.MDD.Linux | 17.14.36510.44 | +| Component.MDD.Linux.GCC.arm | 17.14.36510.44 | +| Component.Microsoft.VisualStudio.RazorExtension | 17.14.36510.44 | +| Component.Microsoft.VisualStudio.Tools.Applications.amd64 | 17.0.36522.0 | +| Component.Microsoft.VisualStudio.Web.AzureFunctions | 17.14.36510.44 | +| Component.Microsoft.Web.LibraryManager | 17.14.36510.44 | | Component.Microsoft.WebTools.BrowserLink.WebLivePreview | 17.14.2.50506 | -| Component.Microsoft.Windows.DriverKit | 10.0.26100.12 | -| Component.OpenJDK | 17.14.36015.10 | -| Component.UnityEngine.x64 | 17.14.36015.10 | -| Component.Unreal | 17.14.36015.10 | -| Component.Unreal.Android | 17.14.36015.10 | -| Component.Unreal.Debugger | 17.14.36015.10 | -| Component.Unreal.Ide | 17.14.36015.10 | -| Component.VisualStudio.GitHub.Copilot | 17.14.36301.6 | +| Component.Microsoft.Windows.DriverKit | 10.0.26100.16 | +| Component.OpenJDK | 17.14.36510.44 | +| Component.UnityEngine.x64 | 17.14.36510.44 | +| Component.Unreal | 17.14.36510.44 | +| Component.Unreal.Android | 17.14.36510.44 | +| Component.Unreal.Debugger | 17.14.36809.9 | +| Component.Unreal.Ide | 17.14.36510.44 | +| Component.VisualStudio.GitHub.Copilot | 17.14.36809.9 | | Component.VSInstallerProjects2022 | 2.0.1 | | Component.WixToolset.VisualStudioExtension.Dev17 | 1.0.0.22 | | Component.WixToolset.VisualStudioExtension.Schemas3 | 1.0.0.22 | -| Component.Xamarin | 17.14.36015.10 | -| ios | 18.5.9207.0 | -| maccatalyst | 18.5.9207.0 | -| maui.blazor | 9.0.51.12966 | -| maui.core | 9.0.51.12966 | -| maui.windows | 9.0.51.12966 | -| Microsoft.Component.Azure.DataLake.Tools | 17.14.36015.10 | -| Microsoft.Component.ClickOnce | 17.14.36015.10 | -| Microsoft.Component.CodeAnalysis.SDK | 17.14.36015.10 | -| Microsoft.Component.MSBuild | 17.14.36015.10 | -| Microsoft.Component.NetFX.Native | 17.14.36015.10 | -| Microsoft.Component.PythonTools | 17.14.36015.10 | -| Microsoft.Component.PythonTools.Web | 17.14.36015.10 | -| Microsoft.Component.VC.Runtime.UCRTSDK | 17.14.36015.10 | -| Microsoft.ComponentGroup.Blend | 17.14.36015.10 | -| Microsoft.ComponentGroup.ClickOnce.Publish | 17.14.36015.10 | -| Microsoft.Net.Component.4.5.2.TargetingPack | 17.14.36015.10 | -| Microsoft.Net.Component.4.6.2.TargetingPack | 17.14.36015.10 | -| Microsoft.Net.Component.4.6.TargetingPack | 17.14.36015.10 | -| Microsoft.Net.Component.4.7.1.TargetingPack | 17.14.36015.10 | -| Microsoft.Net.Component.4.7.2.SDK | 17.14.36015.10 | -| Microsoft.Net.Component.4.7.2.TargetingPack | 17.14.36015.10 | -| Microsoft.Net.Component.4.7.TargetingPack | 17.14.36015.10 | -| Microsoft.Net.Component.4.8.1.SDK | 17.14.36015.10 | -| Microsoft.Net.Component.4.8.1.TargetingPack | 17.14.36015.10 | -| Microsoft.Net.Component.4.8.SDK | 17.14.36015.10 | -| Microsoft.Net.Component.4.8.TargetingPack | 17.14.36015.10 | -| Microsoft.Net.ComponentGroup.4.8.DeveloperTools | 17.14.36015.10 | -| Microsoft.Net.ComponentGroup.DevelopmentPrerequisites | 17.14.36015.10 | -| Microsoft.Net.ComponentGroup.TargetingPacks.Common | 17.14.36015.10 | -| microsoft.net.runtime.android | 9.0.725.31616 | -| microsoft.net.runtime.android.aot | 9.0.725.31616 | -| microsoft.net.runtime.android.aot.net8 | 9.0.725.31616 | -| microsoft.net.runtime.android.net8 | 9.0.725.31616 | -| microsoft.net.runtime.ios | 9.0.725.31616 | -| microsoft.net.runtime.ios.net8 | 9.0.725.31616 | -| microsoft.net.runtime.maccatalyst | 9.0.725.31616 | -| microsoft.net.runtime.maccatalyst.net8 | 9.0.725.31616 | -| microsoft.net.runtime.mono.tooling | 9.0.725.31616 | -| microsoft.net.runtime.mono.tooling.net8 | 9.0.725.31616 | -| microsoft.net.sdk.emscripten | 9.0.12.30402 | -| Microsoft.NetCore.Component.DevelopmentTools | 17.14.36015.10 | -| Microsoft.NetCore.Component.Runtime.8.0 | 17.14.36301.6 | -| Microsoft.NetCore.Component.Runtime.9.0 | 17.14.36301.6 | -| Microsoft.NetCore.Component.SDK | 17.14.36301.6 | -| Microsoft.NetCore.Component.Web | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.AppInsights.Tools | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.AspNet | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.AspNet45 | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.Azure.AuthoringTools | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.Azure.ClientLibs | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.Azure.Compute.Emulator | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.Azure.ResourceManager.Tools | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.Azure.ServiceFabric.Tools | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.Azure.Waverton | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.Azure.Waverton.BuildTools | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.ClassDesigner | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.CodeMap | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.Common.Azure.Tools | 17.14.36024.20 | -| Microsoft.VisualStudio.Component.CoreEditor | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.CppBuildInsights | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.Debugger.JustInTime | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.Debugger.Snapshot | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.DiagnosticTools | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.DockerTools | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.DotNetModelBuilder | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.DslTools | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.Embedded | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.EntityFramework | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.FSharp | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.FSharp.Desktop | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.FSharp.WebTemplates | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.GraphDocument | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.Graphics | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.Graphics.Tools | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.HLSL | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.IISExpress | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.IntelliCode | 17.14.36220.6 | -| Microsoft.VisualStudio.Component.IntelliTrace.FrontEnd | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.JavaScript.Diagnostics | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.JavaScript.TypeScript | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.LinqToSql | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.LiveUnitTesting | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.ManagedDesktop.Core | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.ManagedDesktop.Prerequisites | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.MSODBC.SQL | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.MSSQL.CMDLnUtils | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.Node.Tools | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.NuGet | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.NuGet.BuildTools | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.PortableLibrary | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.Roslyn.Compiler | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.Roslyn.LanguageServices | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.Sharepoint.Tools | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.SQL.CLR | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.SQL.DataSources | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.SQL.LocalDB.Runtime | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.SQL.SSDT | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.TeamOffice | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.TestTools.CodedUITest | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.TestTools.WebLoadTest | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.TextTemplating | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.TypeScript.TSServer | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.Unity | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.UWP.VC.ARM64 | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.UWP.VC.ARM64EC | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.VC.14.29.16.11.ARM | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.VC.14.29.16.11.ARM64 | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.VC.ASAN | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.VC.ATL | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.VC.ATL.ARM | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.VC.ATL.ARM.Spectre | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.VC.ATL.ARM64 | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.VC.ATL.ARM64.Spectre | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.VC.ATL.Spectre | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.VC.ATLMFC | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.VC.ATLMFC.Spectre | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.VC.CLI.Support | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.VC.CMake.Project | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.VC.CoreIde | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.VC.DiagnosticTools | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.VC.Llvm.Clang | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.VC.Llvm.ClangToolset | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.VC.MFC.ARM | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.VC.MFC.ARM.Spectre | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.VC.MFC.ARM64 | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.VC.MFC.ARM64.Spectre | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.VC.Modules.x86.x64 | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.VC.Redist.14.Latest | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.VC.Redist.MSM | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.VC.Runtimes.ARM.Spectre | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.VC.Runtimes.ARM64.Spectre | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.VC.Runtimes.ARM64EC.Spectre | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.VC.Runtimes.x86.x64.Spectre | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.VC.TestAdapterForBoostTest | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.VC.TestAdapterForGoogleTest | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.VC.Tools.ARM | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.VC.Tools.ARM64 | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.VC.Tools.ARM64EC | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.VC.Tools.x86.x64 | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.Vcpkg | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.VSSDK | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.Wcf.Tooling | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.Web | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.WebDeploy | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.Windows10SDK | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.Windows10SDK.19041 | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.Windows10SDK.20348 | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.Windows11SDK.22000 | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.Windows11SDK.22621 | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.Windows11SDK.26100 | 17.14.36301.6 | -| Microsoft.VisualStudio.Component.Windows11Sdk.WindowsPerformanceToolkit | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.WindowsAppSdkSupport.CSharp | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.Workflow | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.WslDebugging | 17.14.36015.10 | -| Microsoft.VisualStudio.ComponentGroup.ArchitectureTools.Native | 17.14.36015.10 | -| Microsoft.VisualStudio.ComponentGroup.Azure.CloudServices | 17.14.36015.10 | -| Microsoft.VisualStudio.ComponentGroup.Azure.Prerequisites | 17.14.36015.10 | -| Microsoft.VisualStudio.ComponentGroup.Azure.ResourceManager.Tools | 17.14.36015.10 | -| Microsoft.VisualStudio.ComponentGroup.AzureFunctions | 17.14.36015.10 | -| Microsoft.VisualStudio.ComponentGroup.Maui.All | 17.14.36015.10 | -| Microsoft.VisualStudio.ComponentGroup.Maui.Android | 17.14.36015.10 | -| Microsoft.VisualStudio.ComponentGroup.Maui.Blazor | 17.14.36015.10 | -| Microsoft.VisualStudio.ComponentGroup.Maui.iOS | 17.14.36015.10 | -| Microsoft.VisualStudio.ComponentGroup.Maui.MacCatalyst | 17.14.36015.10 | -| Microsoft.VisualStudio.ComponentGroup.Maui.Shared | 17.14.36015.10 | -| Microsoft.VisualStudio.ComponentGroup.Maui.Windows | 17.14.36015.10 | -| Microsoft.VisualStudio.ComponentGroup.MSIX.Packaging | 17.14.36015.10 | -| Microsoft.VisualStudio.ComponentGroup.NativeDesktop.Core | 17.14.36015.10 | -| Microsoft.VisualStudio.ComponentGroup.NativeDesktop.Llvm.Clang | 17.14.36015.10 | -| Microsoft.VisualStudio.ComponentGroup.UWP.NetCoreAndStandard | 17.14.36015.10 | -| Microsoft.VisualStudio.ComponentGroup.UWP.VC.v142 | 17.14.36015.10 | -| Microsoft.VisualStudio.ComponentGroup.VC.Tools.142.x86.x64 | 17.14.36015.10 | -| Microsoft.VisualStudio.ComponentGroup.VisualStudioExtension.Prerequisites | 17.14.36015.10 | -| Microsoft.VisualStudio.ComponentGroup.Web | 17.14.36015.10 | -| Microsoft.VisualStudio.ComponentGroup.Web.CloudTools | 17.14.36015.10 | -| Microsoft.VisualStudio.ComponentGroup.WebToolsExtensions | 17.14.36015.10 | -| Microsoft.VisualStudio.ComponentGroup.WebToolsExtensions.CMake | 17.14.36015.10 | -| Microsoft.VisualStudio.ComponentGroup.WebToolsExtensions.TemplateEngine | 17.14.36015.10 | -| Microsoft.VisualStudio.ComponentGroup.WindowsAppDevelopment.Prerequisites | 17.14.36015.10 | -| Microsoft.VisualStudio.ComponentGroup.WindowsAppSDK.Cs | 17.14.36015.10 | -| Microsoft.VisualStudio.Workload.Azure | 17.14.36015.10 | +| Component.Xamarin | 17.14.36510.44 | +| ComponentGroup.Microsoft.NET.AppModernization | 17.14.36705.20 | +| ios | 26.0.9752.0 | +| maccatalyst | 26.0.9752.0 | +| maui.blazor | 9.0.111.6930 | +| maui.core | 9.0.111.6930 | +| maui.windows | 9.0.111.6930 | +| Microsoft.Component.Azure.DataLake.Tools | 17.14.36510.44 | +| Microsoft.Component.ClickOnce | 17.14.36510.44 | +| Microsoft.Component.CodeAnalysis.SDK | 17.14.36510.44 | +| Microsoft.Component.MSBuild | 17.14.36510.44 | +| Microsoft.Component.NetFX.Native | 17.14.36510.44 | +| Microsoft.Component.PythonTools | 17.14.36510.44 | +| Microsoft.Component.PythonTools.Web | 17.14.36510.44 | +| Microsoft.Component.VC.Runtime.UCRTSDK | 17.14.36510.44 | +| Microsoft.ComponentGroup.Blend | 17.14.36510.44 | +| Microsoft.ComponentGroup.ClickOnce.Publish | 17.14.36510.44 | +| Microsoft.Net.Component.4.5.2.TargetingPack | 17.14.36510.44 | +| Microsoft.Net.Component.4.6.2.TargetingPack | 17.14.36510.44 | +| Microsoft.Net.Component.4.6.TargetingPack | 17.14.36510.44 | +| Microsoft.Net.Component.4.7.1.TargetingPack | 17.14.36510.44 | +| Microsoft.Net.Component.4.7.2.SDK | 17.14.36510.44 | +| Microsoft.Net.Component.4.7.2.TargetingPack | 17.14.36510.44 | +| Microsoft.Net.Component.4.7.TargetingPack | 17.14.36510.44 | +| Microsoft.Net.Component.4.8.1.SDK | 17.14.36510.44 | +| Microsoft.Net.Component.4.8.1.TargetingPack | 17.14.36510.44 | +| Microsoft.Net.Component.4.8.SDK | 17.14.36510.44 | +| Microsoft.Net.Component.4.8.TargetingPack | 17.14.36510.44 | +| Microsoft.Net.ComponentGroup.4.8.DeveloperTools | 17.14.36510.44 | +| Microsoft.Net.ComponentGroup.DevelopmentPrerequisites | 17.14.36510.44 | +| Microsoft.Net.ComponentGroup.TargetingPacks.Common | 17.14.36510.44 | +| microsoft.net.runtime.android | 9.0.1125.51309 | +| microsoft.net.runtime.android.aot | 9.0.1125.51309 | +| microsoft.net.runtime.android.aot.net8 | 9.0.1125.51309 | +| microsoft.net.runtime.android.net8 | 9.0.1125.51309 | +| microsoft.net.runtime.ios | 9.0.1125.51309 | +| microsoft.net.runtime.maccatalyst | 9.0.1125.51309 | +| microsoft.net.runtime.mono.tooling | 9.0.1125.51309 | +| microsoft.net.runtime.mono.tooling.net8 | 9.0.1125.51309 | +| microsoft.net.sdk.emscripten | 9.0.13.1604 | +| Microsoft.NetCore.Component.DevelopmentTools | 17.14.36510.44 | +| Microsoft.NetCore.Component.Runtime.8.0 | 17.14.36705.7 | +| Microsoft.NetCore.Component.Runtime.9.0 | 17.14.36717.8 | +| Microsoft.NetCore.Component.SDK | 17.14.36717.8 | +| Microsoft.NetCore.Component.Web | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.AppInsights.Tools | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.AspNet | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.AspNet45 | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.Azure.AuthoringTools | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.Azure.ClientLibs | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.Azure.Compute.Emulator | 17.14.36517.7 | +| Microsoft.VisualStudio.Component.Azure.ResourceManager.Tools | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.Azure.ServiceFabric.Tools | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.Azure.Waverton | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.Azure.Waverton.BuildTools | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.ClassDesigner | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.CodeMap | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.Common.Azure.Tools | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.CoreEditor | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.CppBuildInsights | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.Debugger.JustInTime | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.DiagnosticTools | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.DockerTools | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.DotNetModelBuilder | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.DslTools | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.EntityFramework | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.FSharp | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.FSharp.Desktop | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.FSharp.WebTemplates | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.GraphDocument | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.Graphics | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.Graphics.Tools | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.HLSL | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.IISExpress | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.IntelliCode | 17.14.36621.7 | +| Microsoft.VisualStudio.Component.IntelliTrace.FrontEnd | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.JavaScript.Diagnostics | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.JavaScript.TypeScript | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.LinqToSql | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.LiveUnitTesting | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.ManagedDesktop.Core | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.ManagedDesktop.Prerequisites | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.MSODBC.SQL | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.MSSQL.CMDLnUtils | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.Node.Tools | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.NuGet | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.NuGet.BuildTools | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.PortableLibrary | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.Roslyn.Compiler | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.Roslyn.LanguageServices | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.Sharepoint.Tools | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.SQL.CLR | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.SQL.DataSources | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.SQL.LocalDB.Runtime | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.SQL.SSDT | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.TeamOffice | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.TestTools.CodedUITest | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.TestTools.WebLoadTest | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.TextTemplating | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.TypeScript.TSServer | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.Unity | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.UWP.VC.ARM64 | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.UWP.VC.ARM64EC | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.VC.14.29.16.11.ARM | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.VC.14.29.16.11.ARM64 | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.VC.ASAN | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.VC.ATL | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.VC.ATL.ARM | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.VC.ATL.ARM.Spectre | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.VC.ATL.ARM64 | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.VC.ATL.ARM64.Spectre | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.VC.ATL.Spectre | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.VC.ATLMFC | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.VC.ATLMFC.Spectre | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.VC.CLI.Support | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.VC.CMake.Project | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.VC.CoreIde | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.VC.DiagnosticTools | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.VC.Llvm.Clang | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.VC.Llvm.ClangToolset | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.VC.MFC.ARM | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.VC.MFC.ARM.Spectre | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.VC.MFC.ARM64 | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.VC.MFC.ARM64.Spectre | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.VC.Modules.x86.x64 | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.VC.Redist.14.Latest | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.VC.Redist.MSM | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.VC.Runtimes.ARM.Spectre | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.VC.Runtimes.ARM64.Spectre | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.VC.Runtimes.ARM64EC.Spectre | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.VC.Runtimes.x86.x64.Spectre | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.VC.TestAdapterForBoostTest | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.VC.TestAdapterForGoogleTest | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.VC.Tools.ARM | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.VC.Tools.ARM64 | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.VC.Tools.ARM64EC | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.VC.Tools.x86.x64 | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.Vcpkg | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.VSSDK | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.Wcf.Tooling | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.Web | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.WebDeploy | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.Windows10SDK | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.Windows10SDK.19041 | 17.14.36809.9 | +| Microsoft.VisualStudio.Component.Windows11SDK.22621 | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.Windows11SDK.26100 | 17.14.36804.6 | +| Microsoft.VisualStudio.Component.Windows11Sdk.WindowsPerformanceToolkit | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.WindowsAppSdkSupport.CSharp | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.Workflow | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.WslDebugging | 17.14.36510.44 | +| Microsoft.VisualStudio.ComponentGroup.ArchitectureTools.Native | 17.14.36510.44 | +| Microsoft.VisualStudio.ComponentGroup.Azure.CloudServices | 17.14.36510.44 | +| Microsoft.VisualStudio.ComponentGroup.Azure.Prerequisites | 17.14.36510.44 | +| Microsoft.VisualStudio.ComponentGroup.Azure.ResourceManager.Tools | 17.14.36510.44 | +| Microsoft.VisualStudio.ComponentGroup.AzureFunctions | 17.14.36510.44 | +| Microsoft.VisualStudio.ComponentGroup.Maui.All | 17.14.36510.44 | +| Microsoft.VisualStudio.ComponentGroup.Maui.Android | 17.14.36510.44 | +| Microsoft.VisualStudio.ComponentGroup.Maui.Blazor | 17.14.36510.44 | +| Microsoft.VisualStudio.ComponentGroup.Maui.iOS | 17.14.36510.44 | +| Microsoft.VisualStudio.ComponentGroup.Maui.MacCatalyst | 17.14.36510.44 | +| Microsoft.VisualStudio.ComponentGroup.Maui.Shared | 17.14.36510.44 | +| Microsoft.VisualStudio.ComponentGroup.Maui.Windows | 17.14.36510.44 | +| Microsoft.VisualStudio.ComponentGroup.MSIX.Packaging | 17.14.36510.44 | +| Microsoft.VisualStudio.ComponentGroup.NativeDesktop.Core | 17.14.36510.44 | +| Microsoft.VisualStudio.ComponentGroup.NativeDesktop.Llvm.Clang | 17.14.36802.14 | +| Microsoft.VisualStudio.ComponentGroup.UWP.NetCoreAndStandard | 17.14.36510.44 | +| Microsoft.VisualStudio.ComponentGroup.UWP.VC.v142 | 17.14.36510.44 | +| Microsoft.VisualStudio.ComponentGroup.VC.Tools.142.x86.x64 | 17.14.36510.44 | +| Microsoft.VisualStudio.ComponentGroup.VisualStudioExtension.Prerequisites | 17.14.36510.44 | +| Microsoft.VisualStudio.ComponentGroup.Web | 17.14.36510.44 | +| Microsoft.VisualStudio.ComponentGroup.Web.CloudTools | 17.14.36614.30 | +| Microsoft.VisualStudio.ComponentGroup.WebToolsExtensions | 17.14.36510.44 | +| Microsoft.VisualStudio.ComponentGroup.WebToolsExtensions.CMake | 17.14.36510.44 | +| Microsoft.VisualStudio.ComponentGroup.WebToolsExtensions.TemplateEngine | 17.14.36510.44 | +| Microsoft.VisualStudio.ComponentGroup.WindowsAppDevelopment.Prerequisites | 17.14.36510.44 | +| Microsoft.VisualStudio.ComponentGroup.WindowsAppSDK.Cs | 17.14.36510.44 | +| Microsoft.VisualStudio.Workload.Azure | 17.14.36518.2 | | Microsoft.VisualStudio.Workload.CoreEditor | 17.14.36015.10 | | Microsoft.VisualStudio.Workload.Data | 17.14.36015.10 | | Microsoft.VisualStudio.Workload.DataScience | 17.14.36015.10 | -| Microsoft.VisualStudio.Workload.ManagedDesktop | 17.14.36015.10 | +| Microsoft.VisualStudio.Workload.ManagedDesktop | 17.14.36518.2 | | Microsoft.VisualStudio.Workload.ManagedGame | 17.14.36301.6 | -| Microsoft.VisualStudio.Workload.NativeCrossPlat | 17.14.36108.8 | -| Microsoft.VisualStudio.Workload.NativeDesktop | 17.14.36015.10 | -| Microsoft.VisualStudio.Workload.NativeGame | 17.14.36015.10 | -| Microsoft.VisualStudio.Workload.NativeMobile | 17.14.36015.10 | -| Microsoft.VisualStudio.Workload.NetCrossPlat | 17.14.36015.10 | -| Microsoft.VisualStudio.Workload.NetWeb | 17.14.36015.10 | -| Microsoft.VisualStudio.Workload.Node | 17.14.36015.10 | +| Microsoft.VisualStudio.Workload.NativeCrossPlat | 17.14.36716.0 | +| Microsoft.VisualStudio.Workload.NativeDesktop | 17.14.36517.7 | +| Microsoft.VisualStudio.Workload.NativeGame | 17.14.36331.10 | +| Microsoft.VisualStudio.Workload.NativeMobile | 17.14.36802.14 | +| Microsoft.VisualStudio.Workload.NetCrossPlat | 17.14.36518.2 | +| Microsoft.VisualStudio.Workload.NetWeb | 17.14.36518.2 | +| Microsoft.VisualStudio.Workload.Node | 17.14.36517.7 | | Microsoft.VisualStudio.Workload.Office | 17.14.36015.10 | | Microsoft.VisualStudio.Workload.Python | 17.14.36015.10 | -| Microsoft.VisualStudio.Workload.Universal | 17.14.36015.10 | +| Microsoft.VisualStudio.Workload.Universal | 17.14.36331.10 | | Microsoft.VisualStudio.Workload.VisualStudioExtension | 17.14.36015.10 | -| runtimes.ios | 9.0.725.31616 | -| runtimes.ios.net8 | 9.0.725.31616 | -| runtimes.maccatalyst | 9.0.725.31616 | -| runtimes.maccatalyst.net8 | 9.0.725.31616 | -| wasm.tools | 9.0.725.31616 | -| ProBITools.MicrosoftAnalysisServicesModelingProjects2022 | 3.0.4 | -| ProBITools.MicrosoftReportProjectsforVisualStudio2022 | 3.0.1 | -| SSIS.MicrosoftDataToolsIntegrationServices | 1.6.2 | +| runtimes.ios | 9.0.1125.51309 | +| runtimes.maccatalyst | 9.0.1125.51309 | +| wasm.tools | 9.0.1125.51309 | +| ProBITools.MicrosoftAnalysisServicesModelingProjects2022 | 4.0.0 | +| ProBITools.MicrosoftReportProjectsforVisualStudio2022 | 4.0.0 | +| SSIS.MicrosoftDataToolsIntegrationServices | 2.1.2 | | VisualStudioClient.MicrosoftVisualStudio2022InstallerProjects | 2.0.1 | | Windows Driver Kit | 10.1.26100.4202 | -| Windows Driver Kit Visual Studio Extension | 10.0.26100.12 | -| Windows Software Development Kit | 10.1.26100.4188 | +| Windows Driver Kit Visual Studio Extension | 10.0.26100.16 | +| Windows Software Development Kit | 10.1.26100.7175 | | WixToolset.WixToolsetVisualStudio2022Extension | 1.0.0.22 | #### Microsoft Visual C++ @@ -481,28 +481,26 @@ Note: MSYS2 is pre-installed on image but not added to PATH. #### Installed Windows SDKs - 10.0.17763.0 - 10.0.19041.0 -- 10.0.20348.0 -- 10.0.22000.0 - 10.0.22621.0 - 10.0.26100.0 ### .NET Core Tools -- .NET Core SDK: 6.0.136, 6.0.203, 6.0.321, 6.0.428, 8.0.118, 8.0.206, 8.0.315, 8.0.412, 9.0.108, 9.0.205, 9.0.302 +- .NET Core SDK: 8.0.122, 8.0.206, 8.0.319, 8.0.416, 9.0.112, 9.0.205, 9.0.308, 10.0.101 - .NET Framework: 4.7.2, 4.8, 4.8.1 -- Microsoft.AspNetCore.App: 6.0.5, 6.0.26, 6.0.36, 6.0.39, 8.0.6, 8.0.18, 9.0.6, 9.0.7 -- Microsoft.NETCore.App: 6.0.5, 6.0.26, 6.0.36, 6.0.39, 8.0.6, 8.0.18, 9.0.6, 9.0.7 -- Microsoft.WindowsDesktop.App: 6.0.5, 6.0.26, 6.0.36, 8.0.6, 8.0.18, 9.0.6, 9.0.7 -- nbgv 3.7.115+d31f50f4d1 +- Microsoft.AspNetCore.App: 6.0.40, 8.0.6, 8.0.22, 9.0.6, 9.0.11, 10.0.1 +- Microsoft.NETCore.App: 6.0.40, 8.0.6, 8.0.22, 9.0.6, 9.0.11, 10.0.1 +- Microsoft.WindowsDesktop.App: 8.0.6, 8.0.22, 9.0.6, 9.0.11, 10.0.1 +- nbgv 3.9.50+6feeb89450 ### PowerShell Tools -- PowerShell 7.4.11 +- PowerShell 7.4.13 #### Powershell Modules - Az: 12.5.0 -- AWSPowershell: 5.0.9 +- AWSPowershell: 5.0.127 - DockerMsftProvider: 1.0.0.8 - MarkdownPS: 1.10 -- Microsoft.Graph: 2.29.0 +- Microsoft.Graph: 2.34.0 - Pester: 3.4.0, 5.7.1 - PowerShellGet: 1.0.0.1, 2.2.5 - PSScriptAnalyzer: 1.24.0 @@ -511,35 +509,35 @@ Note: MSYS2 is pre-installed on image but not added to PATH. - VSSetup: 2.2.16 ### Android -| Package Name | Version | -| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Android Command Line Tools | 8.0 | -| Android Emulator | 35.6.11 | -| Android SDK Build-tools | 36.0.0
35.0.0 35.0.1
34.0.0
33.0.0 33.0.1 33.0.2 33.0.3
32.0.0
31.0.0 | -| Android SDK Platforms | android-36 (rev 2)
android-35-ext15 (rev 1)
android-35-ext14 (rev 1)
android-35 (rev 2)
android-34-ext8 (rev 1)
android-34-ext12 (rev 1)
android-34-ext11 (rev 1)
android-34-ext10 (rev 1)
android-34 (rev 3)
android-33-ext5 (rev 1)
android-33-ext4 (rev 1)
android-33 (rev 3)
android-32 (rev 1)
android-31 (rev 1) | -| Android SDK Platform-Tools | 36.0.0 | -| Android Support Repository | 47.0.0 | -| CMake | 3.18.1
3.22.1
3.31.5 | -| Google Play services | 49 | -| Google Repository | 58 | -| NDK | 26.3.11579264
27.2.12479018
28.2.13676358 | +| Package Name | Version | +| -------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Android Command Line Tools | 8.0 | +| Android Emulator | 36.3.10 | +| Android SDK Build-tools | 36.0.0 36.1.0
35.0.0 35.0.1
34.0.0
33.0.0 33.0.1 33.0.2 33.0.3
32.0.0
31.0.0 | +| Android SDK Platforms | android-36.1 (rev 1)
android-36-ext19 (rev 1)
android-36-ext18 (rev 1)
android-36 (rev 2)
android-35-ext15 (rev 1)
android-35-ext14 (rev 1)
android-35 (rev 2)
android-34-ext8 (rev 1)
android-34-ext12 (rev 1)
android-34-ext11 (rev 1)
android-34-ext10 (rev 1)
android-34 (rev 3)
android-33-ext5 (rev 1)
android-33-ext4 (rev 1)
android-33 (rev 3)
android-32 (rev 1)
android-31 (rev 1) | +| Android SDK Platform-Tools | 36.0.2 | +| Android Support Repository | 47.0.0 | +| CMake | 3.22.1
3.31.5
4.1.2 | +| Google Play services | 49 | +| Google Repository | 58 | +| NDK | 26.3.11579264
27.3.13750724
28.2.13676358
29.0.14206865 | #### Environment variables | Name | Value | | ----------------------- | ---------------------------------------- | | ANDROID_HOME | C:\Android\android-sdk | -| ANDROID_NDK | C:\Android\android-sdk\ndk\27.2.12479018 | -| ANDROID_NDK_HOME | C:\Android\android-sdk\ndk\27.2.12479018 | -| ANDROID_NDK_LATEST_HOME | C:\Android\android-sdk\ndk\28.2.13676358 | -| ANDROID_NDK_ROOT | C:\Android\android-sdk\ndk\27.2.12479018 | +| ANDROID_NDK | C:\Android\android-sdk\ndk\27.3.13750724 | +| ANDROID_NDK_HOME | C:\Android\android-sdk\ndk\27.3.13750724 | +| ANDROID_NDK_LATEST_HOME | C:\Android\android-sdk\ndk\29.0.14206865 | +| ANDROID_NDK_ROOT | C:\Android\android-sdk\ndk\27.3.13750724 | | ANDROID_SDK_ROOT | C:\Android\android-sdk | ### Cached Docker images | Repository:Tag | Digest | Created | | ------------------------------------------------------------------------- | ------------------------------------------------------------------------ | ---------- | -| mcr.microsoft.com/dotnet/framework/aspnet:4.8-windowsservercore-ltsc2022 | sha256:a079da56a0014847d85010ddf264215332dcde03f8a27870d1fabf55aa86fb13 | 2025-07-08 | -| mcr.microsoft.com/dotnet/framework/runtime:4.8-windowsservercore-ltsc2022 | sha256:ce9beb1bd919247d9bc69e9f0345795381ec15000c1faa989a7839cd5f65a0e9 | 2025-07-08 | -| mcr.microsoft.com/dotnet/framework/sdk:4.8-windowsservercore-ltsc2022 | sha256:425ca73da19ca274edd1b466e1009342b476306de6918eb246758b9482f47927 | 2025-07-08 | -| mcr.microsoft.com/windows/nanoserver:ltsc2022 | sha256:9a57174ce85e979529e4f0cd58dff2e837b65fc7832b7585b4882f6cce0e255d | 2025-07-05 | -| mcr.microsoft.com/windows/servercore:ltsc2022 | sha256:3281482945016cdaefbe417edd8338de8119e077b6941f74e78b050da1b7bd97 | 2025-07-05 | +| mcr.microsoft.com/dotnet/framework/aspnet:4.8-windowsservercore-ltsc2022 | sha256:ec04e733695f49a0dc9132184f6b06704866b34f422004093c1972512c86259e | 2025-09-09 | +| mcr.microsoft.com/dotnet/framework/runtime:4.8-windowsservercore-ltsc2022 | sha256:3983348680840ca6e53ad641e314c3c9184ca2fd19f88bc467600f7d9f6e9d73 | 2025-09-09 | +| mcr.microsoft.com/dotnet/framework/sdk:4.8-windowsservercore-ltsc2022 | sha256:460dedaed73224f73ff10dc3ad754d0ed250aa57bcdf6c5052a811b4b7e29345 | 2025-09-09 | +| mcr.microsoft.com/windows/nanoserver:ltsc2022 | sha256:643adf84ee2338ee4811fd891adb9e912917dc6c0ca85399982e1bebda4f2295 | 2025-12-05 | +| mcr.microsoft.com/windows/servercore:ltsc2022 | sha256:3750d7fcd320130cc2ce61954902b71729e85ec2c07c5a2e83a6d6c7f34a61e5 | 2025-12-05 | diff --git a/images/windows/Windows2025-Readme.md b/images/windows/Windows2025-Readme.md index f974b8f3e6..9a257f6bd6 100644 --- a/images/windows/Windows2025-Readme.md +++ b/images/windows/Windows2025-Readme.md @@ -1,41 +1,44 @@ | Announcements | |-| -| [[Windows Server 2025] image will no longer have D:/ drive accessible to users from 2025-07-14](https://github.com/actions/runner-images/issues/12416) | -| [[Windows & Ubuntu] .NET 6 will be removed from the images on 2025-08-01.](https://github.com/actions/runner-images/issues/12241) | +| [[Windows/Ubuntu] Docker Server and Client will be updated to version 29.1.*, Docker Compose will be updated to version 2.40.3 on February 9th, 2026](https://github.com/actions/runner-images/issues/13474) | +| [[all OSs] Updating Azure PowerShell Module version to 14.6.0 on January 26th, 2026.](https://github.com/actions/runner-images/issues/13473) | +| [[Ubuntu-22.04, macOS-14, Windows-2022] Android SDK platforms and build tools older than version 34 will be removed on January 12th, 2026.](https://github.com/actions/runner-images/issues/13469) | +| [[all OSs] Python 3.9 will be removed; Python 3.12 will become the default on Windows images on January 12th, 2026.](https://github.com/actions/runner-images/issues/13468) | +| [[all OSs] Android NDK 26 will be removed, Android NDK 27 will be used by default on January 12th, 2026.](https://github.com/actions/runner-images/issues/13467) | *** # Windows Server 2025 -- OS Version: 10.0.26100 Build 4652 -- Image Version: 20250713.1.0 +- OS Version: 10.0.26100 Build 7462 +- Image Version: 20260105.172.1 ## Windows features - Windows Subsystem for Linux (WSLv1): Enabled -- Windows Subsystem for Linux (Default, WSLv2): 2.5.9.0 +- Windows Subsystem for Linux (Default, WSLv2): 2.6.3.0 ## Installed Software ### Language and Runtime - Bash 5.2.37(1)-release -- Go 1.24.5 -- Julia 1.11.6 -- Kotlin 2.1.10 -- LLVM 20.1.7 -- Node 22.17.0 -- Perl 5.40.2 -- PHP 8.4.8 +- Go 1.24.11 +- Julia 1.12.0 +- Kotlin 2.3.0 +- LLVM 20.1.8 +- Node 22.21.1 +- Perl 5.42.0 +- PHP 8.4.16 - Python 3.9.13 -- Ruby 3.3.8 +- Ruby 3.3.10 ### Package Management -- Chocolatey 2.5.0 -- Composer 2.8.10 -- Helm 3.18.3 -- Miniconda 25.5.1 (pre-installed on the image but not added to PATH) -- NPM 10.9.2 -- NuGet 6.14.0.116 -- pip 25.1.1 (python 3.9) -- Pipx 1.7.1 +- Chocolatey 2.6.0 +- Composer 2.9.3 +- Helm 4.0.3 +- Miniconda 25.11.1 (pre-installed on the image but not added to PATH) +- NPM 10.9.4 +- NuGet 7.0.1.1 +- pip 25.3 (python 3.9) +- Pipx 1.8.0 - RubyGems 3.5.22 -- Vcpkg (build from commit 09b8d93e61) +- Vcpkg (build from commit e3db8f65d2) - Yarn 1.22.22 #### Environment variables @@ -46,75 +49,76 @@ ### Project Management - Ant 1.10.15 -- Gradle 8.14 -- Maven 3.9.10 -- sbt 1.11.3 +- Gradle 9.1 +- Maven 3.9.12 +- sbt 1.11.7 ### Tools -- 7zip 25.00 +- 7zip 25.01 - aria2 1.37.0 -- azcopy 10.29.1 -- Bazel 8.3.1 +- azcopy 10.31.0 +- Bazel 8.5.0 - Bazelisk 1.26.0 -- Bicep 0.36.177 -- Cabal 3.14.2.0 +- Bicep 0.39.26 +- Cabal 3.16.1.0 - CMake 3.31.6 -- CodeQL Action Bundle 2.22.1 +- CodeQL Action Bundle 2.23.8 - Docker 27.5.1 - Docker Compose v2 2.32.2 -- Docker-wincred 0.9.3 -- ghc 9.12.2 -- Git 2.50.1.windows.1 -- Git LFS 3.7.0 -- ImageMagick 7.1.1-47 -- jq 1.7.1 -- Kind 0.29.0 -- Kubectl 1.33.2 -- gcc 14.2.0 -- gdb 16.2 -- GNU Binutils 2.44 +- Docker-wincred 0.9.4 +- ghc 9.14.1 +- Git 2.52.0.windows.1 +- Git LFS 3.7.1 +- ImageMagick 7.1.2-10 +- InnoSetup 6.6.1 +- jq 1.8.1 +- Kind 0.31.0 +- Kubectl 1.35.0 +- gcc 15.2.0 +- gdb 16.3 +- GNU Binutils 2.45 - Newman 6.2.1 -- OpenSSL 3.5.1 -- Packer 1.12.0 -- Pulumi 3.181.0 -- R 4.4.2 +- OpenSSL 3.6.0 +- Packer 1.14.2 +- Pulumi 3.214.1 +- R 4.5.2 - Service Fabric SDK 10.1.2493.9590 -- Stack 3.7.1 -- Swig 4.1.1 +- Stack 3.9.1 +- Swig 4.3.1 - VSWhere 3.1.7 - WinAppDriver 1.2.2009.02003 - WiX Toolset 3.14.1.8722 - yamllint 1.37.1 - zstd 1.5.7 -- Ninja 1.13.1 +- Ninja 1.13.2 ### CLI Tools -- AWS CLI 2.27.50 -- AWS SAM CLI 1.142.1 -- AWS Session Manager CLI 1.2.707.0 -- Azure CLI 2.75.0 +- AWS CLI 2.32.28 +- AWS SAM CLI 1.151.0 +- AWS Session Manager CLI 1.2.764.0 +- Azure CLI 2.81.0 - Azure DevOps CLI extension 1.0.2 -- GitHub CLI 2.75.0 +- GitHub CLI 2.83.2 ### Rust Tools -- Cargo 1.88.0 -- Rust 1.88.0 -- Rustdoc 1.88.0 +- Cargo 1.92.0 +- Rust 1.92.0 +- Rustdoc 1.92.0 - Rustup 1.28.2 #### Packages -- Clippy 0.1.88 +- Clippy 0.1.92 - Rustfmt 1.8.0 ### Browsers and Drivers -- Google Chrome 138.0.7204.101 -- Chrome Driver 138.0.7204.94 -- Microsoft Edge 138.0.3351.83 -- Microsoft Edge Driver 138.0.3351.83 -- Mozilla Firefox 140.0.4 +- Google Chrome 143.0.7499.170 +- Chrome Driver 143.0.7499.169 +- Microsoft Edge 143.0.3650.96 +- Microsoft Edge Driver 143.0.3650.96 +- Mozilla Firefox 146.0.1 - Gecko Driver 0.36.0 - IE Driver 4.14.0.0 -- Selenium server 4.34.0 +- Selenium server 4.39.0 #### Environment variables | Name | Value | @@ -125,12 +129,13 @@ | SELENIUM_JAR_PATH | C:\selenium\selenium-server.jar | ### Java -| Version | Environment Variable | -| ------------------- | -------------------- | -| 8.0.452+9 | JAVA_HOME_8_X64 | -| 11.0.27+6 | JAVA_HOME_11_X64 | -| 17.0.15+6 (default) | JAVA_HOME_17_X64 | -| 21.0.7+6.0 | JAVA_HOME_21_X64 | +| Version | Environment Variable | +| -------------------- | -------------------- | +| 8.0.472+8 | JAVA_HOME_8_X64 | +| 11.0.29+7 | JAVA_HOME_11_X64 | +| 17.0.17+10 (default) | JAVA_HOME_17_X64 | +| 21.0.9+10.0 | JAVA_HOME_21_X64 | +| 25.0.1+8.0 | JAVA_HOME_25_X64 | ### Shells | Name | Target | @@ -153,298 +158,295 @@ Note: MSYS2 is pre-installed on image but not added to PATH. #### Go - 1.22.12 -- 1.23.11 -- 1.24.5 +- 1.23.12 +- 1.24.11 +- 1.25.5 #### Node.js -- 18.20.8 -- 20.19.3 -- 22.17.0 +- 20.19.6 +- 22.21.1 +- 24.12.0 #### Python - 3.9.13 - 3.10.11 - 3.11.9 - 3.12.10 -- 3.13.5 +- 3.13.11 +- 3.14.2 #### PyPy - 3.9.19 [PyPy 7.3.16] - 3.10.16 [PyPy 7.3.19] #### Ruby -- 3.1.7 -- 3.2.8 -- 3.3.8 +- 3.2.9 +- 3.3.10 +- 3.4.8 ### Databases #### PostgreSQL -| Property | Value | -| -------------------- | ------------------------------------------------------------------------------------------------------------------------------------ | -| ServiceName | postgresql-x64-17 | -| Version | 17.5 | -| ServiceStatus | Stopped | -| ServiceStartType | Disabled | -| EnvironmentVariables | PGBIN=C:\Program Files\PostgreSQL\17\bin
PGDATA=C:\Program Files\PostgreSQL\17\data
PGROOT=C:\Program Files\PostgreSQL\17 | -| Path | C:\Program Files\PostgreSQL\17 | -| UserName | postgres | -| Password | root | +| Property | Value | +| -------------------- | ---------------------------------------------------------------------------------------------------------------------- | +| ServiceName | postgresql-x64-17 | +| Version | 17.7 | +| ServiceStatus | Stopped | +| ServiceStartType | Disabled | +| EnvironmentVariables | PGBIN=C:\Program Files\PostgreSQL\17\bin
PGDATA=C:\PostgreSQL\17\data
PGROOT=C:\Program Files\PostgreSQL\17 | +| Path | C:\Program Files\PostgreSQL\17 | +| UserName | postgres | +| Password | root | #### MongoDB | Version | ServiceName | ServiceStatus | ServiceStartType | | -------- | ----------- | ------------- | ---------------- | -| 7.0.21.0 | MongoDB | Stopped | Disabled | +| 7.0.28.0 | MongoDB | Stopped | Disabled | ### Database tools -- Azure CosmosDb Emulator 2.14.23.0 -- DacFx 170.0.94.3 -- MySQL 8.0.42.0 -- SQL OLEDB Driver 18.7.4.0 +- Azure CosmosDb Emulator 2.14.25.0 +- DacFx 170.2.70.1 +- MySQL 8.0.44.0 +- SQL OLEDB Driver 18 18.7.5.0 +- SQL OLEDB Driver 19 19.4.1.0 - SQLPS 1.0 -- MongoDB Shell (mongosh) 2.5.5 +- MongoDB Shell (mongosh) 2.5.10 ### Web Servers | Name | Version | ConfigFile | ServiceName | ServiceStatus | ListenPort | | ------ | ------- | ------------------------------------- | ----------- | ------------- | ---------- | | Apache | 2.4.55 | C:\tools\Apache24\conf\httpd.conf | Apache | Stopped | 80 | -| Nginx | 1.29.0 | C:\tools\nginx-1.29.0\conf\nginx.conf | nginx | Stopped | 80 | +| Nginx | 1.29.4 | C:\tools\nginx-1.29.4\conf\nginx.conf | nginx | Stopped | 80 | ### Visual Studio Enterprise 2022 | Name | Version | Path | | ----------------------------- | ------------- | -------------------------------------------------------- | -| Visual Studio Enterprise 2022 | 17.14.36301.6 | C:\Program Files\Microsoft Visual Studio\2022\Enterprise | +| Visual Studio Enterprise 2022 | 17.14.36811.4 | C:\Program Files\Microsoft Visual Studio\2022\Enterprise | #### Workloads, components and extensions | Package | Version | | ------------------------------------------------------------------------- | --------------- | | android | 35.0.78.0 | -| Component.Android.NDK.R23C | 17.14.36015.10 | -| Component.Android.SDK.MAUI | 17.14.36015.10 | -| Component.Dotfuscator | 17.14.36015.10 | -| Component.Linux.CMake | 17.14.36108.8 | -| Component.Linux.RemoteFileExplorer | 17.14.36108.8 | -| Component.MDD.Android | 17.14.36015.10 | -| Component.MDD.Linux | 17.14.36108.8 | -| Component.MDD.Linux.GCC.arm | 17.14.36015.10 | -| Component.Microsoft.VisualStudio.LiveShare.2022 | 1.0.5949 | -| Component.Microsoft.VisualStudio.RazorExtension | 17.14.36015.10 | -| Component.Microsoft.VisualStudio.Tools.Applications.amd64 | 17.0.35906.1 | -| Component.Microsoft.VisualStudio.Web.AzureFunctions | 17.14.36015.10 | -| Component.Microsoft.Web.LibraryManager | 17.14.36015.10 | +| Component.Android.NDK.R23C | 17.14.36510.44 | +| Component.Android.SDK.MAUI | 17.14.36510.44 | +| Component.Dotfuscator | 17.14.36510.44 | +| Component.Linux.CMake | 17.14.36510.44 | +| Component.Linux.RemoteFileExplorer | 17.14.36510.44 | +| Component.MDD.Android | 17.14.36804.6 | +| Component.MDD.Linux | 17.14.36510.44 | +| Component.MDD.Linux.GCC.arm | 17.14.36510.44 | +| Component.Microsoft.VisualStudio.RazorExtension | 17.14.36510.44 | +| Component.Microsoft.VisualStudio.Tools.Applications.amd64 | 17.0.36522.0 | +| Component.Microsoft.VisualStudio.Web.AzureFunctions | 17.14.36510.44 | +| Component.Microsoft.Web.LibraryManager | 17.14.36510.44 | | Component.Microsoft.WebTools.BrowserLink.WebLivePreview | 17.14.2.50506 | -| Component.Microsoft.Windows.DriverKit | 10.0.26100.12 | -| Component.OpenJDK | 17.14.36015.10 | -| Component.UnityEngine.x64 | 17.14.36015.10 | -| Component.Unreal.Debugger | 17.14.36015.10 | -| Component.Unreal.Ide | 17.14.36015.10 | -| Component.VisualStudio.GitHub.Copilot | 17.14.36301.6 | +| Component.Microsoft.Windows.DriverKit | 10.0.26100.16 | +| Component.OpenJDK | 17.14.36510.44 | +| Component.UnityEngine.x64 | 17.14.36510.44 | +| Component.Unreal.Debugger | 17.14.36809.9 | +| Component.Unreal.Ide | 17.14.36510.44 | +| Component.VisualStudio.GitHub.Copilot | 17.14.36809.9 | | Component.VSInstallerProjects2022 | 2.0.1 | | Component.WixToolset.VisualStudioExtension.Dev17 | 1.0.0.22 | | Component.WixToolset.VisualStudioExtension.Schemas3 | 1.0.0.22 | -| ios | 18.5.9207.0 | -| maccatalyst | 18.5.9207.0 | -| maui.blazor | 9.0.51.12966 | -| maui.core | 9.0.51.12966 | -| maui.windows | 9.0.51.12966 | -| Microsoft.Component.Azure.DataLake.Tools | 17.14.36015.10 | -| Microsoft.Component.ClickOnce | 17.14.36015.10 | -| Microsoft.Component.CodeAnalysis.SDK | 17.14.36015.10 | -| Microsoft.Component.MSBuild | 17.14.36015.10 | -| Microsoft.Component.NetFX.Native | 17.14.36015.10 | -| Microsoft.Component.PythonTools | 17.14.36015.10 | -| Microsoft.Component.PythonTools.Web | 17.14.36015.10 | -| Microsoft.Component.VC.Runtime.UCRTSDK | 17.14.36015.10 | -| Microsoft.ComponentGroup.Blend | 17.14.36015.10 | -| Microsoft.ComponentGroup.ClickOnce.Publish | 17.14.36015.10 | -| Microsoft.Net.Component.4.5.2.TargetingPack | 17.14.36015.10 | -| Microsoft.Net.Component.4.6.2.TargetingPack | 17.14.36015.10 | -| Microsoft.Net.Component.4.6.TargetingPack | 17.14.36015.10 | -| Microsoft.Net.Component.4.7.1.TargetingPack | 17.14.36015.10 | -| Microsoft.Net.Component.4.7.2.TargetingPack | 17.14.36015.10 | -| Microsoft.Net.Component.4.7.TargetingPack | 17.14.36015.10 | -| Microsoft.Net.Component.4.8.1.SDK | 17.14.36015.10 | -| Microsoft.Net.Component.4.8.1.TargetingPack | 17.14.36015.10 | -| Microsoft.Net.Component.4.8.SDK | 17.14.36015.10 | -| Microsoft.Net.Component.4.8.TargetingPack | 17.14.36015.10 | -| Microsoft.Net.ComponentGroup.4.8.DeveloperTools | 17.14.36015.10 | -| Microsoft.Net.ComponentGroup.DevelopmentPrerequisites | 17.14.36015.10 | -| Microsoft.Net.ComponentGroup.TargetingPacks.Common | 17.14.36015.10 | -| microsoft.net.runtime.android | 9.0.725.31616 | -| microsoft.net.runtime.android.aot | 9.0.725.31616 | -| microsoft.net.runtime.android.aot.net8 | 9.0.725.31616 | -| microsoft.net.runtime.android.net8 | 9.0.725.31616 | -| microsoft.net.runtime.ios | 9.0.725.31616 | -| microsoft.net.runtime.ios.net8 | 9.0.725.31616 | -| microsoft.net.runtime.maccatalyst | 9.0.725.31616 | -| microsoft.net.runtime.maccatalyst.net8 | 9.0.725.31616 | -| microsoft.net.runtime.mono.tooling | 9.0.725.31616 | -| microsoft.net.runtime.mono.tooling.net8 | 9.0.725.31616 | -| microsoft.net.sdk.emscripten | 9.0.12.30402 | -| Microsoft.NetCore.Component.DevelopmentTools | 17.14.36015.10 | -| Microsoft.NetCore.Component.Runtime.8.0 | 17.14.36301.6 | -| Microsoft.NetCore.Component.Runtime.9.0 | 17.14.36301.6 | -| Microsoft.NetCore.Component.SDK | 17.14.36301.6 | -| Microsoft.NetCore.Component.Web | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.AppInsights.Tools | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.AspNet | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.AspNet45 | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.Azure.AuthoringTools | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.Azure.ClientLibs | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.Azure.Compute.Emulator | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.Azure.ResourceManager.Tools | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.Azure.ServiceFabric.Tools | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.Azure.Waverton | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.Azure.Waverton.BuildTools | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.ClassDesigner | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.CodeMap | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.Common.Azure.Tools | 17.14.36024.20 | -| Microsoft.VisualStudio.Component.CoreEditor | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.CppBuildInsights | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.Debugger.JustInTime | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.Debugger.Snapshot | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.DiagnosticTools | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.DockerTools | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.DotNetModelBuilder | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.DslTools | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.Embedded | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.EntityFramework | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.FSharp | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.FSharp.Desktop | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.FSharp.WebTemplates | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.GraphDocument | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.Graphics | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.Graphics.Tools | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.HLSL | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.IISExpress | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.IntelliCode | 17.14.36220.6 | -| Microsoft.VisualStudio.Component.IntelliTrace.FrontEnd | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.JavaScript.Diagnostics | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.JavaScript.TypeScript | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.LinqToSql | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.LiveUnitTesting | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.ManagedDesktop.Core | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.ManagedDesktop.Prerequisites | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.MSODBC.SQL | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.MSSQL.CMDLnUtils | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.Node.Tools | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.NuGet | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.NuGet.BuildTools | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.PortableLibrary | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.Roslyn.Compiler | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.Roslyn.LanguageServices | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.Sharepoint.Tools | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.SQL.CLR | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.SQL.DataSources | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.SQL.LocalDB.Runtime | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.SQL.SSDT | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.TeamOffice | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.TestTools.CodedUITest | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.TestTools.WebLoadTest | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.TextTemplating | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.TypeScript.TSServer | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.Unity | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.UWP.VC.ARM64 | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.UWP.VC.ARM64EC | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.VC.14.29.16.11.ARM | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.VC.14.29.16.11.ARM64 | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.VC.ASAN | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.VC.ATL | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.VC.ATL.ARM | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.VC.ATL.ARM.Spectre | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.VC.ATL.ARM64 | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.VC.ATL.ARM64.Spectre | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.VC.ATL.Spectre | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.VC.ATLMFC | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.VC.ATLMFC.Spectre | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.VC.CLI.Support | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.VC.CMake.Project | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.VC.CoreIde | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.VC.DiagnosticTools | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.VC.Llvm.Clang | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.VC.Llvm.ClangToolset | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.VC.MFC.ARM | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.VC.MFC.ARM.Spectre | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.VC.MFC.ARM64 | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.VC.MFC.ARM64.Spectre | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.VC.Modules.x86.x64 | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.VC.Redist.14.Latest | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.VC.Redist.MSM | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.VC.Runtimes.ARM.Spectre | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.VC.Runtimes.ARM64.Spectre | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.VC.Runtimes.ARM64EC.Spectre | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.VC.Runtimes.x86.x64.Spectre | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.VC.TestAdapterForBoostTest | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.VC.TestAdapterForGoogleTest | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.VC.Tools.ARM | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.VC.Tools.ARM64 | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.VC.Tools.ARM64EC | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.VC.Tools.x86.x64 | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.Vcpkg | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.VSSDK | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.Wcf.Tooling | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.Web | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.WebDeploy | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.Windows10SDK | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.Windows11SDK.26100 | 17.14.36301.6 | -| Microsoft.VisualStudio.Component.Windows11Sdk.WindowsPerformanceToolkit | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.WindowsAppSdkSupport.CSharp | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.Workflow | 17.14.36015.10 | -| Microsoft.VisualStudio.Component.WslDebugging | 17.14.36015.10 | -| Microsoft.VisualStudio.ComponentGroup.ArchitectureTools.Native | 17.14.36015.10 | -| Microsoft.VisualStudio.ComponentGroup.Azure.CloudServices | 17.14.36015.10 | -| Microsoft.VisualStudio.ComponentGroup.Azure.Prerequisites | 17.14.36015.10 | -| Microsoft.VisualStudio.ComponentGroup.Azure.ResourceManager.Tools | 17.14.36015.10 | -| Microsoft.VisualStudio.ComponentGroup.AzureFunctions | 17.14.36015.10 | -| Microsoft.VisualStudio.ComponentGroup.Maui.All | 17.14.36015.10 | -| Microsoft.VisualStudio.ComponentGroup.Maui.Android | 17.14.36015.10 | -| Microsoft.VisualStudio.ComponentGroup.Maui.Blazor | 17.14.36015.10 | -| Microsoft.VisualStudio.ComponentGroup.Maui.iOS | 17.14.36015.10 | -| Microsoft.VisualStudio.ComponentGroup.Maui.MacCatalyst | 17.14.36015.10 | -| Microsoft.VisualStudio.ComponentGroup.Maui.Shared | 17.14.36015.10 | -| Microsoft.VisualStudio.ComponentGroup.Maui.Windows | 17.14.36015.10 | -| Microsoft.VisualStudio.ComponentGroup.MSIX.Packaging | 17.14.36015.10 | -| Microsoft.VisualStudio.ComponentGroup.NativeDesktop.Core | 17.14.36015.10 | -| Microsoft.VisualStudio.ComponentGroup.NativeDesktop.Llvm.Clang | 17.14.36015.10 | -| Microsoft.VisualStudio.ComponentGroup.UWP.NetCoreAndStandard | 17.14.36015.10 | -| Microsoft.VisualStudio.ComponentGroup.UWP.VC.v142 | 17.14.36015.10 | -| Microsoft.VisualStudio.ComponentGroup.VC.Tools.142.x86.x64 | 17.14.36015.10 | -| Microsoft.VisualStudio.ComponentGroup.VisualStudioExtension.Prerequisites | 17.14.36015.10 | -| Microsoft.VisualStudio.ComponentGroup.Web | 17.14.36015.10 | -| Microsoft.VisualStudio.ComponentGroup.Web.CloudTools | 17.14.36015.10 | -| Microsoft.VisualStudio.ComponentGroup.WebToolsExtensions | 17.14.36015.10 | -| Microsoft.VisualStudio.ComponentGroup.WebToolsExtensions.CMake | 17.14.36015.10 | -| Microsoft.VisualStudio.ComponentGroup.WebToolsExtensions.TemplateEngine | 17.14.36015.10 | -| Microsoft.VisualStudio.ComponentGroup.WindowsAppDevelopment.Prerequisites | 17.14.36015.10 | -| Microsoft.VisualStudio.ComponentGroup.WindowsAppSDK.Cs | 17.14.36015.10 | -| Microsoft.VisualStudio.Workload.Azure | 17.14.36015.10 | +| ComponentGroup.Microsoft.NET.AppModernization | 17.14.36705.20 | +| ios | 26.0.9752.0 | +| maccatalyst | 26.0.9752.0 | +| maui.blazor | 9.0.111.6930 | +| maui.core | 9.0.111.6930 | +| maui.windows | 9.0.111.6930 | +| Microsoft.Component.Azure.DataLake.Tools | 17.14.36510.44 | +| Microsoft.Component.ClickOnce | 17.14.36510.44 | +| Microsoft.Component.CodeAnalysis.SDK | 17.14.36510.44 | +| Microsoft.Component.MSBuild | 17.14.36510.44 | +| Microsoft.Component.NetFX.Native | 17.14.36510.44 | +| Microsoft.Component.PythonTools | 17.14.36510.44 | +| Microsoft.Component.PythonTools.Web | 17.14.36510.44 | +| Microsoft.Component.VC.Runtime.UCRTSDK | 17.14.36510.44 | +| Microsoft.ComponentGroup.Blend | 17.14.36510.44 | +| Microsoft.ComponentGroup.ClickOnce.Publish | 17.14.36510.44 | +| Microsoft.Net.Component.4.5.2.TargetingPack | 17.14.36510.44 | +| Microsoft.Net.Component.4.6.2.TargetingPack | 17.14.36510.44 | +| Microsoft.Net.Component.4.6.TargetingPack | 17.14.36510.44 | +| Microsoft.Net.Component.4.7.1.TargetingPack | 17.14.36510.44 | +| Microsoft.Net.Component.4.7.2.TargetingPack | 17.14.36510.44 | +| Microsoft.Net.Component.4.7.TargetingPack | 17.14.36510.44 | +| Microsoft.Net.Component.4.8.1.SDK | 17.14.36510.44 | +| Microsoft.Net.Component.4.8.1.TargetingPack | 17.14.36510.44 | +| Microsoft.Net.Component.4.8.SDK | 17.14.36510.44 | +| Microsoft.Net.Component.4.8.TargetingPack | 17.14.36510.44 | +| Microsoft.Net.ComponentGroup.4.8.DeveloperTools | 17.14.36510.44 | +| Microsoft.Net.ComponentGroup.DevelopmentPrerequisites | 17.14.36510.44 | +| Microsoft.Net.ComponentGroup.TargetingPacks.Common | 17.14.36510.44 | +| microsoft.net.runtime.android | 9.0.1125.51309 | +| microsoft.net.runtime.android.aot | 9.0.1125.51309 | +| microsoft.net.runtime.android.aot.net8 | 9.0.1125.51309 | +| microsoft.net.runtime.android.net8 | 9.0.1125.51309 | +| microsoft.net.runtime.ios | 9.0.1125.51309 | +| microsoft.net.runtime.maccatalyst | 9.0.1125.51309 | +| microsoft.net.runtime.mono.tooling | 9.0.1125.51309 | +| microsoft.net.runtime.mono.tooling.net8 | 9.0.1125.51309 | +| microsoft.net.sdk.emscripten | 9.0.13.1604 | +| Microsoft.NetCore.Component.DevelopmentTools | 17.14.36510.44 | +| Microsoft.NetCore.Component.Runtime.8.0 | 17.14.36705.7 | +| Microsoft.NetCore.Component.Runtime.9.0 | 17.14.36717.8 | +| Microsoft.NetCore.Component.SDK | 17.14.36717.8 | +| Microsoft.NetCore.Component.Web | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.AppInsights.Tools | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.AspNet | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.AspNet45 | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.Azure.AuthoringTools | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.Azure.ClientLibs | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.Azure.Compute.Emulator | 17.14.36517.7 | +| Microsoft.VisualStudio.Component.Azure.ResourceManager.Tools | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.Azure.ServiceFabric.Tools | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.Azure.Waverton | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.Azure.Waverton.BuildTools | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.ClassDesigner | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.CodeMap | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.Common.Azure.Tools | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.CoreEditor | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.CppBuildInsights | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.Debugger.JustInTime | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.DiagnosticTools | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.DockerTools | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.DotNetModelBuilder | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.DslTools | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.EntityFramework | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.FSharp | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.FSharp.Desktop | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.FSharp.WebTemplates | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.GraphDocument | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.Graphics | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.Graphics.Tools | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.HLSL | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.IISExpress | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.IntelliCode | 17.14.36621.7 | +| Microsoft.VisualStudio.Component.IntelliTrace.FrontEnd | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.JavaScript.Diagnostics | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.JavaScript.TypeScript | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.LinqToSql | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.LiveUnitTesting | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.ManagedDesktop.Core | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.ManagedDesktop.Prerequisites | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.MSODBC.SQL | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.MSSQL.CMDLnUtils | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.Node.Tools | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.NuGet | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.NuGet.BuildTools | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.PortableLibrary | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.Roslyn.Compiler | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.Roslyn.LanguageServices | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.Sharepoint.Tools | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.SQL.CLR | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.SQL.DataSources | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.SQL.LocalDB.Runtime | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.SQL.SSDT | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.TeamOffice | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.TestTools.CodedUITest | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.TestTools.WebLoadTest | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.TextTemplating | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.TypeScript.TSServer | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.Unity | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.UWP.VC.ARM64 | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.UWP.VC.ARM64EC | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.VC.14.29.16.11.ARM | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.VC.14.29.16.11.ARM64 | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.VC.ASAN | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.VC.ATL | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.VC.ATL.ARM | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.VC.ATL.ARM.Spectre | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.VC.ATL.ARM64 | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.VC.ATL.ARM64.Spectre | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.VC.ATL.Spectre | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.VC.ATLMFC | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.VC.ATLMFC.Spectre | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.VC.CLI.Support | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.VC.CMake.Project | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.VC.CoreIde | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.VC.DiagnosticTools | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.VC.Llvm.Clang | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.VC.Llvm.ClangToolset | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.VC.MFC.ARM | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.VC.MFC.ARM.Spectre | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.VC.MFC.ARM64 | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.VC.MFC.ARM64.Spectre | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.VC.Modules.x86.x64 | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.VC.Redist.14.Latest | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.VC.Redist.MSM | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.VC.Runtimes.ARM.Spectre | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.VC.Runtimes.ARM64.Spectre | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.VC.Runtimes.ARM64EC.Spectre | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.VC.Runtimes.x86.x64.Spectre | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.VC.TestAdapterForBoostTest | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.VC.TestAdapterForGoogleTest | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.VC.Tools.ARM | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.VC.Tools.ARM64 | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.VC.Tools.ARM64EC | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.VC.Tools.x86.x64 | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.Vcpkg | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.VSSDK | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.Wcf.Tooling | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.Web | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.WebDeploy | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.Windows10SDK | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.Windows11SDK.26100 | 17.14.36804.6 | +| Microsoft.VisualStudio.Component.Windows11Sdk.WindowsPerformanceToolkit | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.WindowsAppSdkSupport.CSharp | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.Workflow | 17.14.36510.44 | +| Microsoft.VisualStudio.Component.WslDebugging | 17.14.36510.44 | +| Microsoft.VisualStudio.ComponentGroup.ArchitectureTools.Native | 17.14.36510.44 | +| Microsoft.VisualStudio.ComponentGroup.Azure.CloudServices | 17.14.36510.44 | +| Microsoft.VisualStudio.ComponentGroup.Azure.Prerequisites | 17.14.36510.44 | +| Microsoft.VisualStudio.ComponentGroup.Azure.ResourceManager.Tools | 17.14.36510.44 | +| Microsoft.VisualStudio.ComponentGroup.AzureFunctions | 17.14.36510.44 | +| Microsoft.VisualStudio.ComponentGroup.Maui.All | 17.14.36510.44 | +| Microsoft.VisualStudio.ComponentGroup.Maui.Android | 17.14.36510.44 | +| Microsoft.VisualStudio.ComponentGroup.Maui.Blazor | 17.14.36510.44 | +| Microsoft.VisualStudio.ComponentGroup.Maui.iOS | 17.14.36510.44 | +| Microsoft.VisualStudio.ComponentGroup.Maui.MacCatalyst | 17.14.36510.44 | +| Microsoft.VisualStudio.ComponentGroup.Maui.Shared | 17.14.36510.44 | +| Microsoft.VisualStudio.ComponentGroup.Maui.Windows | 17.14.36510.44 | +| Microsoft.VisualStudio.ComponentGroup.MSIX.Packaging | 17.14.36510.44 | +| Microsoft.VisualStudio.ComponentGroup.NativeDesktop.Core | 17.14.36510.44 | +| Microsoft.VisualStudio.ComponentGroup.NativeDesktop.Llvm.Clang | 17.14.36802.14 | +| Microsoft.VisualStudio.ComponentGroup.UWP.NetCoreAndStandard | 17.14.36510.44 | +| Microsoft.VisualStudio.ComponentGroup.UWP.VC.v142 | 17.14.36510.44 | +| Microsoft.VisualStudio.ComponentGroup.VC.Tools.142.x86.x64 | 17.14.36510.44 | +| Microsoft.VisualStudio.ComponentGroup.VisualStudioExtension.Prerequisites | 17.14.36510.44 | +| Microsoft.VisualStudio.ComponentGroup.Web | 17.14.36510.44 | +| Microsoft.VisualStudio.ComponentGroup.Web.CloudTools | 17.14.36614.30 | +| Microsoft.VisualStudio.ComponentGroup.WebToolsExtensions | 17.14.36510.44 | +| Microsoft.VisualStudio.ComponentGroup.WebToolsExtensions.CMake | 17.14.36510.44 | +| Microsoft.VisualStudio.ComponentGroup.WebToolsExtensions.TemplateEngine | 17.14.36510.44 | +| Microsoft.VisualStudio.ComponentGroup.WindowsAppDevelopment.Prerequisites | 17.14.36510.44 | +| Microsoft.VisualStudio.ComponentGroup.WindowsAppSDK.Cs | 17.14.36510.44 | +| Microsoft.VisualStudio.Workload.Azure | 17.14.36518.2 | | Microsoft.VisualStudio.Workload.CoreEditor | 17.14.36015.10 | | Microsoft.VisualStudio.Workload.Data | 17.14.36015.10 | | Microsoft.VisualStudio.Workload.DataScience | 17.14.36015.10 | -| Microsoft.VisualStudio.Workload.ManagedDesktop | 17.14.36015.10 | +| Microsoft.VisualStudio.Workload.ManagedDesktop | 17.14.36518.2 | | Microsoft.VisualStudio.Workload.ManagedGame | 17.14.36301.6 | -| Microsoft.VisualStudio.Workload.NativeCrossPlat | 17.14.36108.8 | -| Microsoft.VisualStudio.Workload.NativeDesktop | 17.14.36015.10 | -| Microsoft.VisualStudio.Workload.NativeGame | 17.14.36015.10 | -| Microsoft.VisualStudio.Workload.NativeMobile | 17.14.36015.10 | -| Microsoft.VisualStudio.Workload.NetCrossPlat | 17.14.36015.10 | -| Microsoft.VisualStudio.Workload.NetWeb | 17.14.36015.10 | -| Microsoft.VisualStudio.Workload.Node | 17.14.36015.10 | +| Microsoft.VisualStudio.Workload.NativeCrossPlat | 17.14.36716.0 | +| Microsoft.VisualStudio.Workload.NativeDesktop | 17.14.36517.7 | +| Microsoft.VisualStudio.Workload.NativeGame | 17.14.36331.10 | +| Microsoft.VisualStudio.Workload.NativeMobile | 17.14.36802.14 | +| Microsoft.VisualStudio.Workload.NetCrossPlat | 17.14.36518.2 | +| Microsoft.VisualStudio.Workload.NetWeb | 17.14.36518.2 | +| Microsoft.VisualStudio.Workload.Node | 17.14.36517.7 | | Microsoft.VisualStudio.Workload.Office | 17.14.36015.10 | | Microsoft.VisualStudio.Workload.Python | 17.14.36015.10 | -| Microsoft.VisualStudio.Workload.Universal | 17.14.36015.10 | +| Microsoft.VisualStudio.Workload.Universal | 17.14.36331.10 | | Microsoft.VisualStudio.Workload.VisualStudioExtension | 17.14.36015.10 | -| runtimes.ios | 9.0.725.31616 | -| runtimes.ios.net8 | 9.0.725.31616 | -| runtimes.maccatalyst | 9.0.725.31616 | -| runtimes.maccatalyst.net8 | 9.0.725.31616 | -| wasm.tools | 9.0.725.31616 | -| ProBITools.MicrosoftAnalysisServicesModelingProjects2022 | 3.0.4 | -| ProBITools.MicrosoftReportProjectsforVisualStudio2022 | 3.0.1 | -| SSIS.MicrosoftDataToolsIntegrationServices | 1.6.2 | +| runtimes.ios | 9.0.1125.51309 | +| runtimes.maccatalyst | 9.0.1125.51309 | +| wasm.tools | 9.0.1125.51309 | +| ProBITools.MicrosoftAnalysisServicesModelingProjects2022 | 4.0.0 | +| ProBITools.MicrosoftReportProjectsforVisualStudio2022 | 4.0.0 | +| SSIS.MicrosoftDataToolsIntegrationServices | 2.1.2 | | VisualStudioClient.MicrosoftVisualStudio2022InstallerProjects | 2.0.1 | -| Windows Driver Kit Visual Studio Extension | 10.0.26100.12 | -| Windows Software Development Kit | 10.1.26100.4188 | +| Windows Driver Kit Visual Studio Extension | 10.0.26100.16 | +| Windows Software Development Kit | 10.1.26100.7175 | | WixToolset.WixToolsetVisualStudio2022Extension | 1.0.0.22 | #### Microsoft Visual C++ @@ -463,22 +465,22 @@ Note: MSYS2 is pre-installed on image but not added to PATH. - 10.0.26100.0 ### .NET Core Tools -- .NET Core SDK: 8.0.118, 8.0.206, 8.0.315, 8.0.412, 9.0.108, 9.0.205, 9.0.302 +- .NET Core SDK: 8.0.122, 8.0.206, 8.0.319, 8.0.416, 9.0.112, 9.0.205, 9.0.308, 10.0.101 - .NET Framework: 4.8, 4.8.1 -- Microsoft.AspNetCore.App: 8.0.6, 8.0.18, 9.0.6, 9.0.7 -- Microsoft.NETCore.App: 8.0.6, 8.0.18, 9.0.6, 9.0.7 -- Microsoft.WindowsDesktop.App: 8.0.6, 8.0.18, 9.0.6, 9.0.7 -- nbgv 3.7.115+d31f50f4d1 +- Microsoft.AspNetCore.App: 8.0.6, 8.0.22, 9.0.6, 9.0.11, 10.0.1 +- Microsoft.NETCore.App: 8.0.6, 8.0.22, 9.0.6, 9.0.11, 10.0.1 +- Microsoft.WindowsDesktop.App: 8.0.6, 8.0.22, 9.0.6, 9.0.11, 10.0.1 +- nbgv 3.9.50+6feeb89450 ### PowerShell Tools -- PowerShell 7.4.11 +- PowerShell 7.4.13 #### Powershell Modules - Az: 12.5.0 -- AWSPowershell: 5.0.9 +- AWSPowershell: 5.0.127 - DockerMsftProvider: 1.0.0.8 - MarkdownPS: 1.10 -- Microsoft.Graph: 2.29.0 +- Microsoft.Graph: 2.34.0 - Pester: 3.4.0, 5.7.1 - PowerShellGet: 1.0.0.1, 2.2.5 - PSScriptAnalyzer: 1.24.0 @@ -487,26 +489,26 @@ Note: MSYS2 is pre-installed on image but not added to PATH. - VSSetup: 2.2.16 ### Android -| Package Name | Version | -| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Android Command Line Tools | 16.0 | -| Android Emulator | 35.6.11 | -| Android SDK Build-tools | 36.0.0
35.0.0 35.0.1
34.0.0 | -| Android SDK Platforms | android-36 (rev 2)
android-35-ext15 (rev 1)
android-35-ext14 (rev 1)
android-35 (rev 2)
android-34-ext8 (rev 1)
android-34-ext12 (rev 1)
android-34-ext11 (rev 1)
android-34-ext10 (rev 1)
android-34 (rev 3) | -| Android SDK Platform-Tools | 36.0.0 | -| Android Support Repository | 47.0.0 | -| CMake | 3.22.1
3.30.5
3.31.5 | -| Google Play services | 49 | -| Google Repository | 58 | -| NDK | 26.3.11579264
27.2.12479018
28.2.13676358 | +| Package Name | Version | +| -------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Android Command Line Tools | 16.0 | +| Android Emulator | 36.3.10 | +| Android SDK Build-tools | 36.0.0 36.1.0
35.0.0 35.0.1
34.0.0 | +| Android SDK Platforms | android-36.1 (rev 1)
android-36-ext19 (rev 1)
android-36-ext18 (rev 1)
android-36 (rev 2)
android-35-ext15 (rev 1)
android-35-ext14 (rev 1)
android-35 (rev 2)
android-34-ext8 (rev 1)
android-34-ext12 (rev 1)
android-34-ext11 (rev 1)
android-34-ext10 (rev 1)
android-34 (rev 3) | +| Android SDK Platform-Tools | 36.0.2 | +| Android Support Repository | 47.0.0 | +| CMake | 3.30.5
3.31.5
4.1.2 | +| Google Play services | 49 | +| Google Repository | 58 | +| NDK | 26.3.11579264
27.3.13750724
28.2.13676358
29.0.14206865 | #### Environment variables | Name | Value | | ----------------------- | ---------------------------------------- | | ANDROID_HOME | C:\Android\android-sdk | -| ANDROID_NDK | C:\Android\android-sdk\ndk\27.2.12479018 | -| ANDROID_NDK_HOME | C:\Android\android-sdk\ndk\27.2.12479018 | -| ANDROID_NDK_LATEST_HOME | C:\Android\android-sdk\ndk\28.2.13676358 | -| ANDROID_NDK_ROOT | C:\Android\android-sdk\ndk\27.2.12479018 | +| ANDROID_NDK | C:\Android\android-sdk\ndk\27.3.13750724 | +| ANDROID_NDK_HOME | C:\Android\android-sdk\ndk\27.3.13750724 | +| ANDROID_NDK_LATEST_HOME | C:\Android\android-sdk\ndk\29.0.14206865 | +| ANDROID_NDK_ROOT | C:\Android\android-sdk\ndk\27.3.13750724 | | ANDROID_SDK_ROOT | C:\Android\android-sdk | diff --git a/images/windows/scripts/build/Install-Mercurial.ps1 b/images/windows/scripts/build/Install-Mercurial.ps1 index 8ab9382cf8..2f9bb15714 100644 --- a/images/windows/scripts/build/Install-Mercurial.ps1 +++ b/images/windows/scripts/build/Install-Mercurial.ps1 @@ -3,7 +3,7 @@ ## Desc: Install Mercurial ################################################################################ -Install-ChocoPackage hg -ArgumentList "--version", "5.0.0" +Install-ChocoPackage hg -ArgumentList "--version", "6.3.1" Add-MachinePathItem "${env:ProgramFiles}\Mercurial\" Update-Environment diff --git a/images/windows/scripts/build/Install-MongoDB.ps1 b/images/windows/scripts/build/Install-MongoDB.ps1 index a02fa5acf0..a45dbc5623 100644 --- a/images/windows/scripts/build/Install-MongoDB.ps1 +++ b/images/windows/scripts/build/Install-MongoDB.ps1 @@ -7,7 +7,7 @@ $toolsetContent = Get-ToolsetContent $toolsetVersion = $toolsetContent.mongodb.version -$getMongoReleases = Invoke-WebRequest -Uri "mongodb.com/docs/manual/release-notes/$toolsetVersion/" -UseBasicParsing +$getMongoReleases = Invoke-WebRequest -Uri "mongodb.com/docs/v$toolsetVersion/release-notes/$toolsetVersion/" -UseBasicParsing $targetReleases = $getMongoReleases.Links.href | Where-Object { $_ -like "#$toolsetVersion*---*" } $minorVersions = @() @@ -39,19 +39,18 @@ $mongodbService.WaitForStatus('Running', '00:01:00') Stop-Service $mongodbService $mongodbService | Set-Service -StartupType Disabled -# Install mongodb shell for mongodb > 5 version -if (Test-IsWin25) { - $mongoshVersion = (Get-GithubReleasesByVersion -Repo "mongodb-js/mongosh" -Version "latest").version +# Install mongodb shell for mongodb +$mongoshVersion = (Get-GithubReleasesByVersion -Repo "mongodb-js/mongosh" -Version "latest").version - $mongoshDownloadUrl = Resolve-GithubReleaseAssetUrl ` - -Repo "mongodb-js/mongosh" ` - -Version $mongoshVersion ` - -UrlMatchPattern "mongosh-*-x64.msi" +$mongoshDownloadUrl = Resolve-GithubReleaseAssetUrl ` + -Repo "mongodb-js/mongosh" ` + -Version $mongoshVersion ` + -UrlMatchPattern "mongosh-*-x64.msi" + +Install-Binary -Type MSI ` + -Url $mongoshDownloadUrl ` + -ExtraInstallArgs @('ALLUSERS=1') ` + -ExpectedSubject 'CN="MongoDB, Inc.", O="MongoDB, Inc.", L=New York, S=New York, C=US' - Install-Binary -Type MSI ` - -Url $mongoshDownloadUrl ` - -ExtraInstallArgs @('ALLUSERS=1') ` - -ExpectedSubject 'CN="MongoDB, Inc.", O="MongoDB, Inc.", L=New York, S=New York, C=US' -} Invoke-PesterTests -TestFile "Databases" -TestName "MongoDB" diff --git a/images/windows/scripts/build/Install-Msys2.ps1 b/images/windows/scripts/build/Install-Msys2.ps1 index 8d970031a5..ae8eca8100 100644 --- a/images/windows/scripts/build/Install-Msys2.ps1 +++ b/images/windows/scripts/build/Install-Msys2.ps1 @@ -22,13 +22,6 @@ function Install-Msys2 { Write-Host "Download msys2 installer $installerName" $installerPath = Invoke-DownloadWithRetry $downloadUri - #region Supply chain security - MSYS2 - $externalHash = Get-ChecksumFromUrl -Type "SHA256" ` - -Url ($downloadUri -replace $installerName, "msys2-checksums.txt") ` - -FileName $installerName - Test-FileChecksum $installerPath -ExpectedSHA256Sum $externalHash - #endregion - Write-Host "Starting msys2 installation" & $installerPath in --confirm-command --accept-messages --root C:/msys64 if ($LastExitCode -ne 0) { diff --git a/images/windows/scripts/build/Install-OpenSSL.ps1 b/images/windows/scripts/build/Install-OpenSSL.ps1 index 6b60acf8de..3717ddc545 100644 --- a/images/windows/scripts/build/Install-OpenSSL.ps1 +++ b/images/windows/scripts/build/Install-OpenSSL.ps1 @@ -22,7 +22,7 @@ $installerHash = $null foreach ($key in $installerNames) { $installer = $installersAvailable.$key - if (($installer.light -eq $light) -and ($installer.arch -eq $arch) -and ($installer.bits -eq $bits) -and ($installer.installer -eq $installerType) -and ($installer.basever -eq $version)) { + if (($installer.light -eq $light) -and ($installer.arch -eq $arch) -and ($installer.bits -eq $bits) -and ($installer.installer -eq $installerType) -and ($installer.basever -like $version)) { $installerUrl = $installer.url $installerHash = $installer.sha512 } @@ -34,7 +34,7 @@ if ($null -eq $installerUrl) { Install-Binary ` -Url $installerUrl ` - -InstallArgs @('/silent', '/sp-', '/suppressmsgboxes', "/DIR=`"$installDir`"") ` + -InstallArgs @('/silent', '/sp-', '/suppressmsgboxes','/tasks="copytobin"', "/DIR=`"$installDir`"") ` -ExpectedSHA512Sum $installerHash # Update PATH diff --git a/images/windows/scripts/build/Install-PostgreSQL.ps1 b/images/windows/scripts/build/Install-PostgreSQL.ps1 index aff382ed77..bd17372820 100644 --- a/images/windows/scripts/build/Install-PostgreSQL.ps1 +++ b/images/windows/scripts/build/Install-PostgreSQL.ps1 @@ -5,7 +5,10 @@ # Define user and password for PostgreSQL database $pgUser = "postgres" -$pgPwd = "root" +$pgPwd = "root" + +# Save current value of ErrorActionPreference and set it to Stop +$errorActionOldValue = $ErrorActionPreference # Prepare environment variable for validation [Environment]::SetEnvironmentVariable("PGUSER", $pgUser, "Machine") @@ -35,7 +38,6 @@ if ($null -ne ($toolsetVersion | Select-String -Pattern '\d+\.\d+\.\d+')) { $targetMinorVersions = ($minorVersions | Sort-Object)[-1] # In order to get rid of error messages (we know we will have them), force ErrorAction to SilentlyContinue - $errorActionOldValue = $ErrorActionPreference $ErrorActionPreference = 'SilentlyContinue' # Install latest PostgreSQL @@ -58,10 +60,27 @@ if ($null -ne ($toolsetVersion | Select-String -Pattern '\d+\.\d+\.\d+')) { } while (!$response) } - # Return the previous value of ErrorAction and invoke Install-Binary function $ErrorActionPreference = $errorActionOldValue -$installerArgs = @("--install_runtimes 0", "--superpassword root", "--enable_acledit 1", "--unattendedmodeui none", "--mode unattended") + +# Define new data directory for PostgreSQL and create it +if ($installerUrl -match 'postgresql-(\d+)') { + $pgMajorVersion = $matches[1] +} +$pgData = "C:\PostgreSQL\$pgMajorVersion\data" +if (-Not (Test-Path -Path $pgData)) { + New-Item -ItemType Directory -Path $pgData | Out-Null +} + +# Define silent install arguments for PostgreSQL +$installerArgs = @( + "--install_runtimes 0", + "--superpassword root", + "--enable_acledit 1", + "--unattendedmodeui none", + "--mode unattended", + "--datadir `"$pgData`"" +) Install-Binary ` -Url $installerUrl ` @@ -74,8 +93,7 @@ $pgPath = (Get-CimInstance Win32_Service -Filter "Name LIKE 'postgresql-%'").Pat # Parse output of command above to obtain pure path $pgBin = Split-Path -Path $pgPath.split('"')[1] -$pgRoot = Split-Path -Path $pgPath.split('"')[5] -$pgData = Join-Path $pgRoot "data" +$pgRoot = Split-Path $pgBin -Parent # Validate PostgreSQL installation $pgReadyPath = Join-Path $pgBin "pg_isready.exe" diff --git a/images/windows/scripts/build/Install-PowershellAzModules.ps1 b/images/windows/scripts/build/Install-PowershellAzModules.ps1 index 2143fe111a..71864c2872 100644 --- a/images/windows/scripts/build/Install-PowershellAzModules.ps1 +++ b/images/windows/scripts/build/Install-PowershellAzModules.ps1 @@ -26,20 +26,6 @@ foreach ($module in $modules) { $psModuleMachinePath += "$modulePath;" Save-Module -Path $modulePath -Name $moduleName -RequiredVersion $version -Force -ErrorAction Stop } - - foreach ($version in $module.zip_versions) { - $modulePath = Join-Path -Path $installPSModulePath -ChildPath "${moduleName}_${version}" - Save-Module -Path $modulePath -Name $moduleName -RequiredVersion $version -Force -ErrorAction Stop - Compress-Archive -Path $modulePath -DestinationPath "${modulePath}.zip" - Remove-Item $modulePath -Recurse -Force - } - # Append default tool version to machine path - if ($null -ne $module.default) { - $defaultVersion = $module.default - - Write-Host "Use ${moduleName} ${defaultVersion} as default version..." - $psModuleMachinePath += "${installPSModulePath}\${moduleName}_${defaultVersion};" - } } # Add modules to the PSModulePath diff --git a/images/windows/scripts/build/Install-Runner.ps1 b/images/windows/scripts/build/Install-Runner.ps1 deleted file mode 100644 index dc7a6f7f3d..0000000000 --- a/images/windows/scripts/build/Install-Runner.ps1 +++ /dev/null @@ -1,16 +0,0 @@ -################################################################################ -## File: Install-Runner.ps1 -## Desc: Install Runner for GitHub Actions -## Supply chain security: none -################################################################################ - -Write-Host "Download latest Runner for GitHub Actions" -$downloadUrl = Resolve-GithubReleaseAssetUrl ` - -Repo "actions/runner" ` - -Version "latest" ` - -UrlMatchPattern "actions-runner-win-x64-*[0-9.].zip" -$fileName = Split-Path $downloadUrl -Leaf -New-Item -Path "C:\ProgramData\runner" -ItemType Directory -Invoke-DownloadWithRetry -Url $downloadUrl -Path "C:\ProgramData\runner\$fileName" - -Invoke-PesterTests -TestFile "RunnerCache" diff --git a/images/windows/scripts/build/Install-SQLOLEDBDriver.ps1 b/images/windows/scripts/build/Install-SQLOLEDBDriver.ps1 index fb5faf261c..daeee992d4 100644 --- a/images/windows/scripts/build/Install-SQLOLEDBDriver.ps1 +++ b/images/windows/scripts/build/Install-SQLOLEDBDriver.ps1 @@ -3,7 +3,14 @@ ## Desc: Install OLE DB Driver for SQL Server ################################################################################ +# Install OLE DB Driver 18 Install-Binary -Type MSI ` -Url "https://go.microsoft.com/fwlink/?linkid=2242656" ` -ExtraInstallArgs @("ADDLOCAL=ALL", "IACCEPTMSOLEDBSQLLICENSETERMS=YES") ` -ExpectedSubject $(Get-MicrosoftPublisher) + +# Install OLE DB Driver 19 +Install-Binary -Type MSI ` + -Url "https://go.microsoft.com/fwlink/?linkid=2318101" ` + -ExtraInstallArgs @("ADDLOCAL=ALL", "IACCEPTMSOLEDBSQLLICENSETERMS=YES") ` + -ExpectedSubject $(Get-MicrosoftPublisher) diff --git a/images/windows/scripts/build/Install-Toolset.ps1 b/images/windows/scripts/build/Install-Toolset.ps1 index c9373b24ca..2e2631755b 100644 --- a/images/windows/scripts/build/Install-Toolset.ps1 +++ b/images/windows/scripts/build/Install-Toolset.ps1 @@ -6,9 +6,9 @@ [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 -bor [Net.SecurityProtocolType]::Tls13 -Function Install-Asset { +function Install-Asset { param( - [Parameter(Mandatory=$true)] + [Parameter(Mandatory = $true)] [object] $ReleaseAsset ) @@ -27,6 +27,48 @@ Function Install-Asset { Write-Host "Invoke installation script..." Push-Location -Path $assetFolderPath + + # Correct verbose logging in Python v12 + if ($releaseAssetName -like "*python*win32*") { + Write-Host "Correcting target script for $releaseAssetName" + $scriptPath = "setup.ps1" + $lines = Get-Content $scriptPath + $block = @( + '# print out all files in $PythonArchPath', + 'Write-Host "Files in $PythonArchPath"', + '$files = Get-ChildItem -Path $PythonArchPath -File -Recurse', + 'Write-Output $files' + ) + + # Determine line ending style of $scriptPath + $lineEnding = "`n" # Unix style + $rawContent = Get-Content $scriptPath -Raw + if ($rawContent -match "`r`n") { + $lineEnding = "`r`n" # Windows style + } + + $i = 0 + $output = @() + while ($i -lt $lines.Count) { + if ( + $i + 3 -lt $lines.Count -and + $lines[$i] -eq $block[0] -and + $lines[$i + 1] -eq $block[1] -and + $lines[$i + 2] -eq $block[2] -and + $lines[$i + 3] -eq $block[3] + ) { + $i += 4 + continue + } + $output += $lines[$i] + $i++ + } + Set-Content -Path $scriptPath -Value ($output -join $lineEnding) + } else { + Write-Host "No correction needed for $releaseAssetName" + } + # End correction + Invoke-Expression .\setup.ps1 Pop-Location } @@ -45,7 +87,7 @@ foreach ($tool in $tools) { # Get github release asset for each version foreach ($toolVersion in $tool.versions) { $asset = $assets ` - | Where-Object version -like $toolVersion ` + | Where-Object version -Like $toolVersion ` | Select-Object -ExpandProperty files ` | Where-Object { ($_.platform -eq $tool.platform) -and ($_.arch -eq $tool.arch) -and ($_.toolset -eq $tool.toolset) } ` | Select-Object -First 1 diff --git a/images/windows/scripts/docs-gen/Generate-SoftwareReport.ps1 b/images/windows/scripts/docs-gen/Generate-SoftwareReport.ps1 index 93b38fabd6..3dc19960f5 100644 --- a/images/windows/scripts/docs-gen/Generate-SoftwareReport.ps1 +++ b/images/windows/scripts/docs-gen/Generate-SoftwareReport.ps1 @@ -83,9 +83,7 @@ if (Test-IsWin19) { $tools.AddToolVersion("Google Cloud CLI", $(Get-GoogleCloudCLIVersion)) } $tools.AddToolVersion("ImageMagick", $(Get-ImageMagickVersion)) -if (-not (Test-IsWin25)) { - $tools.AddToolVersion("InnoSetup", $(Get-InnoSetupVersion)) -} +$tools.AddToolVersion("InnoSetup", $(Get-InnoSetupVersion)) $tools.AddToolVersion("jq", $(Get-JQVersion)) $tools.AddToolVersion("Kind", $(Get-KindVersion)) $tools.AddToolVersion("Kubectl", $(Get-KubectlVersion)) @@ -193,11 +191,11 @@ $databaseTools = $installedSoftware.AddHeader("Database tools") $databaseTools.AddToolVersion("Azure CosmosDb Emulator", $(Get-AzCosmosDBEmulatorVersion)) $databaseTools.AddToolVersion("DacFx", $(Get-DacFxVersion)) $databaseTools.AddToolVersion("MySQL", $(Get-MySQLVersion)) -$databaseTools.AddToolVersion("SQL OLEDB Driver", $(Get-SQLOLEDBDriverVersion)) +$databaseTools.AddToolVersion("SQL OLEDB Driver 18", $(Get-SQLOLEDBDriver18Version)) +$databaseTools.AddToolVersion("SQL OLEDB Driver 19", $(Get-SQLOLEDBDriver19Version)) $databaseTools.AddToolVersion("SQLPS", $(Get-SQLPSVersion)) -if (Test-IsWin25) { - $databaseTools.AddToolVersion("MongoDB Shell (mongosh)", $(Get-MongoshVersion)) -} +$databaseTools.AddToolVersion("MongoDB Shell (mongosh)", $(Get-MongoshVersion)) + # Web Servers $installedSoftware.AddHeader("Web Servers").AddTable($(Build-WebServersSection)) diff --git a/images/windows/scripts/docs-gen/SoftwareReport.Common.psm1 b/images/windows/scripts/docs-gen/SoftwareReport.Common.psm1 index d864400948..48cb75759c 100644 --- a/images/windows/scripts/docs-gen/SoftwareReport.Common.psm1 +++ b/images/windows/scripts/docs-gen/SoftwareReport.Common.psm1 @@ -213,7 +213,7 @@ function Get-DotnetFrameworkVersions { function Get-PowerShellAzureModules { [Array] $result = @() - $defaultAzureModuleVersion = "2.1.0" + $defaultAzureModuleVersion = "12.5.0" [Array] $azInstalledModules = Get-ChildItem -Path "C:\Modules\az_*" -Directory | ForEach-Object { $_.Name.Split("_")[1] } if ($azInstalledModules.Count -gt 0) { @@ -230,21 +230,6 @@ function Get-PowerShellAzureModules { $result += [ToolVersionsListNode]::new("AzureRM", $($azurermInstalledModules), '^\d+\.\d+', "Inline") } - [Array] $azCachedModules = Get-ChildItem -Path "C:\Modules\az_*.zip" -File | ForEach-Object { $_.Name.Split("_")[1] } - if ($azCachedModules.Count -gt 0) { - $result += [ToolVersionsListNode]::new("Az (Cached)", $($azCachedModules), '^\d+\.\d+', "Inline") - } - - [Array] $azureCachedModules = Get-ChildItem -Path "C:\Modules\azure_*.zip" -File | ForEach-Object { $_.Name.Split("_")[1] } - if ($azureCachedModules.Count -gt 0) { - $result += [ToolVersionsListNode]::new("Azure (Cached)", $($azureCachedModules), '^\d+\.\d+', "Inline") - } - - [Array] $azurermCachedModules = Get-ChildItem -Path "C:\Modules\azurerm_*.zip" -File | ForEach-Object { $_.Name.Split("_")[1] } - if ($azurermCachedModules.Count -gt 0) { - $result += [ToolVersionsListNode]::new("AzureRM (Cached)", $($azurermCachedModules), '^\d+\.\d+', "Inline") - } - return $result } diff --git a/images/windows/scripts/docs-gen/SoftwareReport.Databases.psm1 b/images/windows/scripts/docs-gen/SoftwareReport.Databases.psm1 index a831c92be4..ccaf754f51 100644 --- a/images/windows/scripts/docs-gen/SoftwareReport.Databases.psm1 +++ b/images/windows/scripts/docs-gen/SoftwareReport.Databases.psm1 @@ -21,11 +21,7 @@ function Get-PostgreSQLTable function Get-MongoDBTable { $name = "MongoDB" - if (Test-IsWin25) { - $command = "mongod" - } else { - $command = "mongo" - } + $command = "mongod" $mongoService = Get-Service -Name $name $mongoVersion = (Get-Command -Name $command).Version.ToString() return [PSCustomObject]@{ diff --git a/images/windows/scripts/docs-gen/SoftwareReport.Tools.psm1 b/images/windows/scripts/docs-gen/SoftwareReport.Tools.psm1 index 7bb2ec9d58..532dd52eb1 100644 --- a/images/windows/scripts/docs-gen/SoftwareReport.Tools.psm1 +++ b/images/windows/scripts/docs-gen/SoftwareReport.Tools.psm1 @@ -121,11 +121,16 @@ function Get-MySQLVersion { return $mysqlVersion } -function Get-SQLOLEDBDriverVersion { +function Get-SQLOLEDBDriver18Version { $SQLOLEDBDriverVersion = (Get-ItemProperty -Path 'Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSOLEDBSQL' InstalledVersion).InstalledVersion return $SQLOLEDBDriverVersion } +function Get-SQLOLEDBDriver19Version { + $SQLOLEDBDriverVersion = (Get-ItemProperty -Path 'Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSOLEDBSQL19' InstalledVersion).InstalledVersion + return $SQLOLEDBDriverVersion +} + function Get-MercurialVersion { ($(hg --version) | Out-String) -match "version (?\d+\.\d+\.?\d*)" | Out-Null $mercurialVersion = $Matches.Version diff --git a/images/windows/scripts/helpers/VisualStudioHelpers.ps1 b/images/windows/scripts/helpers/VisualStudioHelpers.ps1 index 7994e32518..baccad4c6e 100644 --- a/images/windows/scripts/helpers/VisualStudioHelpers.ps1 +++ b/images/windows/scripts/helpers/VisualStudioHelpers.ps1 @@ -206,11 +206,11 @@ function Get-VsixInfoFromMarketplace { # ProBITools.MicrosoftReportProjectsforVisualStudio2022 has different URL # https://github.com/actions/runner-images/issues/5340 "ProBITools.MicrosoftReportProjectsforVisualStudio2022" { - $assetUri = "https://download.microsoft.com/download/b/b/5/bb57be7e-ae72-4fc0-b528-d0ec224997bd" + $assetUri = "https://download.microsoft.com/download/1fd275d8-5163-476b-910b-e2f678b3fdbc" $fileName = "Microsoft.DataTools.ReportingServices.vsix" } "ProBITools.MicrosoftAnalysisServicesModelingProjects2022" { - $assetUri = "https://download.microsoft.com/download/c/8/9/c896a7f2-d0fd-45ac-90e6-ff61f67523cb" + $assetUri = "https://download.microsoft.com/download/7c91cb5c-1e9c-4df7-a053-d2852e22c658" $fileName = "Microsoft.DataTools.AnalysisServices.vsix" } diff --git a/images/windows/scripts/tests/ChocoPackages.Tests.ps1 b/images/windows/scripts/tests/ChocoPackages.Tests.ps1 index 77b6089ca6..4e0bb3ccb9 100644 --- a/images/windows/scripts/tests/ChocoPackages.Tests.ps1 +++ b/images/windows/scripts/tests/ChocoPackages.Tests.ps1 @@ -28,7 +28,7 @@ Describe "GitVersion" -Skip:(-not (Test-IsWin19)) { } } -Describe "InnoSetup" -Skip:(Test-IsWin25) { +Describe "InnoSetup" { It "InnoSetup" { (Get-Command -Name iscc).CommandType | Should -BeExactly "Application" } diff --git a/images/windows/scripts/tests/Databases.Tests.ps1 b/images/windows/scripts/tests/Databases.Tests.ps1 index de30a2616f..03d8921084 100644 --- a/images/windows/scripts/tests/Databases.Tests.ps1 +++ b/images/windows/scripts/tests/Databases.Tests.ps1 @@ -1,11 +1,7 @@ Describe "MongoDB" { Context "Version" { It "" -TestCases @( - if (Test-IsWin25) { - @{ ToolName = "mongos" } - } else { - @{ ToolName = "mongo" } - } + @{ ToolName = "mongos" } @{ ToolName = "mongod" } ) { $toolsetVersion = (Get-ToolsetContent).mongodb.version @@ -30,7 +26,7 @@ Describe "MongoDB" { } } - Context "Shell" -Skip:(-not (Test-IsWin25)) { + Context "Shell" { It "mongosh" { "mongosh --version" | Should -ReturnZeroExitCode } diff --git a/images/windows/scripts/tests/PowerShellAzModules.Tests.ps1 b/images/windows/scripts/tests/PowerShellAzModules.Tests.ps1 index 0fea778f39..920ed4feeb 100644 --- a/images/windows/scripts/tests/PowerShellAzModules.Tests.ps1 +++ b/images/windows/scripts/tests/PowerShellAzModules.Tests.ps1 @@ -27,14 +27,6 @@ Describe "AzureModules" { $moduleVersion | Should -Match $expectedVersion } } - - if ($module.default) { - $moduleInfo = @{ moduleName = $moduleName; moduleDefault = $module.default } - It " set as default" -TestCases $moduleInfo { - $moduleVersions = Get-Module -ListAvailable -Name $moduleName | ForEach-Object { $_.Version.ToString() } - $moduleVersions | Should -Contain $moduleDefault - } - } } } } diff --git a/images/windows/scripts/tests/RunnerCache.tests.ps1 b/images/windows/scripts/tests/RunnerCache.tests.ps1 deleted file mode 100644 index 8c932fb922..0000000000 --- a/images/windows/scripts/tests/RunnerCache.tests.ps1 +++ /dev/null @@ -1,7 +0,0 @@ -Describe "RunnerCache" { - Context "runner cache directory not empty" { - It "C:\ProgramData\runner" { - (Get-ChildItem -Path "C:\ProgramData\runner\*.zip" -Recurse).Count | Should -BeGreaterThan 0 - } - } -} diff --git a/images/windows/scripts/tests/Tools.Tests.ps1 b/images/windows/scripts/tests/Tools.Tests.ps1 index 652d3aa1f4..510915cf5e 100644 --- a/images/windows/scripts/tests/Tools.Tests.ps1 +++ b/images/windows/scripts/tests/Tools.Tests.ps1 @@ -213,9 +213,13 @@ Describe "Kotlin" { } Describe "SQL OLEDB Driver" { - It "SQL OLEDB Driver" { + It "SQL OLEDB Driver 18" { "HKLM:\SOFTWARE\Microsoft\MSOLEDBSQL" | Should -Exist } + + It "SQL OLEDB Driver 19" { + "HKLM:\SOFTWARE\Microsoft\MSOLEDBSQL19" | Should -Exist + } } Describe "OpenSSL" { @@ -231,4 +235,9 @@ Describe "OpenSSL" { It "OpenSSL Full package" { Join-Path ${env:ProgramFiles} 'OpenSSL\include' | Should -Exist } + + It "OpenSSL DLLs not in System32" { + Get-ChildItem -Path "$env:SystemRoot\System32" -Filter "libcrypto-*.dll" -File -ErrorAction SilentlyContinue | Should -BeNullOrEmpty + Get-ChildItem -Path "$env:SystemRoot\System32" -Filter "libssl-*.dll" -File -ErrorAction SilentlyContinue | Should -BeNullOrEmpty + } } diff --git a/images/windows/scripts/tests/WindowsFeatures.Tests.ps1 b/images/windows/scripts/tests/WindowsFeatures.Tests.ps1 index 528ae762b7..9b8134a326 100644 --- a/images/windows/scripts/tests/WindowsFeatures.Tests.ps1 +++ b/images/windows/scripts/tests/WindowsFeatures.Tests.ps1 @@ -20,11 +20,12 @@ Describe "WindowsFeatures" { } Describe "DiskSpace" { - It "The image has enough disk space"{ - $availableSpaceMB = [math]::Round((Get-PSDrive -Name C).Free / 1MB) - $minimumFreeSpaceMB = 18 * 1024 - - $availableSpaceMB | Should -BeGreaterThan $minimumFreeSpaceMB + It "The image has enough disk space" { + $diskInfo = Get-PSDrive -Name C + $totalSpaceGB = [math]::Floor(($diskInfo.Used + $diskInfo.Free) / 1GB) + $freeSpaceGB = [math]::Floor($diskInfo.Free / 1GB) + Write-Host " [i] Disk size: ${totalSpaceGB} GB; Free space: ${freeSpaceGB} GB" + $freeSpaceGB | Should -BeGreaterOrEqual 18 } } diff --git a/images/windows/templates/build.windows-2019.pkr.hcl b/images/windows/templates/build.windows-2019.pkr.hcl index 8de0380e51..9b41e560d5 100644 --- a/images/windows/templates/build.windows-2019.pkr.hcl +++ b/images/windows/templates/build.windows-2019.pkr.hcl @@ -101,7 +101,6 @@ build { "${path.root}/../scripts/build/Install-DockerCompose.ps1", "${path.root}/../scripts/build/Install-PowershellCore.ps1", "${path.root}/../scripts/build/Install-WebPlatformInstaller.ps1", - "${path.root}/../scripts/build/Install-Runner.ps1", "${path.root}/../scripts/build/Install-TortoiseSvn.ps1" ] } diff --git a/images/windows/templates/build.windows-2022.pkr.hcl b/images/windows/templates/build.windows-2022.pkr.hcl index 95d08ec01a..7bcd66cc32 100644 --- a/images/windows/templates/build.windows-2022.pkr.hcl +++ b/images/windows/templates/build.windows-2022.pkr.hcl @@ -91,7 +91,6 @@ build { "${path.root}/../scripts/build/Install-DockerCompose.ps1", "${path.root}/../scripts/build/Install-PowershellCore.ps1", "${path.root}/../scripts/build/Install-WebPlatformInstaller.ps1", - "${path.root}/../scripts/build/Install-Runner.ps1", "${path.root}/../scripts/build/Install-TortoiseSvn.ps1" ] } diff --git a/images/windows/templates/build.windows-2025.pkr.hcl b/images/windows/templates/build.windows-2025.pkr.hcl index a84729d48a..97d7c5e6ea 100644 --- a/images/windows/templates/build.windows-2025.pkr.hcl +++ b/images/windows/templates/build.windows-2025.pkr.hcl @@ -91,8 +91,7 @@ provisioner "powershell" { "${path.root}/../scripts/build/Install-DockerWinCred.ps1", "${path.root}/../scripts/build/Install-DockerCompose.ps1", "${path.root}/../scripts/build/Install-PowershellCore.ps1", - "${path.root}/../scripts/build/Install-WebPlatformInstaller.ps1", - "${path.root}/../scripts/build/Install-Runner.ps1" + "${path.root}/../scripts/build/Install-WebPlatformInstaller.ps1" ] } diff --git a/images/windows/templates/locals.windows.pkr.hcl b/images/windows/templates/locals.windows.pkr.hcl index d03ab45244..976b4ffb05 100644 --- a/images/windows/templates/locals.windows.pkr.hcl +++ b/images/windows/templates/locals.windows.pkr.hcl @@ -1,24 +1,19 @@ locals { image_properties_map = { "win19" = { - publisher = "MicrosoftWindowsServer" - offer = "WindowsServer" - sku = "2019-Datacenter" - os_disk_size_gb = coalesce(var.os_disk_size_gb, 256) + source_image_marketplace_sku = "MicrosoftWindowsServer:WindowsServer:2019-Datacenter" + os_disk_size_gb = 256 }, "win22" = { - publisher = "MicrosoftWindowsServer" - offer = "WindowsServer" - sku = "2022-Datacenter" - os_disk_size_gb = coalesce(var.os_disk_size_gb, 256) + source_image_marketplace_sku = "MicrosoftWindowsServer:WindowsServer:2022-Datacenter" + os_disk_size_gb = 256 }, "win25" = { - publisher = "MicrosoftWindowsServer" - offer = "WindowsServer" - sku = "2025-Datacenter" - os_disk_size_gb = coalesce(var.os_disk_size_gb, 150) + source_image_marketplace_sku = "MicrosoftWindowsServer:WindowsServer:2025-Datacenter" + os_disk_size_gb = 150 } } - image_properties = local.image_properties_map[var.image_os] + source_image_marketplace_sku = local.image_properties_map[var.image_os].source_image_marketplace_sku + os_disk_size_gb = coalesce(var.os_disk_size_gb, local.image_properties_map[var.image_os].os_disk_size_gb) } diff --git a/images/windows/templates/source.windows.pkr.hcl b/images/windows/templates/source.windows.pkr.hcl index 36aac4035f..84220f4ab8 100644 --- a/images/windows/templates/source.windows.pkr.hcl +++ b/images/windows/templates/source.windows.pkr.hcl @@ -14,15 +14,15 @@ source "azure-arm" "image" { build_key_vault_secret_name = var.build_key_vault_secret_name build_resource_group_name = var.build_resource_group_name communicator = "winrm" - image_offer = local.image_properties.offer - image_publisher = local.image_properties.publisher - image_sku = local.image_properties.sku + image_publisher = split(":", local.source_image_marketplace_sku)[0] + image_offer = split(":", local.source_image_marketplace_sku)[1] + image_sku = split(":", local.source_image_marketplace_sku)[2] image_version = var.source_image_version location = var.location managed_image_name = var.managed_image_name managed_image_resource_group_name = var.managed_image_resource_group_name managed_image_storage_account_type = var.managed_image_storage_account_type - os_disk_size_gb = local.image_properties.os_disk_size_gb + os_disk_size_gb = local.os_disk_size_gb os_type = var.image_os_type private_virtual_network_with_public_ip = var.private_virtual_network_with_public_ip temp_resource_group_name = var.temp_resource_group_name @@ -43,6 +43,7 @@ source "azure-arm" "image" { image_version = var.gallery_image_version storage_account_type = var.gallery_storage_account_type } + shared_gallery_image_version_end_of_life_date = var.shared_gallery_image_version_end_of_life_date dynamic "azure_tag" { for_each = var.azure_tags diff --git a/images/windows/templates/variable.windows.pkr.hcl b/images/windows/templates/variable.windows.pkr.hcl index 1605ce4a57..96c8f51f1c 100644 --- a/images/windows/templates/variable.windows.pkr.hcl +++ b/images/windows/templates/variable.windows.pkr.hcl @@ -78,6 +78,10 @@ variable "gallery_storage_account_type" { type = string default = "${env("GALLERY_STORAGE_ACCOUNT_TYPE")}" } +variable "shared_gallery_image_version_end_of_life_date" { + type = string + default = "${env("SHARED_GALLERY_IMAGE_VERSION_END_OF_LIFE_DATE")}" +} variable "image_os_type" { type = string default = "Windows" diff --git a/images/windows/toolsets/toolset-2019.json b/images/windows/toolsets/toolset-2019.json index 8afb3f8d74..581eb94a48 100644 --- a/images/windows/toolsets/toolset-2019.json +++ b/images/windows/toolsets/toolset-2019.json @@ -21,7 +21,8 @@ "3.10.*", "3.11.*", "3.12.*", - "3.13.*" + "3.13.*", + "3.14.*" ], "default": "3.9.*" }, @@ -70,7 +71,8 @@ "versions": [ "1.22.*", "1.23.*", - "1.24.*" + "1.24.*", + "1.25.*" ], "default": "1.24.*" } @@ -92,8 +94,6 @@ "name": "az", "versions": [ "12.5.0" - ], - "zip_versions": [ ] } ], @@ -282,13 +282,7 @@ "Microsoft.VisualStudio.Component.VC.v141.MFC.ARM64.Spectre", "Microsoft.VisualStudio.Component.VC.v141.MFC.Spectre", "Microsoft.VisualStudio.Component.VC.14.25.x86.x64", - "Microsoft.VisualStudio.Component.Windows10SDK.16299", - "Microsoft.VisualStudio.Component.Windows10SDK.17134", - "Microsoft.VisualStudio.Component.Windows10SDK.17763", - "Microsoft.VisualStudio.Component.Windows10SDK.18362", "Microsoft.VisualStudio.Component.Windows10SDK.19041", - "Microsoft.VisualStudio.Component.Windows10SDK.20348", - "Microsoft.VisualStudio.Component.Windows11SDK.22000", "Microsoft.VisualStudio.Component.WinXP", "Microsoft.VisualStudio.Component.Workflow", "Microsoft.VisualStudio.ComponentGroup.Azure.CloudServices", @@ -318,12 +312,12 @@ "Component.MDD.Linux.GCC.arm" ], "vsix": [ - "ProBITools.MicrosoftAnalysisServicesModelingProjects", - "SSIS.SqlServerIntegrationServicesProjects", "ProBITools.MicrosoftReportProjectsforVisualStudio", "VisualStudioClient.MicrosoftVisualStudio2017InstallerProjects", "ms-biztalk.BizTalk", - "WixToolset.WixToolsetVisualStudio2019Extension" + "WixToolset.WixToolsetVisualStudio2019Extension", + "ProBITools.MicrosoftAnalysisServicesModelingProjects", + "SSIS.SqlServerIntegrationServicesProjects" ] }, "docker": { @@ -442,17 +436,17 @@ "kotlin": { "version": "2.1.10", "pinnedDetails": { - "link": "https://youtrack.jetbrains.com/issues/KT?preview=KT-76169", - "reason": "this was pinned due to a new version 2.1.20 released has an issue with kotlinc-js -version` and kapt -version", - "review-at": "2025-03-31" + "link": "https://github.com/actions/runner-images/issues/12045", + "reason": "Image is deprecated and will be removed soon", + "review-at": "2027-01-01" } }, "openssl": { "version": "1.1.1", "pinnedDetails": { - "link": "https://github.com/somelink", - "reason": "this was pinned due to a downstream issue with the installer", - "review-at": "2025-01-30" + "link": "https://github.com/actions/runner-images/issues/12045", + "reason": "Image is deprecated and will be removed soon", + "review-at": "2027-01-01" } }, "pwsh": { diff --git a/images/windows/toolsets/toolset-2022.json b/images/windows/toolsets/toolset-2022.json index 86af45a31f..451e64252d 100644 --- a/images/windows/toolsets/toolset-2022.json +++ b/images/windows/toolsets/toolset-2022.json @@ -5,9 +5,9 @@ "arch": "x64", "platform" : "win32", "versions": [ - "3.1", "3.2", - "3.3" + "3.3", + "3.4" ], "default": "3.3" }, @@ -17,13 +17,13 @@ "arch": "x64", "platform" : "win32", "versions": [ - "3.9.*", "3.10.*", "3.11.*", "3.12.*", - "3.13.*" + "3.13.*", + "3.14.*" ], - "default": "3.9.*" + "default": "3.12.*" }, { "name": "Python", @@ -31,7 +31,6 @@ "arch": "x86", "platform" : "win32", "versions": [ - "3.9.*", "3.10.*", "3.11.*", "3.12.*", @@ -56,9 +55,9 @@ "arch": "x64", "platform" : "win32", "versions": [ - "18.*", "20.*", - "22.*" + "22.*", + "24.*" ] }, { @@ -69,7 +68,8 @@ "versions": [ "1.22.*", "1.23.*", - "1.24.*" + "1.24.*", + "1.25.*" ], "default": "1.24.*" } @@ -91,21 +91,18 @@ "name": "az", "versions": [ "12.5.0" - ], - "zip_versions": [ - ] } ], "java": { "default": "8", - "versions": [ "8", "11", "17", "21"] + "versions": [ "8", "11", "17", "21", "25"] }, "android": { "commandline_tools_url": "https://dl.google.com/android/repository/commandlinetools-win-9123335_latest.zip", "hash": "8A90E6A3DEB2FA13229B2E335EFD07687DCC8A55A3C544DA9F40B41404993E7D", - "platform_min_version": "31", - "build_tools_min_version": "31.0.0", + "platform_min_version": "34", + "build_tools_min_version": "34.0.0", "extras": [ "android;m2repository", "google;m2repository", @@ -113,26 +110,20 @@ ], "addons": [], "additional_tools": [ - "cmake;3.18.1", "cmake;3.22.1", - "cmake;3.31.5" + "cmake;3.31.5", + "cmake;4.1.2" ], "ndk": { "default": "27", "versions": [ - "26", "27", "28" + "27", "28", "29" ] } }, "mingw": { - "version": "12.2.0", - "runtime": "ucrt", - "pinnedDetails": { - "link": "https://github.com/actions/runner-images-internal/pull/6702", - "reason": "Meaningful reason must be added at next update.", - "review-at": "2025-06-01", - "type": "preexisting-pinned-version-without-reason" - } + "version": "14.*", + "runtime": "ucrt" }, "MsysPackages": { "msys2": [], @@ -213,8 +204,6 @@ "Microsoft.VisualStudio.Component.VC.ATL.ARM64.Spectre", "Microsoft.VisualStudio.Component.VC.ASAN", "Microsoft.VisualStudio.Component.Windows10SDK.19041", - "Microsoft.VisualStudio.Component.Windows10SDK.20348", - "Microsoft.VisualStudio.Component.Windows11SDK.22000", "Microsoft.VisualStudio.Component.Windows11SDK.22621", "Microsoft.VisualStudio.Component.Windows11SDK.26100", "Microsoft.VisualStudio.Component.Workflow", @@ -296,9 +285,9 @@ }, "dotnet": { "versions": [ - "6.0", "8.0", - "9.0" + "9.0", + "10.0" ], "tools": [ { "name": "nbgv", "test": "nbgv --version", "getversion": "nbgv --version" } @@ -345,7 +334,7 @@ "version": "8.0" }, "mongodb": { - "version": "5.0" + "version": "7.0" }, "nsis": { "version": "3.10" @@ -363,13 +352,7 @@ "version": "latest" }, "openssl": { - "version": "1.1.1", - "pinnedDetails": { - "link": "https://github.com/actions/runner-images-internal/pull/6702", - "reason": "Meaningful reason must be added at next update.", - "review-at": "2024-06-01", - "type": "preexisting-pinned-version-without-reason" - } + "version": "3.*" }, "pwsh": { "version": "7.4" diff --git a/images/windows/toolsets/toolset-2025.json b/images/windows/toolsets/toolset-2025.json index 830a47358d..c81d68b92e 100644 --- a/images/windows/toolsets/toolset-2025.json +++ b/images/windows/toolsets/toolset-2025.json @@ -5,9 +5,9 @@ "arch": "x64", "platform" : "win32", "versions": [ - "3.1", "3.2", - "3.3" + "3.3", + "3.4" ], "default": "3.3" }, @@ -17,13 +17,13 @@ "arch": "x64", "platform" : "win32", "versions": [ - "3.9.*", "3.10.*", "3.11.*", "3.12.*", - "3.13.*" + "3.13.*", + "3.14.*" ], - "default": "3.9.*" + "default": "3.12.*" }, { "name": "PyPy", @@ -40,9 +40,9 @@ "arch": "x64", "platform" : "win32", "versions": [ - "18.*", "20.*", - "22.*" + "22.*", + "24.*" ] }, { @@ -53,7 +53,8 @@ "versions": [ "1.22.*", "1.23.*", - "1.24.*" + "1.24.*", + "1.25.*" ], "default": "1.24.*" } @@ -75,13 +76,12 @@ "name": "az", "versions": [ "12.5.0" - ], - "zip_versions": [] + ] } ], "java": { "default": "17", - "versions": [ "8", "11", "17", "21"] + "versions": [ "8", "11", "17", "21", "25"] }, "android": { "commandline_tools_url": "https://dl.google.com/android/repository/commandlinetools-win-12266719_latest.zip", @@ -95,26 +95,20 @@ ], "addons": [], "additional_tools": [ - "cmake;3.22.1", "cmake;3.30.5", - "cmake;3.31.5" + "cmake;3.31.5", + "cmake;4.1.2" ], "ndk": { "default": "27", "versions": [ - "26", "27", "28" + "27", "28", "29" ] } }, "mingw": { - "version": "14.2.0", - "runtime": "ucrt", - "pinnedDetails": { - "link": "https://github.com/actions/runner-images-internal/pull/6702", - "reason": "Meaningful reason must be added at next update.", - "review-at": "2025-06-01", - "type": "preexisting-pinned-version-without-reason" - } + "version": "15.*", + "runtime": "ucrt" }, "MsysPackages": { "msys2": [], @@ -263,7 +257,8 @@ "dotnet": { "versions": [ "8.0", - "9.0" + "9.0", + "10.0" ], "tools": [ { "name": "nbgv", "test": "nbgv --version", "getversion": "nbgv --version" } @@ -276,6 +271,7 @@ { "name": "aria2" }, { "name": "azcopy10" }, { "name": "Bicep" }, + { "name": "innosetup" }, { "name": "jq" }, { "name": "NuGet.CommandLine" }, { "name": "packer" }, @@ -293,7 +289,7 @@ }, { "name": "strawberryperl" , - "args": [ "--version", "5.40.2.2" ] + "args": [ "--version", "5.42.0.1" ] }, { "name": "imagemagick" }, { "name": "ninja" } @@ -324,13 +320,7 @@ "version": "latest" }, "openssl": { - "version": "3.5.1", - "pinnedDetails": { - "link": "https://github.com/actions/runner-images-internal/pull/6702", - "reason": "Meaningful reason must be added at next update.", - "review-at": "2025-06-01", - "type": "preexisting-pinned-version-without-reason" - } + "version": "3.*" }, "pwsh": { "version": "7.4"