egormkn / run-in-subdirectory

πŸ“ A command-line utility for running commands in subdirectories (e.g. in a monorepo) with a set of pre-commit hooks

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Build Coverage PyPI - Version PyPI - License PyPI - Python Version pre-commit Code style: black Imports: isort Linting: ruff

run pre-commit in subdirectory

run-in-subdirectory

A command-line utility for running commands in subdirectories (e.g. in a monorepo) with a set of pre-commit hooks

Usage

As a pre-commit hook

  • Use run-in-subdirectory hook to run command in a subdirectory passed as the first argument.

    In this example, pre-commit will run the command npx --no -- prettier -w -u in client subdirectory, and the command poetry run black in server subdirectory:

    repos:
      - repo: https://github.com/egormkn/run-in-subdirectory
        rev: 1.0.1
        hooks:
          - id: run-in-subdirectory
            alias: prettier
            name: Format client code with Prettier
            args: ["client", "npx --no -- prettier -w -u"]
            types: [ text ]
            files: ^client/
          - id: run-in-subdirectory
            alias: black
            name: Format server code with Black
            args: ["server", "poetry run black"]
            types: [ python ]
            files: ^client/
  • Use one of run-in-...-level-subdirectory hooks to automatically extract first, second or third-level subdirectory from the last file path, that was passed to the hook by pre-commit.

    Note that you should set files, types and/or exclude properties so that the hook only runs for files in that subdirectory.

    repos:
      - repo: https://github.com/egormkn/run-in-subdirectory
        rev: 1.0.1
        hooks:
          - id: run-in-first-level-subdirectory
            alias: prettier
            name: Format client code with Prettier
            args: ["npx --no -- prettier -w -u"]
            types: [ text ]
            files: ^client/
          - id: run-in-first-level-subdirectory
            alias: black
            name: Format server code with Black
            args: ["poetry run black"]
            types: [ python ]
            files: ^client/
  • If the available hooks are not enough for your task, use a custom Python hook and execute run-in-subdirectory as a command-line utility). Also, please open an issue to report such cases.

    repos:
      - repo: local
        hooks:
          - id: prettier
            name: Format client code with Prettier
            language: python
            additional_dependencies:
              - "run-in-subdirectory==1.0.1"
            entry: run-in-subdirectory -d client npx --no -- prettier -w -u
            types: [ text ]
            files: ^client/

As a command-line utility

run-in-subdirectory can also be used as a command-line utility:

pip install run-in-subdirectory
usage: run-in-subdirectory [-h] [-v] (-l LEVEL | -d DIRECTORY) executable [args ...]

Runs the command in a subdirectory and fixes paths in arguments.

positional arguments:
  executable            Executable to run
  args                  Sequence of program arguments

options:
  -h, --help            show this help message and exit
  -v, --verbose         Print information about a command to be called
  -l LEVEL, --level LEVEL
                        Subdirectory level (0 for top-level directory)
  -d DIRECTORY, --directory DIRECTORY
                        Subdirectory within which the subprocess will be executed

example:
  When this program is executed with the following command:
    run-in-subdirectory -d client npx --no prettier client/src/index.ts
  Then the command will be executed:
    npx --no prettier src/index.ts
  with the current working directory set to `client`.

About

πŸ“ A command-line utility for running commands in subdirectories (e.g. in a monorepo) with a set of pre-commit hooks

License:MIT License


Languages

Language:Python 100.0%