The web3.js project follows the semver 2.0.0 specification.
The major
version has to be increased as soon as a breaking change is introduced. The definition of a breaking change is anything that requires a depending project to update their code base, build pipeline or tests.
The minor
is increased as soon as new smaller features do get introduced. A minor
release will not affect any depending project. Such a release only introduces smaller enhancements and features a project could use.
A patch release only contains required bug fixes with a low risk to impact depending project.
Further details about versioning can be found in the semver 2.0.0 specification we follow.
E2E Network Tests
will be triggered to run via a Github workflow when a PR is open for a branch prefixed with release/
and is being merged into 4.x
branch. These tests depend on a couple of ENVs to be set that are configurable in Github's Action Secrets when running these tests in CI. The following required secrets are:
E2E_TESTS_ALLOWED_SEND_TRANSACTION
: If set tofalse
this will keep the Sepolia tests that spend ETH from runnning, setting to anything else will cause them to runTEST_ACCOUNT_PRIVATE_KEY
: The private key of the Sepolia account to use when submitting transactionsINFURA_SEPOLIA_HTTP
: The provider to be used to access the Sepolia networkINFURA_MAINNET_HTTP
: The provider to be used to access Mainnet
git checkout 4.x
: Verify you are on the4.x
base branchgit checkout -b release/bumped-version
: Create and checkout a branch with thebumped-version
e.g.git checkout -b release/4.0.0-alpha.0
bumped-version
of release branch should be of main web3 package.
yarn
: Verify all dependencies have been installed- Bump packages version numbers using
lerna version --no-push --no-private --no-git-tag-version
. This will update package versions and also run lifecycle scripts.- It will prompt for new version , modify package metadata and run life cycle scripts (in our case
version
), for bootstrapping lerna will use underlying yarn.
- It will prompt for new version , modify package metadata and run life cycle scripts (in our case
- Update the root and each package's
CHANGELOG.md
: Replace the## [Unreleased]
header with new package version, and move## [Unreleased]
header below listed changes- For root
CHANGELOG.md
copy over all the listed changes for each package
- For root
- Run
yarn build:web
after lerna updates version and builds lib . This will bundle minified builds. - Commit the version bump changes and builds in release branch created in step 2
git tag bumped-version
: Tag the commit with bumped version having prefixv
, e.g.git tag v4.0.1-alpha.0
git push origin release/bumped-version
: Push release branch toorigin
git push origin --tags
: Push release tag created inStep 8
toorigin
- Create a draft release on Github similar to this
- Check
This is a pre-release
- In the release description, copy all entries in
CHANGELOG.md
for the version being released
- Check
- Click
Save draft
- Open pull request to merge branch created in
Step 2
(release/bumped-version
) into4.x
- Wait for all tests to pass in github CI/CD , If there are any unusual warnings or errors in logs, discuss with team
- When sufficient approvals have been met, publish draft release created in
Step 11
- Run
npx lerna publish from-package --ignore-scripts --dist-tag <<TAG>>
in the root directory to publish packages to NPM- IMPORTANT: Replace
<<TAG>>
with required tag in above command, e.g. if publishing RC, use following command:npx lerna publish from-package --ignore-scripts --dist-tag rc
- lerna will not invoke life cycle scripts before publishing and this will publish all packages to NPM public registry.
- IMPORTANT: Replace
- Finally if all of above steps are completed successfully, merge release PR into
4.x
branch.