You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Part of the easymongo refactor (see PLAN.md on the refactor branch).
Working context (read this first)
Repository github.com/tophergopher/easymongo. Start from branch claude/mongotest-easymongo-refactor-wu2vhm; create a branch issue-<number>-<short-slug> from it and open a pull request back into it. PLAN.md on that branch is the source of truth; read it before writing code.
Go project, single module, all packages at the repo root except the new easymongotest/ subpackage. The final toolchain target is Go 1.27 (set by Toolchain: go 1.27, latest dependencies, tidy, remove replace directives #10); any Go 1.24 or newer works until then. Before pushing: gofmt -l . prints nothing, go vet ./..., go test -race ./....
The existing test suite (*_test.go at the root, package easymongo_test, every test function calling setup(t) from common_test.go) is the regression net for this refactor. It must pass after your change. It needs a Docker daemon reachable through the normal Docker environment and the mongo:8 image.
Method is test-driven: write the tests listed under "Tests first", confirm they fail for the expected reason, then implement. Never delete, skip or weaken an existing test to get green; if a test must change because the public API changed (for example primitive.ObjectID to bson.ObjectID), change only the types.
Commit messages: imperative summary line, blank line, body explaining why. Mention this issue number in the pull request description.
Scope
Makefile: the release target currently edits ../mongotest/go.mod, commits and tags the sibling repo in lock-step. mongotest no longer depends on easymongo, so remove that half. New behaviour: given TAG=vX.Y.Z, optionally MONGOTEST=vA.B.C to bump the github.com/tophergopher/mongotest/v2 requirement first, then go mod tidy, commit, tag, push tags. Use a portable sed invocation (the current sed -i '' is macOS-only).
README: replace every mongotest.NewTestConnection example with easymongotest.Run(t) / easymongotest.NewTestConnection, update the import path shown to github.com/tophergopher/easymongo/easymongotest, mention bson.ObjectID instead of primitive.ObjectID in the struct examples, add the TLS connection snippet, and note the driver v2 requirement (Go 1.27).
mongo.code-workspace is gitignored by pattern but committed; either remove it from the repo or drop the ignore rule. Recommend removing the file from git.
Add a CHANGELOG.md entry for the minor release describing the bson.ObjectID API change and the new subpackage.
Implementation details
Portable in-place sed: use sed -i.bak ... && rm go.mod.bak (works on GNU and BSD sed). Release target sketch:
release:
ifndefTAG
$(error TAG is required, e.g. make release TAG=v0.2.0)
endififdefMONGOTEST
go get github.com/tophergopher/mongotest/v2@$(MONGOTEST) && go mod tidy
git add go.mod go.sum && git commit -m "Bump mongotest/v2 to $(MONGOTEST)"
endif
git tag $(TAG) && git push origin master --tags
With DRY_RUN=1, prefix every command with echo.
Acceptance
make release TAG=v0.2.0 dry-runs correctly on Linux and macOS (document a DRY_RUN=1 flag that echoes instead of executing).
README examples compile when pasted into a test file.
Part of the easymongo refactor (see
PLAN.mdon the refactor branch).Working context (read this first)
github.com/tophergopher/easymongo. Start from branchclaude/mongotest-easymongo-refactor-wu2vhm; create a branchissue-<number>-<short-slug>from it and open a pull request back into it.PLAN.mdon that branch is the source of truth; read it before writing code.easymongotest/subpackage. The final toolchain target is Go 1.27 (set by Toolchain: go 1.27, latest dependencies, tidy, remove replace directives #10); any Go 1.24 or newer works until then. Before pushing:gofmt -l .prints nothing,go vet ./...,go test -race ./....*_test.goat the root, packageeasymongo_test, every test function callingsetup(t)fromcommon_test.go) is the regression net for this refactor. It must pass after your change. It needs a Docker daemon reachable through the normal Docker environment and themongo:8image.*mongo.Clienttype flows fromConnectiontoDatabasetoCollection), so the four driver issues Driver v2: migrate connect.go (mongo.Connect, Disconnect, BSONOptions, write concern) #2, Driver v2: options struct literals become builders; drop MaxTime; ArrayFilters and Delete option changes #3, Driver v2: primitive package merged into bson; replace x/bsonx in index.go #4 and Driver v2: Distinct returns a DistinctResult that must be decoded #5 land together in one pull request, worked in that order. Before them, New easymongotest subpackage wrapping mongotest/v2 #7 and Switch the easymongo test suite to easymongotest #8 must land so the test suite no longer depends on the oldgithub.com/tophergopher/mongotestv0.1.0 module (which itself imports easymongo and breaks the moment easymongo's types change). Until mongotest'sv2module is tagged, use a localreplace github.com/tophergopher/mongotest/v2 => ../mongotest/v2ingo.modand say so in the pull request; Toolchain: go 1.27, latest dependencies, tidy, remove replace directives #10 removes it.primitive.ObjectIDtobson.ObjectID), change only the types.Scope
Makefile: thereleasetarget currently edits../mongotest/go.mod, commits and tags the sibling repo in lock-step. mongotest no longer depends on easymongo, so remove that half. New behaviour: givenTAG=vX.Y.Z, optionallyMONGOTEST=vA.B.Cto bump thegithub.com/tophergopher/mongotest/v2requirement first, thengo mod tidy, commit, tag, push tags. Use a portablesedinvocation (the currentsed -i ''is macOS-only).mongotest.NewTestConnectionexample witheasymongotest.Run(t)/easymongotest.NewTestConnection, update the import path shown togithub.com/tophergopher/easymongo/easymongotest, mentionbson.ObjectIDinstead ofprimitive.ObjectIDin the struct examples, add the TLS connection snippet, and note the driver v2 requirement (Go 1.27).mongo.code-workspaceis gitignored by pattern but committed; either remove it from the repo or drop the ignore rule. Recommend removing the file from git.CHANGELOG.mdentry for the minor release describing thebson.ObjectIDAPI change and the new subpackage.Implementation details
Portable in-place sed: use
sed -i.bak ... && rm go.mod.bak(works on GNU and BSD sed). Release target sketch:With
DRY_RUN=1, prefix every command withecho.Acceptance
make release TAG=v0.2.0dry-runs correctly on Linux and macOS (document aDRY_RUN=1flag that echoes instead of executing).Depends on: #11.