Files
Kevin Minehart 13f4cf162e CI: move grafana-build into pkg/build (#105640)
* move grafana-build into pkg/build
2025-05-20 10:48:00 -05:00

45 lines
1.2 KiB
Go

package git
import (
"bytes"
"context"
"fmt"
"log"
"os"
"os/exec"
"strings"
)
// LookupGitHubToken will try to find a GitHub access token that can then be used for various API calls but also cloning of private repositories.
func LookupGitHubToken(ctx context.Context) (string, error) {
log.Print("Looking for a GitHub token")
// First try: Check if it's in the environment. This can override everything!
token := os.Getenv("GITHUB_TOKEN")
if token != "" {
log.Print("Using GitHub token provided via environment variable")
return token, nil
}
// Next, check if the user has gh installed and *it* has a token set:
var data bytes.Buffer
var errData bytes.Buffer
ghPath, err := exec.LookPath("gh")
if err != nil {
return "", fmt.Errorf("GitHub CLI not installed (expected a --github-token flag, a GITHUB_TOKEN environment variable, or a configured GitHub CLI)")
}
//nolint:gosec
cmd := exec.CommandContext(ctx, ghPath, "auth", "token")
cmd.Stdout = &data
cmd.Stderr = &errData
if err := cmd.Run(); err != nil {
log.Printf("Querying gh for an access token failed: %s", errData.String())
return "", fmt.Errorf("lookup in gh failed: %w", err)
}
log.Print("Using GitHub token provided via gh")
return strings.TrimSpace(data.String()), nil
}