Repository navigation
build(deps): move to otel 1.47 and hold grpc off 1.84 - #742
Conversation
otel/log 1.47 deprecates log/global; the replacement otel.GetLoggerProvider ships with otel 1.47, so the module set and the ten call sites move together. grpc stays at 1.83.2. Dependabot ignores grpc >= 1.84.0, < 1.85.0 (GO-2026-6443, no 1.84.x fix) and gets a 7-day npm cooldown to match pnpm's minimumReleaseAge. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ent the holds The integration test still used otel/log/global. otlploggrpc 0.23.0 honours the TLS env vars, so the known-gap notes are corrected and the TLS test now covers logs. Dependabot gets cooldown excludes matching pnpm's, and the docs describe the holds, the cooldown and the endpoint handling accurately. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The logs exporter has applied the OTLP TLS env vars since v0.21.0, which v0.1.0 already shipped; this branch removes a stale docs gap rather than changing behaviour. Also say the companion holds cover later releases, what a scheme-less endpoint does to logs, and why Prometheus-only operation dials nothing. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…less endpoint The logs exporter discards the whole OTEL_EXPORTER_OTLP_HEADERS value when one entry is malformed, so logs go out unauthenticated while traces and metrics skip only that entry; the docs and comments said every signal skips the entry. Move the scheme-less endpoint behaviour out of the env-var list into its own sentences. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… dev OTel steps A scheme-less endpoint's behaviour depends on how Go parses the host and on OTEL_EXPORTER_OTLP_INSECURE, so say only that the signals misread it differently and to always write the scheme. OTEL_EXPORTER_OTLP_INSECURE needs the endpoint unset; the three signals share an endpoint, not a connection; make dev leaves OTel off, so give the variables it needs; and date the logs shutdown bound to sdk/log v0.20.0. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…me-less claim A manual go get -u pulls the held gRPC 1.84 and fails make vulncheck, so say so next to the instructions. Also drop the claim that traces and metrics still export with a scheme-less endpoint, and complete the CHANGELOG file list. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… go get -u make dev and the standalone compose file leave OTel off, so setting only the endpoint sends nothing; say to set WH_OTEL_ENABLED too. After go get -u, pinning gRPC back to 1.83.2 steps proto/otlp and grpc-gateway down with it. Put the logs Shutdown behaviour in the test comment in the past, matching provider.go. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ose file Only make obs-front publishes 4318; the compose file passes no environment through, so the variables go in its environment block; and host.docker.internal needs extra_hosts on Linux Docker Engine. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Re-pinning after go mod tidy leaves stale go.sum lines that make tidy rejects. go get -u also upgrades indirect dependencies. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…int at the gRPC re-pin With otel.enabled on for traces, metrics and logs default to on and are pushed over OTLP as well as scraped; give the pattern a worked environment that turns them off. Name the go get re-pin line wherever the gRPC holds' removal is described, so it goes with them. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
It covers the main module's non-test dependencies; test-only deps need -t and the go.mod tool block needs go get -u tool. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
An exact v1.83.2 would downgrade gRPC once Dependabot takes a later 1.83.x patch; @v1.83 always resolves to the newest 1.83.x. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
GO-2026-6443 affects 1.83.0 and 1.83.1; only 1.83.2 carries the fix. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
make vulncheck runs govulncheck -scan package, which reports any advisory in an imported package without reachability; only V=1 runs the call-graph scan. The gRPC hold text relies on that. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…them off costs stdout Only the OTel-aware logger adds trace_id/span_id, component, source and the build fields to stdout, so turning otel.logs.enabled off breaks Loki-to-Tempo links; the configuration table said it left stdout untouched. Describe make vulncheck's V=1 output accurately. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Important Review skippedAuto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the ⚙️ Run configuration
You can disable this status message by setting the Use the checkbox below for a quick retry:
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
📚 Docs preview is live → https://f8113f76-wavehouse-docs.wave-rf.workers.dev
|
Code Coverage OverviewLanguages: Go GoThe overall line coverage in commit f369cc1 in the Show a line coverage summary of the most impacted files.
Updated |
) Repeated pushes to a PR reused no Go build objects. Measured from CI logs (2026-10-06 to 10-08), that only matters on a PR that changes `go.mod`/`go.sum`, so only that case is cached, and only for the two long-pole jobs. - **Measured, typical PR.** The integration suite's `app` part compiles in 5.8–8.5 s from `main`'s entry, against 2.3–3.2 s from a same-tree one. e2e's 4–7 s cover build is hidden behind its SDK build. A PR-scoped cache would buy about 4–5 s per push, which is inside the `app` part's run-to-run spread, so these PRs still save nothing. - **Measured, dependency-changing PR (#730, #742, #753).** Every push recompiles the dependency delta from `main`'s generation: 35–50 s in the integration suite and a 37–49 s cover build in e2e, against about 3 s and 4 s from the PR's own entry. That is about 30–45 s per push on the critical path. Of 129 PR runs since 2026-09-25, 34 came from 9 such PRs, and 25 of those were second or later pushes. - **Classifier.** `scripts/classify-paths.sh` also emits `go-deps`: any `go.mod`/`go.sum` in the change set, in any module, which are the files the cache keys hash. `classify-changes.sh` passes it through only for a cleanly classified pull request and sets it false everywhere it fails closed. The `changes` job exposes it as an output. - **setup-env.** A new `go-cache-pr-save` input, which the `app` part and e2e set only when `go-deps` is true. So a PR that changes no dependency never saves, even while `main` holds no entry for its key: just after a bump lands on `main`, after a failed `main` run, or for a newly opted-in job. With the input set, the job looks up the exact key first, from the PR's scope or `main`'s, so a PR whose dependency change `main` already has hits `main`'s entry and saves nothing. Only on a miss does it restore the newest entry of its flavor (the PR's own, then `main`'s) and save the exact key into the PR's scope. The key is per dependency state, so a PR saves once per dependency change. Merge-queue refs and branches stay restore-only, and nothing is added to `ci.yml` beyond the two inputs. - **Pruning.** `pr-cache-cleanup.yml` gains a `workflow_run` job that runs after every PR's CI run. It runs the new `scripts/ci/prune-pr-build-cache.sh` from the default branch with `actions: write` and deletes every PR-scoped `gobuild-v3` entry that `main` also holds or that a newer entry of the same flavor supersedes. It deduplicates the paged listing before grouping, since a row returned twice would otherwise delete the PR's newest entry, and a fixture test (`make test-prune-pr-build-cache`, a new `make verify` leaf) pins the selection and the failure handling. No PR code holds the write token. The job needs no PR number, so it covers fork PRs too. A PR holds at most about 0.48 GiB of build cache (double that for the minutes before a prune). - **Budget.** The README sizes this for four such PRs open at once, the most open at once in the last two weeks. The worst case at rest is about 11.7 GiB, about 1.7 GiB over the cap, and eviction by last access takes it from `main`'s superseded generation, which nothing reads (inferred). At two such PRs everything fits. `main`'s live entries stay safe up to six: 3.9 + N × (0.5 CodeQL + 0.48 build) ≤ 10 GiB, assuming the superseded generation is the size of the live one. The six build flavors together are 1.02 GiB on `main`; the issue's "about 1.3 GiB per suffix" was the total for all six of a PR's flavors. ## Test plan This branch's diff matches #783's (same 13 files, +450/−67), which CodeRabbit approved; the only line differences are the verify-leaf list and the `make verify` table row, which differ because the base did. Re-run here: the pre-commit `make verify` (which runs both fixture suites below) and a full `make ci`. Items marked "measured on #783" were not repeated; the CI items are observable once this PR targets `main`. - [x] `make lint-gha` (actionlint, which also checks the new input and the `go-deps` output) and `make lint-sh` clean; `make verify` green in the pre-commit hook, including the new leaf. - [x] `make test-classify-paths`: new `go-deps` cases (root and nested modules, look-alike names, mixed with docs, empty, large input); a mutant that matches only the root `go.mod`/`go.sum` fails it (mutant measured on #783). `classify-changes.sh` against a stub `gh`: `go-deps=true` only for a pull request whose file list holds a `go.sum`; false on push, merge group, dispatch and a failed listing. - [ ] (measured on #783) The setup-env step conditions, evaluated for push to `main`, `pull_request` with and without the input, `merge_group` and `workflow_dispatch`: exactly one restore path runs, and only a PR miss with the input set is save-capable. - [ ] (measured on #783) `prune-pr-build-cache.sh --dry-run` against the live cache list selects 6 entries (1058 MiB): copies of `main`'s keys under #731, #754 and #756. It keeps #753's own entries (one per flavor, not on `main`) and never touches `main` or merge-queue scopes. - [x] `make test-prune-pr-build-cache`: deletes copies of `main`'s key and version and keeps a same key with another version; deletes superseded entries and the older of a same-second pair; keeps `-integration-` apart from `-integration-app-`; ignores other families and `main`/merge-queue scopes; keeps a PR's only entry listed twice. Through a stub `gh`: a 404 reads as already gone, a 403 fails after the rest are attempted, and a failed listing fails. Mutants caught (measured on #783): no early dedup (the pre-fix script), key-only match, merged flavors, no prefix filter, `main` scope included, listing failure ignored, 404 treated as an error, 403 swallowed. - [ ] This PR's own run, which changes no dependency: `Detect changes` logs `go-deps=false`, and every Go job, the `app` part and e2e included, uses the plain restore step, with no `Cache saved` for `gobuild-v3` in any post step. - [ ] After merge, the first `PR cache cleanup` run triggered by a PR's CI (`Prune PR build caches`): passes and deletes the entries the dry run listed, if they are still there. - [ ] The first PR that changes `go.mod`/`go.sum` (the next Dependabot go-deps PR): `Detect changes` logs `go-deps=true`; the first push restores `main`'s generation through restore-keys and saves `gobuild-v3-Linux-go-integration-app-<its hash>` and `-e2e-cov-<its hash>` under `refs/pull/<n>/merge`; the second push exact-hits them, its integration compile is about 3 s and e2e reaches its containers about 20 s after `make` starts; the prune leaves one entry per flavor; the close cleanup deletes them. A fork PR's save is unverified: if GitHub refuses it, the job only logs a warning. - [x] `make ci` passes on this branch, after merging `main` (#793 and #788). ## Related Issues Closes #781. Refs #535 (two generations on `main` still leave thin headroom). Part of #740. Supersedes #783. Now based on `main`: its parent, the `-trimpath` PR #793, has merged. It does not itself use `-trimpath` or `make ci-remote`. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01Wjv2nu841pxTMdUWSAPmDH --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Summary
Unblocks the weekly Go dependency group (held red since early September) together with the nats-server test fix in its own PR.
otel/logandsdk/log1.47.0,otlploggrpc0.23.0, Prometheus exporter 0.69.0), and every use of the deprecatedotel/log/global(ininternal/observabilityand the integration test) moves tootel.Get/SetLoggerProvider, which only exists from 1.47. That clears the SA1019 findings. gRPC stays at 1.83.2, andproto/otlpandgrpc-gateway/v2stay at the versions that don't need gRPC 1.84.google.golang.org/grpc>= 1.84.0, < 1.85.0(GO-2026-6443; no 1.84.x patch exists, and the fix is only in a 1.85 pre-release), plusgo.opentelemetry.io/proto/otlp >= 1.11.1andgrpc-gateway/v2 >= 2.31.0, whose releases require gRPC 1.84.0 and would otherwise pull it in transitively. All three holds go together once gRPC 1.85.0 is tagged; deps: grpc 1.84.0 fails vulncheck (GO-2026-6443) and holds the whole go-deps group red #643 stays open to track that.cooldownmatching pnpm'sminimumReleaseAge, with the same@wave-rf/*and@wavehouse/*excludes. It covers the bumped package only, not packages re-resolved transitively.otlploggrpchas applied the CA and client-certificate variables since v0.21.0, already in v0.1.0.TestOTel_TLSPath_AllSignalsnow pins it for all three signals.OTEL_EXPORTER_OTLP_HEADERSentry makes the logs exporter drop the whole variable, while traces and metrics skip only that entry.otel.logs.enabledoff stripstrace_id/span_id,component,sourceand the build fields from stdout.make devand compose.make vulncheckis a package-level scan.go get -uneeds the gRPC re-pin beforego mod tidy.After this and the nats-server fix land, Dependabot's next go-deps run should go green. The npm cooldown syntax is validated against the published Dependabot schema but only runs on Dependabot's next schedule.
Test plan
make cigreen locally on the final tree.go list -m google.golang.org/grpc→ v1.83.2;go mod tidy -diffclean;make vulncheckandmake lint-goclean (no SA1019).go test -tags integration -run TestOTel ./tests/integration/passes, including logs over a private CA.go get -u ./...→go get google.golang.org/grpc@v1.83→go mod tidysequence verified in a scratch copy (gRPC,proto/otlpandgrpc-gatewaystep back down;make tidyclean).ship_iton the code (later commits change only docs, comments and a Makefile help string, so its skip is logged). The docs reviewer returnedship_iton the final commit; its marker was recorded by hand because hand-back reports don't write one yet (fix(agents): review-marker hook writes no marker when a reviewer's report arrives by hand-back #659).Related Issues
Closes #732. Refs #643 (stays open until the holds are dropped), refs #441 (cooldown covers the bumped package only). Part of #740.
🤖 Generated with Claude Code