Provisioning: Fetch pre-installed squish from local cache

Squish installation is flaky so the installation phase has been
moved from provisioning to Jenkins. Jenkins job will install the
squish to target VM and copy it to local cache. This change only
fetch the installed squish packages from local cache and
uncompress those to VMs.

Task-number: QTQAINFRA-3510
Task-number: QTQAINFRA-3107
Change-Id: I862da3250120dc6a43d9c04d973a25a691ca66a1
Reviewed-by: Tony Sarajärvi <tony.sarajarvi@qt.io>
(cherry picked from commit b0286d6cd6)
Reviewed-by: Toni Saario <toni.saario@qt.io>
This commit is contained in:
Heikki Halmet
2020-03-24 11:00:17 +02:00
parent 32595beb43
commit 5279f32fdf
2 changed files with 92 additions and 212 deletions

View File

@@ -2,7 +2,7 @@
#############################################################################
##
## Copyright (C) 2017 The Qt Company Ltd.
## Copyright (C) 2020 The Qt Company Ltd.
## Contact: http://www.qt.io/licensing/
##
## This file is part of the provisioning scripts of the Qt Toolkit.
@@ -33,120 +33,80 @@
##
#############################################################################
# shellcheck source=./DownloadURL.sh
source "${BASH_SOURCE%/*}/DownloadURL.sh"
set -ex
# This script will install squish package for Linux and Mac.
# This script will fetch and extract pre-buildt squish package for Linux and Mac.
# Squish is need by Release Test Automation (RTA)
version="6.5"
# Branch version without dot
qtBranch="513x"
squishFolder="/opt/squish"
squishUrl="ci-files01-hki.intra.qt.io:/hdd/www/input/squish/coin/$qtBranch/"
squishFile="squish-nosignalhandler-$version-qt$qtBranch-linux64.run"
version="6.5.2"
qtBranch="514x"
installFolder="/opt"
squishFolder="$installFolder/squish"
preBuildCacheUrl="ci-files01-hki.intra.qt.io:/hdd/www/input/squish/jenkins_build/stable"
licenseUrl="http://ci-files01-hki.intra.qt.io/input/squish/coin/.squish-3-license"
if uname -a |grep -q Darwin; then
squishFile="squish-nosignalhandler-$version-qt$qtBranch-macx86_64.dmg"
compressedFolder="prebuild-squish-$version-$qtBranch-macx86_64.tar.gz"
sha1="91a1d7228dc4b4bd64f93191c33d2642abc97e14"
else
compressedFolder="prebuild-squish-$version-$qtBranch-linux64.tar.gz"
sha1="63f33de55770e2588dd9f482546900e33d20f8ec"
fi
squishLicenseUrl="ci-files01-hki.intra.qt.io:/hdd/www/input/squish/coin/"
squishLicenseFile=".squish-3-license.tar.gz"
testSuite="suite_test_squish"
testSuiteUrl="ci-files01-hki.intra.qt.io:/hdd/www/input/squish/coin/"
# These checks can be removed when Vanilla OS for all linux and Mac are in
if [ -d "$squishFolder" ]; then
echo "Move old squish to /tmp"
sudo mv "$squishFolder" "/tmp/squish_$(date)"
# Check which platform
if uname -a |grep -q Darwin; then
usersGroup="staff"
mountFolder="/Volumes"
squishLicenseDir="/Users/qt"
elif uname -a |grep -q "el7"; then
usersGroup="qt"
mountFolder="/tmp"
squishLicenseDir="/root"
elif uname -a |grep -q "Ubuntu"; then
usersGroup="users"
mountFolder="/tmp"
squishLicenseDir="/home/qt"
else
usersGroup="users"
mountFolder="/tmp"
squishLicenseDir="/root"
fi
if [ -f "/etc/profile.d/squish_env.sh" ]; then
echo "Remove /etc/profile.d/squish_env.sh"
sudo rm -f "/etc/profile.d/squish_env.sh"
export SQUISH_LICENSEKEY_DIR=$HOME
targetFileMount="$mountFolder"/"$compressedFolder"
echo "Mounting $preBuildCacheUrl to $mountFolder"
sudo mount "$preBuildCacheUrl" "$mountFolder"
echo "Create $installFolder if needed"
if [ ! -d "$installFolder" ]; then
sudo mkdir "$installFolder"
fi
function MountAndInstall {
url=$1
targetDirectory=$2
targetFile=$3
VerifyHash "$targetFileMount" "$sha1"
# Check which platform
if uname -a |grep -q Darwin; then
usersGroup="staff"
mountFolder="/Volumes"
squishLicenseDir="/Users/qt"
elif uname -a |grep -q "el7"; then
usersGroup="qt"
mountFolder="/tmp"
squishLicenseDir="/root"
elif uname -a |grep -q "Ubuntu"; then
usersGroup="users"
mountFolder="/tmp"
squishLicenseDir="/home/qt"
else
usersGroup="users"
mountFolder="/tmp"
squishLicenseDir="/root"
echo "Uncompress $compressedFolder"
sudo tar -xzf "$targetFileMount" --directory "$installFolder"
echo "Unmounting $mountFolder"
sudo diskutil unmount force "$mountFolder" || sudo umount -f "$mountFolder"
sudo mv "$installFolder/rta_squish_$version" "$squishFolder"
if uname -a |grep -q "Ubuntu"; then
if [ ! -e "/usr/lib/tcl8.6" ]; then
sudo mkdir /usr/lib/tcl8.6
sudo cp "$squishFolder/package/tcl/lib/tcl8.6/init.tcl" /usr/lib/tcl8.6/
fi
fi
function UnMount {
echo "Unmounting $mountFolder"
sudo diskutil unmount force "$mountFolder" || sudo umount -f "$mountFolder"
}
DownloadURL "$licenseUrl" "$licenseUrl" "3c6b2b3ca047f68e20f697afcc3a9d376f01b376" "$HOME/.squish-3-license"
targetFileMount="$mountFolder"/"$targetFile"
echo "Mounting $url to $mountFolder"
sudo mount "$url" "$mountFolder"
echo "Create $targetDirectory if needed"
if [ ! -d "/opt" ]; then
sudo mkdir "/opt"
fi
if [ ! -d "$targetDirectory" ]; then
sudo mkdir "$targetDirectory"
fi
echo "Uncompress $targetFile"
if [[ $targetFile == *.tar.gz ]]; then
if [[ $targetFile == .squish-3-license.* ]]; then
target="$squishLicenseDir"
# Squish license need to be exists also in users home directory, because squish check it before it starts running tests
sudo tar -xzf "$targetFileMount" --directory "$HOME"
else
target="$targetDirectory"
fi
sudo tar -xzf "$targetFileMount" --directory "$target"
UnMount
elif [[ $targetFile == *.dmg ]]; then
echo "'dmg-file', no need to uncompress"
sudo cp $targetFileMount /tmp
UnMount
sudo hdiutil attach "/tmp/$targetFile"
sudo /Volumes/froglogic\ Squish/Install\ Squish.app/Contents/MacOS/Squish unattended=1 targetdir="$targetDirectory/package" qtpath="$targetDirectory" > /dev/null
mountFolder="/Volumes/froglogic Squish"
UnMount
elif [[ $targetFile == *.run ]]; then
echo "'run-file', no need to uncompress"
sudo cp $targetFileMount $targetDirectory
UnMount
sudo chmod +x $targetDirectory/$targetFile
sudo $targetDirectory/$targetFile unattended=1 targetdir="$targetDirectory/package" qtpath="$targetDirectory" > /dev/null
sudo rm -fr "$targetDirectory/$targetFile"
if uname -a |grep -q "Ubuntu"; then
sudo mkdir /usr/lib/tcl8.6
sudo cp "$targetDirectory/package/tcl/lib/tcl8.6/init.tcl" /usr/lib/tcl8.6/
fi
else
exit 1
fi
echo "Changing ownerships"
sudo chown -R qt:$usersGroup "$targetDirectory"
sudo chown qt:$usersGroup "$HOME/.squish-3-license"
}
echo "Changing ownerships"
sudo chown -R qt:$usersGroup "$squishFolder"
sudo chown qt:$usersGroup "$HOME/.squish-3-license"
echo "Set commands for environment variables in .bashrc"
if uname -a |grep -q "Ubuntu"; then
echo "export SQUISH_PATH=$squishFolder/package" >> ~/.profile
echo "export PATH=\$PATH:$squishFolder/squish-$version/bin" >> ~/.profile
@@ -155,19 +115,11 @@ else
echo "export PATH=\$PATH:$squishFolder/squish-$version/bin" >> ~/.bashrc
fi
echo "Installing squish license to home directory.."
MountAndInstall "$squishLicenseUrl" "$squishFolder" "$squishLicenseFile"
echo "Installing squish $version.."
MountAndInstall "$squishUrl" "$squishFolder" "$squishFile"
echo "Installing provisioning scripts for squish"
MountAndInstall "$testSuiteUrl" "$squishFolder" "$testSuite.tar.gz"
echo "Verifying Squish Installation"
if "$squishFolder/package/bin/squishrunner" --testsuite "$squishFolder/$testSuite" | grep "Squish test run successfully" ; then
echo "Verifying Squish"
if "$squishFolder/package/bin/squishrunner" --testsuite "$squishFolder/suite_test_squish" | grep "Squish test run successfully" ; then
echo "Squish installation tested successfully"
else
echo "Squish test failed! Package wasn't installed correctly."
exit 1
fi

