mirror of
https://github.com/changesets/action
synced 2026-10-26 16:39:56 +08:00
Switch to pull request list API instead of search (#393)
* Switch to pull request list API instead of search To reduce the amount of rate-limit that we use, switch to a cheaper API for determining whether an existing PR exists for a given branch. * Ensure PR remains open when updating description * Update .changeset/clean-bees-count.md Co-authored-by: willo-icon <161356817+willo-icon@users.noreply.github.com> --------- Co-authored-by: Mateusz Burzyński <mateuszburzynski@gmail.com> Co-authored-by: willo-icon <161356817+willo-icon@users.noreply.github.com>
This commit is contained in:
co-authored by
willo-icon
Mateusz Burzyński
parent
89b41e6c69
commit
48ab0d2f2e
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
"@changesets/action": patch
|
||||||
|
---
|
||||||
|
|
||||||
|
Ensure the PR remains open when updated
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
"@changesets/action": patch
|
||||||
|
---
|
||||||
|
|
||||||
|
Switch to cheaper API for querying existing PRs
|
||||||
+6
-18
@@ -33,11 +33,9 @@ jest.mock("@actions/github/lib/utils", () => ({
|
|||||||
jest.mock("./gitUtils");
|
jest.mock("./gitUtils");
|
||||||
|
|
||||||
let mockedGithubMethods = {
|
let mockedGithubMethods = {
|
||||||
search: {
|
|
||||||
issuesAndPullRequests: jest.fn(),
|
|
||||||
},
|
|
||||||
pulls: {
|
pulls: {
|
||||||
create: jest.fn(),
|
create: jest.fn(),
|
||||||
|
list: jest.fn(),
|
||||||
},
|
},
|
||||||
repos: {
|
repos: {
|
||||||
createRelease: jest.fn(),
|
createRelease: jest.fn(),
|
||||||
@@ -65,9 +63,7 @@ describe("version", () => {
|
|||||||
let cwd = f.copy("simple-project");
|
let cwd = f.copy("simple-project");
|
||||||
linkNodeModules(cwd);
|
linkNodeModules(cwd);
|
||||||
|
|
||||||
mockedGithubMethods.search.issuesAndPullRequests.mockImplementationOnce(
|
mockedGithubMethods.pulls.list.mockImplementationOnce(() => ({ data: [] }));
|
||||||
() => ({ data: { items: [] } })
|
|
||||||
);
|
|
||||||
|
|
||||||
mockedGithubMethods.pulls.create.mockImplementationOnce(() => ({
|
mockedGithubMethods.pulls.create.mockImplementationOnce(() => ({
|
||||||
data: { number: 123 },
|
data: { number: 123 },
|
||||||
@@ -104,9 +100,7 @@ describe("version", () => {
|
|||||||
let cwd = f.copy("simple-project");
|
let cwd = f.copy("simple-project");
|
||||||
linkNodeModules(cwd);
|
linkNodeModules(cwd);
|
||||||
|
|
||||||
mockedGithubMethods.search.issuesAndPullRequests.mockImplementationOnce(
|
mockedGithubMethods.pulls.list.mockImplementationOnce(() => ({ data: [] }));
|
||||||
() => ({ data: { items: [] } })
|
|
||||||
);
|
|
||||||
|
|
||||||
mockedGithubMethods.pulls.create.mockImplementationOnce(() => ({
|
mockedGithubMethods.pulls.create.mockImplementationOnce(() => ({
|
||||||
data: { number: 123 },
|
data: { number: 123 },
|
||||||
@@ -139,9 +133,7 @@ describe("version", () => {
|
|||||||
let cwd = f.copy("ignored-package");
|
let cwd = f.copy("ignored-package");
|
||||||
linkNodeModules(cwd);
|
linkNodeModules(cwd);
|
||||||
|
|
||||||
mockedGithubMethods.search.issuesAndPullRequests.mockImplementationOnce(
|
mockedGithubMethods.pulls.list.mockImplementationOnce(() => ({ data: [] }));
|
||||||
() => ({ data: { items: [] } })
|
|
||||||
);
|
|
||||||
|
|
||||||
mockedGithubMethods.pulls.create.mockImplementationOnce(() => ({
|
mockedGithubMethods.pulls.create.mockImplementationOnce(() => ({
|
||||||
data: { number: 123 },
|
data: { number: 123 },
|
||||||
@@ -174,9 +166,7 @@ describe("version", () => {
|
|||||||
let cwd = f.copy("simple-project");
|
let cwd = f.copy("simple-project");
|
||||||
linkNodeModules(cwd);
|
linkNodeModules(cwd);
|
||||||
|
|
||||||
mockedGithubMethods.search.issuesAndPullRequests.mockImplementationOnce(
|
mockedGithubMethods.pulls.list.mockImplementationOnce(() => ({ data: [] }));
|
||||||
() => ({ data: { items: [] } })
|
|
||||||
);
|
|
||||||
|
|
||||||
mockedGithubMethods.pulls.create.mockImplementationOnce(() => ({
|
mockedGithubMethods.pulls.create.mockImplementationOnce(() => ({
|
||||||
data: { number: 123 },
|
data: { number: 123 },
|
||||||
@@ -233,9 +223,7 @@ fluminis divesque vulnere aquis parce lapsis rabie si visa fulmineis.
|
|||||||
let cwd = f.copy("simple-project");
|
let cwd = f.copy("simple-project");
|
||||||
linkNodeModules(cwd);
|
linkNodeModules(cwd);
|
||||||
|
|
||||||
mockedGithubMethods.search.issuesAndPullRequests.mockImplementationOnce(
|
mockedGithubMethods.pulls.list.mockImplementationOnce(() => ({ data: [] }));
|
||||||
() => ({ data: { items: [] } })
|
|
||||||
);
|
|
||||||
|
|
||||||
mockedGithubMethods.pulls.create.mockImplementationOnce(() => ({
|
mockedGithubMethods.pulls.create.mockImplementationOnce(() => ({
|
||||||
data: { number: 123 },
|
data: { number: 123 },
|
||||||
|
|||||||
+10
-7
@@ -342,9 +342,11 @@ export async function runVersion({
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
let searchQuery = `repo:${repo}+state:open+head:${versionBranch}+base:${branch}+is:pull-request`;
|
const existingPullRequestsPromise = octokit.rest.pulls.list({
|
||||||
let searchResultPromise = octokit.rest.search.issuesAndPullRequests({
|
...github.context.repo,
|
||||||
q: searchQuery,
|
state: "open",
|
||||||
|
head: `${github.context.repo.owner}:${versionBranch}`,
|
||||||
|
base: branch,
|
||||||
});
|
});
|
||||||
let changedPackages = await getChangedPackages(cwd, versionsByDirectory);
|
let changedPackages = await getChangedPackages(cwd, versionsByDirectory);
|
||||||
let changedPackagesInfoPromises = Promise.all(
|
let changedPackagesInfoPromises = Promise.all(
|
||||||
@@ -376,8 +378,8 @@ export async function runVersion({
|
|||||||
|
|
||||||
await gitUtils.push(versionBranch, { force: true });
|
await gitUtils.push(versionBranch, { force: true });
|
||||||
|
|
||||||
let searchResult = await searchResultPromise;
|
let existingPullRequests = await existingPullRequestsPromise;
|
||||||
core.info(JSON.stringify(searchResult.data, null, 2));
|
core.info(JSON.stringify(existingPullRequests.data, null, 2));
|
||||||
|
|
||||||
const changedPackagesInfo = (await changedPackagesInfoPromises)
|
const changedPackagesInfo = (await changedPackagesInfoPromises)
|
||||||
.filter((x) => x)
|
.filter((x) => x)
|
||||||
@@ -391,7 +393,7 @@ export async function runVersion({
|
|||||||
prBodyMaxCharacters,
|
prBodyMaxCharacters,
|
||||||
});
|
});
|
||||||
|
|
||||||
if (searchResult.data.items.length === 0) {
|
if (existingPullRequests.data.length === 0) {
|
||||||
core.info("creating pull request");
|
core.info("creating pull request");
|
||||||
const { data: newPullRequest } = await octokit.rest.pulls.create({
|
const { data: newPullRequest } = await octokit.rest.pulls.create({
|
||||||
base: branch,
|
base: branch,
|
||||||
@@ -405,7 +407,7 @@ export async function runVersion({
|
|||||||
pullRequestNumber: newPullRequest.number,
|
pullRequestNumber: newPullRequest.number,
|
||||||
};
|
};
|
||||||
} else {
|
} else {
|
||||||
const [pullRequest] = searchResult.data.items;
|
const [pullRequest] = existingPullRequests.data;
|
||||||
|
|
||||||
core.info(`updating found pull request #${pullRequest.number}`);
|
core.info(`updating found pull request #${pullRequest.number}`);
|
||||||
await octokit.rest.pulls.update({
|
await octokit.rest.pulls.update({
|
||||||
@@ -413,6 +415,7 @@ export async function runVersion({
|
|||||||
title: finalPrTitle,
|
title: finalPrTitle,
|
||||||
body: prBody,
|
body: prBody,
|
||||||
...github.context.repo,
|
...github.context.repo,
|
||||||
|
state: "open",
|
||||||
});
|
});
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
|||||||
Reference in New Issue
Block a user