diff --git a/entrypoint.sh b/entrypoint.sh index 026b879..fc8ba43 100755 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -11,7 +11,13 @@ _main() { if _git_is_dirty || "$INPUT_SKIP_DIRTY_CHECK"; then - echo "changes_detected=true" >> $GITHUB_OUTPUT; + # Check if $GITHUB_OUTPUT is available + # (Feature detection will be removed in late December 2022) + if [ -z ${GITHUB_OUTPUT+x} ]; then + echo "::set-output name=changes_detected::true"; + else + echo "changes_detected=true" >> $GITHUB_OUTPUT; + fi _switch_to_branch @@ -24,7 +30,13 @@ _main() { _push_to_github else - echo "changes_detected=false" >> $GITHUB_OUTPUT; + # Check if $GITHUB_OUTPUT is available + # (Feature detection will be removed in late December 2022) + if [ -z ${GITHUB_OUTPUT+x} ]; then + echo "::set-output name=changes_detected::false"; + else + echo "changes_detected=false" >> $GITHUB_OUTPUT; + fi echo "Working tree clean. Nothing to commit."; fi @@ -101,7 +113,14 @@ _local_commit() { --author="$INPUT_COMMIT_AUTHOR" \ ${INPUT_COMMIT_OPTIONS:+"${INPUT_COMMIT_OPTIONS_ARRAY[@]}"}; - echo "commit_hash=$(git rev-parse HEAD)" >> $GITHUB_OUTPUT; + + # Check if $GITHUB_OUTPUT is available + # (Feature detection will be removed in late December 2022) + if [ -z ${GITHUB_OUTPUT+x} ]; then + echo "::set-output name=commit_hash::$(git rev-parse HEAD)"; + else + echo "commit_hash=$(git rev-parse HEAD)" >> $GITHUB_OUTPUT; + fi } _tag_commit() { diff --git a/tests/git-auto-commit.bats b/tests/git-auto-commit.bats index 61fc407..f0b2324 100644 --- a/tests/git-auto-commit.bats +++ b/tests/git-auto-commit.bats @@ -57,7 +57,12 @@ teardown() { rm -rf "${FAKE_LOCAL_REPOSITORY}" rm -rf "${FAKE_REMOTE}" rm -rf "${FAKE_TEMP_LOCAL_REPOSITORY}" - rm "${GITHUB_OUTPUT}" + + if [ -z ${GITHUB_OUTPUT+x} ]; then + echo "GITHUB_OUTPUT is not set" + else + rm "${GITHUB_OUTPUT}" + fi } # Create a fake remote repository which tests can push against @@ -997,3 +1002,42 @@ cat_github_output() { refute_line --partial "new-file-2.txt" refute_line --partial "new-file-3.txt" } + + +@test "It uses old set-output syntax if GITHUB_OUTPUT environment is not available when changes are committed" { + unset GITHUB_OUTPUT + + touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt + + run git_auto_commit + + assert_success + + 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 " + assert_line "INPUT_TAGGING_MESSAGE: " + assert_line "No tagging message supplied. No tag will be added." + assert_line "INPUT_PUSH_OPTIONS: " + assert_line "::debug::Apply push options " + assert_line "::debug::Push commit to remote branch ${FAKE_DEFAULT_BRANCH}" + + assert_line "::set-output name=changes_detected::true" + assert_line -e "::set-output name=commit_hash::[0-9a-f]{40}$" +} + +@test "It uses old set-output syntax if GITHUB_OUTPUT environment is not available when no changes have been detected" { + unset GITHUB_OUTPUT + + run git_auto_commit + + assert_success + + assert_line "INPUT_REPOSITORY value: ${INPUT_REPOSITORY}" + assert_line "Working tree clean. Nothing to commit." + + assert_line "::set-output name=changes_detected::false" + refute_line -e "::set-output name=commit_hash::[0-9a-f]{40}$" +}