UNPKG

@legislato/legislato-conventions

Version:

This package facilitates the configuration of commit conventions and changelog for Next.js and Express projects

182 lines (116 loc) 6.93 kB
# Legislato Conventions This NPM package automates the configuration of Conventional Commits and Changelogs for projects within Legislato, ensuring a consistent and efficient Git workflow across all repositories. ## Purpose The main purpose of this package is to streamline the setup of essential tools for commit and release management, such as Husky, Commitlint, Commitizen, and Release-it. With a single command, you can configure your Legislato projects to adhere to standardized commit conventions and automatically generate changelogs. ## Installation To use `legislato-conventions`, you have two options: using `npx` (recommended) or installing the package globally or locally. ### Using `npx` (Recommended) `npx` allows you to execute the package without installing it directly into your project's `node_modules`. This is the recommended approach for most users. 1. Open your terminal in the root directory of your project. 2. Run the following command: ```bash npx @legislato/legislato-conventions ``` `npx` will download the package (if not already cached) and execute it. ### Installing the Package (Optional) If you prefer to install the package, you can do so globally or locally. #### Global Installation Installing the package globally allows you to run it from any directory. 1. Open your terminal. 2. Run the following command: ```bash npm install -g @legislato/legislato-conventions ``` 3. After installation, you can run the package from any directory: ```bash legislato-conventions ``` #### Local Installation Installing the package locally adds it to your project's `node_modules` and `package.json`. 1. Open your terminal in the root directory of your project. 2. Run the following command: ```bash npm install --save-dev @legislato/legislato-conventions ``` 3. After installation, you can run the package using `npx` or by adding a script to your `package.json`: ```json "scripts": { "legislato-conventions": "legislato-conventions" } ``` Then, you can run the package using: ```bash npm run legislato-conventions ``` > [!TIP] > **Note:** Using `npx` is generally recommended as it keeps your project's dependencies clean and ensures you are always using the latest version of the package. ## Usage After installation, the package will perform the following actions: 1. Install the necessary dependencies (Husky, Commitlint, Commitizen, Release-it, etc.). 2. Copy the configuration files to your project. 3. Modify the `package.json` file to add the required scripts and configurations. ## Next Steps After configuration, follow these steps: 1. Create a `.env` file in your project root. 2. Add the following line to the `.env` file: GITHUB_TOKEN=your_github_personal_access_token (Replace `your_github_personal_access_token` with your actual GitHub personal access token). 3. This will allow `release-it` to automate releases on GitHub. ## Scripts Added to `package.json` The package will add the following scripts to your `package.json`: * `"prepare": "husky"`: Installs Husky to configure Git hooks. * `"release": "npm run build && dotenv release-it -- --verbose"`: Automates the release process with `release-it`. * `'release:only-version': 'dotenv release-it -- --verbose --only-version'`: Automates the release process with `release-it`. This use a prompt only to determine the version, and automate the rest * `"release:no-npm": "dotenv release-it -- --no-npm.publish"`: Automates the release process without publishing to NPM. * `"release:changelog": "dotenv release-it -- --changelog"`: Print the changelog without releasing anything. * `"release:version": "dotenv release-it -- --release-version"`: Print the next version without releasing anything. ## Updating Release Scripts The `release` scripts in your `package.json` are configured to run `release-it` by default. If you want to run lint, test, or build scripts before running `release-it`, you can update the scripts as needed. For example, if you have `lint`, `test`, and `build` scripts in your `package.json`, you can update the `release` script as follows: ```json "scripts": { "prepare": "husky", "lint": "eslint . --ext .js,.ts", "test": "jest", "build": "tsc", "release": "npm run lint && npm run test && npm run build && dotenv release-it -- --verbose", "release:no-npm": "npm run lint && npm run test && dotenv release-it -- --no-npm.publish", "release:changelog": "npm run lint && npm run test && npm run build && dotenv release-it -- --changelog", "release:version": "npm run lint && npm run test && npm run build && dotenv release-it -- --release-version" } ``` This will run the ```lint```, ```test```, and ```build``` scripts before running release-it. Adjust the scripts according to your project's needs. ## Configuration Added to `package.json` The package will add the following configuration to your `package.json`: ```json "config": { "commitizen": { "path": "./node_modules/git-cz" } } ``` ## Roadmap Here are the planned enhancements and future directions for the `legislato-conventions` package: ### 1. Unit Testing * Implement comprehensive unit tests to ensure the reliability and stability of the package. * Utilize Jest for testing to cover all functionalities, including edge cases and error handling. ### 2. Package Manager Support * Extend support to include other popular package managers such as Yarn and pnpm. * Modify installation scripts to detect and adapt to the user's preferred package manager. ### 3. ESLint Configuration * Integrate ESLint configuration to enforce coding standards and best practices. * Provide a default ESLint setup that aligns with Legislato's coding guidelines. ### 4. Interactive Configuration * Develop an interactive CLI mode to allow users to customize configurations during installation. * Enable users to select which tools to install and configure based on their project's needs. ### 5. Enhanced Documentation * Create detailed documentation that covers all aspects of the package, including usage examples and troubleshooting guides. * Publish documentation on a dedicated website or platform for easy access and updates. ### 6. Support for Monorepos * Extend support for monorepo setups, allowing for consistent configuration across multiple projects within a single repository. * Investigate tools like Lerna or Nx to manage monorepo configurations effectively. These enhancements aim to make `legislato-conventions` a more robust, versatile, and user-friendly tool for Legislato's development workflow. Contributions and suggestions from the community are highly welcomed to help shape the future of this package. ## Contributing Contributions are welcome! Feel free to open issues and pull requests. ## License This package is distributed under the MIT license.