Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: errors are reported within the metadata of the Github comment #59

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
13 changes: 13 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,18 @@
# Changelog

## [1.2.0](https://github.com/ubiquibot/conversation-rewards/compare/v1.1.0...v1.2.0) (2024-07-10)


### Features

* reward is now split if there are multiple assignees ([b556238](https://github.com/ubiquibot/conversation-rewards/commit/b55623812633bc48760e07bbbd7a1c8f7509121d))


### Bug Fixes

* assignees are added to the reward even without commenting ([170cdcc](https://github.com/ubiquibot/conversation-rewards/commit/170cdcc694cf4499eb8210beff1a58885c99c5a4))
* users with no comment now can see their issue task on multiple assignees ([615d221](https://github.com/ubiquibot/conversation-rewards/commit/615d221bc1d0a8129f58e2c0ff5c06339d177792))

## [1.1.0](https://github.com/ubiquibot/conversation-rewards/compare/v1.0.0...v1.1.0) (2024-07-07)


Expand Down
5 changes: 5 additions & 0 deletions manifest.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"name": "Conversation rewards",
"description": "Generate rewards for on topic conversation for closing issues as complete.",
"ubiquity:listeners": [ "issues.closed" ]
gentlementlegen marked this conversation as resolved.
Show resolved Hide resolved
}
5 changes: 5 additions & 0 deletions src/helpers/github-comment-module-instance.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
import * as github from "@actions/github";
import { GithubCommentModule } from "../parser/github-comment-module";

export function getGithubWorkflowRunUrl() {
return `${github.context.payload.repository?.html_url}/actions/runs/${github.context.runId}`;
}

const githubCommentModule = new GithubCommentModule();

export default githubCommentModule;
15 changes: 12 additions & 3 deletions src/index.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,22 @@
import * as core from "@actions/core";
import githubCommentModuleInstance, { getGithubWorkflowRunUrl } from "./helpers/github-comment-module-instance";
import logger from "./helpers/logger";
import { run } from "./run";

export default run()
.then((result) => {
core?.setOutput("result", result);
return result;
})
.catch((e) => {
console.error("Failed to run comment evaluation:", e);
core?.setFailed(e.toString());
.catch(async (e) => {
const errorMessage = logger.error(`Failed to run comment evaluation. ${e}`, e);
try {
await githubCommentModuleInstance.postComment(
`${errorMessage?.logMessage.diff}\n<!--\n${getGithubWorkflowRunUrl()}\n${JSON.stringify(errorMessage?.metadata, null, 2)}\n-->`
);
} catch (err) {
logger.error(`Failed to update Github comment: ${err}`);
}
core?.setFailed(e);
return e;
});
6 changes: 6 additions & 0 deletions src/parser/github-comment-module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import { CommentType } from "../configuration/comment-types";
import configuration from "../configuration/config-reader";
import { GithubCommentConfiguration, githubCommentConfigurationType } from "../configuration/github-comment-config";
import { getOctokitInstance } from "../get-authentication-token";
import { getGithubWorkflowRunUrl } from "../helpers/github-comment-module-instance";
import logger from "../helpers/logger";
import { getERC20TokenSymbol } from "../helpers/web3";
import { IssueActivity } from "../issue-activity";
Expand Down Expand Up @@ -36,6 +37,11 @@ export class GithubCommentModule implements Module {
result[key].evaluationCommentHtml = await this._generateHtml(key, value);
bodyArray.push(result[key].evaluationCommentHtml);
}
// Add the workflow run url and the metadata in the GitHub's comment
bodyArray.push("\n<!--");
bodyArray.push(`\n${getGithubWorkflowRunUrl()}\n`);
bodyArray.push(JSON.stringify(result, null, 2));
bodyArray.push("\n-->");
const body = bodyArray.join("");
if (this._configuration.debug) {
fs.writeFileSync(this._debugFilePath, body);
Expand Down
133 changes: 132 additions & 1 deletion tests/__mocks__/results/output-reward-split.html

Large diffs are not rendered by default.

477 changes: 476 additions & 1 deletion tests/__mocks__/results/output.html

Large diffs are not rendered by default.

33 changes: 33 additions & 0 deletions tests/action.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,42 @@ jest.mock("../src/parser/command-line", () => {
};
});

jest.mock("@actions/github", () => ({
context: {
runId: "1",
payload: {
repository: {
html_url: "https://github.com/ubiquibot/conversation-rewards",
},
},
},
}));

describe("Action tests", () => {
it("Should skip when the issue is closed without the completed status", async () => {
const result = await run();
expect(result).toEqual("Issue was not closed as completed. Skipping.");
});

it("Should link metadata to Github's comment", async () => {
jest.mock("../src/run", () => ({
run: jest.fn(() => {
return Promise.reject("Some error");
}),
}));
const githubCommentModule = require("../src/parser/github-comment-module");
const spy = jest.spyOn(githubCommentModule.GithubCommentModule.prototype, "postComment");
const run = (await import("../src/index")) as unknown as { default: Promise<string> };
await expect(run.default).resolves.toEqual("Some error");
expect(spy).toHaveBeenCalledWith(`\`\`\`diff
! Failed to run comment evaluation. Some error
\`\`\`
<!--
https://github.com/ubiquibot/conversation-rewards/actions/runs/1
{
"message": "Some error",
"caller": "error"
}
-->`);
});
});
15 changes: 14 additions & 1 deletion tests/process.issue.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,17 @@ jest.mock("../src/helpers/web3", () => ({
},
}));

jest.mock("@actions/github", () => ({
context: {
runId: "1",
payload: {
repository: {
html_url: "https://github.com/ubiquibot/conversation-rewards",
},
},
},
}));

jest.mock("../src/parser/command-line", () => {
// Require is needed because mock cannot access elements out of scope
// eslint-disable-next-line @typescript-eslint/no-var-requires
Expand Down Expand Up @@ -239,7 +250,9 @@ describe("Modules tests", () => {
await processor.run(activity);
const result = JSON.parse(processor.dump());
expect(result).toEqual(githubCommentResults);
expect(fs.readFileSync("./output.html")).toEqual(fs.readFileSync("./tests/__mocks__/results/output.html"));
expect(fs.readFileSync("./output.html", "utf-8")).toEqual(
fs.readFileSync("./tests/__mocks__/results/output.html", "utf-8")
);
});

it("Should properly generate the configuration", () => {
Expand Down
19 changes: 15 additions & 4 deletions tests/rewards.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@ import { drop } from "@mswjs/data";
import Decimal from "decimal.js";
import fs from "fs";
import { http, HttpResponse } from "msw";
import githubCommentModuleInstance from "../src/helpers/github-comment-module-instance";
import { IssueActivity } from "../src/issue-activity";
import { ContentEvaluatorModule } from "../src/parser/content-evaluator-module";
import { DataPurgeModule } from "../src/parser/data-purge-module";
import { FormattingEvaluatorModule } from "../src/parser/formatting-evaluator-module";
import { GithubCommentModule } from "../src/parser/github-comment-module";
import { PermitGenerationModule } from "../src/parser/permit-generation-module";
import { Processor } from "../src/parser/processor";
import { UserExtractorModule } from "../src/parser/user-extractor-module";
Expand All @@ -23,6 +23,17 @@ jest.spyOn(ContentEvaluatorModule.prototype, "_evaluateComments").mockImplementa
return Promise.resolve(comments.map(() => new Decimal(0.8)));
});

jest.mock("@actions/github", () => ({
context: {
runId: "1",
payload: {
repository: {
html_url: "https://github.com/ubiquibot/conversation-rewards",
},
},
},
}));

jest.mock("@ubiquibot/permit-generation/core", () => {
const originalModule = jest.requireActual("@ubiquibot/permit-generation/core");

Expand Down Expand Up @@ -136,7 +147,7 @@ describe("Rewards tests", () => {
new FormattingEvaluatorModule(),
new ContentEvaluatorModule(),
new PermitGenerationModule(),
new GithubCommentModule(),
githubCommentModuleInstance,
];
server.use(
http.post("https://*", () =>
Expand All @@ -157,8 +168,8 @@ describe("Rewards tests", () => {
await processor.run(activity);
const result = JSON.parse(processor.dump());
expect(result).toEqual(rewardSplitResult);
expect(fs.readFileSync("./output.html")).toEqual(
fs.readFileSync("./tests/__mocks__/results/output-reward-split.html")
expect(fs.readFileSync("./output.html", "utf-8")).toEqual(
fs.readFileSync("./tests/__mocks__/results/output-reward-split.html", "utf-8")
);
});
});
2 changes: 1 addition & 1 deletion yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -3315,7 +3315,7 @@
ethers "6.11.1"
libsodium-wrappers "^0.7.13"

"@ubiquity-dao/rpc-handler@^1.1.0":
"@ubiquity-dao/[email protected]":
version "1.1.0"
resolved "https://registry.yarnpkg.com/@ubiquity-dao/rpc-handler/-/rpc-handler-1.1.0.tgz#5a17e98de8c611ea19315ff946166b20d6f7f629"
integrity sha512-EzbwAoHx+jPEymAdJbKt1O7C9RB/R3IWcBPRbDzFs8iBOuFktClsR8e95xvFrV9n2jTmr2ZHxpXE/rOLOEWfPA==
Expand Down
Loading