This commit is contained in:
Nikita Bykov
2020-10-29 11:05:39 +03:00
36 changed files with 327 additions and 89 deletions

View File

@@ -2,10 +2,13 @@
# Fix permissions for Homebrew # Fix permissions for Homebrew
# https://github.com/actions/virtual-environments/issues/1568 # https://github.com/actions/virtual-environments/issues/1568
brew_folder="/home/linuxbrew/" brew_folder="/home/linuxbrew/"
homebrew_user=$(cut -d: -f1 /etc/passwd | tail -1)
if [ -d "$brew_folder" ]; then if [ -d "$brew_folder" ]; then
brew_folder_owner=$(ls -ld $brew_folder | awk '{print $3}') brew_folder_owner=$(ls -ld $brew_folder | awk '{print $3}')
if [ "$USER" != "$brew_folder_owner" ]; then if [ "$homebrew_user" != "$brew_folder_owner" ]; then
chown "$USER":docker -R $brew_folder chown "$homebrew_user":docker -R $brew_folder
fi fi
fi fi

View File

@@ -2,10 +2,13 @@
# Fix permissions for the Rust folder # Fix permissions for the Rust folder
# https://github.com/actions/virtual-environments/issues/572 # https://github.com/actions/virtual-environments/issues/572
rust_folder="/usr/share/rust" rust_folder="/usr/share/rust"
rust_user=$(cut -d: -f1 /etc/passwd | tail -1)
if [ -d "$rust_folder" ]; then if [ -d "$rust_folder" ]; then
rust_folder_owner=$(ls -ld $rust_folder | awk '{print $3}') rust_folder_owner=$(ls -ld $rust_folder | awk '{print $3}')
if [ "$USER" != "$rust_folder_owner" ]; then if [ "$rust_user" != "$rust_folder_owner" ]; then
chown "$USER":docker -R $rust_folder chown "$rust_user":docker -R $rust_folder
fi fi
fi fi

View File

@@ -24,3 +24,7 @@ then
echo "PATH = $PATH" echo "PATH = $PATH"
exit 1 exit 1
fi fi
# Clean yarn and npm cache
yarn cache clean
npm cache clean --force

View File

@@ -0,0 +1,22 @@
#!/bin/bash
if [ -z "$1" ]; then
echo "No Xamarin SDK specified."
exit 0
fi
XAMARIN_SDK=$1
echo "Set Xamarin SDK to ${XAMARIN_SDK}"
FOLDERS_LIST=(
'/Library/Frameworks/Mono.framework/Versions'
'/Library/Frameworks/Xamarin.iOS.framework/Versions'
'/Library/Frameworks/Xamarin.Android.framework/Versions'
'/Library/Frameworks/Xamarin.Mac.framework/Versions'
)
for FOLDER in "${FOLDERS_LIST[@]}"
do
echo "Set Current folder for ${FOLDER}"
sudo rm -f ${FOLDER}/Current
sudo ln -s ${FOLDER}/${XAMARIN_SDK} ${FOLDER}/Current
done

View File

@@ -16,9 +16,18 @@ fi
# Put documentation to $HOME root # Put documentation to $HOME root
cp $HOME/image-generation/output/software-report/systeminfo.txt $HOME/image-generation/output/software-report/systeminfo.md $HOME/ cp $HOME/image-generation/output/software-report/systeminfo.txt $HOME/image-generation/output/software-report/systeminfo.md $HOME/
# Put build vm assets scripts to proper directory
mkdir -p /usr/local/opt/$USER/scripts
mv $HOME/image-generation/assets/* /usr/local/opt/$USER/scripts
find /usr/local/opt/$USER/scripts -type f -name "*\.sh" -exec chmod +x {} \;
# Clean up npm cache which collected during image-generation # Clean up npm cache which collected during image-generation
# we have to do that here because `npm install` is run in a few different places during image-generation # we have to do that here because `npm install` is run in a few different places during image-generation
npm cache clean --force npm cache clean --force
# Clean yarn cache
yarn cache clean
# Clean up temporary directories # Clean up temporary directories
rm -rf ~/utils ~/image-generation rm -rf ~/utils ~/image-generation

View File

@@ -1,7 +1,8 @@
#!/bin/bash -e -o pipefail #!/bin/bash -e -o pipefail
source ~/utils/utils.sh
echo "Installing Chrome..." echo "Installing Chrome..."
brew cask install google-chrome brew_cask_install_ignoring_sha256 "google-chrome"
echo "Installing Chrome Driver" echo "Installing Chrome Driver"
brew cask install chromedriver brew cask install chromedriver

View File

@@ -21,7 +21,6 @@ binst_common_utils=(
gh gh
p7zip p7zip
ant ant
yamllint
aria2 aria2
) )

View File

@@ -0,0 +1,18 @@
source ~/utils/utils.sh
export PATH="$PATH:/opt/pipx_bin"
toolset=$(get_toolset_path)
pipx_packages=$(jq -r ".pipx[] .package" $toolset)
for package in $pipx_packages; do
python_version=$(jq -r ".pipx[] | select(.package == \"$package\") .python" $toolset)
if [ "$python_version" != "null" ]; then
python_path="$HOME/hostedtoolcache/Python/$python_version*/x64/bin/python$python_version"
echo "Install $package into python $python_path"
pipx install $package --python $python_path
else
echo "Install $package into default python"
pipx install $package
fi
done

View File

@@ -17,3 +17,13 @@ echo "Brew Installing Python 2"
brew tap-new --no-git local/python2 brew tap-new --no-git local/python2
FORMULA_PATH=$(brew extract python@2 local/python2 | grep "Homebrew/Library/Taps") FORMULA_PATH=$(brew extract python@2 local/python2 | grep "Homebrew/Library/Taps")
brew install $FORMULA_PATH brew install $FORMULA_PATH
echo "Installing pipx"
export PIPX_BIN_DIR=/usr/local/opt/pipx_bin
export PIPX_HOME=/usr/local/opt/pipx
brew install pipx
echo "export PIPX_BIN_DIR=${PIPX_BIN_DIR}" >> "${HOME}/.bashrc"
echo "export PIPX_HOME=${PIPX_HOME}" >> "${HOME}/.bashrc"
echo 'export PATH="$PIPX_BIN_DIR:$PATH"' >> "${HOME}/.bashrc"

View File

@@ -108,3 +108,16 @@ verlte() {
sortedVersion=$(echo -e "$1\n$2" | sort -V | head -n1) sortedVersion=$(echo -e "$1\n$2" | sort -V | head -n1)
[ "$1" = "$sortedVersion" ] [ "$1" = "$sortedVersion" ]
} }
brew_cask_install_ignoring_sha256() {
local TOOL_NAME=$1
CASK_DIR="$(brew --repo homebrew/cask)/Casks"
chmod a+w "$CASK_DIR/$TOOL_NAME.rb"
SHA=$(grep "sha256" "$CASK_DIR/$TOOL_NAME.rb" | awk '{print $2}')
sed -i '' "s/$SHA/:no_check/" "$CASK_DIR/$TOOL_NAME.rb"
brew cask install $TOOL_NAME
pushd $CASK_DIR
git checkout HEAD -- "$TOOL_NAME.rb"
popd
}

View File

@@ -96,6 +96,11 @@ function Get-PipVersion {
return "${versionPart1} ${versionPart2} ${versionPart3}" return "${versionPart1} ${versionPart2} ${versionPart3}"
} }
function Get-PipxVersion {
$pipxVersion = Run-Command "pipx --version" -SuppressStderr
return "Pipx $pipxVersion"
}
function Get-NVMNodeVersionList { function Get-NVMNodeVersionList {
$nvmPath = Join-Path $env:HOME ".nvm" "nvm.sh" $nvmPath = Join-Path $env:HOME ".nvm" "nvm.sh"
$nvmInitCommand = ". ${nvmPath} > /dev/null 2>&1 || true" $nvmInitCommand = ". ${nvmPath} > /dev/null 2>&1 || true"

View File

@@ -83,6 +83,7 @@ $npmVersion = Run-Command "npm --version"
$yarnVersion = Run-Command "yarn --version" $yarnVersion = Run-Command "yarn --version"
$nugetVersion = Run-Command "nuget help" | Select-Object -First 1 | Take-Part -Part 2 $nugetVersion = Run-Command "nuget help" | Select-Object -First 1 | Take-Part -Part 2
$pip3Version = Get-PipVersion -Version 3 $pip3Version = Get-PipVersion -Version 3
$pipxVersion = Get-PipxVersion
$condaVersion = Invoke-Expression "conda --version" $condaVersion = Invoke-Expression "conda --version"
$rubyGemsVersion = Run-Command "gem --version" $rubyGemsVersion = Run-Command "gem --version"
$composerVersion = Run-Command "composer --version" | Take-Part -Part 2 $composerVersion = Run-Command "composer --version" | Take-Part -Part 2
@@ -99,6 +100,7 @@ if ($os.IsLessThanBigSur) {
$markdown += New-MDList -Style Unordered -Lines @( $markdown += New-MDList -Style Unordered -Lines @(
"Pip ${pip3Version}", "Pip ${pip3Version}",
$pipxVersion,
$bundlerVersion, $bundlerVersion,
"Carthage ${carthageVersion}", "Carthage ${carthageVersion}",
"CocoaPods ${cocoaPodsVersion}", "CocoaPods ${cocoaPodsVersion}",

View File

@@ -43,6 +43,11 @@
"type": "shell", "type": "shell",
"inline": "mkdir ~/image-generation" "inline": "mkdir ~/image-generation"
}, },
{
"type": "file",
"source": "./provision/assets",
"destination": "~/image-generation/"
},
{ {
"type": "file", "type": "file",
"source": "./tests", "source": "./tests",
@@ -181,7 +186,8 @@
"./provision/core/edge.sh", "./provision/core/edge.sh",
"./provision/core/firefox.sh", "./provision/core/firefox.sh",
"./provision/core/toolcache-high-sierra.sh", "./provision/core/toolcache-high-sierra.sh",
"./provision/core/pypy.sh" "./provision/core/pypy.sh",
"./provision/core/pipx-packages.sh"
] ]
}, },
{ {

View File

@@ -43,6 +43,11 @@
"type": "shell", "type": "shell",
"inline": "mkdir ~/image-generation" "inline": "mkdir ~/image-generation"
}, },
{
"type": "file",
"source": "./provision/assets",
"destination": "~/image-generation/"
},
{ {
"type": "file", "type": "file",
"source": "./tests", "source": "./tests",
@@ -186,7 +191,8 @@
"./provision/core/miniconda.sh", "./provision/core/miniconda.sh",
"./provision/core/xcode-postbuild.sh", "./provision/core/xcode-postbuild.sh",
"./provision/core/toolcache.sh", "./provision/core/toolcache.sh",
"./provision/core/pypy.sh" "./provision/core/pypy.sh",
"./provision/core/pipx-packages.sh"
], ],
"environment_vars": [ "environment_vars": [
"GITHUB_FEED_TOKEN={{user `github_feed_token`}}" "GITHUB_FEED_TOKEN={{user `github_feed_token`}}"

View File

@@ -43,6 +43,11 @@
"type": "shell", "type": "shell",
"inline": "mkdir ~/image-generation" "inline": "mkdir ~/image-generation"
}, },
{
"type": "file",
"source": "./provision/assets",
"destination": "~/image-generation/"
},
{ {
"type": "file", "type": "file",
"source": "./tests", "source": "./tests",
@@ -185,7 +190,8 @@
"./provision/core/firefox.sh", "./provision/core/firefox.sh",
"./provision/core/xcode-postbuild.sh", "./provision/core/xcode-postbuild.sh",
"./provision/core/toolcache.sh", "./provision/core/toolcache.sh",
"./provision/core/pypy.sh" "./provision/core/pypy.sh",
"./provision/core/pipx-packages.sh"
], ],
"environment_vars": [ "environment_vars": [
"GITHUB_FEED_TOKEN={{user `github_feed_token`}}" "GITHUB_FEED_TOKEN={{user `github_feed_token`}}"

View File

@@ -43,6 +43,11 @@
"type": "shell", "type": "shell",
"inline": "mkdir ~/image-generation" "inline": "mkdir ~/image-generation"
}, },
{
"type": "file",
"source": "./provision/assets",
"destination": "~/image-generation/"
},
{ {
"type": "file", "type": "file",
"source": "./tests", "source": "./tests",
@@ -181,7 +186,8 @@
"./provision/core/chrome.sh", "./provision/core/chrome.sh",
"./provision/core/edge.sh", "./provision/core/edge.sh",
"./provision/core/firefox.sh", "./provision/core/firefox.sh",
"./provision/core/toolcache.sh" "./provision/core/toolcache.sh",
"./provision/core/pipx-packages.sh"
], ],
"environment_vars": [ "environment_vars": [
"GITHUB_FEED_TOKEN={{user `github_feed_token`}}" "GITHUB_FEED_TOKEN={{user `github_feed_token`}}"

View File

@@ -3,10 +3,6 @@ Import-Module "$PSScriptRoot/../helpers/Tests.Helpers.psm1"
$os = Get-OSVersion $os = Get-OSVersion
Describe "Linters" { Describe "Linters" {
It "yamllint" {
"yamllint --version" | Should -ReturnZeroExitCode
}
It "SwiftLint" -Skip:($os.IsHighSierra) { It "SwiftLint" -Skip:($os.IsHighSierra) {
"swiftlint version" | Should -ReturnZeroExitCode "swiftlint version" | Should -ReturnZeroExitCode
} }

View File

@@ -0,0 +1,7 @@
Describe "PipxPackages" {
$pipxToolset = Get-ToolsetValue "pipx"
$testCases = $pipxToolset | ForEach-Object { @{package = $_.package; cmd = $_.cmd} }
It "<package>" -TestCases $testCases {
"$cmd" | Should -ReturnZeroExitCode
}
}

View File

@@ -32,6 +32,10 @@ Describe "Python" {
"pip3 --version" | Should -ReturnZeroExitCode "pip3 --version" | Should -ReturnZeroExitCode
} }
It "Pipx is available" {
"pipx --version" | Should -ReturnZeroExitCode
}
It "Pip 3 and Python 3 came from the same brew formula" { It "Pip 3 and Python 3 came from the same brew formula" {
$pip3Path = Split-Path (readlink (which pip3)) $pip3Path = Split-Path (readlink (which pip3))
$python3Path = Split-Path (readlink (which python3)) $python3Path = Split-Path (readlink (which python3))

View File

@@ -194,5 +194,11 @@
"3.6" "3.6"
] ]
} }
],
"pipx": [
{
"package": "yamllint",
"cmd": "yamllint --version"
}
] ]
} }

