Skip to main content

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

Project description

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`.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

run_in_subdirectory-1.0.1.tar.gz (8.9 kB view hashes)

Uploaded Source

Built Distribution

run_in_subdirectory-1.0.1-py3-none-any.whl (10.4 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page