fix: isolate integration testserver into a nested module (break celeris↔loadgen dep cycle)#68
Merged
Merged
Conversation
…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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
Perpetual dependabot churn from a celeris ↔ loadgen dependency cycle:
github.com/goceleris/celeris— solely because ofinternal/integrationtest/testserver/main.go(apackage maintest target spinning up a real celeris server for the h2c integration matrix).go mod why celerisconfirmed that single path.test/perfmatrixmodule 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".internal/, pruned by Go 1.17+ module-graph pruning. This stops loadgen re-releasing on every celeris release.)Changes
internal/integrationtest/testserver/go.mod(+go.sum) requiring celeris.go.modviago mod tidy— root now requires onlyhdrhistogram-go+x/net.integration_h2c_test.gobuilds the testserver from inside its module dir (cmd.Dir) instead of by path — nogo.work, so releasego build ./...stays clean (nested module excluded from./...).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/perfmatrixbench harness (the forward edge). Either cut breaks the cycle; both = fully clean.