Compare commits

...

46 Commits

Author SHA1 Message Date
Stefan Zweifel
acbe8b15bf Merge pull request #393 from stefanzweifel/v7-warn-detached-head 2025-09-30 16:54:18 +02:00
Stefan Zweifel
d1854850ec Enable Detached State Check 2025-09-30 16:48:49 +02:00
Stefan Zweifel
d2e5cae4c6 Merge pull request #389 from stefanzweifel/v7-node-24
Run Action on Node 24
2025-09-22 07:20:05 +02:00
Stefan Zweifel
858005f1b9 Switch to Node24 2025-09-22 07:11:49 +02:00
Stefan Zweifel
9a4902607d Update Tests 2025-09-17 14:08:26 +02:00
Stefan Zweifel
d330c718ba Remove warnings of deprecated inputs 2025-09-17 13:32:46 +02:00
Stefan Zweifel
5fe35a088d Restore Tests 2025-09-17 11:48:35 +02:00
Stefan Zweifel
2da8d963b4 Restore skip_fetch, skip_checkout, create_branch 2025-09-17 11:02:55 +02:00
Stefan Zweifel
01d77ca6cb Merge pull request #382 from stefanzweifel/dependabot/github_actions/stefanzweifel/git-auto-commit-action-6 2025-06-16 09:45:04 +02:00
dependabot[bot]
6371fedd09 Bump stefanzweifel/git-auto-commit-action from 5 to 6
Bumps [stefanzweifel/git-auto-commit-action](https://github.com/stefanzweifel/git-auto-commit-action) from 5 to 6.
- [Release notes](https://github.com/stefanzweifel/git-auto-commit-action/releases)
- [Changelog](https://github.com/stefanzweifel/git-auto-commit-action/blob/master/CHANGELOG.md)
- [Commits](https://github.com/stefanzweifel/git-auto-commit-action/compare/v5...v6)

---
updated-dependencies:
- dependency-name: stefanzweifel/git-auto-commit-action
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-16 06:39:19 +00:00
Stefan Zweifel
f9017b24ee Update README to use v6 in examples 2025-06-13 16:47:49 +02:00
stefanzweifel
66f124b8c2 Update CHANGELOG 2025-06-11 11:27:36 +00:00
Stefan Zweifel
778341af66 Merge pull request #379 from stefanzweifel/disable-detached-state-check 2025-06-11 13:26:39 +02:00
Stefan Zweifel
33b203d92a Disable Check if Repo is in Detached State
Fixes #378
2025-06-11 13:22:17 +02:00
stefanzweifel
a82d80a75f Update CHANGELOG 2025-06-10 18:44:47 +00:00
Stefan Zweifel
3cc016cfc8 Merge pull request #375 from stefanzweifel/v6-next 2025-06-10 20:19:14 +02:00
Stefan Zweifel
ddb7ae4159 Merge pull request #376 from Dreamsorcerer/patch-1 2025-06-02 21:38:08 +02:00
Stefan Zweifel
b001e5f0ff Apply suggestions from code review 2025-06-02 21:37:45 +02:00
Sam Bull
6494dc61d3 Fix PAT instructions with Dependabot 2025-05-28 15:08:30 +01:00
Stefan Zweifel
76180511d9 Add deprecated inputs to fix unbound variable issue 2025-05-28 11:37:04 +02:00
Stefan Zweifel
ae114628ea Merge pull request #371 from stefanzweifel/dependabot/npm_and_yarn/bats-1.12.0 2025-05-19 09:43:11 +02:00
dependabot[bot]
3058f91afb Bump bats from 1.11.1 to 1.12.0
Bumps [bats](https://github.com/bats-core/bats-core) from 1.11.1 to 1.12.0.
- [Release notes](https://github.com/bats-core/bats-core/releases)
- [Changelog](https://github.com/bats-core/bats-core/blob/master/docs/CHANGELOG.md)
- [Commits](https://github.com/bats-core/bats-core/compare/v1.11.1...v1.12.0)

---
updated-dependencies:
- dependency-name: bats
  dependency-version: 1.12.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-19 06:08:17 +00:00
Stefan Zweifel
8ddf02de71 Add git-auto-commit to warning text 2025-05-03 16:03:43 +02:00
Stefan Zweifel
e7955f713c Emit warning if deprecated/removed options are used 2025-05-03 15:51:01 +02:00
Stefan Zweifel
739fd03b2d Merge branch 'master' into v6-next 2025-05-03 10:31:03 +02:00
stefanzweifel
af302a9c63 Update CHANGELOG 2025-04-19 08:40:01 +00:00
Stefan Zweifel
ed295bd35a Merge pull request #357 from stefanzweifel/v6-detect-detached-state 2025-02-05 18:00:42 +01:00
Stefan Zweifel
bd434eed48 Use ref checkout properly 2025-02-05 17:34:26 +01:00
Stefan Zweifel
1666a49083 Use ref in auto-commit workflow 2025-02-05 17:27:23 +01:00
Stefan Zweifel
1d986f74dd Improve Error Message 2025-02-05 17:17:19 +01:00
Stefan Zweifel
ad56d4eb46 Throw error if repo is in detached state 2025-02-05 17:14:02 +01:00
Stefan Zweifel
9fa4cb99cf Merge pull request #314 from stefanzweifel/v6/remove-local-branch-switch 2025-02-05 16:01:10 +01:00
Stefan Zweifel
cec27bde37 Fix Typo 2025-02-05 15:59:51 +01:00
Stefan Zweifel
244febd79d Add UPGRADING.md 2025-02-05 15:57:55 +01:00
Stefan Zweifel
7f171889c8 Remove removed options from README 2023-12-20 20:20:24 +01:00
Stefan Zweifel
76f415fb30 Remove skip_fetch, skip_checkout and create_branch 2023-12-20 20:19:38 +01:00
Stefan Zweifel
3e796a0146 Update Assertion 2023-12-20 20:13:20 +01:00
Stefan Zweifel
e833d4f211 Remove _switch_to_branch function 2023-12-20 20:10:12 +01:00
Stefan Zweifel
0aca01a1ef Remove no longer used input options from tests 2023-12-20 20:09:59 +01:00
Stefan Zweifel
03fddc470c Temp disable assertions 2023-12-20 20:09:40 +01:00
Stefan Zweifel
ef7ed32535 Remove no longer needed tests 2023-12-20 20:03:21 +01:00
Stefan Zweifel
9062db8404 Update Tests 2023-12-19 21:00:32 +01:00
Stefan Zweifel
80052f0645 Update Tests 2023-12-19 20:45:55 +01:00
Stefan Zweifel
3b8231379d Update Tests 2023-12-19 20:34:56 +01:00
Stefan Zweifel
d9307b5e8c Update Test 2023-12-19 20:13:01 +01:00
Stefan Zweifel
aa2cec9c08 Don't switch local branches 2023-12-19 20:11:39 +01:00
10 changed files with 684 additions and 367 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

@@ -27,7 +27,7 @@ jobs:
latest-version: ${{ github.event.release.name }}
- name: Commit updated CHANGELOG
uses: stefanzweifel/git-auto-commit-action@v5
uses: stefanzweifel/git-auto-commit-action@v6
with:
branch: master
commit_message: Update CHANGELOG

View File

@@ -5,10 +5,41 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
## [Unreleased](https://github.com/stefanzweifel/git-auto-commit-action/compare/v5.1.0...HEAD)
## [Unreleased](https://github.com/stefanzweifel/git-auto-commit-action/compare/v6.0.1...HEAD)
> TBD
## [v6.0.1](https://github.com/stefanzweifel/git-auto-commit-action/compare/v6.0.0...v6.0.1) - 2025-06-11
### Fixed
- Disable Check if Repo is in Detached State ([#379](https://github.com/stefanzweifel/git-auto-commit-action/pull/379)) [@stefanzweifel](https://github.com/@stefanzweifel)
## [v6.0.0](https://github.com/stefanzweifel/git-auto-commit-action/compare/v5.2.0...v6.0.0) - 2025-06-10
### Added
- Throw error early if repository is in a detached state ([#357](https://github.com/stefanzweifel/git-auto-commit-action/pull/357))
### Fixed
- Fix PAT instructions with Dependabot ([#376](https://github.com/stefanzweifel/git-auto-commit-action/pull/376)) [@Dreamsorcerer](https://github.com/@Dreamsorcerer)
### Removed
- Remove support for `create_branch`, `skip_checkout`, `skip_Fetch` ([#314](https://github.com/stefanzweifel/git-auto-commit-action/pull/314))
## [v5.2.0](https://github.com/stefanzweifel/git-auto-commit-action/compare/v5.1.0...v5.2.0) - 2025-04-19
### Added
- Add `create_git_tag_only` option to skip commiting and always create a git-tag. ([#364](https://github.com/stefanzweifel/git-auto-commit-action/pull/364)) [@zMynxx](https://github.com/@zMynxx)
- Add Test for `create_git_tag_only` feature ([#367](https://github.com/stefanzweifel/git-auto-commit-action/pull/367)) [@stefanzweifel](https://github.com/@stefanzweifel)
### Fixed
- docs: Update README.md per #354 ([#361](https://github.com/stefanzweifel/git-auto-commit-action/pull/361)) [@rasa](https://github.com/@rasa)
## [v5.1.0](https://github.com/stefanzweifel/git-auto-commit-action/compare/v5.0.1...v5.1.0) - 2025-01-11
### Changed

View File

@@ -19,7 +19,7 @@ Adding git-auto-commit to your Workflow only takes a couple lines of code.
2. Add the following step at the end of your job, after other steps that might add or change files.
```yaml
- uses: stefanzweifel/git-auto-commit-action@v5
- uses: stefanzweifel/git-auto-commit-action@v6
```
Your Workflow should look similar to this example.
@@ -47,7 +47,7 @@ jobs:
# …
# Commit all changed files back to the repository
- uses: stefanzweifel/git-auto-commit-action@v5
- uses: stefanzweifel/git-auto-commit-action@v6
```
> [!NOTE]
@@ -56,15 +56,14 @@ jobs:
The following is an extended example with all available options.
```yaml
- uses: stefanzweifel/git-auto-commit-action@v5
- uses: stefanzweifel/git-auto-commit-action@v6
with:
# Optional. Commit message for the created commit.
# Defaults to "Apply automatic changes"
commit_message: Automated Change
# Optional. Local and remote branch name where commit is going to be pushed
# to. Defaults to the current branch.
# You might need to set `create_branch: true` if the branch does not exist.
# Optional. Remote branch name where commit is going to be pushed to.
# Defaults to the current branch.
branch: feature-123
# Optional. Options used by `git-commit`.
@@ -158,7 +157,7 @@ jobs:
- name: Run php-cs-fixer
uses: docker://oskarstark/php-cs-fixer-ga
- uses: stefanzweifel/git-auto-commit-action@v5
- uses: stefanzweifel/git-auto-commit-action@v6
with:
commit_message: Apply php-cs-fixer changes
```
@@ -180,7 +179,7 @@ You can use these outputs to trigger other Actions in your Workflow run based on
### Example
```yaml
- uses: stefanzweifel/git-auto-commit-action@v5
- uses: stefanzweifel/git-auto-commit-action@v6
id: auto-commit-action #mandatory for the output to show up in ${{ steps }}
with:
commit_message: Apply php-cs-fixer changes
@@ -280,7 +279,7 @@ The example below can be used as a starting point to generate a multiline commit
# Quick and dirty step to get rid of the temporary file holding the commit message
- run: rm -rf commitmessage.txt
- uses: stefanzweifel/git-auto-commit-action@v5
- uses: stefanzweifel/git-auto-commit-action@v6
id: commit
with:
commit_message: ${{ steps.commit_message_step.outputs.commit_message }}
@@ -304,7 +303,7 @@ As git-auto-commit by default does not use **your** username and email when crea
git_commit_gpgsign: true
- name: "Commit and push changes"
uses: stefanzweifel/git-auto-commit-action@v5
uses: stefanzweifel/git-auto-commit-action@v6
with:
commit_author: "${{ steps.import-gpg.outputs.name }} <${{ steps.import-gpg.outputs.email }}>"
commit_user_name: ${{ steps.import-gpg.outputs.name }}
@@ -381,7 +380,7 @@ jobs:
- name: Run php-cs-fixer
uses: docker://oskarstark/php-cs-fixer-ga
- uses: stefanzweifel/git-auto-commit-action@v5
- uses: stefanzweifel/git-auto-commit-action@v6
```
For more information about running Actions on forks, see [this announcement from GitHub](https://github.blog/2020-08-03-github-actions-improvements-for-fork-and-pull-request-workflows/).
@@ -416,7 +415,7 @@ The steps in your workflow might look like this:
echo "message=$(git log -1 --pretty=%s)" >> $GITHUB_OUTPUT
echo "author=$(git log -1 --pretty=\"%an <%ae>\")" >> $GITHUB_OUTPUT
- uses: stefanzweifel/git-auto-commit-action@v5
- uses: stefanzweifel/git-auto-commit-action@v6
with:
commit_author: ${{ steps.last-commit.outputs.author }}
commit_message: ${{ steps.last-commit.outputs.message }}
@@ -461,17 +460,19 @@ If you create a fine-grained personal access token, apply the `Contents`-permiss
```yaml
- uses: actions/checkout@v4
with:
token: ${{ secrets.PAT }}
# We pass the "PAT" secret to the checkout action; if no PAT secret is available to the workflow runner (eg. Dependabot) we fall back to the default "GITHUB_TOKEN".
token: ${{ secrets.PAT || secrets.GITHUB_TOKEN }}
```
You can learn more about Personal Access Token in the [GitHub documentation](https://docs.github.com/en/github/authenticating-to-github/creating-a-personal-access-token).
> [!TIP]
> If you're working in an organisation, and you don't want to create the PAT from your personal account, we recommend using a bot-account for such tokens.
If you go the "force pushes" route, you have to enable force pushes to a protected branch (see [documentation](https://help.github.com/en/github/administering-a-repository/enabling-force-pushes-to-a-protected-branch)) and update your Workflow to use force push like this.
```yaml
- uses: stefanzweifel/git-auto-commit-action@v5
- uses: stefanzweifel/git-auto-commit-action@v6
with:
commit_message: Apply php-cs-fixer changes
push_options: --force
@@ -501,7 +502,7 @@ This is due to the fact, that the `*.md`-glob is expanded before sending it to `
To fix this add `disable_globbing: true` to your Workflow.
```yaml
- uses: stefanzweifel/git-auto-commit-action@v5
- uses: stefanzweifel/git-auto-commit-action@v6
with:
file_pattern: '*.md'
disable_globbing: true
@@ -529,7 +530,7 @@ yarn test
We use [SemVer](http://semver.org/) for versioning. For the versions available, see the [tags on this repository](https://github.com/stefanzweifel/git-auto-commit-action/tags).
We also provide major version tags to make it easier to always use the latest release of a major version. For example, you can use `stefanzweifel/git-auto-commit-action@v5` to always use the latest release of the current major version.
We also provide major version tags to make it easier to always use the latest release of a major version. For example, you can use `stefanzweifel/git-auto-commit-action@v6` to always use the latest release of the current major version.
(More information about this [here](https://help.github.com/en/actions/building-actions/about-actions#versioning-your-action).)
## Credits

10
UPGRADING.md Normal file
View File

@@ -0,0 +1,10 @@
# Upgrading
## From v5 to v6
The following options have been removed from git-auto-commit and can be removed from your workflows.
- `create_branch` (git-auto-commit no longer switches branches locally during a workflow run)
- `skip_fetch`
- `skip_checkout`

View File

@@ -78,6 +78,7 @@ inputs:
description: Internal use only! Path to git binary used to check if git is available. (Don't change this!)
default: git
outputs:
changes_detected:
description: Value is "true", if the repository was dirty and file changes have been detected. Value is "false", if no changes have been detected.
@@ -87,7 +88,7 @@ outputs:
description: Value is "true", if a git tag was created using the `create_git_tag_only`-input.
runs:
using: 'node20'
using: 'node24'
main: 'index.js'
branding:

View File

@@ -30,6 +30,11 @@ _main() {
_check_if_git_is_available
_switch_to_repository
_check_if_is_git_repository
_check_if_repository_is_in_detached_state
if "$INPUT_CREATE_GIT_TAG_ONLY"; then
_log "debug" "Create git tag only";
_set_github_output "create_git_tag_only" "true"
@@ -90,11 +95,25 @@ _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 "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.";
else
_log "debug" "Repository is on a branch.";
fi
}
_switch_to_branch() {
@@ -104,6 +123,7 @@ _switch_to_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
@@ -111,6 +131,7 @@ _switch_to_branch() {
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
@@ -168,6 +189,8 @@ _tag_commit() {
_push_to_github() {
echo "INPUT_BRANCH value: $INPUT_BRANCH";
echo "INPUT_PUSH_OPTIONS: ${INPUT_PUSH_OPTIONS}";
_log "debug" "Apply push options ${INPUT_PUSH_OPTIONS}";

6
package-lock.json generated
View File

@@ -5,13 +5,15 @@
"packages": {
"": {
"devDependencies": {
"bats": "^1.11.1",
"bats": "^1.12.0",
"bats-assert": "ztombol/bats-assert",
"bats-support": "ztombol/bats-support"
}
},
"node_modules/bats": {
"version": "1.11.1",
"version": "1.12.0",
"resolved": "https://registry.npmjs.org/bats/-/bats-1.12.0.tgz",
"integrity": "sha512-1HTv2n+fjn3bmY9SNDgmzS6bjoKtVlSK2pIHON5aSA2xaqGkZFoCCWP46/G6jm9zZ7MCi84mD+3Byw4t3KGwBg==",
"dev": true,
"license": "MIT",
"bin": {

View File

@@ -1,6 +1,6 @@
{
"devDependencies": {
"bats": "^1.11.1",
"bats": "^1.12.0",
"bats-assert": "ztombol/bats-assert",
"bats-support": "ztombol/bats-support"
},

View File

@@ -193,7 +193,6 @@ cat_github_output() {
assert_failure
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 "
@@ -579,6 +578,585 @@ cat_github_output() {
assert_line "changes_detected=true"
}
@test "It pushes commit to new branch that does not exist yet" {
INPUT_BRANCH="not-existend-branch"
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
INPUT_SKIP_CHECKOUT=true
run git_auto_commit
assert_success
assert_line "INPUT_REPOSITORY value: ${INPUT_REPOSITORY}"
assert_line "INPUT_BRANCH value: not-existend-branch"
run git branch
assert_line --partial ${FAKE_DEFAULT_BRANCH}
refute_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"
}
@test "It does not create new local branch and pushes the commit to a new branch on remote" {
INPUT_BRANCH="not-existend-branch"
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
INPUT_SKIP_CHECKOUT=true
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 "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 not-existend-branch"
# Assert that local repo is still on default branch and not on new branch.
run git branch
assert_line --partial ${FAKE_DEFAULT_BRANCH}
refute_line --partial "not-existend-branch"
# Assert branch has been created on remote
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 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_SKIP_CHECKOUT=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
assert_success
assert_line "INPUT_REPOSITORY value: ${INPUT_REPOSITORY}"
assert_line "INPUT_BRANCH value: existing-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 "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 existing-remote-branch"
run git branch
assert_line --partial ${FAKE_DEFAULT_BRANCH}
refute_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 ${FAKE_DEFAULT_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 "It fails if local branch is behind remote and when remote has newer commits and skip_checkout is set to true" {
# 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_SKIP_CHECKOUT=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 a pushed branch tip is behind its remote"
# Assert that branch exists locally and on remote
run git branch
assert_line --partial ${FAKE_DEFAULT_BRANCH}
refute_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 ${FAKE_DEFAULT_BRANCH})"
remote_sha="$(git rev-parse --verify --short origin/existing-remote-branch)"
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" {
# 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"
INPUT_SKIP_CHECKOUT=true
# Assert that local remote does not have a "new-branch"-branch 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_failure
assert_line "INPUT_BRANCH value: 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"
}
@test "throws fatal error if file pattern includes files that do not exist" {
touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.foo
INPUT_FILE_PATTERN="*.foo *.bar"
run git_auto_commit
assert_failure
assert_line --partial "fatal: pathspec '*.bar' did not match any files"
}
@test "does not throw fatal error if files for file pattern exist but only one is dirty" {
# Add some .foo and .bar files
touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.foo
touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.bar
INPUT_FILE_PATTERN="*.foo *.bar"
run git_auto_commit
# Add more .foo files
touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{4,5,6}.foo
INPUT_FILE_PATTERN="*.foo *.bar"
run git_auto_commit
assert_success
}
@test "detects and commits changed files based on pattern in root and subfolders" {
# Add some .neon files
touch "${FAKE_LOCAL_REPOSITORY}"/new-file-1.neon
mkdir foo
touch "${FAKE_LOCAL_REPOSITORY}"/foo/new-file-2.neon
INPUT_FILE_PATTERN="**/*.neon *.neon"
run git_auto_commit
assert_success
assert_line --partial "new-file-1.neon"
assert_line --partial "foo/new-file-2.neon"
}
@test "throws error if tries to force add ignored files which do not have any changes" {
# Create 2 files which will later will be added to .gitignore
touch "${FAKE_LOCAL_REPOSITORY}"/ignored-file.txt
touch "${FAKE_LOCAL_REPOSITORY}"/another-ignored-file.txt
# Commit the 2 new files
run git_auto_commit
# Add our txt files to gitignore
echo "ignored-file.txt" >>"${FAKE_LOCAL_REPOSITORY}"/.gitignore
echo "another-ignored-file.txt" >>"${FAKE_LOCAL_REPOSITORY}"/.gitignore
# Commit & push .gitignore changes
run git_auto_commit
# Sanity check that txt files are ignored
run cat "${FAKE_LOCAL_REPOSITORY}"/.gitignore
assert_output --partial "ignored-file.txt"
assert_output --partial "another-ignored-file.txt"
# Configure git-auto-commit
INPUT_SKIP_DIRTY_CHECK=true
INPUT_ADD_OPTIONS="-f"
INPUT_FILE_PATTERN="ignored-file.txt another-ignored-file.txt"
# Run git-auto-commit with special configuration
run git_auto_commit
assert_output --partial "nothing to commit, working tree clean"
assert_failure
}
@test "expands file patterns correctly and commits all changed files" {
# Add more .txt files
touch "${FAKE_LOCAL_REPOSITORY}"/new-file-1.txt
mkdir "${FAKE_LOCAL_REPOSITORY}"/subdirectory/
touch "${FAKE_LOCAL_REPOSITORY}"/subdirectory/new-file-2.txt
touch "${FAKE_LOCAL_REPOSITORY}"/new-file-3.bar
INPUT_FILE_PATTERN="*.txt *.bar"
run git_auto_commit
assert_success
assert_line --partial "new-file-1.txt"
assert_line --partial "subdirectory/new-file-2.txt"
assert_line --partial "new-file-3.bar"
}
@test "expands file patterns correctly and commits all changed files when globbing is disabled" {
# Add more .txt files
touch "${FAKE_LOCAL_REPOSITORY}"/new-file-1.txt
mkdir "${FAKE_LOCAL_REPOSITORY}"/subdirectory/
touch "${FAKE_LOCAL_REPOSITORY}"/subdirectory/new-file-2.txt
touch "${FAKE_LOCAL_REPOSITORY}"/new-file-3.bar
INPUT_FILE_PATTERN="*.txt *.bar"
INPUT_DISABLE_GLOBBING=true
run git_auto_commit
assert_success
assert_line --partial "new-file-1.txt"
assert_line --partial "subdirectory/new-file-2.txt"
assert_line --partial "new-file-3.bar"
}
@test "expands file patterns correctly and commits all changed files if dirty files are only in subdirectory" {
# Add more .txt files
mkdir "${FAKE_LOCAL_REPOSITORY}"/subdirectory/
touch "${FAKE_LOCAL_REPOSITORY}"/subdirectory/new-file-2.txt
mkdir "${FAKE_LOCAL_REPOSITORY}"/another-subdirectory/
touch "${FAKE_LOCAL_REPOSITORY}"/another-subdirectory/new-file-3.txt
INPUT_FILE_PATTERN="*.txt"
INPUT_DISABLE_GLOBBING=true
run git_auto_commit
assert_success
assert_line --partial "subdirectory/new-file-2.txt"
assert_line --partial "another-subdirectory/new-file-3.txt"
}
@test "detects if crlf in files change and does not create commit" {
# Set autocrlf to true
cd "${FAKE_LOCAL_REPOSITORY}"
git config core.autocrlf true
run git config --get-all core.autocrlf
assert_line "true"
# Add more .txt files
echo -ne "crlf test1\r\n" > "${FAKE_LOCAL_REPOSITORY}"/new-file-2.txt
echo -ne "crlf test1\n" > "${FAKE_LOCAL_REPOSITORY}"/new-file-3.txt
# Run git-auto-commit to add new files to repository
run git_auto_commit
# Change control characters in files
echo -ne "crlf test1\n" > "${FAKE_LOCAL_REPOSITORY}"/new-file-2.txt
echo -ne "crlf test1\r\n" > "${FAKE_LOCAL_REPOSITORY}"/new-file-3.txt
# Run git-auto-commit to commit the 2 changes files
run git_auto_commit
assert_success
refute_line --partial "2 files changed, 2 insertions(+), 2 deletions(-)"
assert_line --partial "warning: in the working copy of 'new-file-2.txt', LF will be replaced by CRLF the next time Git touches it"
assert_line --partial "Working tree clean. Nothing to commit."
assert_line --partial "new-file-2.txt"
# assert_line --partial "new-file-3.txt"
# Changes are not detected
run cat_github_output
assert_line "changes_detected=false"
}
@test "detects if crlf in files change and creates commit if the actual content of the files change" {
# Set autocrlf to true
cd "${FAKE_LOCAL_REPOSITORY}"
git config core.autocrlf true
run git config --get-all core.autocrlf
assert_line "true"
# Add more .txt files
echo -ne "crlf test1\r\n" > "${FAKE_LOCAL_REPOSITORY}"/new-file-2.txt
echo -ne "crlf test1\n" > "${FAKE_LOCAL_REPOSITORY}"/new-file-3.txt
# Run git-auto-commit to add new files to repository
run git_auto_commit
# Change control characters in files
echo -ne "crlf test2\n" > "${FAKE_LOCAL_REPOSITORY}"/new-file-2.txt
echo -ne "crlf test2\r\n" > "${FAKE_LOCAL_REPOSITORY}"/new-file-3.txt
# Run git-auto-commit to commit the 2 changes files
run git_auto_commit
assert_success
assert_line --partial "2 files changed, 2 insertions(+), 2 deletions(-)"
assert_line --partial "warning: in the working copy of 'new-file-2.txt', LF will be replaced by CRLF the next time Git touches it"
assert_line --partial "new-file-2.txt"
# assert_line --partial "new-file-3.txt"
# Changes are detected
run cat_github_output
assert_line "changes_detected=true"
}
@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}$"
}
@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."
}
@test "It creates multi-line commit messages" {
touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt
COMMIT_MESSAGE=$(cat <<-END
this commit message
has multiple lines
END
)
INPUT_COMMIT_MESSAGE=$COMMIT_MESSAGE
run git_auto_commit
assert_success
# Assert last commit was signed off
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::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" {
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_success;
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."
}
@test "it creates a tag if create_git_tag_only is set to true and a message has been supplied" {
INPUT_CREATE_GIT_TAG_ONLY=true
INPUT_TAGGING_MESSAGE=v1.0.0
run git_auto_commit
assert_success
assert_line "::debug::Create git tag only"
assert_line "::debug::Create tag v1.0.0"
refute_line "No tagging message supplied. No tag will be added."
assert_line "::debug::Apply push options "
assert_line "::debug::Push commit to remote branch ${FAKE_DEFAULT_BRANCH}"
run cat_github_output
assert_line "create_git_tag_only=true"
refute_line "changes_detected=false"
refute_line -e "commit_hash=[0-9a-f]{40}$"
# Assert a tag v1.0.0 has been created
run git tag
assert_output v1.0.0
run git ls-remote --tags --refs
assert_output --partial refs/tags/v1.0.0
}
@test "it output no tagging message supplied if no tagging message is set but create_git_tag_only is set to true" {
INPUT_CREATE_GIT_TAG_ONLY=true
INPUT_TAGGING_MESSAGE=""
run git_auto_commit
assert_success
assert_line "INPUT_TAGGING_MESSAGE: "
assert_line "No tagging message supplied. No tag will be added."
assert_line "::debug::Create git tag only"
run cat_github_output
assert_line "create_git_tag_only=true"
refute_line "changes_detected=false"
refute_line -e "commit_hash=[0-9a-f]{40}$"
# Assert no tag has been created
run git tag
assert_output ""
}
@test "script fails to push commit to new branch that does not exist yet" {
INPUT_BRANCH="not-existend-branch"
INPUT_CREATE_BRANCH=false
@@ -647,13 +1225,12 @@ cat_github_output() {
assert_line -e "commit_hash=[0-9a-f]{40}$"
}
@test "it does not create new local branch if local branch already exists" {
@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_CREATE_BRANCH=true
INPUT_SKIP_CHECKOUT=true
run git branch
assert_line --partial "not-existend-remote-branch"
@@ -678,6 +1255,11 @@ cat_github_output() {
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"
@@ -842,338 +1424,3 @@ cat_github_output() {
assert_equal $current_sha $remote_sha
}
@test "throws fatal error if file pattern includes files that do not exist" {
touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.foo
INPUT_FILE_PATTERN="*.foo *.bar"
run git_auto_commit
assert_failure
assert_line --partial "fatal: pathspec '*.bar' did not match any files"
}
@test "does not throw fatal error if files for file pattern exist but only one is dirty" {
# Add some .foo and .bar files
touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.foo
touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.bar
INPUT_FILE_PATTERN="*.foo *.bar"
run git_auto_commit
# Add more .foo files
touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{4,5,6}.foo
INPUT_FILE_PATTERN="*.foo *.bar"
run git_auto_commit
assert_success
}
@test "detects and commits changed files based on pattern in root and subfolders" {
# Add some .neon files
touch "${FAKE_LOCAL_REPOSITORY}"/new-file-1.neon
mkdir foo
touch "${FAKE_LOCAL_REPOSITORY}"/foo/new-file-2.neon
INPUT_FILE_PATTERN="**/*.neon *.neon"
run git_auto_commit
assert_success
assert_line --partial "new-file-1.neon"
assert_line --partial "foo/new-file-2.neon"
}
@test "throws error if tries to force add ignored files which do not have any changes" {
# Create 2 files which will later will be added to .gitignore
touch "${FAKE_LOCAL_REPOSITORY}"/ignored-file.txt
touch "${FAKE_LOCAL_REPOSITORY}"/another-ignored-file.txt
# Commit the 2 new files
run git_auto_commit
# Add our txt files to gitignore
echo "ignored-file.txt" >>"${FAKE_LOCAL_REPOSITORY}"/.gitignore
echo "another-ignored-file.txt" >>"${FAKE_LOCAL_REPOSITORY}"/.gitignore
# Commit & push .gitignore changes
run git_auto_commit
# Sanity check that txt files are ignored
run cat "${FAKE_LOCAL_REPOSITORY}"/.gitignore
assert_output --partial "ignored-file.txt"
assert_output --partial "another-ignored-file.txt"
# Configure git-auto-commit
INPUT_SKIP_DIRTY_CHECK=true
INPUT_ADD_OPTIONS="-f"
INPUT_FILE_PATTERN="ignored-file.txt another-ignored-file.txt"
# Run git-auto-commit with special configuration
run git_auto_commit
assert_output --partial "nothing to commit, working tree clean"
assert_failure
}
@test "expands file patterns correctly and commits all changed files" {
# Add more .txt files
touch "${FAKE_LOCAL_REPOSITORY}"/new-file-1.txt
mkdir "${FAKE_LOCAL_REPOSITORY}"/subdirectory/
touch "${FAKE_LOCAL_REPOSITORY}"/subdirectory/new-file-2.txt
touch "${FAKE_LOCAL_REPOSITORY}"/new-file-3.bar
INPUT_FILE_PATTERN="*.txt *.bar"
run git_auto_commit
assert_success
assert_line --partial "new-file-1.txt"
assert_line --partial "subdirectory/new-file-2.txt"
assert_line --partial "new-file-3.bar"
}
@test "expands file patterns correctly and commits all changed files when globbing is disabled" {
# Add more .txt files
touch "${FAKE_LOCAL_REPOSITORY}"/new-file-1.txt
mkdir "${FAKE_LOCAL_REPOSITORY}"/subdirectory/
touch "${FAKE_LOCAL_REPOSITORY}"/subdirectory/new-file-2.txt
touch "${FAKE_LOCAL_REPOSITORY}"/new-file-3.bar
INPUT_FILE_PATTERN="*.txt *.bar"
INPUT_DISABLE_GLOBBING=true
run git_auto_commit
assert_success
assert_line --partial "new-file-1.txt"
assert_line --partial "subdirectory/new-file-2.txt"
assert_line --partial "new-file-3.bar"
}
@test "expands file patterns correctly and commits all changed files if dirty files are only in subdirectory" {
# Add more .txt files
mkdir "${FAKE_LOCAL_REPOSITORY}"/subdirectory/
touch "${FAKE_LOCAL_REPOSITORY}"/subdirectory/new-file-2.txt
mkdir "${FAKE_LOCAL_REPOSITORY}"/another-subdirectory/
touch "${FAKE_LOCAL_REPOSITORY}"/another-subdirectory/new-file-3.txt
INPUT_FILE_PATTERN="*.txt"
INPUT_DISABLE_GLOBBING=true
run git_auto_commit
assert_success
assert_line --partial "subdirectory/new-file-2.txt"
assert_line --partial "another-subdirectory/new-file-3.txt"
}
@test "detects if crlf in files change and does not create commit" {
# Set autocrlf to true
cd "${FAKE_LOCAL_REPOSITORY}"
git config core.autocrlf true
run git config --get-all core.autocrlf
assert_line "true"
# Add more .txt files
echo -ne "crlf test1\r\n" > "${FAKE_LOCAL_REPOSITORY}"/new-file-2.txt
echo -ne "crlf test1\n" > "${FAKE_LOCAL_REPOSITORY}"/new-file-3.txt
# Run git-auto-commit to add new files to repository
run git_auto_commit
# Change control characters in files
echo -ne "crlf test1\n" > "${FAKE_LOCAL_REPOSITORY}"/new-file-2.txt
echo -ne "crlf test1\r\n" > "${FAKE_LOCAL_REPOSITORY}"/new-file-3.txt
# Run git-auto-commit to commit the 2 changes files
run git_auto_commit
assert_success
refute_line --partial "2 files changed, 2 insertions(+), 2 deletions(-)"
assert_line --partial "warning: in the working copy of 'new-file-2.txt', LF will be replaced by CRLF the next time Git touches it"
assert_line --partial "Working tree clean. Nothing to commit."
assert_line --partial "new-file-2.txt"
assert_line --partial "new-file-3.txt"
# Changes are not detected
run cat_github_output
assert_line "changes_detected=false"
}
@test "detects if crlf in files change and creates commit if the actual content of the files change" {
# Set autocrlf to true
cd "${FAKE_LOCAL_REPOSITORY}"
git config core.autocrlf true
run git config --get-all core.autocrlf
assert_line "true"
# Add more .txt files
echo -ne "crlf test1\r\n" > "${FAKE_LOCAL_REPOSITORY}"/new-file-2.txt
echo -ne "crlf test1\n" > "${FAKE_LOCAL_REPOSITORY}"/new-file-3.txt
# Run git-auto-commit to add new files to repository
run git_auto_commit
# Change control characters in files
echo -ne "crlf test2\n" > "${FAKE_LOCAL_REPOSITORY}"/new-file-2.txt
echo -ne "crlf test2\r\n" > "${FAKE_LOCAL_REPOSITORY}"/new-file-3.txt
# Run git-auto-commit to commit the 2 changes files
run git_auto_commit
assert_success
assert_line --partial "2 files changed, 2 insertions(+), 2 deletions(-)"
assert_line --partial "warning: in the working copy of 'new-file-2.txt', LF will be replaced by CRLF the next time Git touches it"
assert_line --partial "new-file-2.txt"
assert_line --partial "new-file-3.txt"
# Changes are detected
run cat_github_output
assert_line "changes_detected=true"
}
@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}$"
}
@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."
}
@test "It creates multi-line commit messages" {
touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt
COMMIT_MESSAGE=$(cat <<-END
this commit message
has multiple lines
END
)
INPUT_COMMIT_MESSAGE=$COMMIT_MESSAGE
run git_auto_commit
assert_success
# Assert last commit was signed off
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>"
}
@test "it creates a tag if create_git_tag_only is set to true and a message has been supplied" {
INPUT_CREATE_GIT_TAG_ONLY=true
INPUT_TAGGING_MESSAGE=v1.0.0
run git_auto_commit
assert_success
assert_line "::debug::Create git tag only"
assert_line "::debug::Create tag v1.0.0"
refute_line "No tagging message supplied. No tag will be added."
assert_line "::debug::Apply push options "
assert_line "::debug::Push commit to remote branch ${FAKE_DEFAULT_BRANCH}"
run cat_github_output
assert_line "create_git_tag_only=true"
refute_line "changes_detected=false"
refute_line -e "commit_hash=[0-9a-f]{40}$"
# Assert a tag v1.0.0 has been created
run git tag
assert_output v1.0.0
run git ls-remote --tags --refs
assert_output --partial refs/tags/v1.0.0
}
@test "it output no tagging message supplied if no tagging message is set but create_git_tag_only is set to true" {
INPUT_CREATE_GIT_TAG_ONLY=true
INPUT_TAGGING_MESSAGE=""
run git_auto_commit
assert_success
assert_line "INPUT_TAGGING_MESSAGE: "
assert_line "No tagging message supplied. No tag will be added."
assert_line "::debug::Create git tag only"
run cat_github_output
assert_line "create_git_tag_only=true"
refute_line "changes_detected=false"
refute_line -e "commit_hash=[0-9a-f]{40}$"
# Assert no tag has been created
run git tag
assert_output ""
}