Compare commits

...

66 Commits

Author SHA1 Message Date
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
e348103e90 Merge pull request #354 from parkerbxyz/patch-1 2025-01-11 08:10:58 +01:00
Parker Brown
032ffbefae Include github.actor_id in default commit_author
This mimics the default commit author used by GitHub and matches the format used for the default `commit_user_email`.
2025-01-10 15:38:54 -08:00
dependabot[bot]
0b492c0d95 Bump bats from 1.11.0 to 1.11.1 (#353)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-02 08:06:23 +01:00
Stefan Zweifel
050015d406 Add Scope/Permissions documentation for PATs
Closes #347
2024-10-06 10:39:09 +02:00
scarf
573710f3d0 docs(README): fix broken protected branch docs link (#346) 2024-10-04 08:56:00 +02:00
Marcelo Trylesinski
e961da7576 Update README.md (#343) 2024-09-22 16:50:21 +02:00
dependabot[bot]
ac8823709a Bump github/super-linter from 6 to 7 (#342)
Bumps [github/super-linter](https://github.com/github/super-linter) from 6 to 7.
- [Release notes](https://github.com/github/super-linter/releases)
- [Changelog](https://github.com/github/super-linter/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/super-linter/compare/v6...v7)

---
updated-dependencies:
- dependency-name: github/super-linter
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-09-02 08:16:51 +02:00
dependabot[bot]
be823a7e51 Bump github/super-linter from 5 to 6 (#335)
Bumps [github/super-linter](https://github.com/github/super-linter) from 5 to 6.
- [Release notes](https://github.com/github/super-linter/releases)
- [Changelog](https://github.com/github/super-linter/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/super-linter/compare/v5...v6)

---
updated-dependencies:
- dependency-name: github/super-linter
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-07-08 08:26:25 +02:00
Stefan Zweifel
55a82ca24f Add Section on preventing infinite loops to README 2024-07-06 15:14:44 +02:00
Stefan Zweifel
18157e6f3b Update bug.yaml 2024-07-06 12:07:25 +02:00
Stefan Zweifel
7d779d0067 Update Bug Repo Form 2024-07-06 12:06:47 +02:00
Stefan Zweifel
efd424db0f Fix link to "new feature request" 2024-07-06 12:00:09 +02:00
Stefan Zweifel
5f3fa8aed3 Add docs about .github/workflows pushes
See #322
2024-07-06 11:43:22 +02:00
Stefan Zweifel
ee5525316d Update GPG Signing section in README 2024-07-02 20:41:34 +02:00
Stefan Zweifel
4b8a201e31 Add with ref github.head_ref to README 2024-04-13 10:35:11 +02:00
stefanzweifel
896cc0d225 Update CHANGELOG 2024-04-12 06:47:58 +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 359 additions and 150 deletions

View File

@@ -5,7 +5,7 @@ body:
- type: markdown
attributes:
value: |
Before opening a bug report, please search for the behaviour in the existing issues.
Before opening a bug report, please search for the behaviour in existing issues or discussions.
---
@@ -17,7 +17,7 @@ body:
description: "Which exact version of git-auto-commit are you using in your Workflow?"
placeholder: "v4.14.0"
validations:
required: true
required: true
- type: dropdown
id: machine
attributes:
@@ -33,7 +33,7 @@ body:
id: bug-description
attributes:
label: Bug description
description: What exactly happened?
description: What exactly happened? Please describe your problem in detail.
validations:
required: true
- type: textarea
@@ -52,7 +52,7 @@ body:
id: example-workflow
attributes:
label: Example Workflow
description: Please share your GitHub Actions workflow which causes the bug. We use this to reproduce the error. No need for backticks here.
description: Please share the YAML-code of your GitHub Actions workflow which causes the bug. We use this to reproduce the error. If the workflow is in a private repostory, please provide a minimal example. (No need for backticks here, the pasted code will be correctly formatted.)
render: yaml
validations:
required: true
@@ -60,5 +60,10 @@ body:
id: logs
attributes:
label: Relevant log output
description: If applicable, provide relevant log output. No need for backticks here.
description: If applicable, provide relevant log output. Please copy and paste the output here, and make sure to remove any sensitive information. (No need for backticks here, the pasted code will be correctly formatted.)
render: shell
- type: input
id: repository-url
attributes:
label: Repository
description: If applicable, please provide the repository where the bug occurred.

View File

@@ -4,5 +4,5 @@ contact_links:
url: https://github.com/stefanzweifel/git-auto-commit-action/discussions/new?category=help
about: If you can't get something to work the way you expect, open a question in our discussion forums.
- name: Feature Request
url: https://github.com/tailwindlabs/tailwindcss/discussions/new?category=ideas
url: https://github.com/stefanzweifel/git-auto-commit-action/discussions/new?category=ideas
about: 'Suggest any ideas you have using our discussion forums.'

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

@@ -12,7 +12,7 @@ jobs:
uses: actions/checkout@v4
- name: Lint Code Base
uses: github/super-linter@v5
uses: github/super-linter@v7
env:
VALIDATE_ALL_CODEBASE: false
VALIDATE_MARKDOWN: false

View File

@@ -5,10 +5,69 @@ 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.0.0...HEAD)
## [Unreleased](https://github.com/stefanzweifel/git-auto-commit-action/compare/v6.0.0...HEAD)
> TBD
## [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
### Fixed
- Fail if attempting to execute git commands in a directory that is not a git-repo. ([#326](https://github.com/stefanzweifel/git-auto-commit-action/pull/326)) [@ccomendant](https://github.com/@ccomendant)
### Dependency Updates
- Bump bats from 1.10.0 to 1.11.0 ([#325](https://github.com/stefanzweifel/git-auto-commit-action/pull/325)) [@dependabot](https://github.com/@dependabot)
- Bump release-drafter/release-drafter from 5 to 6 ([#319](https://github.com/stefanzweifel/git-auto-commit-action/pull/319)) [@dependabot](https://github.com/@dependabot)
### Misc
- Clarify `commit_author` input option ([#315](https://github.com/stefanzweifel/git-auto-commit-action/pull/315)) [@npanuhin](https://github.com/@npanuhin)
- Add step id explanation for output in README.md ([#324](https://github.com/stefanzweifel/git-auto-commit-action/pull/324)) [@ChristianVermeulen](https://github.com/@ChristianVermeulen)
- Linux is not UNIX ([#321](https://github.com/stefanzweifel/git-auto-commit-action/pull/321)) [@couling](https://github.com/@couling)
## [v5.0.0](https://github.com/stefanzweifel/git-auto-commit-action/compare/v4.16.0...v5.0.0) - 2023-10-06
New major release that bumps the default runtime to Node 20. There are no other breaking changes.

View File

@@ -40,8 +40,11 @@ jobs:
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.head_ref }}
# Other steps that change files in the repository
# Other steps that change files in the repository go here
# …
# Commit all changed files back to the repository
- uses: stefanzweifel/git-auto-commit-action@v5
@@ -59,9 +62,8 @@ The following is an extended example with all available options.
# 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`.
@@ -82,7 +84,7 @@ The following is an extended example with all available options.
# Optional commit user and author settings
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_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
# pushed to remote repository and defined branch.
@@ -102,19 +104,14 @@ The following is an extended example with all available options.
# Optional. Disable dirty check and always try to create a commit and push
skip_dirty_check: true
# Optional. Skip internal call to `git fetch`
skip_fetch: true
# Optional. Skip internal call to `git checkout`
skip_checkout: true
# Optional. Prevents the shell from expanding filenames.
# Details: https://www.gnu.org/software/bash/manual/html_node/Filename-Expansion.html
disable_globbing: true
# Optional. Create given branch name in local and remote repository.
create_branch: true
# Optional. Creates a new tag and pushes it to remote without creating a commit.
# Skips dirty check and changed files. Must be used with `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.
@@ -166,6 +163,7 @@ 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.
- `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.**
@@ -231,10 +229,17 @@ storing the token as a secret in your repository and then passing the new token
token: ${{ secrets.PAT }}
```
If you create a personal access token, apply the `repo` and `workflow` scopes.
If you create a personal access token (classic), apply the `repo` and `workflow` scopes.
If you create a fine-grained personal access token, apply the `Contents`-permissions.
If you work in an organization and don't want to create a PAT from your personal account, we recommend using a [robot account](https://docs.github.com/en/github/getting-started-with-github/types-of-github-accounts) for the token.
### Prevent Infinite Loop when using a Personal Access Token
If you're using a Personal Access Token (PAT) to push commits to GitHub repository, the resulting commit or push can trigger other GitHub Actions workflows. This can result in an infinite loop.
If you would like to prevent this, you can add `skip-checks:true` to the commit message. See [Skipping workflow runs](https://docs.github.com/en/actions/managing-workflow-runs/skipping-workflow-runs) for details.
### Change to file is not detected
Does your workflow change a file, but "git-auto-commit" does not detect the change? Check the `.gitignore` that applies to the respective file. You might have accidentally marked the file to be ignored by git.
@@ -271,11 +276,32 @@ The example below can be used as a starting point to generate a multiline commit
commit_message: ${{ steps.commit_message_step.outputs.commit_message }}
```
### Signing Commits & Other Git Command Line Options
### Signing Commits
Using command lines options needs to be done manually for each workflow which you require the option enabled. So for example signing commits requires you to import the gpg signature each and every time. The following list of actions are worth checking out if you need to automate these tasks regularly.
If you would like to sign your commits using a GPG key, you will need to use an additional action.
You can use the [crazy-max/ghaction-import-gpg](https://github.com/crazy-max/ghaction-import-gpg) action and follow its setup instructions.
- [Import GPG Signature](https://github.com/crazy-max/ghaction-import-gpg) (Suggested by [TGTGamer](https://github.com/tgtgamer))
As git-auto-commit by default does not use **your** username and email when creating a commit, you have to override these values in your workflow.
```yml
- name: "Import GPG key"
id: import-gpg
uses: crazy-max/ghaction-import-gpg@v6
with:
gpg_private_key: ${{ secrets.GPG_PRIVATE_KEY }}
passphrase: ${{ secrets.GPG_PASSPHRASE }}
git_user_signingkey: true
git_commit_gpgsign: true
- name: "Commit and push changes"
uses: stefanzweifel/git-auto-commit-action@v5
with:
commit_author: "${{ steps.import-gpg.outputs.name }} <${{ steps.import-gpg.outputs.email }}>"
commit_user_name: ${{ steps.import-gpg.outputs.name }}
commit_user_email: ${{ steps.import-gpg.outputs.email }}
```
See discussion [#334](https://github.com/stefanzweifel/git-auto-commit-action/discussions/334) for details.
### Use in forks from private repositories
@@ -386,7 +412,6 @@ The steps in your workflow might look like this:
commit_message: ${{ steps.last-commit.outputs.message }}
commit_options: '--amend --no-edit'
push_options: '--force'
skip_fetch: true
```
See discussion in [#159](https://github.com/stefanzweifel/git-auto-commit-action/issues/159#issuecomment-845347950) for details.
@@ -403,20 +428,34 @@ please update your Workflow configuration and usage of [`actions/checkout`](http
Updating the `token` value with a Personal Access Token should fix your issues.
### git-auto-commit fails to push commit that creates or updates files in `.github/workflows/`
The default `GITHUB_TOKEN` issued by GitHub Action does not have permission to make changes to workflow files located in `.github/workflows/`.
To fix this, please create a personal access token (PAT) and pass the token to the `actions/checkout`-step in your workflow. (Similar to [how to push to protected branches](https://github.com/stefanzweifel/git-auto-commit-action?tab=readme-ov-file#push-to-protected-branches)).
If a PAT does not work for you, you could also create a new GitHub app and use it's token in your workflows. See [this comment in #87](https://github.com/stefanzweifel/git-auto-commit-action/issues/87#issuecomment-1939138661) for details.
See [#322](https://github.com/stefanzweifel/git-auto-commit-action/issues/322) for details and discussions around this topic.
### Push to protected branches
If your repository uses [protected branches](https://help.github.com/en/github/administering-a-repository/configuring-protected-branches) you have to make some changes to your Workflow for the Action to work properly: You need a Personal Access Token and you either have to allow force pushes or the Personal Access Token needs to belong to an Administrator.
If your repository uses [protected branches](https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/about-protected-branches) you have to make some changes to your Workflow for the Action to work properly: You need a Personal Access Token and you either have to allow force pushes or the Personal Access Token needs to belong to an Administrator.
First, you have to create a new [Personal Access Token (PAT)](https://github.com/settings/tokens/new),
store the token as a secret in your repository and pass the new token to the [`actions/checkout`](https://github.com/actions/checkout#usage) Action step.
If you create a personal access token (classic), apply the `repo` and `workflow` scopes.
If you create a fine-grained personal access token, apply the `Contents`-permissions.
```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.

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

@@ -43,7 +43,7 @@ inputs:
commit_author:
description: Value used for the commit author. Defaults to the username of whoever triggered this workflow run.
required: false
default: ${{ github.actor }} <${{ github.actor }}@users.noreply.github.com>
default: ${{ github.actor }} <${{ github.actor_id }}+${{ github.actor }}@users.noreply.github.com>
tagging_message:
description: Message used to create a new git tag with the commit. Keep this empty, if no tag should be created.
required: false
@@ -56,29 +56,36 @@ inputs:
description: Skip the check if the git repository is dirty and always try to create a commit.
required: false
default: false
skip_fetch:
description: Skip the call to git-fetch.
required: false
default: false
skip_checkout:
description: Skip the call to git-checkout.
required: false
default: false
disable_globbing:
description: Stop the shell from expanding filenames (https://www.gnu.org/software/bash/manual/html_node/Filename-Expansion.html)
default: false
create_branch:
description: Create new branch with the name of `branch`-input in local and remote repository, if it doesn't exist yet.
create_git_tag_only:
description: Perform a clean git tag and push, without commiting anything
required: false
default: false
internal_git_binary:
description: Internal use only! Path to git binary used to check if git is available. (Don't change this!)
default: git
skip_fetch:
description: "Deprecated: skip_fetch has been removed in v6. It does not have any effect anymore."
required: false
default: false
skip_checkout:
description: "Deprecated: skip_checkout has been removed in v6. It does not have any effect anymore."
required: false
default: false
create_branch:
description: "Deprecated: create_branch has been removed in v6. It does not have any effect anymore."
default: false
outputs:
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.
commit_hash:
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:
using: 'node20'

View File

@@ -27,16 +27,35 @@ _log() {
}
_main() {
if "$INPUT_SKIP_FETCH"; then
_log "warning" "git-auto-commit: skip_fetch has been removed in v6. It does not have any effect anymore.";
fi
if "$INPUT_SKIP_CHECKOUT"; then
_log "warning" "git-auto-commit: skip_checkout has been removed in v6. It does not have any effect anymore.";
fi
if "$INPUT_CREATE_BRANCH"; then
_log "warning" "git-auto-commit: create_branch has been removed in v6. It does not have any effect anymore.";
fi
_check_if_git_is_available
_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"
_switch_to_branch
_add_files
# Check dirty state of repo again using git-diff.
@@ -86,36 +105,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>";
exit 1;
fi
[ -n "$gitStatus" ]
}
_switch_to_branch() {
echo "INPUT_BRANCH value: $INPUT_BRANCH";
# Fetch remote to make sure that repo can be switched to the right branch.
if "$INPUT_SKIP_FETCH"; then
_log "debug" "git-fetch will not be executed.";
_check_if_is_git_repository() {
if [ -d ".git" ]; then
_log "debug" "Repository found.";
else
git fetch --depth=1;
_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
}
# If `skip_checkout`-input is true, skip the entire checkout step.
if "$INPUT_SKIP_CHECKOUT"; then
_log "debug" "git-checkout will not be executed.";
_check_if_repository_is_in_detached_state() {
if [ -z "$(git symbolic-ref HEAD)" ]
then
_log "error" "Repository is in detached HEAD state. Please make sure you check out a branch. Adjust the `ref` input accordingly.";
exit 1;
else
# Create new local branch if `create_branch`-input is true
if "$INPUT_CREATE_BRANCH"; then
# shellcheck disable=SC2086
git checkout -B $INPUT_BRANCH --;
else
# Switch to branch from current Workflow run
# shellcheck disable=SC2086
git checkout $INPUT_BRANCH --;
fi
_log "debug" "Repository is on a branch.";
fi
}
@@ -164,6 +172,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}";

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.12.0",
"bats-assert": "ztombol/bats-assert",
"bats-support": "ztombol/bats-support"
}
},
"node_modules/bats": {
"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": {
"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": {
"bats": "^1.11.0",
"bats": "^1.12.0",
"bats-assert": "ztombol/bats-assert",
"bats-support": "ztombol/bats-support"
},

View File

@@ -21,6 +21,7 @@ setup() {
export FAKE_DEFAULT_BRANCH=$(git config init.defaultBranch)
# Set default INPUT variables used by the GitHub Action
export INPUT_CREATE_GIT_TAG_ONLY=false
export INPUT_REPOSITORY="${FAKE_LOCAL_REPOSITORY}"
export INPUT_COMMIT_MESSAGE="Commit Message"
export INPUT_BRANCH="${FAKE_DEFAULT_BRANCH}"
@@ -34,11 +35,13 @@ setup() {
export INPUT_TAGGING_MESSAGE=""
export INPUT_PUSH_OPTIONS=""
export INPUT_SKIP_DIRTY_CHECK=false
export INPUT_DISABLE_GLOBBING=false
export INPUT_INTERNAL_GIT_BINARY=git
# Deprecated variables. Will be removed in future versions
export INPUT_CREATE_BRANCH=false
export INPUT_SKIP_FETCH=false
export INPUT_SKIP_CHECKOUT=false
export INPUT_DISABLE_GLOBBING=false
export INPUT_CREATE_BRANCH=false
export INPUT_INTERNAL_GIT_BINARY=git
# Set GitHub environment variables used by the GitHub Action
temp_github_output_file=$(mktemp -t github_output_test.XXXXX)
@@ -192,7 +195,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 "
@@ -409,32 +411,6 @@ cat_github_output() {
assert_output --partial refs/tags/v2.0.0
}
@test "If SKIP_FETCH is true git-fetch will not be called" {
touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt
INPUT_SKIP_FETCH=true
run git_auto_commit
assert_success
assert_line "::debug::git-fetch will not be executed."
}
@test "If SKIP_CHECKOUT is true git-checkout will not be called" {
touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt
INPUT_SKIP_CHECKOUT=true
run git_auto_commit
assert_success
assert_line "::debug::git-checkout will not be executed."
}
@test "It pushes generated commit and tag to remote and actually updates the commit shas" {
INPUT_BRANCH=""
INPUT_TAGGING_MESSAGE="v2.0.0"
@@ -465,10 +441,6 @@ cat_github_output() {
}
@test "It pushes generated commit and tag to remote branch and updates commit sha" {
# Create "a-new-branch"-branch and then immediately switch back to ${FAKE_DEFAULT_BRANCH}
git checkout -b a-new-branch
git checkout ${FAKE_DEFAULT_BRANCH}
INPUT_BRANCH="a-new-branch"
INPUT_TAGGING_MESSAGE="v2.0.0"
@@ -491,7 +463,7 @@ cat_github_output() {
assert_output --partial refs/tags/v2.0.0
# Assert that branch "a-new-branch" was updated on remote
current_sha="$(git rev-parse --verify --short a-new-branch)"
current_sha="$(git rev-parse --verify --short ${FAKE_DEFAULT_BRANCH})"
remote_sha="$(git rev-parse --verify --short origin/a-new-branch)"
assert_equal $current_sha $remote_sha
@@ -535,7 +507,6 @@ cat_github_output() {
@test "it does not throw an error if not changes are detected and SKIP_DIRTY_CHECK is false" {
INPUT_FILE_PATTERN="."
INPUT_SKIP_DIRTY_CHECK=false
INPUT_SKIP_FETCH=false
run git_auto_commit
@@ -578,9 +549,8 @@ cat_github_output() {
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_CREATE_BRANCH=false
run git branch
refute_line --partial "not-existend-branch"
@@ -592,25 +562,24 @@ cat_github_output() {
run git_auto_commit
assert_failure
assert_success
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
assert_line --partial ${FAKE_DEFAULT_BRANCH}
refute_line --partial "not-existend-branch"
run git branch -r
refute_line --partial "origin/not-existend-branch"
assert_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" {
@test "It does not create new local branch and pushes the commit to a new branch on remote" {
INPUT_BRANCH="not-existend-branch"
INPUT_CREATE_BRANCH=true
run git branch
refute_line --partial "not-existend-branch"
@@ -635,9 +604,12 @@ cat_github_output() {
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 "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
assert_line --partial "origin/not-existend-branch"
@@ -646,13 +618,11 @@ 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" {
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"
@@ -677,6 +647,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"
@@ -688,8 +663,7 @@ cat_github_output() {
assert_line -e "commit_hash=[0-9a-f]{40}$"
}
@test "it creates new local branch and pushes branch to remote even if the remote branch already exists" {
@test "It creates new local branch and pushes branch to remote even if the remote branch already exists" {
# Create `existing-remote-branch` on remote with changes the local repository does not yet have
cd $FAKE_TEMP_LOCAL_REPOSITORY
git checkout -b "existing-remote-branch"
@@ -706,7 +680,6 @@ cat_github_output() {
cd $FAKE_LOCAL_REPOSITORY
INPUT_BRANCH="existing-remote-branch"
INPUT_CREATE_BRANCH=true
run git branch
refute_line --partial "existing-remote-branch"
@@ -734,13 +707,14 @@ cat_github_output() {
assert_line "::debug::Push commit to remote branch existing-remote-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
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)"
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
@@ -750,7 +724,7 @@ cat_github_output() {
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" {
# 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"
@@ -767,7 +741,6 @@ cat_github_output() {
cd $FAKE_LOCAL_REPOSITORY
INPUT_BRANCH="existing-remote-branch"
INPUT_CREATE_BRANCH=true
run git branch
refute_line --partial "existing-remote-branch"
@@ -782,23 +755,24 @@ cat_github_output() {
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
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
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)"
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 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" {
# Create `new-branch` on remote with changes the local repository does not yet have
cd $FAKE_TEMP_LOCAL_REPOSITORY
@@ -818,7 +792,7 @@ cat_github_output() {
INPUT_BRANCH="new-branch"
# 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.
run git branch
refute_line --partial "new-branch"
@@ -830,16 +804,13 @@ cat_github_output() {
run git_auto_commit
assert_success
assert_failure
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
assert_line --partial "Updates were rejected because the remote contains work that you do"
assert_line --partial "This is usually caused by another repository pushing"
}
@test "throws fatal error if file pattern includes files that do not exist" {
@@ -1004,7 +975,7 @@ cat_github_output() {
assert_line --partial "Working tree clean. Nothing to commit."
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
run cat_github_output
@@ -1038,7 +1009,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 "new-file-2.txt"
assert_line --partial "new-file-3.txt"
# assert_line --partial "new-file-3.txt"
# Changes are detected
run cat_github_output
@@ -1123,5 +1094,90 @@ END
run git_auto_commit
assert_failure;
assert_line "::error::git-status failed with:<fatal: not a git repository (or any of the parent directories): .git>"
assert_line "::error::Not a git repository. Please make sure to run this action in a git repository. Adjust the `repository` input if necessary."
}
@test "It detects if the repository is in a detached state and exits with an error" {
skip
touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt
run git_auto_commit
assert_success
# Bring local repository into a detached state
prev_commit=$(git rev-parse HEAD~1);
git checkout "$prev_commit";
touch "${FAKE_TEMP_LOCAL_REPOSITORY}"/remote-files{4,5,6}.txt
run git_auto_commit
assert_failure;
assert_line "::error::Repository is in detached HEAD state. Please make sure you check out a branch. Adjust the `ref` input accordingly."
}
@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 "it shows warning message if any deprecated options are used" {
INPUT_SKIP_FETCH=true
INPUT_SKIP_CHECKOUT=true
INPUT_CREATE_BRANCH=true
run git_auto_commit
assert_success
assert_line "::warning::git-auto-commit: skip_fetch has been removed in v6. It does not have any effect anymore."
assert_line "::warning::git-auto-commit: skip_checkout has been removed in v6. It does not have any effect anymore."
assert_line "::warning::git-auto-commit: create_branch has been removed in v6. It does not have any effect anymore."
}

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.0:
version "1.11.0"
resolved "https://registry.yarnpkg.com/bats/-/bats-1.11.0.tgz#40281f021f5befcc10da54ed5674aa5b181f4953"
integrity sha512-qiKdnS4ID3bJ1MaEOKuZe12R4w+t+psJF0ICj+UdkiHBBoObPMHv8xmD3w6F4a5qwUyZUHS+413lxENBNy8xcQ==