Git Operations in GitHub actions
Git commands, such as checkout, add, create a branch, make a pull request in Github actions.
Checkout (Clone a repository)¶
The official actions/checkout action clones the repository to $GITHUB_WORKSPACE
. By default it uses built-in GITHUB_TOKEN
for authentication.
In most cases, this is what you need:
- uses: actions/checkout@v4
The checkout action also supports pushing a commit to the same repo.
Warning
This may not work on protected branches that need status checks.
on: push
jobs:
git-push:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: |
date > generated.txt
git config user.name github-actions
git config user.email github-actions@github.com
git add .
git commit -m "generated"
git push
However, no further workflows will be triggered with the GITHUB_TOKEN
. You will need the following steps to trigger workflows.
How to trigger further CI runs¶
You will need either a Personal access token (PAT) with repo
scope access as an action secret.
- uses: actions/checkout@v4
with:
token: ${{ secrets.PAT }}
Or a pair of SSH keys; the public key is the deploy key with write access, while the private key is an action secret variable SSH_PRIVATE_KEY
.
- uses: actions/checkout@v4
with:
ssh-key: ${{ secrets.SSH_PRIVATE_KEY }}
Push changes back to GitHub¶
The following actions are more convenient for commit and push than the official checkout action.
Create a pull request¶
The peter-evans/create-pull-request action will commit all files into a new branch and make a pull request to the target (default main
) branch.
- name: Create Pull Request
uses: peter-evans/create-pull-request@v6
with:
# token: ${{ secrets.PAT }} # A PAT is required for triggering pull request workflows
token: ${{ secrets.GITHUB_TOKEN }} # This will not trigger further workflows
Merge pull requests¶
- Kodiak Bot : automatic merge PRs based on the issue label. (by default
automerge
). See also auto-deps-update. - Run
gh pr merge --merge --auto $PR_NUMBER
in the workflow. - peter-evans/enable-pull-request-automerge : A GitHub action to enable auto-merge on a pull request.