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 details)

Uploaded Source

Built Distribution

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

Uploaded Python 3

File details

Details for the file run_in_subdirectory-1.0.1.tar.gz.

File metadata

  • Download URL: run_in_subdirectory-1.0.1.tar.gz
  • Upload date:
  • Size: 8.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/4.0.2 CPython/3.11.8

File hashes

Hashes for run_in_subdirectory-1.0.1.tar.gz
Algorithm Hash digest
SHA256 3fb900d71e91a827e78e92169f551206def054a43918d25190b7bd8e46ed398d
MD5 c255930a01bf52de2b3c58c24d95c3a7
BLAKE2b-256 588543f2a94180b2fde7e0670a8465ed06ca461e9bf3eac46009d3e2a0b5083d

See more details on using hashes here.

File details

Details for the file run_in_subdirectory-1.0.1-py3-none-any.whl.

File metadata

File hashes

Hashes for run_in_subdirectory-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 cd8fd52a5754d539d6edede24e9383bd63e32df408f65351ccfb993e3a129fa7
MD5 f2be39e82f88e644e42fd26c4581c9ee
BLAKE2b-256 834f104ded58c59efda58530bc41f654520eea66325e6d0872f6c6782022fada

See more details on using hashes here.

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