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

sprinter

v1.2.1

Published

Utilities for operating on issue trackers of several repositories at once.

Downloads

50

Readme

Sprinter Build Status Coverage Status

NPM

If you're like me, this library might save you an hour a week. I'm a "scrum master", which sounds silly but is actually a real thing. We have a lot of repos on GitHub. Most of them have issue trackers. So it takes a long time to update all of them for common recurring tasks like sprint changes. This library takes your GitHub credentials and gives you easy ways to set up tasks that execute against multiple GitHub Issue Trackers at once, so you can:

Run the following actions across multiple repos:

  • list issues
  • list milestones
  • create milestones
  • close milestones
  • update milestones
  • create labels
  • list labels
  • list collaborators

Need a UI?

Use sprinter-dash!

Example Usage

Sprinter is used as the backend to report on issues across all the repositories in the Numenta GitHub Organization on our status board.

Installation

As a library for local scripts

npm install sprinter

Now you can require('sprinter') and use as defined below in the examples.

As a command line tool

npm install -g sprinter

Now you can run sprinter from the command line.

sprinter --help

Displays usage information.

Sprinter CLI Tool: Utilities for operating on issue trackers of several repositories at once.

REQUIREMENTS
Environment variables with the GitHub username and personal access token (NOT your master password) for API calls:
    GH_USERNAME=<username>
    GH_PASSWORD=<personal access token>
Create a personal access token for sprinter.js at https://github.com/settings/applications -> 'Generate token' with 'repo', 'public_repo', and 'repo:status' checked.

USAGE
    sprinter <command> <cmd-options> --repos=org/repo,org2/repo2
 or
    sprinter <command> <cmd-options> --repos=./path/to/repo/file

The repo file should have one repo slug on each line. Instead of providing a --repos option, you could
set the $SPRINTER_REPOS environment variable instead.

COMMANDS
printRepos
    Prints the repositories Sprinter is configured to run against.
listIssues [--milestone="milestone name"] [--state="open/closed/all"]
    [--assignee="github username"]
    Prints all issues. Optionally filters by milestone name, assignee, or state.
listMilestones
    Prints all milestones.
listLabels
    Prints all labels.
listCollaborators
    Prints all collaborators.
createMilestones <title> <description> <due_on>
    Creates new milestone in each repo with given title, description, and due date.
    `due_on` should be a JS-formattable date string like 'Apr 16, 2014'.
closeMilestones <title>
    Closes all milestones matching title across all repos.
updateMilestones <title> <new-title> [due_on]
    Updates all milestones matching title across all repos.

EXAMPLE
sprinter createMilestones "1.0.1" "Bug Bash Release" "April 16, 2015" --repos=rhyolight/highlinker,rhyolight/chesster

WARNING: The CLI is not complete. There are some functions within the library that are not exposed as CLI functions.

CLI Usage

  1. Create a file with a list of repositories you want to use sprinter against. It should look something like mine:

    nupic-repos.txt

     numenta/nupic
     numenta/nupic.cerebro
     numenta/nupic.documents
     # You can add comments 
     numenta/nupic.core
     numenta/nupic.fluent
     numenta/nupic.fluent.server
     numenta/nupic-linux64
     numenta/nupic-darwin64
        
     # Whitespace between lines is okay
        
     numenta/pycept
     numenta/nupic.tools
     numenta/nupic.wallboard
     numenta/numenta.org
        

    You can also provide the list of repositories directly with the --repos option:

     $> sprinter listIssues --milestone="Sprint 19" --repos=org1/repo1,org1/repo2

    If you don't want to always specify the --repos option, set the same value into the $SPRINTER_REPOS environment variable. If --repos is not given with a CLI command, the $SPRINTER_REPOS value will be used instead.

  2. Run sprinter commands with the --repos= option, pointing to the file.

     $> sprinter listIssues --milestone="Sprint 19" --repos=nupic-repos.txt

    Sprinter Sample Output

  3. Run with --help for more commands and options.

Examples Of Using as a Library

Creating the Client

var Sprinter = require('sprinter');

var sprinter = new Sprinter(
    <username>,
    <password>,
    ['org1/repo1', 'org1/repo2', 'org2/repo1']
);

Listing All Issues Across All Repos

sprinter.getIssues(function(err, issues) {
    console.log(issues);
});

Using API Filters

You can use any API query params that the GitHub API supports when making queries by add a query object, like this:

sprinter.getIssues({assignee: 'rhyolight'}, function(err, issues) {
    console.log(issues);
});

In addition to the regular GitHub API queries, you can also add {repo: '<org>/<repo>'}, which will prevent Sprinter from querying all the monitored repositories and focus on just one repo.

sprinter.getIssues({
    assignee: 'rhyolight'
  , repo: 'numenta/nupic'
}, function(err, issues) {
    console.log(issues);
});

This will only query the numenta/nupic repository and return issues assigned to @rhyolight.

For getIssues, you may also use {state: 'all'} to get both open and closed issues.

Listing All Pull Requests Across All Repos

sprinter.getPullRequests(function (err, issues) {
   if (err) { return console.log(err); }
   _.each(issues, function(issue) {
       console.log('%s: (%s) %s', issue.id, issue.repo, issue.title);
   });
});

Listing All Milestones Across All Repos

Milestones will be grouped by title.

sprinter.getMilestones(function(err, milestones) {
    console.log(milestones);
});

Creating A Milestone Across All Repos

sprinter.createMilestones({
    title: 'Sprint 20',
    due_on: 'Apr 16, 2014'
}, function(err, milestones) {
    console.log(milestones);
});

Updating A Milestone Across All Repos

Provide a milestone title and new milestone properties, and you can update all milestones with that name across every repository.

sprinter.updateMilestones('Milestone name to update', {
    title: 'New milestone name',
    due_on: 'May 5, 2015',
    description: 'New milestone description'
}, function(err, milestones) {
    console.log(milestones);
});

Closing Milestones by Title Across All Repos

Closes all milestones with the title Sprint 18 across all monitored repos.

sprinter.closeMilestones('Sprint 18', function(err, closed) {
    console.log('Closed milestones:');
    console.log(closed);
});

Creating Labels Across All Repos

var labels = [
    {
        name: "cleanup",
        color: "c7def8"
    },
    {
        name: "newbie",
        color: "bfe5bf"
    },
    {
        name: "tests",
        color: "fad8c7"
    }
]

sprinter.createLabels(labels, function (err, labels) {
    console.log(labels);
});

List Labels Across All Repos

sprinter.getLabels(function (err, labels) {
    console.log(labels);
});

List Collaborators Across All Repos

sprinter.getCollaborators(function (err, collaborators) {
    console.log(err);
    console.log(collaborators.length);
});