From 30b00a6cd975a75c7a08e96f1de0d06a3bdb897b Mon Sep 17 00:00:00 2001 From: Deepyaman Datta Date: Tue, 17 Mar 2020 18:30:51 -0500 Subject: [PATCH] Support `extra_args` keyword in pre-commit GitHub action --- README.md | 14 ++++++++++++++ action.yml | 4 ++++ index.js | 17 ++++++++++------- 3 files changed, 28 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 92bbe9b..27bb546 100644 --- a/README.md +++ b/README.md @@ -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): + +```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 @@ async function main() { 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}