This guide will help you set up the cli locally, run tests, and use Docker for isolated testing.
- Fork & Clone the repository:
First fork the repository from github and then clone it,
git clone https://github.com/{your_username}/cli.git
cd cliAfter cloning the repository, you should setup the fork properly and configure the remote repository as described here
- Install dependencies:
npm installTo run all tests locally:
- CLI tests:
npm run cli:test - Unit tests:
npm run unit:test - Github action tests:
npm run action:test - Single test file:
npm run test:one -- <path-to-test-file>
-
Create new test files in the appropriate directory under
test/:- Unit tests:
test/unit/<category>/<name>.test.ts - Integration tests:
test/integration/<command>.test.ts
- Unit tests:
-
Follow the existing test patterns.
-
Run your new tests using the commands mentioned above.
📘 For detailed debugging and testing guidelines, see the Debugging & Testing Guide.
To release a major/minor/patch:
To maintain a clear git history of commits and easily identify what each commit changed and whether it triggered a release, we use conventional commits. The feat and fix prefixes are particularly important as they are needed to trigger changesets. Using these prefixes ensures that the changes are correctly categorized and the versioning system functions as expected.
For Example:
feat: add new feature
-
Create a new release markdown file in the
.changesetdirectory. The filename should indicate what the change is about. -
Add the following content to the file in this particular format:
--- "@package-name-1": [type] (major/minor/patch) "@package-name-2": [type] --- [Provide a brief description of the changes. For example: Added a new Release GitHub Flow to the Turborepo. No new features or bugfixes were introduced.]
For Example:
--- "@asyncapi/cli": minor --- Adding new Release Github Flow to the Turborepo. No new features or bugfixes were introduced.
-
Include the file in your pull request.
-
Create a new release markdown file using changeset CLI. Below command will trigger an interactive prompt that you can use to specify release type and affected packages.
npx -p @changesets/cli@2.27.7 changeset -
Include the file in your pull request.
Tip
For more detailed instructions, you can refer to the official documentation for creating a changeset: Adding a changeset
-
Add a Changeset:
- When you make changes that need to be released, create a markdown file in the
.changesetdirectory stating the package name and level of change (major/minor/patch).
- When you make changes that need to be released, create a markdown file in the
-
Open a Pull Request:
- Push your changes and open a Pull Request (PR). After the PR is merged the changeset file helps communicate the type of changes (major, minor, patch).
-
CI Processes Changeset:
-
After PR is merged, a dedicated GitHub Actions release workflow runs using changeset action,
-
This action reads the markdown files in the
.changesetfolder and creates a PR with the updated version of the package and removes the markdown file. For example:Before:
"name": "@asyncapi/cli", "version": "2.0.1",
After:
"name": "@asyncapi/cli", "version": "3.0.1",
-
The new PR will also contain the description from the markdown files,
-
AsyncAPI bot automatically merge such release PR.
-
-
Release the Package:
- After the PR is merged, the CI/CD pipeline triggers again. The
changesets/actionstep identifies that the PR was created by itself. It then verifies if the current version of the package is greater than the previously released version. If a difference is detected, it executes the publish command to release the updated package.
- After the PR is merged, the CI/CD pipeline triggers again. The
- Lint the code:
npm run lint - Build Docker image:
npm run docker:build
If you encounter any issues during development or testing, please check the following:
- Ensure you're using the correct Node.js version (24.0.0 or higher) and npm version (8.19.0 or higher).
- Clear the
node_modulesdirectory and reinstall dependencies if you encounter unexpected behavior. - For Docker-related issues, make sure Docker is running and you have sufficient permissions.
- For permission errors, try:
sudo chown -R $(whoami) ./lib ./node_modules - For path alias issues, rebuild the project:
npm run build
📘 For comprehensive debugging help, see the Debugging & Testing Guide.
If problems persist, please open an issue on the GitHub repository.