package cli
import (
"fmt"
"time"
"github.com/alyraffauf/tg/atproto"
"github.com/alyraffauf/tg/tangled"
"github.com/bluesky-social/indigo/atproto/syntax"
"github.com/spf13/cobra"
)
var (
issueCreateBody string
issueCreateBodyFile string
issueCreateRepo string
)
var issueCreateCmd = &cobra.Command{
Use: "create
",
Short: "Create an issue on a Tangled repository",
Args: cobra.ExactArgs(1),
RunE: func(cmd *cobra.Command, args []string) error {
ctx := cmd.Context()
body, err := commandBody(issueCreateBody, issueCreateBodyFile)
if err != nil {
return err
}
atClient, did, err := authenticatedATProto(ctx)
if err != nil {
return err
}
targetArgs := []string{}
if issueCreateRepo != "" {
targetArgs = []string{issueCreateRepo}
}
handle, name, err := resolveTarget(ctx, targetArgs)
if err != nil {
return err
}
repoDid, err := findRepoDid(ctx, handle, name)
if err != nil {
return err
}
rkey := string(syntax.NewTIDNow(0))
uri, _, err := atClient.PutRecord(ctx, atproto.PutRecordInput{
Repo: did,
Collection: "sh.tangled.repo.issue",
Rkey: rkey,
Record: tangled.IssueRecord{
Type: "sh.tangled.repo.issue",
Repo: repoDid,
Title: args[0],
Body: body,
CreatedAt: time.Now().UTC().Format(time.RFC3339),
},
})
if err != nil {
return fmt.Errorf("create issue: %w", err)
}
return output(createdRecordResult{Rkey: rkey, URI: uri}, func(result createdRecordResult) {
fmt.Printf("Created issue %s\n", result.URI)
})
},
}
func init() {
issueCreateCmd.Flags().StringVarP(&issueCreateBody, "body", "b", "", "Issue body")
issueCreateCmd.Flags().StringVarP(&issueCreateBodyFile, "body-file", "F", "", "Read issue body from file")
issueCreateCmd.Flags().StringVarP(&issueCreateRepo, "repo", "R", "", "Target repository as handle/repo")
}