Publishing to npm is done via GitHub Actions using npm Trusted Publishers (OIDC). No npm token or OTP is required — the CI workflow authenticates automatically.
See release-workflow-setup.md for initial configuration of Trusted Publishers and the npm-publish GitHub Environment.
- Create a release branch from
develop:release/vX.Y.Z - Update
changelog.mdwith mention of all released changes - Ensure that all packages are building without errors — run
yarn build - Push the release branch to origin (Lerna pushes the version commit and tag to the remote branch):
git push -u origin release/vX.Y.Z
- Bump versions and create a git tag:
Lerna will prompt for version type (patch / minor / major). After confirmation, it commits the version bump, creates a tag
yarn release
vX.Y.Z, and pushes both to the release branch. - Trigger the publish in GitHub Actions:
- Go to Actions → Release → Run workflow
- tag: the tag created in step 5 (e.g.
v6.5.3) - dist_tag:
latest - dry_run:
false - Click Run workflow
- Approve the deployment in the
npm-publishenvironment when prompted - Monitor the workflow run — all 15 packages are published via
npm publish --provenancein staged state (not yet visible to consumers) - Promote each package on npmjs.com: open the package page → Versions → find the staged version → Promote to latest. Repeat for all 15 packages.
- After a successful release, publish the changelog to the GitHub Releases page (
https://github.com/epam/UUI/releases) and in the UUI Teams channel (https://teams.microsoft.com/l/channel/19%3Af9ce97808e1e419cb976f71d310ca74f%40thread.skype/General?groupId=726eb5c9-1516-4c6a-be33-0838d9a33b02&tenantId=b41b72d0-4e9f-4c26-8a69-f949f367c91d) - Open a PR from the release branch into
main - Sync
mainback intodevelop— do this right after the release, before new work lands ondevelop:- Update local branches:
git fetch origin - Merge
mainintodevelop(use merge, not rebase):git checkout develop git pull origin develop git merge origin/main
- Resolve conflicts if any:
package.json,lerna.json— take released versions frommainchangelog.md— keep the released version section frommainand add an empty unreleased# 6.x.x - xx.xx.2026section on top (for the next changes ondevelop)
- Push via PR —
developis protected and requires an approving review:git checkout -b sync/main-into-develop-vX.Y.Z git push -u origin sync/main-into-develop-vX.Y.Z
- Verify sync:
git log origin/develop..origin/mainshould be empty after the PR is merged.
- Update local branches:
Same as stable release, with two differences:
- In step 5, enter a prerelease version (e.g.
6.5.3-beta.0) when Lerna prompts - In step 6, set dist_tag to
beta
When promoting (step 9), use the Promote to beta option instead of Promote to latest.
When the current latest is v6.x but a fix is needed for an older major version:
Warning — manual trigger only. The workflow fires automatically on every tag push with
dist_tag: latest. For a hotfix on an old major version, that would silently overwrite the current v6.x as the default install. You must cancel the auto-triggered run and publish manually withdist_tag: hotfixinstead (steps 5–6 below).
- Create a hotfix branch from the last tag of the target version:
git checkout -b hotfix/5.5.1 v5.5.0
- Cherry-pick
release.ymlfromdevelop— it won't exist on old branches:git checkout develop -- .github/workflows/release.yml git add .github/workflows/release.yml git commit -m "chore: add release workflow for hotfix branch" - Apply the fix and commit
- Bump versions and create a tag:
When Lerna prompts, choose
yarn release
patch(or enter the exact version, e.g.5.5.1). Lerna pushes the tag automatically — the auto-triggered workflow run will appear immediately. - Cancel the auto-triggered run in GitHub Actions before it reaches the
npm-publishapproval gate. - Trigger the publish manually:
- Go to Actions → Release → Run workflow
- tag: the hotfix tag (e.g.
v5.5.1) - dist_tag:
hotfix— never uselatest, it would overwrite the current v6.x as the default install - Click Run workflow
- Approve the deployment in the
npm-publishenvironment when prompted - Promote each staged package on npmjs.com using the Promote to hotfix option. Repeat for all 15 packages.
After this, consumers can install the hotfix explicitly:
npm install @epam/uui@hotfix
# or by exact version:
npm install @epam/uui@5.5.1No sync to main or develop is needed — hotfix branches are standalone.
- Revert failed release: if the release failed after Lerna created the version commit and tag but before packages were published:
- Revert the latest commit with package version update
- Delete local tag:
git tag -d <tag_name>(e.g.v6.5.3) - Delete remote tag:
git push --delete origin <tag_name> - Fix the issue and try again