mirror of
https://github.com/stefanzweifel/git-auto-commit-action.git
synced 2026-06-16 16:38:51 +00:00
Compare commits
No commits in common. "c40819ab3b7619623b7d0d760f3296f014f245b8" and "e9f84b936bc576b0ba8aa45e1b5f4527abe275d1" have entirely different histories.
c40819ab3b
...
e9f84b936b
2
.github/workflows/git-auto-commit.yml
vendored
2
.github/workflows/git-auto-commit.yml
vendored
@ -16,7 +16,7 @@ jobs:
|
|||||||
contents: write
|
contents: write
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v5
|
- uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
ref: ${{ github.head_ref }}
|
ref: ${{ github.head_ref }}
|
||||||
|
|
||||||
|
|||||||
2
.github/workflows/linter.yml
vendored
2
.github/workflows/linter.yml
vendored
@ -9,7 +9,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout Code
|
- name: Checkout Code
|
||||||
uses: actions/checkout@v5
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Lint Code Base
|
- name: Lint Code Base
|
||||||
uses: github/super-linter@v7
|
uses: github/super-linter@v7
|
||||||
|
|||||||
2
.github/workflows/tests.yml
vendored
2
.github/workflows/tests.yml
vendored
@ -11,7 +11,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v5
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Install testing dependencies
|
- name: Install testing dependencies
|
||||||
run: yarn install
|
run: yarn install
|
||||||
|
|||||||
2
.github/workflows/update-changelog.yaml
vendored
2
.github/workflows/update-changelog.yaml
vendored
@ -16,7 +16,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@v5
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
ref: master
|
ref: master
|
||||||
|
|
||||||
|
|||||||
15
README.md
15
README.md
@ -93,7 +93,8 @@ The following is an extended example with all available options.
|
|||||||
|
|
||||||
# Optional. Message to annotate the created tag with.
|
# Optional. Message to annotate the created tag with.
|
||||||
# If only one of `tag` or `tagging_message` is provided, the value of the provided field will be used for both tag name and message.
|
# If only one of `tag` or `tagging_message` is provided, the value of the provided field will be used for both tag name and message.
|
||||||
tagging_message: 'Codename "Sunshine"'
|
tagging_message: 'MyProduct v1.0.0'
|
||||||
|
|
||||||
|
|
||||||
# Optional. Option used by `git-status` to determine if the repository is
|
# Optional. Option used by `git-status` to determine if the repository is
|
||||||
# dirty. See https://git-scm.com/docs/git-status#_options
|
# dirty. See https://git-scm.com/docs/git-status#_options
|
||||||
@ -110,21 +111,12 @@ The following is an extended example with all available options.
|
|||||||
# Optional. Disable dirty check and always try to create a commit and push
|
# Optional. Disable dirty check and always try to create a commit and push
|
||||||
skip_dirty_check: true
|
skip_dirty_check: true
|
||||||
|
|
||||||
# Optional. Skip internal call to `git fetch`
|
|
||||||
skip_fetch: true
|
|
||||||
|
|
||||||
# Optional. Skip internal call to `git checkout`
|
|
||||||
skip_checkout: true
|
|
||||||
|
|
||||||
# Optional. Prevents the shell from expanding filenames.
|
# Optional. Prevents the shell from expanding filenames.
|
||||||
# Details: https://www.gnu.org/software/bash/manual/html_node/Filename-Expansion.html
|
# Details: https://www.gnu.org/software/bash/manual/html_node/Filename-Expansion.html
|
||||||
disable_globbing: true
|
disable_globbing: true
|
||||||
|
|
||||||
# Optional. Create given branch name in local and remote repository.
|
|
||||||
create_branch: true
|
|
||||||
|
|
||||||
# Optional. Creates a new tag and pushes it to remote without creating a commit.
|
# Optional. Creates a new tag and pushes it to remote without creating a commit.
|
||||||
# Skips dirty check and changed files. Must be used in combination with `tag` and `tagging_message`.
|
# Skips dirty check and changed files. Must be used with `tagging_message`.
|
||||||
create_git_tag_only: false
|
create_git_tag_only: false
|
||||||
```
|
```
|
||||||
|
|
||||||
@ -426,7 +418,6 @@ The steps in your workflow might look like this:
|
|||||||
commit_message: ${{ steps.last-commit.outputs.message }}
|
commit_message: ${{ steps.last-commit.outputs.message }}
|
||||||
commit_options: '--amend --no-edit'
|
commit_options: '--amend --no-edit'
|
||||||
push_options: '--force'
|
push_options: '--force'
|
||||||
skip_fetch: true
|
|
||||||
```
|
```
|
||||||
|
|
||||||
See discussion in [#159](https://github.com/stefanzweifel/git-auto-commit-action/issues/159#issuecomment-845347950) for details.
|
See discussion in [#159](https://github.com/stefanzweifel/git-auto-commit-action/issues/159#issuecomment-845347950) for details.
|
||||||
|
|||||||
28
action.yml
28
action.yml
@ -45,11 +45,11 @@ inputs:
|
|||||||
required: false
|
required: false
|
||||||
default: ${{ github.actor }} <${{ github.actor_id }}+${{ github.actor }}@users.noreply.github.com>
|
default: ${{ github.actor }} <${{ github.actor_id }}+${{ github.actor }}@users.noreply.github.com>
|
||||||
tag:
|
tag:
|
||||||
description: Tag name used for creating a new git tag with the commit. Keep this empty, if no tag should be created.
|
description: New git tag with the commit. Keep this empty, if no tag should be created.
|
||||||
required: false
|
required: false
|
||||||
default: ''
|
default: ''
|
||||||
tagging_message:
|
tagging_message:
|
||||||
description: Tagging message used for creating a new git tag with the commit. Keep this empty, if no tag should be created.
|
description: Message used to create a new git tag with the commit.
|
||||||
required: false
|
required: false
|
||||||
default: ''
|
default: ''
|
||||||
push_options:
|
push_options:
|
||||||
@ -60,20 +60,9 @@ inputs:
|
|||||||
description: Skip the check if the git repository is dirty and always try to create a commit.
|
description: Skip the check if the git repository is dirty and always try to create a commit.
|
||||||
required: false
|
required: false
|
||||||
default: false
|
default: false
|
||||||
skip_fetch:
|
|
||||||
description: Skip the call to git-fetch.
|
|
||||||
required: false
|
|
||||||
default: false
|
|
||||||
skip_checkout:
|
|
||||||
description: Skip the call to git-checkout.
|
|
||||||
required: false
|
|
||||||
default: false
|
|
||||||
disable_globbing:
|
disable_globbing:
|
||||||
description: Stop the shell from expanding filenames (https://www.gnu.org/software/bash/manual/html_node/Filename-Expansion.html)
|
description: Stop the shell from expanding filenames (https://www.gnu.org/software/bash/manual/html_node/Filename-Expansion.html)
|
||||||
default: false
|
default: false
|
||||||
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
|
|
||||||
create_git_tag_only:
|
create_git_tag_only:
|
||||||
description: Perform a clean git tag and push, without commiting anything
|
description: Perform a clean git tag and push, without commiting anything
|
||||||
required: false
|
required: false
|
||||||
@ -81,6 +70,17 @@ inputs:
|
|||||||
internal_git_binary:
|
internal_git_binary:
|
||||||
description: Internal use only! Path to git binary used to check if git is available. (Don't change this!)
|
description: Internal use only! Path to git binary used to check if git is available. (Don't change this!)
|
||||||
default: git
|
default: git
|
||||||
|
skip_fetch:
|
||||||
|
description: "Deprecated: skip_fetch has been removed in v6. It does not have any effect anymore."
|
||||||
|
required: false
|
||||||
|
default: false
|
||||||
|
skip_checkout:
|
||||||
|
description: "Deprecated: skip_checkout has been removed in v6. It does not have any effect anymore."
|
||||||
|
required: false
|
||||||
|
default: false
|
||||||
|
create_branch:
|
||||||
|
description: "Deprecated: create_branch has been removed in v6. It does not have any effect anymore."
|
||||||
|
default: false
|
||||||
|
|
||||||
|
|
||||||
outputs:
|
outputs:
|
||||||
@ -92,7 +92,7 @@ outputs:
|
|||||||
description: Value is "true", if a git tag was created using the `create_git_tag_only`-input.
|
description: Value is "true", if a git tag was created using the `create_git_tag_only`-input.
|
||||||
|
|
||||||
runs:
|
runs:
|
||||||
using: 'node24'
|
using: 'node20'
|
||||||
main: 'index.js'
|
main: 'index.js'
|
||||||
|
|
||||||
branding:
|
branding:
|
||||||
|
|||||||
@ -27,13 +27,25 @@ _log() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_main() {
|
_main() {
|
||||||
|
if "$INPUT_SKIP_FETCH"; then
|
||||||
|
_log "warning" "git-auto-commit: skip_fetch has been removed in v6. It does not have any effect anymore.";
|
||||||
|
fi
|
||||||
|
|
||||||
|
if "$INPUT_SKIP_CHECKOUT"; then
|
||||||
|
_log "warning" "git-auto-commit: skip_checkout has been removed in v6. It does not have any effect anymore.";
|
||||||
|
fi
|
||||||
|
|
||||||
|
if "$INPUT_CREATE_BRANCH"; then
|
||||||
|
_log "warning" "git-auto-commit: create_branch has been removed in v6. It does not have any effect anymore.";
|
||||||
|
fi
|
||||||
|
|
||||||
_check_if_git_is_available
|
_check_if_git_is_available
|
||||||
|
|
||||||
_switch_to_repository
|
_switch_to_repository
|
||||||
|
|
||||||
_check_if_is_git_repository
|
_check_if_is_git_repository
|
||||||
|
|
||||||
_check_if_repository_is_in_detached_state
|
# _check_if_repository_is_in_detached_state
|
||||||
|
|
||||||
if "$INPUT_CREATE_GIT_TAG_ONLY"; then
|
if "$INPUT_CREATE_GIT_TAG_ONLY"; then
|
||||||
_log "debug" "Create git tag only";
|
_log "debug" "Create git tag only";
|
||||||
@ -44,8 +56,6 @@ _main() {
|
|||||||
|
|
||||||
_set_github_output "changes_detected" "true"
|
_set_github_output "changes_detected" "true"
|
||||||
|
|
||||||
_switch_to_branch
|
|
||||||
|
|
||||||
_add_files
|
_add_files
|
||||||
|
|
||||||
# Check dirty state of repo again using git-diff.
|
# Check dirty state of repo again using git-diff.
|
||||||
@ -110,40 +120,13 @@ _check_if_is_git_repository() {
|
|||||||
_check_if_repository_is_in_detached_state() {
|
_check_if_repository_is_in_detached_state() {
|
||||||
if [ -z "$(git symbolic-ref HEAD)" ]
|
if [ -z "$(git symbolic-ref HEAD)" ]
|
||||||
then
|
then
|
||||||
_log "warning" "Repository is in a detached HEAD state. git-auto-commit will likely handle this automatically. To avoid it, check out a branch using the ref option in actions/checkout.";
|
_log "error" "Repository is in detached HEAD state. Please make sure you check out a branch. Adjust the `ref` input accordingly.";
|
||||||
|
exit 1;
|
||||||
else
|
else
|
||||||
_log "debug" "Repository is on a branch.";
|
_log "debug" "Repository is on a branch.";
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
_switch_to_branch() {
|
|
||||||
echo "INPUT_BRANCH value: $INPUT_BRANCH";
|
|
||||||
|
|
||||||
# Fetch remote to make sure that repo can be switched to the right branch.
|
|
||||||
if "$INPUT_SKIP_FETCH"; then
|
|
||||||
_log "debug" "git-fetch will not be executed.";
|
|
||||||
else
|
|
||||||
_log "debug" "git-fetch will be executed.";
|
|
||||||
git fetch --depth=1;
|
|
||||||
fi
|
|
||||||
|
|
||||||
# If `skip_checkout`-input is true, skip the entire checkout step.
|
|
||||||
if "$INPUT_SKIP_CHECKOUT"; then
|
|
||||||
_log "debug" "git-checkout will not be executed.";
|
|
||||||
else
|
|
||||||
_log "debug" "git-checkout will be executed.";
|
|
||||||
# Create new local branch if `create_branch`-input is true
|
|
||||||
if "$INPUT_CREATE_BRANCH"; then
|
|
||||||
# shellcheck disable=SC2086
|
|
||||||
git checkout -B $INPUT_BRANCH --;
|
|
||||||
else
|
|
||||||
# Switch to branch from current Workflow run
|
|
||||||
# shellcheck disable=SC2086
|
|
||||||
git checkout $INPUT_BRANCH --;
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
_add_files() {
|
_add_files() {
|
||||||
echo "INPUT_ADD_OPTIONS: ${INPUT_ADD_OPTIONS}";
|
echo "INPUT_ADD_OPTIONS: ${INPUT_ADD_OPTIONS}";
|
||||||
_log "debug" "Apply add options ${INPUT_ADD_OPTIONS}";
|
_log "debug" "Apply add options ${INPUT_ADD_OPTIONS}";
|
||||||
@ -180,11 +163,11 @@ _tag_commit() {
|
|||||||
echo "INPUT_TAGGING_MESSAGE: ${INPUT_TAGGING_MESSAGE}"
|
echo "INPUT_TAGGING_MESSAGE: ${INPUT_TAGGING_MESSAGE}"
|
||||||
|
|
||||||
if [ -n "$INPUT_TAG" ] || [ -n "$INPUT_TAGGING_MESSAGE" ]; then
|
if [ -n "$INPUT_TAG" ] || [ -n "$INPUT_TAGGING_MESSAGE" ]; then
|
||||||
INTERNAL_TAG=${INPUT_TAG:-$INPUT_TAGGING_MESSAGE}
|
TAG=${INPUT_TAG:-$INPUT_TAGGING_MESSAGE}
|
||||||
INTERNAL_TAGGING_MESSAGE=${INPUT_TAGGING_MESSAGE:-$INPUT_TAG}
|
MESSAGE=${INPUT_TAGGING_MESSAGE:-$INPUT_TAG}
|
||||||
|
|
||||||
_log "debug" "Create tag $INTERNAL_TAG: $INTERNAL_TAGGING_MESSAGE"
|
_log "debug" "Create tag $TAG: $MESSAGE"
|
||||||
git -c user.name="$INPUT_COMMIT_USER_NAME" -c user.email="$INPUT_COMMIT_USER_EMAIL" tag -a "$INTERNAL_TAG" -m "$INTERNAL_TAGGING_MESSAGE"
|
git -c user.name="$INPUT_COMMIT_USER_NAME" -c user.email="$INPUT_COMMIT_USER_EMAIL" tag -a "$TAG" -m "$MESSAGE"
|
||||||
else
|
else
|
||||||
echo "Neither tag nor tag message is set. No tag will be added.";
|
echo "Neither tag nor tag message is set. No tag will be added.";
|
||||||
fi
|
fi
|
||||||
|
|||||||
@ -36,11 +36,13 @@ setup() {
|
|||||||
export INPUT_TAGGING_MESSAGE=""
|
export INPUT_TAGGING_MESSAGE=""
|
||||||
export INPUT_PUSH_OPTIONS=""
|
export INPUT_PUSH_OPTIONS=""
|
||||||
export INPUT_SKIP_DIRTY_CHECK=false
|
export INPUT_SKIP_DIRTY_CHECK=false
|
||||||
|
export INPUT_DISABLE_GLOBBING=false
|
||||||
|
export INPUT_INTERNAL_GIT_BINARY=git
|
||||||
|
|
||||||
|
# Deprecated variables. Will be removed in future versions
|
||||||
|
export INPUT_CREATE_BRANCH=false
|
||||||
export INPUT_SKIP_FETCH=false
|
export INPUT_SKIP_FETCH=false
|
||||||
export INPUT_SKIP_CHECKOUT=false
|
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
|
# Set GitHub environment variables used by the GitHub Action
|
||||||
temp_github_output_file=$(mktemp -t github_output_test.XXXXX)
|
temp_github_output_file=$(mktemp -t github_output_test.XXXXX)
|
||||||
@ -417,32 +419,6 @@ cat_github_output() {
|
|||||||
assert_output --partial refs/tags/v2.0.0
|
assert_output --partial refs/tags/v2.0.0
|
||||||
}
|
}
|
||||||
|
|
||||||
@test "If SKIP_FETCH is true git-fetch will not be called" {
|
|
||||||
|
|
||||||
touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt
|
|
||||||
|
|
||||||
INPUT_SKIP_FETCH=true
|
|
||||||
|
|
||||||
run git_auto_commit
|
|
||||||
|
|
||||||
assert_success
|
|
||||||
|
|
||||||
assert_line "::debug::git-fetch will not be executed."
|
|
||||||
}
|
|
||||||
|
|
||||||
@test "If SKIP_CHECKOUT is true git-checkout will not be called" {
|
|
||||||
|
|
||||||
touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt
|
|
||||||
|
|
||||||
INPUT_SKIP_CHECKOUT=true
|
|
||||||
|
|
||||||
run git_auto_commit
|
|
||||||
|
|
||||||
assert_success
|
|
||||||
|
|
||||||
assert_line "::debug::git-checkout will not be executed."
|
|
||||||
}
|
|
||||||
|
|
||||||
@test "It pushes generated commit and tag to remote and actually updates the commit shas" {
|
@test "It pushes generated commit and tag to remote and actually updates the commit shas" {
|
||||||
INPUT_BRANCH=""
|
INPUT_BRANCH=""
|
||||||
INPUT_TAG="v2.0.0"
|
INPUT_TAG="v2.0.0"
|
||||||
@ -475,10 +451,6 @@ cat_github_output() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@test "It pushes generated commit and tag to remote branch and updates commit sha" {
|
@test "It pushes generated commit and tag to remote branch and updates commit sha" {
|
||||||
# Create "a-new-branch"-branch and then immediately switch back to ${FAKE_DEFAULT_BRANCH}
|
|
||||||
git checkout -b a-new-branch
|
|
||||||
git checkout ${FAKE_DEFAULT_BRANCH}
|
|
||||||
|
|
||||||
INPUT_BRANCH="a-new-branch"
|
INPUT_BRANCH="a-new-branch"
|
||||||
INPUT_TAG="v2.0.0"
|
INPUT_TAG="v2.0.0"
|
||||||
INPUT_TAGGING_MESSAGE="MyProduct v2.0.0"
|
INPUT_TAGGING_MESSAGE="MyProduct v2.0.0"
|
||||||
@ -503,7 +475,7 @@ cat_github_output() {
|
|||||||
assert_output --partial refs/tags/v2.0.0
|
assert_output --partial refs/tags/v2.0.0
|
||||||
|
|
||||||
# Assert that branch "a-new-branch" was updated on remote
|
# Assert that branch "a-new-branch" was updated on remote
|
||||||
current_sha="$(git rev-parse --verify --short a-new-branch)"
|
current_sha="$(git rev-parse --verify --short ${FAKE_DEFAULT_BRANCH})"
|
||||||
remote_sha="$(git rev-parse --verify --short origin/a-new-branch)"
|
remote_sha="$(git rev-parse --verify --short origin/a-new-branch)"
|
||||||
|
|
||||||
assert_equal $current_sha $remote_sha
|
assert_equal $current_sha $remote_sha
|
||||||
@ -547,7 +519,6 @@ cat_github_output() {
|
|||||||
@test "it does not throw an error if not changes are detected and SKIP_DIRTY_CHECK is false" {
|
@test "it does not throw an error if not changes are detected and SKIP_DIRTY_CHECK is false" {
|
||||||
INPUT_FILE_PATTERN="."
|
INPUT_FILE_PATTERN="."
|
||||||
INPUT_SKIP_DIRTY_CHECK=false
|
INPUT_SKIP_DIRTY_CHECK=false
|
||||||
INPUT_SKIP_FETCH=false
|
|
||||||
|
|
||||||
run git_auto_commit
|
run git_auto_commit
|
||||||
|
|
||||||
@ -601,8 +572,6 @@ cat_github_output() {
|
|||||||
|
|
||||||
touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt
|
touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt
|
||||||
|
|
||||||
INPUT_SKIP_CHECKOUT=true
|
|
||||||
|
|
||||||
run git_auto_commit
|
run git_auto_commit
|
||||||
|
|
||||||
assert_success
|
assert_success
|
||||||
@ -632,8 +601,6 @@ cat_github_output() {
|
|||||||
|
|
||||||
touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt
|
touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt
|
||||||
|
|
||||||
INPUT_SKIP_CHECKOUT=true
|
|
||||||
|
|
||||||
run git_auto_commit
|
run git_auto_commit
|
||||||
|
|
||||||
assert_success
|
assert_success
|
||||||
@ -664,6 +631,52 @@ cat_github_output() {
|
|||||||
assert_line -e "commit_hash=[0-9a-f]{40}$"
|
assert_line -e "commit_hash=[0-9a-f]{40}$"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@test "It does not create new local branch if local branch already exists" {
|
||||||
|
git checkout -b not-existend-remote-branch
|
||||||
|
git checkout ${FAKE_DEFAULT_BRANCH}
|
||||||
|
|
||||||
|
INPUT_BRANCH="not-existend-remote-branch"
|
||||||
|
|
||||||
|
run git branch
|
||||||
|
assert_line --partial "not-existend-remote-branch"
|
||||||
|
|
||||||
|
run git branch -r
|
||||||
|
refute_line --partial "origin/not-existend-remote-branch"
|
||||||
|
|
||||||
|
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: not-existend-remote-branch"
|
||||||
|
assert_line "INPUT_FILE_PATTERN: ."
|
||||||
|
assert_line "INPUT_COMMIT_OPTIONS: "
|
||||||
|
assert_line "::debug::Apply commit options "
|
||||||
|
assert_line "INPUT_TAG: "
|
||||||
|
assert_line "INPUT_TAGGING_MESSAGE: "
|
||||||
|
assert_line "Neither tag nor tag message is set. No tag will be added."
|
||||||
|
assert_line "INPUT_PUSH_OPTIONS: "
|
||||||
|
assert_line "::debug::Apply push options "
|
||||||
|
assert_line "::debug::Push commit to remote branch not-existend-remote-branch"
|
||||||
|
|
||||||
|
# Assert checked out branch is still the same.
|
||||||
|
run git rev-parse --abbrev-ref HEAD
|
||||||
|
assert_line --partial ${FAKE_DEFAULT_BRANCH}
|
||||||
|
refute_line --partial "not-existend-remote-branch"
|
||||||
|
|
||||||
|
run git branch
|
||||||
|
assert_line --partial "not-existend-remote-branch"
|
||||||
|
|
||||||
|
run git branch -r
|
||||||
|
assert_line --partial "origin/not-existend-remote-branch"
|
||||||
|
|
||||||
|
run cat_github_output
|
||||||
|
assert_line "changes_detected=true"
|
||||||
|
assert_line -e "commit_hash=[0-9a-f]{40}$"
|
||||||
|
}
|
||||||
|
|
||||||
@test "It creates new local branch and pushes branch to remote even if the remote branch already exists" {
|
@test "It creates new local branch and pushes branch to remote even if the remote branch already exists" {
|
||||||
# Create `existing-remote-branch` on remote with changes the local repository does not yet have
|
# Create `existing-remote-branch` on remote with changes the local repository does not yet have
|
||||||
cd $FAKE_TEMP_LOCAL_REPOSITORY
|
cd $FAKE_TEMP_LOCAL_REPOSITORY
|
||||||
@ -681,7 +694,6 @@ cat_github_output() {
|
|||||||
cd $FAKE_LOCAL_REPOSITORY
|
cd $FAKE_LOCAL_REPOSITORY
|
||||||
|
|
||||||
INPUT_BRANCH="existing-remote-branch"
|
INPUT_BRANCH="existing-remote-branch"
|
||||||
INPUT_SKIP_CHECKOUT=true
|
|
||||||
|
|
||||||
run git branch
|
run git branch
|
||||||
refute_line --partial "existing-remote-branch"
|
refute_line --partial "existing-remote-branch"
|
||||||
@ -727,7 +739,7 @@ cat_github_output() {
|
|||||||
assert_line -e "commit_hash=[0-9a-f]{40}$"
|
assert_line -e "commit_hash=[0-9a-f]{40}$"
|
||||||
}
|
}
|
||||||
|
|
||||||
@test "It fails if local branch is behind remote and when remote has newer commits and skip_checkout is set to true" {
|
@test "It fails if local branch is behind remote and when remote has newer commits" {
|
||||||
# Create `existing-remote-branch` on remote with changes the local repository does not yet have
|
# Create `existing-remote-branch` on remote with changes the local repository does not yet have
|
||||||
cd $FAKE_TEMP_LOCAL_REPOSITORY
|
cd $FAKE_TEMP_LOCAL_REPOSITORY
|
||||||
git checkout -b "existing-remote-branch"
|
git checkout -b "existing-remote-branch"
|
||||||
@ -744,7 +756,6 @@ cat_github_output() {
|
|||||||
cd $FAKE_LOCAL_REPOSITORY
|
cd $FAKE_LOCAL_REPOSITORY
|
||||||
|
|
||||||
INPUT_BRANCH="existing-remote-branch"
|
INPUT_BRANCH="existing-remote-branch"
|
||||||
INPUT_SKIP_CHECKOUT=true
|
|
||||||
|
|
||||||
run git branch
|
run git branch
|
||||||
refute_line --partial "existing-remote-branch"
|
refute_line --partial "existing-remote-branch"
|
||||||
@ -776,7 +787,7 @@ cat_github_output() {
|
|||||||
refute [assert_equal $current_sha $remote_sha]
|
refute [assert_equal $current_sha $remote_sha]
|
||||||
}
|
}
|
||||||
|
|
||||||
@test "It fails to push commit to remote if branch already exists and local repo is behind its remote counterpart and SKIP_CHECKOUT is used" {
|
@test "It fails to push commit to remote if branch already exists and local repo is behind its remote counterpart" {
|
||||||
# Create `new-branch` on remote with changes the local repository does not yet have
|
# Create `new-branch` on remote with changes the local repository does not yet have
|
||||||
cd $FAKE_TEMP_LOCAL_REPOSITORY
|
cd $FAKE_TEMP_LOCAL_REPOSITORY
|
||||||
|
|
||||||
@ -795,7 +806,6 @@ cat_github_output() {
|
|||||||
cd $FAKE_LOCAL_REPOSITORY
|
cd $FAKE_LOCAL_REPOSITORY
|
||||||
|
|
||||||
INPUT_BRANCH="new-branch"
|
INPUT_BRANCH="new-branch"
|
||||||
INPUT_SKIP_CHECKOUT=true
|
|
||||||
|
|
||||||
# Assert that local remote does not have a "new-branch"-branch nor does
|
# Assert that local remote does not have a "new-branch"-branch nor does
|
||||||
# know about the remote branch.
|
# know about the remote branch.
|
||||||
@ -814,7 +824,8 @@ cat_github_output() {
|
|||||||
assert_line "INPUT_BRANCH value: new-branch"
|
assert_line "INPUT_BRANCH value: new-branch"
|
||||||
assert_line --partial "::debug::Push commit to remote branch new-branch"
|
assert_line --partial "::debug::Push commit to remote branch new-branch"
|
||||||
|
|
||||||
assert_line --partial "Updates were rejected because a pushed branch tip is behind its remote"
|
assert_line --partial "Updates were rejected because the remote contains work that you do"
|
||||||
|
assert_line --partial "This is usually caused by another repository pushing"
|
||||||
}
|
}
|
||||||
|
|
||||||
@test "throws fatal error if file pattern includes files that do not exist" {
|
@test "throws fatal error if file pattern includes files that do not exist" {
|
||||||
@ -1102,7 +1113,8 @@ END
|
|||||||
assert_line "::error::Not a git repository. Please make sure to run this action in a git repository. Adjust the `repository` input if necessary."
|
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 logs a warning" {
|
@test "It detects if the repository is in a detached state and exits with an error" {
|
||||||
|
skip
|
||||||
touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt
|
touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt
|
||||||
|
|
||||||
run git_auto_commit
|
run git_auto_commit
|
||||||
@ -1117,8 +1129,8 @@ END
|
|||||||
|
|
||||||
run git_auto_commit
|
run git_auto_commit
|
||||||
|
|
||||||
assert_success;
|
assert_failure;
|
||||||
assert_line "::warning::Repository is in a detached HEAD state. git-auto-commit will likely handle this automatically. To avoid it, check out a branch using the ref option in actions/checkout."
|
assert_line "::error::Repository is in detached HEAD state. Please make sure you check out a branch. Adjust the `ref` input accordingly."
|
||||||
}
|
}
|
||||||
|
|
||||||
@test "it creates a tag if create_git_tag_only is set to true and a message has been supplied" {
|
@test "it creates a tag if create_git_tag_only is set to true and a message has been supplied" {
|
||||||
@ -1175,272 +1187,18 @@ END
|
|||||||
assert_output ""
|
assert_output ""
|
||||||
}
|
}
|
||||||
|
|
||||||
@test "script fails to push commit to new branch that does not exist yet" {
|
@test "it shows warning message if any deprecated options are used" {
|
||||||
INPUT_BRANCH="not-existend-branch"
|
INPUT_SKIP_FETCH=true
|
||||||
INPUT_CREATE_BRANCH=false
|
|
||||||
|
|
||||||
run git branch
|
|
||||||
refute_line --partial "not-existend-branch"
|
|
||||||
|
|
||||||
run git branch -r
|
|
||||||
refute_line --partial "origin/not-existend-branch"
|
|
||||||
|
|
||||||
touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt
|
|
||||||
|
|
||||||
run git_auto_commit
|
|
||||||
|
|
||||||
assert_failure
|
|
||||||
|
|
||||||
assert_line "INPUT_REPOSITORY value: ${INPUT_REPOSITORY}"
|
|
||||||
assert_line "INPUT_BRANCH value: not-existend-branch"
|
|
||||||
assert_line "fatal: invalid reference: not-existend-branch"
|
|
||||||
|
|
||||||
run git branch
|
|
||||||
refute_line --partial "not-existend-branch"
|
|
||||||
|
|
||||||
run git branch -r
|
|
||||||
refute_line --partial "origin/not-existend-branch"
|
|
||||||
|
|
||||||
run cat_github_output
|
|
||||||
assert_line "changes_detected=true"
|
|
||||||
}
|
|
||||||
|
|
||||||
@test "It creates new local branch and pushes the new branch to remote" {
|
|
||||||
INPUT_BRANCH="not-existend-branch"
|
|
||||||
INPUT_CREATE_BRANCH=true
|
|
||||||
|
|
||||||
run git branch
|
|
||||||
refute_line --partial "not-existend-branch"
|
|
||||||
|
|
||||||
run git branch -r
|
|
||||||
refute_line --partial "origin/not-existend-branch"
|
|
||||||
|
|
||||||
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: not-existend-branch"
|
|
||||||
assert_line "INPUT_FILE_PATTERN: ."
|
|
||||||
assert_line "INPUT_COMMIT_OPTIONS: "
|
|
||||||
assert_line "::debug::Apply commit options "
|
|
||||||
assert_line "INPUT_TAGGING_MESSAGE: "
|
|
||||||
assert_line "Neither tag nor tag message is set. No tag will be added."
|
|
||||||
assert_line "INPUT_PUSH_OPTIONS: "
|
|
||||||
assert_line "::debug::Apply push options "
|
|
||||||
assert_line "::debug::Push commit to remote branch not-existend-branch"
|
|
||||||
|
|
||||||
run git branch
|
|
||||||
assert_line --partial "not-existend-branch"
|
|
||||||
|
|
||||||
run git branch -r
|
|
||||||
assert_line --partial "origin/not-existend-branch"
|
|
||||||
|
|
||||||
run cat_github_output
|
|
||||||
assert_line "changes_detected=true"
|
|
||||||
assert_line -e "commit_hash=[0-9a-f]{40}$"
|
|
||||||
}
|
|
||||||
|
|
||||||
@test "It does not create new local branch if local branch already exists and SKIP_CHECKOUT is true" {
|
|
||||||
git checkout -b not-existend-remote-branch
|
|
||||||
git checkout ${FAKE_DEFAULT_BRANCH}
|
|
||||||
|
|
||||||
INPUT_BRANCH="not-existend-remote-branch"
|
|
||||||
INPUT_SKIP_CHECKOUT=true
|
INPUT_SKIP_CHECKOUT=true
|
||||||
|
|
||||||
run git branch
|
|
||||||
assert_line --partial "not-existend-remote-branch"
|
|
||||||
|
|
||||||
run git branch -r
|
|
||||||
refute_line --partial "origin/not-existend-remote-branch"
|
|
||||||
|
|
||||||
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: not-existend-remote-branch"
|
|
||||||
assert_line "INPUT_FILE_PATTERN: ."
|
|
||||||
assert_line "INPUT_COMMIT_OPTIONS: "
|
|
||||||
assert_line "::debug::Apply commit options "
|
|
||||||
assert_line "INPUT_TAGGING_MESSAGE: "
|
|
||||||
assert_line "Neither tag nor tag message is set. No tag will be added."
|
|
||||||
assert_line "INPUT_PUSH_OPTIONS: "
|
|
||||||
assert_line "::debug::Apply push options "
|
|
||||||
assert_line "::debug::Push commit to remote branch not-existend-remote-branch"
|
|
||||||
|
|
||||||
# Assert checked out branch is still the same.
|
|
||||||
run git rev-parse --abbrev-ref HEAD
|
|
||||||
assert_line --partial ${FAKE_DEFAULT_BRANCH}
|
|
||||||
refute_line --partial "not-existend-remote-branch"
|
|
||||||
|
|
||||||
run git branch
|
|
||||||
assert_line --partial "not-existend-remote-branch"
|
|
||||||
|
|
||||||
run git branch -r
|
|
||||||
assert_line --partial "origin/not-existend-remote-branch"
|
|
||||||
|
|
||||||
run cat_github_output
|
|
||||||
assert_line "changes_detected=true"
|
|
||||||
assert_line -e "commit_hash=[0-9a-f]{40}$"
|
|
||||||
}
|
|
||||||
|
|
||||||
@test "it creates new local branch and pushes branch to remote even if the remote branch already exists" {
|
|
||||||
|
|
||||||
# Create `existing-remote-branch` on remote with changes the local repository does not yet have
|
|
||||||
cd $FAKE_TEMP_LOCAL_REPOSITORY
|
|
||||||
git checkout -b "existing-remote-branch"
|
|
||||||
touch new-branch-file.txt
|
|
||||||
git add new-branch-file.txt
|
|
||||||
git commit -m "Add additional file"
|
|
||||||
git push origin existing-remote-branch
|
|
||||||
|
|
||||||
run git branch
|
|
||||||
assert_line --partial "existing-remote-branch"
|
|
||||||
|
|
||||||
# ---------
|
|
||||||
# Switch to our regular local repository and run `git-auto-commit`
|
|
||||||
cd $FAKE_LOCAL_REPOSITORY
|
|
||||||
|
|
||||||
INPUT_BRANCH="existing-remote-branch"
|
|
||||||
INPUT_CREATE_BRANCH=true
|
INPUT_CREATE_BRANCH=true
|
||||||
|
|
||||||
run git branch
|
|
||||||
refute_line --partial "existing-remote-branch"
|
|
||||||
|
|
||||||
run git fetch --all
|
|
||||||
run git pull origin existing-remote-branch
|
|
||||||
run git branch -r
|
|
||||||
assert_line --partial "origin/existing-remote-branch"
|
|
||||||
|
|
||||||
touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt
|
|
||||||
|
|
||||||
run git_auto_commit
|
run git_auto_commit
|
||||||
|
|
||||||
assert_success
|
assert_success
|
||||||
|
|
||||||
assert_line "INPUT_REPOSITORY value: ${INPUT_REPOSITORY}"
|
assert_line "::warning::git-auto-commit: skip_fetch has been removed in v6. It does not have any effect anymore."
|
||||||
assert_line "INPUT_BRANCH value: existing-remote-branch"
|
assert_line "::warning::git-auto-commit: skip_checkout has been removed in v6. It does not have any effect anymore."
|
||||||
assert_line "INPUT_FILE_PATTERN: ."
|
assert_line "::warning::git-auto-commit: create_branch has been removed in v6. It does not have any effect anymore."
|
||||||
assert_line "INPUT_COMMIT_OPTIONS: "
|
|
||||||
assert_line "::debug::Apply commit options "
|
|
||||||
assert_line "INPUT_TAGGING_MESSAGE: "
|
|
||||||
assert_line "Neither tag nor tag message is set. No tag will be added."
|
|
||||||
assert_line "INPUT_PUSH_OPTIONS: "
|
|
||||||
assert_line "::debug::Apply push options "
|
|
||||||
assert_line "::debug::Push commit to remote branch existing-remote-branch"
|
|
||||||
|
|
||||||
run git branch
|
|
||||||
assert_line --partial "existing-remote-branch"
|
|
||||||
|
|
||||||
run git branch -r
|
|
||||||
assert_line --partial "origin/existing-remote-branch"
|
|
||||||
|
|
||||||
# Assert that branch "existing-remote-branch" was updated on remote
|
|
||||||
current_sha="$(git rev-parse --verify --short existing-remote-branch)"
|
|
||||||
remote_sha="$(git rev-parse --verify --short origin/existing-remote-branch)"
|
|
||||||
|
|
||||||
assert_equal $current_sha $remote_sha
|
|
||||||
|
|
||||||
run cat_github_output
|
|
||||||
assert_line "changes_detected=true"
|
|
||||||
assert_line -e "commit_hash=[0-9a-f]{40}$"
|
|
||||||
}
|
|
||||||
|
|
||||||
@test "script fails if new local branch is checked out and push fails as remote has newer commits than local" {
|
|
||||||
# Create `existing-remote-branch` on remote with changes the local repository does not yet have
|
|
||||||
cd $FAKE_TEMP_LOCAL_REPOSITORY
|
|
||||||
git checkout -b "existing-remote-branch"
|
|
||||||
touch new-branch-file.txt
|
|
||||||
git add new-branch-file.txt
|
|
||||||
git commit -m "Add additional file"
|
|
||||||
git push origin existing-remote-branch
|
|
||||||
|
|
||||||
run git branch
|
|
||||||
assert_line --partial "existing-remote-branch"
|
|
||||||
|
|
||||||
# ---------
|
|
||||||
# Switch to our regular local repository and run `git-auto-commit`
|
|
||||||
cd $FAKE_LOCAL_REPOSITORY
|
|
||||||
|
|
||||||
INPUT_BRANCH="existing-remote-branch"
|
|
||||||
INPUT_CREATE_BRANCH=true
|
|
||||||
|
|
||||||
run git branch
|
|
||||||
refute_line --partial "existing-remote-branch"
|
|
||||||
|
|
||||||
run git fetch --all
|
|
||||||
run git branch -r
|
|
||||||
assert_line --partial "origin/existing-remote-branch"
|
|
||||||
|
|
||||||
touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt
|
|
||||||
|
|
||||||
run git_auto_commit
|
|
||||||
|
|
||||||
assert_failure
|
|
||||||
|
|
||||||
assert_line "hint: Updates were rejected because the tip of your current branch is behind"
|
|
||||||
|
|
||||||
# Assert that branch exists locally and on remote
|
|
||||||
run git branch
|
|
||||||
assert_line --partial "existing-remote-branch"
|
|
||||||
|
|
||||||
run git branch -r
|
|
||||||
assert_line --partial "origin/existing-remote-branch"
|
|
||||||
|
|
||||||
# Assert that branch "existing-remote-branch" was not updated on remote
|
|
||||||
current_sha="$(git rev-parse --verify --short existing-remote-branch)"
|
|
||||||
remote_sha="$(git rev-parse --verify --short origin/existing-remote-branch)"
|
|
||||||
|
|
||||||
refute [assert_equal $current_sha $remote_sha]
|
|
||||||
}
|
|
||||||
|
|
||||||
@test "It pushes commit to remote if branch already exists and local repo is behind its remote counterpart" {
|
|
||||||
# Create `new-branch` on remote with changes the local repository does not yet have
|
|
||||||
cd $FAKE_TEMP_LOCAL_REPOSITORY
|
|
||||||
|
|
||||||
git checkout -b "new-branch"
|
|
||||||
touch new-branch-file.txt
|
|
||||||
git add new-branch-file.txt
|
|
||||||
|
|
||||||
git commit --quiet -m "Add additional file"
|
|
||||||
git push origin new-branch
|
|
||||||
|
|
||||||
run git branch -r
|
|
||||||
assert_line --partial "origin/new-branch"
|
|
||||||
|
|
||||||
# ---------
|
|
||||||
# Switch to our regular local repository and run `git-auto-commit`
|
|
||||||
cd $FAKE_LOCAL_REPOSITORY
|
|
||||||
|
|
||||||
INPUT_BRANCH="new-branch"
|
|
||||||
|
|
||||||
# Assert that local remote does not know have "new-branch" locally nor does
|
|
||||||
# know about the remote branch.
|
|
||||||
run git branch
|
|
||||||
refute_line --partial "new-branch"
|
|
||||||
|
|
||||||
run git branch -r
|
|
||||||
refute_line --partial "origin/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
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@test "Set a tag message only" {
|
@test "Set a tag message only" {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user