Skip to content

Termite is a collection of utilities for building CLI tools in Go

License

Notifications You must be signed in to change notification settings

twelvelabs/termite

Repository files navigation

Termite

docs build codecov

Termite is a collection of utilities for building CLI tools in Go.

A few things to note:

  • This is still a WIP. I'm in the process of extracting things here when I find reusable patterns that I'm repeating often. This probably won't be stable or useful for others for a while, so... use at your own risk 😬 (at least until a 1.0 release).
  • Some of these packages were inspired or copied from the GitHub CLI project. I'm a big fan ❤️ and I've done my best to give proper attribution per the license. If anyone from that team feels I've misappropriated anything, please let me know and I'll try to make amends.

Install

go get github.com/twelvelabs/termite

Usage

package main

import (
    "github.com/twelvelabs/termite/api"
    "github.com/twelvelabs/termite/conf"
    "github.com/twelvelabs/termite/ui"
)

func main() {
    type Config struct {
        BaseURL string `default:"https://0.0.0.0/api/v1" validate:"required,url"`
        Debug   bool   `default:"true"`
    }

    // Loads and validates config values from ~/.config/my-app/config.yaml
    config, _ := conf.NewLoader(&Config{}, ConfigFile("my-app")).Load()
    client := api.NewRESTClient(&api.ClientOptions{
        BaseURL: config.BaseURL,
    })

    type APIResponse struct {
        Status string `json:"statusMessage"`
    }

    u := ui.NewUserInterface(ui.NewIOStreams())
    ok, _ := u.Confirm("Proceed?", true, "Some help text...")
    if ok {
        u.ProgressIndicator.Start("Requesting")
        resp := &APIResponse{}
        err := client.Get("/some/endpoint", resp)
        if err != nil {
            u.Out(u.FailureIcon() + " API failure: %v\n", err)
        } else {
            u.Out(u.InfoIcon() + " API success: %v\n", resp.Status)
        }
        u.ProgressIndicator.Stop()
    }
    u.Out(u.SuccessIcon() + " Done\n")
}

Output:

? Proceed? Yes
• API success: some status message
✓ Done

Development

git clone git@github.com:twelvelabs/termite.git
cd termite

make setup
make build
make test

# Show full usage
make

About

Termite is a collection of utilities for building CLI tools in Go

Topics

Resources

License

Code of conduct

Security policy

Stars

Watchers

Forks

Packages

No packages published