mirror of
https://github.com/stefanzweifel/git-auto-commit-action.git
synced 2026-06-16 16:38:51 +00:00
Compare commits
No commits in common. "master" and "v6" have entirely different histories.
2
.github/ISSUE_TEMPLATE/config.yml
vendored
2
.github/ISSUE_TEMPLATE/config.yml
vendored
@ -5,4 +5,4 @@ contact_links:
|
||||
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/stefanzweifel/git-auto-commit-action/discussions/new?category=ideas
|
||||
about: "Suggest any ideas you have using our discussion forums."
|
||||
about: 'Suggest any ideas you have using our discussion forums.'
|
||||
|
||||
3
.github/SECURITY.md
vendored
3
.github/SECURITY.md
vendored
@ -1,3 +0,0 @@
|
||||
# Security Policy
|
||||
|
||||
If you discover any security related issues, please email stefan@stefanzweifel.dev instead of using the issue tracker.
|
||||
2
.github/workflows/git-auto-commit.yml
vendored
2
.github/workflows/git-auto-commit.yml
vendored
@ -16,7 +16,7 @@ jobs:
|
||||
contents: write
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
ref: ${{ github.head_ref }}
|
||||
|
||||
|
||||
2
.github/workflows/linter.yml
vendored
2
.github/workflows/linter.yml
vendored
@ -9,7 +9,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout Code
|
||||
uses: actions/checkout@v6
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Lint Code Base
|
||||
uses: github/super-linter@v7
|
||||
|
||||
2
.github/workflows/release-drafter.yml
vendored
2
.github/workflows/release-drafter.yml
vendored
@ -15,6 +15,6 @@ jobs:
|
||||
contents: write
|
||||
|
||||
steps:
|
||||
- uses: release-drafter/release-drafter@v7
|
||||
- uses: release-drafter/release-drafter@v6
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
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@v6
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- 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@v6
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
ref: master
|
||||
|
||||
@ -27,7 +27,7 @@ jobs:
|
||||
latest-version: ${{ github.event.release.name }}
|
||||
|
||||
- name: Commit updated CHANGELOG
|
||||
uses: stefanzweifel/git-auto-commit-action@v7
|
||||
uses: stefanzweifel/git-auto-commit-action@v5
|
||||
with:
|
||||
branch: master
|
||||
commit_message: Update CHANGELOG
|
||||
|
||||
39
CHANGELOG.md
39
CHANGELOG.md
@ -5,47 +5,10 @@ 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/v7.1.0...HEAD)
|
||||
## [Unreleased](https://github.com/stefanzweifel/git-auto-commit-action/compare/v6.0.0...HEAD)
|
||||
|
||||
> TBD
|
||||
|
||||
## [v7.1.0](https://github.com/stefanzweifel/git-auto-commit-action/compare/v7.0.0...v7.1.0) - 2025-12-17
|
||||
|
||||
### Added
|
||||
|
||||
- Add skip_push input option ([#401](https://github.com/stefanzweifel/git-auto-commit-action/pull/401)) [@kvanzuijlen](https://github.com/@kvanzuijlen)
|
||||
|
||||
### Changes
|
||||
|
||||
- docs: fix typo in README.md ([#400](https://github.com/stefanzweifel/git-auto-commit-action/pull/400)) [@GideonBear](https://github.com/@GideonBear)
|
||||
|
||||
### Dependency Updates
|
||||
|
||||
- Bump actions/checkout from 5 to 6 ([#399](https://github.com/stefanzweifel/git-auto-commit-action/pull/399)) [@[dependabot[bot]](https://github.com/apps/dependabot)](https://github.com/@[dependabot[bot]](https://github.com/apps/dependabot))
|
||||
- Bump bats from 1.12.0 to 1.13.0 ([#398](https://github.com/stefanzweifel/git-auto-commit-action/pull/398)) [@[dependabot[bot]](https://github.com/apps/dependabot)](https://github.com/@[dependabot[bot]](https://github.com/apps/dependabot))
|
||||
|
||||
## [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
|
||||
|
||||
@ -72,4 +72,5 @@ available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.ht
|
||||
|
||||
[homepage]: https://www.contributor-covenant.org
|
||||
|
||||
For answers to common questions about this code of conduct, see the [Contributor Covenant FAQ](https://www.contributor-covenant.org/faq).
|
||||
For answers to common questions about this code of conduct, see
|
||||
https://www.contributor-covenant.org/faq
|
||||
|
||||
551
EXAMPLES.md
551
EXAMPLES.md
@ -1,551 +0,0 @@
|
||||
# Examples
|
||||
|
||||
This document shows real-world scenarios where `git-auto-commit` is useful, with a working GitHub Actions workflow for each. The scenarios are based on questions and use cases that have come up in the [issues](https://github.com/stefanzweifel/git-auto-commit-action/issues) and [discussions](https://github.com/stefanzweifel/git-auto-commit-action/discussions) of this repository over the years.
|
||||
|
||||
If you have a use case that isn't covered here, [open a discussion](https://github.com/stefanzweifel/git-auto-commit-action/discussions) — we may add it.
|
||||
|
||||
## Table of Contents
|
||||
|
||||
- [Auto-format code on pull requests](#auto-format-code-on-pull-requests)
|
||||
- [Auto-fix lint errors](#auto-fix-lint-errors)
|
||||
- [Update dependency lock files](#update-dependency-lock-files)
|
||||
- [Build and commit compiled assets](#build-and-commit-compiled-assets)
|
||||
- [Auto-generate API documentation](#auto-generate-api-documentation)
|
||||
- [Update README with generated content](#update-readme-with-generated-content)
|
||||
- [Maintain a CHANGELOG](#maintain-a-changelog)
|
||||
- [Sync translations / i18n files](#sync-translations--i18n-files)
|
||||
- [Publish a static site to a separate branch](#publish-a-static-site-to-a-separate-branch)
|
||||
- [Scheduled data refresh](#scheduled-data-refresh)
|
||||
- [Create a release tag without a commit](#create-a-release-tag-without-a-commit)
|
||||
- [Fail the build instead of pushing changes (drift check)](#fail-the-build-instead-of-pushing-changes-drift-check)
|
||||
- [Sign automated commits with GPG](#sign-automated-commits-with-gpg)
|
||||
- [Squash automated changes into the previous commit](#squash-automated-changes-into-the-previous-commit)
|
||||
|
||||
---
|
||||
|
||||
## Auto-format code on pull requests
|
||||
|
||||
**Description:** Run a code formatter (Prettier, php-cs-fixer, Black, gofmt, rustfmt, …) on every pull request and commit the resulting changes back to the contributor's branch. Contributors don't have to think about style; the bot fixes it for them.
|
||||
|
||||
This is the most common use case for this Action. Running it on `pull_request` means the formatter only touches the PR branch — never your default branch directly.
|
||||
|
||||
```yaml
|
||||
name: Format
|
||||
|
||||
on: pull_request
|
||||
|
||||
jobs:
|
||||
prettier:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v5
|
||||
with:
|
||||
ref: ${{ github.head_ref }}
|
||||
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 20
|
||||
|
||||
- run: npx prettier --write .
|
||||
|
||||
- uses: stefanzweifel/git-auto-commit-action@v7
|
||||
with:
|
||||
commit_message: "style: apply prettier formatting"
|
||||
```
|
||||
|
||||
> [!TIP]
|
||||
> If the PR comes from a fork, the Action can only push back if the contributor enabled "Allow edits by maintainers". See the [forks section in the README](README.md#use-in-forks-from-public-repositories) for details.
|
||||
|
||||
---
|
||||
|
||||
## Auto-fix lint errors
|
||||
|
||||
**Description:** Many linters can both report and auto-fix problems (`eslint --fix`, `rubocop -a`, `ruff --fix`, `stylelint --fix`, …). Use the Action to commit the auto-fixed result so reviewers only see the issues that need human judgement.
|
||||
|
||||
```yaml
|
||||
name: Lint and fix
|
||||
|
||||
on: pull_request
|
||||
|
||||
jobs:
|
||||
eslint:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v5
|
||||
with:
|
||||
ref: ${{ github.head_ref }}
|
||||
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 20
|
||||
cache: npm
|
||||
|
||||
- run: npm ci
|
||||
- run: npx eslint . --fix
|
||||
|
||||
- uses: stefanzweifel/git-auto-commit-action@v7
|
||||
with:
|
||||
commit_message: "chore: apply eslint --fix"
|
||||
```
|
||||
|
||||
> [!TIP]
|
||||
> `file_pattern` is intentionally omitted here. If one of several custom patterns does not match a file in the repository, `git add` can fail with a pathspec error. Let the linter decide which files to change, or use a custom pattern that you know exists in your repository.
|
||||
|
||||
---
|
||||
|
||||
## Update dependency lock files
|
||||
|
||||
**Description:** When a dependency tool produces a fresh lock file (`package-lock.json`, `composer.lock`, `Gemfile.lock`, `poetry.lock`, …), commit only the lock file. Pair this with a scheduled job to keep lock files in sync without manual intervention.
|
||||
|
||||
```yaml
|
||||
name: Refresh lock file
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: "0 6 * * 1" # every Monday at 06:00 UTC
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
refresh:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v5
|
||||
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 20
|
||||
|
||||
- run: npm install --package-lock-only
|
||||
|
||||
- uses: stefanzweifel/git-auto-commit-action@v7
|
||||
with:
|
||||
commit_message: "chore(deps): refresh package-lock.json"
|
||||
file_pattern: package-lock.json
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Build and commit compiled assets
|
||||
|
||||
**Description:** For projects that ship a `dist/` folder (libraries, browser extensions, themes), build the assets in CI and commit them so consumers can install directly from the repo without a build step.
|
||||
|
||||
```yaml
|
||||
name: Build dist
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v5
|
||||
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 20
|
||||
cache: npm
|
||||
|
||||
- run: npm ci
|
||||
- run: npm run build
|
||||
|
||||
- uses: stefanzweifel/git-auto-commit-action@v7
|
||||
with:
|
||||
commit_message: "build: update dist/"
|
||||
file_pattern: "dist/**"
|
||||
```
|
||||
|
||||
> [!NOTE]
|
||||
> If `dist/` is in `.gitignore`, the Action will not pick up changes. See the [troubleshooting section in the README](README.md#change-to-file-is-not-detected).
|
||||
|
||||
---
|
||||
|
||||
## Auto-generate API documentation
|
||||
|
||||
**Description:** Tools like TypeDoc, Doxygen, Sphinx, or `cargo doc` generate documentation from source comments. Regenerate on every push to `main` and commit the output so the published docs always match the latest code.
|
||||
|
||||
```yaml
|
||||
name: Docs
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
|
||||
jobs:
|
||||
typedoc:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v5
|
||||
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 20
|
||||
cache: npm
|
||||
|
||||
- run: npm ci
|
||||
- run: npx typedoc --out docs/api src/index.ts
|
||||
|
||||
- uses: stefanzweifel/git-auto-commit-action@v7
|
||||
with:
|
||||
commit_message: "docs: regenerate API reference"
|
||||
file_pattern: "docs/api/**"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Update README with generated content
|
||||
|
||||
**Description:** Many projects keep dynamic sections in the README — a contributor list, a badge gallery, a table of contents, a list of supported plugins. Regenerate them on a schedule (or when a related file changes) and commit the result.
|
||||
|
||||
```yaml
|
||||
name: Update contributors
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: "0 0 * * 0" # weekly
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
contributors:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v5
|
||||
|
||||
- uses: akhilmhdh/contributors-readme-action@v2.3.10
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- uses: stefanzweifel/git-auto-commit-action@v7
|
||||
with:
|
||||
commit_message: "docs: update contributors"
|
||||
file_pattern: README.md
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Maintain a CHANGELOG
|
||||
|
||||
**Description:** Generate or update `CHANGELOG.md` from commit history or release notes after each merge to `main`, and commit it back.
|
||||
|
||||
```yaml
|
||||
name: Update CHANGELOG
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
|
||||
jobs:
|
||||
changelog:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v5
|
||||
with:
|
||||
fetch-depth: 0 # full history so the generator sees all commits
|
||||
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 20
|
||||
|
||||
- run: npx conventional-changelog -p angular -i CHANGELOG.md -s
|
||||
|
||||
- uses: stefanzweifel/git-auto-commit-action@v7
|
||||
with:
|
||||
commit_message: "docs: update CHANGELOG"
|
||||
file_pattern: CHANGELOG.md
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Sync translations / i18n files
|
||||
|
||||
**Description:** When translations are managed in an external service (Crowdin, Lokalise, Weblate) or extracted from source, pull or generate the latest catalogs on a schedule and commit them.
|
||||
|
||||
```yaml
|
||||
name: Sync translations
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: "0 3 * * *" # daily at 03:00 UTC
|
||||
|
||||
jobs:
|
||||
sync:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v5
|
||||
|
||||
- name: Download translations
|
||||
run: ./scripts/pull-translations.sh
|
||||
env:
|
||||
CROWDIN_TOKEN: ${{ secrets.CROWDIN_TOKEN }}
|
||||
|
||||
- uses: stefanzweifel/git-auto-commit-action@v7
|
||||
with:
|
||||
commit_message: "i18n: sync translations from Crowdin"
|
||||
file_pattern: "locales/**/*.json"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Publish a static site to a separate branch
|
||||
|
||||
**Description:** Build a static site on `main` and push the generated output to a `gh-pages` branch so GitHub Pages can serve it. Use a second checkout directory for the publish branch so the source checkout and generated site do not get mixed together.
|
||||
|
||||
Create the `gh-pages` branch once before using this workflow.
|
||||
|
||||
```yaml
|
||||
name: Build site
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v5
|
||||
with:
|
||||
path: source
|
||||
|
||||
- uses: actions/checkout@v5
|
||||
with:
|
||||
ref: gh-pages
|
||||
path: site
|
||||
|
||||
- name: Build site
|
||||
working-directory: source
|
||||
run: ./build-site.sh # produces output in ./public
|
||||
|
||||
- name: Replace publish branch contents
|
||||
run: |
|
||||
find site -mindepth 1 -maxdepth 1 ! -name .git -exec rm -rf {} +
|
||||
cp -R source/public/. site/
|
||||
|
||||
- uses: stefanzweifel/git-auto-commit-action@v7
|
||||
with:
|
||||
repository: site
|
||||
branch: gh-pages
|
||||
commit_message: "site: rebuild from ${{ github.sha }}"
|
||||
```
|
||||
|
||||
> [!NOTE]
|
||||
> For most Pages workflows the official [`actions/deploy-pages`](https://github.com/actions/deploy-pages) is a better fit. Use this approach when you specifically want the build output stored in a branch.
|
||||
|
||||
---
|
||||
|
||||
## Scheduled data refresh
|
||||
|
||||
**Description:** Pull data from an external source on a schedule and commit it. Common examples: tracking statistics, snapshotting an API response, refreshing a cached dataset.
|
||||
|
||||
```yaml
|
||||
name: Refresh stats
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: "0 * * * *" # hourly
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
refresh:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v5
|
||||
|
||||
- run: curl -sSL https://api.example.com/stats.json -o data/stats.json
|
||||
|
||||
- uses: stefanzweifel/git-auto-commit-action@v7
|
||||
with:
|
||||
commit_message: "data: refresh hourly stats"
|
||||
file_pattern: "data/*.json"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Create a release tag without a commit
|
||||
|
||||
**Description:** Sometimes you want to tag the current HEAD as a release without committing any files. Use `create_git_tag_only` together with `tag_name` and `tagging_message`.
|
||||
|
||||
```yaml
|
||||
name: Tag release
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
version:
|
||||
description: "Version to tag (e.g. v1.4.0)"
|
||||
required: true
|
||||
|
||||
jobs:
|
||||
tag:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v5
|
||||
|
||||
- uses: stefanzweifel/git-auto-commit-action@v7
|
||||
with:
|
||||
create_git_tag_only: true
|
||||
tag_name: ${{ inputs.version }}
|
||||
tagging_message: "Release ${{ inputs.version }}"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Fail the build instead of pushing changes (drift check)
|
||||
|
||||
**Description:** Sometimes you don't want a bot to push fixes — you want to fail the build so the contributor fixes them locally. Use the `changes_detected` output as a check: run the formatter, skip branch checkout/fetch/push, and fail if anything changed.
|
||||
|
||||
```yaml
|
||||
name: Format check
|
||||
|
||||
on: pull_request
|
||||
|
||||
jobs:
|
||||
check:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v5
|
||||
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 20
|
||||
|
||||
- run: npx prettier --write .
|
||||
|
||||
- uses: stefanzweifel/git-auto-commit-action@v7
|
||||
id: auto-commit
|
||||
with:
|
||||
skip_checkout: true
|
||||
skip_fetch: true
|
||||
skip_push: true
|
||||
|
||||
- name: Fail if formatting was needed
|
||||
if: steps.auto-commit.outputs.changes_detected == 'true'
|
||||
run: |
|
||||
echo "::error::Code is not formatted. Run 'npx prettier --write .' locally."
|
||||
exit 1
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Sign automated commits with GPG
|
||||
|
||||
**Description:** If your branch protection rules require signed commits, the bot's commits need to be signed too. Import a GPG key first, then tell the Action to use the key's identity as the commit author.
|
||||
|
||||
```yaml
|
||||
name: Format (signed)
|
||||
|
||||
on: pull_request
|
||||
|
||||
jobs:
|
||||
format:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v5
|
||||
with:
|
||||
ref: ${{ github.head_ref }}
|
||||
|
||||
- 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
|
||||
|
||||
- run: npx prettier --write .
|
||||
|
||||
- uses: stefanzweifel/git-auto-commit-action@v7
|
||||
with:
|
||||
commit_message: "style: apply prettier"
|
||||
commit_user_name: ${{ steps.import-gpg.outputs.name }}
|
||||
commit_user_email: ${{ steps.import-gpg.outputs.email }}
|
||||
commit_author: "${{ steps.import-gpg.outputs.name }} <${{ steps.import-gpg.outputs.email }}>"
|
||||
```
|
||||
|
||||
See discussion [#334](https://github.com/stefanzweifel/git-auto-commit-action/discussions/334) for background.
|
||||
|
||||
---
|
||||
|
||||
## Squash automated changes into the previous commit
|
||||
|
||||
**Description:** Avoid noisy "apply automatic changes" commits by amending the last commit instead. Useful when the bot fix is trivial and you don't want a separate entry in the history.
|
||||
|
||||
> [!CAUTION]
|
||||
> Amending rewrites history. Only use this on branches where force-pushing is acceptable (typically PR branches, never `main`).
|
||||
|
||||
```yaml
|
||||
name: Format (amend)
|
||||
|
||||
on: pull_request
|
||||
|
||||
jobs:
|
||||
format:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v5
|
||||
with:
|
||||
ref: ${{ github.head_ref }}
|
||||
fetch-depth: 2 # need previous commit for --amend
|
||||
|
||||
- run: npx prettier --write .
|
||||
|
||||
- name: Read previous commit metadata
|
||||
id: last
|
||||
run: |
|
||||
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@v7
|
||||
with:
|
||||
commit_message: ${{ steps.last.outputs.message }}
|
||||
commit_author: ${{ steps.last.outputs.author }}
|
||||
commit_options: "--amend --no-edit"
|
||||
push_options: "--force"
|
||||
skip_fetch: true
|
||||
```
|
||||
|
||||
See discussion [#159](https://github.com/stefanzweifel/git-auto-commit-action/issues/159#issuecomment-845347950) for details.
|
||||
109
README.md
109
README.md
@ -11,20 +11,15 @@ By default, the commit is made in the name of "GitHub Actions" and co-authored b
|
||||
|
||||
If you want to learn more how this Action works under the hood, check out [this article](https://michaelheap.com/git-auto-commit/) by Michael Heap.
|
||||
|
||||
If your use case is not covered by git-auto-commit, you might want to check out the following alternative Actions:
|
||||
|
||||
- [planetscale/ghcommit-action](https://github.com/planetscale/ghcommit-action)
|
||||
- [EndBug/add-and-commit](https://github.com/EndBug/add-and-commit)
|
||||
|
||||
## Usage
|
||||
|
||||
Adding git-auto-commit to your Workflow only takes a couple lines of code.
|
||||
|
||||
1. Set the `contents`-permission of the default GITHUB_TOKEN to `write`. (Required to push new commits to the repository)
|
||||
1. Set the `contents`-permission of the default GITHUB_TOKEN to `true`. (Required to push new commits to the repository)
|
||||
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@v7
|
||||
- uses: stefanzweifel/git-auto-commit-action@v5
|
||||
```
|
||||
|
||||
Your Workflow should look similar to this example.
|
||||
@ -44,17 +39,15 @@ jobs:
|
||||
contents: write
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v5
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
ref: ${{ github.head_ref }}
|
||||
# Value already defaults to true, but `persist-credentials` is required to push new commits to the repository.
|
||||
persist-credentials: true
|
||||
|
||||
# Other steps that change files in the repository go here
|
||||
# …
|
||||
|
||||
# Commit all changed files back to the repository
|
||||
- uses: stefanzweifel/git-auto-commit-action@v7
|
||||
- uses: stefanzweifel/git-auto-commit-action@v5
|
||||
```
|
||||
|
||||
> [!NOTE]
|
||||
@ -63,7 +56,7 @@ jobs:
|
||||
The following is an extended example with all available options.
|
||||
|
||||
```yaml
|
||||
- uses: stefanzweifel/git-auto-commit-action@v7
|
||||
- uses: stefanzweifel/git-auto-commit-action@v5
|
||||
with:
|
||||
# Optional. Commit message for the created commit.
|
||||
# Defaults to "Apply automatic changes"
|
||||
@ -84,7 +77,7 @@ The following is an extended example with all available options.
|
||||
# - https://git-scm.com/docs/gitglossary#Documentation/gitglossary.txt-aiddefpathspecapathspec
|
||||
file_pattern: '*.php src/*.js tests/*.js'
|
||||
|
||||
# Optional. Relative file path under $GITHUB_WORKSPACE to the repository.
|
||||
# Optional. Local file path to the repository.
|
||||
# Defaults to the root of the repository.
|
||||
repository: .
|
||||
|
||||
@ -93,14 +86,9 @@ The following is an extended example with all available options.
|
||||
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
|
||||
|
||||
# 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. Tag name being created in the local repository and
|
||||
# pushed to remote repository and defined branch.
|
||||
tagging_message: 'v1.0.0'
|
||||
|
||||
# Optional. Option used by `git-status` to determine if the repository is
|
||||
# dirty. See https://git-scm.com/docs/git-status#_options
|
||||
@ -117,24 +105,12 @@ The following is an extended example with all available options.
|
||||
# Optional. Disable dirty check and always try to create a commit and push
|
||||
skip_dirty_check: true
|
||||
|
||||
# Optional. Skip internal call to `git fetch`
|
||||
skip_fetch: true
|
||||
|
||||
# Optional. Skip internal call to `git checkout`
|
||||
skip_checkout: true
|
||||
|
||||
# Optional. 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`.
|
||||
# Skips dirty check and changed files. Must be used with `tagging_message`.
|
||||
create_git_tag_only: false
|
||||
```
|
||||
|
||||
@ -165,20 +141,18 @@ jobs:
|
||||
contents: write
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v5
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
ref: ${{ github.head_ref }}
|
||||
|
||||
- name: Run php-cs-fixer
|
||||
uses: docker://oskarstark/php-cs-fixer-ga
|
||||
|
||||
- uses: stefanzweifel/git-auto-commit-action@v7
|
||||
- uses: stefanzweifel/git-auto-commit-action@v5
|
||||
with:
|
||||
commit_message: Apply php-cs-fixer changes
|
||||
```
|
||||
|
||||
See [EXAMPLES.md](EXAMPLES.md) for more scenarios, including auto-formatting, dependency updates, generated docs, release tagging, drift checks, and GPG-signed commits.
|
||||
|
||||
## Inputs
|
||||
|
||||
Checkout [`action.yml`](https://github.com/stefanzweifel/git-auto-commit-action/blob/master/action.yml) for a full list of supported inputs.
|
||||
@ -196,7 +170,7 @@ You can use these outputs to trigger other Actions in your Workflow run based on
|
||||
### Example
|
||||
|
||||
```yaml
|
||||
- uses: stefanzweifel/git-auto-commit-action@v7
|
||||
- uses: stefanzweifel/git-auto-commit-action@v5
|
||||
id: auto-commit-action #mandatory for the output to show up in ${{ steps }}
|
||||
with:
|
||||
commit_message: Apply php-cs-fixer changes
|
||||
@ -228,11 +202,11 @@ If this Action doesn't work for your workflow, check out [EndBug/add-and-commit]
|
||||
|
||||
### Checkout the correct branch
|
||||
|
||||
You must use `actions/checkout@v2` or later versions to check out the repository.
|
||||
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:
|
||||
|
||||
```yaml
|
||||
- uses: actions/checkout@v5
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
ref: ${{ github.head_ref }}
|
||||
```
|
||||
@ -250,7 +224,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.
|
||||
|
||||
```yaml
|
||||
- uses: actions/checkout@v5
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
token: ${{ secrets.PAT }}
|
||||
```
|
||||
@ -258,13 +232,13 @@ storing the token as a secret in your repository and then passing the new token
|
||||
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/get-started/learning-about-github/types-of-github-accounts) for the token.
|
||||
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/how-tos/manage-workflow-runs/skip-workflow-runs) for details.
|
||||
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
|
||||
|
||||
@ -276,7 +250,7 @@ Does your workflow change a file, but "git-auto-commit" does not detect the chan
|
||||
|
||||
If your commit message should span multiple lines, you have to create a separate step to generate the string.
|
||||
|
||||
The example below can be used as a starting point to generate a multiline commit meesage. Learn more how multiline strings in GitHub Actions work in the [GitHub documentation](https://docs.github.com/en/actions/reference/workflows-and-actions/workflow-commands#multiline-strings).
|
||||
The example below can be used as a starting point to generate a multiline commit meesage. Learn more how multiline strings in GitHub Actions work in the [GitHub documentation](https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#multiline-strings).
|
||||
|
||||
```yaml
|
||||
# Building a multiline commit message
|
||||
@ -296,7 +270,7 @@ The example below can be used as a starting point to generate a multiline commit
|
||||
# Quick and dirty step to get rid of the temporary file holding the commit message
|
||||
- run: rm -rf commitmessage.txt
|
||||
|
||||
- uses: stefanzweifel/git-auto-commit-action@v7
|
||||
- uses: stefanzweifel/git-auto-commit-action@v5
|
||||
id: commit
|
||||
with:
|
||||
commit_message: ${{ steps.commit_message_step.outputs.commit_message }}
|
||||
@ -320,7 +294,7 @@ As git-auto-commit by default does not use **your** username and email when crea
|
||||
git_commit_gpgsign: true
|
||||
|
||||
- name: "Commit and push changes"
|
||||
uses: stefanzweifel/git-auto-commit-action@v7
|
||||
uses: stefanzweifel/git-auto-commit-action@v5
|
||||
with:
|
||||
commit_author: "${{ steps.import-gpg.outputs.name }} <${{ steps.import-gpg.outputs.email }}>"
|
||||
commit_user_name: ${{ steps.import-gpg.outputs.name }}
|
||||
@ -331,16 +305,15 @@ See discussion [#334](https://github.com/stefanzweifel/git-auto-commit-action/di
|
||||
|
||||
### Use in forks from private repositories
|
||||
|
||||
|
||||
By default, GitHub Actions doesn't run Workflows on forks from **private** repositories. To enable Actions for **private** repositories enable "Run workflows from pull requests" in your repository settings.
|
||||
|
||||
See [this announcement from GitHub](https://github.blog/2020-08-03-github-actions-improvements-for-fork-and-pull-request-workflows/) or the [GitHub docs](https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository#enabling-workflows-for-private-repository-forks) for details.
|
||||
See [this announcement from GitHub](https://github.blog/2020-08-03-github-actions-improvements-for-fork-and-pull-request-workflows/) or the [GitHub docs](https://docs.github.com/en/github/administering-a-repository/disabling-or-limiting-github-actions-for-a-repository#enabling-workflows-for-private-repository-forks) for details.
|
||||
|
||||
|
||||
### Use in forks from public repositories
|
||||
|
||||
> [!NOTE]
|
||||
> This Action technically works with forks. However, please note that the combination of triggers and their options can cause issues. Please read [the documentation](https://docs.github.com/en/actions/reference/workflows-and-actions/events-that-trigger-workflows) on which triggers GitHub Actions support.\
|
||||
> This Action technically works with forks. However, please note that the combination of triggers and their options can cause issues. Please read [the documentation](https://docs.github.com/en/free-pro-team@latest/actions/reference/events-that-trigger-workflows) on which triggers GitHub Actions support.\
|
||||
> Ensure your contributors enable "Allow edits by maintainers" when opening a pull request. ([Learn more](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/allowing-changes-to-a-pull-request-branch-created-from-a-fork)) \
|
||||
> \
|
||||
> **If you use this Action in combination with a linter/fixer, it's easier if you run the Action on `push` on your `main`-branch.**
|
||||
@ -349,7 +322,7 @@ See [this announcement from GitHub](https://github.blog/2020-08-03-github-action
|
||||
> Due to limitations of GitHub, this Action currently can't push commits to a base repository, if the fork _lives_ under an organisation. See [github/community#6634](https://github.com/orgs/community/discussions/5634) and [this comment](https://github.com/stefanzweifel/git-auto-commit-action/issues/211#issuecomment-1428849944) for details.
|
||||
|
||||
By default, this Action will not run on Pull Requests which have been opened by forks. (This is a limitation by GitHub, not by us.)
|
||||
However, there are a couple of ways to use this Action in Workflows that should be triggered by forked repositories.
|
||||
However, there are a couple of ways to use this Actions in Workflows that should be triggered by forked repositories.
|
||||
|
||||
### Workflow should run in **base** repository
|
||||
|
||||
@ -384,7 +357,7 @@ jobs:
|
||||
contents: write
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v5
|
||||
- uses: actions/checkout@v4
|
||||
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
|
||||
@ -398,7 +371,7 @@ jobs:
|
||||
- name: Run php-cs-fixer
|
||||
uses: docker://oskarstark/php-cs-fixer-ga
|
||||
|
||||
- uses: stefanzweifel/git-auto-commit-action@v7
|
||||
- uses: stefanzweifel/git-auto-commit-action@v5
|
||||
```
|
||||
|
||||
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/).
|
||||
@ -420,7 +393,7 @@ Finally, you have to use `push_options: '--force'` to overwrite the git history
|
||||
The steps in your workflow might look like this:
|
||||
|
||||
```yaml
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@4
|
||||
with:
|
||||
# Fetch the last 2 commits instead of just 1. (Fetching just 1 commit would overwrite the whole history)
|
||||
fetch-depth: 2
|
||||
@ -433,19 +406,17 @@ 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@v7
|
||||
- uses: stefanzweifel/git-auto-commit-action@v5
|
||||
with:
|
||||
commit_author: ${{ steps.last-commit.outputs.author }}
|
||||
commit_message: ${{ steps.last-commit.outputs.message }}
|
||||
commit_options: '--amend --no-edit'
|
||||
push_options: '--force'
|
||||
skip_fetch: true
|
||||
```
|
||||
|
||||
See discussion in [#159](https://github.com/stefanzweifel/git-auto-commit-action/issues/159#issuecomment-845347950) for details.
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Action does not push commit to repository
|
||||
|
||||
Make sure to [checkout the correct branch](#checkout-the-correct-branch).
|
||||
@ -455,16 +426,14 @@ Make sure to [checkout the correct branch](#checkout-the-correct-branch).
|
||||
If your Workflow can't push the commit to the repository because of authentication issues,
|
||||
please update your Workflow configuration and usage of [`actions/checkout`](https://github.com/actions/checkout#usage).
|
||||
|
||||
Please note that `persist-credentials` in `actions/checkout` must be set to `true` to push new commits to the repository.
|
||||
|
||||
If you still can't push the commit, and you're using branch protection rules or similar features, updating the `token` value with a Personal Access Token should fix your issues.
|
||||
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 its token in your workflows. See [this comment in #87](https://github.com/stefanzweifel/git-auto-commit-action/issues/87#issuecomment-1939138661) for details.
|
||||
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.
|
||||
|
||||
@ -479,21 +448,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.
|
||||
|
||||
```yaml
|
||||
- uses: actions/checkout@v5
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
# 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/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens).
|
||||
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://docs.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
|
||||
- uses: stefanzweifel/git-auto-commit-action@v7
|
||||
- uses: stefanzweifel/git-auto-commit-action@v5
|
||||
with:
|
||||
commit_message: Apply php-cs-fixer changes
|
||||
push_options: --force
|
||||
@ -513,7 +482,7 @@ See [Issue #227](https://github.com/stefanzweifel/git-auto-commit-action/issues/
|
||||
|
||||
### Custom `file_pattern`, changed files but seeing "Working tree clean. Nothing to commit." in the logs
|
||||
|
||||
If you're using a custom `file_pattern` and the Action does not detect the changes made in your workflow, you're probably running into a globbing issue.
|
||||
If you're using a custom `file_pattern` and the Action does not detect the changes made in your worfklow, you're probably running into a globbing issue.
|
||||
|
||||
Let's imagine you use `file_pattern: '*.md'` to detect and commit changes to all Markdown files in your repository.
|
||||
If your Workflow now only updates `.md`-files in a subdirectory, but you have an untouched `.md`-file in the root of the repository, the git-auto-commit Action will display "Working tree clean. Nothing to commit." in the Workflow log.
|
||||
@ -523,7 +492,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@v7
|
||||
- uses: stefanzweifel/git-auto-commit-action@v5
|
||||
with:
|
||||
file_pattern: '*.md'
|
||||
disable_globbing: true
|
||||
@ -549,10 +518,10 @@ yarn test
|
||||
|
||||
## Versioning
|
||||
|
||||
We use [SemVer](https://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@v7` to always use the latest release of the current major version.
|
||||
(More information about this [here](https://docs.github.com/en/actions/building-actions/about-actions#versioning-your-action).)
|
||||
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.
|
||||
(More information about this [here](https://help.github.com/en/actions/building-actions/about-actions#versioning-your-action).)
|
||||
|
||||
## Credits
|
||||
|
||||
|
||||
@ -1,13 +1,5 @@
|
||||
# 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` options.
|
||||
|
||||
(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.
|
||||
|
||||
47
action.yml
47
action.yml
@ -25,11 +25,11 @@ inputs:
|
||||
required: false
|
||||
default: ''
|
||||
file_pattern:
|
||||
description: File pattern used for `git add` and the dirty-check (`git status`). Supports multiple space-separated patterns. For example `src/*.js`
|
||||
description: File pattern used for `git add`. For example `src/*.js`
|
||||
required: false
|
||||
default: '.'
|
||||
repository:
|
||||
description: Relative file path under $GITHUB_WORKSPACE to the git repository. Defaults to the current directory (`.`)
|
||||
description: Local file path to the git repository. Defaults to the current directory (`.`)
|
||||
required: false
|
||||
default: '.'
|
||||
commit_user_name:
|
||||
@ -44,12 +44,8 @@ inputs:
|
||||
description: Value used for the commit author. Defaults to the username of whoever triggered this workflow run.
|
||||
required: false
|
||||
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: Tagging message used for creating a new git tag with the commit. Keep this empty, if no tag should be created.
|
||||
description: Message used to create a new git tag with the commit. Keep this empty, if no tag should be created.
|
||||
required: false
|
||||
default: ''
|
||||
push_options:
|
||||
@ -60,25 +56,8 @@ inputs:
|
||||
description: Skip the check if the git repository is dirty and always try to create a commit.
|
||||
required: false
|
||||
default: false
|
||||
skip_fetch:
|
||||
description: Skip the call to git-fetch.
|
||||
required: false
|
||||
default: false
|
||||
skip_checkout:
|
||||
description: Skip the call to git-checkout.
|
||||
required: false
|
||||
default: false
|
||||
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)
|
||||
required: false
|
||||
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.
|
||||
required: false
|
||||
default: false
|
||||
create_git_tag_only:
|
||||
description: Perform a clean git tag and push, without commiting anything
|
||||
@ -86,20 +65,30 @@ inputs:
|
||||
default: false
|
||||
internal_git_binary:
|
||||
description: Internal use only! Path to git binary used to check if git is available. (Don't change this!)
|
||||
required: false
|
||||
default: git
|
||||
skip_fetch:
|
||||
description: "Deprecated: skip_fetch has been removed in v6. It does not have any effect anymore."
|
||||
required: false
|
||||
default: false
|
||||
skip_checkout:
|
||||
description: "Deprecated: skip_checkout has been removed in v6. It does not have any effect anymore."
|
||||
required: false
|
||||
default: false
|
||||
create_branch:
|
||||
description: "Deprecated: create_branch has been removed in v6. It does not have any effect anymore."
|
||||
default: false
|
||||
|
||||
|
||||
outputs:
|
||||
changes_detected:
|
||||
description: Value is "true" if matching changes were detected and committed. Value is "false" if no matching changes were detected or only CRLF changes were staged. Not set in `create_git_tag_only` mode.
|
||||
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 set when a commit was actually made (i.e. `changes_detected` is "true").
|
||||
description: Full hash of the created commit. Only present if the "changes_detected" output is "true".
|
||||
create_git_tag_only:
|
||||
description: Set to "true" when the action ran in `create_git_tag_only` mode. Never set to "false".
|
||||
description: Value is "true", if a git tag was created using the `create_git_tag_only`-input.
|
||||
|
||||
runs:
|
||||
using: 'node24'
|
||||
using: 'node20'
|
||||
main: 'index.js'
|
||||
|
||||
branding:
|
||||
|
||||
@ -27,13 +27,25 @@ _log() {
|
||||
}
|
||||
|
||||
_main() {
|
||||
if "$INPUT_SKIP_FETCH"; then
|
||||
_log "warning" "git-auto-commit: skip_fetch has been removed in v6. It does not have any effect anymore.";
|
||||
fi
|
||||
|
||||
if "$INPUT_SKIP_CHECKOUT"; then
|
||||
_log "warning" "git-auto-commit: skip_checkout has been removed in v6. It does not have any effect anymore.";
|
||||
fi
|
||||
|
||||
if "$INPUT_CREATE_BRANCH"; then
|
||||
_log "warning" "git-auto-commit: create_branch has been removed in v6. It does not have any effect anymore.";
|
||||
fi
|
||||
|
||||
_check_if_git_is_available
|
||||
|
||||
_switch_to_repository
|
||||
|
||||
_check_if_is_git_repository
|
||||
|
||||
_check_if_repository_is_in_detached_state
|
||||
# _check_if_repository_is_in_detached_state
|
||||
|
||||
if "$INPUT_CREATE_GIT_TAG_ONLY"; then
|
||||
_log "debug" "Create git tag only";
|
||||
@ -44,8 +56,6 @@ _main() {
|
||||
|
||||
_set_github_output "changes_detected" "true"
|
||||
|
||||
_switch_to_branch
|
||||
|
||||
_add_files
|
||||
|
||||
# Check dirty state of repo again using git-diff.
|
||||
@ -110,40 +120,13 @@ _check_if_is_git_repository() {
|
||||
_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.";
|
||||
_log "error" "Repository is in detached HEAD state. Please make sure you check out a branch. Adjust the `ref` input accordingly.";
|
||||
exit 1;
|
||||
else
|
||||
_log "debug" "Repository is on a branch.";
|
||||
fi
|
||||
}
|
||||
|
||||
_switch_to_branch() {
|
||||
echo "INPUT_BRANCH value: $INPUT_BRANCH";
|
||||
|
||||
# Fetch remote to make sure that repo can be switched to the right branch.
|
||||
if "$INPUT_SKIP_FETCH"; then
|
||||
_log "debug" "git-fetch will not be executed.";
|
||||
else
|
||||
_log "debug" "git-fetch will be executed.";
|
||||
git fetch --depth=1;
|
||||
fi
|
||||
|
||||
# If `skip_checkout`-input is true, skip the entire checkout step.
|
||||
if "$INPUT_SKIP_CHECKOUT"; then
|
||||
_log "debug" "git-checkout will not be executed.";
|
||||
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
|
||||
git checkout -B $INPUT_BRANCH --;
|
||||
else
|
||||
# Switch to branch from current Workflow run
|
||||
# shellcheck disable=SC2086
|
||||
git checkout $INPUT_BRANCH --;
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
_add_files() {
|
||||
echo "INPUT_ADD_OPTIONS: ${INPUT_ADD_OPTIONS}";
|
||||
_log "debug" "Apply add options ${INPUT_ADD_OPTIONS}";
|
||||
@ -176,25 +159,18 @@ _local_commit() {
|
||||
}
|
||||
|
||||
_tag_commit() {
|
||||
echo "INPUT_TAG_NAME: ${INPUT_TAG_NAME}"
|
||||
echo "INPUT_TAGGING_MESSAGE: ${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"
|
||||
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";
|
||||
else
|
||||
echo "Neither tag nor tag message is set. No tag will be added.";
|
||||
echo "No tagging message supplied. 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";
|
||||
|
||||
@ -206,8 +182,8 @@ _push_to_github() {
|
||||
|
||||
if [ -z "$INPUT_BRANCH" ]
|
||||
then
|
||||
# Only add `--tags` option, if `$INPUT_TAG_NAME` or `$INPUT_TAGGING_MESSAGE` is set
|
||||
if [ -n "$INPUT_TAG_NAME" ] || [ -n "$INPUT_TAGGING_MESSAGE" ]
|
||||
# Only add `--tags` option, if `$INPUT_TAGGING_MESSAGE` is set
|
||||
if [ -n "$INPUT_TAGGING_MESSAGE" ]
|
||||
then
|
||||
_log "debug" "git push origin --tags";
|
||||
git push origin --follow-tags --atomic ${INPUT_PUSH_OPTIONS:+"${INPUT_PUSH_OPTIONS_ARRAY[@]}"};
|
||||
|
||||
8
package-lock.json
generated
8
package-lock.json
generated
@ -5,15 +5,15 @@
|
||||
"packages": {
|
||||
"": {
|
||||
"devDependencies": {
|
||||
"bats": "^1.13.0",
|
||||
"bats": "^1.12.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==",
|
||||
"version": "1.12.0",
|
||||
"resolved": "https://registry.npmjs.org/bats/-/bats-1.12.0.tgz",
|
||||
"integrity": "sha512-1HTv2n+fjn3bmY9SNDgmzS6bjoKtVlSK2pIHON5aSA2xaqGkZFoCCWP46/G6jm9zZ7MCi84mD+3Byw4t3KGwBg==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"bin": {
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
{
|
||||
"devDependencies": {
|
||||
"bats": "^1.13.0",
|
||||
"bats": "^1.12.0",
|
||||
"bats-assert": "ztombol/bats-assert",
|
||||
"bats-support": "ztombol/bats-support"
|
||||
},
|
||||
|
||||
@ -32,16 +32,16 @@ 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_DISABLE_GLOBBING=false
|
||||
export INPUT_INTERNAL_GIT_BINARY=git
|
||||
|
||||
# Deprecated variables. Will be removed in future versions
|
||||
export INPUT_CREATE_BRANCH=false
|
||||
export INPUT_SKIP_FETCH=false
|
||||
export INPUT_SKIP_CHECKOUT=false
|
||||
export INPUT_SKIP_PUSH=false
|
||||
export INPUT_DISABLE_GLOBBING=false
|
||||
export INPUT_CREATE_BRANCH=false
|
||||
export INPUT_INTERNAL_GIT_BINARY=git
|
||||
|
||||
# Set GitHub environment variables used by the GitHub Action
|
||||
temp_github_output_file=$(mktemp -t github_output_test.XXXXX)
|
||||
@ -123,9 +123,8 @@ 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 "Neither tag nor tag message is set. No tag will be added."
|
||||
assert_line "No tagging message supplied. No tag will be added."
|
||||
assert_line "INPUT_PUSH_OPTIONS: "
|
||||
assert_line "::debug::Apply push options "
|
||||
assert_line "::debug::Push commit to remote branch ${FAKE_DEFAULT_BRANCH}"
|
||||
@ -147,9 +146,8 @@ 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 "Neither tag nor tag message is set. No tag will be added."
|
||||
assert_line "No tagging message supplied. No tag will be added."
|
||||
assert_line "INPUT_PUSH_OPTIONS: "
|
||||
assert_line "::debug::Apply push options "
|
||||
assert_line "::debug::Push commit to remote branch ${FAKE_DEFAULT_BRANCH}"
|
||||
@ -295,8 +293,7 @@ cat_github_output() {
|
||||
}
|
||||
|
||||
@test "It creates a tag with the commit" {
|
||||
INPUT_TAG_NAME="v1.0.0"
|
||||
INPUT_TAGGING_MESSAGE="MyProduct v1.0.0"
|
||||
INPUT_TAGGING_MESSAGE="v1.0.0"
|
||||
|
||||
touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt
|
||||
|
||||
@ -304,15 +301,13 @@ cat_github_output() {
|
||||
|
||||
assert_success
|
||||
|
||||
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 "INPUT_TAGGING_MESSAGE: v1.0.0"
|
||||
assert_line "::debug::Create tag 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 MyProduct v1.0.0'
|
||||
run git tag
|
||||
assert_output v1.0.0
|
||||
|
||||
run git ls-remote --tags --refs
|
||||
assert_output --partial refs/tags/v1.0.0
|
||||
@ -353,24 +348,6 @@ 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
|
||||
@ -411,11 +388,9 @@ cat_github_output() {
|
||||
assert_equal $current_sha $remote_sha
|
||||
}
|
||||
|
||||
@test "It uses existing branch when INPUT_BRANCH is empty and INPUT_TAG is set" {
|
||||
@test "It uses existing branch when INPUT_BRANCH is empty and INPUT_TAGGING_MESSAGE is set" {
|
||||
INPUT_BRANCH=""
|
||||
INPUT_TAG_NAME="v2.0.0"
|
||||
INPUT_TAGGING_MESSAGE="MyProduct v2.0.0"
|
||||
|
||||
INPUT_TAGGING_MESSAGE="v2.0.0"
|
||||
|
||||
touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt
|
||||
|
||||
@ -423,8 +398,8 @@ cat_github_output() {
|
||||
|
||||
assert_success
|
||||
|
||||
assert_line "INPUT_TAG_NAME: v2.0.0"
|
||||
assert_line "::debug::Create tag v2.0.0: MyProduct v2.0.0"
|
||||
assert_line "INPUT_TAGGING_MESSAGE: v2.0.0"
|
||||
assert_line "::debug::Create tag v2.0.0"
|
||||
assert_line "::debug::git push origin --tags"
|
||||
|
||||
# Assert a tag v2.0.0 has been created
|
||||
@ -436,37 +411,9 @@ cat_github_output() {
|
||||
assert_output --partial refs/tags/v2.0.0
|
||||
}
|
||||
|
||||
@test "If SKIP_FETCH is true git-fetch will not be called" {
|
||||
|
||||
touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt
|
||||
|
||||
INPUT_SKIP_FETCH=true
|
||||
|
||||
run git_auto_commit
|
||||
|
||||
assert_success
|
||||
|
||||
assert_line "::debug::git-fetch will not be executed."
|
||||
}
|
||||
|
||||
@test "If SKIP_CHECKOUT is true git-checkout will not be called" {
|
||||
|
||||
touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt
|
||||
|
||||
INPUT_SKIP_CHECKOUT=true
|
||||
|
||||
run git_auto_commit
|
||||
|
||||
assert_success
|
||||
|
||||
assert_line "::debug::git-checkout will not be executed."
|
||||
}
|
||||
|
||||
@test "It pushes generated commit and tag to remote and actually updates the commit shas" {
|
||||
INPUT_BRANCH=""
|
||||
INPUT_TAG_NAME="v2.0.0"
|
||||
INPUT_TAGGING_MESSAGE="MyProduct v2.0.0"
|
||||
|
||||
INPUT_TAGGING_MESSAGE="v2.0.0"
|
||||
|
||||
touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt
|
||||
|
||||
@ -474,8 +421,8 @@ cat_github_output() {
|
||||
|
||||
assert_success
|
||||
|
||||
assert_line "INPUT_TAG_NAME: v2.0.0"
|
||||
assert_line "::debug::Create tag v2.0.0: MyProduct v2.0.0"
|
||||
assert_line "INPUT_TAGGING_MESSAGE: v2.0.0"
|
||||
assert_line "::debug::Create tag v2.0.0"
|
||||
assert_line "::debug::git push origin --tags"
|
||||
|
||||
# Assert a tag v2.0.0 has been created
|
||||
@ -494,14 +441,8 @@ cat_github_output() {
|
||||
}
|
||||
|
||||
@test "It pushes generated commit and tag to remote branch and updates commit sha" {
|
||||
# Create "a-new-branch"-branch and then immediately switch back to ${FAKE_DEFAULT_BRANCH}
|
||||
git checkout -b a-new-branch
|
||||
git checkout ${FAKE_DEFAULT_BRANCH}
|
||||
|
||||
INPUT_BRANCH="a-new-branch"
|
||||
INPUT_TAG_NAME="v2.0.0"
|
||||
INPUT_TAGGING_MESSAGE="MyProduct v2.0.0"
|
||||
|
||||
INPUT_TAGGING_MESSAGE="v2.0.0"
|
||||
|
||||
touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt
|
||||
|
||||
@ -509,8 +450,8 @@ cat_github_output() {
|
||||
|
||||
assert_success
|
||||
|
||||
assert_line "INPUT_TAG_NAME: v2.0.0"
|
||||
assert_line "::debug::Create tag v2.0.0: MyProduct v2.0.0"
|
||||
assert_line "INPUT_TAGGING_MESSAGE: v2.0.0"
|
||||
assert_line "::debug::Create tag v2.0.0"
|
||||
assert_line "::debug::Push commit to remote branch a-new-branch"
|
||||
|
||||
# Assert a tag v2.0.0 has been created
|
||||
@ -522,7 +463,7 @@ cat_github_output() {
|
||||
assert_output --partial refs/tags/v2.0.0
|
||||
|
||||
# Assert that branch "a-new-branch" was updated on remote
|
||||
current_sha="$(git rev-parse --verify --short a-new-branch)"
|
||||
current_sha="$(git rev-parse --verify --short ${FAKE_DEFAULT_BRANCH})"
|
||||
remote_sha="$(git rev-parse --verify --short origin/a-new-branch)"
|
||||
|
||||
assert_equal $current_sha $remote_sha
|
||||
@ -566,7 +507,6 @@ cat_github_output() {
|
||||
@test "it does not throw an error if not changes are detected and SKIP_DIRTY_CHECK is false" {
|
||||
INPUT_FILE_PATTERN="."
|
||||
INPUT_SKIP_DIRTY_CHECK=false
|
||||
INPUT_SKIP_FETCH=false
|
||||
|
||||
run git_auto_commit
|
||||
|
||||
@ -620,8 +560,6 @@ cat_github_output() {
|
||||
|
||||
touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt
|
||||
|
||||
INPUT_SKIP_CHECKOUT=true
|
||||
|
||||
run git_auto_commit
|
||||
|
||||
assert_success
|
||||
@ -651,8 +589,6 @@ cat_github_output() {
|
||||
|
||||
touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt
|
||||
|
||||
INPUT_SKIP_CHECKOUT=true
|
||||
|
||||
run git_auto_commit
|
||||
|
||||
assert_success
|
||||
@ -662,9 +598,8 @@ 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 "Neither tag nor tag message is set. No tag will be added."
|
||||
assert_line "No tagging message supplied. No tag will be added."
|
||||
assert_line "INPUT_PUSH_OPTIONS: "
|
||||
assert_line "::debug::Apply push options "
|
||||
assert_line "::debug::Push commit to remote branch not-existend-branch"
|
||||
@ -683,6 +618,51 @@ 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"
|
||||
|
||||
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"
|
||||
|
||||
# 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
|
||||
@ -700,7 +680,6 @@ cat_github_output() {
|
||||
cd $FAKE_LOCAL_REPOSITORY
|
||||
|
||||
INPUT_BRANCH="existing-remote-branch"
|
||||
INPUT_SKIP_CHECKOUT=true
|
||||
|
||||
run git branch
|
||||
refute_line --partial "existing-remote-branch"
|
||||
@ -721,9 +700,8 @@ 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 "Neither tag nor tag message is set. No tag will be added."
|
||||
assert_line "No tagging message supplied. No tag will be added."
|
||||
assert_line "INPUT_PUSH_OPTIONS: "
|
||||
assert_line "::debug::Apply push options "
|
||||
assert_line "::debug::Push commit to remote branch existing-remote-branch"
|
||||
@ -746,7 +724,7 @@ cat_github_output() {
|
||||
assert_line -e "commit_hash=[0-9a-f]{40}$"
|
||||
}
|
||||
|
||||
@test "It fails if local branch is behind remote and when remote has newer commits and skip_checkout is set to true" {
|
||||
@test "It fails if local branch is behind remote and when remote has newer commits" {
|
||||
# Create `existing-remote-branch` on remote with changes the local repository does not yet have
|
||||
cd $FAKE_TEMP_LOCAL_REPOSITORY
|
||||
git checkout -b "existing-remote-branch"
|
||||
@ -763,7 +741,6 @@ cat_github_output() {
|
||||
cd $FAKE_LOCAL_REPOSITORY
|
||||
|
||||
INPUT_BRANCH="existing-remote-branch"
|
||||
INPUT_SKIP_CHECKOUT=true
|
||||
|
||||
run git branch
|
||||
refute_line --partial "existing-remote-branch"
|
||||
@ -795,7 +772,7 @@ cat_github_output() {
|
||||
refute [assert_equal $current_sha $remote_sha]
|
||||
}
|
||||
|
||||
@test "It fails to push commit to remote if branch already exists and local repo is behind its remote counterpart and SKIP_CHECKOUT is used" {
|
||||
@test "It fails to push commit to remote if branch already exists and local repo is behind its remote counterpart" {
|
||||
# Create `new-branch` on remote with changes the local repository does not yet have
|
||||
cd $FAKE_TEMP_LOCAL_REPOSITORY
|
||||
|
||||
@ -814,7 +791,6 @@ cat_github_output() {
|
||||
cd $FAKE_LOCAL_REPOSITORY
|
||||
|
||||
INPUT_BRANCH="new-branch"
|
||||
INPUT_SKIP_CHECKOUT=true
|
||||
|
||||
# Assert that local remote does not have a "new-branch"-branch nor does
|
||||
# know about the remote branch.
|
||||
@ -833,7 +809,8 @@ cat_github_output() {
|
||||
assert_line "INPUT_BRANCH value: new-branch"
|
||||
assert_line --partial "::debug::Push commit to remote branch new-branch"
|
||||
|
||||
assert_line --partial "Updates were rejected because a pushed branch tip is behind its remote"
|
||||
assert_line --partial "Updates were rejected because the remote contains work that you do"
|
||||
assert_line --partial "This is usually caused by another repository pushing"
|
||||
}
|
||||
|
||||
@test "throws fatal error if file pattern includes files that do not exist" {
|
||||
@ -1054,9 +1031,8 @@ 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 "Neither tag nor tag message is set. No tag will be added."
|
||||
assert_line "No tagging message supplied. No tag will be added."
|
||||
assert_line "INPUT_PUSH_OPTIONS: "
|
||||
assert_line "::debug::Apply push options "
|
||||
assert_line "::debug::Push commit to remote branch ${FAKE_DEFAULT_BRANCH}"
|
||||
@ -1121,7 +1097,8 @@ END
|
||||
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" {
|
||||
@test "It detects if the repository is in a detached state and exits with an error" {
|
||||
skip
|
||||
touch "${FAKE_LOCAL_REPOSITORY}"/new-file-{1,2,3}.txt
|
||||
|
||||
run git_auto_commit
|
||||
@ -1136,14 +1113,13 @@ END
|
||||
|
||||
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."
|
||||
assert_failure;
|
||||
assert_line "::error::Repository is in detached HEAD state. Please make sure you check out a branch. Adjust the `ref` input accordingly."
|
||||
}
|
||||
|
||||
@test "it creates a tag if create_git_tag_only is set to true and a message has been supplied" {
|
||||
INPUT_CREATE_GIT_TAG_ONLY=true
|
||||
INPUT_TAG_NAME=v1.0.0
|
||||
INPUT_TAGGING_MESSAGE="MyProduct v1.0.0"
|
||||
INPUT_TAGGING_MESSAGE=v1.0.0
|
||||
|
||||
run git_auto_commit
|
||||
|
||||
@ -1151,8 +1127,8 @@ END
|
||||
|
||||
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::Create tag v1.0.0"
|
||||
refute_line "No tagging message supplied. No tag will be added."
|
||||
|
||||
assert_line "::debug::Apply push options "
|
||||
assert_line "::debug::Push commit to remote branch ${FAKE_DEFAULT_BRANCH}"
|
||||
@ -1163,8 +1139,8 @@ END
|
||||
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 tag
|
||||
assert_output v1.0.0
|
||||
|
||||
run git ls-remote --tags --refs
|
||||
assert_output --partial refs/tags/v1.0.0
|
||||
@ -1172,16 +1148,14 @@ END
|
||||
|
||||
@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 "No tagging message supplied. No tag will be added."
|
||||
assert_line "::debug::Create git tag only"
|
||||
|
||||
run cat_github_output
|
||||
@ -1194,330 +1168,16 @@ END
|
||||
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"
|
||||
@test "it shows warning message if any deprecated options are used" {
|
||||
INPUT_SKIP_FETCH=true
|
||||
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
|
||||
assert_line "::warning::git-auto-commit: skip_fetch has been removed in v6. It does not have any effect anymore."
|
||||
assert_line "::warning::git-auto-commit: skip_checkout has been removed in v6. It does not have any effect anymore."
|
||||
assert_line "::warning::git-auto-commit: create_branch has been removed in v6. It does not have any effect anymore."
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user