/go-gh

A Go module for interacting with gh and the GitHub API from the command line.

Primary LanguageGoMIT LicenseMIT

go-gh beta

This project is in beta! Feedback is welcome.

A Go module for CLI Go applications and gh extensions that want a convenient way to interact with gh, and the GitHub API using gh environment configuration.

go-gh supports multiple ways of getting access to gh functionality:

  • Helpers that automatically read a gh config to authenticate themselves
  • gh.Exec shells out to a gh install on your machine

If you'd like to use go-gh on systems without gh installed and configured, you can provide custom authentication details to the go-gh API helpers.

Installation

go get github.com/cli/go-gh

Usage

package main
import (
	"fmt"
	"github.com/cli/go-gh"
)

func main() {
	// These examples assume `gh` is installed and has been authenticated

	// Execute `gh issue list -R cli/cli`, and print the output.
	args := []string{"issue", "list", "-R", "cli/cli"}
	stdOut, _, err := gh.Exec(args...)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println(stdOut.String())
	
	// Use an API helper to grab repository tags
	client, err := gh.RESTClient(nil)
	if err != nil {
		fmt.Println(err)
		return
	}
	response := []struct{ Name string }{}
	err = client.Get("repos/cli/cli/tags", &response)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println(response)
}

See examples for more use cases.

Reference Documentation

Full reference docs can be found on pkg.go.dev.

Contributing

If anything feels off, or if you feel that some functionality is missing, please check out the contributing page. There you will find instructions for sharing your feedback, and submitting pull requests to the project.