Skip to content

Building from Source

Lane Holloway edited this page Oct 22, 2026 · 4 revisions

Building from source

You need Go 1.26.7 or later, plus the GitHub CLI and Claude Code to run it.

git clone https://github.com/drlholloway/fast-lane.git
cd fast-lane
go build -o fast-lane .
./fast-lane

A build from a checkout reports its version as the commit and date, such as dev (ea0a369, 2026-10-21), with modified if the checkout had uncommitted changes. A build of a tagged commit reports the tag. To set it explicitly:

go build -ldflags "-X github.com/drlholloway/fast-lane/internal/version.Version=v0.2.0" -o fast-lane .

Tests

go test -race ./...

The tests need git on your PATH; they create throwaway repositories to test worktrees. They never touch GitHub, your config, or your code folders. Claude Code is played by a stand-in.

Screenshots

The images in this wiki are rendered from made-up data (a fictional acme organization), not from a real account, so they can be re-taken whenever the screens change. A test writes each screen, in color, as terminal output; freeze turns them into images:

go install github.com/charmbracelet/freeze@latest
FASTLANE_SCREENSHOTS=/tmp/shots go test ./internal/tui -run TestScreenshots
cd /tmp/shots
for f in *.ansi; do
  freeze "$f" -o "${f%.ansi}.png" --window --padding 20 --margin 0 --border.radius 8 --font.size 14 --background "#171717" </dev/null
done

The demo data and the list of screens are in internal/tui/screenshots_test.go.

Layout

Package Role
main.go Flags, wiring, start-up
internal/tui The terminal interface, built with Bubble Tea: tabs, dialogs, the rules editor and settings
internal/claude Session manager: runs claude -p in stream-json mode, answers its permission requests through the TUI, worktrees
internal/github REST and GraphQL client built on go-gh (so it uses gh's login), change detection, the notifications inbox
internal/auto Matches items and triggers to auto rules and decides what auto-runs
internal/config Settings, rules, actions, validation
internal/prompt Built-in prompts and Claude's system prompt
internal/state What Fast Lane has seen, fired and run, saved between runs
internal/local Finds local checkouts in the code folders
internal/doctor Prerequisite checks for the Settings tab
internal/version Works out the version from the build

Releasing

Move the Unreleased section of CHANGELOG.md under a new ## X.Y.Z — date heading, commit, then tag that commit and push the tag:

git tag -a v0.2.0 -m "Fast Lane v0.2.0"
git push origin v0.2.0

The release workflow runs the tests, builds macOS and Linux archives with the version baked in, and publishes a GitHub Release with those archives, a SHA256SUMS file, and that changelog section as its notes. go install …@latest picks up the new version, and running copies of Fast Lane notice it within a day: they look for a newer release when they start and once a day after that. A build from a checkout counts as out of date when a release was published after its commit.

Contributing

See CONTRIBUTING.md. CI builds, vets, checks gofmt, and runs the tests with the race detector on Linux and macOS for every push and pull request. Please report security problems privately, as SECURITY.md describes.

Clone this wiki locally