Skip to content

Releases: abeckDev/BarKeeper

v1.0.1

Choose a tag to compare

@github-actions github-actions released this 14 May 20:39
v1.0.1
e7a7e5e

🔄 BarKeeper v1.0.1

A focused feature release adding the new Alternator resource type, UI clickability improvements, and a new example Feed script.


✨ New Features

⇄ Alternator Resource Type

A new resource type that displays a live string label in the menu bar and switches between discrete states with a single click.

  • The status script prints the current state to stdout (e.g. Personal or Work) — displayed as a pill badge in the resource row
  • The action script is executed on click to advance to the next state, after which the status is automatically re-polled to refresh the badge
  • Full state management: loading indicator, error display, and Notification Center alerts on success or failure
  • Participates in the automatic polling loop alongside toggle resources
  • Fully supported across the Settings editor, resource list, and menu bar view
  • Added to the JSON config schema with "type": "alternator", statusScript, and actionScript fields

Example use cases:

  • Switch between GitHub.com and GitHub Enterprise accounts (gh auth switch)
  • Rotate kubectl contexts (kubectl config use-context)

See the new wiki guide: Switch Git Profile with the Alternator Resource

🖱️ Clickable Icon Areas in Menu Bar View

Navigation icons in the menu bar popup now have an expanded hit area via .contentShape(Rectangle()), making them easier to click — especially on smaller displays.

🚗 New Example: Commute Home Feed Script

Added docs/commute-home-feed.swift — a fully self-contained Swift script that uses MapKit + CoreLocation (no third-party dependencies) to calculate your current driving time home and display it as a Feed resource with trend tracking (faster/slower than last check).


🐛 Bug Fixes

  • Status polling now gracefully handles missing status scripts — resources with no statusScript configured no longer get stuck in a loading state; isLoading is now properly reset and lastChecked is updated.

📖 Documentation

  • README updated to document the Alternator resource type, including a full description, example config JSON, and updated config schema reference table
  • Architecture overview updated to reflect the four resource types now supported
  • Inline code comments cleaned up in ResourceManager.swift

🔧 Internal Changes

  • Added nilIfEmpty utility extension on String in ResourceManager.swift for cleaner optional script handling
  • ResourceEditorView script-saving logic updated to correctly map statusScript and actionScript for alternator resources
  • SettingsView sidebar icon selection updated from a binary toggle/button check to a full switch statement covering all four resource types

📦 Installation

Download BarKeeper.dmg from this release, open it, and drag BarKeeper.app into your Applications folder. The app is signed and notarized.

Checksums (SHA256)

  • DMG: 815d4df707bf45a6757b979d61578196b156d0bf9461044d6603f4b06836bdae
  • ZIP: 7e438201691ff252f3c11d9495481c871e6df5ab29768b8371f3cf750d2f4144

Full Changelog: v1.0.0...v1.0.1

Checksums (SHA256)

  • DMG: 815d4df707bf45a6757b979d61578196b156d0bf9461044d6603f4b06836bdae
  • ZIP: 7e438201691ff252f3c11d9495481c871e6df5ab29768b8371f3cf750d2f4144

Full Changelog: v1.0.0...v1.0.1

v1.0.0

Choose a tag to compare

@github-actions github-actions released this 09 May 03:43
v1.0.0
cf5b03a

🎉 BarKeeper v1.0.0

The first major release of BarKeeper. This version ships three features and squashes a notable bug in the Settings dialog.

✨ New Features

📋 Feed Resource Type

