github-notifier

module
v1.0.0 Latest Latest
Warning

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

Go to latest
Published: Jun 15, 2026 License: MIT

README

GitHub Notifier

CI codecov Go Report Card

System tray app that monitors GitHub pull requests and sends desktop notifications. Built to explore Go's concurrency model, cross-platform GUI patterns, and efficient API design.

Goals

  • Practice idiomatic Go: channels, goroutines, interface-driven design
  • Integrate with OS-native APIs (systray, desktop notifications) across Linux/macOS/Windows
  • Minimize GitHub API usage via batched GraphQL and tiered polling
  • Ship something actually useful day-to-day

Features

  • System tray — runs silently in the background
  • Desktop notifications — native alerts for new PRs and activity
  • Participation tracking — tracks PRs you've reviewed, not just open review requests
  • Activity tracking (optional) — comments, reviews, and commits on your PRs
  • Slack integration (optional) — DM notifications via Slack bot
  • Theme-aware icons — auto-switches dark/light based on system theme
  • Optimised API usage — batched GraphQL cuts total API calls
  • Multi-platform — Linux, macOS, Windows

Prerequisites

  • Go 1.22+golang.org/dl
  • GitHub Personal Access Tokencreate one with repo:read and read:user
  • GTK3 (Linux only):
# Ubuntu/Debian
sudo apt-get install libgtk-3-dev libappindicator3-dev

# Fedora/RHEL
sudo dnf install gtk3-devel libappindicator-gtk3-devel

# Arch
sudo pacman -S gtk3 libappindicator-gtk3

Quick Start

git clone https://github.com/oak/github-notifier.git
cd github-notifier
go build -o github-notifier ./cmd/github-notifier
export GITHUB_TOKEN="your_token_here"
./github-notifier

First run creates ~/.github-notifier.conf and opens it in your editor.

Configuration

Loaded from ~/.github-notifier.conf; environment variables override.

Variable Required Default Description
GITHUB_TOKEN GitHub personal access token
SLACK_OAUTH_TOKEN Slack bot token for DM notifications
CHECK_INTERVAL_MINUTES 1 Minutes between checks (1–60)
ENABLE_ACTIVITY_TRACKING false Track comments, reviews, commits
RECENT_PR_THRESHOLD_HOURS 72 PRs younger than this check every minute
STALE_PR_CHECK_INTERVAL 15 Check stale PRs every N minutes
INCLUDE_DRAFT_PRS true Include drafts you've participated in
MACOS_NOTIFICATION_SENDER macOS notification bundle ID

How It Works

Participation Tracking

Two queries run each cycle:

  • is:open is:pr review-requested:@me
  • is:open is:pr reviewed-by:@me

The second query matters: GitHub removes you from "requested reviewers" once you approve, so without it you'd silently lose visibility on PRs you already reviewed but are still open.

Activity Tracking

When enabled, uses a two-tier polling strategy to reduce API load:

Tier Condition Frequency
Recent PR < 72h old Every minute
Stale PR ≥ 72h old Every 15 minutes

PRs with unseen activity show * in the tray menu until clicked.

Docs

License

MIT

Directories

Path Synopsis
cmd
github-notifier command
domain
infrastructure
persistence/json
Package json provides a JSON-file-backed implementation of the pullrequest.PRTrackingRepository port.
Package json provides a JSON-file-backed implementation of the pullrequest.PRTrackingRepository port.
ui
internal
test
e2e

Jump to

Keyboard shortcuts

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