Skip to content

Release January 20, 2026#2582

Open
github-actions[bot] wants to merge 192 commits into
mainfrom
changeset-release/from-canary
Open

Release January 20, 2026#2582
github-actions[bot] wants to merge 192 commits into
mainfrom
changeset-release/from-canary

Conversation

@github-actions
Copy link
Copy Markdown
Contributor

Automated release PR from canary branch

@vercel
Copy link
Copy Markdown

vercel Bot commented Jan 20, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
graphcommerce-246 Ready Ready Preview Jun 1, 2026 11:52am
graphcommerce-247 Ready Ready Preview Jun 1, 2026 11:52am
graphcommerce-hygraph-dynamic-rows-ui Ready Ready Preview Jun 1, 2026 11:52am
graphcommerce-open-source Ready Ready Preview Jun 1, 2026 11:52am
graphcommerce-storyblok Ready Ready Preview Jun 1, 2026 11:52am

Request Review

paales and others added 30 commits May 20, 2026 14:50
…t route

Earlier wording suggested adding a `pages/test/<feature>.tsx` demo route
counted as a showcase. It does not — that route lives outside the real
flow, reviewers don't walk through it, and the integration with the
storefront stays unproven.

Replace the section with a stricter rule: every feature PR must wire
the feature into one of the existing example storefronts so it is
visible on a real page (product page, account flow, cart page, etc.).
The PR's "Test plan" must name the URL the reviewer opens to see it
working, and any backend prerequisites (Magento product config, Hygraph
content) must be called out.
…k-with-private-packages

docs: clarify type-check workflow with private packages
`SidebarGallery` was spreading only `src`, `width`, `height`, `loading`,
`sx`, `sizes`, and `alt` onto each `MotionImageAspect`. The `Additional`
component and `slotProps` set by `ProductPageGallery` for video entries
were silently dropped, so `<ProductVideo>` (and now `<YoutubeEmbed>`)
never reached the DOM — every gallery video slide rendered as a static
image with no play button at all.

Spread the full `image` props onto `MotionImageAspect` instead, and
merge `image.sx` into the gallery's default `{ display: 'block',
objectFit: 'contain' }` via `sxx` so the per-image `objectFit: 'cover'`
that ProductPageGallery sets for non-image slides also takes effect.

Also: fix playwright.config.ts so `npx playwright test` actually loads.
The previous config imported `examples/magento-graphcms/next.config.ts`,
which transitively pulls `@graphcommerce/next-config`'s ESM build into
a CJS context and crashes Playwright's TS loader with
`ReferenceError: exports is not defined in ES module scope`. The
import was only used to read i18n locales for multi-locale project
generation; replace it with an opt-in `PLAYWRIGHT_LOCALES=nl,de` env
var so the default config no longer touches Next.js internals.

Add the first playwright test for this PR's showcase:
`packages/magento-product/test/youtubeEmbedInGallery.playwright.ts`
navigates to a product with a YouTube video in its media gallery,
asserts that `YoutubeEmbed-root` is present, that the poster comes
from the Magento preview image (not `i.ytimg.com`), that hovering
adds the `<link rel="preconnect">` to YouTube, and that clicking
swaps in the iframe with the expected video id and `autoplay=1`.
`PRODUCT_URL` and `EXPECTED_YOUTUBE_ID` env vars override the
backend-specific defaults.
`npx playwright test` writes `test-results/.last-run.json` (and a full
`playwright-report/` on failures) next to the runner. These are local
artifacts, not source — exclude them from git.
The existing single-line mention ("E2E tests use Playwright: yarn
playwright") doesn't say where the tests live, how to install the
browsers, how to point them at a non-default port/backend, or that
they require a running storefront. Expand it so new contributors can
actually run the suite (and so it's clear that adding new tests means
dropping a `<feature>.playwright.ts` next to the package).

Also documents the `URL` and `PLAYWRIGHT_LOCALES` env vars used by
`playwright.config.ts` after the ESM-loader fix in PR #2627.
The existing single-line mention ("E2E tests use Playwright: yarn
playwright") doesn't say where the tests live, how to install the
browsers, how to point them at a non-default port/backend, or that
they require a running storefront. Expand it so new contributors can
actually run the suite (and so it's clear that adding new tests means
dropping a `<feature>.playwright.ts` next to the package).

Also documents the `URL` and `PLAYWRIGHT_LOCALES` env vars used by
`playwright.config.ts` after the ESM-loader fix in #2627.
…k-with-private-packages

docs: document the playwright e2e workflow
The `parses an env config object` test feeds the env-schema parser
`GC_DEMO_MODE='1'`, `GC_STOREFRONT_0_HYGRAPH_LOCALES_0='en'`, and
`GC_STOREFRONT_1_HYGRAPH_LOCALES_0='de'`, but the committed snapshot
still reflects the pre-`demoMode` / pre-flattened-`hygraphLocales`
schema. Every CI run since those config fields were added (and the
test input updated) has failed the `test` job on every PR with a
snapshot mismatch unrelated to the PR's own changes:

  Snapshot \`parses an env config object 1\` mismatched
  + "GC_DEMO_MODE": true,
  + "GC_STOREFRONT_0_HYGRAPH_LOCALES_0": "en",
  + "GC_STOREFRONT_1_HYGRAPH_LOCALES_0": "de",

Update the snapshot to match the schema. No code change.
test(next-config): regenerate mergeEnvIntoConfig snapshot to unblock CI
Default Fab size is `large` (54px). Without filtering on variant, every
`<Fab variant="extended">` without an explicit size matched the
`large` rule and got `width: 54px, height: 54px` applied, collapsing
extended Fabs to a fixed square regardless of their label. Scope the
size variants to `variant: 'circular'` so extended Fabs grow with
their label (consumers control the floor via `min-width`).
fix(next-ui): scope MuiFabSizes width/height to circular Fabs
feat(next-ui): add YoutubeEmbed component
Adds a per-storefront storyblokLocale config to map GraphCommerce locales to
Storyblok language codes, and refetches stories + global config client-side
in the editor's selected language so previews match the editor sidebar
regardless of which storefront the page renders in.
cosmiconfig's built-in synchronous TypeScript loader transpiles
`graphcommerce.config.ts` to a fixed `.cjs` path on disk and removes it
again in the finally block. When Next.js (especially Turbopack) spawns
worker processes that load the config concurrently, one process can
delete the file while another is still trying to require it — producing
panics like "Cannot find module …graphcommerce.config.cjs".

Replace the `.ts` loader with one that uses `@swc/core`'s
`transformFileSync` and writes to a per-process unique filename:

  .graphcommerce.tmp.<pid>-<counter>.cjs

next to the source. Unique filenames mean concurrent workers can't
collide on the temp path; placing it next to the source keeps any
relative `require()` in the config resolvable. The file is removed in
the finally block as before.

No new dependencies and no API change — `loadConfig` stays sync, so all
existing callsites (`withGraphCommerce`, the CLI commands, mesh, etc.)
keep working unchanged.
…y through

Cursor: The issue was a TTY handling bug in graphql-codegen's CLI. When running in Cursor's terminal without a proper TTY:
The spinner/progress output was suppressed
The exit code was incorrectly set to 1

The fix was to pipe gc-gql-codegen through cat, which forces proper output handling
Sync Storyblok content with the Visual Editor's selected language
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants