summaryrefslogtreecommitdiff
path: root/README.md
blob: 24153175b4351365db5e6fcd6fe5ad08c49f554e (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# octosentry

A macOS menu bar app that aggregates GitHub security alerts — Dependabot,
code scanning, and secret scanning — across your repos into a single,
severity-ranked feed. No dashboard, no general-purpose GitHub browsing:
just a fast triage view that deep-links out to github.com to act.

## Features

- Unified feed across all three GitHub security alert types, normalized
  onto one severity scale
- Source badge, repo, GitHub's own severity label, one-line summary, and
  age for each alert
- Click an alert to open it directly on github.com
- Errors and unavailable sources (e.g. an alert type disabled for a repo)
  are surfaced in the popover instead of failing silently
- Zero third-party dependencies — pure SwiftUI and URLSession

## Requirements

- macOS 14 or later
- A GitHub personal access token (fine-grained or classic) with read
  access to Dependabot alerts, code scanning alerts, and secret scanning
  alerts for the repo you want to watch

## Usage

octosentry currently watches a single, hardcoded repo and reads its
GitHub token from the `GITHUB_TOKEN` environment variable — this is a
development-only shortcut ahead of a proper device authorization flow.

1. Build and run the app (see Building, below).
2. Set `GITHUB_TOKEN` in your **personal, non-shared** Xcode scheme
   (Product → Scheme → Edit Scheme… → Run → Arguments →
   Environment Variables). Don't add it to a shared scheme — that would
   commit the token to git.
3. Click the shield icon in the menu bar to open the popover. It fetches
   automatically on open, or use the refresh button.
4. Click any alert to open it on github.com.

If a source shows as unavailable, it usually means that alert type is
disabled for the repo, or the token is missing that one permission — not
that something is broken.

## Building

Open `octosentry.xcodeproj` in Xcode and run the `octosentry` scheme.
The project targets macOS 14 with Swift 6 language mode and strict
concurrency enabled — no package dependencies to resolve.

## Contributing

Issues and pull requests are welcome. A few things worth knowing before
you start:

- No third-party dependencies — this is a hard constraint, not a
  preference.
- Swift 6 strict concurrency is on; new code should compile clean under
  it, not suppress it.
- Match the existing file-per-type layout (models, mapping, API client,
  views) rather than introducing new architectural patterns.

## License

GPL-3.0 — see [LICENSE](LICENSE).