From 0b007fbd1180b8e3a3668b21c6517392fe8f26eb Mon Sep 17 00:00:00 2001 From: Stefan Zweifel Date: Sat, 5 Nov 2022 11:53:46 +0100 Subject: [PATCH] Let Action fail if git binary can't be located (#261) * Check if git binary exists * Add Tests --- action.yml | 3 +++ entrypoint.sh | 10 ++++++++++ tests/git-auto-commit.bats | 12 ++++++++++++ 3 files changed, 25 insertions(+) diff --git a/action.yml b/action.yml index 6479721..4e74526 100644 --- a/action.yml +++ b/action.yml @@ -70,6 +70,9 @@ inputs: 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 outputs: changes_detected: diff --git a/entrypoint.sh b/entrypoint.sh index fc8ba43..52449a6 100755 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -7,6 +7,8 @@ if "$INPUT_DISABLE_GLOBBING"; then fi _main() { + _check_if_git_is_available + _switch_to_repository if _git_is_dirty || "$INPUT_SKIP_DIRTY_CHECK"; then @@ -42,6 +44,14 @@ _main() { fi } +_check_if_git_is_available() { + if hash -- "$INPUT_INTERNAL_GIT_BINARY" 2> /dev/null; then + echo "::debug::git binary found."; + else + echo "::error ::git-auto-commit could not find git binary. Please make sure git is available." + exit 1; + fi +} _switch_to_repository() { echo "INPUT_REPOSITORY value: $INPUT_REPOSITORY"; diff --git a/tests/git-auto-commit.bats b/tests/git-auto-commit.bats index f0b2324..92a3434 100644 --- a/tests/git-auto-commit.bats +++ b/tests/git-auto-commit.bats @@ -37,6 +37,7 @@ setup() { 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) @@ -1041,3 +1042,14 @@ cat_github_output() { assert_line "::set-output name=changes_detected::false" refute_line -e "::set-output name=commit_hash::[0-9a-f]{40}$" } + +@test "It fails hard if git is not available" { + INPUT_INTERNAL_GIT_BINARY=binary-does-not-exist + + touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt + + run git_auto_commit + + assert_failure; + assert_line "::error ::git-auto-commit could not find git binary. Please make sure git is available." +}