From 2da8d963b4e8d43280bfbdd1906f04138fd127cf Mon Sep 17 00:00:00 2001 From: Stefan Zweifel Date: Wed, 17 Sep 2025 11:02:55 +0200 Subject: [PATCH 1/6] 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 bd10bf9..78cc22b 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 9df496a..60268dd 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 b55b351..a3885d9 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 2/6] 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 c64bf19..c0b1532 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 3/6] Remove warnings of deprecated inputs --- entrypoint.sh | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/entrypoint.sh b/entrypoint.sh index a3885d9..5fcc448 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 4/6] Update Tests --- entrypoint.sh | 2 + tests/git-auto-commit.bats | 325 ++++++++++++++++++++++++++++++------- 2 files changed, 272 insertions(+), 55 deletions(-) diff --git a/entrypoint.sh b/entrypoint.sh index 5fcc448..e873470 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 c0b1532..c3f2a7d 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 - INPUT_SKIP_CHECKOUT=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 "::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: 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 "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 5/6] Switch to Node24 --- action.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/action.yml b/action.yml index 60268dd..9839ee5 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 d1854850ecc4b10b4ee69a72ea84f78a192779e3 Mon Sep 17 00:00:00 2001 From: Stefan Zweifel Date: Tue, 30 Sep 2025 16:48:49 +0200 Subject: [PATCH 6/6] 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 e873470..0799ec5 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 c3f2a7d..ea5e599 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" {