diff --git a/images.CI/azure-pipelines/image-generation.yml b/images.CI/azure-pipelines/image-generation.yml
index 03b084ca..d2adc15a 100644
--- a/images.CI/azure-pipelines/image-generation.yml
+++ b/images.CI/azure-pipelines/image-generation.yml
@@ -8,6 +8,7 @@ jobs:
- job:
pool: ci-agent-pool
timeoutInMinutes: 600
+ cancelTimeoutInMinutes: 30
variables:
- group: Image Generation Variables
@@ -74,4 +75,4 @@ jobs:
-ClientSecret $(CLIENT_SECRET) `
-Image ${{ parameters.image_type }} `
-SubscriptionId $(AZURE_SUBSCRIPTION) `
- -TenantId $(AZURE_TENANT)
\ No newline at end of file
+ -TenantId $(AZURE_TENANT)
diff --git a/images.CI/cleanup.ps1 b/images.CI/cleanup.ps1
index 00050d55..31abcb56 100644
--- a/images.CI/cleanup.ps1
+++ b/images.CI/cleanup.ps1
@@ -11,7 +11,7 @@ az login --service-principal --username $ClientId --password $ClientSecret --ten
$TempResourceGroupName = "${ResourcesNamePrefix}_${Image}"
-$groupExist = az group exists --name $TempResourceGroupName --subscription $SubscriptionId | Out-Null
+$groupExist = az group exists --name $TempResourceGroupName --subscription $SubscriptionId
if ($groupExist -eq "true") {
Write-Host "Found a match, deleting temporary files"
az group delete --name $TempResourceGroupName --subscription $SubscriptionId --yes | Out-Null
diff --git a/images/linux/Ubuntu1804-README.md b/images/linux/Ubuntu1804-README.md
index c48f5caa..952b9769 100644
--- a/images/linux/Ubuntu1804-README.md
+++ b/images/linux/Ubuntu1804-README.md
@@ -1,10 +1,13 @@
+
# Ubuntu 18.04.4 LTS
-The following software is installed on machines with the 20200406.2 update.
+The following software is installed on machines with the 20200430.1 update.
***
+- Homebrew on Linux (Homebrew 2.2.14
+Homebrew/linuxbrew-core (git revision d5a54e; last commit 2020-04-30))
- 7-Zip 16.02
-- Ansible (ansible 2.9.6)
+- Ansible (ansible 2.9.7)
- AzCopy (azcopy 7.3.0-netcore)
-- Azure CLI (azure-cli 2.3.1)
+- Azure CLI (azure-cli 2.5.1)
- Azure CLI (azure-devops 0.18.0)
- Basic CLI:
- curl
@@ -15,6 +18,7 @@ The following software is installed on machines with the 20200406.2 update.
- iputils-ping
- jq
- libcurl3
+ - libgbm-dev
- libicu55
- libunwind8
- locales
@@ -32,16 +36,21 @@ The following software is installed on machines with the 20200406.2 update.
- wget
- zip
- zstd
-- AWS CLI (aws-cli/1.18.37 Python/2.7.17 Linux/5.0.0-1035-azure botocore/1.15.37)
+- Alibaba Cloud CLI (3.0.39)
+- AWS CLI (aws-cli/1.18.49 Python/2.7.17 Linux/5.3.0-1020-azure botocore/1.15.49)
- build-essential
- Clang 6.0 (6.0.0)
- Clang 8 (8.0.0)
- Clang 9 (9.0.0)
-- Swift version 5.2.1 (swift-5.2.1-RELEASE)
+- Swift version 5.2.3 (swift-5.2.3-RELEASE)
Target: x86_64-unknown-linux-gnu
-- CMake (cmake version 3.16.2)
+- CMake (cmake version 3.17.0)
+- Podman (podman --version)
+Buildah (buildah --version)
+Skopeo (skopeo --version)
- Docker Compose (docker-compose version 1.25.4, build 8d51620a)
- Docker-Moby (Docker version 3.0.11+azure, build eb310fca49568dccd87c6136f774ef6fff2a1b51)
+- Docker-Buildx (0.3.1+azure)
- .NET Core SDK:
- 3.1.201
- 3.1.200
@@ -108,20 +117,20 @@ Target: x86_64-unknown-linux-gnu
- 2.1.302
- 2.1.301
- 2.1.300
-- Erlang (Erlang (SMP,ASYNC_THREADS,HIPE) (BEAM) emulator version 10.7)
-- Firefox (Mozilla Firefox 74.0.1)
+- Erlang (Erlang (SMP,ASYNC_THREADS,HIPE) (BEAM) emulator version 10.7.1)
+- Firefox (Mozilla Firefox 75.0)
- Geckodriver (0.26.0); Gecko Driver is available via GECKOWEBDRIVER environment variable
- GNU C++ 7.5.0
- GNU C++ 8.4.0
-- GNU C++ 9.2.1
+- GNU C++ 9.3.0
- GNU Fortran 8.4.0
-- GNU Fortran 9.2.1
-- Git (2.26.0)
+- GNU Fortran 9.3.0
+- Git (2.26.2)
- Git Large File Storage (LFS) (2.10.0)
- Hub CLI (2.14.2)
-- Google Chrome (Google Chrome 80.0.3987.163 )
-- ChromeDriver 80.0.3987.106 (f68069574609230cf9b635cd784cfb1bf81bb53a-refs/branch-heads/3987@{#882}); Chrome Driver is available via CHROMEWEBDRIVER environment variable
-- Google Cloud SDK (287.0.0)
+- Google Chrome (Google Chrome 81.0.4044.129 )
+- ChromeDriver 81.0.4044.69 (6813546031a4bc83f717a2ef7cd4ac6ec1199132-refs/branch-heads/4044@{#776}); Chrome Driver is available via CHROMEWEBDRIVER environment variable
+- Google Cloud SDK (290.0.1)
- Haskell Cabal (cabal-install version 2.0.0.1
compiled using version 2.0.1.1 of the Cabal library )
- Haskell Cabal (cabal-install version 2.2.0.0
@@ -144,46 +153,47 @@ compiled using version 3.2.0.0 of the Cabal library )
- GHC (The Glorious Glasgow Haskell Compilation System, version 8.8.3)
- GHC (The Glorious Glasgow Haskell Compilation System, version 8.10.1)
- Haskell Stack (Version 2.1.3, Git revision 636e3a759d51127df2b62f90772def126cdf6d1f (7735 commits) x86_64 hpack-0.31.2)
-- Heroku (heroku/7.39.2 linux-x64 node-v12.13.0)
-- HHVM (HipHop VM 4.52.0 (rel))
+- Heroku (heroku/7.39.5 linux-x64 node-v12.16.2)
+- HHVM (HipHop VM 4.55.0 (rel))
- ImageMagick
- Azul Zulu OpenJDK:
- - 7 (openjdk version "1.7.0_252")
- - 8 (openjdk version "1.8.0_242") (default)
- - 11 (openjdk version "11.0.6" 2020-01-14 LTS)
+ - 7 (openjdk version "1.7.0_262")
+ - 8 (openjdk version "1.8.0_252") (default)
+ - 11 (openjdk version "11.0.7" 2020-04-14 LTS)
- 12 (openjdk version "12.0.2" 2019-07-16)
- Ant (Apache Ant(TM) version 1.10.5 compiled on March 28 2019)
- Gradle 6.3
- Maven (Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f))
- Kind (kind v0.7.0 go1.13.6 linux/amd64)
- kubectl (error: Missing or incomplete configuration info. Please point to an existing, complete config file:)
-- helm (v3.1.2+gd878d4d)
-- Leiningen (Leiningen 2.9.3 on Java 1.8.0_242 OpenJDK 64-Bit Server VM)
+- helm (v3.2.0+ge11b7ce)
+- Leiningen (Leiningen 2.9.3 on Java 1.8.0_252 OpenJDK 64-Bit Server VM)
- Mercurial (Mercurial Distributed SCM (version 4.5.3))
- Miniconda (conda 4.8.2)
- Mono (Mono JIT compiler version 6.8.0.105 (tarball Tue Feb 4 21:20:20 UTC 2020))
- MySQL (mysql Ver 14.14 Distrib 5.7.29, for Linux (x86_64) using EditLine wrapper)
- MySQL Server (user:root password:root)
- MS SQL Server Client Tools
+- MySQL service is disabled by default. Use the following command as a part of your job to start the service: 'sudo systemctl start mysql.service'
- nvm (0.35.3)
-- Node.js (v12.16.1)
+- Node.js (v12.16.3)
- Grunt (grunt-cli v1.2.0)
- Gulp (CLI version: 2.2.0
Local version: Unknown)
-- n (6.4.0)
+- n (6.5.1)
- Parcel (1.12.4)
- TypeScript (Version 3.8.3)
-- Webpack (4.42.1)
+- Webpack (4.43.0)
- Webpack CLI (3.3.11)
- Yarn (1.22.4)
-- Bazel (bazel 3.0.0)
-- Bazelisk (1.3.0)
+- Bazel (bazel 3.1.0)
+- Bazelisk (1.4.0)
- PhantomJS (2.1.1)
-- PHP 7.1 (PHP 7.1.33-14+ubuntu18.04.1+deb.sury.org+1 (cli) (built: Mar 20 2020 13:57:43) ( NTS ))
-- PHP 7.2 (PHP 7.2.29-1+ubuntu18.04.1+deb.sury.org+1 (cli) (built: Mar 20 2020 13:54:39) ( NTS ))
-- PHP 7.3 (PHP 7.3.16-1+ubuntu18.04.1+deb.sury.org+1 (cli) (built: Mar 20 2020 13:51:46) ( NTS ))
-- PHP 7.4 (PHP 7.4.4 (cli) (built: Mar 20 2020 13:47:45) ( NTS ))
-- Composer (Composer version 1.10.1 2020-03-13 20:34:27)
+- PHP 7.1 (PHP 7.1.33-15+ubuntu18.04.1+deb.sury.org+1 (cli) (built: Apr 19 2020 07:59:27) ( NTS ))
+- PHP 7.2 (PHP 7.2.30-1+ubuntu18.04.1+deb.sury.org+1 (cli) (built: Apr 19 2020 07:50:50) ( NTS ))
+- PHP 7.3 (PHP 7.3.17-1+ubuntu18.04.1+deb.sury.org+1 (cli) (built: Apr 19 2020 07:44:26) ( NTS ))
+- PHP 7.4 (PHP 7.4.5 (cli) (built: Apr 19 2020 07:36:30) ( NTS ))
+- Composer (Composer version 1.10.5 2020-04-10 11:44:22)
- PHPUnit (PHPUnit 7.5.20 by Sebastian Bergmann and contributors.)
- Pollinate
- psql (PostgreSQL) 10.12
@@ -191,29 +201,31 @@ Local version: Unknown)
- ruby (2.5.1p57)
- gem (3.1.2)
- rustup (1.21.1)
-- rust (1.42.0)
-- cargo (1.42.0)
-- rustfmt (1.4.11-stable)
+- rust (1.43.0)
+- cargo (1.43.0)
+- rustfmt (1.4.12-stable)
- clippy (0.0.212)
-- rustdoc (1.42.0)
+- rustdoc (1.43.0)
- bindgen (0.53.2)
-- cbindgen (0.14.0)
-- Julia (julia version 1.4.0)
-- sbt (1.3.9)
+- cbindgen (0.14.1)
+- Julia (julia version 1.4.1)
+- sbt (1.3.10)
- Selenium server standalone (available via SELENIUM_JAR_PATH environment variable)
- Sphinx Open Source Search Server
- Subversion (svn, version 1.9.7 (r1800392))
- Terraform (Terraform v0.12.24)
- Packer (1.5.5)
- Vcpkg 2020.02.04-unknownhash
-- Zeit Now CLI (17.1.1)
-- MongoDB on Linux (2020-04-07T01:27:09.357+0000 I CONTROL [initandlisten] db version v4.2.5
-2020-04-07T01:27:09.357+0000 I CONTROL [initandlisten] git version: 2261279b51ea13df08ae708ff278f0679c59dc32
-2020-04-07T01:27:09.357+0000 I CONTROL [initandlisten] OpenSSL version: OpenSSL 1.1.1d 10 Sep 2019)
+- Zeit Now CLI (18.0.0)
+- MongoDB on Linux (2020-04-30T20:19:37.962+0000 I CONTROL [initandlisten] db version v4.2.6
+2020-04-30T20:19:37.962+0000 I CONTROL [initandlisten] git version: 20364840b8f1af16917e4c23c1b5f5efd8b352f8
+2020-04-30T20:19:37.962+0000 I CONTROL [initandlisten] OpenSSL version: OpenSSL 1.1.1g 21 Apr 2020)
+- Haveged 1.9.1-6
+- AWS SAM CLI, version 0.48.0
- Go 1.11 (go version go1.11.13 linux/amd64)
- Go 1.12 (go version go1.12.17 linux/amd64)
-- Go 1.13 (go version go1.13.9 linux/amd64)
-- Go 1.14 (go version go1.14.1 linux/amd64)
+- Go 1.13 (go version go1.13.10 linux/amd64)
+- Go 1.14 (go version go1.14.2 linux/amd64)
- Google Repository 58
- Google Play services 49
- Google APIs 24
@@ -223,7 +235,7 @@ Local version: Unknown)
- CMake 3.10.2.4988404
3.6.4111459
- Android Support Repository 47.0.0
-- Android SDK Platform-Tools 29.0.6
+- Android SDK Platform-Tools 30.0.0
- Android SDK Platform 29
- Android SDK Platform 28
- Android SDK Platform 27
@@ -267,7 +279,7 @@ Local version: Unknown)
- Android SDK Build-Tools 20.0.0
- Android SDK Build-Tools 19.1.0
- Android SDK Build-Tools 17.0.0
-- Android NDK 21.0.6113669
+- Android NDK 21.1.6352462
- Az Module (1.0.0)
- Az Module (1.6.0)
- Az Module (2.3.2)
@@ -276,25 +288,20 @@ Local version: Unknown)
- Az Module (3.1.0)
- Az Module (3.5.0)
- Cached container images
- - node:10 (Digest: sha256:816cfaee24dc2cea534e21d7f9c55f3b22c8bc6af61d8445f8d0178168ef3b28)
- - node:12 (Digest: sha256:46f4c17e1edbde36d60a9f6362db7912cfe301bac89afef7cc92421ab3e7ca18)
- - buildpack-deps:stretch (Digest: sha256:a711a64b26285b42cd02618a191ec6c99650449f698858e0e2cc0535ab85e4dd)
- - debian:9 (Digest: sha256:344470192d10cf7cf0bedcb183effbe99065829a8dbe68e65e703faf46fc10c1)
- - debian:8 (Digest: sha256:a77aa078ad4769799286bba5fc198deda5bfd4d0144a24e6aa0c8dddf0a22833)
- - node:10-alpine (Digest: sha256:9a88e3bc3f845b74d2fd8adcbc64608736a8be4a3e9dc7aa34fa743e3677a552)
- - node:12-alpine (Digest: sha256:6b5b783c9cfe229af0bd5b0b677dd32005bb22d58465f3d0fe7fbd1c60ce068c)
+ - jekyll/builder:latest (Digest: sha256:c97cebe5f614888d61bebf234c1c93399aa74463ffdb175fd9b975a4b0fa8f13)
+ - node:12-alpine (Digest: sha256:84f5c9090cc741421b2376b2393e7d5fa2f89d36167c12eb57aef16dd64ecf6c)
+ - node:12 (Digest: sha256:5fe210262a6dc0c1f5555976356cf076c7a8c7645b0c781bc8a913881bbe7942)
+ - node:10-alpine (Digest: sha256:b2db1b026f1b01a6a91f39d8204b89c5c13d2b40a017dd4d9253ab066c9cf2cb)
+ - alpine:3.9 (Digest: sha256:414e0518bb9228d35e4cd5165567fb91d26c6a214e9c95899e1e056fcd349011)
+ - alpine:3.10 (Digest: sha256:f0e9534a598e501320957059cb2a23774b4d4072e37c7b2cf7e95b241f019e35)
+ - node:10 (Digest: sha256:e0c512c52c3ca8797fc60ada3698004f5cba13af4a8a5968041edac1b5d98577)
+ - buildpack-deps:stretch (Digest: sha256:38353fdc334fa612f3dedb3d1e8172c3e63de706ca80260856e5708d0fd1146a)
+ - debian:9 (Digest: sha256:666ffd4fbcdff07edcbd65f0ec1dc86ed294f5e3be93eb26280575f77427df46)
+ - debian:8 (Digest: sha256:734728c8e411698485ae644fc988dad06f757565e292b5b85edc084befa37bbb)
- alpine:3.8 (Digest: sha256:2bb501e6173d9d006e56de5bce2720eb06396803300fe1687b58a7ff32bf4c14)
- - alpine:3.9 (Digest: sha256:115731bab0862031b44766733890091c17924f9b7781b79997f5f163be262178)
- - alpine:3.10 (Digest: sha256:7c3773f7bcc969f03f8f653910001d99a9d324b4b9caa008846ad2c3089f5a5f)
- - jekyll/builder:latest (Digest: sha256:875de39aa06300c749e26a79f39cdfa31404e4f2dbd2953cd4ebb0442bffda9e)
+ - ubuntu:14.04 (Digest: sha256:ffc76f71dd8be8c9e222d420dc96901a07b61616689a44c7b3ef6a10b7213de4)
- alpine:3.7 (Digest: sha256:8421d9a84432575381bfabd248f1eb56f3aa21d9d7cd2511583c68c9b7511d10)
- mcr.microsoft.com/azure-pipelines/node8-typescript:latest (Digest: sha256:e52e60b9f71183969830a3664279b5d8c799b4b0ec2c25a0686f7c02f6a9669a)
-- Python:
- - Python 2.7.17
- - Python 3.5.9
- - Python 3.6.10
- - Python 3.7.6
- - Python 3.8.2
- Ruby:
- Ruby 2.4.10
- Ruby 2.5.8
@@ -307,5 +314,11 @@ Local version: Unknown)
- pip (pip 9.0.1 from /usr/lib/python2.7/dist-packages (python 2.7))
- Python3 (Python 3.6.9)
- pip3 (pip 9.0.1 from /usr/lib/python3/dist-packages (python 3.6))
+- Python:
+ - Python 2.7.18
+ - Python 3.5.9
+ - Python 3.6.10
+ - Python 3.7.7
+ - Python 3.8.2
- Boost C++ Libraries 1.69.0
- Boost C++ Libraries 1.72.0
diff --git a/images/linux/scripts/installers/1604/basic.sh b/images/linux/scripts/installers/1604/basic.sh
index ef6bac32..ce66845e 100644
--- a/images/linux/scripts/installers/1604/basic.sh
+++ b/images/linux/scripts/installers/1604/basic.sh
@@ -38,7 +38,8 @@ apt-fast install -y --no-install-recommends \
upx \
wget \
zip \
- zstd
+ zstd \
+ lib32z1
# Electron / VSCode / GitHub Desktop / kubectl prereqs
apt-fast install -y --no-install-recommends \
@@ -101,3 +102,4 @@ DocumentInstalledItemIndent "wget"
DocumentInstalledItemIndent "zip"
DocumentInstalledItemIndent "zstd"
DocumentInstalledItemIndent "gnupg2"
+DocumentInstalledItemIndent "lib32z1"
diff --git a/images/linux/scripts/installers/1804/basic.sh b/images/linux/scripts/installers/1804/basic.sh
index 2b8c0018..c16b53de 100644
--- a/images/linux/scripts/installers/1804/basic.sh
+++ b/images/linux/scripts/installers/1804/basic.sh
@@ -133,6 +133,9 @@ apt-get install -y --no-install-recommends parallel
echo "Install gnupg2"
apt-get install -y --no-install-recommends gnupg2
+echo "Install lib32z1"
+apt-get install -y --no-install-recommends lib32z1
+
# Run tests to determine that the software installed as expected
echo "Testing to make sure that script performed as expected, and basic scenarios work"
for cmd in curl file ftp jq netcat ssh parallel rsync shellcheck sudo telnet time unzip wget zip; do
@@ -142,6 +145,13 @@ for cmd in curl file ftp jq netcat ssh parallel rsync shellcheck sudo telnet tim
fi
done
+# Workaround for systemd-resolve, since sometimes stub resolver does not work properly. Details: https://github.com/actions/virtual-environments/issues/798
+echo "Create resolv.conf link."
+if [[ -f /run/systemd/resolve/resolv.conf ]]; then
+ echo "Create resolv.conf link."
+ ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
+fi
+
# Document what was added to the image
echo "Lastly, documenting what we added to the metadata file"
DocumentInstalledItem "Basic CLI:"
@@ -172,3 +182,4 @@ DocumentInstalledItemIndent "wget"
DocumentInstalledItemIndent "zip"
DocumentInstalledItemIndent "zstd"
DocumentInstalledItemIndent "gnupg2"
+DocumentInstalledItemIndent "lib32z1"
diff --git a/images/linux/scripts/installers/Install-Toolset.ps1 b/images/linux/scripts/installers/Install-Toolset.ps1
index b6e4abbd..618669dd 100644
--- a/images/linux/scripts/installers/Install-Toolset.ps1
+++ b/images/linux/scripts/installers/Install-Toolset.ps1
@@ -28,7 +28,8 @@ $ErrorActionPreference = "Stop"
# Get toolset content
$toolsetJson = Get-Content -Path "$env:INSTALLER_SCRIPT_FOLDER/toolset.json" -Raw
-$tools = ConvertFrom-Json -InputObject $toolsetJson | Select-Object -ExpandProperty toolcache
+$toolsToInstall = @("Python", "Node")
+$tools = ConvertFrom-Json -InputObject $toolsetJson | Select-Object -ExpandProperty toolcache | Where {$ToolsToInstall -contains $_.Name}
foreach ($tool in $tools) {
# Get versions manifest for current tool
diff --git a/images/linux/scripts/installers/Validate-Toolset.ps1 b/images/linux/scripts/installers/Validate-Toolset.ps1
index e0b42b64..ddb23e92 100644
--- a/images/linux/scripts/installers/Validate-Toolset.ps1
+++ b/images/linux/scripts/installers/Validate-Toolset.ps1
@@ -27,8 +27,9 @@ $ErrorActionPreference = "Stop"
# Define executables for cached tools
$toolsExecutables = @{
- Python = @("python", "bin/pip");
+ Python = @("python", "bin/pip")
node = @("bin/node", "bin/npm")
+ PyPy = @("bin/python", "bin/pip")
}
# Get toolset content
@@ -43,6 +44,11 @@ foreach($tool in $tools) {
$toolExecs = $toolsExecutables[$tool.name]
foreach ($version in $tool.versions) {
+ # Add wildcard if missing
+ if (-not $version.Contains('*')) {
+ $version += '.*'
+ }
+
# Check if version folder exists
$expectedVersionPath = Join-Path $toolPath $version
if (-not (Test-Path $expectedVersionPath)) {
@@ -59,7 +65,14 @@ foreach($tool in $tools) {
Write-Host "Run validation test for $($tool.name)($($tool.arch)) $($foundVersion.name) executables..."
Run-ExecutableTests -Executables $toolExecs -ToolPath $foundVersionPath
+ $foundVersionName = $foundVersion.name
+ if ($tool.name -eq 'PyPy')
+ {
+ $pypyVersion = & "$foundVersionPath/bin/python" -c "import sys;print(sys.version.split('\n')[1])"
+ $foundVersionName = "{0} {1}" -f $foundVersionName, $pypyVersion
+ }
+
# Add tool version to documentation
- Invoke-Expression "bash -c `"source $env:HELPER_SCRIPTS/document.sh; DocumentInstalledItemIndent '$($tool.name) $($foundVersion.name)'`""
+ Invoke-Expression "bash -c `"source $env:HELPER_SCRIPTS/document.sh; DocumentInstalledItemIndent '$($tool.name) $foundVersionName'`""
}
}
\ No newline at end of file
diff --git a/images/linux/scripts/installers/azcopy.sh b/images/linux/scripts/installers/azcopy.sh
index 9e97a3ec..3efe54d1 100644
--- a/images/linux/scripts/installers/azcopy.sh
+++ b/images/linux/scripts/installers/azcopy.sh
@@ -7,19 +7,32 @@
# Source the helpers for use with the script
source $HELPER_SCRIPTS/document.sh
-# Install AzCopy
+# Install AzCopy7
wget -O azcopy.tar.gz https://aka.ms/downloadazcopylinux64
tar -xf azcopy.tar.gz
rm azcopy.tar.gz
./install.sh
+# Install AzCopy10
+wget -O /tmp/azcopy.tar.gz https://aka.ms/downloadazcopy-v10-linux
+tar zxvf /tmp/azcopy.tar.gz --strip-components=1 -C /tmp
+mv /tmp/azcopy /usr/local/bin/azcopy10
+
# Run tests to determine that the software installed as expected
echo "Testing to make sure that script performed as expected, and basic scenarios work"
if ! command -v azcopy; then
- echo "azcopy was not installed"
+ echo "azcopy7 was not installed"
+ exit 1
+fi
+
+if ! command -v azcopy10; then
+ echo "azcopy10 was not installed"
exit 1
fi
# Document what was added to the image
+azcopy7Version=$(azcopy --version | awk '{print $2}' | cut -d '-' -f 1)
+azcopy10Version=$(azcopy10 --version | awk '{print $3}')
echo "Lastly, documenting what we added to the metadata file"
-DocumentInstalledItem "AzCopy ($(azcopy --version))"
+DocumentInstalledItem "AzCopy7 (available by azcopy alias) $azcopy7Version"
+DocumentInstalledItem "AzCopy10 (available by azcopy10 alias) $azcopy10Version"
diff --git a/images/linux/scripts/installers/cleanup.sh b/images/linux/scripts/installers/cleanup.sh
index fe284f33..954e51fc 100644
--- a/images/linux/scripts/installers/cleanup.sh
+++ b/images/linux/scripts/installers/cleanup.sh
@@ -6,6 +6,7 @@ before=$(df / -Pm | awk 'NR==2{print $4}')
# clears out the local repository of retrieved package files
# It removes everything but the lock file from /var/cache/apt/archives/ and /var/cache/apt/archives/partial
apt-get clean
+rm -rf /tmp/*
# after cleanup
after=$(df / -Pm | awk 'NR==2{print $4}')
diff --git a/images/linux/scripts/installers/haskell.sh b/images/linux/scripts/installers/haskell.sh
index 1e36069a..1335c504 100644
--- a/images/linux/scripts/installers/haskell.sh
+++ b/images/linux/scripts/installers/haskell.sh
@@ -33,8 +33,8 @@ apt-get install -y \
cabal-install-3.0 \
cabal-install-3.2
-# Install haskell stack, pinned to v2.1.3
-curl -sSL https://raw.githubusercontent.com/commercialhaskell/stack/v2.1.3/etc/scripts/get-stack.sh | sh
+# Install the latest stable release of haskell stack
+curl -sSL https://get.haskellstack.org/ | sh
# Run tests to determine that the software installed as expected
echo "Testing to make sure that script performed as expected, and basic scenarios work"
diff --git a/images/linux/scripts/installers/hosted-tool-cache.sh b/images/linux/scripts/installers/hosted-tool-cache.sh
index a0ff4466..d6a773eb 100644
--- a/images/linux/scripts/installers/hosted-tool-cache.sh
+++ b/images/linux/scripts/installers/hosted-tool-cache.sh
@@ -54,9 +54,3 @@ rubys=$(ls $AGENT_TOOLSDIRECTORY/Ruby)
for ruby in $rubys; do
DocumentInstalledItemIndent "Ruby $ruby"
done;
-
-DocumentInstalledItem "PyPy:"
-pypys=$(ls $AGENT_TOOLSDIRECTORY/PyPy)
-for pypy in $pypys; do
- DocumentInstalledItemIndent "PyPy $pypy"
-done;
\ No newline at end of file
diff --git a/images/linux/scripts/installers/pypy.sh b/images/linux/scripts/installers/pypy.sh
new file mode 100644
index 00000000..68ccc703
--- /dev/null
+++ b/images/linux/scripts/installers/pypy.sh
@@ -0,0 +1,97 @@
+#!/bin/bash
+################################################################################
+## File: pypy.sh
+## Desc: Installs PyPy
+################################################################################
+
+# Source the helpers for use with the script
+source $HELPER_SCRIPTS/document.sh
+
+# Fail out if any setups fail
+set -e
+
+# This function installs PyPy using the specified arguments:
+# $1=PACKAGE_URL
+function InstallPyPy
+{
+ PACKAGE_URL=$1
+
+ PACKAGE_TAR_NAME=$(echo $PACKAGE_URL | awk -F/ '{print $NF}')
+ echo "Downloading tar archive '$PACKAGE_TAR_NAME' - '$PACKAGE_URL'"
+ PACKAGE_TAR_TEMP_PATH="/tmp/$PACKAGE_TAR_NAME"
+ wget -q -O $PACKAGE_TAR_TEMP_PATH $PACKAGE_URL
+
+ echo "Expand '$PACKAGE_TAR_NAME' to the /tmp folder"
+ tar xf $PACKAGE_TAR_TEMP_PATH -C /tmp
+
+ # Get Python version
+ PACKAGE_NAME=${PACKAGE_TAR_NAME/.tar.bz2/}
+ MAJOR_VERSION=$(echo ${PACKAGE_NAME/pypy/} | cut -d. -f1)
+ PYTHON_MAJOR="python$MAJOR_VERSION"
+
+ if [ $MAJOR_VERSION != 2 ]; then
+ PYPY_MAJOR="pypy$MAJOR_VERSION"
+ else
+ PYPY_MAJOR="pypy"
+ fi
+
+ PACKAGE_TEMP_FOLDER="/tmp/$PACKAGE_NAME"
+ PYTHON_FULL_VERSION=$("$PACKAGE_TEMP_FOLDER/bin/$PYPY_MAJOR" -c "import sys;print('{}.{}.{}'.format(sys.version_info[0],sys.version_info[1],sys.version_info[2]))")
+
+ # PyPy folder structure
+ PYPY_TOOLCACHE_PATH=$AGENT_TOOLSDIRECTORY/PyPy
+ PYPY_TOOLCACHE_VERSION_PATH=$PYPY_TOOLCACHE_PATH/$PYTHON_FULL_VERSION
+ PYPY_TOOLCACHE_VERSION_ARCH_PATH=$PYPY_TOOLCACHE_VERSION_PATH/x64
+
+ echo "Check if PyPy hostedtoolcache folder exist..."
+ if [ ! -d $PYPY_TOOLCACHE_PATH ]; then
+ mkdir -p $PYPY_TOOLCACHE_PATH
+ fi
+
+ echo "Create PyPy '$PYPY_TOOLCACHE_VERSION_PATH' folder"
+ mkdir $PYPY_TOOLCACHE_VERSION_PATH
+
+ echo "Move PyPy '$PACKAGE_TEMP_FOLDER' binaries to '$PYPY_TOOLCACHE_VERSION_ARCH_PATH' folder"
+ mv $PACKAGE_TEMP_FOLDER $PYPY_TOOLCACHE_VERSION_ARCH_PATH
+
+ echo "Create additional symlinks (Required for UsePythonVersion Azure DevOps task)"
+ cd $PYPY_TOOLCACHE_VERSION_ARCH_PATH/bin
+ ln -s $PYPY_MAJOR $PYTHON_MAJOR
+ ln -s $PYTHON_MAJOR python
+
+ chmod +x ./python ./$PYTHON_MAJOR
+
+ echo "Install latest Pip"
+ ./python -m ensurepip
+ ./python -m pip install --ignore-installed pip
+
+ echo "Create complete file"
+ touch $PYPY_TOOLCACHE_VERSION_PATH/x64.complete
+
+ echo "Remove '$PACKAGE_TAR_TEMP_PATH'"
+ rm -f $PACKAGE_TAR_TEMP_PATH
+}
+
+function getPyPyVersions
+{
+ uri="https://api.bitbucket.org/2.0/repositories/pypy/pypy/downloads?pagelen=100"
+ curl -s -N $uri | jq -r ".values[].links.self.href|select(contains(\"linux64\"))"
+}
+
+# Installation PyPy
+pypyVersions=$(getPyPyVersions)
+toolsetJson="$INSTALLER_SCRIPT_FOLDER/toolset.json"
+toolsetVersions=$(cat $toolsetJson | jq -r '.toolcache[] | select(.name | contains("PyPy")) | .versions[]')
+
+for toolsetVersion in $toolsetVersions; do
+ latestMajorPyPyVersion=$(echo "${pypyVersions}" | grep -E "pypy${toolsetVersion}-v[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+-" | head -1)
+
+ if [[ -z "$latestMajorPyPyVersion" ]]; then
+ echo "Failed to get PyPy version '$toolsetVersion'"
+ exit 1
+ fi
+
+ InstallPyPy $latestMajorPyPyVersion
+done
+
+chown -R "$SUDO_USER:$SUDO_USER" "$AGENT_TOOLSDIRECTORY/PyPy"
\ No newline at end of file
diff --git a/images/linux/scripts/installers/test-toolcache.sh b/images/linux/scripts/installers/test-toolcache.sh
index 53ed0715..455ddec0 100644
--- a/images/linux/scripts/installers/test-toolcache.sh
+++ b/images/linux/scripts/installers/test-toolcache.sh
@@ -70,4 +70,3 @@ done;
AGENT_TOOLSDIRECTORY=/opt/hostedtoolcache
Test_Hostedtoolcache_Tool "Ruby" "x64/bin/ruby -e 'puts RUBY_VERSION' | egrep -o '[0-9]+\.[0-9]+'"
-Test_Hostedtoolcache_Tool "PyPy" "x64/bin/python -c 'import sys;print(sys.version)'| head -1 | egrep -o '[0-9]+\.[0-9]+' | cut -d '.' -f 1"
diff --git a/images/linux/scripts/installers/validate-disk-space.sh b/images/linux/scripts/installers/validate-disk-space.sh
index 5201848d..79a589dd 100644
--- a/images/linux/scripts/installers/validate-disk-space.sh
+++ b/images/linux/scripts/installers/validate-disk-space.sh
@@ -5,7 +5,7 @@
################################################################################
availableSpaceMB=$(df / -hm | sed 1d | awk '{ print $4}')
-minimumFreeSpaceMB=18000
+minimumFreeSpaceMB=17800
echo "Available disk space: $availableSpaceMB MB"
if [ $availableSpaceMB -le $minimumFreeSpaceMB ]; then
diff --git a/images/linux/toolcache-1604.json b/images/linux/toolcache-1604.json
index 96638f0f..e3c9f93e 100644
--- a/images/linux/toolcache-1604.json
+++ b/images/linux/toolcache-1604.json
@@ -2,9 +2,6 @@
"@actions/toolcache-ruby-ubuntu-1604-x64": [
"2.4", "2.5", "2.6", "2.7"
],
- "@actions/toolcache-pypy-ubuntu-1604-x64": [
- "2", "3"
- ],
"@actions/toolcache-boost-ubuntu-1604-x64": [
"1.69", "1.72"
]
diff --git a/images/linux/toolcache-1804.json b/images/linux/toolcache-1804.json
index 13c69785..f7d9957e 100644
--- a/images/linux/toolcache-1804.json
+++ b/images/linux/toolcache-1804.json
@@ -2,9 +2,6 @@
"@actions/toolcache-ruby-ubuntu-1804-x64": [
"2.4", "2.5", "2.6", "2.7"
],
- "@actions/toolcache-pypy-ubuntu-1804-x64": [
- "2", "3"
- ],
"@actions/toolcache-boost-ubuntu-1804-x64": [
"1.69", "1.72"
]
diff --git a/images/linux/toolset-1604.json b/images/linux/toolset-1604.json
index 23393b66..577e69ff 100644
--- a/images/linux/toolset-1604.json
+++ b/images/linux/toolset-1604.json
@@ -14,6 +14,15 @@
"3.8.*"
]
},
+ {
+ "name": "PyPy",
+ "arch": "x64",
+ "platform" : "linux",
+ "versions": [
+ "2.7",
+ "3.6"
+ ]
+ },
{
"name": "node",
"url" : "https://raw.githubusercontent.com/actions/node-versions/master/versions-manifest.json",
diff --git a/images/linux/toolset-1804.json b/images/linux/toolset-1804.json
index 188062c4..ecb72b2b 100644
--- a/images/linux/toolset-1804.json
+++ b/images/linux/toolset-1804.json
@@ -14,6 +14,15 @@
"3.8.*"
]
},
+ {
+ "name": "PyPy",
+ "arch": "x64",
+ "platform" : "linux",
+ "versions": [
+ "2.7",
+ "3.6"
+ ]
+ },
{
"name": "node",
"url" : "https://raw.githubusercontent.com/actions/node-versions/master/versions-manifest.json",
diff --git a/images/linux/ubuntu1604.json b/images/linux/ubuntu1604.json
index 5aa162f0..e03b63f5 100644
--- a/images/linux/ubuntu1604.json
+++ b/images/linux/ubuntu1604.json
@@ -268,6 +268,7 @@
"{{template_dir}}/scripts/installers/azpowershell.sh",
"{{template_dir}}/scripts/helpers/containercache.sh",
"{{template_dir}}/scripts/installers/hosted-tool-cache.sh",
+ "{{template_dir}}/scripts/installers/pypy.sh",
"{{template_dir}}/scripts/installers/python.sh",
"{{template_dir}}/scripts/installers/test-toolcache.sh"
],
diff --git a/images/linux/ubuntu1804.json b/images/linux/ubuntu1804.json
index 8408704f..7ceff4a9 100644
--- a/images/linux/ubuntu1804.json
+++ b/images/linux/ubuntu1804.json
@@ -272,6 +272,7 @@
"{{template_dir}}/scripts/installers/azpowershell.sh",
"{{template_dir}}/scripts/helpers/containercache.sh",
"{{template_dir}}/scripts/installers/hosted-tool-cache.sh",
+ "{{template_dir}}/scripts/installers/pypy.sh",
"{{template_dir}}/scripts/installers/python.sh",
"{{template_dir}}/scripts/installers/test-toolcache.sh"
],
diff --git a/images/macos/macos-10.15-Readme.md b/images/macos/macos-10.15-Readme.md
index c0a030ad..58384493 100644
--- a/images/macos/macos-10.15-Readme.md
+++ b/images/macos/macos-10.15-Readme.md
@@ -1,26 +1,26 @@
-# OS X info
+# macOS info
- System Version: macOS 10.15.4 (19E287)
- Kernel Version: Darwin 19.4.0
- System Integrity Protection: Enabled
-- Image Version: 20200430.1
+- Image Version: 20200507.1
-# Installed Software
-## Language and Runtime
+## Installed Software
+### Language and Runtime
- Java 1.7: (Zulu 7.38.0.11-CA-macosx) (build 1.7.0_262-b10)
- Java 1.8: (Zulu 8.46.0.19-CA-macosx) (build 1.8.0_252-b14) (default)
- Java 11: Zulu11.39+15-CA (build 11.0.7+10-LTS)
- Java 12: Zulu12.3+11-CA (build 12.0.2+3)
- Java 13: Zulu13.31+11-CA (build 13.0.3+3-MTS)
- Java 14: Zulu14.28+21-CA (build 14.0.1+8)
-- Rust 1.43.0
+- Rust 1.43.1
- Clang/LLVM 10.0.0
- gcc-8 (Homebrew GCC 8.4.0_1) 8.4.0
- gcc-9 (Homebrew GCC 9.3.0_1) 9.3.0
- GNU Fortran (Homebrew GCC 8.4.0_1) 8.4.0
- GNU Fortran (Homebrew GCC 9.3.0_1) 9.3.0
- Node.js v12.16.3
-- NVM 0.33.11
-- NVM - Cached node versions: v6.17.1 v8.17.0 v10.20.1 v12.16.3 v13.14.0
+- NVM 0.35.3
+- NVM - Cached node versions: v6.17.1 v8.17.0 v10.20.1 v12.16.3 v13.14.0 v14.2.0
- PowerShell 7.0.0
- Python 2.7.17
- Python 3.7.7
@@ -30,33 +30,33 @@
- PHP 7.4.5
- julia 1.4.1
-## Package Management
+### Package Management
- Rustup 1.21.1
- Vcpkg 2020.02.04
- Bundler version 2.1.4
- Carthage 0.34.0
- CocoaPods 1.9.1
-- Homebrew 2.2.14
+- Homebrew 2.2.15
- NPM 6.14.4
- Yarn 1.22.4
- NuGet 5.5.0.6382
- Pip 19.3.1 (python 2.7)
- Pip 20.0.2 (python 3.7)
- Miniconda 4.8.2
-- RubyGems 3.1.2
+- RubyGems 3.1.3
-## Project Management
+### Project Management
- Apache Maven 3.6.3
-- Gradle 6.3
+- Gradle 6.4
-## Utilities
+### Utilities
- Curl 7.70.0
- Git: 2.26.2
- Git LFS: 2.10.0
- Hub CLI: 2.14.2
- GNU Wget 1.20.3
- Subversion (SVN) 1.13.0
-- Packer 1.5.5
+- Packer 1.5.6
- GNU parallel 20200422
- OpenSSL 1.0.2t 10 Sep 2019
- jq 1.6
@@ -64,61 +64,61 @@
- psql (PostgreSQL) 12.2
- PostgreSQL 12.2
- aria2 1.35.0
-- azcopy 10.4.1
+- azcopy 10.4.3
- zstd 1.4.4
- bazel 3.1.0
- bazelisk v1.4.0
- helm v3.2.0+ge11b7ce
- virtualbox 6.1.6r137129
-- Vagrant 2.2.7
+- Vagrant 2.2.8
-## Tools
+### Tools
- Fastlane 2.146.1
- Cmake 3.17.2
-- App Center CLI 2.5.0
+- App Center CLI 2.5.1
- Azure CLI 2.5.1
- AWS CLI 2.0.10
- AWS SAM CLI 0.48.0
- Aliyun CLI 3.0.39
-## Browsers
+### Browsers
- Safari 13.1 (15609.1.20.111.8)
- SafariDriver 13.1 (15609.1.20.111.8)
-- Google Chrome 81.0.4044.129
-- ChromeDriver 81.0.4044.69
-- Microsoft Edge 81.0.416.68
+- Google Chrome 81.0.4044.138
+- ChromeDriver 81.0.4044.138
+- Microsoft Edge 81.0.416.68
- MSEdgeDriver 81.0.416.68
-- Mozilla Firefox 75.0
+- Mozilla Firefox 76.0
- geckodriver 0.26.0
-## Toolcache
-### Ruby
+### Toolcache
+#### Ruby
- 2.4.10
- 2.5.8
- 2.6.6
- 2.7.1
-### Python
+#### Python
- 2.7.18
- 3.5.9
- 3.6.10
- 3.7.7
- 3.8.2
-### PyPy
+#### PyPy
- 2.7.17
- 3.6.9
-## Xamarin
-### Visual Studio for Mac
-- 8.5.4.12
+### Xamarin
+#### Visual Studio for Mac
+- 8.5.5.7
-### Mono
+#### Mono
- 6.8.0.123
- 6.6.0.166
- 6.4.0.208
-### Xamarin.iOS
+#### Xamarin.iOS
- 13.16.0.13
- 13.14.1.39
- 13.10.0.21
@@ -127,7 +127,7 @@
- 13.4.0.2
- 13.2.0.47
-### Xamarin.Mac
+#### Xamarin.Mac
- 6.16.0.13
- 6.14.1.39
- 6.10.0.21
@@ -136,18 +136,18 @@
- 6.4.0.2
- 6.2.0.47
-### Xamarin.Android
+#### Xamarin.Android
- 10.2.0
- 10.1.3
- 10.0.6
-### Unit Test Framework
+#### Unit Test Framework
- NUnit 3.6.1
-## Xcode
+### Xcode
| Version | Build | Path |
| ---------------- | ------- | --------------------------------- |
-| 11.5 (beta) | 11N605c | /Applications/Xcode_11.5_beta.app |
+| 11.5 (beta) | 11N605f | /Applications/Xcode_11.5_beta.app |
| 11.4.1 (default) | 11E503a | /Applications/Xcode_11.4.1.app |
| 11.4 | 11E146 | /Applications/Xcode_11.4.app |
| 11.3.1 | 11C505 | /Applications/Xcode_11.3.1.app |
@@ -158,14 +158,14 @@
| 11.0 | 11A420a | /Applications/Xcode_11.app |
| 10.3 | 10G8 | /Applications/Xcode_10.3.app |
-### Xcode Support Tools
-- Nomad CLI 3.1.2
+#### Xcode Support Tools
+- Nomad CLI 3.1.3
- Nomad CLI IPA ipa 0.14.3
- xcpretty 0.3.0
- xctool 0.3.7
- xcversion 2.6.4
-### Installed SDKs
+#### Installed SDKs
| SDK | SDK Name | Xcode Version |
| ----------------------- | -------------------- | ---------------------------------------------------------- |
| macOS 10.14 | macosx10.14 | 10.3 |
@@ -200,7 +200,7 @@
| Simulator - watchOS 6.2 | watchsimulator6.2 | 11.4, 11.4.1, 11.5 |
| DriverKit 19.0 | driverkit.macosx19.0 | 11.0, 11.1, 11.2, 11.2.1, 11.3, 11.3.1, 11.4, 11.4.1, 11.5 |
-### Installed Simulators
+#### Installed Simulators
| OS | Xcode Version | Simulators |
| ----------- | -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| iOS 12.4 | 10.3 | iPhone 5s
iPhone 6 Plus
iPhone 6
iPhone 6s
iPhone 6s Plus
iPhone SE
iPhone 7
iPhone 7 Plus
iPhone 8
iPhone 8 Plus
iPhone X
iPhone Xs
iPhone Xs Max
iPhone Xʀ
iPad Air
iPad Air 2
iPad Pro (9.7-inch)
iPad Pro (12.9-inch)
iPad (5th generation)
iPad Pro (12.9-inch) (2nd generation)
iPad Pro (10.5-inch)
iPad (6th generation)
iPad Pro (11-inch)
iPad Pro (12.9-inch) (3rd generation)
iPad Air (3rd generation) |
@@ -220,18 +220,18 @@
| watchOS 6.1 | 11.2
11.2.1
11.3
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 | Apple Watch Series 4 - 40mm
Apple Watch Series 4 - 44mm
Apple Watch Series 5 - 40mm
Apple Watch Series 5 - 44mm |
-## Android
-### Android SDK Tools
+### Android
+#### Android SDK Tools
| Package Name | Description |
| ------------ | ---------------------------------- |
| tools | Android SDK Tools, Revision 26.1.1 |
-### Android SDK Platform-Tools
+#### Android SDK Platform-Tools
| Package Name | Description |
| -------------- | ------------------------------------------- |
-| platform-tools | Android SDK Platform-Tools, Revision 30.0.0 |
+| platform-tools | Android SDK Platform-Tools, Revision 30.0.1 |
-### Android SDK Platforms
+#### Android SDK Platforms
| Package Name | Description |
| ------------ | ----------------------------------- |
| android-24 | Android SDK Platform 24, Revision 2 |
@@ -241,7 +241,7 @@
| android-28 | Android SDK Platform 28, Revision 6 |
| android-29 | Android SDK Platform 29, Revision 4 |
-### Android SDK Build-Tools
+#### Android SDK Build-Tools
| Package Name | Description |
| ---------------------- | -------------------------------------------- |
| build-tools-24.0.0 | Android SDK Build-Tools, Revision 24.0.0 |
@@ -268,17 +268,16 @@
| build-tools-29.0.1 | Android SDK Build-Tools, Revision 29.0.1 |
| build-tools-29.0.2 | Android SDK Build-Tools, Revision 29.0.2 |
| build-tools-29.0.3 | Android SDK Build-Tools, Revision 29.0.3 |
-| build-tools-30.0.0-rc1 | Android SDK Build-Tools, Revision 30.0.0 rc1 |
+| build-tools-30.0.0-rc4 | Android SDK Build-Tools, Revision 30.0.0 rc4 |
-### Android Utils
+#### Android Utils
| Package Name | Version |
| ---------------- | ------------ |
| cmake | 3.6.4111459 |
-| lldb | 3.1.4508709 |
| ndk-bundle | 21.1.6352462 |
| Android Emulator | 30.0.5 |
-### Android Google APIs
+#### Android Google APIs
| Package Name | Description |
| --------------------------- | ----------------------- |
| addon-google_apis-google-21 | Google APIs, Revision 1 |
@@ -286,7 +285,7 @@
| addon-google_apis-google-23 | Google APIs, Revision 1 |
| addon-google_apis-google-24 | Google APIs, Revision 1 |
-### Extra Packages
+#### Extra Packages
| Package Name | Version |
| ----------------------------------------------- | ------- |
| Android Support Repository | 47.0.0 |
diff --git a/images/win/Windows2016-Azure.json b/images/win/Windows2016-Azure.json
index 50607342..8c29d155 100644
--- a/images/win/Windows2016-Azure.json
+++ b/images/win/Windows2016-Azure.json
@@ -334,6 +334,15 @@
"{{ template_dir }}/scripts/Installers/Download-ToolCache.ps1"
]
},
+ {
+ "type": "powershell",
+ "environment_vars":[
+ "TOOLSET_JSON_PATH={{user `toolset_json_path`}}"
+ ],
+ "scripts":[
+ "{{ template_dir }}/scripts/Installers/Install-PyPy.ps1"
+ ]
+ },
{
"type": "powershell",
"environment_vars":[
@@ -521,6 +530,14 @@
"{{ template_dir }}/scripts/Installers/Install-AzureModules.ps1"
]
},
+ {
+ "type": "powershell",
+ "elevated_user": "SYSTEM",
+ "elevated_password": "",
+ "scripts":[
+ "{{ template_dir }}/scripts/Installers/Install-Msys2.ps1"
+ ]
+ },
{
"type": "powershell",
"scripts":[
@@ -533,6 +550,18 @@
"{{ template_dir }}/scripts/Installers/Install-TypeScript.ps1"
]
},
+ {
+ "type": "powershell",
+ "scripts":[
+ "{{ template_dir }}/scripts/Installers/Install-Haskell.ps1"
+ ]
+ },
+ {
+ "type": "powershell",
+ "scripts":[
+ "{{ template_dir }}/scripts/Installers/Install-Stack.ps1"
+ ]
+ },
{
"type": "powershell",
"scripts":[
@@ -648,6 +677,12 @@
"{{ template_dir }}/scripts/Installers/Validate-AzureDevOpsCli.ps1"
]
},
+ {
+ "type": "powershell",
+ "scripts":[
+ "{{ template_dir }}/scripts/Installers/Validate-Msys2.ps1"
+ ]
+ },
{
"type": "powershell",
"environment_vars":[
@@ -823,6 +858,18 @@
"{{ template_dir }}/scripts/Installers/Validate-TypeScript.ps1"
]
},
+ {
+ "type": "powershell",
+ "scripts":[
+ "{{ template_dir }}/scripts/Installers/Validate-Haskell.ps1"
+ ]
+ },
+ {
+ "type": "powershell",
+ "scripts":[
+ "{{ template_dir }}/scripts/Installers/Validate-Stack.ps1"
+ ]
+ },
{
"type": "powershell",
"scripts":[
diff --git a/images/win/Windows2016-Readme.md b/images/win/Windows2016-Readme.md
index 36540bef..6f6ac6d8 100644
--- a/images/win/Windows2016-Readme.md
+++ b/images/win/Windows2016-Readme.md
@@ -1,6 +1,7 @@
+
# Windows Server 2016
-The following software is installed on machines with the 20200426.1 update.
+The following software is installed on machines with the 20200505.1 update.
Components marked with **\*** have been upgraded since the previous version of the image.
@@ -177,7 +178,7 @@ _Version:_ 1.1.1809.18001
## AWS CLI
-_Version:_ aws-cli 2.0.9
+_Version:_ aws-cli 2.0.10
## Android SDK Build Tools
@@ -420,6 +421,10 @@ _Location:_ C:\Modules\az_3.1.0\Az\3.1.0\Az.psd1
This version is saved but not installed
_Location:_ C:\Modules\az_3.5.0\Az\3.5.0\Az.psd1
+#### 3.8.0
+
+This version is saved but not installed
+_Location:_ C:\Modules\az_3.8.0\Az\3.8.0\Az.psd1
## TLS12
@@ -428,29 +433,33 @@ _Description:_ .NET has been configured to use TLS 1.2 by default
## Azure CLI
-_Version:_ 2.4.0
+_Version:_ 2.5.1
_Environment:_
* PATH: contains location of az.cmd
## AWS SAM CLI
-_Version:_ 0.47.0
+_Version:_ 0.48.0
## Azure DevOps Cli extension
_Version:_ azure-devops 0.18.0
-## Python
-
-_Version:_ 2.7.17 (x64)
_Version:_ 3.5.4 (x64)
_Version:_ 3.6.8 (x64)
_Version:_ 3.7.6 (x64)
_Version:_ 3.8.2 (x64)
_Version:_ 2.7.17 (x86)
_Version:_ 3.5.4 (x86)
_Version:_ 3.6.8 (x86)
_Version:_ 3.7.6 (x86)
_Version:_ 3.8.2 (x86)
__System default version:__ Python 3.7.6
_Environment:_
* Location: C:\hostedtoolcache\windows\Python\3.7.6\x64
* PATH: contains the location of Python 3.7.6
-
## PyPy
_Version:_ 2.7.13 (x86)
_Version:_ 3.6.9 (x86)
## Ruby
-_Version:_ 2.4.10 (x64)
_Version:_ 2.5.8 (x64)
_Version:_ 2.6.6 (x64)
_Version:_ 2.7.1 (x64)
__System default version:__ Ruby 2.5.8p224
_Environment:_
* Location: C:\hostedtoolcache\windows\Ruby\2.5.8\x64\bin
* PATH: contains the location of Ruby 2.5.8p224
* Gem Version: 3.1.2
+_Version:_ 2.4.10 (x64)
_Version:_ 2.5.8 (x64)
_Version:_ 2.6.6 (x64)
_Version:_ 2.7.1 (x64)
__System default version:__ Ruby 2.5.8p224
_Environment:_
* Location: C:\hostedtoolcache\windows\Ruby\2.5.8\x64\bin
* PATH: contains the location of Ruby 2.5.8p224
* Gem Version: 3.1.3
+
+## Python (x64)
+
+_Version:_ 2.7.18
_Version:_ 3.5.4
_Version:_ 3.6.8
_Version:_ 3.7.7
_Version:_ 3.8.2
__System default version:__ Python 3.7.7
_Environment:_
* Location: C:\hostedtoolcache\windows\Python\3.7.7\x64
* PATH: contains the location of Python 3.7.7
+
+## Python (x86)
+
+_Version:_ 2.7.18
_Version:_ 3.5.4
_Version:_ 3.6.8
_Version:_ 3.7.7
_Version:_ 3.8.2
## OpenSSL
@@ -527,8 +536,8 @@ _Environment:_
## Rust (64-bit)
#### 1.43.0
-_Location:_ C:\Rust\.cargo\bin
_Environment:_
+* _Location:_ C:\Rust\.cargo\bin
* PATH: contains the location of rustc.exe
## Julia (x64)
@@ -548,12 +557,12 @@ _Environment:_
## Google Chrome
_version:_
-81.0.4044.122
+81.0.4044.129
## Microsoft Edge
_version:_
-81.0.416.64
+81.0.416.68
## Mozilla Firefox
@@ -590,7 +599,7 @@ _Environment:_
#### Microsoft Edge Driver
_version:_
-81.0.416.64
+81.0.416.68
_Environment:_
* EdgeWebDriver: location of msedgedriver.exe
@@ -598,7 +607,7 @@ _Environment:_
## Node.js
-_Version:_ 12.16.2
+_Version:_ 12.16.3
_Architecture:_ x64
_Environment:_
* PATH: contains location of node.exe
@@ -637,9 +646,13 @@ _Environment:_
_Location:_ C:\Program Files\Java\zulu-7-azure-jdk_7.31.0.5-7.0.232-win_x64
-#### 11.0.4
+#### 13.0.3
-_Location:_ C:\Program Files\Java\zulu-11-azure-jdk_11.33.15-11.0.4-win_x64
+_Location:_ C:\Program Files\Java\zulu-13-azure-jdk_13.31.11-13.0.3-win_x64
+
+#### 13.0.3
+
+_Location:_ C:\Program Files\Java\zulu-13-azure-jdk_13.31.11-13.0.3-win_x64
## Ant
@@ -664,7 +677,7 @@ _Environment:_
## CMake
-_Version:_ 3.17.1
+_Version:_ 3.17.2
_Environment:_
* PATH: contains location of cmake.exe
@@ -843,7 +856,7 @@ _Version:_ 6.0.4
## GitVersion
-_Version:_ 5.2.4.0
+_Version:_ 5.3.2.0
## Nullsoft Install System (NSIS)
diff --git a/images/win/Windows2019-Azure.json b/images/win/Windows2019-Azure.json
index 2a89973e..deecbe6f 100644
--- a/images/win/Windows2019-Azure.json
+++ b/images/win/Windows2019-Azure.json
@@ -307,6 +307,15 @@
"{{ template_dir }}/scripts/Installers/Download-ToolCache.ps1"
]
},
+ {
+ "type": "powershell",
+ "environment_vars":[
+ "TOOLSET_JSON_PATH={{user `toolset_json_path`}}"
+ ],
+ "scripts":[
+ "{{ template_dir }}/scripts/Installers/Install-PyPy.ps1"
+ ]
+ },
{
"type": "powershell",
"environment_vars":[
@@ -500,6 +509,14 @@
"{{ template_dir }}/scripts/Installers/Install-AzureModules.ps1"
]
},
+ {
+ "type": "powershell",
+ "elevated_user": "SYSTEM",
+ "elevated_password": "",
+ "scripts":[
+ "{{ template_dir }}/scripts/Installers/Install-Msys2.ps1"
+ ]
+ },
{
"type": "powershell",
"scripts":[
@@ -512,6 +529,18 @@
"{{ template_dir }}/scripts/Installers/Install-TypeScript.ps1"
]
},
+ {
+ "type": "powershell",
+ "scripts":[
+ "{{ template_dir }}/scripts/Installers/Install-Haskell.ps1"
+ ]
+ },
+ {
+ "type": "powershell",
+ "scripts":[
+ "{{ template_dir }}/scripts/Installers/Install-Stack.ps1"
+ ]
+ },
{
"type": "powershell",
"scripts":[
@@ -645,6 +674,12 @@
"{{ template_dir }}/scripts/Installers/Validate-AzureDevOpsCli.ps1"
]
},
+ {
+ "type": "powershell",
+ "scripts":[
+ "{{ template_dir }}/scripts/Installers/Validate-Msys2.ps1"
+ ]
+ },
{
"type": "powershell",
"environment_vars":[
@@ -808,6 +843,18 @@
"{{ template_dir }}/scripts/Installers/Validate-TypeScript.ps1"
]
},
+ {
+ "type": "powershell",
+ "scripts":[
+ "{{ template_dir }}/scripts/Installers/Validate-Haskell.ps1"
+ ]
+ },
+ {
+ "type": "powershell",
+ "scripts":[
+ "{{ template_dir }}/scripts/Installers/Validate-Stack.ps1"
+ ]
+ },
{
"type": "powershell",
"scripts":[
diff --git a/images/win/scripts/ImageHelpers/ImageHelpers.psm1 b/images/win/scripts/ImageHelpers/ImageHelpers.psm1
index 94ff7b20..c2007855 100644
--- a/images/win/scripts/ImageHelpers/ImageHelpers.psm1
+++ b/images/win/scripts/ImageHelpers/ImageHelpers.psm1
@@ -29,4 +29,5 @@ Export-ModuleMember -Function @(
'Test-IsWin19'
'Test-IsWin16'
'Choco-Install'
+ 'Extract-7Zip'
)
diff --git a/images/win/scripts/ImageHelpers/InstallHelpers.ps1 b/images/win/scripts/ImageHelpers/InstallHelpers.ps1
index 8ec49e0d..827485a3 100644
--- a/images/win/scripts/ImageHelpers/InstallHelpers.ps1
+++ b/images/win/scripts/ImageHelpers/InstallHelpers.ps1
@@ -221,12 +221,15 @@ function Start-DownloadWithRetry
(
[Parameter(Mandatory)]
[string] $Url,
- [Parameter(Mandatory)]
[string] $Name,
[string] $DownloadPath = "${env:Temp}",
[int] $Retries = 20
)
+ if ([String]::IsNullOrEmpty($Name)) {
+ $Name = [IO.Path]::GetFileName($Url)
+ }
+
$filePath = Join-Path -Path $DownloadPath -ChildPath $Name
#Default retry logic for the package.
@@ -386,3 +389,22 @@ function Test-IsWin16
{
(Get-WinVersion) -match "2016"
}
+
+function Extract-7Zip {
+ param
+ (
+ [Parameter(Mandatory=$true)]
+ [string]$Path,
+ [Parameter(Mandatory=$true)]
+ [string]$DestinationPath
+ )
+
+ Write-Host "Expand archive '$PATH' to '$DestinationPath' directory"
+ 7z.exe x "$Path" -o"$DestinationPath" -y | Out-Null
+
+ if ($LASTEXITCODE -ne 0)
+ {
+ Write-Host "There is an error during expanding '$Path' to '$DestinationPath' directory"
+ exit 1
+ }
+}
diff --git a/images/win/scripts/Installers/Install-Chrome.ps1 b/images/win/scripts/Installers/Install-Chrome.ps1
index 22b477b2..f0eecc4c 100644
--- a/images/win/scripts/Installers/Install-Chrome.ps1
+++ b/images/win/scripts/Installers/Install-Chrome.ps1
@@ -66,7 +66,7 @@ $ChromeDriverZipDownloadUrl = "https://chromedriver.storage.googleapis.com/${Chr
$ChromeDriverArchPath = Start-DownloadWithRetry -Url $ChromeDriverZipDownloadUrl -Name $ChromeDriverArchName
Write-Host "Expand Chrome WebDriver archive..."
-Expand-Archive -Path $ChromeDriverArchPath -DestinationPath $ChromeDriverPath -Force
+Extract-7Zip -Path $ChromeDriverArchPath -DestinationPath $ChromeDriverPath
Write-Host "Setting the environment variables..."
setx ChromeWebDriver "$ChromeDriverPath" /M
diff --git a/images/win/scripts/Installers/Install-CloudFoundryCli.ps1 b/images/win/scripts/Installers/Install-CloudFoundryCli.ps1
index 194ed5a3..6f9ea886 100644
--- a/images/win/scripts/Installers/Install-CloudFoundryCli.ps1
+++ b/images/win/scripts/Installers/Install-CloudFoundryCli.ps1
@@ -17,7 +17,7 @@ New-Item -Path $CloudFoundryCliPath -ItemType Directory -Force
# Extract the zip archive
Write-Host "Extracting cf cli..."
-Expand-Archive -Path $CloudFoundryArchPath -DestinationPath $CloudFoundryCliPath -Force
+Extract-7Zip -Path $CloudFoundryArchPath -DestinationPath $CloudFoundryCliPath
# Add cf to path
Add-MachinePathItem $CloudFoundryCliPath
\ No newline at end of file
diff --git a/images/win/scripts/Installers/Install-DACFx.ps1 b/images/win/scripts/Installers/Install-DACFx.ps1
index aa3deff7..7a470cbf 100644
--- a/images/win/scripts/Installers/Install-DACFx.ps1
+++ b/images/win/scripts/Installers/Install-DACFx.ps1
@@ -6,6 +6,6 @@
Import-Module -Name ImageHelpers -Force
$InstallerName = "DacFramework.msi"
-$InstallerUrl = "https://download.microsoft.com/download/f/1/9/f19eaee6-0728-4a0b-9755-9808acc8af0b/EN/x64/${InstallerName}"
+$InstallerUrl = "https://go.microsoft.com/fwlink/?linkid=2128142"
Install-Binary -Url $InstallerUrl -Name $InstallerName
\ No newline at end of file
diff --git a/images/win/scripts/Installers/Install-Edge.ps1 b/images/win/scripts/Installers/Install-Edge.ps1
index c10f2422..85b828fb 100644
--- a/images/win/scripts/Installers/Install-Edge.ps1
+++ b/images/win/scripts/Installers/Install-Edge.ps1
@@ -29,7 +29,7 @@ $EdgeDriverDownloadUrl="https://msedgedriver.azureedge.net/${EdgeDriverLatestVer
$EdgeDriverArchPath = Start-DownloadWithRetry -Url $EdgeDriverDownloadUrl -Name $EdgeDriverArchName
Write-Host "Expand Microsoft Edge WebDriver archive..."
-Expand-Archive -Path $EdgeDriverArchPath -DestinationPath $EdgeDriverPath -Force
+Extract-7Zip -Path $EdgeDriverArchPath -DestinationPath $EdgeDriverPath
Write-Host "Setting the environment variables..."
setx EdgeWebDriver "$EdgeDriverPath" /M
diff --git a/images/win/scripts/Installers/Install-Firefox.ps1 b/images/win/scripts/Installers/Install-Firefox.ps1
index efd3fe8b..8817bf01 100644
--- a/images/win/scripts/Installers/Install-Firefox.ps1
+++ b/images/win/scripts/Installers/Install-Firefox.ps1
@@ -45,7 +45,7 @@ $GeckoDriverDownloadUrl = $GeckoDriverWindowsAsset.browser_download_url
$GeckoDriverArchPath = Start-DownloadWithRetry -Url $GeckoDriverDownloadUrl -Name $GeckoDriverArchName
Write-Host "Expand Gecko WebDriver archive..."
-Expand-Archive -Path $GeckoDriverArchPath -DestinationPath $GeckoDriverPath -Force
+Extract-7Zip -Path $GeckoDriverArchPath -DestinationPath $GeckoDriverPath
Write-Host "Setting the environment variables..."
Add-MachinePathItem -PathItem $GeckoDriverPath
diff --git a/images/win/scripts/Installers/Install-Go.ps1 b/images/win/scripts/Installers/Install-Go.ps1
index c5d4c144..c37c54cf 100644
--- a/images/win/scripts/Installers/Install-Go.ps1
+++ b/images/win/scripts/Installers/Install-Go.ps1
@@ -15,7 +15,7 @@ function Install-GoVersion
[Switch] $addToDefaultPath
)
- $latestVersionObject = $refsJson | Where-Object { $_.ref -Match "refs/tags/go$goVersion[./d]*" } | Select-Object -Last 1
+ $latestVersionObject = $refsJson | Where-Object { $_.ref -Match "refs/tags/go$goVersion[./d]*" } | Select-Object -Last 1
$latestVersion = $latestVersionObject.ref.replace('refs/tags/go','')
# Download the Go zip archive.
@@ -30,7 +30,7 @@ function Install-GoVersion
# Extract the zip archive. It contains a single directory named "go".
Write-Host "Extracting Go $latestVersion..."
$toolDirectory = Join-Path $env:AGENT_TOOLSDIRECTORY "go\$latestVersion"
- 7z.exe x $goArchPath -o"$toolDirectory" -y | Out-Null
+ Extract-7Zip -Path $goArchPath -DestinationPath $toolDirectory
# Rename the extracted "go" directory to "x64" for full path "C:\hostedtoolcache\windows\Go\1.14.2\x64\..."
Rename-Item -path "$toolDirectory\go" -newName "x64"
diff --git a/images/win/scripts/Installers/Install-Haskell.ps1 b/images/win/scripts/Installers/Install-Haskell.ps1
new file mode 100644
index 00000000..19483fd7
--- /dev/null
+++ b/images/win/scripts/Installers/Install-Haskell.ps1
@@ -0,0 +1,19 @@
+################################################################################
+## File: Install-Haskell.ps1
+## Desc: Install Haskell for Windows
+################################################################################
+
+# Get 3 latest versions of GHC
+[Version[]] $ChocoVersionsOutput = & choco search ghc --allversions --limit-output | Where-Object { $_.StartsWith("ghc|") } | ForEach-Object { $_.TrimStart("ghc|") }
+$MajorMinorGroups = $ChocoVersionsOutput | Sort-Object -Descending | Group-Object { $_.ToString(2) } | Select-Object -First 3
+$VersionsList = $MajorMinorGroups | ForEach-Object { $_.Group | Select-Object -First 1 } | Sort-Object
+
+# The latest version will be installed as a default
+ForEach ($version in $VersionsList)
+{
+ Write-Host "Installing ghc $version..."
+ Choco-Install -PackageName ghc -ArgumentList "--version", $version, "-m"
+}
+
+Write-Host "Installing cabal..."
+Choco-Install -PackageName cabal
diff --git a/images/win/scripts/Installers/Install-IEWebDriver.ps1 b/images/win/scripts/Installers/Install-IEWebDriver.ps1
index 7dfd8b42..87104c1a 100644
--- a/images/win/scripts/Installers/Install-IEWebDriver.ps1
+++ b/images/win/scripts/Installers/Install-IEWebDriver.ps1
@@ -2,21 +2,21 @@
## File: Install-SeleniumWebDrivers.ps1
## Desc: Install Selenium Web Drivers
################################################################################
-$DestinationPath = "$($env:SystemDrive)\";
+$DestinationPath = "$($env:SystemDrive)\"
$DriversZipFile = "SeleniumWebDrivers.zip"
-Write-Host "Destination path: [$DestinationPath]";
-Write-Host "Selenium drivers download and install...";
+Write-Host "Destination path: [$DestinationPath]"
+Write-Host "Selenium drivers download and install..."
try {
- Invoke-WebRequest -UseBasicParsing -Uri "https://seleniumwebdrivers.blob.core.windows.net/seleniumwebdrivers/${DriversZipFile}" -OutFile $DriversZipFile;
+ Invoke-WebRequest -UseBasicParsing -Uri "https://seleniumwebdrivers.blob.core.windows.net/seleniumwebdrivers/${DriversZipFile}" -OutFile $DriversZipFile
}
catch {
- Write-Error "[!] Failed to download $DriversZipFile";
- exit 1;
+ Write-Error "[!] Failed to download $DriversZipFile"
+ exit 1
}
$TempSeleniumDir = Join-Path $Env:TEMP "SeleniumWebDrivers"
-Expand-Archive -Path $DriversZipFile -DestinationPath $Env:TEMP -Force;
-Remove-Item $DriversZipFile;
+Extract-7Zip -Path $DriversZipFile -DestinationPath $Env:TEMP
+Remove-Item $DriversZipFile
$SeleniumWebDriverPath = Join-Path $DestinationPath "SeleniumWebDrivers"
$IEDriverPathTemp = Join-Path $TempSeleniumDir 'IEDriver'
@@ -29,4 +29,4 @@ Move-Item -Path "$IEDriverPathTemp" -Destination $SeleniumWebDriverPath
Write-Host "Setting the environment variables"
-setx IEWebDriver "C:\SeleniumWebDrivers\IEDriver" /M;
+setx IEWebDriver "C:\SeleniumWebDrivers\IEDriver" /M
diff --git a/images/win/scripts/Installers/Install-JavaTools.ps1 b/images/win/scripts/Installers/Install-JavaTools.ps1
index 455283d0..68f325e8 100644
--- a/images/win/scripts/Installers/Install-JavaTools.ps1
+++ b/images/win/scripts/Installers/Install-JavaTools.ps1
@@ -5,6 +5,44 @@
Import-Module -Name ImageHelpers -Force
+function Set-JavaPath {
+ param (
+ [string] $Version,
+ [switch] $Default
+ )
+
+ $filter = "*azure-jdk_${version}.*"
+ $javaPath = (Get-ChildItem -Path 'C:\Program Files\Java' -Filter $filter | Sort-Object -Property Name -Descending | Select-Object -First 1).FullName
+
+ Write-Host "Set JAVA_HOME_${Version}_X64 environmental variable as $javaPath"
+ setx JAVA_HOME_${Version}_X64 $javaPath /M
+
+ if ($Default)
+ {
+ $currentPath = Get-MachinePath
+
+ $pathSegments = $currentPath.Split(';')
+ $newPathSegments = @()
+
+ foreach ($pathSegment in $pathSegments)
+ {
+ if ($pathSegment -notlike '*java*')
+ {
+ $newPathSegments += $pathSegment
+ }
+ }
+
+ $newPath = [string]::Join(';', $newPathSegments)
+ $newPath = $javaPath + '\bin;' + $newPath
+
+ Write-Host "Add $javaPath\bin to PATH"
+ Set-MachinePath -NewPath $newPath
+
+ Write-Host "Set JAVA_HOME environmental variable as $javaPath"
+ setx JAVA_HOME $javaPath /M
+ }
+}
+
# Download the Azul Systems Zulu JDKs
# See https://www.azul.com/downloads/azure-only/zulu/
$azulJDKURLs = @(
@@ -17,44 +55,14 @@ $azulJDKURLs = @(
foreach ($azulJDKURL in $azulJDKURLs)
{
$archivePath = Start-DownloadWithRetry -Url $azulJDKURL -Name $([IO.Path]::GetFileName($azulJDKURL))
- Expand-Archive -Path $archivePath -DestinationPath "C:\Program Files\Java\"
+ Extract-7Zip -Path $archivePath -DestinationPath "C:\Program Files\Java\"
}
-$currentPath = Get-MachinePath
-
-$pathSegments = $currentPath.Split(';')
-$newPathSegments = @()
-
-foreach ($pathSegment in $pathSegments)
-{
- if ($pathSegment -notlike '*java*')
- {
- $newPathSegments += $pathSegment
- }
-}
-
-$java7Installs = Get-ChildItem -Path 'C:\Program Files\Java' -Filter '*azure-jdk*7*' | Sort-Object -Property Name -Descending | Select-Object -First 1
-$latestJava7Install = $java7Installs.FullName;
-
-$java8Installs = Get-ChildItem -Path 'C:\Program Files\Java' -Filter '*azure-jdk*8*' | Sort-Object -Property Name -Descending | Select-Object -First 1
-$latestJava8Install = $java8Installs.FullName;
-
-$java11Installs = Get-ChildItem -Path 'C:\Program Files\Java' -Filter '*azure-jdk*11*' | Sort-Object -Property Name -Descending | Select-Object -First 1
-$latestJava11Install = $java11Installs.FullName;
-
-$java13Installs = Get-ChildItem -Path 'C:\Program Files\Java' -Filter '*azure-jdk*13*' | Sort-Object -Property Name -Descending | Select-Object -First 1
-$latestJava13Install = $java13Installs.FullName;
-
-$newPath = [string]::Join(';', $newPathSegments)
-$newPath = $latestJava8Install + '\bin;' + $newPath
-
-Set-MachinePath -NewPath $newPath
-
-setx JAVA_HOME $latestJava8Install /M
-setx JAVA_HOME_7_X64 $latestJava7Install /M
-setx JAVA_HOME_8_X64 $latestJava8Install /M
-setx JAVA_HOME_11_X64 $latestJava11Install /M
-setx JAVA_HOME_13_X64 $latestJava13Install /M
+# Set PATH and env variables
+Set-JavaPath -Version 7
+Set-JavaPath -Version 8 -Default
+Set-JavaPath -Version 11
+Set-JavaPath -Version 13
# Install Java tools
# Force chocolatey to ignore dependencies on Ant and Maven or else they will download the Oracle JDK
@@ -82,6 +90,6 @@ $uri = 'https://ayera.dl.sourceforge.net/project/cobertura/cobertura/2.1.1/cober
$coberturaPath = "C:\cobertura-2.1.1"
$archivePath = Start-DownloadWithRetry -Url $uri -Name "cobertura.zip"
-Expand-Archive -Path $archivePath -DestinationPath "C:\"
+Extract-7Zip -Path $archivePath -DestinationPath "C:\"
setx COBERTURA_HOME $coberturaPath /M
diff --git a/images/win/scripts/Installers/Install-Msys2.ps1 b/images/win/scripts/Installers/Install-Msys2.ps1
new file mode 100644
index 00000000..49f75e43
--- /dev/null
+++ b/images/win/scripts/Installers/Install-Msys2.ps1
@@ -0,0 +1,76 @@
+################################################################################
+## File: Install-Msys2.ps1
+## Desc: Install Msys2 and 64-bit gcc, cmake, & llvm (32-bit commented out)
+################################################################################
+
+# References
+# https://github.com/msys2/MINGW-packages/blob/master/azure-pipelines.yml
+# https://packages.msys2.org/group/
+
+$origPath = $env:PATH
+$gitPath = "$env:ProgramFiles\Git"
+
+# get info from https://sourceforge.net/projects/msys2/files/Base/x86_64/
+$msys2Uri = "http://repo.msys2.org/distrib/x86_64/msys2-base-x86_64-20190524.tar.xz"
+$msys2File = "$env:TEMP\msys2.tar.xz"
+
+# Download the latest msys2 x86_64
+Write-Host "Starting msys2 download"
+(New-Object System.Net.WebClient).DownloadFile($msys2Uri, $msys2File)
+Write-Host "Finished download"
+
+$msys2FileU = "/$msys2File".replace(':', '')
+
+$tar = "$gitPath\usr\bin\tar.exe"
+
+# extract tar.xz to C:\
+Write-Host "Starting msys2 extraction"
+&$tar -Jxf $msys2FileU -C /c/
+Remove-Item $msys2File
+Write-Host "Finished extraction"
+
+# Add msys2 bin tools folders to PATH temporary
+$env:PATH = "C:\msys64\mingw64\bin;C:\msys64\usr\bin;$origPath"
+
+Write-Host "bash pacman-key --init"
+bash.exe -c "pacman-key --init 2>&1"
+
+Write-Host "bash pacman-key --populate msys2"
+bash.exe -c "pacman-key --populate msys2 2>&1"
+
+Write-Host "pacman --noconfirm -Syyuu"
+pacman.exe -Syyuu --noconfirm
+pacman.exe -Syuu --noconfirm
+
+Write-Host "Install msys2 packages"
+pacman.exe -S --noconfirm --needed --noprogressbar base-devel compression
+
+# mingw package list
+$tools = "___clang ___cmake ___llvm ___toolchain ___ragel"
+
+# install mingw64 packages
+Write-Host "Install mingw64 packages"
+$pre = "mingw-w64-x86_64-"
+pacman.exe -S --noconfirm --needed --noprogressbar $tools.replace('___', $pre).split(' ')
+
+# install mingw32 packages
+Write-Host "Install mingw32 packages"
+$pre = "mingw-w64-i686-"
+pacman.exe -S --noconfirm --needed --noprogressbar $tools.replace('___', $pre).split(' ')
+
+# clean all packages to decrease image size
+Write-Host "Clean packages"
+pacman.exe -Scc --noconfirm
+
+Write-Host "Installed mingw64 packages"
+pacman.exe -Qs --noconfirm mingw-w64-x86_64-
+
+Write-Host "Installed mingw32 packages"
+pacman.exe -Qs --noconfirm mingw-w64-i686-
+
+Write-Host "Installed msys2 packages"
+pacman.exe -Qs --noconfirm
+
+Write-Host "MSYS2 installation completed"
+
+exit 0
\ No newline at end of file
diff --git a/images/win/scripts/Installers/Install-MysqlCli.ps1 b/images/win/scripts/Installers/Install-MysqlCli.ps1
index a9db2f42..36097643 100644
--- a/images/win/scripts/Installers/Install-MysqlCli.ps1
+++ b/images/win/scripts/Installers/Install-MysqlCli.ps1
@@ -22,7 +22,7 @@ Install-Binary -Url $InstallerURI -Name $InstallerName -ArgumentList $ArgumentLi
$mysqlArchPath = Start-DownloadWithRetry -Url $MysqlVersionUrl -Name "mysql.zip"
# Expand the zip
-Expand-Archive -Path $mysqlArchPath -DestinationPath "C:\" -Force
+Extract-7Zip -Path $mysqlArchPath -DestinationPath "C:\"
# Adding mysql in system environment path
Add-MachinePathItem $mysqlPath
\ No newline at end of file
diff --git a/images/win/scripts/Installers/Install-PyPy.ps1 b/images/win/scripts/Installers/Install-PyPy.ps1
new file mode 100644
index 00000000..10e55c2e
--- /dev/null
+++ b/images/win/scripts/Installers/Install-PyPy.ps1
@@ -0,0 +1,120 @@
+################################################################################
+## File: Install-PyPy.ps1
+## Team: CI-Build
+## Desc: Install PyPy
+################################################################################
+
+function Get-PyPyVersions
+{
+ $uri = "https://api.bitbucket.org/2.0/repositories/pypy/pypy/downloads?pagelen=100"
+ try
+ {
+ (Invoke-RestMethod -Uri $uri).Values
+ }
+ catch
+ {
+ Write-Host "Enable to send request to the '$uri'. Error: '$_'"
+ exit 1
+ }
+}
+
+function Install-PyPy
+{
+ param(
+ [String]$PackagePath,
+ [String]$Architecture
+ )
+
+ # Expand archive with binaries
+ $packageName = [IO.Path]::GetFileNameWithoutExtension((Split-Path -Path $packagePath -Leaf))
+ $tempFolder = Join-Path -Path $env:Temp -ChildPath $packageName
+ Extract-7Zip -Path $packagePath -DestinationPath $env:Temp
+
+ # Get Python version from binaries
+ $pypyApp = Get-ChildItem -Path "$tempFolder\pypy*.exe" | Where-Object Name -match "pypy(\d+)?.exe"
+ $pypyName = $pypyApp.Name
+ $pypyVersion = & $pypyApp -c "import sys;print('{}.{}.{}'.format(sys.version_info[0],sys.version_info[1],sys.version_info[2]))"
+
+ if ($pypyVersion)
+ {
+ Write-Host "Installing PyPy $pypyVersion"
+ $pypyToolcachePath = Join-Path -Path $env:AGENT_TOOLSDIRECTORY -ChildPath "PyPy"
+ $pypyVersionPath = Join-Path -Path $pypyToolcachePath -ChildPath $pypyVersion
+ $pypyArchPath = Join-Path -Path $pypyVersionPath -ChildPath $architecture
+
+ if (-not (Test-Path $pypyToolcachePath)) {
+ Write-Host "Create PyPy toolcache folder"
+ New-Item -ItemType Directory -Path $pypyToolcachePath | Out-Null
+ }
+
+ Write-Host "Create PyPy '${pypyVersion}' folder in '${pypyVersionPath}'"
+ New-Item -ItemType Directory -Path $pypyVersionPath -Force | Out-Null
+
+ Write-Host "Move PyPy '${pypyVersion}' files to '${pypyArchPath}'"
+ Move-Item -Path $tempFolder -Destination $pypyArchPath | Out-Null
+
+ Write-Host "Install PyPy '${pypyVersion}' in '${pypyArchPath}'"
+ cmd.exe /c "cd /d $pypyArchPath && mklink python.exe $pypyName && python.exe -m ensurepip && python.exe -m pip install --upgrade pip"
+
+ if ($LASTEXITCODE -ne 0)
+ {
+ Throw "Error happened during PyPy installation"
+ exit 1
+ }
+
+ # https://github.com/actions/setup-python/blob/master/src/find-python.ts
+ # https://github.com/microsoft/azure-pipelines-tasks/blob/master/Tasks/UsePythonVersionV0/usepythonversion.ts
+ # // For PyPy, Windows uses 'bin', not 'Scripts'.
+ # const _binDir = path.join(installDir, 'bin');
+ # PyPy v7.3.1 or higher creates only Scripts folder therefore to preserve back compatibility with UsePythonVersionV0 task
+ # We should create a Scripts -> bin symlink
+ Write-Host "Symbolic link created for '$pypyArchPath\Scripts' <<===>> '$pypyArchPath\bin'"
+ New-Item -Path "$pypyArchPath\bin" -ItemType SymbolicLink -Value "$pypyArchPath\Scripts" | Out-Null
+
+ Write-Host "Create complete file"
+ New-Item -ItemType File -Path $pypyVersionPath -Name "$architecture.complete" | Out-Null
+ }
+ else
+ {
+ Write-Host "PyPy application is not found. Failed to expand '$packagePath' archive"
+ exit 1
+ }
+}
+
+$ErrorActionPreference = "Stop"
+Import-Module -Name ImageHelpers -Force -DisableNameChecking
+
+# Get PyPy content from toolset
+$pypyTools = Get-ToolsetContent | Select-Object -ExpandProperty toolcache | Where-Object Name -eq "PyPy"
+
+# Get PyPy versions from the repo
+$pypyVersions = Get-PyPyVersions
+
+Write-Host "Starting installation PyPy..."
+foreach($pypyTool in $pypyTools)
+{
+ foreach($pypyVersion in $pypyTool.versions)
+ {
+ # Query latest PyPy version
+ $filter = '{0}{1}-*-{2}.zip' -f $pypyTool.name, $pypyVersion, $pypyTool.platform
+ $latestMajorPyPyVersion = $pypyVersions | Where-Object {
+ $_.name -like $filter -and $_.name.Split('-')[1].Substring(1) -as [System.Version]
+ } | Sort-Object {[System.Version]$_.name.Split('-')[1].Substring(1)} | Select-Object -Last 1
+
+ if ($latestMajorPyPyVersion)
+ {
+ $packageName = $latestMajorPyPyVersion.name
+ $packageDate = $latestMajorPyPyVersion.created_on
+
+ Write-Host "Found PyPy '$packageName' package created on '$packageDate'"
+ $url = $latestMajorPyPyVersion.links.self.href
+ $tempPyPyPackagePath = Start-DownloadWithRetry -Url $url -Name $packageName
+ Install-PyPy -PackagePath $tempPyPyPackagePath -Architecture $pypyTool.arch
+ }
+ else
+ {
+ Write-Host "Failed to query PyPy version '$pypyVersion' by '$filter' filter"
+ exit 1
+ }
+ }
+}
diff --git a/images/win/scripts/Installers/Install-Stack.ps1 b/images/win/scripts/Installers/Install-Stack.ps1
new file mode 100644
index 00000000..6996ac7f
--- /dev/null
+++ b/images/win/scripts/Installers/Install-Stack.ps1
@@ -0,0 +1,20 @@
+################################################################################
+## File: Install-Stack.ps1
+## Desc: Install Stack for Windows
+################################################################################
+
+Write-Host "Get the latest Stack version..."
+$StackReleasesJson = Invoke-RestMethod "https://api.github.com/repos/commercialhaskell/stack/releases/latest"
+$DownloadFilePattern = "windows-x86_64.zip"
+$DownloadUrl = $StackReleasesJson.assets | Where-Object { $_.name.EndsWith($DownloadFilePattern) } | Select-Object -ExpandProperty "browser_download_url" -First 1
+
+Write-Host "Download stack archive"
+$DestinationPath = Join-Path $Env:AGENT_TOOLSDIRECTORY "stack\x64"
+$StackArchivePath = Start-DownloadWithRetry -Url $DownloadUrl
+
+Write-Host "Expand stack archive"
+Extract-7Zip -Path $StackArchivePath -DestinationPath $DestinationPath
+
+New-Item -Name "x64.complete" -Path $DestinationPath
+
+Add-MachinePathItem -PathItem $DestinationPath
\ No newline at end of file
diff --git a/images/win/scripts/Installers/Install-Toolset.ps1 b/images/win/scripts/Installers/Install-Toolset.ps1
index 25bfe58e..bc2aa59d 100644
--- a/images/win/scripts/Installers/Install-Toolset.ps1
+++ b/images/win/scripts/Installers/Install-Toolset.ps1
@@ -48,7 +48,8 @@ $ErrorActionPreference = "Stop"
Import-Module -Name ImageHelpers -Force
# Get toolcache content from toolset
-$tools = Get-ToolsetContent | Select-Object -ExpandProperty toolcache
+$ToolsToInstall = @("Python", "Node")
+$tools = Get-ToolsetContent | Select-Object -ExpandProperty toolcache | Where {$ToolsToInstall -contains $_.Name}
foreach ($tool in $tools) {
# Get versions manifest for current tool
diff --git a/images/win/scripts/Installers/Validate-Boost.ps1 b/images/win/scripts/Installers/Validate-Boost.ps1
index e9b7554e..97464b77 100644
--- a/images/win/scripts/Installers/Validate-Boost.ps1
+++ b/images/win/scripts/Installers/Validate-Boost.ps1
@@ -55,6 +55,10 @@ foreach ($BoostTool in $BoostTools)
$CMakeFindBoostInfo = @"
#### _Notes:_
+
+> ``BOOST_ROOT`` is not set on images but it is required by CMake. Please make sure you set this variable
+> value to either ``BOOST_ROOT_1_69_0`` or ``BOOST_ROOT_1_72_0`` depending on the Boost version you are using.
+
Link: https://cmake.org/cmake/help/latest/module/FindBoost.html
If Boost was built using the ``boost-cmake`` project or from ``Boost 1.70.0`` on it provides a package
diff --git a/images/win/scripts/Installers/Validate-Haskell.ps1 b/images/win/scripts/Installers/Validate-Haskell.ps1
new file mode 100644
index 00000000..6d47daad
--- /dev/null
+++ b/images/win/scripts/Installers/Validate-Haskell.ps1
@@ -0,0 +1,78 @@
+################################################################################
+## File: Validate-Haskell.ps1
+## Desc: Validate Haskell for Windows
+################################################################################
+
+# GHC validation
+if (Get-Command -Name 'ghc')
+{
+ Write-Host "ghc is on the path"
+}
+else
+{
+ Write-Host "ghc is not on path."
+ exit 1
+}
+
+$SoftwareName = "ghc"
+[String] $DefaultGhcVersion = & ghc --version
+$ChocoPackagesPath = Join-Path $env:ChocolateyInstall "lib"
+[Array] $GhcVersionList = Get-ChildItem -Path $ChocoPackagesPath -Filter "ghc.*" | ForEach-Object { $_.Name.TrimStart("ghc.") }
+
+# Validation that accurate 3 versions of GHC are installed
+if ($GhcVersionList.Count -eq 3)
+{
+ Write-Host "Versions of GHC are accurate"
+}
+else
+{
+ Write-Host "Versions of GHC not accurate"
+ exit 1
+}
+
+# Validation each of GHC version
+ForEach ($version in $GhcVersionList) {
+ $BinGhcPath = Join-Path $env:ChocolateyInstall "lib\ghc.$version\tools\ghc-$version\bin\ghc.exe"
+ if ((& $BinGhcPath --version) -match $version)
+ {
+ Write-Host "ghc $version is valid"
+ }
+ else
+ {
+ Write-Host "ghc $version is not valid"
+ exit 1
+ }
+}
+
+
+$GhcVersionsDescription = $GhcVersionList | ForEach-Object {
+ $DefaultPostfix = if ($DefaultGhcVersion -match $_) { " (default)" } else { "" }
+ "ghc $_ $DefaultPostfix `n"
+}
+
+$Description = @"
+_Version:_
+$GhcVersionsDescription
+"@
+
+Add-SoftwareDetailsToMarkdown -SoftwareName $SoftwareName -DescriptionMarkdown $Description
+
+
+# Cabal validation
+if (Get-Command -Name 'cabal')
+{
+ Write-Host "cabal is on the path"
+}
+else
+{
+ Write-Host "cabal is not on path."
+ exit 1
+}
+
+$SoftwareName = "cabal"
+
+$Description = @"
+_Version:_ $(cabal --version)
+"@
+
+Add-SoftwareDetailsToMarkdown -SoftwareName $SoftwareName -DescriptionMarkdown $Description
\ No newline at end of file
diff --git a/images/win/scripts/Installers/Validate-JavaTools.ps1 b/images/win/scripts/Installers/Validate-JavaTools.ps1
index 33f90694..7530bf89 100644
--- a/images/win/scripts/Installers/Validate-JavaTools.ps1
+++ b/images/win/scripts/Installers/Validate-JavaTools.ps1
@@ -3,6 +3,52 @@
## Desc: Validate various JDKs and java tools
################################################################################
+Function Validate-JavaVersion {
+ param (
+ [Parameter(Mandatory)] [string] $Version,
+ [switch] $Default
+ )
+
+ Write-Host "Checking Java $version"
+
+ # Set Path to get Java
+ if (-not $Default)
+ {
+ # Take 7 & 8 for versions 1.7 and 1.8
+ $versionNumber = $version.Split(".") | Select-Object -Last 1
+
+ $javaBin = [System.Environment]::GetEnvironmentVariable("JAVA_HOME_${versionNumber}_X64") + "\bin;"
+ $env:Path = $javaBin + $env:Path
+ }
+
+ $isJavaExists = $($(& $env:comspec "/s /c java -version 2>&1") | Out-String) -match '^(?.+) version "(?.+)".*'
+
+ if ($isJavaExists)
+ {
+ $javaVersion = $matches.version
+ }
+ else
+ {
+ Write-Host "Java $version was not found"
+ exit 1
+ }
+
+ $isJavaCorrect = $javaVersion.StartsWith($version)
+
+ if($isJavaCorrect)
+ {
+ Write-Host "Java $javaVersion found"
+ # Reset Path to the default one in case we need to check the default Java later
+ $env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User")
+ return $javaVersion
+ }
+ else
+ {
+ Write-Host "Expected Java $version, but found $javaVersion"
+ exit 1
+ }
+}
+
if((Get-Command -Name 'java') -and (Get-Command -Name 'mvn') -and (Get-Command -Name 'ant') -and (Get-Command -Name 'gradle'))
{
Write-Host "Java $(java -version) on path"
@@ -16,32 +62,12 @@ else
exit 1
}
+Write-Host "Checking installed Java versions"
-if( $( $(& $env:comspec "/s /c java -version 2>&1") | Out-String) -match '^(?.+) version "(?.+)".*' )
-{
- $javaVersion = $Matches.version
-}
-
-$env:Path = $env:JAVA_HOME_7_X64 + "\bin;" + $env:Path
-
-if( $( $(& $env:comspec "/s /c java -version 2>&1") | Out-String) -match '^(?.+) version "(?.+)".*' )
-{
- $java7Version = $Matches.version
-}
-
-$env:Path = $env:JAVA_HOME_11_X64 + "\bin;" + $env:Path
-
-if( $( $(& $env:comspec "/s /c java -version 2>&1") | Out-String) -match '^(?.+) version "(?.+)".*' )
-{
- $java11Version = $Matches.version
-}
-
-$env:Path = $env:JAVA_HOME_13_X64 + "\bin;" + $env:Path
-
-if( $( $(& $env:comspec "/s /c java -version 2>&1") | Out-String) -match '^(?.+) version "(?.+)".*' )
-{
- $java13Version = $Matches.version
-}
+$java7Version = Validate-JavaVersion -Version "1.7"
+$java8Version = Validate-JavaVersion -Version "1.8" -Default
+$java11Version = Validate-JavaVersion -Version "11"
+$java13Version = Validate-JavaVersion -Version "13"
if( $(ant -version) -match 'Apache Ant\(TM\) version (?.*) compiled.*' )
{
@@ -62,7 +88,7 @@ if( $( $(gradle -version) | Out-String) -match 'Gradle (?.*)' )
$SoftwareName = "Java Development Kit"
$Description = @"
-#### $javaVersion (default)
+#### $java8Version (default)
_Environment:_
* JAVA_HOME: location of JDK
diff --git a/images/win/scripts/Installers/Validate-Msys2.ps1 b/images/win/scripts/Installers/Validate-Msys2.ps1
new file mode 100644
index 00000000..e7d2142a
--- /dev/null
+++ b/images/win/scripts/Installers/Validate-Msys2.ps1
@@ -0,0 +1,73 @@
+################################################################################
+## File: Validate-Msys2.ps1
+## Desc: Validate Msys2
+################################################################################
+
+$msys2BinDir = "C:\msys64\usr\bin"
+$msys2mingwDir = "C:\msys64\mingw64\bin"
+
+$installedTools = @(
+ "bash",
+ "tar",
+ "make"
+)
+
+$installedMinGWTools = @(
+ "gcc",
+ "cmake"
+)
+
+Write-Host "Check installed tools in msys2/usr/bin directory"
+$installedTools | ForEach-Object {
+ $toolName = $_
+ try {
+ Invoke-Expression "$msys2BinDir\$_ --version"
+ } catch {
+ Write-Host "$toolName was not installed in MSYS2 bin directory"
+ Write-Error $_
+ exit 1
+ }
+}
+
+Write-Host "Check installed tools in msys2/mingw/bin directory"
+$installedMinGWTools | ForEach-Object {
+ $toolName = $_
+ try {
+ Invoke-Expression "$msys2mingwDir\$_ --version"
+ } catch {
+ Write-Error "$toolName was not installed in MSYS2 mingw bin directory"
+ Write-Error $_
+ exit 1
+ }
+}
+
+# Adding description of the software to Markdown
+
+function Get-ToolVersion {
+ param(
+ [string] $ToolPath,
+ [int] $VersionLineNumber
+ )
+
+ $toolRawVersion = Invoke-Expression "$ToolPath --version"
+ $toolRawVersion.Split([System.Environment]::NewLine)[$VersionLineNumber] -match "\d+\.\d+(\.\d+)?" | Out-Null
+ $toolVersion = $matches[0]
+ return $toolVersion
+}
+
+$SoftwareName = "MSYS2"
+$pacmanVersion = Get-ToolVersion -ToolPath "$msys2BinDir/pacman" -VersionLineNumber 1
+$bashVersion = Get-ToolVersion -ToolPath "$msys2BinDir/bash" -VersionLineNumber 0
+$gccVersion = Get-ToolVersion -ToolPath "$msys2mingwDir/gcc" -VersionLineNumber 0
+$tarVersion = Get-ToolVersion -ToolPath "$msys2BinDir/tar" -VersionLineNumber 0
+
+$Description = @"
+_Tool versions_
+_pacman:_ $pacmanVersion
+_bash:_ $bashVersion
+_gcc:_ $gccVersion
+_tar:_ $tarVersion
+MSYS2 location: C:\msys64
+"@
+
+Add-SoftwareDetailsToMarkdown -SoftwareName $SoftwareName -DescriptionMarkdown $Description
diff --git a/images/win/scripts/Installers/Validate-Stack.ps1 b/images/win/scripts/Installers/Validate-Stack.ps1
new file mode 100644
index 00000000..d24d8954
--- /dev/null
+++ b/images/win/scripts/Installers/Validate-Stack.ps1
@@ -0,0 +1,27 @@
+################################################################################
+## File: Validate-Stack.ps1
+## Desc: Validate Stack for Windows
+################################################################################
+
+if (Get-Command -Name 'stack')
+{
+ Write-Host "stack is on the path"
+}
+else
+{
+ Write-Host "stack is not on path."
+ exit 1
+}
+
+$StackVersion = stack --version --quiet
+
+# Adding description of the software to Markdown
+$SoftwareName = "Stack"
+
+$Description = @"
+_Version:_ $StackVersion
+_Environment:_
+* PATH: contains location of stack.exe
+"@
+
+Add-SoftwareDetailsToMarkdown -SoftwareName $SoftwareName -DescriptionMarkdown $Description
diff --git a/images/win/scripts/Installers/Validate-ToolCache.ps1 b/images/win/scripts/Installers/Validate-ToolCache.ps1
index 526254e2..f2e900ae 100644
--- a/images/win/scripts/Installers/Validate-ToolCache.ps1
+++ b/images/win/scripts/Installers/Validate-ToolCache.ps1
@@ -177,10 +177,6 @@ function ToolcacheTest {
Add-SoftwareDetailsToMarkdown -SoftwareName $SoftwareName -DescriptionMarkdown $markdownDescription
}
-# PyPy test
-$PyPyTests = @("python.exe", "bin\pip.exe")
-ToolcacheTest -SoftwareName "PyPy" -ExecTests $PyPyTests
-
# Ruby test
$RubyTests = @("bin\ruby.exe")
ToolcacheTest -SoftwareName "Ruby" -ExecTests $RubyTests
diff --git a/images/win/scripts/Installers/Validate-Toolset.ps1 b/images/win/scripts/Installers/Validate-Toolset.ps1
index 34c613d9..048256c3 100644
--- a/images/win/scripts/Installers/Validate-Toolset.ps1
+++ b/images/win/scripts/Installers/Validate-Toolset.ps1
@@ -63,8 +63,9 @@ Import-Module -Name ImageHelpers -Force
# Define executables for cached tools
$toolsExecutables = @{
- Python = @("python.exe", "Scripts\pip.exe");
+ Python = @("python.exe", "Scripts\pip.exe")
node = @("node.exe", "npm")
+ PyPy = @("python.exe", "Scripts\pip.exe")
}
# Get toolcache content from toolset
@@ -78,6 +79,11 @@ foreach($tool in $tools) {
$toolExecs = $toolsExecutables[$tool.name]
foreach ($version in $tool.versions) {
+ # Add wildcard if missing
+ if (-not $version.Contains('*')) {
+ $version += '.*'
+ }
+
# Check if version folder exists
$expectedVersionPath = Join-Path $toolPath $version
if (-not (Test-Path $expectedVersionPath)) {
@@ -100,8 +106,14 @@ foreach($tool in $tools) {
Write-Host "Run validation test for $($tool.name)($($tool.arch)) $($foundVersion.name) executables..."
Run-ExecutableTests -Executables $toolExecs -ToolPath $foundVersionArchPath
+ $foundVersionName = $foundVersion.name
+ if ($tool.name -eq 'PyPy')
+ {
+ $pypyVersion = & "$foundVersionArchPath\python.exe" -c "import sys;print(sys.version.split('\n')[1])"
+ $foundVersionName = "{0} {1}" -f $foundVersionName, $pypyVersion
+ }
# Add to tool version to markdown
- $markdownDescription += "_Version:_ $($foundVersion.name)
"
+ $markdownDescription += "_Version:_ $foundVersionName
"
}
# Create markdown description for system default tool
diff --git a/images/win/scripts/Installers/Windows2019/Install-VS2019.ps1 b/images/win/scripts/Installers/Windows2019/Install-VS2019.ps1
index 128d2ae3..4aeee12b 100644
--- a/images/win/scripts/Installers/Windows2019/Install-VS2019.ps1
+++ b/images/win/scripts/Installers/Windows2019/Install-VS2019.ps1
@@ -68,7 +68,6 @@ $WorkLoads = '--allWorkloads --includeRecommended ' + `
'--add Microsoft.VisualStudio.Component.VC.v141.MFC.ARM.Spectre ' + `
'--add Microsoft.VisualStudio.Component.VC.v141.MFC.ARM64.Spectre ' + `
'--add Microsoft.VisualStudio.Component.VC.v141.MFC.Spectre ' + `
- '--add Microsoft.VisualStudio.Component.Windows10SDK.14393 ' + `
'--add Microsoft.VisualStudio.Component.Windows10SDK.16299 ' + `
'--add Microsoft.VisualStudio.Component.Windows10SDK.17134 ' + `
'--add Microsoft.VisualStudio.Component.Windows10SDK.17763 ' + `
@@ -127,6 +126,12 @@ Write-Host "Visual Studio version ${version} installed"
$newContent = '{"Extensions":[{"Key":"1e906ff5-9da8-4091-a299-5c253c55fdc9","Value":{"ShouldAutoUpdate":false}},{"Key":"Microsoft.VisualStudio.Web.AzureFunctions","Value":{"ShouldAutoUpdate":false}}],"ShouldAutoUpdate":false,"ShouldCheckForUpdates":false}'
Set-Content -Path "$VSInstallRoot\Common7\IDE\Extensions\MachineState.json" -Value $newContent
+# Install Windows 10 SDK version 10.0.14393.795
+$sdkUrl = "https://go.microsoft.com/fwlink/p/?LinkId=838916"
+$sdkFileName = "sdksetup14393.exe"
+$argumentList = ("/q", "/norestart", "/ceip off", "/features OptionId.WindowsSoftwareDevelopmentKit")
+
+Install-Binary -Url $sdkUrl -Name $sdkFileName -ArgumentList $argumentList
# Adding description of the software to Markdown
@@ -142,4 +147,13 @@ The following workloads and components are installed with Visual Studio 2019:
Add-SoftwareDetailsToMarkdown -SoftwareName $SoftwareName -DescriptionMarkdown $Description
# Adding explicitly added Workloads details to markdown by parsing $Workloads
-Add-ContentToMarkdown -Content $($WorkLoads.Split('--') | % { if( ($_.Split(" "))[0] -like "add") { "* " +($_.Split(" "))[1] } } )
\ No newline at end of file
+Add-ContentToMarkdown -Content $($WorkLoads.Split('--') | % { if( ($_.Split(" "))[0] -like "add") { "* " +($_.Split(" "))[1] } } )
+
+# Adding additional SDKs to markdown
+$SDKDescription = @"
+
+Additional Windows 10 SDKs:
+* Windows 10 SDK version 10.0.14393.795
+"@
+
+Add-ContentToMarkdown -Content $SDKDescription
diff --git a/images/win/toolcache-2016.json b/images/win/toolcache-2016.json
index 1b4f1a6c..449be64f 100644
--- a/images/win/toolcache-2016.json
+++ b/images/win/toolcache-2016.json
@@ -2,9 +2,6 @@
"@actions/toolcache-ruby-windows-x64": [
"2.4", "2.5", "2.6", "2.7"
],
- "@actions/toolcache-pypy-windows-x86": [
- "2", "3"
- ],
"@actions/toolcache-boost-windows-msvc-14.1-x32-x64": [
"1.69", "1.72"
]
diff --git a/images/win/toolcache-2019.json b/images/win/toolcache-2019.json
index 6873c14e..354f518f 100644
--- a/images/win/toolcache-2019.json
+++ b/images/win/toolcache-2019.json
@@ -2,9 +2,6 @@
"@actions/toolcache-ruby-windows-x64": [
"2.4", "2.5", "2.6", "2.7"
],
- "@actions/toolcache-pypy-windows-x86": [
- "2", "3"
- ],
"@actions/toolcache-boost-windows-msvc-14.1-x32-x64": [
"1.69"
],
diff --git a/images/win/toolset-2016.json b/images/win/toolset-2016.json
index c1500a4a..9eb2be40 100644
--- a/images/win/toolset-2016.json
+++ b/images/win/toolset-2016.json
@@ -27,6 +27,15 @@
"3.8.*"
]
},
+ {
+ "name": "PyPy",
+ "arch": "x86",
+ "platform" : "win32",
+ "versions": [
+ "2.7",
+ "3.6"
+ ]
+ },
{
"name": "node",
"url" : "https://raw.githubusercontent.com/actions/node-versions/master/versions-manifest.json",
diff --git a/images/win/toolset-2019.json b/images/win/toolset-2019.json
index c1500a4a..9eb2be40 100644
--- a/images/win/toolset-2019.json
+++ b/images/win/toolset-2019.json
@@ -27,6 +27,15 @@
"3.8.*"
]
},
+ {
+ "name": "PyPy",
+ "arch": "x86",
+ "platform" : "win32",
+ "versions": [
+ "2.7",
+ "3.6"
+ ]
+ },
{
"name": "node",
"url" : "https://raw.githubusercontent.com/actions/node-versions/master/versions-manifest.json",