diff --git a/README.md b/README.md index 64d34bd..b91381e 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ AWS distribution. Use Go 1.27.3 or newer for the current source. Lambda binaries target `provided.al2023`, with Linux `amd64` (`x86_64`) or `arm64`. Keep CGO disabled. -The latest stable version is [v1.2.0](https://github.com/rambow-cloud/powertools-lambda-go/releases/tag/v1.2.0). +The latest stable version is [v1.3.0](https://github.com/rambow-cloud/powertools-lambda-go/releases/tag/v1.3.0). This README follows `main`; the installation and minimal example below use that published version. See [version policy](docs/VERSION_POLICY.md) for released APIs versus development changes. @@ -28,7 +28,7 @@ From a new application directory in PowerShell: ```powershell $env:CGO_ENABLED = '0' go mod init example.com/hello -go get github.com/rambow-cloud/powertools-lambda-go/logger@v1.2.0 github.com/aws/aws-lambda-go@v1.55.0 +go get github.com/rambow-cloud/powertools-lambda-go/logger@v1.3.0 github.com/aws/aws-lambda-go@v1.55.0 ``` Each utility has its own module. Install the modules you use; see @@ -112,7 +112,7 @@ The [quickstart](docs/GETTING_STARTED.md) shows repository packaging and ## Documentation Read the [documentation site](https://powertools-lambda-go.rambow.cloud/) or -[Go package documentation](https://pkg.go.dev/github.com/rambow-cloud/powertools-lambda-go/logger@v1.2.0). +[Go package documentation](https://pkg.go.dev/github.com/rambow-cloud/powertools-lambda-go/logger@v1.3.0). | Area | Guides | | --- | --- | diff --git a/docs/APPSYNC_EVENTS.md b/docs/APPSYNC_EVENTS.md index 47ab520..4fda062 100644 --- a/docs/APPSYNC_EVENTS.md +++ b/docs/APPSYNC_EVENTS.md @@ -8,10 +8,10 @@ Handle AppSync Events publish and subscribe requests using channel routes. ## Install -Use Go 1.27 or newer: +Use Go 1.27.3 or newer: ```sh -CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/eventhandler/appsyncevents@v1.2.0 +CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/eventhandler/appsyncevents@v1.3.0 CGO_ENABLED=0 go get github.com/aws/aws-lambda-go@v1.55.0 ``` diff --git a/docs/APPSYNC_GRAPHQL.md b/docs/APPSYNC_GRAPHQL.md index 0b09f1c..4ba3204 100644 --- a/docs/APPSYNC_GRAPHQL.md +++ b/docs/APPSYNC_GRAPHQL.md @@ -8,10 +8,10 @@ Route AppSync GraphQL resolver events to Go query, mutation and batch handlers. ## Install -Use Go 1.27 or newer: +Use Go 1.27.3 or newer: ```sh -CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/eventhandler/appsyncgraphql@v1.2.0 +CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/eventhandler/appsyncgraphql@v1.3.0 CGO_ENABLED=0 go get github.com/aws/aws-lambda-go@v1.55.0 ``` diff --git a/docs/BATCH.md b/docs/BATCH.md index 479dbe1..323830b 100644 --- a/docs/BATCH.md +++ b/docs/BATCH.md @@ -8,11 +8,11 @@ Process SQS, Kinesis and DynamoDB Streams records individually and return the ID ## Install -Use Go 1.27 or newer: +Use Go 1.27.3 or newer: ```sh -CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/batch@v1.2.0 -CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/logger@v1.2.0 +CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/batch@v1.3.0 +CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/logger@v1.3.0 CGO_ENABLED=0 go get github.com/aws/aws-lambda-go@v1.55.0 ``` diff --git a/docs/BEDROCK.md b/docs/BEDROCK.md index e9e9e22..21f0797 100644 --- a/docs/BEDROCK.md +++ b/docs/BEDROCK.md @@ -8,10 +8,10 @@ Implement functions for a Bedrock Agent Action Group and return tool results to ## Install -Use Go 1.27 or newer: +Use Go 1.27.3 or newer: ```sh -CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/eventhandler/bedrock@v1.2.0 +CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/eventhandler/bedrock@v1.3.0 CGO_ENABLED=0 go get github.com/aws/aws-lambda-go@v1.55.0 ``` diff --git a/docs/CHECKLIST.md b/docs/CHECKLIST.md index 3629fd7..c4847b3 100644 --- a/docs/CHECKLIST.md +++ b/docs/CHECKLIST.md @@ -403,6 +403,10 @@ Race-detector execution is intentionally excluded because CGO must remain disabl - [x] DOC-DISCOVERY-LOCAL: Add an all-crawler robots policy, generated canonical llms.txt index, individual user-guide descriptions, social metadata and WebSite/TechArticle JSON-LD with homepage source-repository identity. Keep static article content, canonical sitemap coverage, independent community attribution and OpenTelemetry/X-Ray migration boundaries. Verify all 87 guides and 18 crawler policies, six discovery regression guards, locked dependencies, navigation, eighteen utility-guide checks, strict site build and documentation-workflow actionlint with CGO disabled. Read-only Cloudflare inspection finds AI blocking, Bot Fight Mode and robots preference synchronization disabled with no custom firewall ruleset; no security configuration mutation is needed. Publication, live browser acceptance, search-console ownership/submission and actual search/AI indexing remain separate owner checks. See [discovery maintenance](DOCUMENTATION.md#search-engines-and-ai-discovery) (2026-10-10). +- [x] SECURITY-255-V130: Require Go 1.27.3, select x/crypto v0.58.0 with patched HTTP/2/gRPC dependencies, and move Avro to the maintained codec with integer-boundary fixes and allocation caps. Verify all 31 packaged modules, 28 isolated consumers and 62 production-package scans for Linux amd64/arm64 on release commit 2df7e85986d5, with CGO disabled. Official npm audit reports zero advisories for 103 dependency entries after protobufjs v7.6.6; pip-audit reports no advisories for eleven locked documentation packages. Preserve failed-scanner diagnostics, strict root dependency isolation and actual Avro runtime-closure checks. Record [dated security acceptance](SECURITY_ACCEPTANCE_V1_3_0.json), including scanner/database identity. This does not assess unused upstream tool packages; frozen X-Ray source is patched but excluded from publication. See #255, #256, #259 and #260; no race or AWS cloud tests (2026-10-23). + +- [x] RELEASE-257-V130: Publish one stable Latest v1.3.0 Release after reviewed preparation PR #261 and exact PR/main Full regression. Verify all 27 maintained tags at commit 2df7e85986d5 and all 27 fresh public proxy/checksum consumers, with GOWORK off, CGO disabled and no replacements. Publication run 39890005244 completed without a recovery or rewritten tag. Independently run public Logger v1.3.0 to verify Preview APIs, error identity, attached stacks, compact single-line JSON and opt-out; public Tracer selects x/crypto v0.58.0. Update current installation pins and Preview availability, retaining historical records; 26 guide contracts, strict site build and discovery for 122 guides/19 crawler policies pass. Record [publication acceptance](RELEASE_ACCEPTANCE_V1_3_0.json). The root internal changed-file disclosure omission remains the separate non-blocking P3 #262; source packaging is intact. Lambda runtime execution covers amd64, while arm64 is cross-built/scanned. Browser/pkg.go.dev presentation is an owner check; no new AWS cloud tests (2026-10-23). + - [x] RELEASE-229-V120: Publish stable v1.2.0 from exact merged commit 6d0ee9e0e454 after preparation PR #230 and main Full regression pass. Verify all 27 maintained module tags at that commit, one stable Latest project Release and all 27 fresh public proxy/checksum consumers with CGO disabled, GOWORK off and no replacements. Resume the same reviewed plan after a GitHub HTTP 502 without changing existing tags. Record [publication acceptance](RELEASE_ACCEPTANCE_V1_2_0.json), update stable installation and compiler availability, and build the exact README application against public Logger v1.2.0 for Linux arm64. Locked dependencies, navigation, eighteen utility guides, strict site build and discovery checks passed. Preserve historical records and the frozen X-Ray exclusion. Browser/pkg.go.dev presentation and live AWS testing remain separate checks. See issues #229 and #231 (2026-10-13). - [x] RELEASE-153-V110: Publish stable v1.1.0 from exact merged commit caac78d27493 after preparation PR #154 and main Full regression pass. Verify all 27 maintained module tags at the same commit, one stable Latest project Release and all 27 fresh public proxy/checksum consumers with CGO disabled, GOWORK off and no replacements. Record [publication acceptance](RELEASE_ACCEPTANCE_V1_1_0.json), update stable installation pins and build the exact README application against public Logger v1.1.0 for Linux arm64. Preserve historical acceptance and the frozen X-Ray exclusion. Browser/pkg.go.dev presentation and live AWS testing remain separate checks. See issues #153 and #155 (2026-10-10). diff --git a/docs/COMMONS.md b/docs/COMMONS.md index faf82c3..09bf6c0 100644 --- a/docs/COMMONS.md +++ b/docs/COMMONS.md @@ -8,11 +8,11 @@ Shared helpers for configuration, encoding, JSON values and caches. Most applica ## Install -Use Go 1.27 or newer: +Use Go 1.27.3 or newer: ```sh -CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go@v1.2.0 -CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/logger@v1.2.0 +CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go@v1.3.0 +CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/logger@v1.3.0 ``` ## Decode Base64 text diff --git a/docs/COMPATIBILITY.md b/docs/COMPATIBILITY.md index caf993f..8c6bbf9 100644 --- a/docs/COMPATIBILITY.md +++ b/docs/COMPATIBILITY.md @@ -4,7 +4,7 @@ This project is an independent community **Go port of Powertools for AWS Lambda ## Supported applications -- Go 1.27 or newer, with `CGO_ENABLED=0`. +- Go 1.27.3 or newer, with `CGO_ENABLED=0`. - Native Lambda binaries for `provided.al2023` on Linux amd64 or arm64. - Independent modules: install only the utilities your application needs. - A unified release version for maintained modules; see [module installation](MODULES.md). diff --git a/docs/DATAMASKING.md b/docs/DATAMASKING.md index 42e8edc..605afc8 100644 --- a/docs/DATAMASKING.md +++ b/docs/DATAMASKING.md @@ -8,11 +8,11 @@ Remove sensitive values before logging or returning a payload. Mask selected fie ## Install -Use Go 1.27 or newer: +Use Go 1.27.3 or newer: ```sh -CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/datamasking@v1.2.0 -CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/logger@v1.2.0 +CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/datamasking@v1.3.0 +CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/logger@v1.3.0 ``` ## Mask a customer field diff --git a/docs/DATAMASKING_KMS.md b/docs/DATAMASKING_KMS.md index b226337..28e4c3c 100644 --- a/docs/DATAMASKING_KMS.md +++ b/docs/DATAMASKING_KMS.md @@ -8,7 +8,7 @@ Use the optional KMS provider to encrypt and decrypt fields with the AWS Encrypt ## Encrypt and restore a customer secret -Install `datamasking/kms@v1.2.0`. The fragment assumes `ctx`, a payload, and imports for `datamasking`, `os` and `maskkms` (`datamasking/kms`). It calls KMS: set `KMS_KEY_ARN` to a full key ARN, configure the AWS SDK, and grant the required data-key/decrypt permissions. +Install `datamasking/kms@v1.3.0`. The fragment assumes `ctx`, a payload, and imports for `datamasking`, `os` and `maskkms` (`datamasking/kms`). It calls KMS: set `KMS_KEY_ARN` to a full key ARN, configure the AWS SDK, and grant the required data-key/decrypt permissions. **Input** diff --git a/docs/GETTING_STARTED.md b/docs/GETTING_STARTED.md index b775ac0..4caa5cf 100644 --- a/docs/GETTING_STARTED.md +++ b/docs/GETTING_STARTED.md @@ -9,11 +9,11 @@ Start with structured logs. This handler accepts a name, returns a greeting and ## Install -Use Go 1.27 or newer and initialize your application: +Use Go 1.27.3 or newer and initialize your application: ```sh go mod init example.com/hello -CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/logger@v1.2.0 github.com/aws/aws-lambda-go@v1.55.0 +CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/logger@v1.3.0 github.com/aws/aws-lambda-go@v1.55.0 ``` ## Write the handler diff --git a/docs/HTTP.md b/docs/HTTP.md index 8a1ca83..e394fab 100644 --- a/docs/HTTP.md +++ b/docs/HTTP.md @@ -8,11 +8,11 @@ Route API Gateway, ALB and Lambda Function URL requests with path parameters, JS ## Install -Use Go 1.27 or newer: +Use Go 1.27.3 or newer: ```sh -CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/eventhandler/http@v1.2.0 -CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/logger@v1.2.0 +CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/eventhandler/http@v1.3.0 +CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/logger@v1.3.0 CGO_ENABLED=0 go get github.com/aws/aws-lambda-go@v1.55.0 ``` diff --git a/docs/HTTP_MIDDLEWARE.md b/docs/HTTP_MIDDLEWARE.md index dada797..570262b 100644 --- a/docs/HTTP_MIDDLEWARE.md +++ b/docs/HTTP_MIDDLEWARE.md @@ -9,7 +9,7 @@ Add cross-origin response headers and compress large HTTP responses. These middl ## Install ```sh -CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/eventhandler/http@v1.2.0 +CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/eventhandler/http@v1.3.0 ``` Both examples include their imports and belong to the same `package main` as your diff --git a/docs/HTTP_OBSERVABILITY.md b/docs/HTTP_OBSERVABILITY.md index ca22bef..75f217f 100644 --- a/docs/HTTP_OBSERVABILITY.md +++ b/docs/HTTP_OBSERVABILITY.md @@ -11,7 +11,7 @@ Add route metrics and OpenTelemetry spans to an existing HTTP router. Each integ Install the optional integration: ```sh -CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/eventhandler/http/metrics@v1.2.0 +CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/eventhandler/http/metrics@v1.3.0 ``` Save the following as `http_metrics.go` in your HTTP application. In the routing @@ -62,7 +62,7 @@ This is an excerpt of the emitted EMF document. It also contains the namespace, Install the optional integration: ```sh -CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/eventhandler/http/tracer@v1.2.0 +CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/eventhandler/http/tracer@v1.3.0 ``` Save this as `http_tracing.go`. Create `tr` once as shown in the diff --git a/docs/HTTP_STREAMING.md b/docs/HTTP_STREAMING.md index 1d490c8..3bdfed2 100644 --- a/docs/HTTP_STREAMING.md +++ b/docs/HTTP_STREAMING.md @@ -8,11 +8,11 @@ Return a reader and send its content through the native Go Lambda streaming adap ## Install -Use Go 1.27 or newer: +Use Go 1.27.3 or newer: ```sh -CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/eventhandler/http@v1.2.0 -CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/logger@v1.2.0 +CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/eventhandler/http@v1.3.0 +CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/logger@v1.3.0 CGO_ENABLED=0 go get github.com/aws/aws-lambda-go@v1.55.0 ``` diff --git a/docs/IDEMPOTENCY.md b/docs/IDEMPOTENCY.md index c3fc253..e4f7073 100644 --- a/docs/IDEMPOTENCY.md +++ b/docs/IDEMPOTENCY.md @@ -8,10 +8,10 @@ Return a stored result for repeated requests, so a retried Lambda invocation doe ## Install -Use Go 1.27 or newer: +Use Go 1.27.3 or newer: ```sh -CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/idempotency@v1.2.0 +CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/idempotency@v1.3.0 CGO_ENABLED=0 go get github.com/aws/aws-lambda-go@v1.55.0 CGO_ENABLED=0 go get github.com/aws/aws-sdk-go-v2/config@v1.33.4 ``` diff --git a/docs/IDEMPOTENCY_CACHE.md b/docs/IDEMPOTENCY_CACHE.md index 37ccb3f..1c2cc2d 100644 --- a/docs/IDEMPOTENCY_CACHE.md +++ b/docs/IDEMPOTENCY_CACHE.md @@ -8,7 +8,7 @@ Use an existing Redis or Valkey deployment as the persistence store for [Idempot ## Replay a completed operation -Install `idempotency/cache@v1.2.0` and import the adapter as `cache`, the Idempotency core, and `github.com/redis/go-redis/v9` as `redis`. This example requires a reachable Redis-compatible server; configure its TLS and credentials for your deployment. +Install `idempotency/cache@v1.3.0` and import the adapter as `cache`, the Idempotency core, and `github.com/redis/go-redis/v9` as `redis`. This example requires a reachable Redis-compatible server; configure its TLS and credentials for your deployment. **Input** @@ -41,7 +41,7 @@ for range 2 { } ``` -Also install `logger@v1.2.0` and import it as `logger`. Run this inside a function returning `error`, with a context carrying the invocation deadline. The output below shows three log excerpts, omitting standard Logger fields. +Also install `logger@v1.3.0` and import it as `logger`. Run this inside a function returning `error`, with a context carrying the invocation deadline. The output below shows three log excerpts, omitting standard Logger fields. **Output** diff --git a/docs/JMESPATH.md b/docs/JMESPATH.md index 6805d17..1c428f8 100644 --- a/docs/JMESPATH.md +++ b/docs/JMESPATH.md @@ -8,11 +8,11 @@ Select and transform values in JSON documents, including JSON/Base64 data inside ## Install -Use Go 1.27 or newer: +Use Go 1.27.3 or newer: ```sh -CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/jmespath@v1.2.0 -CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/logger@v1.2.0 +CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/jmespath@v1.3.0 +CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/logger@v1.3.0 ``` ## Select paid order IDs diff --git a/docs/JSON_SCHEMA_VALIDATION.md b/docs/JSON_SCHEMA_VALIDATION.md index fca3b69..4716f79 100644 --- a/docs/JSON_SCHEMA_VALIDATION.md +++ b/docs/JSON_SCHEMA_VALIDATION.md @@ -8,11 +8,11 @@ Validate payloads against JSON Schema documents. Check input before your busines ## Install -Use Go 1.27 or newer: +Use Go 1.27.3 or newer: ```sh -CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/validation@v1.2.0 -CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/logger@v1.2.0 +CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/validation@v1.3.0 +CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/logger@v1.3.0 ``` ## Validate an order diff --git a/docs/KAFKA.md b/docs/KAFKA.md index f7b39e6..38060a6 100644 --- a/docs/KAFKA.md +++ b/docs/KAFKA.md @@ -8,11 +8,11 @@ Decode key, value and header data in Lambda Kafka events, with optional Avro and ## Install -Use Go 1.27 or newer: +Use Go 1.27.3 or newer: ```sh -CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/kafka@v1.2.0 -CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/logger@v1.2.0 +CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/kafka@v1.3.0 +CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/logger@v1.3.0 CGO_ENABLED=0 go get github.com/aws/aws-lambda-go@v1.55.0 ``` diff --git a/docs/KAFKA_BINARY.md b/docs/KAFKA_BINARY.md index 5090786..d76c390 100644 --- a/docs/KAFKA_BINARY.md +++ b/docs/KAFKA_BINARY.md @@ -8,7 +8,7 @@ Decode binary values with optional adapters. Your application supplies the schem ## Decode an Avro order -Install `kafka/avro@v1.2.0` and `logger@v1.2.0`. Import the adapter as `kafkaavro` and Powertools Logger as `logger`. The Base64 value below encodes a record with one string field. Each snippet runs independently in a function returning `error`, with `ctx` available. +Install `kafka/avro@v1.3.0` and `logger@v1.3.0`. Import the adapter as `kafkaavro` and Powertools Logger as `logger`. The Base64 value below encodes a record with one string field. Each snippet runs independently in a function returning `error`, with `ctx` available. **Input** @@ -47,7 +47,7 @@ consumer := kafka.New(kafka.Config{Value: kafkaavro.New(schema)}) ## Decode a Protobuf message -Install `kafka/protobuf@v1.2.0` and import it as `kafkaproto`. This example uses the well-known `StringValue` descriptor from `wrapperspb` and `protojson` from the official Go Protobuf library. Import `encoding/json/jsontext` to attach the Protobuf JSON value to a structured log. +Install `kafka/protobuf@v1.3.0` and import it as `kafkaproto`. This example uses the well-known `StringValue` descriptor from `wrapperspb` and `protojson` from the official Go Protobuf library. Import `encoding/json/jsontext` to attach the Protobuf JSON value to a structured log. ```go appLog := logger.New(logger.WithServiceName("orders")) diff --git a/docs/LOGGER.md b/docs/LOGGER.md index 6fb28af..301aa15 100644 --- a/docs/LOGGER.md +++ b/docs/LOGGER.md @@ -9,10 +9,10 @@ Write JSON logs with searchable fields, service names and Lambda request context ## Install -Use Go 1.27 or newer: +Use Go 1.27.3 or newer: ```sh -CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/logger@v1.2.0 +CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/logger@v1.3.0 ``` ## Write your first log @@ -89,24 +89,25 @@ if err := appLog.Error("Payment failed", paymentErr); err != nil { The record has `level: "ERROR"`, `message: "Payment failed"` and `error.message: "card declined"`. It is written to stderr. Logging it does not return the business error from your handler. -This example targets stable **v1.2.0**, which does not automatically collect error stacks or log handler panics. The following Preview has different defaults. +In **v1.3.0**, error logs also include a stack by default, as shown in the Preview below. Historical v1.2.0 does not automatically collect error stacks or log handler panics. ## Error stacks and panic logging (Preview) -> This Preview is not included in v1.2.0. +> This Preview is included in v1.3.0 and main. It is not included in v1.2.0. -Install it explicitly in your application: +Install the published Preview in your application: ```sh -CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/logger@main +CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/logger@v1.3.0 ``` -Omitting a version does not select `main`. Go resolves a branch to a pseudo-version; +To use development source instead, select `logger@main`. Omitting a version does +not select `main`. Go resolves a branch to a pseudo-version; use `@` instead of `@main` to pin a preview. See [Go version queries](https://go.dev/ref/mod#version-queries). If a module proxy still resolves `main` to an older commit, select the intended main commit SHA explicitly. -The stable installation above and its examples continue to target v1.2.0. +The installation above targets v1.3.0, including these Preview defaults. ### Attach the error's source @@ -196,7 +197,7 @@ appLog := logger.New( ) ``` -Both options default to `true` on main and can be overridden on child loggers. +Both options default to `true` in v1.3.0 and on main. Child loggers can override them. `WithStackTrace(false)` suppresses attached, fallback and panic stack fields; `WithPanicLogging(false)` suppresses the new automatic panic record. Disable both to retain the previous logging behavior. These options do not exist in v1.2.0. diff --git a/docs/METADATA.md b/docs/METADATA.md index d00138d..55e46b4 100644 --- a/docs/METADATA.md +++ b/docs/METADATA.md @@ -8,11 +8,11 @@ Read Lambda execution-environment information from the Lambda Metadata Service ( ## Install -Use Go 1.27 or newer: +Use Go 1.27.3 or newer: ```sh -CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/commons/metadata@v1.2.0 -CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/logger@v1.2.0 +CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/commons/metadata@v1.3.0 +CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/logger@v1.3.0 ``` ## Read execution-environment metadata diff --git a/docs/METRICS.md b/docs/METRICS.md index 7252290..580b4e9 100644 --- a/docs/METRICS.md +++ b/docs/METRICS.md @@ -9,11 +9,11 @@ Publish custom CloudWatch metrics by writing Embedded Metric Format (EMF) JSON t ## Install -Use Go 1.27 or newer: +Use Go 1.27.3 or newer: ```sh -CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/metrics@v1.2.0 -CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/logger@v1.2.0 +CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/metrics@v1.3.0 +CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/logger@v1.3.0 ``` ## Record an order count diff --git a/docs/MODULES.md b/docs/MODULES.md index 70639ff..69b34e3 100644 --- a/docs/MODULES.md +++ b/docs/MODULES.md @@ -5,15 +5,15 @@ description: "Install Go Powertools modules for AWS Lambda. Choose utility impor # Install modules -Install only the utilities your application uses. Maintained modules share **one release version**; each has its own dependency graph and import path. The latest stable release is [v1.2.0](https://github.com/rambow-cloud/powertools-lambda-go/releases/tag/v1.2.0). +Install only the utilities your application uses. Maintained modules share **one release version**; each has its own dependency graph and import path. The latest stable release is [v1.3.0](https://github.com/rambow-cloud/powertools-lambda-go/releases/tag/v1.3.0). ## Add a utility Use Go 1.27.3 or newer: ```sh -CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/logger@v1.2.0 -CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/metrics@v1.2.0 +CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/logger@v1.3.0 +CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/metrics@v1.3.0 ``` Import the packages normally: @@ -61,7 +61,7 @@ Prefix each suffix below with `github.com/rambow-cloud/powertools-lambda-go`. | `/eventhandler/http/tracer` | Trace routes with OpenTelemetry | | `/tracer` | OpenTelemetry tracing and instrumentation | -Commons is a package in the root module: install `github.com/rambow-cloud/powertools-lambda-go@v1.2.0`, then import `/commons`. Other utilities use the matching module suffix in their `go get` command. Parameters providers and the Idempotency DynamoDB adapter are subpackages of their parent module. +Commons is a package in the root module: install `github.com/rambow-cloud/powertools-lambda-go@v1.3.0`, then import `/commons`. Other utilities use the matching module suffix in their `go get` command. Parameters providers and the Idempotency DynamoDB adapter are subpackages of their parent module. ## One version, separate dependencies diff --git a/docs/PARAMETERS.md b/docs/PARAMETERS.md index 6c6c6fb..7cd04af 100644 --- a/docs/PARAMETERS.md +++ b/docs/PARAMETERS.md @@ -8,11 +8,11 @@ Read and cache configuration from SSM Parameter Store, Secrets Manager, DynamoDB ## Install -Use Go 1.27 or newer: +Use Go 1.27.3 or newer: ```sh -CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/parameters@v1.2.0 -CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/logger@v1.2.0 +CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/parameters@v1.3.0 +CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/logger@v1.3.0 ``` ## Read an SSM parameter diff --git a/docs/PARSER.md b/docs/PARSER.md index 6faca75..d55f0b6 100644 --- a/docs/PARSER.md +++ b/docs/PARSER.md @@ -8,11 +8,11 @@ Validate incoming data and convert it into typed Go values. Use built-in event s ## Install -Use Go 1.27 or newer: +Use Go 1.27.3 or newer: ```sh -CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/parser@v1.2.0 -CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/logger@v1.2.0 +CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/parser@v1.3.0 +CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/logger@v1.3.0 ``` ## Parse an order diff --git a/docs/REGEX.md b/docs/REGEX.md index 4417ccc..94516dd 100644 --- a/docs/REGEX.md +++ b/docs/REGEX.md @@ -8,7 +8,7 @@ Match and replace text with ECMAScript-style captures and replacement tokens. Th ## Keep an account prefix -Install `commons/regex@v1.2.0` and `logger@v1.2.0`, importing them as `regex` and `logger`. +Install `commons/regex@v1.3.0` and `logger@v1.3.0`, importing them as `regex` and `logger`. **Input** diff --git a/docs/RELEASE_ACCEPTANCE_V1_3_0.json b/docs/RELEASE_ACCEPTANCE_V1_3_0.json new file mode 100644 index 0000000..2e8102c --- /dev/null +++ b/docs/RELEASE_ACCEPTANCE_V1_3_0.json @@ -0,0 +1,441 @@ +{ + "schema_version": 1, + "verified_at": "2026-10-23", + "repository": "rambow-cloud/powertools-lambda-go", + "release_version": "v1.3.0", + "publication_mode": "project", + "prerelease": false, + "github_latest_at_acceptance": true, + "published_at": "2026-10-23T02:39:13Z", + "source_sha": "2df7e85986d5bc2f6c201c673a7dbeb12a325a0e", + "notes_source_sha": "5667eb3b249c4761a13a5cb10f2a9d59988edd4a", + "issue": 257, + "preparation_pr": 261, + "preparation_head": "e2b5dfa79b5a4cfbf6b727c6ae51b033ba05aa43", + "plan": "auto-4b57341d25-5667eb3b249c", + "plan_sha256": "b8c7da91526b59acf58360c6e5e7002bbde9b0840036c4d3936a3fccae93a934", + "publication_run": 39890005244, + "workflow_url": "https://github.com/rambow-cloud/powertools-lambda-go/actions/runs/39890005244", + "pr_ci_run": 39886644567, + "pr_ci_head": "e2b5dfa79b5a4cfbf6b727c6ae51b033ba05aa43", + "main_ci_run": 39888492575, + "main_ci_checkout": "2df7e85986d5bc2f6c201c673a7dbeb12a325a0e", + "required_checks": { + "pr": [ + { + "name": "DynamoDB Local", + "conclusion": "success", + "job_id": 120196294840 + }, + { + "name": "Documentation / Build documentation", + "conclusion": "success", + "job_id": 120196294862 + }, + { + "name": "Modules and Lambda artifacts", + "conclusion": "success", + "job_id": 120196294918 + }, + { + "name": "Automation / Release tooling", + "conclusion": "success", + "job_id": 120196294953 + }, + { + "name": "Runtime simulation", + "conclusion": "success", + "job_id": 120198783869 + }, + { + "name": "CI gate", + "conclusion": "success", + "job_id": 120201411386 + }, + { + "name": "Full regression", + "conclusion": "success", + "job_id": 120201434161 + } + ], + "main": [ + { + "name": "DynamoDB Local", + "conclusion": "success", + "job_id": 120202295653 + }, + { + "name": "Modules and Lambda artifacts", + "conclusion": "success", + "job_id": 120202295765 + }, + { + "name": "Automation / Release tooling", + "conclusion": "success", + "job_id": 120202295806 + }, + { + "name": "Documentation / Build documentation", + "conclusion": "success", + "job_id": 120202295852 + }, + { + "name": "Runtime simulation", + "conclusion": "success", + "job_id": 120204933269 + }, + { + "name": "CI gate", + "conclusion": "success", + "job_id": 120207167966 + }, + { + "name": "Full regression", + "conclusion": "success", + "job_id": 120207187777 + } + ] + }, + "environment": { + "os": "linux", + "architecture": "amd64", + "CGO_ENABLED": "0", + "GOWORK": "off", + "GOPROXY": "https://proxy.golang.org", + "GOSUMDB": "sum.golang.org", + "fresh_module_and_build_caches": true, + "local_replacements": false + }, + "goreleaser_version": "2.18.2", + "completed": true, + "project_release": { + "tag": "v1.3.0", + "release_published": true, + "url": "https://github.com/rambow-cloud/powertools-lambda-go/releases/tag/v1.3.0" + }, + "excluded_frozen_modules": [ + "tracer/xray" + ], + "module_count": 27, + "modules": [ + { + "directory": ".", + "version": "v1.3.0", + "tag": "v1.3.0", + "tag_url": "https://github.com/rambow-cloud/powertools-lambda-go/tree/v1.3.0", + "source_sha": "2df7e85986d5bc2f6c201c673a7dbeb12a325a0e", + "sum": "h1:8LnY98uSSTrg1KUCjJa1CVpBvGvtzVDAlub84EhjDRM=", + "go_mod_sum": "h1:aknPifiwxF383C8q6QuKf9X1P2ctLzcaG1mV8Dn9sOc=", + "consumer_build": true, + "checksum_verification": true + }, + { + "directory": "commons/regex", + "version": "v1.3.0", + "tag": "commons/regex/v1.3.0", + "tag_url": "https://github.com/rambow-cloud/powertools-lambda-go/tree/commons/regex/v1.3.0", + "source_sha": "2df7e85986d5bc2f6c201c673a7dbeb12a325a0e", + "sum": "h1:8IA2ZRW8CYBrT4JR487Rlox+DwaOI1X4FxLykBp07nQ=", + "go_mod_sum": "h1:IrFWu/EiSIM2p8TcVeH+37JCmoGn0UkA/m8UHarpLww=", + "consumer_build": true, + "checksum_verification": true + }, + { + "directory": "signer", + "version": "v1.3.0", + "tag": "signer/v1.3.0", + "tag_url": "https://github.com/rambow-cloud/powertools-lambda-go/tree/signer/v1.3.0", + "source_sha": "2df7e85986d5bc2f6c201c673a7dbeb12a325a0e", + "sum": "h1:7+vNphYRM/ptJcBrd5jQLoN9emSvdaqazMKVIZWKsoM=", + "go_mod_sum": "h1:/CqmqBrBKKeVBE+1hQtDlzBSMTotBLiYvEMk1KSURtA=", + "consumer_build": true, + "checksum_verification": true + }, + { + "directory": "batch", + "version": "v1.3.0", + "tag": "batch/v1.3.0", + "tag_url": "https://github.com/rambow-cloud/powertools-lambda-go/tree/batch/v1.3.0", + "source_sha": "2df7e85986d5bc2f6c201c673a7dbeb12a325a0e", + "sum": "h1:H+g9jsob2jfGm8jRxm2v8E2h30KArZf54sc9s3gh8wU=", + "go_mod_sum": "h1:G5fVZb8w1FX73OFvy+SOegMFHIx3JIFTFzjtrXVpRRY=", + "consumer_build": true, + "checksum_verification": true + }, + { + "directory": "commons/awssdk", + "version": "v1.3.0", + "tag": "commons/awssdk/v1.3.0", + "tag_url": "https://github.com/rambow-cloud/powertools-lambda-go/tree/commons/awssdk/v1.3.0", + "source_sha": "2df7e85986d5bc2f6c201c673a7dbeb12a325a0e", + "sum": "h1:/R+6VYU6uMew2WyWEPIQlMkos7ai1dEFu6jiHylbA1g=", + "go_mod_sum": "h1:Wgjyk7rxM4Dk/n26EZZDdPSh1Uft07w4uVD/Yd86Ozc=", + "consumer_build": true, + "checksum_verification": true + }, + { + "directory": "commons/dynamodb", + "version": "v1.3.0", + "tag": "commons/dynamodb/v1.3.0", + "tag_url": "https://github.com/rambow-cloud/powertools-lambda-go/tree/commons/dynamodb/v1.3.0", + "source_sha": "2df7e85986d5bc2f6c201c673a7dbeb12a325a0e", + "sum": "h1:yLyx5qsOJEKw2Mhvhwu3qJ+1ukywxQHIF/riFg0/bu4=", + "go_mod_sum": "h1:Q1SJpSZ5sLmIMNFyxmR7lHY+8C8hbFQIhmBJAJj/sNA=", + "consumer_build": true, + "checksum_verification": true + }, + { + "directory": "commons/metadata", + "version": "v1.3.0", + "tag": "commons/metadata/v1.3.0", + "tag_url": "https://github.com/rambow-cloud/powertools-lambda-go/tree/commons/metadata/v1.3.0", + "source_sha": "2df7e85986d5bc2f6c201c673a7dbeb12a325a0e", + "sum": "h1:lDiEhagLmTbe9bIeWUT17m5txvqbzZzkdJlM3TO8eWs=", + "go_mod_sum": "h1:yDxWdIis+ciemRJFRFUNZLDUFPrFKy32QTw4XUAmtdc=", + "consumer_build": true, + "checksum_verification": true + }, + { + "directory": "datamasking", + "version": "v1.3.0", + "tag": "datamasking/v1.3.0", + "tag_url": "https://github.com/rambow-cloud/powertools-lambda-go/tree/datamasking/v1.3.0", + "source_sha": "2df7e85986d5bc2f6c201c673a7dbeb12a325a0e", + "sum": "h1:1mcYyTo3v3TBaPpqUGCh1dqBinkbmJbz/Mg2u6aTuOQ=", + "go_mod_sum": "h1:oJw7SCFcrrhgh1Fp4ZQb97aWix3wkxeZRoEnBfONra8=", + "consumer_build": true, + "checksum_verification": true + }, + { + "directory": "eventhandler/appsyncevents", + "version": "v1.3.0", + "tag": "eventhandler/appsyncevents/v1.3.0", + "tag_url": "https://github.com/rambow-cloud/powertools-lambda-go/tree/eventhandler/appsyncevents/v1.3.0", + "source_sha": "2df7e85986d5bc2f6c201c673a7dbeb12a325a0e", + "sum": "h1:+2+w5Y7b0RIw8158bLYlvFSSgmkBk5TDxljo+0phxnU=", + "go_mod_sum": "h1:uO/Bpow7tyMxOhMg/b2j4/TJ+G3s6D2JbOvnS8rMuL0=", + "consumer_build": true, + "checksum_verification": true + }, + { + "directory": "eventhandler/appsyncgraphql", + "version": "v1.3.0", + "tag": "eventhandler/appsyncgraphql/v1.3.0", + "tag_url": "https://github.com/rambow-cloud/powertools-lambda-go/tree/eventhandler/appsyncgraphql/v1.3.0", + "source_sha": "2df7e85986d5bc2f6c201c673a7dbeb12a325a0e", + "sum": "h1:hkKRbrasLSMbEcNKJkW5+fK2gaWMxBXTXQsf4Bg/EBg=", + "go_mod_sum": "h1:JMruQ/TTS+Lj3zanu2pwdjoUIUYuXLdIq8Co99rhrX4=", + "consumer_build": true, + "checksum_verification": true + }, + { + "directory": "eventhandler/bedrock", + "version": "v1.3.0", + "tag": "eventhandler/bedrock/v1.3.0", + "tag_url": "https://github.com/rambow-cloud/powertools-lambda-go/tree/eventhandler/bedrock/v1.3.0", + "source_sha": "2df7e85986d5bc2f6c201c673a7dbeb12a325a0e", + "sum": "h1:ZGxwcM3ic12X3NFsBxHwuz5UDCQY4Ia4xNkWopFWbh0=", + "go_mod_sum": "h1:TXypnmFnj8tbiCI+iU+2IgQuOaD810EBpl0cB6hE1i4=", + "consumer_build": true, + "checksum_verification": true + }, + { + "directory": "eventhandler/http", + "version": "v1.3.0", + "tag": "eventhandler/http/v1.3.0", + "tag_url": "https://github.com/rambow-cloud/powertools-lambda-go/tree/eventhandler/http/v1.3.0", + "source_sha": "2df7e85986d5bc2f6c201c673a7dbeb12a325a0e", + "sum": "h1:ewL6giPs6sZQQfGi+k3Bn5RD5ibfTdWGxUC5fhIJ8Ls=", + "go_mod_sum": "h1:QG6YXNluFjss+fQHqZEMkE+Pz+IMby1LdyCs2Jf8EIU=", + "consumer_build": true, + "checksum_verification": true + }, + { + "directory": "jmespath", + "version": "v1.3.0", + "tag": "jmespath/v1.3.0", + "tag_url": "https://github.com/rambow-cloud/powertools-lambda-go/tree/jmespath/v1.3.0", + "source_sha": "2df7e85986d5bc2f6c201c673a7dbeb12a325a0e", + "sum": "h1:psABBdkYsMgBB9T6kqSsh+drIji3GUtWzKxCYQ3lIPQ=", + "go_mod_sum": "h1:AnGhu+SG5VxRHw3Qb/HnhcGMWBZPSt39Wg+WvCbyj7s=", + "consumer_build": true, + "checksum_verification": true + }, + { + "directory": "kafka", + "version": "v1.3.0", + "tag": "kafka/v1.3.0", + "tag_url": "https://github.com/rambow-cloud/powertools-lambda-go/tree/kafka/v1.3.0", + "source_sha": "2df7e85986d5bc2f6c201c673a7dbeb12a325a0e", + "sum": "h1:lYm4UdRR30psYLDxpXYJQ0aETyRlZSN+rfxizNyepJY=", + "go_mod_sum": "h1:wycW78EEGUIcCGKEreClrTUeX+AxbHNRym37R1vDowQ=", + "consumer_build": true, + "checksum_verification": true + }, + { + "directory": "logger", + "version": "v1.3.0", + "tag": "logger/v1.3.0", + "tag_url": "https://github.com/rambow-cloud/powertools-lambda-go/tree/logger/v1.3.0", + "source_sha": "2df7e85986d5bc2f6c201c673a7dbeb12a325a0e", + "sum": "h1:xmbhSdT76uIyFXKKhCuMjBobNm95SdvbRJs90NUJEXo=", + "go_mod_sum": "h1:TVA3urq0YlodcGBlkrssIDot+Q+CS/Q4KbdrY3o5auU=", + "consumer_build": true, + "checksum_verification": true + }, + { + "directory": "metrics", + "version": "v1.3.0", + "tag": "metrics/v1.3.0", + "tag_url": "https://github.com/rambow-cloud/powertools-lambda-go/tree/metrics/v1.3.0", + "source_sha": "2df7e85986d5bc2f6c201c673a7dbeb12a325a0e", + "sum": "h1:y6ad6V51fqu2heNcFINb5cNXVVFDHQqy7BkDbHEeQUA=", + "go_mod_sum": "h1:yhXDnzF+cixcy/8ji8Ej6EP7vQaWDdsfzRVz86FAqCk=", + "consumer_build": true, + "checksum_verification": true + }, + { + "directory": "parser", + "version": "v1.3.0", + "tag": "parser/v1.3.0", + "tag_url": "https://github.com/rambow-cloud/powertools-lambda-go/tree/parser/v1.3.0", + "source_sha": "2df7e85986d5bc2f6c201c673a7dbeb12a325a0e", + "sum": "h1:RpYFKZtExaIWuAEWe4UuKev2UjI2yp7DcHR5C7Y81yY=", + "go_mod_sum": "h1:fWeJnWPD2PR09VJW/Q7MHXV/8V2115GGmfu9ohSlWi8=", + "consumer_build": true, + "checksum_verification": true + }, + { + "directory": "datamasking/kms", + "version": "v1.3.0", + "tag": "datamasking/kms/v1.3.0", + "tag_url": "https://github.com/rambow-cloud/powertools-lambda-go/tree/datamasking/kms/v1.3.0", + "source_sha": "2df7e85986d5bc2f6c201c673a7dbeb12a325a0e", + "sum": "h1:yrnEw618N2gbU/TlDNqepXY3CGaUrA1X4fQsBHjETbQ=", + "go_mod_sum": "h1:CMldfQWIr4qDfo7Pq7xqWVMFPERbEFMQrBrojPO3ajI=", + "consumer_build": true, + "checksum_verification": true + }, + { + "directory": "eventhandler/http/metrics", + "version": "v1.3.0", + "tag": "eventhandler/http/metrics/v1.3.0", + "tag_url": "https://github.com/rambow-cloud/powertools-lambda-go/tree/eventhandler/http/metrics/v1.3.0", + "source_sha": "2df7e85986d5bc2f6c201c673a7dbeb12a325a0e", + "sum": "h1:Q20fY/yZGorWDxAafwC2HE3auRoPi0cunFfCE0AdumE=", + "go_mod_sum": "h1:ScFNIq1x34s3w+fdqMd8y0RycABBKAXCskMYc71MKVQ=", + "consumer_build": true, + "checksum_verification": true + }, + { + "directory": "idempotency", + "version": "v1.3.0", + "tag": "idempotency/v1.3.0", + "tag_url": "https://github.com/rambow-cloud/powertools-lambda-go/tree/idempotency/v1.3.0", + "source_sha": "2df7e85986d5bc2f6c201c673a7dbeb12a325a0e", + "sum": "h1:Xx7225qiuq4lZ/WjUUnB8lOi9oLzh2ozU1Kdy2nhpJg=", + "go_mod_sum": "h1:ZPr3m+stD3p+Q0NkdO8TKMtaIyhXtQVG0s5leQAryws=", + "consumer_build": true, + "checksum_verification": true + }, + { + "directory": "kafka/avro", + "version": "v1.3.0", + "tag": "kafka/avro/v1.3.0", + "tag_url": "https://github.com/rambow-cloud/powertools-lambda-go/tree/kafka/avro/v1.3.0", + "source_sha": "2df7e85986d5bc2f6c201c673a7dbeb12a325a0e", + "sum": "h1:ynh4ap2P8Ci/LlWR26WEhWCHG0Ocx2vyp5AMtefv1Bo=", + "go_mod_sum": "h1:/ITl6ihmSRamawdCKM4kHZUJy58WupOziEA4kBSchVM=", + "consumer_build": true, + "checksum_verification": true + }, + { + "directory": "kafka/protobuf", + "version": "v1.3.0", + "tag": "kafka/protobuf/v1.3.0", + "tag_url": "https://github.com/rambow-cloud/powertools-lambda-go/tree/kafka/protobuf/v1.3.0", + "source_sha": "2df7e85986d5bc2f6c201c673a7dbeb12a325a0e", + "sum": "h1:+TZGqu4IQyU3PPIv2uLmkFU7aF+7/seFYlEZ4iwRE9Y=", + "go_mod_sum": "h1:0hrGjfIsQJQY6U6i6gnnRP3XSBJ3V2FUwuHVYLdS8Bs=", + "consumer_build": true, + "checksum_verification": true + }, + { + "directory": "parameters", + "version": "v1.3.0", + "tag": "parameters/v1.3.0", + "tag_url": "https://github.com/rambow-cloud/powertools-lambda-go/tree/parameters/v1.3.0", + "source_sha": "2df7e85986d5bc2f6c201c673a7dbeb12a325a0e", + "sum": "h1:RHamAfb+kgN11BnUsYzRc9TSaWiuZKJlbzOPd7GQhUc=", + "go_mod_sum": "h1:Vny6Kyt2lz3ZqSbmPkrGuw9shdy9Jsx5BawKADAFBPQ=", + "consumer_build": true, + "checksum_verification": true + }, + { + "directory": "tracer", + "version": "v1.3.0", + "tag": "tracer/v1.3.0", + "tag_url": "https://github.com/rambow-cloud/powertools-lambda-go/tree/tracer/v1.3.0", + "source_sha": "2df7e85986d5bc2f6c201c673a7dbeb12a325a0e", + "sum": "h1:Mwm7Hd91Ut+PDhDG6mW+rzzNrqT4xvtL/nkcMXBXpEM=", + "go_mod_sum": "h1:c1mfq8UA4Eev6NGLGbtrwSVRTyz3Eh0URtxzzjq6y3E=", + "consumer_build": true, + "checksum_verification": true + }, + { + "directory": "validation", + "version": "v1.3.0", + "tag": "validation/v1.3.0", + "tag_url": "https://github.com/rambow-cloud/powertools-lambda-go/tree/validation/v1.3.0", + "source_sha": "2df7e85986d5bc2f6c201c673a7dbeb12a325a0e", + "sum": "h1:5/nrT93RMnpkDmTk0PJ0K81P9MnJARFnDXb/QW0fyyA=", + "go_mod_sum": "h1:g8KEE4UaAH91IwhPV3GqS9GvC1C/EwCbrMxeT0ip67k=", + "consumer_build": true, + "checksum_verification": true + }, + { + "directory": "eventhandler/http/tracer", + "version": "v1.3.0", + "tag": "eventhandler/http/tracer/v1.3.0", + "tag_url": "https://github.com/rambow-cloud/powertools-lambda-go/tree/eventhandler/http/tracer/v1.3.0", + "source_sha": "2df7e85986d5bc2f6c201c673a7dbeb12a325a0e", + "sum": "h1:8d2Xd2/k1To2RsaIH1P/Uz+TIVsdNTABz3t6+xAGBos=", + "go_mod_sum": "h1:7L2wz1AASRLlKXAQnBYw0QawJvAPl+f4q9BJPwaKFsY=", + "consumer_build": true, + "checksum_verification": true + }, + { + "directory": "idempotency/cache", + "version": "v1.3.0", + "tag": "idempotency/cache/v1.3.0", + "tag_url": "https://github.com/rambow-cloud/powertools-lambda-go/tree/idempotency/cache/v1.3.0", + "source_sha": "2df7e85986d5bc2f6c201c673a7dbeb12a325a0e", + "sum": "h1:xJhvF/H5IkqdoJCXvty2KVmrTnqxtcsEEkIDNeA52Js=", + "go_mod_sum": "h1:TY8MXH6SYDjIUDY1Va7FCMuIv5+2JuBFF+bkOWYSl5g=", + "consumer_build": true, + "checksum_verification": true + } + ], + "known_followup": { + "issue": 262, + "priority": "P3", + "scope": "Release changed-file disclosure omits root internal files; source packaging and existing root performance notes are intact." + }, + "additional_public_consumer_smoke": { + "os": "windows", + "architecture": "amd64", + "go": "1.27.3", + "CGO_ENABLED": "0", + "GOWORK": "off", + "GOPROXY": "https://proxy.golang.org", + "GOSUMDB": "sum.golang.org", + "fresh_module_and_build_caches": true, + "logger_version": "v1.3.0", + "tracer_version": "v1.3.0", + "preview_api_and_error_identity": true, + "attached_stack": true, + "compact_single_line_json": true, + "stack_opt_out": true, + "selected_crypto_version": "v0.58.0" + } +} diff --git a/docs/RELEASE_NOTES.md b/docs/RELEASE_NOTES.md index bee56d2..b45ad9f 100644 --- a/docs/RELEASE_NOTES.md +++ b/docs/RELEASE_NOTES.md @@ -6,6 +6,26 @@ description: "Read published Powertools for Go release notes, stable and prerele All 27 maintained modules share one version. [Browse all GitHub Releases](https://github.com/rambow-cloud/powertools-lambda-go/releases) for full changelogs. +## v1.3.0 + +2026-10-23 · [GitHub Release](https://github.com/rambow-cloud/powertools-lambda-go/releases/tag/v1.3.0) + +### Features + +- **Logger (Preview):** Attach source stacks with `WithStack`, add a logging-site stack to ordinary errors by default, and record handler panics before rethrowing the original value. `WithStackTrace(false)` and `WithPanicLogging(false)` disable these defaults. The Preview is included in v1.3.0 and main; v1.2.0 does not provide these APIs. ([#242](https://github.com/rambow-cloud/powertools-lambda-go/pull/242)) + +### Security and fixes + +- Require **Go 1.27.3 or newer** for the patched standard library. Update tracing dependencies to `golang.org/x/net v0.61.0`, `golang.org/x/crypto v0.58.0` in the selected graph and gRPC v1.83.2; update Unicode text handling to v0.43.0. Rebuild deployed Lambda binaries with the patched toolchain. ([#256](https://github.com/rambow-cloud/powertools-lambda-go/pull/256)) +- **Avro:** Replace the archived codec with the maintained `github.com/iskorotkov/avro/v2 v2.34.0`, retaining cumulative collection bounds and adding explicit codec allocation limits. ([#256](https://github.com/rambow-cloud/powertools-lambda-go/pull/256)) +- **Protobuf:** Align truncated short-prefix diagnostics with patched protobufjs v7.6.6. Audit the pinned reference tooling against the official npm registry during CI. ([#260](https://github.com/rambow-cloud/powertools-lambda-go/pull/260)) +- Preserve native boundary behavior in Signer, Data Masking/KMS, Avro, AppSync GraphQL and Bedrock error cases. See the consolidated Release for individual fixes. ([#233](https://github.com/rambow-cloud/powertools-lambda-go/pull/233)) + +### Performance and verification + +- Reduce Logger filtering, correlation and normalization allocations; reuse bounded private snapshots for ordinary JSON-shaped data in Commons/JMESPath and decode Validation snapshots directly. JSON v2 remains the fallback for custom and other unsupported fast paths. ([#249](https://github.com/rambow-cloud/powertools-lambda-go/pull/249), [#253](https://github.com/rambow-cloud/powertools-lambda-go/pull/253)) +- Publish one Release and 27 matching module tags. The deprecated X-Ray SDK adapter remains excluded. See [public publication acceptance](RELEASE_ACCEPTANCE_V1_3_0.json) and [scoped security acceptance](SECURITY_ACCEPTANCE_V1_3_0.json) for source identity, checks and evidence boundaries. + ## v1.2.0 2026-10-13 · [GitHub Release](https://github.com/rambow-cloud/powertools-lambda-go/releases/tag/v1.2.0) diff --git a/docs/SECURITY_ACCEPTANCE_V1_3_0.json b/docs/SECURITY_ACCEPTANCE_V1_3_0.json new file mode 100644 index 0000000..6911eac --- /dev/null +++ b/docs/SECURITY_ACCEPTANCE_V1_3_0.json @@ -0,0 +1,44 @@ +{ + "verified_at": "2026-10-23", + "issue": 255, + "reviewed_source_prs": [ + 256, + 260 + ], + "release_version": "v1.3.0", + "source_sha": "2df7e85986d5bc2f6c201c673a7dbeb12a325a0e", + "final_main_ci": 39888492575, + "go": "1.27.3", + "scanner": "govulncheck v1.9.0", + "database_updated_observed": [ + "2026-10-21 00:27:29 +0000 UTC" + ], + "CGO_ENABLED": "0", + "GOWORK": "off", + "packaged_modules": 31, + "standalone_consumers": 28, + "scan_logs": 62, + "findings_in_scanned_closures": 0, + "scope": "Per-module production package closures; not a vulnerability assessment of unused upstream tool packages.", + "npm": { + "registry": "https://registry.npmjs.org", + "dependencies_reported": 103, + "known_vulnerabilities": 0, + "protobufjs": "7.6.6", + "lockfile_sha256": "91a911830a31e222391405062b68d6d5f64a741ee389f30c6528221fe00c0632", + "runtime_ci": 39888492575 + }, + "python": { + "scanner": "pip-audit 2.10.1", + "packages": 11, + "known_vulnerabilities": 0, + "lockfile_sha256": "0a9283475daa94d8aa088f555c4bdc3bb3ac71d4e315493ee0aecfb619a72a51" + }, + "runtime_execution_architecture": "amd64", + "cross_build_and_scan_architectures": [ + "amd64", + "arm64" + ], + "aws_cloud_tests": false, + "race_detector": false +} diff --git a/docs/SIGNER.md b/docs/SIGNER.md index c365659..2bc48af 100644 --- a/docs/SIGNER.md +++ b/docs/SIGNER.md @@ -8,11 +8,11 @@ Add AWS Signature Version 4 authentication to HTTP requests, or use a client tha ## Install -Use Go 1.27 or newer: +Use Go 1.27.3 or newer: ```sh -CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/signer@v1.2.0 -CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/logger@v1.2.0 +CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/signer@v1.3.0 +CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/logger@v1.3.0 ``` ## Sign a request without sending it diff --git a/docs/TRACER.md b/docs/TRACER.md index eb43364..cb01529 100644 --- a/docs/TRACER.md +++ b/docs/TRACER.md @@ -9,11 +9,11 @@ Trace Lambda handlers, child operations, HTTP requests and AWS SDK calls with Op ## Install -Use Go 1.27 or newer: +Use Go 1.27.3 or newer: ```sh -CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/tracer@v1.2.0 -CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/logger@v1.2.0 +CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/tracer@v1.3.0 +CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/logger@v1.3.0 CGO_ENABLED=0 go get github.com/aws/aws-lambda-go@v1.55.0 ``` diff --git a/docs/VERSION_POLICY.md b/docs/VERSION_POLICY.md index f9e1053..3023632 100644 --- a/docs/VERSION_POLICY.md +++ b/docs/VERSION_POLICY.md @@ -1,10 +1,10 @@ # Documentation and verification versions Documentation on `main` and the site describes the current source and can include -unreleased APIs. The latest stable cohort is [v1.2.0](RELEASE_NOTES.md#v120). -It requires Go 1.27 and uses JSON v2 directly. The earlier v1.0.0-rc.1 candidate -and v1.1.0/v1.0.0/v0.2.0 stable cohorts remain available as historical versions. Select -`@v1.2.0` explicitly to reproduce the latest stable release. +unreleased APIs. The latest stable cohort is [v1.3.0](RELEASE_NOTES.md#v130). +It requires Go 1.27.3 and uses JSON v2 directly. The earlier v1.0.0-rc.1 candidate +and v1.2.0/v1.1.0/v1.0.0/v0.2.0 stable cohorts remain available as historical versions. Select +`@v1.3.0` explicitly to reproduce the latest stable release. ## Examples and installation @@ -19,7 +19,7 @@ assuming a dependency update patches an existing Lambda binary. such as `examples` are not independently published. - Checkout snippets describe their source revision. Identify a new API as unreleased until its module version is published. -- The README example targets v1.2.0. Verify it in an isolated application using +- The README example targets v1.3.0. Verify it in an isolated application using its pinned installation command rather than the repository workspace. - Import paths contain no `@version`; selection belongs to `go get` and `go.mod`. - For release-specific documentation, use the matching Git tag's docs/examples. @@ -29,15 +29,15 @@ assuming a dependency update patches an existing Lambda binary. ### Logger stacks Preview by source version -> This Preview is not included in v1.2.0. +> This Preview is included in v1.3.0 and main. It is not included in v1.2.0. | Source | Error stacks | Automatic handler panic record | | --- | --- | --- | | Logger `@v1.2.0` | No automatic stack collection; no `WithStack` or `WithStackTrace` API | Previous cleanup only; no `WithPanicLogging` API | -| Logger `@main` | `WithStack` plus default logging-site fallback; configurable with `WithStackTrace` | Enabled by default; configurable with `WithPanicLogging` | +| Logger `@v1.3.0` / `@main` | `WithStack` plus default logging-site fallback; configurable with `WithStackTrace` | Enabled by default; configurable with `WithPanicLogging` | ```sh -CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/logger@main +CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/logger@v1.3.0 ``` An omitted version or `@latest` does not request `main`. Branch references resolve @@ -45,8 +45,8 @@ to pseudo-versions; use a commit SHA for repeatability. See [Go version queries](https://go.dev/ref/mod#version-queries). The [Preview example](https://github.com/rambow-cloud/powertools-lambda-go/tree/main/examples/logger-stack-preview) requires a revision containing these APIs; the historical v1.2.0 installation -commands do not provide them. The next unified stable cohort includes these APIs -with their Preview status. Availability follows the selected source revision, +commands do not provide them. The v1.3.0 unified stable cohort includes these +APIs with their Preview status. Availability follows the selected source revision, without runtime branch detection or build tags. Published v1.2.0 remains unchanged. ### Evidence boundaries diff --git a/docs/index.md b/docs/index.md index dfa4811..37461e5 100644 --- a/docs/index.md +++ b/docs/index.md @@ -43,10 +43,10 @@ Powertools for AWS Lambda (Go) is an **independent community Go port of Powertoo Install one utility to begin. For example, add structured logging: ```sh -CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/logger@v1.2.0 +CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/logger@v1.3.0 ``` -Use **Go 1.27 or newer**, target **arm64 or x86_64**, and keep **CGO disabled**. Install the published modules using the [module guide](MODULES.md), which explains dependencies, imports, and the shared release version. +Use **Go 1.27.3 or newer**, target **arm64 or x86_64**, and keep **CGO disabled**. Install the published modules using the [module guide](MODULES.md), which explains dependencies, imports, and the shared release version.
diff --git a/docs/reference/COMPATIBILITY.md b/docs/reference/COMPATIBILITY.md index 755f6f7..0f3c6a8 100644 --- a/docs/reference/COMPATIBILITY.md +++ b/docs/reference/COMPATIBILITY.md @@ -7,7 +7,7 @@ Reference: TypeScript v2.35.0, commit `7bcc27b1574493f9452688673658f52b80c53847` Start with the [feature comparison and evidence map](../FEATURE_PARITY.md). User guides contain practical Go examples and results; the API notes in this section retain detailed contracts. [Usage patterns](../USAGE_PATTERNS.md) explains Go composition; [environment variables](../ENVIRONMENT_VARIABLES.md) records supported configuration. [CHECKLIST.md](../CHECKLIST.md) describes project progress. -Maintained packages require Go 1.27 and use `encoding/json/v2` defaults. Strict duplicate-member and Unicode validation, case-sensitive field names, nil collections and JSON field tags follow the [current JSON contract](GETTING_STARTED.md#json-decoding-and-encoding). Utility-specific policies still apply: idempotency keys use explicit canonicalization, ordered event traversal retains source order, and Logger and EMF keep their own field and non-finite-number rules. Pinned JavaScript fixtures that accept duplicate members or repair malformed JSON text are asserted as intentional Go JSON boundary differences. +Maintained packages require Go 1.27.3 and use `encoding/json/v2` defaults. Strict duplicate-member and Unicode validation, case-sensitive field names, nil collections and JSON field tags follow the [current JSON contract](GETTING_STARTED.md#json-decoding-and-encoding). Utility-specific policies still apply: idempotency keys use explicit canonicalization, ordered event traversal retains source order, and Logger and EMF keep their own field and non-finite-number rules. Pinned JavaScript fixtures that accept duplicate members or repair malformed JSON text are asserted as intentional Go JSON boundary differences. Scope adjustment (2026-09-13): feature parity work now prioritizes Logger and OpenTelemetry. Exhaustive legacy X-Ray SDK behavior and native document parity are outside the maintained compatibility scope. The adapter's known DynamoDB enrichment gap is retained as a documented limitation, not an active release requirement. diff --git a/docs/reference/GETTING_STARTED.md b/docs/reference/GETTING_STARTED.md index 5f664d8..d8af2a4 100644 --- a/docs/reference/GETTING_STARTED.md +++ b/docs/reference/GETTING_STARTED.md @@ -7,7 +7,7 @@ Start with [your first Lambda](../../GETTING_STARTED.md) for the short path. When you need traces, install the Tracer module and configure an OTLP collector: ```sh -CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/tracer@v1.2.0 +CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/tracer@v1.3.0 ``` The maintained repository example composes Tracer and Logger: diff --git a/docs/reference/HTTP_OBSERVABILITY.md b/docs/reference/HTTP_OBSERVABILITY.md index c2ee3f7..1ab12ce 100644 --- a/docs/reference/HTTP_OBSERVABILITY.md +++ b/docs/reference/HTTP_OBSERVABILITY.md @@ -12,7 +12,7 @@ and choose the middleware your application needs. Install the metrics middleware: ```sh -CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/eventhandler/http/metrics@v1.2.0 +CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/eventhandler/http/metrics@v1.3.0 ``` Save this as `http_metrics.go` beside your HTTP entry point. Call @@ -46,7 +46,7 @@ Each request emits latency and error/fault metrics. To also count requests, use Install the tracer middleware: ```sh -CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/eventhandler/http/tracer@v1.2.0 +CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/eventhandler/http/tracer@v1.3.0 ``` Save this as `http_tracing.go` and call `addRequestTracing(app, tr)` during setup. diff --git a/docs/reference/LOGGER.md b/docs/reference/LOGGER.md index bcd3b54..e1ed6f2 100644 --- a/docs/reference/LOGGER.md +++ b/docs/reference/LOGGER.md @@ -26,13 +26,13 @@ if logErr := appLog.Error("Payment failed", paymentErr, logger.Fields{ } ~~~ -With stable v1.2.0's default configuration, this writes the following JSON line to **stderr**: +With v1.3.0's defaults, this writes a JSON line to **stderr** with a logging-site stack (example path and line): ~~~json -{"level":"ERROR","message":"Payment failed","timestamp":"2026-10-01T00:00:00.000Z","service":"orders","sampling_rate":0,"error":{"location":"","message":"card declined","name":"*errors.errorString"},"order_id":"ORD-123"} +{"level":"ERROR","message":"Payment failed","timestamp":"2026-10-01T00:00:00.000Z","service":"orders","sampling_rate":0,"error":{"location":"/app/main.go:19","message":"card declined","name":"*errors.errorString","stack":"main.main\n\t/app/main.go:19","stack_source":"logging"},"order_id":"ORD-123"} ~~~ -The `error` object describes the supplied `paymentErr`: `name` is its concrete Go type, `message` comes from `Error()`, and `location` is empty for this ordinary Go error. Wrapped errors can also include a `cause`. +The `error` object describes the supplied `paymentErr`: `name` is its concrete Go type, `message` comes from `Error()`, and `location` identifies the logging call when the error has no attached stack. With `WithStackTrace(false)`, `location` is empty and stack metadata is omitted, matching the historical v1.2.0 behavior. Wrapped errors can also include a `cause`. `logErr` has a different role: it reports a failure to serialize or write the log record. A successfully written `ERROR` record normally returns `nil`. Writing an error-level record does not return the business error from your handler, stop the program, or retry an operation; your application controls those decisions. @@ -134,11 +134,11 @@ WARN and higher use stderr; lower levels use stdout. `WithOutput` replaces both ## Stack and panic contract (Preview) -> This Preview is not included in v1.2.0. +> This Preview is included in v1.3.0 and main. It is not included in v1.2.0. See the [Preview guide](../LOGGER.md#error-stacks-and-panic-logging-preview) for -installation, short examples and output. The preceding error JSON describes -stable v1.2.0. Main enables these additional behaviors by default: +installation, short examples and output. The v1.3.0 release and main enable +these behaviors by default; historical v1.2.0 does not provide these APIs: | API | Default | Contract | | --- | --- | --- | diff --git a/examples/logger-stack-preview/README.md b/examples/logger-stack-preview/README.md index 1c9fd8b..4fe2ba9 100644 --- a/examples/logger-stack-preview/README.md +++ b/examples/logger-stack-preview/README.md @@ -1,6 +1,6 @@ # Logger stacks (Preview) -This Preview is not included in v1.2.0. +This Preview is included in v1.3.0 and main. It is not included in v1.2.0. Record an error with its call stack using the Powertools Logger. This example shows two ways to capture a stack: @@ -28,19 +28,18 @@ go run ./examples/logger-stack-preview ``` The repository workspace selects the local Preview code. Running this example -with `GOWORK=off` uses the dependencies declared in `examples/go.mod`; they must -select a revision containing these APIs. The v1.2.0 cohort does not provide -`logger.WithStack`. +with `GOWORK=off` selects the v1.3.0 dependencies declared in `examples/go.mod`, +which also include the Preview. The v1.2.0 cohort does not provide `logger.WithStack`. ## Run in your own application -Create a module and explicitly select `main`: +Create a module and select the published v1.3.0 Preview: ```sh mkdir logger-stack-demo cd logger-stack-demo CGO_ENABLED=0 go mod init example.com/logger-stack-demo -CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/logger@main +CGO_ENABLED=0 go get github.com/rambow-cloud/powertools-lambda-go/logger@v1.3.0 ``` In PowerShell, use: @@ -50,7 +49,7 @@ $env:CGO_ENABLED = "0" mkdir logger-stack-demo cd logger-stack-demo go mod init example.com/logger-stack-demo -go get github.com/rambow-cloud/powertools-lambda-go/logger@main +go get github.com/rambow-cloud/powertools-lambda-go/logger@v1.3.0 ``` Save the following complete program as `main.go`. It is the same code as @@ -89,7 +88,8 @@ CGO_ENABLED=0 go run . In PowerShell, after setting `CGO_ENABLED` above, run `go run .`. -An omitted version query does not select `main`. The `@main` query resolves to a +To select development source instead, use `logger@main`. An omitted version query +does not select `main`. The `@main` query resolves to a Go pseudo-version. To pin a repeatable Preview, replace `main` with the full SHA of a commit on `main` that includes the feature. This also lets you select the desired commit if a module proxy still resolves `main` to an older revision.