UNPKG

lvlup

Version:

A simple version manager solution for packages

182 lines (112 loc) 6.59 kB
# lvlup 🎩 <p align="center"> <img src="https://i.ibb.co/3dqjJfw/lvlup-v1.png" width="250" alt="lvlup logo" /> </p> A CLI tool to help you manage your package versions easily. <p align="center"> <img src="https://i.ibb.co/3y3tYQP/lvlup-help.png" width="1280" alt="lvlup help" /> </p> ## 1. Getting Started ### Step 1: Install the package First install the package by running: ```bash npm install lvlup ``` ### Step 2: Run the init command When it's your first time using the CLI, you need to run the `init` command. At the root of your project, run: ```bash npx lvlup init ``` You are now ready to use the CLI tool 🙂 ### Step 3: Add your first experience Run the following: ```bash npx lvlup add ``` and follow the prompts. --- ## 2. Core Concepts ### `lvlup` As the name of the package suggests, **LvLup** is all about leveling up your package. We took the boring concept of package versioning, and added a small form of gamification to it. ### `Experience` An `experience` is a contributor's _intent to release_, stored as data within a file. With `lvlup`, you essentially take a package, add some `experience` to it, and when it's ready - it levels up and bumps to the next level, i.e. the next version number. Contributors to a repository should be able to declare an _intent to release_, creating `experience` file(s), and multiple `experience`s would then be used to calculate the next level (next version). `lvlup` makes sure that an `experience` is only used once for the purpose of leveling up a package. --- ## 3. Your new Workflow Your team just started working on a _to-be-released_ branch called `RELEASE-123` (made-up name). A contributor branched out of `RELEASE-123`, and checked out to some `side-branch`. When this contributor is done working on a new feature, a bugfix, or a major change oin their `side-branch`, they should run: ```bash npx lvlup add ``` and answer the prompted questions. An `experience` file is then created, holding the new information as data. The `experience` file should be committed, and be included in the PR to be merged into branch `RELEASE-123`. The `lvlup add` command can occur many times either by the same contributor (on the same `side-branch` branch), or by multiple contributors (on different side branches, also to be merged into `RELEASE-123`). When the maintainer wants to release the package, after all desired PRs to `RELEASE-123` branch had been merged, they should checkout to the `HEAD` of `RELEASE-123`, and run: ```bash npx lvlup bump ``` followed by the command: ```bash npx lvlup publish ``` The mentioned commands are explained further down below. --- ## 4. Commands ### 1. `init` ```bash lvlup init ``` This command sets up the `.lvlup` folder at the root of your project. It generates a `README.md` and a `config.json` file. The config file has to be found within the `.lvlup` dir in order for the tool to work. You should run the _init_ command once, when you are setting up `lvlup`. ### 2. `add` ``` lvlup add [FLAGS] ``` By default this command is **interactive**: it asks for semver bump type (`major` | `minor` | `patch`), then a summary of the changes, then confirmation. You can pass flags to pre-fill answers—any value you omit is still prompted. When **`--level`** is given together with **`--message`** or **`--message-file`**, the command runs **fully non-interactively** (no prompts, confirmation skipped). Once confirmed, `experience` file be written as a Markdown file that contains the summary and YAML front matter which stores the package's name that will be released and the semver bump types for it. For example, an `experience` file that minor bumps `axios` would look like this: ```md --- "axios": minor --- A description of the minor changes. ``` If you want to modify the `experience` file after it's generated, it's completely fine. You can even write your own `experience` files yourself if you want, just don't forget to commit them. Inside your `.lvlup/config.json`, if you were to set the `commit.afterAdd` option to `true`, the `add` command will create and also commit the `experience` file. By default, `add` requires uncommitted git changes (`add.requireGitChanges` defaults to `true`). Set `"requireGitChanges": false` under `add` to allow running `add` on a clean working tree. - `--skip` — skips the final "are you sure?" confirmation (other prompts still run unless you pass enough flags for a fully non-interactive run). - `--editor EditorType` — use an external editor for the summary when not using `--message` / `--message-file`. EditorType: `vim` | `vi` | `nano` | `code` (VsCode). - `-l, --level` — semver bump type. Omit to be prompted. - `-m, --message` — summary text (CHANGELOG). Cannot be combined with `--message-file`. Omit to be prompted (or use `--editor`). - `-f, --message-file` — read the summary from a file. Cannot be combined with `--message`. Omit to be prompted. **Fully non-interactive** (scripts, CI, AI agents): pass **`--level`** and exactly one of **`--message`** or **`--message-file`**. ```bash lvlup add --level minor --message "Add widget API" lvlup add -l patch -m "Fix null handling" lvlup add --level major --message-file ./release-notes.md ``` **Partial flags** (hybrid): e.g. `lvlup add --level minor` prompts only for the summary; `lvlup add -m "Fix typo"` prompts only for semver level. ### 3. `bump` ```bash lvlup bump ``` Levels up your package. Updates the version of the package according to all `experience` files found under `.lvlup` since the last release (WHETHER THEY ARE COMMITTED OR NOT ! So make sure they are committed). Will also create/append to a **CHANGELOG** file using the summaries from the `experience` files. We recommend making sure changes made from this command are merged back into the main branch before you run `publish`. This command will **read**, and then **delete**, `experience` files found on disk, ensuring that they are only used once. ### 4. `publish` ```bash lvlup publish ``` Publishes the package to a dedicated registry. Because this command assumes that last commit is the release commit you should not commit any changes between calling `bump` and `publish`. These commands are separate to enable you to check if release commit is accurate. ### 5. `status` ```bash lvlup status ``` The status command provides information about all the `experience` files that currently exist in a nice tabular view. <p align="center"> <img src="https://i.ibb.co/9y8gTDC/lvlup-status.png" width="1280" alt="lvlup status" /> </p>