Merge pull request #357 from stefanzweifel/v6-detect-detached-state

This commit is contained in:
Stefan Zweifel 2025-02-05 18:00:42 +01:00 committed by GitHub
commit ed295bd35a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 44 additions and 4 deletions

View File

@ -17,6 +17,8 @@ jobs:
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.head_ref }}
- name: Use git-auto-commit-action
id: "auto-commit-action"

View File

@ -31,6 +31,10 @@ _main() {
_switch_to_repository
_check_if_is_git_repository
_check_if_repository_is_in_detached_state
if _git_is_dirty || "$INPUT_SKIP_DIRTY_CHECK"; then
_set_github_output "changes_detected" "true"
@ -84,11 +88,26 @@ _git_is_dirty() {
gitStatusMessage="$((git status -s $INPUT_STATUS_OPTIONS -- ${INPUT_FILE_PATTERN_EXPANDED:+${INPUT_FILE_PATTERN_EXPANDED[@]}} >/dev/null ) 2>&1)";
# shellcheck disable=SC2086
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>";
[ -n "$gitStatus" ]
}
_check_if_is_git_repository() {
if [ -d ".git" ]; then
_log "debug" "Repository found.";
else
_log "error" "Not a git repository. Please make sure to run this action in a git repository. Adjust the `repository` input if necessary.";
exit 1;
fi
[ -n "$gitStatus" ]
}
_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;
else
_log "debug" "Repository is on a branch.";
fi
}
_add_files() {

View File

@ -1088,5 +1088,24 @@ END
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>"
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" {
touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt
run git_auto_commit
assert_success
# Bring local repository into a detached state
prev_commit=$(git rev-parse HEAD~1);
git checkout "$prev_commit";
touch "${FAKE_TEMP_LOCAL_REPOSITORY}"/remote-files{4,5,6}.txt
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."
}