From aa2cec9c080f5742d0635d0cd065cc6c81e9837b Mon Sep 17 00:00:00 2001 From: Stefan Zweifel Date: Tue, 19 Dec 2023 20:11:39 +0100 Subject: [PATCH 01/47] Don't switch local branches --- entrypoint.sh | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/entrypoint.sh b/entrypoint.sh index 6fe017a0..eb506bfe 100755 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -90,26 +90,26 @@ _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."; - else - git fetch --depth=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."; - 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 - fi + # if "$INPUT_SKIP_FETCH"; then + # _log "debug" "git-fetch will not be executed."; + # else + # git fetch --depth=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."; + # 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 + # fi } _add_files() { From d9307b5e8c25ba59a9d9ec3b8ce2e83b1c2a8075 Mon Sep 17 00:00:00 2001 From: Stefan Zweifel Date: Tue, 19 Dec 2023 20:13:01 +0100 Subject: [PATCH 02/47] Update Test --- tests/git-auto-commit.bats | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/tests/git-auto-commit.bats b/tests/git-auto-commit.bats index daf5bc0b..fbe12ff5 100644 --- a/tests/git-auto-commit.bats +++ b/tests/git-auto-commit.bats @@ -463,10 +463,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" @@ -489,7 +485,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 From 3b8231379dce026d86ec3050d7afd4d2ce5aa7db Mon Sep 17 00:00:00 2001 From: Stefan Zweifel Date: Tue, 19 Dec 2023 20:34:56 +0100 Subject: [PATCH 03/47] Update Tests --- tests/git-auto-commit.bats | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/tests/git-auto-commit.bats b/tests/git-auto-commit.bats index fbe12ff5..963ddf55 100644 --- a/tests/git-auto-commit.bats +++ b/tests/git-auto-commit.bats @@ -572,9 +572,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" @@ -586,25 +585,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" @@ -629,9 +627,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" @@ -640,8 +641,7 @@ 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} @@ -671,6 +671,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" From 80052f064517ecba648198faf7997ab6a03bd7fd Mon Sep 17 00:00:00 2001 From: Stefan Zweifel Date: Tue, 19 Dec 2023 20:45:55 +0100 Subject: [PATCH 04/47] Update Tests --- tests/git-auto-commit.bats | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/tests/git-auto-commit.bats b/tests/git-auto-commit.bats index 963ddf55..5666c96e 100644 --- a/tests/git-auto-commit.bats +++ b/tests/git-auto-commit.bats @@ -687,8 +687,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" @@ -705,7 +704,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" @@ -733,13 +731,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 @@ -749,7 +748,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" @@ -766,7 +765,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" @@ -781,17 +779,18 @@ 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] From 9062db84044052e24f7da048fb8ea63c51eda180 Mon Sep 17 00:00:00 2001 From: Stefan Zweifel Date: Tue, 19 Dec 2023 21:00:32 +0100 Subject: [PATCH 05/47] Update Tests --- tests/git-auto-commit.bats | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/tests/git-auto-commit.bats b/tests/git-auto-commit.bats index 5666c96e..3d5c558c 100644 --- a/tests/git-auto-commit.bats +++ b/tests/git-auto-commit.bats @@ -796,7 +796,7 @@ cat_github_output() { 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 @@ -816,7 +816,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" @@ -828,16 +828,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 "not have locally. This is usually caused by another repository pushing" } @test "throws fatal error if file pattern includes files that do not exist" { From ef7ed3253560552af2f53a0d3decc9e4925bac9e Mon Sep 17 00:00:00 2001 From: Stefan Zweifel Date: Wed, 20 Dec 2023 20:03:21 +0100 Subject: [PATCH 06/47] Remove no longer needed tests --- tests/git-auto-commit.bats | 26 -------------------------- 1 file changed, 26 deletions(-) diff --git a/tests/git-auto-commit.bats b/tests/git-auto-commit.bats index 3d5c558c..5a80675a 100644 --- a/tests/git-auto-commit.bats +++ b/tests/git-auto-commit.bats @@ -407,32 +407,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" From 03fddc470ca5c8ba2bfbb49aa62d238f20862573 Mon Sep 17 00:00:00 2001 From: Stefan Zweifel Date: Wed, 20 Dec 2023 20:09:40 +0100 Subject: [PATCH 07/47] Temp disable assertions --- tests/git-auto-commit.bats | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/git-auto-commit.bats b/tests/git-auto-commit.bats index 5a80675a..e283d6c0 100644 --- a/tests/git-auto-commit.bats +++ b/tests/git-auto-commit.bats @@ -973,7 +973,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 @@ -1007,7 +1007,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 From 0aca01a1ef7f4cd669689095121fa5b28a7fbce8 Mon Sep 17 00:00:00 2001 From: Stefan Zweifel Date: Wed, 20 Dec 2023 20:09:59 +0100 Subject: [PATCH 08/47] Remove no longer used input options from tests --- tests/git-auto-commit.bats | 6 ------ 1 file changed, 6 deletions(-) diff --git a/tests/git-auto-commit.bats b/tests/git-auto-commit.bats index e283d6c0..b1995f4f 100644 --- a/tests/git-auto-commit.bats +++ b/tests/git-auto-commit.bats @@ -33,10 +33,7 @@ setup() { export INPUT_TAGGING_MESSAGE="" export INPUT_PUSH_OPTIONS="" export INPUT_SKIP_DIRTY_CHECK=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 @@ -190,7 +187,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 " @@ -503,7 +499,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 @@ -620,7 +615,6 @@ cat_github_output() { 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" From e833d4f2110a722f7995f4e38debc8b6d715957b Mon Sep 17 00:00:00 2001 From: Stefan Zweifel Date: Wed, 20 Dec 2023 20:10:12 +0100 Subject: [PATCH 09/47] Remove _switch_to_branch function --- entrypoint.sh | 30 ++---------------------------- 1 file changed, 2 insertions(+), 28 deletions(-) diff --git a/entrypoint.sh b/entrypoint.sh index eb506bfe..3e7e916a 100755 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -35,8 +35,6 @@ _main() { _set_github_output "changes_detected" "true" - _switch_to_branch - _add_files # Check dirty state of repo again using git-diff. @@ -86,32 +84,6 @@ _git_is_dirty() { [ -n "$(git status -s $INPUT_STATUS_OPTIONS -- ${INPUT_FILE_PATTERN_EXPANDED:+${INPUT_FILE_PATTERN_EXPANDED[@]}})" ] } -_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."; - # else - # git fetch --depth=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."; - # 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 - # fi -} - _add_files() { echo "INPUT_ADD_OPTIONS: ${INPUT_ADD_OPTIONS}"; _log "debug" "Apply add options ${INPUT_ADD_OPTIONS}"; @@ -157,6 +129,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}"; From 3e796a014620d8f963809ec50dc7a2e073d0a569 Mon Sep 17 00:00:00 2001 From: Stefan Zweifel Date: Wed, 20 Dec 2023 20:13:20 +0100 Subject: [PATCH 10/47] Update Assertion --- tests/git-auto-commit.bats | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/git-auto-commit.bats b/tests/git-auto-commit.bats index b1995f4f..93440a76 100644 --- a/tests/git-auto-commit.bats +++ b/tests/git-auto-commit.bats @@ -802,7 +802,7 @@ cat_github_output() { assert_line --partial "::debug::Push commit to remote branch new-branch" assert_line --partial "Updates were rejected because the remote contains work that you do" - assert_line --partial "not have locally. This is usually caused by another repository pushing" + assert_line --partial "This is usually caused by another repository pushing" } @test "throws fatal error if file pattern includes files that do not exist" { From 76f415fb30f4c37c8ee7ace2b2f21217c91ca084 Mon Sep 17 00:00:00 2001 From: Stefan Zweifel Date: Wed, 20 Dec 2023 20:19:38 +0100 Subject: [PATCH 11/47] Remove skip_fetch, skip_checkout and create_branch --- action.yml | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/action.yml b/action.yml index 8192c950..775dd2f1 100644 --- a/action.yml +++ b/action.yml @@ -56,20 +56,9 @@ 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. - 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 From 7f171889c8ca7ce254ba1b6e34aa6a6d16b679de Mon Sep 17 00:00:00 2001 From: Stefan Zweifel Date: Wed, 20 Dec 2023 20:20:24 +0100 Subject: [PATCH 12/47] Remove removed options from README --- README.md | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 040fc3b6..d04565af 100644 --- a/README.md +++ b/README.md @@ -59,9 +59,8 @@ The following is an extended example with all available options. # 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`. @@ -102,19 +101,10 @@ 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 ``` 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. @@ -375,7 +365,6 @@ The steps in your workflow might look like this: commit_message: ${{ steps.last-commit-message.outputs.msg }} 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. From 244febd79d2ccf685a521102e04045aa15fa2cce Mon Sep 17 00:00:00 2001 From: Stefan Zweifel Date: Wed, 5 Feb 2025 15:57:55 +0100 Subject: [PATCH 13/47] Add UPGRADING.md --- UPGRADING.md | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 UPGRADING.md diff --git a/UPGRADING.md b/UPGRADING.md new file mode 100644 index 00000000..6c71d132 --- /dev/null +++ b/UPGRADING.md @@ -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` +- `skipt_checkout` + From cec27bde37ef11724cd94b24371fce1a59ddf52d Mon Sep 17 00:00:00 2001 From: Stefan Zweifel Date: Wed, 5 Feb 2025 15:59:51 +0100 Subject: [PATCH 14/47] Fix Typo --- UPGRADING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/UPGRADING.md b/UPGRADING.md index 6c71d132..f3be24c6 100644 --- a/UPGRADING.md +++ b/UPGRADING.md @@ -6,5 +6,5 @@ The following options have been removed from git-auto-commit and can be removed - `create_branch` (git-auto-commit no longer switches branches locally during a workflow run) - `skip_fetch` -- `skipt_checkout` +- `skip_checkout` From ad56d4eb467fcb3066f2523ad469ae14c9b3f556 Mon Sep 17 00:00:00 2001 From: Stefan Zweifel Date: Wed, 5 Feb 2025 17:14:02 +0100 Subject: [PATCH 15/47] Throw error if repo is in detached state --- entrypoint.sh | 25 ++++++++++++++++++++++--- tests/git-auto-commit.bats | 21 ++++++++++++++++++++- 2 files changed, 42 insertions(+), 4 deletions(-) diff --git a/entrypoint.sh b/entrypoint.sh index 50a689f8..c310c05a 100755 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -31,6 +31,10 @@ _main() { _switch_to_repository + _check_if_is_git_repository + + _check_if_repository_is_in_detached_state + if _git_is_dirty || "$INPUT_SKIP_DIRTY_CHECK"; then _set_github_output "changes_detected" "true" @@ -84,11 +88,26 @@ _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>"; + [ -n "$gitStatus" ] +} + +_check_if_is_git_repository() { + if [ -d ".git" ]; then + _log "debug" "Repository found."; + else + _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 - [ -n "$gitStatus" ] +} + +_check_if_repository_is_in_detached_state() { + if [ -z "$(git symbolic-ref HEAD)" ] + then + _log "error" "Repository is in detached HEAD state. Please checkout a branch before committing."; + exit 1; + else + _log "debug" "Repository is on a branch."; + fi } _add_files() { diff --git a/tests/git-auto-commit.bats b/tests/git-auto-commit.bats index 9adeb997..2e74075a 100644 --- a/tests/git-auto-commit.bats +++ b/tests/git-auto-commit.bats @@ -1088,5 +1088,24 @@ END run git_auto_commit assert_failure; - assert_line "::error::git-status failed with:" + 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" { + 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 checkout a branch before committing." } From 1d986f74dd4f20731beebbd9ad52610c804b9484 Mon Sep 17 00:00:00 2001 From: Stefan Zweifel Date: Wed, 5 Feb 2025 17:17:19 +0100 Subject: [PATCH 16/47] Improve Error Message --- entrypoint.sh | 2 +- tests/git-auto-commit.bats | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/entrypoint.sh b/entrypoint.sh index c310c05a..6bb1cbcc 100755 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -103,7 +103,7 @@ _check_if_is_git_repository() { _check_if_repository_is_in_detached_state() { if [ -z "$(git symbolic-ref HEAD)" ] then - _log "error" "Repository is in detached HEAD state. Please checkout a branch before committing."; + _log "error" "Repository is in detached HEAD state. Please make sure you check out a branch. Adjust the `ref` input accordingly."; exit 1; else _log "debug" "Repository is on a branch."; diff --git a/tests/git-auto-commit.bats b/tests/git-auto-commit.bats index 2e74075a..fa2e26bb 100644 --- a/tests/git-auto-commit.bats +++ b/tests/git-auto-commit.bats @@ -1107,5 +1107,5 @@ END run git_auto_commit assert_failure; - assert_line "::error::Repository is in detached HEAD state. Please checkout a branch before committing." + assert_line "::error::Repository is in detached HEAD state. Please make sure you check out a branch. Adjust the `ref` input accordingly." } From 1666a490833865ae4964dfc0c155c9b450734002 Mon Sep 17 00:00:00 2001 From: Stefan Zweifel Date: Wed, 5 Feb 2025 17:27:23 +0100 Subject: [PATCH 17/47] Use ref in auto-commit workflow --- .github/workflows/git-auto-commit.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/git-auto-commit.yml b/.github/workflows/git-auto-commit.yml index d7db234d..39b32963 100644 --- a/.github/workflows/git-auto-commit.yml +++ b/.github/workflows/git-auto-commit.yml @@ -21,6 +21,8 @@ jobs: - name: Use git-auto-commit-action id: "auto-commit-action" uses: ./ + with: + ref: ${{ github.head_ref }} - name: "no changes detected" if: steps.auto-commit-action.outputs.changes_detected == 'false' From bd434eed48c672601bdf68cdb9149a0c75d5c29c Mon Sep 17 00:00:00 2001 From: Stefan Zweifel Date: Wed, 5 Feb 2025 17:34:26 +0100 Subject: [PATCH 18/47] Use ref checkout properly --- .github/workflows/git-auto-commit.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/git-auto-commit.yml b/.github/workflows/git-auto-commit.yml index 39b32963..35132e9b 100644 --- a/.github/workflows/git-auto-commit.yml +++ b/.github/workflows/git-auto-commit.yml @@ -17,12 +17,12 @@ jobs: steps: - uses: actions/checkout@v4 + with: + ref: ${{ github.head_ref }} - name: Use git-auto-commit-action id: "auto-commit-action" uses: ./ - with: - ref: ${{ github.head_ref }} - name: "no changes detected" if: steps.auto-commit-action.outputs.changes_detected == 'false' From af302a9c635adb759442b1ffd153700cc7729cc4 Mon Sep 17 00:00:00 2001 From: stefanzweifel <1080923+stefanzweifel@users.noreply.github.com> Date: Sat, 19 Apr 2025 08:40:01 +0000 Subject: [PATCH 19/47] Update CHANGELOG --- CHANGELOG.md | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cb8f4362..cb4de233 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,10 +5,21 @@ 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.1.0...HEAD) +## [Unreleased](https://github.com/stefanzweifel/git-auto-commit-action/compare/v5.2.0...HEAD) > TBD +## [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 From e7955f713c4a2d862ccd526206d0f7d4b262bc6d Mon Sep 17 00:00:00 2001 From: Stefan Zweifel Date: Sat, 3 May 2025 15:51:01 +0200 Subject: [PATCH 20/47] Emit warning if deprecated/removed options are used --- entrypoint.sh | 12 ++++++++++++ tests/git-auto-commit.bats | 19 +++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/entrypoint.sh b/entrypoint.sh index b0f384b5..1fa602dc 100755 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -27,6 +27,18 @@ _log() { } _main() { + if "$INPUT_SKIP_FETCH"; then + _log "warning" "skip_fetch has been removed in v6. It does not have any effect anymore."; + fi + + if "$INPUT_SKIP_CHECKOUT"; then + _log "warning" "skip_checkout has been removed in v6. It does not have any effect anymore."; + fi + + if "$INPUT_CREATE_BRANCH"; then + _log "warning" "create_branch has been removed in v6. It does not have any effect anymore."; + fi + _check_if_git_is_available _switch_to_repository diff --git a/tests/git-auto-commit.bats b/tests/git-auto-commit.bats index 254e5614..432c4fe8 100644 --- a/tests/git-auto-commit.bats +++ b/tests/git-auto-commit.bats @@ -38,6 +38,11 @@ setup() { 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 + # Set GitHub environment variables used by the GitHub Action temp_github_output_file=$(mktemp -t github_output_test.XXXXX) export GITHUB_OUTPUT="${temp_github_output_file}" @@ -1161,3 +1166,17 @@ END 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::skip_fetch has been removed in v6. It does not have any effect anymore." + assert_line "::warning::skip_checkout has been removed in v6. It does not have any effect anymore." + assert_line "::warning::create_branch has been removed in v6. It does not have any effect anymore." +} From 8ddf02de710090681e0827b1abd9da31cb87aeb3 Mon Sep 17 00:00:00 2001 From: Stefan Zweifel Date: Sat, 3 May 2025 16:03:43 +0200 Subject: [PATCH 21/47] Add git-auto-commit to warning text --- entrypoint.sh | 6 +++--- tests/git-auto-commit.bats | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/entrypoint.sh b/entrypoint.sh index 1fa602dc..78cb551a 100755 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -28,15 +28,15 @@ _log() { _main() { if "$INPUT_SKIP_FETCH"; then - _log "warning" "skip_fetch has been removed in v6. It does not have any effect anymore."; + _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" "skip_checkout has been removed in v6. It does not have any effect anymore."; + _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" "create_branch has been removed in v6. It does not have any effect anymore."; + _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 diff --git a/tests/git-auto-commit.bats b/tests/git-auto-commit.bats index 432c4fe8..bb908222 100644 --- a/tests/git-auto-commit.bats +++ b/tests/git-auto-commit.bats @@ -1176,7 +1176,7 @@ END assert_success - assert_line "::warning::skip_fetch has been removed in v6. It does not have any effect anymore." - assert_line "::warning::skip_checkout has been removed in v6. It does not have any effect anymore." - assert_line "::warning::create_branch has been removed in v6. It does not have any effect anymore." + 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." } From 3058f91afb4f03b73d38f33c35023fb22cf546b8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 May 2025 06:08:17 +0000 Subject: [PATCH 22/47] Bump bats from 1.11.1 to 1.12.0 Bumps [bats](https://github.com/bats-core/bats-core) from 1.11.1 to 1.12.0. - [Release notes](https://github.com/bats-core/bats-core/releases) - [Changelog](https://github.com/bats-core/bats-core/blob/master/docs/CHANGELOG.md) - [Commits](https://github.com/bats-core/bats-core/compare/v1.11.1...v1.12.0) --- updated-dependencies: - dependency-name: bats dependency-version: 1.12.0 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package-lock.json | 6 ++++-- package.json | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 38b34a5e..83e9b66e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,13 +5,15 @@ "packages": { "": { "devDependencies": { - "bats": "^1.11.1", + "bats": "^1.12.0", "bats-assert": "ztombol/bats-assert", "bats-support": "ztombol/bats-support" } }, "node_modules/bats": { - "version": "1.11.1", + "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": { diff --git a/package.json b/package.json index ad49ca30..06d7fc8d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "devDependencies": { - "bats": "^1.11.1", + "bats": "^1.12.0", "bats-assert": "ztombol/bats-assert", "bats-support": "ztombol/bats-support" }, From 76180511d9f2354bb712ec6338ce79d4f2061bfe Mon Sep 17 00:00:00 2001 From: Stefan Zweifel Date: Wed, 28 May 2025 11:37:04 +0200 Subject: [PATCH 23/47] Add deprecated inputs to fix unbound variable issue --- action.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/action.yml b/action.yml index 4b8f7c93..9df496a3 100644 --- a/action.yml +++ b/action.yml @@ -66,6 +66,18 @@ inputs: 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: From 6494dc61d3e663a9f5166a099d9736ceefc5a3aa Mon Sep 17 00:00:00 2001 From: Sam Bull Date: Wed, 28 May 2025 15:08:30 +0100 Subject: [PATCH 24/47] Fix PAT instructions with Dependabot --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 4e9b3193..ff60268b 100644 --- a/README.md +++ b/README.md @@ -461,10 +461,12 @@ If you create a fine-grained personal access token, apply the `Contents`-permiss ```yaml - uses: actions/checkout@v4 with: - token: ${{ secrets.PAT }} + 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). +Having a fallback to GITHUB_TOKEN helps things like Dependabot to continue working, as they may not be granted access to the PAT. + > [!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. From b001e5f0ff05d7297c0101f4b44e861799e417dd Mon Sep 17 00:00:00 2001 From: Stefan Zweifel Date: Mon, 2 Jun 2025 21:37:45 +0200 Subject: [PATCH 25/47] Apply suggestions from code review --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ff60268b..512f25cc 100644 --- a/README.md +++ b/README.md @@ -461,11 +461,11 @@ If you create a fine-grained personal access token, apply the `Contents`-permiss ```yaml - uses: actions/checkout@v4 with: + # 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). -Having a fallback to GITHUB_TOKEN helps things like Dependabot to continue working, as they may not be granted access to the PAT. > [!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. From a82d80a75f85e7feb8d2777704c545af1c7affd9 Mon Sep 17 00:00:00 2001 From: stefanzweifel <1080923+stefanzweifel@users.noreply.github.com> Date: Tue, 10 Jun 2025 18:44:47 +0000 Subject: [PATCH 26/47] Update CHANGELOG --- CHANGELOG.md | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cb4de233..8b8dc55f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,10 +5,24 @@ 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.2.0...HEAD) +## [Unreleased](https://github.com/stefanzweifel/git-auto-commit-action/compare/v6.0.0...HEAD) > TBD +## [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 From 33b203d92a47ab2370a88ce03d9825cdb52cc98c Mon Sep 17 00:00:00 2001 From: Stefan Zweifel Date: Wed, 11 Jun 2025 13:22:17 +0200 Subject: [PATCH 27/47] Disable Check if Repo is in Detached State Fixes #378 --- entrypoint.sh | 2 +- tests/git-auto-commit.bats | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/entrypoint.sh b/entrypoint.sh index 78cb551a..b55b3514 100755 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -45,7 +45,7 @@ _main() { _check_if_is_git_repository - _check_if_repository_is_in_detached_state + # _check_if_repository_is_in_detached_state if "$INPUT_CREATE_GIT_TAG_ONLY"; then _log "debug" "Create git tag only"; diff --git a/tests/git-auto-commit.bats b/tests/git-auto-commit.bats index bb908222..c64bf19e 100644 --- a/tests/git-auto-commit.bats +++ b/tests/git-auto-commit.bats @@ -1098,6 +1098,7 @@ END } @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 From 66f124b8c251f6be319e9f28aaedcd899a1d7523 Mon Sep 17 00:00:00 2001 From: stefanzweifel <1080923+stefanzweifel@users.noreply.github.com> Date: Wed, 11 Jun 2025 11:27:36 +0000 Subject: [PATCH 28/47] Update CHANGELOG --- CHANGELOG.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8b8dc55f..b60f66d5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,10 +5,16 @@ 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/v6.0.0...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 From f9017b24eeaf7914d3306c6e13e8a6eb89d873e4 Mon Sep 17 00:00:00 2001 From: Stefan Zweifel Date: Fri, 13 Jun 2025 16:47:49 +0200 Subject: [PATCH 29/47] Update README to use v6 in examples --- README.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 69fba9ff..bd10bf9d 100644 --- a/README.md +++ b/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,7 +56,7 @@ 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" @@ -148,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 ``` @@ -170,7 +170,7 @@ You can use these outputs to trigger other Actions in your Workflow run based on ### 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 @@ -270,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 }} @@ -294,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 }} @@ -371,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/). @@ -406,7 +406,7 @@ 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 }} @@ -462,7 +462,7 @@ You can learn more about Personal Access Token in the [GitHub documentation](htt 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 @@ -492,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 @@ -520,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 From 6371fedd09094b306c1f1620287f51c6d568b272 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Jun 2025 06:39:19 +0000 Subject: [PATCH 30/47] Bump stefanzweifel/git-auto-commit-action from 5 to 6 Bumps [stefanzweifel/git-auto-commit-action](https://github.com/stefanzweifel/git-auto-commit-action) from 5 to 6. - [Release notes](https://github.com/stefanzweifel/git-auto-commit-action/releases) - [Changelog](https://github.com/stefanzweifel/git-auto-commit-action/blob/master/CHANGELOG.md) - [Commits](https://github.com/stefanzweifel/git-auto-commit-action/compare/v5...v6) --- updated-dependencies: - dependency-name: stefanzweifel/git-auto-commit-action dependency-version: '6' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/update-changelog.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/update-changelog.yaml b/.github/workflows/update-changelog.yaml index 1a03dfc7..dfd72317 100644 --- a/.github/workflows/update-changelog.yaml +++ b/.github/workflows/update-changelog.yaml @@ -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 From 7ddc571aec72c06b59d8e836e0593840a356be7d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 18 Aug 2025 08:56:44 +0000 Subject: [PATCH 31/47] Bump actions/checkout from 4 to 5 Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 5. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v4...v5) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: '5' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/git-auto-commit.yml | 2 +- .github/workflows/linter.yml | 2 +- .github/workflows/tests.yml | 2 +- .github/workflows/update-changelog.yaml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/git-auto-commit.yml b/.github/workflows/git-auto-commit.yml index 35132e9b..f2db122c 100644 --- a/.github/workflows/git-auto-commit.yml +++ b/.github/workflows/git-auto-commit.yml @@ -16,7 +16,7 @@ jobs: contents: write steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: ref: ${{ github.head_ref }} diff --git a/.github/workflows/linter.yml b/.github/workflows/linter.yml index d994c080..96268904 100644 --- a/.github/workflows/linter.yml +++ b/.github/workflows/linter.yml @@ -9,7 +9,7 @@ jobs: steps: - name: Checkout Code - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Lint Code Base uses: github/super-linter@v7 diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 35ee1e2c..5ca82191 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -11,7 +11,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Install testing dependencies run: yarn install diff --git a/.github/workflows/update-changelog.yaml b/.github/workflows/update-changelog.yaml index dfd72317..3fc58e58 100644 --- a/.github/workflows/update-changelog.yaml +++ b/.github/workflows/update-changelog.yaml @@ -16,7 +16,7 @@ jobs: steps: - name: Checkout code - uses: actions/checkout@v4 + uses: actions/checkout@v5 with: ref: master From 2da8d963b4e8d43280bfbdd1906f04138fd127cf Mon Sep 17 00:00:00 2001 From: Stefan Zweifel Date: Wed, 17 Sep 2025 11:02:55 +0200 Subject: [PATCH 32/47] Restore skip_fetch, skip_checkout, create_branch --- README.md | 10 ++++++++++ action.yml | 22 +++++++++++----------- entrypoint.sh | 28 ++++++++++++++++++++++++++++ 3 files changed, 49 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index bd10bf9d..78cc22b9 100644 --- a/README.md +++ b/README.md @@ -105,10 +105,19 @@ 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 @@ -412,6 +421,7 @@ The steps in your workflow might look like this: 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. diff --git a/action.yml b/action.yml index 9df496a3..60268dd3 100644 --- a/action.yml +++ b/action.yml @@ -56,9 +56,20 @@ 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. + default: false create_git_tag_only: description: Perform a clean git tag and push, without commiting anything required: false @@ -66,17 +77,6 @@ inputs: 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: diff --git a/entrypoint.sh b/entrypoint.sh index b55b3514..a3885d92 100755 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -56,6 +56,8 @@ _main() { _set_github_output "changes_detected" "true" + _switch_to_branch + _add_files # Check dirty state of repo again using git-diff. @@ -127,6 +129,32 @@ _check_if_repository_is_in_detached_state() { fi } +_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."; + else + git fetch --depth=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."; + 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 + fi +} + _add_files() { echo "INPUT_ADD_OPTIONS: ${INPUT_ADD_OPTIONS}"; _log "debug" "Apply add options ${INPUT_ADD_OPTIONS}"; From 5fe35a088d851a0b9c7d0999997586bc0d093aa5 Mon Sep 17 00:00:00 2001 From: Stefan Zweifel Date: Wed, 17 Sep 2025 11:48:35 +0200 Subject: [PATCH 33/47] Restore Tests --- tests/git-auto-commit.bats | 41 ++++++++++++++++++++++++++++++++------ 1 file changed, 35 insertions(+), 6 deletions(-) diff --git a/tests/git-auto-commit.bats b/tests/git-auto-commit.bats index c64bf19e..c0b1532b 100644 --- a/tests/git-auto-commit.bats +++ b/tests/git-auto-commit.bats @@ -35,13 +35,11 @@ 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) @@ -411,6 +409,32 @@ 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" @@ -441,6 +465,10 @@ 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" @@ -463,7 +491,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 ${FAKE_DEFAULT_BRANCH})" + current_sha="$(git rev-parse --verify --short a-new-branch)" remote_sha="$(git rev-parse --verify --short origin/a-new-branch)" assert_equal $current_sha $remote_sha @@ -507,6 +535,7 @@ 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 From d330c718ba4694df4ded184e9fcc5f76a3d175df Mon Sep 17 00:00:00 2001 From: Stefan Zweifel Date: Wed, 17 Sep 2025 13:32:46 +0200 Subject: [PATCH 34/47] Remove warnings of deprecated inputs --- entrypoint.sh | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/entrypoint.sh b/entrypoint.sh index a3885d92..5fcc448d 100755 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -27,18 +27,6 @@ _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 From 9a4902607d4961be74dc45421f3268b29128a8d1 Mon Sep 17 00:00:00 2001 From: Stefan Zweifel Date: Wed, 17 Sep 2025 14:08:26 +0200 Subject: [PATCH 35/47] Update Tests --- entrypoint.sh | 2 + tests/git-auto-commit.bats | 323 ++++++++++++++++++++++++++++++------- 2 files changed, 271 insertions(+), 54 deletions(-) diff --git a/entrypoint.sh b/entrypoint.sh index 5fcc448d..e8734708 100755 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -124,6 +124,7 @@ _switch_to_branch() { if "$INPUT_SKIP_FETCH"; then _log "debug" "git-fetch will not be executed."; else + _log "debug" "git-fetch will be executed."; git fetch --depth=1; fi @@ -131,6 +132,7 @@ _switch_to_branch() { if "$INPUT_SKIP_CHECKOUT"; then _log "debug" "git-checkout will not be executed."; else + _log "debug" "git-checkout will be executed."; # Create new local branch if `create_branch`-input is true if "$INPUT_CREATE_BRANCH"; then # shellcheck disable=SC2086 diff --git a/tests/git-auto-commit.bats b/tests/git-auto-commit.bats index c0b1532b..c3f2a7d9 100644 --- a/tests/git-auto-commit.bats +++ b/tests/git-auto-commit.bats @@ -589,6 +589,8 @@ cat_github_output() { touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt + INPUT_SKIP_CHECKOUT=true + run git_auto_commit assert_success @@ -618,6 +620,8 @@ cat_github_output() { touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt + INPUT_SKIP_CHECKOUT=true + run git_auto_commit assert_success @@ -647,51 +651,6 @@ 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" { - git checkout -b not-existend-remote-branch - git checkout ${FAKE_DEFAULT_BRANCH} - - INPUT_BRANCH="not-existend-remote-branch" - - run git branch - assert_line --partial "not-existend-remote-branch" - - run git branch -r - refute_line --partial "origin/not-existend-remote-branch" - - touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt - - run git_auto_commit - - assert_success - - assert_line "INPUT_REPOSITORY value: ${INPUT_REPOSITORY}" - assert_line "INPUT_BRANCH value: not-existend-remote-branch" - assert_line "INPUT_FILE_PATTERN: ." - assert_line "INPUT_COMMIT_OPTIONS: " - assert_line "::debug::Apply commit options " - assert_line "INPUT_TAGGING_MESSAGE: " - assert_line "No tagging message supplied. No tag will be added." - assert_line "INPUT_PUSH_OPTIONS: " - 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" - - run git branch -r - assert_line --partial "origin/not-existend-remote-branch" - - run cat_github_output - assert_line "changes_detected=true" - 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" { # Create `existing-remote-branch` on remote with changes the local repository does not yet have cd $FAKE_TEMP_LOCAL_REPOSITORY @@ -709,6 +668,7 @@ cat_github_output() { cd $FAKE_LOCAL_REPOSITORY INPUT_BRANCH="existing-remote-branch" + INPUT_SKIP_CHECKOUT=true run git branch refute_line --partial "existing-remote-branch" @@ -753,7 +713,7 @@ cat_github_output() { assert_line -e "commit_hash=[0-9a-f]{40}$" } -@test "It fails if local branch is behind remote and when remote has newer commits" { +@test "It fails if local branch is behind remote and when remote has newer commits and skip_checkout is set to true" { # 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" @@ -770,6 +730,7 @@ cat_github_output() { cd $FAKE_LOCAL_REPOSITORY INPUT_BRANCH="existing-remote-branch" + INPUT_SKIP_CHECKOUT=true run git branch refute_line --partial "existing-remote-branch" @@ -801,7 +762,7 @@ cat_github_output() { refute [assert_equal $current_sha $remote_sha] } -@test "It fails to push 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 and SKIP_CHECKOUT is used" { # Create `new-branch` on remote with changes the local repository does not yet have cd $FAKE_TEMP_LOCAL_REPOSITORY @@ -820,6 +781,7 @@ cat_github_output() { cd $FAKE_LOCAL_REPOSITORY INPUT_BRANCH="new-branch" + INPUT_SKIP_CHECKOUT=true # Assert that local remote does not have a "new-branch"-branch nor does # know about the remote branch. @@ -838,8 +800,7 @@ cat_github_output() { assert_line "INPUT_BRANCH value: new-branch" assert_line --partial "::debug::Push commit to remote branch new-branch" - 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" + assert_line --partial "Updates were rejected because a pushed branch tip is behind its remote" } @test "throws fatal error if file pattern includes files that do not exist" { @@ -1197,16 +1158,270 @@ END assert_output "" } -@test "it shows warning message if any deprecated options are used" { - INPUT_SKIP_FETCH=true +@test "script fails to push 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" + + run git branch -r + refute_line --partial "origin/not-existend-branch" + + touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt + + run git_auto_commit + + assert_failure + + 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 + refute_line --partial "not-existend-branch" + + run git branch -r + refute_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" { + INPUT_BRANCH="not-existend-branch" + INPUT_CREATE_BRANCH=true + + run git branch + refute_line --partial "not-existend-branch" + + run git branch -r + refute_line --partial "origin/not-existend-branch" + + touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt + + run git_auto_commit + + assert_success + + assert_line "INPUT_REPOSITORY value: ${INPUT_REPOSITORY}" + assert_line "INPUT_BRANCH value: not-existend-branch" + assert_line "INPUT_FILE_PATTERN: ." + assert_line "INPUT_COMMIT_OPTIONS: " + assert_line "::debug::Apply commit options " + assert_line "INPUT_TAGGING_MESSAGE: " + assert_line "No tagging message supplied. No tag will be added." + assert_line "INPUT_PUSH_OPTIONS: " + assert_line "::debug::Apply push options " + assert_line "::debug::Push commit to remote branch not-existend-branch" + + run git branch + assert_line --partial "not-existend-branch" + + run git branch -r + assert_line --partial "origin/not-existend-branch" + + run cat_github_output + assert_line "changes_detected=true" + assert_line -e "commit_hash=[0-9a-f]{40}$" +} + +@test "It does not create new local branch if local branch already exists and SKIP_CHECKOUT is true" { + git checkout -b not-existend-remote-branch + git checkout ${FAKE_DEFAULT_BRANCH} + + INPUT_BRANCH="not-existend-remote-branch" INPUT_SKIP_CHECKOUT=true + + run git branch + assert_line --partial "not-existend-remote-branch" + + run git branch -r + refute_line --partial "origin/not-existend-remote-branch" + + touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt + + run git_auto_commit + + assert_success + + assert_line "INPUT_REPOSITORY value: ${INPUT_REPOSITORY}" + assert_line "INPUT_BRANCH value: not-existend-remote-branch" + assert_line "INPUT_FILE_PATTERN: ." + assert_line "INPUT_COMMIT_OPTIONS: " + assert_line "::debug::Apply commit options " + assert_line "INPUT_TAGGING_MESSAGE: " + assert_line "No tagging message supplied. No tag will be added." + assert_line "INPUT_PUSH_OPTIONS: " + 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" + + run git branch -r + assert_line --partial "origin/not-existend-remote-branch" + + run cat_github_output + assert_line "changes_detected=true" + 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" { + + # 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" + touch new-branch-file.txt + git add new-branch-file.txt + git commit -m "Add additional file" + git push origin existing-remote-branch + + run git branch + assert_line --partial "existing-remote-branch" + + # --------- + # Switch to our regular local repository and run `git-auto-commit` + cd $FAKE_LOCAL_REPOSITORY + + INPUT_BRANCH="existing-remote-branch" INPUT_CREATE_BRANCH=true + run git branch + refute_line --partial "existing-remote-branch" + + run git fetch --all + run git pull origin existing-remote-branch + run git branch -r + assert_line --partial "origin/existing-remote-branch" + + touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt + 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." + assert_line "INPUT_REPOSITORY value: ${INPUT_REPOSITORY}" + assert_line "INPUT_BRANCH value: existing-remote-branch" + assert_line "INPUT_FILE_PATTERN: ." + assert_line "INPUT_COMMIT_OPTIONS: " + assert_line "::debug::Apply commit options " + assert_line "INPUT_TAGGING_MESSAGE: " + assert_line "No tagging message supplied. No tag will be added." + assert_line "INPUT_PUSH_OPTIONS: " + assert_line "::debug::Apply push options " + assert_line "::debug::Push commit to remote branch existing-remote-branch" + + run git branch + assert_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)" + remote_sha="$(git rev-parse --verify --short origin/existing-remote-branch)" + + assert_equal $current_sha $remote_sha + + run cat_github_output + assert_line "changes_detected=true" + 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" { + # 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" + touch new-branch-file.txt + git add new-branch-file.txt + git commit -m "Add additional file" + git push origin existing-remote-branch + + run git branch + assert_line --partial "existing-remote-branch" + + # --------- + # Switch to our regular local repository and run `git-auto-commit` + cd $FAKE_LOCAL_REPOSITORY + + INPUT_BRANCH="existing-remote-branch" + INPUT_CREATE_BRANCH=true + + run git branch + refute_line --partial "existing-remote-branch" + + run git fetch --all + run git branch -r + assert_line --partial "origin/existing-remote-branch" + + touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt + + run git_auto_commit + + assert_failure + + assert_line "hint: Updates were rejected because the tip of your current branch is behind" + + # Assert that branch exists locally and on remote + run git branch + assert_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)" + 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" { + # Create `new-branch` on remote with changes the local repository does not yet have + cd $FAKE_TEMP_LOCAL_REPOSITORY + + git checkout -b "new-branch" + touch new-branch-file.txt + git add new-branch-file.txt + + git commit --quiet -m "Add additional file" + git push origin new-branch + + run git branch -r + assert_line --partial "origin/new-branch" + + # --------- + # Switch to our regular local repository and run `git-auto-commit` + cd $FAKE_LOCAL_REPOSITORY + + INPUT_BRANCH="new-branch" + + # Assert that local remote does not know have "new-branch" locally nor does + # know about the remote branch. + run git branch + refute_line --partial "new-branch" + + run git branch -r + refute_line --partial "origin/new-branch" + + touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt + + run git_auto_commit + + assert_success + + 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 } From 858005f1b9c0724c17fcc6cbd15fe03f58c66cd8 Mon Sep 17 00:00:00 2001 From: Stefan Zweifel Date: Mon, 22 Sep 2025 07:11:49 +0200 Subject: [PATCH 36/47] Switch to Node24 --- action.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/action.yml b/action.yml index 60268dd3..9839ee50 100644 --- a/action.yml +++ b/action.yml @@ -88,7 +88,7 @@ outputs: description: Value is "true", if a git tag was created using the `create_git_tag_only`-input. runs: - using: 'node20' + using: 'node24' main: 'index.js' branding: From e9f84b936bc576b0ba8aa45e1b5f4527abe275d1 Mon Sep 17 00:00:00 2001 From: Elias Boulharts Date: Wed, 24 Sep 2025 12:15:10 +0200 Subject: [PATCH 37/47] feature: allow using custom tag message Signed-off-by: Elias Boulharts --- README.md | 12 +++- action.yml | 6 +- entrypoint.sh | 17 +++-- tests/git-auto-commit.bats | 133 +++++++++++++++++++++++++++++-------- 4 files changed, 130 insertions(+), 38 deletions(-) diff --git a/README.md b/README.md index bd10bf9d..5b07cc9d 100644 --- a/README.md +++ b/README.md @@ -85,10 +85,16 @@ The following is an extended example with all available options. 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 # defaults to "username ", where "numeric_id" and "username" belong to the author of the commit that triggered the run + + # Optional. Tag name to be created in the local repository and + # pushed to the remote repository on the defined branch. + # If only one of `tag` or `tagging_message` is provided, the value of the provided field will be used for both tag name and message. + tag: 'v1.0.0' + + # Optional. Message to annotate the created tag with. + # If only one of `tag` or `tagging_message` is provided, the value of the provided field will be used for both tag name and message. + tagging_message: 'MyProduct v1.0.0' - # Optional. Tag name being created in the local repository and - # pushed to remote repository and defined branch. - tagging_message: 'v1.0.0' # Optional. Option used by `git-status` to determine if the repository is # dirty. See https://git-scm.com/docs/git-status#_options diff --git a/action.yml b/action.yml index 9df496a3..6b64d9e6 100644 --- a/action.yml +++ b/action.yml @@ -44,8 +44,12 @@ inputs: description: Value used for the commit author. Defaults to the username of whoever triggered this workflow run. required: false default: ${{ github.actor }} <${{ github.actor_id }}+${{ github.actor }}@users.noreply.github.com> + tag: + description: New git tag with the commit. Keep this empty, if no tag should be created. + required: false + default: '' tagging_message: - description: Message used to create a new git tag with the commit. Keep this empty, if no tag should be created. + description: Message used to create a new git tag with the commit. required: false default: '' push_options: diff --git a/entrypoint.sh b/entrypoint.sh index b55b3514..3b114f3a 100755 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -159,14 +159,17 @@ _local_commit() { } _tag_commit() { + echo "INPUT_TAG: ${INPUT_TAG}" echo "INPUT_TAGGING_MESSAGE: ${INPUT_TAGGING_MESSAGE}" - if [ -n "$INPUT_TAGGING_MESSAGE" ] - then - _log "debug" "Create tag $INPUT_TAGGING_MESSAGE"; - git -c user.name="$INPUT_COMMIT_USER_NAME" -c user.email="$INPUT_COMMIT_USER_EMAIL" tag -a "$INPUT_TAGGING_MESSAGE" -m "$INPUT_TAGGING_MESSAGE"; + if [ -n "$INPUT_TAG" ] || [ -n "$INPUT_TAGGING_MESSAGE" ]; then + TAG=${INPUT_TAG:-$INPUT_TAGGING_MESSAGE} + MESSAGE=${INPUT_TAGGING_MESSAGE:-$INPUT_TAG} + + _log "debug" "Create tag $TAG: $MESSAGE" + git -c user.name="$INPUT_COMMIT_USER_NAME" -c user.email="$INPUT_COMMIT_USER_EMAIL" tag -a "$TAG" -m "$MESSAGE" else - echo "No tagging message supplied. No tag will be added."; + echo "Neither tag nor tag message is set. No tag will be added."; fi } @@ -182,8 +185,8 @@ _push_to_github() { if [ -z "$INPUT_BRANCH" ] then - # Only add `--tags` option, if `$INPUT_TAGGING_MESSAGE` is set - if [ -n "$INPUT_TAGGING_MESSAGE" ] + # Only add `--tags` option, if `$INPUT_TAG` or `$INPUT_TAGGING_MESSAGE` is set + if [ -n "$INPUT_TAG" ] || [ -n "$INPUT_TAGGING_MESSAGE" ] then _log "debug" "git push origin --tags"; git push origin --follow-tags --atomic ${INPUT_PUSH_OPTIONS:+"${INPUT_PUSH_OPTIONS_ARRAY[@]}"}; diff --git a/tests/git-auto-commit.bats b/tests/git-auto-commit.bats index c64bf19e..fbbc7aaa 100644 --- a/tests/git-auto-commit.bats +++ b/tests/git-auto-commit.bats @@ -32,6 +32,7 @@ setup() { export INPUT_COMMIT_USER_NAME="Test Suite" export INPUT_COMMIT_USER_EMAIL="test@github.com" export INPUT_COMMIT_AUTHOR="Test Suite " + export INPUT_TAG="" export INPUT_TAGGING_MESSAGE="" export INPUT_PUSH_OPTIONS="" export INPUT_SKIP_DIRTY_CHECK=false @@ -123,8 +124,9 @@ cat_github_output() { assert_line "INPUT_FILE_PATTERN: ." assert_line "INPUT_COMMIT_OPTIONS: " assert_line "::debug::Apply commit options " + assert_line "INPUT_TAG: " assert_line "INPUT_TAGGING_MESSAGE: " - assert_line "No tagging message supplied. No tag will be added." + assert_line "Neither tag nor tag message is set. No tag will be added." assert_line "INPUT_PUSH_OPTIONS: " assert_line "::debug::Apply push options " assert_line "::debug::Push commit to remote branch ${FAKE_DEFAULT_BRANCH}" @@ -146,8 +148,9 @@ cat_github_output() { assert_line "INPUT_FILE_PATTERN: ." assert_line "INPUT_COMMIT_OPTIONS: " assert_line "::debug::Apply commit options " + assert_line "INPUT_TAG: " assert_line "INPUT_TAGGING_MESSAGE: " - assert_line "No tagging message supplied. No tag will be added." + assert_line "Neither tag nor tag message is set. No tag will be added." assert_line "INPUT_PUSH_OPTIONS: " assert_line "::debug::Apply push options " assert_line "::debug::Push commit to remote branch ${FAKE_DEFAULT_BRANCH}" @@ -293,7 +296,8 @@ cat_github_output() { } @test "It creates a tag with the commit" { - INPUT_TAGGING_MESSAGE="v1.0.0" + INPUT_TAG="v1.0.0" + INPUT_TAGGING_MESSAGE="MyProduct v1.0.0" touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt @@ -301,13 +305,15 @@ cat_github_output() { assert_success - assert_line "INPUT_TAGGING_MESSAGE: v1.0.0" - assert_line "::debug::Create tag v1.0.0" + assert_line "INPUT_TAG: v1.0.0" + assert_line "INPUT_TAGGING_MESSAGE: MyProduct v1.0.0" + + assert_line "::debug::Create tag v1.0.0: MyProduct v1.0.0" assert_line "::debug::Push commit to remote branch ${FAKE_DEFAULT_BRANCH}" # Assert a tag v1.0.0 has been created - run git tag - assert_output v1.0.0 + run git tag -n + assert_output 'v1.0.0 MyProduct v1.0.0' run git ls-remote --tags --refs assert_output --partial refs/tags/v1.0.0 @@ -388,9 +394,11 @@ cat_github_output() { assert_equal $current_sha $remote_sha } -@test "It uses existing branch when INPUT_BRANCH is empty and INPUT_TAGGING_MESSAGE is set" { +@test "It uses existing branch when INPUT_BRANCH is empty and INPUT_TAG is set" { INPUT_BRANCH="" - INPUT_TAGGING_MESSAGE="v2.0.0" + INPUT_TAG="v2.0.0" + INPUT_TAGGING_MESSAGE="MyProduct v2.0.0" + touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt @@ -398,8 +406,8 @@ cat_github_output() { assert_success - assert_line "INPUT_TAGGING_MESSAGE: v2.0.0" - assert_line "::debug::Create tag v2.0.0" + assert_line "INPUT_TAG: v2.0.0" + assert_line "::debug::Create tag v2.0.0: MyProduct v2.0.0" assert_line "::debug::git push origin --tags" # Assert a tag v2.0.0 has been created @@ -413,7 +421,9 @@ cat_github_output() { @test "It pushes generated commit and tag to remote and actually updates the commit shas" { INPUT_BRANCH="" - INPUT_TAGGING_MESSAGE="v2.0.0" + INPUT_TAG="v2.0.0" + INPUT_TAGGING_MESSAGE="MyProduct v2.0.0" + touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt @@ -421,8 +431,8 @@ cat_github_output() { assert_success - assert_line "INPUT_TAGGING_MESSAGE: v2.0.0" - assert_line "::debug::Create tag v2.0.0" + assert_line "INPUT_TAG: v2.0.0" + assert_line "::debug::Create tag v2.0.0: MyProduct v2.0.0" assert_line "::debug::git push origin --tags" # Assert a tag v2.0.0 has been created @@ -442,7 +452,9 @@ cat_github_output() { @test "It pushes generated commit and tag to remote branch and updates commit sha" { INPUT_BRANCH="a-new-branch" - INPUT_TAGGING_MESSAGE="v2.0.0" + INPUT_TAG="v2.0.0" + INPUT_TAGGING_MESSAGE="MyProduct v2.0.0" + touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt @@ -450,8 +462,8 @@ cat_github_output() { assert_success - assert_line "INPUT_TAGGING_MESSAGE: v2.0.0" - assert_line "::debug::Create tag v2.0.0" + assert_line "INPUT_TAG: v2.0.0" + assert_line "::debug::Create tag v2.0.0: MyProduct v2.0.0" assert_line "::debug::Push commit to remote branch a-new-branch" # Assert a tag v2.0.0 has been created @@ -598,8 +610,9 @@ cat_github_output() { assert_line "INPUT_FILE_PATTERN: ." assert_line "INPUT_COMMIT_OPTIONS: " assert_line "::debug::Apply commit options " + assert_line "INPUT_TAG: " assert_line "INPUT_TAGGING_MESSAGE: " - assert_line "No tagging message supplied. No tag will be added." + assert_line "Neither tag nor tag message is set. No tag will be added." assert_line "INPUT_PUSH_OPTIONS: " assert_line "::debug::Apply push options " assert_line "::debug::Push commit to remote branch not-existend-branch" @@ -641,8 +654,9 @@ cat_github_output() { assert_line "INPUT_FILE_PATTERN: ." assert_line "INPUT_COMMIT_OPTIONS: " assert_line "::debug::Apply commit options " + assert_line "INPUT_TAG: " assert_line "INPUT_TAGGING_MESSAGE: " - assert_line "No tagging message supplied. No tag will be added." + assert_line "Neither tag nor tag message is set. No tag will be added." assert_line "INPUT_PUSH_OPTIONS: " assert_line "::debug::Apply push options " assert_line "::debug::Push commit to remote branch not-existend-remote-branch" @@ -700,8 +714,9 @@ cat_github_output() { assert_line "INPUT_FILE_PATTERN: ." assert_line "INPUT_COMMIT_OPTIONS: " assert_line "::debug::Apply commit options " + assert_line "INPUT_TAG: " assert_line "INPUT_TAGGING_MESSAGE: " - assert_line "No tagging message supplied. No tag will be added." + assert_line "Neither tag nor tag message is set. No tag will be added." assert_line "INPUT_PUSH_OPTIONS: " assert_line "::debug::Apply push options " assert_line "::debug::Push commit to remote branch existing-remote-branch" @@ -1031,8 +1046,9 @@ cat_github_output() { assert_line "INPUT_FILE_PATTERN: ." assert_line "INPUT_COMMIT_OPTIONS: " assert_line "::debug::Apply commit options " + assert_line "INPUT_TAG: " assert_line "INPUT_TAGGING_MESSAGE: " - assert_line "No tagging message supplied. No tag will be added." + assert_line "Neither tag nor tag message is set. No tag will be added." assert_line "INPUT_PUSH_OPTIONS: " assert_line "::debug::Apply push options " assert_line "::debug::Push commit to remote branch ${FAKE_DEFAULT_BRANCH}" @@ -1119,7 +1135,8 @@ END @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 + INPUT_TAG=v1.0.0 + INPUT_TAGGING_MESSAGE="MyProduct v1.0.0" run git_auto_commit @@ -1127,8 +1144,8 @@ END 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::Create tag v1.0.0: MyProduct v1.0.0" + refute_line "Neither tag nor tag message is set. No tag will be added." assert_line "::debug::Apply push options " assert_line "::debug::Push commit to remote branch ${FAKE_DEFAULT_BRANCH}" @@ -1139,8 +1156,8 @@ END 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 tag -n + assert_output 'v1.0.0 MyProduct v1.0.0' run git ls-remote --tags --refs assert_output --partial refs/tags/v1.0.0 @@ -1148,14 +1165,16 @@ END @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_TAG="" INPUT_TAGGING_MESSAGE="" run git_auto_commit assert_success + assert_line "INPUT_TAG: " assert_line "INPUT_TAGGING_MESSAGE: " - assert_line "No tagging message supplied. No tag will be added." + assert_line "Neither tag nor tag message is set. No tag will be added." assert_line "::debug::Create git tag only" run cat_github_output @@ -1181,3 +1200,63 @@ END 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." } + +@test "Set a tag message only" { + INPUT_TAGGING_MESSAGE="v1.0.0" + + touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt + + run git_auto_commit + + assert_success + + assert_line "INPUT_TAG: " + assert_line "INPUT_TAGGING_MESSAGE: v1.0.0" + + assert_line "::debug::Create tag v1.0.0: v1.0.0" + assert_line "::debug::Push commit to remote branch ${FAKE_DEFAULT_BRANCH}" + + # Assert a tag v1.0.0 has been created + run git tag -n + assert_output 'v1.0.0 v1.0.0' + + run git ls-remote --tags --refs + assert_output --partial refs/tags/v1.0.0 + + # Assert that the commit has been pushed with --force and + # sha values are equal on local and remote + current_sha="$(git rev-parse --verify --short ${FAKE_DEFAULT_BRANCH})" + remote_sha="$(git rev-parse --verify --short origin/${FAKE_DEFAULT_BRANCH})" + + assert_equal $current_sha $remote_sha +} + +@test "Set a tag only" { + INPUT_TAG="v1.0.0" + + touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt + + run git_auto_commit + + assert_success + + assert_line "INPUT_TAG: v1.0.0" + assert_line "INPUT_TAGGING_MESSAGE: " + + assert_line "::debug::Create tag v1.0.0: v1.0.0" + assert_line "::debug::Push commit to remote branch ${FAKE_DEFAULT_BRANCH}" + + # Assert a tag v1.0.0 has been created + run git tag -n + assert_output 'v1.0.0 v1.0.0' + + run git ls-remote --tags --refs + assert_output --partial refs/tags/v1.0.0 + + # Assert that the commit has been pushed with --force and + # sha values are equal on local and remote + current_sha="$(git rev-parse --verify --short ${FAKE_DEFAULT_BRANCH})" + remote_sha="$(git rev-parse --verify --short origin/${FAKE_DEFAULT_BRANCH})" + + assert_equal $current_sha $remote_sha +} From d1854850ecc4b10b4ee69a72ea84f78a192779e3 Mon Sep 17 00:00:00 2001 From: Stefan Zweifel Date: Tue, 30 Sep 2025 16:48:49 +0200 Subject: [PATCH 38/47] Enable Detached State Check --- entrypoint.sh | 5 ++--- tests/git-auto-commit.bats | 7 +++---- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/entrypoint.sh b/entrypoint.sh index e8734708..0799ec57 100755 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -33,7 +33,7 @@ _main() { _check_if_is_git_repository - # _check_if_repository_is_in_detached_state + _check_if_repository_is_in_detached_state if "$INPUT_CREATE_GIT_TAG_ONLY"; then _log "debug" "Create git tag only"; @@ -110,8 +110,7 @@ _check_if_is_git_repository() { _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; + _log "warning" "Repository is in a detached HEAD state. git-auto-commit will likely handle this automatically. To avoid it, check out a branch using the ref option in actions/checkout."; else _log "debug" "Repository is on a branch."; fi diff --git a/tests/git-auto-commit.bats b/tests/git-auto-commit.bats index c3f2a7d9..ea5e5991 100644 --- a/tests/git-auto-commit.bats +++ b/tests/git-auto-commit.bats @@ -1087,8 +1087,7 @@ END 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 +@test "It detects if the repository is in a detached state and logs a warning" { touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt run git_auto_commit @@ -1103,8 +1102,8 @@ END 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." + assert_success; + assert_line "::warning::Repository is in a detached HEAD state. git-auto-commit will likely handle this automatically. To avoid it, check out a branch using the ref option in actions/checkout." } @test "it creates a tag if create_git_tag_only is set to true and a message has been supplied" { From e8684eb0cd3714a844cb825cd29a0afcf6d66dbc Mon Sep 17 00:00:00 2001 From: Stefan Zweifel Date: Sun, 12 Oct 2025 14:27:10 +0200 Subject: [PATCH 39/47] Fix Tests --- tests/git-auto-commit.bats | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/git-auto-commit.bats b/tests/git-auto-commit.bats index 5e746433..1fc2ffb5 100644 --- a/tests/git-auto-commit.bats +++ b/tests/git-auto-commit.bats @@ -1227,7 +1227,7 @@ END assert_line "INPUT_COMMIT_OPTIONS: " assert_line "::debug::Apply commit options " assert_line "INPUT_TAGGING_MESSAGE: " - assert_line "No tagging message supplied. No tag will be added." + assert_line "Neither tag nor tag message is set. No tag will be added." assert_line "INPUT_PUSH_OPTIONS: " assert_line "::debug::Apply push options " assert_line "::debug::Push commit to remote branch not-existend-branch" @@ -1268,7 +1268,7 @@ END assert_line "INPUT_COMMIT_OPTIONS: " assert_line "::debug::Apply commit options " assert_line "INPUT_TAGGING_MESSAGE: " - assert_line "No tagging message supplied. No tag will be added." + assert_line "Neither tag nor tag message is set. No tag will be added." assert_line "INPUT_PUSH_OPTIONS: " assert_line "::debug::Apply push options " assert_line "::debug::Push commit to remote branch not-existend-remote-branch" @@ -1329,7 +1329,7 @@ END assert_line "INPUT_COMMIT_OPTIONS: " assert_line "::debug::Apply commit options " assert_line "INPUT_TAGGING_MESSAGE: " - assert_line "No tagging message supplied. No tag will be added." + assert_line "Neither tag nor tag message is set. No tag will be added." assert_line "INPUT_PUSH_OPTIONS: " assert_line "::debug::Apply push options " assert_line "::debug::Push commit to remote branch existing-remote-branch" From d7ee275235b337d03e77815bd319db607e2b455b Mon Sep 17 00:00:00 2001 From: Stefan Zweifel Date: Sun, 12 Oct 2025 14:37:32 +0200 Subject: [PATCH 40/47] Change internal variable names --- entrypoint.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/entrypoint.sh b/entrypoint.sh index 1c79ed65..8a894aab 100755 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -180,11 +180,11 @@ _tag_commit() { echo "INPUT_TAGGING_MESSAGE: ${INPUT_TAGGING_MESSAGE}" if [ -n "$INPUT_TAG" ] || [ -n "$INPUT_TAGGING_MESSAGE" ]; then - TAG=${INPUT_TAG:-$INPUT_TAGGING_MESSAGE} - MESSAGE=${INPUT_TAGGING_MESSAGE:-$INPUT_TAG} + INTERNAL_TAG=${INPUT_TAG:-$INPUT_TAGGING_MESSAGE} + INTERNAL_TAGGING_MESSAGE=${INPUT_TAGGING_MESSAGE:-$INPUT_TAG} - _log "debug" "Create tag $TAG: $MESSAGE" - git -c user.name="$INPUT_COMMIT_USER_NAME" -c user.email="$INPUT_COMMIT_USER_EMAIL" tag -a "$TAG" -m "$MESSAGE" + _log "debug" "Create tag $INTERNAL_TAG: $INTERNAL_TAGGING_MESSAGE" + git -c user.name="$INPUT_COMMIT_USER_NAME" -c user.email="$INPUT_COMMIT_USER_EMAIL" tag -a "$INTERNAL_TAG" -m "$INTERNAL_TAGGING_MESSAGE" else echo "Neither tag nor tag message is set. No tag will be added."; fi From c40819ab3b7619623b7d0d760f3296f014f245b8 Mon Sep 17 00:00:00 2001 From: Stefan Zweifel Date: Sun, 12 Oct 2025 14:59:32 +0200 Subject: [PATCH 41/47] Update README --- README.md | 5 ++--- action.yml | 4 ++-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index cb1ca490..6c84bbce 100644 --- a/README.md +++ b/README.md @@ -93,8 +93,7 @@ The following is an extended example with all available options. # Optional. Message to annotate the created tag with. # If only one of `tag` or `tagging_message` is provided, the value of the provided field will be used for both tag name and message. - tagging_message: 'MyProduct v1.0.0' - + tagging_message: 'Codename "Sunshine"' # Optional. Option used by `git-status` to determine if the repository is # dirty. See https://git-scm.com/docs/git-status#_options @@ -125,7 +124,7 @@ The following is an extended example with all available options. 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`. + # Skips dirty check and changed files. Must be used in combination with `tag` and `tagging_message`. create_git_tag_only: false ``` diff --git a/action.yml b/action.yml index 74c81925..767ee3dc 100644 --- a/action.yml +++ b/action.yml @@ -45,11 +45,11 @@ inputs: required: false default: ${{ github.actor }} <${{ github.actor_id }}+${{ github.actor }}@users.noreply.github.com> tag: - description: New git tag with the commit. Keep this empty, if no tag should be created. + description: Tag name used for creating a new git tag with the commit. Keep this empty, if no tag should be created. required: false default: '' tagging_message: - description: Message used to create a new git tag with the commit. + description: Tagging message used for creating a new git tag with the commit. Keep this empty, if no tag should be created. required: false default: '' push_options: From 28e16e81777b558cc906c8750092100bbb34c5e3 Mon Sep 17 00:00:00 2001 From: Stefan Zweifel Date: Sun, 12 Oct 2025 16:31:03 +0200 Subject: [PATCH 42/47] Release preparations for v7 (#394) --- .github/workflows/update-changelog.yaml | 2 +- README.md | 42 ++++++++++++------------- UPGRADING.md | 7 +++++ action.yml | 2 +- entrypoint.sh | 12 +++---- tests/git-auto-commit.bats | 40 +++++++++++------------ 6 files changed, 56 insertions(+), 49 deletions(-) diff --git a/.github/workflows/update-changelog.yaml b/.github/workflows/update-changelog.yaml index 3fc58e58..2fc63816 100644 --- a/.github/workflows/update-changelog.yaml +++ b/.github/workflows/update-changelog.yaml @@ -27,7 +27,7 @@ jobs: latest-version: ${{ github.event.release.name }} - name: Commit updated CHANGELOG - uses: stefanzweifel/git-auto-commit-action@v6 + uses: stefanzweifel/git-auto-commit-action@v7 with: branch: master commit_message: Update CHANGELOG diff --git a/README.md b/README.md index 6c84bbce..431335a9 100644 --- a/README.md +++ b/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@v6 +- uses: stefanzweifel/git-auto-commit-action@v7 ``` Your Workflow should look similar to this example. @@ -39,7 +39,7 @@ jobs: contents: write steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: ref: ${{ github.head_ref }} @@ -47,7 +47,7 @@ jobs: # … # Commit all changed files back to the repository - - uses: stefanzweifel/git-auto-commit-action@v6 + - uses: stefanzweifel/git-auto-commit-action@v7 ``` > [!NOTE] @@ -56,7 +56,7 @@ jobs: The following is an extended example with all available options. ```yaml -- uses: stefanzweifel/git-auto-commit-action@v6 +- uses: stefanzweifel/git-auto-commit-action@v7 with: # Optional. Commit message for the created commit. # Defaults to "Apply automatic changes" @@ -88,11 +88,11 @@ The following is an extended example with all available options. # Optional. Tag name to be created in the local repository and # pushed to the remote repository on the defined branch. - # If only one of `tag` or `tagging_message` is provided, the value of the provided field will be used for both tag name and message. - tag: 'v1.0.0' + # If only one of `tag_name` or `tagging_message` is provided, the value of the provided field will be used for both tag name and message. + tag_name: 'v1.0.0' # Optional. Message to annotate the created tag with. - # If only one of `tag` or `tagging_message` is provided, the value of the provided field will be used for both tag name and message. + # If only one of `tag_name` or `tagging_message` is provided, the value of the provided field will be used for both tag name and message. tagging_message: 'Codename "Sunshine"' # Optional. Option used by `git-status` to determine if the repository is @@ -155,14 +155,14 @@ jobs: contents: write steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: ref: ${{ github.head_ref }} - name: Run php-cs-fixer uses: docker://oskarstark/php-cs-fixer-ga - - uses: stefanzweifel/git-auto-commit-action@v6 + - uses: stefanzweifel/git-auto-commit-action@v7 with: commit_message: Apply php-cs-fixer changes ``` @@ -184,7 +184,7 @@ You can use these outputs to trigger other Actions in your Workflow run based on ### Example ```yaml - - uses: stefanzweifel/git-auto-commit-action@v6 + - uses: stefanzweifel/git-auto-commit-action@v7 id: auto-commit-action #mandatory for the output to show up in ${{ steps }} with: commit_message: Apply php-cs-fixer changes @@ -220,7 +220,7 @@ You must use `action/checkout@v2` or later versions to check out the repository. In non-`push` events, such as `pull_request`, make sure to specify the `ref` to check out: ```yaml -- uses: actions/checkout@v4 +- uses: actions/checkout@v5 with: ref: ${{ github.head_ref }} ``` @@ -238,7 +238,7 @@ You can change this by creating a new [Personal Access Token (PAT)](https://gith storing the token as a secret in your repository and then passing the new token to the [`actions/checkout`](https://github.com/actions/checkout#usage) Action step. ```yaml -- uses: actions/checkout@v4 +- uses: actions/checkout@v5 with: token: ${{ secrets.PAT }} ``` @@ -284,7 +284,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@v6 + - uses: stefanzweifel/git-auto-commit-action@v7 id: commit with: commit_message: ${{ steps.commit_message_step.outputs.commit_message }} @@ -308,7 +308,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@v6 + uses: stefanzweifel/git-auto-commit-action@v7 with: commit_author: "${{ steps.import-gpg.outputs.name }} <${{ steps.import-gpg.outputs.email }}>" commit_user_name: ${{ steps.import-gpg.outputs.name }} @@ -371,7 +371,7 @@ jobs: contents: write steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: # Checkout the fork/head-repository and push changes to the fork. # If you skip this, the base repository will be checked out and changes @@ -385,7 +385,7 @@ jobs: - name: Run php-cs-fixer uses: docker://oskarstark/php-cs-fixer-ga - - uses: stefanzweifel/git-auto-commit-action@v6 + - uses: stefanzweifel/git-auto-commit-action@v7 ``` 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/). @@ -420,7 +420,7 @@ 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@v6 +- uses: stefanzweifel/git-auto-commit-action@v7 with: commit_author: ${{ steps.last-commit.outputs.author }} commit_message: ${{ steps.last-commit.outputs.message }} @@ -463,7 +463,7 @@ If you create a personal access token (classic), apply the `repo` and `workflow` If you create a fine-grained personal access token, apply the `Contents`-permissions. ```yaml -- uses: actions/checkout@v4 +- uses: actions/checkout@v5 with: # 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 }} @@ -477,7 +477,7 @@ You can learn more about Personal Access Token in the [GitHub documentation](htt 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@v6 + - uses: stefanzweifel/git-auto-commit-action@v7 with: commit_message: Apply php-cs-fixer changes push_options: --force @@ -507,7 +507,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@v6 +- uses: stefanzweifel/git-auto-commit-action@v7 with: file_pattern: '*.md' disable_globbing: true @@ -535,7 +535,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@v6` 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@v7` 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 diff --git a/UPGRADING.md b/UPGRADING.md index f3be24c6..ad15370e 100644 --- a/UPGRADING.md +++ b/UPGRADING.md @@ -1,5 +1,12 @@ # Upgrading +## From v6 to v7 + +The previously removed options `create_branch`, `skip_fetch`, and `skip_checkout` have been reintroduced in git-auto-commit v7. If you had removed these options from your workflows when upgrading to v6, you can now add them back if needed. + +Tagging a commit has been reworked. In addition to the existing `tagging_message`-option, a new `tag_name` option has been added. If you were using `tagging_message`, you can continue to do so, but if you want to specify a custom tag name and tag message, you can now use the `tag_name` and `tagging_message` option. +(Specifying a `tagging_message` without a `tag_name` will create a tag with the name and message both set to the value of `tagging_message`.) + ## From v5 to v6 The following options have been removed from git-auto-commit and can be removed from your workflows. diff --git a/action.yml b/action.yml index 767ee3dc..6c1d098e 100644 --- a/action.yml +++ b/action.yml @@ -44,7 +44,7 @@ inputs: description: Value used for the commit author. Defaults to the username of whoever triggered this workflow run. required: false default: ${{ github.actor }} <${{ github.actor_id }}+${{ github.actor }}@users.noreply.github.com> - tag: + tag_name: description: Tag name used for creating a new git tag with the commit. Keep this empty, if no tag should be created. required: false default: '' diff --git a/entrypoint.sh b/entrypoint.sh index 8a894aab..d288a67a 100755 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -176,12 +176,12 @@ _local_commit() { } _tag_commit() { - echo "INPUT_TAG: ${INPUT_TAG}" + echo "INPUT_TAG_NAME: ${INPUT_TAG_NAME}" echo "INPUT_TAGGING_MESSAGE: ${INPUT_TAGGING_MESSAGE}" - if [ -n "$INPUT_TAG" ] || [ -n "$INPUT_TAGGING_MESSAGE" ]; then - INTERNAL_TAG=${INPUT_TAG:-$INPUT_TAGGING_MESSAGE} - INTERNAL_TAGGING_MESSAGE=${INPUT_TAGGING_MESSAGE:-$INPUT_TAG} + if [ -n "$INPUT_TAG_NAME" ] || [ -n "$INPUT_TAGGING_MESSAGE" ]; then + INTERNAL_TAG=${INPUT_TAG_NAME:-$INPUT_TAGGING_MESSAGE} + INTERNAL_TAGGING_MESSAGE=${INPUT_TAGGING_MESSAGE:-$INPUT_TAG_NAME} _log "debug" "Create tag $INTERNAL_TAG: $INTERNAL_TAGGING_MESSAGE" git -c user.name="$INPUT_COMMIT_USER_NAME" -c user.email="$INPUT_COMMIT_USER_EMAIL" tag -a "$INTERNAL_TAG" -m "$INTERNAL_TAGGING_MESSAGE" @@ -202,8 +202,8 @@ _push_to_github() { if [ -z "$INPUT_BRANCH" ] then - # Only add `--tags` option, if `$INPUT_TAG` or `$INPUT_TAGGING_MESSAGE` is set - if [ -n "$INPUT_TAG" ] || [ -n "$INPUT_TAGGING_MESSAGE" ] + # Only add `--tags` option, if `$INPUT_TAG_NAME` or `$INPUT_TAGGING_MESSAGE` is set + if [ -n "$INPUT_TAG_NAME" ] || [ -n "$INPUT_TAGGING_MESSAGE" ] then _log "debug" "git push origin --tags"; git push origin --follow-tags --atomic ${INPUT_PUSH_OPTIONS:+"${INPUT_PUSH_OPTIONS_ARRAY[@]}"}; diff --git a/tests/git-auto-commit.bats b/tests/git-auto-commit.bats index 1fc2ffb5..a0fdc366 100644 --- a/tests/git-auto-commit.bats +++ b/tests/git-auto-commit.bats @@ -32,7 +32,7 @@ setup() { export INPUT_COMMIT_USER_NAME="Test Suite" export INPUT_COMMIT_USER_EMAIL="test@github.com" export INPUT_COMMIT_AUTHOR="Test Suite " - export INPUT_TAG="" + export INPUT_TAG_NAME="" export INPUT_TAGGING_MESSAGE="" export INPUT_PUSH_OPTIONS="" export INPUT_SKIP_DIRTY_CHECK=false @@ -122,7 +122,7 @@ cat_github_output() { assert_line "INPUT_FILE_PATTERN: ." assert_line "INPUT_COMMIT_OPTIONS: " assert_line "::debug::Apply commit options " - assert_line "INPUT_TAG: " + assert_line "INPUT_TAG_NAME: " assert_line "INPUT_TAGGING_MESSAGE: " assert_line "Neither tag nor tag message is set. No tag will be added." assert_line "INPUT_PUSH_OPTIONS: " @@ -146,7 +146,7 @@ cat_github_output() { assert_line "INPUT_FILE_PATTERN: ." assert_line "INPUT_COMMIT_OPTIONS: " assert_line "::debug::Apply commit options " - assert_line "INPUT_TAG: " + assert_line "INPUT_TAG_NAME: " assert_line "INPUT_TAGGING_MESSAGE: " assert_line "Neither tag nor tag message is set. No tag will be added." assert_line "INPUT_PUSH_OPTIONS: " @@ -294,7 +294,7 @@ cat_github_output() { } @test "It creates a tag with the commit" { - INPUT_TAG="v1.0.0" + INPUT_TAG_NAME="v1.0.0" INPUT_TAGGING_MESSAGE="MyProduct v1.0.0" touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt @@ -303,7 +303,7 @@ cat_github_output() { assert_success - assert_line "INPUT_TAG: v1.0.0" + assert_line "INPUT_TAG_NAME: v1.0.0" assert_line "INPUT_TAGGING_MESSAGE: MyProduct v1.0.0" assert_line "::debug::Create tag v1.0.0: MyProduct v1.0.0" @@ -394,7 +394,7 @@ cat_github_output() { @test "It uses existing branch when INPUT_BRANCH is empty and INPUT_TAG is set" { INPUT_BRANCH="" - INPUT_TAG="v2.0.0" + INPUT_TAG_NAME="v2.0.0" INPUT_TAGGING_MESSAGE="MyProduct v2.0.0" @@ -404,7 +404,7 @@ cat_github_output() { assert_success - assert_line "INPUT_TAG: v2.0.0" + assert_line "INPUT_TAG_NAME: v2.0.0" assert_line "::debug::Create tag v2.0.0: MyProduct v2.0.0" assert_line "::debug::git push origin --tags" @@ -445,7 +445,7 @@ cat_github_output() { @test "It pushes generated commit and tag to remote and actually updates the commit shas" { INPUT_BRANCH="" - INPUT_TAG="v2.0.0" + INPUT_TAG_NAME="v2.0.0" INPUT_TAGGING_MESSAGE="MyProduct v2.0.0" @@ -455,7 +455,7 @@ cat_github_output() { assert_success - assert_line "INPUT_TAG: v2.0.0" + assert_line "INPUT_TAG_NAME: v2.0.0" assert_line "::debug::Create tag v2.0.0: MyProduct v2.0.0" assert_line "::debug::git push origin --tags" @@ -480,7 +480,7 @@ cat_github_output() { git checkout ${FAKE_DEFAULT_BRANCH} INPUT_BRANCH="a-new-branch" - INPUT_TAG="v2.0.0" + INPUT_TAG_NAME="v2.0.0" INPUT_TAGGING_MESSAGE="MyProduct v2.0.0" @@ -490,7 +490,7 @@ cat_github_output() { assert_success - assert_line "INPUT_TAG: v2.0.0" + assert_line "INPUT_TAG_NAME: v2.0.0" assert_line "::debug::Create tag v2.0.0: MyProduct v2.0.0" assert_line "::debug::Push commit to remote branch a-new-branch" @@ -643,7 +643,7 @@ cat_github_output() { assert_line "INPUT_FILE_PATTERN: ." assert_line "INPUT_COMMIT_OPTIONS: " assert_line "::debug::Apply commit options " - assert_line "INPUT_TAG: " + assert_line "INPUT_TAG_NAME: " assert_line "INPUT_TAGGING_MESSAGE: " assert_line "Neither tag nor tag message is set. No tag will be added." assert_line "INPUT_PUSH_OPTIONS: " @@ -702,7 +702,7 @@ cat_github_output() { assert_line "INPUT_FILE_PATTERN: ." assert_line "INPUT_COMMIT_OPTIONS: " assert_line "::debug::Apply commit options " - assert_line "INPUT_TAG: " + assert_line "INPUT_TAG_NAME: " assert_line "INPUT_TAGGING_MESSAGE: " assert_line "Neither tag nor tag message is set. No tag will be added." assert_line "INPUT_PUSH_OPTIONS: " @@ -1035,7 +1035,7 @@ cat_github_output() { assert_line "INPUT_FILE_PATTERN: ." assert_line "INPUT_COMMIT_OPTIONS: " assert_line "::debug::Apply commit options " - assert_line "INPUT_TAG: " + assert_line "INPUT_TAG_NAME: " assert_line "INPUT_TAGGING_MESSAGE: " assert_line "Neither tag nor tag message is set. No tag will be added." assert_line "INPUT_PUSH_OPTIONS: " @@ -1123,7 +1123,7 @@ END @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_TAG=v1.0.0 + INPUT_TAG_NAME=v1.0.0 INPUT_TAGGING_MESSAGE="MyProduct v1.0.0" run git_auto_commit @@ -1153,14 +1153,14 @@ END @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_TAG="" + INPUT_TAG_NAME="" INPUT_TAGGING_MESSAGE="" run git_auto_commit assert_success - assert_line "INPUT_TAG: " + assert_line "INPUT_TAG_NAME: " assert_line "INPUT_TAGGING_MESSAGE: " assert_line "Neither tag nor tag message is set. No tag will be added." assert_line "::debug::Create git tag only" @@ -1452,7 +1452,7 @@ END assert_success - assert_line "INPUT_TAG: " + assert_line "INPUT_TAG_NAME: " assert_line "INPUT_TAGGING_MESSAGE: v1.0.0" assert_line "::debug::Create tag v1.0.0: v1.0.0" @@ -1474,7 +1474,7 @@ END } @test "Set a tag only" { - INPUT_TAG="v1.0.0" + INPUT_TAG_NAME="v1.0.0" touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt @@ -1482,7 +1482,7 @@ END assert_success - assert_line "INPUT_TAG: v1.0.0" + assert_line "INPUT_TAG_NAME: v1.0.0" assert_line "INPUT_TAGGING_MESSAGE: " assert_line "::debug::Create tag v1.0.0: v1.0.0" From 8fa7f5a3c51038deaa521c22ae89fac24baad8e7 Mon Sep 17 00:00:00 2001 From: stefanzweifel <1080923+stefanzweifel@users.noreply.github.com> Date: Sun, 12 Oct 2025 14:39:35 +0000 Subject: [PATCH 43/47] Update CHANGELOG --- CHANGELOG.md | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b60f66d5..b0bfb933 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,10 +5,26 @@ 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/v6.0.1...HEAD) +## [Unreleased](https://github.com/stefanzweifel/git-auto-commit-action/compare/v7.0.0...HEAD) > TBD +## [v7.0.0](https://github.com/stefanzweifel/git-auto-commit-action/compare/v6.0.1...v7.0.0) - 2025-10-12 + +### Added + +- Restore skip_fetch, skip_checkout, create_branch ([#388](https://github.com/stefanzweifel/git-auto-commit-action/pull/388)) [@stefanzweifel](https://github.com/@stefanzweifel) +- Restore Detached State Detection ([#393](https://github.com/stefanzweifel/git-auto-commit-action/pull/393)) [@stefanzweifel](https://github.com/@stefanzweifel) +- Add Support for Tag Messages ([#391](https://github.com/stefanzweifel/git-auto-commit-action/pull/391)) [@EliasBoulharts](https://github.com/@EliasBoulharts) + +### Changed + +- Run Action on Node 24 ([#389](https://github.com/stefanzweifel/git-auto-commit-action/pull/389)) [@stefanzweifel](https://github.com/@stefanzweifel) + +### Dependency Updates + +- Bump actions/checkout from 4 to 5 ([#386](https://github.com/stefanzweifel/git-auto-commit-action/pull/386)) [@[dependabot[bot]](https://github.com/apps/dependabot)](https://github.com/@[dependabot[bot]](https://github.com/apps/dependabot)) + ## [v6.0.1](https://github.com/stefanzweifel/git-auto-commit-action/compare/v6.0.0...v6.0.1) - 2025-06-11 ### Fixed From 547c1409cec143c754e148a6fbdfa359db836cf6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 10 Nov 2025 08:08:12 +0100 Subject: [PATCH 44/47] Bump bats from 1.12.0 to 1.13.0 (#398) Bumps [bats](https://github.com/bats-core/bats-core) from 1.12.0 to 1.13.0. - [Release notes](https://github.com/bats-core/bats-core/releases) - [Changelog](https://github.com/bats-core/bats-core/blob/master/docs/CHANGELOG.md) - [Commits](https://github.com/bats-core/bats-core/compare/v1.12.0...v1.13.0) --- updated-dependencies: - dependency-name: bats dependency-version: 1.13.0 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 83e9b66e..8a8dfcf3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,15 +5,15 @@ "packages": { "": { "devDependencies": { - "bats": "^1.12.0", + "bats": "^1.13.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==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/bats/-/bats-1.13.0.tgz", + "integrity": "sha512-giSYKGTOcPZyJDbfbTtzAedLcNWdjCLbXYU3/MwPnjyvDXzu6Dgw8d2M+8jHhZXSmsCMSQqCp+YBsJ603UO4vQ==", "dev": true, "license": "MIT", "bin": { diff --git a/package.json b/package.json index 06d7fc8d..e45dac4e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "devDependencies": { - "bats": "^1.12.0", + "bats": "^1.13.0", "bats-assert": "ztombol/bats-assert", "bats-support": "ztombol/bats-support" }, From 65c56779c90b0324ac2a7e7c31ec876b8db47914 Mon Sep 17 00:00:00 2001 From: Gideon <87426140+GideonBear@users.noreply.github.com> Date: Wed, 3 Dec 2025 12:10:40 +0100 Subject: [PATCH 45/47] docs: fix typo in README.md (#400) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 431335a9..1cdc4b00 100644 --- a/README.md +++ b/README.md @@ -216,7 +216,7 @@ If this Action doesn't work for your workflow, check out [EndBug/add-and-commit] ### Checkout the correct branch -You must use `action/checkout@v2` or later versions to check out the repository. +You must use `actions/checkout@v2` or later versions to check out the repository. In non-`push` events, such as `pull_request`, make sure to specify the `ref` to check out: ```yaml From 1e49d5001fa4bb7d02711af41f4af23c58ef1de8 Mon Sep 17 00:00:00 2001 From: Koen van Zuijlen <8818390+kvanzuijlen@users.noreply.github.com> Date: Wed, 17 Dec 2025 20:23:26 +0100 Subject: [PATCH 46/47] Add skip_push input option (#401) Co-authored-by: Stefan Zweifel --- README.md | 3 +++ action.yml | 4 ++++ entrypoint.sh | 4 ++++ tests/git-auto-commit.bats | 19 +++++++++++++++++++ 4 files changed, 30 insertions(+) diff --git a/README.md b/README.md index 1cdc4b00..07dbf82e 100644 --- a/README.md +++ b/README.md @@ -115,6 +115,9 @@ The following is an extended example with all available options. # Optional. Skip internal call to `git checkout` skip_checkout: true + + # Optional. Skip internal call to `git push` + skip_push: true # Optional. Prevents the shell from expanding filenames. # Details: https://www.gnu.org/software/bash/manual/html_node/Filename-Expansion.html diff --git a/action.yml b/action.yml index 6c1d098e..ed7e85fa 100644 --- a/action.yml +++ b/action.yml @@ -68,6 +68,10 @@ inputs: description: Skip the call to git-checkout. required: false default: false + skip_push: + description: Skip the call to git-push. + 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 diff --git a/entrypoint.sh b/entrypoint.sh index d288a67a..09fb6b73 100755 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -191,6 +191,10 @@ _tag_commit() { } _push_to_github() { + if "$INPUT_SKIP_PUSH"; then + _log "debug" "git-push will not be executed."; + return + fi echo "INPUT_BRANCH value: $INPUT_BRANCH"; diff --git a/tests/git-auto-commit.bats b/tests/git-auto-commit.bats index a0fdc366..9e39f7ea 100644 --- a/tests/git-auto-commit.bats +++ b/tests/git-auto-commit.bats @@ -38,6 +38,7 @@ setup() { export INPUT_SKIP_DIRTY_CHECK=false export INPUT_SKIP_FETCH=false export INPUT_SKIP_CHECKOUT=false + export INPUT_SKIP_PUSH=false export INPUT_DISABLE_GLOBBING=false export INPUT_CREATE_BRANCH=false export INPUT_INTERNAL_GIT_BINARY=git @@ -352,6 +353,24 @@ cat_github_output() { assert_equal $current_sha $remote_sha } +@test "If SKIP_PUSH is true git-push will not be called" { + touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt + + INPUT_SKIP_PUSH=true + + run git_auto_commit + + assert_success + + assert_line "::debug::git-push will not be executed." + + # Assert that the sha values are not equal on local and remote + current_sha="$(git rev-parse --verify --short ${FAKE_DEFAULT_BRANCH})" + remote_sha="$(git rev-parse --verify --short origin/${FAKE_DEFAULT_BRANCH})" + + refute [assert_equal $current_sha $remote_sha] +} + @test "It can checkout a different branch" { # Create foo-branch and then immediately switch back to ${FAKE_DEFAULT_BRANCH} git checkout -b foo From 04702edda442b2e678b25b537cec683a1493fcb9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 17 Dec 2025 20:23:57 +0100 Subject: [PATCH 47/47] Bump actions/checkout from 5 to 6 (#399) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/git-auto-commit.yml | 2 +- .github/workflows/linter.yml | 2 +- .github/workflows/tests.yml | 2 +- .github/workflows/update-changelog.yaml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/git-auto-commit.yml b/.github/workflows/git-auto-commit.yml index f2db122c..40f7f0b4 100644 --- a/.github/workflows/git-auto-commit.yml +++ b/.github/workflows/git-auto-commit.yml @@ -16,7 +16,7 @@ jobs: contents: write steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 with: ref: ${{ github.head_ref }} diff --git a/.github/workflows/linter.yml b/.github/workflows/linter.yml index 96268904..e954e2d3 100644 --- a/.github/workflows/linter.yml +++ b/.github/workflows/linter.yml @@ -9,7 +9,7 @@ jobs: steps: - name: Checkout Code - uses: actions/checkout@v5 + uses: actions/checkout@v6 - name: Lint Code Base uses: github/super-linter@v7 diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 5ca82191..451d19dc 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -11,7 +11,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - name: Install testing dependencies run: yarn install diff --git a/.github/workflows/update-changelog.yaml b/.github/workflows/update-changelog.yaml index 2fc63816..58d79b3c 100644 --- a/.github/workflows/update-changelog.yaml +++ b/.github/workflows/update-changelog.yaml @@ -16,7 +16,7 @@ jobs: steps: - name: Checkout code - uses: actions/checkout@v5 + uses: actions/checkout@v6 with: ref: master