This is an action for auto-fix of generated files.
It pushes the current change to the pull request, i.e., git commit && git push origin
.
Here are the example use-cases.
gofmt
package-lock.json
, yarn.lock
or go.sum
--fix
Here is an example workflow.
on:
pull_request:
push:
branches:
- main
jobs:
generate:
runs-on: ubuntu-latest
permissions:
# required to push a commit
contents: write
# required to create a pull request
pull-requests: write
steps:
- uses: actions/checkout@v3
# something to generate files
- run: yarn graphql-codegen
# push the change if exists
- uses: int128/update-generated-files-action@v2
pull_request
eventWhen the workflow is run on pull_request
event, this action adds the current change into the head branch.
If there is no change in the current directory, this action does nothing.
For example, if yarn graphql-codegen
updated the code, this action adds a commit of the change.
Because the workflow should pass on the new commit, this action exits with the following failure:
By default, actions/checkout
checks out the merge branch.
This action works on both merge branch or head branch.
If the last 5 commits are added by this action, it exits with an error to prevent the infinite loop.
You can customize the commit as follows:
jobs:
generate:
steps:
- uses: int128/update-generated-files-action@v2
with:
# set a custom message to the new commit (optional)
commit-message: 'Fix: yarn graphql-codegen'
push
or other eventsWhen the workflow is run on other events such as push
or schedule
,
this action tries to apply the current change by the following order:
If there is no change, this action does nothing.
For example, if yarn graphql-codegen
updated the generated code in the workflow,
this action pushes a commit to main
branch.
If push was failed due to the branch protection rule, the action creates a pull request.
You can customize the pull request as follows:
jobs:
generate:
steps:
- uses: int128/update-generated-files-action@v2
with:
# Set a custom title or body to the pull request (optional)
title: Regenerate graphql code
body: Updated by `yarn graphql-codegen`
# Request reviewers for the pull request (optional)
reviewers: |
username
org/team
# Create a draft pull request (optional)
# This is useful to prevent CODEOWNERS from receiving a review request.
draft: true
# Add labels to the pull request (optional)
labels: |
updated-grapgql-codegen
# Set a custom message to the new commit (optional)
commit-message: 'Fix: yarn graphql-codegen'
This action uses the default token by default, but it does not trigger a workflow on the new commit. You need to reopen a pull request to trigger a workflow.
To trigger a workflow on the new commit, you need to set a personal access token or GitHub App token.
jobs:
generate:
steps:
- uses: int128/update-generated-files-action@v2
with:
token: ${{ secrets.YOUR_TOKEN }}
It is recommended to set CODEOWNERS to receive a review request when this action creates a pull request. Alternatively, you can set the reviewers, for example,
jobs:
generate:
steps:
- uses: int128/update-generated-files-action@v2
with:
reviewers: |
your-organization/frontend-devs
You can update both dependencies and generated files as follows:
If the generated files are inconsistent, automerge will be stopped due to the failure of this action.
Name | Default | Description |
---|---|---|
commit-message |
action.yaml | Commit messgae |
commit-message-footer |
action.yaml | Footer of commit message |
title |
action.yaml | Title of the pull request |
body |
action.yaml | Body of the pull request |
draft |
false | If true, create a draft pull request |
reviewers |
(optional) | Request reviewers for the pull request (multiline) |
labels |
(optional) | Add labels to the pull request (multiline) |
token |
github.token |
GitHub token |
Name | Description |
---|---|
pull-request-number |
Number of pull request *1 |
pull-request-url |
URL of pull request *1 |
*1: Available only when the action creates a pull request.
If the working directory does not have git-diff, this action exits successfully.
If the working directory has git-diff, this action exits with the following status:
push
event, it exits with the failure.opened
type of pull_request
event, it exits with the failure.synchronize
type of pull_request
event, it exits with the failure.This design is because the current workflow should pass on the new commit.
If you need to refer the outputs after this action, you can specify always()
in the consequent step.
For example,
- uses: int128/update-generated-files-action
id: update-generated-files
# update-generated-files-action fails when it creates a pull request
- if: always() && steps.update-generated-files.outputs.pull-request-number != ''
run: gh pr ${{ steps.update-generated-files.outputs.pull-request-number }} # something to manipulate the pull request