diff --git a/.github/workflows/linter.yml b/.github/workflows/linter.yml new file mode 100644 index 000000000..42eb7cad8 --- /dev/null +++ b/.github/workflows/linter.yml @@ -0,0 +1,25 @@ +# CI Validation + +name: CI + +on: + pull_request: + branches: [$default-branch] + +jobs: + build: + name: Lint JSON & MD files + runs-on: ubuntu-latest + + steps: + - name: Checkout Code + uses: actions/checkout@v2 + + - name: Lint Code Base + uses: github/super-linter@v3 + env: + VALIDATE_ALL_CODEBASE: false + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + VALIDATE_JSON: true + VALIDATE_MD: true + DEFAULT_BRANCH: ${{ github.base_ref }} diff --git a/helpers/GenerateResourcesAndImage.ps1 b/helpers/GenerateResourcesAndImage.ps1 index 31d48ee65..9718bc35a 100644 --- a/helpers/GenerateResourcesAndImage.ps1 +++ b/helpers/GenerateResourcesAndImage.ps1 @@ -167,7 +167,9 @@ Function GenerateResourcesAndImage { New-AzStorageAccount -ResourceGroupName $ResourceGroupName -AccountName $storageAccountName -Location $AzureLocation -SkuName "Standard_LRS" $spDisplayName = [System.GUID]::NewGuid().ToString().ToUpper() - $sp = New-AzADServicePrincipal -DisplayName $spDisplayName -Password (ConvertTo-SecureString $ServicePrincipalClientSecret -AsPlainText -Force) + $credentialProperties = @{ StartDate=Get-Date; EndDate=Get-Date -Year 2024; Password=$ServicePrincipalClientSecret } + $credentials = New-Object -TypeName Microsoft.Azure.Commands.ActiveDirectory.PSADPasswordCredential -Property $credentialProperties + $sp = New-AzADServicePrincipal -DisplayName $spDisplayName -PasswordCredential $credentials $spAppId = $sp.ApplicationId $spClientId = $sp.ApplicationId diff --git a/images/linux/scripts/SoftwareReport/SoftwareReport.Common.psm1 b/images/linux/scripts/SoftwareReport/SoftwareReport.Common.psm1 index 64a9d1c3f..c9257407f 100644 --- a/images/linux/scripts/SoftwareReport/SoftwareReport.Common.psm1 +++ b/images/linux/scripts/SoftwareReport/SoftwareReport.Common.psm1 @@ -6,9 +6,8 @@ function Get-OSName { function Get-CPPVersions { $cppVersions = apt list --installed 2>&1 | Where-Object { $_ -match "g\+\+-\d+"} | ForEach-Object { - $_ -match "now (?\d+\.\d+\.\d+)-" | Out-Null - $Matches.version - } + & $_.Split("/")[0] --version | Select-Object -First 1 | Take-OutputPart -Part 3 + } | Sort-Object {[Version]$_} return "GNU C++ " + ($cppVersions -Join ", ") } @@ -16,7 +15,7 @@ function Get-FortranVersions { $fortranVersions = apt list --installed 2>&1 | Where-Object { $_ -match "^gfortran-\d+"} | ForEach-Object { $_ -match "now (?\d+\.\d+\.\d+)-" | Out-Null $Matches.version - } + } | Sort-Object {[Version]$_} return "GNU Fortran " + ($fortranVersions -Join ", ") } @@ -28,7 +27,7 @@ function Get-ClangVersions { $_ -match "clang version (?\d+\.\d+\.\d+)-" | Out-Null $Matches.version } - } + } | Sort-Object {[Version]$_} return "Clang " + ($clangVersions -Join ", ") } diff --git a/images/linux/scripts/SoftwareReport/SoftwareReport.Tools.psm1 b/images/linux/scripts/SoftwareReport/SoftwareReport.Tools.psm1 index d1984b2ac..915f857fd 100644 --- a/images/linux/scripts/SoftwareReport/SoftwareReport.Tools.psm1 +++ b/images/linux/scripts/SoftwareReport/SoftwareReport.Tools.psm1 @@ -29,7 +29,7 @@ function Get-BazeliskVersion { } function Get-CodeQLBundleVersion { - $CodeQLVersionsWildcard = Join-Path $Env:AGENT_TOOLSDIRECTORY -ChildPath "codeql" | Join-Path -ChildPath "*" + $CodeQLVersionsWildcard = Join-Path $Env:AGENT_TOOLSDIRECTORY -ChildPath "CodeQL" | Join-Path -ChildPath "*" $CodeQLVersionPath = Get-ChildItem $CodeQLVersionsWildcard | Select-Object -First 1 -Expand FullName $CodeQLPath = Join-Path $CodeQLVersionPath -ChildPath "x64" | Join-Path -ChildPath "codeql" | Join-Path -ChildPath "codeql" $CodeQLVersion = & $CodeQLPath version --quiet diff --git a/images/linux/scripts/installers/clang.sh b/images/linux/scripts/installers/clang.sh index c81cfd2a3..4a3424fd4 100644 --- a/images/linux/scripts/installers/clang.sh +++ b/images/linux/scripts/installers/clang.sh @@ -12,7 +12,7 @@ function InstallClang { local version=$1 echo "Installing clang-$version..." - if [[ $version =~ (9|10) ]]; then + if [[ $version =~ 9 ]] && isUbuntu16; then ./llvm.sh $version apt-get install -y "clang-format-$version" else diff --git a/images/linux/scripts/installers/gcc.sh b/images/linux/scripts/installers/gcc.sh index 7b1bd56ea..b59eae7f6 100644 --- a/images/linux/scripts/installers/gcc.sh +++ b/images/linux/scripts/installers/gcc.sh @@ -4,6 +4,10 @@ ## Desc: Installs GNU C++ ################################################################################ +set -e + +# Source the helpers for use with the script +source $HELPER_SCRIPTS/os.sh function InstallGcc { version=$1 @@ -29,7 +33,10 @@ versions=( "g++-9" ) -for version in ${versions[*]} -do +if ! isUbuntu16; then + versions+=("g++-10") +fi + +for version in ${versions[*]}; do InstallGcc $version done diff --git a/images/linux/scripts/installers/python.sh b/images/linux/scripts/installers/python.sh index 3f6361e16..470417783 100644 --- a/images/linux/scripts/installers/python.sh +++ b/images/linux/scripts/installers/python.sh @@ -4,19 +4,18 @@ ## Desc: Installs Python 2/3 ################################################################################ +set -e # Source the helpers for use with the script source $HELPER_SCRIPTS/os.sh # Install Python, Python 3, pip, pip3 -if isUbuntu20 ; then - apt-get install -y --no-install-recommends python3 python3-dev python3-pip - - curl https://bootstrap.pypa.io/get-pip.py --output get-pip.py - python2 get-pip.py +if isUbuntu16 || isUbuntu18; then + apt-get install -y --no-install-recommends python python-dev python-pip python3 python3-dev python3-pip fi -if isUbuntu16 || isUbuntu18 ; then - apt-get install -y --no-install-recommends python python-dev python-pip python3 python3-dev python3-pip +if isUbuntu20; then + apt-get install -y --no-install-recommends python3 python3-dev python3-pip + ln -s /usr/bin/pip3 /usr/bin/pip fi # Run tests to determine that the software installed as expected diff --git a/images/linux/toolsets/toolset-1604.json b/images/linux/toolsets/toolset-1604.json index c8b2b1510..46aad66ad 100644 --- a/images/linux/toolsets/toolset-1604.json +++ b/images/linux/toolsets/toolset-1604.json @@ -109,7 +109,8 @@ "3.8.0", "4.3.0", "4.4.0", - "4.6.0" + "4.6.0", + "4.7.0" ] } ], diff --git a/images/linux/toolsets/toolset-1804.json b/images/linux/toolsets/toolset-1804.json index 6311cc1a1..2670b4cf3 100644 --- a/images/linux/toolsets/toolset-1804.json +++ b/images/linux/toolsets/toolset-1804.json @@ -105,7 +105,8 @@ "3.8.0", "4.3.0", "4.4.0", - "4.6.0" + "4.6.0", + "4.7.0" ] } ], diff --git a/images/linux/toolsets/toolset-2004.json b/images/linux/toolsets/toolset-2004.json index 5ac230255..7c704263b 100644 --- a/images/linux/toolsets/toolset-2004.json +++ b/images/linux/toolsets/toolset-2004.json @@ -96,7 +96,7 @@ "locales", "openssh-client", "pkg-config", - "python-is-python2", + "python-is-python3", "rpm", "texinfo", "tk", diff --git a/images/linux/ubuntu1604.json b/images/linux/ubuntu1604.json index e770f2f08..8a4255ec7 100644 --- a/images/linux/ubuntu1604.json +++ b/images/linux/ubuntu1604.json @@ -24,7 +24,10 @@ "run_validation_diskspace": "false", "announcements": "{{env `ANNOUNCEMENTS`}}" }, - "sensitive-variables": ["client_secret", "github_feed_token"], + "sensitive-variables": [ + "client_secret", + "github_feed_token" + ], "builders": [ { "type": "azure-arm", @@ -32,7 +35,6 @@ "client_secret": "{{user `client_secret`}}", "subscription_id": "{{user `subscription_id`}}", "tenant_id": "{{user `tenant_id`}}", - "location": "{{user `location`}}", "vm_size": "{{user `vm_size`}}", "resource_group_name": "{{user `resource_group`}}", @@ -62,7 +64,7 @@ }, { "type": "shell", - "scripts":[ + "scripts": [ "{{template_dir}}/scripts/base/repos.sh" ], "execute_command": "sudo sh -c '{{ .Vars }} {{ .Path }}'" @@ -104,7 +106,7 @@ }, { "type": "shell", - "scripts":[ + "scripts": [ "{{template_dir}}/scripts/installers/preimagedata.sh" ], "environment_vars": [ @@ -218,7 +220,7 @@ }, { "type": "shell", - "scripts":[ + "scripts": [ "{{template_dir}}/scripts/installers/Install-Toolset.ps1", "{{template_dir}}/scripts/installers/Configure-Toolset.ps1", "{{template_dir}}/scripts/installers/Validate-Toolset.ps1" @@ -270,14 +272,14 @@ }, { "type": "shell", - "scripts":[ + "scripts": [ "{{template_dir}}/scripts/installers/cleanup.sh" ], "execute_command": "sudo sh -c '{{ .Vars }} {{ .Path }}'" }, { "type": "shell", - "scripts":[ + "scripts": [ "{{template_dir}}/scripts/installers/Install-PowerShellModules.ps1" ], "environment_vars": [ @@ -290,7 +292,7 @@ "inline": [ "pwsh -File {{user `image_folder`}}/SoftwareReport/SoftwareReport.Generator.ps1 -OutputDirectory {{user `image_folder`}}" ], - "environment_vars":[ + "environment_vars": [ "IMAGE_VERSION={{user `image_version`}}", "INSTALLER_SCRIPT_FOLDER={{user `installer_script_folder`}}", "ANNOUNCEMENTS={{user `announcements`}}" @@ -316,7 +318,7 @@ }, { "type": "shell", - "scripts":[ + "scripts": [ "{{template_dir}}/scripts/installers/validate-disk-space.sh" ], "environment_vars": [ diff --git a/images/linux/ubuntu1804.json b/images/linux/ubuntu1804.json index 7dcb51df1..12ef6d0c0 100644 --- a/images/linux/ubuntu1804.json +++ b/images/linux/ubuntu1804.json @@ -24,7 +24,10 @@ "run_validation_diskspace": "false", "announcements": "{{env `ANNOUNCEMENTS`}}" }, - "sensitive-variables": ["client_secret", "github_feed_token"], + "sensitive-variables": [ + "client_secret", + "github_feed_token" + ], "builders": [ { "type": "azure-arm", @@ -32,7 +35,6 @@ "client_secret": "{{user `client_secret`}}", "subscription_id": "{{user `subscription_id`}}", "tenant_id": "{{user `tenant_id`}}", - "location": "{{user `location`}}", "vm_size": "{{user `vm_size`}}", "resource_group_name": "{{user `resource_group`}}", @@ -62,7 +64,7 @@ }, { "type": "shell", - "scripts":[ + "scripts": [ "{{template_dir}}/scripts/base/repos.sh" ], "environment_vars": [ @@ -107,7 +109,7 @@ }, { "type": "shell", - "scripts":[ + "scripts": [ "{{template_dir}}/scripts/installers/preimagedata.sh" ], "environment_vars": [ @@ -222,7 +224,7 @@ }, { "type": "shell", - "scripts":[ + "scripts": [ "{{template_dir}}/scripts/installers/Install-Toolset.ps1", "{{template_dir}}/scripts/installers/Configure-Toolset.ps1", "{{template_dir}}/scripts/installers/Validate-Toolset.ps1" @@ -274,14 +276,14 @@ }, { "type": "shell", - "scripts":[ + "scripts": [ "{{template_dir}}/scripts/installers/cleanup.sh" ], "execute_command": "sudo sh -c '{{ .Vars }} {{ .Path }}'" }, { "type": "shell", - "scripts":[ + "scripts": [ "{{template_dir}}/scripts/installers/Install-PowerShellModules.ps1" ], "environment_vars": [ @@ -294,7 +296,7 @@ "inline": [ "pwsh -File {{user `image_folder`}}/SoftwareReport/SoftwareReport.Generator.ps1 -OutputDirectory {{user `image_folder`}}" ], - "environment_vars":[ + "environment_vars": [ "IMAGE_VERSION={{user `image_version`}}", "INSTALLER_SCRIPT_FOLDER={{user `installer_script_folder`}}", "ANNOUNCEMENTS={{user `announcements`}}" @@ -320,7 +322,7 @@ }, { "type": "shell", - "scripts":[ + "scripts": [ "{{template_dir}}/scripts/installers/validate-disk-space.sh" ], "environment_vars": [ diff --git a/images/linux/ubuntu2004.json b/images/linux/ubuntu2004.json index 335144f0c..24c1f17e9 100644 --- a/images/linux/ubuntu2004.json +++ b/images/linux/ubuntu2004.json @@ -26,7 +26,10 @@ "go_versions": "1.14", "announcements": "{{env `ANNOUNCEMENTS`}}" }, - "sensitive-variables": ["client_secret", "github_feed_token"], + "sensitive-variables": [ + "client_secret", + "github_feed_token" + ], "builders": [ { "type": "azure-arm", @@ -34,7 +37,6 @@ "client_secret": "{{user `client_secret`}}", "subscription_id": "{{user `subscription_id`}}", "tenant_id": "{{user `tenant_id`}}", - "location": "{{user `location`}}", "vm_size": "{{user `vm_size`}}", "resource_group_name": "{{user `resource_group`}}", @@ -64,7 +66,7 @@ }, { "type": "shell", - "scripts":[ + "scripts": [ "{{template_dir}}/scripts/base/repos.sh" ], "environment_vars": [ @@ -109,7 +111,7 @@ }, { "type": "shell", - "scripts":[ + "scripts": [ "{{template_dir}}/scripts/installers/preimagedata.sh" ], "environment_vars": [ @@ -224,7 +226,7 @@ }, { "type": "shell", - "scripts":[ + "scripts": [ "{{template_dir}}/scripts/installers/Install-Toolset.ps1", "{{template_dir}}/scripts/installers/Configure-Toolset.ps1", "{{template_dir}}/scripts/installers/Validate-Toolset.ps1" @@ -276,14 +278,14 @@ }, { "type": "shell", - "scripts":[ + "scripts": [ "{{template_dir}}/scripts/installers/cleanup.sh" ], "execute_command": "sudo sh -c '{{ .Vars }} {{ .Path }}'" }, { "type": "shell", - "scripts":[ + "scripts": [ "{{template_dir}}/scripts/installers/Install-PowerShellModules.ps1" ], "environment_vars": [ @@ -296,7 +298,7 @@ "inline": [ "pwsh -File {{user `image_folder`}}/SoftwareReport/SoftwareReport.Generator.ps1 -OutputDirectory {{user `image_folder`}}" ], - "environment_vars":[ + "environment_vars": [ "IMAGE_VERSION={{user `image_version`}}", "INSTALLER_SCRIPT_FOLDER={{user `installer_script_folder`}}", "ANNOUNCEMENTS={{user `announcements`}}" diff --git a/images/macos/helpers/Xcode.Helpers.psm1 b/images/macos/helpers/Xcode.Helpers.psm1 index dbc4803c2..8ea137e63 100644 --- a/images/macos/helpers/Xcode.Helpers.psm1 +++ b/images/macos/helpers/Xcode.Helpers.psm1 @@ -45,6 +45,17 @@ function Switch-Xcode { Invoke-Expression "sudo xcode-select --switch ${XcodeRootPath}" } +function Test-XcodeStableRelease { + param( + [Parameter(Mandatory)] + [string] $XcodeRootPath + ) + + $licenseInfoPlistPath = Join-Path $XcodeRootPath "Contents" "Resources" "LicenseInfo.plist" + $releaseType = & defaults read $licenseInfoPlistPath "licenseType" + return -not ($releaseType -match "beta") +} + function Get-XcodeSimulatorsInfo { param( [string] $Filter @@ -102,6 +113,6 @@ function Test-XcodeStableVersion { if ($Version -match "GM") { return $false } - + return $true } \ No newline at end of file diff --git a/images/macos/macos-10.15-Readme.md b/images/macos/macos-10.15-Readme.md index 26492d8e6..af4024fc6 100644 --- a/images/macos/macos-10.15-Readme.md +++ b/images/macos/macos-10.15-Readme.md @@ -1,15 +1,15 @@ # macOS 10.15 info - System Version: macOS 10.15.6 (19G2021) - Kernel Version: Darwin 19.6.0 -- Image Version: 20200916.1 +- Image Version: 20200918.1 ## Installed Software ### Language and Runtime - Clang/LLVM 10.0.1 -- gcc-8 (Homebrew GCC 8.4.0_1) 8.4.0 — available by `gcc-8` alias -- gcc-9 (Homebrew GCC 9.3.0) 9.3.0 — available by `gcc-9` alias -- GNU Fortran (Homebrew GCC 8.4.0_1) 8.4.0 — available by `gfortran-8` alias -- GNU Fortran (Homebrew GCC 9.3.0) 9.3.0 — available by `gfortran-9` alias +- gcc-8 (Homebrew GCC 8.4.0_1) 8.4.0 - available by `gcc-8` alias +- gcc-9 (Homebrew GCC 9.3.0) 9.3.0 - available by `gcc-9` alias +- GNU Fortran (Homebrew GCC 8.4.0_1) 8.4.0 - available by `gfortran-8` alias +- GNU Fortran (Homebrew GCC 9.3.0) 9.3.0 - available by `gfortran-9` alias - Node.js v12.18.3 - NVM 0.35.3 - NVM - Cached node versions: v6.17.1 v8.17.0 v10.22.1 v12.18.4 v13.14.0 v14.11.0 @@ -24,15 +24,15 @@ ### Package Management - Vcpkg 2020.06.15 +- Pip 19.3.1 (python 2.7) +- Pip 20.1.1 (python 3.8) - Bundler version 2.1.4 -- Carthage 0.35.0 +- Carthage 0.36.0 - CocoaPods 1.9.3 - Homebrew 2.5.1 - NPM 6.14.6 - Yarn 1.22.5 - NuGet 5.6.0.6489 -- Pip 19.3.1 (python 2.7) -- Pip 20.1.1 (python 3.8) - Miniconda 4.8.3 - RubyGems 3.1.4 - Composer 1.10.13 @@ -46,12 +46,11 @@ - Curl 7.72.0 - Git: 2.28.0 - Git LFS: 2.12.0 -- GitHub CLI: 0.12.0 +- GitHub CLI: 1.0.0 - Hub CLI: 2.14.2 - GNU Wget 1.20.3 - Subversion (SVN) 1.14.0 - Packer 1.6.2 -- GNU parallel 20200722 - OpenSSL 1.0.2t 10 Sep 2019 `(/usr/local/opt/openssl -> /usr/local/Cellar/openssl@1.0.2t/1.0.2t)` - jq 1.6 - gpg (GnuPG) 2.2.23 @@ -62,24 +61,25 @@ - zstd 1.4.5 - bazel 3.5.0 - bazelisk 1.6.1 -- helm v3.3.1+g249e521 +- helm v3.3.2+ge507725 - virtualbox 6.1.14r140239 - mongo v4.4.0 - mongod v4.4.0 - Vagrant 2.2.10 - 7-Zip 16.02 - Newman 5.2.0 +- GNU parallel 20200722 ### Tools -- Fastlane 2.159.0 +- Fastlane 2.160.0 - Cmake 3.18.2 - App Center CLI 2.7.0 - Azure CLI 2.11.1 - AWS CLI 2.0.48 - AWS SAM CLI 1.2.0 - AWS Session Manager CLI 1.1.61.0 -- Aliyun CLI 3.0.56 +- Aliyun CLI 3.0.58 - GHCup v0.1.10 - GHC 8.10.2 - Cabal 3.2.0.0 @@ -90,8 +90,8 @@ - SwiftLint 0.40.2 ### Browsers -- Safari 13.1.2 (15609.3.5.1.3) -- SafariDriver 13.1.2 (15609.3.5.1.3) +- Safari 14.0 (15610.1.28.1.9) +- SafariDriver 14.0 (15610.1.28.1.9) - Google Chrome 85.0.4183.102 - ChromeDriver 85.0.4183.87 - Microsoft Edge 85.0.564.51 @@ -161,7 +161,7 @@ ### Xamarin #### Visual Studio for Mac -- 8.7.5.19 +- 8.7.7.10 #### Mono - 6.12.0.93 @@ -205,6 +205,7 @@ ### Xcode | Version | Build | Path | | -------------- | -------- | ------------------------------- | +| 12.2 | 12B5018i | /Applications/Xcode_12.2.app | | 12.0 | 12A8189n | /Applications/Xcode_12_beta.app | | 12.0 | 12A7209 | /Applications/Xcode_12.app | | 11.7 (default) | 11E801a | /Applications/Xcode_11.7.app | @@ -219,18 +220,18 @@ | 10.3 | 10G8 | /Applications/Xcode_10.3.app | #### Xcode Support Tools +- xcpretty 0.3.0 +- xcversion 2.6.6 - Nomad CLI 3.1.4 - Nomad CLI IPA ipa 0.14.3 -- xcpretty 0.3.0 - xctool 0.3.7 -- xcversion 2.6.6 #### Installed SDKs | SDK | SDK Name | Xcode Version | | ----------------------- | -------------------- | ---------------------------------------------------------------- | | macOS 10.14 | macosx10.14 | 10.3 | | macOS 10.15 | macosx10.15 | 11.0, 11.1, 11.2.1, 11.3.1, 11.4, 11.4.1, 11.5, 11.6, 11.7, 12.0 | -| macOS 11.0 | macosx11.0 | 12.0 | +| macOS 11.0 | macosx11.0 | 12.0, 12.2 | | iOS 12.4 | iphoneos12.4 | 10.3 | | iOS 13.0 | iphoneos13.0 | 11.0 | | iOS 13.1 | iphoneos13.1 | 11.1 | @@ -240,6 +241,7 @@ | iOS 13.6 | iphoneos13.6 | 11.6 | | iOS 13.7 | iphoneos13.7 | 11.7 | | iOS 14.0 | iphoneos14.0 | 12.0, 12.0 | +| iOS 14.2 | iphoneos14.2 | 12.2 | | Simulator - iOS 12.4 | iphonesimulator12.4 | 10.3 | | Simulator - iOS 13.0 | iphonesimulator13.0 | 11.0 | | Simulator - iOS 13.1 | iphonesimulator13.1 | 11.1 | @@ -249,28 +251,33 @@ | Simulator - iOS 13.6 | iphonesimulator13.6 | 11.6 | | Simulator - iOS 13.7 | iphonesimulator13.7 | 11.7 | | Simulator - iOS 14.0 | iphonesimulator14.0 | 12.0, 12.0 | +| Simulator - iOS 14.2 | iphonesimulator14.2 | 12.2 | | tvOS 12.4 | appletvos12.4 | 10.3 | | tvOS 13.0 | appletvos13.0 | 11.0, 11.1 | | tvOS 13.2 | appletvos13.2 | 11.2.1, 11.3.1 | | tvOS 13.4 | appletvos13.4 | 11.4, 11.4.1, 11.5, 11.6, 11.7 | | tvOS 14.0 | appletvos14.0 | 12.0, 12.0 | +| tvOS 14.2 | appletvos14.2 | 12.2 | | Simulator - tvOS 12.4 | appletvsimulator12.4 | 10.3 | | Simulator - tvOS 13.0 | appletvsimulator13.0 | 11.0, 11.1 | | Simulator - tvOS 13.2 | appletvsimulator13.2 | 11.2.1, 11.3.1 | | Simulator - tvOS 13.4 | appletvsimulator13.4 | 11.4, 11.4.1, 11.5, 11.6, 11.7 | | Simulator - tvOS 14.0 | appletvsimulator14.0 | 12.0, 12.0 | +| Simulator - tvOS 14.2 | appletvsimulator14.2 | 12.2 | | watchOS 5.3 | watchos5.3 | 10.3 | | watchOS 6.0 | watchos6.0 | 11.0, 11.1 | | watchOS 6.1 | watchos6.1 | 11.2.1, 11.3.1 | | watchOS 6.2 | watchos6.2 | 11.4, 11.4.1, 11.5, 11.6, 11.7 | | watchOS 7.0 | watchos7.0 | 12.0, 12.0 | +| watchOS 7.1 | watchos7.1 | 12.2 | | Simulator - watchOS 5.3 | watchsimulator5.3 | 10.3 | | Simulator - watchOS 6.0 | watchsimulator6.0 | 11.0, 11.1 | | Simulator - watchOS 6.1 | watchsimulator6.1 | 11.2.1, 11.3.1 | | Simulator - watchOS 6.2 | watchsimulator6.2 | 11.4, 11.4.1, 11.5, 11.6, 11.7 | | Simulator - watchOS 7.0 | watchsimulator7.0 | 12.0, 12.0 | +| Simulator - watchOS 7.1 | watchsimulator7.1 | 12.2 | | DriverKit 19.0 | driverkit.macosx19.0 | 11.0, 11.1, 11.2.1, 11.3.1, 11.4, 11.4.1, 11.5, 11.6, 11.7, 12.0 | -| DriverKit 20.0 | driverkit.macosx20.0 | 12.0 | +| DriverKit 20.0 | driverkit.macosx20.0 | 12.0, 12.2 | #### Installed Simulators | OS | Xcode Version | Simulators | @@ -284,18 +291,18 @@ | iOS 13.5 | 11.5 | iPhone 11
iPhone 11 Pro
iPhone 11 Pro Max
iPhone 8
iPhone 8 Plus
iPhone SE (2nd generation)
iPad (7th generation)
iPad Air (3rd generation)
iPad Pro (11-inch) (2nd generation)
iPad Pro (12.9-inch) (4th generation)
iPad Pro (9.7-inch) | | iOS 13.6 | 11.6 | iPhone 11
iPhone 11 Pro
iPhone 11 Pro Max
iPhone 8
iPhone 8 Plus
iPhone SE (2nd generation)
iPad (7th generation)
iPad Air (3rd generation)
iPad Pro (11-inch) (2nd generation)
iPad Pro (12.9-inch) (4th generation)
iPad Pro (9.7-inch) | | iOS 13.7 | 11.7 | iPhone 11
iPhone 11 Pro
iPhone 11 Pro Max
iPhone 8
iPhone 8 Plus
iPhone SE (2nd generation)
iPad (7th generation)
iPad Air (3rd generation)
iPad Pro (11-inch) (2nd generation)
iPad Pro (12.9-inch) (4th generation)
iPad Pro (9.7-inch) | -| iOS 14.0 | 12.0 | iPod touch (7th generation)
iPhone 11
iPhone 11 Pro
iPhone 11 Pro Max
iPhone 8
iPhone 8 Plus
iPhone SE (2nd generation)
iPad (7th generation)
iPad Air (3rd generation)
iPad Pro (11-inch) (2nd generation)
iPad Pro (12.9-inch) (4th generation)
iPad Pro (9.7-inch) | +| iOS 14.0 | 12.0
12.0 | iPod touch (7th generation)
iPhone 11
iPhone 11 Pro
iPhone 11 Pro Max
iPhone 8
iPhone 8 Plus
iPhone SE (2nd generation)
iPad (7th generation)
iPad (8th generation)
iPad Air (3rd generation)
iPad Air (4th generation)
iPad Pro (11-inch) (2nd generation)
iPad Pro (12.9-inch) (4th generation)
iPad Pro (9.7-inch) | | tvOS 12.4 | 10.3 | Apple TV
Apple TV 4K
Apple TV 4K (at 1080p) | | tvOS 13.0 | 11.0
11.1 | Apple TV
Apple TV 4K
Apple TV 4K (at 1080p) | | tvOS 13.2 | 11.2.1 | Apple TV
Apple TV 4K
Apple TV 4K (at 1080p) | | tvOS 13.3 | 11.3.1 | Apple TV
Apple TV 4K
Apple TV 4K (at 1080p) | | tvOS 13.4 | 11.4
11.4.1
11.5
11.6
11.7 | Apple TV
Apple TV 4K
Apple TV 4K (at 1080p) | -| tvOS 14.0 | 12.0 | Apple TV
Apple TV 4K
Apple TV 4K (at 1080p) | +| tvOS 14.0 | 12.0
12.0 | Apple TV
Apple TV 4K
Apple TV 4K (at 1080p) | | watchOS 5.3 | 10.3 | Apple Watch Series 2 - 38mm
Apple Watch Series 2 - 42mm
Apple Watch Series 3 - 38mm
Apple Watch Series 3 - 42mm
Apple Watch Series 4 - 40mm
Apple Watch Series 4 - 44mm | | watchOS 6.0 | 11.0
11.1 | Apple Watch Series 4 - 40mm
Apple Watch Series 4 - 44mm
Apple Watch Series 5 - 40mm
Apple Watch Series 5 - 44mm | | watchOS 6.1 | 11.2.1
11.3.1 | Apple Watch Series 4 - 40mm
Apple Watch Series 4 - 44mm
Apple Watch Series 5 - 40mm
Apple Watch Series 5 - 44mm | | watchOS 6.2 | 11.4
11.4.1
11.5
11.6
11.7 | Apple Watch Series 4 - 40mm
Apple Watch Series 4 - 44mm
Apple Watch Series 5 - 40mm
Apple Watch Series 5 - 44mm | -| watchOS 7.0 | 12.0 | Apple Watch Series 4 - 40mm
Apple Watch Series 4 - 44mm
Apple Watch Series 5 - 40mm
Apple Watch Series 5 - 44mm | +| watchOS 7.0 | 12.0
12.0 | Apple Watch Series 4 - 40mm
Apple Watch Series 4 - 44mm
Apple Watch Series 5 - 40mm
Apple Watch Series 5 - 44mm
Apple Watch Series 6 - 40mm
Apple Watch Series 6 - 44mm | ### Android #### Android SDK Tools diff --git a/images/macos/provision/configuration/configure-machine.sh b/images/macos/provision/configuration/configure-machine.sh index dbfae6731..81946f01e 100644 --- a/images/macos/provision/configuration/configure-machine.sh +++ b/images/macos/provision/configuration/configure-machine.sh @@ -27,4 +27,7 @@ sudo "/Library/Application Support/VMware Tools/vmware-resolutionSet" 1176 885 # sudo security delete-certificate -Z FF6797793A3CD798DC5B2ABEF56F73EDC9F83A64 /Library/Keychains/System.keychain curl https://www.apple.com/certificateauthority/AppleWWDRCAG3.cer --output $HOME/AppleWWDRCAG3.cer --silent sudo security add-trusted-cert -d -r unspecified -k /Library/Keychains/System.keychain $HOME/AppleWWDRCAG3.cer -rm $HOME/AppleWWDRCAG3.cer \ No newline at end of file +rm $HOME/AppleWWDRCAG3.cer + +# Disable spotlight indexing to prevent possible high CPU usage after startup +sudo mdutil -ai off \ No newline at end of file diff --git a/images/macos/provision/configuration/environment/bashrc b/images/macos/provision/configuration/environment/bashrc index 26fd14327..92fe36d3d 100644 --- a/images/macos/provision/configuration/environment/bashrc +++ b/images/macos/provision/configuration/environment/bashrc @@ -3,6 +3,7 @@ export LC_ALL=en_US.UTF-8 export LANG=en_US.UTF-8 export ANDROID_HOME=${HOME}/Library/Android/sdk +export ANDROID_SDK_ROOT=${HOME}/Library/Android/sdk export ANDROID_NDK_HOME=${ANDROID_HOME}/ndk-bundle export NUNIT_BASE_PATH=/Library/Developer/nunit diff --git a/images/macos/provision/core/audiodevice.sh b/images/macos/provision/core/audiodevice.sh index 705490de2..4a151e3f9 100644 --- a/images/macos/provision/core/audiodevice.sh +++ b/images/macos/provision/core/audiodevice.sh @@ -12,8 +12,3 @@ brew install sox echo "set Soundflower (2ch) as input/output device" SwitchAudioSource -s "Soundflower (2ch)" -t input SwitchAudioSource -s "Soundflower (2ch)" -t output - -echo "grant microphone permission for simulators" -sudo sqlite3 ~/Library/Application\ Support/com.apple.TCC/TCC.db "insert into access values('kTCCServiceMicrophone','com.apple.CoreSimulator.SimulatorTrampoline', 0,1,1,NULL,NULL,NULL,'UNUSED',NULL,NULL,1576347152)" -sudo sqlite3 /Library/Application\ Support/com.apple.TCC/TCC.db "insert into access values('kTCCServiceMicrophone','/usr/local/opt/runner/runprovisioner.sh', 1,1,1,NULL,NULL,NULL,'UNUSED',NULL,NULL,1576661342)" -sudo sqlite3 ~/Library/Application\ Support/com.apple.TCC/TCC.db "insert into access values('kTCCServiceMicrophone','/usr/local/opt/runner/runprovisioner.sh', 1,1,1,NULL,NULL,NULL,'UNUSED',NULL,NULL,1576661342)" diff --git a/images/macos/provision/core/pypy.sh b/images/macos/provision/core/pypy.sh index a57f0ebb0..5f24cd5f5 100644 --- a/images/macos/provision/core/pypy.sh +++ b/images/macos/provision/core/pypy.sh @@ -66,16 +66,20 @@ function InstallPyPy rm -f $PACKAGE_TAR_TEMP_PATH } -# PyPy 7.3.1 relies on system libffi.6.dylib, which is not existed in in libffi 3.3 release. As a workaround symlink can be created -ln -s libffi.7.dylib /usr/local/opt/libffi/lib/libffi.6.dylib - uri="https://downloads.python.org/pypy/" pypyVersions=$(curl -4 -s --compressed $uri | grep 'osx64' | awk -v uri="$uri" -F'>|<' '{print uri$5}') - toolsetVersions=$(get_toolset_value '.toolcache[] | select(.name | contains("PyPy")) | .versions[]') +versionPattern="v[0-9]+\.[0-9]+\.[0-9]+-" + +# PyPy 7.3.2 for High Sierra is broken, use 7.3.1 instead https://foss.heptapod.net/pypy/pypy/-/issues/3311 +if is_HighSierra; then + versionPattern="v7.3.1-" + # PyPy 7.3.1 relies on system libffi.6.dylib, which is not existed in in libffi 3.3 release. As a workaround symlink can be created + ln -s libffi.7.dylib /usr/local/opt/libffi/lib/libffi.6.dylib +fi for toolsetVersion in $toolsetVersions; do - latestMajorPyPyVersion=$(echo "${pypyVersions}" | grep -E "pypy${toolsetVersion}-v[0-9]+\.[0-9]+\.[0-9]+-" | head -1) + latestMajorPyPyVersion=$(echo "${pypyVersions}" | grep -E "pypy${toolsetVersion}-${versionPattern}" | head -1) if [[ -z "$latestMajorPyPyVersion" ]]; then echo "Failed to get PyPy version '$toolsetVersion'" exit 1 diff --git a/images/macos/provision/core/vsmac.sh b/images/macos/provision/core/vsmac.sh index 9774e486f..20a8efd46 100644 --- a/images/macos/provision/core/vsmac.sh +++ b/images/macos/provision/core/vsmac.sh @@ -3,6 +3,9 @@ source ~/utils/utils.sh source ~/utils/xamarin-utils.sh VSMAC_VERSION=$(get_toolset_value '.xamarin.vsmac') +if [ $VSMAC_VERSION == "latest" ]; then + VSMAC_VERSION=$(curl https://formulae.brew.sh/api/cask/visual-studio.json 2>/dev/null | jq .version | tr -d \") +fi VSMAC_DOWNLOAD_URL=$(buildVSMacDownloadUrl $VSMAC_VERSION) TMPMOUNT=`/usr/bin/mktemp -d /tmp/visualstudio.XXXX` diff --git a/images/macos/software-report/SoftwareReport.Generator.ps1 b/images/macos/software-report/SoftwareReport.Generator.ps1 index 87c944598..0ef53471e 100644 --- a/images/macos/software-report/SoftwareReport.Generator.ps1 +++ b/images/macos/software-report/SoftwareReport.Generator.ps1 @@ -289,6 +289,8 @@ $markdown += New-MDList -Lines (Build-XamarinAndroidList) -Style Unordered $markdown += New-MDHeader "Unit Test Framework" -Level 4 $markdown += New-MDList -Lines @(Get-NUnitVersion) -Style Unordered +# First run doesn't provide full data about devices and runtimes +Get-XcodeInfoList | Out-Null # Xcode section $xcodeInfo = Get-XcodeInfoList $markdown += New-MDHeader "Xcode" -Level 3 @@ -301,12 +303,9 @@ $markdown += New-MDHeader "Installed SDKs" -Level 4 $markdown += Build-XcodeSDKTable $xcodeInfo | New-MDTable $markdown += New-MDNewLine -# Disable simulators table on 11.0 beta for now since "simctl" tool doesn't work properly -if (-not $os.IsBigSur) { - $markdown += New-MDHeader "Installed Simulators" -Level 4 - $markdown += Build-XcodeSimulatorsTable $xcodeInfo | New-MDTable - $markdown += New-MDNewLine -} +$markdown += New-MDHeader "Installed Simulators" -Level 4 +$markdown += Build-XcodeSimulatorsTable $xcodeInfo | New-MDTable +$markdown += New-MDNewLine # Android section $markdown += New-MDHeader "Android" -Level 3 diff --git a/images/macos/software-report/SoftwareReport.Xcode.psm1 b/images/macos/software-report/SoftwareReport.Xcode.psm1 index 59754d583..3d4cfa52d 100644 --- a/images/macos/software-report/SoftwareReport.Xcode.psm1 +++ b/images/macos/software-report/SoftwareReport.Xcode.psm1 @@ -46,7 +46,8 @@ function Get-XcodeInfoList { $versionInfo = Get-XcodeVersionInfo $versionInfo.Path = $xcodeRootPath $versionInfo.IsDefault = ($xcodeRootPath -eq $defaultXcodeRootPath) - + $versionInfo.IsStable = Test-XcodeStableRelease -XcodeRootPath $xcodeRootPath + $xcodeInfo.Add($xcodeRootPath, [PSCustomObject] @{ VersionInfo = $versionInfo SDKInfo = Get-XcodeSDKList @@ -91,6 +92,7 @@ function Build-XcodeTable { $xcodeList = $xcodeInfo.Values | ForEach-Object { $_.VersionInfo } | Sort-Object $sortRules return $xcodeList | ForEach-Object { $defaultPostfix = If ($_.IsDefault) { " (default)" } else { "" } + $betaPostfix = If ($_.IsStable) { "" } else { " (beta)" } return [PSCustomObject] @{ "Version" = $_.Version.ToString() + $betaPostfix + $defaultPostfix "Build" = $_.Build diff --git a/images/macos/toolsets/toolset-10.15.json b/images/macos/toolsets/toolset-10.15.json index 587da9613..f834385c2 100644 --- a/images/macos/toolsets/toolset-10.15.json +++ b/images/macos/toolsets/toolset-10.15.json @@ -6,7 +6,7 @@ ] }, "xamarin": { - "vsmac": "8.7.8.4", + "vsmac": "latest", "mono-versions": [ "6.12.0.93", "6.10.0.106", "6.8.0.123", "6.6.0.166", "6.4.0.208" ], @@ -19,35 +19,35 @@ "android-versions": [ "11.0.2.0", "10.3.1.4", "10.2.0.100", "10.1.3.7", "10.0.6.2" ], - "bundle-default": "latest", + "bundle-default": "6_12_0", "bundles": [ { "symlink": "6_12_1", "mono":"6.12", "ios": "14.0", "mac": "6.20", - "android": "11.0" + "android": "11.0" }, { "symlink": "6_12_0", "mono":"6.12", "ios": "13.20", "mac": "6.20", - "android": "11.0" + "android": "11.0" }, { "symlink": "6_10_0", "mono":"6.10", "ios": "13.18", "mac": "6.18", - "android": "10.3" + "android": "10.3" }, { "symlink": "6_8_1", "mono":"6.8", "ios": "13.16", "mac": "6.16", - "android": "10.2" + "android": "10.2" }, { "symlink": "6_8_0", diff --git a/images/macos/toolsets/toolset-11.0.json b/images/macos/toolsets/toolset-11.0.json index c8988a4bc..f4e9a57c8 100644 --- a/images/macos/toolsets/toolset-11.0.json +++ b/images/macos/toolsets/toolset-11.0.json @@ -6,7 +6,7 @@ ] }, "xamarin": { - "vsmac": "8.7.8.4", + "vsmac": "latest", "mono-versions": [ "6.12.0.93" ], @@ -19,21 +19,21 @@ "android-versions": [ "11.0.2.0" ], - "bundle-default": "latest", + "bundle-default": "6_12_0", "bundles": [ { "symlink": "6_12_1", "mono":"6.12", "ios": "14.0", "mac": "6.20", - "android": "11.0" + "android": "11.0" }, { "symlink": "6_12_0", "mono":"6.12", "ios": "13.20", "mac": "6.20", - "android": "11.0" + "android": "11.0" } ] }, diff --git a/images/win/Windows2016-Azure.json b/images/win/Windows2016-Azure.json index 481a3ce80..d65286497 100644 --- a/images/win/Windows2016-Azure.json +++ b/images/win/Windows2016-Azure.json @@ -15,7 +15,6 @@ "private_virtual_network_with_public_ip": "{{env `PRIVATE_VIRTUAL_NETWORK_WITH_PUBLIC_IP`}}", "vm_size": "Standard_DS4_v2", "run_scan_antivirus": "false", - "root_folder": "C:", "toolset_json_path": "{{env `TEMP`}}\\toolset.json", "image_folder": "C:\\image", @@ -30,7 +29,11 @@ "github_feed_token": "{{env `GITHUB_FEED_TOKEN`}}", "announcements": "{{env `ANNOUNCEMENTS`}}" }, - "sensitive-variables": ["install_password", "client_secret", "github_feed_token"], + "sensitive-variables": [ + "install_password", + "client_secret", + "github_feed_token" + ], "builders": [ { "name": "vhd", @@ -65,7 +68,7 @@ "provisioners": [ { "type": "powershell", - "inline":[ + "inline": [ "New-Item -Path {{user `image_folder`}} -ItemType Directory -Force" ] }, @@ -79,6 +82,11 @@ "source": "{{ template_dir }}/scripts/SoftwareReport", "destination": "{{user `image_folder`}}" }, + { + "type": "file", + "source": "{{ template_dir }}/post-generation", + "destination": "C:/post-generation" + }, { "type": "file", "source": "{{ template_dir }}/scripts/Tests", @@ -97,7 +105,7 @@ { "type": "windows-shell", "inline": [ - "net user {{user `install_user`}} {{user `install_password`}} /add /passwordchg:no /passwordreq:yes /active:yes /Y" , + "net user {{user `install_user`}} {{user `install_password`}} /add /passwordchg:no /passwordreq:yes /active:yes /Y", "net localgroup Administrators {{user `install_user`}} /add", "winrm set winrm/config/service/auth @{Basic=\"true\"}", "winrm get winrm/config/service/auth" @@ -116,7 +124,7 @@ "TOOLSET_JSON_PATH={{user `toolset_json_path`}}", "PSMODULES_ROOT_FOLDER={{user `psmodules_root_folder`}}" ], - "scripts":[ + "scripts": [ "{{ template_dir }}/scripts/Installers/Install-PowerShellModules.ps1", "{{ template_dir }}/scripts/Installers/Initialize-VM.ps1", "{{ template_dir }}/scripts/Installers/Install-WebPlatformInstaller.ps1" @@ -125,7 +133,7 @@ }, { "type": "powershell", - "scripts":[ + "scripts": [ "{{ template_dir }}/scripts/Installers/Update-DotnetTLS.ps1", "{{ template_dir }}/scripts/Installers/Install-ContainersFeature.ps1" ] @@ -137,8 +145,8 @@ { "type": "powershell", "inline": [ - "setx ImageVersion {{user `image_version` }} /m", - "setx ImageOS {{user `image_os` }} /m" + "setx ImageVersion {{user `image_version` }} /m", + "setx ImageOS {{user `image_os` }} /m" ] }, { @@ -147,7 +155,7 @@ "IMAGE_VERSION={{user `image_version`}}", "IMAGEDATA_FILE={{user `imagedata_file`}}" ], - "scripts":[ + "scripts": [ "{{ template_dir }}/scripts/Installers/Update-ImageData.ps1", "{{ template_dir }}/scripts/Installers/Install-Docker.ps1", "{{ template_dir }}/scripts/Installers/Install-PowershellCore.ps1" @@ -157,22 +165,17 @@ "type": "windows-restart", "restart_timeout": "30m" }, - { - "type": "powershell", - "scripts":[ - "{{ template_dir }}/scripts/Installers/Update-DockerImages.ps1" - ] - }, { "type": "powershell", "valid_exit_codes": [ 0, 3010 ], - "environment_vars":[ + "environment_vars": [ "TOOLSET_JSON_PATH={{user `toolset_json_path`}}" ], - "scripts":[ + "scripts": [ + "{{ template_dir }}/scripts/Installers/Update-DockerImages.ps1", "{{ template_dir }}/scripts/Installers/Install-VS.ps1", "{{ template_dir }}/scripts/Installers/Install-NET48.ps1", "{{ template_dir }}/scripts/Installers/Windows2016/Install-SSDT.ps1" @@ -182,10 +185,10 @@ }, { "type": "powershell", - "environment_vars":[ + "environment_vars": [ "TOOLSET_JSON_PATH={{user `toolset_json_path`}}" ], - "scripts":[ + "scripts": [ "{{ template_dir }}/scripts/Installers/Install-Nuget.ps1", "{{ template_dir }}/scripts/Installers/Install-Wix.ps1", "{{ template_dir }}/scripts/Installers/Install-WDK.ps1", @@ -194,7 +197,7 @@ }, { "type": "powershell", - "scripts":[ + "scripts": [ "{{ template_dir }}/scripts/Installers/Install-ServiceFabricSDK.ps1" ], "execution_policy": "remotesigned" @@ -205,7 +208,7 @@ }, { "type": "powershell", - "scripts":[ + "scripts": [ "{{ template_dir }}/scripts/Installers/Install-AzureCli.ps1", "{{ template_dir }}/scripts/Installers/Install-AzureDevOpsCli.ps1", "{{ template_dir }}/scripts/Installers/Install-AzCopy.ps1", @@ -222,12 +225,12 @@ }, { "type": "powershell", - "environment_vars":[ + "environment_vars": [ "GITHUB_FEED_TOKEN={{ user `github_feed_token` }}", "TOOLSET_JSON_PATH={{user `toolset_json_path`}}", "ROOT_FOLDER={{user `root_folder`}}" ], - "scripts":[ + "scripts": [ "{{ template_dir }}/scripts/Installers/Download-ToolCache.ps1", "{{ template_dir }}/scripts/Installers/Install-PyPy.ps1", "{{ template_dir }}/scripts/Installers/Install-Toolset.ps1", @@ -238,7 +241,7 @@ }, { "type": "powershell", - "scripts":[ + "scripts": [ "{{ template_dir }}/scripts/Installers/Install-Sbt.ps1", "{{ template_dir }}/scripts/Installers/Install-OpenSSL.ps1", "{{ template_dir }}/scripts/Installers/Install-Perl.ps1", @@ -257,7 +260,7 @@ }, { "type": "powershell", - "scripts":[ + "scripts": [ "{{ template_dir }}/scripts/Installers/Enable-DeveloperMode.ps1" ], "elevated_user": "{{user `install_user`}}", @@ -265,21 +268,23 @@ }, { "type": "windows-shell", - "inline": ["wmic product where \"name like '%%microsoft azure powershell%%'\" call uninstall /nointeractive"] + "inline": [ + "wmic product where \"name like '%%microsoft azure powershell%%'\" call uninstall /nointeractive" + ] }, { "type": "powershell", - "environment_vars":[ + "environment_vars": [ "TOOLSET_JSON_PATH={{user `toolset_json_path`}}", "PSMODULES_ROOT_FOLDER={{user `psmodules_root_folder`}}" ], - "scripts":[ + "scripts": [ "{{ template_dir }}/scripts/Installers/Install-AzureModules.ps1" ] }, { "type": "powershell", - "scripts":[ + "scripts": [ "{{ template_dir }}/scripts/Installers/Install-VSWhere.ps1", "{{ template_dir }}/scripts/Installers/Install-WinAppDriver.ps1", "{{ template_dir }}/scripts/Installers/Install-Cmake.ps1", @@ -291,18 +296,17 @@ "{{ template_dir }}/scripts/Installers/Install-DotnetSDK.ps1" ] }, - { "type": "powershell", "elevated_user": "SYSTEM", "elevated_password": "", - "scripts":[ + "scripts": [ "{{ template_dir }}/scripts/Installers/Install-Msys2.ps1" ] }, { "type": "powershell", - "scripts":[ + "scripts": [ "{{ template_dir }}/scripts/Installers/Install-Mingw64.ps1", "{{ template_dir }}/scripts/Installers/Install-TypeScript.ps1", "{{ template_dir }}/scripts/Installers/Install-Haskell.ps1", @@ -326,7 +330,7 @@ }, { "type": "powershell", - "scripts":[ + "scripts": [ "{{ template_dir }}/scripts/Installers/Install-WindowsUpdates.ps1", "{{ template_dir }}/scripts/Installers/Configure-DynamicPort.ps1" ], @@ -339,10 +343,10 @@ }, { "type": "powershell", - "scripts":[ + "scripts": [ "{{ template_dir }}/scripts/Tests/RunAll-Tests.ps1" ], - "environment_vars":[ + "environment_vars": [ "TOOLSET_JSON_PATH={{user `toolset_json_path`}}", "PSMODULES_ROOT_FOLDER={{user `psmodules_root_folder`}}", "ROOT_FOLDER={{user `root_folder`}}" @@ -353,7 +357,7 @@ "inline": [ "pwsh -File '{{user `image_folder`}}\\SoftwareReport\\SoftwareReport.Generator.ps1'" ], - "environment_vars":[ + "environment_vars": [ "TOOLSET_JSON_PATH={{user `toolset_json_path`}}", "ANNOUNCEMENTS={{user `announcements`}}" ] @@ -366,7 +370,7 @@ }, { "type": "powershell", - "scripts":[ + "scripts": [ "{{ template_dir }}/scripts/Installers/Finalize-VM.ps1" ] }, @@ -376,16 +380,16 @@ }, { "type": "powershell", - "environment_vars":[ + "environment_vars": [ "RUN_SCAN_ANTIVIRUS={{user `run_scan_antivirus`}}" ], - "scripts":[ + "scripts": [ "{{ template_dir }}/scripts/Installers/Run-Antivirus.ps1" ] }, { "type": "powershell", - "scripts":[ + "scripts": [ "{{ template_dir }}/scripts/Installers/Configure-Antivirus.ps1", "{{ template_dir }}/scripts/Installers/Disable-JITDebugger.ps1" ] diff --git a/images/win/Windows2019-Azure.json b/images/win/Windows2019-Azure.json index 10c5cdd57..445a5968d 100644 --- a/images/win/Windows2019-Azure.json +++ b/images/win/Windows2019-Azure.json @@ -15,7 +15,6 @@ "private_virtual_network_with_public_ip": "{{env `PRIVATE_VIRTUAL_NETWORK_WITH_PUBLIC_IP`}}", "vm_size": "Standard_D4_v2", "run_scan_antivirus": "false", - "root_folder": "C:", "toolset_json_path": "{{env `TEMP`}}\\toolset.json", "image_folder": "C:\\image", @@ -30,7 +29,11 @@ "github_feed_token": "{{env `GITHUB_FEED_TOKEN`}}", "announcements": "{{env `ANNOUNCEMENTS`}}" }, - "sensitive-variables": ["install_password", "client_secret", "github_feed_token"], + "sensitive-variables": [ + "install_password", + "client_secret", + "github_feed_token" + ], "builders": [ { "name": "vhd", @@ -65,7 +68,7 @@ "provisioners": [ { "type": "powershell", - "inline":[ + "inline": [ "New-Item -Path {{user `image_folder`}} -ItemType Directory -Force" ] }, @@ -79,6 +82,11 @@ "source": "{{ template_dir }}/scripts/SoftwareReport", "destination": "{{user `image_folder`}}" }, + { + "type": "file", + "source": "{{ template_dir }}/post-generation", + "destination": "C:/post-generation" + }, { "type": "file", "source": "{{ template_dir }}/scripts/Tests", @@ -97,7 +105,7 @@ { "type": "windows-shell", "inline": [ - "net user {{user `install_user`}} {{user `install_password`}} /add /passwordchg:no /passwordreq:yes /active:yes /Y" , + "net user {{user `install_user`}} {{user `install_password`}} /add /passwordchg:no /passwordreq:yes /active:yes /Y", "net localgroup Administrators {{user `install_user`}} /add", "winrm set winrm/config/service/auth @{Basic=\"true\"}", "winrm get winrm/config/service/auth" @@ -116,7 +124,7 @@ "TOOLSET_JSON_PATH={{user `toolset_json_path`}}", "PSMODULES_ROOT_FOLDER={{user `psmodules_root_folder`}}" ], - "scripts":[ + "scripts": [ "{{ template_dir }}/scripts/Installers/Install-PowerShellModules.ps1", "{{ template_dir }}/scripts/Installers/Initialize-VM.ps1", "{{ template_dir }}/scripts/Installers/Install-WebPlatformInstaller.ps1" @@ -127,13 +135,13 @@ "type": "powershell", "elevated_user": "SYSTEM", "elevated_password": "", - "scripts":[ + "scripts": [ "{{ template_dir }}/scripts/Installers/Windows2019/Install-WSL.ps1" ] }, { "type": "powershell", - "scripts":[ + "scripts": [ "{{ template_dir }}/scripts/Installers/Update-DotnetTLS.ps1", "{{ template_dir }}/scripts/Installers/Install-ContainersFeature.ps1" ] @@ -141,8 +149,8 @@ { "type": "powershell", "inline": [ - "setx ImageVersion {{user `image_version` }} /m", - "setx ImageOS {{user `image_os` }} /m" + "setx ImageVersion {{user `image_version` }} /m", + "setx ImageOS {{user `image_os` }} /m" ] }, { @@ -155,7 +163,7 @@ "IMAGE_VERSION={{user `image_version`}}", "IMAGEDATA_FILE={{user `imagedata_file`}}" ], - "scripts":[ + "scripts": [ "{{ template_dir }}/scripts/Installers/Update-ImageData.ps1", "{{ template_dir }}/scripts/Installers/Install-Docker.ps1", "{{ template_dir }}/scripts/Installers/Install-PowershellCore.ps1" @@ -167,7 +175,7 @@ }, { "type": "powershell", - "scripts":[ + "scripts": [ "{{ template_dir }}/scripts/Installers/Update-DockerImages.ps1" ] }, @@ -177,10 +185,11 @@ 0, 3010 ], - "environment_vars":[ + "environment_vars": [ "TOOLSET_JSON_PATH={{user `toolset_json_path`}}" ], - "scripts":[ + "scripts": [ + "{{ template_dir }}/scripts/Installers/Update-DockerImages.ps1", "{{ template_dir }}/scripts/Installers/Install-VS.ps1", "{{ template_dir }}/scripts/Installers/Install-NET48.ps1" ], @@ -189,10 +198,10 @@ }, { "type": "powershell", - "environment_vars":[ + "environment_vars": [ "TOOLSET_JSON_PATH={{user `toolset_json_path`}}" ], - "scripts":[ + "scripts": [ "{{ template_dir }}/scripts/Installers/Install-Nuget.ps1", "{{ template_dir }}/scripts/Installers/Install-Wix.ps1", "{{ template_dir }}/scripts/Installers/Install-WDK.ps1", @@ -210,7 +219,7 @@ }, { "type": "powershell", - "scripts":[ + "scripts": [ "{{ template_dir }}/scripts/Installers/Install-ServiceFabricSDK.ps1" ], "execution_policy": "remotesigned" @@ -221,38 +230,39 @@ }, { "type": "powershell", - "environment_vars":[ + "environment_vars": [ "GITHUB_FEED_TOKEN={{ user `github_feed_token` }}", "ROOT_FOLDER={{user `root_folder`}}" ], - "scripts":[ + "scripts": [ "{{ template_dir }}/scripts/Installers/Download-ToolCache.ps1" ] }, { "type": "windows-shell", - "inline": ["wmic product where \"name like '%%microsoft azure powershell%%'\" call uninstall /nointeractive"] + "inline": [ + "wmic product where \"name like '%%microsoft azure powershell%%'\" call uninstall /nointeractive" + ] }, { "type": "powershell", - "environment_vars":[ + "environment_vars": [ "TOOLSET_JSON_PATH={{user `toolset_json_path`}}", "ROOT_FOLDER={{user `root_folder`}}", "PSMODULES_ROOT_FOLDER={{user `psmodules_root_folder`}}" ], - "scripts":[ + "scripts": [ "{{ template_dir }}/scripts/Installers/Install-PyPy.ps1", "{{ template_dir }}/scripts/Installers/Install-Toolset.ps1", "{{ template_dir }}/scripts/Installers/Configure-Toolset.ps1", "{{ template_dir }}/scripts/Installers/Install-YAMLLint.ps1", "{{ template_dir }}/scripts/Installers/Update-AndroidSDK.ps1", "{{ template_dir }}/scripts/Installers/Install-AzureModules.ps1" - ] }, { "type": "powershell", - "scripts":[ + "scripts": [ "{{ template_dir }}/scripts/Installers/Install-OpenSSL.ps1", "{{ template_dir }}/scripts/Installers/Install-Perl.ps1", "{{ template_dir }}/scripts/Installers/Install-Git.ps1", @@ -271,7 +281,7 @@ }, { "type": "powershell", - "scripts":[ + "scripts": [ "{{ template_dir }}/scripts/Installers/Enable-DeveloperMode.ps1" ], "elevated_user": "{{user `install_user`}}", @@ -281,13 +291,13 @@ "type": "powershell", "elevated_user": "SYSTEM", "elevated_password": "", - "scripts":[ + "scripts": [ "{{ template_dir }}/scripts/Installers/Install-Msys2.ps1" ] }, { "type": "powershell", - "scripts":[ + "scripts": [ "{{ template_dir }}/scripts/Installers/Install-VSWhere.ps1", "{{ template_dir }}/scripts/Installers/Install-WinAppDriver.ps1", "{{ template_dir }}/scripts/Installers/Install-Cmake.ps1", @@ -324,7 +334,7 @@ }, { "type": "powershell", - "scripts":[ + "scripts": [ "{{ template_dir }}/scripts/Installers/Install-WindowsUpdates.ps1", "{{ template_dir }}/scripts/Installers/Configure-DynamicPort.ps1" ], @@ -337,10 +347,10 @@ }, { "type": "powershell", - "scripts":[ + "scripts": [ "{{ template_dir }}/scripts/Tests/RunAll-Tests.ps1" ], - "environment_vars":[ + "environment_vars": [ "TOOLSET_JSON_PATH={{user `toolset_json_path`}}", "PSMODULES_ROOT_FOLDER={{user `psmodules_root_folder`}}", "ROOT_FOLDER={{user `root_folder`}}" @@ -351,7 +361,7 @@ "inline": [ "pwsh -File '{{user `image_folder`}}\\SoftwareReport\\SoftwareReport.Generator.ps1'" ], - "environment_vars":[ + "environment_vars": [ "TOOLSET_JSON_PATH={{user `toolset_json_path`}}", "ANNOUNCEMENTS={{user `announcements`}}" ] @@ -364,7 +374,7 @@ }, { "type": "powershell", - "scripts":[ + "scripts": [ "{{ template_dir }}/scripts/Installers/Finalize-VM.ps1" ] }, @@ -374,28 +384,28 @@ }, { "type": "powershell", - "environment_vars":[ + "environment_vars": [ "RUN_SCAN_ANTIVIRUS={{user `run_scan_antivirus`}}" ], - "scripts":[ + "scripts": [ "{{ template_dir }}/scripts/Installers/Run-Antivirus.ps1" ] }, { "type": "powershell", - "scripts":[ + "scripts": [ "{{ template_dir }}/scripts/Installers/Configure-Antivirus.ps1" ] }, { "type": "powershell", - "scripts":[ + "scripts": [ "{{ template_dir }}/scripts/Installers/Disable-JITDebugger.ps1" ] }, { "type": "powershell", - "scripts":[ + "scripts": [ "{{ template_dir }}/scripts/Installers/Run-NGen.ps1" ] }, diff --git a/images/win/post-generation/Dotnet.ps1 b/images/win/post-generation/Dotnet.ps1 new file mode 100644 index 000000000..fd43757a6 --- /dev/null +++ b/images/win/post-generation/Dotnet.ps1 @@ -0,0 +1,8 @@ +$latestPath = [System.Environment]::GetEnvironmentVariable('PATH', [System.EnvironmentVariableTarget]::Machine) +$dotnetPath = "$env:USERPROFILE\.dotnet\tools" + +if (-not $latestPath.Contains($dotnetPath)) +{ + $latestPath = "$dotnetPath;$latestPath" + [System.Environment]::SetEnvironmentVariable('PATH', $latestPath, [System.EnvironmentVariableTarget]::Machine) +} \ No newline at end of file diff --git a/images/win/post-generation/RustJunction.ps1 b/images/win/post-generation/RustJunction.ps1 new file mode 100644 index 000000000..86f3fc106 --- /dev/null +++ b/images/win/post-generation/RustJunction.ps1 @@ -0,0 +1,12 @@ +# Create Rust junction points to cargo and rustup folder +$cargoTarget = "$env:USERPROFILE\.cargo" +if (-not (Test-Path $cargoTarget)) +{ + New-Item -ItemType Junction -Path $cargoTarget -Target "C:\Rust\.cargo" +} + +$rustupTarget = "$env:USERPROFILE\.rustup" +if (-not (Test-Path $rustupTarget)) +{ + New-Item -ItemType Junction -Path $rustupTarget -Target "C:\Rust\.rustup" +} \ No newline at end of file diff --git a/images/win/post-generation/VSConfiguration.ps1 b/images/win/post-generation/VSConfiguration.ps1 new file mode 100644 index 000000000..0ff9d7bfb --- /dev/null +++ b/images/win/post-generation/VSConfiguration.ps1 @@ -0,0 +1,4 @@ +$vsInstallRoot = Get-VisualStudioPath +$devEnvPath = "$vsInstallRoot\Common7\IDE\devenv.exe" + +cmd.exe /c "`"$devEnvPath`" /updateconfiguration" \ No newline at end of file diff --git a/images/win/scripts/ImageHelpers/ImageHelpers.psm1 b/images/win/scripts/ImageHelpers/ImageHelpers.psm1 index e150e1a12..1f52d22e6 100644 --- a/images/win/scripts/ImageHelpers/ImageHelpers.psm1 +++ b/images/win/scripts/ImageHelpers/ImageHelpers.psm1 @@ -37,6 +37,9 @@ Export-ModuleMember -Function @( 'Get-VsCatalogJsonPath' 'Get-VisualStudioPath' 'Install-AndroidSDKPackages' + 'Get-AndroidPackages' + 'Get-AndroidPackagesByName' + 'Get-AndroidPackagesByVersion' 'Get-VisualStudioPackages' 'Get-VisualStudioComponents' ) diff --git a/images/win/scripts/ImageHelpers/InstallHelpers.ps1 b/images/win/scripts/ImageHelpers/InstallHelpers.ps1 index 282c03762..aed13b999 100644 --- a/images/win/scripts/ImageHelpers/InstallHelpers.ps1 +++ b/images/win/scripts/ImageHelpers/InstallHelpers.ps1 @@ -418,3 +418,41 @@ function Install-AndroidSDKPackages { & $AndroidSDKManagerPath --sdk_root=$AndroidSDKRootPath "$PrefixPackageName$package" } } + +function Get-AndroidPackages { + Param + ( + [Parameter(Mandatory=$true)] + [string]$AndroidSDKManagerPath + ) + + return (& $AndroidSDKManagerPath --list --verbose).Trim() | Foreach-Object { $_.Split()[0] } | Where-Object {$_} +} + +function Get-AndroidPackagesByName { + Param ( + [Parameter(Mandatory=$true)] + [string[]]$AndroidPackages, + [Parameter(Mandatory=$true)] + [string]$PrefixPackageName + ) + + return $AndroidPackages | Where-Object { "$_".StartsWith($PrefixPackageName) } +} + +function Get-AndroidPackagesByVersion { + Param ( + [Parameter(Mandatory=$true)] + [string[]]$AndroidPackages, + [Parameter(Mandatory=$true)] + [string]$PrefixPackageName, + [object]$MinimumVersion, + [char]$Delimiter, + [int]$Index = 0 + ) + + $Type = $MinimumVersion.GetType() + $packagesByName = Get-AndroidPackagesByName -AndroidPackages $AndroidPackages -PrefixPackageName $PrefixPackageName + $packagesByVersion = $packagesByName | Where-Object { ($_.Split($Delimiter)[$Index] -as $Type) -ge $MinimumVersion } + return $packagesByVersion | Sort-Object { $_.Split($Delimiter)[$Index] -as $Type} -Unique +} diff --git a/images/win/scripts/Installers/Install-AzureDevSpacesCLI.ps1 b/images/win/scripts/Installers/Install-AzureDevSpacesCli.ps1 similarity index 100% rename from images/win/scripts/Installers/Install-AzureDevSpacesCLI.ps1 rename to images/win/scripts/Installers/Install-AzureDevSpacesCli.ps1 diff --git a/images/win/scripts/Installers/Install-Git.ps1 b/images/win/scripts/Installers/Install-Git.ps1 index 2a5ea9259..16b7ac15e 100644 --- a/images/win/scripts/Installers/Install-Git.ps1 +++ b/images/win/scripts/Installers/Install-Git.ps1 @@ -40,5 +40,10 @@ Choco-Install -PackageName hub Add-MachinePathItem "C:\Program Files\Git\bin" +# Add well-known SSH host keys to ssh_known_hosts + +ssh-keyscan -t rsa github.com >> "C:\Program Files\Git\etc\ssh\ssh_known_hosts" +ssh-keyscan -t rsa ssh.dev.azure.com >> "C:\Program Files\Git\etc\ssh\ssh_known_hosts" + Invoke-PesterTests -TestFile "Git" -TestName "Git" Invoke-PesterTests -TestFile "CLI.Tools" -TestName "Hub CLI" diff --git a/images/win/scripts/Installers/Update-AndroidSDK.ps1 b/images/win/scripts/Installers/Update-AndroidSDK.ps1 index 5eeac22fc..c27a4c18c 100644 --- a/images/win/scripts/Installers/Update-AndroidSDK.ps1 +++ b/images/win/scripts/Installers/Update-AndroidSDK.ps1 @@ -3,14 +3,7 @@ ## Desc: Install and update Android SDK and tools ################################################################################ -# Download the latest command line tools so that we can accept all of the licenses. -# See https://developer.android.com/studio/#command-tools -$sdkArchPath = Start-DownloadWithRetry -Url "https://dl.google.com/android/repository/sdk-tools-windows-4333796.zip" -Name "android-sdk-tools.zip" - -# Don't replace the one that VS installs as it seems to break things. -Expand-Archive -Path $sdkArchPath -DestinationPath android-sdk -Force - -$sdk = Get-Item -Path .\android-sdk +$ErrorActionPreference = "Stop" # Install the standard Android SDK licenses. In the past, there wasn't a better way to do this, # so we are base64-encoding a zip of the licenses directory from another installation. @@ -30,7 +23,6 @@ $content = [System.Convert]::FromBase64String($base64Content) Set-Content -Path .\android-sdk-licenses.zip -Value $content -Encoding Byte Expand-Archive -Path .\android-sdk-licenses.zip -DestinationPath 'C:\Program Files (x86)\Android\android-sdk' -Force - # run the updates. # keep newer versions in descending order @@ -42,15 +34,32 @@ $sdkManager = "$sdkRoot\tools\bin\sdkmanager.bat" & $sdkManager --sdk_root=$sdkRoot "platform-tools" -Install-AndroidSDKPackages -AndroidSDKManagerPath $sdkManager ` - -AndroidSDKRootPath $sdkRoot ` - -AndroidPackages $androidToolset.platform_list ` - -PrefixPackageName "platforms;" +# get packages info +$androidPackages = Get-AndroidPackages -AndroidSDKManagerPath $sdkManager + +# platforms +[int]$platformMinVersion = $androidToolset.platform_min_version +$platformList = Get-AndroidPackagesByVersion -AndroidPackages $androidPackages ` + -PrefixPackageName "platforms;" ` + -MinimumVersion $platformMinVersion ` + -Delimiter "-" ` + -Index 1 + +# build-tools +[version]$buildToolsMinVersion = $androidToolset.build_tools_min_version +$buildToolsList = Get-AndroidPackagesByVersion -AndroidPackages $androidPackages ` + -PrefixPackageName "build-tools;" ` + -MinimumVersion $buildToolsMinVersion ` + -Delimiter ";" ` + -Index 1 Install-AndroidSDKPackages -AndroidSDKManagerPath $sdkManager ` -AndroidSDKRootPath $sdkRoot ` - -AndroidPackages $androidToolset.build_tools ` - -PrefixPackageName "build-tools;" + -AndroidPackages $platformList + +Install-AndroidSDKPackages -AndroidSDKManagerPath $sdkManager ` + -AndroidSDKRootPath $sdkRoot ` + -AndroidPackages $buildToolsList Install-AndroidSDKPackages -AndroidSDKManagerPath $sdkManager ` -AndroidSDKRootPath $sdkRoot ` @@ -71,6 +80,7 @@ $ndkRoot = "C:\Program Files (x86)\Android\android-sdk\ndk-bundle" if (Test-Path $ndkRoot) { setx ANDROID_HOME $sdkRoot /M + setx ANDROID_SDK_ROOT $sdkRoot /M setx ANDROID_NDK_HOME $ndkRoot /M setx ANDROID_NDK_PATH $ndkRoot /M } else { diff --git a/images/win/scripts/Installers/Update-DockerImages.ps1 b/images/win/scripts/Installers/Update-DockerImages.ps1 index d1a689d45..ec5df1b4a 100644 --- a/images/win/scripts/Installers/Update-DockerImages.ps1 +++ b/images/win/scripts/Installers/Update-DockerImages.ps1 @@ -16,18 +16,7 @@ function DockerPull { } } -if (Test-IsWin16) { - DockerPull mcr.microsoft.com/windows/servercore:ltsc2016 - DockerPull mcr.microsoft.com/windows/nanoserver:10.0.14393.953 - DockerPull mcr.microsoft.com/dotnet/framework/aspnet:4.8-windowsservercore-ltsc2016 - DockerPull mcr.microsoft.com/dotnet/framework/runtime:4.8-windowsservercore-ltsc2016 +$dockerToolset = (Get-ToolsetContent).docker +foreach($dockerImage in $dockerToolset.images) { + DockerPull $dockerImage } - -if (Test-IsWin19) { - DockerPull mcr.microsoft.com/windows/servercore:ltsc2019 - DockerPull mcr.microsoft.com/windows/nanoserver:1809 - DockerPull mcr.microsoft.com/dotnet/framework/aspnet:4.8-windowsservercore-ltsc2019 - DockerPull mcr.microsoft.com/dotnet/framework/runtime:4.8-windowsservercore-ltsc2019 -} - -DockerPull microsoft/aspnetcore-build:1.0-2.0 diff --git a/images/win/scripts/SoftwareReport/SoftwareReport.Android.psm1 b/images/win/scripts/SoftwareReport/SoftwareReport.Android.psm1 index f85423c2c..d3c9a1743 100644 --- a/images/win/scripts/SoftwareReport/SoftwareReport.Android.psm1 +++ b/images/win/scripts/SoftwareReport/SoftwareReport.Android.psm1 @@ -31,7 +31,6 @@ function Get-AndroidInstalledPackages { return $androidInstalledPackages } - function Build-AndroidTable { $packageInfo = Get-AndroidInstalledPackages return @( diff --git a/images/win/scripts/SoftwareReport/SoftwareReport.Generator.ps1 b/images/win/scripts/SoftwareReport/SoftwareReport.Generator.ps1 index efc773546..65727f0ad 100644 --- a/images/win/scripts/SoftwareReport/SoftwareReport.Generator.ps1 +++ b/images/win/scripts/SoftwareReport/SoftwareReport.Generator.ps1 @@ -1,3 +1,5 @@ +$ErrorActionPreference = "Stop" + Import-Module MarkdownPS Import-Module (Join-Path $PSScriptRoot "SoftwareReport.Android.psm1") -DisableNameChecking Import-Module (Join-Path $PSScriptRoot "SoftwareReport.Browsers.psm1") -DisableNameChecking @@ -72,7 +74,6 @@ $markdown += New-MDList -Style Unordered -Lines @( $markdown += New-MDHeader "Tools" -Level 3 $markdown += New-MDList -Style Unordered -Lines @( - (Get-AzCosmosDBEmulatorVersion), (Get-AzCopyVersion), (Get-BazelVersion), (Get-BazeliskVersion), @@ -89,15 +90,12 @@ $markdown += New-MDList -Style Unordered -Lines @( (Get-KubectlVersion), (Get-KindVersion), (Get-MinGWVersion), - (Get-MySQLVersion), (Get-MercurialVersion), (Get-NSISVersion), (Get-NewmanVersion), (Get-OpenSSLVersion), (Get-PackerVersion), (Get-PulumiVersion), - (Get-SQLPSVersion), - (Get-SQLServerPSVersion), (Get-SVNVersion), (Get-GHCVersion), (Get-CabalVersion), @@ -167,6 +165,14 @@ $markdown += New-MDHeader "Databases" -Level 3 $markdown += Build-DatabasesMarkdown $markdown += New-MDNewLine +$markdown += New-MDHeader "Database tools" -Level 3 +$markdown += New-MDList -Style Unordered -Lines @( + (Get-AzCosmosDBEmulatorVersion), + (Get-SQLPSVersion), + (Get-MySQLVersion) +) +$markdown += New-MDNewLine + $vs = Get-VisualStudioVersion $markdown += New-MDHeader "$($vs.Name)" -Level 3 $markdown += $vs | New-MDTable @@ -229,4 +235,8 @@ $markdown += New-MDHeader "Android" -Level 3 $markdown += Build-AndroidTable | New-MDTable $markdown += New-MDNewLine +# Docker images section +$markdown += New-MDHeader "Cached Docker images" -Level 3 +$markdown += New-MDList -Style Unordered -Lines @(Get-CachedDockerImages) + $markdown | Out-File -FilePath "C:\InstalledSoftware.md" \ No newline at end of file diff --git a/images/win/scripts/SoftwareReport/SoftwareReport.Tools.psm1 b/images/win/scripts/SoftwareReport/SoftwareReport.Tools.psm1 index cf5c7b0b7..690f36764 100644 --- a/images/win/scripts/SoftwareReport/SoftwareReport.Tools.psm1 +++ b/images/win/scripts/SoftwareReport/SoftwareReport.Tools.psm1 @@ -34,7 +34,7 @@ function Get-CodeQLBundleVersion { $CodeQLVersionsWildcard = Join-Path $Env:AGENT_TOOLSDIRECTORY -ChildPath "codeql" | Join-Path -ChildPath "*" $CodeQLVersionPath = Get-ChildItem $CodeQLVersionsWildcard | Select-Object -First 1 -Expand FullName $CodeQLPath = Join-Path $CodeQLVersionPath -ChildPath "x64" | Join-Path -ChildPath "codeql" | Join-Path -ChildPath "codeql.exe" - $CodeQLVersion = $($CodeQLPath version --quiet) + $CodeQLVersion = & $CodeQLPath version --quiet return "CodeQL Action Bundle $CodeQLVersion" } @@ -125,12 +125,6 @@ function Get-SQLPSVersion { return "SQLPS $version" } -function Get-SQLServerPSVersion { - $module = Get-Module -Name SQLServer -ListAvailable - $version = $module.Version - return "SQLServer PS $version" -} - function Get-SVNVersion { $svnVersion = $(svn --version --quiet) return "Subversion (SVN) $svnVersion" diff --git a/images/win/scripts/Tests/Android.Tests.ps1 b/images/win/scripts/Tests/Android.Tests.ps1 index 8a1b6c0bb..d6c81db4a 100644 --- a/images/win/scripts/Tests/Android.Tests.ps1 +++ b/images/win/scripts/Tests/Android.Tests.ps1 @@ -2,16 +2,27 @@ Import-Module (Join-Path $PSScriptRoot "..\SoftwareReport\SoftwareReport.Android Describe "Android SDK" { $androidToolset = (Get-ToolsetContent).android + $androidPackages = Get-AndroidPackages -AndroidSDKManagerPath (Get-AndroidSDKManagerPath) $androidInstalledPackages = Get-AndroidInstalledPackages $platformTestCases = @() - $platformList = $androidToolset.platform_list + [int]$platformMinVersion = $androidToolset.platform_min_version + $platformList = Get-AndroidPackagesByVersion -AndroidPackages $androidPackages ` + -PrefixPackageName "platforms;" ` + -MinimumVersion $platformMinVersion ` + -Delimiter "-" ` + -Index 1 $platformList | ForEach-Object { $platformTestCases += @{ platformVersion = $_; installedPackages = $androidInstalledPackages } } $buildToolsTestCases = @() - $buildToolsList = $androidToolset.build_tools + [version]$buildToolsMinVersion = $androidToolset.build_tools_min_version + $buildToolsList = Get-AndroidPackagesByVersion -AndroidPackages $androidPackages ` + -PrefixPackageName "build-tools;" ` + -MinimumVersion $buildToolsMinVersion ` + -Delimiter ";" ` + -Index 1 $buildToolsList | ForEach-Object { $buildToolsTestCases += @{ buildToolsVersion = $_; installedPackages = $androidInstalledPackages } } @@ -35,14 +46,14 @@ Describe "Android SDK" { } It "Platform version is installed" -TestCases $platformTestCases { - "$installedPackages" | Should -Match "platforms;$platformVersion" + "$installedPackages" | Should -Match "$platformVersion" } It "Platform build tools is installed" -TestCases $buildToolsTestCases { - "$installedPackages" | Should -Match "build-tools;$buildToolsVersion" + "$installedPackages" | Should -Match "$buildToolsVersion" } - if (Test-isWin19) { + if (Test-IsWin19) { It "Extra package is installed" -TestCases $extraPackagesTestCases { "$installedPackages" | Should -Match "extras;$extraPackage" } diff --git a/images/win/toolsets/toolset-2016.json b/images/win/toolsets/toolset-2016.json index c764e0802..5e0b23c6b 100644 --- a/images/win/toolsets/toolset-2016.json +++ b/images/win/toolsets/toolset-2016.json @@ -121,17 +121,14 @@ "3.8.0", "4.3.0", "4.4.0", - "4.6.0" + "4.6.0", + "4.7.0" ] } ], "android": { - "platform_list": [ - "android-30", "android-29", "android-28", "android-27", "android-26", "android-25", "android-24", "android-23", "android-22", "android-21", "android-19" - ], - "build_tools": [ - "30.0.2", "30.0.1", "30.0.0", "29.0.3", "29.0.2", "29.0.1", "29.0.0", "28.0.3", "28.0.2", "28.0.1", "28.0.0", "27.0.3", "27.0.2", "27.0.1", "27.0.0", "26.0.3", "26.0.2", "26.0.1", "26.0.0", "25.0.3", "25.0.2", "25.0.1", "25.0.0", "24.0.3", "24.0.2", "24.0.1", "24.0.0", "23.0.3", "23.0.2", "23.0.1", "22.0.1", "21.1.2", "20.0.0", "19.1.0" - ], + "platform_min_version": "19", + "build_tools_min_version": "19.1.0", "extra_list": [ "android;m2repository", "google;m2repository", @@ -230,5 +227,14 @@ ], "vsix": [ ] + }, + "docker": { + "images": [ + "mcr.microsoft.com/windows/servercore:ltsc2016", + "mcr.microsoft.com/windows/nanoserver:10.0.14393.953", + "mcr.microsoft.com/dotnet/framework/aspnet:4.8-windowsservercore-ltsc2016", + "mcr.microsoft.com/dotnet/framework/runtime:4.8-windowsservercore-ltsc2016", + "microsoft/aspnetcore-build:1.0-2.0" + ] } } diff --git a/images/win/toolsets/toolset-2019.json b/images/win/toolsets/toolset-2019.json index 7184dc037..bf1d0dff6 100644 --- a/images/win/toolsets/toolset-2019.json +++ b/images/win/toolsets/toolset-2019.json @@ -130,17 +130,14 @@ "3.8.0", "4.3.0", "4.4.0", - "4.6.0" + "4.6.0", + "4.7.0" ] } ], "android": { - "platform_list": [ - "android-30", "android-29", "android-28", "android-27", "android-26", "android-25", "android-24", "android-23", "android-22", "android-21", "android-19" - ], - "build_tools": [ - "30.0.2", "30.0.1", "30.0.0", "29.0.3", "29.0.2", "29.0.1", "29.0.0", "28.0.3", "28.0.2", "28.0.1", "28.0.0", "27.0.3", "27.0.2", "27.0.1", "27.0.0", "26.0.3", "26.0.2", "26.0.1", "26.0.0", "25.0.3", "25.0.2", "25.0.1", "25.0.0", "24.0.3", "24.0.2", "24.0.1", "24.0.0", "23.0.3", "23.0.2", "23.0.1", "22.0.1", "21.1.2", "20.0.0", "19.1.0" - ], + "platform_min_version": "19", + "build_tools_min_version": "19.1.0", "extra_list": [ "android;m2repository", "google;m2repository", @@ -282,5 +279,14 @@ "id": "VSInstallerProjects" } ] + }, + "docker": { + "images": [ + "mcr.microsoft.com/windows/servercore:ltsc2019", + "mcr.microsoft.com/windows/nanoserver:1809", + "mcr.microsoft.com/dotnet/framework/aspnet:4.8-windowsservercore-ltsc2019", + "mcr.microsoft.com/dotnet/framework/runtime:4.8-windowsservercore-ltsc2019", + "microsoft/aspnetcore-build:1.0-2.0" + ] } }