Compare commits

...

77 Commits

Author SHA1 Message Date
dependabot[bot]
04702edda4 Bump actions/checkout from 5 to 6 (#399)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-12-17 20:23:57 +01:00
Koen van Zuijlen
1e49d5001f Add skip_push input option (#401)
Co-authored-by: Stefan Zweifel <stefan@stefanzweifel.dev>
2025-12-17 20:23:26 +01:00
Gideon
65c56779c9 docs: fix typo in README.md (#400) 2025-12-03 12:10:40 +01:00
dependabot[bot]
547c1409ce Bump bats from 1.12.0 to 1.13.0 (#398)
Bumps [bats](https://github.com/bats-core/bats-core) from 1.12.0 to 1.13.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.12.0...v1.13.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-10 08:08:12 +01:00
stefanzweifel
8fa7f5a3c5 Update CHANGELOG 2025-10-12 14:39:35 +00:00
Stefan Zweifel
28e16e8177 Release preparations for v7 (#394) 2025-10-12 16:31:03 +02:00
Stefan Zweifel
698fd76863 Merge pull request #391 from EliasBoulharts/custom-tag-message 2025-10-12 15:13:29 +02:00
Stefan Zweifel
c40819ab3b Update README 2025-10-12 14:59:32 +02:00
Stefan Zweifel
d7ee275235 Change internal variable names 2025-10-12 14:37:32 +02:00
Stefan Zweifel
e8684eb0cd Fix Tests 2025-10-12 14:27:10 +02:00
Stefan Zweifel
19497011bb Merge branch 'master' into pr/391 2025-10-12 14:11:57 +02:00
Stefan Zweifel
a88dc49508 Merge pull request #388 from stefanzweifel/v7-next 2025-10-12 14:02:15 +02:00
Stefan Zweifel
a531deca6b Merge pull request #386 from stefanzweifel/dependabot/github_actions/actions/checkout-5 2025-10-12 13:40:50 +02:00
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
Elias Boulharts
e9f84b936b feature: allow using custom tag message
Signed-off-by: Elias Boulharts <elias@MacBook-Pro-de-Elias.local>
2025-09-24 12:15:10 +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
dependabot[bot]
7ddc571aec Bump actions/checkout from 4 to 5
Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 5.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-08-18 08:56:44 +00: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
b863ae1933 Merge pull request #367 from stefanzweifel/stefanzweifel/git_tag_only_changes
Add Test for create_git_tag_only feature
2025-04-19 10:33:31 +02:00
Stefan Zweifel
adb37b5a29 Update README 2025-04-19 10:32:21 +02:00
Stefan Zweifel
8480c68cbb Add Tests 2025-04-19 10:23:52 +02:00
Stefan Zweifel
4f8f3ad16e Rename Input and add output 2025-04-19 10:23:52 +02:00
Stefan Zweifel
11a6e5f38f Merge pull request #364 from zmynx/master
feat: allow for clean tag pushing
2025-04-19 10:23:02 +02:00
Lior Dux
35d037abf5 Update README.md 2025-03-23 22:33:45 +02:00
Lior Dux
bf425dc136 Merge branch 'master' into master 2025-03-23 22:32:20 +02:00
Lior Dux
cfd6ac4a3b Update git-auto-commit.bats 2025-03-23 22:14:41 +02:00
Lior Dux
19379b46c9 Update git-auto-commit.bats 2025-03-23 22:05:21 +02:00
Lior Dux
12e100dacb Update entrypoint.sh 2025-03-23 22:05:01 +02:00
Lior Dux
2ac10431a8 Update action.yml 2025-03-23 22:02:49 +02:00
Lior Dux
4db797a961 Update entrypoint.sh 2025-03-23 22:01:31 +02:00
Stefan Zweifel
e256565ae5 Merge pull request #361 from rasa/patch-1
docs: Update README.md per #354
2025-03-13 20:29:15 +01:00
Ross Smith II
8a23be4b32 docs: Update README.md per #354
See #354
2025-03-13 08:29:02 -07: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
c86fa26bed Replace Yarn with NPM 2025-02-05 13:54:04 +01:00
stefanzweifel
e35726034b Update CHANGELOG 2025-01-11 07:12:19 +00: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
13 changed files with 721 additions and 158 deletions

View File

@@ -16,7 +16,9 @@ jobs:
contents: write contents: write
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v6
with:
ref: ${{ github.head_ref }}
- name: Use git-auto-commit-action - name: Use git-auto-commit-action
id: "auto-commit-action" id: "auto-commit-action"

View File

@@ -9,7 +9,7 @@ jobs:
steps: steps:
- name: Checkout Code - name: Checkout Code
uses: actions/checkout@v4 uses: actions/checkout@v6
- name: Lint Code Base - name: Lint Code Base
uses: github/super-linter@v7 uses: github/super-linter@v7

View File

@@ -11,7 +11,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v6
- name: Install testing dependencies - name: Install testing dependencies
run: yarn install run: yarn install

View File

@@ -16,7 +16,7 @@ jobs:
steps: steps:
- name: Checkout code - name: Checkout code
uses: actions/checkout@v4 uses: actions/checkout@v6
with: with:
ref: master ref: master
@@ -27,7 +27,7 @@ jobs:
latest-version: ${{ github.event.release.name }} latest-version: ${{ github.event.release.name }}
- name: Commit updated CHANGELOG - name: Commit updated CHANGELOG
uses: stefanzweifel/git-auto-commit-action@v5 uses: stefanzweifel/git-auto-commit-action@v7
with: with:
branch: master branch: master
commit_message: Update CHANGELOG commit_message: Update CHANGELOG

View File

@@ -5,10 +5,74 @@ 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/) 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). 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.0.1...HEAD) ## [Unreleased](https://github.com/stefanzweifel/git-auto-commit-action/compare/v7.0.0...HEAD)
> TBD > TBD
## [v7.0.0](https://github.com/stefanzweifel/git-auto-commit-action/compare/v6.0.1...v7.0.0) - 2025-10-12
### Added
- Restore skip_fetch, skip_checkout, create_branch ([#388](https://github.com/stefanzweifel/git-auto-commit-action/pull/388)) [@stefanzweifel](https://github.com/@stefanzweifel)
- Restore Detached State Detection ([#393](https://github.com/stefanzweifel/git-auto-commit-action/pull/393)) [@stefanzweifel](https://github.com/@stefanzweifel)
- Add Support for Tag Messages ([#391](https://github.com/stefanzweifel/git-auto-commit-action/pull/391)) [@EliasBoulharts](https://github.com/@EliasBoulharts)
### Changed
- Run Action on Node 24 ([#389](https://github.com/stefanzweifel/git-auto-commit-action/pull/389)) [@stefanzweifel](https://github.com/@stefanzweifel)
### Dependency Updates
- Bump actions/checkout from 4 to 5 ([#386](https://github.com/stefanzweifel/git-auto-commit-action/pull/386)) [@[dependabot[bot]](https://github.com/apps/dependabot)](https://github.com/@[dependabot[bot]](https://github.com/apps/dependabot))
## [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
- Include `github.actor_id` in default `commit_author` ([#354](https://github.com/stefanzweifel/git-auto-commit-action/pull/354)) [@parkerbxyz](https://github.com/@parkerbxyz)
### Fixed
- docs(README): fix broken protected branch docs link ([#346](https://github.com/stefanzweifel/git-auto-commit-action/pull/346)) [@scarf005](https://github.com/@scarf005)
- Update README.md ([#343](https://github.com/stefanzweifel/git-auto-commit-action/pull/343)) [@Kludex](https://github.com/@Kludex)
### Dependency Updates
- Bump bats from 1.11.0 to 1.11.1 ([#353](https://github.com/stefanzweifel/git-auto-commit-action/pull/353)) [@dependabot](https://github.com/@dependabot)
- Bump github/super-linter from 6 to 7 ([#342](https://github.com/stefanzweifel/git-auto-commit-action/pull/342)) [@dependabot](https://github.com/@dependabot)
- Bump github/super-linter from 5 to 6 ([#335](https://github.com/stefanzweifel/git-auto-commit-action/pull/335)) [@dependabot](https://github.com/@dependabot)
## [v5.0.1](https://github.com/stefanzweifel/git-auto-commit-action/compare/v5.0.0...v5.0.1) - 2024-04-12 ## [v5.0.1](https://github.com/stefanzweifel/git-auto-commit-action/compare/v5.0.0...v5.0.1) - 2024-04-12
### Fixed ### Fixed

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. 2. Add the following step at the end of your job, after other steps that might add or change files.
```yaml ```yaml
- uses: stefanzweifel/git-auto-commit-action@v5 - uses: stefanzweifel/git-auto-commit-action@v7
``` ```
Your Workflow should look similar to this example. Your Workflow should look similar to this example.
@@ -39,7 +39,7 @@ jobs:
contents: write contents: write
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v5
with: with:
ref: ${{ github.head_ref }} ref: ${{ github.head_ref }}
@@ -47,7 +47,7 @@ jobs:
# … # …
# Commit all changed files back to the repository # Commit all changed files back to the repository
- uses: stefanzweifel/git-auto-commit-action@v5 - uses: stefanzweifel/git-auto-commit-action@v7
``` ```
> [!NOTE] > [!NOTE]
@@ -56,15 +56,14 @@ jobs:
The following is an extended example with all available options. The following is an extended example with all available options.
```yaml ```yaml
- uses: stefanzweifel/git-auto-commit-action@v5 - uses: stefanzweifel/git-auto-commit-action@v7
with: with:
# Optional. Commit message for the created commit. # Optional. Commit message for the created commit.
# Defaults to "Apply automatic changes" # Defaults to "Apply automatic changes"
commit_message: Automated Change commit_message: Automated Change
# Optional. Local and remote branch name where commit is going to be pushed # Optional. Remote branch name where commit is going to be pushed to.
# to. Defaults to the current branch. # Defaults to the current branch.
# You might need to set `create_branch: true` if the branch does not exist.
branch: feature-123 branch: feature-123
# Optional. Options used by `git-commit`. # Optional. Options used by `git-commit`.
@@ -85,11 +84,16 @@ The following is an extended example with all available options.
# Optional commit user and author settings # Optional commit user and author settings
commit_user_name: My GitHub Actions Bot # defaults to "github-actions[bot]" commit_user_name: My GitHub Actions Bot # defaults to "github-actions[bot]"
commit_user_email: my-github-actions-bot@example.org # defaults to "41898282+github-actions[bot]@users.noreply.github.com" commit_user_email: my-github-actions-bot@example.org # defaults to "41898282+github-actions[bot]@users.noreply.github.com"
commit_author: Author <actions@github.com> # defaults to "username <username@users.noreply.github.com>", where "username" belongs to the author of the commit that triggered the run commit_author: Author <actions@github.com> # defaults to "username <numeric_id+username@users.noreply.github.com>", where "numeric_id" and "username" belong to the author of the commit that triggered the run
# Optional. Tag name being created in the local repository and # Optional. Tag name to be created in the local repository and
# pushed to remote repository and defined branch. # pushed to the remote repository on the defined branch.
tagging_message: 'v1.0.0' # If only one of `tag_name` or `tagging_message` is provided, the value of the provided field will be used for both tag name and message.
tag_name: 'v1.0.0'
# Optional. Message to annotate the created tag with.
# If only one of `tag_name` or `tagging_message` is provided, the value of the provided field will be used for both tag name and message.
tagging_message: 'Codename "Sunshine"'
# 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
@@ -112,12 +116,19 @@ The following is an extended example with all available options.
# Optional. Skip internal call to `git checkout` # Optional. Skip internal call to `git checkout`
skip_checkout: true skip_checkout: true
# Optional. Skip internal call to `git push`
skip_push: 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. # Optional. Create given branch name in local and remote repository.
create_branch: true create_branch: true
# 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`.
create_git_tag_only: false
``` ```
Please note that the Action depends on `bash`. If you're using the Action in a job in combination with a custom Docker container, make sure that `bash` is installed. Please note that the Action depends on `bash`. If you're using the Action in a job in combination with a custom Docker container, make sure that `bash` is installed.
@@ -147,14 +158,14 @@ jobs:
contents: write contents: write
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v5
with: with:
ref: ${{ github.head_ref }} ref: ${{ github.head_ref }}
- name: Run php-cs-fixer - name: Run php-cs-fixer
uses: docker://oskarstark/php-cs-fixer-ga uses: docker://oskarstark/php-cs-fixer-ga
- uses: stefanzweifel/git-auto-commit-action@v5 - uses: stefanzweifel/git-auto-commit-action@v7
with: with:
commit_message: Apply php-cs-fixer changes commit_message: Apply php-cs-fixer changes
``` ```
@@ -169,13 +180,14 @@ You can use these outputs to trigger other Actions in your Workflow run based on
- `changes_detected`: Returns either "true" or "false" if the repository was dirty and files have changed. - `changes_detected`: Returns either "true" or "false" if the repository was dirty and files have changed.
- `commit_hash`: Returns the full hash of the commit if one was created. - `commit_hash`: Returns the full hash of the commit if one was created.
- `create_git_tag_only`: Returns either "true" or "false" if a tag was created, when `create_git_tag_only` was used.
**⚠️ When using outputs, the step needs to be given an id. See example below.** **⚠️ When using outputs, the step needs to be given an id. See example below.**
### Example ### Example
```yaml ```yaml
- uses: stefanzweifel/git-auto-commit-action@v5 - uses: stefanzweifel/git-auto-commit-action@v7
id: auto-commit-action #mandatory for the output to show up in ${{ steps }} id: auto-commit-action #mandatory for the output to show up in ${{ steps }}
with: with:
commit_message: Apply php-cs-fixer changes commit_message: Apply php-cs-fixer changes
@@ -207,11 +219,11 @@ If this Action doesn't work for your workflow, check out [EndBug/add-and-commit]
### Checkout the correct branch ### Checkout the correct branch
You must use `action/checkout@v2` or later versions to check out the repository. You must use `actions/checkout@v2` or later versions to check out the repository.
In non-`push` events, such as `pull_request`, make sure to specify the `ref` to check out: In non-`push` events, such as `pull_request`, make sure to specify the `ref` to check out:
```yaml ```yaml
- uses: actions/checkout@v4 - uses: actions/checkout@v5
with: with:
ref: ${{ github.head_ref }} ref: ${{ github.head_ref }}
``` ```
@@ -229,7 +241,7 @@ You can change this by creating a new [Personal Access Token (PAT)](https://gith
storing the token as a secret in your repository and then passing the new token to the [`actions/checkout`](https://github.com/actions/checkout#usage) Action step. storing the token as a secret in your repository and then passing the new token to the [`actions/checkout`](https://github.com/actions/checkout#usage) Action step.
```yaml ```yaml
- uses: actions/checkout@v4 - uses: actions/checkout@v5
with: with:
token: ${{ secrets.PAT }} token: ${{ secrets.PAT }}
``` ```
@@ -275,7 +287,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 # Quick and dirty step to get rid of the temporary file holding the commit message
- run: rm -rf commitmessage.txt - run: rm -rf commitmessage.txt
- uses: stefanzweifel/git-auto-commit-action@v5 - uses: stefanzweifel/git-auto-commit-action@v7
id: commit id: commit
with: with:
commit_message: ${{ steps.commit_message_step.outputs.commit_message }} commit_message: ${{ steps.commit_message_step.outputs.commit_message }}
@@ -299,7 +311,7 @@ As git-auto-commit by default does not use **your** username and email when crea
git_commit_gpgsign: true git_commit_gpgsign: true
- name: "Commit and push changes" - name: "Commit and push changes"
uses: stefanzweifel/git-auto-commit-action@v5 uses: stefanzweifel/git-auto-commit-action@v7
with: with:
commit_author: "${{ steps.import-gpg.outputs.name }} <${{ steps.import-gpg.outputs.email }}>" commit_author: "${{ steps.import-gpg.outputs.name }} <${{ steps.import-gpg.outputs.email }}>"
commit_user_name: ${{ steps.import-gpg.outputs.name }} commit_user_name: ${{ steps.import-gpg.outputs.name }}
@@ -362,7 +374,7 @@ jobs:
contents: write contents: write
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v5
with: with:
# Checkout the fork/head-repository and push changes to the fork. # Checkout the fork/head-repository and push changes to the fork.
# If you skip this, the base repository will be checked out and changes # If you skip this, the base repository will be checked out and changes
@@ -376,7 +388,7 @@ jobs:
- name: Run php-cs-fixer - name: Run php-cs-fixer
uses: docker://oskarstark/php-cs-fixer-ga uses: docker://oskarstark/php-cs-fixer-ga
- uses: stefanzweifel/git-auto-commit-action@v5 - uses: stefanzweifel/git-auto-commit-action@v7
``` ```
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/). 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/).
@@ -411,7 +423,7 @@ The steps in your workflow might look like this:
echo "message=$(git log -1 --pretty=%s)" >> $GITHUB_OUTPUT echo "message=$(git log -1 --pretty=%s)" >> $GITHUB_OUTPUT
echo "author=$(git log -1 --pretty=\"%an <%ae>\")" >> $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@v7
with: with:
commit_author: ${{ steps.last-commit.outputs.author }} commit_author: ${{ steps.last-commit.outputs.author }}
commit_message: ${{ steps.last-commit.outputs.message }} commit_message: ${{ steps.last-commit.outputs.message }}
@@ -454,19 +466,21 @@ If you create a personal access token (classic), apply the `repo` and `workflow`
If you create a fine-grained personal access token, apply the `Contents`-permissions. If you create a fine-grained personal access token, apply the `Contents`-permissions.
```yaml ```yaml
- uses: actions/checkout@v4 - uses: actions/checkout@v5
with: 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). 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] > [!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'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. 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 ```yaml
- uses: stefanzweifel/git-auto-commit-action@v5 - uses: stefanzweifel/git-auto-commit-action@v7
with: with:
commit_message: Apply php-cs-fixer changes commit_message: Apply php-cs-fixer changes
push_options: --force push_options: --force
@@ -496,7 +510,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. To fix this add `disable_globbing: true` to your Workflow.
```yaml ```yaml
- uses: stefanzweifel/git-auto-commit-action@v5 - uses: stefanzweifel/git-auto-commit-action@v7
with: with:
file_pattern: '*.md' file_pattern: '*.md'
disable_globbing: true disable_globbing: true
@@ -524,7 +538,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 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@v7` 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).) (More information about this [here](https://help.github.com/en/actions/building-actions/about-actions#versioning-your-action).)
## Credits ## Credits

17
UPGRADING.md Normal file
View File

@@ -0,0 +1,17 @@
# Upgrading
## From v6 to v7
The previously removed options `create_branch`, `skip_fetch`, and `skip_checkout` have been reintroduced in git-auto-commit v7. If you had removed these options from your workflows when upgrading to v6, you can now add them back if needed.
Tagging a commit has been reworked. In addition to the existing `tagging_message`-option, a new `tag_name` option has been added. If you were using `tagging_message`, you can continue to do so, but if you want to specify a custom tag name and tag message, you can now use the `tag_name` and `tagging_message` option.
(Specifying a `tagging_message` without a `tag_name` will create a tag with the name and message both set to the value of `tagging_message`.)
## 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

@@ -44,8 +44,12 @@ inputs:
description: Value used for the commit author. Defaults to the username of whoever triggered this workflow run. description: Value used for the commit author. Defaults to the username of whoever triggered this workflow run.
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_name:
description: Tag name used for creating a new git tag with the commit. Keep this empty, if no tag should be created.
required: false
default: ''
tagging_message: tagging_message:
description: Message used to create a new git tag with the commit. Keep this empty, if no tag should be created. description: Tagging message used for creating a new git tag with the commit. Keep this empty, if no tag should be created.
required: false required: false
default: '' default: ''
push_options: push_options:
@@ -64,24 +68,35 @@ inputs:
description: Skip the call to git-checkout. description: Skip the call to git-checkout.
required: false required: false
default: false default: false
skip_push:
description: Skip the call to git-push.
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: create_branch:
description: Create new branch with the name of `branch`-input in local and remote repository, if it doesn't exist yet. description: Create new branch with the name of `branch`-input in local and remote repository, if it doesn't exist yet.
default: false default: false
create_git_tag_only:
description: Perform a clean git tag and push, without commiting anything
required: false
default: false
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
outputs: outputs:
changes_detected: 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. description: Value is "true", if the repository was dirty and file changes have been detected. Value is "false", if no changes have been detected.
commit_hash: commit_hash:
description: Full hash of the created commit. Only present if the "changes_detected" output is "true". description: Full hash of the created commit. Only present if the "changes_detected" output is "true".
create_git_tag_only:
description: Value is "true", if a git tag was created using the `create_git_tag_only`-input.
runs: runs:
using: 'node20' using: 'node24'
main: 'index.js' main: 'index.js'
branding: branding:

View File

@@ -31,7 +31,16 @@ _main() {
_switch_to_repository _switch_to_repository
if _git_is_dirty || "$INPUT_SKIP_DIRTY_CHECK"; then _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"
_tag_commit
_push_to_github
elif _git_is_dirty || "$INPUT_SKIP_DIRTY_CHECK"; then
_set_github_output "changes_detected" "true" _set_github_output "changes_detected" "true"
@@ -86,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)"; gitStatusMessage="$((git status -s $INPUT_STATUS_OPTIONS -- ${INPUT_FILE_PATTERN_EXPANDED:+${INPUT_FILE_PATTERN_EXPANDED[@]}} >/dev/null ) 2>&1)";
# shellcheck disable=SC2086 # shellcheck disable=SC2086
gitStatus="$(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 [ -n "$gitStatus" ]
_log "error" "git-status failed with:<$gitStatusMessage>"; }
_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; exit 1;
fi 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() { _switch_to_branch() {
@@ -100,6 +123,7 @@ _switch_to_branch() {
if "$INPUT_SKIP_FETCH"; then if "$INPUT_SKIP_FETCH"; then
_log "debug" "git-fetch will not be executed."; _log "debug" "git-fetch will not be executed.";
else else
_log "debug" "git-fetch will be executed.";
git fetch --depth=1; git fetch --depth=1;
fi fi
@@ -107,6 +131,7 @@ _switch_to_branch() {
if "$INPUT_SKIP_CHECKOUT"; then if "$INPUT_SKIP_CHECKOUT"; then
_log "debug" "git-checkout will not be executed."; _log "debug" "git-checkout will not be executed.";
else else
_log "debug" "git-checkout will be executed.";
# Create new local branch if `create_branch`-input is true # Create new local branch if `create_branch`-input is true
if "$INPUT_CREATE_BRANCH"; then if "$INPUT_CREATE_BRANCH"; then
# shellcheck disable=SC2086 # shellcheck disable=SC2086
@@ -151,18 +176,27 @@ _local_commit() {
} }
_tag_commit() { _tag_commit() {
echo "INPUT_TAG_NAME: ${INPUT_TAG_NAME}"
echo "INPUT_TAGGING_MESSAGE: ${INPUT_TAGGING_MESSAGE}" echo "INPUT_TAGGING_MESSAGE: ${INPUT_TAGGING_MESSAGE}"
if [ -n "$INPUT_TAGGING_MESSAGE" ] if [ -n "$INPUT_TAG_NAME" ] || [ -n "$INPUT_TAGGING_MESSAGE" ]; then
then INTERNAL_TAG=${INPUT_TAG_NAME:-$INPUT_TAGGING_MESSAGE}
_log "debug" "Create tag $INPUT_TAGGING_MESSAGE"; INTERNAL_TAGGING_MESSAGE=${INPUT_TAGGING_MESSAGE:-$INPUT_TAG_NAME}
git -c user.name="$INPUT_COMMIT_USER_NAME" -c user.email="$INPUT_COMMIT_USER_EMAIL" tag -a "$INPUT_TAGGING_MESSAGE" -m "$INPUT_TAGGING_MESSAGE";
_log "debug" "Create tag $INTERNAL_TAG: $INTERNAL_TAGGING_MESSAGE"
git -c user.name="$INPUT_COMMIT_USER_NAME" -c user.email="$INPUT_COMMIT_USER_EMAIL" tag -a "$INTERNAL_TAG" -m "$INTERNAL_TAGGING_MESSAGE"
else else
echo "No tagging message supplied. No tag will be added."; echo "Neither tag nor tag message is set. No tag will be added.";
fi fi
} }
_push_to_github() { _push_to_github() {
if "$INPUT_SKIP_PUSH"; then
_log "debug" "git-push will not be executed.";
return
fi
echo "INPUT_BRANCH value: $INPUT_BRANCH";
echo "INPUT_PUSH_OPTIONS: ${INPUT_PUSH_OPTIONS}"; echo "INPUT_PUSH_OPTIONS: ${INPUT_PUSH_OPTIONS}";
_log "debug" "Apply push options ${INPUT_PUSH_OPTIONS}"; _log "debug" "Apply push options ${INPUT_PUSH_OPTIONS}";
@@ -172,8 +206,8 @@ _push_to_github() {
if [ -z "$INPUT_BRANCH" ] if [ -z "$INPUT_BRANCH" ]
then then
# Only add `--tags` option, if `$INPUT_TAGGING_MESSAGE` is set # Only add `--tags` option, if `$INPUT_TAG_NAME` or `$INPUT_TAGGING_MESSAGE` is set
if [ -n "$INPUT_TAGGING_MESSAGE" ] if [ -n "$INPUT_TAG_NAME" ] || [ -n "$INPUT_TAGGING_MESSAGE" ]
then then
_log "debug" "git push origin --tags"; _log "debug" "git push origin --tags";
git push origin --follow-tags --atomic ${INPUT_PUSH_OPTIONS:+"${INPUT_PUSH_OPTIONS_ARRAY[@]}"}; git push origin --follow-tags --atomic ${INPUT_PUSH_OPTIONS:+"${INPUT_PUSH_OPTIONS_ARRAY[@]}"};

37
package-lock.json generated Normal file
View File

@@ -0,0 +1,37 @@
{
"name": "git-auto-commit-action",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"devDependencies": {
"bats": "^1.13.0",
"bats-assert": "ztombol/bats-assert",
"bats-support": "ztombol/bats-support"
}
},
"node_modules/bats": {
"version": "1.13.0",
"resolved": "https://registry.npmjs.org/bats/-/bats-1.13.0.tgz",
"integrity": "sha512-giSYKGTOcPZyJDbfbTtzAedLcNWdjCLbXYU3/MwPnjyvDXzu6Dgw8d2M+8jHhZXSmsCMSQqCp+YBsJ603UO4vQ==",
"dev": true,
"license": "MIT",
"bin": {
"bats": "bin/bats"
}
},
"node_modules/bats-assert": {
"version": "0.3.0",
"resolved": "git+ssh://git@github.com/ztombol/bats-assert.git#9f88b4207da750093baabc4e3f41bf68f0dd3630",
"dev": true,
"peerDependencies": {
"bats-support": "git+https://github.com/ztombol/bats-support.git#v0.2.0"
}
},
"node_modules/bats-support": {
"version": "0.3.0",
"resolved": "git+ssh://git@github.com/ztombol/bats-support.git#004e707638eedd62e0481e8cdc9223ad471f12ee",
"dev": true
}
}
}

View File

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

View File

@@ -21,6 +21,7 @@ setup() {
export FAKE_DEFAULT_BRANCH=$(git config init.defaultBranch) export FAKE_DEFAULT_BRANCH=$(git config init.defaultBranch)
# Set default INPUT variables used by the GitHub Action # Set default INPUT variables used by the GitHub Action
export INPUT_CREATE_GIT_TAG_ONLY=false
export INPUT_REPOSITORY="${FAKE_LOCAL_REPOSITORY}" export INPUT_REPOSITORY="${FAKE_LOCAL_REPOSITORY}"
export INPUT_COMMIT_MESSAGE="Commit Message" export INPUT_COMMIT_MESSAGE="Commit Message"
export INPUT_BRANCH="${FAKE_DEFAULT_BRANCH}" export INPUT_BRANCH="${FAKE_DEFAULT_BRANCH}"
@@ -31,11 +32,13 @@ setup() {
export INPUT_COMMIT_USER_NAME="Test Suite" export INPUT_COMMIT_USER_NAME="Test Suite"
export INPUT_COMMIT_USER_EMAIL="test@github.com" export INPUT_COMMIT_USER_EMAIL="test@github.com"
export INPUT_COMMIT_AUTHOR="Test Suite <test@users.noreply.github.com>" export INPUT_COMMIT_AUTHOR="Test Suite <test@users.noreply.github.com>"
export INPUT_TAG_NAME=""
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_SKIP_FETCH=false export INPUT_SKIP_FETCH=false
export INPUT_SKIP_CHECKOUT=false export INPUT_SKIP_CHECKOUT=false
export INPUT_SKIP_PUSH=false
export INPUT_DISABLE_GLOBBING=false export INPUT_DISABLE_GLOBBING=false
export INPUT_CREATE_BRANCH=false export INPUT_CREATE_BRANCH=false
export INPUT_INTERNAL_GIT_BINARY=git export INPUT_INTERNAL_GIT_BINARY=git
@@ -120,8 +123,9 @@ cat_github_output() {
assert_line "INPUT_FILE_PATTERN: ." assert_line "INPUT_FILE_PATTERN: ."
assert_line "INPUT_COMMIT_OPTIONS: " assert_line "INPUT_COMMIT_OPTIONS: "
assert_line "::debug::Apply commit options " assert_line "::debug::Apply commit options "
assert_line "INPUT_TAG_NAME: "
assert_line "INPUT_TAGGING_MESSAGE: " assert_line "INPUT_TAGGING_MESSAGE: "
assert_line "No tagging message supplied. No tag will be added." assert_line "Neither tag nor tag message is set. No tag will be added."
assert_line "INPUT_PUSH_OPTIONS: " assert_line "INPUT_PUSH_OPTIONS: "
assert_line "::debug::Apply push options " assert_line "::debug::Apply push options "
assert_line "::debug::Push commit to remote branch ${FAKE_DEFAULT_BRANCH}" assert_line "::debug::Push commit to remote branch ${FAKE_DEFAULT_BRANCH}"
@@ -143,8 +147,9 @@ cat_github_output() {
assert_line "INPUT_FILE_PATTERN: ." assert_line "INPUT_FILE_PATTERN: ."
assert_line "INPUT_COMMIT_OPTIONS: " assert_line "INPUT_COMMIT_OPTIONS: "
assert_line "::debug::Apply commit options " assert_line "::debug::Apply commit options "
assert_line "INPUT_TAG_NAME: "
assert_line "INPUT_TAGGING_MESSAGE: " assert_line "INPUT_TAGGING_MESSAGE: "
assert_line "No tagging message supplied. No tag will be added." assert_line "Neither tag nor tag message is set. No tag will be added."
assert_line "INPUT_PUSH_OPTIONS: " assert_line "INPUT_PUSH_OPTIONS: "
assert_line "::debug::Apply push options " assert_line "::debug::Apply push options "
assert_line "::debug::Push commit to remote branch ${FAKE_DEFAULT_BRANCH}" assert_line "::debug::Push commit to remote branch ${FAKE_DEFAULT_BRANCH}"
@@ -192,7 +197,6 @@ cat_github_output() {
assert_failure assert_failure
assert_line "INPUT_REPOSITORY value: ${INPUT_REPOSITORY}" assert_line "INPUT_REPOSITORY value: ${INPUT_REPOSITORY}"
assert_line "INPUT_BRANCH value: ${FAKE_DEFAULT_BRANCH}"
assert_line "INPUT_FILE_PATTERN: ." assert_line "INPUT_FILE_PATTERN: ."
assert_line "INPUT_COMMIT_OPTIONS: " assert_line "INPUT_COMMIT_OPTIONS: "
assert_line "::debug::Apply commit options " assert_line "::debug::Apply commit options "
@@ -291,7 +295,8 @@ cat_github_output() {
} }
@test "It creates a tag with the commit" { @test "It creates a tag with the commit" {
INPUT_TAGGING_MESSAGE="v1.0.0" INPUT_TAG_NAME="v1.0.0"
INPUT_TAGGING_MESSAGE="MyProduct v1.0.0"
touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt
@@ -299,13 +304,15 @@ cat_github_output() {
assert_success assert_success
assert_line "INPUT_TAGGING_MESSAGE: v1.0.0" assert_line "INPUT_TAG_NAME: v1.0.0"
assert_line "::debug::Create tag v1.0.0" assert_line "INPUT_TAGGING_MESSAGE: MyProduct v1.0.0"
assert_line "::debug::Create tag v1.0.0: MyProduct v1.0.0"
assert_line "::debug::Push commit to remote branch ${FAKE_DEFAULT_BRANCH}" assert_line "::debug::Push commit to remote branch ${FAKE_DEFAULT_BRANCH}"
# Assert a tag v1.0.0 has been created # Assert a tag v1.0.0 has been created
run git tag run git tag -n
assert_output v1.0.0 assert_output 'v1.0.0 MyProduct v1.0.0'
run git ls-remote --tags --refs run git ls-remote --tags --refs
assert_output --partial refs/tags/v1.0.0 assert_output --partial refs/tags/v1.0.0
@@ -346,6 +353,24 @@ cat_github_output() {
assert_equal $current_sha $remote_sha assert_equal $current_sha $remote_sha
} }
@test "If SKIP_PUSH is true git-push will not be called" {
touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt
INPUT_SKIP_PUSH=true
run git_auto_commit
assert_success
assert_line "::debug::git-push will not be executed."
# Assert that the sha values are not equal on local and remote
current_sha="$(git rev-parse --verify --short ${FAKE_DEFAULT_BRANCH})"
remote_sha="$(git rev-parse --verify --short origin/${FAKE_DEFAULT_BRANCH})"
refute [assert_equal $current_sha $remote_sha]
}
@test "It can checkout a different branch" { @test "It can checkout a different branch" {
# Create foo-branch and then immediately switch back to ${FAKE_DEFAULT_BRANCH} # Create foo-branch and then immediately switch back to ${FAKE_DEFAULT_BRANCH}
git checkout -b foo git checkout -b foo
@@ -386,9 +411,11 @@ cat_github_output() {
assert_equal $current_sha $remote_sha assert_equal $current_sha $remote_sha
} }
@test "It uses existing branch when INPUT_BRANCH is empty and INPUT_TAGGING_MESSAGE is set" { @test "It uses existing branch when INPUT_BRANCH is empty and INPUT_TAG is set" {
INPUT_BRANCH="" INPUT_BRANCH=""
INPUT_TAGGING_MESSAGE="v2.0.0" INPUT_TAG_NAME="v2.0.0"
INPUT_TAGGING_MESSAGE="MyProduct v2.0.0"
touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt
@@ -396,8 +423,8 @@ cat_github_output() {
assert_success assert_success
assert_line "INPUT_TAGGING_MESSAGE: v2.0.0" assert_line "INPUT_TAG_NAME: v2.0.0"
assert_line "::debug::Create tag v2.0.0" assert_line "::debug::Create tag v2.0.0: MyProduct v2.0.0"
assert_line "::debug::git push origin --tags" assert_line "::debug::git push origin --tags"
# Assert a tag v2.0.0 has been created # Assert a tag v2.0.0 has been created
@@ -437,7 +464,9 @@ cat_github_output() {
@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_TAGGING_MESSAGE="v2.0.0" INPUT_TAG_NAME="v2.0.0"
INPUT_TAGGING_MESSAGE="MyProduct v2.0.0"
touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt
@@ -445,8 +474,8 @@ cat_github_output() {
assert_success assert_success
assert_line "INPUT_TAGGING_MESSAGE: v2.0.0" assert_line "INPUT_TAG_NAME: v2.0.0"
assert_line "::debug::Create tag v2.0.0" assert_line "::debug::Create tag v2.0.0: MyProduct v2.0.0"
assert_line "::debug::git push origin --tags" assert_line "::debug::git push origin --tags"
# Assert a tag v2.0.0 has been created # Assert a tag v2.0.0 has been created
@@ -470,7 +499,9 @@ cat_github_output() {
git checkout ${FAKE_DEFAULT_BRANCH} git checkout ${FAKE_DEFAULT_BRANCH}
INPUT_BRANCH="a-new-branch" INPUT_BRANCH="a-new-branch"
INPUT_TAGGING_MESSAGE="v2.0.0" INPUT_TAG_NAME="v2.0.0"
INPUT_TAGGING_MESSAGE="MyProduct v2.0.0"
touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt
@@ -478,8 +509,8 @@ cat_github_output() {
assert_success assert_success
assert_line "INPUT_TAGGING_MESSAGE: v2.0.0" assert_line "INPUT_TAG_NAME: v2.0.0"
assert_line "::debug::Create tag v2.0.0" assert_line "::debug::Create tag v2.0.0: MyProduct v2.0.0"
assert_line "::debug::Push commit to remote branch a-new-branch" assert_line "::debug::Push commit to remote branch a-new-branch"
# Assert a tag v2.0.0 has been created # Assert a tag v2.0.0 has been created
@@ -578,9 +609,8 @@ cat_github_output() {
assert_line "changes_detected=true" assert_line "changes_detected=true"
} }
@test "script fails to push commit to new branch that does not exist yet" { @test "It pushes commit to new branch that does not exist yet" {
INPUT_BRANCH="not-existend-branch" INPUT_BRANCH="not-existend-branch"
INPUT_CREATE_BRANCH=false
run git branch run git branch
refute_line --partial "not-existend-branch" refute_line --partial "not-existend-branch"
@@ -590,27 +620,28 @@ 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_failure assert_success
assert_line "INPUT_REPOSITORY value: ${INPUT_REPOSITORY}" assert_line "INPUT_REPOSITORY value: ${INPUT_REPOSITORY}"
assert_line "INPUT_BRANCH value: not-existend-branch" assert_line "INPUT_BRANCH value: not-existend-branch"
assert_line "fatal: invalid reference: not-existend-branch"
run git branch run git branch
assert_line --partial ${FAKE_DEFAULT_BRANCH}
refute_line --partial "not-existend-branch" refute_line --partial "not-existend-branch"
run git branch -r run git branch -r
refute_line --partial "origin/not-existend-branch" assert_line --partial "origin/not-existend-branch"
run cat_github_output run cat_github_output
assert_line "changes_detected=true" assert_line "changes_detected=true"
} }
@test "It creates new local branch and pushes the new branch to remote" { @test "It does not create new local branch and pushes the commit to a new branch on remote" {
INPUT_BRANCH="not-existend-branch" INPUT_BRANCH="not-existend-branch"
INPUT_CREATE_BRANCH=true
run git branch run git branch
refute_line --partial "not-existend-branch" refute_line --partial "not-existend-branch"
@@ -620,6 +651,8 @@ 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
@@ -629,15 +662,19 @@ cat_github_output() {
assert_line "INPUT_FILE_PATTERN: ." assert_line "INPUT_FILE_PATTERN: ."
assert_line "INPUT_COMMIT_OPTIONS: " assert_line "INPUT_COMMIT_OPTIONS: "
assert_line "::debug::Apply commit options " assert_line "::debug::Apply commit options "
assert_line "INPUT_TAG_NAME: "
assert_line "INPUT_TAGGING_MESSAGE: " assert_line "INPUT_TAGGING_MESSAGE: "
assert_line "No tagging message supplied. No tag will be added." assert_line "Neither tag nor tag message is set. No tag will be added."
assert_line "INPUT_PUSH_OPTIONS: " assert_line "INPUT_PUSH_OPTIONS: "
assert_line "::debug::Apply push options " assert_line "::debug::Apply push options "
assert_line "::debug::Push commit to remote branch not-existend-branch" 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 run git branch
assert_line --partial "not-existend-branch" assert_line --partial ${FAKE_DEFAULT_BRANCH}
refute_line --partial "not-existend-branch"
# Assert branch has been created on remote
run git branch -r run git branch -r
assert_line --partial "origin/not-existend-branch" assert_line --partial "origin/not-existend-branch"
@@ -646,50 +683,7 @@ 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" { @test "It creates new local branch and pushes branch to remote even if the remote branch already exists" {
git checkout -b not-existend-remote-branch
git checkout ${FAKE_DEFAULT_BRANCH}
INPUT_BRANCH="not-existend-remote-branch"
INPUT_CREATE_BRANCH=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 "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-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 # 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"
@@ -706,7 +700,7 @@ cat_github_output() {
cd $FAKE_LOCAL_REPOSITORY cd $FAKE_LOCAL_REPOSITORY
INPUT_BRANCH="existing-remote-branch" INPUT_BRANCH="existing-remote-branch"
INPUT_CREATE_BRANCH=true INPUT_SKIP_CHECKOUT=true
run git branch run git branch
refute_line --partial "existing-remote-branch" refute_line --partial "existing-remote-branch"
@@ -727,20 +721,22 @@ cat_github_output() {
assert_line "INPUT_FILE_PATTERN: ." assert_line "INPUT_FILE_PATTERN: ."
assert_line "INPUT_COMMIT_OPTIONS: " assert_line "INPUT_COMMIT_OPTIONS: "
assert_line "::debug::Apply commit options " assert_line "::debug::Apply commit options "
assert_line "INPUT_TAG_NAME: "
assert_line "INPUT_TAGGING_MESSAGE: " assert_line "INPUT_TAGGING_MESSAGE: "
assert_line "No tagging message supplied. No tag will be added." assert_line "Neither tag nor tag message is set. No tag will be added."
assert_line "INPUT_PUSH_OPTIONS: " assert_line "INPUT_PUSH_OPTIONS: "
assert_line "::debug::Apply push options " assert_line "::debug::Apply push options "
assert_line "::debug::Push commit to remote branch existing-remote-branch" assert_line "::debug::Push commit to remote branch existing-remote-branch"
run git branch run git branch
assert_line --partial "existing-remote-branch" assert_line --partial ${FAKE_DEFAULT_BRANCH}
refute_line --partial "existing-remote-branch"
run git branch -r run git branch -r
assert_line --partial "origin/existing-remote-branch" assert_line --partial "origin/existing-remote-branch"
# Assert that branch "existing-remote-branch" was updated on remote # Assert that branch "existing-remote-branch" was updated on remote
current_sha="$(git rev-parse --verify --short existing-remote-branch)" current_sha="$(git rev-parse --verify --short ${FAKE_DEFAULT_BRANCH})"
remote_sha="$(git rev-parse --verify --short origin/existing-remote-branch)" remote_sha="$(git rev-parse --verify --short origin/existing-remote-branch)"
assert_equal $current_sha $remote_sha assert_equal $current_sha $remote_sha
@@ -750,7 +746,7 @@ cat_github_output() {
assert_line -e "commit_hash=[0-9a-f]{40}$" 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" { @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 # 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"
@@ -767,7 +763,7 @@ cat_github_output() {
cd $FAKE_LOCAL_REPOSITORY cd $FAKE_LOCAL_REPOSITORY
INPUT_BRANCH="existing-remote-branch" INPUT_BRANCH="existing-remote-branch"
INPUT_CREATE_BRANCH=true INPUT_SKIP_CHECKOUT=true
run git branch run git branch
refute_line --partial "existing-remote-branch" refute_line --partial "existing-remote-branch"
@@ -782,23 +778,24 @@ cat_github_output() {
assert_failure assert_failure
assert_line "hint: Updates were rejected because the tip of your current branch is behind" assert_line "hint: Updates were rejected because a pushed branch tip is behind its remote"
# Assert that branch exists locally and on remote # Assert that branch exists locally and on remote
run git branch run git branch
assert_line --partial "existing-remote-branch" assert_line --partial ${FAKE_DEFAULT_BRANCH}
refute_line --partial "existing-remote-branch"
run git branch -r run git branch -r
assert_line --partial "origin/existing-remote-branch" assert_line --partial "origin/existing-remote-branch"
# Assert that branch "existing-remote-branch" was not updated on remote # Assert that branch "existing-remote-branch" was not updated on remote
current_sha="$(git rev-parse --verify --short existing-remote-branch)" current_sha="$(git rev-parse --verify --short ${FAKE_DEFAULT_BRANCH})"
remote_sha="$(git rev-parse --verify --short origin/existing-remote-branch)" remote_sha="$(git rev-parse --verify --short origin/existing-remote-branch)"
refute [assert_equal $current_sha $remote_sha] 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" { @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 # Create `new-branch` on remote with changes the local repository does not yet have
cd $FAKE_TEMP_LOCAL_REPOSITORY cd $FAKE_TEMP_LOCAL_REPOSITORY
@@ -817,8 +814,9 @@ 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 know have "new-branch" locally 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.
run git branch run git branch
refute_line --partial "new-branch" refute_line --partial "new-branch"
@@ -830,16 +828,12 @@ cat_github_output() {
run git_auto_commit run git_auto_commit
assert_success assert_failure
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 that branch "new-branch" was updated on remote assert_line --partial "Updates were rejected because a pushed branch tip is behind its 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 "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" {
@@ -1004,7 +998,7 @@ cat_github_output() {
assert_line --partial "Working tree clean. Nothing to commit." assert_line --partial "Working tree clean. Nothing to commit."
assert_line --partial "new-file-2.txt" assert_line --partial "new-file-2.txt"
assert_line --partial "new-file-3.txt" # assert_line --partial "new-file-3.txt"
# Changes are not detected # Changes are not detected
run cat_github_output run cat_github_output
@@ -1038,7 +1032,7 @@ cat_github_output() {
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 "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-2.txt"
assert_line --partial "new-file-3.txt" # assert_line --partial "new-file-3.txt"
# Changes are detected # Changes are detected
run cat_github_output run cat_github_output
@@ -1060,8 +1054,9 @@ cat_github_output() {
assert_line "INPUT_FILE_PATTERN: ." assert_line "INPUT_FILE_PATTERN: ."
assert_line "INPUT_COMMIT_OPTIONS: " assert_line "INPUT_COMMIT_OPTIONS: "
assert_line "::debug::Apply commit options " assert_line "::debug::Apply commit options "
assert_line "INPUT_TAG_NAME: "
assert_line "INPUT_TAGGING_MESSAGE: " assert_line "INPUT_TAGGING_MESSAGE: "
assert_line "No tagging message supplied. No tag will be added." assert_line "Neither tag nor tag message is set. No tag will be added."
assert_line "INPUT_PUSH_OPTIONS: " assert_line "INPUT_PUSH_OPTIONS: "
assert_line "::debug::Apply push options " assert_line "::debug::Apply push options "
assert_line "::debug::Push commit to remote branch ${FAKE_DEFAULT_BRANCH}" assert_line "::debug::Push commit to remote branch ${FAKE_DEFAULT_BRANCH}"
@@ -1123,5 +1118,406 @@ END
run git_auto_commit run git_auto_commit
assert_failure; 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 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_TAG_NAME=v1.0.0
INPUT_TAGGING_MESSAGE="MyProduct v1.0.0"
run git_auto_commit
assert_success
assert_line "::debug::Create git tag only"
assert_line "::debug::Create tag v1.0.0: MyProduct v1.0.0"
refute_line "Neither tag nor tag message is set. 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 -n
assert_output 'v1.0.0 MyProduct 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_TAG_NAME=""
INPUT_TAGGING_MESSAGE=""
run git_auto_commit
assert_success
assert_line "INPUT_TAG_NAME: "
assert_line "INPUT_TAGGING_MESSAGE: "
assert_line "Neither tag nor tag message is set. 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
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
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
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 "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" {
INPUT_TAGGING_MESSAGE="v1.0.0"
touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt
run git_auto_commit
assert_success
assert_line "INPUT_TAG_NAME: "
assert_line "INPUT_TAGGING_MESSAGE: v1.0.0"
assert_line "::debug::Create tag v1.0.0: v1.0.0"
assert_line "::debug::Push commit to remote branch ${FAKE_DEFAULT_BRANCH}"
# Assert a tag v1.0.0 has been created
run git tag -n
assert_output 'v1.0.0 v1.0.0'
run git ls-remote --tags --refs
assert_output --partial refs/tags/v1.0.0
# Assert that the commit has been pushed with --force and
# sha values are equal on local and remote
current_sha="$(git rev-parse --verify --short ${FAKE_DEFAULT_BRANCH})"
remote_sha="$(git rev-parse --verify --short origin/${FAKE_DEFAULT_BRANCH})"
assert_equal $current_sha $remote_sha
}
@test "Set a tag only" {
INPUT_TAG_NAME="v1.0.0"
touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt
run git_auto_commit
assert_success
assert_line "INPUT_TAG_NAME: v1.0.0"
assert_line "INPUT_TAGGING_MESSAGE: "
assert_line "::debug::Create tag v1.0.0: v1.0.0"
assert_line "::debug::Push commit to remote branch ${FAKE_DEFAULT_BRANCH}"
# Assert a tag v1.0.0 has been created
run git tag -n
assert_output 'v1.0.0 v1.0.0'
run git ls-remote --tags --refs
assert_output --partial refs/tags/v1.0.0
# Assert that the commit has been pushed with --force and
# sha values are equal on local and remote
current_sha="$(git rev-parse --verify --short ${FAKE_DEFAULT_BRANCH})"
remote_sha="$(git rev-parse --verify --short origin/${FAKE_DEFAULT_BRANCH})"
assert_equal $current_sha $remote_sha
} }

View File

@@ -1,16 +0,0 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1
bats-assert@ztombol/bats-assert:
version "0.3.0"
resolved "https://codeload.github.com/ztombol/bats-assert/tar.gz/9f88b4207da750093baabc4e3f41bf68f0dd3630"
bats-support@ztombol/bats-support:
version "0.3.0"
resolved "https://codeload.github.com/ztombol/bats-support/tar.gz/004e707638eedd62e0481e8cdc9223ad471f12ee"
bats@^1.11.1:
version "1.11.1"
resolved "https://registry.yarnpkg.com/bats/-/bats-1.11.1.tgz#e87fa1161d5110ec3a685e2e233f2f2bfb26ebfd"
integrity sha512-Dh26FsiLog+wwQeTkboYo2xYj9rUaPEbibUobnYb3G3M9hva/Kby00wrAN9VB9qqGVhl/pYjjt/LVBWwjXlD2A==