View File

@@ -1,6 +1,6 @@
#############################################################################
##
## Copyright (C) 2019 The Qt Company Ltd.
## Copyright (C) 2020 The Qt Company Ltd.
## Contact: http://www.qt.io/licensing/
##
## This file is part of the provisioning scripts of the Qt Toolkit.
@@ -33,120 +33,48 @@
. "$PSScriptRoot\helpers.ps1"
# This script will install squish package for Windows.
# This script will pre-installed squish package for Windows.
# Squish is need by Release Test Automation (RTA)
# NOTE! Make sure 64bit versions are always installed before 32bit,
# because they use same folder name before a rename
$version = "6.5"
# Qt branch without dot (*.*)
$qtBranch = "513x"
# So far Squish built with Qt5.12 works also with 5.13, but we have to be prepared that on some point
# the compatibility breaks, and we may need to have separate Squish packages for different Qt versions.
$version = "6.5.2"
$qtBranch = "514x"
$targetDir = "C:\Utils\squish"
$squishUrl = "\\ci-files01-hki.intra.qt.io\provisioning\squish\coin"
$squishBranchUrl = "$squishUrl\$qtBranch"
$testSuite = "suite_test_squish"
$testSuiteUrl = "$squishUrl\$testSuite.7z"
$squishPackage = "C:\Utils\rta_squish"
$squishUrl = "\\ci-files01-hki.intra.qt.io\provisioning\squish\jenkins_build"
$licenseUrl = "\\ci-files01-hki.intra.qt.io\provisioning\squish\coin"
# Squish license
$licensePackage = ".squish-3-license"
Write-Host "Installing Squish license to home directory"
Copy-Item $licenseUrl\$licensePackage ~\$licensePackage
if (Is64BitWinHost) {
$arch = "x64"
} else {
$arch = "x86"
}
$OSVersion = (get-itemproperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" -Name ProductName).ProductName
Function DownloadAndInstallSquish {
Param (
[string]$version,
[string]$bit,
[string]$squishPackage
)
$SquishUrl = $squishBranchUrl + "\squish-nosignalhandler-" + $version + "-qt" + $qtBranch + "-" + $bit + "-" + $squishPackage + ".exe"
$SquishInstaller = "$targetDir\$squishPackage.exe"
$SquishParameters = "unattended=1 targetdir=$targetDir\$squishPackage"
Write-Host "Fetching from URL $squishUrl"
Copy-Item "$SquishUrl" "$SquishInstaller"
Write-Host "Installing Squish"
$stdoutFile = [System.IO.Path]::GetTempFileName()
$stderrFile = [System.IO.Path]::GetTempFileName()
Start-Process -FilePath "$SquishInstaller" -Wait -ArgumentList $SquishParameters -PassThru -RedirectStandardOutput $stdoutFile -RedirectStandardError $stderrFile | Out-Null
Remove-Item -Path $SquishInstaller
if ("$bit" -eq "win64") {
if ($squishPackage.StartsWith("mingw")) {
$squishPackage64bit = "mingw_64"
} else {
$squishPackage64bit = "$squishPackage`_64"
}
Rename-Item $targetDir\$squishPackage $targetDir\$squishPackage64bit
TestSquish $squishPackage64bit
} else {
if ($squishPackage.StartsWith("mingw")) {
Rename-Item $targetDir\$squishPackage $targetDir\mingw
TestSquish mingw
} else {
TestSquish $squishPackage
}
}
}
Function DownloadSquishLicence {
Param (
[string]$squishUrl
)
Write-Host "Installing Squish license to home directory"
Copy-Item $squishUrl\$licensePackage ~\$licensePackage
}
Function TestSquish {
Param (
[string]$squishPackage
)
Write-Host "Verifying Squish Installation"
if (cmd /c "$targetDir\$squishPackage\bin\squishrunner.exe --testsuite $targetDir\$testSuite" |Select-String -Pattern "Squish test run successfully") {
Write-Host "Squish installation tested successfully!"
} else {
Write-Host "Squish test failed! $squishPackage wasn't installed correctly."
[Environment]::Exit(1)
}
}
Write-Host "Creating $targetDir"
New-Item -ErrorAction Ignore -ItemType directory -Path "$targetDir"
Write-Host "Download and install Test Suite for squish"
Copy-Item $testSuiteUrl $targetDir/$testSuite.7z
Extract-7Zip $targetDir/$testSuite.7z $targetDir
DownloadSquishLicence $squishUrl
if ($OSVersion -eq "Windows 10 Enterprise") {
$winVersion = "win10"
if (Is64BitWinHost) {
DownloadAndInstallSquish $version win64 "msvc14"
DownloadAndInstallSquish $version win64 "msvc141"
DownloadAndInstallSquish $version win64 "mingw_gcc73_posix_seh"
$sha1 = "9262d3b749483094024c74986f93e9340afbdb62"
} else {
DownloadAndInstallSquish $version win32 "mingw_gcc53_posix_dwarf"
$sha1 = "0763b344afa327e6c374971492021c5e923be892"
}
DownloadAndInstallSquish $version win32 "msvc141"
} elseif ($OSVersion -eq "Windows 8.1 Enterprise") {
if (Is64BitWinHost) {
DownloadAndInstallSquish $version win64 "msvc14"
}
DownloadAndInstallSquish $version win32 "msvc141"
} elseif ($OSVersion -eq "Windows 7 Enterprise") {
if (Is64BitWinHost) {
DownloadAndInstallSquish $version win64 "msvc14"
} else {
DownloadAndInstallSquish $version win32 "mingw_gcc53_posix_dwarf"
}
DownloadAndInstallSquish $version win32 "msvc141"
$winVersion = "win7"
$sha1 = "01b3529459da948cfde319d60becc666da0e1c4d"
}
$squishArchive = "prebuild-squish-$version-$qtBranch-$winVersion-$arch.zip"
Copy-Item "\\ci-files01-hki.intra.qt.io\provisioning\squish\jenkins_build\stable\$squishArchive" "C:\Utils"
Verify-Checksum "C:\Utils\$squishArchive" $sha1
Extract-7Zip "C:\Utils\$squishArchive" "C:\Utils"
Rename-Item "$squishPackage" "$targetDir"
Write-Host "Verifying Squish Installation for following targets:"
get-childitem "$targetDir" -Filter squishrunner.exe -Recurse | % { $_.FullName }
get-childitem "$targetDir" -Filter squishrunner.exe -Recurse | % { if (cmd /c $_.FullName --testsuite "$targetDir\suite_test_squish" |Select-String -Pattern "Squish test run successfully") { Write-Host "Squish tested successfully"} else { [Environment]::Exit(1) } }