PG

pajn/github-tray

开发工具

本页由 AI 翻译,技术细节请以原文为准。 查看原文

2 stars 质量 37 趋势 4

macOS 菜单栏应用,用于显示相关的 GitHub PR 以及审核和操作状态

概览

一个原生的macOS菜单栏应用,可以让你的GitHub拉取请求一目了然。 GitHub Tray 会在重点部分显示 PR,并允许你从菜单栏直接跳转到每个 PR。 - 在菜单栏显示PR。- 将你自创的PR拆分为:- - - - -(其他所有内容)- 显示你所在位置的PR。- 显示每个PR的状态指示器,用于检查(待处理、成功、失败)。- 支持可选的登录启动功能()。 - Core(GitHub-tray-core)用于GitHub API访问和应用状态。- 用于Rust Swift绑定。- macOS菜单栏UI(SwiftApp)。- 用于异步GitHub调用。 - macOS - Xcode + Xcode 命令行工具 - Rust(稳定版)- 仅 - xcodegen - ~/库/应用支持 / github-tray/config.toml - 使用 GitHub 个人访问令牌。- 私有仓库需要仓库范围。 - SwiftApp/build/build/Products/Release/GitHubTray.app

概述(AI 翻译)

一个原生的macOS菜单栏应用,可以让你的GitHub拉取请求一目了然。

GitHub Tray 会在重点部分显示 PR,并允许你从菜单栏直接跳转到每个 PR。

它的作用

  • 在菜单栏显示审核请求PRs。
  • 将你已撰写的PR拆分为:
  • 待审稿
  • 批准
  • 归还给你
  • 我的公开个人最佳记录(其他所有)
  • 向PR展示你在哪里被提及。
  • 显示每个PR的状态指示器,用于检查(待处理、成功、失败)。
  • 支持可选的登录启动(自动启动)。

技术堆栈

  • Rust 核心(github-tray-core)用于 GitHub API 访问和应用状态。
  • UniFFI 用于 Rust Swift 绑定。
  • Swift/AppKit macOS 菜单栏界面(SwiftApp)。
  • Tokio + Reqwest 用于异步 GitHub 调用。

项目布局

先修条件

  • macOS
  • Xcode + Xcode 命令行工具
  • 锈蚀(稳定)
  • just
  • xcodegen

安装辅助工具:

配置

创建配置文件:

这会产生:

  • ~/Library/Application Support/github-tray/config.toml

示例:

代币说明:

  • 使用GitHub个人访问令牌。
  • repo 范围对于私人仓库是必需的。

建造与奔跑

第一次

本页由 AI 翻译,技术细节请以原文为准。

README

以下为原文 README 节选,完整内容请查看原文。

GitHub Tray

A native macOS menu bar app that keeps your GitHub pull requests visible at a glance.

GitHub Tray shows PRs in focused sections and lets you jump straight to each PR from the menu bar.

What It Does

  • Shows Review Requested PRs in your menu bar.
  • Splits your authored PRs into:
    • Awaiting Reviewer
    • Approved
    • Returned to You
    • My Open PRs (everything else)
  • Shows PRs where you are Mentioned In.
  • Displays per-PR status indicators for checks (pending, success, failure).
  • Supports optional launch-at-login (Autostart).

Tech Stack

  • Rust core (github-tray-core) for GitHub API access and app state.
  • UniFFI for Rust Swift bindings.
  • Swift/AppKit macOS menu bar UI (SwiftApp).
  • Tokio + Reqwest for async GitHub calls.

Project Layout

github-tray/
├── Cargo.toml
├── justfile
├── build-xcode.sh
├── github-tray-core/          # Rust core + UniFFI
│   └── src/
└── SwiftApp/                  # Swift macOS app
    ├── project.yml            # XcodeGen spec
    └── GitHubTray/
        └── Sources/

Prerequisites

  • macOS
  • Xcode + Xcode Command Line Tools
  • Rust (stable)
  • just
  • xcodegen

Install helpers:

cargo install just
brew install xcodegen

Configuration

Create config file:

just setup-config

This creates:

  • ~/Library/Application Support/github-tray/config.toml

Example:

github_token = "ghp_xxx"
refresh_interval_secs = 300
autostart = true

Token notes:

  • Use a GitHub Personal Access Token.
  • repo scope is required for private repositories.

Build & Run

First time

just gen-xcode
just fresh

Day-to-day

just run

Build only

just build-app

App bundle output:

  • SwiftApp/build/Build/Products/Release/GitHubTray.app

Development Commands

just check       # cargo check
just test        # cargo test
just lint        # cargo clippy -- -D warnings
just fmt         # cargo fmt
just ci          # fmt-check + lint + test + check

Useful:

just clean       # clear Rust + Xcode build artifacts
just rebuild     # clean + build app
just open-bundle # open existing built app

How It Works

  1. Swift app starts GitHubTrayCore (Rust).
  2. Rust loads config from ~/Library/Application Support/github-tray/config.toml.
  3. Rust fetches PRs from GitHub GraphQL API on an interval.
  4. Rust sends AppState updates via UniFFI callback trait.
  5. Swift rebuilds the menu UI from the latest state.

Troubleshooting

“Config file not found”

Run:

just setup-config

“Failed to parse config” or token errors

Verify github_token is set and not placeholder text.

Xcode project missing

Run:

just gen-xcode

Swift/UI not reflecting Rust changes

Run a full rebuild:

just rebuild

Open app manually

在 GitHub 查看完整 README

推荐工具

换一个关键词,或者移除筛选条件。

安装

npx skillfish add pajn/github-tray
新手?先看 mcpskill.org 教程 →