mirror of
https://github.com/stefanzweifel/git-auto-commit-action.git
synced 2025-07-05 23:19:45 +08:00
Compare commits
54 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
01d77ca6cb | ||
|
6371fedd09 | ||
|
f9017b24ee | ||
|
66f124b8c2 | ||
|
778341af66 | ||
|
33b203d92a | ||
|
a82d80a75f | ||
|
3cc016cfc8 | ||
|
ddb7ae4159 | ||
|
b001e5f0ff | ||
|
6494dc61d3 | ||
|
76180511d9 | ||
|
ae114628ea | ||
|
3058f91afb | ||
|
8ddf02de71 | ||
|
e7955f713c | ||
|
739fd03b2d | ||
|
af302a9c63 | ||
|
b863ae1933 | ||
|
adb37b5a29 | ||
|
8480c68cbb | ||
|
4f8f3ad16e | ||
|
11a6e5f38f | ||
|
35d037abf5 | ||
|
bf425dc136 | ||
|
cfd6ac4a3b | ||
|
19379b46c9 | ||
|
12e100dacb | ||
|
2ac10431a8 | ||
|
4db797a961 | ||
|
e256565ae5 | ||
|
8a23be4b32 | ||
|
ed295bd35a | ||
|
bd434eed48 | ||
|
1666a49083 | ||
|
1d986f74dd | ||
|
ad56d4eb46 | ||
|
9fa4cb99cf | ||
|
cec27bde37 | ||
|
244febd79d | ||
|
c86fa26bed | ||
|
e35726034b | ||
|
7f171889c8 | ||
|
76f415fb30 | ||
|
3e796a0146 | ||
|
e833d4f211 | ||
|
0aca01a1ef | ||
|
03fddc470c | ||
|
ef7ed32535 | ||
|
9062db8404 | ||
|
80052f0645 | ||
|
3b8231379d | ||
|
d9307b5e8c | ||
|
aa2cec9c08 |
2
.github/workflows/git-auto-commit.yml
vendored
2
.github/workflows/git-auto-commit.yml
vendored
@ -17,6 +17,8 @@ jobs:
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
ref: ${{ github.head_ref }}
|
||||
|
||||
- name: Use git-auto-commit-action
|
||||
id: "auto-commit-action"
|
||||
|
2
.github/workflows/update-changelog.yaml
vendored
2
.github/workflows/update-changelog.yaml
vendored
@ -27,7 +27,7 @@ jobs:
|
||||
latest-version: ${{ github.event.release.name }}
|
||||
|
||||
- name: Commit updated CHANGELOG
|
||||
uses: stefanzweifel/git-auto-commit-action@v5
|
||||
uses: stefanzweifel/git-auto-commit-action@v6
|
||||
with:
|
||||
branch: master
|
||||
commit_message: Update CHANGELOG
|
||||
|
50
CHANGELOG.md
50
CHANGELOG.md
@ -5,10 +5,58 @@ All notable changes to this project will be documented in this file.
|
||||
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
|
||||
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
|
||||
|
||||
## [Unreleased](https://github.com/stefanzweifel/git-auto-commit-action/compare/v5.0.1...HEAD)
|
||||
## [Unreleased](https://github.com/stefanzweifel/git-auto-commit-action/compare/v6.0.1...HEAD)
|
||||
|
||||
> TBD
|
||||
|
||||
## [v6.0.1](https://github.com/stefanzweifel/git-auto-commit-action/compare/v6.0.0...v6.0.1) - 2025-06-11
|
||||
|
||||
### Fixed
|
||||
|
||||
- Disable Check if Repo is in Detached State ([#379](https://github.com/stefanzweifel/git-auto-commit-action/pull/379)) [@stefanzweifel](https://github.com/@stefanzweifel)
|
||||
|
||||
## [v6.0.0](https://github.com/stefanzweifel/git-auto-commit-action/compare/v5.2.0...v6.0.0) - 2025-06-10
|
||||
|
||||
### Added
|
||||
|
||||
- Throw error early if repository is in a detached state ([#357](https://github.com/stefanzweifel/git-auto-commit-action/pull/357))
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fix PAT instructions with Dependabot ([#376](https://github.com/stefanzweifel/git-auto-commit-action/pull/376)) [@Dreamsorcerer](https://github.com/@Dreamsorcerer)
|
||||
|
||||
### Removed
|
||||
|
||||
- Remove support for `create_branch`, `skip_checkout`, `skip_Fetch` ([#314](https://github.com/stefanzweifel/git-auto-commit-action/pull/314))
|
||||
|
||||
## [v5.2.0](https://github.com/stefanzweifel/git-auto-commit-action/compare/v5.1.0...v5.2.0) - 2025-04-19
|
||||
|
||||
### Added
|
||||
|
||||
- Add `create_git_tag_only` option to skip commiting and always create a git-tag. ([#364](https://github.com/stefanzweifel/git-auto-commit-action/pull/364)) [@zMynxx](https://github.com/@zMynxx)
|
||||
- Add Test for `create_git_tag_only` feature ([#367](https://github.com/stefanzweifel/git-auto-commit-action/pull/367)) [@stefanzweifel](https://github.com/@stefanzweifel)
|
||||
|
||||
### Fixed
|
||||
|
||||
- docs: Update README.md per #354 ([#361](https://github.com/stefanzweifel/git-auto-commit-action/pull/361)) [@rasa](https://github.com/@rasa)
|
||||
|
||||
## [v5.1.0](https://github.com/stefanzweifel/git-auto-commit-action/compare/v5.0.1...v5.1.0) - 2025-01-11
|
||||
|
||||
### Changed
|
||||
|
||||
- Include `github.actor_id` in default `commit_author` ([#354](https://github.com/stefanzweifel/git-auto-commit-action/pull/354)) [@parkerbxyz](https://github.com/@parkerbxyz)
|
||||
|
||||
### Fixed
|
||||
|
||||
- docs(README): fix broken protected branch docs link ([#346](https://github.com/stefanzweifel/git-auto-commit-action/pull/346)) [@scarf005](https://github.com/@scarf005)
|
||||
- Update README.md ([#343](https://github.com/stefanzweifel/git-auto-commit-action/pull/343)) [@Kludex](https://github.com/@Kludex)
|
||||
|
||||
### Dependency Updates
|
||||
|
||||
- Bump bats from 1.11.0 to 1.11.1 ([#353](https://github.com/stefanzweifel/git-auto-commit-action/pull/353)) [@dependabot](https://github.com/@dependabot)
|
||||
- Bump github/super-linter from 6 to 7 ([#342](https://github.com/stefanzweifel/git-auto-commit-action/pull/342)) [@dependabot](https://github.com/@dependabot)
|
||||
- Bump github/super-linter from 5 to 6 ([#335](https://github.com/stefanzweifel/git-auto-commit-action/pull/335)) [@dependabot](https://github.com/@dependabot)
|
||||
|
||||
## [v5.0.1](https://github.com/stefanzweifel/git-auto-commit-action/compare/v5.0.0...v5.0.1) - 2024-04-12
|
||||
|
||||
### Fixed
|
||||
|
48
README.md
48
README.md
@ -19,7 +19,7 @@ Adding git-auto-commit to your Workflow only takes a couple lines of code.
|
||||
2. Add the following step at the end of your job, after other steps that might add or change files.
|
||||
|
||||
```yaml
|
||||
- uses: stefanzweifel/git-auto-commit-action@v5
|
||||
- uses: stefanzweifel/git-auto-commit-action@v6
|
||||
```
|
||||
|
||||
Your Workflow should look similar to this example.
|
||||
@ -47,7 +47,7 @@ jobs:
|
||||
# …
|
||||
|
||||
# Commit all changed files back to the repository
|
||||
- uses: stefanzweifel/git-auto-commit-action@v5
|
||||
- uses: stefanzweifel/git-auto-commit-action@v6
|
||||
```
|
||||
|
||||
> [!NOTE]
|
||||
@ -56,15 +56,14 @@ jobs:
|
||||
The following is an extended example with all available options.
|
||||
|
||||
```yaml
|
||||
- uses: stefanzweifel/git-auto-commit-action@v5
|
||||
- uses: stefanzweifel/git-auto-commit-action@v6
|
||||
with:
|
||||
# Optional. Commit message for the created commit.
|
||||
# Defaults to "Apply automatic changes"
|
||||
commit_message: Automated Change
|
||||
|
||||
# Optional. Local and remote branch name where commit is going to be pushed
|
||||
# to. Defaults to the current branch.
|
||||
# You might need to set `create_branch: true` if the branch does not exist.
|
||||
# Optional. Remote branch name where commit is going to be pushed to.
|
||||
# Defaults to the current branch.
|
||||
branch: feature-123
|
||||
|
||||
# Optional. Options used by `git-commit`.
|
||||
@ -85,7 +84,7 @@ The following is an extended example with all available options.
|
||||
# Optional commit user and author settings
|
||||
commit_user_name: My GitHub Actions Bot # defaults to "github-actions[bot]"
|
||||
commit_user_email: my-github-actions-bot@example.org # defaults to "41898282+github-actions[bot]@users.noreply.github.com"
|
||||
commit_author: Author <actions@github.com> # defaults to "username <username@users.noreply.github.com>", where "username" belongs to the author of the commit that triggered the run
|
||||
commit_author: Author <actions@github.com> # defaults to "username <numeric_id+username@users.noreply.github.com>", where "numeric_id" and "username" belong to the author of the commit that triggered the run
|
||||
|
||||
# Optional. Tag name being created in the local repository and
|
||||
# pushed to remote repository and defined branch.
|
||||
@ -105,19 +104,14 @@ The following is an extended example with all available options.
|
||||
|
||||
# Optional. Disable dirty check and always try to create a commit and push
|
||||
skip_dirty_check: true
|
||||
|
||||
# Optional. Skip internal call to `git fetch`
|
||||
skip_fetch: true
|
||||
|
||||
# Optional. Skip internal call to `git checkout`
|
||||
skip_checkout: true
|
||||
|
||||
# Optional. Prevents the shell from expanding filenames.
|
||||
# Details: https://www.gnu.org/software/bash/manual/html_node/Filename-Expansion.html
|
||||
disable_globbing: true
|
||||
|
||||
# Optional. Create given branch name in local and remote repository.
|
||||
create_branch: true
|
||||
# Optional. Creates a new tag and pushes it to remote without creating a commit.
|
||||
# Skips dirty check and changed files. Must be used with `tagging_message`.
|
||||
create_git_tag_only: false
|
||||
```
|
||||
|
||||
Please note that the Action depends on `bash`. If you're using the Action in a job in combination with a custom Docker container, make sure that `bash` is installed.
|
||||
@ -154,7 +148,7 @@ jobs:
|
||||
- name: Run php-cs-fixer
|
||||
uses: docker://oskarstark/php-cs-fixer-ga
|
||||
|
||||
- uses: stefanzweifel/git-auto-commit-action@v5
|
||||
- uses: stefanzweifel/git-auto-commit-action@v6
|
||||
with:
|
||||
commit_message: Apply php-cs-fixer changes
|
||||
```
|
||||
@ -169,13 +163,14 @@ You can use these outputs to trigger other Actions in your Workflow run based on
|
||||
|
||||
- `changes_detected`: Returns either "true" or "false" if the repository was dirty and files have changed.
|
||||
- `commit_hash`: Returns the full hash of the commit if one was created.
|
||||
- `create_git_tag_only`: Returns either "true" or "false" if a tag was created, when `create_git_tag_only` was used.
|
||||
|
||||
**⚠️ When using outputs, the step needs to be given an id. See example below.**
|
||||
|
||||
### Example
|
||||
|
||||
```yaml
|
||||
- uses: stefanzweifel/git-auto-commit-action@v5
|
||||
- uses: stefanzweifel/git-auto-commit-action@v6
|
||||
id: auto-commit-action #mandatory for the output to show up in ${{ steps }}
|
||||
with:
|
||||
commit_message: Apply php-cs-fixer changes
|
||||
@ -275,7 +270,7 @@ The example below can be used as a starting point to generate a multiline commit
|
||||
# Quick and dirty step to get rid of the temporary file holding the commit message
|
||||
- run: rm -rf commitmessage.txt
|
||||
|
||||
- uses: stefanzweifel/git-auto-commit-action@v5
|
||||
- uses: stefanzweifel/git-auto-commit-action@v6
|
||||
id: commit
|
||||
with:
|
||||
commit_message: ${{ steps.commit_message_step.outputs.commit_message }}
|
||||
@ -299,7 +294,7 @@ As git-auto-commit by default does not use **your** username and email when crea
|
||||
git_commit_gpgsign: true
|
||||
|
||||
- name: "Commit and push changes"
|
||||
uses: stefanzweifel/git-auto-commit-action@v5
|
||||
uses: stefanzweifel/git-auto-commit-action@v6
|
||||
with:
|
||||
commit_author: "${{ steps.import-gpg.outputs.name }} <${{ steps.import-gpg.outputs.email }}>"
|
||||
commit_user_name: ${{ steps.import-gpg.outputs.name }}
|
||||
@ -376,7 +371,7 @@ jobs:
|
||||
- name: Run php-cs-fixer
|
||||
uses: docker://oskarstark/php-cs-fixer-ga
|
||||
|
||||
- uses: stefanzweifel/git-auto-commit-action@v5
|
||||
- uses: stefanzweifel/git-auto-commit-action@v6
|
||||
```
|
||||
|
||||
For more information about running Actions on forks, see [this announcement from GitHub](https://github.blog/2020-08-03-github-actions-improvements-for-fork-and-pull-request-workflows/).
|
||||
@ -411,13 +406,12 @@ The steps in your workflow might look like this:
|
||||
echo "message=$(git log -1 --pretty=%s)" >> $GITHUB_OUTPUT
|
||||
echo "author=$(git log -1 --pretty=\"%an <%ae>\")" >> $GITHUB_OUTPUT
|
||||
|
||||
- uses: stefanzweifel/git-auto-commit-action@v5
|
||||
- uses: stefanzweifel/git-auto-commit-action@v6
|
||||
with:
|
||||
commit_author: ${{ steps.last-commit.outputs.author }}
|
||||
commit_message: ${{ steps.last-commit.outputs.message }}
|
||||
commit_options: '--amend --no-edit'
|
||||
push_options: '--force'
|
||||
skip_fetch: true
|
||||
```
|
||||
|
||||
See discussion in [#159](https://github.com/stefanzweifel/git-auto-commit-action/issues/159#issuecomment-845347950) for details.
|
||||
@ -456,17 +450,19 @@ If you create a fine-grained personal access token, apply the `Contents`-permiss
|
||||
```yaml
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
token: ${{ secrets.PAT }}
|
||||
# We pass the "PAT" secret to the checkout action; if no PAT secret is available to the workflow runner (eg. Dependabot) we fall back to the default "GITHUB_TOKEN".
|
||||
token: ${{ secrets.PAT || secrets.GITHUB_TOKEN }}
|
||||
```
|
||||
You can learn more about Personal Access Token in the [GitHub documentation](https://docs.github.com/en/github/authenticating-to-github/creating-a-personal-access-token).
|
||||
|
||||
|
||||
> [!TIP]
|
||||
> If you're working in an organisation, and you don't want to create the PAT from your personal account, we recommend using a bot-account for such tokens.
|
||||
|
||||
If you go the "force pushes" route, you have to enable force pushes to a protected branch (see [documentation](https://help.github.com/en/github/administering-a-repository/enabling-force-pushes-to-a-protected-branch)) and update your Workflow to use force push like this.
|
||||
|
||||
```yaml
|
||||
- uses: stefanzweifel/git-auto-commit-action@v5
|
||||
- uses: stefanzweifel/git-auto-commit-action@v6
|
||||
with:
|
||||
commit_message: Apply php-cs-fixer changes
|
||||
push_options: --force
|
||||
@ -496,7 +492,7 @@ This is due to the fact, that the `*.md`-glob is expanded before sending it to `
|
||||
To fix this add `disable_globbing: true` to your Workflow.
|
||||
|
||||
```yaml
|
||||
- uses: stefanzweifel/git-auto-commit-action@v5
|
||||
- uses: stefanzweifel/git-auto-commit-action@v6
|
||||
with:
|
||||
file_pattern: '*.md'
|
||||
disable_globbing: true
|
||||
@ -524,7 +520,7 @@ yarn test
|
||||
|
||||
We use [SemVer](http://semver.org/) for versioning. For the versions available, see the [tags on this repository](https://github.com/stefanzweifel/git-auto-commit-action/tags).
|
||||
|
||||
We also provide major version tags to make it easier to always use the latest release of a major version. For example, you can use `stefanzweifel/git-auto-commit-action@v5` to always use the latest release of the current major version.
|
||||
We also provide major version tags to make it easier to always use the latest release of a major version. For example, you can use `stefanzweifel/git-auto-commit-action@v6` to always use the latest release of the current major version.
|
||||
(More information about this [here](https://help.github.com/en/actions/building-actions/about-actions#versioning-your-action).)
|
||||
|
||||
## Credits
|
||||
|
10
UPGRADING.md
Normal file
10
UPGRADING.md
Normal file
@ -0,0 +1,10 @@
|
||||
# Upgrading
|
||||
|
||||
## From v5 to v6
|
||||
|
||||
The following options have been removed from git-auto-commit and can be removed from your workflows.
|
||||
|
||||
- `create_branch` (git-auto-commit no longer switches branches locally during a workflow run)
|
||||
- `skip_fetch`
|
||||
- `skip_checkout`
|
||||
|
27
action.yml
27
action.yml
@ -56,29 +56,36 @@ inputs:
|
||||
description: Skip the check if the git repository is dirty and always try to create a commit.
|
||||
required: false
|
||||
default: false
|
||||
skip_fetch:
|
||||
description: Skip the call to git-fetch.
|
||||
required: false
|
||||
default: false
|
||||
skip_checkout:
|
||||
description: Skip the call to git-checkout.
|
||||
required: false
|
||||
default: false
|
||||
disable_globbing:
|
||||
description: Stop the shell from expanding filenames (https://www.gnu.org/software/bash/manual/html_node/Filename-Expansion.html)
|
||||
default: false
|
||||
create_branch:
|
||||
description: Create new branch with the name of `branch`-input in local and remote repository, if it doesn't exist yet.
|
||||
create_git_tag_only:
|
||||
description: Perform a clean git tag and push, without commiting anything
|
||||
required: false
|
||||
default: false
|
||||
internal_git_binary:
|
||||
description: Internal use only! Path to git binary used to check if git is available. (Don't change this!)
|
||||
default: git
|
||||
skip_fetch:
|
||||
description: "Deprecated: skip_fetch has been removed in v6. It does not have any effect anymore."
|
||||
required: false
|
||||
default: false
|
||||
skip_checkout:
|
||||
description: "Deprecated: skip_checkout has been removed in v6. It does not have any effect anymore."
|
||||
required: false
|
||||
default: false
|
||||
create_branch:
|
||||
description: "Deprecated: create_branch has been removed in v6. It does not have any effect anymore."
|
||||
default: false
|
||||
|
||||
|
||||
outputs:
|
||||
changes_detected:
|
||||
description: Value is "true", if the repository was dirty and file changes have been detected. Value is "false", if no changes have been detected.
|
||||
commit_hash:
|
||||
description: Full hash of the created commit. Only present if the "changes_detected" output is "true".
|
||||
create_git_tag_only:
|
||||
description: Value is "true", if a git tag was created using the `create_git_tag_only`-input.
|
||||
|
||||
runs:
|
||||
using: 'node20'
|
||||
|
@ -27,16 +27,35 @@ _log() {
|
||||
}
|
||||
|
||||
_main() {
|
||||
if "$INPUT_SKIP_FETCH"; then
|
||||
_log "warning" "git-auto-commit: skip_fetch has been removed in v6. It does not have any effect anymore.";
|
||||
fi
|
||||
|
||||
if "$INPUT_SKIP_CHECKOUT"; then
|
||||
_log "warning" "git-auto-commit: skip_checkout has been removed in v6. It does not have any effect anymore.";
|
||||
fi
|
||||
|
||||
if "$INPUT_CREATE_BRANCH"; then
|
||||
_log "warning" "git-auto-commit: create_branch has been removed in v6. It does not have any effect anymore.";
|
||||
fi
|
||||
|
||||
_check_if_git_is_available
|
||||
|
||||
_switch_to_repository
|
||||
|
||||
if _git_is_dirty || "$INPUT_SKIP_DIRTY_CHECK"; then
|
||||
_check_if_is_git_repository
|
||||
|
||||
# _check_if_repository_is_in_detached_state
|
||||
|
||||
if "$INPUT_CREATE_GIT_TAG_ONLY"; then
|
||||
_log "debug" "Create git tag only";
|
||||
_set_github_output "create_git_tag_only" "true"
|
||||
_tag_commit
|
||||
_push_to_github
|
||||
elif _git_is_dirty || "$INPUT_SKIP_DIRTY_CHECK"; then
|
||||
|
||||
_set_github_output "changes_detected" "true"
|
||||
|
||||
_switch_to_branch
|
||||
|
||||
_add_files
|
||||
|
||||
# Check dirty state of repo again using git-diff.
|
||||
@ -86,36 +105,25 @@ _git_is_dirty() {
|
||||
gitStatusMessage="$((git status -s $INPUT_STATUS_OPTIONS -- ${INPUT_FILE_PATTERN_EXPANDED:+${INPUT_FILE_PATTERN_EXPANDED[@]}} >/dev/null ) 2>&1)";
|
||||
# shellcheck disable=SC2086
|
||||
gitStatus="$(git status -s $INPUT_STATUS_OPTIONS -- ${INPUT_FILE_PATTERN_EXPANDED:+${INPUT_FILE_PATTERN_EXPANDED[@]}})";
|
||||
if [ $? -ne 0 ]; then
|
||||
_log "error" "git-status failed with:<$gitStatusMessage>";
|
||||
exit 1;
|
||||
fi
|
||||
[ -n "$gitStatus" ]
|
||||
}
|
||||
|
||||
_switch_to_branch() {
|
||||
echo "INPUT_BRANCH value: $INPUT_BRANCH";
|
||||
|
||||
# Fetch remote to make sure that repo can be switched to the right branch.
|
||||
if "$INPUT_SKIP_FETCH"; then
|
||||
_log "debug" "git-fetch will not be executed.";
|
||||
_check_if_is_git_repository() {
|
||||
if [ -d ".git" ]; then
|
||||
_log "debug" "Repository found.";
|
||||
else
|
||||
git fetch --depth=1;
|
||||
_log "error" "Not a git repository. Please make sure to run this action in a git repository. Adjust the `repository` input if necessary.";
|
||||
exit 1;
|
||||
fi
|
||||
}
|
||||
|
||||
# If `skip_checkout`-input is true, skip the entire checkout step.
|
||||
if "$INPUT_SKIP_CHECKOUT"; then
|
||||
_log "debug" "git-checkout will not be executed.";
|
||||
_check_if_repository_is_in_detached_state() {
|
||||
if [ -z "$(git symbolic-ref HEAD)" ]
|
||||
then
|
||||
_log "error" "Repository is in detached HEAD state. Please make sure you check out a branch. Adjust the `ref` input accordingly.";
|
||||
exit 1;
|
||||
else
|
||||
# Create new local branch if `create_branch`-input is true
|
||||
if "$INPUT_CREATE_BRANCH"; then
|
||||
# shellcheck disable=SC2086
|
||||
git checkout -B $INPUT_BRANCH --;
|
||||
else
|
||||
# Switch to branch from current Workflow run
|
||||
# shellcheck disable=SC2086
|
||||
git checkout $INPUT_BRANCH --;
|
||||
fi
|
||||
_log "debug" "Repository is on a branch.";
|
||||
fi
|
||||
}
|
||||
|
||||
@ -164,6 +172,8 @@ _tag_commit() {
|
||||
|
||||
_push_to_github() {
|
||||
|
||||
echo "INPUT_BRANCH value: $INPUT_BRANCH";
|
||||
|
||||
echo "INPUT_PUSH_OPTIONS: ${INPUT_PUSH_OPTIONS}";
|
||||
_log "debug" "Apply push options ${INPUT_PUSH_OPTIONS}";
|
||||
|
||||
|
37
package-lock.json
generated
Normal file
37
package-lock.json
generated
Normal file
@ -0,0 +1,37 @@
|
||||
{
|
||||
"name": "git-auto-commit-action",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"devDependencies": {
|
||||
"bats": "^1.12.0",
|
||||
"bats-assert": "ztombol/bats-assert",
|
||||
"bats-support": "ztombol/bats-support"
|
||||
}
|
||||
},
|
||||
"node_modules/bats": {
|
||||
"version": "1.12.0",
|
||||
"resolved": "https://registry.npmjs.org/bats/-/bats-1.12.0.tgz",
|
||||
"integrity": "sha512-1HTv2n+fjn3bmY9SNDgmzS6bjoKtVlSK2pIHON5aSA2xaqGkZFoCCWP46/G6jm9zZ7MCi84mD+3Byw4t3KGwBg==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"bin": {
|
||||
"bats": "bin/bats"
|
||||
}
|
||||
},
|
||||
"node_modules/bats-assert": {
|
||||
"version": "0.3.0",
|
||||
"resolved": "git+ssh://git@github.com/ztombol/bats-assert.git#9f88b4207da750093baabc4e3f41bf68f0dd3630",
|
||||
"dev": true,
|
||||
"peerDependencies": {
|
||||
"bats-support": "git+https://github.com/ztombol/bats-support.git#v0.2.0"
|
||||
}
|
||||
},
|
||||
"node_modules/bats-support": {
|
||||
"version": "0.3.0",
|
||||
"resolved": "git+ssh://git@github.com/ztombol/bats-support.git#004e707638eedd62e0481e8cdc9223ad471f12ee",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"devDependencies": {
|
||||
"bats": "^1.11.1",
|
||||
"bats": "^1.12.0",
|
||||
"bats-assert": "ztombol/bats-assert",
|
||||
"bats-support": "ztombol/bats-support"
|
||||
},
|
||||
|
@ -21,6 +21,7 @@ setup() {
|
||||
export FAKE_DEFAULT_BRANCH=$(git config init.defaultBranch)
|
||||
|
||||
# Set default INPUT variables used by the GitHub Action
|
||||
export INPUT_CREATE_GIT_TAG_ONLY=false
|
||||
export INPUT_REPOSITORY="${FAKE_LOCAL_REPOSITORY}"
|
||||
export INPUT_COMMIT_MESSAGE="Commit Message"
|
||||
export INPUT_BRANCH="${FAKE_DEFAULT_BRANCH}"
|
||||
@ -34,11 +35,13 @@ setup() {
|
||||
export INPUT_TAGGING_MESSAGE=""
|
||||
export INPUT_PUSH_OPTIONS=""
|
||||
export INPUT_SKIP_DIRTY_CHECK=false
|
||||
export INPUT_DISABLE_GLOBBING=false
|
||||
export INPUT_INTERNAL_GIT_BINARY=git
|
||||
|
||||
# Deprecated variables. Will be removed in future versions
|
||||
export INPUT_CREATE_BRANCH=false
|
||||
export INPUT_SKIP_FETCH=false
|
||||
export INPUT_SKIP_CHECKOUT=false
|
||||
export INPUT_DISABLE_GLOBBING=false
|
||||
export INPUT_CREATE_BRANCH=false
|
||||
export INPUT_INTERNAL_GIT_BINARY=git
|
||||
|
||||
# Set GitHub environment variables used by the GitHub Action
|
||||
temp_github_output_file=$(mktemp -t github_output_test.XXXXX)
|
||||
@ -192,7 +195,6 @@ cat_github_output() {
|
||||
assert_failure
|
||||
|
||||
assert_line "INPUT_REPOSITORY value: ${INPUT_REPOSITORY}"
|
||||
assert_line "INPUT_BRANCH value: ${FAKE_DEFAULT_BRANCH}"
|
||||
assert_line "INPUT_FILE_PATTERN: ."
|
||||
assert_line "INPUT_COMMIT_OPTIONS: "
|
||||
assert_line "::debug::Apply commit options "
|
||||
@ -409,32 +411,6 @@ cat_github_output() {
|
||||
assert_output --partial refs/tags/v2.0.0
|
||||
}
|
||||
|
||||
@test "If SKIP_FETCH is true git-fetch will not be called" {
|
||||
|
||||
touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt
|
||||
|
||||
INPUT_SKIP_FETCH=true
|
||||
|
||||
run git_auto_commit
|
||||
|
||||
assert_success
|
||||
|
||||
assert_line "::debug::git-fetch will not be executed."
|
||||
}
|
||||
|
||||
@test "If SKIP_CHECKOUT is true git-checkout will not be called" {
|
||||
|
||||
touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt
|
||||
|
||||
INPUT_SKIP_CHECKOUT=true
|
||||
|
||||
run git_auto_commit
|
||||
|
||||
assert_success
|
||||
|
||||
assert_line "::debug::git-checkout will not be executed."
|
||||
}
|
||||
|
||||
@test "It pushes generated commit and tag to remote and actually updates the commit shas" {
|
||||
INPUT_BRANCH=""
|
||||
INPUT_TAGGING_MESSAGE="v2.0.0"
|
||||
@ -465,10 +441,6 @@ cat_github_output() {
|
||||
}
|
||||
|
||||
@test "It pushes generated commit and tag to remote branch and updates commit sha" {
|
||||
# Create "a-new-branch"-branch and then immediately switch back to ${FAKE_DEFAULT_BRANCH}
|
||||
git checkout -b a-new-branch
|
||||
git checkout ${FAKE_DEFAULT_BRANCH}
|
||||
|
||||
INPUT_BRANCH="a-new-branch"
|
||||
INPUT_TAGGING_MESSAGE="v2.0.0"
|
||||
|
||||
@ -491,7 +463,7 @@ cat_github_output() {
|
||||
assert_output --partial refs/tags/v2.0.0
|
||||
|
||||
# Assert that branch "a-new-branch" was updated on remote
|
||||
current_sha="$(git rev-parse --verify --short a-new-branch)"
|
||||
current_sha="$(git rev-parse --verify --short ${FAKE_DEFAULT_BRANCH})"
|
||||
remote_sha="$(git rev-parse --verify --short origin/a-new-branch)"
|
||||
|
||||
assert_equal $current_sha $remote_sha
|
||||
@ -535,7 +507,6 @@ cat_github_output() {
|
||||
@test "it does not throw an error if not changes are detected and SKIP_DIRTY_CHECK is false" {
|
||||
INPUT_FILE_PATTERN="."
|
||||
INPUT_SKIP_DIRTY_CHECK=false
|
||||
INPUT_SKIP_FETCH=false
|
||||
|
||||
run git_auto_commit
|
||||
|
||||
@ -578,9 +549,8 @@ cat_github_output() {
|
||||
assert_line "changes_detected=true"
|
||||
}
|
||||
|
||||
@test "script fails to push commit to new branch that does not exist yet" {
|
||||
@test "It pushes commit to new branch that does not exist yet" {
|
||||
INPUT_BRANCH="not-existend-branch"
|
||||
INPUT_CREATE_BRANCH=false
|
||||
|
||||
run git branch
|
||||
refute_line --partial "not-existend-branch"
|
||||
@ -592,25 +562,24 @@ cat_github_output() {
|
||||
|
||||
run git_auto_commit
|
||||
|
||||
assert_failure
|
||||
assert_success
|
||||
|
||||
assert_line "INPUT_REPOSITORY value: ${INPUT_REPOSITORY}"
|
||||
assert_line "INPUT_BRANCH value: not-existend-branch"
|
||||
assert_line "fatal: invalid reference: not-existend-branch"
|
||||
|
||||
run git branch
|
||||
assert_line --partial ${FAKE_DEFAULT_BRANCH}
|
||||
refute_line --partial "not-existend-branch"
|
||||
|
||||
run git branch -r
|
||||
refute_line --partial "origin/not-existend-branch"
|
||||
assert_line --partial "origin/not-existend-branch"
|
||||
|
||||
run cat_github_output
|
||||
assert_line "changes_detected=true"
|
||||
}
|
||||
|
||||
@test "It creates new local branch and pushes the new branch to remote" {
|
||||
@test "It does not create new local branch and pushes the commit to a new branch on remote" {
|
||||
INPUT_BRANCH="not-existend-branch"
|
||||
INPUT_CREATE_BRANCH=true
|
||||
|
||||
run git branch
|
||||
refute_line --partial "not-existend-branch"
|
||||
@ -635,9 +604,12 @@ cat_github_output() {
|
||||
assert_line "::debug::Apply push options "
|
||||
assert_line "::debug::Push commit to remote branch not-existend-branch"
|
||||
|
||||
# Assert that local repo is still on default branch and not on new branch.
|
||||
run git branch
|
||||
assert_line --partial "not-existend-branch"
|
||||
assert_line --partial ${FAKE_DEFAULT_BRANCH}
|
||||
refute_line --partial "not-existend-branch"
|
||||
|
||||
# Assert branch has been created on remote
|
||||
run git branch -r
|
||||
assert_line --partial "origin/not-existend-branch"
|
||||
|
||||
@ -646,13 +618,11 @@ cat_github_output() {
|
||||
assert_line -e "commit_hash=[0-9a-f]{40}$"
|
||||
}
|
||||
|
||||
@test "it does not create new local branch if local branch already exists" {
|
||||
|
||||
@test "It does not create new local branch if local branch already exists" {
|
||||
git checkout -b not-existend-remote-branch
|
||||
git checkout ${FAKE_DEFAULT_BRANCH}
|
||||
|
||||
INPUT_BRANCH="not-existend-remote-branch"
|
||||
INPUT_CREATE_BRANCH=true
|
||||
|
||||
run git branch
|
||||
assert_line --partial "not-existend-remote-branch"
|
||||
@ -677,6 +647,11 @@ cat_github_output() {
|
||||
assert_line "::debug::Apply push options "
|
||||
assert_line "::debug::Push commit to remote branch not-existend-remote-branch"
|
||||
|
||||
# Assert checked out branch is still the same.
|
||||
run git rev-parse --abbrev-ref HEAD
|
||||
assert_line --partial ${FAKE_DEFAULT_BRANCH}
|
||||
refute_line --partial "not-existend-remote-branch"
|
||||
|
||||
run git branch
|
||||
assert_line --partial "not-existend-remote-branch"
|
||||
|
||||
@ -688,8 +663,7 @@ cat_github_output() {
|
||||
assert_line -e "commit_hash=[0-9a-f]{40}$"
|
||||
}
|
||||
|
||||
@test "it creates new local branch and pushes branch to remote even if the remote branch already exists" {
|
||||
|
||||
@test "It creates new local branch and pushes branch to remote even if the remote branch already exists" {
|
||||
# Create `existing-remote-branch` on remote with changes the local repository does not yet have
|
||||
cd $FAKE_TEMP_LOCAL_REPOSITORY
|
||||
git checkout -b "existing-remote-branch"
|
||||
@ -706,7 +680,6 @@ cat_github_output() {
|
||||
cd $FAKE_LOCAL_REPOSITORY
|
||||
|
||||
INPUT_BRANCH="existing-remote-branch"
|
||||
INPUT_CREATE_BRANCH=true
|
||||
|
||||
run git branch
|
||||
refute_line --partial "existing-remote-branch"
|
||||
@ -734,13 +707,14 @@ cat_github_output() {
|
||||
assert_line "::debug::Push commit to remote branch existing-remote-branch"
|
||||
|
||||
run git branch
|
||||
assert_line --partial "existing-remote-branch"
|
||||
assert_line --partial ${FAKE_DEFAULT_BRANCH}
|
||||
refute_line --partial "existing-remote-branch"
|
||||
|
||||
run git branch -r
|
||||
assert_line --partial "origin/existing-remote-branch"
|
||||
|
||||
# Assert that branch "existing-remote-branch" was updated on remote
|
||||
current_sha="$(git rev-parse --verify --short existing-remote-branch)"
|
||||
current_sha="$(git rev-parse --verify --short ${FAKE_DEFAULT_BRANCH})"
|
||||
remote_sha="$(git rev-parse --verify --short origin/existing-remote-branch)"
|
||||
|
||||
assert_equal $current_sha $remote_sha
|
||||
@ -750,7 +724,7 @@ cat_github_output() {
|
||||
assert_line -e "commit_hash=[0-9a-f]{40}$"
|
||||
}
|
||||
|
||||
@test "script fails if new local branch is checked out and push fails as remote has newer commits than local" {
|
||||
@test "It fails if local branch is behind remote and when remote has newer commits" {
|
||||
# Create `existing-remote-branch` on remote with changes the local repository does not yet have
|
||||
cd $FAKE_TEMP_LOCAL_REPOSITORY
|
||||
git checkout -b "existing-remote-branch"
|
||||
@ -767,7 +741,6 @@ cat_github_output() {
|
||||
cd $FAKE_LOCAL_REPOSITORY
|
||||
|
||||
INPUT_BRANCH="existing-remote-branch"
|
||||
INPUT_CREATE_BRANCH=true
|
||||
|
||||
run git branch
|
||||
refute_line --partial "existing-remote-branch"
|
||||
@ -782,23 +755,24 @@ cat_github_output() {
|
||||
|
||||
assert_failure
|
||||
|
||||
assert_line "hint: Updates were rejected because the tip of your current branch is behind"
|
||||
assert_line "hint: Updates were rejected because a pushed branch tip is behind its remote"
|
||||
|
||||
# Assert that branch exists locally and on remote
|
||||
run git branch
|
||||
assert_line --partial "existing-remote-branch"
|
||||
assert_line --partial ${FAKE_DEFAULT_BRANCH}
|
||||
refute_line --partial "existing-remote-branch"
|
||||
|
||||
run git branch -r
|
||||
assert_line --partial "origin/existing-remote-branch"
|
||||
|
||||
# Assert that branch "existing-remote-branch" was not updated on remote
|
||||
current_sha="$(git rev-parse --verify --short existing-remote-branch)"
|
||||
current_sha="$(git rev-parse --verify --short ${FAKE_DEFAULT_BRANCH})"
|
||||
remote_sha="$(git rev-parse --verify --short origin/existing-remote-branch)"
|
||||
|
||||
refute [assert_equal $current_sha $remote_sha]
|
||||
}
|
||||
|
||||
@test "It pushes commit to remote if branch already exists and local repo is behind its remote counterpart" {
|
||||
@test "It fails to push commit to remote if branch already exists and local repo is behind its remote counterpart" {
|
||||
# Create `new-branch` on remote with changes the local repository does not yet have
|
||||
cd $FAKE_TEMP_LOCAL_REPOSITORY
|
||||
|
||||
@ -818,7 +792,7 @@ cat_github_output() {
|
||||
|
||||
INPUT_BRANCH="new-branch"
|
||||
|
||||
# Assert that local remote does not know have "new-branch" locally nor does
|
||||
# Assert that local remote does not have a "new-branch"-branch nor does
|
||||
# know about the remote branch.
|
||||
run git branch
|
||||
refute_line --partial "new-branch"
|
||||
@ -830,16 +804,13 @@ cat_github_output() {
|
||||
|
||||
run git_auto_commit
|
||||
|
||||
assert_success
|
||||
assert_failure
|
||||
|
||||
assert_line "INPUT_BRANCH value: new-branch"
|
||||
assert_line --partial "::debug::Push commit to remote branch new-branch"
|
||||
|
||||
# Assert that branch "new-branch" was updated on remote
|
||||
current_sha="$(git rev-parse --verify --short new-branch)"
|
||||
remote_sha="$(git rev-parse --verify --short origin/new-branch)"
|
||||
|
||||
assert_equal $current_sha $remote_sha
|
||||
assert_line --partial "Updates were rejected because the remote contains work that you do"
|
||||
assert_line --partial "This is usually caused by another repository pushing"
|
||||
}
|
||||
|
||||
@test "throws fatal error if file pattern includes files that do not exist" {
|
||||
@ -1004,7 +975,7 @@ cat_github_output() {
|
||||
|
||||
assert_line --partial "Working tree clean. Nothing to commit."
|
||||
assert_line --partial "new-file-2.txt"
|
||||
assert_line --partial "new-file-3.txt"
|
||||
# assert_line --partial "new-file-3.txt"
|
||||
|
||||
# Changes are not detected
|
||||
run cat_github_output
|
||||
@ -1038,7 +1009,7 @@ cat_github_output() {
|
||||
assert_line --partial "warning: in the working copy of 'new-file-2.txt', LF will be replaced by CRLF the next time Git touches it"
|
||||
|
||||
assert_line --partial "new-file-2.txt"
|
||||
assert_line --partial "new-file-3.txt"
|
||||
# assert_line --partial "new-file-3.txt"
|
||||
|
||||
# Changes are detected
|
||||
run cat_github_output
|
||||
@ -1123,5 +1094,90 @@ END
|
||||
run git_auto_commit
|
||||
|
||||
assert_failure;
|
||||
assert_line "::error::git-status failed with:<fatal: not a git repository (or any of the parent directories): .git>"
|
||||
assert_line "::error::Not a git repository. Please make sure to run this action in a git repository. Adjust the `repository` input if necessary."
|
||||
}
|
||||
|
||||
@test "It detects if the repository is in a detached state and exits with an error" {
|
||||
skip
|
||||
touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt
|
||||
|
||||
run git_auto_commit
|
||||
|
||||
assert_success
|
||||
|
||||
# Bring local repository into a detached state
|
||||
prev_commit=$(git rev-parse HEAD~1);
|
||||
git checkout "$prev_commit";
|
||||
|
||||
touch "${FAKE_TEMP_LOCAL_REPOSITORY}"/remote-files{4,5,6}.txt
|
||||
|
||||
run git_auto_commit
|
||||
|
||||
assert_failure;
|
||||
assert_line "::error::Repository is in detached HEAD state. Please make sure you check out a branch. Adjust the `ref` input accordingly."
|
||||
}
|
||||
|
||||
@test "it creates a tag if create_git_tag_only is set to true and a message has been supplied" {
|
||||
INPUT_CREATE_GIT_TAG_ONLY=true
|
||||
INPUT_TAGGING_MESSAGE=v1.0.0
|
||||
|
||||
run git_auto_commit
|
||||
|
||||
assert_success
|
||||
|
||||
assert_line "::debug::Create git tag only"
|
||||
|
||||
assert_line "::debug::Create tag v1.0.0"
|
||||
refute_line "No tagging message supplied. No tag will be added."
|
||||
|
||||
assert_line "::debug::Apply push options "
|
||||
assert_line "::debug::Push commit to remote branch ${FAKE_DEFAULT_BRANCH}"
|
||||
|
||||
run cat_github_output
|
||||
assert_line "create_git_tag_only=true"
|
||||
refute_line "changes_detected=false"
|
||||
refute_line -e "commit_hash=[0-9a-f]{40}$"
|
||||
|
||||
# Assert a tag v1.0.0 has been created
|
||||
run git tag
|
||||
assert_output v1.0.0
|
||||
|
||||
run git ls-remote --tags --refs
|
||||
assert_output --partial refs/tags/v1.0.0
|
||||
}
|
||||
|
||||
@test "it output no tagging message supplied if no tagging message is set but create_git_tag_only is set to true" {
|
||||
INPUT_CREATE_GIT_TAG_ONLY=true
|
||||
INPUT_TAGGING_MESSAGE=""
|
||||
|
||||
run git_auto_commit
|
||||
|
||||
assert_success
|
||||
|
||||
assert_line "INPUT_TAGGING_MESSAGE: "
|
||||
assert_line "No tagging message supplied. No tag will be added."
|
||||
assert_line "::debug::Create git tag only"
|
||||
|
||||
run cat_github_output
|
||||
assert_line "create_git_tag_only=true"
|
||||
refute_line "changes_detected=false"
|
||||
refute_line -e "commit_hash=[0-9a-f]{40}$"
|
||||
|
||||
# Assert no tag has been created
|
||||
run git tag
|
||||
assert_output ""
|
||||
}
|
||||
|
||||
@test "it shows warning message if any deprecated options are used" {
|
||||
INPUT_SKIP_FETCH=true
|
||||
INPUT_SKIP_CHECKOUT=true
|
||||
INPUT_CREATE_BRANCH=true
|
||||
|
||||
run git_auto_commit
|
||||
|
||||
assert_success
|
||||
|
||||
assert_line "::warning::git-auto-commit: skip_fetch has been removed in v6. It does not have any effect anymore."
|
||||
assert_line "::warning::git-auto-commit: skip_checkout has been removed in v6. It does not have any effect anymore."
|
||||
assert_line "::warning::git-auto-commit: create_branch has been removed in v6. It does not have any effect anymore."
|
||||
}
|
||||
|
16
yarn.lock
16
yarn.lock
@ -1,16 +0,0 @@
|
||||
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
|
||||
# yarn lockfile v1
|
||||
|
||||
|
||||
bats-assert@ztombol/bats-assert:
|
||||
version "0.3.0"
|
||||
resolved "https://codeload.github.com/ztombol/bats-assert/tar.gz/9f88b4207da750093baabc4e3f41bf68f0dd3630"
|
||||
|
||||
bats-support@ztombol/bats-support:
|
||||
version "0.3.0"
|
||||
resolved "https://codeload.github.com/ztombol/bats-support/tar.gz/004e707638eedd62e0481e8cdc9223ad471f12ee"
|
||||
|
||||
bats@^1.11.1:
|
||||
version "1.11.1"
|
||||
resolved "https://registry.yarnpkg.com/bats/-/bats-1.11.1.tgz#e87fa1161d5110ec3a685e2e233f2f2bfb26ebfd"
|
||||
integrity sha512-Dh26FsiLog+wwQeTkboYo2xYj9rUaPEbibUobnYb3G3M9hva/Kby00wrAN9VB9qqGVhl/pYjjt/LVBWwjXlD2A==
|
Loading…
x
Reference in New Issue
Block a user