Skip to content

Upgrade GitHub Actions workflow - #157

Merged
davecramer merged 1 commit into
postgresql-interfaces:mainfrom
fdcastel:issue-156
Mar 17, 2026
Merged

Upgrade GitHub Actions workflow#157
davecramer merged 1 commit into
postgresql-interfaces:mainfrom
fdcastel:issue-156

Conversation

@fdcastel

@fdcastel fdcastel commented Mar 5, 2026

Copy link
Copy Markdown
Contributor

Closes #156


Key improvements:

  1. No full PostgreSQL build from source - x64 uses prebuilt EDB binaries (PG 17.9 binary archive, ~1 min download vs ~15 min build)
  2. x86 libpq only - Builds ONLY the libpq client library from source via meson compile ... libpq:shared_library. The test server is always x64; x86 libpq is only needed to compile/link the x86 ODBC driver. No SSL needed since CI tests use localhost.
  3. Eliminated dependencies: Win32/Win64 OpenSSL and pkgconfiglite are no longer needed (winflexbison is still required by PG's meson build system)
  4. Parallel matrix - standard and mimalloc run simultaneously
  5. Separate release job - only runs on version tags

Results (first run, no caches):

  • standard: 8m28s
  • mimalloc: 11m47s
  • Total wall-clock: ~12 min (vs ~25+ min sequential in the old workflow)

Subsequent cached runs will be even faster since the x86 libpq, x64 binaries, and all tools are cached.

@davecramer

Copy link
Copy Markdown
Contributor

I believe we do require openssl to release a version.

@davecramer

Copy link
Copy Markdown
Contributor

The reason we pull from git is to get the latest. 17.9 is not the latest. We can cache the build though

@fdcastel

fdcastel commented Mar 6, 2026

Copy link
Copy Markdown
Contributor Author

Sorry Dave. I have to admit I didn’t pay much attention to the release process. I focused mainly on the builds in this initial PR to get some early feedback.

I’ll review how the current release process works and come back with a revised PR.

- Use prebuilt PostgreSQL x64 binaries instead of building from source
- Build only the x86 libpq client library from source (NOT the full server)
  No official prebuilt x86 PostgreSQL binaries exist since PG 11.
  The test server is always x64; x86 libpq is only needed to compile
  and link the x86 ODBC driver.
  SSL is not required for the x86 client lib (CI tests use localhost).
- Eliminate Win32/Win64 OpenSSL, pkgconfiglite dependencies
  (winflexbison is still required by the PostgreSQL meson build system)
- Run standard and mimalloc builds in parallel using matrix strategy
- Separate release job that runs only on version tags

Closes postgresql-interfaces#156
@fdcastel

Copy link
Copy Markdown
Contributor Author

@davecramer I've updated the PR to address both of your concerns.

Please feel free to share any additional questions or suggestions.


What changed:

  1. OpenSSL restored — Both x64 and x86 builds now include OpenSSL (currently 3.3.6, matching main). The SSL DLLs are placed into d:\postgresql\bin and d:\postgresql86\bin so the installers pick them up correctly.

  2. PostgreSQL built from source (REL_18_STABLE) — No more prebuilt binaries. The full x64 server is built with ninja + ninja install (same as before), and pkgconfiglite is back for OpenSSL detection.

  3. Rebased on latest main — Includes the release 17.00.0008 changes and the OpenSSL 3.3.6 CVE fix.

What's kept from the original PR:

  • Parallel matrix — standard and mimalloc run simultaneously
  • Separate release job — only runs on REL-* tags, uses upload-artifact/download-artifact
  • Minimal x86 libpq build — only builds the client library (with SSL now), not the full server. Much faster than a full x86 build.

What's new:

  • Dedicated build-postgres job — Builds PostgreSQL x64 (full) and x86 (libpq only) once, caches the result. Both matrix jobs then restore from cache using actions/cache/restore. This avoids wasteful duplicate PG builds and speeds up cache-miss debugging runs.

  • workflow_dispatch trigger — Allows manual workflow runs from the Actions tab (useful for debugging).

Workflow structure:

build-postgres          →  build-and-test (standard)   →  release
(PG x64 full + x86 libpq)    build-and-test (mimalloc)      (only on REL-* tags)

Timing (cached run on my fork):

Job Duration
build-postgres 10s (cache hit)
build-and-test (standard) ~7m
build-and-test (mimalloc) ~8m
Total wall-clock ~9 min

On a cold run (no cache), build-postgres will take longer to build PG from source, but the result is cached for all subsequent runs. The WORKFLOW_VERSION_POSTGRESQL env var can be bumped to invalidate the cache when needed.

@davecramer
davecramer merged commit aa7e642 into postgresql-interfaces:main Mar 17, 2026
4 checks passed
@davecramer

Copy link
Copy Markdown
Contributor

Just confirmed that the release still works, thanks so much for this

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Upgrade GitHub Actions workflow

2 participants