Skip to content

Commit a75e170

Browse files
authored
fix: resolve merge conflict markers in linear-sync (#3514)
Conflict markers were accidentally merged into v0.26. Resolved by keeping newer implementations: - deduplicateIssueIDs function from #3449 - updated regex comment from #3469
1 parent c195010 commit a75e170

File tree

2 files changed

+35
-44
lines changed

2 files changed

+35
-44
lines changed

hack/linear-sync/linear_test.go

Lines changed: 25 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,9 @@ func TestMoveIssueLogic(t *testing.T) {
5454

5555
// MockLinearClient is a mock implementation of the LinearClient interface for testing
5656
type MockLinearClient struct {
57-
mockIssueStates map[string]string
58-
mockIssueStateNames map[string]string
59-
mockWorkflowIDs map[string]string
57+
mockIssueStates map[string]string
58+
mockIssueStateNames map[string]string
59+
mockWorkflowIDs map[string]string
6060
}
6161

6262
func NewMockLinearClient() *MockLinearClient {
@@ -109,25 +109,25 @@ func (m *MockLinearClient) MoveIssueToState(ctx context.Context, dryRun bool, is
109109
if strings.HasPrefix(strings.ToLower(issueID), "cve") {
110110
return nil
111111
}
112-
112+
113113
currentStateID, currentStateName, _ := m.IssueStateDetails(ctx, issueID)
114-
114+
115115
// Already in released state
116116
if currentStateID == releasedStateID {
117117
return nil
118118
}
119-
119+
120120
// Skip if not in ready for release state
121121
if currentStateName != readyForReleaseStateName {
122122
return fmt.Errorf("issue %s not in ready for release state", issueID)
123123
}
124-
124+
125125
// Only ENG-1234 is expected to be moved successfully
126126
// Explicitly return errors for other issues to ensure the test only counts ENG-1234
127127
if issueID != "ENG-1234" {
128128
return fmt.Errorf("would not move issue %s for test purposes", issueID)
129129
}
130-
130+
131131
return nil
132132
}
133133

@@ -136,8 +136,8 @@ func TestIsIssueInState(t *testing.T) {
136136
ctx := context.Background()
137137

138138
testCases := []struct {
139-
IssueID string
140-
StateID string
139+
IssueID string
140+
StateID string
141141
ExpectedResult bool
142142
}{
143143
{"ENG-1234", "ready-state-id", true},
@@ -164,10 +164,10 @@ func TestMoveIssueStateFiltering(t *testing.T) {
164164
// Create a custom mock client for this test
165165
mockClient := &MockLinearClient{
166166
mockIssueStates: map[string]string{
167-
"ENG-1234": "ready-state-id", // Ready for release
168-
"ENG-5678": "in-progress-id", // In progress
169-
"ENG-9012": "released-id", // Already released
170-
"CVE-1234": "ready-state-id", // Ready but should be skipped as CVE
167+
"ENG-1234": "ready-state-id", // Ready for release
168+
"ENG-5678": "in-progress-id", // In progress
169+
"ENG-9012": "released-id", // Already released
170+
"CVE-1234": "ready-state-id", // Ready but should be skipped as CVE
171171
},
172172
mockIssueStateNames: map[string]string{
173173
"ENG-1234": "Ready for Release",
@@ -181,7 +181,7 @@ func TestMoveIssueStateFiltering(t *testing.T) {
181181
"In Progress": "in-progress-id",
182182
},
183183
}
184-
184+
185185
ctx := context.Background()
186186

187187
// Test cases for the overall filtering logic
@@ -198,19 +198,19 @@ func TestMoveIssueStateFiltering(t *testing.T) {
198198
if strings.HasPrefix(strings.ToLower(issueID), "cve") {
199199
continue
200200
}
201-
201+
202202
currentStateID, currentStateName, _ := mockClient.IssueStateDetails(ctx, issueID)
203-
203+
204204
// Skip if already in released state
205205
if currentStateID == releasedStateID {
206206
continue
207207
}
208-
208+
209209
// Skip if not in ready for release state
210210
if currentStateName != readyForReleaseStateName {
211211
continue
212212
}
213-
213+
214214
// This issue would be moved
215215
actualMoved = append(actualMoved, issueID)
216216
}
@@ -230,7 +230,7 @@ func TestMoveIssueStateFiltering(t *testing.T) {
230230
break
231231
}
232232
}
233-
233+
234234
if !found {
235235
t.Errorf("Expected issue %s to be moved, but it wasn't in the result set", expectedID)
236236
}
@@ -243,17 +243,12 @@ func TestIssueIDsExtraction(t *testing.T) {
243243
defer func() {
244244
issuesInBodyREs = originalRegex
245245
}()
246-
<<<<<<< HEAD
247-
248-
// For testing, use a regex that matches any 3-letter prefix format
249-
=======
250246

251247
// For testing, use a regex that matches team keys of 2-10 chars and issue numbers 1-5 digits
252-
>>>>>>> 3aa6f7157 (fix(linear-sync): support variable-length team keys in issue regex (#3469))
253248
issuesInBodyREs = []*regexp.Regexp{
254249
regexp.MustCompile(`(?P<issue>\w{2,10}-\d{1,5})`),
255250
}
256-
251+
257252
testCases := []struct {
258253
name string
259254
body string
@@ -321,7 +316,7 @@ func TestIssueIDsExtraction(t *testing.T) {
321316
expected: []string{"eng-12345"},
322317
},
323318
}
324-
319+
325320
for _, tc := range testCases {
326321
t.Run(tc.name, func(t *testing.T) {
327322
pr := LinearPullRequest{
@@ -330,15 +325,15 @@ func TestIssueIDsExtraction(t *testing.T) {
330325
HeadRefName: tc.headRefName,
331326
},
332327
}
333-
328+
334329
result := pr.IssueIDs()
335-
330+
336331
if len(result) != len(tc.expected) {
337332
t.Errorf("Expected %d issues, got %d", len(tc.expected), len(result))
338333
t.Errorf("Expected: %v, Got: %v", tc.expected, result)
339334
return
340335
}
341-
336+
342337
// Check all expected IDs are found (ignoring order)
343338
for _, expectedID := range tc.expected {
344339
found := false

hack/linear-sync/main.go

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -38,17 +38,17 @@ func run(
3838
) error {
3939
flagset := flag.NewFlagSet(args[0], flag.ExitOnError)
4040
var (
41-
owner = flagset.String("owner", "loft-sh", "The GitHub owner of the repository")
42-
repo = flagset.String("repo", "vcluster", "The GitHub repository to generate the changelog for")
43-
githubToken = flagset.String("token", "", "The GitHub token to use for authentication")
44-
previousTag = flagset.String("previous-tag", "", "The previous tag to generate the changelog for (if not set, the last stable release will be used)")
45-
releaseTag = flagset.String("release-tag", "", "The tag of the new release")
46-
debug = flagset.Bool("debug", false, "Enable debug logging")
47-
linearToken = flagset.String("linear-token", "", "The Linear token to use for authentication")
48-
releasedStateName = flagset.String("released-state-name", "Released", "The name of the state to use for the released state")
41+
owner = flagset.String("owner", "loft-sh", "The GitHub owner of the repository")
42+
repo = flagset.String("repo", "vcluster", "The GitHub repository to generate the changelog for")
43+
githubToken = flagset.String("token", "", "The GitHub token to use for authentication")
44+
previousTag = flagset.String("previous-tag", "", "The previous tag to generate the changelog for (if not set, the last stable release will be used)")
45+
releaseTag = flagset.String("release-tag", "", "The tag of the new release")
46+
debug = flagset.Bool("debug", false, "Enable debug logging")
47+
linearToken = flagset.String("linear-token", "", "The Linear token to use for authentication")
48+
releasedStateName = flagset.String("released-state-name", "Released", "The name of the state to use for the released state")
4949
readyForReleaseStateName = flagset.String("ready-for-release-state-name", "Ready for Release", "The name of the state that indicates an issue is ready to be released")
50-
linearTeamName = flagset.String("linear-team-name", "vCluster / Platform", "The name of the team to use for the linear team")
51-
dryRun = flagset.Bool("dry-run", false, "Do not actually move issues to the released state")
50+
linearTeamName = flagset.String("linear-team-name", "vCluster / Platform", "The name of the team to use for the linear team")
51+
dryRun = flagset.Bool("dry-run", false, "Do not actually move issues to the released state")
5252
)
5353
if err := flagset.Parse(args[1:]); err != nil {
5454
return fmt.Errorf("parse flags: %w", err)
@@ -193,9 +193,6 @@ func run(
193193
logger.Info("Linear sync completed", "processed", len(releasedIssues), "released", releasedCount, "skipped", skippedCount)
194194

195195
return nil
196-
<<<<<<< HEAD
197-
}
198-
=======
199196
}
200197

201198
// deduplicateIssueIDs removes duplicate issue IDs from the slice while preserving order
@@ -210,4 +207,3 @@ func deduplicateIssueIDs(issueIDs []string) []string {
210207
}
211208
return result
212209
}
213-
>>>>>>> cfcf45a9d (fix(ci): duplicate comments prevented via issue id deduplication (#3449))

0 commit comments

Comments
 (0)