Code Monkey home page Code Monkey logo

autoupdate0.1's Introduction

autoupdate

Tests codecov

autoupdate is a GitHub Action that auto-updates pull requests branches whenever changes land on their destination branch.

Usage

Create a file, in your repository, at .github/workflows/autoupdate.yaml with the following:

name: autoupdate
on:
  # This will trigger on all pushes to all branches.
  push: {}
  # Alternatively, you can only trigger if commits are pushed to certain branches, e.g.:
  # push:
  #   branches:
  #     - master
  #     - unstable
jobs:
  autoupdate:
    name: autoupdate
    runs-on: ubuntu-22.04
    steps:
      - uses: docker://chinthakagodawita/autoupdate-action:v1
        env:
          GITHUB_TOKEN: '${{ secrets.GITHUB_TOKEN }}'

This will trigger on all pushes and automatically update any pull requests, if changes are pushed to their destination branch.

For more information on customising event triggers, see Github's documentation.

The following events are supported:

  • push
  • pull_request
  • workflow_run
  • workflow_dispatch
  • schedule

Configuration

The following configuration options are supported. To change any of these, simply specify it as an env value in your workflow file.

All configuration values, except GITHUB_TOKEN, are optional.

  • GITHUB_TOKEN: autoupdate uses this token to perform its operations on your repository. This should generally be set to "${{ secrets.GITHUB_TOKEN }}".

    You may want to override this if you want the action to run as a different user than the default actions bot.

  • DRY_RUN: Enables 'dry run' mode, possible values are "true" or "false" (default).

    In dry run mode, merge/update operations are logged to the console but not performed. This can be useful if you're testing this action or testing a particular configuration value.

  • PR_FILTER: Controls how autoupdate chooses which pull requests to operate on. Possible values are:

    • "all" (default): No filter, autoupdate will monitor and update all pull requests.
    • "labelled": Only monitor PRs with a particular label (or set of labels). Requires the PR_LABELS option to be defined to. If PR_LABELS is not defined, autoupdate will not monitor any pull requests.
    • "protected": Only monitor PRs that are raised against protected branches.
    • "auto_merge": Only monitor PRs that have 'auto merge' enabled
  • PR_LABELS: Controls which labels autoupdate will look for when monitoring PRs. Only used if PR_FILTER="labelled". This can be either a single label or a comma-separated list of labels.

  • PR_READY_STATE: Controls how autoupdate monitors pull requests based on their current draft / ready for review state. Possible values are:

    • "all": (default): No filter, autoupdate will monitor and update pull requests regardless of ready state.
    • "ready_for_review": Only monitor PRs that are not currently in the draft state.
    • "draft": Only monitor PRs that are currently in the draft state.
  • EXCLUDED_LABELS: Controls which labels autoupdate will ignore when evaluating otherwise-included PRs. This option works with all PR_FILTER options and can be either a single label or a comma-separated list of labels.

  • MERGE_MSG: A custom message to use when creating the merge commit from the destination branch to your pull request's branch.

  • RETRY_COUNT: The number of times a branch update should be attempted before autoupdate gives up (default: "5").

  • RETRY_SLEEP: The amount of time (in milliseconds) that autoupdate should wait between branch update attempts (default: "300").

  • MERGE_CONFLICT_ACTION: Controls how autoupdate handles a merge conflict when updating a PR. Possible values are:

    • "fail" (default): autoupdate will report a failure on each PR that has a merge conflict.
    • "ignore": autoupdate will silently ignore merge conflicts.

Here's an example workflow file with all of the above options specified:

name: autoupdate
on:
  push: {}
jobs:
  autoupdate:
    name: autoupdate
    runs-on: ubuntu-22.04
    steps:
      - uses: docker://chinthakagodawita/autoupdate-action:v1
        env:
          GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
          DRY_RUN: "false"
          PR_FILTER: "labelled"
          PR_LABELS: "autoupdate,keep up-to-date,integration"
          EXCLUDED_LABELS: "dependencies,wontfix"
          MERGE_MSG: "Branch was auto-updated."
          RETRY_COUNT: "5"
          RETRY_SLEEP: "300"
          MERGE_CONFLICT_ACTION: "fail"

Outputs

Name Description
conflicted true or false which indicates whether merge conflicts were found or not

Here's an example workflow file with the outputs above:

name: autoupdate
on:
  push: {}
jobs:
  autoupdate:
    name: autoupdate
    runs-on: ubuntu-18.04
    steps:
      - uses: docker://chinthakagodawita/autoupdate-action:v1
        id: autoupdate
        env:
          GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
          MERGE_CONFLICT_ACTION: "ignore"

      - run: echo 'Merge conflicts found!'
        if: ${{ steps.autoupdate.outputs.conflicted }}

      - run: echo 'No merge conflicts'
        if: ${{ !steps.autoupdate.outputs.conflicted }}

Examples

See chinthakagodawita/autoupdate-test/pulls for a repository where autoupdate is enabled. This is currently configured to only run on PRs that have the autoupdate tag added to them.

Here's a screenshot:

An example of autoupdate running on a pull request

Limitations

  • Branch updates events caused by this action will not trigger any subsequent workflows
    • This is a documented limitation for all GH actions:

      An action in a workflow run can't trigger a new workflow run. For example, if an action pushes code using the repository's GITHUB_TOKEN, a new workflow will not run even when the repository contains a workflow configured to run when push events occur.

    • There is an open issue in the Github community forum tracking this

Coming soon

  • Rebase support
  • Token support in custom merge messages

Also see

autoupdate0.1's People

Contributors

dependabot[bot] avatar chinthakagodawita avatar anarast avatar ken-matsui avatar mfranzke avatar pjohnmeyer avatar vanessayuenn avatar adrian-gomez avatar dependabot-preview[bot] avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.