feat: support git push arguments

ref issue #100
This commit is contained in:
Federico Grandi
2020-12-23 12:55:50 +01:00
parent d1d225c38f
commit a51640c51f
4 changed files with 45 additions and 26 deletions

View File

@@ -43,7 +43,7 @@ Add a step like this to your workflow:
# Default: '--no-rebase'
pull_strategy: '--no-rebase or --no-ff or --rebase'
# Whether to push the commit and, if any, its tags to the repo (only `true` and `false` are accepted)
# Whether to push the commit and, if any, its tags to the repo. It can also be used to set the git push arguments (see the paragraph below for more info)
# Default: true
push: false
@@ -76,6 +76,17 @@ You can delete files with the `remove` option: that runs a `git rm` command that
The script will not stop if one of the git commands fails. E.g.: if your command shows a "fatal: pathspec 'yourFile' did not match any files" error the action will go on.
You can also use JSON or YAML arrays (e.g. `'["first", "second"]'`, `"['first', 'second']"`) to make the action run multiple `git rm` commands: the action will log how your input has been parsed. Please mind that your input still needs to be a string because of how GitHub Actions works with inputs: just write your array inside the string, the action will parse it later.
### Pushing:
By default the action runs the following command: `git push origin ${branch input} --set-upstream`. You can use the `push` input to modify this behavior, here's what you can set it to:
- `true`: this is the default value, it will behave as usual.
- `false`: this prevents the action from pushing at all, no `git push` command is run.
- any other string:
The action will use your string as the arguments for the `git push` command. Please note that nothing is used other than your arguments, and the command will result in `git push ${push input}` (no remote, no branch, no `--set-upstream`, you have to include them yourself).
One way to use this is if you want to force push to a branch of your repo: you'll need to set the `push` input to, for example, `origin yourBranch --force`.
### Tagging:
You can use the `tag` option to enter the arguments for a `git add` command. In order for the action to isolate the tag name from the rest of the arguments, it should be the first word not preceded by an hyphen (e.g. `-a tag-name -m "some other stuff"` is ok).
@@ -192,6 +203,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
<!-- markdownlint-enable -->
<!-- prettier-ignore-end -->
<!-- ALL-CONTRIBUTORS-LIST:END -->
This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!

View File

@@ -27,8 +27,9 @@ inputs:
required: false
default: '--no-rebase'
push:
description: Whether to push the commit and, if any, its tags to the repo
description: Whether to push the commit and, if any, its tags to the repo. It can also be used to set the git push arguments (more info in the README)
required: false
default: 'true'
remove:
description: Arguments for the git rm command
required: false

File diff suppressed because one or more lines are too long

View File

@@ -99,17 +99,34 @@ console.log(`Running in ${baseDir}`)
.catch((err) => setFailed(err))
} else info('> No tag info provided.')
if (getInput('push')) {
const pushOption = parseBool(getInput('push')) ?? getInput('push')
if (pushOption) {
// If the options is `true | string`...
info('> Pushing commit to repo...')
await git.push(
'origin',
getInput('branch'),
{ '--set-upstream': null },
(err, data?) => {
if (data) setOutput('pushed', 'true')
return log(err, data)
}
)
if (pushOption === true) {
debug(`Running: git push origin ${getInput('branch')} --set-upstream`)
await git.push(
'origin',
getInput('branch'),
{ '--set-upstream': null },
(err, data?) => {
if (data) setOutput('pushed', 'true')
return log(err, data)
}
)
} else {
debug(`Running: git push ${pushOption}`)
await git.push(
undefined,
undefined,
pushOption.split(' '),
(err, data?) => {
if (data) setOutput('pushed', 'true')
return log(err, data)
}
)
}
if (getInput('tag')) {
info('> Pushing tags to repo...')
@@ -294,26 +311,15 @@ async function checkInputs() {
)})`
)
}
// #endregion
// #region push
setDefault('push', 'true')
if (getInput('push')) {
// It's just to scope the parsed constant
// It has to be either 'true', 'false', or any other string (use as arguments)
const parsed = parseBool(getInput('push'))
if (parsed === undefined)
throw new Error(
`"${getInput(
'push'
)}" is not a valid value for the 'push' input: only "true" and "false" are allowed.`
)
if (!parsed) setInput('push', undefined)
debug(
`Current push option: ${getInput('push')} (${typeof getInput('push')})`
`Current push option: '${getInput('push')}' (parsed as ${typeof parsed})`
)
}
// #endregion