Skip to content

Commit 25818dc

Browse files
authored
Merge pull request #81 from vitessio/enhance-error-code
Enhance and optimize the error code generation
2 parents 3415871 + efc33b2 commit 25818dc

File tree

3 files changed

+120
-59
lines changed

3 files changed

+120
-59
lines changed

go/documentation_generation.go

+43-6
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,14 @@ limitations under the License.
1717
package main
1818

1919
import (
20+
"bufio"
2021
"context"
2122
"fmt"
2223
"net/http"
2324
"os"
25+
"path"
2426
"path/filepath"
27+
"regexp"
2528
"strings"
2629

2730
"github.com/google/go-github/v53/github"
@@ -87,16 +90,50 @@ func cloneWebsiteAndGetCurrentVersionOfDocs(ctx context.Context, website *git.Re
8790
return "", errors.Wrapf(err, "Failed to pull vitessio/website to generate error code on Pull Request %d", prInfo.num)
8891
}
8992

90-
_, err := shell.NewContext(ctx, "cp", "./tools/get_release_from_docs.sh", website.LocalDir).Output()
93+
currentVersionDocs, err := findCorrespondingDocumentationVersion(website, prInfo.base.GetRef())
9194
if err != nil {
92-
return "", errors.Wrapf(err, "Failed to copy ./tools/get_release_from_docs.sh to local clone of website repo to generate error code on Pull Request %d", prInfo.num)
95+
return "", errors.Wrapf(err, "Failed to find corresponding documentation version for Pull Request %d", prInfo.num)
9396
}
97+
return currentVersionDocs, nil
98+
}
9499

