Subject: [postgresql-interfaces/psqlodbc] PR #157: Upgrade GitHub Actions workflow

From: "fdcastel (@fdcastel)" <[email-masked]>
Date: Thu, 05 Mar 2026 22:28:06 +0000

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.

---

From: "davecramer (@davecramer)" <[email-masked]>
Date: Fri, 06 Mar 2026 12:25:55 +0000

I believe we do require openssl to release a version.

---

From: "davecramer (@davecramer)" <[email-masked]>
Date: Fri, 06 Mar 2026 12:26:37 +0000

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

---

From: "fdcastel (@fdcastel)" <[email-masked]>
Date: Fri, 06 Mar 2026 13:03:03 +0000

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.

---

From: "fdcastel (@fdcastel)" <[email-masked]>
Date: Sat, 14 Mar 2026 11:28:29 +0000

@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.

---

From: "davecramer (@davecramer)" <[email-masked]>
Date: Wed, 18 Mar 2026 20:13:36 +0000

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