diff --git a/.github/ISSUE_TEMPLATE/tool-request.md b/.github/ISSUE_TEMPLATE/tool-request.md
index 33bf4454..5cb1a740 100644
--- a/.github/ISSUE_TEMPLATE/tool-request.md
+++ b/.github/ISSUE_TEMPLATE/tool-request.md
@@ -9,6 +9,7 @@ assignees: ''
**Tool information**
- Tool name:
+- Tool license:
- Add or update?
- Desired version:
- Approximate size:
@@ -30,7 +31,10 @@ assignees: ''
- [ ] Windows Server 2019
**Can this tool be installed during the build?**
-
+
+
+**Tool installation time in runtime**
+
**Are you willing to submit a PR?**
diff --git a/README.md b/README.md
index 79c92534..69b0c920 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,5 @@
# GitHub Actions Virtual Environments
-This repository contains the source used to create the [virtual environments](https://help.github.com/en/actions/reference/virtual-environments-for-github-hosted-runners) for GitHub Actions hosted runners. To file bug reports, or request that tools be added/updated, please [open an issue using the appropriate template](https://github.com/actions/virtual-environments/issues/new/choose). To build a VM machine from this repo's source, see the [instructions](./help/CreateImageAndAzureResources.md).
+This repository contains the source used to create the [virtual environments](https://help.github.com/en/actions/reference/virtual-environments-for-github-hosted-runners) for GitHub Actions hosted runners, as well as the VM images of [Microsoft-hosted agents](https://docs.microsoft.com/en-us/azure/devops/pipelines/agents/hosted?view=azure-devops#use-a-microsoft-hosted-agent) used for Azure Pipelines. To file bug reports, or request that tools be added/updated, please [open an issue using the appropriate template](https://github.com/actions/virtual-environments/issues/new/choose). To build a VM machine from this repo's source, see the [instructions](./help/CreateImageAndAzureResources.md).
For general questions about using the virtual environments or writing your Actions workflow, please open requests in the [GitHub Actions Community Forum](https://github.community/t5/GitHub-Actions/bd-p/actions).
@@ -25,6 +25,11 @@ In general, these are the guidelines we consider when deciding what to pre-insta
- Tools and versions will typically be removed 6 months after they are deprecated or have reached end-of-life.
- If a tool can be installed during the build, we will evaluate how much time is saved
and how much space is used by having the tool pre-installed.
+- MIT, Apache, and GNU licenses are ok, anything else we'll have to check with lawyers.
+- If a tool takes much space we will evaluate space usage and provide a decision if this tool can be pre-installed.
+- If a tool requires the support of more than one version, we will consider the cost of this maintenance, how often new versions bring dangerous updates.
+
+**Note:** For new tools, please, create an issue and get an approval from us to add this tool to the image before creating the pull request.
## Updates to virtual environments
*Cadence*
@@ -43,4 +48,4 @@ we pin the tool to specific version(s).
[Windows-2019]: https://github.com/actions/virtual-environments/blob/master/images/win/Windows2019-Readme.md
[windows-2016]: https://github.com/actions/virtual-environments/blob/master/images/win/Windows2016-Readme.md
[macOS-10.15]: https://github.com/actions/virtual-environments/blob/master/images/macos/macos-10.15-Readme.md
-[self-hosted runners]: https://help.github.com/en/actions/hosting-your-own-runners
\ No newline at end of file
+[self-hosted runners]: https://help.github.com/en/actions/hosting-your-own-runners
diff --git a/images.CI/credscan-exclusions.json b/images.CI/credscan-exclusions.json
new file mode 100644
index 00000000..979dfa68
--- /dev/null
+++ b/images.CI/credscan-exclusions.json
@@ -0,0 +1,9 @@
+{
+ "tool": "Credential Scanner",
+ "suppressions": [
+ {
+ "placeholder": "P@ssword!!",
+ "_justification": "Password used by SQL Express. It is required to interact with database."
+ }
+ ]
+}
\ No newline at end of file
diff --git a/images/linux/Ubuntu1604-README.md b/images/linux/Ubuntu1604-README.md
index 708681f3..8b040043 100644
--- a/images/linux/Ubuntu1604-README.md
+++ b/images/linux/Ubuntu1604-README.md
@@ -1,11 +1,11 @@
# Ubuntu 16.04.6 LTS
-The following software is installed on machines with the 20200330.1 update.
+The following software is installed on machines with the 20200406.2 update.
***
- 7-Zip 9.20
- Ansible (ansible 2.9.6)
- AzCopy (azcopy 7.3.0-netcore)
-- Azure CLI (azure-cli 2.2.0)
-- Azure CLI (azure-devops 0.17.0)
+- Azure CLI (azure-cli 2.3.1)
+- Azure CLI (azure-devops 0.18.0)
- Basic CLI:
- curl
- dnsutils
@@ -34,12 +34,13 @@ The following software is installed on machines with the 20200330.1 update.
- wget
- zip
- zstd
-- AWS CLI (aws-cli/1.18.31 Python/2.7.12 Linux/4.15.0-1071-azure botocore/1.15.31)
+- AWS CLI (aws-cli/1.18.37 Python/2.7.12 Linux/4.15.0-1075-azure botocore/1.15.37)
- build-essential
+- nvm (0.35.3)
- Clang 6.0 (6.0.0)
- Clang 8 (8.0.0)
- Clang 9 (9.0.1)
-- Swift version 5.2 (swift-5.2-RELEASE)
+- Swift version 5.2.1 (swift-5.2.1-RELEASE)
Target: x86_64-unknown-linux-gnu
- CMake (cmake version 3.16.2)
- Docker Compose (docker-compose version 1.25.4, build 8d51620a)
@@ -111,7 +112,7 @@ Target: x86_64-unknown-linux-gnu
- 2.1.301
- 2.1.300
- Erlang (Erlang (SMP,ASYNC_THREADS,HIPE) (BEAM) emulator version 10.7)
-- Firefox (Mozilla Firefox 74.0)
+- Firefox (Mozilla Firefox 74.0.1)
- Geckodriver (0.26.0); Gecko Driver is available via GECKOWEBDRIVER environment variable
- GNU C++ 7.4.0
- GNU C++ 8.3.0
@@ -121,9 +122,9 @@ Target: x86_64-unknown-linux-gnu
- Git (2.26.0)
- Git Large File Storage (LFS) (2.10.0)
- Hub CLI (2.14.2)
-- Google Chrome (Google Chrome 80.0.3987.149 )
+- 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 (286.0.0)
+- Google Cloud SDK (287.0.0)
- 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
@@ -132,6 +133,8 @@ compiled using version 2.2.0.1 of the Cabal library )
compiled using version 2.4.1.0 of the Cabal library )
- Haskell Cabal (cabal-install version 3.0.1.0
compiled using version 3.0.2.0 of the Cabal library )
+- Haskell Cabal (cabal-install version 3.2.0.0
+compiled using version 3.2.0.0 of the Cabal library )
- GHC (The Glorious Glasgow Haskell Compilation System, version 8.0.2)
- GHC (The Glorious Glasgow Haskell Compilation System, version 8.2.2)
- GHC (The Glorious Glasgow Haskell Compilation System, version 8.4.4)
@@ -142,9 +145,10 @@ compiled using version 3.0.2.0 of the Cabal library )
- GHC (The Glorious Glasgow Haskell Compilation System, version 8.8.1)
- GHC (The Glorious Glasgow Haskell Compilation System, version 8.8.2)
- 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.1 linux-x64 node-v12.13.0)
-- HHVM (HipHop VM 4.50.0 (rel))
+- Heroku (heroku/7.39.2 linux-x64 node-v12.13.0)
+- HHVM (HipHop VM 4.52.0 (rel))
- ImageMagick
- Azul Zulu OpenJDK:
- 7 (openjdk version "1.7.0_252")
@@ -174,7 +178,7 @@ Local version: Unknown)
- Webpack (4.42.1)
- Webpack CLI (3.3.11)
- Yarn (1.22.4)
-- Bazel (bazel 2.2.0)
+- Bazel (bazel 3.0.0)
- Bazelisk (1.3.0)
- PhantomJS (2.1.1)
- PHP 5.6 (PHP 5.6.40-26+ubuntu16.04.1+deb.sury.org+1 (cli) )
@@ -197,9 +201,9 @@ Local version: Unknown)
- clippy (0.0.212)
- rustdoc (1.42.0)
- bindgen (0.53.2)
-- cbindgen (0.13.2)
+- cbindgen (0.14.0)
- Julia (julia version 1.4.0)
-- sbt (1.3.8)
+- sbt (1.3.9)
- Selenium server standalone (available via SELENIUM_JAR_PATH environment variable)
- Sphinx Open Source Search Server
- Subversion (svn, version 1.9.3 (r1718519))
@@ -207,6 +211,9 @@ Local version: Unknown)
- Packer (1.5.5)
- Vcpkg 2020.02.04-unknownhash
- Zeit Now CLI (17.1.1)
+- MongoDB on Linux (2020-04-07T01:29:52.795+0000 I CONTROL [initandlisten] db version v4.2.5
+2020-04-07T01:29:52.795+0000 I CONTROL [initandlisten] git version: 2261279b51ea13df08ae708ff278f0679c59dc32
+2020-04-07T01:29:52.795+0000 I CONTROL [initandlisten] OpenSSL version: OpenSSL 1.0.2g 1 Mar 2016)
- 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)
@@ -279,13 +286,13 @@ 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)
- - node:10 (Digest: sha256:df200903ff34c07c1b9112b4fd9d1342c11eb7d99525f2b366c487f91dda8131)
- - node:12 (Digest: sha256:facc1cbde6e5aa3255092b1a1417451953c80bd31ab5a4403f8bcd90b90a8407)
- - buildpack-deps:stretch (Digest: sha256:dc901bbf4b34e4ca8771c0d0773e557221452f97bcf0c732de7ecda3782bdf97)
- - debian:9 (Digest: sha256:ddb131307ad9c70ebf8c7962ba73c20101f68c7a511915aea3ad3b7ad47b9d20)
- - debian:8 (Digest: sha256:2c9b2323299846c5298c12db373da310f8114f2941ae3f496e95270cc8ca5ebd)
- alpine:3.8 (Digest: sha256:2bb501e6173d9d006e56de5bce2720eb06396803300fe1687b58a7ff32bf4c14)
- alpine:3.9 (Digest: sha256:115731bab0862031b44766733890091c17924f9b7781b79997f5f163be262178)
- alpine:3.10 (Digest: sha256:7c3773f7bcc969f03f8f653910001d99a9d324b4b9caa008846ad2c3089f5a5f)
@@ -299,10 +306,10 @@ Local version: Unknown)
- Python 3.7.6
- Python 3.8.2
- Ruby:
- - Ruby 2.4.9
- - Ruby 2.5.7
- - Ruby 2.6.5
- - Ruby 2.7.0
+ - Ruby 2.4.10
+ - Ruby 2.5.8
+ - Ruby 2.6.6
+ - Ruby 2.7.1
- PyPy:
- PyPy 2.7.17
- PyPy 3.6.9
diff --git a/images/linux/Ubuntu1804-README.md b/images/linux/Ubuntu1804-README.md
index 1adbc740..c48f5caa 100644
--- a/images/linux/Ubuntu1804-README.md
+++ b/images/linux/Ubuntu1804-README.md
@@ -1,11 +1,11 @@
# Ubuntu 18.04.4 LTS
-The following software is installed on machines with the 20200330.1 update.
+The following software is installed on machines with the 20200406.2 update.
***
- 7-Zip 16.02
- Ansible (ansible 2.9.6)
- AzCopy (azcopy 7.3.0-netcore)
-- Azure CLI (azure-cli 2.2.0)
-- Azure CLI (azure-devops 0.17.0)
+- Azure CLI (azure-cli 2.3.1)
+- Azure CLI (azure-devops 0.18.0)
- Basic CLI:
- curl
- dnsutils
@@ -32,12 +32,12 @@ The following software is installed on machines with the 20200330.1 update.
- wget
- zip
- zstd
-- AWS CLI (aws-cli/1.18.31 Python/2.7.17 Linux/5.0.0-1032-azure botocore/1.15.31)
+- AWS CLI (aws-cli/1.18.37 Python/2.7.17 Linux/5.0.0-1035-azure botocore/1.15.37)
- build-essential
- Clang 6.0 (6.0.0)
- Clang 8 (8.0.0)
- Clang 9 (9.0.0)
-- Swift version 5.2 (swift-5.2-RELEASE)
+- Swift version 5.2.1 (swift-5.2.1-RELEASE)
Target: x86_64-unknown-linux-gnu
- CMake (cmake version 3.16.2)
- Docker Compose (docker-compose version 1.25.4, build 8d51620a)
@@ -109,19 +109,19 @@ Target: x86_64-unknown-linux-gnu
- 2.1.301
- 2.1.300
- Erlang (Erlang (SMP,ASYNC_THREADS,HIPE) (BEAM) emulator version 10.7)
-- Firefox (Mozilla Firefox 74.0)
+- Firefox (Mozilla Firefox 74.0.1)
- Geckodriver (0.26.0); Gecko Driver is available via GECKOWEBDRIVER environment variable
- GNU C++ 7.5.0
-- GNU C++ 8.3.0
+- GNU C++ 8.4.0
- GNU C++ 9.2.1
-- GNU Fortran 8.3.0
+- GNU Fortran 8.4.0
- GNU Fortran 9.2.1
- Git (2.26.0)
- Git Large File Storage (LFS) (2.10.0)
- Hub CLI (2.14.2)
-- Google Chrome (Google Chrome 80.0.3987.149 )
+- 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 (286.0.0)
+- Google Cloud SDK (287.0.0)
- 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
@@ -130,6 +130,8 @@ compiled using version 2.2.0.1 of the Cabal library )
compiled using version 2.4.1.0 of the Cabal library )
- Haskell Cabal (cabal-install version 3.0.1.0
compiled using version 3.0.2.0 of the Cabal library )
+- Haskell Cabal (cabal-install version 3.2.0.0
+compiled using version 3.2.0.0 of the Cabal library )
- GHC (The Glorious Glasgow Haskell Compilation System, version 8.0.2)
- GHC (The Glorious Glasgow Haskell Compilation System, version 8.2.2)
- GHC (The Glorious Glasgow Haskell Compilation System, version 8.4.4)
@@ -140,9 +142,10 @@ compiled using version 3.0.2.0 of the Cabal library )
- GHC (The Glorious Glasgow Haskell Compilation System, version 8.8.1)
- GHC (The Glorious Glasgow Haskell Compilation System, version 8.8.2)
- 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.1 linux-x64 node-v12.13.0)
-- HHVM (HipHop VM 4.50.0 (rel))
+- Heroku (heroku/7.39.2 linux-x64 node-v12.13.0)
+- HHVM (HipHop VM 4.52.0 (rel))
- ImageMagick
- Azul Zulu OpenJDK:
- 7 (openjdk version "1.7.0_252")
@@ -162,6 +165,7 @@ compiled using version 3.0.2.0 of the Cabal library )
- 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
+- nvm (0.35.3)
- Node.js (v12.16.1)
- Grunt (grunt-cli v1.2.0)
- Gulp (CLI version: 2.2.0
@@ -172,7 +176,7 @@ Local version: Unknown)
- Webpack (4.42.1)
- Webpack CLI (3.3.11)
- Yarn (1.22.4)
-- Bazel (bazel 2.2.0)
+- Bazel (bazel 3.0.0)
- Bazelisk (1.3.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 ))
@@ -193,9 +197,9 @@ Local version: Unknown)
- clippy (0.0.212)
- rustdoc (1.42.0)
- bindgen (0.53.2)
-- cbindgen (0.13.2)
+- cbindgen (0.14.0)
- Julia (julia version 1.4.0)
-- sbt (1.3.8)
+- sbt (1.3.9)
- Selenium server standalone (available via SELENIUM_JAR_PATH environment variable)
- Sphinx Open Source Search Server
- Subversion (svn, version 1.9.7 (r1800392))
@@ -203,6 +207,9 @@ Local version: Unknown)
- 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)
- 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)
@@ -269,13 +276,13 @@ 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)
- - node:10 (Digest: sha256:df200903ff34c07c1b9112b4fd9d1342c11eb7d99525f2b366c487f91dda8131)
- - node:12 (Digest: sha256:facc1cbde6e5aa3255092b1a1417451953c80bd31ab5a4403f8bcd90b90a8407)
- - buildpack-deps:stretch (Digest: sha256:dc901bbf4b34e4ca8771c0d0773e557221452f97bcf0c732de7ecda3782bdf97)
- - debian:9 (Digest: sha256:ddb131307ad9c70ebf8c7962ba73c20101f68c7a511915aea3ad3b7ad47b9d20)
- - debian:8 (Digest: sha256:2c9b2323299846c5298c12db373da310f8114f2941ae3f496e95270cc8ca5ebd)
- alpine:3.8 (Digest: sha256:2bb501e6173d9d006e56de5bce2720eb06396803300fe1687b58a7ff32bf4c14)
- alpine:3.9 (Digest: sha256:115731bab0862031b44766733890091c17924f9b7781b79997f5f163be262178)
- alpine:3.10 (Digest: sha256:7c3773f7bcc969f03f8f653910001d99a9d324b4b9caa008846ad2c3089f5a5f)
@@ -289,10 +296,10 @@ Local version: Unknown)
- Python 3.7.6
- Python 3.8.2
- Ruby:
- - Ruby 2.4.9
- - Ruby 2.5.7
- - Ruby 2.6.5
- - Ruby 2.7.0
+ - Ruby 2.4.10
+ - Ruby 2.5.8
+ - Ruby 2.6.6
+ - Ruby 2.7.1
- PyPy:
- PyPy 2.7.17
- PyPy 3.6.9
diff --git a/images/linux/scripts/base/reboot.sh b/images/linux/scripts/base/reboot.sh
new file mode 100644
index 00000000..23969fe8
--- /dev/null
+++ b/images/linux/scripts/base/reboot.sh
@@ -0,0 +1,8 @@
+#!/bin/bash
+################################################################################
+## File: reboot.sh
+## Desc: Reboot VM
+################################################################################
+
+echo "Reboot VM"
+sudo reboot
\ No newline at end of file
diff --git a/images/linux/scripts/helpers/document.sh b/images/linux/scripts/helpers/document.sh
index 86217160..e7311689 100644
--- a/images/linux/scripts/helpers/document.sh
+++ b/images/linux/scripts/helpers/document.sh
@@ -9,7 +9,7 @@ function WriteItem {
echo "METADATA_FILE environment variable must be set to output to Metadata Document!"
return 1;
else
- echo -e "$1" >> "$METADATA_FILE"
+ echo -e "$1" | sudo tee -a "$METADATA_FILE"
fi
}
diff --git a/images/linux/scripts/helpers/etc-environment.sh b/images/linux/scripts/helpers/etc-environment.sh
new file mode 100644
index 00000000..24801723
--- /dev/null
+++ b/images/linux/scripts/helpers/etc-environment.sh
@@ -0,0 +1,85 @@
+#!/bin/bash
+################################################################################
+## File: etc-environment.sh
+## Desc: Helper functions for source and modify /etc/environment
+################################################################################
+
+# NB: sed expression use '%' as a delimiter in order to simplify handling
+# values containg slashes (i.e. directory path)
+# The values containing '%' will break the functions
+
+function getEtcEnvironmentVariable {
+ variable_name="$1"
+ # remove `variable_name=` and possible quotes from the line
+ grep "^${variable_name}=" /etc/environment |sed -E "s%^${variable_name}=\"?([^\"]+)\"?.*$%\1%"
+}
+
+function addEtcEnvironmentVariable {
+ variable_name="$1"
+ variable_value="$2"
+
+ echo "$variable_name=\"$variable_value\"" | sudo tee -a /etc/environment
+}
+
+function replaceEtcEnvironmentVariable {
+ variable_name="$1"
+ variable_value="$2"
+
+ # modify /etc/environemnt in place by replacing a string that begins with variable_name
+ sudo sed -i -e "s%^${variable_name}=.*$%${variable_name}=\"${variable_value}\"%" /etc/environment
+}
+
+function setEtcEnvironmentVariable {
+ variable_name="$1"
+ variable_value="$2"
+
+ if grep "$variable_name" /etc/environment > /dev/null; then
+ replaceEtcEnvironmentVariable $variable_name $variable_value
+ else
+ addEtcEnvironmentVariable $variable_name $variable_value
+ fi
+}
+
+function prependEtcEnvironmentVariable {
+ variable_name="$1"
+ element="$2"
+ # TODO: handle the case if the variable does not exist
+ existing_value=$(getEtcEnvironmentVariable "${variable_name}")
+ setEtcEnvironmentVariable "${variable_name}" "${element}:${existing_value}"
+}
+
+function appendEtcEnvironmentVariable {
+ variable_name="$1"
+ element="$2"
+ # TODO: handle the case if the variable does not exist
+ existing_value=$(getEtcEnvironmentVariable "${variable_name}")
+ setEtcEnvironmentVariable "${variable_name}" "${existing_value}:${element}"
+}
+
+function prependEtcEnvironmentPath {
+ element="$1"
+ prependEtcEnvironmentVariable PATH "${element}"
+}
+
+function appendEtcEnvironmentPath {
+ element="$1"
+ appendEtcEnvironmentVariable PATH "${element}"
+}
+
+# Process /etc/environment as if it were shell script with `export VAR=...` expressions
+# The PATH variable is handled specially in order to do not override the existing PATH
+# variable. The value of PATH variable read from /etc/environment is added to the end
+# of value of the exiting PATH variable exactly as it would happen with real PAM app read
+# /etc/environment
+#
+# TODO: there might be the others variables to be processed in the same way as "PATH" variable
+# ie MANPATH, INFOPATH, LD_*, etc. In the current implementation the values from /etc/evironments
+# replace the values of the current environment
+function reloadEtcEnvironment {
+ # add `export ` to every variable of /etc/environemnt except PATH and eval the result shell script
+ eval $(grep -v '^PATH=' /etc/environment | sed -e 's%^%export %')
+ # handle PATH specially
+ etc_path=$(getEtcEnvironmentVariable PATH)
+ export PATH="$PATH:$etc_path"
+}
+
diff --git a/images/linux/scripts/installers/1604/android.sh b/images/linux/scripts/installers/1604/android.sh
index 8dd2d6fa..0c4aee53 100644
--- a/images/linux/scripts/installers/1604/android.sh
+++ b/images/linux/scripts/installers/1604/android.sh
@@ -37,6 +37,8 @@ else
exit 1
fi
+# Add required permissions
+chmod -R a+X ${ANDROID_SDK_ROOT}
# Install the following SDKs and build tools, passing in "y" to accept licenses.
echo "y" | ${ANDROID_SDK_ROOT}/tools/bin/sdkmanager \
diff --git a/images/linux/scripts/installers/1604/basic.sh b/images/linux/scripts/installers/1604/basic.sh
index adc1e809..e579e1c0 100644
--- a/images/linux/scripts/installers/1604/basic.sh
+++ b/images/linux/scripts/installers/1604/basic.sh
@@ -49,6 +49,7 @@ apt-fast install -y --no-install-recommends \
libgconf-2-4 \
dbus \
xvfb \
+ libgbm-dev \
libgtk-3-0 \
tk \
fakeroot \
@@ -80,6 +81,7 @@ DocumentInstalledItemIndent "jq"
DocumentInstalledItemIndent "libc++-dev"
DocumentInstalledItemIndent "libc++abi-dev"
DocumentInstalledItemIndent "libcurl3"
+DocumentInstalledItemIndent "libgbm-dev"
DocumentInstalledItemIndent "libicu55"
DocumentInstalledItemIndent "libunwind8"
DocumentInstalledItemIndent "locales"
diff --git a/images/linux/scripts/installers/1604/php.sh b/images/linux/scripts/installers/1604/php.sh
index 147cedd6..d2209041 100644
--- a/images/linux/scripts/installers/1604/php.sh
+++ b/images/linux/scripts/installers/1604/php.sh
@@ -5,6 +5,7 @@
################################################################################
# Source the helpers for use with the script
+source $HELPER_SCRIPTS/etc-environment.sh
source $HELPER_SCRIPTS/document.sh
LSB_RELEASE=$(lsb_release -rs)
@@ -276,9 +277,15 @@ php composer-setup.php
sudo mv composer.phar /usr/bin/composer
php -r "unlink('composer-setup.php');"
+# Update /etc/environment
+prependEtcEnvironmentPath /home/runner/.config/composer/vendor/bin
+
# Add composer bin folder to path
echo 'export PATH="$PATH:$HOME/.config/composer/vendor/bin"' >> /etc/skel/.bashrc
+#Create composer folder for user to preserve folder permissions
+mkdir -p /etc/skel/.composer
+
# Install phpunit (for PHP)
wget -q -O phpunit https://phar.phpunit.de/phpunit-7.phar
chmod +x phpunit
@@ -293,6 +300,7 @@ for cmd in php php5.6 php7.0 php7.1 php7.2 php7.3 php7.4 composer phpunit; do
fi
done
+
# Document what was added to the image
echo "Lastly, documenting what we added to the metadata file"
DocumentInstalledItem "PHP 5.6 ($(php5.6 --version | head -n 1))"
diff --git a/images/linux/scripts/installers/1604/preparemetadata.sh b/images/linux/scripts/installers/1604/preparemetadata.sh
index 45cfcabf..a26e1096 100644
--- a/images/linux/scripts/installers/1604/preparemetadata.sh
+++ b/images/linux/scripts/installers/1604/preparemetadata.sh
@@ -7,6 +7,7 @@
source $HELPER_SCRIPTS/document.sh
+WriteItem ""
AddTitle "$(lsb_release -ds)"
WriteItem "The following software is installed on machines with the $IMAGE_VERSION update."
WriteItem "***"
diff --git a/images/linux/scripts/installers/1804/android.sh b/images/linux/scripts/installers/1804/android.sh
index 0bb58fb8..a4a94566 100644
--- a/images/linux/scripts/installers/1804/android.sh
+++ b/images/linux/scripts/installers/1804/android.sh
@@ -27,6 +27,9 @@ wget -O android-sdk.zip https://dl.google.com/android/repository/sdk-tools-linux
unzip android-sdk.zip -d ${ANDROID_SDK_ROOT}
rm -f android-sdk.zip
+# Add required permissions
+chmod -R a+X ${ANDROID_SDK_ROOT}
+
# Check sdk manager installation
/usr/local/lib/android/sdk/tools/bin/sdkmanager --list 1>/dev/null
if [ $? -eq 0 ]
diff --git a/images/linux/scripts/installers/1804/basic.sh b/images/linux/scripts/installers/1804/basic.sh
index c12c7a81..29cb15b4 100644
--- a/images/linux/scripts/installers/1804/basic.sh
+++ b/images/linux/scripts/installers/1804/basic.sh
@@ -97,6 +97,9 @@ apt-get install -y --no-install-recommends dbus
echo "Install xvfb"
apt-get install -y --no-install-recommends xvfb
+echo "Install libgbm-dev"
+apt-get install -y --no-install-recommends libgbm-dev
+
echo "Install libgtk"
apt-get install -y --no-install-recommends libgtk-3-0
@@ -147,6 +150,7 @@ DocumentInstalledItemIndent "iproute2"
DocumentInstalledItemIndent "iputils-ping"
DocumentInstalledItemIndent "jq"
DocumentInstalledItemIndent "libcurl3"
+DocumentInstalledItemIndent "libgbm-dev"
DocumentInstalledItemIndent "libicu55"
DocumentInstalledItemIndent "libunwind8"
DocumentInstalledItemIndent "locales"
diff --git a/images/linux/scripts/installers/1804/containers.sh b/images/linux/scripts/installers/1804/containers.sh
new file mode 100644
index 00000000..547707e2
--- /dev/null
+++ b/images/linux/scripts/installers/1804/containers.sh
@@ -0,0 +1,26 @@
+#!/bin/bash
+################################################################################
+## File: containers.sh
+## Desc: Installs container tools: podman, buildah and skopeo onto the image
+################################################################################
+
+source $HELPER_SCRIPTS/apt.sh
+source $HELPER_SCRIPTS/document.sh
+
+source /etc/os-release
+sh -c "echo 'deb http://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/x${NAME}_${VERSION_ID}/ /' > /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list"
+wget -nv https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable/x${NAME}_${VERSION_ID}/Release.key -O Release.key
+apt-key add - < Release.key
+apt-get update -qq
+apt-get -qq -y install podman buildah skopeo
+mkdir -p /etc/containers
+echo -e "[registries.search]\nregistries = ['docker.io', 'quay.io']" | tee /etc/containers/registries.conf
+
+## Add version information to the metadata file
+echo "Documenting container tools version"
+PODMAN_VERSION="$(podman --version | cut -d " " -f 3)"
+BUILDAH_VERSION="$(buildah --version | cut -d " " -f 3)"
+SKOPEO_VERSION="$(skopeo --version | cut -d " " -f 3)"
+DocumentInstalledItem "Podman ($PODMAN_VERSION)"
+DocumentInstalledItem "Buildah ($BUILDAH_VERSION)"
+DocumentInstalledItem "Skopeo ($SKOPEO_VERSION)"
diff --git a/images/linux/scripts/installers/1804/php.sh b/images/linux/scripts/installers/1804/php.sh
index 09d5cd96..cbf25393 100644
--- a/images/linux/scripts/installers/1804/php.sh
+++ b/images/linux/scripts/installers/1804/php.sh
@@ -5,6 +5,7 @@
################################################################################
# Source the helpers for use with the script
+source $HELPER_SCRIPTS/etc-environment.sh
source $HELPER_SCRIPTS/document.sh
LSB_RELEASE=$(lsb_release -rs)
@@ -193,9 +194,15 @@ php composer-setup.php
sudo mv composer.phar /usr/bin/composer
php -r "unlink('composer-setup.php');"
+# Update /etc/environment
+prependEtcEnvironmentPath /home/runner/.config/composer/vendor/bin
+
# Add composer bin folder to path
echo 'export PATH="$PATH:$HOME/.config/composer/vendor/bin"' >> /etc/skel/.bashrc
+#Create composer folder for user to preserve folder permissions
+mkdir -p /etc/skel/.composer
+
# Install phpunit (for PHP)
wget -q -O phpunit https://phar.phpunit.de/phpunit-7.phar
chmod +x phpunit
diff --git a/images/linux/scripts/installers/1804/preparemetadata.sh b/images/linux/scripts/installers/1804/preparemetadata.sh
index 45cfcabf..e3304945 100644
--- a/images/linux/scripts/installers/1804/preparemetadata.sh
+++ b/images/linux/scripts/installers/1804/preparemetadata.sh
@@ -7,6 +7,7 @@
source $HELPER_SCRIPTS/document.sh
+WriteItem ""
AddTitle "$(lsb_release -ds)"
WriteItem "The following software is installed on machines with the $IMAGE_VERSION update."
-WriteItem "***"
+WriteItem "***"
\ No newline at end of file
diff --git a/images/linux/scripts/installers/Install-Toolset.ps1 b/images/linux/scripts/installers/Install-Toolset.ps1
new file mode 100644
index 00000000..518a1f9b
--- /dev/null
+++ b/images/linux/scripts/installers/Install-Toolset.ps1
@@ -0,0 +1,55 @@
+################################################################################
+## File: Install-Toolset.ps1
+## Team: CI-Build
+## Desc: Install toolset
+################################################################################
+
+Function Install-Asset {
+ param(
+ [Parameter(Mandatory = $true)]
+ [object] $ReleaseAsset
+ )
+
+ Write-Host "Download $($ReleaseAsset.filename)"
+ wget $ReleaseAsset.download_url -nv --retry-connrefused --tries=10
+
+ Write-Host "Extract $($ReleaseAsset.filename) content..."
+ $assetFolderPath = Join-Path $env:INSTALLER_SCRIPT_FOLDER $($ReleaseAsset.filename)
+ New-Item -ItemType Directory -Path $assetFolderPath
+ tar -xzf $ReleaseAsset.filename -C $assetFolderPath
+
+ Write-Host "Invoke installation script..."
+ Push-Location -Path $assetFolderPath
+ Invoke-Expression "bash ./setup.sh"
+ Pop-Location
+}
+
+$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
+
+foreach ($tool in $tools) {
+ # Get versions manifest for current tool
+ $assets = Invoke-RestMethod $tool.url
+
+ # Get github release asset for each version
+ foreach ($toolVersion in $tool.versions) {
+ $asset = $assets | Where-Object version -like $toolVersion `
+ | Select-Object -ExpandProperty files `
+ | Where-Object { ($_.platform -eq $tool.platform) -and ($_.platform_version -eq $tool.platform_version)} `
+ | Select-Object -First 1
+
+ Write-Host "Installing $($tool.name) $toolVersion $($tool.arch)..."
+ if ($asset -ne $null) {
+ Install-Asset -ReleaseAsset $asset
+ }
+ else {
+ Write-Host "Asset was not found in versions manifest"
+ exit 1
+ }
+ }
+}
+
+chown -R "$($env:SUDO_USER):$($env:SUDO_USER)" /opt/hostedtoolcache/Python
\ No newline at end of file
diff --git a/images/linux/scripts/installers/Validate-Toolset.ps1 b/images/linux/scripts/installers/Validate-Toolset.ps1
new file mode 100644
index 00000000..13847465
--- /dev/null
+++ b/images/linux/scripts/installers/Validate-Toolset.ps1
@@ -0,0 +1,62 @@
+################################################################################
+## File: Validate-Toolset.ps1
+## Team: CI-Build
+## Desc: Validate Toolset
+################################################################################
+
+function Run-ExecutableTests {
+ param (
+ [Parameter(Mandatory)] [string[]] $Executables,
+ [Parameter(Mandatory)] [string] $ToolPath
+ )
+
+ foreach ($executable in $Executables) {
+ $executablePath = Join-Path $ToolPath $executable
+
+ Write-Host "Check $executable..."
+ if (Test-Path $executablePath) {
+ Write-Host "$executable is successfully installed: $(& $executablePath --version)"
+ } else {
+ Write-Host "$executablePath is not installed!"
+ exit 1
+ }
+ }
+}
+
+$ErrorActionPreference = "Stop"
+
+# Define executables for cached tools
+$toolsExecutables = @{ Python = @("python", "bin/pip") }
+
+# Get toolset content
+$toolsetJson = Get-Content -Path "$env:INSTALLER_SCRIPT_FOLDER/toolset.json" -Raw
+$tools = ConvertFrom-Json -InputObject $toolsetJson | Select-Object -ExpandProperty toolcache
+
+foreach($tool in $tools) {
+ Invoke-Expression "bash -c `"source $env:HELPER_SCRIPTS/document.sh; DocumentInstalledItem '$($tool.name):'`""
+
+ $toolPath = Join-Path $env:AGENT_TOOLSDIRECTORY $tool.name
+ # Get executables for current tool
+ $toolExecs = $toolsExecutables[$tool.name]
+
+ foreach ($version in $tool.versions) {
+ # Check if version folder exists
+ $expectedVersionPath = Join-Path $toolPath $version
+ if (-not (Test-Path $expectedVersionPath)) {
+ Write-Host "Expected $($tool.name) $version folder is not found!"
+ exit 1
+ }
+
+ # Take latest installed version in case if toolset version contains wildcards
+ $foundVersion = Get-Item $expectedVersionPath `
+ | Sort-Object -Property {[version]$_.name} -Descending `
+ | Select-Object -First 1
+ $foundVersionPath = Join-Path $foundVersion $tool.arch
+
+ Write-Host "Run validation test for $($tool.name)($($tool.arch)) $($foundVersion.name) executables..."
+ Run-ExecutableTests -Executables $toolExecs -ToolPath $foundVersionPath
+
+ # Add tool version to documentation
+ Invoke-Expression "bash -c `"source $env:HELPER_SCRIPTS/document.sh; DocumentInstalledItemIndent '$($tool.name) $($foundVersion.name)'`""
+ }
+}
\ No newline at end of file
diff --git a/images/linux/scripts/installers/aliyun-cli.sh b/images/linux/scripts/installers/aliyun-cli.sh
new file mode 100644
index 00000000..e3e1ec14
--- /dev/null
+++ b/images/linux/scripts/installers/aliyun-cli.sh
@@ -0,0 +1,27 @@
+#!/bin/bash
+################################################################################
+## File: aliyun-cli.sh
+## Desc: Installs Alibaba Cloud CLI
+################################################################################
+
+# Source the helpers for use with the script
+source $HELPER_SCRIPTS/document.sh
+source $HELPER_SCRIPTS/apt.sh
+
+# Install Alibaba Cloud CLI
+URL=$(curl -s https://api.github.com/repos/aliyun/aliyun-cli/releases/latest | jq -r '.assets[].browser_download_url | select(contains("aliyun-cli-linux"))')
+wget -P /tmp $URL
+tar xzvf /tmp/aliyun-cli-linux-*-amd64.tgz
+mv aliyun /usr/local/bin
+
+# 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 aliyun ; then
+ echo "aliyun was not installed"
+ exit 1
+fi
+
+# Document what was added to the image
+aliyun_version="$(aliyun --version | grep "Alibaba Cloud Command Line Interface Version" | cut -d " " -f 7)"
+echo "Lastly, documenting what we added to the metadata file"
+DocumentInstalledItem "Alibaba Cloud CLI ($aliyun_version)"
\ No newline at end of file
diff --git a/images/linux/scripts/installers/aws-sam-cli.sh b/images/linux/scripts/installers/aws-sam-cli.sh
new file mode 100644
index 00000000..3cee6015
--- /dev/null
+++ b/images/linux/scripts/installers/aws-sam-cli.sh
@@ -0,0 +1,24 @@
+#!/bin/bash
+################################################################################
+## File: aws-sam-cli.sh
+## Desc: Installs AWS SAM CLI
+## Must be run as non-root user after homebrew and clang
+################################################################################
+
+# Source the helpers for use with the script
+source $HELPER_SCRIPTS/document.sh
+
+# Install aws sam cli
+brew tap aws/tap
+brew install aws-sam-cli
+
+# 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 ! sam --version; then
+ echo "AWS SAM CLI was not installed"
+ exit 1
+fi
+
+# Document what was added to the image
+echo "Lastly, documenting what we added to the metadata file"
+DocumentInstalledItem "AWS $(sam --version)"
\ No newline at end of file
diff --git a/images/linux/scripts/installers/cleanup.sh b/images/linux/scripts/installers/cleanup.sh
new file mode 100644
index 00000000..fe284f33
--- /dev/null
+++ b/images/linux/scripts/installers/cleanup.sh
@@ -0,0 +1,16 @@
+#!/bin/bash
+
+# before cleanup
+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
+
+# after cleanup
+after=$(df / -Pm | awk 'NR==2{print $4}')
+
+# display size
+ echo "Before: $before MB"
+ echo "After : $after MB"
+ echo "Delta : $(($after-$before)) MB"
\ No newline at end of file
diff --git a/images/linux/scripts/installers/cmake.sh b/images/linux/scripts/installers/cmake.sh
index 5800ce23..0fd839a5 100644
--- a/images/linux/scripts/installers/cmake.sh
+++ b/images/linux/scripts/installers/cmake.sh
@@ -10,9 +10,9 @@ source $HELPER_SCRIPTS/document.sh
# Test to see if the software in question is already installed, if not install it
echo "Checking to see if the installer script has already been run"
if command -v cmake; then
- echo "Example variable already set to $EXAMPLE_VAR"
+ echo "cmake is already installed"
else
- curl -sL https://cmake.org/files/v3.16/cmake-3.16.2-Linux-x86_64.sh -o cmakeinstall.sh \
+ curl -sL https://cmake.org/files/v3.17/cmake-3.17.0-Linux-x86_64.sh -o cmakeinstall.sh \
&& chmod +x cmakeinstall.sh \
&& ./cmakeinstall.sh --prefix=/usr/local --exclude-subdir \
&& rm cmakeinstall.sh
diff --git a/images/linux/scripts/installers/complete-snap-setup.sh b/images/linux/scripts/installers/complete-snap-setup.sh
new file mode 100644
index 00000000..51e63154
--- /dev/null
+++ b/images/linux/scripts/installers/complete-snap-setup.sh
@@ -0,0 +1,12 @@
+#!/bin/bash
+################################################################################
+## File: snap-environment.sh
+## Desc: Update /etc/environment to include /snap/bin in PATH
+## because /etc/profile.d is ignored by `--norc` shell launch option
+################################################################################
+
+# Source the helpers
+source $HELPER_SCRIPTS/etc-environment.sh
+
+# Update /etc/environemnt
+prependEtcEnvironmentPath "/snap/bin"
diff --git a/images/linux/scripts/installers/docker-moby.sh b/images/linux/scripts/installers/docker-moby.sh
index b9d43b54..8fe8d134 100644
--- a/images/linux/scripts/installers/docker-moby.sh
+++ b/images/linux/scripts/installers/docker-moby.sh
@@ -16,16 +16,22 @@ if ! IsInstalled $docker_package; then
apt-get remove -y moby-engine moby-cli
apt-get update
apt-get install -y moby-engine moby-cli
+ apt-get install --no-install-recommends -y moby-buildx
else
echo "Docker ($docker_package) is already installed"
fi
# Run tests to determine that the software installed as expected
echo "Testing to make sure that script performed as expected, and basic scenarios work"
+echo "Checking the docker-moby and moby-buildx"
if ! command -v docker; then
echo "docker was not installed"
exit 1
+elif ! [[ $(docker buildx) ]]; then
+ echo "Docker-Buildx was not installed"
+ exit 1
else
+ echo "Docker-moby and Docker-buildx checking the successfull"
# Docker daemon takes time to come up after installing
sleep 10
set -e
@@ -44,8 +50,13 @@ docker pull alpine:3.7
docker pull alpine:3.8
docker pull alpine:3.9
docker pull alpine:3.10
+docker pull ubuntu:14.04
## Add version information to the metadata file
echo "Documenting Docker version"
docker_version=$(docker -v)
DocumentInstalledItem "Docker-Moby ($docker_version)"
+
+echo "Documenting Docker-buildx version"
+DOCKER_BUILDX_VERSION=$(docker buildx version | cut -d ' ' -f2)
+DocumentInstalledItem "Docker-Buildx ($DOCKER_BUILDX_VERSION)"
diff --git a/images/linux/scripts/installers/dotnetcore-sdk.sh b/images/linux/scripts/installers/dotnetcore-sdk.sh
index d0e13810..70d712e2 100644
--- a/images/linux/scripts/installers/dotnetcore-sdk.sh
+++ b/images/linux/scripts/installers/dotnetcore-sdk.sh
@@ -3,6 +3,7 @@
## File: dotnetcore-sdk.sh
## Desc: Installs .NET Core SDK
################################################################################
+source $HELPER_SCRIPTS/etc-environment.sh
source $HELPER_SCRIPTS/apt.sh
source $HELPER_SCRIPTS/document.sh
@@ -95,5 +96,6 @@ done
# NuGetFallbackFolder at /usr/share/dotnet/sdk/NuGetFallbackFolder is warmed up by smoke test
# Additional FTE will just copy to ~/.dotnet/NuGet which provides no benefit on a fungible machine
-echo "DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1" | tee -a /etc/environment
+setEtcEnvironmentVariable DOTNET_SKIP_FIRST_TIME_EXPERIENCE 1
+prependEtcEnvironmentPath /home/runner/.dotnet/tools
echo 'export PATH="$PATH:$HOME/.dotnet/tools"' | tee -a /etc/skel/.bashrc
diff --git a/images/linux/scripts/installers/firefox.sh b/images/linux/scripts/installers/firefox.sh
index 8a849c85..e6e28afd 100644
--- a/images/linux/scripts/installers/firefox.sh
+++ b/images/linux/scripts/installers/firefox.sh
@@ -17,6 +17,10 @@ if ! command -v firefox; then
exit 1
fi
+# add to gloabl system preferences for firefox locale en_US, because other browsers have en_US local.
+# Default firefox local is en_GB
+echo 'pref("intl.locale.requested","en_US");' >> "/usr/lib/firefox/browser/defaults/preferences/syspref.js"
+
# Document what was added to the image
echo "Lastly, documenting what we added to the metadata file"
# Resolves: Running Firefox as root in a regular user's session is not supported.
diff --git a/images/linux/scripts/installers/homebrew-validate.sh b/images/linux/scripts/installers/homebrew-validate.sh
new file mode 100644
index 00000000..a8eef258
--- /dev/null
+++ b/images/linux/scripts/installers/homebrew-validate.sh
@@ -0,0 +1,14 @@
+#!/bin/bash
+################################################################################
+## File: homebrew-validate.sh
+## Desc: Validate the Homebrew can run after reboot without extra configuring
+################################################################################
+
+# Validate the installation
+echo "Validate the Homebrew can run after reboot"
+
+if ! command -v brew; then
+ echo "brew cat not run after reboot"
+ exit 1
+fi
+
diff --git a/images/linux/scripts/installers/homebrew.sh b/images/linux/scripts/installers/homebrew.sh
new file mode 100644
index 00000000..ee94ea60
--- /dev/null
+++ b/images/linux/scripts/installers/homebrew.sh
@@ -0,0 +1,36 @@
+#!/bin/bash
+################################################################################
+## File: homebrew.sh
+## Desc: Installs the Homebrew on Linux
+################################################################################
+
+# Source the helpers
+source $HELPER_SCRIPTS/document.sh
+source $HELPER_SCRIPTS/etc-environment.sh
+
+# Install the Homebrew on Linux
+/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
+eval $(/home/linuxbrew/.linuxbrew/bin/brew shellenv)
+
+# Make brew files and directories writable by any user
+sudo chmod -R o+w $HOMEBREW_PREFIX
+
+# Update /etc/environemnt
+## Put HOMEBREW_* variables
+brew shellenv|grep 'export HOMEBREW'|sed -E 's/^export (.*);$/\1/' | sudo tee -a /etc/environment
+# add brew executables locations to PATH
+brew_path=$(brew shellenv|grep '^export PATH' |sed -E 's/^export PATH="([^$]+)\$.*/\1/')
+appendEtcEnvironmentPath "$brew_path"
+
+# Validate the installation ad hoc
+echo "Validate the installation reloading /etc/environment"
+reloadEtcEnvironment
+
+if ! command -v brew; then
+ echo "brew was not installed"
+ exit 1
+fi
+
+# Document the installed version
+echo "Document the installed version"
+DocumentInstalledItem "Homebrew on Linux ($(brew -v 2>&1))"
diff --git a/images/linux/scripts/installers/hosted-tool-cache.sh b/images/linux/scripts/installers/hosted-tool-cache.sh
index f9e5b918..a0ff4466 100644
--- a/images/linux/scripts/installers/hosted-tool-cache.sh
+++ b/images/linux/scripts/installers/hosted-tool-cache.sh
@@ -49,12 +49,6 @@ done;
popd
-DocumentInstalledItem "Python:"
-pythons=$(ls $AGENT_TOOLSDIRECTORY/Python)
-for python in $pythons; do
- DocumentInstalledItemIndent "Python $python"
-done;
-
DocumentInstalledItem "Ruby:"
rubys=$(ls $AGENT_TOOLSDIRECTORY/Ruby)
for ruby in $rubys; do
diff --git a/images/linux/scripts/installers/mysql.sh b/images/linux/scripts/installers/mysql.sh
index 98d0d665..1f2ea2ed 100644
--- a/images/linux/scripts/installers/mysql.sh
+++ b/images/linux/scripts/installers/mysql.sh
@@ -44,7 +44,8 @@ echo "Lastly, documenting what we added to the metadata file"
DocumentInstalledItem "MySQL ($(mysql --version))"
DocumentInstalledItem "MySQL Server (user:root password:root)"
DocumentInstalledItem "MS SQL Server Client Tools"
+DocumentInstalledItem "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'"
# Disable mysql.service
-systemctl is-active --quiet mysql.service && systemctl stop mysql.service
-systemctl disable mysql.service
+systemctl is-active --quiet mysql.service && systemctl stop mysql.service
+systemctl disable mysql.service
diff --git a/images/linux/scripts/installers/rndgenerator.sh b/images/linux/scripts/installers/rndgenerator.sh
new file mode 100644
index 00000000..c2575989
--- /dev/null
+++ b/images/linux/scripts/installers/rndgenerator.sh
@@ -0,0 +1,24 @@
+#!/bin/bash
+################################################################################
+## File: rndgenerator.sh
+## Desc: Install random number generator
+################################################################################
+
+# Source the helpers for use with the script
+source $HELPER_SCRIPTS/document.sh
+
+# Install haveged
+apt-get -y install haveged
+
+# 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 haveged; do
+ if ! command -v $cmd; then
+ echo "$cmd was not installed or not found on PATH"
+ exit 1
+ fi
+done
+
+# Document what was added to the image
+echo "Lastly, documenting what we added to the metadata file"
+DocumentInstalledItem "Haveged $(dpkg-query --showformat='${Version}' --show haveged)"
\ No newline at end of file
diff --git a/images/linux/scripts/installers/rust.sh b/images/linux/scripts/installers/rust.sh
index 850868a4..c3f0ae94 100644
--- a/images/linux/scripts/installers/rust.sh
+++ b/images/linux/scripts/installers/rust.sh
@@ -5,10 +5,9 @@
################################################################################
# Source the helpers for use with the script
+source $HELPER_SCRIPTS/etc-environment.sh
source $HELPER_SCRIPTS/document.sh
-set -e
-
export RUSTUP_HOME=/usr/share/rust/.rustup
export CARGO_HOME=/usr/share/rust/.cargo
@@ -33,6 +32,9 @@ for cmd in rustup rustc rustdoc cargo rustfmt cargo-clippy bindgen cbindgen; do
fi
done
+# Update /etc/environemnt
+prependEtcEnvironmentPath "${CARGO_HOME}/bin"
+
# Rust Symlinks are added to a default profile /etc/skel
pushd /etc/skel
ln -sf $RUSTUP_HOME .rustup
diff --git a/images/linux/scripts/installers/test-toolcache.sh b/images/linux/scripts/installers/test-toolcache.sh
index 2601db4b..53ed0715 100644
--- a/images/linux/scripts/installers/test-toolcache.sh
+++ b/images/linux/scripts/installers/test-toolcache.sh
@@ -69,6 +69,5 @@ done;
AGENT_TOOLSDIRECTORY=/opt/hostedtoolcache
-Test_Hostedtoolcache_Tool "Python" "x64/python -c 'import sys;print(sys.version)'| head -1 | egrep -o '[0-9]+\.[0-9]+'"
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/updatepath.sh b/images/linux/scripts/installers/updatepath.sh
deleted file mode 100644
index 7d63ceb1..00000000
--- a/images/linux/scripts/installers/updatepath.sh
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/bash
-
-CARGO_HOME=/usr/share/rust/.cargo
-DOTNET_TOOLS_HOME=/home/runner/.dotnet/tools
-PHP_COMPOSER_HOME=/home/runner/.config/composer/vendor/bin
-echo "PATH=${CARGO_HOME}/bin:${PATH}:${DOTNET_TOOLS_HOME}:${PHP_COMPOSER_HOME}" | tee -a /etc/environment
\ No newline at end of file
diff --git a/images/linux/scripts/installers/validate-disk-space.sh b/images/linux/scripts/installers/validate-disk-space.sh
new file mode 100644
index 00000000..5201848d
--- /dev/null
+++ b/images/linux/scripts/installers/validate-disk-space.sh
@@ -0,0 +1,14 @@
+#!/bin/bash
+################################################################################
+## File: validate-disk-space.sh
+## Desc: Validate free disk space
+################################################################################
+
+availableSpaceMB=$(df / -hm | sed 1d | awk '{ print $4}')
+minimumFreeSpaceMB=18000
+
+echo "Available disk space: $availableSpaceMB MB"
+if [ $availableSpaceMB -le $minimumFreeSpaceMB ]; then
+ echo "Not enough disk space on the image (minimum available space: $minimumFreeSpaceMB MB)"
+ exit 1
+fi
\ No newline at end of file
diff --git a/images/linux/scripts/installers/vcpkg.sh b/images/linux/scripts/installers/vcpkg.sh
index 9f6e60aa..69f50c5e 100644
--- a/images/linux/scripts/installers/vcpkg.sh
+++ b/images/linux/scripts/installers/vcpkg.sh
@@ -6,6 +6,7 @@
# Source the helpers for use with the script
source $HELPER_SCRIPTS/document.sh
+source $HELPER_SCRIPTS/os.sh
# Set env variable for vcpkg
VCPKG_INSTALLATION_ROOT=/usr/local/share/vcpkg
@@ -13,11 +14,22 @@ echo "VCPKG_INSTALLATION_ROOT=${VCPKG_INSTALLATION_ROOT}" | tee -a /etc/environm
# Install vcpkg
git clone --depth=1 https://github.com/Microsoft/vcpkg $VCPKG_INSTALLATION_ROOT
+
+# vcpkg requires g++ version 7+, yet Ubuntu 16 default is 5.4. Set version 7 as default temporarily
+if isUbuntu16; then
+ ln -sf g++-7 /usr/bin/g++
+fi
+
$VCPKG_INSTALLATION_ROOT/bootstrap-vcpkg.sh
$VCPKG_INSTALLATION_ROOT/vcpkg integrate install
chmod 0777 -R $VCPKG_INSTALLATION_ROOT
ln -sf $VCPKG_INSTALLATION_ROOT/vcpkg /usr/local/bin
+# Set back g++ 5.4 as default
+if isUbuntu16; then
+ ln -sf g++-5 /usr/bin/g++
+fi
+
# 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 vcpkg; then
diff --git a/images/linux/toolcache-1604.json b/images/linux/toolcache-1604.json
index 40f4cd9d..96638f0f 100644
--- a/images/linux/toolcache-1604.json
+++ b/images/linux/toolcache-1604.json
@@ -1,7 +1,4 @@
{
- "@actions/toolcache-python-ubuntu-1604-x64": [
- "2.7", "3.5", "3.6", "3.7", "3.8"
- ],
"@actions/toolcache-ruby-ubuntu-1604-x64": [
"2.4", "2.5", "2.6", "2.7"
],
diff --git a/images/linux/toolcache-1804.json b/images/linux/toolcache-1804.json
index 26ad4d98..13c69785 100644
--- a/images/linux/toolcache-1804.json
+++ b/images/linux/toolcache-1804.json
@@ -1,7 +1,4 @@
{
- "@actions/toolcache-python-ubuntu-1804-x64": [
- "2.7", "3.5", "3.6", "3.7", "3.8"
- ],
"@actions/toolcache-ruby-ubuntu-1804-x64": [
"2.4", "2.5", "2.6", "2.7"
],
diff --git a/images/linux/toolset-1604.json b/images/linux/toolset-1604.json
new file mode 100644
index 00000000..e3953f81
--- /dev/null
+++ b/images/linux/toolset-1604.json
@@ -0,0 +1,18 @@
+{
+ "toolcache": [
+ {
+ "name": "Python",
+ "url" : "https://raw.githubusercontent.com/actions/python-versions/master/versions-manifest.json",
+ "platform" : "linux",
+ "platform_version": "16.04",
+ "arch": "x64",
+ "versions": [
+ "2.7.*",
+ "3.5.*",
+ "3.6.*",
+ "3.7.*",
+ "3.8.*"
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/images/linux/toolset-1804.json b/images/linux/toolset-1804.json
new file mode 100644
index 00000000..a854ae6b
--- /dev/null
+++ b/images/linux/toolset-1804.json
@@ -0,0 +1,18 @@
+{
+ "toolcache": [
+ {
+ "name": "Python",
+ "url" : "https://raw.githubusercontent.com/actions/python-versions/master/versions-manifest.json",
+ "platform" : "linux",
+ "platform_version": "18.04",
+ "arch": "x64",
+ "versions": [
+ "2.7.*",
+ "3.5.*",
+ "3.6.*",
+ "3.7.*",
+ "3.8.*"
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/images/linux/ubuntu1604.json b/images/linux/ubuntu1604.json
index 5b1e2688..a4f138db 100644
--- a/images/linux/ubuntu1604.json
+++ b/images/linux/ubuntu1604.json
@@ -132,6 +132,46 @@
],
"execute_command": "sudo sh -c '{{ .Vars }} {{ .Path }}'"
},
+ {
+ "type": "shell",
+ "scripts": [
+ "{{template_dir}}/scripts/installers/complete-snap-setup.sh"
+ ],
+ "environment_vars": [
+ "HELPER_SCRIPTS={{user `helper_script_folder`}}"
+ ],
+ "execute_command": "sudo sh -c '{{ .Vars }} {{ .Path }}'"
+ },
+ {
+ "type": "shell",
+ "scripts": [
+ "{{template_dir}}/scripts/installers/homebrew.sh"
+ ],
+ "environment_vars": [
+ "METADATA_FILE={{user `metadata_file`}}",
+ "HELPER_SCRIPTS={{user `helper_script_folder`}}",
+ "DEBIAN_FRONTEND=noninteractive"
+ ],
+ "execute_command": "/bin/sh -c '{{ .Vars }} {{ .Path }}'"
+ },
+ {
+ "type": "shell",
+ "expect_disconnect": true,
+ "scripts": [
+ "{{template_dir}}/scripts/base/reboot.sh"
+ ],
+ "execute_command": "/bin/sh -c '{{ .Vars }} {{ .Path }}'"
+ },
+ {
+ "type": "shell",
+ "pause_before": "30s",
+ "timeout": "10m",
+ "start_retry_timeout": "10s",
+ "scripts": [
+ "{{template_dir}}/scripts/installers/homebrew-validate.sh"
+ ],
+ "execute_command": "/bin/sh -c '{{ .Vars }} {{ .Path }}'"
+ },
{
"type": "shell",
"scripts": [
@@ -141,6 +181,7 @@
"{{template_dir}}/scripts/installers/azure-cli.sh",
"{{template_dir}}/scripts/installers/azure-devops-cli.sh",
"{{template_dir}}/scripts/installers/1604/basic.sh",
+ "{{template_dir}}/scripts/installers/aliyun-cli.sh",
"{{template_dir}}/scripts/installers/aws.sh",
"{{template_dir}}/scripts/installers/build-essential.sh",
"{{template_dir}}/scripts/installers/nvm.sh",
@@ -187,10 +228,9 @@
"{{template_dir}}/scripts/installers/packer.sh",
"{{template_dir}}/scripts/installers/vcpkg.sh",
"{{template_dir}}/scripts/installers/zeit-now.sh",
- "{{template_dir}}/scripts/installers/updatepath.sh",
"{{template_dir}}/scripts/installers/dpkg-config.sh",
- "{{template_dir}}/scripts/installers/mongodb.sh"
-
+ "{{template_dir}}/scripts/installers/mongodb.sh",
+ "{{template_dir}}/scripts/installers/rndgenerator.sh"
],
"environment_vars": [
"METADATA_FILE={{user `metadata_file`}}",
@@ -199,6 +239,18 @@
],
"execute_command": "sudo sh -c '{{ .Vars }} {{ .Path }}'"
},
+ {
+ "type": "shell",
+ "scripts": [
+ "{{template_dir}}/scripts/installers/aws-sam-cli.sh"
+ ],
+ "environment_vars": [
+ "METADATA_FILE={{user `metadata_file`}}",
+ "HELPER_SCRIPTS={{user `helper_script_folder`}}",
+ "DEBIAN_FRONTEND=noninteractive"
+ ],
+ "execute_command": "/bin/sh -c '{{ .Vars }} {{ .Path }}'"
+ },
{
"type": "shell",
"scripts": [
@@ -217,6 +269,11 @@
"source": "{{template_dir}}/toolcache-1604.json",
"destination": "{{user `installer_script_folder`}}/toolcache.json"
},
+ {
+ "type": "file",
+ "source": "{{template_dir}}/toolset-1604.json",
+ "destination": "{{user `installer_script_folder`}}/toolset.json"
+ },
{
"type": "shell",
"scripts":[
@@ -235,6 +292,19 @@
],
"execute_command": "sudo sh -c '{{ .Vars }} {{ .Path }}'"
},
+ {
+ "type": "shell",
+ "scripts":[
+ "{{template_dir}}/scripts/installers/Install-Toolset.ps1",
+ "{{template_dir}}/scripts/installers/Validate-Toolset.ps1"
+ ],
+ "environment_vars": [
+ "METADATA_FILE={{user `metadata_file`}}",
+ "HELPER_SCRIPTS={{user `helper_script_folder`}}",
+ "INSTALLER_SCRIPT_FOLDER={{user `installer_script_folder`}}"
+ ],
+ "execute_command": "sudo sh -c '{{ .Vars }} pwsh -f {{ .Path }}'"
+ },
{
"type": "shell",
"scripts":[
@@ -247,6 +317,19 @@
],
"execute_command": "sudo sh -c '{{ .Vars }} {{ .Path }}'"
},
+ {
+ "type": "shell",
+ "scripts":[
+ "{{template_dir}}/scripts/installers/cleanup.sh"
+ ],
+ "execute_command": "sudo sh -c '{{ .Vars }} {{ .Path }}'"
+ },
+ {
+ "type": "shell",
+ "scripts":[
+ "{{template_dir}}/scripts/installers/validate-disk-space.sh"
+ ]
+ },
{
"type": "file",
"source": "{{user `metadata_file`}}",
diff --git a/images/linux/ubuntu1804.json b/images/linux/ubuntu1804.json
index cb7e8819..f72233e6 100644
--- a/images/linux/ubuntu1804.json
+++ b/images/linux/ubuntu1804.json
@@ -135,6 +135,46 @@
],
"execute_command": "sudo sh -c '{{ .Vars }} {{ .Path }}'"
},
+ {
+ "type": "shell",
+ "scripts": [
+ "{{template_dir}}/scripts/installers/complete-snap-setup.sh"
+ ],
+ "environment_vars": [
+ "HELPER_SCRIPTS={{user `helper_script_folder`}}"
+ ],
+ "execute_command": "sudo sh -c '{{ .Vars }} {{ .Path }}'"
+ },
+ {
+ "type": "shell",
+ "scripts": [
+ "{{template_dir}}/scripts/installers/homebrew.sh"
+ ],
+ "environment_vars": [
+ "METADATA_FILE={{user `metadata_file`}}",
+ "HELPER_SCRIPTS={{user `helper_script_folder`}}",
+ "DEBIAN_FRONTEND=noninteractive"
+ ],
+ "execute_command": "/bin/sh -c '{{ .Vars }} {{ .Path }}'"
+ },
+ {
+ "type": "shell",
+ "expect_disconnect": true,
+ "scripts": [
+ "{{template_dir}}/scripts/base/reboot.sh"
+ ],
+ "execute_command": "/bin/sh -c '{{ .Vars }} {{ .Path }}'"
+ },
+ {
+ "type": "shell",
+ "pause_before": "30s",
+ "timeout": "10m",
+ "start_retry_timeout": "10s",
+ "scripts": [
+ "{{template_dir}}/scripts/installers/homebrew-validate.sh"
+ ],
+ "execute_command": "/bin/sh -c '{{ .Vars }} {{ .Path }}'"
+ },
{
"type": "shell",
"scripts": [
@@ -144,11 +184,13 @@
"{{template_dir}}/scripts/installers/azure-cli.sh",
"{{template_dir}}/scripts/installers/azure-devops-cli.sh",
"{{template_dir}}/scripts/installers/1804/basic.sh",
+ "{{template_dir}}/scripts/installers/aliyun-cli.sh",
"{{template_dir}}/scripts/installers/aws.sh",
"{{template_dir}}/scripts/installers/build-essential.sh",
"{{template_dir}}/scripts/installers/clang.sh",
"{{template_dir}}/scripts/installers/swift.sh",
"{{template_dir}}/scripts/installers/cmake.sh",
+ "{{template_dir}}/scripts/installers/1804/containers.sh",
"{{template_dir}}/scripts/installers/docker-compose.sh",
"{{template_dir}}/scripts/installers/docker-moby.sh",
"{{template_dir}}/scripts/installers/dotnetcore-sdk.sh",
@@ -190,9 +232,9 @@
"{{template_dir}}/scripts/installers/packer.sh",
"{{template_dir}}/scripts/installers/vcpkg.sh",
"{{template_dir}}/scripts/installers/zeit-now.sh",
- "{{template_dir}}/scripts/installers/updatepath.sh",
"{{template_dir}}/scripts/installers/dpkg-config.sh",
- "{{template_dir}}/scripts/installers/mongodb.sh"
+ "{{template_dir}}/scripts/installers/mongodb.sh",
+ "{{template_dir}}/scripts/installers/rndgenerator.sh"
],
"environment_vars": [
"METADATA_FILE={{user `metadata_file`}}",
@@ -201,6 +243,18 @@
],
"execute_command": "sudo sh -c '{{ .Vars }} {{ .Path }}'"
},
+ {
+ "type": "shell",
+ "scripts": [
+ "{{template_dir}}/scripts/installers/aws-sam-cli.sh"
+ ],
+ "environment_vars": [
+ "METADATA_FILE={{user `metadata_file`}}",
+ "HELPER_SCRIPTS={{user `helper_script_folder`}}",
+ "DEBIAN_FRONTEND=noninteractive"
+ ],
+ "execute_command": "/bin/sh -c '{{ .Vars }} {{ .Path }}'"
+ },
{
"type": "shell",
"scripts": [
@@ -219,6 +273,11 @@
"source": "{{template_dir}}/toolcache-1804.json",
"destination": "{{user `installer_script_folder`}}/toolcache.json"
},
+ {
+ "type": "file",
+ "source": "{{template_dir}}/toolset-1804.json",
+ "destination": "{{user `installer_script_folder`}}/toolset.json"
+ },
{
"type": "shell",
"scripts":[
@@ -237,6 +296,19 @@
],
"execute_command": "sudo sh -c '{{ .Vars }} {{ .Path }}'"
},
+ {
+ "type": "shell",
+ "scripts":[
+ "{{template_dir}}/scripts/installers/Install-Toolset.ps1",
+ "{{template_dir}}/scripts/installers/Validate-Toolset.ps1"
+ ],
+ "environment_vars": [
+ "METADATA_FILE={{user `metadata_file`}}",
+ "HELPER_SCRIPTS={{user `helper_script_folder`}}",
+ "INSTALLER_SCRIPT_FOLDER={{user `installer_script_folder`}}"
+ ],
+ "execute_command": "sudo sh -c '{{ .Vars }} pwsh -f {{ .Path }}'"
+ },
{
"type": "shell",
"scripts":[
@@ -249,6 +321,19 @@
],
"execute_command": "sudo sh -c '{{ .Vars }} {{ .Path }}'"
},
+ {
+ "type": "shell",
+ "scripts":[
+ "{{template_dir}}/scripts/installers/cleanup.sh"
+ ],
+ "execute_command": "sudo sh -c '{{ .Vars }} {{ .Path }}'"
+ },
+ {
+ "type": "shell",
+ "scripts":[
+ "{{template_dir}}/scripts/installers/validate-disk-space.sh"
+ ]
+ },
{
"type": "file",
"source": "{{user `metadata_file`}}",
diff --git a/images/macos/macos-10.15-Readme.md b/images/macos/macos-10.15-Readme.md
index 62a84931..e708126b 100644
--- a/images/macos/macos-10.15-Readme.md
+++ b/images/macos/macos-10.15-Readme.md
@@ -1,45 +1,43 @@
-# macOS Catalina 10.15.4 (19E266)
-The following software is installed on machines with the 20200328.1 update.
+# OS X info
+- System Version: macOS 10.15.4 (19E287)
+- Kernel Version: Darwin 19.4.0
+- System Integrity Protection: Enabled
+- Image Version: 20200425.1
-#### Xcode 11.3.1 set by default
-## Operating System
-
-- OS X 10.15.4 (19E266) **Catalina**
-
-## Installed Software
-### Language and Runtime
-- Java 1.7: (Zulu 7.36.0.5-CA-macosx) (build 1.7.0_252-b10)
-- Java 1.8: (Zulu 8.44.0.11-CA-macosx) (build 1.8.0_242-b20) (default)
-- Java 11: Zulu11.37+17-CA (build 11.0.6+10-LTS)
+# 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.29+9-CA (build 13.0.2+6-MTS)
-- Java 14: Zulu14.27+1-CA (build 14+36)
-- Rust 1.42.0
-- Clang/LLVM 9.0.1
-- gcc-8 (Homebrew GCC 8.4.0) 8.4.0
-- gcc-9 (Homebrew GCC 9.3.0) 9.3.0
-- GNU Fortran (Homebrew GCC 8.4.0) 8.4.0
-- GNU Fortran (Homebrew GCC 9.3.0) 9.3.0
-- Node.js v12.16.1
+- 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
+- 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.2
- NVM 0.33.11
-- NVM - Cached node versions: v6.17.1 v8.17.0 v10.19.0 v12.16.1 v13.12.0
+- NVM - Cached node versions: v6.17.1 v8.17.0 v10.20.1 v12.16.2 v13.13.0
- PowerShell 7.0.0
- Python 2.7.17
- Python 3.7.7
-- Ruby 2.6.5p114
+- Ruby 2.6.6p146
- .NET SDK 2.0.0 3.0.100 3.0.101 3.0.102 3.0.103 3.1.100 3.1.101 3.1.200 3.1.201
-- Go 1.14.1
-- PHP 7.4.4
-- julia 1.4.0
+- Go 1.14.2
+- 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.11
-- NPM 6.13.4
+- Homebrew 2.2.13
+- NPM 6.14.4
- Yarn 1.22.4
- NuGet 5.5.0.6382
- Pip 19.3.1 (python 2.7)
@@ -47,169 +45,189 @@ The following software is installed on machines with the 20200328.1 update.
- Miniconda 4.8.2
- RubyGems 3.1.2
-### Project Management
+## Project Management
- Apache Maven 3.6.3
- Gradle 6.3
-### Utilities
+## Utilities
- Curl 7.69.1
-- Git: 2.26.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
-- GNU parallel 20200322
+- GNU parallel 20200422
- OpenSSL 1.0.2t 10 Sep 2019
- jq 1.6
- gpg (GnuPG) 2.2.20
- psql (PostgreSQL) 12.2
+- PostgreSQL 12.2
- aria2 1.35.0
-- azcopy 10.3.4
+- azcopy 10.4.1
- zstd 1.4.4
-- bazel 2.2.0
-- bazelisk v1.3.0
-- helm v3.1.2+gd878d4d
-- Docker 19.03.8
-- docker-machine 0.16.2
-- docker-compose 1.25.4
+- bazel 3.1.0
+- bazelisk v1.4.0
+- helm v3.2.0+ge11b7ce
+- virtualbox 6.1.6r137129
+- Vagrant 2.2.7
-### Tools
-- Fastlane 2.144.0
-- Cmake 3.17.0
-- App Center CLI 2.3.5
-- Azure CLI 2.2.0
-- AWS CLI 2.0.5
+## Tools
+- Fastlane 2.146.1
+- Cmake 3.17.1
+- App Center CLI 2.5.0
+- Azure CLI 2.4.0
+- AWS CLI 2.0.9
+- AWS SAM CLI 0.47.0
+- Aliyun CLI 3.0.39
-### Browsers
-- Google Chrome 80.0.3987.149
-- ChromeDriver 80.0.3987.106
-- Microsoft Edge 80.0.361.69
-- MSEdgeDriver 80.0.361.69
-- Mozilla Firefox 74.0
+## Browsers
+- Safari 13.1 (15609.1.20.111.8)
+- SafariDriver 13.1 (15609.1.20.111.8)
+- Google Chrome 81.0.4044.122
+- ChromeDriver 81.0.4044.69
+- Microsoft Edge 81.0.416.64
+- MSEdgeDriver 81.0.416.64
+- Mozilla Firefox 75.0
- geckodriver 0.26.0
-### Toolcache
-#### Ruby
-- 2.4.9
-- 2.5.7
-- 2.6.5
-- 2.7.0
+## Toolcache
+### Ruby
+- 2.4.10
+- 2.5.8
+- 2.6.6
+- 2.7.1
-#### Python
+### Python
- 2.7.17
- 3.5.9
- 3.6.10
- 3.7.6
- 3.8.2
-#### PyPy
+### PyPy
- 2.7.17
- 3.6.9
-### Xamarin
-#### Visual Studio for Mac
-- 8.5.0.3183
+## Xamarin
+### Visual Studio for Mac
+- 8.5.4.12
-#### 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
- 13.8.3.0
- 13.6.0.12
- 13.4.0.2
+- 13.2.0.47
-#### Xamarin.Mac
+### Xamarin.Mac
+- 6.16.0.13
- 6.14.1.39
- 6.10.0.21
- 6.8.3.0
- 6.6.0.12
- 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.4.1 (default) | 11E503a | /Applications/Xcode_11.4.1.app |
| 11.4 | 11E146 | /Applications/Xcode_11.4.app |
-| 11.3.1 (default) | 11C505 | /Applications/Xcode_11.3.1.app |
+| 11.3.1 | 11C505 | /Applications/Xcode_11.3.1.app |
| 11.3 | 11C29 | /Applications/Xcode_11.3.app |
| 11.2.1 | 11B500 | /Applications/Xcode_11.2.1.app |
| 11.2 | 11B52 | /Applications/Xcode_11.2.app |
| 11.1 | 11A1027 | /Applications/Xcode_11.1.app |
| 11.0 | 11A420a | /Applications/Xcode_11.app |
+| 10.3 | 10G8 | /Applications/Xcode_10.3.app |
-#### Xcode Support Tools
+### Xcode Support Tools
- Nomad CLI 3.1.2
- Nomad CLI IPA ipa 0.14.3
- xcpretty 0.3.0
- xctool 0.3.7
-- xcversion 2.6.3
+- xcversion 2.6.4
-#### Installed SDKs
-| SDK | SDK Name | Xcode Version |
-| ----------------------- | -------------------- | -------------------------------------------- |
-| macOS 10.15 | macosx10.15 | 11.0, 11.1, 11.2, 11.2.1, 11.3, 11.3.1, 11.4 |
-| iOS 13.0 | iphoneos13.0 | 11.0 |
-| iOS 13.1 | iphoneos13.1 | 11.1 |
-| iOS 13.2 | iphoneos13.2 | 11.2, 11.2.1, 11.3, 11.3.1 |
-| iOS 13.4 | iphoneos13.4 | 11.4 |
-| Simulator - iOS 13.0 | iphonesimulator13.0 | 11.0 |
-| Simulator - iOS 13.1 | iphonesimulator13.1 | 11.1 |
-| Simulator - iOS 13.2 | iphonesimulator13.2 | 11.2, 11.2.1, 11.3, 11.3.1 |
-| Simulator - iOS 13.4 | iphonesimulator13.4 | 11.4 |
-| tvOS 13.0 | appletvos13.0 | 11.0, 11.1 |
-| tvOS 13.2 | appletvos13.2 | 11.2, 11.2.1, 11.3, 11.3.1 |
-| tvOS 13.4 | appletvos13.4 | 11.4 |
-| Simulator - tvOS 13.0 | appletvsimulator13.0 | 11.0, 11.1 |
-| Simulator - tvOS 13.2 | appletvsimulator13.2 | 11.2, 11.2.1, 11.3, 11.3.1 |
-| Simulator - tvOS 13.4 | appletvsimulator13.4 | 11.4 |
-| watchOS 6.0 | watchos6.0 | 11.0, 11.1 |
-| watchOS 6.1 | watchos6.1 | 11.2, 11.2.1, 11.3, 11.3.1 |
-| watchOS 6.2 | watchos6.2 | 11.4 |
-| Simulator - watchOS 6.0 | watchsimulator6.0 | 11.0, 11.1 |
-| Simulator - watchOS 6.1 | watchsimulator6.1 | 11.2, 11.2.1, 11.3, 11.3.1 |
-| Simulator - watchOS 6.2 | watchsimulator6.2 | 11.4 |
-| DriverKit 19.0 | driverkit.macosx19.0 | 11.0, 11.1, 11.2, 11.2.1, 11.3, 11.3.1, 11.4 |
+### 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, 11.2.1, 11.3, 11.3.1, 11.4, 11.4.1 |
+| iOS 12.4 | iphoneos12.4 | 10.3 |
+| iOS 13.0 | iphoneos13.0 | 11.0 |
+| iOS 13.1 | iphoneos13.1 | 11.1 |
+| iOS 13.2 | iphoneos13.2 | 11.2, 11.2.1, 11.3, 11.3.1 |
+| iOS 13.4 | iphoneos13.4 | 11.4, 11.4.1 |
+| Simulator - iOS 12.4 | iphonesimulator12.4 | 10.3 |
+| Simulator - iOS 13.0 | iphonesimulator13.0 | 11.0 |
+| Simulator - iOS 13.1 | iphonesimulator13.1 | 11.1 |
+| Simulator - iOS 13.2 | iphonesimulator13.2 | 11.2, 11.2.1, 11.3, 11.3.1 |
+| Simulator - iOS 13.4 | iphonesimulator13.4 | 11.4, 11.4.1 |
+| tvOS 12.4 | appletvos12.4 | 10.3 |
+| tvOS 13.0 | appletvos13.0 | 11.0, 11.1 |
+| tvOS 13.2 | appletvos13.2 | 11.2, 11.2.1, 11.3, 11.3.1 |
+| tvOS 13.4 | appletvos13.4 | 11.4, 11.4.1 |
+| 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, 11.2.1, 11.3, 11.3.1 |
+| Simulator - tvOS 13.4 | appletvsimulator13.4 | 11.4, 11.4.1 |
+| watchOS 5.3 | watchos5.3 | 10.3 |
+| watchOS 6.0 | watchos6.0 | 11.0, 11.1 |
+| watchOS 6.1 | watchos6.1 | 11.2, 11.2.1, 11.3, 11.3.1 |
+| watchOS 6.2 | watchos6.2 | 11.4, 11.4.1 |
+| 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, 11.2.1, 11.3, 11.3.1 |
+| Simulator - watchOS 6.2 | watchsimulator6.2 | 11.4, 11.4.1 |
+| 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 |
-#### Installed Simulators
-| OS | Xcode Version | Simulators |
-| ----------- | -------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| iOS 13.0 | 11.0 | iPhone 8
iPhone 8 Plus
iPhone 11
iPhone 11 Pro
iPhone 11 Pro Max
iPad Pro (9.7-inch)
iPad Pro (11-inch)
iPad Pro (12.9-inch) (3rd generation)
iPad Air (3rd generation) |
-| iOS 13.1 | 11.1 | iPhone 8
iPhone 8 Plus
iPhone 11
iPhone 11 Pro
iPhone 11 Pro Max
iPad Pro (9.7-inch)
iPad Pro (11-inch)
iPad Pro (12.9-inch) (3rd generation)
iPad Air (3rd generation) |
-| iOS 13.2 | 11.2
11.2.1 | iPhone 8
iPhone 8 Plus
iPhone 11
iPhone 11 Pro
iPhone 11 Pro Max
iPad Pro (9.7-inch)
iPad Pro (11-inch)
iPad Pro (12.9-inch) (3rd generation)
iPad Air (3rd generation) |
-| iOS 13.3 | 11.3
11.3.1 | iPhone 8
iPhone 8 Plus
iPhone 11
iPhone 11 Pro
iPhone 11 Pro Max
iPad Pro (9.7-inch)
iPad (7th generation)
iPad Pro (11-inch)
iPad Pro (12.9-inch) (3rd generation)
iPad Air (3rd generation)
iPad Pro (11-inch) (1st generation) |
-| iOS 13.4 | 11.4 | iPhone 8
iPhone 8 Plus
iPhone 11
iPhone 11 Pro
iPhone 11 Pro Max
iPad Pro (9.7-inch)
iPad (7th generation)
iPad Pro (11-inch) (2nd generation)
iPad Pro (12.9-inch) (4th generation)
iPad Air (3rd generation) |
-| tvOS 13.0 | 11.0
11.1 | Apple TV
Apple TV 4K
Apple TV 4K (at 1080p) |
-| tvOS 13.2 | 11.2
11.2.1 | Apple TV
Apple TV 4K
Apple TV 4K (at 1080p) |
-| tvOS 13.3 | 11.3
11.3.1 | Apple TV
Apple TV 4K
Apple TV 4K (at 1080p) |
-| tvOS 13.4 | 11.4 | Apple TV
Apple TV 4K
Apple TV 4K (at 1080p) |
-| 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
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 | Apple Watch Series 4 - 40mm
Apple Watch Series 4 - 44mm
Apple Watch Series 5 - 40mm
Apple Watch Series 5 - 44mm |
+### 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) |
+| iOS 13.0 | 11.0 | iPhone 8
iPhone 8 Plus
iPhone 11
iPhone 11 Pro
iPhone 11 Pro Max
iPad Pro (9.7-inch)
iPad Pro (11-inch)
iPad Pro (12.9-inch) (3rd generation)
iPad Air (3rd generation) |
+| iOS 13.1 | 11.1 | iPhone 8
iPhone 8 Plus
iPhone 11
iPhone 11 Pro
iPhone 11 Pro Max
iPad Pro (9.7-inch)
iPad Pro (11-inch)
iPad Pro (12.9-inch) (3rd generation)
iPad Air (3rd generation) |
+| iOS 13.2 | 11.2
11.2.1 | iPhone 8
iPhone 8 Plus
iPhone 11
iPhone 11 Pro
iPhone 11 Pro Max
iPad Pro (9.7-inch)
iPad Pro (11-inch)
iPad Pro (12.9-inch) (3rd generation)
iPad Air (3rd generation) |
+| iOS 13.3 | 11.3
11.3.1 | iPhone 8
iPhone 8 Plus
iPhone 11
iPhone 11 Pro
iPhone 11 Pro Max
iPad Pro (9.7-inch)
iPad Pro (11-inch)
iPad Pro (12.9-inch) (3rd generation)
iPad Air (3rd generation) |
+| iOS 13.4 | 11.4
11.4.1 | iPhone 8
iPhone 8 Plus
iPhone 11
iPhone 11 Pro
iPhone 11 Pro Max
iPad Pro (9.7-inch)
iPad (7th generation)
iPad Pro (11-inch) (2nd generation)
iPad Pro (12.9-inch) (4th generation)
iPad Air (3rd generation)
iPhone SE (2nd generation) |
+| 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
11.2.1 | Apple TV
Apple TV 4K
Apple TV 4K (at 1080p) |
+| tvOS 13.3 | 11.3
11.3.1 | Apple TV
Apple TV 4K
Apple TV 4K (at 1080p) |
+| tvOS 13.4 | 11.4
11.4.1 | 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
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 | 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 29.0.6 |
+| platform-tools | Android SDK Platform-Tools, Revision 30.0.0 |
-#### Android SDK Platforms
+### Android SDK Platforms
| Package Name | Description |
| ------------ | ----------------------------------- |
| android-24 | Android SDK Platform 24, Revision 2 |
@@ -219,7 +237,7 @@ The following software is installed on machines with the 20200328.1 update.
| 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 |
@@ -248,15 +266,15 @@ The following software is installed on machines with the 20200328.1 update.
| 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 |
-#### Android Utils
+### Android Utils
| Package Name | Version |
| ---------------- | ------------ |
| cmake | 3.6.4111459 |
| lldb | 3.1.4508709 |
-| ndk-bundle | 18.1.5063045 |
+| 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 |
@@ -264,7 +282,7 @@ The following software is installed on machines with the 20200328.1 update.
| 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 |
@@ -272,3 +290,4 @@ The following software is installed on machines with the 20200328.1 update.
| Google Repository | 58 |
| Intel x86 Emulator Accelerator (HAXM installer) | 7.5.1 |
+
diff --git a/images/win/Windows2016-Azure.json b/images/win/Windows2016-Azure.json
index f7753eb9..834de3af 100644
--- a/images/win/Windows2016-Azure.json
+++ b/images/win/Windows2016-Azure.json
@@ -18,6 +18,7 @@
"run_scan_antivirus": "false",
"root_folder": "C:",
+ "toolset_json_path": "{{env `TEMP`}}\\toolset.json",
"image_folder": "C:\\image",
"commit_file": "C:\\image\\commit.txt",
"imagedata_file": "C:\\imagedata.json",
@@ -175,10 +176,6 @@
"{{ template_dir }}/scripts/Installers/Windows2016/Update-DockerImages.ps1"
]
},
- {
- "type": "powershell",
- "inline": ["choco install vcredist140 -y"]
- },
{
"type": "powershell",
"valid_exit_codes": [
@@ -299,6 +296,12 @@
"{{ template_dir }}/scripts/Installers/Install-Bazel.ps1"
]
},
+ {
+ "type": "powershell",
+ "scripts":[
+ "{{ template_dir }}/scripts/Installers/Install-AliyunCli.ps1"
+ ]
+ },
{
"type": "powershell",
"scripts":[
@@ -316,6 +319,11 @@
"source": "{{template_dir}}/toolcache-2016.json",
"destination": "{{user `root_folder`}}/toolcache.json"
},
+ {
+ "type": "file",
+ "source": "{{template_dir}}/toolset-2016.json",
+ "destination": "{{user `toolset_json_path`}}"
+ },
{
"type": "powershell",
"environment_vars":[
@@ -326,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-Toolset.ps1"
+ ]
+ },
{
"type": "powershell",
"scripts":[
@@ -452,6 +469,12 @@
"{{ template_dir }}/scripts/Installers/Install-AWS.ps1"
]
},
+ {
+ "type": "powershell",
+ "scripts":[
+ "{{ template_dir }}/scripts/Installers/Install-AWS-SAM.ps1"
+ ]
+ },
{
"type": "powershell",
"scripts":[
@@ -470,14 +493,6 @@
"{{ template_dir }}/scripts/Installers/Install-MysqlCli.ps1"
]
},
- {
- "type": "powershell",
- "elevated_user": "SYSTEM",
- "elevated_password": "",
- "scripts":[
- "{{ template_dir }}/scripts/Installers/Install-SQLExpress.ps1"
- ]
- },
{
"type": "powershell",
"scripts":[
@@ -621,6 +636,12 @@
"{{ template_dir }}/scripts/Installers/Validate-AzureCli.ps1"
]
},
+ {
+ "type": "powershell",
+ "scripts":[
+ "{{ template_dir }}/scripts/Installers/Validate-AWS-SAM.ps1"
+ ]
+ },
{
"type": "powershell",
"scripts":[
@@ -636,6 +657,15 @@
"{{ template_dir }}/scripts/Installers/Validate-ToolCache.ps1"
]
},
+ {
+ "type": "powershell",
+ "environment_vars":[
+ "TOOLSET_JSON_PATH={{user `toolset_json_path`}}"
+ ],
+ "scripts":[
+ "{{ template_dir }}/scripts/Installers/Validate-Toolset.ps1"
+ ]
+ },
{
"type": "powershell",
"scripts":[
@@ -742,7 +772,7 @@
{
"type": "powershell",
"scripts":[
- "{{ template_dir }}/scripts/Installers/Validate-SQLExpress.ps1"
+ "{{ template_dir }}/scripts/Installers/Validate-AliyunCli.ps1"
]
},
{
@@ -877,6 +907,12 @@
"{{ template_dir }}/scripts/Installers/Validate-Kind.ps1"
]
},
+ {
+ "type": "powershell",
+ "scripts":[
+ "{{ template_dir }}/scripts/Installers/Validate-DiskSpace.ps1"
+ ]
+ },
{
"type": "file",
"source": "C:\\InstalledSoftware.md",
diff --git a/images/win/Windows2016-Readme.md b/images/win/Windows2016-Readme.md
index f20e4870..36540bef 100644
--- a/images/win/Windows2016-Readme.md
+++ b/images/win/Windows2016-Readme.md
@@ -1,6 +1,6 @@
# Windows Server 2016
-The following software is installed on machines with the 20200323.1 update.
+The following software is installed on machines with the 20200426.1 update.
Components marked with **\*** have been upgraded since the previous version of the image.
@@ -25,7 +25,7 @@ _Environment:_
## Helm
-_Version:_ v3.1.2+gd878d4d
+_Version:_ v3.2.0+ge11b7ce
_Environment:_
* PATH: contains location of helm
@@ -36,15 +36,15 @@ _Version:_ 7.0.0
## Docker images
The following container images have been cached:
-* mcr.microsoft.com/dotnet/framework/aspnet:4.8-windowsservercore-ltsc2016 (Digest: sha256:7bf99ba791cce2c51091ac0c6922ff98e5a448c1046ba046fab3760070173e0d)
-* mcr.microsoft.com/dotnet/framework/runtime:4.8-windowsservercore-ltsc2016 (Digest: sha256:000d639c6c287bf0e69b27c008f2d411a9e161093dd1855667a8e6189f9adac8)
-* mcr.microsoft.com/windows/servercore:ltsc2016 (Digest: sha256:5bd97dbab1afe8d3200f5d5c974df3b0130e74e8a69fddcd427699c4c8cb5037)
+* mcr.microsoft.com/dotnet/framework/aspnet:4.8-windowsservercore-ltsc2016 (Digest: sha256:4610dbc0e9f033247b336ebf62b2c690dc9e93de5c937b4660aad52847123086)
+* mcr.microsoft.com/dotnet/framework/runtime:4.8-windowsservercore-ltsc2016 (Digest: sha256:888f36a9fa4ccd409967426f1a731ab6112a8acc36459268471fccd0e67e5326)
+* mcr.microsoft.com/windows/servercore:ltsc2016 (Digest: sha256:f4c4f31c7ee654e73bd130b89e6ad5a659f5ede52fd9eb653c9db4aa12f6e0ea)
* microsoft/aspnetcore-build:1.0-2.0 (Digest: sha256:9ecc7c5a8a7a11dca5f08c860165646cb30d084606360a3a72b9cbe447241c0c)
* mcr.microsoft.com/windows/nanoserver:10.0.14393.953 (Digest: sha256:fc60bd5ae0e61b334ce1cf1bcbf20c10c36b4c5482a01da319c9c989f9e6e268)
## Visual Studio 2017 Enterprise
-_Version:_ VisualStudio/15.9.21+28307.1064
+_Version:_ VisualStudio/15.9.22+28307.1093
_Location:_ C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise
The following workloads including required and recommended components are installed with Visual Studio 2017:
@@ -135,6 +135,8 @@ In addition the following optional components are installed:
* Microsoft.VisualStudio.Component.VC.Runtimes.x86.x64.Spectre
* Microsoft.VisualStudio.Component.VC.Runtimes.ARM.Spectre
* Microsoft.VisualStudio.Component.VC.Runtimes.ARM64.Spectre
+* Microsoft.VisualStudio.Workload.Office
+* Microsoft.VisualStudio.Workload.OfficeBuildTools
## SQL Server Data Tools for VS 2017
@@ -166,13 +168,17 @@ _WDK Visual Studio Extension Version:_ 10.0.17740.0
## Azure Service Fabric
-_SDK Version:_ 4.0.470.9590
-_Runtime Version:_ 7.0.470.9590
+_SDK Version:_ 4.1.409.9590
+_Runtime Version:_ 7.1.409.9590
## WinAppDriver
_Version:_ 1.1.1809.18001
+## AWS CLI
+
+_Version:_ aws-cli 2.0.9
+
## Android SDK Build Tools
#### 29.0.3
@@ -422,13 +428,17 @@ _Description:_ .NET has been configured to use TLS 1.2 by default
## Azure CLI
-_Version:_ 2.2.0
+_Version:_ 2.4.0
_Environment:_
* PATH: contains location of az.cmd
+## AWS SAM CLI
+
+_Version:_ 0.47.0
+
## Azure DevOps Cli extension
-_Version:_ azure-devops 0.17.0
+_Version:_ azure-devops 0.18.0
## Python
@@ -440,11 +450,11 @@ _Version:_ 2.7.13 (x86)
_Version:_ 3.6.9 (x86)
## Ruby
-_Version:_ 2.4.9 (x64)
_Version:_ 2.5.7 (x64)
_Version:_ 2.6.5 (x64)
_Version:_ 2.7.0 (x64)
__System default version:__ Ruby 2.5.7p206
_Environment:_
* Location: C:\hostedtoolcache\windows\Ruby\2.5.7\x64\bin
* PATH: contains the location of Ruby 2.5.7p206
* Gem Version: 2.7.6.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.2
## OpenSSL
-_Version:_ 1.1.1 at C:\Program Files\OpenSSL\bin\openssl.exe
_Version:_ 1.1.1d at C:\Strawberry\c\bin\openssl.exe
_Version:_ 1.1.1d at C:\Program Files\Git\mingw64\bin\openssl.exe
_Version:_ 1.1.1d at C:\Program Files\Git\usr\bin\openssl.exe
_Version:_ 1.0.2j at C:\Program Files (x86)\Subversion\bin\openssl.exe
+_Version:_ 1.1.1 at C:\Program Files\OpenSSL\bin\openssl.exe
_Version:_ 1.1.1d at C:\Strawberry\c\bin\openssl.exe
_Version:_ 1.1.1f at C:\Program Files\Git\mingw64\bin\openssl.exe
_Version:_ 1.1.1f at C:\Program Files\Git\usr\bin\openssl.exe
_Version:_ 1.0.2j at C:\Program Files (x86)\Subversion\bin\openssl.exe
## Perl
@@ -452,7 +462,7 @@ _Version:_ v5.30.2
## Git
-_Version:_ 2.25.1
+_Version:_ 2.26.2
_Environment:_
* PATH: contains location of git.exe
@@ -478,8 +488,8 @@ _Environment:_
#### 1.69.0 [msvc-14.1]
_Environment:_
-* PATH: contains the location of Boost version 1.69.0
-* BOOST_ROOT_1_69_0: root directory of the Boost version 1.69.0 installation
+* BOOST_ROOT_1_69_0: root directory of the Boost version 1.69.0 installation
+
#### 1.72.0 [msvc-14.1]
_Environment:_
@@ -498,24 +508,32 @@ See documentation of the Boost CMake package configuration for details on what i
Set `Boost_NO_BOOST_CMAKE to ON`, to disable the search for boost-cmake.
-## PHP (x64)
+## Composer
-#### 7.4.3
+#### Composer version 1.10.5 2020-04-10 11:44:22
_Environment:_
-* PATH: contains the location of php.exe version 7.4.3
-* PHPROOT: root directory of the PHP 7.4.3 installation
+* PATH: contains the location of composer.exe version Composer version 1.10.5 2020-04-10 11:44:22
+* PHPROOT: root directory of the Composer Composer version 1.10.5 2020-04-10 11:44:22 installation
+
+## PHP (x64)
+
+#### 7.4.5
+
+_Environment:_
+* PATH: contains the location of php.exe version 7.4.5
+* PHPROOT: root directory of the PHP 7.4.5 installation
## Rust (64-bit)
-#### 1.42.0
+#### 1.43.0
_Location:_ C:\Rust\.cargo\bin
_Environment:_
* PATH: contains the location of rustc.exe
## Julia (x64)
-_Version:_ 1.3.1
+_Version:_ 1.4.1
## sbt
@@ -530,17 +548,17 @@ _Environment:_
## Google Chrome
_version:_
-80.0.3987.149
+81.0.4044.122
## Microsoft Edge
_version:_
-80.0.361.69
+81.0.416.64
## Mozilla Firefox
_version:_
-74.0
+75.0
## Selenium Web Drivers
@@ -548,7 +566,7 @@ _version:_
#### Chrome Driver
_version:_
-80.0.3987.106
+81.0.4044.69
_Environment:_
* ChromeWebDriver: location of chromedriver.exe
@@ -572,7 +590,7 @@ _Environment:_
#### Microsoft Edge Driver
_version:_
-80.0.361.69
+81.0.416.64
_Environment:_
* EdgeWebDriver: location of msedgedriver.exe
@@ -580,7 +598,7 @@ _Environment:_
## Node.js
-_Version:_ 12.16.1
+_Version:_ 12.16.2
_Architecture:_ x64
_Environment:_
* PATH: contains location of node.exe
@@ -591,17 +609,21 @@ _Environment:_
## npm
-_Version:_ 6.13.4
+_Version:_ 6.14.4
_Environment:_
* PATH: contains location of npm.cmd
## bazel
-_Version:_ bazel 2.2.0
+_Version:_ bazel 3.1.0
## bazelisk
-_Version:_ 1.3.0
+_Version:_ 1.4.0
+
+## Alibaba Cloud CLI
+
+_Version:_ 3.0.26
## Java Development Kit
@@ -636,13 +658,13 @@ _Environment:_
## Gradle
-_Version:_ 6.2.2
+_Version:_ 6.3
_Environment:_
* PATH: contains location of gradle
-## Cmake
+## CMake
-_Version:_ 3.17.0
+_Version:_ 3.17.1
_Environment:_
* PATH: contains location of cmake.exe
@@ -659,6 +681,10 @@ _Environment:_
* PATH: contains location of dotnet.exe
_SDK:_
+* 3.1.201 C:\Program Files\dotnet\sdk\3.1.201
+* 3.1.200 C:\Program Files\dotnet\sdk\3.1.200
+* 3.1.103 C:\Program Files\dotnet\sdk\3.1.103
+* 3.1.102 C:\Program Files\dotnet\sdk\3.1.102
* 3.1.101 C:\Program Files\dotnet\sdk\3.1.101
* 3.1.100 C:\Program Files\dotnet\sdk\3.1.100
* 2.2.402 C:\Program Files\dotnet\sdk\2.2.402
@@ -682,12 +708,14 @@ _SDK:_
* 2.2.102 C:\Program Files\dotnet\sdk\2.2.102
* 2.2.101 C:\Program Files\dotnet\sdk\2.2.101
* 2.2.100 C:\Program Files\dotnet\sdk\2.2.100
+* 2.1.805 C:\Program Files\dotnet\sdk\2.1.805
* 2.1.804 C:\Program Files\dotnet\sdk\2.1.804
* 2.1.803 C:\Program Files\dotnet\sdk\2.1.803
* 2.1.802 C:\Program Files\dotnet\sdk\2.1.802
* 2.1.801 C:\Program Files\dotnet\sdk\2.1.801
* 2.1.701 C:\Program Files\dotnet\sdk\2.1.701
* 2.1.700 C:\Program Files\dotnet\sdk\2.1.700
+* 2.1.610 C:\Program Files\dotnet\sdk\2.1.610
* 2.1.609 C:\Program Files\dotnet\sdk\2.1.609
* 2.1.608 C:\Program Files\dotnet\sdk\2.1.608
* 2.1.607 C:\Program Files\dotnet\sdk\2.1.607
@@ -696,6 +724,7 @@ _SDK:_
* 2.1.604 C:\Program Files\dotnet\sdk\2.1.604
* 2.1.603 C:\Program Files\dotnet\sdk\2.1.603
* 2.1.602 C:\Program Files\dotnet\sdk\2.1.602
+* 2.1.513 C:\Program Files\dotnet\sdk\2.1.513
* 2.1.512 C:\Program Files\dotnet\sdk\2.1.512
* 2.1.511 C:\Program Files\dotnet\sdk\2.1.511
* 2.1.510 C:\Program Files\dotnet\sdk\2.1.510
@@ -718,6 +747,8 @@ _SDK:_
* 1.1.14 C:\Program Files\dotnet\sdk\1.1.14
_Runtime:_
+* 3.1.3 C:\Program Files\dotnet\shared\Microsoft.NETCore.App\3.1.3
+* 3.1.2 C:\Program Files\dotnet\shared\Microsoft.NETCore.App\3.1.2
* 3.1.1 C:\Program Files\dotnet\shared\Microsoft.NETCore.App\3.1.1
* 3.1.0 C:\Program Files\dotnet\shared\Microsoft.NETCore.App\3.1.0
* 2.2.8 C:\Program Files\dotnet\shared\Microsoft.NETCore.App\2.2.8
@@ -737,6 +768,7 @@ _Runtime:_
* 2.1.4 C:\Program Files\dotnet\shared\Microsoft.NETCore.App\2.1.4
* 2.1.3 C:\Program Files\dotnet\shared\Microsoft.NETCore.App\2.1.3
* 2.1.2 C:\Program Files\dotnet\shared\Microsoft.NETCore.App\2.1.2
+* 2.1.17 C:\Program Files\dotnet\shared\Microsoft.NETCore.App\2.1.17
* 2.1.16 C:\Program Files\dotnet\shared\Microsoft.NETCore.App\2.1.16
* 2.1.15 C:\Program Files\dotnet\shared\Microsoft.NETCore.App\2.1.15
* 2.1.14 C:\Program Files\dotnet\shared\Microsoft.NETCore.App\2.1.14
@@ -791,7 +823,7 @@ _Version:_ 19.00
## Packer
-_Version:_ 1.5.4
+_Version:_ 1.5.5
## Mercurial
@@ -813,9 +845,13 @@ _Version:_ 6.0.4
_Version:_ 5.2.4.0
+## Nullsoft Install System (NSIS)
+
+_Version:_ 3.5
+
## Cloud Foundry CLI
-_Version:_ 6.50.0
+_Version:_ 6.51.0
## Vcpkg
@@ -826,7 +862,7 @@ _Environment:_
## Kubectl
-_Version:_ Client Version: v1.17.1
+_Version:_ Client Version: v1.18.2
_Environment:_
* PATH: contains location of kubectl.exe
diff --git a/images/win/Windows2019-Azure.json b/images/win/Windows2019-Azure.json
index 1698c550..1b3e5f74 100644
--- a/images/win/Windows2019-Azure.json
+++ b/images/win/Windows2019-Azure.json
@@ -18,6 +18,7 @@
"run_scan_antivirus": "false",
"root_folder": "C:",
+ "toolset_json_path": "{{env `TEMP`}}\\toolset.json",
"image_folder": "C:\\image",
"commit_file": "C:\\image\\commit.txt",
"imagedata_file": "C:\\imagedata.json",
@@ -291,6 +292,11 @@
"source": "{{template_dir}}/toolcache-2019.json",
"destination": "{{user `root_folder`}}/toolcache.json"
},
+ {
+ "type": "file",
+ "source": "{{template_dir}}/toolset-2019.json",
+ "destination": "{{user `toolset_json_path`}}"
+ },
{
"type": "powershell",
"environment_vars":[
@@ -301,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-Toolset.ps1"
+ ]
+ },
{
"type": "powershell",
"scripts":[
@@ -433,6 +448,12 @@
"{{ template_dir }}/scripts/Installers/Install-AWS.ps1"
]
},
+ {
+ "type": "powershell",
+ "scripts":[
+ "{{ template_dir }}/scripts/Installers/Install-AWS-SAM.ps1"
+ ]
+ },
{
"type": "powershell",
"scripts":[
@@ -451,14 +472,6 @@
"{{ template_dir }}/scripts/Installers/Install-MysqlCli.ps1"
]
},
- {
- "type": "powershell",
- "elevated_user": "SYSTEM",
- "elevated_password": "",
- "scripts":[
- "{{ template_dir }}/scripts/Installers/Install-SQLExpress.ps1"
- ]
- },
{
"type": "powershell",
"scripts":[
@@ -586,6 +599,12 @@
"{{ template_dir }}/scripts/Installers/Install-Bazel.ps1"
]
},
+ {
+ "type": "powershell",
+ "scripts":[
+ "{{ template_dir }}/scripts/Installers/Install-AliyunCli.ps1"
+ ]
+ },
{
"type": "powershell",
"scripts":[
@@ -614,6 +633,12 @@
"{{ template_dir }}/scripts/Installers/Validate-AzureCli.ps1"
]
},
+ {
+ "type": "powershell",
+ "scripts":[
+ "{{ template_dir }}/scripts/Installers/Validate-AWS-SAM.ps1"
+ ]
+ },
{
"type": "powershell",
"scripts":[
@@ -629,6 +654,15 @@
"{{ template_dir }}/scripts/Installers/Validate-ToolCache.ps1"
]
},
+ {
+ "type": "powershell",
+ "environment_vars":[
+ "TOOLSET_JSON_PATH={{user `toolset_json_path`}}"
+ ],
+ "scripts":[
+ "{{ template_dir }}/scripts/Installers/Validate-Toolset.ps1"
+ ]
+ },
{
"type": "powershell",
"scripts":[
@@ -756,12 +790,6 @@
"{{ template_dir }}/scripts/Installers/Validate-MysqlCli.ps1"
]
},
- {
- "type": "powershell",
- "scripts":[
- "{{ template_dir }}/scripts/Installers/Validate-SQLExpress.ps1"
- ]
- },
{
"type": "powershell",
"scripts":[
@@ -876,6 +904,18 @@
"{{ template_dir }}/scripts/Installers/Validate-Bazel.ps1"
]
},
+ {
+ "type": "powershell",
+ "scripts":[
+ "{{ template_dir }}/scripts/Installers/Validate-AliyunCli.ps1"
+ ]
+ },
+ {
+ "type": "powershell",
+ "scripts":[
+ "{{ template_dir }}/scripts/Installers/Validate-DiskSpace.ps1"
+ ]
+ },
{
"type": "file",
"source": "C:\\InstalledSoftware.md",
diff --git a/images/win/Windows2019-Readme.md b/images/win/Windows2019-Readme.md
index cd716b6e..bee43de2 100644
--- a/images/win/Windows2019-Readme.md
+++ b/images/win/Windows2019-Readme.md
@@ -1,6 +1,6 @@
# Windows Server 2019
-The following software is installed on machines with the 20200319.1 update.
+The following software is installed on machines with the 20200426.1 update.
Components marked with **\*** have been upgraded since the previous version of the image.
@@ -25,7 +25,7 @@ _Environment:_
## Helm
-_Version:_ v3.1.2+gd878d4d
+_Version:_ v3.2.0+ge11b7ce
_Environment:_
* PATH: contains location of helm
@@ -36,15 +36,15 @@ _Version:_ 7.0.0
## Docker images
The following container images have been cached:
-* mcr.microsoft.com/dotnet/framework/aspnet:4.8-windowsservercore-ltsc2019 (Digest: sha256:24ffd5fad1becaf9b16f42ec6f40c90ddf56664986a87212d2d48164e3bb52ba)
-* mcr.microsoft.com/dotnet/framework/runtime:4.8-windowsservercore-ltsc2019 (Digest: sha256:ceaf6f000f0a0677510a5511f089071c2822dd40f34a77ca0280f96b10621858)
-* mcr.microsoft.com/windows/servercore:ltsc2019 (Digest: sha256:8dcc65367c900f06ad386da6a1e25d578232f7b15981092986ade2f2fd9468b8)
-* mcr.microsoft.com/windows/nanoserver:1809 (Digest: sha256:5de6bd32bd453d60c8f549d28845552e89ad3652566e141ac82023b6ba10374d)
+* mcr.microsoft.com/dotnet/framework/aspnet:4.8-windowsservercore-ltsc2019 (Digest: sha256:8d2ffe560c2e25ac85080aed33ac7a010584db157e49255c2a7d2405f78017b7)
+* mcr.microsoft.com/dotnet/framework/runtime:4.8-windowsservercore-ltsc2019 (Digest: sha256:fd6801e45c7899858a1ffe7e89e29b9a012704af34350ad94abbd82b6e5ddb88)
+* mcr.microsoft.com/windows/servercore:ltsc2019 (Digest: sha256:2ecf1e2987b91b41f576afd7f56aa40c9ddbc691d7b6b066c64d8f27fb3070ca)
+* mcr.microsoft.com/windows/nanoserver:1809 (Digest: sha256:28805a307e17836a84a6af231f8516110839e4840e4ab41c7d286a0ca5627ea1)
* microsoft/aspnetcore-build:1.0-2.0 (Digest: sha256:9ecc7c5a8a7a11dca5f08c860165646cb30d084606360a3a72b9cbe447241c0c)
## Visual Studio 2019 Enterprise
-_Version:_ VisualStudio/16.5.0+29911.84
+_Version:_ VisualStudio/16.5.4+30011.22
_Location:_ C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise
The following workloads and components are installed with Visual Studio 2019:
@@ -108,6 +108,7 @@ The following workloads and components are installed with Visual Studio 2019:
* Microsoft.VisualStudio.Component.VC.v141.MFC.ARM.Spectre
* Microsoft.VisualStudio.Component.VC.v141.MFC.ARM64.Spectre
* Microsoft.VisualStudio.Component.VC.v141.MFC.Spectre
+* Microsoft.VisualStudio.Component.Windows10SDK.14393
* Microsoft.VisualStudio.Component.Windows10SDK.16299
* Microsoft.VisualStudio.Component.Windows10SDK.17134
* Microsoft.VisualStudio.Component.Windows10SDK.17763
@@ -144,9 +145,9 @@ _Environment:_
## Microsoft SSDT Visual Studio 2019 Extensions
-_Microsoft Analysis Services Projects Version:_ 2.9.6
-_SQL Server Integration Services Projects Version:_ 3.5
-_Microsoft Reporting Services Projects Version:_ 2.6.3
+_Microsoft Analysis Services Projects Version:_ 2.9.8
+_SQL Server Integration Services Projects Version:_ 3.6
+_Microsoft Reporting Services Projects Version:_ 2.6.5
## .NET 4.8
@@ -160,13 +161,17 @@ _WDK Visual Studio Extension Version:_ 10.0.18346.0
## Azure Service Fabric
-_SDK Version:_ 4.0.470.9590
-_Runtime Version:_ 7.0.470.9590
+_SDK Version:_ 4.1.409.9590
+_Runtime Version:_ 7.1.409.9590
## WinAppDriver
_Version:_ 1.1.1809.18001
+## AWS CLI
+
+_Version:_ aws-cli 2.0.9
+
## Android SDK Build Tools
#### 29.0.3
@@ -416,13 +421,17 @@ _Description:_ .NET has been configured to use TLS 1.2 by default
## Azure CLI
-_Version:_ 2.2.0
+_Version:_ 2.4.0
_Environment:_
* PATH: contains location of az.cmd
+## AWS SAM CLI
+
+_Version:_ 0.47.0
+
## Azure DevOps Cli extension
-_Version:_ azure-devops 0.17.0
+_Version:_ azure-devops 0.18.0
## Python
@@ -434,11 +443,11 @@ _Version:_ 2.7.13 (x86)
_Version:_ 3.6.9 (x86)
## Ruby
-_Version:_ 2.4.9 (x64)
_Version:_ 2.5.7 (x64)
_Version:_ 2.6.5 (x64)
_Version:_ 2.7.0 (x64)
__System default version:__ Ruby 2.5.7p206
_Environment:_
* Location: C:\hostedtoolcache\windows\Ruby\2.5.7\x64\bin
* PATH: contains the location of Ruby 2.5.7p206
* Gem Version: 2.7.6.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.2
## OpenSSL
-_Version:_ 1.1.1 at C:\Program Files\OpenSSL\bin\openssl.exe
_Version:_ 1.1.1d at C:\Strawberry\c\bin\openssl.exe
_Version:_ 1.1.1d at C:\Program Files\Git\mingw64\bin\openssl.exe
_Version:_ 1.1.1d at C:\Program Files\Git\usr\bin\openssl.exe
_Version:_ 1.0.2j at C:\Program Files (x86)\Subversion\bin\openssl.exe
+_Version:_ 1.1.1 at C:\Program Files\OpenSSL\bin\openssl.exe
_Version:_ 1.1.1d at C:\Strawberry\c\bin\openssl.exe
_Version:_ 1.1.1f at C:\Program Files\Git\mingw64\bin\openssl.exe
_Version:_ 1.1.1f at C:\Program Files\Git\usr\bin\openssl.exe
_Version:_ 1.0.2j at C:\Program Files (x86)\Subversion\bin\openssl.exe
## Perl
@@ -446,7 +455,7 @@ _Version:_ v5.30.2
## Git
-_Version:_ 2.25.1
+_Version:_ 2.26.2
_Environment:_
* PATH: contains location of git.exe
@@ -465,12 +474,6 @@ _Environment:_
## Go (x64)
-#### 1.14
-
-_Environment:_
-* PATH: contains the location of go.exe version 1.14
-* GOROOT: root directory of the Go 1.14 installation
-* GOROOT_1_14_X64: root directory of the Go 1.14 installation
## Boost
@@ -483,8 +486,8 @@ _Environment:_
#### 1.72.0 [msvc-14.2]
_Environment:_
-* PATH: contains the location of Boost version 1.72.0
-* BOOST_ROOT_1_72_0: root directory of the Boost version 1.72.0 installation
+* BOOST_ROOT_1_72_0: root directory of the Boost version 1.72.0 installation
+
#### _Notes:_
Link: https://cmake.org/cmake/help/latest/module/FindBoost.html
@@ -498,24 +501,32 @@ See documentation of the Boost CMake package configuration for details on what i
Set `Boost_NO_BOOST_CMAKE to ON`, to disable the search for boost-cmake.
-## PHP (x64)
+## Composer
-#### 7.4.3
+#### Composer version 1.10.5 2020-04-10 11:44:22
_Environment:_
-* PATH: contains the location of php.exe version 7.4.3
-* PHPROOT: root directory of the PHP 7.4.3 installation
+* PATH: contains the location of composer.exe version Composer version 1.10.5 2020-04-10 11:44:22
+* PHPROOT: root directory of the Composer Composer version 1.10.5 2020-04-10 11:44:22 installation
+
+## PHP (x64)
+
+#### 7.4.5
+
+_Environment:_
+* PATH: contains the location of php.exe version 7.4.5
+* PHPROOT: root directory of the PHP 7.4.5 installation
## Rust (64-bit)
-#### 1.42.0
+#### 1.43.0
_Location:_ C:\Rust\.cargo\bin
_Environment:_
* PATH: contains the location of rustc.exe
## Julia (x64)
-_Version:_ 1.3.1
+_Version:_ 1.4.1
## Subversion
@@ -530,17 +541,17 @@ _Environment:_
## Google Chrome
_version:_
-80.0.3987.149
+81.0.4044.122
## Microsoft Edge
_version:_
-80.0.361.66
+81.0.416.64
## Mozilla Firefox
_version:_
-74.0
+75.0
## Selenium Web Drivers
@@ -548,7 +559,7 @@ _version:_
#### Chrome Driver
_version:_
-80.0.3987.106
+81.0.4044.69
_Environment:_
* ChromeWebDriver: location of chromedriver.exe
@@ -572,7 +583,7 @@ _Environment:_
#### Microsoft Edge Driver
_version:_
-80.0.361.66
+81.0.416.64
_Environment:_
* EdgeWebDriver: location of msedgedriver.exe
@@ -580,7 +591,7 @@ _Environment:_
## Node.js
-_Version:_ 12.16.1
+_Version:_ 12.16.2
_Architecture:_ x64
_Environment:_
* PATH: contains location of node.exe
@@ -591,7 +602,7 @@ _Environment:_
## npm
-_Version:_ 6.13.4
+_Version:_ 6.14.4
_Environment:_
* PATH: contains location of npm.cmd
@@ -628,13 +639,13 @@ _Environment:_
## Gradle
-_Version:_ 6.2.2
+_Version:_ 6.3
_Environment:_
* PATH: contains location of gradle
-## Cmake
+## CMake
-_Version:_ 3.16.5
+_Version:_ 3.17.1
_Environment:_
* PATH: contains location of cmake.exe
@@ -651,7 +662,10 @@ _Environment:_
* PATH: contains location of dotnet.exe
_SDK:_
+* 3.1.201 C:\Program Files\dotnet\sdk\3.1.201
* 3.1.200 C:\Program Files\dotnet\sdk\3.1.200
+* 3.1.103 C:\Program Files\dotnet\sdk\3.1.103
+* 3.1.102 C:\Program Files\dotnet\sdk\3.1.102
* 3.1.101 C:\Program Files\dotnet\sdk\3.1.101
* 3.1.100 C:\Program Files\dotnet\sdk\3.1.100
* 2.2.402 C:\Program Files\dotnet\sdk\2.2.402
@@ -675,12 +689,14 @@ _SDK:_
* 2.2.102 C:\Program Files\dotnet\sdk\2.2.102
* 2.2.101 C:\Program Files\dotnet\sdk\2.2.101
* 2.2.100 C:\Program Files\dotnet\sdk\2.2.100
+* 2.1.805 C:\Program Files\dotnet\sdk\2.1.805
* 2.1.804 C:\Program Files\dotnet\sdk\2.1.804
* 2.1.803 C:\Program Files\dotnet\sdk\2.1.803
* 2.1.802 C:\Program Files\dotnet\sdk\2.1.802
* 2.1.801 C:\Program Files\dotnet\sdk\2.1.801
* 2.1.701 C:\Program Files\dotnet\sdk\2.1.701
* 2.1.700 C:\Program Files\dotnet\sdk\2.1.700
+* 2.1.610 C:\Program Files\dotnet\sdk\2.1.610
* 2.1.609 C:\Program Files\dotnet\sdk\2.1.609
* 2.1.608 C:\Program Files\dotnet\sdk\2.1.608
* 2.1.607 C:\Program Files\dotnet\sdk\2.1.607
@@ -689,6 +705,7 @@ _SDK:_
* 2.1.604 C:\Program Files\dotnet\sdk\2.1.604
* 2.1.603 C:\Program Files\dotnet\sdk\2.1.603
* 2.1.602 C:\Program Files\dotnet\sdk\2.1.602
+* 2.1.513 C:\Program Files\dotnet\sdk\2.1.513
* 2.1.512 C:\Program Files\dotnet\sdk\2.1.512
* 2.1.511 C:\Program Files\dotnet\sdk\2.1.511
* 2.1.510 C:\Program Files\dotnet\sdk\2.1.510
@@ -709,6 +726,7 @@ _SDK:_
* 2.1.300 C:\Program Files\dotnet\sdk\2.1.300
_Runtime:_
+* 3.1.3 C:\Program Files\dotnet\shared\Microsoft.NETCore.App\3.1.3
* 3.1.2 C:\Program Files\dotnet\shared\Microsoft.NETCore.App\3.1.2
* 3.1.1 C:\Program Files\dotnet\shared\Microsoft.NETCore.App\3.1.1
* 3.1.0 C:\Program Files\dotnet\shared\Microsoft.NETCore.App\3.1.0
@@ -729,6 +747,7 @@ _Runtime:_
* 2.1.4 C:\Program Files\dotnet\shared\Microsoft.NETCore.App\2.1.4
* 2.1.3 C:\Program Files\dotnet\shared\Microsoft.NETCore.App\2.1.3
* 2.1.2 C:\Program Files\dotnet\shared\Microsoft.NETCore.App\2.1.2
+* 2.1.17 C:\Program Files\dotnet\shared\Microsoft.NETCore.App\2.1.17
* 2.1.16 C:\Program Files\dotnet\shared\Microsoft.NETCore.App\2.1.16
* 2.1.15 C:\Program Files\dotnet\shared\Microsoft.NETCore.App\2.1.15
* 2.1.14 C:\Program Files\dotnet\shared\Microsoft.NETCore.App\2.1.14
@@ -751,7 +770,7 @@ _Version:_ 1.0
## SQLServer PS
-_Version:_ 21.1.18218
+_Version:_ 21.1.18221
## MinGW
@@ -780,7 +799,7 @@ _Version:_ 19.00
## Packer
-_Version:_ 1.5.4
+_Version:_ 1.5.5
## Mercurial
@@ -802,9 +821,13 @@ _Version:_ 6.0.4
_Version:_ 5.2.4.0
+## Nullsoft Install System (NSIS)
+
+_Version:_ 3.5
+
## Cloud Foundry CLI
-_Version:_ 6.50.0
+_Version:_ 6.51.0
## Vcpkg
@@ -820,7 +843,7 @@ _Version_: 2.8.4+ff0de50053 - shim 0.8.1
## Kubectl
-_Version:_ Client Version: v1.17.1
+_Version:_ Client Version: v1.18.2
_Environment:_
* PATH: contains location of kubectl.exe
@@ -832,8 +855,12 @@ _Environment:_
## bazel
-_Version:_ bazel 2.2.0
+_Version:_ bazel 3.1.0
## bazelisk
-_Version:_ 1.3.0
+_Version:_ 1.4.0
+
+## Alibaba Cloud CLI
+
+_Version:_ 3.0.26
diff --git a/images/win/scripts/ImageHelpers/ChocoHelpers.ps1 b/images/win/scripts/ImageHelpers/ChocoHelpers.ps1
new file mode 100644
index 00000000..ee1f3912
--- /dev/null
+++ b/images/win/scripts/ImageHelpers/ChocoHelpers.ps1
@@ -0,0 +1,32 @@
+function Choco-Install {
+ [CmdletBinding()]
+ param(
+ [Parameter(Mandatory)]
+ [string] $PackageName,
+ [string[]] $ArgumentList,
+ [int] $RetryCount = 5
+ )
+
+ process {
+ $count = 1
+ while($true)
+ {
+ Write-Host "Running [#$count]: choco install $packageName -y $argumentList"
+ choco install $packageName -y @argumentList
+
+ $pkg = choco list --localonly $packageName --exact --all --limitoutput
+ if ($pkg) {
+ Write-Host "Package installed: $pkg"
+ break
+ }
+ else {
+ $count++
+ if ($count -ge $retryCount) {
+ Write-Host "Could not install $packageName after $count attempts"
+ exit 1
+ }
+ Start-Sleep -Seconds 30
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/images/win/scripts/ImageHelpers/ImageHelpers.psm1 b/images/win/scripts/ImageHelpers/ImageHelpers.psm1
index c40b1098..2b716880 100644
--- a/images/win/scripts/ImageHelpers/ImageHelpers.psm1
+++ b/images/win/scripts/ImageHelpers/ImageHelpers.psm1
@@ -4,6 +4,7 @@ param()
. $PSScriptRoot\PathHelpers.ps1
. $PSScriptRoot\InstallHelpers.ps1
. $PSScriptRoot\MarkdownHelpers.ps1
+. $PSScriptRoot\ChocoHelpers.ps1
Export-ModuleMember -Function @(
'Test-MachinePath'
@@ -12,9 +13,9 @@ Export-ModuleMember -Function @(
'Add-MachinePathItem'
'Get-SystemVariable'
'Set-SystemVariable'
- 'Install-MSI'
- 'Install-EXE'
+ 'Install-Binary'
'Get-ToolcachePackages'
+ 'Get-ToolsetContent'
'Get-ToolsByName'
'Add-ContentToMarkdown'
'Add-SoftwareDetailsToMarkdown'
@@ -26,4 +27,5 @@ Export-ModuleMember -Function @(
'Get-WinVersion'
'Test-IsWin19'
'Test-IsWin16'
+ 'Choco-Install'
)
diff --git a/images/win/scripts/ImageHelpers/InstallHelpers.ps1 b/images/win/scripts/ImageHelpers/InstallHelpers.ps1
index a016e5fd..c8d70c8b 100644
--- a/images/win/scripts/ImageHelpers/InstallHelpers.ps1
+++ b/images/win/scripts/ImageHelpers/InstallHelpers.ps1
@@ -1,162 +1,151 @@
-function Install-MSI
+function Install-Binary
{
- Param
- (
- [String]$MsiUrl,
- [String]$MsiName
+ <#
+ .SYNOPSIS
+ A helper function to install executables.
+
+ .DESCRIPTION
+ Download and install .exe or .msi binaries from specified URL.
+
+ .PARAMETER Url
+ The URL from which the binary will be downloaded. Required parameter.
+
+ .PARAMETER Name
+ The Name with which binary will be downloaded. Required parameter.
+
+ .PARAMETER ArgumentList
+ The list of arguments that will be passed to the installer. Required for .exe binaries.
+
+ .EXAMPLE
+ Install-Binary -Url "https://go.microsoft.com/fwlink/p/?linkid=2083338" -Name "winsdksetup.exe" -ArgumentList ("/features", "+", "/quiet")
+ #>
+
+ Param (
+ [Parameter(Mandatory)]
+ [String] $Url,
+ [Parameter(Mandatory)]
+ [String] $Name,
+ [String[]] $ArgumentList
)
- $exitCode = -1
+ Write-Host "Downloading $Name..."
+ $filePath = Start-DownloadWithRetry -Url $Url -Name $Name
+
+ # MSI binaries should be installed via msiexec.exe
+ $fileExtension = ([System.IO.Path]::GetExtension($Name)).Replace(".", "")
+ if ($fileExtension -eq "msi")
+ {
+ $ArgumentList = ('/i', $filePath, '/QN', '/norestart')
+ $filePath = "msiexec.exe"
+ }
try
{
- Write-Host "Downloading $MsiName..."
- $FilePath = "${env:Temp}\$MsiName"
+ Write-Host "Starting Install $Name..."
+ $process = Start-Process -FilePath $filePath -ArgumentList $ArgumentList -Wait -PassThru
- Invoke-WebRequest -Uri $MsiUrl -OutFile $FilePath
-
- $Arguments = ('/i', $FilePath, '/QN', '/norestart' )
-
- Write-Host "Starting Install $MsiName..."
- $process = Start-Process -FilePath msiexec.exe -ArgumentList $Arguments -Wait -PassThru
$exitCode = $process.ExitCode
-
if ($exitCode -eq 0 -or $exitCode -eq 3010)
{
- Write-Host -Object 'Installation successful'
- return $exitCode
+ Write-Host "Installation successful"
}
else
{
- Write-Host -Object "Non zero exit code returned by the installation process : $exitCode."
+ Write-Host "Non zero exit code returned by the installation process: $exitCode"
exit $exitCode
}
}
catch
{
- Write-Host -Object "Failed to install the MSI $MsiName"
- Write-Host -Object $_.Exception.Message
- exit -1
- }
-}
-
-
-function Install-EXE
-{
- Param
- (
- [String]$Url,
- [String]$Name,
- [String[]]$ArgumentList
- )
-
- $exitCode = -1
-
- try
- {
- Write-Host "Downloading $Name..."
- $FilePath = "${env:Temp}\$Name"
-
- Invoke-WebRequest -Uri $Url -OutFile $FilePath
-
- Write-Host "Starting Install $Name..."
- $process = Start-Process -FilePath $FilePath -ArgumentList $ArgumentList -Wait -PassThru
- $exitCode = $process.ExitCode
-
- if ($exitCode -eq 0 -or $exitCode -eq 3010)
- {
- Write-Host -Object 'Installation successful'
- return $exitCode
- }
- else
- {
- Write-Host -Object "Non zero exit code returned by the installation process : $exitCode."
- return $exitCode
- }
- }
- catch
- {
- Write-Host -Object "Failed to install the Executable $Name"
- Write-Host -Object $_.Exception.Message
- return -1
+ Write-Host "Failed to install the $fileExtension ${Name}: $($_.Exception.Message)"
+ exit 1
}
}
function Stop-SvcWithErrHandling
-<#
-.DESCRIPTION
-Function for stopping the Windows Service with error handling
-
-.AUTHOR
-Andrey Mishechkin v-andmis@microsoft.com
-
-.PARAMETER -ServiceName
-The name of stopping service
-
-.PARAMETER -StopOnError
-Switch for stopping the script and exit from PowerShell if one service is absent
-#>
{
+ <#
+ .DESCRIPTION
+ Function for stopping the Windows Service with error handling
+
+ .PARAMETER ServiceName
+ The name of stopping service
+
+ .PARAMETER StopOnError
+ Switch for stopping the script and exit from PowerShell if one service is absent
+ #>
param (
- [Parameter(Mandatory, ValueFromPipeLine = $true)] [string] $ServiceName,
- [Parameter()] [switch] $StopOnError
+ [Parameter(Mandatory, ValueFromPipeLine = $true)]
+ [string] $ServiceName,
+ [switch] $StopOnError
)
- Process {
- $Service = Get-Service $ServiceName -ErrorAction SilentlyContinue
- if (-not $Service) {
- Write-Warning "[!] Service [$ServiceName] is not found";
- if ($StopOnError) {
- exit 1;
+ Process
+ {
+ $service = Get-Service $ServiceName -ErrorAction SilentlyContinue
+ if (-not $service)
+ {
+ Write-Warning "[!] Service [$ServiceName] is not found"
+ if ($StopOnError)
+ {
+ exit 1
}
+
}
- else {
- Write-Host "Try to stop service [$ServiceName]";
- try {
- Stop-Service -Name $ServiceName -Force;
- $Service.WaitForStatus("Stopped", "00:01:00");
- Write-Host "Service [$ServiceName] has been stopped successfuly";
+ else
+ {
+ Write-Host "Try to stop service [$ServiceName]"
+ try
+ {
+ Stop-Service -Name $ServiceName -Force
+ $service.WaitForStatus("Stopped", "00:01:00")
+ Write-Host "Service [$ServiceName] has been stopped successfuly"
}
- catch {
+ catch
+ {
Write-Error "[!] Failed to stop service [$ServiceName] with error:"
- $_ | Out-String | Write-Error;
+ $_ | Out-String | Write-Error
}
}
}
}
function Set-SvcWithErrHandling
-<#
-.DESCRIPTION
-Function for setting the Windows Service parameter with error handling
-
-.AUTHOR
-Andrey Mishechkin v-andmis@microsoft.com
-
-.PARAMETER -ServiceName
-The name of stopping service
-
-.PARAMETER -Arguments
-Hashtable for service arguments
-#>
{
+ <#
+ .DESCRIPTION
+ Function for setting the Windows Service parameter with error handling
+
+ .PARAMETER ServiceName
+ The name of stopping service
+
+ .PARAMETER Arguments
+ Hashtable for service arguments
+ #>
param (
- [Parameter(Mandatory, ValueFromPipeLine = $true)] [string] $ServiceName,
- [Parameter(Mandatory)] [hashtable] $Arguments
+ [Parameter(Mandatory, ValueFromPipeLine = $true)]
+ [string] $ServiceName,
+ [Parameter(Mandatory)]
+ [hashtable] $Arguments
)
- Process {
- $Service = Get-Service $ServiceName -ErrorAction SilentlyContinue
- if (-not $Service) {
- Write-Warning "[!] Service [$ServiceName] is not found";
+ Process
+ {
+ $service = Get-Service $ServiceName -ErrorAction SilentlyContinue
+ if (-not $service)
+ {
+ Write-Warning "[!] Service [$ServiceName] is not found"
+ }
+
+ try
+ {
+ Set-Service $serviceName @Arguments
}
- try {
- Set-Service $ServiceName @Arguments;
- }
- catch {
+ catch
+ {
Write-Error "[!] Failed to set service [$ServiceName] arguments with error:"
- $_ | Out-String | Write-Error;
+ $_ | Out-String | Write-Error
}
}
}
@@ -172,36 +161,36 @@ function Start-DownloadWithRetry
[int] $Retries = 20
)
- $FilePath = Join-Path -Path $DownloadPath -ChildPath $Name
+ $filePath = Join-Path -Path $DownloadPath -ChildPath $Name
+
#Default retry logic for the package.
- while ($retries -gt 0)
+ while ($Retries -gt 0)
{
try
{
- Write-Host "Downloading package from: $Url to path $FilePath ."
- (New-Object System.Net.WebClient).DownloadFile($Url, $FilePath)
+ Write-Host "Downloading package from: $Url to path $filePath ."
+ (New-Object System.Net.WebClient).DownloadFile($Url, $filePath)
break
}
catch
{
Write-Host "There is an error during package downloading:`n $_"
- $retries--
+ $Retries--
- if ($retries -eq 0)
+ if ($Retries -eq 0)
{
Write-Host "File can't be downloaded. Please try later or check that file exists by url: $Url"
exit 1
}
- Write-Host "Waiting 30 seconds before retrying. Retries left: $retries"
+ Write-Host "Waiting 30 seconds before retrying. Retries left: $Retries"
Start-Sleep -Seconds 30
}
}
- return $FilePath
+ return $filePath
}
-
function Install-VsixExtension
{
Param
@@ -216,12 +205,12 @@ function Install-VsixExtension
[switch] $InstallOnly
)
- if (!$InstallOnly)
- {
- $FilePath = Start-DownloadWithRetry -Url $Url -Name $Name
- }
+ if (-not $InstallOnly)
+ {
+ $FilePath = Start-DownloadWithRetry -Url $Url -Name $Name
+ }
- $ArgumentList = ('/quiet', "`"$FilePath`"")
+ $argumentList = ('/quiet', "`"$FilePath`"")
Write-Host "Starting Install $Name..."
try
@@ -229,7 +218,7 @@ function Install-VsixExtension
#There are 2 types of packages at the moment - exe and vsix
if ($Name -match "vsix")
{
- $process = Start-Process -FilePath "C:\Program Files (x86)\Microsoft Visual Studio\$VSversion\Enterprise\Common7\IDE\VSIXInstaller.exe" -ArgumentList $ArgumentList -Wait -PassThru
+ $process = Start-Process -FilePath "C:\Program Files (x86)\Microsoft Visual Studio\$VSversion\Enterprise\Common7\IDE\VSIXInstaller.exe" -ArgumentList $argumentList -Wait -PassThru
}
else
{
@@ -256,20 +245,20 @@ function Install-VsixExtension
}
#Cleanup downloaded installation files
- if (!$InstallOnly)
- {
- Remove-Item -Force -Confirm:$false $FilePath
- }
+ if (-not $InstallOnly)
+ {
+ Remove-Item -Force -Confirm:$false $FilePath
+ }
}
function Get-VSExtensionVersion
{
param (
- [string] [Parameter(Mandatory=$true)] $packageName
+ [Parameter(Mandatory=$true)]
+ [string] $packageName
)
$instanceFolders = Get-ChildItem -Path "C:\ProgramData\Microsoft\VisualStudio\Packages\_Instances"
-
if ($instanceFolders -is [array])
{
Write-Host "More than one instance installed"
@@ -280,7 +269,7 @@ function Get-VSExtensionVersion
$state = $stateContent | ConvertFrom-Json
$packageVersion = ($state.packages | Where-Object { $_.id -eq $packageName }).version
- if (!$packageVersion)
+ if (-not $packageVersion)
{
Write-Host "installed package $packageName for Visual Studio 2019 was not found"
exit 1
@@ -289,12 +278,16 @@ function Get-VSExtensionVersion
return $packageVersion
}
-
function Get-ToolcachePackages {
$toolcachePath = Join-Path $env:ROOT_FOLDER "toolcache.json"
Get-Content -Raw $toolcachePath | ConvertFrom-Json
}
+function Get-ToolsetContent {
+ $toolsetJson = Get-Content -Path $env:TOOLSET_JSON_PATH -Raw
+ ConvertFrom-Json -InputObject $toolsetJson
+}
+
function Get-ToolsByName {
param (
[Parameter(Mandatory = $True)]
diff --git a/images/win/scripts/ImageHelpers/MarkdownHelpers.ps1 b/images/win/scripts/ImageHelpers/MarkdownHelpers.ps1
index da5d53e2..49becbc9 100644
--- a/images/win/scripts/ImageHelpers/MarkdownHelpers.ps1
+++ b/images/win/scripts/ImageHelpers/MarkdownHelpers.ps1
@@ -1,5 +1,5 @@
function Add-ContentToMarkdown {
- [CmdletBinding()]
+
param(
$Content = ""
)
diff --git a/images/win/scripts/Installers/Download-ToolCache.ps1 b/images/win/scripts/Installers/Download-ToolCache.ps1
index cc42e97e..6c93e380 100644
--- a/images/win/scripts/Installers/Download-ToolCache.ps1
+++ b/images/win/scripts/Installers/Download-ToolCache.ps1
@@ -44,21 +44,6 @@ Function NPMFeed-AuthSetup {
$npmrcContent | Out-File -FilePath "$($env:TEMP)/.npmrc" -Encoding utf8
}
-Function Set-DefaultPythonVersion {
- param(
- [Parameter(Mandatory=$true)]
- [System.Version] $Version,
- [System.String] $Arch = "x64"
- )
-
- $pythonPath = $Env:AGENT_TOOLSDIRECTORY + "/Python/${Version}*/${Arch}"
- $pythonDir = Get-Item -Path $pythonPath
-
- Write-Host "Use Python ${Version} as a system Python"
- Add-MachinePathItem -PathItem $pythonDir.FullName
- Add-MachinePathItem -PathItem "$($pythonDir.FullName)\Scripts"
-}
-
Function Set-DefaultRubyVersion {
param(
[Parameter(Mandatory=$true)]
@@ -71,8 +56,10 @@ Function Set-DefaultRubyVersion {
Write-Host "Use Ruby ${Version} as a system Ruby"
Add-MachinePathItem -PathItem $rubyDir.FullName
+ $env:Path = Get-MachinePath
+
# Update ruby gem to latest version
- gem update --system
+ Invoke-Expression "gem update --system"
}
Import-Module -Name ImageHelpers -Force
@@ -104,5 +91,4 @@ $ToolVersions.PSObject.Properties | ForEach-Object {
}
}
-Set-DefaultPythonVersion -Version "3.7"
Set-DefaultRubyVersion -Version "2.5"
\ No newline at end of file
diff --git a/images/win/scripts/Installers/Install-7zip.ps1 b/images/win/scripts/Installers/Install-7zip.ps1
index 4e86ad3c..419c8178 100644
--- a/images/win/scripts/Installers/Install-7zip.ps1
+++ b/images/win/scripts/Installers/Install-7zip.ps1
@@ -3,4 +3,4 @@
## Desc: Install 7zip
################################################################################
-choco install 7zip.install -y
+Choco-Install -PackageName 7zip.install
diff --git a/images/win/scripts/Installers/Install-AWS-SAM.ps1 b/images/win/scripts/Installers/Install-AWS-SAM.ps1
new file mode 100644
index 00000000..43469901
--- /dev/null
+++ b/images/win/scripts/Installers/Install-AWS-SAM.ps1
@@ -0,0 +1,7 @@
+################################################################################
+## File: Install-AWS-SAM.ps1
+## Desc: Install aws sam cli
+## https://aws.amazon.com/serverless/sam/
+################################################################################
+
+Install-Binary -Url "https://github.com/awslabs/aws-sam-cli/releases/latest/download/AWS_SAM_CLI_64_PY3.msi" -Name "AWS_SAM_CLI_64_PY3.msi"
diff --git a/images/win/scripts/Installers/Install-AWS.ps1 b/images/win/scripts/Installers/Install-AWS.ps1
index 124f32d2..b5ad9a6d 100644
--- a/images/win/scripts/Installers/Install-AWS.ps1
+++ b/images/win/scripts/Installers/Install-AWS.ps1
@@ -3,7 +3,7 @@
## Desc: Install awscli
################################################################################
-choco install awscli -y
+Choco-Install -PackageName awscli
$env:PATH =$env:PATH + ";$Env:Programfiles\Amazon\AWSCLIV2"
diff --git a/images/win/scripts/Installers/Install-AliyunCli.ps1 b/images/win/scripts/Installers/Install-AliyunCli.ps1
new file mode 100644
index 00000000..b46eb8a6
--- /dev/null
+++ b/images/win/scripts/Installers/Install-AliyunCli.ps1
@@ -0,0 +1,6 @@
+################################################################################
+## File: Install-AliyunCli.ps1
+## Desc: Install Alibaba Cloud CLI
+################################################################################
+
+Choco-Install -PackageName aliyun-cli
\ No newline at end of file
diff --git a/images/win/scripts/Installers/Install-AzureCli.ps1 b/images/win/scripts/Installers/Install-AzureCli.ps1
index 4756bce3..4b5d7dae 100644
--- a/images/win/scripts/Installers/Install-AzureCli.ps1
+++ b/images/win/scripts/Installers/Install-AzureCli.ps1
@@ -3,7 +3,7 @@
## Desc: Install Azure CLI
################################################################################
-choco install azure-cli -y
+Choco-Install -PackageName azure-cli
$AzureCliExtensionPath = Join-Path $Env:CommonProgramFiles 'AzureCliExtensionDirectory'
New-Item -ItemType "directory" -Path $AzureCliExtensionPath
diff --git a/images/win/scripts/Installers/Install-AzureCosmosDbEmulator.ps1 b/images/win/scripts/Installers/Install-AzureCosmosDbEmulator.ps1
index c94e6485..b1614932 100644
--- a/images/win/scripts/Installers/Install-AzureCosmosDbEmulator.ps1
+++ b/images/win/scripts/Installers/Install-AzureCosmosDbEmulator.ps1
@@ -5,4 +5,7 @@
Import-Module -Name ImageHelpers -Force
-Install-MSI -MsiUrl "https://aka.ms/cosmosdb-emulator" -MsiName "AzureCosmosDBEmulator.msi"
+$InstallerName = "AzureCosmosDBEmulator.msi"
+$InstallerUrl = "https://aka.ms/cosmosdb-emulator"
+
+Install-Binary -Url $InstallerUrl -Name $InstallerName
\ No newline at end of file
diff --git a/images/win/scripts/Installers/Install-AzureModules.ps1 b/images/win/scripts/Installers/Install-AzureModules.ps1
index 5a67584a..3f41a774 100644
--- a/images/win/scripts/Installers/Install-AzureModules.ps1
+++ b/images/win/scripts/Installers/Install-AzureModules.ps1
@@ -39,6 +39,7 @@ $psAzureModulesToInstall = @{
"2.6.0"
"3.1.0"
"3.5.0"
+ "3.8.0"
)
}
@@ -65,4 +66,4 @@ foreach($psmoduleName in $psAzureModulesToInstall.Keys)
# Add AzureRM and Azure modules to the PSModulePath
$finalModulePath = '{0};{1};{2}' -f "${installPSModulePath}\azurerm_2.1.0", "${installPSModulePath}\azure_2.1.0", $env:PSModulePath
-[Environment]::SetEnvironmentVariable("PSModulePath", $finalModulePath, "Machine")
\ No newline at end of file
+[Environment]::SetEnvironmentVariable("PSModulePath", $finalModulePath, "Machine")
diff --git a/images/win/scripts/Installers/Install-Bazel.ps1 b/images/win/scripts/Installers/Install-Bazel.ps1
index fb14a856..fabbecd0 100644
--- a/images/win/scripts/Installers/Install-Bazel.ps1
+++ b/images/win/scripts/Installers/Install-Bazel.ps1
@@ -3,6 +3,6 @@
## Desc: Install Bazel and Bazelisk (A user-friendly launcher for Bazel)
################################################################################
-choco install bazel -y
+Choco-Install -PackageName bazel
npm install -g @bazel/bazelisk
\ No newline at end of file
diff --git a/images/win/scripts/Installers/Install-Chrome.ps1 b/images/win/scripts/Installers/Install-Chrome.ps1
index 44b58abb..c94641f1 100644
--- a/images/win/scripts/Installers/Install-Chrome.ps1
+++ b/images/win/scripts/Installers/Install-Chrome.ps1
@@ -6,8 +6,8 @@
Import-Module -Name ImageHelpers -Force;
$ChromeInstallerFile = "chrome_installer.exe";
-$ChromeInstallerUri = "https://dl.google.com/chrome/install/375.126/${ChromeInstallerFile}";
-Install-Exe -Url $ChromeInstallerUri -Name $ChromeInstallerFile -ArgumentList ("/silent", "/install")
+$ChromeInstallerUrl = "https://dl.google.com/chrome/install/375.126/${ChromeInstallerFile}";
+Install-Binary -Url $ChromeInstallerUrl -Name $ChromeInstallerFile -ArgumentList ("/silent", "/install")
Write-Host "Adding the firewall rule for Google update blocking";
New-NetFirewallRule -DisplayName "BlockGoogleUpdate" -Direction Outbound -Action Block -Program "C:\Program Files (x86)\Google\Update\GoogleUpdate.exe";
diff --git a/images/win/scripts/Installers/Install-Cmake.ps1 b/images/win/scripts/Installers/Install-Cmake.ps1
index b0ba514e..37183d5e 100644
--- a/images/win/scripts/Installers/Install-Cmake.ps1
+++ b/images/win/scripts/Installers/Install-Cmake.ps1
@@ -3,4 +3,4 @@
## Desc: Install Cmake
################################################################################
-choco install cmake.install -y --installargs 'ADD_CMAKE_TO_PATH=""System""'
+Choco-Install -PackageName cmake.install -ArgumentList "--installargs",'ADD_CMAKE_TO_PATH=""System""'
diff --git a/images/win/scripts/Installers/Install-DACFx.ps1 b/images/win/scripts/Installers/Install-DACFx.ps1
index 7060aa25..aa3deff7 100644
--- a/images/win/scripts/Installers/Install-DACFx.ps1
+++ b/images/win/scripts/Installers/Install-DACFx.ps1
@@ -5,6 +5,7 @@
Import-Module -Name ImageHelpers -Force
-$exitcode = Install-MSI -MsiUrl "https://download.microsoft.com/download/f/1/9/f19eaee6-0728-4a0b-9755-9808acc8af0b/EN/x64/DacFramework.msi" -MsiName "DacFramework.msi"
+$InstallerName = "DacFramework.msi"
+$InstallerUrl = "https://download.microsoft.com/download/f/1/9/f19eaee6-0728-4a0b-9755-9808acc8af0b/EN/x64/${InstallerName}"
-exit $exitcode
+Install-Binary -Url $InstallerUrl -Name $InstallerName
\ No newline at end of file
diff --git a/images/win/scripts/Installers/Install-Docker.ps1 b/images/win/scripts/Installers/Install-Docker.ps1
index ec4f0d89..35e988ad 100644
--- a/images/win/scripts/Installers/Install-Docker.ps1
+++ b/images/win/scripts/Installers/Install-Docker.ps1
@@ -13,8 +13,8 @@ Write-Host "Install-Package Docker"
Install-Package -Name docker -ProviderName DockerMsftProvider -Force
Start-Service docker
-choco install docker-compose -y
+Write-Host "Install-Package Docker-Compose"
+Choco-Install -PackageName docker-compose
-# Install helm
Write-Host "Install Helm"
-choco install kubernetes-helm
\ No newline at end of file
+Choco-Install -PackageName kubernetes-helm
\ No newline at end of file
diff --git a/images/win/scripts/Installers/Install-DotnetSDK.ps1 b/images/win/scripts/Installers/Install-DotnetSDK.ps1
index 5fe03e9b..57d7668c 100644
--- a/images/win/scripts/Installers/Install-DotnetSDK.ps1
+++ b/images/win/scripts/Installers/Install-DotnetSDK.ps1
@@ -66,8 +66,8 @@ function InstallAllValidSdks()
Invoke-WebRequest -Uri $dotnetChannel.'releases.json' -UseBasicParsing -OutFile "releases-$channelVersion.json"
$currentReleases = Get-Content -Path "releases-$channelVersion.json" | ConvertFrom-Json
# filtering out the preview/rc releases
- # Remove version 3.1.102 from install list, .NET gave a heads-up that this might cause issues and they are working on a fix. https://github.com/dotnet/aspnetcore/issues/19133
- $currentReleases = $currentReleases.'releases' | Where-Object { !$_.'release-version'.Contains('-') -and !$_.'release-version'.Contains('3.1.2') } | Sort-Object { [Version] $_.'release-version' }
+ $currentReleases = $currentReleases.'releases' | Where-Object { !$_.'release-version'.Contains('-') } | Sort-Object { [Version] $_.'release-version' }
+
ForEach ($release in $currentReleases)
{
if ($release.'sdks'.Count -gt 0)
diff --git a/images/win/scripts/Installers/Install-Edge.ps1 b/images/win/scripts/Installers/Install-Edge.ps1
index b84f0fc1..430e8bbb 100644
--- a/images/win/scripts/Installers/Install-Edge.ps1
+++ b/images/win/scripts/Installers/Install-Edge.ps1
@@ -3,7 +3,7 @@
## Desc: Install latest stable version of Microsoft Edge browser
################################################################################
-choco install microsoft-edge -y
+Choco-Install -PackageName microsoft-edge
# Install Microsoft Edge Web Driver
Write-Host "Install Edge WebDriver"
diff --git a/images/win/scripts/Installers/Install-Firefox.ps1 b/images/win/scripts/Installers/Install-Firefox.ps1
index 6f1dc218..2f919baa 100644
--- a/images/win/scripts/Installers/Install-Firefox.ps1
+++ b/images/win/scripts/Installers/Install-Firefox.ps1
@@ -14,7 +14,7 @@ Write-Host "Firefox latest version: $latestVersion"
# url for latest version of firefox
$urlLatestVersion = "https://download.mozilla.org/?product=firefox-${latestVersion}&os=win64&lang=en-US"
-Install-EXE -Url $urlLatestVersion -Name "Firefox Setup $latestVersion.exe" -ArgumentList ("/silent", "/install")
+Install-Binary -Url $urlLatestVersion -Name "Firefox Setup $latestVersion.exe" -ArgumentList ("/silent", "/install")
# Disable autoupdate
$firefoxDirectoryPath = Join-Path $env:ProgramFiles "Mozilla Firefox"
diff --git a/images/win/scripts/Installers/Install-Git.ps1 b/images/win/scripts/Installers/Install-Git.ps1
index 24efc5bd..c1ec4360 100644
--- a/images/win/scripts/Installers/Install-Git.ps1
+++ b/images/win/scripts/Installers/Install-Git.ps1
@@ -5,10 +5,34 @@
Import-Module -Name ImageHelpers
-# Install the latest version of Git which is bundled with Git LFS.
-# See https://chocolatey.org/packages/git
-choco install git -y --package-parameters="/GitAndUnixToolsOnPath /WindowsTerminal /NoShellIntegration"
-choco install hub
+function getSimpleValue([string] $url, [string] $filename ) {
+ $fullpath = "${env:Temp}\$filename"
+ Invoke-WebRequest -Uri $url -OutFile $fullpath
+ $value = Get-Content $fullpath -Raw
+
+ return $value
+}
+
+# Install the latest version of Git for Windows
+$gitTag = getSimpleValue -url "https://gitforwindows.org/latest-tag.txt" -filename "gitlatesttag.txt"
+$gitVersion = getSimpleValue -url "https://gitforwindows.org/latest-version.txt" -filename "gitlatestversion.txt";
+
+$installerFile = "Git-$gitVersion-64-bit.exe";
+$downloadUrl = "https://github.com/git-for-windows/git/releases/download/$gitTag/$installerFile";
+Install-Binary -Url $downloadUrl `
+ -Name $installerFile `
+ -ArgumentList (
+ "/VERYSILENT", `
+ "/NORESTART", `
+ "/NOCANCEL", `
+ "/SP-", `
+ "/CLOSEAPPLICATIONS", `
+ "/RESTARTAPPLICATIONS", `
+ "/o:PathOption=CmdTools", `
+ "/o:BashTerminalOption=ConHost", `
+ "/COMPONENTS=gitlfs")
+
+Choco-Install -PackageName hub
# Disable GCM machine-wide
[Environment]::SetEnvironmentVariable("GCM_INTERACTIVE", "Never", [System.EnvironmentVariableTarget]::Machine)
diff --git a/images/win/scripts/Installers/Install-GitVersion.ps1 b/images/win/scripts/Installers/Install-GitVersion.ps1
index b97358e0..1e27e49f 100644
--- a/images/win/scripts/Installers/Install-GitVersion.ps1
+++ b/images/win/scripts/Installers/Install-GitVersion.ps1
@@ -3,4 +3,4 @@
## Desc: Install GitVersion
################################################################################
-choco install gitversion.portable -y
+Choco-Install -PackageName gitversion.portable
diff --git a/images/win/scripts/Installers/Install-InnoSetup.ps1 b/images/win/scripts/Installers/Install-InnoSetup.ps1
index 8020120d..17f26962 100644
--- a/images/win/scripts/Installers/Install-InnoSetup.ps1
+++ b/images/win/scripts/Installers/Install-InnoSetup.ps1
@@ -3,4 +3,4 @@
## Desc: Install Inno Setup
################################################################################
-choco install innosetup -y
+Choco-Install -PackageName innosetup
diff --git a/images/win/scripts/Installers/Install-JavaTools.ps1 b/images/win/scripts/Installers/Install-JavaTools.ps1
index 68c0209f..96282371 100644
--- a/images/win/scripts/Installers/Install-JavaTools.ps1
+++ b/images/win/scripts/Installers/Install-JavaTools.ps1
@@ -8,22 +8,26 @@
$azulJDK7Uri = 'https://repos.azul.com/azure-only/zulu/packages/zulu-7/7u232/zulu-7-azure-jdk_7.31.0.5-7.0.232-win_x64.zip'
$azulJDK8Uri = 'https://repos.azul.com/azure-only/zulu/packages/zulu-8/8u222/zulu-8-azure-jdk_8.40.0.25-8.0.222-win_x64.zip'
$azulJDK11Uri = 'https://repos.azul.com/azure-only/zulu/packages/zulu-11/11.0.4/zulu-11-azure-jdk_11.33.15-11.0.4-win_x64.zip'
+$azulJDK13Uri = 'https://repos.azul.com/azure-only/zulu/packages/zulu-13/13.0.3/zulu-13-azure-jdk_13.31.11-13.0.3-win_x64.zip'
cd $env:TEMP
Invoke-WebRequest -UseBasicParsing -Uri $azulJDK7Uri -OutFile azulJDK7.zip
Invoke-WebRequest -UseBasicParsing -Uri $azulJDK8Uri -OutFile azulJDK8.zip
Invoke-WebRequest -UseBasicParsing -Uri $azulJDK11Uri -OutFile azulJDK11.zip
+Invoke-WebRequest -UseBasicParsing -Uri $azulJDK13Uri -OutFile azulJDK13.zip
# Expand the zips
Expand-Archive -Path azulJDK7.zip -DestinationPath "C:\Program Files\Java\" -Force
Expand-Archive -Path azulJDK8.zip -DestinationPath "C:\Program Files\Java\" -Force
Expand-Archive -Path azulJDK11.zip -DestinationPath "C:\Program Files\Java\" -Force
+Expand-Archive -Path azulJDK13.zip -DestinationPath "C:\Program Files\Java\" -Force
# Deleting zip folders
Remove-Item -Recurse -Force azulJDK7.zip
Remove-Item -Recurse -Force azulJDK8.zip
Remove-Item -Recurse -Force azulJDK11.zip
+Remove-Item -Recurse -Force azulJDK13.zip
Import-Module -Name ImageHelpers -Force
@@ -49,6 +53,9 @@ $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
@@ -58,12 +65,13 @@ 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
# Install Java tools
# Force chocolatey to ignore dependencies on Ant and Maven or else they will download the Oracle JDK
-choco install ant -y -i
-choco install maven -y -i --version=3.6.3
-choco install gradle -y
+Choco-Install -PackageName ant -ArgumentList "-i"
+Choco-Install -PackageName maven -ArgumentList "-i", "--version=3.6.3"
+Choco-Install -PackageName gradle
# Move maven variables to Machine. They may not be in the environment for this script so we need to read them from the registry.
$userSid = (Get-WmiObject win32_useraccount -Filter "name = '$env:USERNAME' AND domain = '$env:USERDOMAIN'").SID
diff --git a/images/win/scripts/Installers/Install-Jq.ps1 b/images/win/scripts/Installers/Install-Jq.ps1
index 1ccb42da..5a383d79 100644
--- a/images/win/scripts/Installers/Install-Jq.ps1
+++ b/images/win/scripts/Installers/Install-Jq.ps1
@@ -3,4 +3,4 @@
## Desc: Install jq
################################################################################
-choco install jq -y
+Choco-Install -PackageName jq
diff --git a/images/win/scripts/Installers/Install-Julia.ps1 b/images/win/scripts/Installers/Install-Julia.ps1
index 90547472..6677b5d1 100644
--- a/images/win/scripts/Installers/Install-Julia.ps1
+++ b/images/win/scripts/Installers/Install-Julia.ps1
@@ -3,4 +3,4 @@
## Desc: Install Julia
################################################################################
-choco install julia -y --ia "/D=C:\Julia"
+Choco-Install -PackageName julia -ArgumentList "--ia","/DIR=C:\Julia"
diff --git a/images/win/scripts/Installers/Install-KubernetesCli.ps1 b/images/win/scripts/Installers/Install-KubernetesCli.ps1
index 8c7350c0..c6ad04bc 100644
--- a/images/win/scripts/Installers/Install-KubernetesCli.ps1
+++ b/images/win/scripts/Installers/Install-KubernetesCli.ps1
@@ -3,4 +3,4 @@
## Desc: Install KubernetesCli
################################################################################
-choco install kubernetes-cli -y
+Choco-Install -PackageName kubernetes-cli
diff --git a/images/win/scripts/Installers/Install-Mercurial.ps1 b/images/win/scripts/Installers/Install-Mercurial.ps1
index 65a5cdef..da820d1b 100644
--- a/images/win/scripts/Installers/Install-Mercurial.ps1
+++ b/images/win/scripts/Installers/Install-Mercurial.ps1
@@ -3,7 +3,7 @@
## Desc: Install Mercurial
################################################################################
-choco install hg -y --version 5.0.0
+Choco-Install -PackageName hg -ArgumentList "--version", "5.0.0"
$hgPath = "${env:ProgramFiles}\Mercurial\"
Add-MachinePathItem $hgPath
diff --git a/images/win/scripts/Installers/Install-MinGW.ps1 b/images/win/scripts/Installers/Install-MinGW.ps1
index fe97ddde..ac585b9d 100644
--- a/images/win/scripts/Installers/Install-MinGW.ps1
+++ b/images/win/scripts/Installers/Install-MinGW.ps1
@@ -5,7 +5,7 @@
Import-Module -Name ImageHelpers -Force
-choco install -y mingw
+Choco-Install -PackageName mingw
# Make a copy of mingw32-make.exe to make.exe, which is a more discoverable name
# and so the same command line can be used on Windows as on macOS and Linux
diff --git a/images/win/scripts/Installers/Install-Miniconda.ps1 b/images/win/scripts/Installers/Install-Miniconda.ps1
index 55e9f483..7c32f53d 100644
--- a/images/win/scripts/Installers/Install-Miniconda.ps1
+++ b/images/win/scripts/Installers/Install-Miniconda.ps1
@@ -5,12 +5,14 @@
Import-Module -Name ImageHelpers -Force
+$CondaDestination = "C:\Miniconda"
+
# Lock to Miniconda 4.6 until we do the work to run `conda init` for the vsts user
# Then we can go back to installing the latest Miniconda
# $url = "https://repo.continuum.io/miniconda/Miniconda3-latest-Windows-x86_64.exe"
-$url = "https://repo.continuum.io/miniconda/Miniconda3-4.6.14-Windows-x86_64.exe"
-$name = $Url.Split('/')[-1]
-$destination = "C:\Miniconda"
+$InstallerName = "Miniconda3-4.6.14-Windows-x86_64.exe"
+$InstallerUrl = "https://repo.continuum.io/miniconda/${InstallerName}"
+$ArgumentList = ("/S", "/AddToPath=0", "/RegisterPython=0", "/D=$CondaDestination")
-Install-EXE -Url $url -Name $name -ArgumentList "/S /AddToPath=0 /RegisterPython=0 /D=$destination"
-Set-SystemVariable -SystemVariable "CONDA" -Value $destination
+Install-Binary -Url $InstallerUrl -Name $InstallerName -ArgumentList $ArgumentList
+Set-SystemVariable -SystemVariable "CONDA" -Value $CondaDestination
diff --git a/images/win/scripts/Installers/Install-MysqlCli.ps1 b/images/win/scripts/Installers/Install-MysqlCli.ps1
index 76930d6e..348657d7 100644
--- a/images/win/scripts/Installers/Install-MysqlCli.ps1
+++ b/images/win/scripts/Installers/Install-MysqlCli.ps1
@@ -9,31 +9,23 @@ $uri = 'https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.21-winx64.zip'
$mysqlPath = 'C:\mysql-5.7.21-winx64\bin'
# Installing visual c++ redistibutable package.
-$InstallerURI = 'https://download.microsoft.com/download/0/5/6/056dcda9-d667-4e27-8001-8a0c6971d6b1/vcredist_x64.exe'
-$InstallerName = 'vcredist_x64.exe'
-$ArgumentList = ('/install', '/quiet', '/norestart' )
+$InstallerName = "vcredist_x64.exe"
+$InstallerURI = "https://download.microsoft.com/download/0/5/6/056dcda9-d667-4e27-8001-8a0c6971d6b1/${InstallerName}"
+$ArgumentList = ("/install", "/quiet", "/norestart")
-$exitCode = Install-EXE -Url $InstallerURI -Name $InstallerName -ArgumentList $ArgumentList
-if ($exitCode -eq 0 -or $exitCode -eq 3010)
-{
- # MySQL disabled TLS 1.0 support on or about Jul-14-2018. Need to make sure TLS 1.2 is enabled.
- [Net.ServicePointManager]::SecurityProtocol = [Net.ServicePointManager]::SecurityProtocol -bor "Tls12"
+Install-Binary -Url $InstallerURI -Name $InstallerName -ArgumentList $ArgumentList
- # Get the latest mysql command line tools .
- Invoke-WebRequest -UseBasicParsing -Uri $uri -OutFile mysql.zip
+# MySQL disabled TLS 1.0 support on or about Jul-14-2018. Need to make sure TLS 1.2 is enabled.
+[Net.ServicePointManager]::SecurityProtocol = [Net.ServicePointManager]::SecurityProtocol -bor "Tls12"
- # Expand the zip
- Expand-Archive -Path mysql.zip -DestinationPath "C:\" -Force
+# Get the latest mysql command line tools .
+Invoke-WebRequest -UseBasicParsing -Uri $uri -OutFile mysql.zip
- # Deleting zip folder
- Remove-Item -Recurse -Force mysql.zip
+# Expand the zip
+Expand-Archive -Path mysql.zip -DestinationPath "C:\" -Force
- # Adding mysql in system environment path
- Add-MachinePathItem $mysqlPath
+# Deleting zip folder
+Remove-Item -Recurse -Force mysql.zip
- return 0;
-}
-else
-{
- return $exitCode;
-}
+# Adding mysql in system environment path
+Add-MachinePathItem $mysqlPath
\ No newline at end of file
diff --git a/images/win/scripts/Installers/Install-NET472.ps1 b/images/win/scripts/Installers/Install-NET472.ps1
index 3cdb1fa1..e558c5c5 100644
--- a/images/win/scripts/Installers/Install-NET472.ps1
+++ b/images/win/scripts/Installers/Install-NET472.ps1
@@ -6,8 +6,8 @@
Import-Module -Name ImageHelpers -Force
# .NET 4.7.2 Dev pack
-$InstallerURI = "https://download.microsoft.com/download/3/B/F/3BFB9C35-405D-45DF-BDAF-0EB57D047888/NDP472-DevPack-ENU.exe"
$InstallerName = "NDP472-DevPack-ENU.exe"
+$InstallerUrl = "https://download.microsoft.com/download/3/B/F/3BFB9C35-405D-45DF-BDAF-0EB57D047888/${InstallerName}"
$ArgumentList = ('Setup', '/passive', '/norestart' )
-Install-EXE -Url $InstallerURI -Name $InstallerName -ArgumentList $ArgumentList
+Install-Binary -Url $InstallerUrl -Name $InstallerName -ArgumentList $ArgumentList
diff --git a/images/win/scripts/Installers/Install-NET48.ps1 b/images/win/scripts/Installers/Install-NET48.ps1
index 2603ab05..ab746ca0 100644
--- a/images/win/scripts/Installers/Install-NET48.ps1
+++ b/images/win/scripts/Installers/Install-NET48.ps1
@@ -6,8 +6,8 @@
Import-Module -Name ImageHelpers -Force
# .NET 4.8 Dev pack
-$InstallerURI = "https://download.visualstudio.microsoft.com/download/pr/014120d7-d689-4305-befd-3cb711108212/0307177e14752e359fde5423ab583e43/ndp48-devpack-enu.exe"
-$InstallerName = "NDP48-DevPack-ENU.exe"
-$ArgumentList = ('Setup', '/passive', '/norestart' )
+$InstallerName = "ndp48-devpack-enu.exe"
+$InstallerUrl = "https://download.visualstudio.microsoft.com/download/pr/014120d7-d689-4305-befd-3cb711108212/0307177e14752e359fde5423ab583e43/${InstallerName}"
+$ArgumentList = ("Setup", "/passive", "/norestart")
-Install-EXE -Url $InstallerURI -Name $InstallerName -ArgumentList $ArgumentList
+Install-Binary -Url $InstallerUrl -Name $InstallerName -ArgumentList $ArgumentList
diff --git a/images/win/scripts/Installers/Install-NSIS.ps1 b/images/win/scripts/Installers/Install-NSIS.ps1
index c8c5e370..71ceb70d 100644
--- a/images/win/scripts/Installers/Install-NSIS.ps1
+++ b/images/win/scripts/Installers/Install-NSIS.ps1
@@ -3,7 +3,7 @@
## Desc: Install NSIS
################################################################################
-choco install nsis -y
+Choco-Install -PackageName nsis
$NsisPath = "${env:ProgramFiles(x86)}\NSIS\"
Add-MachinePathItem $NsisPath
diff --git a/images/win/scripts/Installers/Install-NodeLts.ps1 b/images/win/scripts/Installers/Install-NodeLts.ps1
index e1ec5f0f..c1ee0579 100644
--- a/images/win/scripts/Installers/Install-NodeLts.ps1
+++ b/images/win/scripts/Installers/Install-NodeLts.ps1
@@ -12,7 +12,7 @@ $CachePath = 'C:\npm\cache'
New-Item -Path $PrefixPath -Force -ItemType Directory
New-Item -Path $CachePath -Force -ItemType Directory
-choco install nodejs-lts -y --force
+Choco-Install -PackageName nodejs-lts -ArgumentList "--force"
Add-MachinePathItem $PrefixPath
$env:Path = Get-MachinePath
diff --git a/images/win/scripts/Installers/Install-OpenSSL.ps1 b/images/win/scripts/Installers/Install-OpenSSL.ps1
index 5ff78339..4f43ad43 100644
--- a/images/win/scripts/Installers/Install-OpenSSL.ps1
+++ b/images/win/scripts/Installers/Install-OpenSSL.ps1
@@ -3,4 +3,4 @@
## Desc: Install OpenSSL
################################################################################
-choco install openssl.light -y
+Choco-Install -PackageName openssl.light
diff --git a/images/win/scripts/Installers/Install-PHP.ps1 b/images/win/scripts/Installers/Install-PHP.ps1
index 72db2ee2..f4fc4f1d 100644
--- a/images/win/scripts/Installers/Install-PHP.ps1
+++ b/images/win/scripts/Installers/Install-PHP.ps1
@@ -8,10 +8,10 @@ Import-Module -Name ImageHelpers
# Install latest PHP in chocolatey
$installDir = "c:\tools\php"
-choco install php -y --force --params "/InstallDir:$installDir"
+Choco-Install -PackageName php -ArgumentList "--force", "--params", "/InstallDir:$installDir"
# Install latest Composer in chocolatey
-choco install composer --ia "/DEV=$installDir /PHP=$installDir"
+Choco-Install -PackageName composer -ArgumentList "--ia", "/DEV=$installDir /PHP=$installDir"
# update path to extensions and enable curl and mbstring extensions, and enable php openssl extensions.
((Get-Content -path $installDir\php.ini -Raw) -replace ';extension=curl','extension=curl' -replace ';extension=mbstring','extension=mbstring' -replace ';extension_dir = "ext"','extension_dir = "ext"' -replace 'extension=";php_openssl.dll"','extension_dir = "php_openssl.dll"') | Set-Content -Path $installDir\php.ini
diff --git a/images/win/scripts/Installers/Install-Packer.ps1 b/images/win/scripts/Installers/Install-Packer.ps1
index 4374175d..6d74fbf7 100644
--- a/images/win/scripts/Installers/Install-Packer.ps1
+++ b/images/win/scripts/Installers/Install-Packer.ps1
@@ -3,4 +3,4 @@
## Desc: Install Packer
################################################################################
-choco install packer -y
+Choco-Install -PackageName packer
diff --git a/images/win/scripts/Installers/Install-Perl.ps1 b/images/win/scripts/Installers/Install-Perl.ps1
index 59b1e11a..350e6c67 100644
--- a/images/win/scripts/Installers/Install-Perl.ps1
+++ b/images/win/scripts/Installers/Install-Perl.ps1
@@ -3,4 +3,4 @@
## Desc: Install Perl
################################################################################
-choco install strawberryperl -y
+Choco-Install -PackageName strawberryperl
diff --git a/images/win/scripts/Installers/Install-RootCA.ps1 b/images/win/scripts/Installers/Install-RootCA.ps1
index cd3a4642..a5d67808 100644
--- a/images/win/scripts/Installers/Install-RootCA.ps1
+++ b/images/win/scripts/Installers/Install-RootCA.ps1
@@ -1,22 +1,127 @@
-# Serialized Certificate Store File
-$sstFile = "$env:TEMP\roots.sst"
-# Generate SST from Windows Update
-$result = certutil.exe -generateSSTFromWU $sstFile
-if ($LASTEXITCODE -ne 0) {
- Write-Host "[Error]: failed to generate $sstFile sst file`n$result"
- exit $LASTEXITCODE
+# https://www.sysadmins.lv/blog-en/how-to-retrieve-certificate-purposes-property-with-cryptoapi-and-powershell.aspx
+# https://www.sysadmins.lv/blog-en/dump-authroot-and-disallowed-certificates-with-powershell.aspx
+# https://www.sysadmins.lv/blog-en/constraining-extended-key-usages-in-microsoft-windows.aspx
+
+function Add-ExtendedCertType {
+ $signature = @"
+ [DllImport("Crypt32.dll", SetLastError = true, CharSet = CharSet.Auto)]
+ public static extern bool CertGetCertificateContextProperty(
+ IntPtr pCertContext,
+ uint dwPropId,
+ Byte[] pvData,
+ ref uint pcbData
+ );
+
+ [DllImport("Crypt32.dll", CharSet = CharSet.Auto, SetLastError = true)]
+ public static extern bool CertSetCertificateContextProperty(
+ IntPtr pCertContext,
+ int dwPropId,
+ uint dwFlags,
+ IntPtr pvData
+ );
+"@
+
+ Add-Type -MemberDefinition $signature -Namespace PKI -Name Cert
}
-$result = certutil.exe -dump $sstFile
-if ($LASTEXITCODE -ne 0) {
- Write-Host "[Error]: failed to dump $sstFile sst file`n$result"
- exit $LASTEXITCODE
+function Get-CertificatesWithoutPropId {
+ # List installed certificates
+ $certs = Get-ChildItem -Path Cert:\LocalMachine\Root
+
+ Write-Host "Certificates without CERT_NOT_BEFORE_FILETIME_PROP_ID property"
+ $certsWithoutPropId = @{}
+ $certs | ForEach-Object -Process {
+ $certHandle = $_.Handle
+ $isPropertySet = [PKI.Cert]::CertGetCertificateContextProperty(
+ $certHandle, $CERT_NOT_BEFORE_FILETIME_PROP_ID, $null, [ref]$null
+ )
+ if (-not $isPropertySet) {
+ Write-Host "Subject: $($_.Subject)"
+ $certsWithoutPropId[$_.Thumbprint] = $null
+ }
+ }
+ $certsWithoutPropId
+}
+function Import-SSTFromWU {
+ # Serialized Certificate Store File
+ $sstFile = "$env:TEMP\roots.sst"
+ # Generate SST from Windows Update
+ $result = certutil.exe -generateSSTFromWU $sstFile
+ if ($LASTEXITCODE -ne 0) {
+ Write-Host "[Error]: failed to generate $sstFile sst file`n$result"
+ exit $LASTEXITCODE
+ }
+
+ $result = certutil.exe -dump $sstFile
+ if ($LASTEXITCODE -ne 0) {
+ Write-Host "[Error]: failed to dump $sstFile sst file`n$result"
+ exit $LASTEXITCODE
+ }
+
+ try {
+ Import-Certificate -FilePath $sstFile -CertStoreLocation Cert:\LocalMachine\Root
+ } catch {
+ Write-Host "[Error]: failed to import ROOT CA`n$_"
+ exit 1
+ }
}
-try {
- Import-Certificate -FilePath $sstFile -CertStoreLocation Cert:\LocalMachine\Root
-} catch {
- Write-Host "[Error]: failed to import ROOT CA`n$_"
- exit 1
+function Clear-CertificatesPropId {
+ param([hashtable]$CertsWithoutPropId)
+
+ # List installed certificates
+ $certs = Get-ChildItem -Path Cert:\LocalMachine\Root
+
+ # Clear property CERT_NOT_BEFORE_FILETIME_PROP_ID
+ $certs | ForEach-Object -Process {
+ $thumbprint = $_.Thumbprint
+ if ($certsWithoutPropId.ContainsKey($thumbprint)) {
+ $subject = $_.Subject
+ $certHandle = $_.Handle
+ $result = [PKI.Cert]::CertSetCertificateContextProperty(
+ $certHandle, $CERT_NOT_BEFORE_FILETIME_PROP_ID, 0, [System.IntPtr]::Zero
+ )
+ if ($result) {
+ Write-Host "[Success] Clear CERT_NOT_BEFORE_FILETIME_PROP_ID property $subject"
+ } else {
+ Write-Host "[Fail] Clear CERT_NOT_BEFORE_FILETIME_PROP_ID property $subject"
+ }
+ }
+ }
}
+function Disable-RootAutoUpdate {
+ Write-Host "Disable auto root update mechanism"
+ $regPath = "HKLM:\Software\Policies\Microsoft\SystemCertificates\AuthRoot"
+ $regKey = "DisableRootAutoUpdate"
+
+ # Create the registry key if it doesn't exist
+ if (-not (Test-Path $regPath)) {
+ Write-Verbose "Creating $regPath"
+ New-Item $regPath | Out-Null
+ }
+
+ Set-ItemProperty $regPath -Name $regKey -Type DWord -Value 1
+}
+
+# Property to remove
+$CERT_NOT_BEFORE_FILETIME_PROP_ID = 126
+
+# Add extended cert type
+Add-ExtendedCertType
+
+# Get certificates without property CERT_NOT_BEFORE_FILETIME_PROP_ID
+$certsWithoutPropId = Get-CertificatesWithoutPropId
+
+# Download and install the latest version of root ca list
+Import-SSTFromWU
+
+# Clear property CERT_NOT_BEFORE_FILETIME_PROP_ID
+if ($certsWithoutPropId.Count -gt 0) {
+ Clear-CertificatesPropId -CertsWithoutPropId $certsWithoutPropId
+} else {
+ Write-Host "Nothing to clear"
+}
+
+# Disable auto root update mechanism
+Disable-RootAutoUpdate
diff --git a/images/win/scripts/Installers/Install-Sbt.ps1 b/images/win/scripts/Installers/Install-Sbt.ps1
index b96ed5ac..bc0e95a2 100644
--- a/images/win/scripts/Installers/Install-Sbt.ps1
+++ b/images/win/scripts/Installers/Install-Sbt.ps1
@@ -8,7 +8,7 @@ Import-Module -Name ImageHelpers
# Install the latest version of sbt.
# See https://chocolatey.org/packages/sbt
-choco install sbt -y
+Choco-Install -PackageName sbt
$env:SBT_HOME="${env:ProgramFiles(x86)}\sbt"
diff --git a/images/win/scripts/Installers/Install-Svn.ps1 b/images/win/scripts/Installers/Install-Svn.ps1
index 45dd5231..315c4ef8 100644
--- a/images/win/scripts/Installers/Install-Svn.ps1
+++ b/images/win/scripts/Installers/Install-Svn.ps1
@@ -3,4 +3,4 @@
## Desc: Install Subversion
################################################################################
-choco install svn -y
+Choco-Install -PackageName svn
diff --git a/images/win/scripts/Installers/Install-Toolset.ps1 b/images/win/scripts/Installers/Install-Toolset.ps1
new file mode 100644
index 00000000..25bfe58e
--- /dev/null
+++ b/images/win/scripts/Installers/Install-Toolset.ps1
@@ -0,0 +1,76 @@
+################################################################################
+## File: Install-Toolset.ps1
+## Team: CI-Build
+## Desc: Install toolset
+################################################################################
+
+Function Install-Asset {
+ param(
+ [Parameter(Mandatory=$true)]
+ [object] $ReleaseAsset
+ )
+
+ $releaseAssetName = [System.IO.Path]::GetFileNameWithoutExtension($ReleaseAsset.filename)
+ $assetFolderPath = Join-Path $env:TEMP $releaseAssetName
+ $assetArchivePath = Start-DownloadWithRetry -Url $ReleaseAsset.download_url -Name $ReleaseAsset.filename
+
+ Write-Host "Extract $($ReleaseAsset.filename) content..."
+ 7z.exe x $assetArchivePath -o"$assetFolderPath" -y | Out-Null
+
+ Write-Host "Invoke installation script..."
+ Push-Location -Path $assetFolderPath
+ Invoke-Expression .\setup.ps1
+ Pop-Location
+}
+
+Function Set-DefaultPythonVersion {
+ param(
+ [Parameter(Mandatory=$true)]
+ [object[]] $Toolset
+ )
+
+ $python = $Toolset | Where-Object { ($_.name -eq "Python") -and ($_.default -ne "") } `
+ | Select-Object default, arch -First 1
+
+ if ($python.default -ne $null) {
+ $pythonPath = Join-Path $Env:AGENT_TOOLSDIRECTORY "/Python/$($python.default)/$($python.arch)" -Resolve
+
+ Write-Host "Use Python $($python.default) as a system Python"
+ Add-MachinePathItem -PathItem $pythonPath
+ Add-MachinePathItem -PathItem "$pythonPath\Scripts"
+ } else {
+ Write-Host "Default Python version not found in toolset file!"
+ }
+}
+
+$ErrorActionPreference = "Stop"
+
+Import-Module -Name ImageHelpers -Force
+
+# Get toolcache content from toolset
+$tools = Get-ToolsetContent | Select-Object -ExpandProperty toolcache
+
+foreach ($tool in $tools) {
+ # Get versions manifest for current tool
+ $assets = Invoke-RestMethod $tool.url
+
+ # Get github release asset for each version
+ foreach ($toolVersion in $tool.versions) {
+ $asset = $assets | Where-Object version -like $toolVersion `
+ | Sort-Object -Property {[version]$_.version} -Descending `
+ | Select-Object -ExpandProperty files `
+ | Where-Object { ($_.platform -eq $tool.platform) -and ($_.arch -eq $tool.arch) } `
+ | Select-Object -First 1
+
+ Write-Host "Installing $($tool.name) $toolVersion $($tool.arch)..."
+ if ($asset -ne $null) {
+ Install-Asset -ReleaseAsset $asset
+ } else {
+ Write-Host "Asset was not found in versions manifest"
+ exit 1
+ }
+ }
+}
+
+# Install default python version
+Set-DefaultPythonVersion -Toolset $tools
\ No newline at end of file
diff --git a/images/win/scripts/Installers/Install-VSWhere.ps1 b/images/win/scripts/Installers/Install-VSWhere.ps1
index d6098654..5c623c93 100644
--- a/images/win/scripts/Installers/Install-VSWhere.ps1
+++ b/images/win/scripts/Installers/Install-VSWhere.ps1
@@ -3,4 +3,4 @@
## Desc: Install latest stable version of VSWhere
################################################################################
-choco install vswhere -y
+Choco-Install -PackageName vswhere
diff --git a/images/win/scripts/Installers/Install-WDK.ps1 b/images/win/scripts/Installers/Install-WDK.ps1
index 9df64d91..557152cf 100644
--- a/images/win/scripts/Installers/Install-WDK.ps1
+++ b/images/win/scripts/Installers/Install-WDK.ps1
@@ -7,7 +7,7 @@
Import-Module -Name ImageHelpers -Force
-if(Test-IsWin19)
+if (Test-IsWin19)
{
$winSdkUrl = "https://go.microsoft.com/fwlink/p/?linkid=2083338"
$wdkUrl = "https://go.microsoft.com/fwlink/?linkid=2085767"
@@ -22,24 +22,13 @@ else
$VSver = "2017"
}
+$argumentList = ("/features", "+", "/quiet")
# `winsdksetup.exe /features + /quiet` installs all features without showing the GUI
-$sdkExitCode = Install-EXE -Url $winSdkUrl -Name "winsdksetup.exe" -ArgumentList ("/features", "+", "/quiet")
-
-if ($sdkExitCode -ne 0)
-{
- Write-Host "Failed to install the Windows SDK."
- exit $sdkExitCode
-}
+Install-Binary -Url $winSdkUrl -Name "winsdksetup.exe" -ArgumentList $argumentList
# `wdksetup.exe /features + /quiet` installs all features without showing the GUI
-$wdkExitCode = Install-EXE -Url $wdkUrl -Name "wdksetup.exe" -ArgumentList ("/features", "+", "/quiet")
-
-if ($wdkExitCode -ne 0)
-{
- Write-Host "Failed to install the Windows Driver Kit."
- exit $wdkExitCode
-}
+Install-Binary -Url $wdkUrl -Name "wdksetup.exe" -ArgumentList $argumentList
# Need to install the VSIX to get the build targets when running VSBuild
Install-VsixExtension -FilePath $FilePath -Name "WDK.vsix" -VSversion $VSver -InstallOnly
diff --git a/images/win/scripts/Installers/Install-WinAppDriver.ps1 b/images/win/scripts/Installers/Install-WinAppDriver.ps1
index 106b3332..92f95750 100644
--- a/images/win/scripts/Installers/Install-WinAppDriver.ps1
+++ b/images/win/scripts/Installers/Install-WinAppDriver.ps1
@@ -4,5 +4,9 @@
####################################################################################
Import-Module -Name ImageHelpers -Force
+
+$InstallerName = "WindowsApplicationDriver.msi"
+$InstallerUrl = "https://github.com/Microsoft/WinAppDriver/releases/download/v1.1/${InstallerName}"
+
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
-Install-MSI -MsiUrl "https://github.com/Microsoft/WinAppDriver/releases/download/v1.1/WindowsApplicationDriver.msi" -MsiName "WindowsApplicationDriver.msi"
+Install-Binary -Url $InstallerUrl -Name $InstallerName
diff --git a/images/win/scripts/Installers/Install-Wix.ps1 b/images/win/scripts/Installers/Install-Wix.ps1
index 076be86c..25469dab 100644
--- a/images/win/scripts/Installers/Install-Wix.ps1
+++ b/images/win/scripts/Installers/Install-Wix.ps1
@@ -3,9 +3,9 @@
## Desc: Install WIX.
################################################################################
-Import-Module -Name ImageHelpers -Force;
+Import-Module -Name ImageHelpers -Force
-choco install wixtoolset -y --force
+Choco-Install -PackageName wixtoolset -ArgumentList "--force"
if(Test-IsWin19)
{
diff --git a/images/win/scripts/Installers/Install-Zstd.ps1 b/images/win/scripts/Installers/Install-Zstd.ps1
index 098334eb..2251143b 100644
--- a/images/win/scripts/Installers/Install-Zstd.ps1
+++ b/images/win/scripts/Installers/Install-Zstd.ps1
@@ -3,4 +3,4 @@
## Desc: Install zstd
################################################################################
-choco install zstandard -y
+Choco-Install -PackageName zstandard
diff --git a/images/win/scripts/Installers/Validate-AWS-SAM.ps1 b/images/win/scripts/Installers/Validate-AWS-SAM.ps1
new file mode 100644
index 00000000..d953229d
--- /dev/null
+++ b/images/win/scripts/Installers/Validate-AWS-SAM.ps1
@@ -0,0 +1,27 @@
+################################################################################
+## File: Validate-AWS-SAM.ps1
+## Desc: Validate aws sam cli
+################################################################################
+
+$command = Get-Command -Name 'sam'
+
+if ($command)
+{
+ Write-Host "AWS SAM CLI on path"
+}
+else
+{
+ Write-Host 'AWS SAM CLI is not on path'
+ exit 1
+}
+
+# Adding description of the software to Markdown
+$SoftwareName = "AWS SAM CLI"
+
+$version = (sam --version).Split(" ")[3]
+
+$Description = @"
+_Version:_ $version
+"@
+
+Add-SoftwareDetailsToMarkdown -SoftwareName $SoftwareName -DescriptionMarkdown $Description
\ No newline at end of file
diff --git a/images/win/scripts/Installers/Validate-AliyunCli.ps1 b/images/win/scripts/Installers/Validate-AliyunCli.ps1
new file mode 100644
index 00000000..2f72deca
--- /dev/null
+++ b/images/win/scripts/Installers/Validate-AliyunCli.ps1
@@ -0,0 +1,24 @@
+################################################################################
+## File: Validate-AliyunCli.ps1
+## Desc: Validate Alibaba Cloud CLI
+################################################################################
+
+if (Get-Command -Name 'aliyun')
+{
+ Write-Host "Alibaba Cloud CLI on path"
+}
+else
+{
+ Write-Host 'Alibaba Cloud CLI is not on path'
+ exit 1
+}
+
+# Adding description of the software to Markdown
+$aliyun_version = ((aliyun --version | Select-String "Alibaba Cloud Command Line Interface Version ") -Split(" "))[6]
+
+$SoftwareName = "Alibaba Cloud CLI"
+$Description = @"
+_Version:_ $aliyun_version
+"@
+
+Add-SoftwareDetailsToMarkdown -SoftwareName $SoftwareName -DescriptionMarkdown $Description
\ No newline at end of file
diff --git a/images/win/scripts/Installers/Validate-AzureModules.ps1 b/images/win/scripts/Installers/Validate-AzureModules.ps1
index a7be9ef1..38c692b4 100644
--- a/images/win/scripts/Installers/Validate-AzureModules.ps1
+++ b/images/win/scripts/Installers/Validate-AzureModules.ps1
@@ -80,7 +80,7 @@ Validate-AzureModule -ModuleName AzureRM -ModuleVersions $azurermVersions
$azureVersions = "2.1.0", "3.8.0", "4.2.1", "5.1.1", "5.3.0"
Validate-AzureModule -ModuleName Azure -ModuleVersions $azureVersions
-$azVersions = "1.0.0", "1.6.0", "2.3.2", "2.6.0", "3.1.0", "3.5.0"
+$azVersions = "1.0.0", "1.6.0", "2.3.2", "2.6.0", "3.1.0", "3.5.0", "3.8.0"
Validate-AzureModule -ModuleName Az -ModuleVersions $azVersions
# Get default modules version
@@ -93,4 +93,4 @@ $env:PSModulePath = $env:PSModulePath + ";C:\Modules"
# Adding description of the software to Markdown
Add-ModuleDescription -DefaultModule $defaultAzureRMModule -ModuleName AzureRM
Add-ModuleDescription -DefaultModule $defaultAzureModule -ModuleName Azure
-Add-ModuleDescription -ModuleName Az
\ No newline at end of file
+Add-ModuleDescription -ModuleName Az
diff --git a/images/win/scripts/Installers/Validate-DiskSpace.ps1 b/images/win/scripts/Installers/Validate-DiskSpace.ps1
new file mode 100644
index 00000000..d5b4f996
--- /dev/null
+++ b/images/win/scripts/Installers/Validate-DiskSpace.ps1
@@ -0,0 +1,14 @@
+################################################################################
+## File: Validate-DiskSpace.ps1
+## Desc: Validate free disk space
+################################################################################
+
+$availableSpaceMB = [math]::Round((Get-PSDrive -Name C).Free / 1MB)
+$minimumFreeSpaceMB = 15 * 1024
+
+Write-Host "Available disk space: $availableSpaceMB MB"
+if ($availableSpaceMB -le $minimumFreeSpaceMB)
+{
+ Write-Host "Not enough disk space on the image (minimum available space: $minimumFreeSpaceMB MB)"
+ exit 1
+}
diff --git a/images/win/scripts/Installers/Validate-JavaTools.ps1 b/images/win/scripts/Installers/Validate-JavaTools.ps1
index 71477689..33f90694 100644
--- a/images/win/scripts/Installers/Validate-JavaTools.ps1
+++ b/images/win/scripts/Installers/Validate-JavaTools.ps1
@@ -36,6 +36,12 @@ if( $( $(& $env:comspec "/s /c java -version 2>&1") | Out-String) -match '^(?&1") | Out-String) -match '^(?.+) version "(?.+)".*' )
+{
+ $java13Version = $Matches.version
+}
if( $(ant -version) -match 'Apache Ant\(TM\) version (?.*) compiled.*' )
{
@@ -69,6 +75,10 @@ _Location:_ $env:JAVA_HOME_7_X64
#### $java11Version
_Location:_ $env:JAVA_HOME_11_X64
+
+#### $java13Version
+
+_Location:_ $env:JAVA_HOME_13_X64
"@
Add-SoftwareDetailsToMarkdown -SoftwareName $SoftwareName -DescriptionMarkdown $Description
diff --git a/images/win/scripts/Installers/Validate-Julia.ps1 b/images/win/scripts/Installers/Validate-Julia.ps1
index e31bd39f..41f9310a 100644
--- a/images/win/scripts/Installers/Validate-Julia.ps1
+++ b/images/win/scripts/Installers/Validate-Julia.ps1
@@ -4,7 +4,7 @@
################################################################################
# Verify that julia.exe is on the path
-if(Get-Command -Name 'julia')
+if((Get-Command -Name 'julia') -and (Test-Path -Path 'C:\Julia'))
{
Write-Host "$(julia --version) is on the path."
}
diff --git a/images/win/scripts/Installers/Validate-Rust.ps1 b/images/win/scripts/Installers/Validate-Rust.ps1
index e80a7249..d23d91d8 100644
--- a/images/win/scripts/Installers/Validate-Rust.ps1
+++ b/images/win/scripts/Installers/Validate-Rust.ps1
@@ -26,8 +26,8 @@ $Version = $Matches[0]
$SoftwareName = "Rust (64-bit)"
$Description = @"
#### $Version
-_Location:_ $RustPath
_Environment:_
+* _Location:_ $RustPath
* PATH: contains the location of rustc.exe
"@
diff --git a/images/win/scripts/Installers/Validate-SQLExpress.ps1 b/images/win/scripts/Installers/Validate-SQLExpress.ps1
index 1b5a3578..2cb7f4f3 100644
--- a/images/win/scripts/Installers/Validate-SQLExpress.ps1
+++ b/images/win/scripts/Installers/Validate-SQLExpress.ps1
@@ -40,7 +40,7 @@ $instanceName = "$env:computername\$sqlInstance"
$version = Test-SqlConnection -ServerName $instanceName -IntegratedSecurity "false" -UserName $sqlUser -Password $sqlPassword
# Adding description of the software to Markdown
-$SoftwareName = "Git"
+$SoftwareName = "Microsoft SQL Express"
$Description = @"
_Version:_ $version
_InstanceName:_ $sqlInstance
diff --git a/images/win/scripts/Installers/Validate-ToolCache.ps1 b/images/win/scripts/Installers/Validate-ToolCache.ps1
index 5ad500bf..526254e2 100644
--- a/images/win/scripts/Installers/Validate-ToolCache.ps1
+++ b/images/win/scripts/Installers/Validate-ToolCache.ps1
@@ -63,32 +63,6 @@ function RunTestsByPath {
}
}
-function Get-SystemDefaultPython {
- Write-Host "Validate system Python..."
-
- if (Get-Command -Name 'python')
- {
- Write-Host "Python $(& python -V 2>&1) on path"
- }
- else
- {
- Write-Host "Python is not on path"
- exit 1
- }
-
- $pythonBinVersion = $(& python -V 2>&1)
- if ($pythonBinVersion -notlike "Python 3.*")
- {
- Write-Error "Python 3 is not in the PATH"
- exit 1
- }
-
- $pythonBinOnPath = Split-Path -Path (Get-Command -Name 'python').Path
- $description = GetDefaultToolDescription -SoftwareVersion $pythonBinVersion -SoftwareLocation $pythonBinOnPath
-
- return $description
-}
-
function Get-SystemDefaultRuby {
Write-Host "Validate system Ruby..."
@@ -196,9 +170,6 @@ function ToolcacheTest {
}
}
- if ($SoftwareName -contains "Python") {
- $markdownDescription += Get-SystemDefaultPython
- }
if ($SoftwareName -contains "Ruby") {
$markdownDescription += Get-SystemDefaultRuby
}
@@ -206,10 +177,6 @@ function ToolcacheTest {
Add-SoftwareDetailsToMarkdown -SoftwareName $SoftwareName -DescriptionMarkdown $markdownDescription
}
-# Python test
-$PythonTests = @("python.exe", "Scripts\pip.exe")
-ToolcacheTest -SoftwareName "Python" -ExecTests $PythonTests
-
# PyPy test
$PyPyTests = @("python.exe", "bin\pip.exe")
ToolcacheTest -SoftwareName "PyPy" -ExecTests $PyPyTests
diff --git a/images/win/scripts/Installers/Validate-Toolset.ps1 b/images/win/scripts/Installers/Validate-Toolset.ps1
new file mode 100644
index 00000000..28963b12
--- /dev/null
+++ b/images/win/scripts/Installers/Validate-Toolset.ps1
@@ -0,0 +1,111 @@
+################################################################################
+## File: Validate-Toolset.ps1
+## Team: CI-Build
+## Desc: Validate Toolset
+################################################################################
+
+function Run-ExecutableTests {
+ param (
+ [Parameter(Mandatory)] [string[]] $Executables,
+ [Parameter(Mandatory)] [string] $ToolPath
+ )
+
+ foreach ($executable in $Executables) {
+ $executablePath = Join-Path $ToolPath $executable
+
+ Write-Host "Check $executable..."
+ if (Test-Path $executablePath) {
+ Write-Host "$executable is successfully installed: $(& $executablePath --version)"
+ } else {
+ Write-Host "$executablePath is not installed!"
+ exit 1
+ }
+ }
+}
+
+function Validate-SystemDefaultTool {
+ param (
+ [Parameter(Mandatory)] [string] $ToolName,
+ [Parameter(Mandatory)] [string] $ExpectedVersion
+ )
+
+ $binName = $ToolName.ToLower()
+
+ # Check if tool on path
+ if (Get-Command -Name $binName) {
+ $versionOnPath = $(& $binName --version 2>&1) | Select-String -Pattern ".*(\d+\.\d+\.\d+)"
+ $versionBinPath = Split-Path -Path (Get-Command -Name $binName).Path
+
+ # Check if version is correct
+ if ($versionOnPath.matches.Groups[1].Value -notlike $ExpectedVersion) {
+ Write-Error "$ToolName $ExpectedVersion is not in the PATH"
+ exit 1
+ }
+
+ Write-Host "$ToolName $versionOnPath on path"
+ } else {
+ Write-Host "$ToolName is not on path"
+ exit 1
+ }
+
+ # Add default version description to markdown
+ $description = "
__System default version:__ $versionOnPath
"
+ $description += "_Environment:_
"
+ $description += "* Location: $versionBinPath
"
+ $description += "* PATH: contains the location of $versionOnPath
"
+
+ return $description
+}
+
+$ErrorActionPreference = "Stop"
+
+Import-Module -Name ImageHelpers -Force
+
+# Define executables for cached tools
+$toolsExecutables = @{ Python = @("python.exe", "Scripts\pip.exe") }
+
+# Get toolcache content from toolset
+$tools = Get-ToolsetContent | Select-Object -ExpandProperty toolcache
+
+foreach($tool in $tools) {
+ $markdownDescription = ""
+
+ $toolPath = Join-Path $env:AGENT_TOOLSDIRECTORY $tool.name
+ # Get executables for current tool
+ $toolExecs = $toolsExecutables[$tool.name]
+
+ foreach ($version in $tool.versions) {
+ # Check if version folder exists
+ $expectedVersionPath = Join-Path $toolPath $version
+ if (-not (Test-Path $expectedVersionPath)) {
+ Write-Host "Expected $($tool.name) $version folder is not found!"
+ exit 1
+ }
+
+ # Take latest installed version in case if toolset version contains wildcards
+ $foundVersion = Get-Item $expectedVersionPath `
+ | Sort-Object -Property {[version]$_.name} -Descending `
+ | Select-Object -First 1
+
+ # Check for required architecture folder
+ $foundVersionArchPath = Join-Path $foundVersion $tool.arch
+ if (-not (Test-Path $foundVersionArchPath)) {
+ Write-Host "Expected $($tool.name)($($tool.arch)) $($foundVersion.name) architecture folder is not found!"
+ exit 1
+ }
+
+ Write-Host "Run validation test for $($tool.name)($($tool.arch)) $($foundVersion.name) executables..."
+ Run-ExecutableTests -Executables $toolExecs -ToolPath $foundVersionArchPath
+
+ # Add to tool version to markdown
+ $markdownDescription += "_Version:_ $($foundVersion.name)
"
+ }
+
+ # Create markdown description for system default tool
+ if (-not ([string]::IsNullOrEmpty($tool.default))) {
+ Write-Host "Validate system default $($tool.name)($($tool.arch)) $($tool.default)..."
+ $markdownDescription += Validate-SystemDefaultTool -ToolName $tool.name -ExpectedVersion $tool.default
+ }
+
+ Add-SoftwareDetailsToMarkdown -SoftwareName "$($tool.name) ($($tool.arch))" -DescriptionMarkdown $markdownDescription
+}
\ No newline at end of file
diff --git a/images/win/scripts/Installers/Windows2016/Initialize-VM.ps1 b/images/win/scripts/Installers/Windows2016/Initialize-VM.ps1
index 6f7dd13e..202c9b48 100644
--- a/images/win/scripts/Installers/Windows2016/Initialize-VM.ps1
+++ b/images/win/scripts/Installers/Windows2016/Initialize-VM.ps1
@@ -61,6 +61,15 @@ Install-WindowsFeature -Name NET-Framework-45-Features -IncludeAllSubFeature
Install-WindowsFeature -Name BITS -IncludeAllSubFeature
Install-WindowsFeature -Name DSC-Service
+# Install FS-iSCSITarget-Server
+$fsResult = Install-WindowsFeature -Name FS-iSCSITarget-Server -IncludeAllSubFeature -IncludeManagementTools
+if ( $fsResult.Success ) {
+ Write-Host "FS-iSCSITarget-Server has been successfully installed"
+} else {
+ Write-Host "Failed to install FS-iSCSITarget-Server"
+ exit 1
+}
+
Write-Host "Disable UAC"
Disable-UserAccessControl
@@ -111,7 +120,10 @@ choco feature enable -n allowGlobalConfirmation
Remove-Item -Path $env:ChocolateyInstall\bin\cpack.exe -Force
# Install webpi
-choco install webpicmd -y
+Choco-Install -PackageName webpicmd
+
+# Install vcredist140
+Choco-Install -PackageName vcredist140
# Expand disk size of OS drive
@@ -132,6 +144,7 @@ wmic logicaldisk get size,freespace,caption
# Adding description of the software to Markdown
$Content = @"
+
# Windows Server 2016
The following software is installed on machines with the $env:ImageVersion update.
diff --git a/images/win/scripts/Installers/Windows2016/Install-SSDT.ps1 b/images/win/scripts/Installers/Windows2016/Install-SSDT.ps1
index 132734c8..9d22e86d 100644
--- a/images/win/scripts/Installers/Windows2016/Install-SSDT.ps1
+++ b/images/win/scripts/Installers/Windows2016/Install-SSDT.ps1
@@ -7,18 +7,13 @@ Import-Module -Name ImageHelpers -Force
#SSDT for Visual Studio 2017
#The link down below points to the latest version of SSDT for Visual Studio 2017
-$InstallerURI = 'https://go.microsoft.com/fwlink/?linkid=2124518'
-$InstallerName = 'SSDT-Setup-ENU.exe'
+$InstallerName = "SSDT-Setup-ENU.exe"
+$InstallerUrl = "https://go.microsoft.com/fwlink/?linkid=2124518"
$logFilePath = "$env:TEMP\ssdtlog.txt"
-$ArgumentList = ('/install', 'INSTALLALL', '/passive', '/norestart', "/log `"$logFilePath`"")
+$ArgumentList = ("/install", "INSTALLALL", "/passive", "/norestart", "/log `"$logFilePath`"")
-$exitCode = Install-EXE -Url $InstallerURI -Name $InstallerName -ArgumentList $ArgumentList
+Install-Binary -Url $InstallerUrl -Name $InstallerName -ArgumentList $ArgumentList
-if($exitCode -ne 0 -and $exitCode -ne 3010)
-{
- Write-Host "******** SSDT SETUP LOG START ********"
- Write-Host $(Get-Content $logFilePath | Out-String)
- Write-Host "******** SSDT SETUP LOG END ********"
-}
-
-exit $exitCode
+Write-Host "******** SSDT SETUP LOG START ********"
+Write-Host $(Get-Content $logFilePath | Out-String)
+Write-Host "******** SSDT SETUP LOG END ********"
\ No newline at end of file
diff --git a/images/win/scripts/Installers/Windows2016/Install-VS2017.ps1 b/images/win/scripts/Installers/Windows2016/Install-VS2017.ps1
index 72801bd6..9edcb14f 100644
--- a/images/win/scripts/Installers/Windows2016/Install-VS2017.ps1
+++ b/images/win/scripts/Installers/Windows2016/Install-VS2017.ps1
@@ -125,7 +125,9 @@ $WorkLoads = '--allWorkloads --includeRecommended ' + `
'--add Microsoft.VisualStudio.Component.Windows10SDK.17763 ' + `
'--add Microsoft.VisualStudio.Component.VC.Runtimes.x86.x64.Spectre '+ `
'--add Microsoft.VisualStudio.Component.VC.Runtimes.ARM.Spectre ' + `
- '--add Microsoft.VisualStudio.Component.VC.Runtimes.ARM64.Spectre '
+ '--add Microsoft.VisualStudio.Component.VC.Runtimes.ARM64.Spectre ' + `
+ '--add Microsoft.VisualStudio.Workload.Office ' + `
+ '--add Microsoft.VisualStudio.Workload.OfficeBuildTools '
$Sku = 'Enterprise'
$VSBootstrapperURL = 'https://aka.ms/vs/15/release/vs_enterprise.exe'
diff --git a/images/win/scripts/Installers/Windows2016/Install-Win81SDK.ps1 b/images/win/scripts/Installers/Windows2016/Install-Win81SDK.ps1
index 992f6a9e..d89f468f 100644
--- a/images/win/scripts/Installers/Windows2016/Install-Win81SDK.ps1
+++ b/images/win/scripts/Installers/Windows2016/Install-Win81SDK.ps1
@@ -5,10 +5,8 @@
Import-Module -Name ImageHelpers -Force
-$InstallerURI = 'http://download.microsoft.com/download/B/0/C/B0C80BA3-8AD6-4958-810B-6882485230B5/standalonesdk/sdksetup.exe'
-$InstallerName = 'sdksetup.exe'
-$ArgumentList = ('/quiet', '/norestart')
+$InstallerName = "sdksetup.exe"
+$InstallerUrl = "http://download.microsoft.com/download/B/0/C/B0C80BA3-8AD6-4958-810B-6882485230B5/standalonesdk/${InstallerName}"
+$ArgumentList = ("/quiet", "/norestart")
-$exitCode = Install-EXE -Url $InstallerURI -Name $InstallerName -ArgumentList $ArgumentList
-
-exit $exitCode
+Install-Binary -Url $InstallerUrl -Name $InstallerName -ArgumentList $ArgumentList
diff --git a/images/win/scripts/Installers/Windows2019/Initialize-VM.ps1 b/images/win/scripts/Installers/Windows2019/Initialize-VM.ps1
index 4f05935c..12feeabe 100644
--- a/images/win/scripts/Installers/Windows2019/Initialize-VM.ps1
+++ b/images/win/scripts/Installers/Windows2019/Initialize-VM.ps1
@@ -57,6 +57,14 @@ Install-WindowsFeature -Name NET-Framework-Features -IncludeAllSubFeature
# Explicitly install all 4.7 sub features to include ASP.Net.
# As of 1/16/2019, WinServer 19 lists .Net 4.7 as NET-Framework-45-Features
Install-WindowsFeature -Name NET-Framework-45-Features -IncludeAllSubFeature
+# Install FS-iSCSITarget-Server
+$fsResult = Install-WindowsFeature -Name FS-iSCSITarget-Server -IncludeAllSubFeature -IncludeManagementTools
+if ( $fsResult.Success ) {
+ Write-Host "FS-iSCSITarget-Server has been successfully installed"
+} else {
+ Write-Host "Failed to install FS-iSCSITarget-Server"
+ exit 1
+}
Write-Host "Disable UAC"
Disable-UserAccessControl
@@ -109,7 +117,7 @@ choco feature enable -n allowGlobalConfirmation
Remove-Item -Path $env:ChocolateyInstall\bin\cpack.exe -Force
# Install webpi
-choco install webpicmd -y
+Choco-Install -PackageName webpicmd
# Expand disk size of OS drive
@@ -129,6 +137,7 @@ wmic logicaldisk get size,freespace,caption
# Adding description of the software to Markdown
$Content = @"
+
# Windows Server 2019
The following software is installed on machines with the $env:ImageVersion update.
diff --git a/images/win/toolcache-2016.json b/images/win/toolcache-2016.json
index 8db575c2..1b4f1a6c 100644
--- a/images/win/toolcache-2016.json
+++ b/images/win/toolcache-2016.json
@@ -1,10 +1,4 @@
{
- "@actions/toolcache-python-windows-x64": [
- "2.7", "3.5", "3.6", "3.7", "3.8"
- ],
- "@actions/toolcache-python-windows-x86": [
- "2.7", "3.5", "3.6", "3.7", "3.8"
- ],
"@actions/toolcache-ruby-windows-x64": [
"2.4", "2.5", "2.6", "2.7"
],
diff --git a/images/win/toolcache-2019.json b/images/win/toolcache-2019.json
index 4f946cfa..6873c14e 100644
--- a/images/win/toolcache-2019.json
+++ b/images/win/toolcache-2019.json
@@ -1,10 +1,4 @@
{
- "@actions/toolcache-python-windows-x64": [
- "2.7", "3.5", "3.6", "3.7", "3.8"
- ],
- "@actions/toolcache-python-windows-x86": [
- "2.7", "3.5", "3.6", "3.7", "3.8"
- ],
"@actions/toolcache-ruby-windows-x64": [
"2.4", "2.5", "2.6", "2.7"
],
diff --git a/images/win/toolset-2016.json b/images/win/toolset-2016.json
new file mode 100644
index 00000000..da372c49
--- /dev/null
+++ b/images/win/toolset-2016.json
@@ -0,0 +1,31 @@
+{
+ "toolcache": [
+ {
+ "name": "Python",
+ "url" : "https://raw.githubusercontent.com/actions/python-versions/master/versions-manifest.json",
+ "arch": "x64",
+ "platform" : "win32",
+ "versions": [
+ "2.7.*",
+ "3.5.*",
+ "3.6.*",
+ "3.7.*",
+ "3.8.*"
+ ],
+ "default": "3.7.*"
+ },
+ {
+ "name": "Python",
+ "url" : "https://raw.githubusercontent.com/actions/python-versions/master/versions-manifest.json",
+ "arch": "x86",
+ "platform" : "win32",
+ "versions": [
+ "2.7.*",
+ "3.5.*",
+ "3.6.*",
+ "3.7.*",
+ "3.8.*"
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/images/win/toolset-2019.json b/images/win/toolset-2019.json
new file mode 100644
index 00000000..da372c49
--- /dev/null
+++ b/images/win/toolset-2019.json
@@ -0,0 +1,31 @@
+{
+ "toolcache": [
+ {
+ "name": "Python",
+ "url" : "https://raw.githubusercontent.com/actions/python-versions/master/versions-manifest.json",
+ "arch": "x64",
+ "platform" : "win32",
+ "versions": [
+ "2.7.*",
+ "3.5.*",
+ "3.6.*",
+ "3.7.*",
+ "3.8.*"
+ ],
+ "default": "3.7.*"
+ },
+ {
+ "name": "Python",
+ "url" : "https://raw.githubusercontent.com/actions/python-versions/master/versions-manifest.json",
+ "arch": "x86",
+ "platform" : "win32",
+ "versions": [
+ "2.7.*",
+ "3.5.*",
+ "3.6.*",
+ "3.7.*",
+ "3.8.*"
+ ]
+ }
+ ]
+}
\ No newline at end of file