Skip to content

GitHub Action to commit files to a git branch using the ghcommit utility

License

Notifications You must be signed in to change notification settings

planetscale/ghcommit-action

Repository files navigation

ghcommit-action

A GitHub Action to detect changed files during a Workflow run and to commit and push them back to the GitHub repository using the ghcommit utility.

The advantage of using ghcommit is that the commits will be signed by GitHub's GPG key and show as Verified. This is important for repositories that require signed commits.

The plugin is inspired by stefanzweifel/git-auto-commit-action and uses some of the same input parameters. We expect to emulate more of its parameters over time and PRs providing similar functionality will be considered.

Usage

The plugin is currently implemented as a Docker style plugin. It must be run on a Linux host, eg: ubuntu-latest.

name: fmt

on:
  # NOTE: Need to run on a PR so that the ${{ github.head_ref }} (branch) is non-null
  pull_request:
    types:
      - opened
      - synchronize
      - reopened

jobs:
  fmt-code:
    runs-on: ubuntu-latest

    permissions:
      # Give the default GITHUB_TOKEN write permission to commit and push the
      # added or changed files to the repository.
      contents: write

    steps:
      - uses: actions/checkout@v4
      # Include the pull request ref in the checkout action to prevent merge commit
      # https://github.com/actions/checkout?tab=readme-ov-file#checkout-pull-request-head-commit-instead-of-merge-commit
        with:
          ref: ${{ github.event.pull_request.head.sha }}

      # Run steps that make changes to the local repo here.

      # Commit all changed files back to the repository
      - uses: planetscale/[email protected]
        with:
          commit_message: "🤖 fmt"
          repo: ${{ github.repository }}
          branch: ${{ github.head_ref || github.ref_name }}
        env:
          GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}

NOTE: These examples may not show the latest version. Check the GitHub Releases page to see the latest version tag

Example showing all options:

      - uses: planetscale/[email protected]
        with:
          commit_message: "🤖 fmt"
          repo: ${{ github.repository }}
          branch: ${{ github.head_ref || github.ref_name }}
          empty: true
          file_pattern: '*.txt *.md *.json *.hcl'
        env:
          GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}

See action.yaml for current list of supported inputs.

Releasing

Releases (version tags) are generated automatically on all successful main branch builds. This project uses autotag to automate this process.

Semver (vMajor.Minor.Patch) is used for versioning and releases. By default, autotag will bump the patch version on a successful main build, eg: v1.0.0 -> v1.0.1.

To bump the major or minor release instead, include [major] or [minor] in the commit message. Refer to the autotag docs for more details.