mirror of
https://github.com/stefanzweifel/git-auto-commit-action.git
synced 2026-01-12 12:18:26 +00:00
Compare commits
93 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
04702edda4 | ||
|
|
1e49d5001f | ||
|
|
65c56779c9 | ||
|
|
547c1409ce | ||
|
|
8fa7f5a3c5 | ||
|
|
28e16e8177 | ||
|
|
698fd76863 | ||
|
|
c40819ab3b | ||
|
|
d7ee275235 | ||
|
|
e8684eb0cd | ||
|
|
19497011bb | ||
|
|
a88dc49508 | ||
|
|
a531deca6b | ||
|
|
acbe8b15bf | ||
|
|
d1854850ec | ||
|
|
e9f84b936b | ||
|
|
d2e5cae4c6 | ||
|
|
858005f1b9 | ||
|
|
9a4902607d | ||
|
|
d330c718ba | ||
|
|
5fe35a088d | ||
|
|
2da8d963b4 | ||
|
|
7ddc571aec | ||
|
|
01d77ca6cb | ||
|
|
6371fedd09 | ||
|
|
f9017b24ee | ||
|
|
66f124b8c2 | ||
|
|
778341af66 | ||
|
|
33b203d92a | ||
|
|
a82d80a75f | ||
|
|
3cc016cfc8 | ||
|
|
ddb7ae4159 | ||
|
|
b001e5f0ff | ||
|
|
6494dc61d3 | ||
|
|
76180511d9 | ||
|
|
ae114628ea | ||
|
|
3058f91afb | ||
|
|
8ddf02de71 | ||
|
|
e7955f713c | ||
|
|
739fd03b2d | ||
|
|
af302a9c63 | ||
|
|
b863ae1933 | ||
|
|
adb37b5a29 | ||
|
|
8480c68cbb | ||
|
|
4f8f3ad16e | ||
|
|
11a6e5f38f | ||
|
|
35d037abf5 | ||
|
|
bf425dc136 | ||
|
|
cfd6ac4a3b | ||
|
|
19379b46c9 | ||
|
|
12e100dacb | ||
|
|
2ac10431a8 | ||
|
|
4db797a961 | ||
|
|
e256565ae5 | ||
|
|
8a23be4b32 | ||
|
|
ed295bd35a | ||
|
|
bd434eed48 | ||
|
|
1666a49083 | ||
|
|
1d986f74dd | ||
|
|
ad56d4eb46 | ||
|
|
9fa4cb99cf | ||
|
|
cec27bde37 | ||
|
|
244febd79d | ||
|
|
c86fa26bed | ||
|
|
e35726034b | ||
|
|
e348103e90 | ||
|
|
032ffbefae | ||
|
|
0b492c0d95 | ||
|
|
050015d406 | ||
|
|
573710f3d0 | ||
|
|
e961da7576 | ||
|
|
ac8823709a | ||
|
|
be823a7e51 | ||
|
|
55a82ca24f | ||
|
|
18157e6f3b | ||
|
|
7d779d0067 | ||
|
|
efd424db0f | ||
|
|
5f3fa8aed3 | ||
|
|
ee5525316d | ||
|
|
4b8a201e31 | ||
|
|
896cc0d225 | ||
|
|
7f171889c8 | ||
|
|
76f415fb30 | ||
|
|
3e796a0146 | ||
|
|
e833d4f211 | ||
|
|
0aca01a1ef | ||
|
|
03fddc470c | ||
|
|
ef7ed32535 | ||
|
|
9062db8404 | ||
|
|
80052f0645 | ||
|
|
3b8231379d | ||
|
|
d9307b5e8c | ||
|
|
aa2cec9c08 |
13
.github/ISSUE_TEMPLATE/bug.yaml
vendored
13
.github/ISSUE_TEMPLATE/bug.yaml
vendored
@@ -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.
|
||||
|
||||
---
|
||||
|
||||
@@ -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.
|
||||
|
||||
2
.github/ISSUE_TEMPLATE/config.yml
vendored
2
.github/ISSUE_TEMPLATE/config.yml
vendored
@@ -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.'
|
||||
|
||||
4
.github/workflows/git-auto-commit.yml
vendored
4
.github/workflows/git-auto-commit.yml
vendored
@@ -16,7 +16,9 @@ jobs:
|
||||
contents: write
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v6
|
||||
with:
|
||||
ref: ${{ github.head_ref }}
|
||||
|
||||
- name: Use git-auto-commit-action
|
||||
id: "auto-commit-action"
|
||||
|
||||
4
.github/workflows/linter.yml
vendored
4
.github/workflows/linter.yml
vendored
@@ -9,10 +9,10 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout Code
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: Lint Code Base
|
||||
uses: github/super-linter@v5
|
||||
uses: github/super-linter@v7
|
||||
env:
|
||||
VALIDATE_ALL_CODEBASE: false
|
||||
VALIDATE_MARKDOWN: false
|
||||
|
||||
2
.github/workflows/tests.yml
vendored
2
.github/workflows/tests.yml
vendored
@@ -11,7 +11,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v6
|
||||
|
||||
- name: Install testing dependencies
|
||||
run: yarn install
|
||||
|
||||
4
.github/workflows/update-changelog.yaml
vendored
4
.github/workflows/update-changelog.yaml
vendored
@@ -16,7 +16,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
ref: master
|
||||
|
||||
@@ -27,7 +27,7 @@ jobs:
|
||||
latest-version: ${{ github.event.release.name }}
|
||||
|
||||
- name: Commit updated CHANGELOG
|
||||
uses: stefanzweifel/git-auto-commit-action@v5
|
||||
uses: stefanzweifel/git-auto-commit-action@v7
|
||||
with:
|
||||
branch: master
|
||||
commit_message: Update CHANGELOG
|
||||
|
||||
83
CHANGELOG.md
83
CHANGELOG.md
@@ -5,10 +5,91 @@ 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/v7.0.0...HEAD)
|
||||
|
||||
> 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
|
||||
|
||||
### 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.
|
||||
|
||||
121
README.md
121
README.md
@@ -19,7 +19,7 @@ Adding git-auto-commit to your Workflow only takes a couple lines of code.
|
||||
2. Add the following step at the end of your job, after other steps that might add or change files.
|
||||
|
||||
```yaml
|
||||
- uses: stefanzweifel/git-auto-commit-action@v5
|
||||
- uses: stefanzweifel/git-auto-commit-action@v7
|
||||
```
|
||||
|
||||
Your Workflow should look similar to this example.
|
||||
@@ -39,12 +39,15 @@ jobs:
|
||||
contents: write
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v5
|
||||
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
|
||||
- uses: stefanzweifel/git-auto-commit-action@v7
|
||||
```
|
||||
|
||||
> [!NOTE]
|
||||
@@ -53,15 +56,14 @@ jobs:
|
||||
The following is an extended example with all available options.
|
||||
|
||||
```yaml
|
||||
- uses: stefanzweifel/git-auto-commit-action@v5
|
||||
- uses: stefanzweifel/git-auto-commit-action@v7
|
||||
with:
|
||||
# Optional. Commit message for the created commit.
|
||||
# Defaults to "Apply automatic changes"
|
||||
commit_message: Automated Change
|
||||
|
||||
# Optional. Local and remote branch name where commit is going to be pushed
|
||||
# to. Defaults to the current branch.
|
||||
# You might need to set `create_branch: true` if the branch does not exist.
|
||||
# Optional. Remote branch name where commit is going to be pushed to.
|
||||
# Defaults to the current branch.
|
||||
branch: feature-123
|
||||
|
||||
# Optional. Options used by `git-commit`.
|
||||
@@ -82,11 +84,16 @@ 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.
|
||||
tagging_message: 'v1.0.0'
|
||||
# Optional. Tag name to be created in the local repository and
|
||||
# pushed to the remote repository on the defined branch.
|
||||
# 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
|
||||
# dirty. See https://git-scm.com/docs/git-status#_options
|
||||
@@ -109,12 +116,19 @@ The following is an extended example with all available options.
|
||||
# Optional. Skip internal call to `git checkout`
|
||||
skip_checkout: true
|
||||
|
||||
# Optional. Skip internal call to `git push`
|
||||
skip_push: 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 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.
|
||||
@@ -144,14 +158,14 @@ jobs:
|
||||
contents: write
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v5
|
||||
with:
|
||||
ref: ${{ github.head_ref }}
|
||||
|
||||
- name: Run php-cs-fixer
|
||||
uses: docker://oskarstark/php-cs-fixer-ga
|
||||
|
||||
- uses: stefanzweifel/git-auto-commit-action@v5
|
||||
- uses: stefanzweifel/git-auto-commit-action@v7
|
||||
with:
|
||||
commit_message: Apply php-cs-fixer changes
|
||||
```
|
||||
@@ -166,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.
|
||||
- `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.**
|
||||
|
||||
### Example
|
||||
|
||||
```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 }}
|
||||
with:
|
||||
commit_message: Apply php-cs-fixer changes
|
||||
@@ -204,11 +219,11 @@ If this Action doesn't work for your workflow, check out [EndBug/add-and-commit]
|
||||
|
||||
### 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:
|
||||
|
||||
```yaml
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v5
|
||||
with:
|
||||
ref: ${{ github.head_ref }}
|
||||
```
|
||||
@@ -226,15 +241,22 @@ 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.
|
||||
|
||||
```yaml
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v5
|
||||
with:
|
||||
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.
|
||||
@@ -265,17 +287,38 @@ The example below can be used as a starting point to generate a multiline commit
|
||||
# Quick and dirty step to get rid of the temporary file holding the commit message
|
||||
- run: rm -rf commitmessage.txt
|
||||
|
||||
- uses: stefanzweifel/git-auto-commit-action@v5
|
||||
- uses: stefanzweifel/git-auto-commit-action@v7
|
||||
id: commit
|
||||
with:
|
||||
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@v7
|
||||
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
|
||||
|
||||
@@ -331,7 +374,7 @@ jobs:
|
||||
contents: write
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v5
|
||||
with:
|
||||
# Checkout the fork/head-repository and push changes to the fork.
|
||||
# If you skip this, the base repository will be checked out and changes
|
||||
@@ -345,7 +388,7 @@ jobs:
|
||||
- name: Run php-cs-fixer
|
||||
uses: docker://oskarstark/php-cs-fixer-ga
|
||||
|
||||
- uses: stefanzweifel/git-auto-commit-action@v5
|
||||
- uses: stefanzweifel/git-auto-commit-action@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/).
|
||||
@@ -380,7 +423,7 @@ The steps in your workflow might look like this:
|
||||
echo "message=$(git log -1 --pretty=%s)" >> $GITHUB_OUTPUT
|
||||
echo "author=$(git log -1 --pretty=\"%an <%ae>\")" >> $GITHUB_OUTPUT
|
||||
|
||||
- uses: stefanzweifel/git-auto-commit-action@v5
|
||||
- uses: stefanzweifel/git-auto-commit-action@v7
|
||||
with:
|
||||
commit_author: ${{ steps.last-commit.outputs.author }}
|
||||
commit_message: ${{ steps.last-commit.outputs.message }}
|
||||
@@ -403,27 +446,41 @@ 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
|
||||
- uses: actions/checkout@v5
|
||||
with:
|
||||
token: ${{ secrets.PAT }}
|
||||
# We pass the "PAT" secret to the checkout action; if no PAT secret is available to the workflow runner (eg. Dependabot) we fall back to the default "GITHUB_TOKEN".
|
||||
token: ${{ secrets.PAT || secrets.GITHUB_TOKEN }}
|
||||
```
|
||||
You can learn more about Personal Access Token in the [GitHub documentation](https://docs.github.com/en/github/authenticating-to-github/creating-a-personal-access-token).
|
||||
|
||||
|
||||
> [!TIP]
|
||||
> If you're working in an organisation, and you don't want to create the PAT from your personal account, we recommend using a bot-account for such tokens.
|
||||
|
||||
If you go the "force pushes" route, you have to enable force pushes to a protected branch (see [documentation](https://help.github.com/en/github/administering-a-repository/enabling-force-pushes-to-a-protected-branch)) and update your Workflow to use force push like this.
|
||||
|
||||
```yaml
|
||||
- uses: stefanzweifel/git-auto-commit-action@v5
|
||||
- uses: stefanzweifel/git-auto-commit-action@v7
|
||||
with:
|
||||
commit_message: Apply php-cs-fixer changes
|
||||
push_options: --force
|
||||
@@ -453,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.
|
||||
|
||||
```yaml
|
||||
- uses: stefanzweifel/git-auto-commit-action@v5
|
||||
- uses: stefanzweifel/git-auto-commit-action@v7
|
||||
with:
|
||||
file_pattern: '*.md'
|
||||
disable_globbing: true
|
||||
@@ -481,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 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).)
|
||||
|
||||
## Credits
|
||||
|
||||
17
UPGRADING.md
Normal file
17
UPGRADING.md
Normal 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`
|
||||
|
||||
21
action.yml
21
action.yml
@@ -43,9 +43,13 @@ 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>
|
||||
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:
|
||||
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
|
||||
default: ''
|
||||
push_options:
|
||||
@@ -64,24 +68,35 @@ inputs:
|
||||
description: Skip the call to git-checkout.
|
||||
required: false
|
||||
default: false
|
||||
skip_push:
|
||||
description: Skip the call to git-push.
|
||||
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.
|
||||
default: false
|
||||
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
|
||||
|
||||
|
||||
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'
|
||||
using: 'node24'
|
||||
main: 'index.js'
|
||||
|
||||
branding:
|
||||
|
||||
@@ -31,7 +31,16 @@ _main() {
|
||||
|
||||
_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"
|
||||
|
||||
@@ -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)";
|
||||
# shellcheck disable=SC2086
|
||||
gitStatus="$(git status -s $INPUT_STATUS_OPTIONS -- ${INPUT_FILE_PATTERN_EXPANDED:+${INPUT_FILE_PATTERN_EXPANDED[@]}})";
|
||||
if [ $? -ne 0 ]; then
|
||||
_log "error" "git-status failed with:<$gitStatusMessage>";
|
||||
[ -n "$gitStatus" ]
|
||||
}
|
||||
|
||||
_check_if_is_git_repository() {
|
||||
if [ -d ".git" ]; then
|
||||
_log "debug" "Repository found.";
|
||||
else
|
||||
_log "error" "Not a git repository. Please make sure to run this action in a git repository. Adjust the `repository` input if necessary.";
|
||||
exit 1;
|
||||
fi
|
||||
[ -n "$gitStatus" ]
|
||||
}
|
||||
|
||||
_check_if_repository_is_in_detached_state() {
|
||||
if [ -z "$(git symbolic-ref HEAD)" ]
|
||||
then
|
||||
_log "warning" "Repository is in a detached HEAD state. git-auto-commit will likely handle this automatically. To avoid it, check out a branch using the ref option in actions/checkout.";
|
||||
else
|
||||
_log "debug" "Repository is on a branch.";
|
||||
fi
|
||||
}
|
||||
|
||||
_switch_to_branch() {
|
||||
@@ -100,6 +123,7 @@ _switch_to_branch() {
|
||||
if "$INPUT_SKIP_FETCH"; then
|
||||
_log "debug" "git-fetch will not be executed.";
|
||||
else
|
||||
_log "debug" "git-fetch will be executed.";
|
||||
git fetch --depth=1;
|
||||
fi
|
||||
|
||||
@@ -107,6 +131,7 @@ _switch_to_branch() {
|
||||
if "$INPUT_SKIP_CHECKOUT"; then
|
||||
_log "debug" "git-checkout will not be executed.";
|
||||
else
|
||||
_log "debug" "git-checkout will be executed.";
|
||||
# Create new local branch if `create_branch`-input is true
|
||||
if "$INPUT_CREATE_BRANCH"; then
|
||||
# shellcheck disable=SC2086
|
||||
@@ -151,18 +176,27 @@ _local_commit() {
|
||||
}
|
||||
|
||||
_tag_commit() {
|
||||
echo "INPUT_TAG_NAME: ${INPUT_TAG_NAME}"
|
||||
echo "INPUT_TAGGING_MESSAGE: ${INPUT_TAGGING_MESSAGE}"
|
||||
|
||||
if [ -n "$INPUT_TAGGING_MESSAGE" ]
|
||||
then
|
||||
_log "debug" "Create tag $INPUT_TAGGING_MESSAGE";
|
||||
git -c user.name="$INPUT_COMMIT_USER_NAME" -c user.email="$INPUT_COMMIT_USER_EMAIL" tag -a "$INPUT_TAGGING_MESSAGE" -m "$INPUT_TAGGING_MESSAGE";
|
||||
if [ -n "$INPUT_TAG_NAME" ] || [ -n "$INPUT_TAGGING_MESSAGE" ]; then
|
||||
INTERNAL_TAG=${INPUT_TAG_NAME:-$INPUT_TAGGING_MESSAGE}
|
||||
INTERNAL_TAGGING_MESSAGE=${INPUT_TAGGING_MESSAGE:-$INPUT_TAG_NAME}
|
||||
|
||||
_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
|
||||
echo "No tagging message supplied. No tag will be added.";
|
||||
echo "Neither tag nor tag message is set. No tag will be added.";
|
||||
fi
|
||||
}
|
||||
|
||||
_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}";
|
||||
_log "debug" "Apply push options ${INPUT_PUSH_OPTIONS}";
|
||||
@@ -172,8 +206,8 @@ _push_to_github() {
|
||||
|
||||
if [ -z "$INPUT_BRANCH" ]
|
||||
then
|
||||
# Only add `--tags` option, if `$INPUT_TAGGING_MESSAGE` is set
|
||||
if [ -n "$INPUT_TAGGING_MESSAGE" ]
|
||||
# Only add `--tags` option, if `$INPUT_TAG_NAME` or `$INPUT_TAGGING_MESSAGE` is set
|
||||
if [ -n "$INPUT_TAG_NAME" ] || [ -n "$INPUT_TAGGING_MESSAGE" ]
|
||||
then
|
||||
_log "debug" "git push origin --tags";
|
||||
git push origin --follow-tags --atomic ${INPUT_PUSH_OPTIONS:+"${INPUT_PUSH_OPTIONS_ARRAY[@]}"};
|
||||
|
||||
37
package-lock.json
generated
Normal file
37
package-lock.json
generated
Normal 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
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"devDependencies": {
|
||||
"bats": "^1.11.0",
|
||||
"bats": "^1.13.0",
|
||||
"bats-assert": "ztombol/bats-assert",
|
||||
"bats-support": "ztombol/bats-support"
|
||||
},
|
||||
|
||||
@@ -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}"
|
||||
@@ -31,11 +32,13 @@ setup() {
|
||||
export INPUT_COMMIT_USER_NAME="Test Suite"
|
||||
export INPUT_COMMIT_USER_EMAIL="test@github.com"
|
||||
export INPUT_COMMIT_AUTHOR="Test Suite <test@users.noreply.github.com>"
|
||||
export INPUT_TAG_NAME=""
|
||||
export INPUT_TAGGING_MESSAGE=""
|
||||
export INPUT_PUSH_OPTIONS=""
|
||||
export INPUT_SKIP_DIRTY_CHECK=false
|
||||
export INPUT_SKIP_FETCH=false
|
||||
export INPUT_SKIP_CHECKOUT=false
|
||||
export INPUT_SKIP_PUSH=false
|
||||
export INPUT_DISABLE_GLOBBING=false
|
||||
export INPUT_CREATE_BRANCH=false
|
||||
export INPUT_INTERNAL_GIT_BINARY=git
|
||||
@@ -120,8 +123,9 @@ cat_github_output() {
|
||||
assert_line "INPUT_FILE_PATTERN: ."
|
||||
assert_line "INPUT_COMMIT_OPTIONS: "
|
||||
assert_line "::debug::Apply commit options "
|
||||
assert_line "INPUT_TAG_NAME: "
|
||||
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 "::debug::Apply push options "
|
||||
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_COMMIT_OPTIONS: "
|
||||
assert_line "::debug::Apply commit options "
|
||||
assert_line "INPUT_TAG_NAME: "
|
||||
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 "::debug::Apply push options "
|
||||
assert_line "::debug::Push commit to remote branch ${FAKE_DEFAULT_BRANCH}"
|
||||
@@ -192,7 +197,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 "
|
||||
@@ -291,7 +295,8 @@ cat_github_output() {
|
||||
}
|
||||
|
||||
@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
|
||||
|
||||
@@ -299,13 +304,15 @@ cat_github_output() {
|
||||
|
||||
assert_success
|
||||
|
||||
assert_line "INPUT_TAGGING_MESSAGE: v1.0.0"
|
||||
assert_line "::debug::Create tag v1.0.0"
|
||||
assert_line "INPUT_TAG_NAME: 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 a tag v1.0.0 has been created
|
||||
run git tag
|
||||
assert_output v1.0.0
|
||||
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
|
||||
@@ -346,6 +353,24 @@ cat_github_output() {
|
||||
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" {
|
||||
# Create foo-branch and then immediately switch back to ${FAKE_DEFAULT_BRANCH}
|
||||
git checkout -b foo
|
||||
@@ -386,9 +411,11 @@ cat_github_output() {
|
||||
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_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
|
||||
|
||||
@@ -396,8 +423,8 @@ cat_github_output() {
|
||||
|
||||
assert_success
|
||||
|
||||
assert_line "INPUT_TAGGING_MESSAGE: v2.0.0"
|
||||
assert_line "::debug::Create tag v2.0.0"
|
||||
assert_line "INPUT_TAG_NAME: v2.0.0"
|
||||
assert_line "::debug::Create tag v2.0.0: MyProduct v2.0.0"
|
||||
assert_line "::debug::git push origin --tags"
|
||||
|
||||
# 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" {
|
||||
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
|
||||
|
||||
@@ -445,8 +474,8 @@ cat_github_output() {
|
||||
|
||||
assert_success
|
||||
|
||||
assert_line "INPUT_TAGGING_MESSAGE: v2.0.0"
|
||||
assert_line "::debug::Create tag v2.0.0"
|
||||
assert_line "INPUT_TAG_NAME: v2.0.0"
|
||||
assert_line "::debug::Create tag v2.0.0: MyProduct v2.0.0"
|
||||
assert_line "::debug::git push origin --tags"
|
||||
|
||||
# Assert a tag v2.0.0 has been created
|
||||
@@ -470,7 +499,9 @@ cat_github_output() {
|
||||
git checkout ${FAKE_DEFAULT_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
|
||||
|
||||
@@ -478,8 +509,8 @@ cat_github_output() {
|
||||
|
||||
assert_success
|
||||
|
||||
assert_line "INPUT_TAGGING_MESSAGE: v2.0.0"
|
||||
assert_line "::debug::Create tag v2.0.0"
|
||||
assert_line "INPUT_TAG_NAME: 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 a tag v2.0.0 has been created
|
||||
@@ -578,9 +609,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"
|
||||
@@ -590,27 +620,28 @@ cat_github_output() {
|
||||
|
||||
touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt
|
||||
|
||||
INPUT_SKIP_CHECKOUT=true
|
||||
|
||||
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"
|
||||
@@ -620,6 +651,8 @@ cat_github_output() {
|
||||
|
||||
touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt
|
||||
|
||||
INPUT_SKIP_CHECKOUT=true
|
||||
|
||||
run git_auto_commit
|
||||
|
||||
assert_success
|
||||
@@ -629,15 +662,19 @@ cat_github_output() {
|
||||
assert_line "INPUT_FILE_PATTERN: ."
|
||||
assert_line "INPUT_COMMIT_OPTIONS: "
|
||||
assert_line "::debug::Apply commit options "
|
||||
assert_line "INPUT_TAG_NAME: "
|
||||
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 "::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,50 +683,7 @@ 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" {
|
||||
|
||||
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" {
|
||||
|
||||
@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 +700,7 @@ cat_github_output() {
|
||||
cd $FAKE_LOCAL_REPOSITORY
|
||||
|
||||
INPUT_BRANCH="existing-remote-branch"
|
||||
INPUT_CREATE_BRANCH=true
|
||||
INPUT_SKIP_CHECKOUT=true
|
||||
|
||||
run git branch
|
||||
refute_line --partial "existing-remote-branch"
|
||||
@@ -727,20 +721,22 @@ cat_github_output() {
|
||||
assert_line "INPUT_FILE_PATTERN: ."
|
||||
assert_line "INPUT_COMMIT_OPTIONS: "
|
||||
assert_line "::debug::Apply commit options "
|
||||
assert_line "INPUT_TAG_NAME: "
|
||||
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 "::debug::Apply push options "
|
||||
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 +746,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 and skip_checkout is set to true" {
|
||||
# Create `existing-remote-branch` on remote with changes the local repository does not yet have
|
||||
cd $FAKE_TEMP_LOCAL_REPOSITORY
|
||||
git checkout -b "existing-remote-branch"
|
||||
@@ -767,7 +763,7 @@ cat_github_output() {
|
||||
cd $FAKE_LOCAL_REPOSITORY
|
||||
|
||||
INPUT_BRANCH="existing-remote-branch"
|
||||
INPUT_CREATE_BRANCH=true
|
||||
INPUT_SKIP_CHECKOUT=true
|
||||
|
||||
run git branch
|
||||
refute_line --partial "existing-remote-branch"
|
||||
@@ -782,23 +778,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 and SKIP_CHECKOUT is used" {
|
||||
# Create `new-branch` on remote with changes the local repository does not yet have
|
||||
cd $FAKE_TEMP_LOCAL_REPOSITORY
|
||||
|
||||
@@ -817,8 +814,9 @@ cat_github_output() {
|
||||
cd $FAKE_LOCAL_REPOSITORY
|
||||
|
||||
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.
|
||||
run git branch
|
||||
refute_line --partial "new-branch"
|
||||
@@ -830,16 +828,12 @@ 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 a pushed branch tip is behind its remote"
|
||||
}
|
||||
|
||||
@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 "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 +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 "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
|
||||
@@ -1060,8 +1054,9 @@ cat_github_output() {
|
||||
assert_line "INPUT_FILE_PATTERN: ."
|
||||
assert_line "INPUT_COMMIT_OPTIONS: "
|
||||
assert_line "::debug::Apply commit options "
|
||||
assert_line "INPUT_TAG_NAME: "
|
||||
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 "::debug::Apply push options "
|
||||
assert_line "::debug::Push commit to remote branch ${FAKE_DEFAULT_BRANCH}"
|
||||
@@ -1123,5 +1118,406 @@ 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 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
|
||||
}
|
||||
|
||||
16
yarn.lock
16
yarn.lock
@@ -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==
|
||||
Reference in New Issue
Block a user