Skip to content

feat: update release process#1210

Open
nickolas-dimitrakas wants to merge 53 commits intoworkstation/3.0-Releasefrom
feat/update-release-process-for-dist
Open

feat: update release process#1210
nickolas-dimitrakas wants to merge 53 commits intoworkstation/3.0-Releasefrom
feat/update-release-process-for-dist

Conversation

@nickolas-dimitrakas
Copy link
Copy Markdown
Contributor

@nickolas-dimitrakas nickolas-dimitrakas commented Mar 12, 2026

Background

  • The SDK's kit integrations were previously maintained as separate standalone repositories. This PR consolidates all kit packages into the core Web SDK monorepo under a new kits/ directory, and updates the release pipeline to build and publish kit assets alongside the core SDK.

What Has Changed

  • package.json exports: Added ESM file entries across all kit package.json files; IIFE files also included where missing
  • scripts/release.sh: Extended to build kit bundles, stage their dist/ output, and bump kit package.json versions to match the core SDK release version
  • release.config.js: Updated to support the new multi-package release flow
  • CI workflows: Removed legacy release.yml; updated staging-step-1.yml to orchestrate kit builds and publishing; added pull-request.yml for PR-level checks; fixed trigger frequency across workflows
  • Resolved sub-package publishing issues for Adobe and GA4 kits, corrected release branch checkout step, fixed package.json file path typos

Checklist

  • I have performed a self-review of my own code.
  • I have made corresponding changes to the documentation.
  • I have added tests that prove my fix is effective or that my feature works.
  • I have tested this locally.

Additional Notes

  • This is a breaking change to the release process (feat!). Releasing the core SDK will now also build and publish all kit bundles in lockstep.

Reference Issue (For employees only. Ignore if you are an outside contributor)

  • Closes NO JIRA

Note

High Risk
High risk because it rewires CI/release automation to build, commit, version-bump, and publish many kit packages alongside the core SDK; failures could block or corrupt releases across multiple artifacts.

Overview
Reworks the GitHub Actions and semantic-release flow to treat kits/ as first-class release artifacts. CI workflows switch several jobs to workflow_call, add PR-level invocations for Android bridge and BrowserStack runs, and remove the legacy release.yml in favor of staging/release orchestration.

Updates the release implementation to build and commit kit outputs and keep kit versions in lockstep. scripts/release.sh now builds the core bundle, iterates kits/matrix.json to install/build each kit, stages all dist/ directories, and bumps every kit package.json version before committing; release.config.js expands release rules (breaking/perf) and commits all package.json/package-lock.json changes repo-wide.

Standardizes kit packaging for module consumers. Many kit package.json/rollup.config.js files are updated to generate and publish esm bundles (and include missing iife/files entries), with kits/matrix.json split to target Adobe/GA4 subpackages and Adobe’s build inputs adjusted to use a temporary bundle input file.

Written by Cursor Bugbot for commit 0162689. This will update automatically on new commits. Configure here.

nickolas-dimitrakas and others added 30 commits March 5, 2026 16:15
* feat: migrate amplitude

* formatting

* added job to build and run kit tests

* align pull request workflow

* slight pull request needs adjustments

* add kits to release process

* add homepage url

* Revert "slight pull request needs adjustments"

This reverts commit aaf8416.

* reuse mockhttprequest from root

* address @alexs-mparticle comments

* add mparticle core dependency

* only use root .gitignore

* use root prettier

* inherit from root eslintrc

* cleanup kit directory readme

* restore original readme

* peerDependency already states mP Core

* cleanup matrix

* update to kit track package name

* adjust semantic release to update kit versions in lock step

* pass proper commit sha

* unique artifact names and align jest matrix

* add cleanup step for deleting release branch

* publish kits upon success of core and fix issues in implementation

* Configure dependabot for amplitude kit track

* Update kits/README.md

Co-authored-by: Robert Ing <rmi22186@gmail.com>

* run format to fix ci

* add canonical repo chart in readme

* addressed @rmi22186 comments

---------

Co-authored-by: Robert Ing <rmi22186@gmail.com>
* feat: migrate OneTrust kit to monorepo

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(ci): apply prettier formatting to onetrust kit

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
* feat: migrate Intercom kit to monorepo

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(ci): apply prettier formatting to intercom kit

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
* feat: migrate Optimizely kit to monorepo

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(ci): apply prettier formatting to optimizely kit

