From aa2cec9c080f5742d0635d0cd065cc6c81e9837b Mon Sep 17 00:00:00 2001 From: Stefan Zweifel Date: Tue, 19 Dec 2023 20:11:39 +0100 Subject: [PATCH 01/12] Don't switch local branches --- entrypoint.sh | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/entrypoint.sh b/entrypoint.sh index 6fe017a..eb506bf 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 "$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 `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/12] 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 daf5bc0..fbe12ff 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/12] 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 fbe12ff..963ddf5 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/12] 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 963ddf5..5666c96 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/12] 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 5666c96..3d5c558 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/12] 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 3d5c558..5a80675 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/12] 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 5a80675..e283d6c 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/12] 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 e283d6c..b1995f4 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/12] Remove _switch_to_branch function --- entrypoint.sh | 30 ++---------------------------- 1 file changed, 2 insertions(+), 28 deletions(-) diff --git a/entrypoint.sh b/entrypoint.sh index eb506bf..3e7e916 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/12] 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 b1995f4..93440a7 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/12] 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 8192c95..775dd2f 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/12] Remove removed options from README --- README.md | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 040fc3b..d04565a 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.