[Linux,macOS,Windows] Download two latest CodeQL bundles (#6884)

Previously, our runner image only included the most recent release of CodeQL. In order to improve stability of rollout of new CodeQL versions, we are now downloading the most recent two releases.

The change updates the Linux and Windows script variable names to match that of the Mac script, because they are mostly functionally identical. It also adds the same log messages to all scripts and ensures Mac and Windows test parity. It tests that there are two bundles in each of the OS's as well.

This will approximately double the total size and installation time of the existing CodeQL tool.
This commit is contained in:
Angela P Wen
2023-01-29 05:46:43 -08:00
committed by GitHub
parent 2205d11bf5
commit 1e75a20a49
12 changed files with 218 additions and 78 deletions

View File

@@ -103,7 +103,7 @@ $tools.AddToolVersion("Bazelisk", $(Get-BazeliskVersion))
$tools.AddToolVersion("Bicep", $(Get-BicepVersion)) $tools.AddToolVersion("Bicep", $(Get-BicepVersion))
$tools.AddToolVersion("Buildah", $(Get-BuildahVersion)) $tools.AddToolVersion("Buildah", $(Get-BuildahVersion))
$tools.AddToolVersion("CMake", $(Get-CMakeVersion)) $tools.AddToolVersion("CMake", $(Get-CMakeVersion))
$tools.AddToolVersion("CodeQL Action Bundle", $(Get-CodeQLBundleVersion)) $tools.AddToolVersion("CodeQL Action Bundles", $(Get-CodeQLBundleVersions))
$tools.AddToolVersion("Docker Amazon ECR Credential Helper", $(Get-DockerAmazonECRCredHelperVersion)) $tools.AddToolVersion("Docker Amazon ECR Credential Helper", $(Get-DockerAmazonECRCredHelperVersion))
$tools.AddToolVersion("Docker Compose v1", $(Get-DockerComposeV1Version)) $tools.AddToolVersion("Docker Compose v1", $(Get-DockerComposeV1Version))
$tools.AddToolVersion("Docker Compose v2", $(Get-DockerComposeV2Version)) $tools.AddToolVersion("Docker Compose v2", $(Get-DockerComposeV2Version))

View File

@@ -30,12 +30,17 @@ function Get-BicepVersion {
return $Matches.Version return $Matches.Version
} }
function Get-CodeQLBundleVersion { function Get-CodeQLBundleVersions {
$CodeQLVersionsWildcard = Join-Path $Env:AGENT_TOOLSDIRECTORY -ChildPath "CodeQL" | Join-Path -ChildPath "*" $CodeQLVersionsWildcard = Join-Path $Env:AGENT_TOOLSDIRECTORY -ChildPath "CodeQL" | Join-Path -ChildPath "*"
$CodeQLVersionPath = Get-ChildItem $CodeQLVersionsWildcard | Select-Object -First 1 -Expand FullName $CodeQLVersionPaths = Get-ChildItem $CodeQLVersionsWildcard
$CodeQLPath = Join-Path $CodeQLVersionPath -ChildPath "x64" | Join-Path -ChildPath "codeql" | Join-Path -ChildPath "codeql" $CodeQlVersions=@()
foreach ($CodeQLVersionPath in $CodeQLVersionPaths) {
$FullCodeQLVersionPath = $CodeQLVersionPath | Select-Object -Expand FullName
$CodeQLPath = Join-Path $FullCodeQLVersionPath -ChildPath "x64" | Join-Path -ChildPath "codeql" | Join-Path -ChildPath "codeql"
$CodeQLVersion = & $CodeQLPath version --quiet $CodeQLVersion = & $CodeQLPath version --quiet
return $CodeQLVersion $CodeQLVersions += $CodeQLVersion
}
return $CodeQLVersions
} }
function Get-PodManVersion { function Get-PodManVersion {

View File

@@ -7,19 +7,39 @@
source $HELPER_SCRIPTS/install.sh source $HELPER_SCRIPTS/install.sh
# Retrieve the name of the CodeQL bundle preferred by the Action (in the format codeql-bundle-YYYYMMDD). # Retrieve the name of the CodeQL bundle preferred by the Action (in the format codeql-bundle-YYYYMMDD).
codeql_bundle_name="$(curl -sSL https://raw.githubusercontent.com/github/codeql-action/v2/src/defaults.json | jq -r .bundleVersion)" base_url="$(curl -sSL https://raw.githubusercontent.com/github/codeql-action/v2/src/defaults.json)"
# Convert the bundle name to a version number (0.0.0-YYYYMMDD). codeql_tag_name="$(echo "$base_url" | jq -r '.bundleVersion')"
codeql_bundle_version="0.0.0-${codeql_bundle_name##*-}" codeql_cli_version="$(echo "$base_url" | jq -r '.cliVersion')"
prior_codeql_tag_name="$(echo "$base_url" | jq -r '.priorBundleVersion')"
prior_codeql_cli_version="$(echo "$base_url" | jq -r '.priorCliVersion')"
extraction_directory="$AGENT_TOOLSDIRECTORY/CodeQL/$codeql_bundle_version/x64" # Convert the tag names to bundles with a version number (x.y.z-YYYYMMDD).
mkdir -p "$extraction_directory" codeql_bundle_version="${codeql_cli_version}-${codeql_tag_name##*-}"
prior_codeql_bundle_version="${prior_codeql_cli_version}-${prior_codeql_tag_name##*-}"
echo "Downloading CodeQL bundle $codeql_bundle_version..." # Download and name both CodeQL bundles.
download_with_retries "https://github.com/github/codeql-action/releases/download/$codeql_bundle_name/codeql-bundle.tar.gz" "/tmp" "codeql-bundle.tar.gz" codeql_bundle_versions=("${codeql_bundle_version}" "${prior_codeql_bundle_version}")
tar -xzf "/tmp/codeql-bundle.tar.gz" -C "$extraction_directory" codeql_tag_names=("${codeql_tag_name}" "${prior_codeql_tag_name}")
# Touch a special file that indicates to the CodeQL Action that this bundle was baked-in to the hosted runner images. for index in "${!codeql_bundle_versions[@]}"; do
touch "$extraction_directory/pinned-version" bundle_version="${codeql_bundle_versions[$index]}"
bundle_tag_name="${codeql_tag_names[$index]}"
echo "Downloading CodeQL bundle $bundle_version..."
download_with_retries "https://github.com/github/codeql-action/releases/download/$bundle_tag_name/codeql-bundle.tar.gz" "/tmp" "codeql-bundle.tar.gz"
codeql_archive="/tmp/codeql-bundle.tar.gz"
codeql_toolcache_path="$AGENT_TOOLSDIRECTORY/CodeQL/$bundle_version/x64"
mkdir -p "$codeql_toolcache_path"
echo "Unpacking the downloaded CodeQL bundle archive..."
tar -xzf "$codeql_archive" -C "$codeql_toolcache_path"
# We only pin the latest version in the toolcache, to support overriding the CodeQL version specified in defaults.json on GitHub Enterprise.
if [[ "$bundle_version" == "$codeql_bundle_version" ]]; then
touch "$codeql_toolcache_path/pinned-version"
fi
# Touch a file to indicate to the toolcache that setting up CodeQL is complete. # Touch a file to indicate to the toolcache that setting up CodeQL is complete.
touch "$extraction_directory.complete" touch "$codeql_toolcache_path.complete"
done

View File

@@ -60,6 +60,19 @@ Describe "Toolset" {
} }
} }
} }
# Validate that there are two versions of CodeQL included.
if ($toolName -eq "CodeQL") {
$foundPriorVersion = Get-Item $expectedVersionPath `
| Sort-Object -Property {[SemVer]$_.name} -Descending `
| Select-Object -Last 1
$foundPriorVersionPath = Join-Path $foundPriorVersion $tool.arch
$priorExecutablePath = Join-Path $foundPriorVersionPath "codeql/codeql"
It "Validate prior version of codeql/codeql" -TestCases @{PriorExecutablePath = $priorExecutablePath} {
$PriorExecutablePath | Should -Exist
}
}
} }
} }
} }

