Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions Info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@
<key>CFBundleDevelopmentRegion</key><string>en</string>
<key>CFBundleLocalizations</key><array><string>en</string></array>
<key>CFBundlePackageType</key><string>APPL</string>
<key>CFBundleShortVersionString</key><string>0.8.0</string>
<key>CFBundleVersion</key><string>13</string>
<key>CFBundleShortVersionString</key><string>0.8.1</string>
<key>CFBundleVersion</key><string>14</string>
<key>LSMinimumSystemVersion</key><string>14.0</string>
<key>LSUIElement</key><true/>
<key>NSHighResolutionCapable</key><true/>
Expand Down
4 changes: 3 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ Broschy is a small, native macOS companion that lives around your MacBook's notc

## Get started

**Current version: 0.8.0.** Broschy is an early, source-first release. Build it locally with **Xcode 26 or later** and its macOS SDK. The app's deployment target is **macOS 14**; hands-on validation has been on macOS 26 and Apple Silicon. The build produces an app for your Mac's architecture.
**Current version: 0.8.1.** Broschy is an early, source-first release. Build it locally with **Xcode 26 or later** and its macOS SDK. The app's deployment target is **macOS 14**; hands-on validation has been on macOS 26 and Apple Silicon. The build produces an app for your Mac's architecture.

```sh
git clone https://github.com/SculptTechProject/Broschy.git
Expand Down Expand Up @@ -115,6 +115,8 @@ In **Signals → Build Watch**, connect one GitHub.com repository or pull reques

Broschy uses your existing GitHub CLI access and checks up to ten recent workflow runs about every 30 seconds. Failed requests retry less often. A workflow observed active and then completed can show its result in the notch for 12 seconds; existing completed runs on first connection are silent, and repeated results are deduplicated. Runs that finish entirely between polls appear in the list but do not trigger a compact result. Compact visibility and Quiet Focus still apply.

Each row shows a fixed **Updated** date and time from GitHub, not a running duration. A completed workflow appears after the next successful poll; use Refresh for an immediate check.

Open a workflow in GitHub to inspect it. Build Watch only reads status: it does not download workflow logs, rerun jobs, cancel workflows, or merge pull requests. GitHub Enterprise hosts and watching several targets at once are outside this version. Disconnect to stop polling.

## Terminal signals
Expand Down
12 changes: 9 additions & 3 deletions Sources/Broschy/BuildWatchView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,12 @@ struct BuildWatchView: View {
private func row(_ run: BuildWatchRun) -> some View {
let stale = !builds.isLive
let color = stale ? Ink.muted : run.state.tint
// GitHub's updated_at is metadata freshness, not an execution duration.
// A relative date keeps ticking even after the workflow has completed.
let updateTime = run.updatedAt.formatted(.dateTime.month(.abbreviated).day()
.hour(.twoDigits(amPM: .omitted)).minute(.twoDigits).locale(Locale(identifier: "en_GB")))
let fullUpdateTime = run.updatedAt.formatted(.dateTime.year().month(.abbreviated).day()
.hour(.twoDigits(amPM: .omitted)).minute(.twoDigits).second(.twoDigits).locale(Locale(identifier: "en_GB")))
return Button { NSWorkspace.shared.open(run.htmlURL) } label: {
HStack(spacing: 10) {
Image(systemName: stale && run.isActive ? "questionmark.circle" : run.state.symbol)
Expand All @@ -195,16 +201,16 @@ struct BuildWatchView: View {
VStack(alignment: .trailing, spacing: 3) {
Text(stale && run.isActive ? "Last seen active" : run.statusText)
.font(.system(size: 10, weight: .medium)).foregroundStyle(color).lineLimit(1)
Text(run.updatedAt, style: .relative)
Text("Updated \(updateTime)")
.font(.system(size: 9)).foregroundStyle(Ink.muted).lineLimit(1)
}
Image(systemName: "arrow.up.right").font(.system(size: 9)).foregroundStyle(Ink.muted)
}
.padding(.vertical, 9).contentShape(Rectangle())
}
.buttonStyle(QuietButtonStyle())
.help("\(run.name) · \(run.statusText) · Open workflow on GitHub")
.accessibilityLabel("\(run.name), \(stale && run.isActive ? "last seen active" : run.statusText). Open workflow on GitHub.")
.help("\(run.name) · \(run.statusText) · Last GitHub update: \(fullUpdateTime) · Open workflow on GitHub")
.accessibilityLabel("\(run.name), \(stale && run.isActive ? "last seen active" : run.statusText). Updated \(fullUpdateTime). Open workflow on GitHub.")
}

private var connectionDetail: String {
Expand Down
Binary file modified docs/assets/build-watch-dark.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.