Skip to content

Build binary packages #110

Build binary packages

Build binary packages #110

Workflow file for this run

name: Build binary packages
on:
workflow_dispatch:
schedule:
- cron: '28 7 * * sun'
jobs:
linux: # {{{
runs-on: ubuntu-latest
if: true
env:
LIBPQ_VERSION: "16.0"
OPENSSL_VERSION: "1.1.1w"
strategy:
fail-fast: false
matrix:
arch: [x86_64, i686, ppc64le, aarch64]
pyver: [cp38, cp39, cp310, cp311, cp312]
platform: [manylinux, musllinux]
steps:
- uses: actions/checkout@v4
- name: Set up QEMU for multi-arch build
# Check https://github.com/docker/setup-qemu-action for newer versions.
uses: docker/setup-qemu-action@v2
with:
# Note: 6.2.0 is buggy: make sure to avoid it.
# See https://github.com/pypa/cibuildwheel/issues/1250
image: tonistiigi/binfmt:qemu-v7.0.0
- name: Cache libpq build
uses: actions/cache@v3
with:
path: /tmp/libpq.build
key: libpq-${{ matrix.platform }}-${{ matrix.arch }}-${{ env.LIBPQ_VERSION }}-${{ env.OPENSSL_VERSION }}
- name: Create the binary package source tree
run: python3 ./tools/build/copy_to_binary.py
- name: Build wheels
uses: pypa/cibuildwheel@v2.16.5
with:
package-dir: psycopg_binary
env:
CIBW_MANYLINUX_X86_64_IMAGE: manylinux2014
CIBW_MANYLINUX_I686_IMAGE: manylinux2014
CIBW_MANYLINUX_AARCH64_IMAGE: manylinux2014
CIBW_MANYLINUX_PPC64LE_IMAGE: manylinux2014
CIBW_BUILD: ${{matrix.pyver}}-${{matrix.platform}}_${{matrix.arch}}
CIBW_ARCHS_LINUX: auto aarch64 ppc64le
CIBW_BEFORE_ALL_LINUX: ./tools/build/wheel_linux_before_all.sh
CIBW_REPAIR_WHEEL_COMMAND: >-
./tools/build/strip_wheel.sh {wheel}
&& auditwheel repair -w {dest_dir} {wheel}
CIBW_TEST_REQUIRES: ./psycopg[test] ./psycopg_pool
CIBW_TEST_COMMAND: >-
pytest {project}/tests -m 'not slow and not flakey' --color yes
CIBW_ENVIRONMENT_PASS_LINUX: LIBPQ_VERSION OPENSSL_VERSION
CIBW_ENVIRONMENT: >-
PSYCOPG_IMPL=binary
PSYCOPG_TEST_DSN='host=172.17.0.1 user=postgres'
PGPASSWORD=password
LIBPQ_BUILD_PREFIX=/host/tmp/libpq.build
PATH="$LIBPQ_BUILD_PREFIX/bin:$PATH"
LD_LIBRARY_PATH="$LIBPQ_BUILD_PREFIX/lib"
PSYCOPG_TEST_WANT_LIBPQ_BUILD=${{ env.LIBPQ_VERSION }}
PSYCOPG_TEST_WANT_LIBPQ_IMPORT=${{ env.LIBPQ_VERSION }}
- uses: actions/upload-artifact@v3
with:
path: ./wheelhouse/*.whl
services:
postgresql:
image: postgres:14
env:
POSTGRES_PASSWORD: password
ports:
- 5432:5432
# Set health checks to wait until postgres has started
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
# }}}
macos-14: # {{{
runs-on: macos-14
if: true
strategy:
fail-fast: false
matrix:
arch: [arm64]
pyver: [cp310, cp311, cp312]
env:
PG_VERSION: "16"
steps:
- uses: actions/checkout@v4
- name: Create the binary package source tree
run: python3 ./tools/build/copy_to_binary.py
- name: Install PostgreSQL on the runner
run: brew install gnu-sed postgresql@${PG_VERSION}
- name: Start PostgreSQL service
run: brew services start postgresql@${PG_VERSION}
- name: Build wheels
uses: pypa/cibuildwheel@v2.16.5
with:
package-dir: psycopg_binary
env:
CIBW_BUILD: ${{matrix.pyver}}-macosx_${{matrix.arch}}
CIBW_ARCHS_MACOS: ${{matrix.arch}}
CIBW_TEST_REQUIRES: ./psycopg[test] ./psycopg_pool
CIBW_TEST_COMMAND: >-
pytest {project}/tests -m 'not slow and not flakey' --color yes
CIBW_ENVIRONMENT: >-
PSYCOPG_IMPL=binary
PSYCOPG_TEST_DSN='dbname=postgres'
PATH="/opt/homebrew/opt/postgresql@${PG_VERSION}/bin:$PATH"
PSYCOPG_TEST_WANT_LIBPQ_BUILD=">= ${PG_VERSION}"
PSYCOPG_TEST_WANT_LIBPQ_IMPORT=">= ${PG_VERSION}"
- uses: actions/upload-artifact@v3
with:
path: ./wheelhouse/*.whl
# }}}
macos-12: # {{{
runs-on: macos-12
if: true
strategy:
fail-fast: false
matrix:
# These archs require an Apple M1 runner: [arm64, universal2]
arch: [x86_64]
pyver: [cp38, cp39, cp310, cp311, cp312]
env:
PG_VERSION: "16"
steps:
- uses: actions/checkout@v4
- name: Create the binary package source tree
run: python3 ./tools/build/copy_to_binary.py
- name: Install PostgreSQL on the runner
run: brew install gnu-sed postgresql@${PG_VERSION}
- name: Start PostgreSQL service
run: brew services start postgresql@${PG_VERSION}
- name: Build wheels
uses: pypa/cibuildwheel@v2.16.5
with:
package-dir: psycopg_binary
env:
CIBW_BUILD: ${{matrix.pyver}}-macosx_${{matrix.arch}}
CIBW_ARCHS_MACOS: ${{matrix.arch}}
CIBW_TEST_REQUIRES: ./psycopg[test] ./psycopg_pool
CIBW_TEST_COMMAND: >-
pytest {project}/tests -m 'not slow and not flakey' --color yes
CIBW_ENVIRONMENT: >-
PSYCOPG_IMPL=binary
PSYCOPG_TEST_DSN='dbname=postgres'
PATH="/usr/local/opt/postgresql@${PG_VERSION}/bin:$PATH"
PSYCOPG_TEST_WANT_LIBPQ_BUILD=">= ${PG_VERSION}"
PSYCOPG_TEST_WANT_LIBPQ_IMPORT=">= ${PG_VERSION}"
- uses: actions/upload-artifact@v3
with:
path: ./wheelhouse/*.whl
# }}}
windows: # {{{
runs-on: windows-latest
if: true
strategy:
fail-fast: false
matrix:
# Might want to add win32, untested at the moment.
arch: [win_amd64]
pyver: [cp38, cp39, cp310, cp311, cp312]
steps:
- uses: actions/checkout@v4
- name: Start PostgreSQL service for test
run: |
$PgSvc = Get-Service "postgresql*"
Set-Service $PgSvc.Name -StartupType manual
$PgSvc.Start()
- name: Create the binary package source tree
run: python3 ./tools/build/copy_to_binary.py
- name: Build wheels
uses: pypa/cibuildwheel@v2.16.5
with:
package-dir: psycopg_binary
env:
CIBW_BUILD: ${{matrix.pyver}}-${{matrix.arch}}
CIBW_ARCHS_WINDOWS: AMD64 x86
CIBW_BEFORE_BUILD_WINDOWS: '.\tools\build\wheel_win32_before_build.bat'
CIBW_REPAIR_WHEEL_COMMAND_WINDOWS: >-
delvewheel repair -w {dest_dir}
--no-mangle "libiconv-2.dll;libwinpthread-1.dll" {wheel}
CIBW_TEST_REQUIRES: ./psycopg[test] ./psycopg_pool
CIBW_TEST_COMMAND: >-
pytest {project}/tests -m "not slow and not flakey" --color yes
CIBW_ENVIRONMENT_WINDOWS: >-
PSYCOPG_IMPL=binary
PATH="C:\\Program Files\\PostgreSQL\\14\\bin;$PATH"
PSYCOPG_TEST_DSN="host=127.0.0.1 user=postgres"
PSYCOPG_TEST_WANT_LIBPQ_BUILD=">= 14"
PSYCOPG_TEST_WANT_LIBPQ_IMPORT=">= 14"
- uses: actions/upload-artifact@v3
with:
path: ./wheelhouse/*.whl
# }}}