setup-e2e-tests.ps1 (109 lines of code) (raw):
#Requires -Version 6
param(
[Parameter(Mandatory=$true)]
[ValidateNotNullOrEmpty()]
[String]
[ValidateSet("net8", "netfx")]
$DotnetVersion,
[Switch]
$SkipStorageEmulator,
[Switch]
$SkipCosmosDBEmulator,
[Switch]
$SkipCoreTools,
[Switch]
$UseCoreToolsBuildFromIntegrationTests,
[Switch]
$SkipBuildOnPack
)
$FunctionsRuntimeVersion = 4
function StopOnFailedExecution {
if ($LastExitCode)
{
exit $LastExitCode
}
}
if($SkipCoreTools)
{
Write-Host
Write-Host "---Skipping Core Tools download---"
}
else
{
$arch = [System.Runtime.InteropServices.RuntimeInformation]::OSArchitecture.ToString().ToLowerInvariant()
if ($IsWindows) {
$os = "win"
$coreToolsURL = $env:CORE_TOOLS_URL
}
elseif ($IsMacOS) {
$os = "osx"
}
else {
$os = "linux"
$coreToolsURL = $env:CORE_TOOLS_URL_LINUX
}
if ($UseCoreToolsBuildFromIntegrationTests -eq $true -or $UseCoreToolsBuildFromIntegrationTests.IsPresent) {
Write-Host ""
Write-Host "Using Core Tools from integration test feed..."
if ([string]::IsNullOrWhiteSpace($coreToolsURL)) {
Write-Error "CORE_TOOLS_URL (or CORE_TOOLS_URL_LINUX) is not set."
exit 1
}
}
else {
Write-Host ""
Write-Host "Using latest Core Tools release from GitHub..."
# GitHub API call for latest release
$releaseInfo = Invoke-RestMethod -Uri "https://api.github.com/repos/Azure/azure-functions-core-tools/releases/latest" -Headers @{ "User-Agent" = "PowerShell" }
$latestVersion = $releaseInfo.tag_name
Write-Host "`nLatest Core Tools version: $latestVersion"
# Look for zip file matching os and arch
$pattern = "Azure\.Functions\.Cli\.$os-$arch\..*\.zip$"
$asset = $releaseInfo.assets | Where-Object {
$_.name -match $pattern
}
if (-not $asset) {
Write-Error "Could not find a Core Tools .zip for OS '$os' and arch '$arch'"
exit 1
}
$coreToolsURL = $asset.browser_download_url
}
Write-Host ""
Write-Host "---Downloading the Core Tools for Functions V$FunctionsRuntimeVersion---"
Write-Host "Core Tools download URL: $coreToolsURL"
$FUNC_CLI_DIRECTORY = Join-Path $PSScriptRoot 'Azure.Functions.Cli'
Write-Host 'Deleting Functions Core Tools if exists...'
Remove-Item -Force "$FUNC_CLI_DIRECTORY.zip" -ErrorAction Ignore
Remove-Item -Recurse -Force $FUNC_CLI_DIRECTORY -ErrorAction Ignore
$output = "$FUNC_CLI_DIRECTORY.zip"
Invoke-RestMethod -Uri $coreToolsURL -OutFile $output
Write-Host 'Extracting Functions Core Tools...'
Expand-Archive $output -DestinationPath $FUNC_CLI_DIRECTORY
if ($IsMacOS -or $IsLinux)
{
& "chmod" "a+x" "$FUNC_CLI_DIRECTORY/func"
}
Write-Host "------"
}
if (Test-Path $output)
{
Remove-Item $output -Recurse -Force -ErrorAction Ignore
}
Write-Host "----- Executing tests for Dotnet version $DotnetVersion -----"
$AdditionalPackArgs = @("-c", "Release", "-p:FunctionsRuntimeVersion=$FunctionsRuntimeVersion", "-p:DotnetVersion=$DotnetVersion")
if ($SkipBuildOnPack -eq $true)
{
$AdditionalPackArgs += "--no-build"
}
.\tools\devpack.ps1 -DotnetVersion $DotnetVersion -E2E -AdditionalPackArgs $AdditionalPackArgs
if ($SkipStorageEmulator -And $SkipCosmosDBEmulator)
{
Write-Host
Write-Host "---Skipping emulator startup---"
Write-Host
}
else
{
.\tools\start-emulators.ps1 -SkipStorageEmulator:$SkipStorageEmulator -SkipCosmosDBEmulator:$SkipCosmosDBEmulator
}
StopOnFailedExecution