Probot: Config

A Probot extension to easily share configs between
repositories.
Setup
Just put common configuration keys in a common repository within your
organization. Then reference this repository from config files with the same
name.
shared1: will be merged
shared2: will also be merged
_extends: probot-settings
other: AAA
_extends: probot-settings
shared2: overrides shared2
other: BBB
other: CCC
Configs are deeply-merged. Nested objects do not have to be redefined
completely. This is accomplished using deepmerge. When using probot-config in an app, you can pass options through to deepmerge
.
You can also reference configurations from other organizations:
_extends: other/probot-settings
other: DDD
Additionally, you can specify a specific path for the configuration by
appending a colon after the project.
_extends: probot-settings:.github/other_test.yaml
other: FFF
Inherited configurations are in the exact same location within the
repositories.
_extends: .github
other: GGG
other: HHH
Additionally, if there is no config file, but there is a repo in the org named
.github
, it will be used as a base repository.
other: III
Recipes
These recipes are specific to usage of the .github repo name, which is the
recommended place to store your configuration files. Within the .github repository,
your configuration must live in a .github/
folder.
An opt-in pattern
You may want to create a configuration that other projects in your org inherit
from on an explicit opt-in basis. Example:
shared1: Will be inherited by repo1 and not repo2
_extends: .github:_test.yaml
An opt-out pattern
Alternatively, you may want to default to the config in your .github
project
and occasionally opt-out. Example:
shared1: Will be inherited by repo1 and not repo2
Usage
const getConfig = require('probot-config');
module.exports = robot => {
robot.on('push', async context => {
const config = await getConfig(context, 'test.yml');
});
};
Development
npm install
npm start
npm run test:watch
We use prettier for auto-formatting and
eslint as linter. Both tools can automatically fix a lot
of issues for you. To invoke them, simply run:
npm run fix
It is highly recommended to use VSCode and install the suggested extensions.
They will configure your IDE to match the coding style, invoke auto formatters
every time you save and run tests in the background for you. No need to run the
watchers manually.