mirror of
https://github.com/actions/runner-images.git
synced 2025-12-13 12:48:18 +00:00
Merge branch 'master' of https://github.com/nikita-bykov/virtual-environments into pipx-windows
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -24,3 +24,7 @@ then
|
||||
echo "PATH = $PATH"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Clean yarn and npm cache
|
||||
yarn cache clean
|
||||
npm cache clean --force
|
||||
22
images/macos/provision/assets/select-xamarin-sdk.sh
Normal file
22
images/macos/provision/assets/select-xamarin-sdk.sh
Normal 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
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -21,7 +21,6 @@ binst_common_utils=(
|
||||
gh
|
||||
p7zip
|
||||
ant
|
||||
yamllint
|
||||
aria2
|
||||
)
|
||||
|
||||
|
||||
18
images/macos/provision/core/pipx-packages.sh
Normal file
18
images/macos/provision/core/pipx-packages.sh
Normal 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
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
}
|
||||
@@ -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"
|
||||
|
||||
@@ -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}",
|
||||
|
||||
@@ -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"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
||||
@@ -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`}}"
|
||||
|
||||
@@ -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`}}"
|
||||
|
||||
@@ -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`}}"
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
7
images/macos/tests/PipxPackages.Tests.ps1
Normal file
7
images/macos/tests/PipxPackages.Tests.ps1
Normal 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
|
||||
}
|
||||
}
|
||||
@@ -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))
|
||||
|
||||
@@ -194,5 +194,11 @@
|
||||
"3.6"
|
||||
]
|
||||
}
|
||||
],
|
||||
"pipx": [
|
||||
{
|
||||
"package": "yamllint",
|
||||
"cmd": "yamllint --version"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -254,5 +254,11 @@
|
||||
"1.15.*"
|
||||
]
|
||||
}
|
||||
],
|
||||
"pipx": [
|
||||
{
|
||||
"package": "yamllint",
|
||||
"cmd": "yamllint --version"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -163,5 +163,11 @@
|
||||
"1.15.*"
|
||||
]
|
||||
}
|
||||
],
|
||||
"pipx": [
|
||||
{
|
||||
"package": "yamllint",
|
||||
"cmd": "yamllint --version"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -88,5 +88,11 @@
|
||||
"1.15.*"
|
||||
]
|
||||
}
|
||||
],
|
||||
"pipx": [
|
||||
{
|
||||
"package": "yamllint",
|
||||
"cmd": "yamllint --version"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -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
|
||||
|
||||
23
images/win/scripts/Installers/Configure-Shell.ps1
Normal file
23
images/win/scripts/Installers/Configure-Shell.ps1
Normal 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
|
||||
@@ -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
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
Describe "Git" {
|
||||
$gitTools = 'bash', 'awk', 'git', 'git-lfs'
|
||||
$gitTools = 'git', 'git-lfs'
|
||||
$gitTestCases = $gitTools | ForEach-Object {
|
||||
@{
|
||||
toolName = $_
|
||||
|
||||
50
images/win/scripts/Tests/Shell.Tests.ps1
Normal file
50
images/win/scripts/Tests/Shell.Tests.ps1
Normal 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
|
||||
}
|
||||
}
|
||||
@@ -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`}}"
|
||||
|
||||
@@ -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`}}"
|
||||
|
||||
Reference in New Issue
Block a user