* chore: revert matrix.json to base branch (will re-add kit entry separately)

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
* feat: migrate Criteo kit to monorepo

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(ci): apply prettier formatting to criteo kit

* chore: revert matrix.json to base branch (will re-add kit entry separately)

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
* feat: migrate SimpleReach kit to monorepo

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(ci): apply prettier formatting to simplereach kit

* chore: revert matrix.json to base branch (will re-add kit entry separately)

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
* feat: migrate Dynamic Yield kit to monorepo

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(ci): apply prettier formatting to dynamic-yield kit

* chore: revert matrix.json to base branch (will re-add kit entry separately)

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
* feat: migrate Google Tag Manager kit to monorepo

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(ci): apply prettier formatting to google-tag-manager kit

* chore: revert matrix.json to base branch (will re-add kit entry separately)

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
* feat: migrate Rokt kit to monorepo

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(ci): apply prettier formatting to rokt kit

* chore: revert matrix.json to base branch (will re-add kit entry separately)

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
* feat: migrate Heap kit to monorepo

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(ci): apply prettier formatting to heap kit

* chore: revert matrix.json to base branch (will re-add kit entry separately)

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
* feat: migrate Inspectlet kit to monorepo

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(ci): apply prettier formatting to inspectlet kit

* chore: revert matrix.json to base branch (will re-add kit entry separately)

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
* feat: migrate KissMetrics kit to monorepo

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(ci): apply prettier formatting to kissmetrics kit

* chore: revert matrix.json to base branch (will re-add kit entry separately)

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
* feat: migrate DoubleClick kit to monorepo

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(ci): apply prettier formatting to doubleclick kit

* chore: revert matrix.json to base branch (will re-add kit entry separately)

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
* feat: migrate Adwords kit to monorepo

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(ci): apply prettier formatting to adwords kit

* chore: revert matrix.json to base branch (will re-add kit entry separately)

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
* feat: migrate Facebook kit to monorepo

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(ci): apply prettier formatting to facebook kit

* chore: revert matrix.json to base branch (will re-add kit entry separately)

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
* feat: migrate Taplytics kit to monorepo

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(ci): apply prettier formatting to taplytics kit

* chore: revert matrix.json to base branch (will re-add kit entry separately)

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
* feat: migrate Bing Ads kit to monorepo

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(ci): apply prettier formatting to bingads kit

* chore: revert matrix.json to base branch (will re-add kit entry separately)

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
* feat: migrate Adobe Target kit to monorepo

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(ci): apply prettier formatting to adobe-target kit

* chore: revert matrix.json to base branch (will re-add kit entry separately)

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
* feat: migrate Twitter kit to monorepo

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(ci): apply prettier formatting to twitter kit

* chore: revert matrix.json to base branch (will re-add kit entry separately)

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
* feat: migrate Device Match kit to monorepo

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(ci): apply prettier formatting to device-match kit

* chore: revert matrix.json to base branch (will re-add kit entry separately)

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
* feat: migrate mparticle-javascript-integration-localytics-4 to monorepo

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* chore: revert matrix.json to base branch (will re-add kit entry separately)

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
* feat: migrate mparticle-javascript-integration-id5-1 to monorepo

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* chore: revert matrix.json to base branch (will re-add kit entry separately)

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
* feat: migrate mparticle-javascript-integration-leanplum-1 to monorepo

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* chore: revert matrix.json to base branch (will re-add kit entry separately)

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
* feat: migrate mparticle-javascript-integration-mixpanel-2 to monorepo

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* chore: revert matrix.json to base branch (will re-add kit entry separately)

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
* feat: migrate mparticle-javascript-integration-braze-3 to monorepo

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* chore: revert matrix.json to base branch (will re-add kit entry separately)

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
* feat: migrate mparticle-javascript-integration-braze-4 to monorepo

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* chore: revert matrix.json to base branch (will re-add kit entry separately)

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
* feat: migrate mparticle-javascript-integration-braze-5 to monorepo

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* chore: revert matrix.json to base branch (will re-add kit entry separately)

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
* feat: migrate adobe kit to monorepo

Migrates mparticle-javascript-integration-adobe into the web SDK
monorepo under kits/adobe/.

The Adobe kit uses a repo-level build and test orchestration — the
root rollup.config.js concatenates AdobeSDKs vendor files with each
package's source before bundling, and tests run from the root using
Jest with MODULE env vars. The full repo structure is preserved under
kits/adobe/ to keep this working correctly.

