Support `extra_args` keyword in pre-commit GitHub action
diff --git a/README.md b/README.md
index 92bbe9b..27bb546 100644
--- a/README.md
+++ b/README.md
@@ -41,6 +41,20 @@
 
 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):
+
+```yaml
+    - uses: pre-commit/action@v1.0.1
+      with:
+        extra_args: flake8 --all-files
+```
+
 ### using this action in private repositories
 
 this action also provides an additional behaviour when used in private
diff --git a/action.yml b/action.yml
index 941ec1d..9906815 100644
--- a/action.yml
+++ b/action.yml
@@ -1,6 +1,10 @@
 name: pre-commit
 description: run pre-commit and optionally commit back to the pull request
 inputs:
+  extra_args:
+    description: options to pass to pre-commit run
+    required: false
+    default: '--all-files'
   token:
     description: github token to clone / push with
     required: false
diff --git a/index.js b/index.js
index 64bdac2..fb87234 100644
--- a/index.js
+++ b/index.js
@@ -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 @@
         await exec.exec('pip', ['freeze', '--local']);
     });
 
+    const args = [
+        'run',
+        '--show-diff-on-failure',
+        '--color=always',
+        ...tr.argStringToArray(core.getInput('extra_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}