# Contributing to ZCLI Keen to contribute to ZCLI? We're stoked to have you join us. You may find that opening an [issue](https://github.com/zendesk/zcli/issues) is the best way to get a conversation started. When you're ready to submit a pull request, follow the [steps](#pull-request-workflow) below. We follow a [code of conduct](CODE_OF_CONDUCT.md) as our guide for community behavior. This is a multi-package repo which uses [Lerna](https://lernajs.io/) to manage shared and cross-package dependencies. The basic repo layout includes: - `├── package.json` – the top-level "project" package that contains the dependencies and scripts needed to manage the multi-package repo. _This package will never be published to the npm registry._ - `└─── packages/` – the folder that contains individual packages which are published to the npm registry.
    `├── zcli/` – contains the main package and is published as `@zendesk/zcli`
    `├── zcli-apps/` - contains apps related commands as a npm plugin
    `├── zcli-themes/` - contains themes related commands as a npm plugin
## Versioning Workflow ZCLI follows [semantic versioning](https://semver.org/). We release patch versions for bugfixes, minor versions for new features, and major versions for any breaking changes. The [pull request workflow](#pull-request-workflow) along with the [PR template](PULL_REQUEST_TEMPLATE.md) will help us determine how to version your contributions. All changes are recorded in applicable package CHANGELOG files after your PR is merged. ## Development Workflow Before you start, be sure [yarn](https://yarnpkg.com/en/) is installed on your system. After you clone this repo, run `yarn` to install dependencies needed for development. After installation, the following commands are available: - `yarn dev` to run zcli - `yarn lint` to lint your typescript code using standardjs eslint config - `yarn test` to run test in all the packages Running `yarn dev` or `./packages/zcli/bin/run` will run the cli locally. Alternatively, you can also symlink your local CLI as a global `zcli` binary by running `yarn run link:bin`. ## Pull Request Workflow 1. Fork the repo and create a branch. Format your branch name as `username/verb-noun`. 1. If you haven't yet, get comfortable with the [development environment](#development-workflow). 1. Regularly `git commit` locally and `git push` to the remote branch. Use whatever casual commit messaging you find suitable. We'll help you apply an appropriate squashed [conventional commit](https://conventionalcommits.org/) message when it's time to merge to master. 1. If your changes result in a major modification, be sure all documentation is up-to-date. 1. When your branch is ready, open a new pull request via GitHub. The repo [PR template](PULL_REQUEST_TEMPLATE.md) will guide you toward describing your contribution in a format that is ultimately suitable for a structured conventional commit (used to automatically advance published package versions). 1. Every PR must pass CI checks and receive at least two :+1: to be considered for a merge. ## License By contributing to ZCLI, you agree that your contributions will be licensed under the [Apache License, Version 2.0](LICENSE.md).