diff --git a/README.md b/README.md index d5dab16..65869ef 100644 --- a/README.md +++ b/README.md @@ -1,57 +1,76 @@ # 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 " and the Author of the Commit can be configured with environment variables. +The Committer is "GitHub Actions " 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" -} +```yaml +on: push +name: php-cs-fixer +jobs: + php-cs-fixer: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v1 + with: + fetch-depth: 1 + + - name: Run php-cs-fixer + uses: docker://oskarstark/php-cs-fixer-ga + + - 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 }} -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. - -## Environment variables - -The following environment variables are required: - -- `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 - - ## Versioning 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). diff --git a/actions.yml b/actions.yml new file mode 100644 index 0000000..84af776 --- /dev/null +++ b/actions.yml @@ -0,0 +1,23 @@ +name: Git Auto Commit +description: 'Automatically commits files which have been changed.' + +author: Stefan Zweifel + +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 diff --git a/entrypoint.sh b/entrypoint.sh index 85b3cf6..58fe291 100755 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -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