Skip to content

Latest commit

 

History

History
164 lines (117 loc) · 6.86 KB

CONTRIBUTING.md

File metadata and controls

164 lines (117 loc) · 6.86 KB

Contributing

📣 Support/Questions?: Please see our Support Page for general support questions. The issues on GitHub should be reserved for bug reports and feature requests.

Branches

Version Branches

These are mostly for reference--older major versions are typically not maintained.

Bug Reports

Run the command(s) with --verbose to produce debugging output. We may ask for the full command output, including debug statements.

Please also copy/paste the output of the ionic info command into your issue and be as descriptive as possible. Include any steps that might help us reproduce your issue.

Feature Requests

Post an issue describing your feature to open a dialogue with us. We're happy to hear from you!

Pull Requests

Pull requests are most welcome! But, if you plan to add features or do large refactors, please open a dialogue with us first by creating an issue. Small bug fixes are welcome any time.

Help Wanted

Looking for small issues to help with? You can browse the help wanted label. These are issues that have been marked as great opportunities for someone's first PR to the Ionic CLI. 😍

Local Setup

Structure

The Ionic CLI is organized into a monorepo. Here are the packages:

CLIs
Libraries

Toolset

  • npm 8+ is required.
  • Node 16+ is required.
  • The codebase is written in TypeScript. If you're unfamiliar with TypeScript, we recommend using VS Code and finding a tutorial to familiarize yourself with basic concepts.
  • The test suite uses Jest.

Setup

  1. Fork the repo & clone it locally.
  2. npm install to install the dev tools.
  3. npm run bootstrap (will install package dependencies and link packages together)
  4. Optionally npm run link to make ionic and other bin files point to your dev CLI.
  5. npm run watch will spin up TypeScript watch scripts for all packages.
  6. TypeScript source files are in packages/**/src.
  7. Good luck! 💪 Please open an issue if you have questions or something is unclear.

Running Dev CLI

To switch between dev CLI and stable CLI, you can use a Node version manager such as nvm and switch between environments, e.g.

nvm install v16
nvm alias cli-local v16

You can even set up an alias in your terminal that sets IONIC_CONFIG_DIRECTORY to have seperate configuration environments.

alias cli-local="nvm use cli-local && export IONIC_CONFIG_DIRECTORY=$HOME/.ionic/cli-local"

When the Node environment is created, create a symlink to packages/@ionic/cli/bin/ionic within $NVM_BIN:

ln -s $(pwd)/packages/@ionic/cli/bin/ionic $NVM_BIN
Debugging

The following workflow is recommended for debugging the Ionic CLI:

  1. Place debugger; statements where desired.

  2. Run the CLI via node to use Node's --inspect-brk flag:

    • Instead of ~/path/to/ionic <command> use node --inspect-brk ~/path/to/ionic <command>.
    • Instead of ionic <command>, try node --inspect-brk $(which ionic) <command> (works on Mac and Linux).
  3. Open chrome://inspect in Chrome and select the remote target to use DevTools for debugging.

Read more about Node debugging in the Debugging Guide.

Publishing

CI automatically publishes the next version semantically from analyzing commits in stable. To maintain a shared history between develop and stable, the branches must be rebased with each other locally.

  • When it's time to cut a release from develop:

    git checkout stable
    git rebase develop
    git push origin stable
    
  • Await successful publish in CI. Ionitron will push the updated versions and tags to stable.

  • Sync develop with stable.

    git pull origin stable
    git checkout develop
    git rebase stable
    git push origin develop
    

To publish testing versions, follow these steps:

  1. Cancel any watch scripts.
  2. Run npm run publish:testing