3.9 KiB
next |
---|
docs/configuration.md |
Extensions
While Probot doesn't have an official extension API (yet), there are a handful of reusable utilities that have been extracted from existing apps.
Config
probot-config is an extension for sharing configs between repositories.
const getConfig = require('probot-config')
module.exports = app => {
app.on('push', async context => {
// Will look for 'test.yml' inside the '.github' folder
const config = await getConfig(context, 'test.yml')
context.log(config, 'Loaded config')
})
}
Use the _extends
option in your configuration file to extend settings from another repository.
For example, given .github/test.yml
:
_extends: github-settings
# Override values from the extended config or define new values
name: myrepo
This configuration will be merged with the .github/test.yml
file from the github-settings
repository, which might look like this:
shared1: will be merged
shared2: will also be merged
Just put common configuration keys in a repository within your organization. Then reference this repository from config files with the same name.
Commands
probot-commands is an extension that adds slash commands to GitHub. Slash commands are lines that start with /
in comments on Issues or Pull Requests that allow users to interact directly with your app.
For example, users could add labels from comments by typing /label in-progress
.
const commands = require('probot-commands')
module.exports = app => {
// Type `/label foo, bar` in a comment box for an Issue or Pull Request
commands(app, 'label', (context, command) => {
const labels = command.arguments.split(/, */)
return context.github.issues.addLabels(context.issue({ labels }))
})
}
Metadata
probot-metadata is an extension that stores metadata on Issues and Pull Requests.
For example, here is a contrived app that stores the number of times that comments were edited in a discussion and comments with the edit count when the issue is closed.
const metadata = require('probot-metadata')
module.exports = app => {
app.on(['issues.edited', 'issue_comment.edited'], async context => {
const kv = await metadata(context)
await kv.set('edits', await kv.get('edits') || 1)
})
app.on('issues.closed', async context => {
const edits = await metadata(context).get('edits')
context.github.issues.createComment(context.issue({
body: `There were ${edits} edits to issues in this thread.`
}))
})
}
Scheduler
probot-scheduler is an extension to trigger events on a periodic schedule. It triggers a schedule.repository
event every hour for each repository it has access to.
const createScheduler = require('probot-scheduler')
module.exports = app => {
createScheduler(app)
app.on('schedule.repository', context => {
// this event is triggered on an interval, which is 1 hr by default
})
}
Check out stale to see it in action.
Attachments
probot-attachments adds message attachments to comments on GitHub. This extension should be used any time an app is appending content to user comments.
const attachments = require('probot-attachments')
module.exports = app => {
app.on('issue_comment.created', context => {
return attachments(context).add({
'title': 'Hello World',
'title_link': 'https://example.com/hello'
})
})
}
Check out probot/unfurl to see it in action.
Community Created Extensions
probot-messages was created by @dessant to deliver messages that require user action to ensure the correct operation of the app.