Monorepos
This configuration will allow you to release multiple packages from a single nx monorepo. It supports independent versions and change logs per releasable unit of code.
Base Release Config
Create a release.config.js at the root of your nx project. This file can be used to establish common settings accross your entire repo similar to tsconfig and jest base configs
App/Lib/Package Release Config
Each new releasable app will also have a release config and this will allow you to tailor each app/lib to release to a different location using different plugins if required.
commitPaths - the commit paths property was added to provide a way to filter commits by directory. depending on your approach you may want to include angular.json, package.json, and nx.json in the list of commit paths.
angular/workspace.json
Add a section to each releasable project in the angular/workspace.json calling semantic-release and telling it to use the specific release.config.js for your project. This section should be at the same level as the test/lint/build commands.
nx.json
Depending on your approach you may want to add the release.config.js the nx.json implicitDependencies, this would force all projects to be affected if this file changes.
CI/CD Considerations
Some plugins (git) will add a commit to your repo which means you cannot run the release task distribured and/or in parallel on your ci/cd system because your local workspace will get ahead / behind the remote.
Todo
Create an nx plugin that automates the steps above
for the project specific release config programmatically get the current project name, source dir, and dependencies for commitPaths.
Add a configPath cli argument rather than extends to specify the path to the semantic-release config
Last updated