未验证 提交 8fd702bd 编写于 作者: A Alessandro (Ale) Segala 提交者: GitHub

Update Dapr bot Action and respond to users that can't invoke commands (#6367)

Signed-off-by: NItalyPaleAle <43508+ItalyPaleAle@users.noreply.github.com>
Co-authored-by: NDapr Bot <56698301+dapr-bot@users.noreply.github.com>
上级 ed9723cd
......@@ -75,7 +75,7 @@
"terminal.integrated.env.linux": {
"GOLANG_PROTOBUF_REGISTRATION_CONFLICT": "ignore"
}
},
}
}
},
"workspaceFolder": "/workspaces/dapr",
......
......@@ -94,6 +94,7 @@ async function handleIssueCommentCreate({ github, context }) {
console.log(
`[handleIssueCommentCreate] user ${username} is not an owner, exiting.`
)
await commentUserNotAllowed(github, issue, username)
return
}
......@@ -134,7 +135,8 @@ async function handleIssueCommentCreate({ github, context }) {
)
break
case '/test-version-skew':
const previousVersion = commandParts.length > 0 ? commandParts.shift() : null
const previousVersion =
commandParts.length > 0 ? commandParts.shift() : null
await cmdTestVersionSkew(
github,
issue,
......@@ -170,7 +172,7 @@ async function handleIssueLabeled({ github, context }) {
// Only authorized users can add labels to issues.
if (label == 'docs-needed') {
// Open a new issue
await github.issues.create({
await github.rest.issues.create({
owner: 'dapr',
repo: 'docs',
title: `New content needed for dapr/dapr#${issueNumber}`,
......@@ -180,7 +182,7 @@ async function handleIssueLabeled({ github, context }) {
} else if (label == 'sdk-needed') {
// Open an issue in all SDK repos.
for (const sdk of SDKs) {
await github.issues.create({
await github.rest.issues.create({
owner: 'dapr',
repo: sdk,
title: `Add support for dapr/dapr#${issueNumber}`,
......@@ -215,7 +217,7 @@ async function cmdAssign(github, issue, username, isFromPulls) {
return
}
await github.issues.addAssignees({
await github.rest.issues.addAssignees({
owner: issue.owner,
repo: issue.repo,
issue_number: issue.number,
......@@ -238,7 +240,7 @@ async function cmdMakeMeLaugh(github, issue) {
joke = `${jokedata.setup} - ${jokedata.punchline}`
}
await github.issues.createComment({
await github.rest.issues.createComment({
owner: issue.owner,
repo: issue.repo,
issue_number: issue.number,
......@@ -261,7 +263,7 @@ async function cmdOkToTest(github, issue, isFromPulls) {
}
// Get pull request
const pull = await github.pulls.get({
const pull = await github.rest.pulls.get({
owner: issue.owner,
repo: issue.repo,
pull_number: issue.number,
......@@ -277,7 +279,7 @@ async function cmdOkToTest(github, issue, isFromPulls) {
}
// Fire repository_dispatch event to trigger e2e test
await github.repos.createDispatchEvent({
await github.rest.repos.createDispatchEvent({
owner: issue.owner,
repo: issue.repo,
event_type: 'e2e-test',
......@@ -307,7 +309,7 @@ async function cmdOkToPerf(github, issue, isFromPulls, args) {
}
// Get pull request
const pull = await github.pulls.get({
const pull = await github.rest.pulls.get({
owner: issue.owner,
repo: issue.repo,
pull_number: issue.number,
......@@ -324,7 +326,7 @@ async function cmdOkToPerf(github, issue, isFromPulls, args) {
}
// Fire repository_dispatch event to trigger e2e test
await github.repos.createDispatchEvent({
await github.rest.repos.createDispatchEvent({
owner: issue.owner,
repo: issue.repo,
event_type: 'perf-test',
......@@ -354,7 +356,7 @@ async function cmdOkToPerfComponents(github, issue, isFromPulls, args) {
}
// Get pull request
const pull = await github.pulls.get({
const pull = await github.rest.pulls.get({
owner: issue.owner,
repo: issue.repo,
pull_number: issue.number,
......@@ -371,7 +373,7 @@ async function cmdOkToPerfComponents(github, issue, isFromPulls, args) {
}
// Fire repository_dispatch event to trigger e2e test
await github.repos.createDispatchEvent({
await github.rest.repos.createDispatchEvent({
owner: issue.owner,
repo: issue.repo,
event_type: 'components-perf-test',
......@@ -402,7 +404,7 @@ async function cmdTestSDK(github, issue, isFromPulls, command, args) {
}
// Get pull request
const pull = await github.pulls.get({
const pull = await github.rest.pulls.get({
owner: issue.owner,
repo: issue.repo,
pull_number: issue.number,
......@@ -419,7 +421,7 @@ async function cmdTestSDK(github, issue, isFromPulls, command, args) {
}
// Fire repository_dispatch event to trigger e2e test
await github.repos.createDispatchEvent({
await github.rest.repos.createDispatchEvent({
owner: issue.owner,
repo: issue.repo,
event_type: command.substring(1),
......@@ -434,6 +436,21 @@ async function cmdTestSDK(github, issue, isFromPulls, command, args) {
}
}
/**
* Sends a comment when the user who tried triggering the bot action is not allowed to do so.
* @param {*} github GitHub object reference
* @param {*} issue GitHub issue object
* @param {string} username GitHub user who commented
*/
async function commentUserNotAllowed(github, issue, username) {
await github.rest.issues.createComment({
owner: issue.owner,
repo: issue.repo,
issue_number: issue.number,
body: `👋 @${username}, my apologies but I can't perform this action for you because your username is not in the allowlist in the file ${'`.github/scripts/dapr_bot.js`'}.`,
})
}
/**
* Trigger Version Skew tests for the pull request.
* @param {*} github GitHub object reference
......@@ -442,7 +459,14 @@ async function cmdTestSDK(github, issue, isFromPulls, command, args) {
* @param {string} command which was used
* @param {string} previousVersion previous version to test against
*/
async function cmdTestVersionSkew(github, issue, isFromPulls, command, previousVersion, args) {
async function cmdTestVersionSkew(
github,
issue,
isFromPulls,
command,
previousVersion,
args
) {
if (!isFromPulls) {
console.log(
'[cmdTestVersionSkew] only pull requests supported, skipping command execution.'
......
......@@ -14,7 +14,7 @@ jobs:
- name: Checkout code
uses: actions/checkout@v3 # required to make the script available for next step
- name: Comment analyzer
uses: actions/github-script@v4
uses: actions/github-script@v6
with:
github-token: ${{secrets.DAPR_BOT_TOKEN}}
script: |
......
......@@ -16,7 +16,7 @@ import { check } from 'k6'
import crypto from 'k6/crypto'
import { SharedArray } from 'k6/data'
const PUBLISH_TYPE_BULK = "bulk"
const PUBLISH_TYPE_BULK = 'bulk'
const KB = 1024
const MAX_MS_ALLOWED = 500
// padd with leading 0 if <16
......@@ -51,35 +51,35 @@ function getBulkPublishPayload(numMsgs, msgSize) {
}
const data = new SharedArray('scenarios', function () {
let scenarios = {};
let scenarios = {}
const thresholds = {
checks: ['rate==1'],
http_req_duration: [`avg<${MAX_MS_ALLOWED}`]
};
http_req_duration: [`avg<${MAX_MS_ALLOWED}`],
}
const brokerName = __ENV.BROKER_NAME;
const publishType = __ENV.PUBLISH_TYPE;
const bulkSize = parseInt(__ENV.BULK_SIZE);
const messageSizeKb = parseInt(__ENV.MESSAGE_SIZE_KB);
const durationMs = parseInt(__ENV.DURATION_MS);
const numVus = parseInt(__ENV.NUM_VUS);
const brokerName = __ENV.BROKER_NAME
const publishType = __ENV.PUBLISH_TYPE
const bulkSize = parseInt(__ENV.BULK_SIZE)
const messageSizeKb = parseInt(__ENV.MESSAGE_SIZE_KB)
const durationMs = parseInt(__ENV.DURATION_MS)
const numVus = parseInt(__ENV.NUM_VUS)
let payload = '';
let payload = ''
if (publishType == PUBLISH_TYPE_BULK) {
payload = getBulkPublishPayload(bulkSize, messageSizeKb);
payload = getBulkPublishPayload(bulkSize, messageSizeKb)
} else {
payload = randomStringOfSize(messageSizeKb * KB);
payload = randomStringOfSize(messageSizeKb * KB)
}
const scenario = `${brokerName}_b${bulkSize}_s${messageSizeKb}KB_${publishType}`;
const scenario = `${brokerName}_b${bulkSize}_s${messageSizeKb}KB_${publishType}`
scenarios[scenario] = Object.assign({
executor: 'constant-vus',
vus: numVus,
duration: `${durationMs}ms`,
env: {
PAYLOAD: payload,
}
});
},
})
return [{ scenarios, thresholds }] // must be an array
})
......@@ -97,8 +97,8 @@ function bulkPublishRawMsgs(broker, topic, payload) {
const result = http.post(
`${DAPR_ADDRESS}/v1.0-alpha1/publish/bulk/${broker}/${topic}?metadata.rawPayload=true`,
payload
);
return result.status;
)
return result.status
}
function publishRawMsgs(broker, topic, payload, bulkSize) {
......@@ -107,7 +107,7 @@ function publishRawMsgs(broker, topic, payload, bulkSize) {
const result = http.post(
`${DAPR_ADDRESS}/v1.0/publish/${broker}/${topic}?metadata.rawPayload=true`,
payload
);
)
statusCodes.push(result.status)
}
return statusCodes
......@@ -118,23 +118,33 @@ export default function () {
const statusCodes = []
if (publishType == PUBLISH_TYPE_BULK) {
// Do bulk publish
const statusCode = bulkPublishRawMsgs(__ENV.BROKER_NAME, __ENV.TOPIC_NAME, __ENV.PAYLOAD)
const statusCode = bulkPublishRawMsgs(
__ENV.BROKER_NAME,
__ENV.TOPIC_NAME,
__ENV.PAYLOAD
)
statusCodes.push(statusCode)
} else {
// Do normal publish
const _statusCodes = publishRawMsgs(__ENV.BROKER_NAME, __ENV.TOPIC_NAME, __ENV.PAYLOAD, __ENV.BULK_SIZE)
const _statusCodes = publishRawMsgs(
__ENV.BROKER_NAME,
__ENV.TOPIC_NAME,
__ENV.PAYLOAD,
__ENV.BULK_SIZE
)
statusCodes.push(..._statusCodes)
}
const failedStatusCodes = statusCodes.filter(statusCode => statusCode < 200 || statusCode >= 300)
const failedStatusCodes = statusCodes.filter(
(statusCode) => statusCode < 200 || statusCode >= 300
)
if (failedStatusCodes.length > 0) {
console.log(`Publish failed: ${JSON.stringify(failedStatusCodes)}`)
}
check(failedStatusCodes, {
'publish response status code is 2xx':
failedStatusCodes.length == 0,
'publish response status code is 2xx': failedStatusCodes.length == 0,
})
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册