-
Notifications
You must be signed in to change notification settings - Fork 0
merge latest upstream main #11
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
Bumps [golang.org/x/crypto](https://github.com/golang/crypto) from 0.30.0 to 0.31.0. - [Commits](golang/crypto@v0.30.0...v0.31.0) --- updated-dependencies: - dependency-name: golang.org/x/crypto dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…2827) Bumps [golang.org/x/crypto](https://github.com/golang/crypto) from 0.29.0 to 0.31.0. - [Commits](golang/crypto@v0.29.0...v0.31.0) --- updated-dependencies: - dependency-name: golang.org/x/crypto dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* Shrink recommendationservice base image to python:3.12.8-alpine * Remove comment in Dockerfile * Remove comment in Dockerfile * Remove extra dependencies Dockerfile
Bumps [jinja2](https://github.com/pallets/jinja) from 3.1.4 to 3.1.5. - [Release notes](https://github.com/pallets/jinja/releases) - [Changelog](https://github.com/pallets/jinja/blob/main/CHANGES.rst) - [Commits](pallets/jinja@3.1.4...3.1.5) --- updated-dependencies: - dependency-name: jinja2 dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 6
♻️ Duplicate comments (4)
src/recommendationservice/requirements.in (2)
4-4: Duplicate: python-json-logger 4.0.0 breaking changes already flagged.This critical issue has been comprehensively documented in previous review comments, which detail the breaking changes in method signatures (add_fields, serialize_log_record, etc.) and the required code updates in CustomJsonFormatter implementations.
3-3: Pin grpcio explicitly to match grpcio-health-checking version.grpcio-health-checking 1.76.0 requires grpcio>=1.76.0, but grpcio is not explicitly pinned in the requirements file. This allows pip to install a newer grpcio version (e.g., 1.77.0+) if released, causing resolver drift and potential version mismatches at install time.
Proposed fix
google-api-core==2.28.1 google-cloud-profiler==4.1.0 grpcio-health-checking==1.76.0 +grpcio==1.76.0 python-json-logger==4.0.0 requests==2.32.4src/currencyservice/package.json (1)
17-23: OpenTelemetry version incompatibility persists — exporter-otlp-grpc@0.26.0 is incompatible with SDK 2.x.The critical issue flagged in the previous review remains unresolved. While the core SDK packages have been updated to 2.2.0 (
sdk-trace-base,resources) and instrumentations to 0.208.0, the@opentelemetry/exporter-otlp-grpcremains at the deprecated 0.26.0 version, which is incompatible with SDK 2.x and will cause runtime failures.Action required: Update
@opentelemetry/exporter-otlp-grpcto a version compatible with SDK 2.x. Based on the OpenTelemetry versioning scheme, this should be in the 0.5x+ range or the package may have been superseded by@opentelemetry/exporter-trace-otlp-grpcin newer releases.What is the correct @opentelemetry/exporter-otlp-grpc or exporter-trace-otlp-grpc package version compatible with @opentelemetry/sdk-trace-base 2.2.0 in Node.js?src/adservice/build.gradle (1)
23-24: Dockerfile runtime must match Java 21 target.The compilation target was updated to Java 21. As noted in previous reviews, ensure the Dockerfile runtime stage uses a Java 21 JRE (not Java 25) to match this compilation target.
🧹 Nitpick comments (1)
src/adservice/build.gradle (1)
70-70: Run google-java-format after updating to 1.33.0.The formatter version was updated from 1.24.0 to 1.33.0. Run
./gradlew googleJavaFormatto apply any formatting style changes from the newer version and ensure consistency across the codebase.
📜 Review details
Configuration used: defaults
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (6)
src/checkoutservice/go.sumis excluded by!**/*.sumsrc/currencyservice/package-lock.jsonis excluded by!**/package-lock.jsonsrc/frontend/go.sumis excluded by!**/*.sumsrc/paymentservice/package-lock.jsonis excluded by!**/package-lock.jsonsrc/productcatalogservice/go.sumis excluded by!**/*.sumsrc/shippingservice/go.sumis excluded by!**/*.sum
📒 Files selected for processing (12)
helm-chart/templates/opentelemetry-collector.yamlkustomize/components/google-cloud-operations/otel-collector.yamlsrc/adservice/build.gradlesrc/checkoutservice/go.modsrc/currencyservice/package.jsonsrc/emailservice/requirements.insrc/frontend/go.modsrc/paymentservice/package.jsonsrc/productcatalogservice/go.modsrc/recommendationservice/requirements.insrc/shippingservice/go.modterraform/providers.tf
🚧 Files skipped from review as they are similar to previous changes (5)
- terraform/providers.tf
- helm-chart/templates/opentelemetry-collector.yaml
- src/emailservice/requirements.in
- src/paymentservice/package.json
- kustomize/components/google-cloud-operations/otel-collector.yaml
🔇 Additional comments (11)
src/checkoutservice/go.mod (3)
3-3: Approved: Go version and toolchain updates.The Go version bump from 1.23 to 1.25 is a standard minor version bump with no breaking changes. The addition of the
toolchain go1.25.5directive improves build reproducibility.Also applies to: 5-5
8-8: Verify gRPC v1.77.0 compatibility.The direct dependency updates look well-coordinated, particularly the OpenTelemetry ecosystem bump to v1.39.0. However, the gRPC version jump from v1.67.1 to v1.77.0 (10 minor versions) is substantial and warrants verification against the service code.
Verify that checkoutservice builds and all tests pass with gRPC v1.77.0 by running the build pipeline. Additionally, review the gRPC v1.77.0 release notes to confirm no breaking changes affect the service's RPC patterns or interceptor usage.
Also applies to: 12-17
21-49: Verify indirect dependency updates and build stability.The transitive dependency updates are well-aligned with the direct dependency changes (e.g., all OpenTelemetry indirect deps are now v1.39.0). The backoff package upgrade from v4 to v5 is a major version bump, though it's indirect and should be managed by the direct dependencies that pull it in.
Confirm that the service builds and all unit/integration tests pass with these transitive dependency updates. If any test failures occur, review the dependency changelogs (particularly for
github.com/cenkalti/backoff/v5) to identify any breaking changes.src/shippingservice/go.mod (1)
1-41: Toolchain and dependency upgrades look solid.The Go 1.25.5 upgrade and coordinated bumps to gRPC (v1.77.0), protobuf (v1.36.11), and OpenTelemetry packages are well-aligned with the PR's modernization objectives. Genproto revisions within this file are consistent.
src/recommendationservice/requirements.in (1)
1-1: All dependency versions have been verified to exist on PyPI and no known security vulnerabilities or yanked versions were detected. No action required.src/currencyservice/package.json (3)
11-11: LGTM: gRPC and profiler updates.The updates to
@google-cloud/profiler,@grpc/grpc-js, and@grpc/proto-loaderare routine maintenance bumps that align with the PR's dependency refresh objective.Also applies to: 13-14
16-16: This version bump does not require compatibility review for this service.The service uses
@grpc/proto-loaderfor dynamic proto loading rather than pre-generated protobuf code. No generated proto files exist in the codebase, andgoogle-protobufis not directly imported. The major version bump from 3.x to 4.x introduces breaking changes in generated code and runtime APIs, but those concerns do not apply to a service architecture using dynamic proto loading.Likely an incorrect or invalid review comment.
24-24: Check Node version compatibility for pino 10.1.0.The upgrade to pino 10.1.0 introduces breaking changes in Node support. Add an
enginesfield topackage.jsonspecifying the minimum Node version (18.19.0 or higher recommended for pino v10). The existing logging code inserver.jsis compatible with v10, but the project's Node runtime must meet the upgraded library's requirements. Also remove the unused pino import fromclient.js.src/adservice/build.gradle (3)
36-36: No action required. Proto-google-common-protos 2.63.2 is compatible with protoc 4.33.2 and gRPC 1.77.0, and the build is already properly configured with matching versions across all protobuf and gRPC dependencies.
43-43: log4j-core 2.25.3 is safe and fixes a security vulnerability.This update resolves CVE-2025-68161 (Medium severity), which addressed missing TLS hostname verification in the Socket Appender. The version is compatible with Java 21.
46-48: netty-tcnative 2.0.74.Final is the correct version for gRPC 1.77.0.According to the official gRPC-java SECURITY.md version mapping, gRPC 1.77.x uses Netty 4.1.127.Final and netty-tcnative-boringssl-static 2.0.74.Final. The dependency in the code is correct.
For simplification, consider using
io.grpc:grpc-netty-shaded:1.77.0instead to avoid manual version management of netty-tcnative.Likely an incorrect or invalid review comment.
| @@ -1,5 +1,5 @@ | |||
| plugins { | |||
| id 'com.google.protobuf' version '0.9.4' | |||
| id 'com.google.protobuf' version '0.9.6' | |||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧩 Analysis chain
🌐 Web query:
protobuf gradle plugin 0.9.6 protoc 4.33.2 compatibility
💡 Result:
Yes — protobuf-gradle-plugin 0.9.6 can be used with protoc 4.33.2. The plugin lets you specify a protoc artifact (or local path) via the protobuf.protoc.artifact setting, so point it at com.google.protobuf:protoc:4.33.2. [1][2][3]
Example (Gradle Kotlin DSL):
protobuf {
protoc { artifact = "com.google.protobuf:protoc:4.33.2" }
}
Sources: plugin release info and docs, and protoc 4.33.2 Maven artifact. [1][2][3]
References
[1] Gradle Plugin Portal — com.google.protobuf 0.9.6.
[2] Maven Central / MVNRepository — com.google.protobuf:protoc:4.33.2.
[3] github.com/google/protobuf-gradle-plugin (protoc configuration docs).
🌐 Web query:
protobuf gradle plugin 0.9.6 release notes supported protoc versions
💡 Result:
The v0.9.6 release notes do not list specific supported protoc versions. The plugin lets you supply/configure the protoc artifact (e.g. com.google.protobuf:protoc:3.0.0) or a local protoc binary, so it will use whatever protoc version you provide — protoc compatibility is determined by the protoc/protobuf releases themselves. [1][2]
Sources:
- protobuf-gradle-plugin v0.9.6 release notes. [1]
- README / usage showing configurable protoc artifact (example com.google.protobuf:protoc:3.0.0). [2]
🌐 Web query:
protoc 4.x breaking changes compatibility
💡 Result:
Short summary of compatibility / breaking changes for protoc 4.x
-
"protoc 4.x" follows the protobuf multi-language scheme: generated code (gencode) and runtimes follow per-language major versions and mixing across major-version boundaries is unsupported — you must regenerate code when moving across major runtime versions. See Cross-Version Runtime Guarantees / version support. [1]
-
Major-change policy and examples: major releases may remove deprecated APIs and change gencode/runtime APIs in incompatible ways; minor/patch releases are intended to be source-compatible. Protoc 4.x releases therefore can introduce breaking changes for language runtimes that bump their major version. [1][2]
-
Notable breaking items that affected 4.x-era releases (examples you should check for in your language/runtime when upgrading):
- Runtime/gencode mismatch enforcement ("poison pills"): newer runtimes may reject older/newer generated code combinations — regenerate gencode when advised. [2]
- C++: descriptor API return-type and name/field API changes, removal of deprecated APIs, dropping older C++ ABI/support (e.g., C++14→C++17 in later releases), stricter symbol name length checks, removal of some json/text-format options. If you use C++ APIs, migrate to the new accessors (e.g., has_presence(), is_repeated(), cpp_string_type(), Arena::Create→Arena::CreateReplacement patterns per release notes). [2][3]
- Java and other language runtimes: removal/rename of legacy helpers (example: GeneratedMessageV3 → GeneratedMessage) and removal of deprecated methods/variables; Java had planned major bumps that break older generated code. [4][2]
- Build/tooling: Bazel/proto-related rule removals and flags can change (e.g., ProtoInfo.transitive_imports removed). [3]
Recommendations
- Always consult the release notes for the exact protoc and language-runtime minor/major version you plan to use and regenerate your generated sources with the same major version as the runtime. [1][2]
- For C++ or other compiled languages, review migration notes for removed APIs and changed return types (e.g., descriptor string_view changes, removed deprecated functions). [2][3]
Sources
[1] Protocol Buffers — Version Support (protoc/gencode runtime guarantees). (protobuf.dev)
[2] Protocol Buffers — Changes announced Oct 2, 2024 (breaking changes / v30 notes). (protobuf.dev)
[3] Protocol Buffers — Changes announced Sep 19, 2025 (C++ and other removals / stricter checks). (protobuf.dev)
[4] Protocol Buffers — Changes announced Dec 5, 2023 (Java v26 breaking-change plans). (protobuf.dev)
Citations:
- 1: https://protobuf.dev/support/version-support/?utm_source=openai
- 2: https://protobuf.dev/news/2024-10-02/?utm_source=openai
- 3: https://protobuf.dev/news/2025-09-19/?utm_source=openai
- 4: https://protobuf.dev/news/2023-12-05/?utm_source=openai
Verify protoc 4.x breaking changes and regenerate .proto-derived code.
The jump from protoc 3.x to 4.33.2 is a major version bump that introduces breaking changes. Protoc 4.x requires regenerating all .proto-derived code from scratch, and Java runtime APIs have changed (e.g., GeneratedMessageV3 → GeneratedMessage). Without code regeneration, runtime/gencode mismatch enforcement will cause errors. Ensure all .proto files are regenerated with protoc 4.33.2 and review Java code for deprecated protobuf API usage.
🤖 Prompt for AI Agents
In src/adservice/build.gradle around line 2, the project upgraded the protobuf
Gradle plugin but hasn't accounted for protoc 4.x breaking changes; regenerate
all .proto-derived code with protoc 4.33.2 and update build configuration
accordingly. Update the protobuf plugin/protoc artifact coordinates in
build.gradle to reference protoc 4.33.2, run the protobuf code generation task
to regenerate Java sources, then compile and fix any Java API mismatches (e.g.,
replace GeneratedMessageV3 usages with GeneratedMessage and adjust
imports/signatures per the new runtime APIs) until the build is clean.
src/adservice/build.gradle
Outdated
| def grpcVersion = "1.77.0" | ||
| def jacksonCoreVersion = "2.20.1" | ||
| def jacksonDatabindVersion = "2.20.1" | ||
| def protocVersion = "4.33.2" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧩 Analysis chain
🌐 Web query:
protobuf 4.0.0 breaking changes from 3.x Java code generation
💡 Result:
Short summary of Java gencode/runtime breaking changes when moving from Protobuf 3.x to the new 4.x line (protoc/protobuf-java):
-
Major-version change & regeneration required: Java moved to a new major-version scheme; generated code created with older 3.x protoc may be incompatible—you should re-generate .java files with the new protoc/plug-ins. The runtime will enforce/generate “poison pill” checks for mismatched gencode/runtime across major versions. [1][2][3]
-
Renamed/removed APIs and deprecated removals:
- GeneratedMessageV3 and other legacy compatibility types/APIs were changed/renamed (e.g., GeneratedMessage rename) and some deprecated APIs will be removed; code using deprecated Descriptor/TextFormat/PARSER static vars or older runtime-compat helpers must migrate to new accessors (e.g., parser() methods, TextFormat.printer(), FieldDescriptor.hasPresence(), etc.). [1][6]
-
PARSER/static var → parser() and other callsite changes: code that relied on public PARSER fields or other deprecated accessors must switch to the new parser()/accessor methods. [1]
-
JSON printing option rename/behavior change: JSON print option names changed (Java: includingDefaultValueFields() → alwaysPrintFieldsWithNoPresence()) and semantics for proto2/optional handling adjusted. If you used the old JSON option, update to the new API. [4]
-
Poisoning of old gencode (security): runtime changes were introduced to detect and reject some old generated-code patterns (security fixes). A temporary opt-out system property was provided in patches, but the recommended action is to regenerate gencode with an updated protoc. [3][6]
-
Build & distribution changes (affects building from source): Java build-from-source via Maven was deprecated/removed in later 4.x releases—users should prefer prebuilt Maven artifacts or other build systems (Bazel/CMake) if building from source. This can affect custom gencode/build workflows. [2]
Notes/sources: official protobuf news and release notes—see Protobuf news (Dec 5, 2023; Jun 26, 2024; Jan 23, 2025) and GitHub releases for the Java artifacts. [1][2][3][6]
Sources:
[1] Protobuf news — Changes announced Dec 5, 2023 (Java breaking changes).
[2] Protobuf news — Changes announced Jun 26, 2024 (dropping Maven build-from-source).
[3] Protobuf news — Changes announced Jan 23, 2025 (poison Java gencode).
[4] Protobuf docs — Changes announced Feb 5, 2024 (JSON option rename).
[6] protobuf GitHub releases / Java release notes (4.x release notes).
🌐 Web query:
Jackson 2.20.0 2.20.1 breaking changes from 2.18.x
💡 Result:
Short summary of breaking/compatibility-impacting changes when moving from 2.18.x → 2.20.0 / 2.20.1
-
jackson-annotations versioning and Java baseline
- jackson-annotations drops the patch-digit and is published as e.g. "2.20" (not 2.20.0); this requires consumers to treat annotations versioning slightly differently when upgrading. Also jackson-annotations now requires Java 8 (no more Java 6 baseline). [1][2]
-
Runtime/library dependency minimums
- Guava minimum bumped to 22.0 for Jackson 2.20 datatypes that depend on Guava (may affect projects using older Guava). [1]
-
Preparation for Jackson 3.0 (deprecations / renames)
- 2.20 contains cleanup and deprecations intended to align 2.x with planned 3.0 removals/renames; some APIs were deprecated or documented for upcoming renames in 3.x (check migration notes if you rely on deprecated internals). This makes 2.20 a more forward-breaking step than a pure patch. [1][2]
-
Module and platform changes
- New module for Hibernate 7 (jackson-datatype-hibernate7) added; some datatype modules updated to avoid deprecated APIs in newer frameworks. [1]
Notes / action items
- Verify your build/dependency management for the new jackson-annotations coordinate (artifact version "2.20") and ensure you run on Java 8+.
- Bump Guava if you use affected Jackson Guava datatypes.
- Scan for uses of deprecated/internal APIs if you plan to later move to Jackson 3.x (2.20 marks many deprecations). [1][2]
Sources:
- Jackson 2.20 release notes / wiki. [1]
- Jackson 2.20 announcement (Tatu / cowtowncoder). [2]
- Jackson project release overview. [3]
🏁 Script executed:
# First, explore the build.gradle file to understand the dependency usage
cd src/adservice && head -50 build.gradleRepository: devzero-inc/microservices-demo
Length of output: 1675
🏁 Script executed:
# Check for proto files and generated protobuf code
find src/adservice -name "*.proto" -o -name "*Pb.java" -o -name "*Pb2.java" | head -20Repository: devzero-inc/microservices-demo
Length of output: 113
🏁 Script executed:
# Check if there are any generated protobuf sources
find src/adservice -path "*/generated/*" -name "*.java" | head -10Repository: devzero-inc/microservices-demo
Length of output: 56
🏁 Script executed:
# Look for Jackson usage in the code
rg -t java "ObjectMapper|jackson|@JsonProperty|JsonDeserialize|JsonSerialize" src/adservice --max-count=10Repository: devzero-inc/microservices-demo
Length of output: 56
🏁 Script executed:
# Check the proto file
cat src/adservice/src/main/proto/demo.protoRepository: devzero-inc/microservices-demo
Length of output: 6142
🏁 Script executed:
# Look for usage of protobuf-generated classes
rg -t java "Builder\(\)|newBuilder\(\)|parseFrom|toByteArray" src/adservice/src --max-count=15Repository: devzero-inc/microservices-demo
Length of output: 903
🏁 Script executed:
# Check if there's a build output directory with generated sources
find src/adservice -type d -name "generated-sources" -o -name "generated-java"Repository: devzero-inc/microservices-demo
Length of output: 56
🏁 Script executed:
# Check the AdService.java implementation to see how protobuf is being used
cat src/adservice/src/main/java/hipstershop/AdService.javaRepository: devzero-inc/microservices-demo
Length of output: 7964
🏁 Script executed:
# Check the AdServiceClient.java
cat src/adservice/src/main/java/hipstershop/AdServiceClient.javaRepository: devzero-inc/microservices-demo
Length of output: 3937
🏁 Script executed:
# Look for any import statements related to protobuf
rg "import.*protobuf\|import.*hipstershop" src/adservice/src/main/java -A 2 | head -30Repository: devzero-inc/microservices-demo
Length of output: 56
🏁 Script executed:
# Verify if Jackson is actually used anywhere in adservice
rg "fasterxml|Jackson|ObjectMapper" src/adservice/src/main/javaRepository: devzero-inc/microservices-demo
Length of output: 56
🏁 Script executed:
# Check protobuf plugin compatibility - look at gradle wrapper or other build configs
cat src/adservice/build.gradle | grep -A 5 -B 5 "protobuf\|gradle"Repository: devzero-inc/microservices-demo
Length of output: 1335
Verify protobuf 4.33.2 code regeneration.
Protobuf 4.x requires all .proto files to be regenerated with protoc 4.33.2. The runtime enforces poison pill checks to prevent incompatibility with code generated from older protoc versions. Ensure the build configuration runs code generation (gradle build should trigger this automatically with the existing protobuf plugin configuration).
Remove the Jackson concern—Jackson 2.20.1 is a minor version upgrade with no breaking changes, and it is unused in the AdService codebase.
🤖 Prompt for AI Agents
In src/adservice/build.gradle around lines 17 to 20, the protobuf/protoc and
Jackson settings need adjustment: ensure all .proto files are regenerated with
protoc 4.33.2 by confirming the protobuf Gradle plugin is configured to run code
generation during gradle build (so rebuild or clean build to regenerate sources
with protocVersion = "4.33.2"); remove the unused Jackson version properties
(jacksonCoreVersion and jacksonDatabindVersion) from the file since Jackson is
not used by AdService; after changes run a full clean build and verify generated
sources were produced with protoc 4.33.2 and tests/poison-pill runtime checks
pass.
| cloud.google.com/go/alloydbconn v1.17.1 | ||
| cloud.google.com/go/profiler v0.4.3 | ||
| cloud.google.com/go/secretmanager v1.16.0 | ||
| github.com/golang/protobuf v1.5.4 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧩 Analysis chain
🏁 Script executed:
# Check if the file exists and examine go.mod
ls -la src/productcatalogservice/go.mod 2>/dev/null || echo "File not found"Repository: devzero-inc/microservices-demo
Length of output: 155
🏁 Script executed:
# Read go.mod to verify the dependency at line 11
cat -n src/productcatalogservice/go.mod | head -20Repository: devzero-inc/microservices-demo
Length of output: 888
🏁 Script executed:
# Check if catalog_loader.go exists and examine its imports
if [ -f "src/productcatalogservice/catalog_loader.go" ]; then
echo "=== catalog_loader.go imports ==="
cat -n src/productcatalogservice/catalog_loader.go | grep -A 2 "^[[:space:]]*import"
else
echo "catalog_loader.go not found"
fiRepository: devzero-inc/microservices-demo
Length of output: 107
🏁 Script executed:
# Search for all usages of github.com/golang/protobuf in the codebase
rg "github\.com/golang/protobuf" --type goRepository: devzero-inc/microservices-demo
Length of output: 154
🏁 Script executed:
# Check if google.golang.org/protobuf is already in dependencies
rg "google\.golang\.org/protobuf" src/productcatalogservice/go.modRepository: devzero-inc/microservices-demo
Length of output: 110
🏁 Script executed:
# Get the exact line number and context of the import in catalog_loader.go
cat -n src/productcatalogservice/catalog_loader.go | head -40Repository: devzero-inc/microservices-demo
Length of output: 1536
🏁 Script executed:
# Search for actual usages of jsonpb (not just the import)
rg "jsonpb\." src/productcatalogservice/ --type goRepository: devzero-inc/microservices-demo
Length of output: 198
🏁 Script executed:
# Also check if there are any other files importing from github.com/golang/protobuf
rg "github\.com/golang/protobuf" --type go -lRepository: devzero-inc/microservices-demo
Length of output: 117
🏁 Script executed:
# Let's check what functions are available in google.golang.org/protobuf/encoding/protojson
# by searching for any documentation or examples in the codebase
rg "google\.golang\.org/protobuf/encoding/protojson" --type go -A 5 -B 5Repository: devzero-inc/microservices-demo
Length of output: 56
🏁 Script executed:
# Let's also verify that google.golang.org/protobuf is indeed available in the module
grep -n "google.golang.org/protobuf" src/productcatalogservice/go.modRepository: devzero-inc/microservices-demo
Length of output: 113
Remove deprecated github.com/golang/protobuf dependency.
Line 11 contains github.com/golang/protobuf v1.5.4, which is unmaintained. The modern google.golang.org/protobuf v1.36.11 is already a dependency. Migrate catalog_loader.go line 29 from github.com/golang/protobuf/jsonpb to google.golang.org/protobuf/encoding/protojson, replacing jsonpb.Unmarshal with protojson.Unmarshal, then run go mod tidy to remove the legacy dependency.
🤖 Prompt for AI Agents
In src/productcatalogservice/go.mod around line 11, remove the deprecated module
line "github.com/golang/protobuf v1.5.4" and update the code that depends on it:
in src/productcatalogservice/catalog_loader.go at line 29 replace the import
path "github.com/golang/protobuf/jsonpb" with
"google.golang.org/protobuf/encoding/protojson" and replace usages of
jsonpb.Unmarshal with protojson.Unmarshal (adjusting call signature to accept
[]byte and a proto.Message as protojson.Unmarshal requires). After updating
imports and call sites, run "go mod tidy" to remove the legacy dependency from
go.mod/go.sum.
| google.golang.org/genproto v0.0.0-20251124214823-79d6a2a48846 // indirect | ||
| google.golang.org/genproto/googleapis/api v0.0.0-20251202230838-ff82c1b0f217 // indirect | ||
| google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 // indirect |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Check genproto versions across all Go services
echo "=== Checking genproto versions in all services ==="
find src -name "go.mod" -type f | while read file; do
echo "--- $file ---"
rg 'google\.golang\.org/genproto' "$file" -A 0
doneRepository: devzero-inc/microservices-demo
Length of output: 1283
Misaligned google.golang.org/genproto revisions within multiple services.
Within productcatalogservice (lines 65–67), checkoutservice, and frontend, the base google.golang.org/genproto module uses revision v0.0.0-20251124214823-79d6a2a48846, while googleapis/api and googleapis/rpc use a newer revision v0.0.0-20251202230838-ff82c1b0f217. Shippingservice correctly aligns all three to the same revision (v0.0.0-20251124214823-79d6a2a48846).
Version misalignment between a module and its submodules can cause type conflicts and API compatibility issues. Unify all genproto dependencies to a single revision across all four services, run go mod tidy, and test builds to verify no type conflicts.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
♻️ Duplicate comments (2)
src/cartservice/tests/cartservice.tests.csproj (1)
13-13: xUnit v2 incompatibility with .NET 10 already flagged.The previous review comment correctly identified that xUnit 2.9.3 (v2) does not support .NET 10 and requires upgrading to xUnit v3. This concern remains valid with the current configuration.
src/cartservice/src/cartservice.csproj (1)
4-4: VS 2026 tooling requirement already flagged.The previous review comment correctly identified that .NET 10 requires Visual Studio 2026 or VS Code with C# Dev Kit, and may introduce breaking changes. This concern remains valid.
| <PackageReference Include="Google.Cloud.Spanner.Data" Version="5.8.0" /> | ||
| <PackageReference Include="Npgsql" Version="10.0.1" /> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Search for Spanner and Npgsql usage patterns that might be affected by breaking changes
echo "=== Searching for Google.Cloud.Spanner.Data usage ==="
rg -n --type=cs -C3 'SpannerConnection|SpannerCommand|SpannerDataReader|SpannerConnectionStringBuilder'
echo ""
echo "=== Searching for Npgsql usage ==="
rg -n --type=cs -C3 'NpgsqlConnection|NpgsqlCommand|NpgsqlDataReader|NpgsqlDataSource'
echo ""
echo "=== Searching for any database connection handling ==="
rg -n --type=cs -C2 'DbConnection|DbCommand|using.*Connection'Repository: devzero-inc/microservices-demo
Length of output: 6651
🌐 Web query:
Google.Cloud.Spanner.Data version 5 breaking changes migration guide
💡 Result:
Below are the key breaking changes in Google.Cloud.Spanner.Data v5 and concise migration steps to update your code.
Summary of breaking changes (v5.0.0)
- Transaction APIs changed: new SpannerTransactionCreationOptions and SpannerTransactionOptions types are supported; BeginTransaction/Open/RunWithRetriableTransaction overloads now accept these option types and some older overloads are deprecated/removed. [1]
- Transactions are disposed automatically after a successful Commit or Rollback (they are no longer "prewarmed" or kept for reuse). Adjust code that assumed reusing a transaction object after commit/rollback. [1]
- Session-pool/read-write distinction removed: diagnostic statistics no longer expose separate read-only vs read-write properties. Google.Cloud.Spanner.V1.SessionPoolOptions.WriteSessionsFraction was removed. Update any code that read those properties. [1]
- Obsolete APIs removed: previously-obsoleted members (introduced before v5.0.0-beta01) were removed in v5 — update code that still references obsolete members. [1]
- Type-mapping changes introduced in betas (affecting upgrade path to v5): default CLR decimal mapping changed from FLOAT64 to NUMERIC; float from FLOAT64 to FLOAT32 (see beta notes if you upgraded from earlier betas). [1]
Sources
- Official .NET library history / v5 notes. [1]
- Spanner product release notes (library-related announcements). [2]
Migration checklist (minimal steps)
- Read the v5 release/history notes (linked above). Test in a branch/build before rolling to production. [1][2]
- Replace deprecated transaction overloads:
- Update BeginTransaction/Open/RunWithRetriableTransaction call sites to use SpannerTransactionCreationOptions or SpannerTransactionOptions as appropriate.
- If you relied on ambient or implicit transaction overloads that were deprecated, migrate to the supported options-based APIs. [1]
- Stop reusing transaction objects after Commit/Rollback:
- Treat a transaction as disposed after Commit() or Rollback(); acquire a new transaction for subsequent work. Update using/try/finally patterns if needed. [1]
- Remove/replace code that reads or depends on read-only vs read-write session/transaction statistics or SessionPoolOptions.WriteSessionsFraction. Adjust diagnostics or monitoring code to the simplified statistics model. [1]
- Remove references to obsolete APIs removed in v5. Use current replacements from the library reference or rewrite the logic. [1]
- Verify type mappings in your data access layer:
- If your code assumes decimal -> FLOAT64 or float -> FLOAT64, review and adjust. Explicitly specify types where needed (e.g., use SpannerDbType.Numeric, SpannerDbType.Float32, or explicit parameter types). [1]
- Run full unit/integration tests (including transaction-heavy scenarios), and perform performance/regression testing for session-pool behavior.
- If you use features added in v5 (Interval, new QueryMode values, transaction tagging/priority/timeout), review their APIs and tests before enabling them. [1]
If you want, I can:
- produce a diff/migration patch for specific call sites (paste sample code), or
- scan your codebase for likely affected usages (you can paste snippets or describe patterns).
🌐 Web query:
Npgsql version 9 10 breaking changes migration guide
💡 Result:
Here are the main breaking changes you need to address when migrating from Npgsql 9.x to 10.0, with short remediation steps and links to the release notes.
- Platform / runtime support
- Npgsql 9.0 dropped .NET Standard 2.0 / .NET Framework support; Npgsql 10.0 drops .NET 6 (requires a later .NET).
Action: target a supported .NET runtime (e.g., .NET 7/8/9 depending on your environment) or stay on Npgsql 8.x/9.x if you must keep .NET Framework/.NET 6. [1][2]
- Date/time default CLR mappings
- In 10.0, PostgreSQL date -> DateOnly and time -> TimeOnly by default (affects non-generic reads like ExecuteScalar and GetValue).
Action: update code to use GetFieldValue() or handle DateOnly/TimeOnly, or revert to old behavior via configuration if necessary. [1]
- PostgresException.BatchCommand now null by default
- 10.0: BatchCommand is null by default (avoids leaking SQL in logs). You can re-enable by setting IncludeFailedBatchedCommand=true in the connection string if you relied on it. [1]
- Parameter type precedence
- 10.0: NpgsqlParameter.DataTypeName takes precedence over NpgsqlDbType.
Action: review parameter setup to ensure the intended type is sent (use DataTypeName if you want an explicit PG type string, or remove conflicts). [1]
- COPY APIs return types
- NpgsqlConnection.BeginTextImport/ExportAsync now return NpgsqlCopyTextReader (subclass of TextWriter). This is a binary break but usually only requires recompilation. [1]
- Tracing & metrics changes
- OpenTelemetry tracing/metrics names and span tags changed in 10.0 (breaking if you consume metric names / span tag names). COPY and connection open are now traced.
Action: update any telemetry consumers/dashboards/alerts to the new metric/span names and tags. [1]
- Other 9.0 -> 10.0 EF/enum-related changes (if using EFCore provider)
- 9.0 moved enum mapping responsibilities to EF level (breaking for some setups); 10.x contains additional EF breaking changes (e.g., network/cidr mappings).
Action: for EF: ensure enums are mapped at the EF provider level (UseNpgsql MapEnum or provider options) and check EF-specific 9.x/10.x release notes for provider-specific breaking changes. [2][3]
- Miscellaneous 10.0 items to check
- GSSAPI session encryption defaults/options; PGAPPNAME env var added; SHA3/SCRAM auth changes; NpgsqlConnection.Open wraps unresolved host SocketException with NpgsqlException; JSON mutable DOM mapping opt-ins for NativeAOT with EnableJsonTypes.
Action: scan your use of authentication, connection-string options, tracing, JSON types, and error handling to verify behavior after upgrade. [1]
Quick migration checklist
- Pin/upgrade your target .NET runtime to a supported version. [1][2]
- Run full build + unit/integration tests against Npgsql 10.0. Fix any DateOnly/TimeOnly usages or change reads to GetFieldValue(). [1]
- Review parameter creation code for DataTypeName vs NpgsqlDbType conflicts. [1]
- Update telemetry consumers for new OpenTelemetry names/tags. [1]
- If using EFCore, update enum mappings to EF-level MapEnum and review provider release notes. [2][3]
- Recompile and run regression tests for COPY/replication/NativeAOT scenarios. [1][2]
Sources
- Npgsql 10.0 release notes (breaking changes and migration notes). [1]
- Npgsql 9.0 release notes (breaking changes introduced in 9.x, EF notes). [2]
(See Npgsql release notes pages for full details and code examples.) [1][2]
If you want, I can: 1) produce a patch-list for your codebase (search for DateTime/TimeSpan usages, NpgsqlParameter.DataTypeName/NpgsqlDbType, telemetry metric names), or 2) fetch specific configuration snippets (e.g., how to revert date/time behavior).
Verify compatibility with Google.Cloud.Spanner.Data v5 and Npgsql v10 breaking changes.
Confirmed major version increments with documented breaking changes:
- Google.Cloud.Spanner.Data v5: Transaction APIs now require
SpannerTransactionCreationOptions/SpannerTransactionOptions; transactions auto-dispose after commit/rollback (no reuse); type mappings changed (decimal: FLOAT64→NUMERIC, float: FLOAT64→FLOAT32). Code usesRunWithRetriableTransactionAsyncandSpannerParameterCollection— verify these calls use updated options-based APIs. - Npgsql v10: DateOnly/TimeOnly CLR mappings default for PostgreSQL date/time types; parameter type precedence changed; requires .NET 7+. Code uses modern
NpgsqlDataSource.Create()pattern, but confirm date/time handling if applicable and verify target runtime.
Run full integration tests before merge.
🤖 Prompt for AI Agents
In src/cartservice/src/cartservice.csproj around lines 11 to 12, the package
upgrades to Google.Cloud.Spanner.Data v5 and Npgsql v10 introduce breaking
changes; update code to use Spanner's new options-based transaction APIs
(replace older RunWithRetriableTransactionAsync/transaction overloads with the
ones that accept SpannerTransactionCreationOptions/SpannerTransactionOptions and
handle that transactions auto-dispose after commit/rollback, avoiding reuse),
audit all Spanner parameter/type usage to account for decimal and float mapping
changes (FLOAT64→NUMERIC and FLOAT64→FLOAT32 respectively) and replace any
deprecated SpannerParameterCollection usages with the new APIs, ensure Npgsql
usage is compatible with v10 by targeting .NET 7 in the project file, verifying
DateOnly/TimeOnly CLR mappings and parameter type precedence in any code that
interacts with PostgreSQL (explicitly set parameter types where necessary), and
run full integration tests to validate behavior before merging.
) * Update python dependencies * Update dotnet dependencies * Update python dependencies * Update Node dependencies * Update Java dependencies * Update python dependencies * Update python dependencies * Update python dependencies * Update python dependencies * Downgrade back to Node 20 * Downgrade back to Java 24 * Temporarily disable profiler in Python services
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 7
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
src/adservice/Dockerfile (1)
15-28: Clarify intent: builder and runtime use Java 24 and 25 respectively.JDK 24 and JRE 25 are both available and compatible—JRE 25 can run bytecode compiled by JDK 24 without issue (class file version 68 on 69-capable runtime). However, this differs from the commit message stating "Java downgraded back to 24," which suggests consistency across both stages was intended.
Confirm whether using JRE 25 for the runtime while keeping JDK 24 for the builder is intentional, or if the runtime should be downgraded to JRE 24.0.x to match.
♻️ Duplicate comments (5)
src/cartservice/src/Dockerfile.debug (1)
15-15: Do not use .NET 10.0 preview — revert to stable .NET 9.0Both the SDK (line 15) and runtime (line 25) images have been updated to .NET 10.0, which is currently in preview and not yet stable. The latest stable release is .NET 9.0.8 (as of August 2025), with .NET 10.0 scheduled for official release in November 2025. Using preview versions introduces instability and compatibility risks.
Revert both base images to .NET 9.0 with pinned digests, or if the preview is intentional, document this explicitly in the Dockerfile and ensure comprehensive integration testing is in place.
🔎 Revert to stable .NET 9.0
-FROM mcr.microsoft.com/dotnet/sdk:10.0@sha256:d1823fecac3689a2eb959e02ee3bfe1c2142392808240039097ad70644566190 AS build +FROM mcr.microsoft.com/dotnet/sdk:9.0@sha256:<stable-9.0-digest> AS build-FROM mcr.microsoft.com/dotnet/aspnet:10.0@sha256:eaa79205c3ade4792a7f7bf310a3aac51fe0e1d91c44e40f70b7c6423d475fe0 AS final +FROM mcr.microsoft.com/dotnet/aspnet:9.0@sha256:<stable-9.0-digest> AS finalNote: Replace
<stable-9.0-digest>with the current stable digest from Microsoft Container Registry.Also applies to: 25-25
src/shoppingassistantservice/requirements.txt (1)
24-24:⚠️ Multi-arch build risk persists: C-extension wheels missing for arm64/musllinux (duplicate of past comment).This is a continuation of the issue flagged in previous reviews. Packages like cffi, cryptography, google-crc32c, grpcio, numpy, orjson, pillow, pydantic-core, and pyyaml lack prebuilt wheels for musllinux/arm64 platforms. Multi-arch CI builds will either fail or trigger slow source builds.
Recommendation: Before merging, resolve this by one of:
- Switch to glibc-based (manylinux) build images instead of Alpine (so manylinux wheels are available).
- Pin to package versions that publish musllinux/arm64 wheels.
- Vendor/upload wheels to your artifact store.
- Enable cached source builds in CI with build tools (C compiler, musl-dev, etc.) available.
Also applies to: 30-30, 64-64, 77-77, 147-147, 152-152, 164-164, 203-203, 205-205
src/emailservice/Dockerfile (3)
15-15: CRITICAL: Multi-arch build broken by BUILDPLATFORM on base stage.The base stage uses
--platform=$BUILDPLATFORM, and both the builder (line 17) and final stage (line 30) inherit from it. This forces the final image to the build host's architecture, breaking cross-compilation. This issue has been flagged in previous reviews.Apply the fix from previous reviews to split the platform declarations:
-FROM --platform=$BUILDPLATFORM python:3.14.2-alpine@sha256:7af51ebeb83610fb69d633d5c61a2efb87efa4caf66b59862d624bb6ef788345 AS base - -FROM base AS builder +FROM --platform=$BUILDPLATFORM python:3.14.2-alpine@sha256:7af51ebeb83610fb69d633d5c61a2efb87efa4caf66b59862d624bb6ef788345 AS builderAnd at line 30:
-FROM base +FROM --platform=$TARGETPLATFORM python:3.14.2-alpine@sha256:7af51ebeb83610fb69d633d5c61a2efb87efa4caf66b59862d624bb6ef788345
22-24: Add proper build dependencies for Alpine Python wheels.The current setup installs only
g++andlinux-headers, which is insufficient for building wheels likegrpciothat require C compilation. The redundantapk updateand manual cache cleanup should be replaced with a single--no-cachecommand. This issue was raised in previous reviews.Apply the recommended fix:
-RUN apk update \ - && apk add --no-cache g++ linux-headers \ - && rm -rf /var/cache/apk/* +RUN apk add --no-cache gcc g++ musl-dev linux-headers python3-dev
38-40: Runtime missing CA certificates and libgcc.The runtime stage lacks
ca-certificates(required for HTTPS) andlibgcc(often needed for Alpine compatibility). The redundantapk updateand manual cleanup should be consolidated. This was flagged in previous reviews.Apply the recommended fix:
-RUN apk update \ - && apk add --no-cache libstdc++ \ - && rm -rf /var/cache/apk/* +RUN apk add --no-cache libstdc++ libgcc ca-certificates
🧹 Nitpick comments (1)
src/cartservice/src/Dockerfile.debug (1)
27-28: Consider cleaning up apt cache to reduce image sizeThe
apt-get installcommand does not clean up the package cache afterward. While this is a debug Dockerfile where size may be less critical, adding cleanup reduces the final image size and removes stale package lists.🔎 Add apt cache cleanup
RUN apt-get update \ - && apt-get install -y unzip procps wget + && apt-get install -y unzip procps wget \ + && rm -rf /var/lib/apt/lists/*
📜 Review details
Configuration used: defaults
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (18)
src/adservice/Dockerfilesrc/cartservice/src/Dockerfile.debugsrc/currencyservice/Dockerfilesrc/emailservice/Dockerfilesrc/emailservice/email_server.pysrc/emailservice/requirements.insrc/emailservice/requirements.txtsrc/loadgenerator/Dockerfilesrc/loadgenerator/requirements.insrc/loadgenerator/requirements.txtsrc/paymentservice/Dockerfilesrc/recommendationservice/Dockerfilesrc/recommendationservice/recommendation_server.pysrc/recommendationservice/requirements.insrc/recommendationservice/requirements.txtsrc/shoppingassistantservice/Dockerfilesrc/shoppingassistantservice/requirements.insrc/shoppingassistantservice/requirements.txt
🚧 Files skipped from review as they are similar to previous changes (7)
- src/loadgenerator/requirements.in
- src/loadgenerator/Dockerfile
- src/shoppingassistantservice/Dockerfile
- src/currencyservice/Dockerfile
- src/shoppingassistantservice/requirements.in
- src/recommendationservice/Dockerfile
- src/recommendationservice/requirements.in
🧰 Additional context used
🪛 OSV Scanner (2.3.1)
src/emailservice/requirements.txt
[HIGH] 1-1: certifi 2023.7.22: undefined
(PYSEC-2024-230)
[HIGH] 1-1: certifi 2023.7.22: Certifi removes GLOBALTRUST root certificate
[HIGH] 1-1: idna 3.4: undefined
(PYSEC-2024-60)
[HIGH] 1-1: idna 3.4: Internationalized Domain Names in Applications (IDNA) vulnerable to denial of service from specially crafted inputs to idna.encode
[HIGH] 1-1: urllib3 2.0.7: urllib3 streaming API improperly handles highly compressed data
[HIGH] 1-1: urllib3 2.0.7: urllib3's Proxy-Authorization request header isn't stripped during cross-origin redirects
[HIGH] 1-1: urllib3 2.0.7: urllib3 allows an unbounded number of links in the decompression chain
[HIGH] 1-1: urllib3 2.0.7: urllib3 redirects are not disabled when retries are disabled on PoolManager instantiation
src/recommendationservice/requirements.txt
[HIGH] 1-1: certifi 2023.7.22: undefined
(PYSEC-2024-230)
[HIGH] 1-1: certifi 2023.7.22: Certifi removes GLOBALTRUST root certificate
[HIGH] 1-1: idna 3.4: undefined
(PYSEC-2024-60)
[HIGH] 1-1: idna 3.4: Internationalized Domain Names in Applications (IDNA) vulnerable to denial of service from specially crafted inputs to idna.encode
[HIGH] 1-1: urllib3 2.0.7: urllib3 streaming API improperly handles highly compressed data
[HIGH] 1-1: urllib3 2.0.7: urllib3's Proxy-Authorization request header isn't stripped during cross-origin redirects
[HIGH] 1-1: urllib3 2.0.7: urllib3 allows an unbounded number of links in the decompression chain
[HIGH] 1-1: urllib3 2.0.7: urllib3 redirects are not disabled when retries are disabled on PoolManager instantiation
🔇 Additional comments (10)
src/loadgenerator/requirements.txt (1)
48-49: Verify locust-cloud dependency resolution for locust 2.43.0.Locust 2.43.0 includes changes to "bump minimum version and support multiple locustfiles" related to locust-cloud, indicating that locust-cloud is a required transitive dependency. However, locust-cloud does not appear anywhere in this compiled requirements.txt file.
The previous review flagged that locust-cloud 1.27.0 (a non-existent version) was problematic. Verify:
- What version of locust-cloud is being resolved by
uv pip compilefor locust 2.43.0?- Is the source
requirements.infile still specifying an invalid locust-cloud version?- Whether the compiled output is complete and reflects the correct dependency graph.
Run
uv pip compile requirements.in --verboseto confirm the resolved locust-cloud version, or check theuv.lockfile if present.src/paymentservice/Dockerfile (2)
15-15: Good addition of multi-platform support with current dependencies.The
--platform=$BUILDPLATFORMflag enables efficient cross-platform builds. Node.js 20.19.6 is the latest in the 20.x series, and Alpine 3.23.2 is the latest stable release. SHA digest pinning ensures reproducible and secure builds. No issues identified.
30-30: Alpine 3.23.2 is the latest stable version. Confirmed released December 17, 2025 as a maintenance update with bugfixes (apk-tools, busybox mount parsing). No known CVEs listed in official release notes. The SHA digest is properly pinned for reproducibility.src/shoppingassistantservice/requirements.txt (4)
1-2: Tooling shift: autogeneration now viauvinstead ofpip.The requirements file is now compiled by
uv pip compile(modern Python package installer) rather than standard pip. This aligns with broader CI/tooling modernization mentioned in the PR. No functional impact — the file remains compatible with bothpip installanduv pip install.
132-132: Verify new langgraph packages are actually used in the service code.Three new langgraph packages were added: langgraph-checkpoint==3.0.1 (line 132), langgraph-prebuilt==1.0.5 (line 136), and langgraph-sdk==0.3.1 (line 138). These appear to be transitive dependencies (pulled in via uv lock generation), but confirm they are required for the service and not unnecessary bloat.
Also applies to: 136-136, 138-138
224-224: Verify service code compatibility with SQLAlchemy 2.0 and psycopg 3.x major versions.SQLAlchemy was bumped to 2.0.43 (line 224) and psycopg suite to 3.x (lines 181, 183, 185). SQLAlchemy 2.0 introduced significant ORM API changes (e.g.,
Session.query()→select()), and psycopg 3.x has async support. Ensure the service code is compatible with these major versions — particularly if legacy ORM patterns are used.Also applies to: 181-181, 183-183, 185-185
166-166: No compatibility issues found. All packages support protobuf 6.x:
- proto-plus 1.26.1 allows protobuf >=3.19.0 and <7.0.0
- google-cloud-secret-manager 2.26.0 explicitly supports protobuf 6.x
- grpcio-status 1.75.0 requires protobuf >=6.31.1 and <7.0.0
The upgrade to google-cloud-secret-manager 2.26.0 has relaxed the protobuf <6 constraint from earlier versions, and protobuf 6.32.1 satisfies all declared requirements.
src/adservice/Dockerfile (1)
15-15: LGTM: Multi-platform build approach.The addition of
--platform=$BUILDPLATFORMenables efficient cross-compilation by using the native platform for the build stage while targeting the desired platform for the runtime stage.src/emailservice/requirements.in (1)
1-10: Address compatibility concerns with updated dependency versions.The requirements include a significant major version update to
python-json-logger(4.0.0), which introduces breaking changes including renaming ofLogRecord. Additionally, two OpenTelemetry packages are pinned to beta pre-releases (0.60b1). Before deploying, verify that:
- The
python-json-logger4.0.0 breaking changes (especially LogRecord renaming) are handled in the codebase- The OpenTelemetry beta versions are intentional or if stable versions should be used instead
- All dependencies are tested for compatibility with each other
src/recommendationservice/requirements.txt (1)
35-59: Validate OpenTelemetry 0.60b1 beta stability for production.The OpenTelemetry suite was upgraded to the 0.60b1 beta release (distro, instrumentation, semantic-conventions). Confirm whether:
- Beta versions are acceptable for production recommendation service deployments
- This aligns with the service's SLO requirements and stability expectations
- Version conflicts exist with stable 1.39.1 releases (api, sdk, proto, exporter components)
| ENV PYTHONDONTWRITEBYTECODE=1 | ||
| ENV PYTHONUNBUFFERED=1 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧩 Analysis chain
🌐 Web query:
Python 3.14.2 release date stable official
💡 Result:
Python 3.14.2 (stable) was released on December 5, 2025. [1][2]
Sources:
[1] Python.org — "Python Release Python 3.14.2" (downloads).
[2] Python Insider blog — "Python 3.14.2 and 3.13.11 are now available!"
🏁 Script executed:
cat src/emailservice/DockerfileRepository: devzero-inc/microservices-demo
Length of output: 1436
🏁 Script executed:
find . -name "requirements.txt" -path "*/emailservice/*" | head -20Repository: devzero-inc/microservices-demo
Length of output: 109
🏁 Script executed:
cat src/emailservice/requirements.txtRepository: devzero-inc/microservices-demo
Length of output: 3228
Verify Python 3.14 compatibility with runtime testing.
Python 3.14.2 was officially released on December 5, 2025 and is stable. The dependencies in requirements.txt use recent versions (late 2024 onwards) that should support Python 3.14. Run integration tests to confirm all dependencies function correctly in this environment.
🤖 Prompt for AI Agents
In src/emailservice/Dockerfile around lines 19-20, we need to verify Python 3.14
compatibility by running runtime/integration tests: update the Dockerfile base
image (or add a parallel stage) to use Python 3.14 (e.g., python:3.14-slim) and
rebuild the container, then in CI locally build that image, pip install -r
requirements.txt, run the full test suite and integration tests (unit,
integration, and any service-level tests), capture failures, and iterate on
dependency fixes or pins until tests pass; also add a CI matrix entry for Python
3.14 so future changes are validated automatically.
| # @TODO: Temporarily removed in https://github.com/GoogleCloudPlatform/microservices-demo/pull/3196 | ||
| # import googlecloudprofiler |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Misleading log message when profiler is "enabled" (same issue as recommendation_server.py).
Identical to the issue in recommendation_server.py: when DISABLE_PROFILER is not set, the code logs "Profiler enabled." (line 174) but initStackdriverProfiling() returns immediately without starting the profiler.
Consider updating the log message or adding clarification inside initStackdriverProfiling() to indicate the profiler is temporarily disabled.
Also applies to: 147-163, 170-177
| # @TODO: Temporarily removed in https://github.com/GoogleCloudPlatform/microservices-demo/pull/3196 | ||
| # import googlecloudprofiler |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Misleading log message when profiler is "enabled".
When DISABLE_PROFILER is not set, the code logs "Profiler enabled." (line 104) and calls initStackdriverProfiling() (line 105), but the function now immediately returns without starting the profiler. This creates a misleading operational signal.
Consider either:
- Updating the log message to clarify the profiler is temporarily disabled
- Adding a log inside
initStackdriverProfiling()to indicate it's skipped
The TODO comment references PR GoogleCloudPlatform#3196 as a temporary change. Would you like me to help create a tracking issue to ensure this gets re-enabled, or verify if one already exists?
#!/bin/bash
# Check if there's an open issue tracking the profiler re-enablement
gh issue list --repo GoogleCloudPlatform/microservices-demo --search "profiler OR #3196" --state open --json number,title,url,body --limit 10Also applies to: 51-67, 101-107
🤖 Prompt for AI Agents
In src/recommendationservice/recommendation_server.py lines 23-24 (and also
affecting lines 51-67 and 101-107), the code logs "Profiler enabled." and calls
initStackdriverProfiling() even though that function immediately returns,
creating a misleading operational signal; update the logging to accurately
reflect the state by either changing the "Profiler enabled." message to
something like "Profiler not started (temporarily disabled via TODO #3196)" or
add an explicit log inside initStackdriverProfiling() that reports "Skipping
profiler initialization (temporarily disabled per PR #3196)"; pick one approach,
implement the new log text, and ensure the message appears in both the code path
that checks DISABLE_PROFILER and inside initStackdriverProfiling() so operators
clearly see the profiler is intentionally skipped.
| # This file was autogenerated by uv via the following command: | ||
| # uv pip compile requirements.in -o requirements.txt | ||
| cachetools==5.3.2 | ||
| # via google-auth | ||
| certifi==2023.7.22 | ||
| # via requests | ||
| charset-normalizer==3.3.2 | ||
| # via requests | ||
| deprecated==1.2.14 | ||
| # via | ||
| # opentelemetry-api | ||
| # opentelemetry-exporter-otlp-proto-grpc | ||
| google-api-core==2.12.0 | ||
| # via | ||
| # -r requirements.in | ||
| # google-api-python-client | ||
| google-api-python-client==2.107.0 | ||
| # via google-cloud-profiler | ||
| google-auth==2.23.4 | ||
| # via | ||
| # google-api-core | ||
| # google-api-python-client | ||
| # google-auth-httplib2 | ||
| # google-cloud-profiler | ||
| google-auth-httplib2==0.1.1 | ||
| # via | ||
| # google-api-python-client | ||
| # google-cloud-profiler | ||
| google-cloud-profiler==4.1.0 | ||
| google-api-core==2.28.1 | ||
| # via -r requirements.in | ||
| googleapis-common-protos==1.61.0 | ||
| google-auth==2.23.4 | ||
| # via google-api-core | ||
| googleapis-common-protos==1.72.0 | ||
| # via | ||
| # google-api-core | ||
| # opentelemetry-exporter-otlp-proto-grpc | ||
| grpcio==1.59.2 | ||
| grpcio==1.76.0 | ||
| # via | ||
| # grpcio-health-checking | ||
| # opentelemetry-exporter-otlp-proto-grpc | ||
| grpcio-health-checking==1.59.2 | ||
| grpcio-health-checking==1.76.0 | ||
| # via -r requirements.in | ||
| httplib2==0.22.0 | ||
| # via | ||
| # google-api-python-client | ||
| # google-auth-httplib2 | ||
| idna==3.4 | ||
| # via requests | ||
| importlib-metadata==6.8.0 | ||
| # via opentelemetry-api | ||
| opentelemetry-api==1.20.0 | ||
| opentelemetry-api==1.39.1 | ||
| # via | ||
| # opentelemetry-distro | ||
| # opentelemetry-exporter-otlp-proto-grpc | ||
| # opentelemetry-instrumentation | ||
| # opentelemetry-instrumentation-grpc | ||
| # opentelemetry-sdk | ||
| opentelemetry-distro==0.41b0 | ||
| # opentelemetry-semantic-conventions | ||
| opentelemetry-distro==0.60b1 | ||
| # via -r requirements.in | ||
| opentelemetry-exporter-otlp-proto-common==1.20.0 | ||
| opentelemetry-exporter-otlp-proto-common==1.39.1 | ||
| # via opentelemetry-exporter-otlp-proto-grpc | ||
| opentelemetry-exporter-otlp-proto-grpc==1.20.0 | ||
| opentelemetry-exporter-otlp-proto-grpc==1.39.1 | ||
| # via -r requirements.in | ||
| opentelemetry-instrumentation==0.41b0 | ||
| opentelemetry-instrumentation==0.60b1 | ||
| # via | ||
| # opentelemetry-distro | ||
| # opentelemetry-instrumentation-grpc | ||
| opentelemetry-instrumentation-grpc==0.41b0 | ||
| opentelemetry-instrumentation-grpc==0.60b1 | ||
| # via -r requirements.in | ||
| opentelemetry-proto==1.20.0 | ||
| opentelemetry-proto==1.39.1 | ||
| # via | ||
| # opentelemetry-exporter-otlp-proto-common | ||
| # opentelemetry-exporter-otlp-proto-grpc | ||
| opentelemetry-sdk==1.20.0 | ||
| opentelemetry-sdk==1.39.1 | ||
| # via | ||
| # opentelemetry-distro | ||
| # opentelemetry-exporter-otlp-proto-grpc | ||
| # opentelemetry-instrumentation-grpc | ||
| opentelemetry-semantic-conventions==0.41b0 | ||
| opentelemetry-semantic-conventions==0.60b1 | ||
| # via | ||
| # opentelemetry-instrumentation | ||
| # opentelemetry-instrumentation-grpc | ||
| # opentelemetry-sdk | ||
| protobuf==4.25.0 | ||
| packaging==25.0 | ||
| # via opentelemetry-instrumentation | ||
| proto-plus==1.27.0 | ||
| # via google-api-core | ||
| protobuf==6.33.2 | ||
| # via | ||
| # google-api-core | ||
| # google-cloud-profiler | ||
| # googleapis-common-protos | ||
| # grpcio-health-checking | ||
| # opentelemetry-proto | ||
| # proto-plus | ||
| pyasn1==0.5.0 | ||
| # via | ||
| # pyasn1-modules | ||
| # rsa | ||
| pyasn1-modules==0.3.0 | ||
| # via google-auth | ||
| pyparsing==3.1.1 | ||
| # via httplib2 | ||
| python-json-logger==2.0.7 | ||
| python-json-logger==4.0.0 | ||
| # via -r requirements.in | ||
| requests==2.31.0 | ||
| requests==2.32.5 | ||
| # via | ||
| # -r requirements.in | ||
| # google-api-core | ||
| # google-cloud-profiler | ||
| rsa==4.9 | ||
| rsa==4.9.1 | ||
| # via | ||
| # -r requirements.in | ||
| # google-auth | ||
| typing-extensions==4.8.0 | ||
| # via opentelemetry-sdk | ||
| uritemplate==4.1.1 | ||
| # via google-api-python-client | ||
| typing-extensions==4.15.0 | ||
| # via | ||
| # grpcio | ||
| # opentelemetry-api | ||
| # opentelemetry-exporter-otlp-proto-grpc | ||
| # opentelemetry-sdk | ||
| # opentelemetry-semantic-conventions | ||
| urllib3==2.0.7 | ||
| # via requests | ||
| wrapt==1.16.0 | ||
| # via | ||
| # deprecated | ||
| # opentelemetry-instrumentation | ||
| # opentelemetry-instrumentation-grpc | ||
| zipp==3.17.0 | ||
| # via importlib-metadata |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧩 Analysis chain
🏁 Script executed:
find . -name "requirements.in" -path "*/recommendationservice/*" | head -5Repository: devzero-inc/microservices-demo
Length of output: 117
🌐 Web query:
certifi 2023.7.22 GHSA-248v-346w-9cwc security advisory
💡 Result:
Summary: Certifi release 2023.7.22 is listed as affected by GitHub Advisory GHSA-248v-346w-9cwc (CVE-2024-39689). The advisory states certifi versions >=2021.5.30 and <2024.7.4 included GLOBALTRUST root certificates that are being removed from Mozilla’s trust store; the issue was addressed by removing those roots in certifi 2024.7.4. Remediation: upgrade certifi to 2024.7.4 or later. (github.com)
Citations:
🌐 Web query:
idna 3.4 GHSA-jjg7-2v4v-x38h DoS vulnerability
💡 Result:
Summary:
- ID: GHSA-jjg7-2v4v-x38h (alias CVE-2024-3651). [1][2]
- Issue: specially crafted input to idna.encode() can trigger quadratic-time processing/resource exhaustion (DoS). [1][2]
- Affected: idna versions before 3.7 (notably 3.6). [1][2]
- Severity: medium–high (CVSS ~6.2–7.5 depending on source). [2][3]
Mitigation/fix:
- Upgrade idna to 3.7 or later (patch rejects the malicious inputs). [1][2]
- Workaround: enforce a domain-name maximum length (<= 253 characters) in your application before calling idna.encode(). [1]
References:
[1] GitHub Advisory GHSA-jjg7-2v4v-x38h.
[2] OSV / CVE-2024-3651 summary.
[3] Chainguard advisory (CVE-2024-3651).
🌐 Web query:
urllib3 2.0.7 HIGH severity vulnerabilities CVE 2024 2025
💡 Result:
Short answer — yes. urllib3 2.0.7 is affected by multiple vulnerabilities from 2024–2025, including at least two HIGH-severity CVEs:
- CVE-2025-66418 — unbounded decompression chain / resource exhaustion (fixed in 2.6.0). [1]
- CVE-2025-66471 — streaming API improperly handles highly-compressed data leading to DoS (High; fixed in 2.6.0). [2]
Related/other CVEs you should be aware of:
- CVE-2024-37891 — Proxy-Authorization header not stripped on cross-origin redirects (reported Jun 2024; moderate/important; patched in later 2.x releases). [3][4]
- CVE-2025-50181 / CVE-2025-50182 — redirect/redirect-control issues in Pyodide contexts (lower severity). [5][6]
Recommendation:
- Upgrade urllib3 to a patched release (>= 2.6.0) as soon as possible. If you cannot upgrade, apply vendor-provided patches or mitigations (disable automatic redirects, avoid using Proxy-Authorization headers improperly, or follow vendor advisories). Verify affected deployments (servers, containers, vendor products) and check vendor/security advisories for product-specific fixes. [1][2][3]
Sources:
- NVD / CVE-2025-66418 advisory. [turn0search3]
- NVD / CVE-2025-66471 (GitHub advisory + NVD). [turn1search0]
- NVD / CVE-2024-37891 and related vendor advisories (Debian/IBM). [turn1search1][turn0search5]
- IBM security bulletin (example vendor advisory for CVE-2024-37891). [turn0search2]
- Cybersecurity-Help / vulnerability entries for CVE-2025-50181/50182. [turn0search4][turn0search1]
If you want, I can (a) list which of your installed packages/containers likely include urllib3 2.0.7 and provide exact commands to detect it, or (b) fetch the upstream urllib3 security advisory and the specific patched release notes. Which would you like?
🌐 Web query:
certifi latest version 2025 security patches
💡 Result:
As of Jan 1, 2026:
- Key 2024–2025 security item: CVE‑2024‑39689 (GLOBALTRUST roots) was fixed by certifi in release 2024.7.4. (github.com) [GitHub Advisory / CVE].
- Subsequent 2025 certifi releases (examples shown on PyPI and security trackers) contain no new known direct security vulnerabilities; security trackers list recent 2025 releases and show latest safe releases in 2025. (pypi.org)
- If you need a specific 2025 release number or the exact changelog for a given 2025 version (e.g., 2025.6.15 or 2025.8.3), tell me which release and I’ll fetch its release notes. (data.safetycli.com)
Sources:
[1] GitHub Advisory / CVE-2024-39689 (certifi).
[2] certifi on PyPI (release history).
[3] Snyk / security tracker summary for certifi.
Citations:
- 1: https://github.com/advisories/GHSA-248v-346w-9cwc?utm_source=openai
- 2: https://pypi.org/project/certifi/?utm_source=openai
- 3: https://data.safetycli.com/packages/pypi/certifi/?utm_source=openai
🌐 Web query:
idna latest version 2025 security patches
💡 Result:
Latest idna release: 3.11 (uploaded Oct 12, 2025). Upgrade to the newest release to get the latest fixes. [1]
Security note: CVE-2024-3651 (denial‑of‑service via specially crafted input to idna.encode()) affected older releases (reported impacting 3.6 and <3.7) and has been patched in subsequent releases — ensure you run idna >= 3.7 (preferably 3.11). Vendor distro advisories and CVE pages confirm the fix. [2][3]
References
- PyPI release: idna 3.11 (Oct 12, 2025). [1]
- CVE-2024-3651 summary (Ubuntu). [2]
- SUSE security update / advisory for python‑idna (CVE-2024-3651). [3]
🌐 Web query:
urllib3 latest version 2025 security fixes
💡 Result:
Summary of 2025 urllib3 security fixes:
-
urllib3 2.5.0 (2025) — fixes two moderate security issues: CVE-2025-50181 (PoolManager could follow redirects when redirects were intended to be disabled) and CVE-2025-50182 (redirect handling in Node.js runtime). [1][2]
-
Additional 2025/late-2025 fixes: CVE-2024-37891 (proxy-authorization header not stripped on cross-origin redirects) was fixed in earlier 2.x releases distributed by distros (e.g., SUSE updates). [3]
-
CVE-2025-66418 (unbounded decompression chain -> DoS) is fixed in urllib3 2.6.0 (documented in distro advisories). If you need protection against decompression-related DoS, upgrade to >= 2.6.0. [4]
Sources:
[1] urllib3 releases (release notes for 2.5.0).
[2] Ubuntu security notice / USN-7599-1 (CVE-2025-50181/50182).
[3] SUSE security update (CVE-2024-37891).
[4] Ubuntu/CVE pages describing CVE-2025-66418 and fix in 2.6.0.
🏁 Script executed:
cat -n ./src/recommendationservice/requirements.inRepository: devzero-inc/microservices-demo
Length of output: 357
🏁 Script executed:
pip install requests==2.32.5 --dry-run 2>&1 | grep -E "(certifi|idna|urllib3)" || python3 << 'EOF'
import urllib.request
import json
# Fetch requests 2.32.5 metadata from PyPI
url = "https://pypi.org/pypi/requests/2.32.5/json"
try:
with urllib.request.urlopen(url, timeout=5) as response:
data = json.loads(response.read().decode())
requires = data.get('info', {}).get('requires_dist', [])
if requires:
print("Requests 2.32.5 dependencies:")
for req in requires:
if any(x in req for x in ['certifi', 'idna', 'urllib3']):
print(f" {req}")
else:
print("No requires_dist found")
except Exception as e:
print(f"Error: {e}")
EOFRepository: devzero-inc/microservices-demo
Length of output: 160
🌐 Web query:
requests 2.32.5 certifi idna urllib3 version constraints requirements
💡 Result:
For requests 2.32.5 the dependency version constraints are:
- certifi >=2017.4.17. [1]
- idna >=2.5,<4.0. [1][2]
- urllib3 >=1.21.1,<3.0. [1][2]
Sources: PyPI package metadata for requests 2.32.5 and Requests dependency listing. [1][2]
🌐 Web query:
requests 2.32.5 compatible with urllib3 2.6.0 certifi 2024.7.4
💡 Result:
Yes — Requests 2.32.x declares urllib3 support for 2.x (requests' dependency is urllib3>=1.21.1,<3), so urllib3 2.6.0 is within that range. Certifi 2024.7.4 is just the CA bundle package and is compatible as well. [1][2]
Sources:
- Requests release/notes (dependency range: urllib3>=1.21.1,<3). [1]
- urllib3 v2 migration / docs showing v2.x usage. [2]
Update transitive dependencies to address HIGH severity security vulnerabilities.
The following packages pinned in requirements.txt (via requests 2.32.5) contain confirmed HIGH severity vulnerabilities with available fixes:
- certifi 2023.7.22 (CVE-2024-39689 / GHSA-248v-346w-9cwc): GLOBALTRUST root certificate inclusion → upgrade to 2024.7.4+
- urllib3 2.0.7: Multiple HIGH CVEs:
- CVE-2025-66418: unbounded decompression chain DoS
- CVE-2025-66471: streaming API compression DoS
- Upgrade to 2.6.0+
- idna 3.4 (CVE-2024-3651 / GHSA-jjg7-2v4v-x38h): DoS via specially crafted input → upgrade to 3.7+ (latest: 3.11)
Update requirements.in to allow these patched versions. The current constraint requests==2.32.5 supports urllib3>=1.21.1,<3.0, certifi>=2017.4.17, and idna>=2.5,<4.0, so patched versions are compatible. Recompile with uv pip compile to update requirements.txt.
🧰 Tools
🪛 OSV Scanner (2.3.1)
[HIGH] 1-1: certifi 2023.7.22: undefined
(PYSEC-2024-230)
[HIGH] 1-1: certifi 2023.7.22: Certifi removes GLOBALTRUST root certificate
[HIGH] 1-1: idna 3.4: undefined
(PYSEC-2024-60)
[HIGH] 1-1: idna 3.4: Internationalized Domain Names in Applications (IDNA) vulnerable to denial of service from specially crafted inputs to idna.encode
[HIGH] 1-1: urllib3 2.0.7: urllib3 streaming API improperly handles highly compressed data
[HIGH] 1-1: urllib3 2.0.7: urllib3's Proxy-Authorization request header isn't stripped during cross-origin redirects
[HIGH] 1-1: urllib3 2.0.7: urllib3 allows an unbounded number of links in the decompression chain
[HIGH] 1-1: urllib3 2.0.7: urllib3 redirects are not disabled when retries are disabled on PoolManager instantiation
🤖 Prompt for AI Agents
In src/recommendationservice/requirements.txt lines 1-101, several transitive
deps pinned (certifi==2023.7.22, urllib3==2.0.7, idna==3.4) contain HIGH
severity CVEs and must be bumped to patched releases; update requirements.in to
relax or set constraints so certifi>=2024.7.4, urllib3>=2.6.0, and idna>=3.7 (or
remove the strict requests==2.32.5 pin if not required) then run the same
command used to generate this file (uv pip compile requirements.in -o
requirements.txt) to regenerate requirements.txt so the patched versions are
reflected; ensure the new constraints remain compatible with requests (requests
allows urllib3<3.0 and certifi/idna ranges) and commit the updated
requirements.in and regenerated requirements.txt.
Bumps [certifi](https://github.com/certifi/python-certifi) from 2023.7.22 to 2024.7.4. - [Commits](certifi/python-certifi@2023.07.22...2024.07.04) --- updated-dependencies: - dependency-name: certifi dependency-version: 2024.7.4 dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [zipp](https://github.com/jaraco/zipp) from 3.17.0 to 3.19.1. - [Release notes](https://github.com/jaraco/zipp/releases) - [Changelog](https://github.com/jaraco/zipp/blob/main/NEWS.rst) - [Commits](jaraco/zipp@v3.17.0...v3.19.1) --- updated-dependencies: - dependency-name: zipp dependency-version: 3.19.1 dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
) Bumps [zipp](https://github.com/jaraco/zipp) from 3.17.0 to 3.19.1. - [Release notes](https://github.com/jaraco/zipp/releases) - [Changelog](https://github.com/jaraco/zipp/blob/main/NEWS.rst) - [Commits](jaraco/zipp@v3.17.0...v3.19.1) --- updated-dependencies: - dependency-name: zipp dependency-version: 3.19.1 dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [certifi](https://github.com/certifi/python-certifi) from 2023.7.22 to 2024.7.4. - [Commits](certifi/python-certifi@2023.07.22...2024.07.04) --- updated-dependencies: - dependency-name: certifi dependency-version: 2024.7.4 dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 4
Fix all issues with AI Agents 🤖
In @src/adservice/build.gradle:
- Around line 46-48: The dependency list currently includes
io.netty:netty-tcnative-boringssl-static:2.0.74.Final which deviates from the
Netty BOM pinned version; replace that artifact by switching to
io.grpc:grpc-netty-shaded:1.78.0 (remove netty-tcnative-boringssl-static) in the
runtimeOnly/dependencies block to avoid manual tcnative version management, or
if you must keep grpc-netty (unshaded) instead, change
io.netty:netty-tcnative-boringssl-static to version 2.0.73.Final to align with
Netty 4.1.127.Final's BOM.
- Around line 17-20: Remove the unused Jackson variables and their runtime
dependencies: delete the jacksonCoreVersion and jacksonDatabindVersion variable
declarations and remove the corresponding runtime dependency entries that
reference those variables (the jackson-core and jackson-databind runtime
dependencies) from build.gradle; keep the updated protocVersion and grpcVersion
unchanged so the protobuf regeneration proceeds on next build.
In @src/checkoutservice/go.mod:
- Around line 3-5: The go.mod now pins Go 1.25 (lines with "go 1.25" and
"toolchain go1.25.5"); before merging, run the full unit/integration test suite
with Go 1.25.5 and audit code paths for unguarded nil pointer dereferences
(search for functions that may return nil like constructors and methods used
without nil checks), review any floating-point math (places using math
operations or package names like math, big, or custom calc functions) for
nondeterministic results under FMA/GOAMD64 and add explicit handling or casts if
needed, ensure CI/CD agents and staging macOS runners meet the macOS 12+
requirement and remove Windows ARM 32-bit targets from the build matrix if
present, and update test configs to set ASAN_OPTIONS to avoid leak failures when
AddressSanitizer is enabled; fix any failures and re-run tests with go1.25.5 in
staging before merging.
In @src/frontend/go.mod:
- Around line 55-57: The genproto pseudo-version mismatch across modules
(google.golang.org/genproto, google.golang.org/genproto/googleapis/api,
google.golang.org/genproto/googleapis/rpc) must be unified across all services
(checkoutservice, frontend, productcatalogservice); coordinate changes so all
three services pin the same pseudo-version, update each service's go.mod to the
chosen pseudo-version and run go mod tidy in each service (or use go get
<module>@<pseudo-version> then tidy) to regenerate consistent go.sum entries,
then commit the synchronized go.mod/go.sum updates in all three repos
simultaneously.
♻️ Duplicate comments (5)
src/emailservice/requirements.txt (2)
36-36:⚠️ idna 3.4 remains vulnerable to denial-of-service (unresolved from prior review).The pinned version idna==3.4 is still affected by PYSEC-2024-60 (GHSA-jjg7-2v4v-x38h, CVE-2024-3651), a denial-of-service vulnerability where specially crafted domain names trigger quadratic-time processing in
idna.encode(). This is a transitive dependency viarequestsand remains unresolved despite this PR being a dependency upgrade pass.Upgrade to idna>=3.7 to remediate.
113-113:⚠️ urllib3 2.0.7 remains vulnerable to four security issues (unresolved from prior review).The pinned version urllib3==2.0.7 is affected by four documented security vulnerabilities that remain unresolved despite this PR targeting dependency upgrades:
- GHSA-34jh-p97f (CVE-2024-37891): Proxy-Authorization header not stripped on cross-origin redirects (fixed in 2.2.2)
- GHSA-2xpw-w6gg-jr37 (CVE-2025-66471): Resource exhaustion via uncontrolled decompression in streaming responses (fixed in 2.6.0)
- GHSA-gm62-xv2j-4w53 (CVE-2025-66418): Denial of service via unbounded decompression chain (fixed in 2.6.0)
- GHSA-pq67-6m6q-mj2v (CVE-2025-50181): Retries parameter not properly disabling redirects in PoolManager (fixed in 2.5.0)
This is a transitive dependency via
requests. Upgrade to urllib3>=2.6.0 (prefer 2.6.2) to address all vulnerabilities.src/recommendationservice/requirements.txt (1)
1-101: Unresolved HIGH severity vulnerabilities in transitive dependencies: idna and urllib3 remain vulnerable.While certifi was appropriately updated to 2024.7.4 (addressing CVE-2024-39689), two other HIGH severity CVEs flagged in the previous review remain unresolved:
- idna 3.4 (line 23): CVE-2024-3651 / GHSA-jjg7-2v4v-x38h — DoS via specially crafted input to
idna.encode(). Upgrade to 3.7+ (latest: 3.11).- urllib3 2.0.7 (line 94): Multiple HIGH CVEs including:
- CVE-2025-66418: unbounded decompression chain DoS
- CVE-2025-66471: streaming API compression DoS
- Upgrade to 2.6.0+
Since this is an auto-generated file, update requirements.in to allow patched versions (requests 2.32.5 supports
urllib3<3.0,certifi≥2017.4.17,idna≥2.5,<4.0), then recompile withuv pip compile requirements.in -o requirements.txt.src/productcatalogservice/go.mod (2)
11-11: Deprecatedgithub.com/golang/protobufdependency remains unresolved from prior review.This issue was previously flagged but not addressed. The unmaintained
github.com/golang/protobuf v1.5.4should be removed in favor ofgoogle.golang.org/protobuf v1.36.11(already declared). Updatesrc/productcatalogservice/catalog_loader.goline 29 to usegoogle.golang.org/protobuf/encoding/protojsoninstead ofgithub.com/golang/protobuf/jsonpb, then rungo mod tidyto remove the legacy dependency.
65-67: Misalignedgoogle.golang.org/genprotorevisions remain unresolved from prior review.This issue was previously flagged but not corrected. The base module (line 65) uses revision v0.0.0-20251124214823-79d6a2a48846, while
googleapis/apiandgoogleapis/rpc(lines 66–67) use v0.0.0-20251202230838-ff82c1b0f217. Unify all three to the same revision (prefer the newer v0.0.0-20251202230838-ff82c1b0f217), rungo mod tidy, and verify builds to confirm no type conflicts.
📜 Review details
Configuration used: defaults
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (4)
src/checkoutservice/go.sumis excluded by!**/*.sumsrc/frontend/go.sumis excluded by!**/*.sumsrc/productcatalogservice/go.sumis excluded by!**/*.sumsrc/shippingservice/go.sumis excluded by!**/*.sum
📒 Files selected for processing (7)
src/adservice/build.gradlesrc/checkoutservice/go.modsrc/emailservice/requirements.txtsrc/frontend/go.modsrc/productcatalogservice/go.modsrc/recommendationservice/requirements.txtsrc/shippingservice/go.mod
🧰 Additional context used
🪛 OSV Scanner (2.3.1)
src/emailservice/requirements.txt
[HIGH] 1-1: idna 3.4: undefined
(PYSEC-2024-60)
[HIGH] 1-1: idna 3.4: Internationalized Domain Names in Applications (IDNA) vulnerable to denial of service from specially crafted inputs to idna.encode
[HIGH] 1-1: urllib3 2.0.7: urllib3 streaming API improperly handles highly compressed data
[HIGH] 1-1: urllib3 2.0.7: urllib3's Proxy-Authorization request header isn't stripped during cross-origin redirects
[HIGH] 1-1: urllib3 2.0.7: urllib3 allows an unbounded number of links in the decompression chain
[HIGH] 1-1: urllib3 2.0.7: urllib3 redirects are not disabled when retries are disabled on PoolManager instantiation
src/recommendationservice/requirements.txt
[HIGH] 1-1: idna 3.4: undefined
(PYSEC-2024-60)
[HIGH] 1-1: idna 3.4: Internationalized Domain Names in Applications (IDNA) vulnerable to denial of service from specially crafted inputs to idna.encode
[HIGH] 1-1: urllib3 2.0.7: urllib3 streaming API improperly handles highly compressed data
[HIGH] 1-1: urllib3 2.0.7: urllib3's Proxy-Authorization request header isn't stripped during cross-origin redirects
[HIGH] 1-1: urllib3 2.0.7: urllib3 allows an unbounded number of links in the decompression chain
[HIGH] 1-1: urllib3 2.0.7: urllib3 redirects are not disabled when retries are disabled on PoolManager instantiation
🔇 Additional comments (12)
src/emailservice/requirements.txt (1)
5-5: ✅ Certifi vulnerability resolved.The upgrade from certifi 2023.7.22 to 2024.7.4 successfully addresses CVE-2024-39689 (PYSEC-2024-230), which involved GLOBALTRUST root certificate compliance issues weakening TLS validation.
src/productcatalogservice/go.mod (1)
3-5: Go 1.25 upgrade with toolchain pinning is well-structured.The version bump from 1.23 to 1.25 with explicit toolchain specification (
go1.25.5) ensures reproducibility. Verify that all downstream services and CI pipelines support Go 1.25 to avoid compatibility issues.src/shippingservice/go.mod (3)
3-3: No action required — Dockerfile is correctly aligned with go.mod.The Dockerfile already uses
golang:1.25.5-alpine, which matches thetoolchain go1.25.5declaration in go.mod. No toolchain mismatch exists.Likely an incorrect or invalid review comment.
26-30: Please provide the review comment that needs to be rewritten within<review_comment>tags in your message so I can proceed with the verification and rewriting task.
11-11: The gRPC v1.78.0 upgrade is compatible with shippingservice. The only breaking change in v1.78.0 is stricter URL parsing for gRPC client connections (rejecting unbracketed IPv6 addresses likedns://::1/...), but shippingservice is a pure gRPC server that doesn't establish client connections. The service implements standard gRPC server APIs that remain stable across this version range, with no API removals between v1.67.1 and v1.78.0.Likely an incorrect or invalid review comment.
src/frontend/go.mod (1)
3-5: Go version alignment: verified across all services.All four Go services (frontend, checkoutservice, productcatalogservice, shippingservice) and their Dockerfiles are consistently at
go 1.25withtoolchain go1.25.5andgolang:1.25.5-alpinebase images. The prior mismatch flagged in earlier reviews has been resolved.src/checkoutservice/go.mod (2)
20-49: This review's security concern about golang.org/x/crypto v0.45.0 is inaccurate. The version v0.45.0 is the patched release that addresses CVE-2025-47914 and CVE-2025-58181 (SSH-related DoS vulnerabilities), not a vulnerable version requiring remediation. The project is correctly using the fixed version.Additionally, the review claims "major version bumps in direct dependencies" and "substantially rebalanced" transitive dependencies, but provides no evidence of actual changes—the git history shows no recent modifications to this file. Without a diff context showing what actually changed, the scope and risk of the update cannot be properly assessed.
While standard testing recommendations (integration tests, gRPC validation, OpenTelemetry verification, load testing) are always good practice for dependency updates, the specific security concern raised here is already resolved by the current versions used.
Likely an incorrect or invalid review comment.
8-17: No significant breaking changes identified; upgrade risk is minimal.The actual breaking changes in these versions have minimal impact on the checkoutservice code:
- OpenTelemetry v1.39.0: Changes affect Go 1.23 support drop (not relevant; service uses Go 1.25), Prometheus exporter behavior (not used), and environment variable naming. The code uses stable public APIs (
otel.SetTextMapPropagator,otel.SetTracerProvider,otelgrpc.NewServerHandler) that remain unchanged.- gRPC v1.78.0: The only breaking change is validation of malformed URLs on Go 1.26+. The service passes addresses from environment variables without custom URL parsing, so this is not affected.
- Protobuf v1.36.11: No breaking changes; patch upgrade with bug fixes only.
The code requires no refactoring or validation beyond standard testing to confirm the versions work in the deployed environment.
src/adservice/build.gradle (4)
23-24: Java 21 upgrade looks good—ensure Dockerfile alignment.The compilation target upgrade to Java 21 is appropriate. However, past reviews identified that the Dockerfile runtime stage uses a Java 25 JRE instead of Java 21. Verify that
src/adservice/Dockerfileuses a Java 21 JRE base image (e.g.,eclipse-temurin:21-jre-alpine) to match this compilation target.
36-36: LGTM—proto-google-common-protos version bump.The update to 2.63.2 is a routine dependency upgrade and should be compatible with protoc 4.33.2 and gRPC 1.78.0.
43-43: LGTM—log4j-core security update.The update to 2.25.3 is a maintenance and security update. Minor version bumps in log4j are typically backward-compatible.
70-70: LGTM—Google Java Format version update.The update to version 1.33.0 is a routine tooling upgrade and should be compatible with Java 21.
| def grpcVersion = "1.78.0" | ||
| def jacksonCoreVersion = "2.20.1" | ||
| def jacksonDatabindVersion = "2.20.1" | ||
| def protocVersion = "4.33.2" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Check for Jackson imports in adservice codebase
echo "=== Searching for Jackson imports in adservice ==="
rg "import.*jackson" src/adservice/src --type java -i | head -20
echo -e "\n=== Checking for Jackson references in build.gradle ==="
cat src/adservice/build.gradle | grep -i jackson
echo -e "\n=== Checking protobuf generated files location ==="
find src/adservice -type d -name "proto" -o -name "protobuf" -o -name "generated" 2>/dev/null | head -10Repository: devzero-inc/microservices-demo
Length of output: 508
🏁 Script executed:
#!/bin/bash
# Check what dependencies are actually declared in build.gradle for runtime
echo "=== Checking runtime dependencies section ==="
sed -n '45,55p' src/adservice/build.gradleRepository: devzero-inc/microservices-demo
Length of output: 470
🏁 Script executed:
#!/bin/bash
# Search for actual usage of Jackson classes in the source code
echo "=== Checking for Jackson class usage (not just imports) ==="
rg "ObjectMapper|JsonParser|JsonGenerator|JsonNode|JSON|@Json" src/adservice/src/main/java --type java | head -20Repository: devzero-inc/microservices-demo
Length of output: 133
🌐 Web query:
netty-tcnative 2.0.74 gRPC 1.78.0 compatibility
💡 Result:
Short answer: Yes — netty-tcnative 2.0.74 (2.0.x series) is compatible with gRPC Java 1.78.0. gRPC's Java netty transport uses Netty 4.1.x and is known to work with netty-tcnative 2.0.x (the 2.0.* releases track the Netty 4.1 line), and both 1.78.0 (grpc-java) and netty-tcnative 2.0.74 appear in Maven/registry listings. [1][2]
If you want a concrete dependency check or a recommended artifact (shaded vs. non‑shaded) for your build file, tell me which packaging (grpc-netty vs grpc-netty-shaded) and your platform (Linux/Alpine/macOS) and I’ll give the exact coordinates and example Maven/Gradle entries.
Sources:
- gRPC Java artifacts (1.78.0 listed in Maven central). [1]
- io.netty:netty-tcnative-boringssl-static versions (includes 2.0.74). [2]
🌐 Web query:
grpc 1.78.0 netty-tcnative requirements
💡 Result:
Short answer — key netty-tcnative requirements for gRPC Java v1.78.0:
- Recommended Netty/netty-tcnative combo: netty-handler 4.1.127.Final and netty-tcnative-boringssl-static 2.0.74.Final (applies to grpc-netty / grpc-netty-shaded v1.77.x–1.78.x). [1]
- If you use netty-tcnative with OpenSSL (not BoringSSL): OpenSSL >= 1.0.2 and Apache APR (libapr-1) >= 1.5.2; you must pick the correct platform classifier (windows‑x86_64, osx‑x86_64, linux‑x86_64 or linux‑x86_64‑fedora). [1]
- ALPN notes: OpenJDK prior to 8u252 lacks ALPN support — prefer grpc-netty-shaded (includes tcnative+BoringSSL) or use Java 9+/Conscrypt/appropriate tcnative to provide ALPN. [1]
- grpc-netty-shaded v1.78.0 artifact is available on Maven Central (use it to avoid Netty version conflicts). [2]
Sources: gRPC Java security/Netty docs (version table, ALPN/OpenSSL/APR notes). [1] gRPC netty-shaded on Maven Central. [2]
🏁 Script executed:
#!/bin/bash
# Check the proto files and their syntax
echo "=== Proto files in adservice ==="
find src/adservice/src/main/proto -name "*.proto" -type f
echo -e "\n=== Syntax declaration in proto files ==="
find src/adservice/src/main/proto -name "*.proto" -type f -exec head -5 {} + 2>/dev/nullRepository: devzero-inc/microservices-demo
Length of output: 399
🏁 Script executed:
#!/bin/bash
# Get more lines to find syntax declaration
echo "=== Proto file content (first 20 lines) ==="
head -20 src/adservice/src/main/proto/demo.protoRepository: devzero-inc/microservices-demo
Length of output: 799
🏁 Script executed:
#!/bin/bash
# Check protobuf plugin configuration and generated files
echo "=== Protobuf plugin configuration in build.gradle ==="
sed -n '62,80p' src/adservice/build.gradle
echo -e "\n=== Check for generated protobuf Java files ==="
find src/adservice -path "*generated*" -name "*.java" -type f 2>/dev/null | head -5
echo -e "\n=== Check build directory structure ==="
find src/adservice -type d -name "generated" 2>/dev/nullRepository: devzero-inc/microservices-demo
Length of output: 666
Remove unused Jackson dependencies.
The AdService codebase does not use Jackson (no imports or usage detected). Remove the jacksonCoreVersion and jacksonDatabindVersion variables (lines 18-19) and their corresponding runtime dependencies at lines 46-47.
The protobuf upgrade from 3.25.5 to 4.33.2 is compatible since the .proto file uses proto3 syntax. The gradle protobuf plugin will automatically regenerate the code on the next build.
🤖 Prompt for AI Agents
In @src/adservice/build.gradle around lines 17-20, Remove the unused Jackson
variables and their runtime dependencies: delete the jacksonCoreVersion and
jacksonDatabindVersion variable declarations and remove the corresponding
runtime dependency entries that reference those variables (the jackson-core and
jackson-databind runtime dependencies) from build.gradle; keep the updated
protocVersion and grpcVersion unchanged so the protobuf regeneration proceeds on
next build.
| runtimeOnly "com.fasterxml.jackson.core:jackson-core:${jacksonCoreVersion}", | ||
| "com.fasterxml.jackson.core:jackson-databind:${jacksonDatabindVersion}", | ||
| "io.netty:netty-tcnative-boringssl-static:2.0.69.Final" | ||
| "io.netty:netty-tcnative-boringssl-static:2.0.74.Final" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Check the gRPC 1.78.0 BOM to find the correct netty-tcnative version
echo "=== Fetching gRPC 1.78.0 BOM to check netty-tcnative version ==="
curl -s https://repo1.maven.org/maven2/io/grpc/grpc-bom/1.78.0/grpc-bom-1.78.0.pom | grep -i "netty-tcnative" -A 1 -B 1
echo ""
echo "=== Checking full BOM for netty versions ==="
curl -s https://repo1.maven.org/maven2/io/grpc/grpc-bom/1.78.0/grpc-bom-1.78.0.pom | grep -i "netty" | head -20Repository: devzero-inc/microservices-demo
Length of output: 279
🏁 Script executed:
#!/bin/bash
# Get full gRPC 1.78.0 BOM to understand netty dependency management
echo "=== Full gRPC 1.78.0 BOM netty section ==="
curl -s https://repo1.maven.org/maven2/io/grpc/grpc-bom/1.78.0/grpc-bom-1.78.0.pom | grep -A 500 "<dependencyManagement>" | grep -i "netty\|version" | head -40
echo ""
echo "=== Checking grpc-netty artifact dependencies ==="
curl -s https://repo1.maven.org/maven2/io/grpc/grpc-netty/1.78.0/grpc-netty-1.78.0.pom | grep -A 2 "netty-tcnative\|netty-common" | head -20Repository: devzero-inc/microservices-demo
Length of output: 1350
🏁 Script executed:
#!/bin/bash
# Fetch grpc-netty 1.78.0 POM and parse netty dependencies more carefully
echo "=== grpc-netty 1.78.0 dependencies involving 'netty' ==="
curl -s https://repo1.maven.org/maven2/io/grpc/grpc-netty/1.78.0/grpc-netty-1.78.0.pom | \
sed -n '/<dependencies>/,/<\/dependencies>/p' | \
sed -n '/<dependency>/,/<\/dependency>/p' | \
grep -A 2 "netty" | head -50
echo ""
echo "=== Check Maven Central for netty-tcnative 2.0.74.Final release info ==="
curl -s https://repo1.maven.org/maven2/io/netty/netty-tcnative-boringssl-static/2.0.74.Final/netty-tcnative-boringssl-static-2.0.74.Final.pom | \
sed -n '/<properties>/,/<\/properties>/p' | head -20Repository: devzero-inc/microservices-demo
Length of output: 682
🏁 Script executed:
#!/bin/bash
# Check netty-tcnative 2.0.74.Final compatibility with Netty 4.1.127.Final
echo "=== Fetching netty-tcnative 2.0.74.Final POM for Netty compatibility ==="
curl -s https://repo1.maven.org/maven2/io/netty/netty-tcnative-boringssl-static/2.0.74.Final/netty-tcnative-boringssl-static-2.0.74.Final.pom | \
sed -n '/<dependencies>/,/<\/dependencies>/p' | \
grep -A 2 "netty" | head -30
echo ""
echo "=== Check recent netty-tcnative versions available ==="
curl -s https://repo1.maven.org/maven2/io/netty/netty-tcnative-boringssl-static/ | \
grep -o "2\.0\.[0-9]*\.Final" | sort -V | tail -10Repository: devzero-inc/microservices-demo
Length of output: 1328
🏁 Script executed:
#!/bin/bash
# Check netty-tcnative 2.0.74.Final full POM to understand Netty version requirements
echo "=== Full netty-tcnative 2.0.74.Final POM for version constraints ==="
curl -s https://repo1.maven.org/maven2/io/netty/netty-tcnative-boringssl-static/2.0.74.Final/netty-tcnative-boringssl-static-2.0.74.Final.pom | \
grep -i "netty\|version" | grep -v "^--$" | head -50
echo ""
echo "=== Check Maven Central metadata for netty-tcnative 2.0.74 release info ==="
curl -s https://repo1.maven.org/maven2/io/netty/netty-tcnative-boringssl-static/maven-metadata.xml | \
tail -30Repository: devzero-inc/microservices-demo
Length of output: 3795
🌐 Web query:
netty-tcnative 2.0.74.Final Netty 4.1.127 compatibility
💡 Result:
Short answer: yes — netty-tcnative 2.0.74.Final is compatible with Netty 4.1.127.Final, but the Netty BOM for 4.1.127 typically pins netty-tcnative 2.0.73.Final (so using 2.0.74 is a safe, backwards‑compatible upgrade in practice).
Sources:
- Netty 4.1.122/4.1.118 release notes showing netty-tcnative upgrades and the project’s practice of pinning specific tcnative versions. [1][2]
- Community/managed BOMs that list netty-tcnative 2.0.73.Final paired with Netty 4.1.127.Final. [3]
If you want, I can fetch the official Netty BOM for 4.1.127.Final and show the exact pinned netty-tcnative entry.
🏁 Script executed:
#!/bin/bash
# Check Netty 4.1.127.Final BOM for netty-tcnative pinned version
echo "=== Fetching Netty 4.1.127.Final BOM for netty-tcnative version ==="
curl -s https://repo1.maven.org/maven2/io/netty/netty-bom/4.1.127.Final/netty-bom-4.1.127.Final.pom | \
grep -A 2 "netty-tcnative" | head -20
echo ""
echo "=== Full netty-tcnative section in Netty BOM ==="
curl -s https://repo1.maven.org/maven2/io/netty/netty-bom/4.1.127.Final/netty-bom-4.1.127.Final.pom | \
sed -n '/<dependencyManagement>/,/<\/dependencyManagement>/p' | \
grep -A 1 "tcnative"Repository: devzero-inc/microservices-demo
Length of output: 2717
🏁 Script executed:
#!/bin/bash
# Find tcnative.version property in Netty 4.1.127.Final BOM
echo "=== Searching for tcnative.version property in Netty 4.1.127.Final BOM ==="
curl -s https://repo1.maven.org/maven2/io/netty/netty-bom/4.1.127.Final/netty-bom-4.1.127.Final.pom | \
sed -n '/<properties>/,/<\/properties>/p' | \
grep -i "tcnative"
echo ""
echo "=== All properties in Netty 4.1.127.Final BOM ==="
curl -s https://repo1.maven.org/maven2/io/netty/netty-bom/4.1.127.Final/netty-bom-4.1.127.Final.pom | \
sed -n '/<properties>/,/<\/properties>/p'Repository: devzero-inc/microservices-demo
Length of output: 380
Align netty-tcnative version with Netty BOM or switch to grpc-netty-shaded.
The build uses netty-tcnative-boringssl-static 2.0.74.Final, but Netty 4.1.127.Final's BOM (the authoritative dependency specification) pins netty-tcnative to 2.0.73.Final. While 2.0.74.Final is compatible with Netty 4.1.127.Final, using a version ahead of the BOM recommendation deviates from tested combinations.
Recommended solution: Switch to io.grpc:grpc-netty-shaded:1.78.0 to eliminate manual netty-tcnative version management entirely.
Alternative: If grpc-netty (unshaded) is required, downgrade netty-tcnative-boringssl-static to 2.0.73.Final to align with Netty 4.1.127.Final's BOM specification.
🤖 Prompt for AI Agents
In @src/adservice/build.gradle around lines 46-48, The dependency list currently
includes io.netty:netty-tcnative-boringssl-static:2.0.74.Final which deviates
from the Netty BOM pinned version; replace that artifact by switching to
io.grpc:grpc-netty-shaded:1.78.0 (remove netty-tcnative-boringssl-static) in the
runtimeOnly/dependencies block to avoid manual tcnative version management, or
if you must keep grpc-netty (unshaded) instead, change
io.netty:netty-tcnative-boringssl-static to version 2.0.73.Final to align with
Netty 4.1.127.Final's BOM.
| go 1.25 | ||
|
|
||
| toolchain go1.25.5 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧩 Analysis chain
🌐 Web query:
Go 1.25 release breaking changes from Go 1.23
💡 Result:
Here are the notable breaking or behavior‑changing items introduced by Go 1.25 (compared to Go 1.23), with sources:
- Stricter nil‑pointer check semantics: the compiler/runtime now enforces spec‑correct nil checks in more places; some previously-running-but-incorrect programs can now panic. [1]
- Floating‑point differences on AMD64 with GOAMD64=v3+: the compiler uses fused multiply–add (FMA) which can change exact floating‑point results; avoid by using an explicit float64 cast to prevent fusion. [1]
- AddressSanitizer change: ASAN in the toolchain now defaults to reporting leaks on exit (may cause failures when C code allocates unreachable memory); configurable via ASAN_OPTIONS. [1]
- Toolchain/go command behavior changes that can affect workflows:
- The go command ships fewer prebuilt helper binaries (some tools are built on demand). [1]
- New/experimental go/tooling features (e.g., jsonv2, new GC experiment, trace flight recorder) may change behavior if enabled via GOEXPERIMENT. [1][3]
- DWARF5 and linker/debug info changes: debug output and linker options changed (may affect debuggers/profilers and binary sizes). [1]
- Platform/port changes that can affect builds/runtimes:
- macOS minimum raised (as announced in 1.24 and reiterated: Go 1.25 requires macOS 12+). [1][4]
- Windows/ARM 32‑bit port marked broken (scheduled for removal in 1.26). [1]
- Packaging/crypto experiment changes (Microsoft build note): some builds enable system-provided crypto by default (can affect Linux static/no‑cgo builds); upstream behavior is experimental and opt‑out is possible. [2]
For context and the baseline (what changed since Go 1.23), see the Go 1.23 release notes. [4]
Sources:
- Go 1.25 Release Notes (go.dev). [go1.25].
- Microsoft blog: Go 1.25 Microsoft build notes (systemcrypto).
- Go 1.25 coverage in summaries/announcements (tooling experiments).
- Go 1.23 Release Notes (go.dev).
If you want, I can extract the exact release‑note paragraphs for any of the items above or produce a short checklist for auditing a codebase before upgrading.
🌐 Web query:
Go 1.25 release date status stable
💡 Result:
Go 1.25 was released as a stable release on August 12, 2025. [1][2]
Sources:
[1] Go blog — "Go 1.25 is released" (Aug 12, 2025).
[2] Go release history — go1.25.0 (released 2025-08-12).
Address potential breaking changes introduced in Go 1.25.
The upgrade from Go 1.23 to Go 1.25 is stable (released August 12, 2025), but introduces several breaking changes that may affect the checkoutservice. Verify the following before merging:
- Nil-pointer semantics: Go 1.25 enforces stricter nil checks; code that previously ran but was incorrect may now panic. Audit code paths for unguarded nil pointer operations.
- Floating-point precision: On AMD64 with
GOAMD64=v3+, the compiler uses fused multiply–add (FMA), which can change exact floating-point results. If your service relies on deterministic floating-point behavior, review calculations or use explicit casts. - AddressSanitizer: If ASAN is enabled, it now defaults to reporting memory leaks on exit. Ensure test infrastructure does not fail unexpectedly; configure via
ASAN_OPTIONSif needed. - macOS requirement: Go 1.25 requires macOS 12+ minimum. Verify CI/CD agents and deployment targets support this.
- Platform support: Windows ARM 32-bit is marked broken in 1.25. Confirm this does not affect your build matrix.
Run the full test suite and integration tests with go1.25.5 in a staging environment before deploying.
🤖 Prompt for AI Agents
In @src/checkoutservice/go.mod around lines 3-5, The go.mod now pins Go 1.25
(lines with "go 1.25" and "toolchain go1.25.5"); before merging, run the full
unit/integration test suite with Go 1.25.5 and audit code paths for unguarded
nil pointer dereferences (search for functions that may return nil like
constructors and methods used without nil checks), review any floating-point
math (places using math operations or package names like math, big, or custom
calc functions) for nondeterministic results under FMA/GOAMD64 and add explicit
handling or casts if needed, ensure CI/CD agents and staging macOS runners meet
the macOS 12+ requirement and remove Windows ARM 32-bit targets from the build
matrix if present, and update test configs to set ASAN_OPTIONS to avoid leak
failures when AddressSanitizer is enabled; fix any failures and re-run tests
with go1.25.5 in staging before merging.
| google.golang.org/genproto v0.0.0-20251124214823-79d6a2a48846 // indirect | ||
| google.golang.org/genproto/googleapis/api v0.0.0-20251202230838-ff82c1b0f217 // indirect | ||
| google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 // indirect |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧩 Analysis chain
🏁 Script executed:
# First, check the exact content of src/frontend/go.mod at the mentioned lines
head -60 src/frontend/go.mod | tail -10Repository: devzero-inc/microservices-demo
Length of output: 570
🏁 Script executed:
# Also get full view of the genproto-related lines
rg "google.golang.org/genproto" src/frontend/go.mod -nRepository: devzero-inc/microservices-demo
Length of output: 337
🏁 Script executed:
# Check if checkoutservice and productcatalogservice exist and have go.mod files
find . -type f -name "go.mod" | grep -E "(checkoutservice|productcatalogservice)" | head -20Repository: devzero-inc/microservices-demo
Length of output: 137
🏁 Script executed:
rg "google.golang.org/genproto" src/checkoutservice/go.mod -nRepository: devzero-inc/microservices-demo
Length of output: 337
🏁 Script executed:
rg "google.golang.org/genproto" src/productcatalogservice/go.mod -nRepository: devzero-inc/microservices-demo
Length of output: 337
Genproto version mismatch persists across all three services; cross-service coordination required.
The version gap in lines 55–57 is confirmed:
- Line 55:
google.golang.org/genproto→v0.0.0-20251124214823(Nov 24, 2025) - Lines 56–57:
googleapis/apiandgoogleapis/rpc→v0.0.0-20251202230838(Dec 2, 2025)
This identical mismatch exists in all three services (checkoutservice, frontend, productcatalogservice). Using different versions of these related packages across services risks runtime conflicts when resolving protobuf definitions. This PR updates only frontend; a complete fix requires coordinated updates across all three services.
Either pin all three to the same genproto pseudo-version via coordinated go mod tidy runs across checkoutservice, frontend, and productcatalogservice, or verify this version split is intentional before merging.
🤖 Prompt for AI Agents
In @src/frontend/go.mod around lines 55-57, The genproto pseudo-version mismatch
across modules (google.golang.org/genproto,
google.golang.org/genproto/googleapis/api,
google.golang.org/genproto/googleapis/rpc) must be unified across all services
(checkoutservice, frontend, productcatalogservice); coordinate changes so all
three services pin the same pseudo-version, update each service's go.mod to the
chosen pseudo-version and run go mod tidy in each service (or use go get
<module>@<pseudo-version> then tidy) to regenerate consistent go.sum entries,
then commit the synchronized go.mod/go.sum updates in all three repos
simultaneously.
Bumps [urllib3](https://github.com/urllib3/urllib3) from 2.0.7 to 2.6.0. - [Release notes](https://github.com/urllib3/urllib3/releases) - [Changelog](https://github.com/urllib3/urllib3/blob/main/CHANGES.rst) - [Commits](urllib3/urllib3@2.0.7...2.6.0) --- updated-dependencies: - dependency-name: urllib3 dependency-version: 2.6.0 dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…3207) Bumps [idna](https://github.com/kjd/idna) from 3.4 to 3.7. - [Release notes](https://github.com/kjd/idna/releases) - [Changelog](https://github.com/kjd/idna/blob/master/HISTORY.rst) - [Commits](kjd/idna@v3.4...v3.7) --- updated-dependencies: - dependency-name: idna dependency-version: '3.7' dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
🤖 Fix all issues with AI Agents
In @.github/renovate.json5:
- Around line 8-10: The review message incorrectly includes a
version-requirement claim and scratchpad notes even though the
managerFilePatterns are valid; update the Renovate config comment by removing
the stray "version requirement" claim and any scratchpad notes while keeping the
existing managerFilePatterns array and its two regex entries (the
'/(^|/)requirements\\.txt$/' and '/\\.yaml$/') intact so the comment only
confirms the patterns are correct.
🧹 Nitpick comments (1)
src/currencyservice/Dockerfile (1)
28-28: Usenpm ci --omit=devfor reproducible builds.With
package-lock.jsonpresent, prefernpm ci --omit=devovernpm install --only=productionto ensure reproducible dependency installations across builds.🔎 Proposed fix
-RUN npm install --only=production +RUN npm ci --omit=dev
📜 Review details
Configuration used: defaults
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (4)
.github/renovate.json5src/currencyservice/Dockerfilesrc/paymentservice/Dockerfilesrc/recommendationservice/requirements.txt
🚧 Files skipped from review as they are similar to previous changes (1)
- src/paymentservice/Dockerfile
🔇 Additional comments (4)
src/recommendationservice/requirements.txt (2)
5-5: Security vulnerabilities from prior review have been resolved. ✅The three HIGH-severity CVEs flagged in the previous review have been patched:
- certifi upgraded to 2024.7.4 (from 2023.7.22; addresses CVE-2024-39689)
- urllib3 upgraded to 2.6.0 (from 2.0.7; addresses CVE-2025-66418 and CVE-2025-66471)
- idna upgraded to 3.7 (from 3.4; addresses CVE-2024-3651)
All pinned versions remain compatible with requests 2.32.5's declared dependency ranges.
Also applies to: 23-23, 94-94
1-2: Verify the intentionality of beta OpenTelemetry versions and the migration to uv.The lock file now uses beta versions of OpenTelemetry packages (0.60b1) and was regenerated using
uvinstead ofpip-compile. These changes align with the PR scope ("Node services migrated tracing to OpenTelemetry NodeSDK"), but need confirmation:
- The beta OTEL versions (distro, instrumentation, instrumentation-grpc, semantic-conventions) are not recommended for production in typical circumstances. Confirm these versions were intentionally selected and tested.
- The switch from
pip-compiletouvis a tool upgrade; verify that theuv pip compilecommand used to regenerate this file was the canonical build process and that no dependencies were inadvertently dropped or pinned differently.Also applies to: 35-35, 41-41, 45-45, 55-55
src/currencyservice/Dockerfile (1)
15-15: Builder Node upgraded, but runtime mismatch still unresolved.The builder stage Node version has been upgraded to 20.19.6. However, the critical issue flagged in the past review remains: the runtime stage (lines 30-32) still uses a mismatched Alpine base with an uncontrolled Node version installed via
apk, which can break native dependencies..github/renovate.json5 (1)
19-21: LGTM! Kubernetes manager migration is correct.The migration to
managerFilePatternswith the forward-slash-wrapped pattern is syntactically correct and will continue to match.yamlfiles throughout the repository (respecting theignorePathsexclusions).
| managerFilePatterns: [ | ||
| '/(^|/)requirements\\.txt$/', | ||
| ], |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧩 Analysis chain
🏁 Script executed:
find . -type f -name "renovate.json5" -o -name "renovate.json"Repository: devzero-inc/microservices-demo
Length of output: 98
🏁 Script executed:
cat -n .github/renovate.json5 | head -30Repository: devzero-inc/microservices-demo
Length of output: 776
🌐 Web query:
Renovate managerFilePatterns syntax and version requirements documentation
💡 Result:
Summary — managerFilePatterns (syntax) and versioning requirements
-
What managerFilePatterns accepts
- An array of regex (RE2 syntax) or glob strings, matched against repository file paths. Patterns in your config are additive to a manager’s defaults. Configure inside the specific manager object (e.g., "dockerfile": { "managerFilePatterns": [...] }). [1][2]
-
Syntax notes and examples
- Regex examples: "/^Dockerfile$/" or "/^config/.*\.yaml$/" (RE2-compatible).
- Glob examples: "*.yaml" or "renovate.json".
- managerFilePatterns is mergeable: you can add patterns without needing to repeat defaults. Use ignorePaths/includePaths to exclude specific files. [1][2]
-
Custom managers
- For customManagers (regex or jsonata) you must provide managerFilePatterns plus matchStrings/queries. Regex custom managers require named capture groups for currentValue and depName/packageName and datasource (or use templates). Example: "managerFilePatterns": ["/^Dockerfile$/"] with matchStrings like "ENV YARN_VERSION=(?.*?)\n". [3]
-
Versioning requirements / defaults
- Renovate chooses a versioning scheme per dependency; if not explicitly configured, Renovate defaults to the semver-coerced scheme. For custom managers you should explicitly set the versioning (or datasource) to ensure correct version resolution. Some managers (e.g., those that have no sensible filename convention) default to an empty managerFilePatterns array and must be given patterns to enable them. [1][3]
Sources
- Renovate configuration options — managerFilePatterns, regex vs glob, merge behavior. [1]
- Managers docs — file matching behavior and examples. [2]
- Custom managers (regex/jsonata) — required fields, capture groups, example usage. [3]
If you want, I can paste minimal example Renovate config snippets for common cases (Dockerfile, custom regex manager, JSONata).
Pattern syntax is correct for Renovate managerFilePatterns.
The configuration correctly uses forward-slash-wrapped regex patterns (/pattern/) matching Renovate's RE2 syntax. Both patterns are valid:
'/(^|/)requirements\\.txt$/'matchesrequirements.txtat root or in subdirectories'/\\.yaml$/'matches files ending in.yaml
Remove the version requirement claim and scratchpad notes from the original comment. The configuration syntax itself is sound and follows Renovate's documented format for managerFilePatterns.
🤖 Prompt for AI Agents
In @.github/renovate.json5 around lines 8 - 10, The review message incorrectly
includes a version-requirement claim and scratchpad notes even though the
managerFilePatterns are valid; update the Renovate config comment by removing
the stray "version requirement" claim and any scratchpad notes while keeping the
existing managerFilePatterns array and its two regex entries (the
'/(^|/)requirements\\.txt$/' and '/\\.yaml$/') intact so the comment only
confirms the patterns are correct.
…3210) Bumps [urllib3](https://github.com/urllib3/urllib3) from 2.0.7 to 2.6.3. - [Release notes](https://github.com/urllib3/urllib3/releases) - [Changelog](https://github.com/urllib3/urllib3/blob/main/CHANGES.rst) - [Commits](urllib3/urllib3@2.0.7...2.6.3) --- updated-dependencies: - dependency-name: urllib3 dependency-version: 2.6.3 dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…3211) Bumps [urllib3](https://github.com/urllib3/urllib3) from 2.6.0 to 2.6.3. - [Release notes](https://github.com/urllib3/urllib3/releases) - [Changelog](https://github.com/urllib3/urllib3/blob/main/CHANGES.rst) - [Commits](urllib3/urllib3@2.6.0...2.6.3) --- updated-dependencies: - dependency-name: urllib3 dependency-version: 2.6.3 dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [urllib3](https://github.com/urllib3/urllib3) from 2.6.0 to 2.6.3. - [Release notes](https://github.com/urllib3/urllib3/releases) - [Changelog](https://github.com/urllib3/urllib3/blob/main/CHANGES.rst) - [Commits](urllib3/urllib3@2.6.0...2.6.3) --- updated-dependencies: - dependency-name: urllib3 dependency-version: 2.6.3 dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 4
🤖 Fix all issues with AI agents
In @src/emailservice/requirements.txt:
- Around line 36-37: The requirements.txt pins idna==3.4 which is vulnerable
(GHSA-jjg7-2v4v-x38h); update the upstream spec in requirements.in to require
idna>=3.7 (or a specific safe version like 3.11) so the transitive `requests`
dependency uses a non-vulnerable idna, then regenerate requirements.txt using
your dependency tool (e.g., run "uv pip-compile" or your project's equivalent)
to produce an updated src/emailservice/requirements.txt that no longer pins
idna==3.4.
- Line 52: The requirements pin pre-release OpenTelemetry packages
(opentelemetry-distro==0.60b1, opentelemetry-instrumentation==0.60b1,
opentelemetry-instrumentation-grpc==0.60b1,
opentelemetry-semantic-conventions==0.60b1) alongside stable 1.39.1 core
packages, causing a version mismatch; fix by either aligning these pre-release
pins to the matching stable 1.39.1 equivalents (replace each 0.60b1 pin with the
corresponding 1.39.1 package) or, if the 0.60b1 pre-releases are required, add a
clear comment in requirements.in near those package lines documenting why 0.60b1
is necessary, what compatibility testing was performed with
opentelemetry-api/opentelemetry-sdk/opentelemetry-exporter/* (1.39.1), and
instructions for future maintainers on how to validate or upgrade them.
🧹 Nitpick comments (2)
src/emailservice/requirements.txt (2)
113-114: ✅ urllib3 2.6.3 upgrade is consistent with PR objectives.The update to
urllib3==2.6.3aligns with the documented dependency-maintenance commits in the PR (bumps for emailservice, loadgenerator, and recommendationservice). This appears complete for the emailservice. Verify that all three services have been updated to the same version by checking the other two services' requirements.To verify consistency of urllib3 versions across all three mentioned services:
#!/bin/bash # Check urllib3 versions in all three services echo "=== urllib3 versions across services ===" grep "^urllib3==" \ src/emailservice/requirements.txt \ src/loadgenerator/requirements.txt \ src/recommendationservice/requirements.txt 2>/dev/null
24-24: No proto regeneration required, but integration testing is recommended for major version upgrades.The emailservice code is compatible with the upgraded versions. The
.protofiles useproto3syntax and the generated code (demo_pb2.py,demo_pb2_grpc.py) already uses modern protobuf APIs (descriptor_pool,symbol_database) that are compatible with protobuf 6.33.2. The gRPC client and server code use standard APIs that work with grpcio 1.76.0.That said, when upgrading major versions in tightly coupled libraries:
protobuf→ 6.33.2grpcio→ 1.76.0,grpcio-health-checking→ 1.76.0,grpcio-status→ 1.76.0urllib3→ 2.6.3it's good practice to run integration tests to confirm no unexpected behavior occurs, even though no code changes are strictly required.
📜 Review details
Configuration used: defaults
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (3)
src/emailservice/requirements.txtsrc/loadgenerator/requirements.txtsrc/recommendationservice/requirements.txt
🧰 Additional context used
🪛 OSV Scanner (2.3.1)
src/emailservice/requirements.txt
[HIGH] 1-1: idna 3.4: undefined
(PYSEC-2024-60)
[HIGH] 1-1: idna 3.4: Internationalized Domain Names in Applications (IDNA) vulnerable to denial of service from specially crafted inputs to idna.encode
🔇 Additional comments (7)
src/recommendationservice/requirements.txt (3)
17-21: Verify gRPC major version compatibility (1.67 → 1.76).gRPC has been bumped from 1.67.1 to 1.76.0—a significant version jump. Ensure that:
- gRPC 1.76.0 is compatible with Python versions targeted by this service
grpcio-health-checking1.76.0 aligns with your service's health-check implementation- No breaking changes in gRPC API affect the recommendation service code
Consider running integration tests to confirm compatibility.
64-70: Verify protobuf 6.x API compatibility.Protobuf has been bumped to 6.33.2 (likely from 5.x), which is a major version jump. Confirm that:
- The recommendation service code is compatible with protobuf 6.x API
- proto-plus 1.27.0 works correctly with protobuf 6.33.2
- Generated protobuf code (if any) has been regenerated or is compatible with v6
77-78: Verify python-json-logger 4.0.0 API compatibility.python-json-logger was bumped from 2.0.7 to 4.0.0—a significant major version jump. Ensure:
- The logging setup/configuration in the recommendation service is compatible with v4.0.0
- No breaking API changes affect how JSON logs are generated or formatted
src/loadgenerator/requirements.txt (3)
83-86: urllib3 2.6.3 upgrade is justified—addresses critical decompression vulnerabilities.The bump to urllib3 2.6.3 is warranted. This release fixes critical security issues affecting streamed responses:
- CVE-2026-21441 (decompression-bomb safeguard bypass)
- CVE-2025-66471 and CVE-2025-66418 (compression/resource-exhaustion advisories)
urllib3 2.6.3 is compatible with requests 2.32.x and geventhttpclient (independent implementation). As a patch release within the 2.x series, it contains no breaking changes and preserves connection pooling and timeout behavior.
30-33: No action needed — gevent 25.9.1 is compatible with this codebase's usage pattern.loadgenerator has only indirect gevent usage through locust 2.43.0 and geventhttpclient 2.3.4, both of which support gevent 25.x. The locustfile.py contains no direct gevent API calls (no monkey-patching, Queue operations, subprocess calls, or pywsgi usage), so the breaking changes between gevent 24.x and 25.x are not relevant here. Locust's high-level concurrency abstractions (FastHttpUser, TaskSet) handle gevent integration internally.
Likely an incorrect or invalid review comment.
48-49: The upgrade from locust 2.32.2 to 2.43.0 is compatible. Official Locust changelog shows no breaking changes between these versions, and the loadgenerator code uses only stable core APIs (FastHttpUser, TaskSet, between, client.get/post) that remain fully supported in 2.43.0. No changes required.src/emailservice/requirements.txt (1)
77-82: Confirm proto-plus and packaging compatibility in emailservice code.The requirements introduce/update
packaging==25.0(dependency of opentelemetry-instrumentation) and pinproto-plus==1.27.0(used by google-api-core and google-cloud-trace). These should be compatible with the protobuf 6.33.2 upgrade, but verify that any code relying on these packages (especially proto-plus for message generation/serialization) functions correctly with the new versions.
| # opentelemetry-sdk | ||
| opentelemetry-distro==0.41b0 | ||
| # opentelemetry-semantic-conventions | ||
| opentelemetry-distro==0.60b1 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧩 Analysis chain
🏁 Script executed:
# First, examine the requirements.txt file to confirm the versions
echo "=== Checking src/emailservice/requirements.txt for OpenTelemetry versions ==="
if [ -f "src/emailservice/requirements.txt" ]; then
grep -n "opentelemetry" src/emailservice/requirements.txt | head -20
echo ""
echo "=== Full context around lines 52-72 ==="
sed -n '45,80p' src/emailservice/requirements.txt
else
echo "File not found"
fi
echo ""
echo "=== Checking if requirements.in exists ==="
find . -name "requirements.in" | head -5Repository: devzero-inc/microservices-demo
Length of output: 2387
🏁 Script executed:
# Check how OpenTelemetry is used in the emailservice code
echo "=== Searching for OpenTelemetry imports in emailservice ==="
fd -e py src/emailservice | xargs grep -l "opentelemetry" | head -10
echo ""
echo "=== Sample of OpenTelemetry usage ==="
fd -e py src/emailservice | xargs grep -h "import.*opentelemetry\|from.*opentelemetry" | sort -u | head -20Repository: devzero-inc/microservices-demo
Length of output: 929
🏁 Script executed:
# Query PyPI to check available versions and understand the versioning scheme
echo "=== Checking OpenTelemetry package version information ==="
python3 << 'EOF'
import json
import urllib.request
import urllib.error
packages = [
"opentelemetry-distro",
"opentelemetry-instrumentation",
"opentelemetry-instrumentation-grpc",
"opentelemetry-semantic-conventions"
]
for pkg in packages:
try:
url = f"https://pypi.org/pypi/{pkg}/json"
with urllib.request.urlopen(url) as response:
data = json.loads(response.read().decode())
versions = list(data['releases'].keys())
# Find latest stable and pre-release versions
stable_versions = [v for v in versions if not any(c in v for c in ['a', 'b', 'rc', 'dev'])]
prerelease_versions = [v for v in versions if any(c in v for c in ['a', 'b', 'rc', 'dev'])]
print(f"\n{pkg}:")
print(f" Latest stable: {sorted(stable_versions)[-1] if stable_versions else 'None'}")
print(f" Latest pre-release: {sorted(prerelease_versions)[-1] if prerelease_versions else 'None'}")
print(f" 0.60b1 available: {'0.60b1' in versions}")
except Exception as e:
print(f"\n{pkg}: Error - {e}")
EOFRepository: devzero-inc/microservices-demo
Length of output: 160
🏁 Script executed:
echo "=== Checking requirements.in (source file) ==="
cat src/emailservice/requirements.inRepository: devzero-inc/microservices-demo
Length of output: 393
🏁 Script executed:
echo "=== Finding Python files in emailservice ==="
fd -e py . src/emailservice
echo ""
echo "=== Searching for OpenTelemetry imports ==="
fd -e py . src/emailservice | xargs grep -l "opentelemetry" 2>/dev/null
echo ""
echo "=== OpenTelemetry usage patterns ==="
fd -e py . src/emailservice | xargs grep "opentelemetry" 2>/dev/null | head -30Repository: devzero-inc/microservices-demo
Length of output: 853
🏁 Script executed:
# Check if there are any comments or documentation about the pre-release versions
echo "=== Checking for comments about OpenTelemetry version choices ==="
rg -A 3 -B 3 "0\.60b1" src/emailservice/Repository: devzero-inc/microservices-demo
Length of output: 2142
The requirements explicitly pin opentelemetry-distro==0.60b1, opentelemetry-instrumentation==0.60b1, opentelemetry-instrumentation-grpc==0.60b1, and opentelemetry-semantic-conventions==0.60b1 (from requirements.in) alongside stable 1.39.1 releases for core packages (api, sdk, exporters, proto). This explicit pre-release pinning creates version inconsistency risk without clear justification.
Either upgrade all OpenTelemetry packages to their stable equivalents, or add comments to requirements.in explaining why the 0.60b1 pre-releases are necessary and how they've been validated for compatibility with the stable 1.39.1 core components.
Also applies to: 58-58, 62-62, 72-72
🤖 Prompt for AI Agents
In @src/emailservice/requirements.txt at line 52, The requirements pin
pre-release OpenTelemetry packages (opentelemetry-distro==0.60b1,
opentelemetry-instrumentation==0.60b1,
opentelemetry-instrumentation-grpc==0.60b1,
opentelemetry-semantic-conventions==0.60b1) alongside stable 1.39.1 core
packages, causing a version mismatch; fix by either aligning these pre-release
pins to the matching stable 1.39.1 equivalents (replace each 0.60b1 pin with the
corresponding 1.39.1 package) or, if the 0.60b1 pre-releases are required, add a
clear comment in requirements.in near those package lines documenting why 0.60b1
is necessary, what compatibility testing was performed with
opentelemetry-api/opentelemetry-sdk/opentelemetry-exporter/* (1.39.1), and
instructions for future maintainers on how to validate or upgrade them.
| # This file was autogenerated by uv via the following command: | ||
| # uv pip compile requirements.in -o requirements.txt |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧩 Analysis chain
🏁 Script executed:
# Find and examine the requirements files
fd -t f "requirements" src/loadgenerator/Repository: devzero-inc/microservices-demo
Length of output: 142
🏁 Script executed:
# Check the actual content of requirements.txt
cat src/loadgenerator/requirements.txtRepository: devzero-inc/microservices-demo
Length of output: 1911
🏁 Script executed:
# Look for requirements.in file
fd -t f "requirements.in" src/loadgenerator/Repository: devzero-inc/microservices-demo
Length of output: 107
🏁 Script executed:
# Check for test files related to loadgenerator or dependencies
fd -t f "test.*\.(py|txt)" src/loadgenerator/Repository: devzero-inc/microservices-demo
Length of output: 56
🏁 Script executed:
# Search for any documentation about dependency compatibility or testing
rg -l "gevent|locust|urllib3|compatibility|breaking.change" src/loadgenerator/ --type txt --type mdRepository: devzero-inc/microservices-demo
Length of output: 108
🏁 Script executed:
# Check PR or commit context if available
git log --oneline --all -n 20 -- src/loadgenerator/requirements.txtRepository: devzero-inc/microservices-demo
Length of output: 1484
🏁 Script executed:
# Check the requirements.in file to see the direct dependencies
cat src/loadgenerator/requirements.inRepository: devzero-inc/microservices-demo
Length of output: 102
🏁 Script executed:
# Look for test files in loadgenerator directory
find src/loadgenerator -type f -name "*.py" | head -20Repository: devzero-inc/microservices-demo
Length of output: 105
🏁 Script executed:
# Check if there are any test results or CI configuration
fd -t f "(test|ci|github)" src/loadgenerator/Repository: devzero-inc/microservices-demo
Length of output: 56
🏁 Script executed:
# Search for any documentation in the PR or repo about dependency updates
rg -l "dependency|upgrade|compatibility|breaking" . --type md --type txt -g "README*" -g "*CHANGELOG*" | head -10Repository: devzero-inc/microservices-demo
Length of output: 122
🏁 Script executed:
# Get the previous version of requirements.txt to compare
git show HEAD~1:src/loadgenerator/requirements.txt | head -50Repository: devzero-inc/microservices-demo
Length of output: 110
🏁 Script executed:
# Check the locustfile.py to see what features are being used
cat src/loadgenerator/locustfile.pyRepository: devzero-inc/microservices-demo
Length of output: 2535
🏁 Script executed:
# Look for CI/CD configuration (GitHub Actions, etc.)
fd -t f "\.yml|\.yaml" .github/ 2>/dev/null | head -10Repository: devzero-inc/microservices-demo
Length of output: 437
🏁 Script executed:
# Search for any documentation about testing in root README
cat README.md 2>/dev/null | grep -A 20 -i "test\|load\|locust" | head -40Repository: devzero-inc/microservices-demo
Length of output: 2012
🏁 Script executed:
# Check if TaskSet is still available in Locust 2.43.0 by looking at imports
web_search "Locust TaskSet removed deprecated 2.43.0"Repository: devzero-inc/microservices-demo
Length of output: 124
🏁 Script executed:
# Look at the CI workflow to see if loadgenerator is tested
cat .github/workflows/ci-main.yaml | grep -A 30 -i "loadgenerator\|locust"Repository: devzero-inc/microservices-demo
Length of output: 1194
🏁 Script executed:
# Check if there are any test scripts for loadgenerator
fd -t f "test.*\.py|.*test\.py" src/loadgenerator/Repository: devzero-inc/microservices-demo
Length of output: 56
🏁 Script executed:
# Search for any migration or compatibility documentation
rg -i "taskset|deprecated|breaking|compatibility" src/loadgenerator/ --type pyRepository: devzero-inc/microservices-demo
Length of output: 216
🌐 Web query:
Locust 2.43.0 TaskSet deprecated removed changelog
💡 Result:
Short answer: The 2.43.0 changelog does not remove the TaskSet class. TaskSet is still present in the 2.43.0 docs/source; only older hooks/variants were removed in prior releases (e.g. TaskSet.setup/teardown and TaskSequence/@seq_task were removed/replaced in earlier 2.x notes). [1][2]
Sources:
- Locust 2.43.0 task module (TaskSet present). [1]
- Changelog notes documenting earlier removals (TaskSet.setup/teardown, TaskSequence/@seq_task). [2]
🌐 Web query:
gevent 25.9.1 breaking changes from 24.11.1
💡 Result:
Summary of notable breaking or potentially breaking changes between gevent 24.11.1 and 25.9.1
-
libuv and platform minimums: bundled libuv upgraded (→ libuv 1.51) which raises minimum supported OS/toolchain versions (Linux kernel & glibc, macOS, Windows, FreeBSD) and changes musl wheel tag. This can break installs on older OSes. [1]
-
Queue API/behavior changes (may affect subclassing or code that relied on internals):
- Queue/JoinableQueue/SimpleQueue names and behaviors changed (JoinableQueue renamed to Queue, SimpleQueue made cooperative, Queue made more compatible with stdlib expectations). Internal implementation details differ — code depending on undocumented internals may break. Queue classes are now subscriptable. See the caution about relying on undocumented attributes. [1][2]
-
gevent.monkey: previously changed from a module to a package (public API preserved) — code importing internal names could be affected. (Change appeared in 24.10.1 but is relevant when upgrading from 24.11.1.) [1]
-
pywsgi security / HTTP 100-continue: fixes and guidance — do not use pywsgi in security-sensitive contexts; earlier fixes address HTTP 100-continue handling (may require upgrading to avoid request-smuggling issues). [1][3]
-
New features/fixes in 25.9.1 specifically:
- gevent tested on newer PyPy version.
- Bugfix: fixes a TypeError in the C extension when putting into a full SimpleQueue (affects code using C extension queue implementation). If you relied on PURE_PYTHON env workaround, that is noted. [2]
Notes/actions:
- Review any code that subclasses or introspects gevent.queue internals; prefer documented APIs (join, put/get, etc.). [1][2]
- Verify target OS/toolchain meet the raised minimums before upgrading (or use older gevent wheel/build). [1]
- If you relied on undocumented or private APIs, run your test suite and search the changelog for specific removed/renamed internals. [1]
Sources:
- gevent changelog (24.10.1 → 25.x releases, platform/libuv and queue changes). [1]
- 25.9.1 release notes (25.9.1 features and bugfixes). [2]
- Security/pywsgi/100-continue notes and vulnerability advisories. [3]
This PR upgrades gevent from 24.11.1→25.9.1 (major version) and Locust from 2.x to 2.43.0. While a CI/CD smoke test validates the loadgenerator runs, the gevent upgrade includes breaking changes that require explicit verification:
- OS/toolchain minimums: bundled libuv upgraded to 1.51, raising minimum requirements for Linux kernel, glibc, macOS, Windows, and FreeBSD
- Queue API changes: JoinableQueue renamed to Queue, SimpleQueue made cooperative—code depending on queue internals may be affected
Verify that the deployment environment meets these raised OS/toolchain minimums before merging.
| opentelemetry-distro==0.60b1 | ||
| # via -r requirements.in | ||
| opentelemetry-exporter-otlp-proto-common==1.20.0 | ||
| opentelemetry-exporter-otlp-proto-common==1.39.1 | ||
| # via opentelemetry-exporter-otlp-proto-grpc | ||
| opentelemetry-exporter-otlp-proto-grpc==1.20.0 | ||
| opentelemetry-exporter-otlp-proto-grpc==1.39.1 | ||
| # via -r requirements.in | ||
| opentelemetry-instrumentation==0.41b0 | ||
| opentelemetry-instrumentation==0.60b1 | ||
| # via | ||
| # opentelemetry-distro | ||
| # opentelemetry-instrumentation-grpc | ||
| opentelemetry-instrumentation-grpc==0.41b0 | ||
| opentelemetry-instrumentation-grpc==0.60b1 | ||
| # via -r requirements.in | ||
| opentelemetry-proto==1.20.0 | ||
| opentelemetry-proto==1.39.1 | ||
| # via | ||
| # opentelemetry-exporter-otlp-proto-common | ||
| # opentelemetry-exporter-otlp-proto-grpc | ||
| opentelemetry-sdk==1.20.0 | ||
| opentelemetry-sdk==1.39.1 | ||
| # via | ||
| # opentelemetry-distro | ||
| # opentelemetry-exporter-otlp-proto-grpc | ||
| # opentelemetry-instrumentation-grpc | ||
| opentelemetry-semantic-conventions==0.41b0 | ||
| opentelemetry-semantic-conventions==0.60b1 | ||
| # via | ||
| # opentelemetry-instrumentation | ||
| # opentelemetry-instrumentation-grpc | ||
| # opentelemetry-sdk |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧩 Analysis chain
🌐 Web query:
OpenTelemetry 0.60b1 1.39.1 compatibility released together matching pair
💡 Result:
Short answer: I can't find any official release that ships a paired "0.60b1 ↔ 1.39.1" OpenTelemetry set released together. The collector's 1.39.x series is published separately (see v1.39.0/v0.133.0 release), and semantic-conventions 0.60b1 appears as a separate package/release; there is no matching-pair announcement showing those two released together. [1][2][3]
Sources:
- OpenTelemetry Collector releases (v1.39.0 / v0.133.0). [1]
- opentelemetry_semantic_conventions package listing showing 0.60b1. [2]
- OpenTelemetry compatibility documentation. [3]
If you want, I can search specific repos (SDK, semantic-conventions, collector) for exact tags and release dates and produce a timeline.
🌐 Web query:
OpenTelemetry SDK versioning strategy beta stable versions compatibility
💡 Result:
Summary — OpenTelemetry SDK versioning & beta vs stable compatibility
-
Policy: OpenTelemetry clients follow Semantic Versioning (SemVer) and a signal-by-signal lifecycle: development (alpha/beta), stable, deprecated, removed. Stable API and SDK packages must remain backwards‑compatible within the same major version; breaking changes require a major version bump. [1]
-
Beta/unstable signals: signals or semantic-convention groups may be marked development/alpha/beta and versioned separately while unstable. Experimental/unstable packages may keep 0.x numbering until promoted; when a signal becomes stable it must align with the stable package-versioning rules. Unstable packages may change incompatibly. [1][2]
-
Compatibility guarantees:
- API: once stable, API calls must continue to compile and work for all future minor releases of the same major version (ABI guarantees where applicable). Major versions are supported for minimum LTS windows (API: ~3 years after next major). [1]
- SDK: public SDK surfaces must remain backwards compatible for the same major version; SDK support timelines are shorter (minimum ~1 year after next major). [1]
- Contrib/Instrumentations: should remain compatible but may lag; they may break if a downstream dependency breaks. Instrumentation authors are encouraged to depend on the API major (accept future minors) to avoid conflicts. [1][3]
-
Practical upgrade guidance:
- It is always safe to upgrade to latest minor of a given major. Depend on the current API major (allow future minors) to avoid version conflicts. When upgrading from unstable/beta to stable, consult the language-specific migration notes (many languages publish migration guides; e.g., otel-js SDK 2.x migration). [3][4]
If you want, I can pull the language-specific VERSIONING.md for a particular SDK (Java, Python, JS) and summarise exact rules and migration notes.
The requirements mix beta versions (0.60b1) with stable versions (1.39.1) across OpenTelemetry packages:
- Beta:
opentelemetry-distro(0.60b1),opentelemetry-instrumentation(0.60b1),opentelemetry-semantic-conventions(0.60b1) - Stable:
opentelemetry-api(1.39.1),opentelemetry-sdk(1.39.1),opentelemetry-exporter-otlp-proto-grpc(1.39.1)
According to OpenTelemetry's versioning policy, unstable/beta packages may change incompatibly and are versioned separately from stable releases. Ensure this mix is intentional and tested, or upgrade/downgrade to a consistent release channel.
Bumps [idna](https://github.com/kjd/idna) from 3.4 to 3.7. - [Release notes](https://github.com/kjd/idna/releases) - [Changelog](https://github.com/kjd/idna/blob/master/HISTORY.rst) - [Commits](kjd/idna@v3.4...v3.7) --- updated-dependencies: - dependency-name: idna dependency-version: '3.7' dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…3214) Bumps [werkzeug](https://github.com/pallets/werkzeug) from 3.1.4 to 3.1.5. - [Release notes](https://github.com/pallets/werkzeug/releases) - [Changelog](https://github.com/pallets/werkzeug/blob/main/CHANGES.rst) - [Commits](pallets/werkzeug@3.1.4...3.1.5) --- updated-dependencies: - dependency-name: werkzeug dependency-version: 3.1.5 dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [werkzeug](https://github.com/pallets/werkzeug) from 3.1.4 to 3.1.5. - [Release notes](https://github.com/pallets/werkzeug/releases) - [Changelog](https://github.com/pallets/werkzeug/blob/main/CHANGES.rst) - [Commits](pallets/werkzeug@3.1.4...3.1.5) --- updated-dependencies: - dependency-name: werkzeug dependency-version: 3.1.5 dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
🤖 Fix all issues with AI agents
In @src/shoppingassistantservice/requirements.txt:
- Line 242: Update the pinned urllib3 version in requirements.txt from
"urllib3==2.6.0" to "urllib3==2.6.3" or a newer secure release: locate the line
containing urllib3==2.6.0 and change the version specifier to >=2.6.3 (e.g.,
urllib3==2.6.3 or a newer exact/pinned version used by your project) then run
dependency install/lock steps and tests to ensure compatibility.
🧹 Nitpick comments (1)
helm-chart/templates/loadgenerator.yaml (1)
113-116: Consider makingRATEconfigurable via values.yaml.Both
USERSandRATEare hardcoded. For flexibility across different environments (e.g., staging vs. production load testing), consider templating these from.Values.loadGenerator:♻️ Suggested refactor
- name: USERS - value: "10" + value: {{ .Values.loadGenerator.users | default "10" | quote }} - name: RATE - value: "1" + value: {{ .Values.loadGenerator.rate | default "1" | quote }}Then add defaults in
values.yaml:loadGenerator: users: "10" rate: "1"
📜 Review details
Configuration used: defaults
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (7)
helm-chart/templates/loadgenerator.yamlhelm-chart/templates/opentelemetry-collector.yamlkustomize/components/google-cloud-operations/otel-collector.yamlsrc/emailservice/requirements.txtsrc/loadgenerator/requirements.txtsrc/shoppingassistantservice/Dockerfilesrc/shoppingassistantservice/requirements.txt
🚧 Files skipped from review as they are similar to previous changes (2)
- src/emailservice/requirements.txt
- kustomize/components/google-cloud-operations/otel-collector.yaml
🧰 Additional context used
🪛 OSV Scanner (2.3.1)
src/shoppingassistantservice/requirements.txt
[HIGH] 1-1: urllib3 2.6.0: Decompression-bomb safeguards bypassed when following HTTP redirects (streaming API)
🔇 Additional comments (10)
helm-chart/templates/loadgenerator.yaml (2)
56-66: LGTM! Correct nesting of seccompProfile under securityContext.The repositioned
{{- end }}tag properly ensuresseccompProfileis rendered only whensecurityContext.enableis true, which aligns with the Kubernetes PodSecurityContext structure.
95-95: LGTM! Busybox image digest updated.The digest pin ensures the image is reproducible. The
latesttag is effectively ignored since the SHA256 digest takes precedence.src/loadgenerator/requirements.txt (1)
1-100: All package versions verified on PyPI with no flagged vulnerabilities.Verification confirms that all dependency versions exist on PyPI, including those with post-cutoff release dates and unusually high version numbers (e.g.,
faker==40.1.0,gevent==25.9.1,pyzmq==27.1.0, andcertifi==2025.8.3using calendar versioning). Since this is an autogenerated lockfile fromuv pip compile, version coordination is handled automatically, and pinned versions ensure reproducibility across environments.src/shoppingassistantservice/requirements.txt (1)
68-69: No action required. The code is already compatible with the specified dependency versions.The codebase uses standard LangChain 1.x patterns (langchain_core imports,
.invoke()method calls, correct class instantiation) and the google-genai library is accessed through the langchain_google_genai wrapper (v4.1.2), which properly handles the underlying google-genai==1.56.0 dependency. All observed API usages—including ChatGoogleGenerativeAI instantiation, AlloyDBEngine and AlloyDBVectorStore setup, and HumanMessage usage—are compatible with the specified versions.src/shoppingassistantservice/Dockerfile (3)
19-25: LGTM!Build stage correctly installs only the necessary build dependency (g++) and pip-installs requirements. Removing wget simplifies the build.
15-15: > Likely an incorrect or invalid review comment.
35-35: No action required—CLI scripts from installed packages are not used by this service.The Dockerfile only copies
/usr/local/lib/python3.14/from the builder, which means CLI scripts installed by packages like Flask and Click to/usr/local/bin/are not available in the final image. However, the application uses Flask as a library only (viaapp.run()) and does not invoke any package CLI tools, so this is not a concern.helm-chart/templates/opentelemetry-collector.yaml (3)
50-60: LGTM! Security context is now conditionally rendered.The change correctly wraps the entire
securityContextblock (including the nestedseccompProfile) under the.Values.securityContext.enableflag. This aligns with the pattern applied across other Helm templates in this PR.
74-74: Busybox image digest updated.The init container image digest has been updated. Using
latesttag with a pinned digest provides reproducibility while still referencing the latest tag.
99-99: No breaking changes concern for this configuration at v0.142.0.This is a new OpenTelemetry Collector deployment (not an upgrade). The configuration uses only core stable components (OTLP gRPC receiver) and the maintained googlecloud exporter, neither of which have breaking changes in v0.142.0. The minimal configuration avoids all known breaking change patterns (queue/batch config, HTTP client cookies, gRPC endpoint validation issues).
Bumps [urllib3](https://github.com/urllib3/urllib3) from 2.6.0 to 2.6.3. - [Release notes](https://github.com/urllib3/urllib3/releases) - [Changelog](https://github.com/urllib3/urllib3/blob/main/CHANGES.rst) - [Commits](urllib3/urllib3@2.6.0...2.6.3) --- updated-dependencies: - dependency-name: urllib3 dependency-version: 2.6.3 dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [pyasn1](https://github.com/pyasn1/pyasn1) from 0.6.1 to 0.6.2. - [Release notes](https://github.com/pyasn1/pyasn1/releases) - [Changelog](https://github.com/pyasn1/pyasn1/blob/main/CHANGES.rst) - [Commits](pyasn1/pyasn1@v0.6.1...v0.6.2) --- updated-dependencies: - dependency-name: pyasn1 dependency-version: 0.6.2 dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Background
Fixes
Change Summary
Additional Notes
Testing Procedure
Related PRs or Issues
Summary by CodeRabbit
New Features
Documentation
Chores
Resource Defaults
Helm / Kubernetes
Observability
✏️ Tip: You can customize this high-level summary in your review settings.