Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
55 commits
Select commit Hold shift + click to select a range
14aad11
fix: skills now properly reference origin/canary and create changeset…
jorgemoya Mar 17, 2026
65c6a85
chore: audit lighthouse on commits to canary (#2931)
jorgemoya Mar 17, 2026
f3075ef
fix: use PKG_NAME in regression-tests workflow (#2933)
jorgemoya Mar 17, 2026
6a5b019
CATALYST-1570: fix(ui) - Reduce dropdown menu border width to match s…
chanceaclark Mar 19, 2026
866ce20
Update required version of Node in README.md (#2936)
BigEth4n Mar 19, 2026
59873b1
Update One-Click Catalyst flow to specify Node v24 (#2937)
BigEth4n Mar 19, 2026
a4b614d
fix: require Node.js v24 for create-catalyst, align engine constraint…
Copilot Mar 20, 2026
cba98e3
Version Packages (`canary`) (#2935)
github-actions[bot] Mar 20, 2026
c965f4d
fix: add repository field to published packages (#2941)
chanceaclark Mar 20, 2026
ac1e68c
Merge remote-tracking branch 'origin/canary' into sync-integrations-m…
chanceaclark Mar 20, 2026
b0a0bb6
Merge pull request #2942 from bigcommerce/sync-integrations-makeswift
chanceaclark Mar 20, 2026
91d8da7
Version Packages (`integrations/makeswift`) (#2943)
github-actions[bot] Mar 20, 2026
4479964
Update translations (#2945)
bc-svc-local Mar 23, 2026
e198d89
fix(core): adds root-level not found page (#2947)
jorgemoya Mar 24, 2026
66d2a7d
feat: upgrade @makeswift/runtime to 0.28.2 (#2952)
jorgemoya Mar 25, 2026
30ac2ab
Version Packages (`canary`) (#2946)
github-actions[bot] Mar 25, 2026
04224f4
Merge remote-tracking branch 'origin/canary' into sync-integrations-m…
jorgemoya Mar 25, 2026
ebb5ec6
chore: change @makeswift/runtime to 0.26.4 (#2955)
jorgemoya Mar 25, 2026
0037866
Version Packages (`integrations/makeswift`) (#2953)
github-actions[bot] Mar 25, 2026
620ac0e
fix(core): pin next to ~16.1.6 to prevent 16.2 bumps (#2956)
matthewvolk Mar 25, 2026
5a3ec0b
Merge remote-tracking branch 'origin/canary' into sync-integrations-m…
matthewvolk Mar 26, 2026
1a2b142
fix: improve regression-tests workflow structure and concurrency (#2948)
jorgemoya Mar 30, 2026
4870221
Update translations (#2959)
bc-svc-local Mar 30, 2026
09f649b
chore: add deployment for native hosting (#2835)
chanceaclark Mar 31, 2026
a8dd99e
fix(core): render hidden fields in DynamicForm to prevent NaN pageEnt…
chanceaclark Apr 1, 2026
a85fa42
feat(core): add X-Correlation-ID header to all GraphQL requests (#2976)
jorgemoya Apr 14, 2026
be980da
fix: exclude /brands path and add PLP brands sampling to unlighthouse…
jorgemoya Apr 14, 2026
225c4ef
test(cli): make path assertions OS-agnostic (#2990)
jorgemoya Apr 23, 2026
518d20a
fix(core): restore locale-aware lang attribute on html (#2989)
jorgemoya Apr 24, 2026
e18feb6
Update translations (#2987)
bc-svc-local Apr 24, 2026
fd1a8d4
Merge remote-tracking branch 'origin/canary' into sync-integrations-m…
jorgemoya Apr 24, 2026
9dff9d8
fix(makeswift): move MakeswiftProvider into locale layout, pass locale
jorgemoya Apr 24, 2026
ed76224
fix: update create-catalyst client id (#2993)
chanceaclark Apr 27, 2026
9f11983
chore: remove dead links in readme and update old docs links to new d…
parthshahp Apr 28, 2026
5b2dc08
Version Packages (`canary`)
chanceaclark Apr 30, 2026
ec92930
chore: add release-catalyst-patch skill for isolated patch releases (…
chanceaclark Apr 30, 2026
24cc310
fix(core): TRAC-294 show manual checkout discounts in cart summary (#…
bc-alexsaiannyi May 6, 2026
37e0a7c
fix(core): TRAC-275 align formField.required with field.required for …
mfaris9 May 8, 2026
77c8e8d
Update translations (#3008)
bc-svc-local May 11, 2026
b47ace7
fix(core): TRAC-277 translate Show more/less labels on product compar…
bc-yevhenii-buliuk May 12, 2026
13b3c2e
fix(core): TRAC-668 bump Next.js, React, and opennextjs/cloudflare fo…
chanceaclark May 13, 2026
bfafc56
Version Packages (`canary`)
chanceaclark May 13, 2026
3048ec2
Merge remote-tracking branch 'origin/canary' into sync-integrations-m…
chanceaclark May 13, 2026
20204c8
Version Packages (`integrations/makeswift`)
chanceaclark May 13, 2026
9aacfdc
fix(core): TRAC-293 pass customer token through routes and webpages (…
chanceaclark May 14, 2026
d00beeb
fix(core): TRAC-281 prevent breadcrumb cache mutation and stabilize f…
chanceaclark May 15, 2026
a792a86
TRAC-276: fix - gift certicate not translating fully (#3014)
parthshahp May 18, 2026
f4216a6
TRAC-525: fix - client.ts not using `Header` object for default value…
parthshahp May 19, 2026
7b38d98
TRAC-525: feat - add graphql proxy in middleware (#2825)
chanceaclark May 19, 2026
4e44415
fix(catalyst): TRAC-279 default brand PLP sort to featured (#3021)
mfaris9 May 21, 2026
c5fc1af
Update translations (#3022)
bc-svc-local May 29, 2026
3c96c47
Version Packages (`canary`) (#2961)
github-actions[bot] Jun 1, 2026
61f36d6
Merge remote-tracking branch 'origin/canary' into sync-integrations-m…
parthshahp Jun 1, 2026
bcd87c3
Version Packages (`integrations/makeswift`) (#3036)
github-actions[bot] Jun 2, 2026
6e71497
Merge tag '@bigcommerce/catalyst-makeswift@1.7.0' into sync-integrati…
chanceaclark Jul 29, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/sync-makeswift-1-7-0.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@bigcommerce/catalyst-b2b-makeswift": minor
---

Pulls in changes from the `@bigcommerce/catalyst-makeswift@1.7.0` release. For more information, see the [changelog entry](https://github.com/bigcommerce/catalyst/blob/c0ccea448eb99171a7505671d5f956a611512750/core/CHANGELOG.md#170).
233 changes: 233 additions & 0 deletions .claude/skills/release-catalyst-patch/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,233 @@
---
name: release-catalyst-patch
description: >
Release a single Catalyst package patch in isolation, without bundling it with
other queued changesets in the open Version Packages PR. Use when the user says
"/release-catalyst-patch", "isolate a patch release", "publish only one package",
or wants to ship a single package's changeset ahead of the normal release cadence.
Performs the full flow locally (`changeset version`, build, `changeset publish`,
push, GitHub release) so the remaining queued changesets stay untouched in the
Version Packages PR.
---

# Release Catalyst Patch (single-package isolation)

The Changesets GitHub Action picks one mode per push to `canary`: if any unconsumed
changesets exist, it opens/refreshes the Version Packages PR and **does not** publish.
That's why we publish locally — we keep the other changesets in `.changeset/` so the
Version Packages PR still tracks them, but we ship just the one we want now.

Execute stages in order. Pause for user input where indicated. **Never execute the
`changeset publish` command yourself** — provide it to the user to run.

## Stage 0: Confirm scope

Identify the changeset to release and the target package + version.

```bash
ls .changeset/
git log --oneline -10 # find the PR/commit that added the changeset
cat .changeset/<changeset-file>.md # confirm the package + bump type
npm view <package> version dist-tags # confirm current published state
```

Confirm with the user:
- Which `.changeset/*.md` file is being released
- The target package and the resulting version (e.g., `1.0.2` → `1.0.3`)
- That **all other** changesets in `.changeset/` should remain queued for the next regular release

If the package has notes in the [Package-specific notes](#package-specific-notes) section
below, review them before continuing.

## Stage 1: Branch + quarantine

Work on a release branch so the workflow doesn't trigger mid-flow.

```bash
git switch canary && git pull
git switch -c release/<package>-<new-version>
```

Move the **other** changesets **outside** the repo. A subdirectory inside `.changeset/`
gets parsed as a malformed changeset by the CLI and crashes `changeset version`:

```bash
mkdir -p /tmp/changeset-hold
mv .changeset/<other-1>.md .changeset/<other-2>.md ... /tmp/changeset-hold/
ls .changeset/ # should leave only config.json + the one changeset to release
```

## Stage 2: Run `changeset version`

Requires `GITHUB_TOKEN` because the repo uses `@changesets/changelog-github`. The `gh`
CLI token works.

```bash
pnpm install --frozen-lockfile
GITHUB_TOKEN=$(gh auth token) pnpm changeset version
```

Restore the held changesets immediately:

```bash
mv /tmp/changeset-hold/*.md .changeset/
rmdir /tmp/changeset-hold
```

Verify the diff:

```bash
git status
git diff packages/<package>/package.json packages/<package>/CHANGELOG.md
```

Expect: bumped `package.json`, new CHANGELOG entry, deleted only the one changeset.
The other changesets should be back in `.changeset/` and untouched.

## Stage 3: Build

Run the root build. Turborepo handles env passthrough from `.env.local` via the
pipeline config, so package builds get the variables they need without manual sourcing.

```bash
pnpm build
```

If a package has build-time secrets that must be present, see the
[Package-specific notes](#package-specific-notes) section for verification steps.

## Stage 4: Commit

```bash
git add -A
git commit -m "Version Packages (\`canary\`)"
```

Match the message format the changesets bot uses, since this is a manual stand-in for it.

## Stage 5: Hand the publish command to the user

**Do not run `changeset publish` from the agent.** Publishing to npm is a destructive,
externally-visible action that should be performed by the user.

Have the user confirm they're logged in, then run the publish themselves. The CLI will
prompt them interactively for the npm OTP.

```bash
npm whoami # expect their npm username
pnpm exec changeset publish # prompts for OTP interactively
```

`changeset publish` is per-package version-aware: it only publishes packages whose local
`package.json` is ahead of npm. Since only one package was bumped, only it ships. It
also creates a local git tag like `@bigcommerce/<package>@<version>`.

Wait for the user to confirm the publish completed before continuing.

## Stage 6: Verify npm state

```bash
npm view <package> version
npm view <package> dist-tags
```

`latest` should point to the new version. If it doesn't (rare — only happens if
`publishConfig.tag` is set), advise the user to fix with:

```bash
npm dist-tag add <package>@<version> latest
```

## Stage 7: Fast-forward canary and push

This requires a direct push to the protected default branch. **Pause and ask for explicit
user authorization** before pushing — the user's "never push directly to main/master/production"
rule guards against this even though the changesets bot does the same thing during normal
releases.

```bash
git switch canary
git fetch origin canary
git log --oneline origin/canary..canary # should be 1 ahead
git log --oneline canary..origin/canary # should be 0 behind
git merge --ff-only release/<package>-<new-version>
```

If you're 1 ahead and 0 behind, default `git push` rejects non-fast-forward updates,
which gives the same safety as `--ff-only` on the push side. Apple's git build (≤2.50.x)
does not accept `--ff-only` as a push flag — `git push origin canary` is correct here.

If a hook blocks the agent push, hand these commands to the user:

```bash
git push origin canary
git push origin "@bigcommerce/<package>@<new-version>"
```

## Stage 8: Create the GitHub release manually

CI runs `changeset publish` after the canary push, finds the version already on npm,
and no-ops. Because the action only creates GitHub releases for packages it actually
publishes, **no release is created automatically** in this flow. Make it manually.

Extract the new CHANGELOG section (everything after the `## <version>` heading up to
the next `## ` heading) into a notes file. Then:

```bash
gh release create "@bigcommerce/<package>@<new-version>" \
--repo bigcommerce/catalyst \
--title "@bigcommerce/<package>@<new-version>" \
--notes-file /tmp/release-notes.md
```

Match the body format of prior releases — just the `### Patch Changes` /
`### Minor Changes` heading and the bullets, no version heading at the top. Compare
against an existing release:

```bash
gh release view "@bigcommerce/catalyst-core@<some-prior-version>" --repo bigcommerce/catalyst --json body
```

## Stage 9: Final validation

```bash
git fetch origin canary
git log --oneline origin/canary -3 # version commit on canary
git ls-remote --tags origin "@bigcommerce/<package>@<new-version>" # tag on origin
gh release view "@bigcommerce/<package>@<new-version>" --repo bigcommerce/catalyst --json tagName,isDraft,isPrerelease
gh run list --workflow=changesets-release.yml --limit 1 # CI run succeeded
gh pr list --search "Version Packages (canary)" --state open --json number,headRefName,updatedAt # Version Packages PR refreshed
git fetch origin changeset-release/canary
git show --stat origin/changeset-release/canary | head -20 # confirm only the other changesets remain
npm view <package> version dist-tags
```

Report:
- Published version + dist-tag
- Canary commit SHA
- Tag pushed
- GitHub release URL
- Confirmation that the Version Packages PR now contains **only** the other changesets — the released one has been dropped from its scope.

## Stage 10: Cleanup

```bash
git branch -d release/<package>-<new-version>
```

## Package-specific notes

### `@bigcommerce/create-catalyst`

The CLI build (`tsup` via the package's `tsup.config.ts`) inlines `CLI_SEGMENT_WRITE_KEY`
at build time, falling back to the placeholder `'not-a-valid-segment-write-key'` if the
env var is missing. After Stage 3, verify the real key was embedded:

```bash
grep -c "not-a-valid-segment-write-key" packages/create-catalyst/dist/index.js
# expect: 0
```

If `1`, the env var wasn't loaded. Confirm `CLI_SEGMENT_WRITE_KEY` exists in `.env.local`,
and that the turbo pipeline for `build` declares it under `env` or `passThroughEnv` in
`turbo.json`. Re-run `pnpm build` after fixing.
2 changes: 1 addition & 1 deletion .claude/skills/release-catalyst/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ Invoke the `/sync-makeswift` skill, with one addition: during the sync (after me

**Determine bump type**: Match the bump type from Stage 1 (e.g., if core went `1.4.2` → `1.5.0`, that's a `minor`).

**Create changeset file** (`.changeset/sync-canary-<version>.md`):
**Create changeset file** (`.changeset/sync-canary-<version>.md`, where `<version>` uses hyphens instead of dots — e.g., `1.6.0` → `sync-canary-1-6-0.md`). Changeset filenames only allow lowercase letters and hyphens; dots are invalid.

```markdown
---
Expand Down
3 changes: 2 additions & 1 deletion .claude/skills/sync-makeswift/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ Execute the following phases in order. Pause for user input where indicated.
```bash
git fetch origin
git checkout -B sync-integrations-makeswift origin/integrations/makeswift
git merge canary
git merge origin/canary
```

If the merge completes cleanly, skip to changeset cleanup. Otherwise, resolve conflicts.
Expand Down Expand Up @@ -78,5 +78,6 @@ Switch back to `canary` and delete the local branches that are no longer needed:

```bash
git checkout canary
git pull
git branch -D sync-integrations-makeswift integrations/makeswift
```
1 change: 1 addition & 0 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ BIGCOMMERCE_STORE_HASH=
# A JWT Token for accessing the Storefront API. Enables server-to-server requests if allowed_cors_origins is omitted.
# See https://developer.bigcommerce.com/docs/rest-authentication/tokens#storefront-tokens
BIGCOMMERCE_STOREFRONT_TOKEN=
BIGCOMMERCE_STOREFRONT_UNAUTHENTICATED_TOKEN=

# A store-level API account token used for REST API actions. Optional by default, but required in
# order for some components to work properly. For example, the `CustomerGroupSlot` Makeswift component
Expand Down
Loading
Loading