View File

@@ -254,5 +254,11 @@
"1.15.*" "1.15.*"
] ]
} }
],
"pipx": [
{
"package": "yamllint",
"cmd": "yamllint --version"
}
] ]
} }

View File

@@ -163,5 +163,11 @@
"1.15.*" "1.15.*"
] ]
} }
],
"pipx": [
{
"package": "yamllint",
"cmd": "yamllint --version"
}
] ]
} }

View File

@@ -88,5 +88,11 @@
"1.15.*" "1.15.*"
] ]
} }
],
"pipx": [
{
"package": "yamllint",
"cmd": "yamllint --version"
}
] ]
} }

View File

@@ -1,10 +1,11 @@
| Announcements | | Announcements |
|-| |-|
| [[Ubuntu] [Windows] Boost 1.69.0 will be deprecated on November, 10](https://github.com/actions/virtual-environments/issues/1847) |
| [[In Discussion] Git internal tools will be removed from PATH Windows images and replaced with MSYS2 tools](https://github.com/actions/virtual-environments/issues/1525) | | [[In Discussion] Git internal tools will be removed from PATH Windows images and replaced with MSYS2 tools](https://github.com/actions/virtual-environments/issues/1525) |
*** ***
# Microsoft Windows Server 2016 Datacenter # Microsoft Windows Server 2016 Datacenter
- OS Version: 10.0.14393 Build 3930 - OS Version: 10.0.14393 Build 3986
- Image Version: 20201012.1 - Image Version: 20201020.1
## Installed Software ## Installed Software
### Language and Runtime ### Language and Runtime
@@ -14,7 +15,7 @@
- Java 13.0.2 - Java 13.0.2
- Python 3.7.9 - Python 3.7.9
- Ruby 2.5.8p224 - Ruby 2.5.8p224
- Go 1.14.9 - Go 1.14.10
- PHP 7.4.11 - PHP 7.4.11
- Julia 1.5.2 - Julia 1.5.2
- Perl 5.32.0 - Perl 5.32.0
@@ -25,46 +26,46 @@
- Vcpkg 2020.06.15 - Vcpkg 2020.06.15
- NPM 6.14.8 - NPM 6.14.8
- Yarn 1.22.10 - Yarn 1.22.10
- pip 20.2.3 (python 3.7) - pip 20.2.4 (python 3.7)
- Miniconda 4.6.14 - Miniconda 4.8.3
- RubyGems 3.1.4 - RubyGems 3.1.4
- Helm 3.3.4 - Helm 3.3.4
- Composer 1.10.13 - Composer 1.10.15
- NuGet 5.7.0.6726 - NuGet 5.7.0.6726
### Project Management ### Project Management
- Ant 1.10.9 - Ant 1.10.9
- Maven 3.6.3 - Maven 3.6.3
- Gradle 6.6 - Gradle 6.7
- sbt 1.4.0 - sbt 1.4.0
### Tools ### Tools
- azcopy 10.6.0 - azcopy 10.6.0
- Bazel 3.6.0 - Bazel 3.7.0
- Bazelisk 1.7.1 - Bazelisk 1.7.3
- CMake 3.18.4 - CMake 3.18.4
- CodeQL Action Bundle 2.2.5 - CodeQL Action Bundle 2.3.0
- R 4.0.3 - R 4.0.3
- Docker 19.03.12 - Docker 19.03.12
- Docker-compose 1.27.2 - Docker-compose 1.27.4
- Git 2.28.0 - Git 2.29.0
- Git LFS 2.11.0 - Git LFS 2.12.0
- Google Cloud SDK 313.0.1 - Google Cloud SDK 315.0.0
- InnoSetup 6.0.5 - InnoSetup 6.0.5
- jq 1.6 - jq 1.6
- Kubectl 1.19.1 - Kubectl 1.19.3
- Kind 0.9.0 - Kind 0.9.0
- Mingw-w64 8.1.0 - Mingw-w64 8.1.0
- Mercurial 5.0 - Mercurial 5.0
- NSIS v3.06.1 - NSIS v3.06.1
- Newman 5.2.0 - Newman 5.2.0
- OpenSSL 1.1.1 - OpenSSL 1.1.1
- Packer 1.6.3 - Packer 1.6.4
- Pulumi v2.11.2 - Pulumi v2.12.0
- Subversion (SVN) 1.14.0 - Subversion (SVN) 1.14.0
- ghc 8.10.2 - ghc 8.10.2
- Cabal 3.2.0.0 - Cabal 3.2.0.0
- Stack 2.3.3 - Stack 2.5.1
- WinAppDriver 1.1.1809.18001 - WinAppDriver 1.1.1809.18001
- zstd 1.4.5 - zstd 1.4.5
- VSWhere 2.8.4 - VSWhere 2.8.4
@@ -72,12 +73,12 @@
- yamllint 1.25.0 - yamllint 1.25.0
### CLI Tools ### CLI Tools
- Azure CLI 2.12.1 - Azure CLI 2.13.0
- Azure DevOps CLI extension 0.18.0 - Azure DevOps CLI extension 0.18.0
- Azure Dev Spaces CLI 1.0.20200921.3 - Azure Dev Spaces CLI 1.0.20200921.3
- AWS CLI 2.0.56 - AWS CLI 2.0.57
- AWS SAM CLI 1.6.2 - AWS SAM CLI 1.6.2
- AWS Session Manager CLI 1.1.61.0 - AWS Session Manager CLI 1.2.7.0
- Alibaba Cloud CLI 3.0.60 - Alibaba Cloud CLI 3.0.60
- Cloud Foundry CLI 6.53.0 - Cloud Foundry CLI 6.53.0
- Hub CLI 2.14.2 - Hub CLI 2.14.2
@@ -93,11 +94,11 @@
- cargo-outdated v0.9.11 - cargo-outdated v0.9.11
### Browsers and webdrivers ### Browsers and webdrivers
- Google Chrome 86.0.4240.75 - Google Chrome 86.0.4240.111
- Chrome Driver 86.0.4240.22 - Chrome Driver 86.0.4240.22
- Microsoft Edge 86.0.622.38 - Microsoft Edge 86.0.622.48
- Microsoft Edge Driver 86.0.622.38 - Microsoft Edge Driver 86.0.622.48
- Mozilla Firefox 81.0.1 - Mozilla Firefox 82.0
- Gecko Driver 0.27.0 - Gecko Driver 0.27.0
- IE Driver 3.150.1.0 - IE Driver 3.150.1.0
@@ -137,8 +138,8 @@ Note: MSYS2 is pre-installed on image but not added to PATH.
| 1.11.13 | x64 | GOROOT_1_11_X64 | | 1.11.13 | x64 | GOROOT_1_11_X64 |
| 1.12.17 | x64 | GOROOT_1_12_X64 | | 1.12.17 | x64 | GOROOT_1_12_X64 |
| 1.13.15 | x64 | GOROOT_1_13_X64 | | 1.13.15 | x64 | GOROOT_1_13_X64 |
| 1.14.9 (Default) | x64 | GOROOT_1_14_X64 | | 1.14.10 (Default) | x64 | GOROOT_1_14_X64 |
| 1.15.2 | x64 | GOROOT_1_15_X64 | | 1.15.3 | x64 | GOROOT_1_15_X64 |
#### Node #### Node
@@ -147,7 +148,7 @@ Note: MSYS2 is pre-installed on image but not added to PATH.
| 8.17.0 | x64 | | 8.17.0 | x64 |
| 10.22.1 | x64 | | 10.22.1 | x64 |
| 12.19.0 | x64 | | 12.19.0 | x64 |
| 14.13.1 | x64 | | 14.14.0 | x64 |
#### Python #### Python
@@ -158,6 +159,7 @@ Note: MSYS2 is pre-installed on image but not added to PATH.
| 3.6.8 | x64, x86 | | 3.6.8 | x64, x86 |
| 3.7.9 (Default) | x64, x86 | | 3.7.9 (Default) | x64, x86 |
| 3.8.6 | x64, x86 | | 3.8.6 | x64, x86 |
| 3.9.0 | x64, x86 |
#### Ruby #### Ruby
@@ -200,6 +202,7 @@ Note: MSYS2 is pre-installed on image but not added to PATH.
### Database tools ### Database tools
- Azure CosmosDb Emulator 2.11.6.0 - Azure CosmosDb Emulator 2.11.6.0
- DacFx 15.0.4897.1
- SQLPS 1.0 - SQLPS 1.0
- MySQL 5.7.21.0 - MySQL 5.7.21.0
@@ -207,7 +210,7 @@ Note: MSYS2 is pre-installed on image but not added to PATH.
### Visual Studio Enterprise 2017 ### Visual Studio Enterprise 2017
| Name | Version | Path | | Name | Version | Path |
| ----------------------------- | --------------- | -------------------------------------------------------------- | | ----------------------------- | --------------- | -------------------------------------------------------------- |
| Visual Studio Enterprise 2017 | 15.9.28307.1259 | C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise | | Visual Studio Enterprise 2017 | 15.9.28307.1274 | C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise |
#### Workloads, components and extensions: #### Workloads, components and extensions:
@@ -476,20 +479,20 @@ Note: MSYS2 is pre-installed on image but not added to PATH.
### .NET Core SDK ### .NET Core SDK
`Location C:\Program Files\dotnet\sdk` `Location C:\Program Files\dotnet\sdk`
- 1.1.14 2.1.300 2.1.301 2.1.302 2.1.401 2.1.402 2.1.403 2.1.500 2.1.502 2.1.503 2.1.504 2.1.505 2.1.506 2.1.507 2.1.508 2.1.509 2.1.510 2.1.511 2.1.512 2.1.513 2.1.514 2.1.515 2.1.516 2.1.517 2.1.518 2.1.602 2.1.603 2.1.604 2.1.605 2.1.606 2.1.607 2.1.608 2.1.609 2.1.610 2.1.611 2.1.612 2.1.613 2.1.614 2.1.615 2.1.700 2.1.701 2.1.801 2.1.802 2.1.803 2.1.804 2.1.805 2.1.806 2.1.807 2.1.808 2.1.809 2.1.810 3.1.100 3.1.101 3.1.102 3.1.103 3.1.104 3.1.105 3.1.106 3.1.107 3.1.108 3.1.200 3.1.201 3.1.202 3.1.300 3.1.301 3.1.302 3.1.401 3.1.402 - 1.1.14 2.1.300 2.1.301 2.1.302 2.1.401 2.1.402 2.1.403 2.1.500 2.1.502 2.1.503 2.1.504 2.1.505 2.1.506 2.1.507 2.1.508 2.1.509 2.1.510 2.1.511 2.1.512 2.1.513 2.1.514 2.1.515 2.1.516 2.1.517 2.1.518 2.1.519 2.1.602 2.1.603 2.1.604 2.1.605 2.1.606 2.1.607 2.1.608 2.1.609 2.1.610 2.1.611 2.1.612 2.1.613 2.1.614 2.1.615 2.1.616 2.1.700 2.1.701 2.1.801 2.1.802 2.1.803 2.1.804 2.1.805 2.1.806 2.1.807 2.1.808 2.1.809 2.1.810 2.1.811 3.1.100 3.1.101 3.1.102 3.1.103 3.1.104 3.1.105 3.1.106 3.1.107 3.1.108 3.1.109 3.1.200 3.1.201 3.1.202 3.1.300 3.1.301 3.1.302 3.1.401 3.1.402 3.1.403
### .NET Core Runtime ### .NET Core Runtime
`Location: C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All` `Location: C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All`
- 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.1.9 2.1.10 2.1.11 2.1.12 2.1.13 2.1.14 2.1.15 2.1.16 2.1.17 2.1.18 2.1.19 2.1.20 2.1.21 2.1.22 - 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.1.9 2.1.10 2.1.11 2.1.12 2.1.13 2.1.14 2.1.15 2.1.16 2.1.17 2.1.18 2.1.19 2.1.20 2.1.21 2.1.22 2.1.23
`Location: C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App` `Location: C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App`
- 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.1.9 2.1.10 2.1.11 2.1.12 2.1.13 2.1.14 2.1.15 2.1.16 2.1.17 2.1.18 2.1.19 2.1.20 2.1.21 2.1.22 3.1.0 3.1.1 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.1.7 3.1.8 - 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.1.9 2.1.10 2.1.11 2.1.12 2.1.13 2.1.14 2.1.15 2.1.16 2.1.17 2.1.18 2.1.19 2.1.20 2.1.21 2.1.22 2.1.23 3.1.0 3.1.1 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.1.7 3.1.8 3.1.9
`Location: C:\Program Files\dotnet\shared\Microsoft.NETCore.App` `Location: C:\Program Files\dotnet\shared\Microsoft.NETCore.App`
- 1.0.16 1.1.13 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.1.9 2.1.10 2.1.11 2.1.12 2.1.13 2.1.14 2.1.15 2.1.16 2.1.17 2.1.18 2.1.19 2.1.20 2.1.21 2.1.22 3.1.0 3.1.1 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.1.7 3.1.8 - 1.0.16 1.1.13 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.1.9 2.1.10 2.1.11 2.1.12 2.1.13 2.1.14 2.1.15 2.1.16 2.1.17 2.1.18 2.1.19 2.1.20 2.1.21 2.1.22 2.1.23 3.1.0 3.1.1 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.1.7 3.1.8 3.1.9
`Location: C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App` `Location: C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App`
- 3.1.0 3.1.1 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.1.7 3.1.8 - 3.1.0 3.1.1 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.1.7 3.1.8 3.1.9
### .NET Framework ### .NET Framework
`Type: Developer Pack` `Type: Developer Pack`
@@ -518,7 +521,7 @@ All other versions are saved but not installed.
| Pester | 3.4.0<br>5.0.4 | | Pester | 3.4.0<br>5.0.4 |
| PowerShellGet | 1.0.0.1<br>2.2.4.1<br>2.2.5 | | PowerShellGet | 1.0.0.1<br>2.2.4.1<br>2.2.5 |
| PSWindowsUpdate | 2.2.0.2 | | PSWindowsUpdate | 2.2.0.2 |
| SqlServer | 21.1.18228 | | SqlServer | 21.1.18229 |
| VSSetup | 2.2.16 | | VSSetup | 2.2.16 |
### Android ### Android

View File

@@ -0,0 +1,23 @@
# Create shells folder
$shellPath = "C:\shells"
New-Item -Path $shellPath -ItemType Directory | Out-Null
# sh and bash <--> C:\msys64\usr\bin\bash.exe
New-Item -ItemType SymbolicLink -Path "$shellPath\bash.exe" -Target "C:\msys64\usr\bin\bash.exe" | Out-Null
New-Item -ItemType SymbolicLink -Path "$shellPath\sh.exe" -Target "C:\msys64\usr\bin\sh.exe" | Out-Null
# WSL is available on Windows Server 2019
if (Test-IsWin19)
{
# winbash <--> C:\Windows\System32\bash.exe
New-Item -ItemType SymbolicLink -Path "$shellPath\winbash.exe" -Target "$env:SystemRoot\System32\bash.exe" | Out-Null
}
# gitbash <--> C:\Program Files\Git\bin\bash.exe
New-Item -ItemType SymbolicLink -Path "$shellPath\gitbash.exe" -Target "$env:ProgramFiles\Git\bin\bash.exe" | Out-Null
# msysbash <--> C:\msys64\usr\bin\bash.exe
New-Item -ItemType SymbolicLink -Path "$shellPath\msysbash.exe" -Target "C:\msys64\usr\bin\bash.exe" | Out-Null
# Add shells to PATH
Add-MachinePathItem $shellPath

View File

@@ -30,3 +30,7 @@ New-Item -Path $winInstallDir -ItemType Directory -Force
# Remove AllUsersAllHosts profile # Remove AllUsersAllHosts profile
Remove-Item $profile.AllUsersAllHosts -Force Remove-Item $profile.AllUsersAllHosts -Force
# Clean yarn and npm cache
yarn cache clean
npm cache clean --force

View File

@@ -26,7 +26,7 @@ Install-Binary -Url $downloadUrl `
"/SP-", ` "/SP-", `
"/CLOSEAPPLICATIONS", ` "/CLOSEAPPLICATIONS", `
"/RESTARTAPPLICATIONS", ` "/RESTARTAPPLICATIONS", `
"/o:PathOption=CmdTools", ` "/o:PathOption=Cmd", `
"/o:BashTerminalOption=ConHost", ` "/o:BashTerminalOption=ConHost", `
"/o:EnableSymlinks=Enabled", ` "/o:EnableSymlinks=Enabled", `
"/COMPONENTS=gitlfs") "/COMPONENTS=gitlfs")
@@ -36,15 +36,5 @@ Choco-Install -PackageName hub
# Disable GCM machine-wide # Disable GCM machine-wide
[Environment]::SetEnvironmentVariable("GCM_INTERACTIVE", "Never", [System.EnvironmentVariableTarget]::Machine) [Environment]::SetEnvironmentVariable("GCM_INTERACTIVE", "Never", [System.EnvironmentVariableTarget]::Machine)
Add-MachinePathItem "C:\Program Files\Git\bin"
if (Test-IsWin16) {
$env:Path += ";$env:ProgramFiles\Git\usr\bin\"
}
# Add well-known SSH host keys to ssh_known_hosts
ssh-keyscan -t rsa github.com >> "C:\Program Files\Git\etc\ssh\ssh_known_hosts"
ssh-keyscan -t rsa ssh.dev.azure.com >> "C:\Program Files\Git\etc\ssh\ssh_known_hosts"
Invoke-PesterTests -TestFile "Git" -TestName "Git" Invoke-PesterTests -TestFile "Git" -TestName "Git"
Invoke-PesterTests -TestFile "CLI.Tools" -TestName "Hub CLI" Invoke-PesterTests -TestFile "CLI.Tools" -TestName "Hub CLI"

View File

@@ -7,7 +7,7 @@ Choco-Install -PackageName mingw
# Make a copy of mingw32-make.exe to make.exe, which is a more discoverable name # 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 # and so the same command line can be used on Windows as on macOS and Linux
$path = where.exe mingw32-make.exe | Get-Item $path = Get-Command mingw32-make.exe -CommandType All | Where-Object { $_.Path.Contains("C:\ProgramData\Chocolatey") } | Get-Item
Copy-Item -Path $path -Destination (Join-Path $path.Directory 'make.exe') Copy-Item -Path $path -Destination (Join-Path $path.Directory 'make.exe')
Invoke-PesterTests -TestFile "Tools" -TestName "Mingw64" Invoke-PesterTests -TestFile "Tools" -TestName "Mingw64"

View File

@@ -9,35 +9,19 @@
$dash = "-" * 40 $dash = "-" * 40
$origPath = $env:PATH # Downloading msys2
$gitPath = "$env:ProgramFiles\Git" $msys2Release = "https://api.github.com/repos/msys2/msys2-installer/releases/latest"
$msys2Uri = ((Invoke-RestMethod $msys2Release).assets | Where-Object {
$msys2_release = "https://api.github.com/repos/msys2/msys2-installer/releases/latest" $_.name -match "x86_64" -and $_.name.EndsWith("sfx.exe") }).browser_download_url
$msys2Uri = ((Invoke-RestMethod $msys2_release).assets | Where-Object {
$_.name -match "x86_64" -and $_.name.EndsWith("tar.xz") }).browser_download_url
# Download the latest msys2 x86_64, filename includes release date
Write-Host "Starting msys2 download using $($msys2Uri.split('/')[-1])"
$msys2File = Start-DownloadWithRetry -Url $msys2Uri $msys2File = Start-DownloadWithRetry -Url $msys2Uri
Write-Host "Finished download"
# nix style path for tar # extract sfx.exe to C:\
$msys2FileU = "/$msys2File".replace(':', '').replace('\', '/')
# Git tar needs exe's from mingw64\bin
$env:PATH = "$gitPath\usr\bin;$gitPath\mingw64\bin;$origPath"
$tar = "$gitPath\usr\bin\tar.exe"
# extract tar.xz to C:\
Write-Host "Starting msys2 extraction" Write-Host "Starting msys2 extraction"
&$tar -xJf $msys2FileU -C /c/ & $msys2File -y -oC:\
Remove-Item $msys2File
Write-Host "Finished extraction" Write-Host "Finished extraction"
# Add msys2 bin tools folders to PATH temporary # Add msys2 bin tools folders to PATH temporary
$env:PATH = "C:\msys64\mingw64\bin;C:\msys64\usr\bin;$origPath" $env:PATH = "C:\msys64\mingw64\bin;C:\msys64\usr\bin;$env:PATH"
Write-Host "`n$dash bash pacman-key --init" Write-Host "`n$dash bash pacman-key --init"
bash.exe -c "pacman-key --init 2>&1" bash.exe -c "pacman-key --init 2>&1"
@@ -73,6 +57,10 @@ Write-Host "`n$dash Install mingw32 packages"
$pre = "mingw-w64-i686-" $pre = "mingw-w64-i686-"
pacman.exe -S --noconfirm --needed --noprogressbar $tools32.replace('___', $pre).split(' ') pacman.exe -S --noconfirm --needed --noprogressbar $tools32.replace('___', $pre).split(' ')
# install openssh
Write-Host "`n$dash Install openssh package"
pacman.exe -S --noconfirm --needed --noprogressbar openssh
# clean all packages to decrease image size # clean all packages to decrease image size
Write-Host "`n$dash Clean packages" Write-Host "`n$dash Clean packages"
pacman.exe -Scc --noconfirm pacman.exe -Scc --noconfirm
@@ -88,4 +76,23 @@ pacman.exe -Q | grep -v ^mingw-w64-
Write-Host "`nMSYS2 installation completed" Write-Host "`nMSYS2 installation completed"
# Environment
# add C:\msys64\mingw64\bin and C:\msys64\usr\bin to PATH
# C:\msys64\mingw64\bin add after C:\Windows\System32 to not replace built-in tar.exe
$regEnvKey = 'HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\'
$pathValue = Get-ItemPropertyValue -Path $regEnvKey -Name 'Path'
$pathValue += ";C:\msys64\mingw64\bin;C:\msys64\usr\bin"
Set-ItemProperty -Path $regEnvKey -Name 'Path' -Value $pathValue
# Add well-known SSH host keys to ssh_known_hosts to Msys2
ssh-keyscan -t rsa github.com >> "C:\msys64\etc\ssh\ssh_known_hosts"
ssh-keyscan -t rsa ssh.dev.azure.com >> "C:\msys64\etc\ssh\ssh_known_hosts"
# Add well-known SSH host keys to ssh_known_hosts to Git
if (Test-Path "C:\Program Files\Git\etc\ssh")
{
ssh-keyscan -t rsa github.com >> "C:\Program Files\Git\etc\ssh\ssh_known_hosts"
ssh-keyscan -t rsa ssh.dev.azure.com >> "C:\Program Files\Git\etc\ssh\ssh_known_hosts"
}
Invoke-PesterTests -TestFile "MSYS2" Invoke-PesterTests -TestFile "MSYS2"

View File

@@ -3,7 +3,7 @@
## Desc: Install SQL PowerShell tool ## Desc: Install SQL PowerShell tool
################################################################################ ################################################################################
$BaseUrl = "https://download.microsoft.com/download/8/7/2/872BCECA-C849-4B40-8EBE-21D48CDF1456/ENU/x64" $BaseUrl = "https://download.microsoft.com/download/B/1/7/B1783FE9-717B-4F78-A39A-A2E27E3D679D/ENU/x64"
# install required MSIs # install required MSIs
$SQLSysClrTypesName = "SQLSysClrTypes.msi" $SQLSysClrTypesName = "SQLSysClrTypes.msi"

View File

@@ -271,6 +271,13 @@ function Get-PacmanVersion {
return "- Pacman $pacmanVersion" return "- Pacman $pacmanVersion"
} }
function Get-ShellTarget {
$shells = Get-ChildItem C:\shells -File | Select-Object @{n="Name";e={
$name = $_.Name
if ($name -eq 'bash.exe') {"$name (Default)"} else {$name}}},@{n="Target";e={@($_.Target)[0]}} | Sort-Object Name
$shells | New-MDTable -Columns ([ordered]@{Name = "left"; Target = "left";})
}
function Get-YAMLLintVersion { function Get-YAMLLintVersion {
yamllint --version yamllint --version
} }

View File

@@ -143,14 +143,22 @@ $markdown += New-MDList -Style Unordered -Lines @(
(Get-SeleniumWebDriverVersion -Driver "iexplorer") (Get-SeleniumWebDriverVersion -Driver "iexplorer")
) )
$markdown += New-MDHeader "Shells" -Level 3
$markdown += Get-ShellTarget
$markdown += New-MDNewLine
$markdown += New-MDHeader "MSYS2" -Level 3 $markdown += New-MDHeader "MSYS2" -Level 3
$markdown += Get-PacmanVersion $markdown += Get-PacmanVersion
$markdown += New-MDNewLine $markdown += New-MDNewLine
$markdown += New-MDHeader "Notes:" -Level 5
$markdown += @' $markdown += @'
``` ```
Location: C:\msys64 Location: C:\msys64
Note: MSYS2 is pre-installed on image but not added to PATH. 1. MSYS2 is pre-installed on image
2. C:\msys64\mingw64\bin is added to PATH and has lower precedence than C:\Windows\System32
3. C:\msys64\usr\bin is added to PATH and has lower precedence than C:\Windows\System32
4. Default bash.exe shell is set to the C:\msys64\usr\bin\bash.exe
``` ```
'@ '@
$markdown += New-MDNewLine $markdown += New-MDNewLine

