go-gh
is a collection of Go modules to make authoring GitHub CLI extensions easier.
Modules from this library will obey GitHub CLI conventions by default:
CurrentRepository()
respectsGH_REPO
and reads from git remote configuration as fallback;- GitHub API requests will be authenticated using the same mechanism as gh, respecting
GH_TOKEN
andGH_HOST
if present; - Inspecting
term
capabilities is done with respect to e.g.NO_COLOR
; - Generating table- or Go template-based output uses the same engine as gh;
- The
browser
module activates the user's preferred web browser.
See the go-gh full reference documentation.
package main
import (
"fmt"
"log"
"github.com/cli/go-gh"
)
func main() {
// These examples assume `gh` is installed and has been authenticated
// Shell out to a gh command and read its output
issueList, _, err := gh.Exec("issue", "list", "--repo", "cli/cli", "--limit", "5")
if err != nil {
log.Fatal(err)
}
fmt.Println(issueList.String())
// Use an API helper to grab repository tags
client, err := gh.RESTClient(nil)
if err != nil {
log.Fatal(err)
}
response := []struct{
Name string
}{}
err = client.Get("repos/cli/cli/tags", &response)
if err != nil {
log.Fatal(err)
}
fmt.Println(response)
}
See examples for more demonstrations of usage.
If anything feels off, or if you feel that some functionality is missing, please check out our contributing docs. There you will find instructions for sharing your feedback and for submitting pull requests to the project. Thank you!