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 命令行工具
- 锈蚀(稳定)
justxcodegen
安装辅助工具:
配置
创建配置文件:
这会产生:
~/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
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.
reposcope 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
- Swift app starts
GitHubTrayCore(Rust). - Rust loads config from
~/Library/Application Support/github-tray/config.toml. - Rust fetches PRs from GitHub GraphQL API on an interval.
- Rust sends
AppStateupdates via UniFFI callback trait. - 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
推荐工具
换一个关键词,或者移除筛选条件。
安装
npx skillfish add pajn/github-tray