From: davecramer Date: Mon, 4 Mar 2024 23:08:49 +0000 (-0500) Subject: Build and release using github actions X-Git-Url: http://waps.l3s.uni-hannover.de/gitweb/queryCache.php?a=commitdiff_plain;h=4e1c1257acc66ddec124358dfe4c58346c22eed6;p=psqlodbc.git Build and release using github actions --- diff --git a/.github/workflows/configuration.xml b/.github/workflows/configuration.xml new file mode 100644 index 0000000..760dc95 --- /dev/null +++ b/.github/workflows/configuration.xml @@ -0,0 +1,38 @@ + + + + + + + d:\postgresql86\include + d:\postgresql86\lib + d:\postgresql86\bin + + + + + + + + + + + d:\postgresql\include + d:\postgresql\lib + d:\postgresql\bin + + + + + + + + + + 03/04/2024 10:49:13 + 17.0 + v143 + Current + arm64 + + \ No newline at end of file diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 0000000..4203264 --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,246 @@ +name: MSBuild +run-name: psql ODBC CI - ${{ github.event.head_commit.message }} + +on: + push: + branches: [ "main" ] + tags: + - 'REL-*' + pull_request: + branches: [ "main" ] + +env: + # Path to the solution file relative to the root of the project. + SOLUTION_FILE_PATH: . + + # Configuration type to build. + # You can convert this to a build matrix if you need coverage of multiple configuration types. + # https://docs.github.com/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix + BUILD_CONFIGURATION: Release + +permissions: + contents: read + +jobs: + build_and_test: + runs-on: windows-latest + + steps: + - uses: actions/checkout@v4 + with: + repository: "postgres/postgres.git" + ref: 'master' + - name: 'get meson' + run: | + python -m pip install meson + python -m pip install ninja + - name: Cache Postgres directory + uses: actions/cache@v4 + id: cachePostgres + with: + path: d:\postgresql + key: postgresql + - name: Cache Postgres86 directory + uses: actions/cache@v4 + id: cachePostgres86 + with: + path: d:\postgresql86 + key: postgresql86 + - name: Cache GNU diffutils for Test on PostgreSQL for Windows + uses: actions/cache@v4 + id: cacheDiffutilsZip + with: + path: C:\OTHERBIN\diffutils + key: diffutils-2.8.7-1-bin.zip + env: + SEGMENT_DOWNLOAD_TIMEOUT_MINS: 1 + - name: Cache PostgreSQL installer + uses: actions/cache@v4 + id: cachePostgresInstaller + with: + path: C:\OTHERBIN\postgresql_install.exe + key: postgresql_installer + - name: Cache pkgconfiglite for Compile using msvc and meson + uses: actions/cache@v4 + id: cachePkgConfigLiteZip + with: + path: C:\OTHERBIN\pkgconfiglite + key: pkg-config-lite-0.28-1_bin-win32.zip + env: + SEGMENT_DOWNLOAD_TIMEOUT_MINS: 1 + + - name: Cache winflexbison for Compile using msvc + uses: actions/cache@v4 + id: cacheWinFlexBisonZip + with: + path: C:\OTHERBIN\winflexbison + key: win_flex_bison-2.5.24.zip + env: + SEGMENT_DOWNLOAD_TIMEOUT_MINS: 1 + - name: Download GNU diffutils for Test on PostgreSQL for Windows + if: ${{steps.cacheDiffutilsZip.outputs.cache-hit != 'true'}} + uses: suisei-cn/actions-download-file@v1.6.0 + id: downloadDiffutilsZip + with: + retry-times: 5 + url: https://zenlayer.dl.sourceforge.net/project/gnuwin32/diffutils/2.8.7-1/diffutils-2.8.7-1-bin.zip + + - name: Download pkgconfiglite for Compile using msvc and meson + if: ${{steps.cachePkgConfigLiteZip.outputs.cache-hit != 'true'}} + uses: suisei-cn/actions-download-file@v1.6.0 + id: downloadPkgConfigLiteZip + with: + retry-times: 5 + url: http://downloads.sourceforge.net/project/pkgconfiglite/0.28-1/pkg-config-lite-0.28-1_bin-win32.zip + + - name: Download winflexbison for Compile using msvc + if: ${{steps.cacheWinFlexBisonZip.outputs.cache-hit != 'true'}} + uses: suisei-cn/actions-download-file@v1.6.0 + id: downloadWinFlexBisonZip + with: + retry-times: 5 + url: https://sourceforge.net/projects/winflexbison/files/win_flex_bison-2.5.24.zip + + - name: Download postgresql install from EDB + uses: suisei-cn/actions-download-file@v1.6.0 + if: ${{steps.cachePostgresInstaller.outputs.cache-hit != 'true'}} + id: downloadPostgresInstaller + with: + retry-times: 5 + url: https://sbp.enterprisedb.com/getfile.jsp?fileid=1258893 + target: c:\OTHERBIN + filename: postgresql_install.exe + + - name: Extract Diffuntils and add Diffuntils bin directory to the PATH for Test on PostgreSQL for Windows + shell: cmd + run: | + rem MKDIR creates any intermediate directories in the path, if needed. + mkdir "C:\OTHERBIN\diffutils" + rem 7z is provided by Github Actions + 7z x diffutils-2.8.7-1-bin.zip -o"C:\OTHERBIN\diffutils" + copy diffutils-2.8.7-1-bin.zip "C:\OTHERBIN\diffutils" + dir "C:\OTHERBIN\diffutils" + rem - man7.org/linux/man-pages/man1/printf.1.html + printf "C:\\OTHERBIN\\diffutils\\bin" >> %GITHUB_PATH% + + - name: Extract pkgconfiglite and add pkgconfiglite bin directory to the PATH for Compile using msvc and meson + shell: cmd + run: | + rem MKDIR creates any intermediate directories in the path, if needed. + mkdir "C:\OTHERBIN\pkgconfiglite" + rem 7z is provided by Github Actions + 7z x pkg-config-lite-0.28-1_bin-win32.zip -o"C:\OTHERBIN\pkgconfiglite" + copy pkg-config-lite-0.28-1_bin-win32.zip "C:\OTHERBIN\pkgconfiglite" + dir "C:\OTHERBIN\pkgconfiglite" + rem - man7.org/linux/man-pages/man1/printf.1.html + printf "C:\\OTHERBIN\\pkgconfiglite\\pkg-config-lite-0.28-1\\bin" >> %GITHUB_PATH% + + # Choco Install winflexbison + # BUT the "crazy-max/ghaction-chocolatey@v2" "install pkgconfiglite" file download often times-out + - name: Extract winflexbison and add the winflexbison directory to the PATH for Compile using msvc + shell: cmd + run: | + rem MKDIR creates any intermediate directories in the path, if needed. + mkdir "C:\OTHERBIN\winflexbison" + rem 7z is provided by Github Actions + 7z x win_flex_bison-2.5.24.zip -o"C:\OTHERBIN\winflexbison" + copy win_flex_bison-2.5.24.zip "C:\OTHERBIN\winflexbison" + dir "C:\OTHERBIN\winflexbison" + rem - man7.org/linux/man-pages/man1/printf.1.html + printf "C:\OTHERBIN\\winflexbison" >> %GITHUB_PATH% + - name: 'setup msvc x86' + if: ${{steps.cachePostgres86.outputs.cache-hit != 'true'}} + uses: TheMrMilchmann/setup-msvc-dev@v3 + with: + arch: x86 + - name: 'build postgresx86' + if: ${{steps.cachePostgres86.outputs.cache-hit != 'true'}} + run: | + meson setup buildx86 --prefix=d:\postgresql86 + cd buildx86 + ninja -v + ninja -v install + - name: 'setup msvc x64' + if: ${{steps.cachePostgres.outputs.cache-hit != 'true'}} + uses: TheMrMilchmann/setup-msvc-dev@v3 + with: + arch: x64 + - name : 'build postgres x64' + if: ${{steps.cachePostgres.outputs.cache-hit != 'true'}} + run: | + meson setup build --prefix=d:\postgresql + cd build + ninja + ninja install + - name: install postgresql binary + shell: cmd + run: | + echo on + C:\OTHERBIN\postgresql_install.exe --mode unattended --unattendedmodeui none --superpassword password --enable-components server + - name: start postgresql + shell: cmd + run: | + echo on + sc config "postgresql-x64-14" start= auto + - name: get psqlodbc + uses: actions/checkout@v4 + - name: 'setup msvc for psqlodbc' + uses: TheMrMilchmann/setup-msvc-dev@v3 + with: + arch: x86 + - name: build psqlodbc + shell: powershell + run: | + copy .github\workflows\configuration.xml winbuild + winbuild\BuildAll.ps1 + installer\buildInstallers.ps1 + - name: test psqlodbc + shell: powershell + run: | + winbuild\regress.ps1 -DsnInfo "SERVER=localhost|DATABASE=contrib_regression|PORT=5432|UID=postgres|PWD=password" + - name: Upload x64 merge module + uses: actions/upload-artifact@v4 + with: + name: psqlODBC x64 Merge Module + path: ./installer/x64/*.msm + retention-days: 5 + if-no-files-found: error + - name: Upload x64 installer package + uses: actions/upload-artifact@v4 + with: + name: psqlODBC x64 Installer + path: ./installer/x64/*.msi + retention-days: 5 + if-no-files-found: error + - name: Upload x86 merge module + uses: actions/upload-artifact@v4 + with: + name: psqlODBC x86 Merge Module + path: ./installer/x86/*.msm + retention-days: 5 + if-no-files-found: error + - name: Upload x86 installer package + uses: actions/upload-artifact@v4 + with: + name: psqlODBC x86 Installer + path: ./installer/x86/*.msi + retention-days: 5 + if-no-files-found: error + - name: Upload x64 setup + id: x64_setup + uses: actions/upload-artifact@v4 + with: + name: psqlODBC x64 Setup + path: ./installer/psqlodbc-setup/bin/Release/psqlodbc-setup.exe + retention-days: 5 + if-no-files-found: error + + - name: Create Release + if: startsWith(github.ref, 'refs/tags/REL-') + uses: ncipollo/release-action@v1.14.0 + id: create_release + with: + draft: false + prerelease: false + token: ${{secrets.RELEASE_TOKEN}} + artifacts: "./installer/x86/*.msi,./installer/x86/*.msm,./installer/psqlodbc-setup/bin/Release/psqlodbc-setup.exe" diff --git a/environ.c b/environ.c index 8ce794d..d2bfc26 100644 --- a/environ.c +++ b/environ.c @@ -194,7 +194,7 @@ ER_ReturnError(PG_ErrorInfo *pgerror, BOOL partial_ok = ((flag & PODBC_ALLOW_PARTIAL_EXTRACT) != 0); const char *msg; UWORD msglen, wrtlen, pcblen; - UInt4 stapos, + UInt4 stapos; if (!pgerror) return SQL_NO_DATA_FOUND; diff --git a/installer/buildInstallers.ps1 b/installer/buildInstallers.ps1 index 5a30796..6373db6 100644 --- a/installer/buildInstallers.ps1 +++ b/installer/buildInstallers.ps1 @@ -278,7 +278,7 @@ function buildInstaller([string]$CPUTYPE) } Write-Host ".`nLinking psqlODBC merge module..." - light -nologo -o $INSTBASE\psqlodbc_$CPUTYPE.msm $INSTBASE\psqlodbcm.wixobj + light -sval -nologo -o $INSTBASE\psqlodbc_$CPUTYPE.msm $INSTBASE\psqlodbcm.wixobj if ($LASTEXITCODE -ne 0) { throw "Failed to link merge module" } @@ -291,7 +291,7 @@ function buildInstaller([string]$CPUTYPE) } Write-Host ".`nLinking psqlODBC installer database..." - light -nologo -ext WixUIExtension -cultures:en-us -o $INSTBASE\psqlodbc_$CPUTYPE.msi $INSTBASE\psqlodbc.wixobj + light -sval -nologo -ext WixUIExtension -cultures:en-us -o $INSTBASE\psqlodbc_$CPUTYPE.msi $INSTBASE\psqlodbc.wixobj if ($LASTEXITCODE -ne 0) { throw "Failed to link installer database" } diff --git a/psqlodbc.sln b/psqlodbc.sln index b515cd3..eb5222f 100644 --- a/psqlodbc.sln +++ b/psqlodbc.sln @@ -1,7 +1,9 @@  -Microsoft Visual Studio Solution File, Format Version 9.00 -# Visual Studio 2005 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "psqlODBC", "psqlodbc.vcproj", "{C45ECB41-8473-4F11-8186-E5574CFBADCF}" +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.8.34408.163 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "psqlODBC", "psqlodbc.vcxproj", "{C45ECB41-8473-4F11-8186-E5574CFBADCF}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -17,4 +19,7 @@ Global GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {D4D16229-1A47-43D4-B881-F1D072436145} + EndGlobalSection EndGlobal diff --git a/readme.txt b/readme.txt index 7f64657..8e5afb8 100644 --- a/readme.txt +++ b/readme.txt @@ -5,7 +5,7 @@ Copyright (C) 1998 Insight Distribution Systems - Copyright (C) 1998 - 2023 The PostgreSQL Global Development Group + Copyright (C) 1998 - 2024 The PostgreSQL Global Development Group Multibyte support was added by Sankyo Unyu Service, (C) 2001. diff --git a/winbuild/MSProgram-Get.psm1 b/winbuild/MSProgram-Get.psm1 index 4e9711d..81926bc 100644 --- a/winbuild/MSProgram-Get.psm1 +++ b/winbuild/MSProgram-Get.psm1 @@ -44,6 +44,8 @@ function Find-MSBuild $VisualStudioVersion = "15.0" } elseif ((Find-VSDir 16) -ne "") { # VC16 is installed $VisualStudioVersion = "16.0" + } elseif ((Find-VSDir 17) -ne "") { #VC 17 is installed + $VisualStudioVersion = "17.0" } elseif ("${env:VS140COMNTOOLS}" -ne "") { # VC14 is installed $VisualStudioVersion = "14.0" } elseif ("${env:VS120COMNTOOLS}" -ne "") { # VC12 is installed @@ -67,7 +69,8 @@ function Find-MSBuild "14.0" { $toolsout = 14 } "15.0" { $toolsout = 15 } "16.0" { $toolsout = 16 } - default { throw "Selected Visual Stuidio is Version ${VisualStudioVersion}. Please use VC10 or later"} + "17.0" { $toolsout = 17 } + default { throw "Selected Visual Studio is Version ${VisualStudioVersion}. Please use VC10 or later"} } # # Determine ToolsVersion @@ -112,6 +115,7 @@ function Find-MSBuild } } catch {} if ("$msbuildexe" -eq "") { + Write-Debug "tools version $toolsnum" if ($toolsnum -gt 14) { # VC15 ~ VC16 $msbuildexe = msbfind_15_xx $toolsnum } else { # VC10 ~ VC14 @@ -149,6 +153,7 @@ function Find-MSBuild "14.0" {$Toolsetv="v140_xp"} "15.0" {$Toolsetv="v141_xp"} "16.0" {$Toolsetv="v142"} + "17.0" {$Toolsetv="v143"} } } # avoid a bug of Windows7.1SDK PlatformToolset @@ -400,7 +405,7 @@ function find_vs_installation return $vsdir } -$vsarray = @{VC15 = "2017"; VC16 = "2019"} +$vsarray = @{VC15 = "2017"; VC16 = "2019"; VC17 = "2022"} # find VS dir for VC15 ~ VC16 function find_default_msbuild_path { @@ -413,12 +418,13 @@ function find_default_msbuild_path if ($vsdir -eq "") { $toolsnum = [int]$toolsver - if ($env:PROCESSOR_ARCHITECTURE -eq "x86") { + if ($env:PROCESSOR_ARCHITECTURE -eq "x86" -or $env:PROCESSOR_ARCHITECTURE -eq "ARM64") { $pgmfs = "$env:ProgramFiles" } else { $pgmfs = "${env:ProgramFiles(x86)}" } $vsverdir = $vsarray["VC$toolsnum"] + Write-Debug "$pgmfs\Microsoft Visual Studio\$vsverdir\*\MSBuild\*\Bin\MSBuild.exe" $lslist = @(Get-ChildItem "$pgmfs\Microsoft Visual Studio\$vsverdir\*\MSBuild\*\Bin\MSBuild.exe" -ErrorAction SilentlyContinue) } else { $lslist = @(Get-ChildItem "$vsdir\MSBuild\*\Bin\MSBuild.exe" -ErrorAction SilentlyContinue) diff --git a/winbuild/regress.ps1 b/winbuild/regress.ps1 index 1dd65cd..bff0b7e 100644 --- a/winbuild/regress.ps1 +++ b/winbuild/regress.ps1 @@ -1,6 +1,6 @@ <# .SYNOPSIS - Run regressin test on Windows. + Run regression test on Windows. .DESCRIPTION Build test programs and run them. .PARAMETER Target @@ -13,6 +13,8 @@ Specify this switch in case of testing Ansi drivers. .PARAMETER DeclareFetch Specify Use Declare/Fetch mode. "On"(default), "off" or "both" is available. +.PARAMETER DsnInfo + Specify the dsn info "SERVER=${server}|DATABASE=${database}|PORT=${port}|UID=${uid}|PWD=${passwd}" .PARAMETER VCVersion Used Visual Studio version is determined automatically unless this option is specified. @@ -23,7 +25,7 @@ option is specified. Currently "v100", "Windows7.1SDK", "v110", "v110_xp", "v120", "v120_xp", "v140" or "v140_xp" is available. .PARAMETER MSToolsVersion - This option is deprecated. MSBuild ToolsVersion is detemrined + This option is deprecated. MSBuild ToolsVersion is determined automatically unless this option is specified. Currently "4.0", "12.0" or "14.0" is available. .PARAMETER Configuration @@ -44,7 +46,7 @@ > .\regress Clean Clean all generated files. .EXAMPLE - > .\regress -TestList connect, deprected + > .\regress -TestList connect, deprecated Build and run connect-test and deprecated-test. .EXAMPLE > .\regress -Ansi @@ -81,6 +83,7 @@ Param( [string]$BuildConfigPath, [ValidateSet("off", "on", "both")] [string]$DeclareFetch="on", +[string]$DsnInfo, [string]$SpecificDsn, [switch]$ReinstallDriver ) @@ -250,7 +253,7 @@ function RunTest($scriptPath, $Platform, $testexes) } } -function SpecialDsn($testdsn, $testdriver) +function SpecialDsn($testdsn, $testdriver, $dsninfo) { function input-dsninfo($server="localhost", $uid="postgres", $passwd="postgres", $port="5432", $database="contrib_regression") { @@ -280,7 +283,11 @@ function SpecialDsn($testdsn, $testdriver) switch ($LastExitCode) { -1 { Write-Host "`tAdding System DSN=$testdsn Driver=$testdriver" - $prop = input-dsninfo + if ($dsninfo.Length -eq 0) { + $prop = input-dsninfo + } else { + $prop = $dsninfo + } $prop += "|Debug=0|Commlog=0|ConnSettings=set+lc_messages='C'" $proc = Start-Process $regProgram -Verb runas -Wait -PassThru -ArgumentList "register_dsn $testdriver $testdsn $prop `"$dlldir`" Driver=${dllname}|Setup=${setup}" if ($proc.ExitCode -ne 0) { @@ -383,6 +390,10 @@ if ($DriverConfiguration -ieq "Debug") { $testdriver += "_debug" $testdsn += "_debug" } +if ("$DsnInfo" -ne "") { + Write-Host "`tDsn Info=$DsnInfo" + $dsninfo=$DsnInfo +} if ("$SpecificDsn" -ne "") { Write-Host "`tSpecific DSN=$SpecificDsn" $testdsn=$SpecificDsn @@ -414,7 +425,7 @@ foreach ($pl in $pary) { $env:PSQLODBC_TEST_DSN = $testdsn try { - SpecialDsn $testdsn $testdriver + SpecialDsn $testdsn $testdriver $dsninfo RunTest $scriptPath $pl $TESTEXES } catch [Exception] { throw $error[0]