A new read-only resource type that runs a script, parses its JSON output, and displays results as an expandable list directly in your menu bar popup.

  • Click the refresh button to run the script on demand (feed resources are manual-refresh only — they don't participate in the automatic polling loop)
  • A green badge shows how many items are new (isNew: true)
  • Supports an optional title, timestamp (checkedAt), and item subtitles/details (shown as tooltips on hover)
  • Renders up to 20 items; overflow is summarised as "… + N more"
  • Tolerates noisy login-shell output (Homebrew nags, nvm, direnv) — BarKeeper extracts the last top-level {…} block from stdout, so your script doesn't need to suppress shell chatter
  • Includes a full FeedPayload JSON schema and a sample script in docs/sample-feed-script.sh

Built-in highlight: includes a new embedded foundry-check CLI tool (by @LaetitiaMa1410) that reports Microsoft Foundry model availability by region — ready to use as a Feed resource out of the box.

⚠️ Critical Actions

Button resources can now be marked as Critical. When enabled, clicking the button shows a system-level macOS confirmation dialog before the script runs — perfect for destructive or irreversible operations like deleting resources or force-pushing.

  • Toggle the "Critical Action" option per-resource in the Settings editor
  • Uses a native NSAlert that appears centered on screen, independent of the menu bar popover
  • Defaults to false; existing configs are unaffected

🔔 macOS Notification Center Integration

BarKeeper now sends native macOS notification banners when actions complete or fail — so you always know the outcome even if you've switched to another app.

  • Notifications fire on toggle on/off, button actions, and feed refreshes (success ✅ and error ❌)
  • Per-user opt-out: a new "Enable Notification Center alerts" toggle in Settings → Notifications persists your preference to disk
  • Existing configs automatically opt-in on upgrade (no migration needed)
  • Implemented via a clean, injectable NotificationService class — documented in docs/notification-service.md

🐛 Bug Fixes

Settings Dialog Stability (#16)

Fixed two related bugs in the Settings dialog:

  1. Editing a resource while a task was in-flight caused UI flicker and orphaned async tasks — because updateResource() was replacing the entire ResourceState object, resetting isLoading/lastError and losing the reference held by running tasks. Now the resource property is updated in-place, preserving all runtime state.
  2. Switching resources in the sidebar did not refresh the editor panel — SwiftUI reused the same view and .onAppear did not re-fire. Fixed by adding .id(state.id) to force a proper view refresh on selection change.

👥 Contributors

  • @LaetitiaMa1410 — Feed resource type & foundry-check CLI integration (first contribution! 🎉)
  • @abeckDev — Critical Actions, resource state bug fix
  • @Copilot — Notification Center integration

📦 Installation

Download BarKeeper.dmg from this release, open it, and drag BarKeeper.app into your Applications folder. The app is signed and notarized — Gatekeeper will allow it without extra steps.

Full Changelog: v0.1.2...v1.0.0

Checksums (SHA256)

  • DMG: 3b2510a24b29b48ec54528d11372eb9a92e7bebe727a958c0fdc651efcb778a9
  • ZIP: 1993018fab23c95352ed28cc2adf8b44f5008ce4b13b8b293a313c74d613f0d6

New Contributors

Full Changelog: v0.1.2...v1.0.0

v0.1.2 - First Beta Release

Choose a tag to compare

@github-actions github-actions released this 02 Apr 14:14
2bdaab0

🍺 BarKeeper v0.1.2 — First Beta Release

Use your macOS Bar to Keep your environments and shortcuts under control.

This is the first public beta of BarKeeper — a lightweight, native macOS menu bar app for managing resources with one click. Run scripts, monitor the status of applications, or spin up and shutdown cloud resources — all from your macOS top bar.

✨ Features

Menu Bar Native

  • Lives entirely in your macOS menu bar — no Dock icon clutter
  • Custom app icon for the menu bar and application

Two Resource Types

  • Toggle — Stateful on/off controls with three scripts (status, on, off) and live status indicators:
    • 🟢 Green dot — resource is ON (exit code 0)
    • ⚪ Gray dot — resource is OFF (non-zero exit code)
    • 🔴 Red dot — an error occurred during the last action
  • Button — Stateless one-click action that executes a single script immediately. Perfect for one-off tasks like deploying a build, flushing a cache, or opening a dashboard.

Configurable Polling

  • Automatic status checks with adjustable intervals from 1 minute to 1 hour
  • Manual-only polling option (set interval to 0)

Settings UI

  • Full add / edit / delete resource management through a native SwiftUI settings window with sidebar navigation
  • Resource editor form for configuring scripts, names, and resource types
  • Settings window opens reliably and comes to the front

JSON Import & Export

  • Export your entire configuration as a portable BarKeeper-config.json file for sharing or backup
  • Import a JSON configuration file (replaces the current config and refreshes all statuses immediately)

Built-in Azure Fabric Capacity Template

  • Pre-configured resource template for Azure Fabric Capacity management (resume/suspend) to get started instantly with Azure CLI

Shell Script Execution

  • Scripts run using your default login shell ($SHELL -l -c "...") so Homebrew, nvm, pyenv, custom PATH entries, and tools like az CLI are all available
  • stdout and stderr captured separately and trimmed
  • Exit code determines success or failure

Version Label

  • App version displayed in the menu bar popup
  • Development builds clearly marked when version is not injected by CI

🛠 Developer & Project Infrastructure

  • XcodeGen-powered — Xcode project is generated from project.yml and never committed to the repo
  • Environment-based code signingDEVELOPMENT_TEAM resolved from an environment variable, keeping signing credentials out of source
  • Hardened Runtime enabled for Gatekeeper compatibility
  • Automated CI/CD release pipeline via GitHub Actions:
    • Build → Code Sign (Developer ID) → Notarize with Apple → Package as .dmg and .zip → Draft GitHub Release with SHA256 checksums
    • Version and build number automatically injected from git tag and run number
  • Comprehensive documentation — README with screenshots, getting started guide, script examples, architecture overview, troubleshooting table, and security considerations
  • Release pipeline docs (docs/RELEASE.md) covering all pipeline stages, required secrets, and troubleshooting
  • CODEOWNERS file for review assignment
  • MIT Licensed

📋 System Requirements

  • macOS 15.0+ (Sequoia)
  • Xcode 16+ / Swift 6.0+ (for building from source)
  • (Optional) Azure CLI for the built-in Azure template

📦 Installation

Download BarKeeper.dmg from this release, open it, and drag BarKeeper.app into your Applications folder. The app is signed and notarized — macOS Gatekeeper will allow it to run without any additional steps.

🔮 What's Next

We have exciting features planned for upcoming releases:

⚠️ Known Limitations

This is a beta release — please report any bugs via GitHub Issues. Key things to keep in mind:

  • Config is stored in cleartext at ~/Library/Application Support/BarKeeper/config.json — avoid storing secrets directly in scripts
  • App Sandbox is disabled (required for arbitrary shell command execution)
  • Scripts run with your full user privileges

Checksums (SHA256)

  • DMG: 2e3a06bb739378beeb87f6d14c77daa0c7d69b294f94f1f8aed36afe06738e1e
  • ZIP: 16cbea0b82136e5b671b6f2a488a248e2269dd9ae2c33e4e159e2c67d16e7bb7

Full Changelog: v0.1.1...v0.1.2

v0.1.1

v0.1.1 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 31 Mar 09:27

Checksums (SHA256)

  • DMG: 431c33703f03e09b8556d4ac0ad35d3568a8c141c1d6d91149c30fb6e17cdc0a
  • ZIP: e4ac7c5a1148a4f1e86f2d85490b36bdb1d71ad486e71aae7b1f28da22d2f6ad

What's Changed

  • Add docs/RELEASE.md: release pipeline documentation for macOS CI/CD by @Copilot in #9
  • docs: add download instructions for pre-built releases by @Copilot in #10

New Contributors

  • @Copilot made their first contribution in #9

Full Changelog: v0.1.0...v0.1.1

v0.1.0

v0.1.0 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 30 Mar 22:44
fcf9c42

Checksums (SHA256)

  • DMG: d5c7682415ae1201574160fb75c5a6e6c358c1f91f3c321e444c9a71090d4da1
  • ZIP: 283ccf0294a98cffab1d758961cd5433775f894b42a6a66f91265ab9ae25ee65

Full Changelog: https://github.com/abeckDev/BarKeeper/commits/v0.1.0

Full Changelog: https://github.com/abeckDev/BarKeeper/commits/v0.1.0