func GetChangelogPRs()

in cmd/release/utils/values/searchprs.go [16:78]


func GetChangelogPRs(releaseVersion string, overrideNumber int) (string, error) {
	githubClient := github.NewClient(nil)

	ctx := context.Background()
	opts := &github.SearchOptions{Sort: "updated"}
	//Get the date of the last document release for the release version
	prs, _, err := githubClient.Search.Issues(ctx, "is:pr is:merged label:release label:documentation repo:aws/eks-distro label:"+releaseVersion, opts)
	if err != nil {
		return "", fmt.Errorf("getting PRs from %v: %w", githubClient, err)
	}

	lastDocRelease := githubTimeFormat
	prevDocRelease := githubTimeFormat
	if len(prs.Issues) > 0 {
		//Select the most recent pr from the above query and format the date expected for the go-github client
		releasePRs, _, err := githubClient.Search.Issues(ctx, "is:pr is:merged label:PROD-release label:"+releaseVersion, opts)
		if err != nil {
			return "", fmt.Errorf("get release PRs from %v: %w", githubClient, err)
		}
		lastDocRelease = releasePRs.Issues[0].ClosedAt.Format(githubTimeFormat)
		prevDocRelease = prs.Issues[0].ClosedAt.Format(githubTimeFormat)
	} else {
		//With no document releases we need to be a little bit clever to generate unannounced changelogs.
		//This finds the
		opts = &github.SearchOptions{Sort: "created", Order: "asc"}
		prs, _, err := githubClient.Search.Issues(ctx, "is:pr is:merged label:PROD-release label:"+releaseVersion, opts)
		if err != nil {
			return "", fmt.Errorf("get PRs from %v: %w", githubClient, err)
		}
		if overrideNumber == 1 {
			lastDocRelease = prs.Issues[overrideNumber-1].ClosedAt.Format(githubTimeFormat)
		} else {
			lastDocRelease = prs.Issues[overrideNumber-1].ClosedAt.Format(githubTimeFormat)
			prevDocRelease = prs.Issues[overrideNumber-2].ClosedAt.Format(githubTimeFormat)
		}

	}

	patchPRs, _, err := githubClient.Search.Issues(ctx,
		fmt.Sprintf("%v merged:%v..%v label:patch label:%v", baseQuery, prevDocRelease, lastDocRelease, releaseVersion), opts)
	if err != nil {
		return "", fmt.Errorf("getting patch prs: %w", err)
	}

	baseImgPRs, _, err := githubClient.Search.Issues(ctx,
		fmt.Sprintf("%v merged:%v..%v label:base-img-pkg-update", baseQuery, prevDocRelease, lastDocRelease), opts)
	if err != nil {
		return "", fmt.Errorf("getting base image prs: %w", err)
	}

	versPRs, _, err := githubClient.Search.Issues(ctx, fmt.Sprintf("%v merged:%v..%v label:project label:%v",
		baseQuery, prevDocRelease, lastDocRelease, releaseVersion), opts)
	if err != nil {
		return "", fmt.Errorf("getting project prs: %w", err)
	}

	var changelog []string
	changelog = append(changelog, PRsSinceLastRelease(patchPRs, "### Patches"))
	changelog = append(changelog, PRsSinceLastRelease(versPRs, "### Projects"))
	changelog = append(changelog, PRsSinceLastRelease(baseImgPRs, "### Base Image"))

	return strings.Join(changelog, "\n"), nil
}