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