Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/issue-classifier.lock.yml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 3 additions & 3 deletions .github/workflows/release.lock.yml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion .github/workflows/stale-repo-identifier.lock.yml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion .github/workflows/super-linter.lock.yml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

15 changes: 3 additions & 12 deletions pkg/workflow/js/update_project.cjs
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@ async function updateProject(output) {
campaignId = output.campaign_id;
try {
let repoResult;
(core.info(`Looking up project #${projectNumberFromUrl} from URL: ${output.project}`), core.info("[1/5] Fetching repository information..."));
(core.info(`Looking up project #${projectNumberFromUrl} from URL: ${output.project}`), core.info("[1/4] Fetching repository information..."));
try {
repoResult = await github.graphql(
"query($owner: String!, $repo: String!) {\n repository(owner: $owner, name: $repo) {\n id\n owner {\n id\n __typename\n }\n }\n }",
Expand All @@ -147,7 +147,7 @@ async function updateProject(output) {
core.warning(`Could not resolve token identity (viewer.login): ${viewerError.message}`);
}
let projectId;
core.info(`[2/5] Resolving project from URL (scope=${projectInfo.scope}, login=${projectInfo.ownerLogin}, number=${projectNumberFromUrl})...`);
core.info(`[2/4] Resolving project from URL (scope=${projectInfo.scope}, login=${projectInfo.ownerLogin}, number=${projectNumberFromUrl})...`);
let resolvedProjectNumber = projectNumberFromUrl;
try {
const projectNumberInt = parseInt(projectNumberFromUrl, 10);
Expand All @@ -157,16 +157,7 @@ async function updateProject(output) {
} catch (error) {
throw (logGraphQLError(error, "Resolving project from URL"), error);
}
core.info("[3/5] Linking project to repository...");
try {
await github.graphql(
"mutation($projectId: ID!, $repositoryId: ID!) {\n linkProjectV2ToRepository(input: {\n projectId: $projectId,\n repositoryId: $repositoryId\n }) {\n repository {\n id\n }\n }\n }",
{ projectId, repositoryId }
);
} catch (linkError) {
(linkError.message && linkError.message.includes("already linked")) || (logGraphQLError(linkError, "Linking project to repository"), core.warning(`Could not link project: ${linkError.message}`));
}
(core.info("✓ Project linked to repository"), core.info("[4/5] Processing content (issue/PR/draft) if specified..."));
core.info("[3/4] Processing content (issue/PR/draft) if specified...");
const hasContentNumber = void 0 !== output.content_number && null !== output.content_number,
hasIssue = void 0 !== output.issue && null !== output.issue,
hasPullRequest = void 0 !== output.pull_request && null !== output.pull_request,
Expand Down
32 changes: 12 additions & 20 deletions pkg/workflow/js/update_project.test.cjs
Original file line number Diff line number Diff line change
Expand Up @@ -132,8 +132,6 @@ const userProjectV2Response = (url, number = 60, id = "project123", userLogin =
const orgProjectNullResponse = () => ({ organization: { projectV2: null } });
const userProjectNullResponse = () => ({ user: { projectV2: null } });

const linkResponse = { linkProjectV2ToRepository: { repository: { id: "repo123" } } };

const issueResponse = id => ({ repository: { issue: { id } } });

const pullRequestResponse = id => ({ repository: { pullRequest: { id } } });
Expand Down Expand Up @@ -232,7 +230,7 @@ describe("updateProject", () => {
content_number: 42,
};

queueResponses([repoResponse(), viewerResponse(), orgProjectV2Response(projectUrl, 60, "project456"), linkResponse, issueResponse("issue-id-42"), emptyItemsResponse(), { addProjectV2ItemById: { item: { id: "item-custom" } } }]);
queueResponses([repoResponse(), viewerResponse(), orgProjectV2Response(projectUrl, 60, "project456"), issueResponse("issue-id-42"), emptyItemsResponse(), { addProjectV2ItemById: { item: { id: "item-custom" } } }]);

await updateProject(output);

Expand All @@ -245,7 +243,7 @@ describe("updateProject", () => {
const projectUrl = "https://github.com/orgs/testowner/projects/60";
const output = { type: "update_project", project: projectUrl, content_type: "issue", content_number: 42 };

queueResponses([repoResponse(), viewerResponse(), orgProjectV2Response(projectUrl, 60, "project123"), linkResponse, issueResponse("issue-id-42"), emptyItemsResponse(), { addProjectV2ItemById: { item: { id: "item123" } } }]);
queueResponses([repoResponse(), viewerResponse(), orgProjectV2Response(projectUrl, 60, "project123"), issueResponse("issue-id-42"), emptyItemsResponse(), { addProjectV2ItemById: { item: { id: "item123" } } }]);

await updateProject(output);

Expand All @@ -258,7 +256,7 @@ describe("updateProject", () => {
const projectUrl = "https://github.com/orgs/testowner/projects/60";
const output = { type: "update_project", project: projectUrl, content_type: "issue", content_number: 42, campaign_id: "my-campaign" };

queueResponses([repoResponse(), viewerResponse(), orgProjectV2Response(projectUrl, 60, "project123"), linkResponse, issueResponse("issue-id-42"), emptyItemsResponse(), { addProjectV2ItemById: { item: { id: "item123" } } }]);
queueResponses([repoResponse(), viewerResponse(), orgProjectV2Response(projectUrl, 60, "project123"), issueResponse("issue-id-42"), emptyItemsResponse(), { addProjectV2ItemById: { item: { id: "item123" } } }]);

await updateProject(output);

Expand All @@ -284,7 +282,7 @@ describe("updateProject", () => {
draft_body: "Draft body",
};

queueResponses([repoResponse(), viewerResponse(), orgProjectV2Response(projectUrl, 60, "project-draft"), linkResponse, addDraftIssueResponse("draft-item-1")]);
queueResponses([repoResponse(), viewerResponse(), orgProjectV2Response(projectUrl, 60, "project-draft"), addDraftIssueResponse("draft-item-1")]);

await updateProject(output);

Expand All @@ -302,7 +300,7 @@ describe("updateProject", () => {
draft_title: " ",
};

queueResponses([repoResponse(), viewerResponse(), orgProjectV2Response(projectUrl, 60, "project-draft"), linkResponse]);
queueResponses([repoResponse(), viewerResponse(), orgProjectV2Response(projectUrl, 60, "project-draft")]);

await expect(updateProject(output)).rejects.toThrow(/draft_title/);
});
Expand All @@ -311,7 +309,7 @@ describe("updateProject", () => {
const projectUrl = "https://github.com/orgs/testowner/projects/60";
const output = { type: "update_project", project: projectUrl, content_type: "issue", content_number: 99 };

queueResponses([repoResponse(), viewerResponse(), orgProjectV2Response(projectUrl, 60, "project123"), linkResponse, issueResponse("issue-id-99"), existingItemResponse("issue-id-99", "item-existing")]);
queueResponses([repoResponse(), viewerResponse(), orgProjectV2Response(projectUrl, 60, "project123"), issueResponse("issue-id-99"), existingItemResponse("issue-id-99", "item-existing")]);

await updateProject(output);

Expand All @@ -324,7 +322,7 @@ describe("updateProject", () => {
const projectUrl = "https://github.com/orgs/testowner/projects/60";
const output = { type: "update_project", project: projectUrl, content_type: "pull_request", content_number: 17 };

queueResponses([repoResponse(), viewerResponse(), orgProjectV2Response(projectUrl, 60, "project-pr"), linkResponse, pullRequestResponse("pr-id-17"), emptyItemsResponse(), { addProjectV2ItemById: { item: { id: "pr-item" } } }]);
queueResponses([repoResponse(), viewerResponse(), orgProjectV2Response(projectUrl, 60, "project-pr"), pullRequestResponse("pr-id-17"), emptyItemsResponse(), { addProjectV2ItemById: { item: { id: "pr-item" } } }]);

await updateProject(output);

Expand All @@ -336,7 +334,7 @@ describe("updateProject", () => {
const projectUrl = "https://github.com/orgs/testowner/projects/60";
const output = { type: "update_project", project: projectUrl, issue: "101" };

queueResponses([repoResponse(), viewerResponse(), orgProjectV2Response(projectUrl, 60, "legacy-project"), linkResponse, issueResponse("issue-id-101"), emptyItemsResponse(), { addProjectV2ItemById: { item: { id: "legacy-item" } } }]);
queueResponses([repoResponse(), viewerResponse(), orgProjectV2Response(projectUrl, 60, "legacy-project"), issueResponse("issue-id-101"), emptyItemsResponse(), { addProjectV2ItemById: { item: { id: "legacy-item" } } }]);

await updateProject(output);

Expand All @@ -351,7 +349,7 @@ describe("updateProject", () => {
const projectUrl = "https://github.com/orgs/testowner/projects/60";
const output = { type: "update_project", project: projectUrl, content_number: "ABC" };

queueResponses([repoResponse(), viewerResponse(), orgProjectV2Response(projectUrl, 60, "invalid-project"), linkResponse]);
queueResponses([repoResponse(), viewerResponse(), orgProjectV2Response(projectUrl, 60, "invalid-project")]);

await expect(updateProject(output)).rejects.toThrow(/Invalid content number/);
});
Expand All @@ -370,7 +368,6 @@ describe("updateProject", () => {
repoResponse(),
viewerResponse(),
orgProjectV2Response(projectUrl, 60, "project-field"),
linkResponse,
issueResponse("issue-id-10"),
existingItemResponse("issue-id-10", "item-field"),
fieldsResponse([{ id: "field-status", name: "Status" }]),
Expand Down Expand Up @@ -398,7 +395,6 @@ describe("updateProject", () => {
repoResponse(),
viewerResponse(),
orgProjectV2Response(projectUrl, 60, "project-draft-fields"),
linkResponse,
addDraftIssueResponse("draft-item-fields"),
fieldsResponse([{ id: "field-status", name: "Status" }]),
updateFieldValueResponse(),
Expand Down Expand Up @@ -426,7 +422,6 @@ describe("updateProject", () => {
repoResponse(),
viewerResponse(),
orgProjectV2Response(projectUrl, 60, "project-priority"),
linkResponse,
issueResponse("issue-id-15"),
existingItemResponse("issue-id-15", "item-priority"),
fieldsResponse([
Expand Down Expand Up @@ -462,7 +457,6 @@ describe("updateProject", () => {
repoResponse(),
viewerResponse(),
orgProjectV2Response(projectUrl, 60, "project-status"),
linkResponse,
issueResponse("issue-id-16"),
existingItemResponse("issue-id-16", "item-status"),
fieldsResponse([
Expand Down Expand Up @@ -525,7 +519,7 @@ describe("updateProject", () => {
fields: { NonExistentField: "Some Value" },
};

queueResponses([repoResponse(), viewerResponse(), orgProjectV2Response(projectUrl, 60, "project-test"), linkResponse, issueResponse("issue-id-20"), existingItemResponse("issue-id-20", "item-test"), fieldsResponse([])]);
queueResponses([repoResponse(), viewerResponse(), orgProjectV2Response(projectUrl, 60, "project-test"), issueResponse("issue-id-20"), existingItemResponse("issue-id-20", "item-test"), fieldsResponse([])]);

mockGithub.graphql.mockRejectedValueOnce(new Error("Failed to create field"));

Expand All @@ -538,7 +532,7 @@ describe("updateProject", () => {
const projectUrl = "https://github.com/orgs/testowner/projects/60";
const output = { type: "update_project", project: projectUrl, content_type: "issue", content_number: 50, campaign_id: "test-campaign" };

queueResponses([repoResponse(), viewerResponse(), orgProjectV2Response(projectUrl, 60, "project-label"), linkResponse, issueResponse("issue-id-50"), emptyItemsResponse(), { addProjectV2ItemById: { item: { id: "item-label" } } }]);
queueResponses([repoResponse(), viewerResponse(), orgProjectV2Response(projectUrl, 60, "project-label"), issueResponse("issue-id-50"), emptyItemsResponse(), { addProjectV2ItemById: { item: { id: "item-label" } } }]);

mockGithub.rest.issues.addLabels.mockRejectedValueOnce(new Error("Labels disabled"));

Expand All @@ -560,7 +554,7 @@ describe("updateProject", () => {
campaign_id: "my-campaign-123",
};

queueResponses([repoResponse(), viewerResponse(), orgProjectV2Response(projectUrl, 60, "project123"), linkResponse]);
queueResponses([repoResponse(), viewerResponse(), orgProjectV2Response(projectUrl, 60, "project123")]);

await updateProject(output);

Expand Down Expand Up @@ -594,7 +588,6 @@ describe("updateProject", () => {
repoResponse(),
viewerResponse(),
orgProjectV2Response(projectUrl, 60, "project-override"),
linkResponse,
issueWithTimestamps,
emptyItemsResponse(),
{ addProjectV2ItemById: { item: { id: "item-override" } } },
Expand Down Expand Up @@ -634,7 +627,6 @@ describe("updateProject", () => {
repoResponse(),
viewerResponse(),
orgProjectV2Response(projectUrl, 60, "project-date-field"),
linkResponse,
issueResponse("issue-id-75"),
existingItemResponse("issue-id-75", "item-date-field"),
// DATE field with dataType explicitly set to "DATE"
Expand Down
Loading