diff --git a/.github/ISSUE_TEMPLATE/announcement.yml b/.github/ISSUE_TEMPLATE/announcement.yml index b165eae58..7ad957a50 100644 --- a/.github/ISSUE_TEMPLATE/announcement.yml +++ b/.github/ISSUE_TEMPLATE/announcement.yml @@ -36,7 +36,6 @@ body: attributes: label: Runner images affected options: - - label: Ubuntu 20.04 - label: Ubuntu 22.04 - label: Ubuntu 24.04 - label: macOS 13 diff --git a/.github/ISSUE_TEMPLATE/bug-report.yml b/.github/ISSUE_TEMPLATE/bug-report.yml index 09990d9ce..64ae26c41 100644 --- a/.github/ISSUE_TEMPLATE/bug-report.yml +++ b/.github/ISSUE_TEMPLATE/bug-report.yml @@ -19,7 +19,6 @@ body: attributes: label: Runner images affected options: - - label: Ubuntu 20.04 - label: Ubuntu 22.04 - label: Ubuntu 24.04 - label: macOS 13 diff --git a/.github/ISSUE_TEMPLATE/tool-request.yml b/.github/ISSUE_TEMPLATE/tool-request.yml index f9bcb7553..0983d76a4 100644 --- a/.github/ISSUE_TEMPLATE/tool-request.yml +++ b/.github/ISSUE_TEMPLATE/tool-request.yml @@ -57,7 +57,6 @@ body: attributes: label: Runner images where you need the tool options: - - label: Ubuntu 20.04 - label: Ubuntu 22.04 - label: Ubuntu 24.04 - label: macOS 13 diff --git a/.github/workflows/ubuntu2004.yml b/.github/workflows/ubuntu2004.yml deleted file mode 100644 index a1773f124..000000000 --- a/.github/workflows/ubuntu2004.yml +++ /dev/null @@ -1,20 +0,0 @@ -name: Trigger Ubuntu20.04 CI -run-name: Ubuntu20.04 - ${{ github.event.pull_request.title }} - -on: - pull_request_target: - types: labeled - paths: - - 'images/ubuntu/**' - -defaults: - run: - shell: pwsh - -jobs: - Ubuntu_2004: - if: github.event.label.name == 'CI ubuntu-all' || github.event.label.name == 'CI ubuntu-2004' - uses: ./.github/workflows/trigger-ubuntu-win-build.yml - with: - image_type: 'ubuntu2004' - secrets: inherit diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 11b2dcacc..9f9547a45 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -53,7 +53,7 @@ Add `Invoke-PesterTests -TestFile [-TestName ]` at Use existing scripts such as [github-cli.sh](images/ubuntu/scripts/build/github-cli.sh) as a starting point. - Use [helpers](images/ubuntu/scripts/helpers/install.sh) to simplify the installation process. - The validation part should `exit 1` if there is any issue with the installation. -- Add changes to the software report generator `images/ubuntu/scripts/docs-gen/Generate-SoftwareReport.ps1`. The software report generator is used to generate an image's README file, e.g. [Ubuntu2004-Readme.md](images/ubuntu/Ubuntu2004-README.md) and it uses [MarkdownPS](https://github.com/Sarafian/MarkdownPS). +- Add changes to the software report generator `images/ubuntu/scripts/docs-gen/Generate-SoftwareReport.ps1`. The software report generator is used to generate an image's README file, e.g. [Ubuntu2204-Readme.md](images/ubuntu/Ubuntu2204-Readme.md) and it uses [MarkdownPS](https://github.com/Sarafian/MarkdownPS). ### macOS diff --git a/README.md b/README.md index 0a7056d0e..5c2f0c556 100644 --- a/README.md +++ b/README.md @@ -22,9 +22,12 @@ To build a VM machine from this repo's source, see the [instructions](docs/creat | --------------------|---------------------|--------------------|--------------------| | Ubuntu 24.04 | `ubuntu-latest` or `ubuntu-24.04` | [ubuntu-24.04] | ![Endpoint Badge](https://img.shields.io/endpoint?url=https%3A%2F%2Fgist.githubusercontent.com%2Fsubir0071%2F385e39188f4280878bada99250e99db7%2Fraw%2Fubuntu24.json) | | Ubuntu 22.04 | `ubuntu-22.04` | [ubuntu-22.04] | ![Endpoint Badge](https://img.shields.io/endpoint?url=https%3A%2F%2Fgist.githubusercontent.com%2Fsubir0071%2F385e39188f4280878bada99250e99db7%2Fraw%2Fubuntu22.json) | -| Ubuntu 20.04 deprecated | `ubuntu-20.04` | [ubuntu-20.04] | ![Endpoint Badge](https://img.shields.io/endpoint?url=https%3A%2F%2Fgist.githubusercontent.com%2Fsubir0071%2F385e39188f4280878bada99250e99db7%2Fraw%2Fubuntu20.json) | +| macOS 15 beta | `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 beta | `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 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 15 beta | `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 beta | `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) | @@ -40,7 +43,6 @@ 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-20.04]: https://github.com/actions/runner-images/blob/main/images/ubuntu/Ubuntu2004-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 [windows-2019]: https://github.com/actions/runner-images/blob/main/images/windows/Windows2019-Readme.md @@ -131,7 +133,10 @@ We use third-party package managers to install software during the image generat | Operating system | Package manager | Third-party repos and packages | | :--- | :---: | ---: | +| Ubuntu | [APT](https://wiki.debian.org/Apt) | [Eclipse-Temurin (Adoptium)](https://packages.adoptium.net/artifactory/deb/)
[Erlang](https://packages.erlang-solutions.com/ubuntu)
[Firefox](http://ppa.launchpad.net/mozillateam/ppa/ubuntu)
[git-lfs](https://packagecloud.io/install/repositories/github/git-lfs)
[git](https://launchpad.net/~git-core/+archive/ubuntu/ppa)
[Google Cloud CLI](https://packages.cloud.google.com/apt)
[Heroku](https://cli-assets.heroku.com/channels/stable/apt)
[HHvm](https://dl.hhvm.com/ubuntu)
[MongoDB](https://repo.mongodb.org/apt/ubuntu)
[Mono](https://download.mono-project.com/repo/ubuntu)
[MS Edge](https://packages.microsoft.com/repos/edge)
[PostgreSQL](https://apt.postgresql.org/pub/repos/apt/)
[R](https://cloud.r-project.org/bin/linux/ubuntu) | | Ubuntu | [APT](https://wiki.debian.org/Apt) | [containers](https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable) (Ubuntu 20 only)
[docker](https://download.docker.com/linux/ubuntu) (Ubuntu20 0nly)
[Eclipse-Temurin (Adoptium)](https://packages.adoptium.net/artifactory/deb/)
[Erlang](https://packages.erlang-solutions.com/ubuntu)
[Firefox](https://ppa.launchpad.net/mozillateam/ppa/ubuntu)
[git-lfs](https://packagecloud.io/install/repositories/github/git-lfs)
[git](https://launchpad.net/~git-core/+archive/ubuntu/ppa)
[Google Cloud CLI](https://packages.cloud.google.com/apt)
[Heroku](https://cli-assets.heroku.com/channels/stable/apt)
[HHvm](https://dl.hhvm.com/ubuntu)
[MongoDB](https://repo.mongodb.org/apt/ubuntu)
[Mono](https://download.mono-project.com/repo/ubuntu)
[MS Edge](https://packages.microsoft.com/repos/edge)
[PostgreSQL](https://apt.postgresql.org/pub/repos/apt/)
[R](https://cloud.r-project.org/bin/linux/ubuntu) | +| Ubuntu | [APT](https://wiki.debian.org/Apt) | [Eclipse-Temurin (Adoptium)](https://packages.adoptium.net/artifactory/deb/)
[Erlang](https://packages.erlang-solutions.com/ubuntu)
[Firefox](http://ppa.launchpad.net/mozillateam/ppa/ubuntu)
[git-lfs](https://packagecloud.io/install/repositories/github/git-lfs)
[git](https://launchpad.net/~git-core/+archive/ubuntu/ppa)
[Google Cloud CLI](https://packages.cloud.google.com/apt)
[Heroku](https://cli-assets.heroku.com/channels/stable/apt)
[HHvm](https://dl.hhvm.com/ubuntu)
[MongoDB](https://repo.mongodb.org/apt/ubuntu)
[Mono](https://download.mono-project.com/repo/ubuntu)
[MS Edge](https://packages.microsoft.com/repos/edge)
[PostgreSQL](https://apt.postgresql.org/pub/repos/apt/)
[R](https://cloud.r-project.org/bin/linux/ubuntu) | +| Ubuntu | [APT](https://wiki.debian.org/Apt) | [Eclipse-Temurin (Adoptium)](https://packages.adoptium.net/artifactory/deb/)
[Erlang](https://packages.erlang-solutions.com/ubuntu)
[Firefox](http://ppa.launchpad.net/mozillateam/ppa/ubuntu)
[git-lfs](https://packagecloud.io/install/repositories/github/git-lfs)
[git](https://launchpad.net/~git-core/+archive/ubuntu/ppa)
[Google Cloud CLI](https://packages.cloud.google.com/apt)
[Heroku](https://cli-assets.heroku.com/channels/stable/apt)
[HHvm](https://dl.hhvm.com/ubuntu)
[MongoDB](https://repo.mongodb.org/apt/ubuntu)
[Mono](https://download.mono-project.com/repo/ubuntu)
[MS Edge](https://packages.microsoft.com/repos/edge)
[PostgreSQL](https://apt.postgresql.org/pub/repos/apt/)
[R](https://cloud.r-project.org/bin/linux/ubuntu) | | | [pipx](https://pypa.github.io/pipx) | ansible-core
yamllint | | Windows | [Chocolatey](https://chocolatey.org) | No third-party repos installed | | macOS | [Homebrew](https://brew.sh) | [aws-cli v2](https://github.com/aws/homebrew-tap)
[azure/bicep](https://github.com/Azure/homebrew-bicep)
[mongodb/brew](https://github.com/mongodb/homebrew-brew) | diff --git a/docs/create-image-and-azure-resources.md b/docs/create-image-and-azure-resources.md index 09c11dc50..91ab05edc 100644 --- a/docs/create-image-and-azure-resources.md +++ b/docs/create-image-and-azure-resources.md @@ -1,6 +1,6 @@ # GitHub Actions Runner Images -The runner-images project uses [Packer](https://www.packer.io/) to generate disk images for Windows 2019/2022 and Ubuntu 20.04/22.04. +The runner-images project uses [Packer](https://www.packer.io/) to generate disk images for Windows 2019/2022 and Ubuntu 22.04/24.04. Each image is configured by a HCL2 Packer template that specifies where to build the image (Azure, in this case), and what steps to run to install software and prepare the disk. @@ -99,7 +99,7 @@ Finally, run the `GenerateResourcesAndImage` function, setting the mandatory arg - `ResourceGroupName` - the name of the resource group that will store the resulting artifact (e.g., "imagegen-test"). The resource group must already exist in your Azure subscription; - `AzureLocation` - the location where resources will be created (e.g., "East US"); -- `ImageType` - the type of image to build (we suggest choosing "UbuntuMinimal" here; other valid options are "Windows2019", "Windows2022", "Windows2025", "Ubuntu2004", "Ubuntu2204", "Ubuntu2404"). +- `ImageType` - the type of image to build (we suggest choosing "UbuntuMinimal" here; other valid options are "Windows2019", "Windows2022", "Windows2025", "Ubuntu2204", "Ubuntu2404"). This function automatically creates all required Azure resources and initiates the Packer image generation for the selected image type. diff --git a/helpers/GenerateResourcesAndImage.ps1 b/helpers/GenerateResourcesAndImage.ps1 index faa3ad211..c2dea768d 100644 --- a/helpers/GenerateResourcesAndImage.ps1 +++ b/helpers/GenerateResourcesAndImage.ps1 @@ -4,10 +4,9 @@ enum ImageType { Windows2019 = 1 Windows2022 = 2 Windows2025 = 3 - Ubuntu2004 = 4 - Ubuntu2204 = 5 - Ubuntu2404 = 6 - UbuntuMinimal = 7 + Ubuntu2204 = 4 + Ubuntu2404 = 5 + UbuntuMinimal = 6 } Function Get-PackerTemplatePath { @@ -29,9 +28,6 @@ Function Get-PackerTemplatePath { ([ImageType]::Windows2025) { $relativeTemplatePath = Join-Path (Join-Path "windows" "templates") "windows-2025.pkr.hcl" } - ([ImageType]::Ubuntu2004) { - $relativeTemplatePath = Join-Path (Join-Path "ubuntu" "templates") "ubuntu-20.04.pkr.hcl" - } ([ImageType]::Ubuntu2204) { $relativeTemplatePath = Join-Path (Join-Path "ubuntu" "templates") "ubuntu-22.04.pkr.hcl" } @@ -85,7 +81,7 @@ Function GenerateResourcesAndImage { .PARAMETER ResourceGroupName The name of the resource group to store the resulting artifact. Resource group must already exist. .PARAMETER ImageType - The type of image to generate. Valid values are: Windows2019, Windows2022, Windows2025, Ubuntu2004, Ubuntu2204, Ubuntu2404, UbuntuMinimal. + The type of image to generate. Valid values are: Windows2019, Windows2022, Windows2025, Ubuntu2204, Ubuntu2404, UbuntuMinimal. .PARAMETER ManagedImageName The name of the managed image to create. The default is "Runner-Image-{{ImageType}}". .PARAMETER AzureLocation @@ -116,7 +112,7 @@ Function GenerateResourcesAndImage { .PARAMETER PluginVersion Specify the version of the packer Azure plugin to use. The default is "2.2.1". .EXAMPLE - GenerateResourcesAndImage -SubscriptionId {YourSubscriptionId} -ResourceGroupName "shsamytest1" -ImageGenerationRepositoryRoot "C:\runner-images" -ImageType Ubuntu2004 -AzureLocation "East US" + GenerateResourcesAndImage -SubscriptionId {YourSubscriptionId} -ResourceGroupName "shsamytest1" -ImageGenerationRepositoryRoot "C:\runner-images" -ImageType Ubuntu2204 -AzureLocation "East US" #> param ( [Parameter(Mandatory = $True)] diff --git a/images/ubuntu/assets/ubuntu2004.conf b/images/ubuntu/assets/ubuntu2004.conf deleted file mode 100644 index 63c41c268..000000000 --- a/images/ubuntu/assets/ubuntu2004.conf +++ /dev/null @@ -1,2 +0,0 @@ -# Name of pool supported by this image -POOL_NAME="Ubuntu 2004" diff --git a/images/ubuntu/scripts/build/install-aliyun-cli.sh b/images/ubuntu/scripts/build/install-aliyun-cli.sh index 13d959d7a..c8458afbb 100644 --- a/images/ubuntu/scripts/build/install-aliyun-cli.sh +++ b/images/ubuntu/scripts/build/install-aliyun-cli.sh @@ -10,23 +10,14 @@ source $HELPER_SCRIPTS/os.sh source $HELPER_SCRIPTS/install.sh # Install Alibaba Cloud CLI -# Pin tool version on ubuntu20 due to issues with GLIBC_2.32 not available -if is_ubuntu20; then - toolset_version=$(get_toolset_value '.aliyunCli.version') - download_url="https://github.com/aliyun/aliyun-cli/releases/download/v$toolset_version/aliyun-cli-linux-$toolset_version-amd64.tgz" -else - download_url=$(resolve_github_release_asset_url "aliyun/aliyun-cli" "contains(\"aliyun-cli-linux\") and endswith(\"amd64.tgz\")" "latest") - hash_url="https://github.com/aliyun/aliyun-cli/releases/latest/download/SHASUMS256.txt" -fi + +download_url=$(resolve_github_release_asset_url "aliyun/aliyun-cli" "contains(\"aliyun-cli-linux\") and endswith(\"amd64.tgz\")" "latest") +hash_url="https://github.com/aliyun/aliyun-cli/releases/latest/download/SHASUMS256.txt" archive_path=$(download_with_retry "$download_url") # Supply chain security - Alibaba Cloud CLI -if is_ubuntu20; then - external_hash=$(get_toolset_value '.aliyunCli.sha256') -else - external_hash=$(get_checksum_from_url "$hash_url" "aliyun-cli-linux.*amd64.tgz" "SHA256") -fi +external_hash=$(get_checksum_from_url "$hash_url" "aliyun-cli-linux.*amd64.tgz" "SHA256") use_checksum_comparison "$archive_path" "$external_hash" diff --git a/images/ubuntu/scripts/build/install-container-tools.sh b/images/ubuntu/scripts/build/install-container-tools.sh index 952435ddb..ac9dcdff0 100644 --- a/images/ubuntu/scripts/build/install-container-tools.sh +++ b/images/ubuntu/scripts/build/install-container-tools.sh @@ -17,15 +17,6 @@ else install_packages=(podman=3.4.4+ds1-1ubuntu1 buildah skopeo) fi -# Packages is available in the official Ubuntu upstream starting from Ubuntu 21 -if is_ubuntu20; then - REPO_URL="https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_$(lsb_release -rs)" - GPG_KEY="/usr/share/keyrings/devel_kubic_libcontainers_stable.gpg" - REPO_PATH="/etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list" - - curl -fsSL "${REPO_URL}/Release.key" | gpg --dearmor -o $GPG_KEY - echo "deb [arch=amd64 signed-by=$GPG_KEY] ${REPO_URL}/ /" > $REPO_PATH -fi if is_ubuntu22; then # Install containernetworking-plugins for Ubuntu 22 @@ -39,13 +30,4 @@ apt-get install ${install_packages[@]} mkdir -p /etc/containers printf "[registries.search]\nregistries = ['docker.io', 'quay.io']\n" | tee /etc/containers/registries.conf -if is_ubuntu20; then - # Remove source repo - rm $GPG_KEY - rm $REPO_PATH - - # Document source repo - echo "containers $REPO_URL" >> $HELPER_SCRIPTS/apt-sources.txt -fi - invoke_tests "Tools" "Containers" diff --git a/images/ubuntu/scripts/build/install-erlang.sh b/images/ubuntu/scripts/build/install-erlang.sh deleted file mode 100644 index f2d3e9733..000000000 --- a/images/ubuntu/scripts/build/install-erlang.sh +++ /dev/null @@ -1,29 +0,0 @@ -#!/bin/bash -e -################################################################################ -## File: install-erlang.sh -## Desc: Install erlang and rebar3 -################################################################################ - -# Source the helpers for use with the script -source $HELPER_SCRIPTS/install.sh - -source_list=/etc/apt/sources.list.d/eslerlang.list -source_key=/usr/share/keyrings/eslerlang.gpg - -# Install Erlang -wget -q -O - https://binaries2.erlang-solutions.com/GPG-KEY-pmanager.asc | gpg --dearmor > $source_key -echo "deb [signed-by=$source_key] https://binaries2.erlang-solutions.com/ubuntu $(lsb_release -cs)-esl-erlang-25 contrib" > $source_list -apt-get update - -apt-get install --no-install-recommends esl-erlang - -# Install rebar3 -rebar3_url=$(resolve_github_release_asset_url "erlang/rebar3" "endswith(\"rebar3\")" "latest") -binary_path=$(download_with_retry "$rebar3_url") -install "$binary_path" /usr/local/bin/rebar3 - -# Clean up source list -rm $source_list -rm $source_key - -invoke_tests "Tools" "erlang" diff --git a/images/ubuntu/scripts/build/install-hhvm.sh b/images/ubuntu/scripts/build/install-hhvm.sh deleted file mode 100644 index 40562659e..000000000 --- a/images/ubuntu/scripts/build/install-hhvm.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/bash -e -################################################################################ -## File: install-hhvm.sh -## Desc: Install HHVM -################################################################################ - -REPO_URL="https://dl.hhvm.com/ubuntu" -GPG_KEY="/usr/share/keyrings/hhvm.gpg" -REPO_PATH="/etc/apt/sources.list.d/hhvm.list" - -# add HHVM repository to apt -curl -fsSL https://dl.hhvm.com/conf/hhvm.gpg.key | gpg --dearmor -o $GPG_KEY -echo "deb [signed-by=$GPG_KEY] $REPO_URL $(lsb_release -cs) main" > $REPO_PATH - -# install HHVM -apt-get update -apt-get install hhvm - -# remove HHVM's apt repository -rm $REPO_PATH -rm $GPG_KEY - -invoke_tests "Tools" "HHVM" diff --git a/images/ubuntu/scripts/build/install-mongodb.sh b/images/ubuntu/scripts/build/install-mongodb.sh deleted file mode 100644 index 8fb682a43..000000000 --- a/images/ubuntu/scripts/build/install-mongodb.sh +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/bash -e -################################################################################ -## File: install-mongodb.sh -## Desc: Install Mongo DB -################################################################################ - -# Source the helpers -source $HELPER_SCRIPTS/install.sh - -toolset_version=$(get_toolset_value '.mongodb.version') -REPO_URL="https://repo.mongodb.org/apt/ubuntu" -GPG_KEY="/usr/share/keyrings/mongodb-org-$toolset_version.gpg" -REPO_PATH="/etc/apt/sources.list.d/mongodb-org-$toolset_version.list" - -# add Mongo DB repository to apt -curl -fsSL https://www.mongodb.org/static/pgp/server-$toolset_version.asc | gpg --dearmor -o $GPG_KEY -echo "deb [ arch=amd64,arm64 signed-by=$GPG_KEY ] $REPO_URL $(lsb_release -cs)/mongodb-org/$toolset_version multiverse" > $REPO_PATH - -# Install Mongo DB -sudo apt-get update -sudo apt-get install mongodb-org - -# remove Mongo DB's apt repository -rm $REPO_PATH -rm $GPG_KEY - -# Document source repo -echo "mongodb $REPO_URL" >> $HELPER_SCRIPTS/apt-sources.txt - -invoke_tests "Databases" "MongoDB" diff --git a/images/ubuntu/scripts/build/install-oc-cli.sh b/images/ubuntu/scripts/build/install-oc-cli.sh index a20f4275c..6ea389469 100644 --- a/images/ubuntu/scripts/build/install-oc-cli.sh +++ b/images/ubuntu/scripts/build/install-oc-cli.sh @@ -8,14 +8,9 @@ source $HELPER_SCRIPTS/os.sh source $HELPER_SCRIPTS/install.sh -if is_ubuntu20; then - toolset_version=$(get_toolset_value '.ocCli.version') - download_url="https://mirror.openshift.com/pub/openshift-v4/clients/ocp/$toolset_version/openshift-client-linux-$toolset_version.tar.gz" -else - # Install the oc CLI - download_url="https://mirror.openshift.com/pub/openshift-v4/clients/ocp/latest/openshift-client-linux.tar.gz" -fi +# Install the oc CLI +download_url="https://mirror.openshift.com/pub/openshift-v4/clients/ocp/latest/openshift-client-linux.tar.gz" archive_path=$(download_with_retry "$download_url") diff --git a/images/ubuntu/scripts/build/install-phantomjs.sh b/images/ubuntu/scripts/build/install-phantomjs.sh deleted file mode 100644 index 0cce25d97..000000000 --- a/images/ubuntu/scripts/build/install-phantomjs.sh +++ /dev/null @@ -1,26 +0,0 @@ -#!/bin/bash -e -################################################################################ -## File: install-phantomjs.sh -## Desc: Install PhantomJS -################################################################################ - -# Source the helpers for use with the script -source $HELPER_SCRIPTS/install.sh - -# Install required dependencies -apt-get install chrpath libssl-dev libxft-dev libfreetype6 libfreetype6-dev libfontconfig1 libfontconfig1-dev - -# Define the version and hash of PhantomJS to be installed -DIR_NAME=phantomjs-2.1.1-linux-x86_64 -ARCHIVE_HASH="86dd9a4bf4aee45f1a84c9f61cf1947c1d6dce9b9e8d2a907105da7852460d2f" - -# Download the archive and verify its integrity using checksum comparison -download_url="https://bitbucket.org/ariya/phantomjs/downloads/$DIR_NAME.tar.bz2" -archive_path=$(download_with_retry "$download_url") -use_checksum_comparison "$archive_path" "$ARCHIVE_HASH" - -# Extract the archive and create a symbolic link to the executable -tar xjf "$archive_path" -C /usr/local/share -ln -sf /usr/local/share/$DIR_NAME/bin/phantomjs /usr/local/bin - -invoke_tests "Tools" "Phantomjs" diff --git a/images/ubuntu/scripts/build/install-php.sh b/images/ubuntu/scripts/build/install-php.sh index 46be1385e..d8faded84 100644 --- a/images/ubuntu/scripts/build/install-php.sh +++ b/images/ubuntu/scripts/build/install-php.sh @@ -9,13 +9,6 @@ source $HELPER_SCRIPTS/etc-environment.sh source $HELPER_SCRIPTS/os.sh source $HELPER_SCRIPTS/install.sh -# add repository for old Ubuntu images -# details in thread: https://github.com/actions/runner-images/issues/6331 -if is_ubuntu20; then - apt-add-repository ppa:ondrej/php -y - apt-get update -fi - # Install PHP php_versions=$(get_toolset_value '.php.versions[]') @@ -103,11 +96,4 @@ mkdir -p /etc/skel/.composer wget -q -O phpunit https://phar.phpunit.de/phpunit-8.phar install phpunit /usr/local/bin/phpunit -# ubuntu 20.04 libzip-dev is libzip5 based and is not compatible libzip-dev of ppa:ondrej/php -# see https://github.com/actions/runner-images/issues/1084 -if is_ubuntu20; then - rm /etc/apt/sources.list.d/ondrej-*.list - apt-get update -fi - invoke_tests "Common" "PHP" diff --git a/images/ubuntu/scripts/build/install-ruby.sh b/images/ubuntu/scripts/build/install-ruby.sh index 92d21c749..be929857d 100644 --- a/images/ubuntu/scripts/build/install-ruby.sh +++ b/images/ubuntu/scripts/build/install-ruby.sh @@ -10,27 +10,6 @@ source $HELPER_SCRIPTS/install.sh apt-get install ruby-full -# temporary fix for fastlane installation https://github.com/sporkmonger/addressable/issues/541 -if is_ubuntu20; then - - gem install public_suffix -v 5.1.1 - - # Install google-cloud-errors gem pinned to version 1.4.0 - gem install google-cloud-errors -v 1.4.0 - - # Install faraday-net_http gem pinned to version 3.0.2 - gem install faraday-net_http -v 3.0.2 - - # Install faraday gem pinned to version 2.8.1 - gem install faraday -v 2.8.1 - - # Install google-cloud-env gem pinned to version 2.1.1 - gem install google-cloud-env -v 2.1.1 - - # Install google-cloud-core gem pinned to version 1.7.1 - gem install google-cloud-core -v 1.7.1 -fi - # Install ruby gems from toolset gems_to_install=$(get_toolset_value ".rubygems[] .name") if [[ -n "$gems_to_install" ]]; then diff --git a/images/ubuntu/scripts/build/install-rust.sh b/images/ubuntu/scripts/build/install-rust.sh index 3625ae058..803988512 100644 --- a/images/ubuntu/scripts/build/install-rust.sh +++ b/images/ubuntu/scripts/build/install-rust.sh @@ -23,10 +23,6 @@ if is_ubuntu22; then cargo install --locked bindgen-cli cbindgen cargo-audit cargo-outdated fi -if is_ubuntu20; then - cargo install --locked bindgen-cli cbindgen cargo-audit cargo-outdated -fi - # Cleanup Cargo cache rm -rf ${CARGO_HOME}/registry/* diff --git a/images/ubuntu/scripts/docs-gen/Generate-SoftwareReport.ps1 b/images/ubuntu/scripts/docs-gen/Generate-SoftwareReport.ps1 index 9cbd19541..c138501bc 100644 --- a/images/ubuntu/scripts/docs-gen/Generate-SoftwareReport.ps1 +++ b/images/ubuntu/scripts/docs-gen/Generate-SoftwareReport.ps1 @@ -41,10 +41,6 @@ $languageAndRuntime.AddToolVersionsListInline("Clang", $(Get-ClangToolVersions - $languageAndRuntime.AddToolVersionsListInline("Clang-format", $(Get-ClangToolVersions -ToolName "clang-format"), "^\d+") $languageAndRuntime.AddToolVersionsListInline("Clang-tidy", $(Get-ClangTidyVersions), "^\d+") $languageAndRuntime.AddToolVersion("Dash", $(Get-DashVersion)) -if (Test-IsUbuntu20) { - $languageAndRuntime.AddToolVersion("Erlang", $(Get-ErlangVersion)) - $languageAndRuntime.AddToolVersion("Erlang rebar3", $(Get-ErlangRebar3Version)) -} $languageAndRuntime.AddToolVersionsListInline("GNU C++", $(Get-CPPVersions), "^\d+") $languageAndRuntime.AddToolVersionsListInline("GNU Fortran", $(Get-FortranVersions), "^\d+") $languageAndRuntime.AddToolVersion("Julia", $(Get-JuliaVersion)) @@ -90,14 +86,14 @@ $projectManagement.AddToolVersion("Ant", $(Get-AntVersion)) $projectManagement.AddToolVersion("Gradle", $(Get-GradleVersion)) $projectManagement.AddToolVersion("Lerna", $(Get-LernaVersion)) $projectManagement.AddToolVersion("Maven", $(Get-MavenVersion)) -if ((Test-IsUbuntu20) -or (Test-IsUbuntu22)) { +if (Test-IsUbuntu22) { $projectManagement.AddToolVersion("Sbt", $(Get-SbtVersion)) } # Tools $tools = $installedSoftware.AddHeader("Tools") $tools.AddToolVersion("Ansible", $(Get-AnsibleVersion)) -if ((Test-IsUbuntu20) -or (Test-IsUbuntu22)) { +if (Test-IsUbuntu22) { $tools.AddToolVersion("apt-fast", $(Get-AptFastVersion)) } $tools.AddToolVersion("AzCopy", $(Get-AzCopyVersion)) @@ -117,17 +113,14 @@ $tools.AddToolVersion("Git", $(Get-GitVersion)) $tools.AddToolVersion("Git LFS", $(Get-GitLFSVersion)) $tools.AddToolVersion("Git-ftp", $(Get-GitFTPVersion)) $tools.AddToolVersion("Haveged", $(Get-HavegedVersion)) -if ((Test-IsUbuntu20) -or (Test-IsUbuntu22)) { +if (Test-IsUbuntu22) { $tools.AddToolVersion("Heroku", $(Get-HerokuVersion)) } -if (Test-IsUbuntu20) { - $tools.AddToolVersion("HHVM (HipHop VM)", $(Get-HHVMVersion)) -} $tools.AddToolVersion("jq", $(Get-JqVersion)) $tools.AddToolVersion("Kind", $(Get-KindVersion)) $tools.AddToolVersion("Kubectl", $(Get-KubectlVersion)) $tools.AddToolVersion("Kustomize", $(Get-KustomizeVersion)) -if ((Test-IsUbuntu20) -or (Test-IsUbuntu22)) { +if (Test-IsUbuntu22) { $tools.AddToolVersion("Leiningen", $(Get-LeiningenVersion)) } $tools.AddToolVersion("MediaInfo", $(Get-MediainfoVersion)) @@ -139,17 +132,14 @@ $tools.AddToolVersion("nvm", $(Get-NvmVersion)) $tools.AddToolVersion("OpenSSL", $(Get-OpensslVersion)) $tools.AddToolVersion("Packer", $(Get-PackerVersion)) $tools.AddToolVersion("Parcel", $(Get-ParcelVersion)) -if (Test-IsUbuntu20) { - $tools.AddToolVersion("PhantomJS", $(Get-PhantomJSVersion)) -} $tools.AddToolVersion("Podman", $(Get-PodManVersion)) $tools.AddToolVersion("Pulumi", $(Get-PulumiVersion)) -if ((Test-IsUbuntu20) -or (Test-IsUbuntu22)) { +if (Test-IsUbuntu22) { $tools.AddToolVersion("R", $(Get-RVersion)) } $tools.AddToolVersion("Skopeo", $(Get-SkopeoVersion)) $tools.AddToolVersion("Sphinx Open Source Search Server", $(Get-SphinxVersion)) -if ((Test-IsUbuntu20) -or (Test-IsUbuntu22)) { +if (Test-IsUbuntu22) { $tools.AddToolVersion("SVN", $(Get-SVNVersion)) $tools.AddToolVersion("Terraform", $(Get-TerraformVersion)) } @@ -160,7 +150,7 @@ $tools.AddToolVersion("Ninja", $(Get-NinjaVersion)) # CLI Tools $cliTools = $installedSoftware.AddHeader("CLI Tools") -if ((Test-IsUbuntu20) -or (Test-IsUbuntu22)) { +if (Test-IsUbuntu22) { $cliTools.AddToolVersion("Alibaba Cloud CLI", $(Get-AlibabaCloudCliVersion)) } $cliTools.AddToolVersion("AWS CLI", $(Get-AWSCliVersion)) @@ -170,7 +160,7 @@ $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)) -if ((Test-IsUbuntu20) -or (Test-IsUbuntu22)) { +if (Test-IsUbuntu22) { $cliTools.AddToolVersion("Netlify CLI", $(Get-NetlifyCliVersion)) $cliTools.AddToolVersion("OpenShift CLI", $(Get-OCCliVersion)) $cliTools.AddToolVersion("ORAS CLI", $(Get-ORASCliVersion)) @@ -204,7 +194,7 @@ $rustTools.AddToolVersion("Rustup", $(Get-RustupVersion)) # Packages $rustToolsPackages = $rustTools.AddHeader("Packages") -if ((Test-IsUbuntu20) -or (Test-IsUbuntu22)) { +if (Test-IsUbuntu22) { $rustToolsPackages.AddToolVersion("Bindgen", $(Get-BindgenVersion)) $rustToolsPackages.AddToolVersion("Cargo audit", $(Get-CargoAuditVersion)) $rustToolsPackages.AddToolVersion("Cargo clippy", $(Get-CargoClippyVersion)) @@ -236,9 +226,6 @@ $netCoreTools.AddNodes($(Get-DotnetTools)) # Databases $databasesTools = $installedSoftware.AddHeader("Databases") -if (Test-IsUbuntu20) { - $databasesTools.AddToolVersion("MongoDB", $(Get-MongoDbVersion)) -} $databasesTools.AddToolVersion("sqlite3", $(Get-SqliteVersion)) $databasesTools.AddNode($(Build-PostgreSqlSection)) $databasesTools.AddNode($(Build-MySQLSection)) diff --git a/images/ubuntu/scripts/docs-gen/SoftwareReport.WebServers.psm1 b/images/ubuntu/scripts/docs-gen/SoftwareReport.WebServers.psm1 index bfb76e0a7..a3cbdb50f 100644 --- a/images/ubuntu/scripts/docs-gen/SoftwareReport.WebServers.psm1 +++ b/images/ubuntu/scripts/docs-gen/SoftwareReport.WebServers.psm1 @@ -28,27 +28,9 @@ function Get-NginxVersion { } } -function Get-Xsp4Version { - $name = "mono-xsp4" - $port = (grep '^port=' /etc/default/mono-xsp4).Split('=')[1] - $version = (dpkg-query --showformat='${Version}' --show mono-xsp4).Split('-')[0] - $serviceStatus = systemctl show -p ActiveState --value mono-xsp4 - $configFile = "/etc/default/mono-xsp4" - return [PsCustomObject]@{ - "Name" = $name - "Version" = $version - "ConfigFile" = $configFile - "ServiceStatus" = $serviceStatus - "ListenPort" = $port - } -} - function Build-WebServersTable { $servers = @() $servers += (Get-ApacheVersion) - if (Test-IsUbuntu20) { - $servers += (Get-Xsp4Version) - } $servers += (Get-NginxVersion) return $servers diff --git a/images/ubuntu/scripts/helpers/Common.Helpers.psm1 b/images/ubuntu/scripts/helpers/Common.Helpers.psm1 index 75dcdb745..ffefd2986 100644 --- a/images/ubuntu/scripts/helpers/Common.Helpers.psm1 +++ b/images/ubuntu/scripts/helpers/Common.Helpers.psm1 @@ -54,10 +54,6 @@ function Get-CommandResult { } } -function Test-IsUbuntu20 { - return (lsb_release -rs) -eq "20.04" -} - function Test-IsUbuntu22 { return (lsb_release -rs) -eq "22.04" } diff --git a/images/ubuntu/scripts/helpers/os.sh b/images/ubuntu/scripts/helpers/os.sh index 6838535df..8699a9d9e 100644 --- a/images/ubuntu/scripts/helpers/os.sh +++ b/images/ubuntu/scripts/helpers/os.sh @@ -4,10 +4,6 @@ ## Desc: Helper functions for OS releases ################################################################################ -is_ubuntu20() { - lsb_release -rs | grep -q '20.04' -} - is_ubuntu22() { lsb_release -rs | grep -q '22.04' } diff --git a/images/ubuntu/scripts/tests/CLI.Tools.Tests.ps1 b/images/ubuntu/scripts/tests/CLI.Tools.Tests.ps1 index 25c5cb1e4..9eb749d6f 100644 --- a/images/ubuntu/scripts/tests/CLI.Tools.Tests.ps1 +++ b/images/ubuntu/scripts/tests/CLI.Tools.Tests.ps1 @@ -10,7 +10,7 @@ Describe "Azure DevOps CLI" { } } -Describe "Aliyun CLI" -Skip:((-not (Test-IsUbuntu20)) -and (-not (Test-IsUbuntu22))) { +Describe "Aliyun CLI" -Skip:((-not (Test-IsUbuntu22))) { It "Aliyun CLI" { "aliyun version" | Should -ReturnZeroExitCode } @@ -42,13 +42,13 @@ Describe "Google Cloud CLI" { } } -Describe "OC CLI" -Skip:((-not (Test-IsUbuntu20)) -and (-not (Test-IsUbuntu22))) { +Describe "OC CLI" -Skip:((-not (Test-IsUbuntu22))) { It "OC CLI" { "oc version" | Should -ReturnZeroExitCode } } -Describe "Oras CLI" -Skip:((-not (Test-IsUbuntu20)) -and (-not (Test-IsUbuntu22))) { +Describe "Oras CLI" -Skip:((-not (Test-IsUbuntu22))) { It "Oras CLI" { "oras version" | Should -ReturnZeroExitCode } diff --git a/images/ubuntu/scripts/tests/Databases.Tests.ps1 b/images/ubuntu/scripts/tests/Databases.Tests.ps1 index 6038824d3..5ae65c41d 100644 --- a/images/ubuntu/scripts/tests/Databases.Tests.ps1 +++ b/images/ubuntu/scripts/tests/Databases.Tests.ps1 @@ -1,13 +1,3 @@ -Describe "MongoDB" -Skip:(-not (Test-IsUbuntu20)) { - It "" -TestCases @( - @{ ToolName = "mongo" } - @{ ToolName = "mongod" } - ) { - $toolsetVersion = (Get-ToolsetContent).mongodb.version - (& $ToolName --version)[2].Split('"')[-2] | Should -BeLike "$toolsetVersion*" - } -} - Describe "PostgreSQL" { It "PostgreSQL Service" { "sudo systemctl start postgresql" | Should -ReturnZeroExitCode diff --git a/images/ubuntu/scripts/tests/Tools.Tests.ps1 b/images/ubuntu/scripts/tests/Tools.Tests.ps1 index 7b3da1346..ef762fbc4 100644 --- a/images/ubuntu/scripts/tests/Tools.Tests.ps1 +++ b/images/ubuntu/scripts/tests/Tools.Tests.ps1 @@ -42,7 +42,7 @@ Describe "Rust" { "cargo --version" | Should -ReturnZeroExitCode } - Context "Cargo dependencies" -Skip:((-not (Test-IsUbuntu20)) -and (-not (Test-IsUbuntu22))) { + Context "Cargo dependencies" -Skip:((-not (Test-IsUbuntu22))) { It "bindgen" { "bindgen --version" | Should -ReturnZeroExitCode } @@ -154,14 +154,6 @@ Describe "Cmake" { } } -Describe "erlang" -Skip:(-not (Test-IsUbuntu20)) { - $testCases = @("erl -version", "erlc -v", "rebar3 -v") | ForEach-Object { @{ErlangCommand = $_} } - - It "erlang " -TestCases $testCases { - "$ErlangCommand" | Should -ReturnZeroExitCode - } -} - Describe "gcc" { $testCases = (Get-ToolsetContent).gcc.Versions | ForEach-Object { @{GccVersion = $_} } @@ -192,25 +184,25 @@ Describe "Mono" -Skip:(Test-IsUbuntu24) { } } -Describe "MSSQLCommandLineTools" -Skip:((-not (Test-IsUbuntu20)) -and (-not (Test-IsUbuntu22))) { +Describe "MSSQLCommandLineTools" -Skip:((-not (Test-IsUbuntu22))) { It "sqlcmd" { "sqlcmd -?" | Should -ReturnZeroExitCode } } -Describe "SqlPackage" -Skip:((-not (Test-IsUbuntu20)) -and (-not (Test-IsUbuntu22))) { +Describe "SqlPackage" -Skip:((-not (Test-IsUbuntu22))) { It "sqlpackage" { "sqlpackage /version" | Should -ReturnZeroExitCode } } -Describe "R" -Skip:((-not (Test-IsUbuntu20)) -and (-not (Test-IsUbuntu22))) { +Describe "R" -Skip:((-not (Test-IsUbuntu22))) { It "r" { "R --version" | Should -ReturnZeroExitCode } } -Describe "Sbt" -Skip:((-not (Test-IsUbuntu20)) -and (-not (Test-IsUbuntu22))) { +Describe "Sbt" -Skip:((-not (Test-IsUbuntu22))) { It "sbt" { "sbt --version" | Should -ReturnZeroExitCode } @@ -223,7 +215,7 @@ Describe "Selenium" { } } -Describe "Terraform" -Skip:((-not (Test-IsUbuntu20)) -and (-not (Test-IsUbuntu22))) { +Describe "Terraform" -Skip:((-not (Test-IsUbuntu22))) { It "terraform" { "terraform --version" | Should -ReturnZeroExitCode } @@ -261,18 +253,12 @@ Describe "Git-lfs" { } } -Describe "Heroku" -Skip:((-not (Test-IsUbuntu20)) -and (-not (Test-IsUbuntu22))) { +Describe "Heroku" -Skip:((-not (Test-IsUbuntu22))) { It "heroku" { "heroku --version" | Should -ReturnZeroExitCode } } -Describe "HHVM" -Skip:(-not (Test-IsUbuntu20)) { - It "hhvm" { - "hhvm --version" | Should -ReturnZeroExitCode - } -} - Describe "Homebrew" { It "homebrew" { "/home/linuxbrew/.linuxbrew/bin/brew --version" | Should -ReturnZeroExitCode @@ -307,7 +293,7 @@ Describe "Kubernetes tools" { } } -Describe "Leiningen" -Skip:((-not (Test-IsUbuntu20)) -and (-not (Test-IsUbuntu22))) { +Describe "Leiningen" -Skip:((-not (Test-IsUbuntu22))) { It "leiningen" { "lein --version" | Should -ReturnZeroExitCode } @@ -331,13 +317,6 @@ Describe "Pulumi" { } } -Describe "Phantomjs" -Skip:(-not (Test-IsUbuntu20)) { - It "phantomjs" { - $env:OPENSSL_CONF="/etc/ssl" - "phantomjs --version" | Should -ReturnZeroExitCode - } -} - Describe "Containers" { $testCases = @("podman", "buildah", "skopeo") | ForEach-Object { @{ContainerCommand = $_} } diff --git a/images/ubuntu/templates/ubuntu-20.04.pkr.hcl b/images/ubuntu/templates/ubuntu-20.04.pkr.hcl deleted file mode 100644 index 2025c727c..000000000 --- a/images/ubuntu/templates/ubuntu-20.04.pkr.hcl +++ /dev/null @@ -1,424 +0,0 @@ -locals { - managed_image_name = var.managed_image_name != "" ? var.managed_image_name : "packer-${var.image_os}-${var.image_version}" -} - -variable "allowed_inbound_ip_addresses" { - type = list(string) - default = [] -} - -variable "azure_tags" { - type = map(string) - default = {} -} - -variable "build_resource_group_name" { - type = string - default = "${env("BUILD_RESOURCE_GROUP_NAME")}" -} - -variable "client_cert_path" { - type = string - default = "${env("ARM_CLIENT_CERT_PATH")}" -} - -variable "client_id" { - type = string - default = "${env("ARM_CLIENT_ID")}" -} - -variable "client_secret" { - type = string - default = "${env("ARM_CLIENT_SECRET")}" - sensitive = true -} - -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" -} - -variable "image_folder" { - type = string - default = "/imagegeneration" -} - -variable "image_os" { - type = string - default = "ubuntu20" -} - -variable "image_version" { - type = string - default = "dev" -} - -variable "imagedata_file" { - type = string - default = "/imagegeneration/imagedata.json" -} - -variable "installer_script_folder" { - type = string - default = "/imagegeneration/installers" -} - -variable "install_password" { - type = string - default = "" - sensitive = true -} - -variable "location" { - type = string - default = "${env("ARM_RESOURCE_LOCATION")}" -} - -variable "managed_image_name" { - type = string - default = "" -} - -variable "managed_image_resource_group_name" { - type = string - default = "${env("ARM_RESOURCE_GROUP")}" -} - -variable "private_virtual_network_with_public_ip" { - type = bool - default = false -} - -variable "subscription_id" { - type = string - default = "${env("ARM_SUBSCRIPTION_ID")}" -} - -variable "temp_resource_group_name" { - type = string - default = "${env("TEMP_RESOURCE_GROUP_NAME")}" -} - -variable "tenant_id" { - type = string - default = "${env("ARM_TENANT_ID")}" -} - -variable "virtual_network_name" { - type = string - default = "${env("VNET_NAME")}" -} - -variable "virtual_network_resource_group_name" { - type = string - default = "${env("VNET_RESOURCE_GROUP")}" -} - -variable "virtual_network_subnet_name" { - type = string - default = "${env("VNET_SUBNET")}" -} - -variable "vm_size" { - type = string - default = "Standard_D4s_v4" -} - -source "azure-arm" "build_image" { - allowed_inbound_ip_addresses = "${var.allowed_inbound_ip_addresses}" - build_resource_group_name = "${var.build_resource_group_name}" - client_cert_path = "${var.client_cert_path}" - client_id = "${var.client_id}" - client_secret = "${var.client_secret}" - image_offer = "0001-com-ubuntu-server-focal" - image_publisher = "canonical" - image_sku = "20_04-lts" - location = "${var.location}" - managed_image_name = "${local.managed_image_name}" - managed_image_resource_group_name = "${var.managed_image_resource_group_name}" - os_disk_size_gb = "75" - os_type = "Linux" - private_virtual_network_with_public_ip = "${var.private_virtual_network_with_public_ip}" - subscription_id = "${var.subscription_id}" - temp_resource_group_name = "${var.temp_resource_group_name}" - tenant_id = "${var.tenant_id}" - virtual_network_name = "${var.virtual_network_name}" - virtual_network_resource_group_name = "${var.virtual_network_resource_group_name}" - virtual_network_subnet_name = "${var.virtual_network_subnet_name}" - vm_size = "${var.vm_size}" - - dynamic "azure_tag" { - for_each = var.azure_tags - content { - name = azure_tag.key - value = azure_tag.value - } - } -} - -build { - sources = ["source.azure-arm.build_image"] - - provisioner "shell" { - execute_command = "sudo sh -c '{{ .Vars }} {{ .Path }}'" - inline = ["mkdir ${var.image_folder}", "chmod 777 ${var.image_folder}"] - } - - provisioner "file" { - destination = "${var.helper_script_folder}" - source = "${path.root}/../scripts/helpers" - } - - provisioner "shell" { - execute_command = "sudo sh -c '{{ .Vars }} {{ .Path }}'" - script = "${path.root}/../scripts/build/configure-apt-mock.sh" - } - - provisioner "shell" { - environment_vars = ["HELPER_SCRIPTS=${var.helper_script_folder}","DEBIAN_FRONTEND=noninteractive"] - execute_command = "sudo sh -c '{{ .Vars }} {{ .Path }}'" - scripts = [ - "${path.root}/../scripts/build/install-ms-repos.sh", - "${path.root}/../scripts/build/configure-apt-sources.sh", - "${path.root}/../scripts/build/configure-apt.sh" - ] - } - - provisioner "shell" { - execute_command = "sudo sh -c '{{ .Vars }} {{ .Path }}'" - script = "${path.root}/../scripts/build/configure-limits.sh" - } - - provisioner "file" { - destination = "${var.installer_script_folder}" - source = "${path.root}/../scripts/build" - } - - provisioner "file" { - destination = "${var.image_folder}" - sources = [ - "${path.root}/../assets/post-gen", - "${path.root}/../scripts/tests", - "${path.root}/../scripts/docs-gen" - ] - } - - provisioner "file" { - destination = "${var.image_folder}/docs-gen/" - source = "${path.root}/../../../helpers/software-report-base" - } - - provisioner "file" { - destination = "${var.installer_script_folder}/toolset.json" - source = "${path.root}/../toolsets/toolset-2004.json" - } - - provisioner "shell" { - execute_command = "sudo sh -c '{{ .Vars }} {{ .Path }}'" - inline = [ - "mv ${var.image_folder}/docs-gen ${var.image_folder}/SoftwareReport", - "mv ${var.image_folder}/post-gen ${var.image_folder}/post-generation" - ] - } - - provisioner "shell" { - environment_vars = ["IMAGE_VERSION=${var.image_version}", "IMAGEDATA_FILE=${var.imagedata_file}"] - execute_command = "sudo sh -c '{{ .Vars }} {{ .Path }}'" - scripts = ["${path.root}/../scripts/build/configure-image-data.sh"] - } - - provisioner "shell" { - environment_vars = ["IMAGE_VERSION=${var.image_version}", "IMAGE_OS=${var.image_os}", "HELPER_SCRIPTS=${var.helper_script_folder}"] - execute_command = "sudo sh -c '{{ .Vars }} {{ .Path }}'" - scripts = ["${path.root}/../scripts/build/configure-environment.sh"] - } - - provisioner "shell" { - environment_vars = ["DEBIAN_FRONTEND=noninteractive", "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-apt-vital.sh"] - } - - provisioner "shell" { - 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-powershell.sh"] - } - - provisioner "shell" { - environment_vars = ["HELPER_SCRIPTS=${var.helper_script_folder}", "INSTALLER_SCRIPT_FOLDER=${var.installer_script_folder}"] - execute_command = "sudo sh -c '{{ .Vars }} pwsh -f {{ .Path }}'" - scripts = ["${path.root}/../scripts/build/Install-PowerShellModules.ps1", "${path.root}/../scripts/build/Install-PowerShellAzModules.ps1"] - } - - provisioner "shell" { - environment_vars = ["HELPER_SCRIPTS=${var.helper_script_folder}", "INSTALLER_SCRIPT_FOLDER=${var.installer_script_folder}", "DEBIAN_FRONTEND=noninteractive"] - 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", - "${path.root}/../scripts/build/install-azure-devops-cli.sh", - "${path.root}/../scripts/build/install-bicep.sh", - "${path.root}/../scripts/build/install-aliyun-cli.sh", - "${path.root}/../scripts/build/install-apache.sh", - "${path.root}/../scripts/build/install-aws-tools.sh", - "${path.root}/../scripts/build/install-clang.sh", - "${path.root}/../scripts/build/install-swift.sh", - "${path.root}/../scripts/build/install-cmake.sh", - "${path.root}/../scripts/build/install-codeql-bundle.sh", - "${path.root}/../scripts/build/install-container-tools.sh", - "${path.root}/../scripts/build/install-dotnetcore-sdk.sh", - "${path.root}/../scripts/build/install-erlang.sh", - "${path.root}/../scripts/build/install-firefox.sh", - "${path.root}/../scripts/build/install-microsoft-edge.sh", - "${path.root}/../scripts/build/install-gcc-compilers.sh", - "${path.root}/../scripts/build/install-gfortran.sh", - "${path.root}/../scripts/build/install-git.sh", - "${path.root}/../scripts/build/install-git-lfs.sh", - "${path.root}/../scripts/build/install-github-cli.sh", - "${path.root}/../scripts/build/install-google-chrome.sh", - "${path.root}/../scripts/build/install-google-cloud-cli.sh", - "${path.root}/../scripts/build/install-haskell.sh", - "${path.root}/../scripts/build/install-heroku.sh", - "${path.root}/../scripts/build/install-hhvm.sh", - "${path.root}/../scripts/build/install-java-tools.sh", - "${path.root}/../scripts/build/install-kubernetes-tools.sh", - "${path.root}/../scripts/build/install-oc-cli.sh", - "${path.root}/../scripts/build/install-leiningen.sh", - "${path.root}/../scripts/build/install-miniconda.sh", - "${path.root}/../scripts/build/install-mono.sh", - "${path.root}/../scripts/build/install-kotlin.sh", - "${path.root}/../scripts/build/install-mysql.sh", - "${path.root}/../scripts/build/install-mssql-tools.sh", - "${path.root}/../scripts/build/install-sqlpackage.sh", - "${path.root}/../scripts/build/install-nginx.sh", - "${path.root}/../scripts/build/install-nvm.sh", - "${path.root}/../scripts/build/install-nodejs.sh", - "${path.root}/../scripts/build/install-bazel.sh", - "${path.root}/../scripts/build/install-oras-cli.sh", - "${path.root}/../scripts/build/install-phantomjs.sh", - "${path.root}/../scripts/build/install-php.sh", - "${path.root}/../scripts/build/install-postgresql.sh", - "${path.root}/../scripts/build/install-pulumi.sh", - "${path.root}/../scripts/build/install-ruby.sh", - "${path.root}/../scripts/build/install-rlang.sh", - "${path.root}/../scripts/build/install-rust.sh", - "${path.root}/../scripts/build/install-julia.sh", - "${path.root}/../scripts/build/install-sbt.sh", - "${path.root}/../scripts/build/install-selenium.sh", - "${path.root}/../scripts/build/install-terraform.sh", - "${path.root}/../scripts/build/install-packer.sh", - "${path.root}/../scripts/build/install-vcpkg.sh", - "${path.root}/../scripts/build/configure-dpkg.sh", - "${path.root}/../scripts/build/install-mongodb.sh", - "${path.root}/../scripts/build/install-yq.sh", - "${path.root}/../scripts/build/install-android-sdk.sh", - "${path.root}/../scripts/build/install-pypy.sh", - "${path.root}/../scripts/build/install-python.sh", - "${path.root}/../scripts/build/install-zstd.sh", - "${path.root}/../scripts/build/install-ninja.sh" - ] - } - - 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}"] - execute_command = "sudo sh -c '{{ .Vars }} {{ .Path }}'" - scripts = ["${path.root}/../scripts/build/install-docker.sh"] - } - - provisioner "shell" { - environment_vars = ["HELPER_SCRIPTS=${var.helper_script_folder}", "INSTALLER_SCRIPT_FOLDER=${var.installer_script_folder}"] - execute_command = "sudo sh -c '{{ .Vars }} pwsh -f {{ .Path }}'" - scripts = ["${path.root}/../scripts/build/Install-Toolset.ps1", "${path.root}/../scripts/build/Configure-Toolset.ps1"] - } - - provisioner "shell" { - 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-pipx-packages.sh"] - } - - provisioner "shell" { - environment_vars = ["HELPER_SCRIPTS=${var.helper_script_folder}", "DEBIAN_FRONTEND=noninteractive", "INSTALLER_SCRIPT_FOLDER=${var.installer_script_folder}"] - execute_command = "/bin/sh -c '{{ .Vars }} {{ .Path }}'" - scripts = ["${path.root}/../scripts/build/install-homebrew.sh"] - } - - provisioner "shell" { - environment_vars = ["HELPER_SCRIPTS=${var.helper_script_folder}"] - execute_command = "sudo sh -c '{{ .Vars }} {{ .Path }}'" - scripts = ["${path.root}/../scripts/build/configure-snap.sh"] - } - - provisioner "shell" { - execute_command = "sudo sh -c '{{ .Vars }} {{ .Path }}'" - expect_disconnect = true - inline = ["echo 'Reboot VM'", "sudo reboot"] - } - - provisioner "shell" { - execute_command = "sudo sh -c '{{ .Vars }} {{ .Path }}'" - pause_before = "1m0s" - scripts = ["${path.root}/../scripts/build/cleanup.sh"] - start_retry_timeout = "10m" - } - - provisioner "shell" { - environment_vars = ["IMAGE_VERSION=${var.image_version}", "INSTALLER_SCRIPT_FOLDER=${var.installer_script_folder}"] - inline = [ - "pwsh -Command Write-Host Running Generate-SoftwareReport.ps1 script", - "pwsh -File ${var.image_folder}/SoftwareReport/Generate-SoftwareReport.ps1 -OutputDirectory ${var.image_folder}", - "pwsh -Command Write-Host Running RunAll-Tests.ps1 script", - "pwsh -File ${var.image_folder}/tests/RunAll-Tests.ps1 -OutputDirectory ${var.image_folder}" - ] - max_retries = "3" - start_retry_timeout = "2m" - } - - provisioner "file" { - destination = "${path.root}/../Ubuntu2004-Readme.md" - direction = "download" - source = "${var.image_folder}/software-report.md" - } - - provisioner "file" { - destination = "${path.root}/../software-report.json" - direction = "download" - source = "${var.image_folder}/software-report.json" - } - - provisioner "shell" { - environment_vars = ["HELPER_SCRIPT_FOLDER=${var.helper_script_folder}", "INSTALLER_SCRIPT_FOLDER=${var.installer_script_folder}", "IMAGE_FOLDER=${var.image_folder}"] - execute_command = "sudo sh -c '{{ .Vars }} {{ .Path }}'" - scripts = ["${path.root}/../scripts/build/configure-system.sh"] - } - - provisioner "file" { - destination = "/tmp/" - source = "${path.root}/../assets/ubuntu2004.conf" - } - - provisioner "shell" { - execute_command = "sudo sh -c '{{ .Vars }} {{ .Path }}'" - inline = ["mkdir -p /etc/vsts", "cp /tmp/ubuntu2004.conf /etc/vsts/machine_instance.conf"] - } - - provisioner "shell" { - execute_command = "sudo sh -c '{{ .Vars }} {{ .Path }}'" - inline = ["sleep 30", "/usr/sbin/waagent -force -deprovision+user && export HISTSIZE=0 && sync"] - } - -} diff --git a/images/ubuntu/toolsets/toolset-2004.json b/images/ubuntu/toolsets/toolset-2004.json deleted file mode 100644 index 5cc94cee6..000000000 --- a/images/ubuntu/toolsets/toolset-2004.json +++ /dev/null @@ -1,401 +0,0 @@ -{ - "toolcache": [ - { - "name": "Python", - "url" : "https://raw.githubusercontent.com/actions/python-versions/main/versions-manifest.json", - "platform" : "linux", - "platform_version": "20.04", - "arch": "x64", - "versions": [ - "3.8.*", - "3.9.*", - "3.10.*", - "3.11.*", - "3.12.*", - "3.13.*" - ] - }, - { - "name": "PyPy", - "arch": "x64", - "platform" : "linux", - "versions": [ - "2.7", - "3.6", - "3.7", - "3.8", - "3.9", - "3.10" - ] - }, - { - "name": "node", - "url" : "https://raw.githubusercontent.com/actions/node-versions/main/versions-manifest.json", - "platform" : "linux", - "arch": "x64", - "versions": [ - "18.*", - "20.*", - "22.*" - ] - }, - { - "name": "go", - "url" : "https://raw.githubusercontent.com/actions/go-versions/main/versions-manifest.json", - "arch": "x64", - "platform" : "linux", - "versions": [ - "1.21.*", - "1.22.*", - "1.23.*" - ], - "default": "1.23.*" - }, - { - "name": "Ruby", - "platform_version": "20.04", - "arch": "x64", - "versions": [ - "3.0.*", - "3.1.*", - "3.2.*", - "3.3.*" - ] - }, - { - "name": "CodeQL", - "platform" : "linux", - "arch": "x64", - "versions": [ - "*" - ] - } - ], - "java": { - "default": "11", - "versions": [ "8", "11", "17", "21"], - "maven": "3.9.9" - }, - "android": { - "cmdline-tools": "commandlinetools-linux-9477386_latest.zip", - "platform_min_version": "31", - "build_tools_min_version": "31.0.0", - "extra_list": [ - "android;m2repository", - "google;m2repository", - "google;google_play_services" - ], - "addon_list": [ - ], - "additional_tools": [ - "cmake;3.18.1", - "cmake;3.22.1", - "cmake;3.31.5" - ], - "ndk": { - "default": "27", - "versions": [ - "26", "27" - ] - } - }, - "powershellModules": [ - {"name": "MarkdownPS"}, - {"name": "Microsoft.Graph"}, - {"name": "Pester"}, - {"name": "PSScriptAnalyzer"} - ], - "azureModules": [ - { - "name": "az", - "versions": [ - "12.1.0" - ] - } - ], - "apt": { - "vital_packages": [ - "bzip2", - "curl", - "g++", - "gcc", - "make", - "jq", - "tar", - "unzip", - "wget" - ], - "common_packages": [ - "autoconf", - "automake", - "dbus", - "dnsutils", - "dpkg", - "dpkg-dev", - "fakeroot", - "fonts-noto-color-emoji", - "gnupg2", - "imagemagick", - "iproute2", - "iputils-ping", - "lib32z1", - "libc++abi-dev", - "libc++-dev", - "libc6-dev", - "libcurl4", - "libgbm-dev", - "libgconf-2-4", - "libgsl-dev", - "libgtk-3-0", - "libmagic-dev", - "libmagickcore-dev", - "libmagickwand-dev", - "libsecret-1-dev", - "libsqlite3-dev", - "libyaml-dev", - "libtool", - "libunwind8", - "libxkbfile-dev", - "libxss1", - "locales", - "mercurial", - "openssh-client", - "p7zip-rar", - "pkg-config", - "python-is-python3", - "rpm", - "texinfo", - "tk", - "tzdata", - "upx", - "xorriso", - "xvfb", - "xz-utils", - "zsync" - ], - "cmd_packages": [ - "acl", - "aria2", - "binutils", - "bison", - "brotli", - "coreutils", - "file", - "findutils", - "flex", - "ftp", - "haveged", - "m4", - "mediainfo", - "netcat", - "net-tools", - "p7zip-full", - "parallel", - "pass", - "patchelf", - "pigz", - "pollinate", - "rsync", - "shellcheck", - "sphinxsearch", - "sqlite3", - "ssh", - "sshpass", - "subversion", - "sudo", - "systemd-coredump", - "swig", - "telnet", - "time", - "zip" - ] - }, - "brew": [ - ], - "docker": { - "images": [ - "alpine:3.16", - "alpine:3.17", - "alpine:3.18", - "alpine:3.19", - "debian:9", - "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" - ], - "components": [ - { - "package": "containerd.io", - "version": "latest" - }, - { - "package": "docker-ce-cli", - "version": "26.1.3" - }, - { - "package": "docker-ce", - "version": "26.1.3" - } - ], - "plugins": [ - { - "plugin": "buildx", - "version": "latest", - "asset": "linux-amd64" - }, - { - "plugin": "compose", - "version": "2.27.1", - "asset": "linux-x86_64" - } - ] - }, - "pipx": [ - { - "package": "yamllint", - "cmd": "yamllint" - }, - { - "package": "ansible-core", - "cmd": "ansible" - } - ], - "dotnet": { - "aptPackages": [ - "dotnet-sdk-6.0", - "dotnet-sdk-8.0", - "dotnet-sdk-9.0" - ], - "versions": [ - "6.0", - "8.0", - "9.0" - ], - "tools": [ - { "name": "nbgv", "test": "nbgv --version", "getversion" : "nbgv --version" } - ] - }, - "clang": { - "versions": [ - "10", - "11", - "12" - ], - "default_version": "11" - }, - "gcc": { - "versions": [ - "g++-9", - "g++-10" - ] - }, - "gfortran": { - "versions": [ - "gfortran-9", - "gfortran-10" - ] - }, - "php": { - "versions": [ - "7.4", - "8.0", - "8.1", - "8.2", - "8.3" - ] - }, - "rubygems": [ - {"name": "fastlane"} - ], - "selenium": { - "version": "4" - }, - "node": { - "default": "18" - }, - "node_modules": [ - { - "name": "grunt", - "command": "grunt" - }, - { - "name": "gulp", - "command": "gulp" - }, - { - "name": "n", - "command": "n" - }, - { - "name": "parcel", - "command": "parcel" - }, - { - "name": "typescript", - "command": "tsc" - }, - { - "name": "newman", - "command": "newman" - }, - { - "name": "vercel", - "command": "vercel" - }, - { - "name": "webpack", - "command": "webpack" - }, - { - "name": "webpack-cli", - "command": "webpack-cli" - }, - { - "name": "netlify-cli", - "command": "netlify" - }, - { - "name": "lerna", - "command": "lerna" - }, - { - "name": "yarn", - "command": "yarn" - } - ], - "mongodb": { - "version": "5.0" - }, - "postgresql": { - "version": "14" - }, - "pwsh": { - "version": "7.4" - }, - "aliyunCli": { - "version": "3.0.174", - "sha256": "0c51028a7a32fc02c8de855f73e273556f957115eb5624565738f9b9f83a50ba", - "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" - } - }, - "ocCli": { - "version": "4.15.19", - "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" - } - } -}