Skip to content

fix: isolate integration testserver into a nested module (break celeris↔loadgen dep cycle)#68

Merged
FumingPower3925 merged 1 commit into
mainfrom
fix/break-celeris-dep-cycle
Jun 28, 2026
Merged

fix: isolate integration testserver into a nested module (break celeris↔loadgen dep cycle)#68
FumingPower3925 merged 1 commit into
mainfrom
fix/break-celeris-dep-cycle

Conversation

@FumingPower3925

Copy link
Copy Markdown
Contributor

Problem

Perpetual dependabot churn from a celeris ↔ loadgen dependency cycle:

  • loadgen's main module required github.com/goceleris/celeris — solely because of internal/integrationtest/testserver/main.go (a package main test target spinning up a real celeris server for the h2c integration matrix). go mod why celeris confirmed that single path.
  • Because the require sat in the released module, every celeris release forced a dependabot bump + a loadgen re-release. And the celeris repo's test/perfmatrix module depends on loadgen, so that re-release bounced back as a dependabot PR inside the celeris repo → self-perpetuating loop.

Fix

Carve the testserver into its own nested module so loadgen's released module no longer requires celeris:

  • go mod why celeris"main module does not need package celeris".
  • The nested module pins celeris independently and can be bumped freely — bumping it never re-releases loadgen, so the cycle is broken at its only closing edge.
  • (celeris was already invisible to loadgen's consumers — it lived under internal/, pruned by Go 1.17+ module-graph pruning. This stops loadgen re-releasing on every celeris release.)

Changes

  • New internal/integrationtest/testserver/go.mod (+go.sum) requiring celeris.
  • Removed celeris (+ orphaned indirects) from the root go.mod via go mod tidy — root now requires only hdrhistogram-go + x/net.
  • integration_h2c_test.go builds the testserver from inside its module dir (cmd.Dir) instead of by path — no go.work, so release go build ./... stays clean (nested module excluded from ./...).
  • dependabot: watch the nested module (keeps its celeris pin fresh; harmless — no longer triggers a loadgen release).

Verified

go build/vet/test ./... (root, celeris-free), testserver builds in its module, integration test compiles (-tags integration), gofmt clean.

Paired with a celeris-repo PR that deletes the redundant test/perfmatrix bench harness (the forward edge). Either cut breaks the cycle; both = fully clean.

…is dep cycle)

loadgen's main module required github.com/goceleris/celeris solely because of
internal/integrationtest/testserver/main.go (a `package main` test target that
spins up a real celeris server for the h2c integration matrix). `go mod why
celeris` confirmed that single path. Because the require sat in the MAIN module,
every celeris release forced a dependabot bump + loadgen re-release — and since
the celeris repo's test/perfmatrix module depends on loadgen, that re-release
bounced back as a dependabot PR inside the celeris repo. A self-perpetuating
celeris<->loadgen cycle.

Fix: carve the testserver into its own nested module
(internal/integrationtest/testserver/go.mod) so loadgen's released module no
longer requires celeris at all (`go mod why celeris` → "main module does not
need package celeris"). The nested module pins celeris independently and can be
bumped freely — bumping it never re-releases loadgen, so the cycle is broken at
its only closing edge. celeris was already invisible to loadgen's *consumers*
(it lived under internal/, pruned by Go 1.17+ module-graph pruning); this stops
loadgen from re-releasing on every celeris release.

- New internal/integrationtest/testserver/go.mod (+ go.sum) requiring celeris.
- Removed celeris (+ now-orphaned indirects) from loadgen's root go.mod via
  `go mod tidy`. Root now requires only hdrhistogram-go + x/net.
- integration_h2c_test.go builds the testserver from inside its module dir
  (cmd.Dir) instead of by path, so its celeris dep resolves there. No go.work
  (keeps release `go build ./...` clean — nested module excluded from ./...).
- dependabot: watch the nested module so its celeris pin stays fresh (harmless;
  no longer triggers a loadgen release).

Verified: go build/vet/test ./... (root, celeris-free), testserver builds in its
module, integration test compiles (-tags integration), gofmt clean.
@FumingPower3925 FumingPower3925 merged commit efe0ec0 into main Jun 28, 2026
3 checks passed
@FumingPower3925 FumingPower3925 deleted the fix/break-celeris-dep-cycle branch June 28, 2026 13:07
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.

1 participant