repo-stream

Cron-based remote pre-commit executions by opening pull requests.


License
BSD-3-Clause
Install
pip install repo-stream==1.0.2

Documentation

repo-stream

Cron-based remote pre-commit executions by opening pull requests.

  • Do you've a lot of old projects that are using deprecated configuration?
  • Do you want to test a small change in a lot of projects at the same time without adding them one by one?

Those are the reasons behind repo-stream.

PyPI version Test Coverage status

How does it work?

Scans your repositories looking for pre-commit repo-stream hooks and run pre-commit using another remote configuration file, which location is specified in this hook. If this execution edits file contents, opens a pull request against the repository.

So you can use repo-stream to run one-time pre-commit hooks for all your repositories without have to define them inside the configuration of each one.

Usage

  1. Create a repo-stream hook in the pre-commit configuration of your project. If this is found, repo-stream will search a pre-commit configuration file at updater under config repository arguments and will run pre-commit using that configuration against the current repository.

    - repo: https://github.com/mondeja/repo-stream
      rev: v1.3.1
      hooks:
        - id: repo-stream
          args:
            - -config=https://github.com/<your-username>/repo-stream-config
            - -updater=upstream

    You don't need to specify the extension .yaml in the updater argument.

  2. Create your repo-stream configuration files repository, for example at https://github.com/<your-username>/repo-stream-config.

  3. Create the pre-commit configuration file, following this example would be at upstream.yaml, for example:

    repos:
      - repo: https://github.com/mondeja/pre-commit-hooks
        rev: v1.5.2
        hooks:
          - id: add-pre-commit-hook
            args: 
              - -repo=https://github.com/mondeja/pre-commit-hooks
              - -id=dev-extras-required
              - -rev=v1.5.2

    For more information about this hook see add-a-pre-commit-hook.

  4. Create the cron task using some platform like Github Actions:

    name: repo-stream update
    
    on:
      schedule:
        - cron: 0 4 1/7 * *
      workflow_dispatch:
    
    jobs:
      repo-stream-update:
        runs-on: ubuntu-latest
        steps:
          - uses: actions/checkout@v2
          - name: Set up Python
            uses: actions/setup-python@v2
            with:
              python-version: 3.x
          - name: Install repo-stream
            run: pip install repo-stream
          - name: Run repo-stream update
            run: repo-stream <your-username>
            env:
              GITHUB_TOKEN: ${{ secrets.GH_TOKEN }}
              GITHUB_USERNAME: <your-username>
  • GH_TOKEN must be a secret configured for the repository with the Github user token of <your-username> user.
  • If you want to update other repositories not published under your user, pass them as parameters of repo-stream <your-username> <other-username>.

Consult repo-stream --help for documentation about valid arguments.

Usage as Github Action

name: repo-stream update

on:
  schedule:
    - cron: 0 4 1/7 * *
  workflow_dispatch:

jobs:
  repo-stream-update:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/setup-python@v2
        with:
          python-version: 3.x
      - uses: mondeja/repo-stream@v1.3.1
        with:
          usernames: <your-username> <other-username>
          args: --dry-run
        env:
          GITHUB_TOKEN: ${{ secrets.GH_TOKEN }}
          GITHUB_USERNAME: <your-username>

Common workflows

Add a pre-commit hook

You can use the pre-commit hook mondeja/pre-commit-hooks#add-pre-commit-hook to add a new pre-commit hook to the pre-commit configuration of a project.

Note that this hook only makes sense executed from outside, using a workflow like repo-stream. So repo-stream allows you to create pre-commit hooks for other things than its main workflow mechanism.

For example:

# upstream.yaml
repos:
  - repo: https://github.com/mondeja/pre-commit-hooks
      rev: v1.5.2
      hooks:
        - id: add-pre-commit-hook
          args: 
            - -repo=https://github.com/mondeja/pre-commit-hooks
            - -id=dev-extras-required
            - -rev=v1.5.2

This would add the hook dev-extras-required to the pre-commit configuration of your project, if it isn't already defined.

Current limitations

  • Only works with Github repositories.