diff --git a/images/linux/scripts/helpers/install.sh b/images/linux/scripts/helpers/install.sh index 0f90ac4a..232a7353 100644 --- a/images/linux/scripts/helpers/install.sh +++ b/images/linux/scripts/helpers/install.sh @@ -14,9 +14,9 @@ download_with_retries() { local COMPRESSED="$4" if [ $COMPRESSED == "compressed" ]; then - COMMAND="curl $URL -4 -s --compressed -o '$DEST/$NAME'" + COMMAND="curl $URL -4 -sL --compressed -o '$DEST/$NAME'" else - COMMAND="curl $URL -4 -s -o '$DEST/$NAME'" + COMMAND="curl $URL -4 -sL -o '$DEST/$NAME'" fi echo "Downloading $URL..." diff --git a/images/linux/scripts/installers/1604/basic.sh b/images/linux/scripts/installers/1604/basic.sh deleted file mode 100644 index 2abfda60..00000000 --- a/images/linux/scripts/installers/1604/basic.sh +++ /dev/null @@ -1,84 +0,0 @@ -#!/bin/bash -################################################################################ -## File: basic.sh -## Desc: Installs basic command line utilities and dev packages -################################################################################ - -# Source the helpers for use with the script -source $HELPER_SCRIPTS/document.sh - -set -e - -common_packages="dnsutils - iproute2 - iputils-ping - libc++-dev - libc++abi-dev - libcurl3 - libicu55 - libunwind8 - locales - openssh-client - tzdata - zstd - lib32z1 - libxkbfile-dev - pkg-config - libsecret-1-dev - libxss1 - libgconf-2-4 - dbus - xvfb - libgbm-dev - libgtk-3-0 - tk - fakeroot - dpkg - rpm - xz-utils - xorriso - zsync - gnupg2 - texinfo" - -cmd_packages="curl - file - ftp - jq - netcat - ssh - parallel - rsync - shellcheck - sudo - telnet - time - unzip - zip - wget - upx - m4 - bison - flex" - -# Install basic command-line utilities -for package in $common_packages $cmd_packages; do - echo "Install $package" - apt-fast install -y --no-install-recommends $package -done - -# 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 $cmd_packages; do - if ! command -v $cmd; then - echo "$cmd was not installed" - exit 1 - fi -done - -# Document what was added to the image -echo "Lastly, documenting what we added to the metadata file" -DocumentInstalledItem "Basic packages:" -for package in $common_packages $cmd_packages; do - DocumentInstalledItemIndent $package -done diff --git a/images/linux/scripts/installers/basic.sh b/images/linux/scripts/installers/basic.sh index 3caf0d06..b6bd5377 100644 --- a/images/linux/scripts/installers/basic.sh +++ b/images/linux/scripts/installers/basic.sh @@ -37,7 +37,8 @@ common_packages="dnsutils zsync gnupg2 lib32z1 - texinfo" + texinfo + libsqlite3-dev" cmd_packages="curl file @@ -56,7 +57,10 @@ cmd_packages="curl wget m4 bison - flex" + flex + patchelf + bzip2 + sqlite3" if isUbuntu20 ; then echo "Install python2" @@ -64,7 +68,7 @@ if isUbuntu20 ; then fi echo "Install libcurl" -if isUbuntu18 ; then +if isUbuntu16 || isUbuntu18; then libcurelVer="libcurl3" fi @@ -74,12 +78,19 @@ fi apt-get install -y --no-install-recommends $libcurelVer +# install additional packages only for Ubuntu16.04 +if isUbuntu16; then + common_packages="$common_packages + libc++-dev + libc++abi-dev + libicu55" +fi + for package in $common_packages $cmd_packages; do echo "Install $package" apt-get install -y --no-install-recommends $package done - # 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 $cmd_packages; do diff --git a/images/linux/scripts/installers/oras-cli.sh b/images/linux/scripts/installers/oras-cli.sh new file mode 100644 index 00000000..c4546ccb --- /dev/null +++ b/images/linux/scripts/installers/oras-cli.sh @@ -0,0 +1,30 @@ +#!/bin/bash +################################################################################ +## File: oras-cli.sh +## Desc: Installs ORAS CLI +################################################################################ + +# Source the helpers for use with the script +source $HELPER_SCRIPTS/document.sh +source $HELPER_SCRIPTS/install.sh + +# Determine latest ORAS CLI version +ORAS_CLI_LATEST_VERSION_URL=https://api.github.com/repos/deislabs/oras/releases/latest +ORAS_CLI_DOWNLOAD_URL=$(curl -s $ORAS_CLI_LATEST_VERSION_URL | jq -r '.assets[].browser_download_url | select(contains("linux_amd64.tar.gz"))') +ORAS_CLI_ARCHIVE=$(basename $ORAS_CLI_DOWNLOAD_URL) + +# Install ORAS CLI +cd /tmp +download_with_retries $ORAS_CLI_DOWNLOAD_URL +tar -zxvf $ORAS_CLI_ARCHIVE -C /usr/local/bin oras + +# 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 ! oras version; then + echo "ORAS 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 "ORAS CLI $(oras version | awk 'NR==1{print $2}')" \ No newline at end of file diff --git a/images/linux/scripts/installers/rust.sh b/images/linux/scripts/installers/rust.sh index 605bce11..824ec899 100644 --- a/images/linux/scripts/installers/rust.sh +++ b/images/linux/scripts/installers/rust.sh @@ -19,13 +19,15 @@ source $CARGO_HOME/env # Install common tools rustup component add rustfmt clippy cargo install bindgen cbindgen +cargo install cargo-audit +cargo install cargo-outdated echo "Test installation of the Rust toochain" # Permissions chmod -R 777 $(dirname $RUSTUP_HOME) -for cmd in rustup rustc rustdoc cargo rustfmt cargo-clippy bindgen cbindgen; do +for cmd in rustup rustc rustdoc cargo rustfmt cargo-clippy bindgen cbindgen 'cargo audit' 'cargo outdated'; do if ! command -v $cmd --version; then echo "$cmd was not installed or is not found on the path" exit 1 @@ -54,3 +56,5 @@ DocumentInstalledItem "clippy ($(cargo-clippy --version 2>&1 | cut -d ' ' -f 2)) DocumentInstalledItem "rustdoc ($(rustdoc --version 2>&1 | cut -d ' ' -f 2))" DocumentInstalledItem "bindgen ($(bindgen --version 2>&1 | cut -d ' ' -f 2))" DocumentInstalledItem "cbindgen ($(cbindgen --version 2>&1 | cut -d ' ' -f 2))" +DocumentInstalledItem "cargo audit ($(cargo audit --version 2>&1 | cut -d ' ' -f 2))" +DocumentInstalledItem "cargo outdated ($(cargo outdated --version 2>&1 | cut -d ' ' -f 2))" \ No newline at end of file diff --git a/images/linux/ubuntu1604.json b/images/linux/ubuntu1604.json index 8567d2cc..23a4bf88 100644 --- a/images/linux/ubuntu1604.json +++ b/images/linux/ubuntu1604.json @@ -143,7 +143,7 @@ "{{template_dir}}/scripts/installers/azcopy.sh", "{{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/basic.sh", "{{template_dir}}/scripts/installers/aliyun-cli.sh", "{{template_dir}}/scripts/installers/aws.sh", "{{template_dir}}/scripts/installers/build-essential.sh", @@ -177,6 +177,7 @@ "{{template_dir}}/scripts/installers/mysql.sh", "{{template_dir}}/scripts/installers/nodejs.sh", "{{template_dir}}/scripts/installers/bazel.sh", + "{{template_dir}}/scripts/installers/oras-cli.sh", "{{template_dir}}/scripts/installers/phantomjs.sh", "{{template_dir}}/scripts/installers/php.sh", "{{template_dir}}/scripts/installers/pollinate.sh", diff --git a/images/linux/ubuntu1804.json b/images/linux/ubuntu1804.json index 56be34c1..cad08ebb 100644 --- a/images/linux/ubuntu1804.json +++ b/images/linux/ubuntu1804.json @@ -181,6 +181,7 @@ "{{template_dir}}/scripts/installers/nvm.sh", "{{template_dir}}/scripts/installers/nodejs.sh", "{{template_dir}}/scripts/installers/bazel.sh", + "{{template_dir}}/scripts/installers/oras-cli.sh", "{{template_dir}}/scripts/installers/phantomjs.sh", "{{template_dir}}/scripts/installers/php.sh", "{{template_dir}}/scripts/installers/pollinate.sh", diff --git a/images/linux/ubuntu2004.json b/images/linux/ubuntu2004.json index a43a79ed..95f0a481 100644 --- a/images/linux/ubuntu2004.json +++ b/images/linux/ubuntu2004.json @@ -183,6 +183,7 @@ "{{template_dir}}/scripts/installers/nvm.sh", "{{template_dir}}/scripts/installers/nodejs.sh", "{{template_dir}}/scripts/installers/bazel.sh", + "{{template_dir}}/scripts/installers/oras-cli.sh", "{{template_dir}}/scripts/installers/phantomjs.sh", "{{template_dir}}/scripts/installers/php.sh", "{{template_dir}}/scripts/installers/pollinate.sh", diff --git a/images/macos/macos-10.15-Readme.md b/images/macos/macos-10.15-Readme.md index 6936556d..4fbba9f5 100644 --- a/images/macos/macos-10.15-Readme.md +++ b/images/macos/macos-10.15-Readme.md @@ -2,7 +2,7 @@ - System Version: macOS 10.15.5 (19F101) - Kernel Version: Darwin 19.5.0 - System Integrity Protection: Enabled -- Image Version: 20200625.2 +- Image Version: 20200702.1 ## Installed Software ### Language and Runtime @@ -18,9 +18,9 @@ - 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.18.1 +- Node.js v12.18.2 - NVM 0.35.3 -- NVM - Cached node versions: v6.17.1 v8.17.0 v10.21.0 v12.18.1 v13.14.0 v14.4.0 +- NVM - Cached node versions: v6.17.1 v8.17.0 v10.21.0 v12.18.2 v13.14.0 v14.5.0 - PowerShell 7.0.2 - Python 2.7.17 - Python 3.7.7 @@ -36,7 +36,7 @@ - Bundler version 2.1.4 - Carthage 0.35.0 - CocoaPods 1.9.3 -- Homebrew 2.4.2 +- Homebrew 2.4.3 - NPM 6.14.5 - Yarn 1.22.4 - NuGet 5.6.0.6489 @@ -47,10 +47,10 @@ ### Project Management - Apache Maven 3.6.3 -- Gradle 6.5 +- Gradle 6.5.1 ### Utilities -- Curl 7.71.0 +- Curl 7.71.1 - Git: 2.27.0 - Git LFS: 2.11.0 - GitHub CLI: 0.10.1 @@ -67,7 +67,7 @@ - aria2 1.35.0 - azcopy 10.4.3 - zstd 1.4.5 -- bazel 3.3.0 +- bazel 3.3.1 - bazelisk v1.5.0 - helm v3.2.4+g0ad800e - virtualbox 6.1.10r138449 @@ -77,13 +77,13 @@ - 7-Zip 16.02 ### Tools -- Fastlane 2.149.1 +- Fastlane 2.150.1 - Cmake 3.17.3 -- App Center CLI 2.6.0 +- App Center CLI 2.6.1 - Azure CLI 2.8.0 -- AWS CLI 2.0.25 +- AWS CLI 2.0.27 - AWS SAM CLI 0.53.0 -- Aliyun CLI 3.0.48 +- Aliyun CLI 3.0.49 - GHCup v0.1.5-p2 - GHC 8.10.1 - Cabal 3.2.0.0 @@ -94,9 +94,9 @@ - SafariDriver 13.1.1 (15609.2.9.1.2) - Google Chrome 83.0.4103.116 - ChromeDriver 83.0.4103.39 -- Microsoft Edge 83.0.478.56 -- MSEdgeDriver 83.0.478.56 -- Mozilla Firefox 77.0.1 +- Microsoft Edge 83.0.478.58 +- MSEdgeDriver 83.0.478.58 +- Mozilla Firefox 78.0.1 - geckodriver 0.26.0 ### Cached Tools @@ -109,8 +109,8 @@ #### Python - 2.7.18 - 3.5.9 -- 3.6.10 -- 3.7.7 +- 3.6.11 +- 3.7.8 - 3.8.3 #### PyPy diff --git a/images/win/Windows2016-Azure.json b/images/win/Windows2016-Azure.json index 05333241..349591cd 100644 --- a/images/win/Windows2016-Azure.json +++ b/images/win/Windows2016-Azure.json @@ -84,6 +84,11 @@ "source": "{{ template_dir }}/scripts/SoftwareReport", "destination": "{{user `image_folder`}}" }, + { + "type": "file", + "source": "{{ template_dir }}/scripts/Tests", + "destination": "{{user `image_folder`}}" + }, { "type": "windows-shell", "inline": [ @@ -839,18 +844,6 @@ "{{ template_dir }}/scripts/Installers/Validate-AliyunCli.ps1" ] }, - { - "type": "powershell", - "scripts":[ - "{{ template_dir }}/scripts/Installers/Validate-JavaTools.ps1" - ] - }, - { - "type": "powershell", - "scripts":[ - "{{ template_dir }}/scripts/Installers/Validate-Cmake.ps1" - ] - }, { "type": "powershell", "scripts":[ @@ -911,12 +904,6 @@ "{{ template_dir }}/scripts/Installers/Validate-AzureCosmosDbEmulator.ps1" ] }, - { - "type": "powershell", - "scripts":[ - "{{ template_dir }}/scripts/Installers/Validate-7zip.ps1" - ] - }, { "type": "powershell", "scripts":[ @@ -983,18 +970,6 @@ "{{ template_dir }}/scripts/Installers/Validate-KubernetesCli.ps1" ] }, - { - "type": "powershell", - "scripts":[ - "{{ template_dir }}/scripts/Installers/Validate-Kind.ps1" - ] - }, - { - "type": "powershell", - "scripts":[ - "{{ template_dir }}/scripts/Installers/Validate-MongoDB.ps1" - ] - }, { "type": "powershell", "scripts":[ @@ -1019,6 +994,12 @@ "type": "windows-restart", "restart_timeout": "10m" }, + { + "type": "powershell", + "scripts":[ + "{{ template_dir }}/scripts/Tests/RunAll-Tests.ps1" + ] + }, { "type": "powershell", "inline": [ diff --git a/images/win/Windows2019-Azure.json b/images/win/Windows2019-Azure.json index cf10a903..94a9a937 100644 --- a/images/win/Windows2019-Azure.json +++ b/images/win/Windows2019-Azure.json @@ -84,6 +84,11 @@ "source": "{{ template_dir }}/scripts/SoftwareReport", "destination": "{{user `image_folder`}}" }, + { + "type": "file", + "source": "{{ template_dir }}/scripts/Tests", + "destination": "{{user `image_folder`}}" + }, { "type": "windows-shell", "inline": [ @@ -109,6 +114,14 @@ ], "execution_policy": "unrestricted" }, + { + "type": "powershell", + "elevated_user": "SYSTEM", + "elevated_password": "", + "scripts":[ + "{{ template_dir }}/scripts/Installers/Windows2019/Install-WSL.ps1" + ] + }, { "type": "powershell", "scripts":[ @@ -243,6 +256,12 @@ "{{ template_dir }}/scripts/Installers/Validate-Wix.ps1" ] }, + { + "type": "powershell", + "scripts":[ + "{{ template_dir }}/scripts/Installers/Validate-WSL.ps1" + ] + }, { "type": "powershell", "scripts":[ @@ -812,18 +831,6 @@ "{{ template_dir }}/scripts/Installers/Validate-NodeLts.ps1" ] }, - { - "type": "powershell", - "scripts":[ - "{{ template_dir }}/scripts/Installers/Validate-JavaTools.ps1" - ] - }, - { - "type": "powershell", - "scripts":[ - "{{ template_dir }}/scripts/Installers/Validate-Cmake.ps1" - ] - }, { "type": "powershell", "scripts":[ @@ -885,12 +892,6 @@ ] }, { - "type": "powershell", - "scripts":[ - "{{ template_dir }}/scripts/Installers/Validate-7zip.ps1" - ] - }, - { "type": "powershell", "scripts":[ "{{ template_dir }}/scripts/Installers/Validate-Packer.ps1" @@ -962,18 +963,6 @@ "{{ template_dir }}/scripts/Installers/Validate-KubernetesCli.ps1" ] }, - { - "type": "powershell", - "scripts":[ - "{{ template_dir }}/scripts/Installers/Validate-Kind.ps1" - ] - }, - { - "type": "powershell", - "scripts":[ - "{{ template_dir }}/scripts/Installers/Validate-MongoDB.ps1" - ] - }, { "type": "powershell", "scripts":[ @@ -1010,6 +999,12 @@ "type": "windows-restart", "restart_timeout": "10m" }, + { + "type": "powershell", + "scripts":[ + "{{ template_dir }}/scripts/Tests/RunAll-Tests.ps1" + ] + }, { "type": "powershell", "inline": [ @@ -1062,4 +1057,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/images/win/scripts/ImageHelpers/ImageHelpers.psm1 b/images/win/scripts/ImageHelpers/ImageHelpers.psm1 index 95a7d6c7..d711f745 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\ChocoHelpers.ps1 +. $PSScriptRoot\TestsHelpers.ps1 Export-ModuleMember -Function @( 'Test-MachinePath' @@ -28,4 +29,7 @@ Export-ModuleMember -Function @( 'Test-IsWin16' 'Choco-Install' 'Extract-7Zip' + 'Get-CommandResult' + 'Get-EnvironmentVariable' + 'Invoke-PesterTests' ) diff --git a/images/win/scripts/ImageHelpers/TestsHelpers.ps1 b/images/win/scripts/ImageHelpers/TestsHelpers.ps1 new file mode 100644 index 00000000..5cc69dec --- /dev/null +++ b/images/win/scripts/ImageHelpers/TestsHelpers.ps1 @@ -0,0 +1,96 @@ +function Get-CommandResult { + Param ( + [Parameter(Mandatory)][string] $Command + ) + # CMD trick to suppress and show error output because some commands write to stderr (for example, "python --version") + [string[]]$output = & $env:comspec /c "$Command 2>&1" + $exitCode = $LASTEXITCODE + + return @{ + Output = $output + ExitCode = $exitCode + } +} + +# Gets value of environment variable by the name +function Get-EnvironmentVariable($variable) { + return [System.Environment]::GetEnvironmentVariable($variable) +} + +# Update environment variables without reboot +function Update-Environment { + $variables = [Environment]::GetEnvironmentVariables("Machine") + $variables.Keys | ForEach-Object { + $key = $_ + $value = $variables[$key] + Set-Item -Path "env:$key" -Value $value + } + # We need to refresh PATH the latest one because it could include other variables "%M2_HOME%/bin" + $env:PATH = [Environment]::GetEnvironmentVariable("PATH", "Machine") +} + +# Run Pester tests for specific tool +function Invoke-PesterTests { + Param( + [Parameter(Mandatory)][string] $TestFile, + [string] $TestName + ) + + $testPath = "C:\image\Tests\${TestFile}.Tests.ps1" + if (-not (Test-Path $testPath)) { + throw "Unable to find test file '$TestFile' on '$testPath'." + } + + $configuration = [PesterConfiguration] @{ + Run = @{ Path = $testPath; PassThru = $true } + Output = @{ Verbosity = "Detailed" } + } + if ($TestName) { + $configuration.Filter.FullName = $TestName + } + + # Update environment variables without reboot + Update-Environment + + # Switch ErrorActionPreference to Stop temporary to make sure that tests will on silent errors too + $backupErrorActionPreference = $ErrorActionPreference + $ErrorActionPreference = "Stop" + $results = Invoke-Pester -Configuration $configuration + $ErrorActionPreference = $backupErrorActionPreference + + # Fail in case if no tests are run + if (-not ($results -and ($results.FailedCount -eq 0) -and ($results.PassedCount -gt 0))) { + $results + throw "Test run has failed" + } +} + +# Pester Assert to check exit code of command +function ShouldReturnZeroExitCode { + Param( + [String] $ActualValue, + [switch] $Negate, + [string] $Because + ) + + $result = Get-CommandResult $ActualValue + + [bool]$succeeded = $result.ExitCode -eq 0 + if ($Negate) { $succeeded = -not $succeeded } + + if (-not $succeeded) + { + $сommandOutputIndent = " " * 4 + $commandOutput = ($result.Output | ForEach-Object { "${сommandOutputIndent}${_}" }) -join "`n" + $failureMessage = "Command '${ActualValue}' has finished with exit code ${actualExitCode}`n${commandOutput}" + } + + return [PSCustomObject] @{ + Succeeded = $succeeded + FailureMessage = $failureMessage + } +} + +If (Get-Command -Name Add-AssertionOperator -ErrorAction SilentlyContinue) { + Add-AssertionOperator -Name ReturnZeroExitCode -InternalName ShouldReturnZeroExitCode -Test ${function:ShouldReturnZeroExitCode} +} \ 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 419c8178..9ad1e204 100644 --- a/images/win/scripts/Installers/Install-7zip.ps1 +++ b/images/win/scripts/Installers/Install-7zip.ps1 @@ -4,3 +4,5 @@ ################################################################################ Choco-Install -PackageName 7zip.install + +Invoke-PesterTests -TestFile "Tools" -TestName "7-Zip" \ No newline at end of file diff --git a/images/win/scripts/Installers/Install-Cmake.ps1 b/images/win/scripts/Installers/Install-Cmake.ps1 index 37183d5e..8baa82e2 100644 --- a/images/win/scripts/Installers/Install-Cmake.ps1 +++ b/images/win/scripts/Installers/Install-Cmake.ps1 @@ -4,3 +4,5 @@ ################################################################################ Choco-Install -PackageName cmake.install -ArgumentList "--installargs",'ADD_CMAKE_TO_PATH=""System""' + +Invoke-PesterTests -TestFile "Tools" -TestName "CMake" \ No newline at end of file diff --git a/images/win/scripts/Installers/Install-JavaTools.ps1 b/images/win/scripts/Installers/Install-JavaTools.ps1 index 49b95e3a..759d132f 100644 --- a/images/win/scripts/Installers/Install-JavaTools.ps1 +++ b/images/win/scripts/Installers/Install-JavaTools.ps1 @@ -126,3 +126,5 @@ $archivePath = Start-DownloadWithRetry -Url $uri -Name "cobertura.zip" Extract-7Zip -Path $archivePath -DestinationPath "C:\" setx COBERTURA_HOME $coberturaPath /M + +Invoke-PesterTests -TestFile "Java" \ No newline at end of file diff --git a/images/win/scripts/Installers/Install-Kind.ps1 b/images/win/scripts/Installers/Install-Kind.ps1 index 0e97cc04..b1c936fc 100644 --- a/images/win/scripts/Installers/Install-Kind.ps1 +++ b/images/win/scripts/Installers/Install-Kind.ps1 @@ -38,3 +38,5 @@ catch Write-Host $_.Exception.Message exit 1 } + +Invoke-PesterTests -TestFile "Tools" -TestName "Kind" \ No newline at end of file diff --git a/images/win/scripts/Installers/Install-MongoDB.ps1 b/images/win/scripts/Installers/Install-MongoDB.ps1 index 245e5b98..177300e9 100644 --- a/images/win/scripts/Installers/Install-MongoDB.ps1 +++ b/images/win/scripts/Installers/Install-MongoDB.ps1 @@ -7,3 +7,5 @@ Choco-Install -PackageName mongodb $mongoPath = (Get-CimInstance Win32_Service -Filter "Name LIKE 'mongodb'").PathName $mongoBin = Split-Path -Path $mongoPath.split('"')[1] Add-MachinePathItem "$mongoBin" + +Invoke-PesterTests -TestFile "Databases" -TestName "MongoDB" \ No newline at end of file diff --git a/images/win/scripts/Installers/Validate-Cmake.ps1 b/images/win/scripts/Installers/Validate-Cmake.ps1 deleted file mode 100644 index df683591..00000000 --- a/images/win/scripts/Installers/Validate-Cmake.ps1 +++ /dev/null @@ -1,16 +0,0 @@ -################################################################################ -## File: Validate-Cmake.ps1 -## Desc: Validate Cmake -################################################################################ - -if(Get-Command -Name 'cmake') -{ - Write-Host "CMake $(cmake -version) on path" -} -else -{ - Write-Host "CMake not on path" - exit 1 -} - - diff --git a/images/win/scripts/Installers/Validate-JavaTools.ps1 b/images/win/scripts/Installers/Validate-JavaTools.ps1 deleted file mode 100644 index 50513156..00000000 --- a/images/win/scripts/Installers/Validate-JavaTools.ps1 +++ /dev/null @@ -1,79 +0,0 @@ -################################################################################ -## File: Validate-JavaTools.ps1 -## Desc: Validate various JDKs and java tools -################################################################################ - -Function Validate-JavaVersion { - param ( - [Parameter(Mandatory)] [string] $Version, - [switch] $Default - ) - - Write-Host "Checking Java $version" - - # Set Path to get Java - if (-not $Default) - { - # Take 7 & 8 for versions 1.7 and 1.8 - $versionNumber = $version.Split(".") | Select-Object -Last 1 - - $javaPath = [System.Environment]::GetEnvironmentVariable("JAVA_HOME_${versionNumber}_X64") - if ([string]::IsNullOrEmpty($javaPath)) - { - Write-Host "Environment variable 'JAVA_HOME_${versionNumber}_X64' is null" - exit 1 - } - - $javaBin = "$javaPath\bin;" - $env:Path = $javaBin + $env:Path - } - else - { - Validate-JavaVersion -Version $Version - } - - $isJavaExists = $($(& $env:comspec "/s /c java -version 2>&1") | Out-String) -match '^(?.+) version "(?.+)".*' - - if ($isJavaExists) - { - $javaVersion = $matches.version - } - else - { - Write-Host "Java $version was not found" - exit 1 - } - - $isJavaCorrect = $javaVersion.StartsWith($version) - - if($isJavaCorrect) - { - Write-Host "Java $javaVersion found" - # Reset Path to the default one in case we need to check the default Java later - $env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User") - } - else - { - Write-Host "Expected Java $version, but found $javaVersion" - exit 1 - } -} - -if((Get-Command -Name 'java') -and (Get-Command -Name 'mvn') -and (Get-Command -Name 'ant') -and (Get-Command -Name 'gradle')) -{ - Write-Host "Java $(java -version) on path" - Write-Host "Maven $(mvn -version) on path" - Write-Host "Ant $(ant -version) on path" - Write-Host "Gradle $(gradle -version) on path" -} -else -{ - Write-Host "one of Java,Maven,Ant,Gradle is not on path." - exit 1 -} - -Write-Host "Checking installed Java versions" -Validate-JavaVersion -Version "1.7" -Validate-JavaVersion -Version "1.8" -Default -Validate-JavaVersion -Version "11" -Validate-JavaVersion -Version "13" diff --git a/images/win/scripts/Installers/Validate-Kind.ps1 b/images/win/scripts/Installers/Validate-Kind.ps1 deleted file mode 100644 index 9147f462..00000000 --- a/images/win/scripts/Installers/Validate-Kind.ps1 +++ /dev/null @@ -1,14 +0,0 @@ -################################################################################ -## File: Validate-Kind.ps1 -## Desc: Validate Kind. -################################################################################ - -if (Get-Command -Name 'kind') -{ - Write-Host "kind $(kind version) in path" -} -else -{ - Write-Host "kind is not in path" - exit 1 -} diff --git a/images/win/scripts/Installers/Validate-MongoDB.ps1 b/images/win/scripts/Installers/Validate-MongoDB.ps1 deleted file mode 100644 index 517f824c..00000000 --- a/images/win/scripts/Installers/Validate-MongoDB.ps1 +++ /dev/null @@ -1,24 +0,0 @@ -################################################################################ -## File: Validate-MongoDB.ps1 -## Desc: Validate MongoDB -################################################################################ - -if (Get-Command -Name 'mongod') -{ - Write-Host 'mongod is on path' -} -else -{ - Write-Host 'mongod not on path' - exit 1 -} - -if (Get-Command -Name 'mongo') -{ - Write-Host 'mongo is on path' -} -else -{ - Write-Host 'mongo not on path' - exit 1 -} diff --git a/images/win/scripts/Installers/Validate-7zip.ps1 b/images/win/scripts/Installers/Validate-WSL.ps1 similarity index 54% rename from images/win/scripts/Installers/Validate-7zip.ps1 rename to images/win/scripts/Installers/Validate-WSL.ps1 index d29d394e..83da6933 100644 --- a/images/win/scripts/Installers/Validate-7zip.ps1 +++ b/images/win/scripts/Installers/Validate-WSL.ps1 @@ -1,15 +1,14 @@ ################################################################################ -## File: Validate-7zip.ps1 -## Desc: Validate 7zip +## File: Validate-WSL.ps1 +## Desc: Validate WSL CLI existst ################################################################################ -if (Get-Command -Name '7z') +if (Get-Command -Name 'wsl') { - Write-Host '7zip on path' + Write-Host 'wsl is on path' } else { - Write-Host '7zip is not on path' + Write-Host 'wsl not on path' exit 1 } - diff --git a/images/win/scripts/Installers/Windows2016/Initialize-VM.ps1 b/images/win/scripts/Installers/Windows2016/Initialize-VM.ps1 index 794c1b0f..5afc6e61 100644 --- a/images/win/scripts/Installers/Windows2016/Initialize-VM.ps1 +++ b/images/win/scripts/Installers/Windows2016/Initialize-VM.ps1 @@ -41,6 +41,8 @@ Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force Install-Module -Name PowerShellGet -Force Set-PSRepository -InstallationPolicy Trusted -Name PSGallery +Write-Host "Install the latest Pester version" +Install-Module Pester -Scope AllUsers -SkipPublisherCheck -Force Write-Host "Disable Antivirus" Set-MpPreference -DisableRealtimeMonitoring $true diff --git a/images/win/scripts/Installers/Windows2019/Initialize-VM.ps1 b/images/win/scripts/Installers/Windows2019/Initialize-VM.ps1 index 99c238e8..e57ccb98 100644 --- a/images/win/scripts/Installers/Windows2019/Initialize-VM.ps1 +++ b/images/win/scripts/Installers/Windows2019/Initialize-VM.ps1 @@ -38,6 +38,8 @@ Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force Install-Module -Name PowerShellGet -Force Set-PSRepository -InstallationPolicy Trusted -Name PSGallery +Write-Host "Install the latest Pester version" +Install-Module Pester -Scope AllUsers -SkipPublisherCheck -Force Write-Host "Disable Antivirus" Set-MpPreference -DisableRealtimeMonitoring $true diff --git a/images/win/scripts/Installers/Windows2019/Install-WSL.ps1 b/images/win/scripts/Installers/Windows2019/Install-WSL.ps1 new file mode 100644 index 00000000..2e83a1b8 --- /dev/null +++ b/images/win/scripts/Installers/Windows2019/Install-WSL.ps1 @@ -0,0 +1,8 @@ +################################################################################ +## File: Install-WSL.ps1 +## Desc: Install Windows Subsystem for Linux +################################################################################ + +Write-Host "Install Windows Subsystem for Linux" + +Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux -NoRestart \ No newline at end of file diff --git a/images/win/scripts/SoftwareReport/SoftwareReport.Generator.ps1 b/images/win/scripts/SoftwareReport/SoftwareReport.Generator.ps1 index b1ba9152..0f7f1fa0 100644 --- a/images/win/scripts/SoftwareReport/SoftwareReport.Generator.ps1 +++ b/images/win/scripts/SoftwareReport/SoftwareReport.Generator.ps1 @@ -22,6 +22,11 @@ $markdown += New-MDList -Style Unordered -Lines @( "Image Version: $env:ImageVersion" ) +$markdown += New-MDHeader "Enabled windows optional features" -Level 2 +$markdown += New-MDList -Style Unordered -Lines @( + "Windows Subsystem for Linux" +) + $markdown += New-MDHeader "Installed Software" -Level 2 $markdown += New-MDHeader "Language and Runtime" -Level 3 diff --git a/images/win/scripts/Tests/Databases.Tests.ps1 b/images/win/scripts/Tests/Databases.Tests.ps1 new file mode 100644 index 00000000..b7cda7a4 --- /dev/null +++ b/images/win/scripts/Tests/Databases.Tests.ps1 @@ -0,0 +1,8 @@ +Describe "MongoDB" { + It "" -TestCases @( + @{ ToolName = "mongo" } + @{ ToolName = "mongod" } + ) { + "$ToolName --version" | Should -ReturnZeroExitCode + } +} \ No newline at end of file diff --git a/images/win/scripts/Tests/Java.Tests.ps1 b/images/win/scripts/Tests/Java.Tests.ps1 new file mode 100644 index 00000000..9ca9be19 --- /dev/null +++ b/images/win/scripts/Tests/Java.Tests.ps1 @@ -0,0 +1,36 @@ +Describe "Java" { + It "Java is default" -TestCases @(@{ DefaultJavaVersion = 8 }) { + $actualJavaPath = Get-EnvironmentVariable "JAVA_HOME" + $expectedJavaPath = Get-EnvironmentVariable "JAVA_HOME_${DefaultJavaVersion}_X64" + + $actualJavaPath | Should -Not -BeNullOrEmpty + $expectedJavaPath | Should -Not -BeNullOrEmpty + $actualJavaPath | Should -Be $expectedJavaPath + } + + It "" -TestCases @( + @{ ToolName = "java" } + @{ ToolName = "mvn" } + @{ ToolName = "ant" } + @{ ToolName = "gradle" } + ) { + "$ToolName -version" | Should -ReturnZeroExitCode + } + + It "Java " -TestCases @( + @{ Version = "1.7" } + @{ Version = "1.8" } + @{ Version = "11" } + @{ Version = "13" } + ) { + $versionNumber = $version.Split(".") | Select-Object -Last 1 + + $javaVariableValue = Get-EnvironmentVariable "JAVA_HOME_${versionNumber}_X64" + $javaVariableValue | Should -Not -BeNullOrEmpty + $javaPath = Join-Path $javaVariableValue "bin\java" + + $result = Get-CommandResult "`"$javaPath`" -version" + $result.ExitCode | Should -Be 0 + $result.Output[0] | Should -Match ([regex]::Escape("openjdk version `"${Version}.")) + } +} \ No newline at end of file diff --git a/images/win/scripts/Tests/RunAll-Tests.ps1 b/images/win/scripts/Tests/RunAll-Tests.ps1 new file mode 100644 index 00000000..1d8e835c --- /dev/null +++ b/images/win/scripts/Tests/RunAll-Tests.ps1 @@ -0,0 +1 @@ +Invoke-PesterTests "*" \ No newline at end of file diff --git a/images/win/scripts/Tests/Tools.Tests.ps1 b/images/win/scripts/Tests/Tools.Tests.ps1 new file mode 100644 index 00000000..6ddbcb21 --- /dev/null +++ b/images/win/scripts/Tests/Tools.Tests.ps1 @@ -0,0 +1,17 @@ +Describe "7-Zip" { + It "7z" { + "7z" | Should -ReturnZeroExitCode + } +} + +Describe "CMake" { + It "cmake" { + "cmake --version" | Should -ReturnZeroExitCode + } +} + +Describe "Kind" { + It "Kind" { + "kind version" | Should -ReturnZeroExitCode + } +} \ No newline at end of file