Skip to content
This repository has been archived by the owner. It is now read-only.
Browse files
Merge pull request #15 from deepyaman/patch-1
Support `extra_args` keyword in pre-commit GitHub action
  • Loading branch information
asottile committed May 15, 2020
2 parents 56842c8 + 30b00a6 commit b1bfac3edfe676960d6d01585b5a1d2f9d3f1813
Showing 3 changed files with 28 additions and 7 deletions.
@@ -41,6 +41,20 @@ This does a few things:

Hopefully in the future when `actions` matures the yaml can be simplified.

### using this action with custom invocations

By default, this action runs all the hooks against all the files. `extra_args`
lets users specify a single hook id and/or options to pass to `pre-commit run`.

Here's a sample step configuration that only runs the `flake8` hook against all
the files (use the template above except for the `pre-commit` action):

- uses: pre-commit/action@v1.0.1
extra_args: flake8 --all-files

### using this action in private repositories

this action also provides an additional behaviour when used in private
@@ -1,6 +1,10 @@
name: pre-commit
description: run pre-commit and optionally commit back to the pull request
description: options to pass to pre-commit run
required: false
default: '--all-files'
description: github token to clone / push with
required: false
@@ -1,13 +1,10 @@
const core = require('@actions/core');
const exec = require('@actions/exec');
const github = require('@actions/github');

const ARGS = [
'run', '--all-files', '--show-diff-on-failure', '--color=always'
const tr = require('@actions/exec/lib/toolrunner');

function addToken(url, token) {
return url.replace(/^https:\/\//, `https://x-access-token:${token}@`)
return url.replace(/^https:\/\//, `https://x-access-token:${token}@`);

async function main() {
@@ -16,15 +13,21 @@ async function main() {
await exec.exec('pip', ['freeze', '--local']);

const args = [
const token = core.getInput('token');
const pr = github.context.payload.pull_request;
const push = !!token && !!pr;
const ret = await exec.exec('pre-commit', ARGS, {ignoreReturnCode: push});
const ret = await exec.exec('pre-commit', args, {ignoreReturnCode: push});
if (ret && push) {
// actions do not run on pushes made by actions.
// need to make absolute sure things are good before pushing
// TODO: is there a better way around this limitation?
await exec.exec('pre-commit', ARGS);
await exec.exec('pre-commit', args);

const diff = await exec.exec(
'git', ['diff', '--quiet'], {ignoreReturnCode: true}

0 comments on commit b1bfac3

Please sign in to comment.