View File

@@ -2,24 +2,41 @@
source ~/utils/utils.sh source ~/utils/utils.sh
# Retrieve the name of the CodeQL bundle preferred by the Action (in the format codeql-bundle-YYYYMMDD). # Retrieve the name of the CodeQL bundle preferred by the Action (in the format codeql-bundle-YYYYMMDD).
codeql_bundle_name="$(curl -sSL https://raw.githubusercontent.com/github/codeql-action/v2/src/defaults.json | jq -r .bundleVersion)" base_url="$(curl -sSL https://raw.githubusercontent.com/github/codeql-action/v2/src/defaults.json)"
# Convert the bundle name to a version number (0.0.0-YYYYMMDD). codeql_tag_name="$(echo "$base_url" | jq -r '.bundleVersion')"
codeql_bundle_version="0.0.0-${codeql_bundle_name##*-}" codeql_cli_version="$(echo "$base_url" | jq -r '.cliVersion')"
prior_codeql_tag_name="$(echo "$base_url" | jq -r '.priorBundleVersion')"
prior_codeql_cli_version="$(echo "$base_url" | jq -r '.priorCliVersion')"
echo "Downloading CodeQL bundle $codeql_bundle_version..." # Convert the tag names to bundles with a version number (x.y.z-YYYYMMDD).
download_with_retries "https://github.com/github/codeql-action/releases/download/$codeql_bundle_name/codeql-bundle.tar.gz" "/tmp" "codeql-bundle.tar.gz" codeql_bundle_version="${codeql_cli_version}-${codeql_tag_name##*-}"
codeqlArchive="/tmp/codeql-bundle.tar.gz" prior_codeql_bundle_version="${prior_codeql_cli_version}-${prior_codeql_tag_name##*-}"
codeqlToolcachePath="$AGENT_TOOLSDIRECTORY/codeql/$codeql_bundle_version/x64" # Download and name both CodeQL bundles.
mkdir -p $codeqlToolcachePath codeql_bundle_versions=("${codeql_bundle_version}" "${prior_codeql_bundle_version}")
codeql_tag_names=("${codeql_tag_name}" "${prior_codeql_tag_name}")
for index in "${!codeql_bundle_versions[@]}"; do
bundle_version="${codeql_bundle_versions[$index]}"
bundle_tag_name="${codeql_tag_names[$index]}"
echo "Downloading CodeQL bundle $bundle_version..."
download_with_retries "https://github.com/github/codeql-action/releases/download/$bundle_tag_name/codeql-bundle.tar.gz" "/tmp" "codeql-bundle.tar.gz"
codeql_archive="/tmp/codeql-bundle.tar.gz"
codeql_toolcache_path="$AGENT_TOOLSDIRECTORY/CodeQL/$bundle_version/x64"
mkdir -p "$codeql_toolcache_path"
echo "Unpacking the downloaded CodeQL bundle archive..." echo "Unpacking the downloaded CodeQL bundle archive..."
tar -xzf $codeqlArchive -C $codeqlToolcachePath tar -xzf "$codeql_archive" -C "$codeql_toolcache_path"
# Touch a special file that indicates to the CodeQL Action that this bundle was baked-in to the hosted runner images. # We only pin the latest version in the toolcache, to support overriding the CodeQL version specified in defaults.json on GitHub Enterprise.
touch "$codeqlToolcachePath/pinned-version" if [[ "$bundle_version" == "$codeql_bundle_version" ]]; then
touch "$codeql_toolcache_path/pinned-version"
fi
# Touch a file to indicate to the toolcache that setting up CodeQL is complete. # Touch a file to indicate to the toolcache that setting up CodeQL is complete.
touch "$codeqlToolcachePath.complete" touch "$codeql_toolcache_path.complete"
done
invoke_tests "Common" "CodeQL" invoke_tests "Common" "CodeQLBundles"