Structure:
- kits/adobe/packages/AdobeClient  (@mparticle/web-adobe-client-kit v2.1.3)
- kits/adobe/packages/AdobeServer  (@mparticle/web-adobe-server-kit v2.1.2)
- kits/adobe/HeartbeatKit
- kits/adobe/AdobeSDKs             (VisitorAPI.js, AppMeasurement.js)
- kits/adobe/test                  (Jest tests for client + server)
- Updated package.json repository field to point to monorepo
- Added kits/adobe to kits/matrix.json for CI coverage

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(ci): exclude adobe vendor files from prettier and kit tests from jest

- Add kits/adobe/AdobeSDKs/ and babel.config.js to .prettierignore to
  exclude third-party vendor files from formatting checks
- Add testPathIgnorePatterns to jest.config.js to prevent root jest
  runner from picking up kit test files (kits use karma, not jest)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(ci): create dist directories before build in adobe kit

Fresh git checkouts don't include empty dist/ directories (git doesn't
track empty directories and .gitignore excludes dist/). Add mkdir -p to
the build:client:* and build:server:* scripts so the build succeeds
in a clean CI environment.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(ci): add missing suffix to adobe server kit test config

Server kit registers with suffix 'Server' creating key 'Adobe-Server'
in mParticle's forwarder constructors map. Without suffix: 'Server' in
the test kitConfig, configureUIEnabledKit cannot match the constructor
and initForwarder is never called, causing all integration tests to fail.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* refactor(jest): narrow testPathIgnorePatterns to kits/adobe only

