dev/release/verify-release-candidate.ps1 (124 lines of code) (raw):

#!/usr/bin/env pwsh # # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. # Expects PowerShell 7 but also tested with PowerShell 5.1 (built into # Windows 7+). Works on Linux! # To reuse build artifacts between runs set ARROW_TMPDIR environment variable to # a directory where the temporary files should be placed to, note that this # directory is not cleaned up automatically. $ErrorActionPreference = "Stop" if ($env:VERBOSE) { Set-PSDebug -Trace 1 } if ($args.Count -eq 0) { $Version = "HEAD" $SourceKind = "local" } elseif ($args.Count -eq 2) { $Version = $args[0] $RcNumber = $args[1] $SourceKind = "tarball" } else { $script = Split-Path $PSCommandPath -leaf echo @" Usage: Verify release candidate: $($script) X.Y.Z RC_NUMBER Verify current checkout: $($script) Assumes Mamba is set up and available on the path. "@ exit 1 } $ArrowDistUrl = "https://dist.apache.org/repos/dist/dev/arrow" $DistName = "apache-arrow-adbc-$($Version)" function Download-Dist-File { $DistUrl = "$($ArrowDistUrl)/$($DistName)-rc$($RcNumber)/$($args[0])" $DistPath = Join-Path $ArrowTempDir $args[0] echo "Fetching $($DistUrl)" if ($env:VERIFICATION_MOCK_DIST_DIR -eq $null) { Invoke-WebRequest -Uri $DistUrl -OutFile $DistPath } else { $SourcePath = Join-Path $env:VERIFICATION_MOCK_DIST_DIR $args[0] cp $SourcePath $DistPath } } function Show-Header { echo "" echo "============================================================" echo $args[0] echo "============================================================" } Show-Header "Create Temporary Directory" if ($env:ARROW_TMPDIR -eq $null) { $ArrowTempDir = New-TemporaryFile | % { $_.FullName } Remove-Item -Force $ArrowTempDir } else { $ArrowTempDir = $env:ARROW_TMPDIR } New-Item -ItemType Directory -Force -Path $ArrowTempDir | Out-Null echo "Using $($ArrowTempDir)" Show-Header "Ensure Source Directory" if ($SourceKind -eq "local") { $ArrowSourceDir = Join-Path $PSScriptRoot "..\.." | Resolve-Path | % { $_.Path } } else { $ArrowSourceDir = Join-Path $ArrowTempDir $DistName New-Item -ItemType Directory -Path $ArrowSourceDir -Force Download-Dist-File "$($DistName).tar.gz" Download-Dist-File "$($DistName).tar.gz.sha512" $DistPath = Join-Path $ArrowTempDir "$($DistName).tar.gz" $Sha512Path = Join-Path $ArrowTempDir "$($DistName).tar.gz.sha512" $ExpectedSha512 = (Get-Content $Sha512Path).Split(" ")[0] if (-not ((Get-FileHash -Algorithm SHA512 $DistPath).Hash -eq $ExpectedSha512)) { echo "SHA512 hash mismatch" exit 1 } tar -C $ArrowSourceDir --strip-components 1 -xf $DistPath } echo "Using $($ArrowSourceDir)" Show-Header "Create Conda Environment" mamba create -c conda-forge -f -y -p $(Join-Path $ArrowTempDir conda-env) ` --file $(Join-Path $ArrowSourceDir ci\conda_env_cpp.txt) ` --file $(Join-Path $ArrowSourceDir ci\conda_env_python.txt) ` go Invoke-Expression $(conda shell.powershell hook | Out-String) conda activate $(Join-Path $ArrowTempDir conda-env) # XXX: force bundled gtest as the conda-forge version appears to # require you to exactly match the MSVC version it was compiled with mamba uninstall gtest # Activating doesn't appear to set GOROOT $env:GOROOT = $(Join-Path $ArrowTempDir conda-env go) Show-Header "Verify C/C++ Sources" $CppBuildDir = Join-Path $ArrowTempDir cpp-build New-Item -ItemType Directory -Force -Path $CppBuildDir | Out-Null # XXX(apache/arrow-adbc#634): not working on Windows due to it picking # up MSVC as the C compiler, which then blows up when /Werror gets # passed in by some package $env:BUILD_DRIVER_FLIGHTSQL = "0" $env:BUILD_DRIVER_SNOWFLAKE = "0" & $(Join-Path $ArrowSourceDir ci\scripts\cpp_build.ps1) $ArrowSourceDir $CppBuildDir if (-not $?) { exit 1 } $env:BUILD_DRIVER_POSTGRESQL = "0" & $(Join-Path $ArrowSourceDir ci\scripts\cpp_test.ps1) $CppBuildDir if (-not $?) { exit 1 } $env:BUILD_DRIVER_POSTGRESQL = "1" Show-Header "Verify Python Sources" & $(Join-Path $ArrowSourceDir ci\scripts\python_build.ps1) $ArrowSourceDir $CppBuildDir if (-not $?) { exit 1 } & $(Join-Path $ArrowSourceDir ci\scripts\python_test.ps1) $ArrowSourceDir $CppBuildDir if (-not $?) { exit 1 } Show-Header "Release candidate looks good!"