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: # {{{
$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
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: >-
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:
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:
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' }}
+++ /dev/null
-#!/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()
+++ /dev/null
-[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'
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\