View File

@@ -632,12 +632,17 @@ function Build-GraalVMTable {
} }
} }
function Get-CodeQLBundleVersion { function Get-CodeQLBundleVersions {
$CodeQLVersionWildcard = Join-Path $Env:AGENT_TOOLSDIRECTORY -ChildPath "CodeQL" | Join-Path -ChildPath "*" $CodeQLVersionsWildcard = Join-Path $Env:AGENT_TOOLSDIRECTORY -ChildPath "CodeQL" | Join-Path -ChildPath "*"
$CodeQLVersionPath = Get-ChildItem $CodeQLVersionWildcard | Select-Object -First 1 -Expand FullName $CodeQLVersionPaths = Get-ChildItem $CodeQLVersionsWildcard
$CodeQLPath = Join-Path $CodeQLVersionPath -ChildPath "x64" | Join-Path -ChildPath "codeql" | Join-Path -ChildPath "codeql" $CodeQlVersions=@()
foreach ($CodeQLVersionPath in $CodeQLVersionPaths) {
$FullCodeQLVersionPath = $CodeQLVersionPath | Select-Object -Expand FullName
$CodeQLPath = Join-Path $FullCodeQLVersionPath -ChildPath "x64" | Join-Path -ChildPath "codeql" | Join-Path -ChildPath "codeql"
$CodeQLVersion = & $CodeQLPath version --quiet $CodeQLVersion = & $CodeQLPath version --quiet
return $CodeQLVersion $CodeQLVersions += $CodeQLVersion
}
return $CodeQLVersions
} }
function Get-ColimaVersion { function Get-ColimaVersion {

View File

@@ -137,7 +137,7 @@ $tools.AddToolVersion("Bicep CLI", $(Get-BicepVersion))
$tools.AddToolVersion("Cabal", $(Get-CabalVersion)) $tools.AddToolVersion("Cabal", $(Get-CabalVersion))
$tools.AddToolVersion("Cmake", $(Get-CmakeVersion)) $tools.AddToolVersion("Cmake", $(Get-CmakeVersion))
if (-not $os.IsCatalina) { if (-not $os.IsCatalina) {
$tools.AddToolVersion("CodeQL Action Bundle", $(Get-CodeQLBundleVersion)) $tools.AddToolVersion("CodeQL Action Bundles", $(Get-CodeQLBundleVersions))
} }
if (-not $os.IsCatalina) { if (-not $os.IsCatalina) {
$tools.AddToolVersion("Colima", $(Get-ColimaVersion)) $tools.AddToolVersion("Colima", $(Get-ColimaVersion))

View File

@@ -139,15 +139,39 @@ Describe "VirtualBox" -Skip:($os.IsBigSur) {
} }
} }
Describe "CodeQL" -Skip:($os.IsCatalina) { Describe "CodeQLBundles" -Skip:($os.IsCatalina) {
It "codeql" { It "Latest CodeQL Bundle" {
$CodeQLVersionWildcard = Join-Path $Env:AGENT_TOOLSDIRECTORY -ChildPath "CodeQL" | Join-Path -ChildPath "*" $CodeQLVersionWildcards = Join-Path $Env:AGENT_TOOLSDIRECTORY -ChildPath "CodeQL" | Join-Path -ChildPath "*"
$CodeQLVersionPath = Get-ChildItem $CodeQLVersionWildcard | Select-Object -First 1 -Expand FullName $LatestCodeQLVersionPath = Get-ChildItem $CodeQLVersionWildcards | Sort-Object -Property { [SemVer]$_.name } -Descending | Select-Object -First 1 -Expand FullName
$CodeQLPath = Join-Path $CodeQLVersionPath -ChildPath "x64" | Join-Path -ChildPath "codeql" | Join-Path -ChildPath "codeql" $LatestCodeQLPath = Join-Path $LatestCodeQLVersionPath -ChildPath "x64" | Join-Path -ChildPath "codeql" | Join-Path -ChildPath "codeql"
"$CodeQLPath version --quiet" | Should -ReturnZeroExitCode "$LatestCodeQLPath version --quiet" | Should -ReturnZeroExitCode
$CodeQLPacksPath = Join-Path $CodeQLVersionPath -ChildPath "x64" | Join-Path -ChildPath "codeql" | Join-Path -ChildPath "qlpacks" $LatestCodeQLPacksPath = Join-Path $LatestCodeQLVersionPath -ChildPath "x64" | Join-Path -ChildPath "codeql" | Join-Path -ChildPath "qlpacks"
$CodeQLPacksPath | Should -Exist $LatestCodeQLPacksPath | Should -Exist
}
It "Prior CodeQL Bundle" {
$CodeQLVersionWildcards = Join-Path $Env:AGENT_TOOLSDIRECTORY -ChildPath "CodeQL" | Join-Path -ChildPath "*"
$PriorCodeQLVersionPath = Get-ChildItem $CodeQLVersionWildcards | Sort-Object -Property { [SemVer]$_.name } -Descending | Select-Object -Last 1 -Expand FullName
$PriorCodeQLPath = Join-Path $PriorCodeQLVersionPath -ChildPath "x64" | Join-Path -ChildPath "codeql" | Join-Path -ChildPath "codeql"
"$PriorCodeQLPath version --quiet" | Should -ReturnZeroExitCode
$PriorCodeQLPacksPath = Join-Path $PriorCodeQLVersionPath -ChildPath "x64" | Join-Path -ChildPath "codeql" | Join-Path -ChildPath "qlpacks"
$PriorCodeQLPacksPath | Should -Exist
}
It "Latest and Prior CodeQL Bundles are unique" {
$CodeQLVersionWildcards = Join-Path $Env:AGENT_TOOLSDIRECTORY -ChildPath "CodeQL" | Join-Path -ChildPath "*"
$LatestCodeQLVersionPath = Get-ChildItem $CodeQLVersionWildcards | Sort-Object -Property { [SemVer]$_.name } -Descending | Select-Object -First 1 -Expand FullName
$LatestCodeQLPath = Join-Path $LatestCodeQLVersionPath -ChildPath "x64" | Join-Path -ChildPath "codeql" | Join-Path -ChildPath "codeql"
$LatestCodeQLVersion = & $LatestCodeQLPath version --quiet
$PriorCodeQLVersionPath = Get-ChildItem $CodeQLVersionWildcards | Sort-Object -Property { [SemVer]$_.name } -Descending | Select-Object -Last 1 -Expand FullName
$PriorCodeQLPath = Join-Path $PriorCodeQLVersionPath -ChildPath "x64" | Join-Path -ChildPath "codeql" | Join-Path -ChildPath "codeql"
$PriorCodeQLVersion = & $PriorCodeQLPath version --quiet
$LatestCodeQLVersion | Should -Not -Match $PriorCodeQLVersion
} }
} }

View File

@@ -4,25 +4,48 @@
################################################################################ ################################################################################
# Retrieve the name of the CodeQL bundle preferred by the Action (in the format codeql-bundle-YYYYMMDD). # Retrieve the name of the CodeQL bundle preferred by the Action (in the format codeql-bundle-YYYYMMDD).
$CodeQLBundleName = (Invoke-RestMethod "https://raw.githubusercontent.com/github/codeql-action/v2/src/defaults.json").bundleVersion $Defaults = (Invoke-RestMethod "https://raw.githubusercontent.com/github/codeql-action/v2/src/defaults.json")
# Convert the bundle name to a version number (0.0.0-YYYYMMDD). $CodeQLTagName = $Defaults.bundleVersion
$CodeQLBundleVersion = "0.0.0-" + $CodeQLBundleName.split("-")[-1] $CodeQLCliVersion = $Defaults.cliVersion
$PriorCodeQLTagName = $Defaults.priorBundleVersion
$PriorCodeQLCliVersion = $Defaults.priorCliVersion
$ExtractionDirectory = Join-Path $Env:AGENT_TOOLSDIRECTORY -ChildPath "CodeQL" | Join-Path -ChildPath $CodeQLBundleVersion | Join-Path -ChildPath "x64" # Convert the tag names to bundles with a version number (x.y.z-YYYYMMDD).
New-Item -Path $ExtractionDirectory -ItemType Directory -Force | Out-Null $CodeQLBundleVersion = $CodeQLCliVersion + "-" + $CodeQLTagName.split("-")[-1]
$PriorCodeQLBundleVersion = $PriorCodeQLCliVersion + "-" + $PriorCodeQLTagName.split("-")[-1]
Write-Host "Downloading CodeQL bundle $CodeQLBundleVersion..." $Bundles = @(
$CodeQLBundlePath = Start-DownloadWithRetry -Url "https://github.com/github/codeql-action/releases/download/$CodeQLBundleName/codeql-bundle.tar.gz" -Name "codeql-bundle.tar.gz" [PSCustomObject]@{
TagName=$CodeQLTagName;
BundleVersion=$CodeQLBundleVersion;
},
[PSCustomObject]@{
TagName=$PriorCodeQLTagName;
BundleVersion=$PriorCodeQLBundleVersion;
}
)
foreach ($Bundle in $Bundles) {
Write-Host "Downloading CodeQL bundle $($Bundle.BundleVersion)..."
$CodeQLBundlePath = Start-DownloadWithRetry -Url "https://github.com/github/codeql-action/releases/download/$($Bundle.TagName)/codeql-bundle.tar.gz" -Name "codeql-bundle.tar.gz"
$DownloadDirectoryPath = (Get-Item $CodeQLBundlePath).Directory.FullName $DownloadDirectoryPath = (Get-Item $CodeQLBundlePath).Directory.FullName
$CodeQLToolcachePath = Join-Path $Env:AGENT_TOOLSDIRECTORY -ChildPath "CodeQL" | Join-Path -ChildPath $Bundle.BundleVersion | Join-Path -ChildPath "x64"
New-Item -Path $CodeQLToolcachePath -ItemType Directory -Force | Out-Null
Write-Host "Unpacking the downloaded CodeQL bundle archive..."
Extract-7Zip -Path $CodeQLBundlePath -DestinationPath $DownloadDirectoryPath Extract-7Zip -Path $CodeQLBundlePath -DestinationPath $DownloadDirectoryPath
$UnGzipedCodeQLBundlePath = Join-Path $DownloadDirectoryPath "codeql-bundle.tar" $UnGzipedCodeQLBundlePath = Join-Path $DownloadDirectoryPath "codeql-bundle.tar"
Extract-7Zip -Path $UnGzipedCodeQLBundlePath -DestinationPath $ExtractionDirectory Extract-7Zip -Path $UnGzipedCodeQLBundlePath -DestinationPath $CodeQLToolcachePath
# Touch a special file that indicates to the CodeQL Action that this bundle was baked-in to the hosted runner images. # We only pin the latest version in the toolcache, to support overriding the CodeQL version specified in defaults.json on GitHub Enterprise.
New-Item -ItemType file (Join-Path $ExtractionDirectory -ChildPath "pinned-version") if ($Bundle.BundleVersion -eq $CodeQLBundleVersion) {
New-Item -ItemType file (Join-Path $CodeQLToolcachePath -ChildPath "pinned-version")
}
# Touch a file to indicate to the toolcache that setting up CodeQL is complete. # Touch a file to indicate to the toolcache that setting up CodeQL is complete.
New-Item -ItemType file "$ExtractionDirectory.complete" New-Item -ItemType file "$CodeQLToolcachePath.complete"
}
# Test that the tool has been extracted successfully. # Test that the tools have been extracted successfully.
Invoke-PesterTests -TestFile "Tools" -TestName "CodeQLBundle" Invoke-PesterTests -TestFile "Tools" -TestName "CodeQLBundles"

View File

@@ -69,7 +69,7 @@ $tools.AddToolVersion("Bazelisk", $(Get-BazeliskVersion))
$tools.AddToolVersion("Bicep", $(Get-BicepVersion)) $tools.AddToolVersion("Bicep", $(Get-BicepVersion))
$tools.AddToolVersion("Cabal", $(Get-CabalVersion)) $tools.AddToolVersion("Cabal", $(Get-CabalVersion))
$tools.AddToolVersion("CMake", $(Get-CMakeVersion)) $tools.AddToolVersion("CMake", $(Get-CMakeVersion))
$tools.AddToolVersion("CodeQL Action Bundle", $(Get-CodeQLBundleVersion)) $tools.AddToolVersion("CodeQL Action Bundle", $(Get-CodeQLBundleVersions))
$tools.AddToolVersion("Docker", $(Get-DockerVersion)) $tools.AddToolVersion("Docker", $(Get-DockerVersion))
$tools.AddToolVersion("Docker Compose v1", $(Get-DockerComposeVersion)) $tools.AddToolVersion("Docker Compose v1", $(Get-DockerComposeVersion))
$tools.AddToolVersion("Docker Compose v2", $(Get-DockerComposeVersionV2)) $tools.AddToolVersion("Docker Compose v2", $(Get-DockerComposeVersionV2))

View File

@@ -42,12 +42,17 @@ function Get-CMakeVersion {
return $cmakeVersion return $cmakeVersion
} }
function Get-CodeQLBundleVersion { function Get-CodeQLBundleVersions {
$CodeQLVersionsWildcard = Join-Path $Env:AGENT_TOOLSDIRECTORY -ChildPath "codeql" | Join-Path -ChildPath "*" $CodeQLVersionsWildcard = Join-Path $Env:AGENT_TOOLSDIRECTORY -ChildPath "CodeQL" | Join-Path -ChildPath "*"
$CodeQLVersionPath = Get-ChildItem $CodeQLVersionsWildcard | Select-Object -First 1 -Expand FullName $CodeQLVersionPaths = Get-ChildItem $CodeQLVersionsWildcard
$CodeQLPath = Join-Path $CodeQLVersionPath -ChildPath "x64" | Join-Path -ChildPath "codeql" | Join-Path -ChildPath "codeql.exe" $CodeQlVersions=@()
foreach ($CodeQLVersionPath in $CodeQLVersionPaths) {
$FullCodeQLVersionPath = $CodeQLVersionPath | Select-Object -Expand FullName
$CodeQLPath = Join-Path $FullCodeQLVersionPath -ChildPath "x64" | Join-Path -ChildPath "codeql" | Join-Path -ChildPath "codeql.exe"
$CodeQLVersion = & $CodeQLPath version --quiet $CodeQLVersion = & $CodeQLPath version --quiet
return $CodeQLVersion $CodeQLVersions += $CodeQLVersion
}
return $CodeQLVersions
} }
function Get-DockerVersion { function Get-DockerVersion {

View File

@@ -21,13 +21,41 @@ Describe "Bazel" {
} }
} }
Describe "CodeQLBundle" { Describe "CodeQLBundles" {
It "CodeQLBundle" { It "Latest CodeQL Bundle" {
$CodeQLVersionsWildcard = Join-Path $Env:AGENT_TOOLSDIRECTORY -ChildPath "codeql" | Join-Path -ChildPath "*" $CodeQLVersionsWildcard = Join-Path $Env:AGENT_TOOLSDIRECTORY -ChildPath "CodeQL" | Join-Path -ChildPath "*"
$CodeQLVersionPath = Get-ChildItem $CodeQLVersionsWildcard | Select-Object -First 1 -Expand FullName $LatestCodeQLVersionPath = Get-ChildItem $CodeQLVersionsWildcard | Sort-Object -Descending | Select-Object -First 1 -Expand FullName
$CodeQLPath = Join-Path $CodeQLVersionPath -ChildPath "x64" | Join-Path -ChildPath "codeql" | Join-Path -ChildPath "codeql.exe" $LatestCodeQLPath = Join-Path $LatestCodeQLVersionPath -ChildPath "x64" | Join-Path -ChildPath "codeql" | Join-Path -ChildPath "codeql.exe"
"$CodeQLPath version" | Should -ReturnZeroExitCode "$LatestCodeQLPath version --quiet" | Should -ReturnZeroExitCode
$LatestCodeQLPacksPath = Join-Path $LatestCodeQLVersionPath -ChildPath "x64" | Join-Path -ChildPath "codeql" | Join-Path -ChildPath "qlpacks"
$LatestCodeQLPacksPath | Should -Exist
} }
It "Prior CodeQL Bundle" {
$CodeQLVersionsWildcard = Join-Path $Env:AGENT_TOOLSDIRECTORY -ChildPath "CodeQL" | Join-Path -ChildPath "*"
$PriorCodeQLVersionPath = Get-ChildItem $CodeQLVersionsWildcard | Sort-Object -Descending | Select-Object -Last 1 -Expand FullName
$PriorCodeQLPath = Join-Path $PriorCodeQLVersionPath -ChildPath "x64" | Join-Path -ChildPath "codeql" | Join-Path -ChildPath "codeql.exe"
"$PriorCodeQLPath version --quiet" | Should -ReturnZeroExitCode
$PriorCodeQLPacksPath = Join-Path $PriorCodeQLVersionPath -ChildPath "x64" | Join-Path -ChildPath "codeql" | Join-Path -ChildPath "qlpacks"
$PriorCodeQLPacksPath | Should -Exist
}
It "Latest and Prior CodeQL Bundles are unique" {
$CodeQLVersionsWildcard = Join-Path $Env:AGENT_TOOLSDIRECTORY -ChildPath "CodeQL" | Join-Path -ChildPath "*"
$LatestCodeQLVersionPath = Get-ChildItem $CodeQLVersionsWildcard | Sort-Object -Descending | Select-Object -First 1 -Expand FullName
$LatestCodeQLPath = Join-Path $LatestCodeQLVersionPath -ChildPath "x64" | Join-Path -ChildPath "codeql" | Join-Path -ChildPath "codeql.exe"
$LatestCodeQLVersion = & $LatestCodeQLPath version --quiet
$PriorCodeQLVersionPath = Get-ChildItem $CodeQLVersionsWildcard | Sort-Object -Descending | Select-Object -Last 1 -Expand FullName
$PriorCodeQLPath = Join-Path $PriorCodeQLVersionPath -ChildPath "x64" | Join-Path -ChildPath "codeql" | Join-Path -ChildPath "codeql.exe"
$PriorCodeQLVersion = & $PriorCodeQLPath version --quiet
$LatestCodeQLVersion | Should -Not -Match $PriorCodeQLVersion
}
} }
Describe "R" { Describe "R" {