Previously excluded all kits/ which was overly broad. Only the Adobe
kit uses Jest (with test.js / server.test.js filenames that match
Jest's default testMatch). Other kits use Karma and name their files
tests.js (plural), so they don't need an explicit exclusion.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* refactor(jest): remove redundant node_modules from testPathIgnorePatterns

Jest ignores node_modules by default; the explicit entry was unnecessary.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* refactor(adobe): align prettier config with root, add eslintrc root flag

- Remove kits/adobe/.prettierrc so Adobe inherits root prettier settings.
  Only difference was trailingComma: "none" vs root's "es5"; Adobe source
  files reformatted accordingly (trailing commas added, no logic changes).
- Update .prettierignore: remove kits/adobe/babel.config.js (no longer
  needed once trailing comma conflict is resolved); keep AdobeSDKs/ vendor
  exclusion.
- Add "root": true to kits/adobe/.eslintrc to prevent ESLint from walking
  up to root config when run from within the kit directory.

Part of ongoing effort to consolidate all configs at the repo root.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
* feat: migrate google-analytics-4 kit to monorepo

Migrates GA4Client and GA4Server packages from
mparticle-javascript-integration-google-analytics-4 into the web SDK
monorepo under kits/google-analytics-4/.

- kits/google-analytics-4/ga4-client (@mparticle/web-google-analytics-4-client-kit v1.5.1)
- kits/google-analytics-4/ga4-server (@mparticle/web-google-analytics-4-server-kit v1.0.3)
- Updated package.json repository fields to point to monorepo
- Added both kits to kits/matrix.json for CI coverage
- Applied Prettier formatting to match monorepo code style conventions

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(ci): add missing karma devDependencies to ga4-server

The test script calls karma but karma was missing from devDependencies.
Add karma and browser launcher packages to match the ga4-client kit.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(ci): regenerate ga4-server package-lock.json with karma deps

Updating package-lock.json to include karma and browser launcher
packages added in the previous commit.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(ci): pin chai to v4 for karma-chai compatibility in ga4-server

karma-chai@0.1.0 requires chai v4's browser bundle at chai/chai.js.
chai v6 changed its file structure, breaking that path. Pinning
chai to ^4.2.0 restores the expected bundle location.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(ga4): restore correct kit structure and consolidate matrix entry

The original mparticle-javascript-integration-google-analytics-4 repo
used a packages/GA4Client + packages/GA4Server layout with a root
package.json orchestrator. The migration commit incorrectly flattened
this to ga4-client/ and ga4-server/ at the top level and omitted the
root package.json.

This commit:
- Moves ga4-client/ → packages/GA4Client/ (git mv, history preserved)
- Moves ga4-server/ → packages/GA4Server/ (git mv, history preserved)
- Updates repository.directory in each sub-kit's package.json
- Adds root package.json with build/test scripts that delegate to each
  sub-package via npm --prefix
- Adds root package-lock.json (no root deps; required for npm ci)
- Collapses the two matrix entries into a single "Google Analytics 4"
  entry pointing to kits/google-analytics-4

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(ga4): add missing root config files omitted from migration

Restores the root-level config files that existed in the original
mparticle-integrations/mparticle-javascript-integration-google-analytics-4
repo but were not included in the monorepo migration:

- .eslintrc  — eslint + prettier config (root: true)
- .gitignore — ignores node_modules
- .prettierrc — singleQuote, trailingComma: es5, tabWidth: 4
- README.md  — usage docs for both client and server kits

Also updates package.json description to match the original.
The .github/workflows/ are omitted as the monorepo has its own CI.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
* feat(matrix): update kit matrix with all migrated kits and braze-6

Merges workstation/3.0-Release and adds all 28 kits to matrix.json:
- Braze 3/4/5 (merged), Braze 6 (open PR)
- Adobe Target, Adwords, Amplitude 8, Bing Ads
- Criteo, Device Match, DoubleClick, Dynamic Yield
- Facebook, Google Tag Manager, Heap, ID5 1
- Inspectlet, Intercom, KissMetrics, Leanplum 1
- Localytics 4, Mixpanel 2, OneTrust, Optimizely
- Rokt, SimpleReach, Taplytics, Twitter

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix: correct iife filename typo in KissMetrics rollup config

Fixes output filename from KissMetricsForwarder.iffe.js to
KissMetricsForwarder.iife.js.

Made-with: Cursor

* remove dist from root gitignore

* Revert "remove dist from root gitignore"

This reverts commit 2b12aca.

* chore(matrix): remove braze-6 until PR #1194 merges

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Also exclude .claude/ worktrees from prettier checks.

#agentic
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR consolidates and modernizes the Web SDK release process to build and publish kit packages from the monorepo (kits/), adding ESM artifacts and updating CI workflows to test and release kits alongside the core SDK.

Changes:

  • Extend the release script and semantic-release config to build/commit kit dist outputs and align kit versions with the SDK release version.
  • Add ESM (and missing IIFE) bundle outputs and metadata across many kit packages (rollup + package.json updates).
  • Update GitHub Actions workflows to support kit testing against a locally packed SDK and add post-release kit lockfile refresh automation.

Reviewed changes

Copilot reviewed 61 out of 63 changed files in this pull request and generated 10 comments.

Show a summary per file
File Description
scripts/release.sh Builds core dist + kit bundles, stages/commits dist outputs, and bumps kit versions during release.
release.config.js Adjusts semantic-release rules and broadens committed assets to cover monorepo packages/locks.
kits/matrix.json Splits GA4 and Adobe entries into client/server package paths for the new monorepo layout.
kits/twitter/rollup.config.js Adds ESM output build.
kits/twitter/package.json Publishes common/esm/iife artifacts and sets module.
kits/taplytics/rollup.config.js Adds ESM output build.
kits/taplytics/package.json Publishes common/esm/iife artifacts and sets module.
kits/simplereach/rollup.config.js Adds ESM output build.
kits/simplereach/package.json Publishes common/esm/iife artifacts and sets module.
kits/rokt/rollup.config.js Adds ESM output build.
kits/rokt/package.json Publishes common/esm/iife artifacts and sets module.
kits/optimizely/rollup.config.js Adds ESM production build variant.
kits/optimizely/package.json Publishes common/esm/iife artifacts and sets module.
kits/onetrust/package.json Adds ESM/iife artifacts and module metadata.
kits/mixpanel/mixpanel-2/rollup.config.js Adds ESM output build.
kits/mixpanel/mixpanel-2/package.json Publishes common/esm/iife artifacts and sets module.
kits/localytics/localytics-4/rollup.config.js Adds ESM output build.
kits/localytics/localytics-4/package.json Publishes common/esm/iife artifacts and sets module.
kits/leanplum/leanplum-1/rollup.config.js Adds ESM output build.
kits/leanplum/leanplum-1/package.json Publishes common/esm/iife artifacts and sets module.
kits/kissmetrics/package.json Adds ESM/iife artifacts and module metadata.
kits/intercom/rollup.config.js Adds ESM output build.
kits/intercom/package.json Publishes common/esm/iife artifacts and sets module.
kits/inspectlet/package.json Adds ESM/iife artifacts and module metadata.
kits/id5/id5-1/package.json Adds ESM/iife artifacts and module metadata.
kits/heap/package.json Adds ESM/iife artifacts and module metadata.
kits/google-tag-manager/package.json Adds ESM/iife artifacts and module metadata.
kits/google-analytics-4/packages/GA4Server/rollup.config.js Adds ESM output build.
kits/google-analytics-4/packages/GA4Server/package.json Publishes common+esm artifacts and sets module.
kits/google-analytics-4/packages/GA4Client/rollup.config.js Adds ESM production build variant.
kits/google-analytics-4/packages/GA4Client/package.json Publishes common+esm artifacts and sets module.
kits/facebook/package.json Adds missing IIFE artifact to published files.
kits/dynamic-yield/rollup.config.js Adds ESM output build.
kits/dynamic-yield/package.json Publishes common/esm/iife artifacts and sets module.
kits/doubleclick/rollup.config.js Adds ESM output build.
kits/doubleclick/package.json Publishes common/esm/iife artifacts and sets module.
kits/device-match/rollup.config.js Adds ESM output build.
kits/device-match/package.json Publishes common/esm/iife artifacts and sets module.
kits/criteo/rollup.config.js Adds ESM output build.
kits/criteo/package.json Publishes common/esm/iife artifacts and sets module.
kits/braze/braze-5/package.json Adds missing IIFE artifact to published files.
kits/braze/braze-4/rollup.config.js Adds ESM output build.
kits/braze/braze-4/package.json Publishes common/esm/iife artifacts and sets module.
kits/braze/braze-3/rollup.config.js Adds ESM output build.
kits/braze/braze-3/package.json Publishes common/esm/iife artifacts and sets module.
kits/bingads/rollup.config.js Adds ESM output build.
kits/bingads/package.json Publishes common/esm/iife artifacts and sets module.
kits/adwords/rollup.config.js Adds ESM output build.
kits/adwords/package.json Publishes common/esm/iife artifacts and sets module (and fixes dist filename typo).
kits/adobe/packages/AdobeServer/package.json Converts to monorepo-driven build/test scripts and publishes common+iife outputs.
kits/adobe/packages/AdobeServer/package-lock.json Adds/updates lockfile for the AdobeServer package.
kits/adobe/packages/AdobeClient/package.json Converts to monorepo-driven build/test scripts and publishes common+iife outputs.
kits/adobe/packages/AdobeClient/package-lock.json Updates lockfile format/version for the AdobeClient package.
kits/adobe/package.json Marks the Adobe aggregator package as private.
kits/adobe-target/rollup.config.js Adds ESM production build variant.
kits/adobe-target/package.json Publishes common/esm/iife artifacts and sets module (and fixes dist filename typo).
.github/workflows/staging-step-1.yml Builds SDK tarball for kit tests, runs kit tests against packed SDK, publishes kits, and refreshes kit lockfiles post-release.
.github/workflows/release.yml Removes the legacy release workflow.
.github/workflows/pull-request.yml Adds BrowserStack and Android bridge tests via reusable workflows.
.github/workflows/cross-browser-testing.yml Changes triggers to workflow_call/workflow_dispatch only.
.github/workflows/cross-browser-testing-beta.yml Changes triggers to workflow_call/workflow_dispatch only.
.github/workflows/android-bridge-tests.yml Changes trigger to workflow_call.
Files not reviewed (2)
  • kits/adobe/packages/AdobeClient/package-lock.json: Language not supported
  • kits/adobe/packages/AdobeServer/package-lock.json: Language not supported

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

You can also share your feedback on Copilot code review. Take the survey.

Comment on lines +16 to +23
echo '---------- Begin build kit bundles ----------'
if [ -f kits/matrix.json ]; then
jq -r '.[].local_path' kits/matrix.json | while read KIT_PATH; do
npm pkg set version="$VERSION" --prefix "$KIT_PATH"
echo "Updated $KIT_PATH/package.json to $VERSION"
done
while IFS= read -r KIT_PATH; do
echo "Installing dependencies for $KIT_PATH..."
npm ci --prefix "$KIT_PATH"
echo "Building $KIT_PATH..."
npm run build --prefix "$KIT_PATH"
done < <(jq -r '.[].local_path' kits/matrix.json)
…ectlet, onetrust

Also harden staging-step-1 kit lock-file loop with IFS= read -r.

#agentic
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates the Web SDK monorepo release process to build, version-bump, test, and publish kit packages (under kits/) alongside the core SDK, including adding ESM artifacts/metadata for many kits and updating CI workflows to support the new flow.

Changes:

  • Extended the release script and semantic-release config to build/stage kit bundles and align kit package versions with the core SDK release version.
  • Added ESM Rollup outputs and updated kit package.json metadata (files, module) to publish ESM/IIFE artifacts where applicable.
  • Updated GitHub Actions workflows to run kit tests against a locally packed SDK, adjust workflow triggers, and add post-release kit lockfile refresh automation.

Reviewed changes

Copilot reviewed 67 out of 69 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
scripts/release.sh Builds core + kits, stages kit dist/, bumps kit versions, and commits release artifacts.
release.config.js Updates semantic-release rules, uses bash for prepare, and broadens committed release assets to multi-package scope.
kits/twitter/rollup.config.js Adds ESM bundle output for the Twitter kit.
kits/twitter/package.json Publishes ESM/IIFE outputs via files and adds module entry.
kits/taplytics/rollup.config.js Adds ESM bundle output for the Taplytics kit.
kits/taplytics/package.json Publishes ESM/IIFE outputs via files and adds module entry.
kits/simplereach/rollup.config.js Adds ESM bundle output for the SimpleReach kit.
kits/simplereach/package.json Publishes ESM/IIFE outputs via files and adds module entry.
kits/rokt/rollup.config.js Adds ESM bundle output for the Rokt kit.
kits/rokt/package.json Adds ESM artifact to files and sets module entry.
kits/optimizely/rollup.config.js Adds ESM build variant for production builds.
kits/optimizely/package.json Publishes ESM/IIFE outputs via files and adds module entry.
kits/onetrust/rollup.config.js Adds ESM bundle output for the OneTrust kit.
kits/onetrust/package.json Publishes ESM/IIFE outputs via files and adds module entry.
kits/mixpanel/mixpanel-2/rollup.config.js Adds ESM bundle output for Mixpanel v2 kit.
kits/mixpanel/mixpanel-2/package.json Publishes ESM/IIFE outputs via files and adds module entry.
kits/matrix.json Splits GA4 and Adobe entries into distinct client/server package paths.
kits/localytics/localytics-4/rollup.config.js Adds ESM bundle output for Localytics v4 kit.
kits/localytics/localytics-4/package.json Publishes ESM/IIFE outputs via files and adds module entry.
kits/leanplum/leanplum-1/rollup.config.js Adds ESM bundle output for Leanplum v1 kit.
kits/leanplum/leanplum-1/package.json Publishes ESM/IIFE outputs via files and adds module entry.
kits/kissmetrics/rollup.config.js Adds ESM bundle output for Kissmetrics kit.
kits/kissmetrics/package.json Publishes ESM/IIFE outputs via files and adds module entry.
kits/intercom/rollup.config.js Adds ESM bundle output for Intercom kit.
kits/intercom/package.json Publishes ESM/IIFE outputs via files and adds module entry.
kits/inspectlet/rollup.config.js Adds ESM bundle output for Inspectlet kit.
kits/inspectlet/package.json Publishes ESM/IIFE outputs via files and adds module entry.
kits/id5/id5-1/rollup.config.js Adds ESM build variant for production builds.
kits/id5/id5-1/package.json Publishes ESM/IIFE outputs via files and adds module entry.
kits/heap/rollup.config.js Adds ESM build variant for production builds.
kits/heap/package.json Publishes ESM/IIFE outputs via files and adds module entry.
kits/google-tag-manager/rollup.config.js Adds ESM build variant for production builds.
kits/google-tag-manager/package.json Publishes ESM/IIFE outputs via files and adds module entry.
kits/google-analytics-4/packages/GA4Server/rollup.config.js Adds ESM output for GA4 Server kit.
kits/google-analytics-4/packages/GA4Server/package.json Publishes GA4 Server ESM artifact and adds module entry.
kits/google-analytics-4/packages/GA4Client/rollup.config.js Adds ESM build variant for GA4 Client production builds.
kits/google-analytics-4/packages/GA4Client/package.json Fixes files entry, adds ESM artifact, and adds module entry.
kits/facebook/package.json Adds missing IIFE artifact to files.
kits/dynamic-yield/rollup.config.js Adds ESM bundle output for Dynamic Yield kit.
kits/dynamic-yield/package.json Publishes ESM/IIFE outputs via files and adds module entry.
kits/doubleclick/rollup.config.js Adds ESM bundle output for DoubleClick kit.
kits/doubleclick/package.json Publishes ESM/IIFE outputs via files and adds module entry.
kits/device-match/rollup.config.js Adds ESM bundle output for Device Match kit.
kits/device-match/package.json Publishes ESM/IIFE outputs via files and adds module entry.
kits/criteo/rollup.config.js Adds ESM bundle output for Criteo kit.
kits/criteo/package.json Publishes ESM/IIFE outputs via files and adds module entry.
kits/braze/braze-5/package.json Adds missing IIFE artifact to files.
kits/braze/braze-4/rollup.config.js Adds ESM bundle output for Braze v4 kit.
kits/braze/braze-4/package.json Publishes ESM/IIFE outputs via files and adds module entry.
kits/braze/braze-3/rollup.config.js Adds ESM bundle output for Braze v3 kit.
kits/braze/braze-3/package.json Publishes ESM/IIFE outputs via files and adds module entry.
kits/bingads/rollup.config.js Adds ESM bundle output for Bing Ads kit.
kits/bingads/package.json Publishes ESM/IIFE outputs via files and adds module entry.
kits/adwords/rollup.config.js Adds ESM bundle output for AdWords kit.
kits/adwords/package.json Fixes files typo and publishes ESM/IIFE outputs with module entry.
kits/adobe/packages/AdobeServer/package.json Adds files/browser, and routes build/test to the Adobe kit workspace scripts.
kits/adobe/packages/AdobeServer/package-lock.json Adds lockfile for Adobe Server package.
kits/adobe/packages/AdobeClient/package.json Adds files/browser, and routes build/test to the Adobe kit workspace scripts.
kits/adobe/packages/AdobeClient/package-lock.json Updates lockfile format/version for Adobe Client package.
kits/adobe/package.json Marks the Adobe aggregate package as private.
kits/adobe-target/rollup.config.js Adds ESM build variant for production builds.
kits/adobe-target/package.json Fixes files entry, adds ESM/IIFE outputs, and adds module entry.
.prettierignore Fixes kit ignore path formatting and adds .claude/ ignore.
.github/workflows/staging-step-1.yml Packs local SDK for kit tests, runs kits against it, adds post-release lockfile refresh + cleanup dependency updates.
.github/workflows/release.yml Removes the legacy release workflow.
.github/workflows/pull-request.yml Adds Android bridge and BrowserStack workflows into PR checks.
.github/workflows/cross-browser-testing.yml Converts to reusable workflow (workflow_call) instead of push/PR triggers.
.github/workflows/cross-browser-testing-beta.yml Converts to reusable workflow (workflow_call) instead of push triggers.
.github/workflows/android-bridge-tests.yml Converts to reusable workflow (workflow_call).
Files not reviewed (2)
  • kits/adobe/packages/AdobeClient/package-lock.json: Language not supported
  • kits/adobe/packages/AdobeServer/package-lock.json: Language not supported

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

You can also share your feedback on Copilot code review. Take the survey.

…mpTaplyticsKit

Pre-existing typo in all three build entries (iife, cjs, esm).

#agentic
name: sdk-pack
path: /tmp/sdk-pack/

- name: Install, build, and test kit against local SDK
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is the step to use 1 version from core for all kits coming later? I don't see that logic anywhere, just npm publish.

Copy link
Copy Markdown
Contributor Author

@nickolas-dimitrakas nickolas-dimitrakas Mar 18, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

By the npm publish step the version should be the same across core and kits because the release.sh script has completed and synced the ecosystem version.

- Add iife artifact to GA4Client and GA4Server package.json files arrays
- Remove update-kit-lock-files job from staging-step-1.yml (redundant;
  release.sh already handles lock file updates before publish via
  semantic-release prepareCmd)
- Remove update-kit-lock-files from cleanup job needs

#agentic
nickolas-dimitrakas and others added 2 commits March 18, 2026 12:31
Rename the temp concatenated input file from AdobeClientSideKit.esm.js /
AdobeServerSideKit.esm.js to _bundle-input.js to clarify its purpose (it
was never an ESM artifact — just a staging file for rollup). Add new
client_esm and server_esm rollup builds that produce real ESM output, and
wire them into the build:client / build:server composite scripts. Update
AdobeClient and AdobeServer package.json to include the esm artifact in
files and add the module field.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Addresses SonarCloud finding — the [[ construct is safer than POSIX [
as it avoids word-splitting and pathname expansion on variables. The
script already targets bash via #!/usr/bin/env bash so [[ is appropriate.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@sonarqubecloud
Copy link
Copy Markdown

Quality Gate Failed Quality Gate failed

Failed conditions
2 Security Hotspots
49.4% Duplication on New Code (required ≤ 3%)

See analysis details on SonarQube Cloud

Copy link
Copy Markdown

@cursor cursor bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 2 potential issues.

Fix All in Cursor

Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, have a team admin enable autofix in the Cursor dashboard.

run: |
cd ${{ matrix.kit.local_path }}
npm ci
npm install --no-save /tmp/sdk-pack/*.tgz
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Local SDK tarball ignored by Adobe kit tests

Medium Severity

The npm install --no-save /tmp/sdk-pack/*.tgz installs the local SDK tarball into the Adobe sub-package's node_modules/. However, the Adobe sub-package build scripts do cd ../.. && npm ci && ..., which navigates to the parent kits/adobe/ directory and runs npm ci there — installing the registry version of @mparticle/web-sdk into a completely separate node_modules/. The local SDK tarball is silently discarded, so these kit tests never actually validate against the current SDK build despite the step name claiming otherwise.

Additional Locations (2)
Fix in Cursor Fix in Web

PKG_DIR="$(dirname "$PKG_JSON")"
npm pkg set version="$VERSION" --prefix "$PKG_DIR"
echo "Updated $PKG_JSON to $VERSION"
done < <(find "$KIT_PATH" -name "package.json" -not -path "*/node_modules/*")
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Package-lock version drift after kit version bumps

Low Severity

npm pkg set version only updates package.json, not package-lock.json. The Adobe sub-packages (AdobeClient, AdobeServer) have committed package-lock.json files containing a version field. After each release, their package-lock.json versions will permanently drift from package.json, since nothing in the script updates or regenerates the lock files after the version bump.

Fix in Cursor Fix in Web

nickolas-dimitrakas added a commit that referenced this pull request Mar 19, 2026
…flow steps

The build-dist and kit-version-update responsibilities previously hidden
inside scripts/release.sh (called via semantic-release's prepareCmd hook)
are now two named, visible steps in the staging-step-1.yml release job:

  1. 'Build distribution bundle'  — npm run build + git add dist -f + commit
  2. 'Update kit versions to X.Y.Z' — npm pkg set version for every kit in
     kits/matrix.json + commit kits/**/package.json

Both steps run only on a real release (dryRun == 'false') and execute after
the existing dry-run step captures the next version, so the version is
available via steps.get-version.outputs.version.

release.config.js is updated in lockstep:
  - prepareCmd removed from @semantic-release/exec (only publishCmd remains)
  - kits/**/package.json removed from @semantic-release/git assets (those
    package.jsons are now committed by the explicit workflow step before
    semantic-release runs, so they are already clean when the git plugin
    stages its assets)

The end-to-end ordering is unchanged: the two prep commits land on the
local staging branch before npx semantic-release runs; @semantic-release/git
pushes all local commits to staging; release-kits (which needs: release)
then checks out the updated staging branch and publishes each kit at the
correct version.

Refs #1210

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
nickolas-dimitrakas added a commit that referenced this pull request Mar 19, 2026
…ned workflow steps

Removes release.config.js entirely. All responsibilities previously owned
by semantic-release are now explicit, named steps in both staging-step-1.yml
and release.yml:

- Version determination: a new bump_type input (major/minor/patch) on
  workflow_dispatch drives `npm version $bump_type --no-git-tag-version`,
  which bumps package.json and package-lock.json and surfaces the new
  version to all downstream steps via steps.get-version.outputs.version.
- npm publish: explicit `npm publish` step (OIDC unchanged).
- GitHub release: `gh release create` step with the same dist assets that
  @semantic-release/github was uploading.
- Git commit + tag: explicit `git commit` and `git tag` steps; tag is
  pushed alongside the release branch in the final push step.

The semantic-release-only job-level env block (GITHUB_TOKEN, GIT_AUTHOR_*,
GIT_COMMITTER_*) is removed from both workflows; git identity is already
set by the Import GPG Key step. release.yml permissions are updated from
contents:read to contents:write to allow pushing the tag.

Deferred: CHANGELOG.md auto-generation (was @semantic-release/changelog).

Refs #1210

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@rmi22186 rmi22186 dismissed alexs-mparticle’s stale review March 30, 2026 19:26

The merge-base changed after approval.

@rmi22186 rmi22186 force-pushed the workstation/3.0-Release branch from 7dd0ee7 to 033b086 Compare March 30, 2026 19:26
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.

5 participants