Skip to content

Commit

Permalink
Update Verify Resources and perl script (#2602)
Browse files Browse the repository at this point in the history
* Update Verify Resources

* Update template-Build-run-tests-sign.yml

* Update template-Build-run-tests-sign.yml

* Update template-Build-run-tests-sign.yml

* Update template-Build-run-tests-sign.yml

* Update template-Build-run-tests-sign.yml

* Adding strawberry perl installer

* clean up

* Update template-Build-run-tests-sign.yml
  • Loading branch information
trwalke committed May 21, 2024
1 parent 0e5648b commit fa8eef3
Show file tree
Hide file tree
Showing 2 changed files with 105 additions and 4 deletions.
93 changes: 93 additions & 0 deletions build/install-strawberry-perl.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
<#
.SYNOPSIS
CI script used for setting up Strawberry Perl on Windows
.DESCRIPTION
Script used in the build pipeline to set up Strawberry Perl which is used to
install openssl on Windows and set the necessary environment variables.
openssl is a requirement for building mcr device on Windows.
Can be used in local development environment as well.
#>
Param(
[string]$perl_setup_url = 'https://github.com/StrawberryPerl/Perl-Dist-Strawberry/releases/download/SP_5380_5361/strawberry-perl-5.38.0.1-64bit.msi',
# SHA256 hash of the Strawberry Perl MSI obtained using Get-Filehash -Path <path-to-msi> -Algorithm SHA256
[string]$perl_setup_sha256 = 'A9B44E50424DCC7E40B8F67D906C76A15469AF3D5998E04635FA8465A0A56877',
[string]$ci_path = '',
# Optional debug flag to print additional information
[switch]$debug
)

if (Test-Path $ci_path) {
$root_dir = $ci_path
}
else {
$root_dir = 'C:\Strawberry'
New-Item -Path $root_dir -ItemType Directory -Force
}
$destination = "C:\Strawberry"

$ErrorActionPreference = "Stop"

# Check if Strawberry Perl is already installed anywhere on the machine
try {
$perlVersion = & perl -v
if ($null -ne $perlVersion) {
$perlLocation = (Get-Command perl).Source
Write-Output "Perl is installed."
Write-Output "Version: $perlVersion"
Write-Output "Location: $perlLocation"
# Set environment variables
Write-Output "##vso[task.setvariable variable=PERL;]$perlLocation"
Write-Output "##vso[task.setvariable variable=OPENSSL_SRC_PERL;]$perlLocation"
[Environment]::SetEnvironmentVariable("PERL", $perlLocation, "Machine")
[Environment]::SetEnvironmentVariable("OPENSSL_SRC_PERL", $perlLocation, "Machine")
# Check if Locale::Maketext::Simple is installed as it is needed for openssl compilation
& perl -MLocale::Maketext::Simple -e '1'
if ($LASTEXITCODE -eq 0) {
Write-Output "Locale::Maketext::Simple is installed."
}
else {
Write-Output "Locale::Maketext::Simple is not installed. Installing it."
& cpan "Locale::Maketext::Simple"
}
if ($debug) {
$perlOutput = (perl -e "print join(';', @INC)").split(';')
foreach ($path in $perlOutput) {
Get-ChildItem -Recurse -Path $path
}
}
exit 0
}
}
catch {
Write-Output "Perl is not installed. Proceeding with installation."
}

# Download Strawberry Perl
Invoke-WebRequest -Uri $perl_setup_url -OutFile $root_dir\perl_setup.msi
# Verify downloaded MSI exists
if (-not (Test-Path $root_dir\perl_setup.msi)) {
Write-Error "Strawberry Perl MSI not found at $root_dir\perl_setup.msi"
}
# Verify hash of downloaded MSI
$hash = Get-FileHash -Path $root_dir\perl_setup.msi -Algorithm SHA256
if ($hash.Hash -ne $perl_setup_sha256) {
Write-Error "Strawberry Perl MSI hash mismatch"
}
# Install Strawberry Perl
Start-Process -FilePath msiexec -ArgumentList "/i $root_dir\perl_setup.msi /quiet /norestart /log $root_dir\perl_setup_log.txt" -Wait
# Output install logs
Get-Content $root_dir\perl_setup_log.txt
# Verify installation
if (-not (Test-Path $destination\perl)) {
Write-Error "Strawberry Perl installation failed. See logs for more details."
}
# Set environment variable
[Environment]::SetEnvironmentVariable("PERL", "$destination\perl\bin\perl.exe", "Machine")
[Environment]::SetEnvironmentVariable("OPENSSL_SRC_PERL", "$destination\perl\bin\perl.exe", "Machine")
# Update PATH
$existingPath = [Environment]::GetEnvironmentVariable("PATH", [System.EnvironmentVariableTarget]::Machine)
if ($existingPath -notlike "*$pathUpdate*") {
[Environment]::SetEnvironmentVariable("PATH", "$existingPath;$destination\perl\bin", "Machine")
}
Write-Host "[Info] Strawberry Perl installed successfully"
16 changes: 12 additions & 4 deletions build/template-Build-run-tests-sign.yml
Original file line number Diff line number Diff line change
Expand Up @@ -38,11 +38,19 @@ steps:
command: custom
custom: '--list-sdks'

- task: CmdLine@2
displayName: 'Run VerifyResourceUsage.pl'
- task: PowerShell@2
displayName: "Install Strawberry Perl"
inputs:
filename: perl
arguments: '$(Agent.BuildDirectory)\s\$(WilsonSourceDirectory)src\VerifyResourceUsage.pl'
targetType: filePath
filePath: $(Build.SourcesDirectory)\$(WilsonSourceDirectory)build\install-strawberry-perl.ps1
arguments: >
-ci_path "$(Build.SourcesDirectory)"
-debug
condition: and(succeeded(), eq(variables['PipelineType'], 'onebranch'))

- powershell: |
perl "$(Build.SourcesDirectory)\$(WilsonSourceDirectory)src\VerifyResourceUsage.pl"
displayName: 'Verify error messages are all used.'

- powershell: |
regedit /s .\build\strongNameBypass.reg
Expand Down

0 comments on commit fa8eef3

Please sign in to comment.