From ba4187d830a90f3e8edba10260d213079b7b5912 Mon Sep 17 00:00:00 2001 From: trim21 Date: Sun, 23 Feb 2025 17:25:45 +0800 Subject: [PATCH] ci: install win32 libpq from conda force --- .github/workflows/packages-bin.yml | 28 +++---- .github/workflows/tests.yml | 24 +++--- .../pg_config_vcpkg_stub/__init__.py | 79 ------------------- .../build/pg_config_vcpkg_stub/pyproject.toml | 11 --- tools/build/wheel_win32_before_build.bat | 5 -- 5 files changed, 23 insertions(+), 124 deletions(-) delete mode 100644 tools/build/pg_config_vcpkg_stub/pg_config_vcpkg_stub/__init__.py delete mode 100644 tools/build/pg_config_vcpkg_stub/pyproject.toml diff --git a/.github/workflows/packages-bin.yml b/.github/workflows/packages-bin.yml index a7b090563..ddf8c61c9 100644 --- a/.github/workflows/packages-bin.yml +++ b/.github/workflows/packages-bin.yml @@ -26,15 +26,15 @@ on: env: # Latest release: https://www.postgresql.org/ftp/source/ LIBPQ_VERSION: "17.4" - # Note: On windows the latest version can be found at - # https://vcpkg.io/en/package/libpq - # However the command line tool doesn't have a flag to specify to install - # a specific version, so whatever you get you keep it. - # https://github.com/microsoft/vcpkg/discussions/25622 # Latest release: https://www.openssl.org/source/ OPENSSL_VERSION: "3.4.1" +concurrency: + # Cancel older requests of the same workflow in the same branch. + group: ${{ github.workflow }}-${{ github.ref_name }} + cancel-in-progress: true + jobs: linux: # {{{ @@ -204,15 +204,12 @@ jobs: $PgSvc.Start() shell: powershell - - name: Export GitHub Actions cache environment variables - uses: actions/github-script@v7 + - uses: prefix-dev/setup-pixi@v0.8.3 with: - script: | - const path = require('path') - core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || ''); - core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || ''); - core.addPath(path.join(process.env.VCPKG_INSTALLATION_ROOT, 'installed/x64-windows-release/lib')); - core.addPath(path.join(process.env.VCPKG_INSTALLATION_ROOT, 'installed/x64-windows-release/bin')); + run-install: false + - run: pixi global install libpq=${{ env.LIBPQ_VERSION }} --with openssl=${{ env.OPENSSL_VERSION }} + - run: echo "EXTRA_LIB_DIR=$(pg_config.exe --bindir)" >> $GITHUB_OUTPUT + id: libdir - name: Create the binary package source tree run: python3 ./tools/build/copy_to_binary.py @@ -228,6 +225,7 @@ jobs: CIBW_BEFORE_BUILD_WINDOWS: '.\tools\build\wheel_win32_before_build.bat' CIBW_REPAIR_WHEEL_COMMAND_WINDOWS: >- delvewheel repair -w {dest_dir} + --add-path="${{ steps.libdir.outputs.EXTRA_LIB_DIR }}" --no-mangle "libiconv-2.dll;libwinpthread-1.dll" {wheel} CIBW_TEST_REQUIRES: ./psycopg[test] ./psycopg_pool CIBW_TEST_COMMAND: >- @@ -235,8 +233,8 @@ jobs: CIBW_ENVIRONMENT_WINDOWS: >- PSYCOPG_IMPL=binary PSYCOPG_TEST_DSN="host=127.0.0.1 user=postgres" - PSYCOPG_TEST_WANT_LIBPQ_BUILD=">= 16" - PSYCOPG_TEST_WANT_LIBPQ_IMPORT=">= 16" + PSYCOPG_TEST_WANT_LIBPQ_BUILD=${{env.LIBPQ_VERSION}} + PSYCOPG_TEST_WANT_LIBPQ_IMPORT=${{env.LIBPQ_VERSION}} - uses: actions/upload-artifact@v4 with: diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 1f1f82280..4abff74d1 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -301,6 +301,7 @@ jobs: PSYCOPG_TEST_DSN: "host=127.0.0.1 dbname=postgres" # On windows pproxy doesn't seem very happy. Also a few timing test fail. NOT_MARKERS: "timing proxy mypy" + PG_VERSION: "17.4" defaults: run: @@ -333,23 +334,18 @@ jobs: if: ${{ github.event_name == 'schedule' }} run: echo "NOT_MARKERS=$NOT_MARKERS refcount" >> $GITHUB_ENV - - name: Export GitHub Actions cache environment variables - # https://learn.microsoft.com/en-us/vcpkg/consume/binary-caching-github-actions-cache - uses: actions/github-script@v7 + - uses: prefix-dev/setup-pixi@v0.8.3 with: - script: | - const path = require('path') - core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || ''); - core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || ''); - core.addPath(path.join(process.env.VCPKG_INSTALLATION_ROOT, 'installed/x64-windows-release/lib')); - core.addPath(path.join(process.env.VCPKG_INSTALLATION_ROOT, 'installed/x64-windows-release/bin')); - - - name: Install libpq from vcpkg and install pg_config.exe stub + run-install: false + + - run: pixi global install libpq=${{ env.PG_VERSION }} + + - name: 'add libpq.dll to path' + run: echo "$(pg_config.exe --bindir)" >> $GITHUB_PATH + + - name: Install delvewheel run: .\tools\build\wheel_win32_before_build.bat shell: powershell - env: - # cache vcpkg - VCPKG_BINARY_SOURCES: "clear;x-gha,readwrite" - name: Build the C wheel if: ${{ matrix.impl == 'c' }} diff --git a/tools/build/pg_config_vcpkg_stub/pg_config_vcpkg_stub/__init__.py b/tools/build/pg_config_vcpkg_stub/pg_config_vcpkg_stub/__init__.py deleted file mode 100644 index 89935662b..000000000 --- a/tools/build/pg_config_vcpkg_stub/pg_config_vcpkg_stub/__init__.py +++ /dev/null @@ -1,79 +0,0 @@ -#!/usr/bin/env python -""" -We use vcpkg in github actions to build psycopg-binary. - -This is a stub to work as `pg_config --libdir` or `pg_config --includedir` to -make it work with vcpkg. - -You will need install `vcpkg`, set `VCPKG_ROOT` env, and run `vcpkg install -libpq:x64-windows-release` before using this script. -""" - -import os -import sys -import platform -from pathlib import Path -from argparse import ArgumentParser, Namespace, RawDescriptionHelpFormatter - - -class ScriptError(Exception): - """Controlled exception raised by the script.""" - - -def _main() -> None: - # only x64-windows - if not (sys.platform == "win32" and platform.machine() == "AMD64"): - raise ScriptError("this script should only be used in x64-windows") - - vcpkg_root = os.environ.get( - "VCPKG_ROOT", os.environ.get("VCPKG_INSTALLATION_ROOT", "") - ) - if not vcpkg_root: - raise ScriptError("VCPKG_ROOT/VCPKG_INSTALLATION_ROOT env var not specified") - vcpkg_platform_root = (Path(vcpkg_root) / "installed/x64-windows-release").resolve() - - args = parse_cmdline() - - if args.libdir: - if not (f := vcpkg_platform_root / "lib/libpq.lib").exists(): - raise ScriptError(f"libpq library not found: {f}") - print(vcpkg_platform_root.joinpath("lib")) - - elif args.includedir: - if not (d := vcpkg_platform_root / "include/libpq").is_dir(): - raise ScriptError(f"libpq include directory not found: {d}") - print(vcpkg_platform_root.joinpath("include")) - - else: - raise ScriptError("command not handled") - - -def parse_cmdline() -> Namespace: - parser = ArgumentParser( - description=__doc__, formatter_class=RawDescriptionHelpFormatter - ) - g = parser.add_mutually_exclusive_group(required=True) - g.add_argument( - "--libdir", - action="store_true", - help="show location of object code libraries", - ) - g.add_argument( - "--includedir", - action="store_true", - help="show location of C header files of the client interfaces", - ) - opt = parser.parse_args() - return opt - - -def main() -> None: - try: - _main() - except ScriptError as e: - print(f"ERROR: {e}.", file=sys.stderr) - sys.exit(1) - - -if __name__ == "__main__": - main() diff --git a/tools/build/pg_config_vcpkg_stub/pyproject.toml b/tools/build/pg_config_vcpkg_stub/pyproject.toml deleted file mode 100644 index f776905f2..000000000 --- a/tools/build/pg_config_vcpkg_stub/pyproject.toml +++ /dev/null @@ -1,11 +0,0 @@ -[build-system] -requires = ["setuptools"] -build-backend = "setuptools.build_meta" - -[project] -name = 'pg_config_vcpkg_stub' -version = "0" -description = "see docs string in pg_config_vcpkg_stub for more details" - -[project.scripts] -pg_config = 'pg_config_vcpkg_stub:main' diff --git a/tools/build/wheel_win32_before_build.bat b/tools/build/wheel_win32_before_build.bat index 5a22ab384..c016ceb2c 100644 --- a/tools/build/wheel_win32_before_build.bat +++ b/tools/build/wheel_win32_before_build.bat @@ -2,8 +2,3 @@ pip install delvewheel wheel -REM A specific version cannot be easily chosen. -REM https://github.com/microsoft/vcpkg/discussions/25622 -vcpkg install libpq:x64-windows-release - -pipx install .\tools\build\pg_config_vcpkg_stub\ -- 2.47.2