Network
Monorepo containing all the main components of Streamr Network.
Packages
User-Facing
Internal
- network-node (@streamr/network-node)
- network-tracker (@streamr/network-tracker)
- protocol (@streamr/protocol)
- utils (@streamr/utils)
- test-utils (@streamr/test-utils)
NPM scripts
NodeJS 16.13.x
is the minimum required version. NodeJS 18.13.x
, NPM 8.x
and later versions are recommended.
Monorepo is managed using npm workspaces.
Installation on an Apple Silicon Mac requires additional steps, see install-on-apple-silicon.md.
Important: Do not use npm ci
or npm install
directly in the sub-package directories.
Bootstrap all sub-packages
The go-to command for most use cases.
To install all required dependencies and build all sub-packages (linking sub-packages together as needed):
# from top level
npm run bootstrap
Bootstrap a single sub-package
To install the required dependencies and build a specific sub-package:
# from top level
npm run bootstrap-pkg --package=$PACKAGE_NAME
Install dependencies only
To only install required dependencies and link sub-packages together (and skip build phase):
# from top level
npm ci
Build
To build all sub-packages:
# from top level
npm run build
Build a sub-package
To build a specific sub-package:
# from top level
npm run build --workspace=$PACKAGE_NAME
Clear caches and built files
To clear all caches and remove the dist
directory from each sub-package:
# from top level
npm run clean-dist
Clean all
To removes all caches, built files, and node_modules
of each sub-package, and the
top-level node_modules
:
# from top level
npm run clean
Install git hooks
To install git hooks (e.g. Husky for conventional commit validation):
npm run install-git-hooks
Add a dependency into a sub-package
Manually add the entry to the package.json
of the sub-package and
run npm run bootstrap-pkg $PACKAGE_NAME
.
Alternatively, run:
npm install some-dependency --workspace=$PACKAGE_NAME
List active versions & symlinks
Check which sub-packages are currently being symlinked.
# from top level
npm run versions
This lists sub-packages & their versions on the left, linked
sub-packages are columns. If the package on the left links to the package
in the column, it shows a checkmark & the semver range, otherwise it
shows the mismatched semver range and prints a warning at the end. It
prints the version ranges so you can double-check that they're formatted
as you expect e.g. ^X.Y.Z
vs X.Y.Z
Releasing
utils, test-utils, protocol, network-tracker, network-node, client, cli-tools
All the above packages should be released at the same time.
git checkout main
git pull
- Change all versions from package.json (and interlinked dependencies) to next version.
npm run clean && npm install && npm run build && npm run versions
- Look at the output of the above and ensure all versions are linked properly (i.e. no yellow or red markers)
- Update client and cli-tool CHANGELOG.md
- If releasing a major / minor version, update API docs link in packages/client/README.md.
- Add relevant files to git staging
git commit -m "release(client, cli-tools): vX.Y.Z"
git tag client/vX.Y.Z
git tag cli-tools/vX.Y.Z
- Push to main
git push origin
- Push to tag
git push origin client/vX.Y.Z
- Push to tag
git push origin cli-tools/vX.Y.Z
- At this point we are to do the actual release
- Clean and rebuild project with
npm run clean && npm run bootstrap
- Then we do actual publishing of packages:
cd packages/utils
npm publish --access public
cd ../..
cd packages/test-utils
npm publish --access public
cd ../..
cd packages/protocol
npm publish --access public
cd ../..
cd packages/network
npm publish --access public
cd ../..
cd packages/network-tracker
npm publish --access public
cd ../..
# Publishing client is a bit more complicated
cd packages/client
npm run build-production
cd dist
npm publish
# Generate & upload API docs (if a major/minor version update)
cd ..
npm run docs
aws s3 cp ./docs s3://api-docs.streamr.network/client/vX.Y --recursive --profile streamr-api-docs-upload
cd ../..
cd packages/cli-tools
npm publish --access public
broker
Broker is released independently of other packages because it follows its own versioning for the time being.
git checkout main
cd packages/broker
npm version <SEMVER_OPTION>
git add package.json
git commit -m "release(broker): vX.Y.Z"
git tag broker/vX.Y.Z
git push origin
git push origin broker/vX.Y.Z
npm run build
npm publish