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}