Skip to content

Commit

Permalink
feat: support git push arguments
Browse files Browse the repository at this point in the history
ref issue #100
  • Loading branch information
EndBug committed Dec 23, 2020
1 parent d1d225c commit a51640c
Show file tree
Hide file tree
Showing 4 changed files with 45 additions and 26 deletions.
14 changes: 13 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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).
Expand Down Expand Up @@ -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!
Expand Down
3 changes: 2 additions & 1 deletion action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion lib/index.js

Large diffs are not rendered by default.

52 changes: 29 additions & 23 deletions src/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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...')
Expand Down Expand Up @@ -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
Expand Down

0 comments on commit a51640c

Please sign in to comment.