mirror of
https://github.com/coder/coder.git
synced 2026-09-24 15:04:27 +08:00
ci: cache embedded postgres binaries in flake checks (#26986)
flake-go keeps failing every `TestServer` subtest that boots `coder server` with built-in PostgreSQL ([example run](https://github.com/coder/coder/actions/runs/28685288282/job/85134336803)) with `no version found matching 13.21.0`, which is embedded-postgres's error for any non-200 while downloading the Postgres binary archive from Maven. The archive gets cached under the server's config root, which is a fresh temp dir in every test, so with `test-count: 35` one flake run downloads it dozens of times and Maven rate-limits the runner. Using an external Postgres (like coder/terraform-provider-coderd#370 did) would defeat the point, since these subtests exist to exercise the built-in Postgres path. Instead, `startBuiltinPostgres` now honors `EMBEDDED_PG_CACHE_DIR` as the archive cache path (test runs only, data/runtime dirs stay per-test), and flake-go.yaml wires in the existing `embedded-pg-cache` actions the same way the Windows/macOS lanes in ci.yaml already do. All iterations then share a single download, and usually zero once the actions cache is warm. The upload step only saves on `main`.
This commit is contained in:
@@ -2412,6 +2412,15 @@ func startBuiltinPostgres(ctx context.Context, cfg config.Root, logger slog.Logg
|
||||
if customCacheDir != "" {
|
||||
cachePath = filepath.Join(customCacheDir, "postgres")
|
||||
}
|
||||
// Tests get a fresh config root per invocation, so the default cache path
|
||||
// never hits and each test re-downloads the archive from Maven, which
|
||||
// rate-limits CI runners. EMBEDDED_PG_CACHE_DIR (restored from the actions
|
||||
// cache) lets them share one copy.
|
||||
if flag.Lookup("test.v") != nil {
|
||||
if dir := os.Getenv("EMBEDDED_PG_CACHE_DIR"); dir != "" {
|
||||
cachePath = dir
|
||||
}
|
||||
}
|
||||
stdlibLogger := slog.Stdlib(ctx, logger.Named("postgres"), slog.LevelDebug)
|
||||
|
||||
// If the port is not defined, an available port will be found dynamically. This has
|
||||
|
||||
Reference in New Issue
Block a user