Highlighted release notes
cart
- Fixed hiccups in cart merge strategies caused by the addition of payment selection from guest cart, when some items were not added to customer's cart due to errors.
- Add effective payment method to transactions
- GraphQL: Added the
Commerce_Cart_UpdatePersonalDatamutation to update the personal data of the cart - GraphQL: Exposed all prices on the line item level
- Added the
CartItemMatcherextension point to decide whether an add to cart request merges into an existing cart item - Added
CustomAttributestoAppliedDiscount
product
- GraphQL: Expose product specifications via
specificationsfield on all product types (SimpleProduct, ConfigurableProduct, ActiveVariantProduct, BundleProduct) - Added Saleable model method to check saleability against a given time frame.
checkout
- Added optional
username,passwordanduseTLSsettings to the redis place order lock and context store - Enhanced the cancellation flow with detailed reasons threading through the place-order process
- GraphQL: Added an optional
reasonargument to theCommerce_Checkout_CancelPlaceOrdermutation - Breaking:
placeorder.Coordinator.Cancelnow requires aCancellationReasonargument - Failed and cancelled payments now fail the place order process with the fixed reasons
payment process failedandpayment process cancelledinstead of the payment provider's error text
graphql
- Breaking: Cart, category, checkout and customer resolvers return generic errors such as
cart_general_errorand log the original error. Only these messages are kept:- cart: item not found, delivery not found, max quantity on qty update and product validation errors on add to cart
- checkout:
ErrNoPlaceOrderProcessand the final state error on cancel - category:
category_not_found
payment
- Breaking:
WebCartPaymentGateway.CancelOrderPaymentnow requires aCancellationReasonargument. Added theCancellationReasontype to the domain.
search
- Added
FacetMapperinterface andBindMultiregistry to allow custom facet types in GraphQL. Built-in facet types (ListFacet, TreeFacet, RangeFacet) are now registered as mappers. - Breaking: Removed
SearchResultDTO.Inject. DeprecatedWrapSearchResult, useSearchResultDTOFactory.NewSearchResultDTOinstead. SearchResultof the search application service now contains theActionsreturned by the search service
sourcing
- Extended Source model with SuppliedBy attribute
prices
- Extended Price Context with fields
FromandTo, meaning that this price is valid of the defined time frame.
dependencies
- Breaking: Go 1.26 or newer is required (was 1.23)
- Breaking: Projects with generated GraphQL code must regenerate it with gqlgen v0.17.95
- Updated flamingo.me/graphql to v1.13.0, gqlgen to v0.17.95 and gqlparser to v2.5.59
- Updated flamingo.me/flamingo/v3 to v3.17.4 and flamingo.me/dingo to v0.4.1. Dingo now fails at startup if modules depend on each other in a cycle.
What's Changed
- feat(search): expose actions in the search service by @lifedraft in #634
- chore(deps): bump github.com/go-jose/go-jose/v4 from 4.0.2 to 4.0.5 by @dependabot[bot] in #642
- chore(deps): bump golang.org/x/net from 0.35.0 to 0.36.0 by @dependabot[bot] in #648
- chore(deps): update flamingo version by @IvanMaidurov in #658
- chore: migrate golangci-lint to v2 by @kgrigorev in #660
- feat(cart): add custom attributes to applied discounts by @dylanprovost in #661
- feat(cart): add gateway to split qualifier by @IvanMaidurov in #663
- chore(deps): bump github.com/containerd/containerd from 1.7.18 to 1.7.27 by @dependabot[bot] in #650
- feat(payment): distinguish between internal gateway and actual payment gateway by @IvanMaidurov in #664
- feat(paymentselection): expose payment gateway in payment selection interface by @IvanMaidurov in #666
- chore: revert gateway by @IvanMaidurov in #667
- fix(cart): skip payment selection during cart merge if item addition fails by @IvanMaidurov in #669
- feat(cart): consider effective payment method in transactions by @IvanMaidurov in #670
- feat(checkout): add support for username,password and tls to redis by @IvanMaidurov in #671
- chore(deps): bump github.com/docker/docker from 27.1.1+incompatible to 28.0.0+incompatible by @dependabot[bot] in #673
- chore(deps): bump github.com/go-viper/mapstructure/v2 from 2.3.0 to 2.4.0 by @dependabot[bot] in #674
- chore(deps): update module github.com/gavv/httpexpect/v2 to v2.17.0 by @renovate[bot] in #645
- chore(deps): update module github.com/swaggo/swag to v1.16.6 by @renovate[bot] in #675
- chore(deps): update module github.com/gomodule/redigo to v1.9.3 by @renovate[bot] in #676
- chore(deps): update module github.com/swaggo/swag/cmd/swag to v1.16.6 by @renovate[bot] in #677
- chore(deps): update module flamingo.me/flamingo/v3 to v3.17.0 by @renovate[bot] in #678
- chore(deps): update module github.com/99designs/gqlgen to v0.17.81 by @renovate[bot] in #672
- chore(deps): update actions/checkout action to v5 by @renovate[bot] in #682
- chore(deps): update module golang.org/x/mod to v0.29.0 by @renovate[bot] in #681
- chore(deps): update actions/setup-go action to v6 by @renovate[bot] in #683
- chore(deps): update module github.com/testcontainers/testcontainers-go to v0.39.0 by @renovate[bot] in #654
- chore(deps): update module golang.org/x/text to v0.30.0 by @renovate[bot] in #647
- chore(deps): update module github.com/go-redsync/redsync/v4 to v4.14.0 by @renovate[bot] in #680
- chore(deps): update module github.com/rhymond/go-money to v1.0.15 by @renovate[bot] in #657
- chore(deps): update dependency go to v1.25.3 by @renovate[bot] in #644
- chore(deps): update module github.com/go-playground/form/v4 to v4.3.0 by @renovate[bot] in #679
- chore(deps): update module github.com/vektra/mockery/v2 to v2.53.5 by @renovate[bot] in #640
- chore(deps): update module github.com/vektah/gqlparser/v2 to v2.5.31 by @renovate[bot] in #684
- chore(deps): update module golang.org/x/text to v0.31.0 by @renovate[bot] in #691
- chore(deps): update module golang.org/x/mod to v0.30.0 by @renovate[bot] in #690
- chore(deps): bump golang.org/x/crypto from 0.43.0 to 0.45.0 by @dependabot[bot] in #692
- feat(product): expose product specifications in GraphQL by @lifedraft in #698
- chore(deps): update dependency go to v1.25.7 by @renovate[bot] in #686
- feat(cart): expose personal data form mutation in GraphQL by @dylanprovost in #699
- chore(deps): update golangci/golangci-lint-action action to v9 by @renovate[bot] in #689
- chore(deps): update dependency go to v1.26.0 by @renovate[bot] in #702
- chore(deps): update actions/checkout action to v6 by @renovate[bot] in #693
- feat(sourcing): add SuppliedBy field to identify supply location by @kgrigorev in #704
- feat(search): add FacetMapper extension point for custom facet types by @lifedraft in #710
- chore(config): migrate Renovate config by @renovate[bot] in #703
- chore(deps): update module flamingo.me/pugtemplate to v1.3.2 by @renovate[bot] in #701
- chore(deps): update dependency golangci/golangci-lint to v2.11.4 by @renovate[bot] in #711
- chore(deps): update module flamingo.me/flamingo/v3 to v3.17.3 by @renovate[bot] in #700
- chore(deps): update module golang.org/x/text to v0.36.0 by @renovate[bot] in #697
- chore(deps): update module golang.org/x/mod to v0.35.0 by @renovate[bot] in #696
- chore: fix add to cart by @KarolNowakk in #722
- docs(sourcing): fix grammar and spelling across sourcing module by @kgrigorev in #716
- feat(prices): add to and from times to the price context by @IvanMaidurov in #723
- fix(graphql): fix non nullable times by @IvanMaidurov in #725
- Add cancellation reason support for checkout and payment workflows by @kgrigorev in #724
- chore(deps): update actions/checkout action to v7 by @renovate[bot] in #726
- chore(deps): update module golang.org/x/mod to v0.37.0 by @renovate[bot] in #720
- chore(deps): update module golang.org/x/text to v0.38.0 by @renovate[bot] in #721
- chore(deps): update dependency golangci/golangci-lint to v2.12.2 by @renovate[bot] in #719
- chore(deps): update module github.com/testcontainers/testcontainers-go to v0.43.0 by @renovate[bot] in #713
- chore(deps): update module github.com/vektah/gqlparser/v2 to v2.5.35 by @renovate[bot] in #705
- chore(deps): bump go.opentelemetry.io/otel/sdk from 1.21.0 to 1.43.0 by @dependabot[bot] in #715
- chore(deps): bump github.com/go-jose/go-jose/v4 from 4.1.3 to 4.1.4 by @dependabot[bot] in #714
- chore(deps): bump go.opentelemetry.io/otel from 1.39.0 to 1.41.0 by @dependabot[bot] in #718
- feat(product): saleability check against given time range by @IvanMaidurov in #727
- fix(checkout): wrap payment validation error in custom error by @dylanprovost in #729
- feat(cart): expose all prices on the line item level by @dylanprovost in #736
- chore(deps): bump golang.org/x/crypto from 0.51.0 to 0.52.0 by @dependabot[bot] in #734
- chore: sanitize graphql error responses by @KarolNowakk in #740
- chore(deps): update module github.com/testcontainers/testcontainers-go to v0.44.0 by @renovate[bot] in #744
- chore(deps): update actions/setup-go action to v7 by @renovate[bot] in #737
- chore(deps): update dependency golangci/golangci-lint to v2.13.2 by @renovate[bot] in #742
- chore(deps): bump golang.org/x/net from 0.54.0 to 0.55.0 by @dependabot[bot] in #731
- chore(deps): update module github.com/stretchr/testify to v1.12.1 by @renovate[bot] in #749
- chore(deps): update module golang.org/x/mod to v0.41.0 by @renovate[bot] in #750
- chore(deps): bump github.com/gorilla/websocket from 1.5.0 to 1.5.3 by @dependabot[bot] in #739
- chore(deps): migrate mockery from v2 to v3 by @renovate[bot] in #662
- chore(deps): update module golang.org/x/text to v0.42.0 by @renovate[bot] in #752
- chore(deps): update dependency golangci/golangci-lint to v2.14.0 by @renovate[bot] in #753
- chore(deps): update module github.com/go-redsync/redsync/v4 to v4.18.0 by @renovate[bot] in #748
- chore(deps): update module flamingo.me/flamingo/v3 to v3.17.4 by @renovate[bot] in #735
- chore(deps): update module flamingo.me/dingo to v0.4.1 by @renovate[bot] in #728
- ci: scan dependencies with govulncheck by @kgrigorev in #755
- chore: update gqlparser and test on go.mod and latest Go by @renovate[bot] in #730
- chore: update form and align CI job names by @renovate[bot] in #747
- chore: update go-archive and run integration tests on go.mod and 1.* by @dependabot[bot] in #738
- chore(deps): update module github.com/99designs/gqlgen to v0.17.95 by @renovate[bot] in #741
- chore(deps): update module github.com/vektah/gqlparser/v2 to v2.5.59 by @renovate[bot] in #757
- chore(deps): update module flamingo.me/graphql to v1.13.0 by @renovate[bot] in #758
- chore(deps): update module flamingo.me/form to v1.1.4 by @renovate[bot] in #760
- chore(deps): update module flamingo.me/pugtemplate to v1.3.3 by @renovate[bot] in #761
- fix(cart): preserve cart errors after sanitizing by @KarolNowakk in #751
- fix(product): map built-in facets in WrapSearchResult by @kgrigorev in #764
- doc(changelog): prepare release v3.13.0 by @kgrigorev in #759
New Contributors
- @dylanprovost made their first contribution in #661
Full Changelog: v3.12.0...v3.13.0