mirror of
https://github.com/stefanzweifel/git-auto-commit-action.git
synced 2026-01-11 12:08:25 +00:00
Compare commits
56 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
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 | ||
|
|
ed295bd35a | ||
|
|
bd434eed48 | ||
|
|
1666a49083 | ||
|
|
1d986f74dd | ||
|
|
ad56d4eb46 | ||
|
|
9fa4cb99cf | ||
|
|
cec27bde37 | ||
|
|
244febd79d | ||
|
|
7f171889c8 | ||
|
|
76f415fb30 | ||
|
|
3e796a0146 | ||
|
|
e833d4f211 | ||
|
|
0aca01a1ef | ||
|
|
03fddc470c | ||
|
|
ef7ed32535 | ||
|
|
9062db8404 | ||
|
|
80052f0645 | ||
|
|
3b8231379d | ||
|
|
d9307b5e8c | ||
|
|
aa2cec9c08 |
4
.github/workflows/git-auto-commit.yml
vendored
4
.github/workflows/git-auto-commit.yml
vendored
@@ -16,7 +16,9 @@ jobs:
|
|||||||
contents: write
|
contents: write
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
|
with:
|
||||||
|
ref: ${{ github.head_ref }}
|
||||||
|
|
||||||
- name: Use git-auto-commit-action
|
- name: Use git-auto-commit-action
|
||||||
id: "auto-commit-action"
|
id: "auto-commit-action"
|
||||||
|
|||||||
2
.github/workflows/linter.yml
vendored
2
.github/workflows/linter.yml
vendored
@@ -9,7 +9,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout Code
|
- name: Checkout Code
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
|
|
||||||
- name: Lint Code Base
|
- name: Lint Code Base
|
||||||
uses: github/super-linter@v7
|
uses: github/super-linter@v7
|
||||||
|
|||||||
2
.github/workflows/tests.yml
vendored
2
.github/workflows/tests.yml
vendored
@@ -11,7 +11,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
|
|
||||||
- name: Install testing dependencies
|
- name: Install testing dependencies
|
||||||
run: yarn install
|
run: yarn install
|
||||||
|
|||||||
4
.github/workflows/update-changelog.yaml
vendored
4
.github/workflows/update-changelog.yaml
vendored
@@ -16,7 +16,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
with:
|
with:
|
||||||
ref: master
|
ref: master
|
||||||
|
|
||||||
@@ -27,7 +27,7 @@ jobs:
|
|||||||
latest-version: ${{ github.event.release.name }}
|
latest-version: ${{ github.event.release.name }}
|
||||||
|
|
||||||
- name: Commit updated CHANGELOG
|
- name: Commit updated CHANGELOG
|
||||||
uses: stefanzweifel/git-auto-commit-action@v5
|
uses: stefanzweifel/git-auto-commit-action@v7
|
||||||
with:
|
with:
|
||||||
branch: master
|
branch: master
|
||||||
commit_message: Update CHANGELOG
|
commit_message: Update CHANGELOG
|
||||||
|
|||||||
33
CHANGELOG.md
33
CHANGELOG.md
@@ -5,10 +5,41 @@ All notable changes to this project will be documented in this file.
|
|||||||
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
|
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
|
||||||
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
|
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
|
||||||
|
|
||||||
## [Unreleased](https://github.com/stefanzweifel/git-auto-commit-action/compare/v5.1.0...HEAD)
|
## [Unreleased](https://github.com/stefanzweifel/git-auto-commit-action/compare/v6.0.1...HEAD)
|
||||||
|
|
||||||
> TBD
|
> TBD
|
||||||
|
|
||||||
|
## [v6.0.1](https://github.com/stefanzweifel/git-auto-commit-action/compare/v6.0.0...v6.0.1) - 2025-06-11
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Disable Check if Repo is in Detached State ([#379](https://github.com/stefanzweifel/git-auto-commit-action/pull/379)) [@stefanzweifel](https://github.com/@stefanzweifel)
|
||||||
|
|
||||||
|
## [v6.0.0](https://github.com/stefanzweifel/git-auto-commit-action/compare/v5.2.0...v6.0.0) - 2025-06-10
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- Throw error early if repository is in a detached state ([#357](https://github.com/stefanzweifel/git-auto-commit-action/pull/357))
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Fix PAT instructions with Dependabot ([#376](https://github.com/stefanzweifel/git-auto-commit-action/pull/376)) [@Dreamsorcerer](https://github.com/@Dreamsorcerer)
|
||||||
|
|
||||||
|
### Removed
|
||||||
|
|
||||||
|
- Remove support for `create_branch`, `skip_checkout`, `skip_Fetch` ([#314](https://github.com/stefanzweifel/git-auto-commit-action/pull/314))
|
||||||
|
|
||||||
|
## [v5.2.0](https://github.com/stefanzweifel/git-auto-commit-action/compare/v5.1.0...v5.2.0) - 2025-04-19
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- Add `create_git_tag_only` option to skip commiting and always create a git-tag. ([#364](https://github.com/stefanzweifel/git-auto-commit-action/pull/364)) [@zMynxx](https://github.com/@zMynxx)
|
||||||
|
- Add Test for `create_git_tag_only` feature ([#367](https://github.com/stefanzweifel/git-auto-commit-action/pull/367)) [@stefanzweifel](https://github.com/@stefanzweifel)
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- docs: Update README.md per #354 ([#361](https://github.com/stefanzweifel/git-auto-commit-action/pull/361)) [@rasa](https://github.com/@rasa)
|
||||||
|
|
||||||
## [v5.1.0](https://github.com/stefanzweifel/git-auto-commit-action/compare/v5.0.1...v5.1.0) - 2025-01-11
|
## [v5.1.0](https://github.com/stefanzweifel/git-auto-commit-action/compare/v5.0.1...v5.1.0) - 2025-01-11
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
|||||||
64
README.md
64
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.
|
2. Add the following step at the end of your job, after other steps that might add or change files.
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- uses: stefanzweifel/git-auto-commit-action@v5
|
- uses: stefanzweifel/git-auto-commit-action@v7
|
||||||
```
|
```
|
||||||
|
|
||||||
Your Workflow should look similar to this example.
|
Your Workflow should look similar to this example.
|
||||||
@@ -39,7 +39,7 @@ jobs:
|
|||||||
contents: write
|
contents: write
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
with:
|
with:
|
||||||
ref: ${{ github.head_ref }}
|
ref: ${{ github.head_ref }}
|
||||||
|
|
||||||
@@ -47,7 +47,7 @@ jobs:
|
|||||||
# …
|
# …
|
||||||
|
|
||||||
# Commit all changed files back to the repository
|
# Commit all changed files back to the repository
|
||||||
- uses: stefanzweifel/git-auto-commit-action@v5
|
- uses: stefanzweifel/git-auto-commit-action@v7
|
||||||
```
|
```
|
||||||
|
|
||||||
> [!NOTE]
|
> [!NOTE]
|
||||||
@@ -56,15 +56,14 @@ jobs:
|
|||||||
The following is an extended example with all available options.
|
The following is an extended example with all available options.
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- uses: stefanzweifel/git-auto-commit-action@v5
|
- uses: stefanzweifel/git-auto-commit-action@v7
|
||||||
with:
|
with:
|
||||||
# Optional. Commit message for the created commit.
|
# Optional. Commit message for the created commit.
|
||||||
# Defaults to "Apply automatic changes"
|
# Defaults to "Apply automatic changes"
|
||||||
commit_message: Automated Change
|
commit_message: Automated Change
|
||||||
|
|
||||||
# Optional. Local and remote branch name where commit is going to be pushed
|
# Optional. Remote branch name where commit is going to be pushed to.
|
||||||
# to. Defaults to the current branch.
|
# Defaults to the current branch.
|
||||||
# You might need to set `create_branch: true` if the branch does not exist.
|
|
||||||
branch: feature-123
|
branch: feature-123
|
||||||
|
|
||||||
# Optional. Options used by `git-commit`.
|
# Optional. Options used by `git-commit`.
|
||||||
@@ -86,10 +85,15 @@ The following is an extended example with all available options.
|
|||||||
commit_user_name: My GitHub Actions Bot # defaults to "github-actions[bot]"
|
commit_user_name: My GitHub Actions Bot # defaults to "github-actions[bot]"
|
||||||
commit_user_email: my-github-actions-bot@example.org # defaults to "41898282+github-actions[bot]@users.noreply.github.com"
|
commit_user_email: my-github-actions-bot@example.org # defaults to "41898282+github-actions[bot]@users.noreply.github.com"
|
||||||
commit_author: Author <actions@github.com> # defaults to "username <numeric_id+username@users.noreply.github.com>", where "numeric_id" and "username" belong 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 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. Tag name being created in the local repository and
|
# Optional. Message to annotate the created tag with.
|
||||||
# pushed to remote repository and 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.
|
||||||
tagging_message: 'v1.0.0'
|
tagging_message: 'Codename "Sunshine"'
|
||||||
|
|
||||||
# Optional. Option used by `git-status` to determine if the repository is
|
# Optional. Option used by `git-status` to determine if the repository is
|
||||||
# dirty. See https://git-scm.com/docs/git-status#_options
|
# dirty. See https://git-scm.com/docs/git-status#_options
|
||||||
@@ -105,10 +109,10 @@ The following is an extended example with all available options.
|
|||||||
|
|
||||||
# Optional. Disable dirty check and always try to create a commit and push
|
# Optional. Disable dirty check and always try to create a commit and push
|
||||||
skip_dirty_check: true
|
skip_dirty_check: true
|
||||||
|
|
||||||
# Optional. Skip internal call to `git fetch`
|
# Optional. Skip internal call to `git fetch`
|
||||||
skip_fetch: true
|
skip_fetch: true
|
||||||
|
|
||||||
# Optional. Skip internal call to `git checkout`
|
# Optional. Skip internal call to `git checkout`
|
||||||
skip_checkout: true
|
skip_checkout: true
|
||||||
|
|
||||||
@@ -120,7 +124,7 @@ The following is an extended example with all available options.
|
|||||||
create_branch: true
|
create_branch: true
|
||||||
|
|
||||||
# Optional. Creates a new tag and pushes it to remote without creating a commit.
|
# Optional. Creates a new tag and pushes it to remote without creating a commit.
|
||||||
# Skips dirty check and changed files. Must be used with `tagging_message`.
|
# Skips dirty check and changed files. Must be used in combination with `tag` and `tagging_message`.
|
||||||
create_git_tag_only: false
|
create_git_tag_only: false
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -151,14 +155,14 @@ jobs:
|
|||||||
contents: write
|
contents: write
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
with:
|
with:
|
||||||
ref: ${{ github.head_ref }}
|
ref: ${{ github.head_ref }}
|
||||||
|
|
||||||
- name: Run php-cs-fixer
|
- name: Run php-cs-fixer
|
||||||
uses: docker://oskarstark/php-cs-fixer-ga
|
uses: docker://oskarstark/php-cs-fixer-ga
|
||||||
|
|
||||||
- uses: stefanzweifel/git-auto-commit-action@v5
|
- uses: stefanzweifel/git-auto-commit-action@v7
|
||||||
with:
|
with:
|
||||||
commit_message: Apply php-cs-fixer changes
|
commit_message: Apply php-cs-fixer changes
|
||||||
```
|
```
|
||||||
@@ -180,7 +184,7 @@ You can use these outputs to trigger other Actions in your Workflow run based on
|
|||||||
### Example
|
### Example
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- uses: stefanzweifel/git-auto-commit-action@v5
|
- uses: stefanzweifel/git-auto-commit-action@v7
|
||||||
id: auto-commit-action #mandatory for the output to show up in ${{ steps }}
|
id: auto-commit-action #mandatory for the output to show up in ${{ steps }}
|
||||||
with:
|
with:
|
||||||
commit_message: Apply php-cs-fixer changes
|
commit_message: Apply php-cs-fixer changes
|
||||||
@@ -216,7 +220,7 @@ You must use `action/checkout@v2` or later versions to check out the repository.
|
|||||||
In non-`push` events, such as `pull_request`, make sure to specify the `ref` to check out:
|
In non-`push` events, such as `pull_request`, make sure to specify the `ref` to check out:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
with:
|
with:
|
||||||
ref: ${{ github.head_ref }}
|
ref: ${{ github.head_ref }}
|
||||||
```
|
```
|
||||||
@@ -234,7 +238,7 @@ You can change this by creating a new [Personal Access Token (PAT)](https://gith
|
|||||||
storing the token as a secret in your repository and then passing the new token to the [`actions/checkout`](https://github.com/actions/checkout#usage) Action step.
|
storing the token as a secret in your repository and then passing the new token to the [`actions/checkout`](https://github.com/actions/checkout#usage) Action step.
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
with:
|
with:
|
||||||
token: ${{ secrets.PAT }}
|
token: ${{ secrets.PAT }}
|
||||||
```
|
```
|
||||||
@@ -280,7 +284,7 @@ The example below can be used as a starting point to generate a multiline commit
|
|||||||
# Quick and dirty step to get rid of the temporary file holding the commit message
|
# Quick and dirty step to get rid of the temporary file holding the commit message
|
||||||
- run: rm -rf commitmessage.txt
|
- run: rm -rf commitmessage.txt
|
||||||
|
|
||||||
- uses: stefanzweifel/git-auto-commit-action@v5
|
- uses: stefanzweifel/git-auto-commit-action@v7
|
||||||
id: commit
|
id: commit
|
||||||
with:
|
with:
|
||||||
commit_message: ${{ steps.commit_message_step.outputs.commit_message }}
|
commit_message: ${{ steps.commit_message_step.outputs.commit_message }}
|
||||||
@@ -304,7 +308,7 @@ As git-auto-commit by default does not use **your** username and email when crea
|
|||||||
git_commit_gpgsign: true
|
git_commit_gpgsign: true
|
||||||
|
|
||||||
- name: "Commit and push changes"
|
- name: "Commit and push changes"
|
||||||
uses: stefanzweifel/git-auto-commit-action@v5
|
uses: stefanzweifel/git-auto-commit-action@v7
|
||||||
with:
|
with:
|
||||||
commit_author: "${{ steps.import-gpg.outputs.name }} <${{ steps.import-gpg.outputs.email }}>"
|
commit_author: "${{ steps.import-gpg.outputs.name }} <${{ steps.import-gpg.outputs.email }}>"
|
||||||
commit_user_name: ${{ steps.import-gpg.outputs.name }}
|
commit_user_name: ${{ steps.import-gpg.outputs.name }}
|
||||||
@@ -367,7 +371,7 @@ jobs:
|
|||||||
contents: write
|
contents: write
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
with:
|
with:
|
||||||
# Checkout the fork/head-repository and push changes to the fork.
|
# Checkout the fork/head-repository and push changes to the fork.
|
||||||
# If you skip this, the base repository will be checked out and changes
|
# If you skip this, the base repository will be checked out and changes
|
||||||
@@ -381,7 +385,7 @@ jobs:
|
|||||||
- name: Run php-cs-fixer
|
- name: Run php-cs-fixer
|
||||||
uses: docker://oskarstark/php-cs-fixer-ga
|
uses: docker://oskarstark/php-cs-fixer-ga
|
||||||
|
|
||||||
- uses: stefanzweifel/git-auto-commit-action@v5
|
- uses: stefanzweifel/git-auto-commit-action@v7
|
||||||
```
|
```
|
||||||
|
|
||||||
For more information about running Actions on forks, see [this announcement from GitHub](https://github.blog/2020-08-03-github-actions-improvements-for-fork-and-pull-request-workflows/).
|
For more information about running Actions on forks, see [this announcement from GitHub](https://github.blog/2020-08-03-github-actions-improvements-for-fork-and-pull-request-workflows/).
|
||||||
@@ -416,7 +420,7 @@ The steps in your workflow might look like this:
|
|||||||
echo "message=$(git log -1 --pretty=%s)" >> $GITHUB_OUTPUT
|
echo "message=$(git log -1 --pretty=%s)" >> $GITHUB_OUTPUT
|
||||||
echo "author=$(git log -1 --pretty=\"%an <%ae>\")" >> $GITHUB_OUTPUT
|
echo "author=$(git log -1 --pretty=\"%an <%ae>\")" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
- uses: stefanzweifel/git-auto-commit-action@v5
|
- uses: stefanzweifel/git-auto-commit-action@v7
|
||||||
with:
|
with:
|
||||||
commit_author: ${{ steps.last-commit.outputs.author }}
|
commit_author: ${{ steps.last-commit.outputs.author }}
|
||||||
commit_message: ${{ steps.last-commit.outputs.message }}
|
commit_message: ${{ steps.last-commit.outputs.message }}
|
||||||
@@ -459,19 +463,21 @@ If you create a personal access token (classic), apply the `repo` and `workflow`
|
|||||||
If you create a fine-grained personal access token, apply the `Contents`-permissions.
|
If you create a fine-grained personal access token, apply the `Contents`-permissions.
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
with:
|
with:
|
||||||
token: ${{ secrets.PAT }}
|
# We pass the "PAT" secret to the checkout action; if no PAT secret is available to the workflow runner (eg. Dependabot) we fall back to the default "GITHUB_TOKEN".
|
||||||
|
token: ${{ secrets.PAT || secrets.GITHUB_TOKEN }}
|
||||||
```
|
```
|
||||||
You can learn more about Personal Access Token in the [GitHub documentation](https://docs.github.com/en/github/authenticating-to-github/creating-a-personal-access-token).
|
You can learn more about Personal Access Token in the [GitHub documentation](https://docs.github.com/en/github/authenticating-to-github/creating-a-personal-access-token).
|
||||||
|
|
||||||
|
|
||||||
> [!TIP]
|
> [!TIP]
|
||||||
> If you're working in an organisation, and you don't want to create the PAT from your personal account, we recommend using a bot-account for such tokens.
|
> If you're working in an organisation, and you don't want to create the PAT from your personal account, we recommend using a bot-account for such tokens.
|
||||||
|
|
||||||
If you go the "force pushes" route, you have to enable force pushes to a protected branch (see [documentation](https://help.github.com/en/github/administering-a-repository/enabling-force-pushes-to-a-protected-branch)) and update your Workflow to use force push like this.
|
If you go the "force pushes" route, you have to enable force pushes to a protected branch (see [documentation](https://help.github.com/en/github/administering-a-repository/enabling-force-pushes-to-a-protected-branch)) and update your Workflow to use force push like this.
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- uses: stefanzweifel/git-auto-commit-action@v5
|
- uses: stefanzweifel/git-auto-commit-action@v7
|
||||||
with:
|
with:
|
||||||
commit_message: Apply php-cs-fixer changes
|
commit_message: Apply php-cs-fixer changes
|
||||||
push_options: --force
|
push_options: --force
|
||||||
@@ -501,7 +507,7 @@ This is due to the fact, that the `*.md`-glob is expanded before sending it to `
|
|||||||
To fix this add `disable_globbing: true` to your Workflow.
|
To fix this add `disable_globbing: true` to your Workflow.
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- uses: stefanzweifel/git-auto-commit-action@v5
|
- uses: stefanzweifel/git-auto-commit-action@v7
|
||||||
with:
|
with:
|
||||||
file_pattern: '*.md'
|
file_pattern: '*.md'
|
||||||
disable_globbing: true
|
disable_globbing: true
|
||||||
@@ -529,7 +535,7 @@ yarn test
|
|||||||
|
|
||||||
We use [SemVer](http://semver.org/) for versioning. For the versions available, see the [tags on this repository](https://github.com/stefanzweifel/git-auto-commit-action/tags).
|
We use [SemVer](http://semver.org/) for versioning. For the versions available, see the [tags on this repository](https://github.com/stefanzweifel/git-auto-commit-action/tags).
|
||||||
|
|
||||||
We also provide major version tags to make it easier to always use the latest release of a major version. For example, you can use `stefanzweifel/git-auto-commit-action@v5` to always use the latest release of the current major version.
|
We also provide major version tags to make it easier to always use the latest release of a major version. For example, you can use `stefanzweifel/git-auto-commit-action@v7` to always use the latest release of the current major version.
|
||||||
(More information about this [here](https://help.github.com/en/actions/building-actions/about-actions#versioning-your-action).)
|
(More information about this [here](https://help.github.com/en/actions/building-actions/about-actions#versioning-your-action).)
|
||||||
|
|
||||||
## Credits
|
## Credits
|
||||||
|
|||||||
17
UPGRADING.md
Normal file
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`
|
||||||
|
|
||||||
@@ -44,8 +44,12 @@ inputs:
|
|||||||
description: Value used for the commit author. Defaults to the username of whoever triggered this workflow run.
|
description: Value used for the commit author. Defaults to the username of whoever triggered this workflow run.
|
||||||
required: false
|
required: false
|
||||||
default: ${{ github.actor }} <${{ github.actor_id }}+${{ github.actor }}@users.noreply.github.com>
|
default: ${{ github.actor }} <${{ github.actor_id }}+${{ github.actor }}@users.noreply.github.com>
|
||||||
|
tag_name:
|
||||||
|
description: Tag name used for creating a new git tag with the commit. Keep this empty, if no tag should be created.
|
||||||
|
required: false
|
||||||
|
default: ''
|
||||||
tagging_message:
|
tagging_message:
|
||||||
description: Message used to create a new git tag with the commit. Keep this empty, if no tag should be created.
|
description: Tagging message used for creating a new git tag with the commit. Keep this empty, if no tag should be created.
|
||||||
required: false
|
required: false
|
||||||
default: ''
|
default: ''
|
||||||
push_options:
|
push_options:
|
||||||
@@ -78,6 +82,7 @@ inputs:
|
|||||||
description: Internal use only! Path to git binary used to check if git is available. (Don't change this!)
|
description: Internal use only! Path to git binary used to check if git is available. (Don't change this!)
|
||||||
default: git
|
default: git
|
||||||
|
|
||||||
|
|
||||||
outputs:
|
outputs:
|
||||||
changes_detected:
|
changes_detected:
|
||||||
description: Value is "true", if the repository was dirty and file changes have been detected. Value is "false", if no changes have been detected.
|
description: Value is "true", if the repository was dirty and file changes have been detected. Value is "false", if no changes have been detected.
|
||||||
@@ -87,7 +92,7 @@ outputs:
|
|||||||
description: Value is "true", if a git tag was created using the `create_git_tag_only`-input.
|
description: Value is "true", if a git tag was created using the `create_git_tag_only`-input.
|
||||||
|
|
||||||
runs:
|
runs:
|
||||||
using: 'node20'
|
using: 'node24'
|
||||||
main: 'index.js'
|
main: 'index.js'
|
||||||
|
|
||||||
branding:
|
branding:
|
||||||
|
|||||||
@@ -30,6 +30,11 @@ _main() {
|
|||||||
_check_if_git_is_available
|
_check_if_git_is_available
|
||||||
|
|
||||||
_switch_to_repository
|
_switch_to_repository
|
||||||
|
|
||||||
|
_check_if_is_git_repository
|
||||||
|
|
||||||
|
_check_if_repository_is_in_detached_state
|
||||||
|
|
||||||
if "$INPUT_CREATE_GIT_TAG_ONLY"; then
|
if "$INPUT_CREATE_GIT_TAG_ONLY"; then
|
||||||
_log "debug" "Create git tag only";
|
_log "debug" "Create git tag only";
|
||||||
_set_github_output "create_git_tag_only" "true"
|
_set_github_output "create_git_tag_only" "true"
|
||||||
@@ -90,11 +95,25 @@ _git_is_dirty() {
|
|||||||
gitStatusMessage="$((git status -s $INPUT_STATUS_OPTIONS -- ${INPUT_FILE_PATTERN_EXPANDED:+${INPUT_FILE_PATTERN_EXPANDED[@]}} >/dev/null ) 2>&1)";
|
gitStatusMessage="$((git status -s $INPUT_STATUS_OPTIONS -- ${INPUT_FILE_PATTERN_EXPANDED:+${INPUT_FILE_PATTERN_EXPANDED[@]}} >/dev/null ) 2>&1)";
|
||||||
# shellcheck disable=SC2086
|
# shellcheck disable=SC2086
|
||||||
gitStatus="$(git status -s $INPUT_STATUS_OPTIONS -- ${INPUT_FILE_PATTERN_EXPANDED:+${INPUT_FILE_PATTERN_EXPANDED[@]}})";
|
gitStatus="$(git status -s $INPUT_STATUS_OPTIONS -- ${INPUT_FILE_PATTERN_EXPANDED:+${INPUT_FILE_PATTERN_EXPANDED[@]}})";
|
||||||
if [ $? -ne 0 ]; then
|
[ -n "$gitStatus" ]
|
||||||
_log "error" "git-status failed with:<$gitStatusMessage>";
|
}
|
||||||
|
|
||||||
|
_check_if_is_git_repository() {
|
||||||
|
if [ -d ".git" ]; then
|
||||||
|
_log "debug" "Repository found.";
|
||||||
|
else
|
||||||
|
_log "error" "Not a git repository. Please make sure to run this action in a git repository. Adjust the `repository` input if necessary.";
|
||||||
exit 1;
|
exit 1;
|
||||||
fi
|
fi
|
||||||
[ -n "$gitStatus" ]
|
}
|
||||||
|
|
||||||
|
_check_if_repository_is_in_detached_state() {
|
||||||
|
if [ -z "$(git symbolic-ref HEAD)" ]
|
||||||
|
then
|
||||||
|
_log "warning" "Repository is in a detached HEAD state. git-auto-commit will likely handle this automatically. To avoid it, check out a branch using the ref option in actions/checkout.";
|
||||||
|
else
|
||||||
|
_log "debug" "Repository is on a branch.";
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
_switch_to_branch() {
|
_switch_to_branch() {
|
||||||
@@ -104,6 +123,7 @@ _switch_to_branch() {
|
|||||||
if "$INPUT_SKIP_FETCH"; then
|
if "$INPUT_SKIP_FETCH"; then
|
||||||
_log "debug" "git-fetch will not be executed.";
|
_log "debug" "git-fetch will not be executed.";
|
||||||
else
|
else
|
||||||
|
_log "debug" "git-fetch will be executed.";
|
||||||
git fetch --depth=1;
|
git fetch --depth=1;
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -111,6 +131,7 @@ _switch_to_branch() {
|
|||||||
if "$INPUT_SKIP_CHECKOUT"; then
|
if "$INPUT_SKIP_CHECKOUT"; then
|
||||||
_log "debug" "git-checkout will not be executed.";
|
_log "debug" "git-checkout will not be executed.";
|
||||||
else
|
else
|
||||||
|
_log "debug" "git-checkout will be executed.";
|
||||||
# Create new local branch if `create_branch`-input is true
|
# Create new local branch if `create_branch`-input is true
|
||||||
if "$INPUT_CREATE_BRANCH"; then
|
if "$INPUT_CREATE_BRANCH"; then
|
||||||
# shellcheck disable=SC2086
|
# shellcheck disable=SC2086
|
||||||
@@ -155,19 +176,24 @@ _local_commit() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_tag_commit() {
|
_tag_commit() {
|
||||||
|
echo "INPUT_TAG_NAME: ${INPUT_TAG_NAME}"
|
||||||
echo "INPUT_TAGGING_MESSAGE: ${INPUT_TAGGING_MESSAGE}"
|
echo "INPUT_TAGGING_MESSAGE: ${INPUT_TAGGING_MESSAGE}"
|
||||||
|
|
||||||
if [ -n "$INPUT_TAGGING_MESSAGE" ]
|
if [ -n "$INPUT_TAG_NAME" ] || [ -n "$INPUT_TAGGING_MESSAGE" ]; then
|
||||||
then
|
INTERNAL_TAG=${INPUT_TAG_NAME:-$INPUT_TAGGING_MESSAGE}
|
||||||
_log "debug" "Create tag $INPUT_TAGGING_MESSAGE";
|
INTERNAL_TAGGING_MESSAGE=${INPUT_TAGGING_MESSAGE:-$INPUT_TAG_NAME}
|
||||||
git -c user.name="$INPUT_COMMIT_USER_NAME" -c user.email="$INPUT_COMMIT_USER_EMAIL" tag -a "$INPUT_TAGGING_MESSAGE" -m "$INPUT_TAGGING_MESSAGE";
|
|
||||||
|
_log "debug" "Create tag $INTERNAL_TAG: $INTERNAL_TAGGING_MESSAGE"
|
||||||
|
git -c user.name="$INPUT_COMMIT_USER_NAME" -c user.email="$INPUT_COMMIT_USER_EMAIL" tag -a "$INTERNAL_TAG" -m "$INTERNAL_TAGGING_MESSAGE"
|
||||||
else
|
else
|
||||||
echo "No tagging message supplied. No tag will be added.";
|
echo "Neither tag nor tag message is set. No tag will be added.";
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
_push_to_github() {
|
_push_to_github() {
|
||||||
|
|
||||||
|
echo "INPUT_BRANCH value: $INPUT_BRANCH";
|
||||||
|
|
||||||
echo "INPUT_PUSH_OPTIONS: ${INPUT_PUSH_OPTIONS}";
|
echo "INPUT_PUSH_OPTIONS: ${INPUT_PUSH_OPTIONS}";
|
||||||
_log "debug" "Apply push options ${INPUT_PUSH_OPTIONS}";
|
_log "debug" "Apply push options ${INPUT_PUSH_OPTIONS}";
|
||||||
|
|
||||||
@@ -176,8 +202,8 @@ _push_to_github() {
|
|||||||
|
|
||||||
if [ -z "$INPUT_BRANCH" ]
|
if [ -z "$INPUT_BRANCH" ]
|
||||||
then
|
then
|
||||||
# Only add `--tags` option, if `$INPUT_TAGGING_MESSAGE` is set
|
# Only add `--tags` option, if `$INPUT_TAG_NAME` or `$INPUT_TAGGING_MESSAGE` is set
|
||||||
if [ -n "$INPUT_TAGGING_MESSAGE" ]
|
if [ -n "$INPUT_TAG_NAME" ] || [ -n "$INPUT_TAGGING_MESSAGE" ]
|
||||||
then
|
then
|
||||||
_log "debug" "git push origin --tags";
|
_log "debug" "git push origin --tags";
|
||||||
git push origin --follow-tags --atomic ${INPUT_PUSH_OPTIONS:+"${INPUT_PUSH_OPTIONS_ARRAY[@]}"};
|
git push origin --follow-tags --atomic ${INPUT_PUSH_OPTIONS:+"${INPUT_PUSH_OPTIONS_ARRAY[@]}"};
|
||||||
|
|||||||
6
package-lock.json
generated
6
package-lock.json
generated
@@ -5,13 +5,15 @@
|
|||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"bats": "^1.11.1",
|
"bats": "^1.12.0",
|
||||||
"bats-assert": "ztombol/bats-assert",
|
"bats-assert": "ztombol/bats-assert",
|
||||||
"bats-support": "ztombol/bats-support"
|
"bats-support": "ztombol/bats-support"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/bats": {
|
"node_modules/bats": {
|
||||||
"version": "1.11.1",
|
"version": "1.12.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/bats/-/bats-1.12.0.tgz",
|
||||||
|
"integrity": "sha512-1HTv2n+fjn3bmY9SNDgmzS6bjoKtVlSK2pIHON5aSA2xaqGkZFoCCWP46/G6jm9zZ7MCi84mD+3Byw4t3KGwBg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"bin": {
|
"bin": {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"bats": "^1.11.1",
|
"bats": "^1.12.0",
|
||||||
"bats-assert": "ztombol/bats-assert",
|
"bats-assert": "ztombol/bats-assert",
|
||||||
"bats-support": "ztombol/bats-support"
|
"bats-support": "ztombol/bats-support"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ setup() {
|
|||||||
export INPUT_COMMIT_USER_NAME="Test Suite"
|
export INPUT_COMMIT_USER_NAME="Test Suite"
|
||||||
export INPUT_COMMIT_USER_EMAIL="test@github.com"
|
export INPUT_COMMIT_USER_EMAIL="test@github.com"
|
||||||
export INPUT_COMMIT_AUTHOR="Test Suite <test@users.noreply.github.com>"
|
export INPUT_COMMIT_AUTHOR="Test Suite <test@users.noreply.github.com>"
|
||||||
|
export INPUT_TAG_NAME=""
|
||||||
export INPUT_TAGGING_MESSAGE=""
|
export INPUT_TAGGING_MESSAGE=""
|
||||||
export INPUT_PUSH_OPTIONS=""
|
export INPUT_PUSH_OPTIONS=""
|
||||||
export INPUT_SKIP_DIRTY_CHECK=false
|
export INPUT_SKIP_DIRTY_CHECK=false
|
||||||
@@ -121,8 +122,9 @@ cat_github_output() {
|
|||||||
assert_line "INPUT_FILE_PATTERN: ."
|
assert_line "INPUT_FILE_PATTERN: ."
|
||||||
assert_line "INPUT_COMMIT_OPTIONS: "
|
assert_line "INPUT_COMMIT_OPTIONS: "
|
||||||
assert_line "::debug::Apply commit options "
|
assert_line "::debug::Apply commit options "
|
||||||
|
assert_line "INPUT_TAG_NAME: "
|
||||||
assert_line "INPUT_TAGGING_MESSAGE: "
|
assert_line "INPUT_TAGGING_MESSAGE: "
|
||||||
assert_line "No tagging message supplied. No tag will be added."
|
assert_line "Neither tag nor tag message is set. No tag will be added."
|
||||||
assert_line "INPUT_PUSH_OPTIONS: "
|
assert_line "INPUT_PUSH_OPTIONS: "
|
||||||
assert_line "::debug::Apply push options "
|
assert_line "::debug::Apply push options "
|
||||||
assert_line "::debug::Push commit to remote branch ${FAKE_DEFAULT_BRANCH}"
|
assert_line "::debug::Push commit to remote branch ${FAKE_DEFAULT_BRANCH}"
|
||||||
@@ -144,8 +146,9 @@ cat_github_output() {
|
|||||||
assert_line "INPUT_FILE_PATTERN: ."
|
assert_line "INPUT_FILE_PATTERN: ."
|
||||||
assert_line "INPUT_COMMIT_OPTIONS: "
|
assert_line "INPUT_COMMIT_OPTIONS: "
|
||||||
assert_line "::debug::Apply commit options "
|
assert_line "::debug::Apply commit options "
|
||||||
|
assert_line "INPUT_TAG_NAME: "
|
||||||
assert_line "INPUT_TAGGING_MESSAGE: "
|
assert_line "INPUT_TAGGING_MESSAGE: "
|
||||||
assert_line "No tagging message supplied. No tag will be added."
|
assert_line "Neither tag nor tag message is set. No tag will be added."
|
||||||
assert_line "INPUT_PUSH_OPTIONS: "
|
assert_line "INPUT_PUSH_OPTIONS: "
|
||||||
assert_line "::debug::Apply push options "
|
assert_line "::debug::Apply push options "
|
||||||
assert_line "::debug::Push commit to remote branch ${FAKE_DEFAULT_BRANCH}"
|
assert_line "::debug::Push commit to remote branch ${FAKE_DEFAULT_BRANCH}"
|
||||||
@@ -193,7 +196,6 @@ cat_github_output() {
|
|||||||
assert_failure
|
assert_failure
|
||||||
|
|
||||||
assert_line "INPUT_REPOSITORY value: ${INPUT_REPOSITORY}"
|
assert_line "INPUT_REPOSITORY value: ${INPUT_REPOSITORY}"
|
||||||
assert_line "INPUT_BRANCH value: ${FAKE_DEFAULT_BRANCH}"
|
|
||||||
assert_line "INPUT_FILE_PATTERN: ."
|
assert_line "INPUT_FILE_PATTERN: ."
|
||||||
assert_line "INPUT_COMMIT_OPTIONS: "
|
assert_line "INPUT_COMMIT_OPTIONS: "
|
||||||
assert_line "::debug::Apply commit options "
|
assert_line "::debug::Apply commit options "
|
||||||
@@ -292,7 +294,8 @@ cat_github_output() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@test "It creates a tag with the commit" {
|
@test "It creates a tag with the commit" {
|
||||||
INPUT_TAGGING_MESSAGE="v1.0.0"
|
INPUT_TAG_NAME="v1.0.0"
|
||||||
|
INPUT_TAGGING_MESSAGE="MyProduct v1.0.0"
|
||||||
|
|
||||||
touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt
|
touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt
|
||||||
|
|
||||||
@@ -300,13 +303,15 @@ cat_github_output() {
|
|||||||
|
|
||||||
assert_success
|
assert_success
|
||||||
|
|
||||||
assert_line "INPUT_TAGGING_MESSAGE: v1.0.0"
|
assert_line "INPUT_TAG_NAME: v1.0.0"
|
||||||
assert_line "::debug::Create tag v1.0.0"
|
assert_line "INPUT_TAGGING_MESSAGE: MyProduct v1.0.0"
|
||||||
|
|
||||||
|
assert_line "::debug::Create tag v1.0.0: MyProduct v1.0.0"
|
||||||
assert_line "::debug::Push commit to remote branch ${FAKE_DEFAULT_BRANCH}"
|
assert_line "::debug::Push commit to remote branch ${FAKE_DEFAULT_BRANCH}"
|
||||||
|
|
||||||
# Assert a tag v1.0.0 has been created
|
# Assert a tag v1.0.0 has been created
|
||||||
run git tag
|
run git tag -n
|
||||||
assert_output v1.0.0
|
assert_output 'v1.0.0 MyProduct v1.0.0'
|
||||||
|
|
||||||
run git ls-remote --tags --refs
|
run git ls-remote --tags --refs
|
||||||
assert_output --partial refs/tags/v1.0.0
|
assert_output --partial refs/tags/v1.0.0
|
||||||
@@ -387,9 +392,11 @@ cat_github_output() {
|
|||||||
assert_equal $current_sha $remote_sha
|
assert_equal $current_sha $remote_sha
|
||||||
}
|
}
|
||||||
|
|
||||||
@test "It uses existing branch when INPUT_BRANCH is empty and INPUT_TAGGING_MESSAGE is set" {
|
@test "It uses existing branch when INPUT_BRANCH is empty and INPUT_TAG is set" {
|
||||||
INPUT_BRANCH=""
|
INPUT_BRANCH=""
|
||||||
INPUT_TAGGING_MESSAGE="v2.0.0"
|
INPUT_TAG_NAME="v2.0.0"
|
||||||
|
INPUT_TAGGING_MESSAGE="MyProduct v2.0.0"
|
||||||
|
|
||||||
|
|
||||||
touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt
|
touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt
|
||||||
|
|
||||||
@@ -397,8 +404,8 @@ cat_github_output() {
|
|||||||
|
|
||||||
assert_success
|
assert_success
|
||||||
|
|
||||||
assert_line "INPUT_TAGGING_MESSAGE: v2.0.0"
|
assert_line "INPUT_TAG_NAME: v2.0.0"
|
||||||
assert_line "::debug::Create tag v2.0.0"
|
assert_line "::debug::Create tag v2.0.0: MyProduct v2.0.0"
|
||||||
assert_line "::debug::git push origin --tags"
|
assert_line "::debug::git push origin --tags"
|
||||||
|
|
||||||
# Assert a tag v2.0.0 has been created
|
# Assert a tag v2.0.0 has been created
|
||||||
@@ -438,7 +445,9 @@ cat_github_output() {
|
|||||||
|
|
||||||
@test "It pushes generated commit and tag to remote and actually updates the commit shas" {
|
@test "It pushes generated commit and tag to remote and actually updates the commit shas" {
|
||||||
INPUT_BRANCH=""
|
INPUT_BRANCH=""
|
||||||
INPUT_TAGGING_MESSAGE="v2.0.0"
|
INPUT_TAG_NAME="v2.0.0"
|
||||||
|
INPUT_TAGGING_MESSAGE="MyProduct v2.0.0"
|
||||||
|
|
||||||
|
|
||||||
touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt
|
touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt
|
||||||
|
|
||||||
@@ -446,8 +455,8 @@ cat_github_output() {
|
|||||||
|
|
||||||
assert_success
|
assert_success
|
||||||
|
|
||||||
assert_line "INPUT_TAGGING_MESSAGE: v2.0.0"
|
assert_line "INPUT_TAG_NAME: v2.0.0"
|
||||||
assert_line "::debug::Create tag v2.0.0"
|
assert_line "::debug::Create tag v2.0.0: MyProduct v2.0.0"
|
||||||
assert_line "::debug::git push origin --tags"
|
assert_line "::debug::git push origin --tags"
|
||||||
|
|
||||||
# Assert a tag v2.0.0 has been created
|
# Assert a tag v2.0.0 has been created
|
||||||
@@ -471,7 +480,9 @@ cat_github_output() {
|
|||||||
git checkout ${FAKE_DEFAULT_BRANCH}
|
git checkout ${FAKE_DEFAULT_BRANCH}
|
||||||
|
|
||||||
INPUT_BRANCH="a-new-branch"
|
INPUT_BRANCH="a-new-branch"
|
||||||
INPUT_TAGGING_MESSAGE="v2.0.0"
|
INPUT_TAG_NAME="v2.0.0"
|
||||||
|
INPUT_TAGGING_MESSAGE="MyProduct v2.0.0"
|
||||||
|
|
||||||
|
|
||||||
touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt
|
touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt
|
||||||
|
|
||||||
@@ -479,8 +490,8 @@ cat_github_output() {
|
|||||||
|
|
||||||
assert_success
|
assert_success
|
||||||
|
|
||||||
assert_line "INPUT_TAGGING_MESSAGE: v2.0.0"
|
assert_line "INPUT_TAG_NAME: v2.0.0"
|
||||||
assert_line "::debug::Create tag v2.0.0"
|
assert_line "::debug::Create tag v2.0.0: MyProduct v2.0.0"
|
||||||
assert_line "::debug::Push commit to remote branch a-new-branch"
|
assert_line "::debug::Push commit to remote branch a-new-branch"
|
||||||
|
|
||||||
# Assert a tag v2.0.0 has been created
|
# Assert a tag v2.0.0 has been created
|
||||||
@@ -579,9 +590,8 @@ cat_github_output() {
|
|||||||
assert_line "changes_detected=true"
|
assert_line "changes_detected=true"
|
||||||
}
|
}
|
||||||
|
|
||||||
@test "script fails to push commit to new branch that does not exist yet" {
|
@test "It pushes commit to new branch that does not exist yet" {
|
||||||
INPUT_BRANCH="not-existend-branch"
|
INPUT_BRANCH="not-existend-branch"
|
||||||
INPUT_CREATE_BRANCH=false
|
|
||||||
|
|
||||||
run git branch
|
run git branch
|
||||||
refute_line --partial "not-existend-branch"
|
refute_line --partial "not-existend-branch"
|
||||||
@@ -591,27 +601,28 @@ cat_github_output() {
|
|||||||
|
|
||||||
touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt
|
touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt
|
||||||
|
|
||||||
|
INPUT_SKIP_CHECKOUT=true
|
||||||
|
|
||||||
run git_auto_commit
|
run git_auto_commit
|
||||||
|
|
||||||
assert_failure
|
assert_success
|
||||||
|
|
||||||
assert_line "INPUT_REPOSITORY value: ${INPUT_REPOSITORY}"
|
assert_line "INPUT_REPOSITORY value: ${INPUT_REPOSITORY}"
|
||||||
assert_line "INPUT_BRANCH value: not-existend-branch"
|
assert_line "INPUT_BRANCH value: not-existend-branch"
|
||||||
assert_line "fatal: invalid reference: not-existend-branch"
|
|
||||||
|
|
||||||
run git branch
|
run git branch
|
||||||
|
assert_line --partial ${FAKE_DEFAULT_BRANCH}
|
||||||
refute_line --partial "not-existend-branch"
|
refute_line --partial "not-existend-branch"
|
||||||
|
|
||||||
run git branch -r
|
run git branch -r
|
||||||
refute_line --partial "origin/not-existend-branch"
|
assert_line --partial "origin/not-existend-branch"
|
||||||
|
|
||||||
run cat_github_output
|
run cat_github_output
|
||||||
assert_line "changes_detected=true"
|
assert_line "changes_detected=true"
|
||||||
}
|
}
|
||||||
|
|
||||||
@test "It creates new local branch and pushes the new branch to remote" {
|
@test "It does not create new local branch and pushes the commit to a new branch on remote" {
|
||||||
INPUT_BRANCH="not-existend-branch"
|
INPUT_BRANCH="not-existend-branch"
|
||||||
INPUT_CREATE_BRANCH=true
|
|
||||||
|
|
||||||
run git branch
|
run git branch
|
||||||
refute_line --partial "not-existend-branch"
|
refute_line --partial "not-existend-branch"
|
||||||
@@ -621,6 +632,8 @@ cat_github_output() {
|
|||||||
|
|
||||||
touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt
|
touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt
|
||||||
|
|
||||||
|
INPUT_SKIP_CHECKOUT=true
|
||||||
|
|
||||||
run git_auto_commit
|
run git_auto_commit
|
||||||
|
|
||||||
assert_success
|
assert_success
|
||||||
@@ -630,15 +643,19 @@ cat_github_output() {
|
|||||||
assert_line "INPUT_FILE_PATTERN: ."
|
assert_line "INPUT_FILE_PATTERN: ."
|
||||||
assert_line "INPUT_COMMIT_OPTIONS: "
|
assert_line "INPUT_COMMIT_OPTIONS: "
|
||||||
assert_line "::debug::Apply commit options "
|
assert_line "::debug::Apply commit options "
|
||||||
|
assert_line "INPUT_TAG_NAME: "
|
||||||
assert_line "INPUT_TAGGING_MESSAGE: "
|
assert_line "INPUT_TAGGING_MESSAGE: "
|
||||||
assert_line "No tagging message supplied. No tag will be added."
|
assert_line "Neither tag nor tag message is set. No tag will be added."
|
||||||
assert_line "INPUT_PUSH_OPTIONS: "
|
assert_line "INPUT_PUSH_OPTIONS: "
|
||||||
assert_line "::debug::Apply push options "
|
assert_line "::debug::Apply push options "
|
||||||
assert_line "::debug::Push commit to remote branch not-existend-branch"
|
assert_line "::debug::Push commit to remote branch not-existend-branch"
|
||||||
|
|
||||||
|
# Assert that local repo is still on default branch and not on new branch.
|
||||||
run git branch
|
run git branch
|
||||||
assert_line --partial "not-existend-branch"
|
assert_line --partial ${FAKE_DEFAULT_BRANCH}
|
||||||
|
refute_line --partial "not-existend-branch"
|
||||||
|
|
||||||
|
# Assert branch has been created on remote
|
||||||
run git branch -r
|
run git branch -r
|
||||||
assert_line --partial "origin/not-existend-branch"
|
assert_line --partial "origin/not-existend-branch"
|
||||||
|
|
||||||
@@ -647,50 +664,7 @@ cat_github_output() {
|
|||||||
assert_line -e "commit_hash=[0-9a-f]{40}$"
|
assert_line -e "commit_hash=[0-9a-f]{40}$"
|
||||||
}
|
}
|
||||||
|
|
||||||
@test "it does not create new local branch if local branch already exists" {
|
@test "It creates new local branch and pushes branch to remote even if the remote branch already exists" {
|
||||||
|
|
||||||
git checkout -b not-existend-remote-branch
|
|
||||||
git checkout ${FAKE_DEFAULT_BRANCH}
|
|
||||||
|
|
||||||
INPUT_BRANCH="not-existend-remote-branch"
|
|
||||||
INPUT_CREATE_BRANCH=true
|
|
||||||
|
|
||||||
run git branch
|
|
||||||
assert_line --partial "not-existend-remote-branch"
|
|
||||||
|
|
||||||
run git branch -r
|
|
||||||
refute_line --partial "origin/not-existend-remote-branch"
|
|
||||||
|
|
||||||
touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt
|
|
||||||
|
|
||||||
run git_auto_commit
|
|
||||||
|
|
||||||
assert_success
|
|
||||||
|
|
||||||
assert_line "INPUT_REPOSITORY value: ${INPUT_REPOSITORY}"
|
|
||||||
assert_line "INPUT_BRANCH value: not-existend-remote-branch"
|
|
||||||
assert_line "INPUT_FILE_PATTERN: ."
|
|
||||||
assert_line "INPUT_COMMIT_OPTIONS: "
|
|
||||||
assert_line "::debug::Apply commit options "
|
|
||||||
assert_line "INPUT_TAGGING_MESSAGE: "
|
|
||||||
assert_line "No tagging message supplied. No tag will be added."
|
|
||||||
assert_line "INPUT_PUSH_OPTIONS: "
|
|
||||||
assert_line "::debug::Apply push options "
|
|
||||||
assert_line "::debug::Push commit to remote branch not-existend-remote-branch"
|
|
||||||
|
|
||||||
run git branch
|
|
||||||
assert_line --partial "not-existend-remote-branch"
|
|
||||||
|
|
||||||
run git branch -r
|
|
||||||
assert_line --partial "origin/not-existend-remote-branch"
|
|
||||||
|
|
||||||
run cat_github_output
|
|
||||||
assert_line "changes_detected=true"
|
|
||||||
assert_line -e "commit_hash=[0-9a-f]{40}$"
|
|
||||||
}
|
|
||||||
|
|
||||||
@test "it creates new local branch and pushes branch to remote even if the remote branch already exists" {
|
|
||||||
|
|
||||||
# Create `existing-remote-branch` on remote with changes the local repository does not yet have
|
# Create `existing-remote-branch` on remote with changes the local repository does not yet have
|
||||||
cd $FAKE_TEMP_LOCAL_REPOSITORY
|
cd $FAKE_TEMP_LOCAL_REPOSITORY
|
||||||
git checkout -b "existing-remote-branch"
|
git checkout -b "existing-remote-branch"
|
||||||
@@ -707,7 +681,7 @@ cat_github_output() {
|
|||||||
cd $FAKE_LOCAL_REPOSITORY
|
cd $FAKE_LOCAL_REPOSITORY
|
||||||
|
|
||||||
INPUT_BRANCH="existing-remote-branch"
|
INPUT_BRANCH="existing-remote-branch"
|
||||||
INPUT_CREATE_BRANCH=true
|
INPUT_SKIP_CHECKOUT=true
|
||||||
|
|
||||||
run git branch
|
run git branch
|
||||||
refute_line --partial "existing-remote-branch"
|
refute_line --partial "existing-remote-branch"
|
||||||
@@ -728,20 +702,22 @@ cat_github_output() {
|
|||||||
assert_line "INPUT_FILE_PATTERN: ."
|
assert_line "INPUT_FILE_PATTERN: ."
|
||||||
assert_line "INPUT_COMMIT_OPTIONS: "
|
assert_line "INPUT_COMMIT_OPTIONS: "
|
||||||
assert_line "::debug::Apply commit options "
|
assert_line "::debug::Apply commit options "
|
||||||
|
assert_line "INPUT_TAG_NAME: "
|
||||||
assert_line "INPUT_TAGGING_MESSAGE: "
|
assert_line "INPUT_TAGGING_MESSAGE: "
|
||||||
assert_line "No tagging message supplied. No tag will be added."
|
assert_line "Neither tag nor tag message is set. No tag will be added."
|
||||||
assert_line "INPUT_PUSH_OPTIONS: "
|
assert_line "INPUT_PUSH_OPTIONS: "
|
||||||
assert_line "::debug::Apply push options "
|
assert_line "::debug::Apply push options "
|
||||||
assert_line "::debug::Push commit to remote branch existing-remote-branch"
|
assert_line "::debug::Push commit to remote branch existing-remote-branch"
|
||||||
|
|
||||||
run git branch
|
run git branch
|
||||||
assert_line --partial "existing-remote-branch"
|
assert_line --partial ${FAKE_DEFAULT_BRANCH}
|
||||||
|
refute_line --partial "existing-remote-branch"
|
||||||
|
|
||||||
run git branch -r
|
run git branch -r
|
||||||
assert_line --partial "origin/existing-remote-branch"
|
assert_line --partial "origin/existing-remote-branch"
|
||||||
|
|
||||||
# Assert that branch "existing-remote-branch" was updated on remote
|
# Assert that branch "existing-remote-branch" was updated on remote
|
||||||
current_sha="$(git rev-parse --verify --short existing-remote-branch)"
|
current_sha="$(git rev-parse --verify --short ${FAKE_DEFAULT_BRANCH})"
|
||||||
remote_sha="$(git rev-parse --verify --short origin/existing-remote-branch)"
|
remote_sha="$(git rev-parse --verify --short origin/existing-remote-branch)"
|
||||||
|
|
||||||
assert_equal $current_sha $remote_sha
|
assert_equal $current_sha $remote_sha
|
||||||
@@ -751,7 +727,7 @@ cat_github_output() {
|
|||||||
assert_line -e "commit_hash=[0-9a-f]{40}$"
|
assert_line -e "commit_hash=[0-9a-f]{40}$"
|
||||||
}
|
}
|
||||||
|
|
||||||
@test "script fails if new local branch is checked out and push fails as remote has newer commits than local" {
|
@test "It fails if local branch is behind remote and when remote has newer commits and skip_checkout is set to true" {
|
||||||
# Create `existing-remote-branch` on remote with changes the local repository does not yet have
|
# Create `existing-remote-branch` on remote with changes the local repository does not yet have
|
||||||
cd $FAKE_TEMP_LOCAL_REPOSITORY
|
cd $FAKE_TEMP_LOCAL_REPOSITORY
|
||||||
git checkout -b "existing-remote-branch"
|
git checkout -b "existing-remote-branch"
|
||||||
@@ -768,7 +744,7 @@ cat_github_output() {
|
|||||||
cd $FAKE_LOCAL_REPOSITORY
|
cd $FAKE_LOCAL_REPOSITORY
|
||||||
|
|
||||||
INPUT_BRANCH="existing-remote-branch"
|
INPUT_BRANCH="existing-remote-branch"
|
||||||
INPUT_CREATE_BRANCH=true
|
INPUT_SKIP_CHECKOUT=true
|
||||||
|
|
||||||
run git branch
|
run git branch
|
||||||
refute_line --partial "existing-remote-branch"
|
refute_line --partial "existing-remote-branch"
|
||||||
@@ -783,23 +759,24 @@ cat_github_output() {
|
|||||||
|
|
||||||
assert_failure
|
assert_failure
|
||||||
|
|
||||||
assert_line "hint: Updates were rejected because the tip of your current branch is behind"
|
assert_line "hint: Updates were rejected because a pushed branch tip is behind its remote"
|
||||||
|
|
||||||
# Assert that branch exists locally and on remote
|
# Assert that branch exists locally and on remote
|
||||||
run git branch
|
run git branch
|
||||||
assert_line --partial "existing-remote-branch"
|
assert_line --partial ${FAKE_DEFAULT_BRANCH}
|
||||||
|
refute_line --partial "existing-remote-branch"
|
||||||
|
|
||||||
run git branch -r
|
run git branch -r
|
||||||
assert_line --partial "origin/existing-remote-branch"
|
assert_line --partial "origin/existing-remote-branch"
|
||||||
|
|
||||||
# Assert that branch "existing-remote-branch" was not updated on remote
|
# Assert that branch "existing-remote-branch" was not updated on remote
|
||||||
current_sha="$(git rev-parse --verify --short existing-remote-branch)"
|
current_sha="$(git rev-parse --verify --short ${FAKE_DEFAULT_BRANCH})"
|
||||||
remote_sha="$(git rev-parse --verify --short origin/existing-remote-branch)"
|
remote_sha="$(git rev-parse --verify --short origin/existing-remote-branch)"
|
||||||
|
|
||||||
refute [assert_equal $current_sha $remote_sha]
|
refute [assert_equal $current_sha $remote_sha]
|
||||||
}
|
}
|
||||||
|
|
||||||
@test "It pushes commit to remote if branch already exists and local repo is behind its remote counterpart" {
|
@test "It fails to push commit to remote if branch already exists and local repo is behind its remote counterpart and SKIP_CHECKOUT is used" {
|
||||||
# Create `new-branch` on remote with changes the local repository does not yet have
|
# Create `new-branch` on remote with changes the local repository does not yet have
|
||||||
cd $FAKE_TEMP_LOCAL_REPOSITORY
|
cd $FAKE_TEMP_LOCAL_REPOSITORY
|
||||||
|
|
||||||
@@ -818,8 +795,9 @@ cat_github_output() {
|
|||||||
cd $FAKE_LOCAL_REPOSITORY
|
cd $FAKE_LOCAL_REPOSITORY
|
||||||
|
|
||||||
INPUT_BRANCH="new-branch"
|
INPUT_BRANCH="new-branch"
|
||||||
|
INPUT_SKIP_CHECKOUT=true
|
||||||
|
|
||||||
# Assert that local remote does not know have "new-branch" locally nor does
|
# Assert that local remote does not have a "new-branch"-branch nor does
|
||||||
# know about the remote branch.
|
# know about the remote branch.
|
||||||
run git branch
|
run git branch
|
||||||
refute_line --partial "new-branch"
|
refute_line --partial "new-branch"
|
||||||
@@ -831,16 +809,12 @@ cat_github_output() {
|
|||||||
|
|
||||||
run git_auto_commit
|
run git_auto_commit
|
||||||
|
|
||||||
assert_success
|
assert_failure
|
||||||
|
|
||||||
assert_line "INPUT_BRANCH value: new-branch"
|
assert_line "INPUT_BRANCH value: new-branch"
|
||||||
assert_line --partial "::debug::Push commit to remote branch new-branch"
|
assert_line --partial "::debug::Push commit to remote branch new-branch"
|
||||||
|
|
||||||
# Assert that branch "new-branch" was updated on remote
|
assert_line --partial "Updates were rejected because a pushed branch tip is behind its remote"
|
||||||
current_sha="$(git rev-parse --verify --short new-branch)"
|
|
||||||
remote_sha="$(git rev-parse --verify --short origin/new-branch)"
|
|
||||||
|
|
||||||
assert_equal $current_sha $remote_sha
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@test "throws fatal error if file pattern includes files that do not exist" {
|
@test "throws fatal error if file pattern includes files that do not exist" {
|
||||||
@@ -1005,7 +979,7 @@ cat_github_output() {
|
|||||||
|
|
||||||
assert_line --partial "Working tree clean. Nothing to commit."
|
assert_line --partial "Working tree clean. Nothing to commit."
|
||||||
assert_line --partial "new-file-2.txt"
|
assert_line --partial "new-file-2.txt"
|
||||||
assert_line --partial "new-file-3.txt"
|
# assert_line --partial "new-file-3.txt"
|
||||||
|
|
||||||
# Changes are not detected
|
# Changes are not detected
|
||||||
run cat_github_output
|
run cat_github_output
|
||||||
@@ -1039,7 +1013,7 @@ cat_github_output() {
|
|||||||
assert_line --partial "warning: in the working copy of 'new-file-2.txt', LF will be replaced by CRLF the next time Git touches it"
|
assert_line --partial "warning: in the working copy of 'new-file-2.txt', LF will be replaced by CRLF the next time Git touches it"
|
||||||
|
|
||||||
assert_line --partial "new-file-2.txt"
|
assert_line --partial "new-file-2.txt"
|
||||||
assert_line --partial "new-file-3.txt"
|
# assert_line --partial "new-file-3.txt"
|
||||||
|
|
||||||
# Changes are detected
|
# Changes are detected
|
||||||
run cat_github_output
|
run cat_github_output
|
||||||
@@ -1061,8 +1035,9 @@ cat_github_output() {
|
|||||||
assert_line "INPUT_FILE_PATTERN: ."
|
assert_line "INPUT_FILE_PATTERN: ."
|
||||||
assert_line "INPUT_COMMIT_OPTIONS: "
|
assert_line "INPUT_COMMIT_OPTIONS: "
|
||||||
assert_line "::debug::Apply commit options "
|
assert_line "::debug::Apply commit options "
|
||||||
|
assert_line "INPUT_TAG_NAME: "
|
||||||
assert_line "INPUT_TAGGING_MESSAGE: "
|
assert_line "INPUT_TAGGING_MESSAGE: "
|
||||||
assert_line "No tagging message supplied. No tag will be added."
|
assert_line "Neither tag nor tag message is set. No tag will be added."
|
||||||
assert_line "INPUT_PUSH_OPTIONS: "
|
assert_line "INPUT_PUSH_OPTIONS: "
|
||||||
assert_line "::debug::Apply push options "
|
assert_line "::debug::Apply push options "
|
||||||
assert_line "::debug::Push commit to remote branch ${FAKE_DEFAULT_BRANCH}"
|
assert_line "::debug::Push commit to remote branch ${FAKE_DEFAULT_BRANCH}"
|
||||||
@@ -1124,12 +1099,32 @@ END
|
|||||||
run git_auto_commit
|
run git_auto_commit
|
||||||
|
|
||||||
assert_failure;
|
assert_failure;
|
||||||
assert_line "::error::git-status failed with:<fatal: not a git repository (or any of the parent directories): .git>"
|
assert_line "::error::Not a git repository. Please make sure to run this action in a git repository. Adjust the `repository` input if necessary."
|
||||||
|
}
|
||||||
|
|
||||||
|
@test "It detects if the repository is in a detached state and logs a warning" {
|
||||||
|
touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt
|
||||||
|
|
||||||
|
run git_auto_commit
|
||||||
|
|
||||||
|
assert_success
|
||||||
|
|
||||||
|
# Bring local repository into a detached state
|
||||||
|
prev_commit=$(git rev-parse HEAD~1);
|
||||||
|
git checkout "$prev_commit";
|
||||||
|
|
||||||
|
touch "${FAKE_TEMP_LOCAL_REPOSITORY}"/remote-files{4,5,6}.txt
|
||||||
|
|
||||||
|
run git_auto_commit
|
||||||
|
|
||||||
|
assert_success;
|
||||||
|
assert_line "::warning::Repository is in a detached HEAD state. git-auto-commit will likely handle this automatically. To avoid it, check out a branch using the ref option in actions/checkout."
|
||||||
}
|
}
|
||||||
|
|
||||||
@test "it creates a tag if create_git_tag_only is set to true and a message has been supplied" {
|
@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_CREATE_GIT_TAG_ONLY=true
|
||||||
INPUT_TAGGING_MESSAGE=v1.0.0
|
INPUT_TAG_NAME=v1.0.0
|
||||||
|
INPUT_TAGGING_MESSAGE="MyProduct v1.0.0"
|
||||||
|
|
||||||
run git_auto_commit
|
run git_auto_commit
|
||||||
|
|
||||||
@@ -1137,8 +1132,8 @@ END
|
|||||||
|
|
||||||
assert_line "::debug::Create git tag only"
|
assert_line "::debug::Create git tag only"
|
||||||
|
|
||||||
assert_line "::debug::Create tag v1.0.0"
|
assert_line "::debug::Create tag v1.0.0: MyProduct v1.0.0"
|
||||||
refute_line "No tagging message supplied. No tag will be added."
|
refute_line "Neither tag nor tag message is set. No tag will be added."
|
||||||
|
|
||||||
assert_line "::debug::Apply push options "
|
assert_line "::debug::Apply push options "
|
||||||
assert_line "::debug::Push commit to remote branch ${FAKE_DEFAULT_BRANCH}"
|
assert_line "::debug::Push commit to remote branch ${FAKE_DEFAULT_BRANCH}"
|
||||||
@@ -1149,8 +1144,8 @@ END
|
|||||||
refute_line -e "commit_hash=[0-9a-f]{40}$"
|
refute_line -e "commit_hash=[0-9a-f]{40}$"
|
||||||
|
|
||||||
# Assert a tag v1.0.0 has been created
|
# Assert a tag v1.0.0 has been created
|
||||||
run git tag
|
run git tag -n
|
||||||
assert_output v1.0.0
|
assert_output 'v1.0.0 MyProduct v1.0.0'
|
||||||
|
|
||||||
run git ls-remote --tags --refs
|
run git ls-remote --tags --refs
|
||||||
assert_output --partial refs/tags/v1.0.0
|
assert_output --partial refs/tags/v1.0.0
|
||||||
@@ -1158,14 +1153,16 @@ END
|
|||||||
|
|
||||||
@test "it output no tagging message supplied if no tagging message is set but create_git_tag_only is set to true" {
|
@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_CREATE_GIT_TAG_ONLY=true
|
||||||
|
INPUT_TAG_NAME=""
|
||||||
INPUT_TAGGING_MESSAGE=""
|
INPUT_TAGGING_MESSAGE=""
|
||||||
|
|
||||||
run git_auto_commit
|
run git_auto_commit
|
||||||
|
|
||||||
assert_success
|
assert_success
|
||||||
|
|
||||||
|
assert_line "INPUT_TAG_NAME: "
|
||||||
assert_line "INPUT_TAGGING_MESSAGE: "
|
assert_line "INPUT_TAGGING_MESSAGE: "
|
||||||
assert_line "No tagging message supplied. No tag will be added."
|
assert_line "Neither tag nor tag message is set. No tag will be added."
|
||||||
assert_line "::debug::Create git tag only"
|
assert_line "::debug::Create git tag only"
|
||||||
|
|
||||||
run cat_github_output
|
run cat_github_output
|
||||||
@@ -1177,3 +1174,331 @@ END
|
|||||||
run git tag
|
run git tag
|
||||||
assert_output ""
|
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
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user