View File

@@ -1,5 +1,5 @@
Describe "Git" { Describe "Git" {
$gitTools = 'bash', 'awk', 'git', 'git-lfs' $gitTools = 'git', 'git-lfs'
$gitTestCases = $gitTools | ForEach-Object { $gitTestCases = $gitTools | ForEach-Object {
@{ @{
toolName = $_ toolName = $_

View File

@@ -0,0 +1,50 @@
Describe "Shell" {
$shellTestCases = @(
@{Name = "C:\shells\bash.exe"; Target = "C:\msys64\usr\bin\bash.exe"},
@{Name = "C:\shells\sh.exe"; Target = "C:\msys64\usr\bin\sh.exe"},
@{Name = "C:\shells\gitbash.exe"; Target = "$env:ProgramFiles\Git\bin\bash.exe"},
@{Name = "C:\shells\msysbash.exe"; Target = "C:\msys64\usr\bin\bash.exe"}
)
$pathTestCases = @(
@{Path = "C:\shells"},
@{Path = "C:\msys64\mingw64\bin"},
@{Path = "C:\msys64\usr\bin"}
)
$IsWin16 = Test-IsWin16
It "Default bash.exe from MSYS2" {
(Get-Command bash).Path | Should -BeExactly "C:\shells\bash.exe"
}
It "Default sh.exe from MSYS2" {
(Get-Command sh).Path | Should -BeExactly "C:\shells\sh.exe"
}
It "Folder C:\shells exists" {
"C:\shells" | Should -Exist
}
It "C:\Windows\System32 before C:\msys64\mingw64\bin and C:\msys64\usr\bin" {
$path = $env:Path.Split(";").ToLower()
$indexOfSystem32 = $path.IndexOf("c:\windows\system32")
$path.IndexOf("c:\msys64\mingw64\bin") | Should -BeGreaterThan $indexOfSystem32
$path.IndexOf("c:\msys64\usr\bin") | Should -BeGreaterThan $indexOfSystem32
}
It "C:\shells\winbash.exe target to $env:SystemRoot\System32\bash.exe" -Skip:$IsWin16 {
$Name = "C:\shells\winbash.exe"
$Target = "$env:SystemRoot\System32\bash.exe"
(Get-Item $Name).Target | Should -BeExactly $Target
}
It "<Name> target to <Target>" -TestCases $shellTestCases {
(Get-Item $Name).Target | Should -BeExactly $Target
}
It "<Path> is in PATH" -TestCases $pathTestCases {
$env:Path.Split(";") | Should -Contain $Path
}
}

View File

@@ -333,7 +333,8 @@
"type": "powershell", "type": "powershell",
"scripts": [ "scripts": [
"{{ template_dir }}/scripts/Installers/Install-WindowsUpdates.ps1", "{{ template_dir }}/scripts/Installers/Install-WindowsUpdates.ps1",
"{{ template_dir }}/scripts/Installers/Configure-DynamicPort.ps1" "{{ template_dir }}/scripts/Installers/Configure-DynamicPort.ps1",
"{{ template_dir }}/scripts/Installers/Configure-Shell.ps1"
], ],
"elevated_user": "{{user `install_user`}}", "elevated_user": "{{user `install_user`}}",
"elevated_password": "{{user `install_password`}}" "elevated_password": "{{user `install_password`}}"

View File

@@ -331,7 +331,8 @@
"type": "powershell", "type": "powershell",
"scripts": [ "scripts": [
"{{ template_dir }}/scripts/Installers/Install-WindowsUpdates.ps1", "{{ template_dir }}/scripts/Installers/Install-WindowsUpdates.ps1",
"{{ template_dir }}/scripts/Installers/Configure-DynamicPort.ps1" "{{ template_dir }}/scripts/Installers/Configure-DynamicPort.ps1",
"{{ template_dir }}/scripts/Installers/Configure-Shell.ps1"
], ],
"elevated_user": "{{user `install_user`}}", "elevated_user": "{{user `install_user`}}",
"elevated_password": "{{user `install_password`}}" "elevated_password": "{{user `install_password`}}"