95-
currentVersionDocsBytes, err := shell.New("./get_release_from_docs.sh").InDir(website.LocalDir).Output()
96-
if err != nil {
97-
return "", errors.Wrapf(err, "Failed to get current documentation version from config.toml in vitessio/website to generate error code on Pull Request %d", prInfo.num)
100+
func findCorrespondingDocumentationVersion(website *git.Repo, baseRef string) (string, error) {
101+
// If our base is "main" we want to open the config.toml of the website repository
102+
// and figure out what is the "next" release.
103+
if baseRef == "main" {
104+
file, err := os.Open(path.Join(website.LocalDir, "config.toml"))
105+
if err != nil {
106+
return "", errors.Wrapf(err, "Failed to open config.toml file")
107+
}
108+
defer file.Close()
109+
110+
var result string
111+
112+
scanner := bufio.NewScanner(file)
113+
for scanner.Scan() {
114+
line := scanner.Text()
115+
if strings.Contains(line, "next") {
116+
parts := strings.Split(line, "\"")
117+
if len(parts) > 1 {
118+
result = parts[1]
119+
}
120+
break
121+
}
122+
}
123+
124+
if err := scanner.Err(); err != nil {
125+
return "", errors.Wrapf(err, "Failed to scan config.toml file %s", file.Name())
126+
}
127+
return strings.TrimSpace(result), nil
98128
}
99-
return string(currentVersionDocsBytes), nil
129+
130+
re := regexp.MustCompile(`release-(\d+\.\d+)`)
131+
matches := re.FindStringSubmatch(baseRef)
132+
if len(matches) == 2 {
133+
return matches[1], nil
134+
}
135+
136+
return "", errors.Errorf("Failed to find corresponding documentation version in config.toml baseRef=%s", baseRef)
100137
}
101138

102139
func generateErrorCodeDocumentation(

go/pull_request.go

+77-48
Original file line numberDiff line numberDiff line change
@@ -130,59 +130,88 @@ func (h *PullRequestHandler) Handle(ctx context.Context, eventType, deliveryID s
130130
return errors.Wrap(err, "failed to parse issue comment event payload")
131131
}
132132

133+
var err error
133134
switch event.GetAction() {
134135
case "opened":
135-
prInfo := getPRInformation(event)
136-
if prInfo.repoName == "vitess" {
137-
err := h.addReviewChecklist(ctx, event, prInfo)
138-
if err != nil {
139-
return err
140-
}
141-
err = h.addLabels(ctx, event, prInfo)
142-
if err != nil {
143-
return err
144-
}
145-
err = h.createDocsPreview(ctx, event, prInfo)
146-
if err != nil {
147-
return err
148-
}
149-
err = h.createErrorDocumentation(ctx, event, prInfo)
150-
if err != nil {
151-
return err
152-
}
153-
}
136+
err = h.openedPullRequest(ctx, event)
154137
case "closed":
155-
prInfo := getPRInformation(event)
156-
if prInfo.merged && prInfo.repoName == "vitess" {
157-
err := h.backportPR(ctx, event, prInfo)
158-
if err != nil {
159-
return err
160-
}
161-
err = h.updateDocs(ctx, event, prInfo)
162-
if err != nil {
163-
return err
164-
}
165-
}
138+
err = h.closedPullRequest(ctx, event)
166139
case "labeled":
167-
prInfo := getPRInformation(event)
168-
if prInfo.repoName == "vitess" {
169-
err := h.addArewefastyetComment(ctx, event, prInfo)
170-
if err != nil {
171-
return err
172-
}
173-
}
140+
err = h.labeledPullRequest(ctx, event)
174141
case "synchronize":
175-
prInfo := getPRInformation(event)
176-
if prInfo.repoName == "vitess" {
177-
err := h.createDocsPreview(ctx, event, prInfo)
178-
if err != nil {
179-
return err
180-
}
181-
err = h.createErrorDocumentation(ctx, event, prInfo)
182-
if err != nil {
183-
return err
184-
}
185-
}
142+
err = h.synchronizePullRequest(ctx, event)
143+
}
144+
return err
145+
}
146+
147+
func (h *PullRequestHandler) openedPullRequest(ctx context.Context, event github.PullRequestEvent) error {
148+
prInfo := getPRInformation(event)
149+
if prInfo.repoName != "vitess" {
150+
return nil
151+
}
152+
153+
err := h.addReviewChecklist(ctx, event, prInfo)
154+
if err != nil {
155+
return err
156+
}
157+
err = h.addLabels(ctx, event, prInfo)
158+
if err != nil {
159+
return err
160+
}
161+
err = h.createDocsPreview(ctx, event, prInfo)
162+
if err != nil {
163+
return err
164+
}
165+
err = h.createErrorDocumentation(ctx, event, prInfo)
166+
if err != nil {
167+
return err
168+
}
169+
return nil
170+
}
171+
172+
func (h *PullRequestHandler) closedPullRequest(ctx context.Context, event github.PullRequestEvent) error {
173+
prInfo := getPRInformation(event)
174+
if prInfo.repoName != "vitess" || !prInfo.merged {
175+
return nil
176+
}
177+
178+
err := h.backportPR(ctx, event, prInfo)
179+
if err != nil {
180+
return err
181+
}
182+
err = h.updateDocs(ctx, event, prInfo)
183+
if err != nil {
184+
return err
185+
}
186+
return nil
187+
}
188+
189+
func (h *PullRequestHandler) labeledPullRequest(ctx context.Context, event github.PullRequestEvent) error {
190+
prInfo := getPRInformation(event)
191+
if prInfo.repoName != "vitess" {
192+
return nil
193+
}
194+
195+
err := h.addArewefastyetComment(ctx, event, prInfo)
196+
if err != nil {
197+
return err
198+
}
199+
return nil
200+
}
201+
202+
func (h *PullRequestHandler) synchronizePullRequest(ctx context.Context, event github.PullRequestEvent) error {
203+
prInfo := getPRInformation(event)
204+
if prInfo.repoName != "vitess" {
205+
return nil
206+
}
207+
208+
err := h.createDocsPreview(ctx, event, prInfo)
209+
if err != nil {
210+
return err
211+
}
212+
err = h.createErrorDocumentation(ctx, event, prInfo)
213+
if err != nil {
214+
return err
186215
}
187216
return nil
188217
}

tools/get_release_from_docs.sh

-5
This file was deleted.

0 commit comments

Comments
 (0)