Files
runner-images/images/macos/software-report/SoftwareReport.Generator.ps1
Nikita Bykov d729747846 [macOS] Add GNU Tar (#2163)
* added gnu-tar

* rework gnu-tar installation

* fix SoftwareReport for gnu-tar

* add bsdtar to SoftwareReport

* updated SoftwareReport

Co-authored-by: Nikita Bykov <v-nibyko@microsoft.com>
2020-12-15 10:43:27 +03:00

334 lines
13 KiB
PowerShell
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

param (
[Parameter(Mandatory)][string]
$OutputDirectory,
$ImageName
)
$ErrorActionPreference = "Stop"
Import-Module MarkdownPS
Import-Module "$PSScriptRoot/SoftwareReport.Common.psm1" -DisableNameChecking
Import-Module "$PSScriptRoot/SoftwareReport.Xcode.psm1" -DisableNameChecking
Import-Module "$PSScriptRoot/SoftwareReport.Android.psm1" -DisableNameChecking
Import-Module "$PSScriptRoot/SoftwareReport.Java.psm1" -DisableNameChecking
Import-Module "$PSScriptRoot/SoftwareReport.Xamarin.psm1" -DisableNameChecking
Import-Module "$PSScriptRoot/SoftwareReport.Toolcache.psm1" -DisableNameChecking
Import-Module "$PSScriptRoot/SoftwareReport.Browsers.psm1" -DisableNameChecking
Import-Module "$PSScriptRoot/../helpers/SoftwareReport.Helpers.psm1"
Import-Module "$PSScriptRoot/../helpers/Common.Helpers.psm1"
Import-Module "$PSScriptRoot/../helpers/Xcode.Helpers.psm1"
# Operating System info
$os = Get-OSVersion
# Language and Runtime
$nodejsVersion = Run-Command "node --version"
$nvmVersion = Get-NVMVersion
$nvmCachedVersions = Get-NVMNodeVersionList
$pythonVersion = Run-Command "python --version"
$python3Version = Run-Command "python3 --version"
$rubyVersion = Run-Command "ruby --version" | Take-Part -Part 1
$goVersion = Get-GoVersion
$phpVersion = Run-Command "php --version" | Select-Object -First 1 | Take-Part -Part 0,1
$juliaVersion = Run-Command "julia --version" | Take-Part -Part 0,2
$markdown = ""
# OS info
$markdown += Build-OSInfoSection
$markdown += New-MDList -Style Unordered -Lines ("Image Version: {0}" -f $ImageName.Split('_')[1])
# Software report
$markdown += New-MDHeader "Installed Software" -Level 2
$markdown += New-MDHeader "Language and Runtime" -Level 3
if ( -not $os.IsHighSierra) {
$clangLLVMVersion = Get-ClangLLVMVersion
$gccVersion = Get-GccVersion
$gfortranVersion = Get-FortranVersion
$lines = @($clangLLVMVersion, $gccVersion, $gfortranVersion) | ForEach-Object {$_}
$markdown += New-MDList -Style Unordered -NoNewLine -Lines $lines
}
if ($os.IsLessThanBigSur) {
$markdown += New-MDList -Style Unordered -Lines @(Get-RVersion) -NoNewLine
}
$markdown += New-MDList -Style Unordered -Lines @(
(Get-BashVersion),
"Node.js ${nodejsVersion}"
"NVM ${nvmVersion}"
"NVM - Cached node versions: ${nvmCachedVersions}"
$pythonVersion,
$python3Version,
"Ruby ${rubyVersion}",
(Get-DotnetVersionList),
"Go ${goVersion}",
"$phpVersion",
"$juliaVersion"
)
# Package Management
$bundlerVersion = Run-Command "bundle --version"
$carthageVersion = Run-Command "carthage version" -SuppressStderr
$cocoaPodsVersion = Run-Command "pod --version"
$homebrewVersion = Run-Command "brew --version" | Select-Object -First 1
$npmVersion = Run-Command "npm --version"
$yarnVersion = Run-Command "yarn --version"
$nugetVersion = Run-Command "nuget help" | Select-Object -First 1 | Take-Part -Part 2
$pipVersion = Get-PipVersion -Version 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
$markdown += New-MDHeader "Package Management" -Level 3
if ($os.IsHigherThanMojave) {
$vcpkgVersion = Get-VcpkgVersion
$markdown += New-MDList -Lines $vcpkgVersion -Style Unordered -NoNewLine
}
$markdown += New-MDList -Style Unordered -Lines @(
"Pip ${pipVersion}",
"Pip ${pip3Version}",
$pipxVersion,
$bundlerVersion,
"Carthage ${carthageVersion}",
"CocoaPods ${cocoaPodsVersion}",
$homebrewVersion,
"NPM ${npmVersion}",
"Yarn ${yarnVersion}",
"NuGet ${nugetVersion}",
"Mini${condaVersion}",
"RubyGems ${rubyGemsVersion}",
"Composer ${composerVersion}"
)
# Project Management
$mavenVersion = Run-Command "mvn -version" | Select-Object -First 1 | Take-Part -Part 2
#gradle output differs on the first launch a welcome message, that we don't need is rendered. The solution is to take the last "Gradle" occurrence from the output
$gradleVersion = (Run-Command "gradle --version" | Select-String "Gradle")[-1]
$apacheAnt = Run-Command "ant -version" | Take-Part -Part 0,1,3
$markdown += New-MDHeader "Project Management" -Level 3
$markdown += New-MDList -Style Unordered -Lines @(
"Apache Maven ${mavenVersion}",
$gradleVersion,
$apacheAnt
)
# Utilities
$curlVersion = Run-Command "curl --version" | Select-Object -First 1 | Take-Part -Part 1
$gitVersion = Run-Command "git --version" | Take-Part -Part 2
$ghVersion = Run-Command "gh --version" | Select-String "gh version" | Select-Object -First 1 | Take-Part -Part 2
$gitLFSVersion = Run-Command "git-lfs version" | Take-Part -Part 0 | Take-Part -Part 1 -Delimiter "/"
$hubVersion = Run-Command "brew list --versions hub" | Take-Part -Part 1
$wgetVersion = Run-Command "wget --version" | Select-String "GNU Wget" | Take-Part -Part 2
$svnVersion = Run-Command "svn --version --quiet"
$jqVersion = Run-Command "jq --version" | Take-Part -Part 1 -Delimiter "-"
$opensslVersion = Get-Item /usr/local/opt/openssl | ForEach-Object {"{0} ``({1} -> {2})``" -f (Run-Command "openssl version"), $_.FullName, $_.Target}
$gpgVersion = Run-Command "gpg --version" | Select-String 'gpg (GnuPG)' -SimpleMatch
$postgresClientVersion = Run-Command "psql --version"
$postgresServerVersion = Run-Command "pg_config --version"
$aria2Version = Run-Command "aria2c --version" | Select-Object -First 1 | Take-Part -Part 2
$azcopyVersion = Run-Command "azcopy --version" | Take-Part -Part 2
$zstdVersion = Run-Command "zstd --version" | Take-Part -Part 1 -Delimiter "v" | Take-Part -Part 0 -Delimiter ","
$bazelVersion = Run-Command "bazel --version" | Take-Part -Part 0 -Delimiter "-"
$bazeliskVersion = Run-Command "brew list bazelisk --versions"
$packerVersion = Run-Command "packer --version"
$helmVersion = Run-Command "helm version --short"
$mongo = Run-Command "mongo --version" | Select-String "MongoDB shell version" | Take-Part -Part 3
$mongod = Run-Command "mongod --version" | Select-String "db version " | Take-Part -Part 2
$p7zip = Run-Command "7z i" | Select-String "7-Zip" | Take-Part -Part 0,2
$gnuTar = Run-Command "gtar --version" | Select-String "tar" | Take-Part -Part 3
$bsdtar = Run-Command "tar --version" | Take-Part -Part 1
$markdown += New-MDHeader "Utilities" -Level 3
$markdown += New-MDList -Style Unordered -NoNewLine -Lines @(
"Curl ${curlVersion}",
"Git: ${gitVersion}",
"Git LFS: ${gitLFSVersion}",
"GitHub CLI: ${ghVersion}",
"Hub CLI: ${hubVersion}",
"GNU Wget ${wgetVersion}",
"Subversion (SVN) ${svnVersion}",
"Packer $packerVersion",
$opensslVersion,
"jq ${jqVersion}",
$gpgVersion,
$postgresClientVersion,
$postgresServerVersion,
"aria2 $aria2Version",
"azcopy $azcopyVersion",
"zstd $zstdVersion",
$bazelVersion,
$bazeliskVersion,
"helm $helmVersion",
"mongo $mongo",
"mongod $mongod",
$p7zip,
"bsdtar $bsdtar - available by 'tar' alias",
"GNU Tar $gnuTar - available by 'gtar' alias"
)
if ($os.IsHigherThanMojave) {
$newmanVersion = Run-Command "newman --version"
$markdown += New-MDList -Lines "Newman $newmanVersion" -Style Unordered -NoNewLine
}
if ($os.IsLessThanBigSur) {
$vagrant = Run-Command "vagrant -v"
$vbox = Run-Command "vboxmanage -v"
$parallelVersion = Run-Command "parallel --version" | Select-String "GNU parallel" | Select-Object -First 1
$markdown += New-MDList -Style Unordered -Lines @(
"virtualbox $vbox",
$vagrant,
$parallelVersion
)
}
$markdown += New-MDNewLine
# Tools
$fastlaneVersion = Run-Command "fastlane --version" | Select-String "^fastlane [0-9]" | Take-Part -Part 1
$cmakeVersion = Run-Command "cmake --version" | Select-Object -First 1 | Take-Part -Part 2
$appcenterCLIVersion = Run-Command "appcenter --version" | Take-Part -Part 2
$azureCLIVersion = Run-Command "az -v" | Select-String "^azure-cli" | Take-Part -Part 1
$awsVersion = Run-Command "aws --version" | Take-Part -Part 0 | Take-Part -Delimiter "/" -Part 1
$aliyunVersion = Run-Command "aliyun --version" | Select-String "Alibaba Cloud Command Line Interface Version " | Take-Part -Part 6
$awsSamVersion = Run-Command "sam --version" | Take-Part -Part 3
$awsSessionManagerVersion = Run-Command "session-manager-plugin --version"
$ghcUpVersion = Run-Command "ghcup --version" | Take-Part -Part 5
$ghcVersion = Run-Command "ghc --version" | Take-Part -Part 7
$cabalVersion = Run-Command "cabal --version" | Take-Part -Part 3
$stackVersion = Run-Command "stack --version" | Take-Part -Part 1 | ForEach-Object {$_.replace(",","")}
$xcodeVersion = Run-Command "pkgutil --pkg-info com.apple.pkg.CLTools_Executables" | Select -Index 1 | Take-Part -Part 1
$markdown += New-MDHeader "Tools" -Level 3
$markdown += New-MDList -Style Unordered -NoNewLine -Lines @(
"Fastlane ${fastlaneVersion}",
"Cmake ${cmakeVersion}",
"App Center CLI ${appcenterCLIVersion}",
"Azure CLI ${azureCLIVersion}",
"AWS CLI ${awsVersion}",
"AWS SAM CLI ${awsSamVersion}",
"AWS Session Manager CLI ${awsSessionManagerVersion}",
"Aliyun CLI ${aliyunVersion}",
"Xcode Command Line Tools ${xcodeVersion}"
)
if( -not $os.IsHighSierra) {
$markdown += New-MDList -Style Unordered -Lines @(
"GHCup ${ghcUpVersion}",
"GHC ${ghcVersion}",
"Cabal ${cabalVersion}",
"Stack ${stackVersion}"
)
}
# Linters
$markdown += New-MDHeader "Linters" -Level 3
$yamllintVersion = Run-Command "yamllint --version"
$markdown += New-MDList -Style Unordered -NoNewLine -Lines @(
$yamllintVersion
)
if ( -not $os.IsHighSierra) {
$swiftlintVersion = Run-Command "swiftlint version"
$markdown += New-MDList -Style Unordered -Lines @(
"SwiftLint ${swiftlintVersion}"
)
}
$markdown += New-MDHeader "Browsers" -Level 3
$markdown += Get-BrowserSection
$markdown += New-MDHeader "Java" -Level 3
$markdown += Get-JavaVersions | New-MDTable
# Toolcache
$markdown += Build-ToolcacheSection
if ( -not $os.IsHighSierra) {
$rustVersion = Get-RustVersion
$markdown += New-MDHeader "Rust Tools" -Level 3
$markdown += New-MDList -Style Unordered -Lines @(
"Rust $rustVersion",
(Get-RustupVersion)
)
$markdown += New-MDHeader "Packages" -Level 4
$markdown += New-MDList -Style Unordered -Lines @(
(Get-Bindgen),
(Get-Cbindgen),
(Get-Cargooutdated),
(Get-Cargoaudit)
)
}
$markdown += New-MDHeader "PowerShell Tools" -Level 3
$powershellVersion = Run-Command "powershell --version"
$markdown += New-MDList -Lines $powershellVersion -Style Unordered
$markdown += New-MDHeader "PowerShell Modules" -Level 4
$markdown += Get-PowerShellModules | New-MDTable
$markdown += New-MDNewLine
# Xamarin section
$markdown += New-MDHeader "Xamarin" -Level 3
$markdown += New-MDHeader "Visual Studio for Mac" -Level 4
$markdown += New-MDList -Lines @(Get-VSMacVersion) -Style Unordered
$markdown += New-MDHeader "Mono" -Level 4
$markdown += New-MDList -Lines (Build-MonoList) -Style Unordered
$markdown += New-MDHeader "Xamarin.iOS" -Level 4
$markdown += New-MDList -Lines (Build-XamarinIOSList) -Style Unordered
$markdown += New-MDHeader "Xamarin.Mac" -Level 4
$markdown += New-MDList -Lines (Build-XamarinMacList) -Style Unordered
$markdown += New-MDHeader "Xamarin.Android" -Level 4
$markdown += New-MDList -Lines (Build-XamarinAndroidList) -Style Unordered
$markdown += New-MDHeader "Unit Test Framework" -Level 4
$markdown += New-MDList -Lines @(Get-NUnitVersion) -Style Unordered
# First run doesn't provide full data about devices and runtimes
Get-XcodeInfoList | Out-Null
# Xcode section
$xcodeInfo = Get-XcodeInfoList
$markdown += New-MDHeader "Xcode" -Level 3
$markdown += Build-XcodeTable $xcodeInfo | New-MDTable
$markdown += New-MDNewLine
$markdown += Build-XcodeSupportToolsSection
$markdown += New-MDHeader "Installed SDKs" -Level 4
$markdown += Build-XcodeSDKTable $xcodeInfo | New-MDTable
$markdown += New-MDNewLine
$markdown += New-MDHeader "Installed Simulators" -Level 4
$markdown += Build-XcodeSimulatorsTable $xcodeInfo | New-MDTable
$markdown += New-MDNewLine
# Android section
$markdown += New-MDHeader "Android" -Level 3
$markdown += Build-AndroidTable | New-MDTable
$markdown += New-MDNewLine
#
# Generate systeminfo.txt with information about image (for debug purpose)
#
$dateTime = (Get-Date).ToString("yyyy-MM-dd HH:mm:ss")
$systemInfo = [string]::Join([System.Environment]::NewLine, @(
"Date: ${dateTime}",
"Image name: ${ImageName}"
))
if (-not (Test-Path $OutputDirectory)) { New-Item -Path $OutputDirectory -ItemType Directory | Out-Null }
#
# Write final reports
#
Write-Host $markdownExtended
$systemInfo | Out-File -FilePath "${OutputDirectory}/systeminfo.txt" -Encoding UTF8NoBOM
$markdown | Out-File -FilePath "${OutputDirectory}/systeminfo.md" -Encoding UTF8NoBOM