npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

probot-config

v1.1.0

Published

A Probot extension that manages shared configs

Downloads

2,289

Readme

Probot: Config

Downloads version License Build Status

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.

# 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. 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.

# 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.

# 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:

# 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:

# 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

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

# Install dependencies
npm install

# Run the bot
npm start

# Run test watchers
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.