@@ -17,10 +17,21 @@ type GitHub struct {
1717}
1818
1919type GitHubPR struct {
20- Title string `json:"title"`
21- Body string `json:"body"`
22- Head string `json:"head"`
23- Base string `json:"base"`
20+ Title string `json:"title"`
21+ Body string `json:"body"`
22+ Head string `json:"head"`
23+ Base string `json:"base"`
24+ Labels []string
25+ }
26+
27+ type GitHubPRResponse struct {
28+ URL string `json:"url"`
29+ ID int `json:"id"`
30+ Number int `json:"number"`
31+ }
32+
33+ type GitHubPRLabelRequest struct {
34+ Labels []string `json:"labels"`
2435}
2536
2637func (g GitHub ) CreatePR (logger * slog.Logger ) error {
@@ -39,6 +50,43 @@ func (g GitHub) CreatePR(logger *slog.Logger) error {
3950 req .Header .Add ("X-GitHub-Api-Version" , "2022-11-28" )
4051 req .Header .Add ("Authorization" , fmt .Sprintf ("Bearer %s" , g .Token ))
4152
53+ resp , err := sendRequest (req )
54+ if err != nil {
55+ return err
56+ }
57+ logger .Debug (string (resp ))
58+ var gr GitHubPRResponse
59+ if err := json .Unmarshal (resp , & gr ); err != nil {
60+ return err
61+ }
62+
63+ if len (g .GitHubPR .Labels ) == 0 {
64+ return nil
65+ }
66+
67+ return g .CreateLabels (logger , gr .Number )
68+ }
69+
70+ func (g GitHub ) CreateLabels (logger * slog.Logger , pr int ) error {
71+ url := fmt .Sprintf ("https://api.github.com/repos/%s/%s/issues/%d/labels" , g .Owner , g .Repo , pr )
72+ labelRequest := GitHubPRLabelRequest {
73+ Labels : g .GitHubPR .Labels ,
74+ }
75+
76+ body , err := json .Marshal (labelRequest )
77+ if err != nil {
78+ return err
79+ }
80+ logger .Debug (string (body ))
81+
82+ req , err := http .NewRequest (http .MethodPost , url , bytes .NewReader (body ))
83+ if err != nil {
84+ return err
85+ }
86+ req .Header .Add ("Accept" , "application/vnd.github+json" )
87+ req .Header .Add ("X-GitHub-Api-Version" , "2022-11-28" )
88+ req .Header .Add ("Authorization" , fmt .Sprintf ("Bearer %s" , g .Token ))
89+
4290 resp , err := sendRequest (req )
4391 if err != nil {
4492 return err
@@ -60,10 +108,11 @@ func NewGitHub(pr PullRequest) (PRCreator, error) {
60108 Repo : pr .Repo ,
61109 Token : pr .Token ,
62110 GitHubPR : GitHubPR {
63- Title : pr .Title ,
64- Body : buf .String (),
65- Head : pr .Head ,
66- Base : pr .Base ,
111+ Title : pr .Title ,
112+ Body : buf .String (),
113+ Head : pr .Head ,
114+ Base : pr .Base ,
115+ Labels : pr .Labels ,
67116 },
68117 }, nil
69118}
0 commit comments