open-index/open-npm huggingface dataset:
npm package: @ivangabriele/biome-config
Description: My most commonly used Biome configuration.
Author: Ivan Gabriele
Latest version: 2.0.0

# My Biome Configuration

[![License][img-license]][lnk-license] [![GitHub Check Workflow Status][img-github]][lnk-github]
[![NPM Version][img-npm]][lnk-npm]

My most commonly used [Biome](https://biomejs.dev) configuration.

---

- [Usage](#usage)
  - [Lint-Staged](#lint-staged)
  - [IDEs](#ides)
    - [Visual Studio Code](#visual-studio-code)
- [Contribute](#contribute)

---

## Usage

Run:

```sh
yarn add -DE @biomejs/biome @ivangabriele/biome-config
```

Add this line to your `biome.jsonc`:

```jsonc
{
  "$schema": "https://biomejs.dev/schemas/2.1.3/schema.json",
  "extends": ["@ivangabriele/biome-config"],
}
```

Then add this line to your `package.json`:

```json
{
  "scripts": {
    "test:lint": "biome check --write --no-errors-on-unmatched ."
  }
}
```

### Lint-Staged

Run:

```sh
yarn add -DE @ivangabriele/biome-config lint-staged
```

Then add this line to your `package.json`:

```json
{
  "lint-staged": {
    "*.{cjs,cts,d.cts,d.mts,d.ts,js,json,jsonc,jsx,mjs,mts,ts,tson,tsx}": ["yarn test:lint"]
  }
}
```

### IDEs

#### Visual Studio Code

Install [Biome](https://marketplace.visualstudio.com/items?itemName=biomejs.biome) and
[Run On Save](https://marketplace.visualstudio.com/items?itemName=emeraldwalk.runonsave) extensions.

`.vscode/settings.json`:

```json
{
  "editor.codeActionsOnSave": {
    "source.fixAll.biome": "explicit",
  },
  "editor.defaultFormatter": "biomejs.biome",
  "[javascript]": {
    "editor.defaultFormatter": "biomejs.biome"
  },
  "[javascriptreact]": {
    "editor.defaultFormatter": "biomejs.biome"
  },
  "[json]": {
    "editor.defaultFormatter": "biomejs.biome"
  },
  "[typescript]": {
    "editor.defaultFormatter": "biomejs.biome"
  },
  "[typescriptreact]": {
    "editor.defaultFormatter": "biomejs.biome"
  }
}
```

## Contribute

Please refer to the [contribution guidelines](./CONTRIBUTING.md) for information on how to contribute to this project.

---

[img-github]:
  https://img.shields.io/github/actions/workflow/status/ivangabriele/biome-config/check.yml?branch=main&label=CI&style=for-the-badge
[img-license]: https://img.shields.io/github/license/ivangabriele/biome-config?style=for-the-badge
[img-npm]: https://img.shields.io/npm/v/@ivangabriele/biome-config?style=for-the-badge
[lnk-github]: https://github.com/ivangabriele/biome-config/actions?query=branch%3Amain++
[lnk-license]: https://github.com/ivangabriele/biome-config/blob/main/LICENSE
[lnk-npm]: https://www.npmjs.com/package/@ivangabriele/biome-config
npm package: @ivangabriele/commitlint-config
Description: My most commonly used CommitLint configuration.
Author: Ivan Gabriele
Latest version: 2.0.3

# My CommitLint Configuration

[![MIT License][img-license]][lnk-license] [![GitHub Check Workflow Status][img-github]][lnk-github]
[![npm][img-npm]][lnk-npm]

My most commonly used CommitLint configuration.

---

- [Usage](#usage)
- [Contribute](#contribute)

---

## Usage

Run:

```sh
npm i -DE @commitlint/cli @ivangabriele/commitlint-config husky lint-staged
```

or:

```sh
yarn add -DE @commitlint/cli @ivangabriele/commitlint-config husky lint-staged
```

Create `/.husky/commit-msg`:

```sh
[ -n "$CI" ] && exit 0

yarn commitlint --edit "$1"
```

Create `/.husky/pre-commit`:

```sh
[ -n "$CI" ] && exit 0

yarn lint-staged
```

Give them execution rights:

```sh
chmod +x .husky/commit-msg .husky/pre-commit
```

Create `/.commitlintrc`:

```json
{
  "$schema": "https://json.schemastore.org/commitlintrc",
  "extends": ["@ivangabriele/commitlint-config"]
}
```

Update `/package.json`:

```json
{
  // ...
  "scripts": {
    // ...
    "prepare": "husky"
    // ...
  }
  // ...
}
```

## Contribute

Please refer to the [contribution guidelines](./CONTRIBUTING.md) for information on how to contribute to this project.

---

[img-github]:
  https://img.shields.io/github/actions/workflow/status/ivangabriele/commitlint-config/check.yml?branch=main&label=CI&style=for-the-badge
[img-license]: https://img.shields.io/github/license/ivangabriele/commitlint-config?style=for-the-badge
[img-npm]: https://img.shields.io/npm/v/@ivangabriele/commitlint-config?style=for-the-badge
[lnk-github]: https://github.com/ivangabriele/commitlint-config/actions?query=branch%3Amain++
[lnk-license]: https://github.com/ivangabriele/commitlint-config/blob/main/LICENSE
[lnk-npm]: https://www.npmjs.com/package/@ivangabriele/commitlint-config
npm package: @ivangabriele/eslint-config-base
Description: My most commonly used ESLint configuration for Javascript (without React).
Author: Ivan Gabriele
Latest version: 10.0.0

# My Javascript (without React) ESLint Configuration

[![img-license]][lnk-license] [![img-npm]][lnk-npm] [![img-github]][lnk-github]

My most commonly used ESLint configuration for Javascript (without React).

## Usage

```sh
npm i -DE @ivangabriele/eslint-config-base \
  @ivangabriele/prettier-config \
  eslint-config-airbnb-base \
  eslint-config-airbnb-base \
  eslint-config-prettier \
  eslint-plugin-import \
  eslint-plugin-jest \
  eslint-plugin-no-null \
  eslint-plugin-prettier \
  eslint-plugin-sort-destructure-keys \
  eslint-plugin-sort-keys-fix \
  prettier
```

or:

```sh
yarn add -DE @ivangabriele/eslint-config-base \
  @ivangabriele/prettier-config \
  eslint-config-airbnb-base \
  eslint-config-airbnb-base \
  eslint-config-prettier \
  eslint-plugin-import \
  eslint-plugin-jest \
  eslint-plugin-no-null \
  eslint-plugin-prettier \
  eslint-plugin-sort-destructure-keys \
  eslint-plugin-sort-keys-fix \
  prettier
```

Then extend it in your `.eslintrc`:

```json
{
  "extends": "@ivangabriele/eslint-config-base"
}
```

And add this line to your package.json:

```json
{
  // ...
  "prettier": "@ivangabriele/prettier-config"
}
```

### With Yarn Plug'n'Play

#### Visual Studio Code

```sh
yarn dlx @yarnpkg/sdks vscode
```

## Contribution

This is a monorepository, please check the [root readme][lnk-contribution].

---

[img-github]:
  https://img.shields.io/github/actions/workflow/status/ivangabriele/eslint-config/check.yml?branch=main&style=for-the-badge
[img-license]: https://img.shields.io/github/license/ivangabriele/eslint-config?style=for-the-badge
[img-npm]: https://img.shields.io/npm/v/@ivangabriele/eslint-config-base?style=for-the-badge
[lnk-github]: https://github.com/ivangabriele/eslint-config/actions?query=branch%3Amain++
[lnk-license]: https://github.com/ivangabriele/eslint-config/blob/main/packages/base/LICENSE
[lnk-npm]: https://www.npmjs.com/package/@ivangabriele/eslint-config-base
[lnk-contribution]: https://github.com/ivangabriele/eslint-config#contribution
npm package: @ivangabriele/eslint-config-react
Description: My most commonly used ESLint configuration for Javascript with React.
Author: Ivan Gabriele
Latest version: 10.0.0

# My Javascript with React ESLint Configuration

[![img-license]][lnk-license] [![img-npm]][lnk-npm] [![img-github]][lnk-github]

My most commonly used ESLint configuration for Javascript with React.

## Usage

```sh
npm i -DE @ivangabriele/eslint-config-react \
  @ivangabriele/prettier-config \
  eslint \
  eslint-config-airbnb \
  eslint-config-prettier \
  eslint-plugin-import \
  eslint-plugin-jest \
  eslint-plugin-jsx-a11y \
  eslint-plugin-no-null \
  eslint-plugin-prettier \
  eslint-plugin-react \
  eslint-plugin-react-hooks \
  eslint-plugin-sort-destructure-keys \
  eslint-plugin-sort-keys-fix \
  prettier
```

or:

```sh
yarn add -DE @ivangabriele/eslint-config-react \
  @ivangabriele/prettier-config \
  eslint \
  eslint-config-airbnb \
  eslint-config-prettier \
  eslint-plugin-import \
  eslint-plugin-jest \
  eslint-plugin-jsx-a11y \
  eslint-plugin-no-null \
  eslint-plugin-prettier \
  eslint-plugin-react \
  eslint-plugin-react-hooks \
  eslint-plugin-sort-destructure-keys \
  eslint-plugin-sort-keys-fix \
  prettier
```

Then extend it in your `.eslintrc`:

```json
{
  "extends": "@ivangabriele/eslint-config-react"
}
```

And add this line to your package.json:

```json
{
  // ...
  "prettier": "@ivangabriele/prettier-config"
}
```

### With Yarn Plug'n'Play

#### Visual Studio Code

```sh
yarn dlx @yarnpkg/sdks vscode
```

## Contribution

This is a monorepository, please check the [root readme][lnk-contribution].

---

[img-github]:
  https://img.shields.io/github/actions/workflow/status/ivangabriele/eslint-config/check.yml?branch=main&style=for-the-badge
[img-license]: https://img.shields.io/github/license/ivangabriele/eslint-config?style=for-the-badge
[img-npm]: https://img.shields.io/npm/v/@ivangabriele/eslint-config-react?style=for-the-badge
[lnk-github]: https://github.com/ivangabriele/eslint-config/actions?query=branch%3Amain++
[lnk-license]: https://github.com/ivangabriele/eslint-config/blob/main/packages/react/LICENSE
[lnk-npm]: https://www.npmjs.com/package/@ivangabriele/eslint-config-react
[lnk-contribution]: https://github.com/ivangabriele/eslint-config#contribution
npm package: @ivangabriele/eslint-config-typescript-base
Description: My most commonly used ESLint configuration for Typescript (without React).
Author: Ivan Gabriele
Latest version: 10.0.0

# My Typescript (without React) ESLint Configuration

[![img-license]][lnk-license] [![img-npm]][lnk-npm] [![img-github]][lnk-github]

My most commonly used ESLint configuration for Typescript (without React).

## Usage

```sh
npm i -DE @ivangabriele/eslint-config-typescript-base \
  @ivangabriele/prettier-config \
  @typescript-eslint/eslint-plugin \
  @typescript-eslint/parser \
  eslint \
  eslint-config-airbnb \
  eslint-config-airbnb-typescript \
  eslint-config-prettier \
  eslint-plugin-import \
  eslint-plugin-jest \
  eslint-plugin-no-null \
  eslint-plugin-prettier \
  eslint-plugin-sort-destructure-keys \
  eslint-plugin-sort-keys-fix \
  eslint-plugin-typescript-sort-keys \
  prettier \
  typescript
```

or:

```sh
yarn add -DE @ivangabriele/eslint-config-typescript-base \
  @ivangabriele/prettier-config \
  @typescript-eslint/eslint-plugin \
  @typescript-eslint/parser \
  eslint \
  eslint-config-airbnb \
  eslint-config-airbnb-typescript \
  eslint-config-prettier \
  eslint-plugin-import \
  eslint-plugin-jest \
  eslint-plugin-no-null \
  eslint-plugin-prettier \
  eslint-plugin-sort-destructure-keys \
  eslint-plugin-sort-keys-fix \
  eslint-plugin-typescript-sort-keys \
  prettier \
  typescript
```

Then extend it in your `.eslintrc`:

```json
{
  "extends": "@ivangabriele/eslint-config-typescript-base",
  "parserOptions": {
    "project": "./tsconfig.json"
  }
}
```

And add this line to your package.json:

```json
{
  // ...
  "prettier": "@ivangabriele/prettier-config"
}
```

### With Yarn Plug'n'Play

#### Visual Studio Code

```sh
yarn dlx @yarnpkg/sdks vscode
```

## Contribution

This is a monorepository, please check the [root readme][lnk-contribution].

---

[img-github]:
  https://img.shields.io/github/actions/workflow/status/ivangabriele/eslint-config/check.yml?branch=main&style=for-the-badge
[img-license]: https://img.shields.io/github/license/ivangabriele/eslint-config?style=for-the-badge
[img-npm]: https://img.shields.io/npm/v/@ivangabriele/eslint-config-typescript-base?style=for-the-badge
[lnk-github]: https://github.com/ivangabriele/eslint-config/actions?query=branch%3Amain++
[lnk-license]: https://github.com/ivangabriele/eslint-config/blob/main/packages/typescript-base/LICENSE
[lnk-npm]: https://www.npmjs.com/package/@ivangabriele/eslint-config-typescript-base
[lnk-contribution]: https://github.com/ivangabriele/eslint-config#contribution
npm package: @ivangabriele/eslint-config-typescript-next
Description: My most commonly used ESLint configuration for Typescript with Next.js.
Author: Ivan Gabriele
Latest version: 10.0.0

# My Typescript with Next.js ESLint Configuration

[![img-license]][lnk-license] [![img-npm]][lnk-npm] [![img-github]][lnk-github]

My most commonly used ESLint configuration for Typescript with Next.js.

## Usage

```sh
npm i -DE @ivangabriele/eslint-config-typescript-next \
  @ivangabriele/prettier-config \
  @next/eslint-plugin-next \
  @typescript-eslint/eslint-plugin \
  @typescript-eslint/parser \
  eslint \
  eslint-config-airbnb \
  eslint-config-airbnb-typescript \
  eslint-config-next \
  eslint-config-prettier \
  eslint-plugin-import \
  eslint-plugin-jest \
  eslint-plugin-jsx-a11y \
  eslint-plugin-no-null \
  eslint-plugin-prettier \
  eslint-plugin-react \
  eslint-plugin-react-hooks \
  eslint-plugin-sort-destructure-keys \
  eslint-plugin-sort-keys-fix \
  eslint-plugin-typescript-sort-keys \
  prettier \
  typescript
```

or:

```sh
yarn add -DE @ivangabriele/eslint-config-typescript-next \
  @ivangabriele/prettier-config \
  @next/eslint-plugin-next \
  @typescript-eslint/eslint-plugin \
  @typescript-eslint/parser \
  eslint \
  eslint-config-airbnb \
  eslint-config-airbnb-typescript \
  eslint-config-next \
  eslint-config-prettier \
  eslint-plugin-import \
  eslint-plugin-jest \
  eslint-plugin-jsx-a11y \
  eslint-plugin-no-null \
  eslint-plugin-prettier \
  eslint-plugin-react \
  eslint-plugin-react-hooks \
  eslint-plugin-sort-destructure-keys \
  eslint-plugin-sort-keys-fix \
  eslint-plugin-typescript-sort-keys \
  prettier \
  typescript
```

Then extend it in your `.eslintrc`:

```json
{
  "extends": "@ivangabriele/eslint-config-typescript-next",
  "parserOptions": {
    "project": "./tsconfig.json"
  }
}
```

And add this line to your package.json:

```json
{
  // ...
  "prettier": "@ivangabriele/prettier-config"
}
```

### With Yarn Plug'n'Play

#### Visual Studio Code

```sh
yarn dlx @yarnpkg/sdks vscode
```

## Contribution

This is a monorepository, please check the [root readme][lnk-contribution].

---

[img-github]:
  https://img.shields.io/github/actions/workflow/status/ivangabriele/eslint-config/check.yml?branch=main&style=for-the-badge
[img-license]: https://img.shields.io/github/license/ivangabriele/eslint-config?style=for-the-badge
[img-npm]: https://img.shields.io/npm/v/@ivangabriele/eslint-config-typescript-next?style=for-the-badge
[lnk-github]: https://github.com/ivangabriele/eslint-config/actions?query=branch%3Amain++
[lnk-license]: https://github.com/ivangabriele/eslint-config/blob/main/packages/typescript-next/LICENSE
[lnk-npm]: https://www.npmjs.com/package/@ivangabriele/eslint-config-typescript-next
[lnk-contribution]: https://github.com/ivangabriele/eslint-config#contribution
npm package: @ivangabriele/eslint-config-typescript-react
Description: My most commonly used ESLint configuration for Typescript with React.
Author: Ivan Gabriele
Latest version: 10.0.0

# My Typescript with React ESLint Configuration

[![img-license]][lnk-license] [![img-npm]][lnk-npm] [![img-github]][lnk-github]

My most commonly used ESLint configuration for Typescript with React.

## Usage

```sh
npm i -DE @ivangabriele/eslint-config-typescript-react \
  @ivangabriele/prettier-config \
  @typescript-eslint/eslint-plugin \
  @typescript-eslint/parser \
  eslint \
  eslint-config-airbnb \
  eslint-config-airbnb-typescript \
  eslint-config-prettier \
  eslint-plugin-import \
  eslint-plugin-jest \
  eslint-plugin-jsx-a11y \
  eslint-plugin-no-null \
  eslint-plugin-prettier \
  eslint-plugin-react \
  eslint-plugin-react-hooks \
  eslint-plugin-sort-destructure-keys \
  eslint-plugin-sort-keys-fix \
  eslint-plugin-typescript-sort-keys \
  prettier \
  typescript
```

or:

```sh
yarn add -DE @ivangabriele/eslint-config-typescript-react \
  @ivangabriele/prettier-config \
  @typescript-eslint/eslint-plugin \
  @typescript-eslint/parser \
  eslint \
  eslint-config-airbnb \
  eslint-config-airbnb-typescript \
  eslint-config-prettier \
  eslint-plugin-import \
  eslint-plugin-jest \
  eslint-plugin-jsx-a11y \
  eslint-plugin-no-null \
  eslint-plugin-prettier \
  eslint-plugin-react \
  eslint-plugin-react-hooks \
  eslint-plugin-sort-destructure-keys \
  eslint-plugin-sort-keys-fix \
  eslint-plugin-typescript-sort-keys \
  prettier \
  typescript
```

Then extend it in your `.eslintrc`:

```json
{
  "extends": "@ivangabriele/eslint-config-typescript-react",
  "parserOptions": {
    "project": "./tsconfig.json"
  }
}
```

And add this line to your package.json:

```json
{
  // ...
  "prettier": "@ivangabriele/prettier-config"
}
```

### With Yarn Plug'n'Play

#### Visual Studio Code

```sh
yarn dlx @yarnpkg/sdks vscode
```

## Contribution

This is a monorepository, please check the [root readme][lnk-contribution].

---

[img-github]:
  https://img.shields.io/github/actions/workflow/status/ivangabriele/eslint-config/check.yml?branch=main&style=for-the-badge
[img-license]: https://img.shields.io/github/license/ivangabriele/eslint-config?style=for-the-badge
[img-npm]: https://img.shields.io/npm/v/@ivangabriele/eslint-config-typescript-react?style=for-the-badge
[lnk-github]: https://github.com/ivangabriele/eslint-config/actions?query=branch%3Amain++
[lnk-license]: https://github.com/ivangabriele/eslint-config/blob/main/packages/typescript-react/LICENSE
[lnk-npm]: https://www.npmjs.com/package/@ivangabriele/eslint-config-typescript-react
[lnk-contribution]: https://github.com/ivangabriele/eslint-config#contribution
npm package: @ivangabriele/prettier-config
Description: My most commonly used Prettier config.
Author: Ivan Gabriele
Latest version: 5.0.1

# My Prettier Configuration

[![License][img-license]][lnk-license] [![GitHub Check Workflow Status][img-github]][lnk-github]
[![NPM Version][img-npm]][lnk-npm]

My most commonly used Prettier configuration.

---

- [Usage](#usage)
- [Contribute](#contribute)

---

## Usage

Run:

```sh
npm i -DE @ivangabriele/prettier-config prettier@^3.0.0
```

or:

```sh
yarn add -DE @ivangabriele/prettier-config prettier@^3.0.0
```

Then add this line to your `package.json`:

```json
{
  // ...
  "prettier": "@ivangabriele/prettier-config"
}
```

## Contribute

Please refer to the [contribution guidelines](./CONTRIBUTING.md) for information on how to contribute to this project.

---

[img-github]:
  https://img.shields.io/github/actions/workflow/status/ivangabriele/prettier-config/check.yml?branch=main&label=CI&style=for-the-badge
[img-license]: https://img.shields.io/github/license/ivangabriele/prettier-config?style=for-the-badge
[img-npm]: https://img.shields.io/npm/v/@ivangabriele/prettier-config?style=for-the-badge
[lnk-github]: https://github.com/ivangabriele/prettier-config/actions?query=branch%3Amain++
[lnk-license]: https://github.com/ivangabriele/prettier-config/blob/main/LICENSE
[lnk-npm]: https://www.npmjs.com/package/@ivangabriele/prettier-config
npm package: @ivangabriele/semantic-release-config-base
Description: A basic semantic-release configuration.
Author: Ivan Gabriele
Latest version: 4.1.5

# My Semantic Release Configuration

[![MIT License][img-license]][lnk-license] [![GitHub Check Workflow Status][img-github]][lnk-github]
[![NPM Version][img-npm]][lnk-npm]

A basic configuration for Semantic Release when using a single package repository (no monorepo) and NPM or Yarn as
package manager.

## Usage

Run:

```sh
npm i -DE @ivangabriele/semantic-release-config-base semantic-release
```

or:

```sh
yarn add -DE @ivangabriele/semantic-release-config-base semantic-release
```

Extend it in your `package.json`:

```json
{
  // ...
  "release": {
    "extends": "@ivangabriele/semantic-release-config-base"
  }
}
```

Then add a manually triggered workflow in Github Actions (i.e.: `.github\workflows\release.yml`):

```yaml
name: Release

on: workflow_dispatch

jobs:
  release:
    name: Release
    runs-on: ubuntu-latest
    permissions:
      contents: write
      id-token: write
      issues: write
      pull-requests: write
    steps:
      - name: Checkout
        uses: actions/checkout@v4
        with:
          fetch-depth: 0
          persist-credentials: false
      - name: Setup
        uses: actions/setup-node@v4
        with:
          cache: yarn
          node-version: 20
      - name: Install
        run: yarn --immutable
      - name: Build
        run: yarn build
      - name: Release
        run: yarn semantic-release
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
      - name: Get new version
        run: echo "NEW_VERSION=$(npm pkg get version | sed 's/"//g')" >> "$GITHUB_ENV"
      - name: Create pull request
        uses: peter-evans/create-pull-request@v6
        with:
          branch: ci-release-v${{ env.NEW_VERSION }}
          commit-message: 'ci(release): v${{ env.NEW_VERSION }}'
          title: 'ci(release): v${{ env.NEW_VERSION }}'
          token: ${{ secrets.GITHUB_TOKEN }}
```

---

[img-github]:
  https://img.shields.io/github/actions/workflow/status/ivangabriele/semantic-release-config/check.yml?branch=main&label=CI&style=for-the-badge
[img-license]: https://img.shields.io/github/license/ivangabriele/semantic-release-config?style=flat-square
[img-npm]: https://img.shields.io/npm/v/@ivangabriele/semantic-release-config-base?style=flat-square
[lnk-github]: https://github.com/ivangabriele/semantic-release-config/actions?query=branch%3Amain++
[lnk-license]: https://github.com/ivangabriele/semantic-release-config/blob/main/packages/base/LICENSE
[lnk-npm]: https://www.npmjs.com/package/@ivangabriele/semantic-release-config
npm package: @ivangabriele/semantic-release-config-base-yarn
Description: My most commonly used Semantic Release configuration.
Author: Ivan Gabriele
Latest version: 4.0.1

# My Semantic Release Configuration

[![MIT License][img-license]][lnk-license] [![NPM Version][img-npm]][lnk-npm]

My most commonly used Semantic Release configuration.

## Usage

Run:

```sh
yarn add -DE @ivangabriele/semantic-release-config-base-yarn
```

Extend it in your `package.json`:

```json
{
  // ...
  "release": {
    "extends": "@ivangabriele/semantic-release-config-base-yarn"
  }
}
```

Then add a manually triggered workflow in Github Actions (i.e.: `.github\workflows\release.yml`):

```yaml
name: Release

on: workflow_dispatch

jobs:
  release:
    name: Release
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v3
        with:
          fetch-depth: 0
          persist-credentials: false
      - name: Setup
        uses: actions/setup-node@v3
        with:
          cache: yarn
          node-version: 20
      - name: Install
        run: yarn --frozen-lockfile
      - name: Build
        run: yarn build
      - name: Release
        run: yarn semantic-release
        env:
          GITHUB_TOKEN: ${{ secrets.GH_PAT }}
          NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
      - name: Get version
        id: get_version
        run: echo ::set-output name=version::$(npm pkg get version | sed 's/"//g')
      - name: Create pull request
        uses: peter-evans/create-pull-request@v4
        with:
          branch: ci-release-v${{ steps.get_version.outputs.version }}
          # https://docs.github.com/en/actions/managing-workflow-runs/skipping-workflow-runs
          commit-message: 'ci(release): ${{ steps.get_version.outputs.version }}'
          title: 'ci(release): ${{ steps.get_version.outputs.version }}'
          token: ${{ secrets.GH_PAT }}
```

---

[img-license]: https://img.shields.io/github/license/ivangabriele/semantic-release-config?style=for-the-badge
[img-npm]: https://img.shields.io/npm/v/@ivangabriele/semantic-release-config-base-yarn?style=for-the-badge
[lnk-license]: https://github.com/ivangabriele/semantic-release-config/blob/main/packages/base-yarn/LICENSE
[lnk-npm]: https://www.npmjs.com/package/@ivangabriele/semantic-release-config
npm package: @ivangabriele/semantic-release-config-dist
Description: A semantic-release configuration for projects fully pubished from a dist/ folder.
Author: Ivan Gabriele
Latest version: 4.1.5

# My Semantic Release Configuration

[![MIT License][img-license]][lnk-license] [![GitHub Check Workflow Status][img-github]][lnk-github]
[![NPM Version][img-npm]][lnk-npm]

A basic configuration for Semantic Release when using a single package repository (no monorepo) and NPM or Yarn as
package manager **fully released from a root `/dist` folder**.

## Usage

Run:

```sh
npm i -DE @ivangabriele/semantic-release-config-dist semantic-release
```

or:

```sh
yarn add -DE @ivangabriele/semantic-release-config-dist semantic-release
```

Extend it in your `package.json`:

```json
{
  // ...
  "release": {
    "extends": "@ivangabriele/semantic-release-config-dist"
  }
}
```

Then add a manually triggered workflow in Github Actions (i.e.: `.github\workflows\release.yml`):

```yaml
name: Release

on: workflow_dispatch

jobs:
  release:
    name: Release
    runs-on: ubuntu-latest
    permissions:
      contents: write
      id-token: write
      issues: write
      pull-requests: write
    steps:
      - name: Checkout
        uses: actions/checkout@v4
        with:
          fetch-depth: 0
          persist-credentials: false
      - name: Setup
        uses: actions/setup-node@v4
        with:
          cache: yarn
          node-version: 20
      - name: Install
        run: yarn --immutable
      - name: Build
        run: yarn build
      - name: Release
        run: yarn semantic-release
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
      - name: Get new version
        run: echo "NEW_VERSION=$(npm pkg get version | sed 's/"//g')" >> "$GITHUB_ENV"
      - name: Create pull request
        uses: peter-evans/create-pull-request@v6
        with:
          branch: ci-release-v${{ env.NEW_VERSION }}
          commit-message: 'ci(release): v${{ env.NEW_VERSION }}'
          title: 'ci(release): v${{ env.NEW_VERSION }}'
          token: ${{ secrets.GITHUB_TOKEN }}
```

---

[img-github]:
  https://img.shields.io/github/actions/workflow/status/ivangabriele/semantic-release-config/check.yml?branch=main&label=CI&style=for-the-badge
[img-license]: https://img.shields.io/github/license/ivangabriele/semantic-release-config?style=flat-square
[img-npm]: https://img.shields.io/npm/v/@ivangabriele/semantic-release-config-dist?style=flat-square
[lnk-github]: https://github.com/ivangabriele/semantic-release-config/actions?query=branch%3Amain++
[lnk-license]: https://github.com/ivangabriele/semantic-release-config/blob/main/packages/dist/LICENSE
[lnk-npm]: https://www.npmjs.com/package/@ivangabriele/semantic-release-config-dist
npm package: @ivangabriele/semantic-release-config-dist-yarn
Description: My most commonly used Semantic Release configuration.
Author: Ivan Gabriele
Latest version: 4.0.1

# My Semantic Release Configuration

[![MIT License][img-license]][lnk-license] [![NPM Version][img-npm]][lnk-npm]

My most commonly used Semantic Release configuration.

## Usage

Run:

```sh
yarn add -DE @ivangabriele/semantic-release-config-dist-yarn
```

or:

```sh
npm i -DE @ivangabriele/semantic-release-config-dist-yarn
```

Extend it in your `package.json`:

```json
{
  // ...
  "release": {
    "extends": "@ivangabriele/semantic-release-config-dist-yarn"
  }
}
```

Then add a manually triggered workflow in Github Actions (i.e.: `.github\workflows\release.yml`):

```yaml
name: Release

on: workflow_dispatch

jobs:
  release:
    name: Release
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v3
        with:
          fetch-depth: 0
          persist-credentials: false
      - name: Setup
        uses: actions/setup-node@v3
        with:
          cache: yarn
          node-version: 20
      - name: Install
        run: yarn --frozen-lockfile
      - name: Build
        run: yarn build
      - name: Release
        run: yarn semantic-release
        env:
          GITHUB_TOKEN: ${{ secrets.GH_PAT }}
          NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
      - name: Get version
        id: get_version
        run: echo ::set-output name=version::$(npm pkg get version | sed 's/"//g')
      - name: Create pull request
        uses: peter-evans/create-pull-request@v4
        with:
          branch: ci-release-v${{ steps.get_version.outputs.version }}
          # https://docs.github.com/en/actions/managing-workflow-runs/skipping-workflow-runs
          commit-message: 'ci(release): ${{ steps.get_version.outputs.version }}'
          title: 'ci(release): ${{ steps.get_version.outputs.version }}'
          token: ${{ secrets.GH_PAT }}
```

---

[img-license]: https://img.shields.io/github/license/ivangabriele/semantic-release-config?style=for-the-badge
[img-npm]: https://img.shields.io/npm/v/@ivangabriele/semantic-release-config-dist-yarn?style=for-the-badge
[lnk-license]: https://github.com/ivangabriele/semantic-release-config/blob/main/packages/dist-yarn/LICENSE
[lnk-npm]: https://www.npmjs.com/package/@ivangabriele/semantic-release-config-dist-yarn
npm package: @ivangabriele/semantic-release-config-monorepo
Description: A semantic-release configuration for monorepo projects.
Author: Ivan Gabriele
Latest version: 4.1.5

# My Semantic Release Configuration

[![MIT License][img-license]][lnk-license] [![GitHub Check Workflow Status][img-github]][lnk-github]
[![NPM Version][img-npm]][lnk-npm]

A basic configuration for Semantic Release when using a monorepo and NPM or Yarn as package manager with packages in a
`packages/` folder.

## Usage

Run:

```sh
npm i -DE @ivangabriele/semantic-release-config-monorepo semantic-release
```

or:

```sh
yarn add -DE @ivangabriele/semantic-release-config-monorepo semantic-release
```

Extend it in your `package.json`:

```json
{
  // ...
  "release": {
    "extends": "@ivangabriele/semantic-release-config-monorepo"
  }
}
```

Then add a manually triggered workflow in Github Actions (i.e.: `.github\workflows\release.yml`):

```yaml
name: Release

on: workflow_dispatch

jobs:
  release:
    name: Release
    runs-on: ubuntu-latest
    permissions:
      contents: write
      id-token: write
      issues: write
      pull-requests: write
    steps:
      - name: Checkout
        uses: actions/checkout@v4
        with:
          fetch-depth: 0
          persist-credentials: false
      - name: Setup
        uses: actions/setup-node@v4
        with:
          cache: yarn
          node-version: 20
      - name: Install
        run: yarn --immutable
      - name: Build
        run: yarn build
      # We have to to login to NPM this way rather than using NPM_TOKEN env
      # because it's not available in @semantic-release/exec `publishCmd` context.
      - name: Login to NPM
        run: echo "//registry.npmjs.org/:_authToken=${{ secrets.NPM_TOKEN }}" > ~/.npmrc
      - name: Release
        run: yarn semantic-release
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      - name: Get new version
        run: echo "NEW_VERSION=$(npm pkg get version | sed 's/"//g')" >> "$GITHUB_ENV"
      - name: Create pull request
        uses: peter-evans/create-pull-request@v6
        with:
          branch: ci-release-v${{ env.NEW_VERSION }}
          commit-message: 'ci(release): v${{ env.NEW_VERSION }}'
          title: 'ci(release): v${{ env.NEW_VERSION }}'
          token: ${{ secrets.GITHUB_TOKEN }}
```

---

[img-github]:
  https://img.shields.io/github/actions/workflow/status/ivangabriele/semantic-release-config/check.yml?branch=main&label=CI&style=for-the-badge
[img-license]: https://img.shields.io/github/license/ivangabriele/semantic-release-config?style=flat-square
[img-npm]: https://img.shields.io/npm/v/@ivangabriele/semantic-release-config-monorepo?style=flat-square
[lnk-github]: https://github.com/ivangabriele/semantic-release-config/actions?query=branch%3Amain++
[lnk-license]: https://github.com/ivangabriele/semantic-release-config/blob/main/packages/monorepo/LICENSE
[lnk-npm]: https://www.npmjs.com/package/@ivangabriele/semantic-release-config
npm package: @ivangabriele/semantic-release-config-no-npm
Description: A semantic-release configuration for projects without npm publish.
Author: Ivan Gabriele
Latest version: 4.1.5

# My Semantic Release Configuration

[![MIT License][img-license]][lnk-license] [![GitHub Check Workflow Status][img-github]][lnk-github]
[![NPM Version][img-npm]][lnk-npm]

A basic configuration for Semantic Release when using a single package repository (no monorepo) and NPM or Yarn as
package manager **without NPM publishing**.

## Usage

Run:

```sh
npm i -DE @ivangabriele/semantic-release-config-no-npm semantic-release
```

or:

```sh
yarn add -DE @ivangabriele/semantic-release-config-no-npm semantic-release
```

Extend it in your `package.json`:

```json
{
  // ...
  "release": {
    "extends": "@ivangabriele/semantic-release-config-no-npm"
  }
}
```

Then add a manually triggered workflow in Github Actions (i.e.: `.github\workflows\release.yml`):

```yaml
name: Release

on: workflow_dispatch

jobs:
  release:
    name: Release
    runs-on: ubuntu-latest
    permissions:
      contents: write
      id-token: write
      issues: write
      pull-requests: write
    steps:
      - name: Checkout
        uses: actions/checkout@v4
        with:
          fetch-depth: 0
          persist-credentials: false
      - name: Setup
        uses: actions/setup-node@v4
        with:
          cache: yarn
          node-version: 20
      - name: Install
        run: yarn --immutable
      - name: Build
        run: yarn build
      - name: Release
        run: yarn semantic-release
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
      - name: Get new version
        run: echo "NEW_VERSION=$(npm pkg get version | sed 's/"//g')" >> "$GITHUB_ENV"
      - name: Create pull request
        uses: peter-evans/create-pull-request@v6
        with:
          branch: ci-release-v${{ env.NEW_VERSION }}
          commit-message: 'ci(release): v${{ env.NEW_VERSION }}'
          title: 'ci(release): v${{ env.NEW_VERSION }}'
          token: ${{ secrets.GITHUB_TOKEN }}
```

---

[img-github]:
  https://img.shields.io/github/actions/workflow/status/ivangabriele/semantic-release-config/check.yml?branch=main&label=CI&style=for-the-badge
[img-license]: https://img.shields.io/github/license/ivangabriele/semantic-release-config?style=flat-square
[img-npm]: https://img.shields.io/npm/v/@ivangabriele/semantic-release-config-no-npm?style=flat-square
[lnk-github]: https://github.com/ivangabriele/semantic-release-config/actions?query=branch%3Amain++
[lnk-license]: https://github.com/ivangabriele/semantic-release-config/blob/main/packages/no-npm/LICENSE
[lnk-npm]: https://www.npmjs.com/package/@ivangabriele/semantic-release-config
npm package: @ivangabriele/tsconfig-base
Description: My most commonly used Typescript Base configuration.
Author: Ivan Gabriele
Latest version: 2.0.0

# My Typescript Base Configuration

[![img-license]][lnk-license] [![img-npm]][lnk-npm] [![img-github]][lnk-github]

My most commonly used Typescript Base configuration.

## Usage

```sh
npm i -DE @ivangabriele/tsconfig-base
```

or:

```sh
yarn add -DE @ivangabriele/tsconfig-base
```

Then extend it in your `tsconfig.json`:

```json
{
  "extends": "@ivangabriele/tsconfig-base"
}
```

---

[img-github]:
  https://img.shields.io/github/actions/workflow/status/ivangabriele/tsconfig/check.yml?branch=main&label=CI&style=for-the-badge
[img-license]: https://img.shields.io/github/license/ivangabriele/tsconfig?style=for-the-badge
[img-npm]: https://img.shields.io/npm/v/@ivangabriele/tsconfig-base?style=for-the-badge
[lnk-github]: https://github.com/ivangabriele/tsconfig/actions?query=branch%3Amain++
[lnk-license]: https://github.com/ivangabriele/tsconfig/blob/main/packages/base/LICENSE
[lnk-npm]: https://www.npmjs.com/package/@ivangabriele/tsconfig-base
npm package: @ivangabriele/tsconfig-next
Description: My most commonly used Typescript Next.js configuration.
Author: Ivan Gabriele
Latest version: 2.0.0

# My Typescript Next.js Configuration

[![img-license]][lnk-license] [![img-npm]][lnk-npm] [![img-github]][lnk-github]

My most commonly used Typescript Next.js configuration.

## Usage

```sh
npm i -DE @ivangabriele/tsconfig-next
```

or:

```sh
yarn add -DE @ivangabriele/tsconfig-next
```

Then extend it in your `tsconfig.json`:

```json
{
  "extends": "@ivangabriele/tsconfig-next"
}
```

---

[img-github]:
  https://img.shields.io/github/actions/workflow/status/ivangabriele/tsconfig/check.yml?branch=main&label=CI&style=for-the-badge
[img-license]: https://img.shields.io/github/license/ivangabriele/tsconfig?style=for-the-badge
[img-npm]: https://img.shields.io/npm/v/@ivangabriele/tsconfig-next?style=for-the-badge
[lnk-github]: https://github.com/ivangabriele/tsconfig/actions?query=branch%3Amain++
[lnk-license]: https://github.com/ivangabriele/tsconfig/blob/main/packages/next/LICENSE
[lnk-npm]: https://www.npmjs.com/package/@ivangabriele/tsconfig-next
npm package: @ivangabriele/tsconfig-node
Description: My most commonly used Typescript Node.js configuration.
Author: Ivan Gabriele
Latest version: 2.0.0

# My Typescript Node.js Configuration

[![img-license]][lnk-license] [![img-npm]][lnk-npm] [![img-github]][lnk-github]

My most commonly used Typescript Node.js configuration.

## Usage

```sh
npm i -DE @ivangabriele/tsconfig-node
```

or:

```sh
yarn add -DE @ivangabriele/tsconfig-node
```

Then extend it in your `tsconfig.json`:

```json
{
  "extends": "@ivangabriele/tsconfig-node"
}
```

---

[img-github]:
  https://img.shields.io/github/actions/workflow/status/ivangabriele/tsconfig/check.yml?branch=main&label=CI&style=for-the-badge
[img-license]: https://img.shields.io/github/license/ivangabriele/tsconfig?style=for-the-badge
[img-npm]: https://img.shields.io/npm/v/@ivangabriele/tsconfig-node?style=for-the-badge
[lnk-github]: https://github.com/ivangabriele/tsconfig/actions?query=branch%3Amain++
[lnk-license]: https://github.com/ivangabriele/tsconfig/blob/main/packages/node/LICENSE
[lnk-npm]: https://www.npmjs.com/package/@ivangabriele/tsconfig-node
npm package: @ivangabriele/tsconfig-react
Description: My most commonly used Typescript React configuration.
Author: Ivan Gabriele
Latest version: 2.0.0

# My Typescript React Configuration

[![img-license]][lnk-license] [![img-npm]][lnk-npm] [![img-github]][lnk-github]

My most commonly used Typescript React configuration.

## Usage

```sh
npm i -DE @ivangabriele/tsconfig-react
```

or:

```sh
yarn add -DE @ivangabriele/tsconfig-react
```

Then extend it in your `tsconfig.json`:

```json
{
  "extends": "@ivangabriele/tsconfig-react"
}
```

---

[img-github]:
  https://img.shields.io/github/actions/workflow/status/ivangabriele/tsconfig/check.yml?branch=main&label=CI&style=for-the-badge
[img-license]: https://img.shields.io/github/license/ivangabriele/tsconfig?style=for-the-badge
[img-npm]: https://img.shields.io/npm/v/@ivangabriele/tsconfig-react?style=for-the-badge
[lnk-github]: https://github.com/ivangabriele/tsconfig/actions?query=branch%3Amain++
[lnk-license]: https://github.com/ivangabriele/tsconfig/blob/main/packages/react/LICENSE
[lnk-npm]: https://www.npmjs.com/package/@ivangabriele/tsconfig-react