Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Make Action compatible with GitHub Actions BETA2 / YAML Version #3

Merged
merged 16 commits into from
Aug 31, 2019
87 changes: 53 additions & 34 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,56 +1,75 @@
# git-auto-commit-action

This GitHub Action automatically commits files which have been changed during a Workflow run and pushes the Commit back to GitHub.
The Committer is "GitHub Actions <actions@github.com>" and the Author of the Commit can be configured with environment variables.
The Committer is "GitHub Actions <actions@github.com>" and the Author of the Commit can be configured with input variables.

If no changes are available, the Actions does nothing.

This Action has been inspired and adapted from the [auto-commit](https://github.com/cds-snc/github-actions/tree/master/auto-commit
)-Action of the Canadian Digital Service.
)-Action of the Canadian Digital Service and the [commit](https://github.com/elstudio/actions-js-build/blob/41d604d6e73d632e22eac40df8cc69b5added04b/commit/entrypoint.sh)-Action by Eric Johnson.

## Usage

You have to have an Action in your Workflow, which changes some of your project files.
Add the following step at the end of your job.

```yaml
- uses: stefanzweifel/git-auto-commit-action@dev
with:
commit_author_email: john.doe@example.com
commit_author_name: John Doe
commit_message: Apply automatic changes
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
```

The Action will only commit files back, if changes are available. The resulting commit **will not trigger** another GitHub Actions Workflow run!


### Inputs

The following inputs are required

- `commit_author_email`: The commit message used when changes are available
- `commit_author_name`: The Commit Authors Email Address
- `commit_message`: The Commit Authors Name

### Environment Variables

The `GITHUB_TOKEN` secret is required. It is automatically available in your repository. You have to add it to the configuration though.

## Example Usage

This Action will only work, if the job in your workflow changes project files.
The most common use case for this, is when you're running a Linter or Code-Style fixer on GitHub Actions.

In this example I'm running `php-cs-fixer` in a PHP project.

```terraform
workflow "php-cs-fixer" {
on = "push"
resolves = [
"auto-commit-php-cs-fixer"
]
}

action "php-cs-fixer" {
uses = "docker://oskarstark/php-cs-fixer-ga"
}

action "auto-commit-php-cs-fixer" {
needs = ["php-cs-fixer"]
uses = "stefanzweifel/git-auto-commit-action@v1.0.0"
secrets = ["GITHUB_TOKEN"]
env = {
COMMIT_MESSAGE = "Apply php-cs-fixer changes"
COMMIT_AUTHOR_EMAIL = "john.doe@example.com"
COMMIT_AUTHOR_NAME = "John Doe"
}
}
```

## Secrets

The `GITHUB_TOKEN` secret is required. Add the secret in the Workflow Editor on github.com.
```yaml
on: push
name: php-cs-fixer
jobs:
php-cs-fixer:
runs-on: ubuntu-latest

## Environment variables
steps:
- uses: actions/checkout@v1
with:
fetch-depth: 1

The following environment variables are required:
- name: Run php-cs-fixer
uses: docker://oskarstark/php-cs-fixer-ga

- `COMMIT_MESSAGE`: The commit message used when changes are available
- `COMMIT_AUTHOR_EMAIL`: The Commit Authors Email Address
- `COMMIT_AUTHOR_NAME`: The Commit Authors Name
- name: Commit changed files
uses: stefanzweifel/git-auto-commit-action@v2.0.0
with:
commit_author_email: hello@stefanzweifel.io
commit_author_name: Stefan Zweifel
commit_message: Apply php-cs-fixer changes
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

```

## Versioning

Expand Down
23 changes: 23 additions & 0 deletions actions.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
name: Git Auto Commit
description: 'Automatically commits files which have been changed.'

author: Stefan Zweifel <hello@stefanzweifel.io>

inputs:
commit_message:
description: 'Commit message'
required: true
commit_author_name:
description: 'Name of the commit author'
required: true
commit_author_email:
description: 'Email address of the commit author'
required: true

runs:
using: 'docker'
image: 'Dockerfile'

branding:
icon: 'git-commit'
color: orange
40 changes: 34 additions & 6 deletions entrypoint.sh
Original file line number Diff line number Diff line change
@@ -1,10 +1,38 @@
#!/bin/sh
set -eu

git config --global user.email "actions@github.com"
git config --global user.name "GitHub Actions"
# Set up .netrc file with GitHub credentials
git_setup ( ) {
cat <<- EOF > $HOME/.netrc
machine github.com
login $GITHUB_ACTOR
password $GITHUB_TOKEN

git add -A
git status
git commit -m "$COMMIT_MESSAGE" --author="$COMMIT_AUTHOR_NAME <$COMMIT_AUTHOR_EMAIL>" || echo "No changes found. Nothing to commit."
git push -u origin HEAD
machine api.github.com
login $GITHUB_ACTOR
password $GITHUB_TOKEN
EOF
chmod 600 $HOME/.netrc

git config --global user.email "actions@github.com"
git config --global user.name "GitHub Actions"
}


# This section only runs if there have been file changes
echo "Checking for uncommitted changes in the git working tree."
if ! git diff --quiet
then
git_setup

# Switch to branch from current Workflow run
git checkout "${GITHUB_REF:11}"

git add .

git commit -m "$INPUT_COMMIT_MESSAGE" --author="$INPUT_COMMIT_AUTHOR_NAME <$INPUT_COMMIT_AUTHOR_EMAIL>"

git push --set-upstream origin "${GITHUB_REF:11}"
else
echo "Working tree clean. Nothing to commit."
fi