Skip to content

Latest commit

 

History

History
247 lines (188 loc) · 7.43 KB

README.md

File metadata and controls

247 lines (188 loc) · 7.43 KB

merge-me-action

license: MIT Continuous Integration Continuous Delivery Coveralls code style: prettier Commitizen friendly

Automatically merge Pull Requests created from a GitHub account.

Usage

The action supports three scenarios:

  • Where GitHub Actions are used exclusively.
  • Where a third party CI system provider is used.
  • Where both GitHub Actions and a third party CI system provider are used.

Depending on the scenario, different configuration is required, as described below.

GitHub Actions

When a repository uses GitHub Actions exclusively, Merge Me! action should be added as a last job in the CI workflow.

# .github/workflows/continuous-integration.yaml

jobs:
  # Other jobs are defined above.
  merge-me:
    name: Merge me!
    needs:
      - all
      - other
      - required
      - jobs
    runs-on: ubuntu-latest
    steps:
      - name: Merge me!
        uses: ridedott/merge-me-action@master
        with:
          # Depending on branch protection rules, a  manually populated
          # `GITHUB_TOKEN_WORKAROUND` environment variable with permissions to
          # push to a protected branch must be used. This variable can have an
          # arbitrary name, as an example, this repository uses
          # `GITHUB_TOKEN_DOTTBOTT`.
          #
          # When using a custom token, it is recommended to leave the following
          # comment for other developers to be aware of the reasoning behind it:
          #
          # This must be used as GitHub Actions token does not support
          # pushing to protected branches.
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

Third party CI systems

When a repository uses third party CI systems, Merge Me! action should be added as a stand-alone workflow, which is triggered by changes to checks and pull requests.

Create a new .github/workflows/merge-me.yaml file:

name: Merge me!

on:
  check_suite:
    types:
      - completed
  pull_request:
    types:
      - edited
      - labeled
      - opened
      - ready_for_review
      - reopened
      - synchronize
      - unlabeled
      - unlocked

jobs:
  merge-me:
    name: Merge me!
    runs-on: ubuntu-latest
    steps:
      - name: Merge me!
        uses: ridedott/merge-me-action@master
        with:
          # Depending on branch protection rules, a  manually populated
          # `GITHUB_TOKEN_WORKAROUND` environment variable with permissions to
          # push to a protected branch must be used. This variable can have an
          # arbitrary name, as an example, this repository uses
          # `GITHUB_TOKEN_DOTTBOTT`.
          #
          # When using a custom token, it is recommended to leave the following
          # comment for other developers to be aware of the reasoning behind it:
          #
          # This must be used as GitHub Actions token does not support
          # pushing to protected branches.
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

GitHub Actions and third party CI systems

When GitHub Actions and used in combination with third party CI systems, both of the configurations described above should be applied.

Configuration

Enable auto-merge for a different bot

You may have another bot that also creates PRs against your repository and you want to automatically merge those. By default, this GitHub Action assumes the bot is dependabot. You can override the bot name by changing the value of GITHUB_LOGIN parameter:

steps:
  - name: Merge me!
    uses: ridedott/merge-me-action@master
    with:
      GITHUB_LOGIN: my-awesome-bot-r2d2
      GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

Use of configurable pull request merge method

By default, this GitHub Action assumes merge method is SQUASH. You can override the merge method by changing the value of MERGE_METHOD parameter (one of MERGE, SQUASH or REBASE):

steps:
  - name: Merge me!
    uses: ridedott/merge-me-action@master
    with:
      GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      MERGE_METHOD: MERGE

Getting Started

These instructions will get you a copy of the project up and running on your local machine for development and testing purposes. See usage notes on how to consume this package in your project.

Prerequisites

Minimal requirements to set up the project:

  • Node.js v12, installation instructions can be found on the official website, a recommended installation option is to use Node Version Manager. It can be installed in a few commands.
  • A package manager npm. All instructions in the documentation will follow the npm syntax.
  • Optionally a Git client.

Installing

Start by cloning the repository:

git clone [email protected]:ridedott/merge-me-action.git

In case you don't have a git client, you can get the latest version directly by using this link and extracting the downloaded archive.

Go the the right directory and install dependencies:

cd merge-me-action
npm install

That's it! You can now go to the next step.

Testing

All tests are being executed using Jest. All tests files live side-to-side with a source code and have a common suffix: .spec.ts. Some helper methods are being stored in the test directory.

There are three helper scripts to run tests in the most common scenarios:

npm run test
npm run test:watch
npm run test:coverage

Formatting

This project uses Prettier to automate formatting. All supported files are being reformatted in a pre-commit hook. You can also use one of the two scripts to validate and optionally fix all of the files:

npm run format
npm run format:fix

Linting

This project uses ESLint to enable static analysis. TypeScript files are linted using a custom configuration. You can use one of the following scripts to validate and optionally fix all of the files:

npm run lint
npm run lint:fix

Publishing

Publishing is handled in an automated way and must not be performed manually.

Each commit to the master branch is automatically tagged using semantic-release.

Contributing

See CONTRIBUTING.md.

Built with

Automation

Source

Versioning

This project adheres to Semantic Versioning v2.