admin/validate-release.ps1 (77 lines of code) (raw):
# Allow the version to be provided as a parameter
param ( [string]$VERSION )
if (-not $VERSION) { $VERSION = "1.4.0" }
$STAGE="dev"
#$STAGE="release"
if ( ${ENV:STAGE} ) { $STAGE = ${ENV:STAGE} }
$BASE_DL="https://dist.apache.org/repos/dist/$STAGE/logging/log4cxx"
if ( ${ENV:BASE_DL} ) { $BASE_DL = ${ENV:BASE_DL} }
$ARCHIVE="apache-log4cxx-$VERSION"
if ( ${ENV:ARCHIVE} ) { $ARCHIVE = ${ENV:ARCHIVE} }
$TEST_DIRECTORY="${ENV:TEMP}/log4cxx-$VERSION"
if ( ${ENV:TEST_DIRECTORY} ) { $TEST_DIRECTORY = "${ENV:TEST_DIRECTORY}" }
try
{
gpg --version | Out-Null
}
catch
{
Write-Error "The gpg program directory must be included the PATH environment variable" -ErrorAction Stop
}
if (-not (Test-Path -Path "$TEST_DIRECTORY" -PathType Container))
{
New-Item -ItemType Directory -Path "$TEST_DIRECTORY" -ErrorAction Stop
}
Set-Location -Path "$TEST_DIRECTORY"
$FULL_DL="$BASE_DL/$VERSION/$ARCHIVE"
$ARCHIVE_TYPES = @("tar.gz", "zip")
foreach ($ARCHIVE_TYPE in $ARCHIVE_TYPES)
{
if (Test-Path "$ARCHIVE.$ARCHIVE_TYPE") { Remove-Item "$ARCHIVE.$ARCHIVE_TYPE" }
Invoke-WebRequest -Uri "$FULL_DL.$ARCHIVE_TYPE" -OutFile "$ARCHIVE.$ARCHIVE_TYPE" -ErrorAction Stop
$EXTS = @("asc", "sha512", "sha256")
foreach ($EXT in $EXTS)
{
if (Test-Path "$ARCHIVE.$ARCHIVE_TYPE.$EXT") { Remove-Item "$ARCHIVE.$ARCHIVE_TYPE.$EXT" }
Invoke-WebRequest -Uri "$FULL_DL.$ARCHIVE_TYPE.$EXT" -OutFile "$ARCHIVE.$ARCHIVE_TYPE.$EXT" -ErrorAction Stop
}
$SUMS = @("sha512", "sha256")
foreach ($SUM in $SUMS)
{
Write-Output "Validating $ARCHIVE.$ARCHIVE_TYPE $SUM checksum..."
$Line = @(Get-Content -Path "$ARCHIVE.$ARCHIVE_TYPE.$SUM")[0]
$Fields = $Line -split '\s+'
$Hash = $Fields[0].Trim().ToUpper()
$ComputedHash = (Get-FileHash -Algorithm $SUM -Path "$ARCHIVE.$ARCHIVE_TYPE").Hash.ToUpper()
if ($Hash -ne $ComputedHash)
{
Write-Error "Read from $ARCHIVE.$ARCHIVE_TYPE.${SUM}: $Hash" -ErrorAction Continue
Write-Error "Computed: $ComputedHash" -ErrorAction Continue
Write-Error "${File}: Not Passed" -ErrorAction Stop
}
}
Write-Output "Validating $ARCHIVE.$ARCHIVE_TYPE signature..."
gpg --verify "$ARCHIVE.$ARCHIVE_TYPE.asc"
if (!$? ) { exit 1 }
}
if (Test-Path "$ARCHIVE") { Remove-Item -Recurse "$ARCHIVE" }
if (Test-Path test-build) { Remove-Item -Recurse test-build }
Write-Output "Extracting files..."
Expand-Archive -Path "$ARCHIVE.zip" -DestinationPath . -ErrorAction Stop
# Check tools are on the PATH
try
{
cmake --version | Out-Null
}
catch
{
Write-Error "The cmake program directory must be included the PATH environment variable" -ErrorAction Stop
}
${LOG4CXX_TEST_PROGRAM_PATH}="C:/msys64/usr/bin"
if ( ${ENV:LOG4CXX_TEST_PROGRAM_PATH} ) { $LOG4CXX_TEST_PROGRAM_PATH = ${ENV:LOG4CXX_TEST_PROGRAM_PATH} }
cmake -S $ARCHIVE -B test-build "-DLOG4CXX_TEST_PROGRAM_PATH=$LOG4CXX_TEST_PROGRAM_PATH"
if ( ! $? ) { exit 1 }
cmake --build test-build --config Release
if ( ! $? ) { exit 1 }
Set-Location -Path test-build
ctest -C Release --output-on-failure