| // Copyright 2024 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package task_test |
| |
| import ( |
| "context" |
| "fmt" |
| "testing" |
| "time" |
| |
| "golang.org/x/build/internal/task" |
| "golang.org/x/build/internal/workflow" |
| ) |
| |
| func TestPromoteNextAPIAndOpenAPIAuditIssue(t *testing.T) { |
| goRepo := task.NewFakeRepo(t, "go") |
| goRepo.Commit(map[string]string{ |
| "api/next/54386.txt": "pkg bytes, func ContainsFunc([]uint8, func(int32) bool) bool #54386\n", |
| "api/next/53685.txt": "pkg bytes, method (*Buffer) AvailableBuffer() []uint8 #53685\npkg bytes, method (*Buffer) Available() int #53685\n", |
| "api/next/59488.txt": "pkg cmp, func Compare[$0 Ordered]($0, $0) int #59488\npkg cmp, func Less[$0 Ordered]($0, $0) bool #59488\npkg cmp, type Ordered interface {} #59488\n", |
| "api/next/50489.txt": "pkg math/big, method (*Rat) FloatPrec() (int, bool) #50489\n", |
| }) |
| fakeGerrit := task.NewFakeGerrit(t, goRepo) |
| fakeGitHub := &task.FakeGitHub{ |
| Milestones: map[int]string{322: "Go1.24"}, // https://github.com/golang/go/milestone/322 |
| } |
| |
| const version = 24 |
| cycleTasks := task.ReleaseCycleTasks{ |
| Gerrit: fakeGerrit, |
| GitHub: fakeGitHub, |
| } |
| promotedAPI, err := cycleTasks.PromoteNextAPI( |
| &workflow.TaskContext{Context: context.Background(), Logger: testLogger{t: t}}, |
| version, |
| nil, |
| ) |
| if err != nil { |
| t.Fatal(err) |
| } |
| apiAuditIssue, err := cycleTasks.OpenAPIAuditIssue( |
| &workflow.TaskContext{Context: context.Background(), Logger: testLogger{t: t}}, |
| version, |
| promotedAPI, |
| ) |
| if err != nil { |
| t.Fatal(err) |
| } |
| |
| const wantIssueTitle = "api: audit for Go 1.24" |
| const wantIssueBody = `This is a tracking issue for doing an audit of API additions for Go 1.24 as of [CL 1](https://go.dev/cl/1). |
| |
| ## New API changes for Go 1.24 |
| |
| ### bytes |
| |
| - ` + "`" + `func ContainsFunc([]uint8, func(int32) bool) bool` + "`" + ` #54386 |
| - ` + "`" + `method (*Buffer) Available() int` + "`" + ` #53685 |
| - ` + "`" + `method (*Buffer) AvailableBuffer() []uint8` + "`" + ` #53685 |
| |
| ### cmp |
| |
| - ` + "`" + `func Compare[$0 Ordered]($0, $0) int` + "`" + ` #59488 |
| - ` + "`" + `func Less[$0 Ordered]($0, $0) bool` + "`" + ` #59488 |
| - ` + "`" + `type Ordered interface {}` + "`" + ` #59488 |
| |
| ### math/big |
| |
| - ` + "`" + `method (*Rat) FloatPrec() (int, bool)` + "`" + ` #50489 |
| |
| CC @aclements, @ianlancetaylor, @golang/release.` |
| if len(fakeGitHub.Issues) != 1 { |
| t.Fatalf("created %d issues, want 1", len(fakeGitHub.Issues)) |
| } |
| if got, want := fakeGitHub.Issues[apiAuditIssue].GetTitle(), wantIssueTitle; got != want { |
| t.Errorf("issue title mismatch: got %s, want %s", got, want) |
| } |
| if got, want := fakeGitHub.Issues[apiAuditIssue].GetBody(), wantIssueBody; got != want { |
| t.Errorf("issue body mismatch: got %s, want %s", got, want) |
| } |
| } |
| |
| type testLogger struct { |
| t testing.TB |
| task string // Optional. |
| } |
| |
| func (l testLogger) Printf(format string, v ...interface{}) { |
| l.t.Logf("%v\ttask %-10v: LOG: %s", time.Now(), l.task, fmt.Sprintf(format, v...)) |
| } |