The bot for Ionic and Capacitor repos, implemented using GitHub Actions.
There are two steps to setting up the configuration for this bot.
Add a GitHub Actions workflow file for the bot (usually .github/workflows/bot.yml
).
name: Bot
on:
push:
issues:
types: [opened, edited]
issue_comment:
types: [created]
jobs:
bot:
name: ${{ github.event_name }}/${{ github.event.action }}
runs-on: ubuntu-latest
steps:
- uses: ionic-team/bot@main
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
Though this bot is one GitHub Action, it does many things. Because of this, a separate configuration file is needed specifically for the bot (.github/bot.yml
):
tasks:
- name: remove-label
on:
issue_comment:
types: [created]
condition: 'payload.issue.number === 1'
config:
label: needs-reply
exclude-labeler: true
The tasks
key is an array of tasks, the event that triggers them, and their configuration. Notice how the on
block is copied from the workflow file to specify exactly which events triggers which tasks. You can also have a condition
expression, the result of which determines if the task is run for a particular event payload.
add-comment
: Add a comment to an issue, optionally closing and/or locking the issue
comment
(string): the comment textclose
(boolean): if true
, close the issuelock
(boolean): if true
, lock the issueadd-contributors
: Open a PR to modify README.md
when a new contributor appears in a base branch
base
(string): the base branchfile
(string): the file to edit (usually README.md
)commit-message
(string): the lodash template for the commit message; properties: base
, file
exclude-patterns
(string array): the patterns for excluding contributors, defaults to excluding users whose usernames end in [bot]
add-label
: Add a label to an issue
label
(string): the label to addadd-platform-labels
: Parse issue bodies and add labels to issues that have keywords under a Platform
headerremove-label
: Remove a label from an issue
label
(string): the label to removeexclude-labeler
(boolean): if true
, the label won't be removed if the event actor is the user that added the labelassign-to-project
: Assign an issue or pull request to a project
columns
(object)
issue
(number): the project column ID to put issues inpr
(number): the project column ID to put pull requests indraft-pr
(number): the project column ID to put draft PRs inThere are a variety of variables and functions available in condition
expressions.
payload
: the entire event payloadconfig
: the task configurationgetTeamMembers(teamSlug: string) => Promise<string[]>
: get the usernames of an organization team by slug