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
# https://github.com/actions/virtual-environments/issues/1568
brew_folder="/home/linuxbrew/"
homebrew_user=$(cut -d: -f1 /etc/passwd | tail -1)
if [ -d "$brew_folder" ]; then
brew_folder_owner=$(ls -ld $brew_folder | awk '{print $3}')
if [ "$USER" != "$brew_folder_owner" ]; then
chown "$USER":docker -R $brew_folder
if [ "$homebrew_user" != "$brew_folder_owner" ]; then
chown "$homebrew_user":docker -R $brew_folder
fi
fi

View File

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

View File

@@ -24,3 +24,7 @@ then
echo "PATH = $PATH"
exit 1
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
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
# we have to do that here because `npm install` is run in a few different places during image-generation
npm cache clean --force
# Clean yarn cache
yarn cache clean
# Clean up temporary directories
rm -rf ~/utils ~/image-generation

View File

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

View File

@@ -21,7 +21,6 @@ binst_common_utils=(
gh
p7zip
ant
yamllint
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
FORMULA_PATH=$(brew extract python@2 local/python2 | grep "Homebrew/Library/Taps")
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)
[ "$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}"
}
function Get-PipxVersion {
$pipxVersion = Run-Command "pipx --version" -SuppressStderr
return "Pipx $pipxVersion"
}
function Get-NVMNodeVersionList {
$nvmPath = Join-Path $env:HOME ".nvm" "nvm.sh"
$nvmInitCommand = ". ${nvmPath} > /dev/null 2>&1 || true"

View File

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

View File

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

View File

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

View File

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

View File

@@ -3,10 +3,6 @@ Import-Module "$PSScriptRoot/../helpers/Tests.Helpers.psm1"
$os = Get-OSVersion
Describe "Linters" {
It "yamllint" {
"yamllint --version" | Should -ReturnZeroExitCode
}
It "SwiftLint" -Skip:($os.IsHighSierra) {
"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
}
It "Pipx is available" {
"pipx --version" | Should -ReturnZeroExitCode
}
It "Pip 3 and Python 3 came from the same brew formula" {
$pip3Path = Split-Path (readlink (which pip3))
$python3Path = Split-Path (readlink (which python3))

View File

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

View File

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

View File

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

View File

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

View File

@@ -1,10 +1,11 @@
| 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) |
***
# Microsoft Windows Server 2016 Datacenter
- OS Version: 10.0.14393 Build 3930
- Image Version: 20201012.1
- OS Version: 10.0.14393 Build 3986
- Image Version: 20201020.1
## Installed Software
### Language and Runtime
@@ -14,7 +15,7 @@
- Java 13.0.2
- Python 3.7.9
- Ruby 2.5.8p224
- Go 1.14.9
- Go 1.14.10
- PHP 7.4.11
- Julia 1.5.2
- Perl 5.32.0
@@ -25,46 +26,46 @@
- Vcpkg 2020.06.15
- NPM 6.14.8
- Yarn 1.22.10
- pip 20.2.3 (python 3.7)
- Miniconda 4.6.14
- pip 20.2.4 (python 3.7)
- Miniconda 4.8.3
- RubyGems 3.1.4
- Helm 3.3.4
- Composer 1.10.13
- Composer 1.10.15
- NuGet 5.7.0.6726
### Project Management
- Ant 1.10.9
- Maven 3.6.3
- Gradle 6.6
- Gradle 6.7
- sbt 1.4.0
### Tools
- azcopy 10.6.0
- Bazel 3.6.0
- Bazelisk 1.7.1
- Bazel 3.7.0
- Bazelisk 1.7.3
- CMake 3.18.4
- CodeQL Action Bundle 2.2.5
- CodeQL Action Bundle 2.3.0
- R 4.0.3
- Docker 19.03.12
- Docker-compose 1.27.2
- Git 2.28.0
- Git LFS 2.11.0
- Google Cloud SDK 313.0.1
- Docker-compose 1.27.4
- Git 2.29.0
- Git LFS 2.12.0
- Google Cloud SDK 315.0.0
- InnoSetup 6.0.5
- jq 1.6
- Kubectl 1.19.1
- Kubectl 1.19.3
- Kind 0.9.0
- Mingw-w64 8.1.0
- Mercurial 5.0
- NSIS v3.06.1
- Newman 5.2.0
- OpenSSL 1.1.1
- Packer 1.6.3
- Pulumi v2.11.2
- Packer 1.6.4
- Pulumi v2.12.0
- Subversion (SVN) 1.14.0
- ghc 8.10.2
- Cabal 3.2.0.0
- Stack 2.3.3
- Stack 2.5.1
- WinAppDriver 1.1.1809.18001
- zstd 1.4.5
- VSWhere 2.8.4
@@ -72,12 +73,12 @@
- yamllint 1.25.0
### CLI Tools
- Azure CLI 2.12.1
- Azure CLI 2.13.0
- Azure DevOps CLI extension 0.18.0
- 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 Session Manager CLI 1.1.61.0
- AWS Session Manager CLI 1.2.7.0
- Alibaba Cloud CLI 3.0.60
- Cloud Foundry CLI 6.53.0
- Hub CLI 2.14.2
@@ -93,11 +94,11 @@
- cargo-outdated v0.9.11
### Browsers and webdrivers
- Google Chrome 86.0.4240.75
- Google Chrome 86.0.4240.111
- Chrome Driver 86.0.4240.22
- Microsoft Edge 86.0.622.38
- Microsoft Edge Driver 86.0.622.38
- Mozilla Firefox 81.0.1
- Microsoft Edge 86.0.622.48
- Microsoft Edge Driver 86.0.622.48
- Mozilla Firefox 82.0
- Gecko Driver 0.27.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.12.17 | x64 | GOROOT_1_12_X64 |
| 1.13.15 | x64 | GOROOT_1_13_X64 |
| 1.14.9 (Default) | x64 | GOROOT_1_14_X64 |
| 1.15.2 | x64 | GOROOT_1_15_X64 |
| 1.14.10 (Default) | x64 | GOROOT_1_14_X64 |
| 1.15.3 | x64 | GOROOT_1_15_X64 |
#### Node
@@ -147,7 +148,7 @@ Note: MSYS2 is pre-installed on image but not added to PATH.
| 8.17.0 | x64 |
| 10.22.1 | x64 |
| 12.19.0 | x64 |
| 14.13.1 | x64 |
| 14.14.0 | x64 |
#### Python
@@ -158,6 +159,7 @@ Note: MSYS2 is pre-installed on image but not added to PATH.
| 3.6.8 | x64, x86 |
| 3.7.9 (Default) | x64, x86 |
| 3.8.6 | x64, x86 |
| 3.9.0 | x64, x86 |
#### Ruby
@@ -200,6 +202,7 @@ Note: MSYS2 is pre-installed on image but not added to PATH.
### Database tools
- Azure CosmosDb Emulator 2.11.6.0
- DacFx 15.0.4897.1
- SQLPS 1.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
| 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:
@@ -476,20 +479,20 @@ Note: MSYS2 is pre-installed on image but not added to PATH.
### .NET Core 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
`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`
- 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`
- 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`
- 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
`Type: Developer Pack`
@@ -518,7 +521,7 @@ All other versions are saved but not installed.
| Pester | 3.4.0<br>5.0.4 |
| PowerShellGet | 1.0.0.1<br>2.2.4.1<br>2.2.5 |
| PSWindowsUpdate | 2.2.0.2 |
| SqlServer | 21.1.18228 |
| SqlServer | 21.1.18229 |
| VSSetup | 2.2.16 |
### 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-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-", `
"/CLOSEAPPLICATIONS", `
"/RESTARTAPPLICATIONS", `
"/o:PathOption=CmdTools", `
"/o:PathOption=Cmd", `
"/o:BashTerminalOption=ConHost", `
"/o:EnableSymlinks=Enabled", `
"/COMPONENTS=gitlfs")
@@ -36,15 +36,5 @@ Choco-Install -PackageName hub
# Disable GCM machine-wide
[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 "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
# 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')
Invoke-PesterTests -TestFile "Tools" -TestName "Mingw64"

View File

@@ -9,35 +9,19 @@
$dash = "-" * 40
$origPath = $env:PATH
$gitPath = "$env:ProgramFiles\Git"
$msys2_release = "https://api.github.com/repos/msys2/msys2-installer/releases/latest"
$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])"
# Downloading msys2
$msys2Release = "https://api.github.com/repos/msys2/msys2-installer/releases/latest"
$msys2Uri = ((Invoke-RestMethod $msys2Release).assets | Where-Object {
$_.name -match "x86_64" -and $_.name.EndsWith("sfx.exe") }).browser_download_url
$msys2File = Start-DownloadWithRetry -Url $msys2Uri
Write-Host "Finished download"
# nix style path for tar
$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:\
# extract sfx.exe to C:\
Write-Host "Starting msys2 extraction"
&$tar -xJf $msys2FileU -C /c/
Remove-Item $msys2File
& $msys2File -y -oC:\
Write-Host "Finished extraction"
# 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"
bash.exe -c "pacman-key --init 2>&1"
@@ -73,6 +57,10 @@ Write-Host "`n$dash Install mingw32 packages"
$pre = "mingw-w64-i686-"
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
Write-Host "`n$dash Clean packages"
pacman.exe -Scc --noconfirm
@@ -88,4 +76,23 @@ pacman.exe -Q | grep -v ^mingw-w64-
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"

View File

@@ -3,7 +3,7 @@
## 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
$SQLSysClrTypesName = "SQLSysClrTypes.msi"

View File

@@ -271,6 +271,13 @@ function Get-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 {
yamllint --version
}

View File

@@ -143,14 +143,22 @@ $markdown += New-MDList -Style Unordered -Lines @(
(Get-SeleniumWebDriverVersion -Driver "iexplorer")
)
$markdown += New-MDHeader "Shells" -Level 3
$markdown += Get-ShellTarget
$markdown += New-MDNewLine
$markdown += New-MDHeader "MSYS2" -Level 3
$markdown += Get-PacmanVersion
$markdown += New-MDNewLine
$markdown += New-MDHeader "Notes:" -Level 5
$markdown += @'
```
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

View File

@@ -1,5 +1,5 @@
Describe "Git" {
$gitTools = 'bash', 'awk', 'git', 'git-lfs'
$gitTools = 'git', 'git-lfs'
$gitTestCases = $gitTools | ForEach-Object {
@{
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",
"scripts": [
"{{ 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_password": "{{user `install_password`}}"

View File

@@ -331,7 +331,8 @@
"type": "powershell",
"scripts": [
"{{ 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_password": "{{user `install_password`}}"