diff --git a/entrypoint.sh b/entrypoint.sh index 0d11b030..3ab6ced6 100755 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -48,9 +48,28 @@ _switch_to_branch() { git fetch --depth=1; fi - # Switch to branch from current Workflow run - # shellcheck disable=SC2086 - git checkout $INPUT_BRANCH; + + # If INPUT_BRANCH is empty, just run `git checkout` + if [ -z "$INPUT_BRANCH" ] + then + # shellcheck disable=SC2086 + git checkout $INPUT_BRANCH; + else + # If the branch which we should checkout already exists, just + # run `git checkout $INPUT_BRANCH` + # Otherwhise create a new branch by adding the `-b` option to + # `git-checkout` + # shellcheck disable=SC2086 + if [ -n "$(git branch --list $INPUT_BRANCH)" ] + then + # shellcheck disable=SC2086 + git checkout $INPUT_BRANCH; + else + # shellcheck disable=SC2086 + git checkout -b $INPUT_BRANCH; + fi + fi + } _add_files() { diff --git a/tests/git-auto-commit.bats b/tests/git-auto-commit.bats index 94e23578..04797314 100644 --- a/tests/git-auto-commit.bats +++ b/tests/git-auto-commit.bats @@ -331,3 +331,25 @@ git_auto_commit() { assert_line "::debug::git-fetch has not been executed" } + +@test "If INPUT_BRANCH is set and the branch does not exist it creates one" { + INPUT_BRANCH="new-branch" + + run git branch + refute_line "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 +}