Skip to content

devops-infra/action-commit-push

Use this GitHub action with your project
Add this Action to an existing workflow or create a new one
View on Marketplace

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

πŸš€ GitHub Action for Committing Changes to Repository

πŸ—οΈ Multi-Architecture Support: amd64 and aarch64/arm64

⚠️ Recent Changes in v0.11.0

  • Force behavior updated: force: true now uses git push --force (breaking change)
  • New parameter: force_with_lease for safer force pushing with --force-with-lease
  • Amend improvements: Can now combine amend: true with commit_message to change commit messages
  • Release process: Fully automated releases - zero manual work required!

A powerful GitHub Action for automatically committing and pushing changes back to your repository. Perfect for automation workflows and integrates seamlessly with devops-infra/action-pull-request.

πŸ“¦ Available on

✨ Features

  • πŸ“ Custom commit messages: Add custom prefixes and messages to commits
  • 🌿 Branch management: Create new branches automatically with optional timestamps
  • ⏰ Timestamp support: Add timestamps to branch names for cron-based updates
  • πŸ”„ Integration-ready: Works seamlessly with other DevOps workflows
  • πŸ’ͺ Force push options: Support for --force and --force-with-lease when needed
  • πŸ”€ Pull request integration: Perfect companion for automated PR workflows

πŸ“Š Badge Swag

GitHub repo GitHub code size in bytes GitHub last commit GitHub license
DockerHub Docker version Image size Docker Pulls

πŸ“– API Reference

      - name: Run the Action
        uses: devops-infra/action-commit-push@master
        with:
          github_token: "${{ secrets.GITHUB_TOKEN }}"
          add_timestamp: true
          commit_prefix: "[AUTO]"
          commit_message: "Automatic commit"
          force: false
          force_with_lease: false
          target_branch: update/version

πŸ”§ Input Parameters

Input Variable Required Default Description
github_token Yes "" Personal Access Token for GitHub for pushing the code.
add_timestamp No false Whether to add the timestamp to a new branch name. Uses format %Y-%m-%dT%H-%M-%SZ.
amend No false Whether to make an amendment to the previous commit (--amend). Can be combined with commit_message to change the commit message.
commit_prefix No "" Prefix added to commit message. Combines with commit_message.
commit_message No "" Commit message to set. Combines with commit_prefix. Can be used with amend to change the commit message.
force No false Whether to use force push (--force). Use only when you need to overwrite remote changes. Potentially dangerous.
force_with_lease No false Whether to use force push with lease (--force-with-lease). Safer than force as it checks for remote changes. Set fetch-depth: 0 for actions/checkout.
no_edit No false Whether to not edit commit message when using amend (--no-edit).
organization_domain No github.com GitHub Enterprise domain name.
target_branch No current branch Name of a new branch to push the code into. Creates branch if not existing.

πŸ“€ Output Parameters

Output Description
files_changed List of changed files, as returned by git diff --staged --name-status.
branch_name Name of the branch code was pushed into.

πŸ’» Usage Examples

πŸ“ Basic Example: Commit and Push to Current Branch

Commit and push changes to the currently checked out branch.

name: Push changes
on:
  push
jobs:
  change-and-push:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v5
      - name: Change something
        run: |
          find . -type f -name "*.md" -print0 | xargs -0 sed -i "s/foo/bar/g"
      - name: Commit and push changes
        uses: devops-infra/action-commit-push@v0.11
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          commit_message: "Replace foo with bar"

πŸ”€ Advanced Example: Commit, Push, and Create Pull Request

Commit and push changes to a new branch and create a pull request using devops-infra/action-pull-request.

name: Push changes and create PR
on:
  push
jobs:
  change-and-push:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v5
      - name: Change something
        run: |
          find . -type f -name "*.md" -print0 | xargs -0 sed -i "s/foo/bar/g"
      - name: Commit and push changes
        uses: devops-infra/action-commit-push@v.11
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          commit_prefix: "[AUTO-COMMIT] "
          commit_message: "Replace foo with bar"
      - name: Create pull request
        uses: devops-infra/action-pull-request@v0.6
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          body: "**Automated pull request**<br><br>Replaced foo with bar"
          title: ${{ github.event.commits[0].message }}

πŸ’ͺ Force Push Example: Amending Previous Commit

When you need to amend the previous commit and force push (useful for fixing commit messages or adding forgotten changes).

name: Amend and force push
on:
  workflow_dispatch:
    inputs:
      new_commit_message:
        description: 'New commit message'
        required: true
        default: 'Updated commit message'

jobs:
  amend-commit:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository with full history
        uses: actions/checkout@v5
        with:
          fetch-depth: 0  # Required for force_with_lease
      - name: Make some changes
        run: |
          echo "Additional content" >> README.md
      - name: Amend and force push with lease
        uses: devops-infra/action-commit-push@v0.11
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          commit_message: ${{ github.event.inputs.new_commit_message }}
          amend: true
          force_with_lease: true  # Safer force push option

πŸ“ Amend Options

When using amend: true, you have several options for handling the commit message:

  1. Change the commit message: Set commit_message to provide a new message

    - uses: devops-infra/action-commit-push@master
      with:
        github_token: ${{ secrets.GITHUB_TOKEN }}
        commit_message: "Fixed typo in documentation"
        amend: true
        force_with_lease: true
  2. Keep existing message: Set no_edit: true to keep the original commit message

    - uses: devops-infra/action-commit-push@master
      with:
        github_token: ${{ secrets.GITHUB_TOKEN }}
        amend: true
        no_edit: true
        force_with_lease: true
  3. Default behavior: If neither is set, uses "Files changed:" with file list (when files are modified)

πŸ’‘ Note: Amending works even without file changes - useful for just changing commit messages!

🏷️ Version Tags: vX, vX.Y, vX.Y.Z

This action supports three tag levels for flexible versioning:

  • vX: Always points to the latest patch of a major version (e.g., v1 β†’ v1.2.3).
    Benefit: Get all latest fixes for a major version automatically.

  • vX.Y: Always points to the latest patch of a minor version (e.g., v1.2 β†’ v1.2.3).
    Benefit: Stay on a minor version, always up-to-date with bugfixes.

  • vX.Y.Z: Fixed to a specific release (e.g., v1.2.3).
    Benefit: Full reproducibilityβ€”never changes.

Use the tag depth that matches your stability needs.

⚠️ Force Push Options

This action provides two force push options for different scenarios:

πŸ›‘οΈ force_with_lease (Recommended)

  • Uses git push --force-with-lease
  • Safer option that checks if someone else has pushed changes to the remote branch
  • Prevents accidentally overwriting other people's work
  • Required: Set fetch-depth: 0 in your actions/checkout step
  • Use case: Amending commits, rebasing, or other history modifications

⚑ force (Use with Caution)

  • Uses git push --force
  • Potentially dangerous as it will overwrite remote changes unconditionally
  • No safety checks - will overwrite any remote changes
  • Use case: Only when you're absolutely certain you want to overwrite remote changes

⚠️ Important: Never use both options simultaneously. force_with_lease takes precedence if both are set to true.

🀝 Contributing

Contributions are welcome! Please feel free to submit a Pull Request. Refer to the CONTRIBUTING for guidelines.

πŸ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.

πŸ”— Related Actions

πŸ’¬ Support

If you have any questions or need help, please:

  • πŸ“ Create an issue
  • 🌟 Star this repository if you find it useful!