Bot
The bot for Ionic and Capacitor repos, implemented using GitHub Actions.
Config
There are two steps to setting up the configuration for this bot.
Workflow File
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 }}
Config File
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.
Tasks
add-comment
: Add a comment to an issue, optionally closing and/or locking the issuecomment
(string): the comment textclose
(boolean): iftrue
, close the issuelock
(boolean): iftrue
, lock the issue
add-contributors
: Open a PR to modifyREADME.md
when a new contributor appears in a base branchbase
(string): the base branchfile
(string): the file to edit (usuallyREADME.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 issuelabel
(string): the label to add
add-platform-labels
: Parse issue bodies and add labels to issues that have keywords under aPlatform
headerremove-label
: Remove a label from an issuelabel
(string): the label to removeexclude-labeler
(boolean): iftrue
, the label won't be removed if the event actor is the user that added the label
assign-to-project
: Assign an issue or pull request to a projectcolumns
(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 in
Condition Context
There 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