triage-party

module
v1.0.0-beta.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 23, 2020 License: Apache-2.0

README

Triage Party 🎉

NOTE: This is not an officially supported Google product

Triage Party is a tool for triaging incoming GitHub issues for large open-source projects, built with the GitHub API.

screenshot

Triage focuses on reducing response latency for incoming GitHub issues and PR's, and ensure that conversations are not lost in the ether. It was built from the Google Container DevEx team's experience contributing to open-source projects, such as minikube, kaniko, and skaffold.

Triage Party is a stateless Go web application, configured via YAML. While it has been optimized for Google Cloud Run deployments, it's deployable anywhere due to its low memory footprint: even on a Raspberry Pi.

Features

  • Queries across multiple repositories
  • Queries that are not possible on GitHub:
    • conversation direction (tag: recv)
    • duration (updated: +30d)
    • regexp (label: priority/.*)
    • reactions (reactions: >=5)
    • comment popularity (comments-per-month: >0.9)
    • ... and more!
  • Multi-player mode: for simultaneous group triage of a pool of issues
  • Button to open issue groups as browser tabs (pop-ups must be disabled)
  • "Shift-Reload" for live data pull

Requirements

Triage Party in production

Triage Party is used in production for kubernetes/minikube:

Other examples:

Try it locally

See what Triage Party would look like for an arbitrary repository:

go run cmd/server/main.go \
  --github-token-file=<path to a github token> \
  --config examples/generic-kubernetes.yaml \
  --repos kubernetes/sig-release

Then visit http://localhost:8080/

The first time you run Triage Party against a new repository, there will be a long delay as it will download data from GitHub. This data will be cached for subsequent runs. We're working to improve this latency.

Configuration

Each page is configured with a strategy that references multiple queries (tactics). These tactics can be shared across pages:

strategies:
  - id: soup
    name: I like soup!
    tactics:
      - discuss
      - many-reactions

tactics:
  discuss:
    name: "Items for discussion"
    resolution: "Discuss and remove label"
    filters:
      - label: triage/discuss
      - state: "all"

  many-reactions:
    name: "many reactions, low priority, no recent comment"
    resolution: "Bump the priority, add a comment"
    filters:
      - reactions: ">3"
      - reactions-per-month: ">1"
      - label: "!priority/p0"
      - label: "!priority/p1"
      - responded: +60d

For example configurations, see examples/*.yaml. There are two that are particularly useful to get started:

  • generic-project: uses label regular expressions that work for most GitHub projects
  • generic-kubernetes: for projects that use Kubernetes-style labels, particularly prioritization

Filter language

# issue state (default is "open")
- state:(open|closed|all)

# GitHub label
- label: [!]regex

# Internal tagging: particularly useful tags are:
# - recv: updated by author more recently than a project member
# - recv-q: updated by author with a question
# - send: updated by a project member more recently than the author
- tag: [!]regex

# GitHub milestone
- milestone: string

# Duration since item was created
- created: [-+]duration   # example: +30d
# Duration since item was updated
- updated: [-+]duration
# Duration since item was responded to by a project member
- responded: [-+]duration

# Number of reactions this item has received
- reactions: [><=]int  # example: +5
# Number of reactions per month on average
- reactions-per-month: [><=]float

# Number of comments this item has received
- comments: [><=]int
# Number of comments per month on average
- comments-per-month: [><=]int
# Number of comments this item has received while closed!
- comments-while-closed: [><=]int

# Number of commenters on this item
- commenters: [><=]int
# Number of commenters who have interactive with this item while closed
- commenters-while-closed: [><=]int
# Number of commenters tthis item has had per month on average
- commenters-per-month: [><=]float

How to deploy

Docker:

env DOCKER_BUILDKIT=1 \
  GITHUB_TOKEN_PATH=<path to your github token> \
  docker build --tag=tp \
  --build-arg CFG=examples/generic-project.yaml \
  --secret id=github,src=$GITHUB_TOKEN_PATH .

docker run -p 8080:8080 tp

Cloud Run:

See examples/minikube-deploy.sh

Kubernetes:

See examples/kubernetes-manifests

Directories

Path Synopsis
cmd
pkg
initcache
initcache provides a disk cache for getting up and running
initcache provides a disk cache for getting up and running
site
Package handlers define HTTP handlers.
Package handlers define HTTP handlers.
updater
updater package handles background updates of GitHub data
updater package handles background updates of GitHub data

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL