Skip to content

Commit

Permalink
Fail if attempting to execute git commands in a directory that is not…
Browse files Browse the repository at this point in the history
… a git-repo. (#326)

* Fail (and log message) if attempting to execute git commands in a directory that is not a git-repo.

* Add Test

* Code Formatting

---------

Co-authored-by: Constantin Comendant <constantin@uberagent.com>
Co-authored-by: Stefan Zweifel <stefan@stefanzweifel.dev>
  • Loading branch information
3 people committed Apr 11, 2024
1 parent b0f4d47 commit 8621497
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 1 deletion.
9 changes: 8 additions & 1 deletion entrypoint.sh
Expand Up @@ -82,8 +82,15 @@ _git_is_dirty() {
echo "INPUT_FILE_PATTERN: ${INPUT_FILE_PATTERN}";
read -r -a INPUT_FILE_PATTERN_EXPANDED <<< "$INPUT_FILE_PATTERN";

# capture stderr
gitStatusMessage="$((git status -s $INPUT_STATUS_OPTIONS -- ${INPUT_FILE_PATTERN_EXPANDED:+${INPUT_FILE_PATTERN_EXPANDED[@]}} >/dev/null ) 2>&1)";
# shellcheck disable=SC2086
[ -n "$(git status -s $INPUT_STATUS_OPTIONS -- ${INPUT_FILE_PATTERN_EXPANDED:+${INPUT_FILE_PATTERN_EXPANDED[@]}})" ]
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>";
exit 1;
fi
[ -n "$gitStatus" ]
}
_switch_to_branch() {
Expand Down
13 changes: 13 additions & 0 deletions tests/git-auto-commit.bats
Expand Up @@ -8,6 +8,7 @@ setup() {
export FAKE_LOCAL_REPOSITORY="${BATS_TEST_DIRNAME}/tests_local_repository"
export FAKE_REMOTE="${BATS_TEST_DIRNAME}/tests_remote_repository"
export FAKE_TEMP_LOCAL_REPOSITORY="${BATS_TEST_DIRNAME}/tests_clone_of_remote_repository"
export FAKE_FOLDER_WITHOUT_GIT_REPO="/tmp/tests_folder_without_git_repo"

# While it is likely the GitHub hosted runners will use master as the default branch,
# locally anyone may change that. So for tests lets grab whatever is currently set
Expand Down Expand Up @@ -58,6 +59,7 @@ teardown() {
rm -rf "${FAKE_LOCAL_REPOSITORY}"
rm -rf "${FAKE_REMOTE}"
rm -rf "${FAKE_TEMP_LOCAL_REPOSITORY}"
rm -rf "${INPUT_REPOSITORY}"

if [ -z ${GITHUB_OUTPUT+x} ]; then
echo "GITHUB_OUTPUT is not set"
Expand Down Expand Up @@ -1112,3 +1114,14 @@ END
run git log -n 1
assert_output --partial $COMMIT_MESSAGE
}

@test "It exits with error message if entrypoint.sh is being run not in a git repository" {
INPUT_REPOSITORY="${FAKE_FOLDER_WITHOUT_GIT_REPO}"

mkdir "${INPUT_REPOSITORY}"

run git_auto_commit

assert_failure;
assert_line "::error::git-status failed with:<fatal: not a git repository (or any of the parent directories): .git>"
}

0 comments on commit 8621497

Please sign in to comment.