Add feature to set named args in the payload

This commit is contained in:
Peter Evans
2020-01-04 16:46:49 +09:00
parent 335c3a191c
commit 899b263c41
2 changed files with 48 additions and 3 deletions
+18 -3
View File
@@ -3,6 +3,7 @@ var fs = require("fs");
const core = require("@actions/core");
const MAX_ARGS = 50;
const namedArgPattern = /^(?<name>[a-zA-Z0-9_]+)=(?<value>[^\s]+)$/;
const commandDefaults = Object.freeze({
permission: "write",
@@ -155,7 +156,7 @@ async function addReaction(octokit, repo, commentId, reaction) {
}
}
function getSlashCommandPayload(commentWords) {
function getSlashCommandPayload(commentWords, namedArgs) {
var payload = {
command: commentWords[0],
args: ""
@@ -163,8 +164,22 @@ function getSlashCommandPayload(commentWords) {
if (commentWords.length > 1) {
const argWords = commentWords.slice(1, MAX_ARGS + 1);
payload.args = argWords.join(" ");
for (var i = 0; i < argWords.length; i++) {
payload[`arg${i + 1}`] = argWords[i];
// Parse named and unnamed args
var unnamedCount = 1;
var unnamedArgs = [];
for (var argWord of argWords) {
if (namedArgs && namedArgPattern.test(argWord)) {
const { groups: { name, value } } = namedArgPattern.exec(argWord);
payload[`${name}`] = value;
} else {
unnamedArgs.push(argWord)
payload[`arg${unnamedCount}`] = argWord;
unnamedCount += 1;
}
}
// Add a string of only the unnamed args
if (namedArgs && unnamedArgs.length > 0) {
payload["unnamed_args"] = unnamedArgs.join(" ");
}
}
return payload;
+30
View File
@@ -164,3 +164,33 @@ test("slash command payload", async () => {
};
expect(getSlashCommandPayload(commandWords)).toEqual(payload);
});
test("slash command payload with named args", async () => {
commandWords = ["test", "branch=master", "arg1", "env=prod", "arg2"];
namedArgs = true;
payload = {
command: "test",
args: "branch=master arg1 env=prod arg2",
unnamed_args: "arg1 arg2",
branch: "master",
env: "prod",
arg1: "arg1",
arg2: "arg2"
};
expect(getSlashCommandPayload(commandWords, namedArgs)).toEqual(payload);
});
test("slash command payload with malformed named args", async () => {
commandWords = ["test", "branch=", "arg1", "e-nv=prod", "arg2"];
namedArgs = true;
payload = {
command: "test",
args: "branch= arg1 e-nv=prod arg2",
unnamed_args: "branch= arg1 e-nv=prod arg2",
arg1: "branch=",
arg2: "arg1",
arg3: "e-nv=prod",
arg4: "arg2"
};
expect(getSlashCommandPayload(commandWords, namedArgs)).toEqual(payload);
});