# probot-config

> A Probot extension that manages shared configs

Latest version **1.1.0** (published 2019-06-26) · BSD-3-Clause license · 0 weekly downloads

## Install

```sh
npm install probot-config
pnpm add probot-config
yarn add probot-config
bun add probot-config
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.1.0 |
| Published | 2019-06-26 |
| First published | 2017-10-19 |
| Weekly downloads | 0 |
| License | BSD-3-Clause |
| TypeScript types | none |
| Module format | CommonJS |
| Node | >=7.7.0 |
| Dependencies | 2 |
| Unpacked size | 21.2 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 64 |
| Author | Jan Michael Auer |
| Maintainers | benvinegar, billyvg, bkeepers, evanpurkhiser, gr2m, haza, hiimbex, jasonetco, jauer, kamilogorek, lynnagara, mattrobenolt, mitsuhiko, sentry-bot, tcbyrd |

## Links

- npm: https://www.npmjs.com/package/probot-config
- Repository: https://github.com/getsentry/probot-config
- Homepage: https://github.com/getsentry/probot-config#readme
- Issues: https://github.com/getsentry/probot-config/issues
- npm.io page: https://npm.io/package/probot-config

## Dependencies (2)

- [js-yaml](https://npm.io/package/js-yaml.md) ^3.10.0
- [deepmerge](https://npm.io/package/deepmerge.md) ^2.2.1

## Recent versions

- 1.1.0 (latest) — 2019-06-26
- 2.0.0-probot-8-preview (probot-8-preview) — 2019-01-12
- 1.0.1 — 2019-01-12
- 1.0.0 — 2018-11-20
- 0.2.0 — 2018-07-12
- 0.1.0 — 2017-10-19

## README

# Probot: Config

[![Downloads][npm-downloads]][npm-url] [![version][npm-version]][npm-url]
[![License][npm-license]][license-url]
[![Build Status][travis-status]][travis-url]

A [Probot](https://probot.github.io) 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.

```yaml
# octocat/probot-settings:.github/test.yaml
shared1: will be merged
shared2: will also be merged

# octocat/repo1:.github/test.yaml
_extends: probot-settings
other: AAA

# octocat/repo2:.github/test.yaml
_extends: probot-settings
shared2: overrides shared2
other: BBB

# octocat/repo3:.github/test.yaml
other: CCC # standalone, does not extend other configs
```

Configs are deeply-merged. Nested objects do not have to be redefined
completely. This is accomplished using [deepmerge](https://github.com/KyleAMathews/deepmerge). When using probot-config in an app, you can pass [options](https://github.com/KyleAMathews/deepmerge#options) through to `deepmerge`.

You can also reference configurations from other organizations:

```yaml
_extends: other/probot-settings
other: DDD
```

Additionally, you can specify a specific path for the configuration by
appending a colon after the project.

```yaml
_extends: probot-settings:.github/other_test.yaml
other: FFF
```

Inherited configurations are in the **exact same location** within the
repositories.

```yaml
# octocat/repo1:.github/test.yaml
_extends: .github
other: GGG

# octocat/.github:test.yaml
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.

```yaml
# octocat/repo1:.github/test.yaml <-- missing!
# octocat/.github:.github/test.yaml
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:

```yaml
# octocat/.github:.github/_test.yaml
shared1: Will be inherited by repo1 and not repo2

# octocat/repo1:.github/test.yaml
# Inherits from octocat/.github:_test.yaml
_extends: .github:_test.yaml
# octocat/repo3:.github/test.yaml <--missing!
# Is not merged with another config.
```

### An opt-out pattern

Alternatively, you may want to default to the config in your `.github` project
and occasionally opt-out. Example:

```yaml
# octocat/.github:.github/test.yaml
shared1: Will be inherited by repo1 and not repo2
# octocat/repo1:.github/test.yaml <-- missing!
# Uses octocat/.github:test.yaml instead

# octocat/repo3:.github/test.yaml <-- either empty or populated
# Will not inherit shared1, since no _extends field is specified
```

## Usage

```js
const getConfig = require('probot-config');

module.exports = robot => {
  robot.on('push', async context => {
    // Will look for 'test.yml' inside the '.github' folder
    const config = await getConfig(context, 'test.yml');
  });
};
```

## Development

```sh
# Install dependencies
npm install

# Run the bot
npm start

# Run test watchers
npm run test:watch
```

We use [prettier](https://prettier.io/) for auto-formatting and
[eslint](https://eslint.org/) as linter. Both tools can automatically fix a lot
of issues for you. To invoke them, simply run:

```sh
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.

[license-url]: https://github.com/getsentry/probot-config/blob/master/LICENSE
[npm-url]: https://www.npmjs.com/package/probot-config
[npm-license]: https://img.shields.io/npm/l/probot-config.svg?style=flat
[npm-version]: https://img.shields.io/npm/v/probot-config.svg?style=flat
[npm-downloads]: https://img.shields.io/npm/dm/probot-config.svg?style=flat
[travis-url]: https://travis-ci.org/getsentry/probot-config
[travis-status]: https://travis-ci.org/getsentry/probot-config.svg?branch=master

---
_Source: https://npm.io/package/probot-config · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
