Open-Source Wikis

/

Bubble Tea

/

How to contribute

/

Tooling

charmbracelet/bubbletea

Tooling

The tools that build, lint, test, and release Bubble Tea.

Taskfile

Taskfile.yaml exposes two thin wrappers:

tasks:
  lint:
    cmds:
      - golangci-lint run
  test:
    cmds:
      - go test ./... {{.CLI_ARGS}}

Use task -l to see them. They exist mostly to provide one-line muscle memory; they do not encode special flags beyond what go test and golangci-lint defaults provide.

golangci-lint

.golangci.yml enables a fairly aggressive linter set:

  • bodyclose, exhaustive, goconst, godot, gomoddirectives, goprintffuncname, gosec, misspell, nakedret, nestif, nilerr, noctx (with a slog/log exclusion), nolintlint, prealloc, revive, rowserrcheck, sqlclosecheck, tparallel, unconvert, unparam, whitespace, wrapcheck.
  • Formatters: gofumpt, goimports.
  • exhaustive treats a default: case as exhaustive.
  • max-issues-per-linter: 0 and max-same-issues: 0 mean every finding shows in the report.

CI pins golangci-lint v2.9 (.github/workflows/lint.yml).

GitHub Actions

Workflow Trigger Purpose
build.yml push, PR Builds the library, the examples/ module, and the root module against go.mod. Uses Charm's shared meta/.github/workflows/build.yml.
lint.yml push, PR Runs golangci-lint v2.9 with .golangci.yml and a 10-minute timeout.
coverage.yml push, PR Runs go test -race -covermode=atomic and uploads to Codecov.
examples.yml push to master, manual Runs go mod tidy for examples/ and tutorials/, auto-commits.
dependabot-sync.yml weekly cron, manual Syncs Dependabot config from charmbracelet/meta.
lint-sync.yml weekly cron, manual Syncs lint config from charmbracelet/meta.
release.yml tag push (v*.*.*) Invokes the shared goreleaser workflow with all the social/release secrets.

The build.yml and lint.yml workflows reuse the shared charmbracelet/meta workflows. Changes to those workflow files affect all Charm projects, not just Bubble Tea.

goreleaser

.goreleaser.yml is intentionally tiny — release.yml delegates the heavy lifting to charmbracelet/meta/.github/workflows/goreleaser.yml. The shared workflow handles GitHub releases, Docker images, social posts to Twitter/Mastodon, and a Discord webhook ping when a new version drops.

Dependabot

.github/dependabot.yml (synced from the shared meta repo) groups all Go module updates into a single weekly PR titled chore(deps): bump … in the all group. The bot accounts for ~107 of the ~1,861 commits.

Build tools used by examples

The examples/go.mod pulls in:

  • charm.land/bubbles/v2 — the companion components library.
  • charm.land/lipgloss/v2 — styling.
  • charm.land/x/... — subset of utility packages.

These are not in the main go.mod so contributors do not pay for them when they only touch the runtime.

VS Code workspace

There is no .vscode/ directory committed; the project relies on gopls defaults plus gofumpt. If you use other editors, configure them to match .golangci.yml's formatter list to avoid noisy diffs.

Built by Factory AutoWiki from public repository content. It is a generated preview for codebase exploration, not source-maintained documentation.

Tooling – Bubble Tea wiki | Factory