惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - Franky
云风的 BLOG
云风的 BLOG
人人都是产品经理
人人都是产品经理
博客园 - 叶小钗
Engineering at Meta
Engineering at Meta
Vercel News
Vercel News
Y
Y Combinator Blog
B
Blog
Microsoft Azure Blog
Microsoft Azure Blog
C
Check Point Blog
M
MIT News - Artificial intelligence
Jina AI
Jina AI
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Apple Machine Learning Research
Apple Machine Learning Research
Hugging Face - Blog
Hugging Face - Blog
阮一峰的网络日志
阮一峰的网络日志
罗磊的独立博客
Stack Overflow Blog
Stack Overflow Blog
F
Fortinet All Blogs
博客园 - 司徒正美
I
InfoQ
Google DeepMind News
Google DeepMind News
GbyAI
GbyAI
U
Unit 42

Recent Commits to openclaw:main

test: merge chat side-result checks · openclaw/openclaw@ddd2c2a test: merge cron history checks · openclaw/openclaw@f7eb746 test: merge responsive navigation shell checks · openclaw/openclaw@c2e4b47 docs(changelog): add codex oauth fixes · openclaw/openclaw@628e6cd test: merge navigation routing cases · openclaw/openclaw@5d8cecb Tests: mock channel registry bundled fallback · openclaw/openclaw@2b08233 Secrets: avoid broad web search discovery for single plugin config · openclaw/openclaw@a464f59 test: merge config view browser checks · openclaw/openclaw@20cf511 fix(status): align oauth health with runtime · openclaw/openclaw@eed7116 feat: add macOS screen snapshots for monitor preview (#67954) thanks … · openclaw/openclaw@f377db1 fix: report shared auth scopes in hello-ok (#67810) thanks @BunsDev · openclaw/openclaw@0b6c39b Auto-reply: avoid eager bundled route fallback · openclaw/openclaw@3ea1bf4 Tests: narrow session binding contract setup · openclaw/openclaw@54e4e16 fix(macOS): enable undo/redo in webchat composer text input (#34962) · openclaw/openclaw@00951dc Tests: speed up channel setup promotion · openclaw/openclaw@82b529a Docs: refresh agent instructions · openclaw/openclaw@5775fe2 fix(auth): serialize OAuth refresh across agents to fix #26322 (#67876) · openclaw/openclaw@8e79080 test: allow ollama public surface boundary test · openclaw/openclaw@7d4f1a6 Docs: add test performance guardrails · openclaw/openclaw@89706d3 Tests: restore context-engine usage proof · openclaw/openclaw@e4c4f95 Tests: slim context engine runtime coverage · openclaw/openclaw@74c198f ci: retry failed custom checkouts · openclaw/openclaw@0ee5baf test: trim duplicate provider auth onboarding cases · openclaw/openclaw@1ffc02e matrix: fix sessions_spawn --thread subagent session spawning (#67643) · openclaw/openclaw@1ce2596 test: reduce auth choice fixture churn · openclaw/openclaw@857b9cd test: mock health status config boundaries · openclaw/openclaw@9d5ab4a test: mock onboard config io boundary · openclaw/openclaw@299694d test: mock legacy state plugin boundaries · openclaw/openclaw@2713089 test: mock channel install boundaries · openclaw/openclaw@b945248 test: mock doctor preview channel boundaries · openclaw/openclaw@b1a3ad4
ci: react to maintainer PR commands · openclaw/openclaw@6...
vincentkoc · 2026-04-29 · via Recent Commits to openclaw:main

@@ -0,0 +1,89 @@

1+

name: Maintainer Command Reactions

2+3+

on:

4+

issue_comment:

5+

types: [created, edited]

6+7+

permissions: {}

8+9+

concurrency:

10+

group: maintainer-command-reactions-${{ github.event.comment.id }}

11+

cancel-in-progress: true

12+13+

jobs:

14+

react:

15+

if: ${{ github.event.issue.pull_request && !endsWith(github.actor, '[bot]') }}

16+

runs-on: ubuntu-24.04

17+

permissions:

18+

issues: write

19+

env:

20+

CLOWNFISH_APP_ID: ${{ vars.CLOWNFISH_APP_ID || secrets.CLOWNFISH_APP_ID }}

21+

CLOWNFISH_APP_AUTH_ENABLED: ${{ secrets.CLOWNFISH_APP_PRIVATE_KEY != '' && (vars.CLOWNFISH_APP_ID != '' || secrets.CLOWNFISH_APP_ID != '') && '1' || '0' }}

22+

MAINTAINER_COMMAND_REACTIONS: ${{ vars.MAINTAINER_COMMAND_REACTIONS || '/automerge,/merge,/land,/landpr' }}

23+

steps:

24+

- name: Create Clownfish reaction token

25+

id: clownfish-token

26+

if: ${{ env.CLOWNFISH_APP_AUTH_ENABLED == '1' }}

27+

continue-on-error: true

28+

uses: actions/create-github-app-token@v3

29+

with:

30+

app-id: ${{ env.CLOWNFISH_APP_ID }}

31+

private-key: ${{ secrets.CLOWNFISH_APP_PRIVATE_KEY }}

32+

owner: openclaw

33+

repositories: openclaw

34+

permission-issues: write

35+36+

- name: React to maintainer slash command

37+

uses: actions/github-script@v9

38+

with:

39+

github-token: ${{ steps.clownfish-token.outputs.token || github.token }}

40+

script: |

41+

const comment = context.payload.comment;

42+

const issue = context.payload.issue;

43+

const association = comment.author_association;

44+

const maintainerAssociations = new Set(["OWNER", "MEMBER", "COLLABORATOR"]);

45+

if (!maintainerAssociations.has(association)) {

46+

core.info(`Skipping non-maintainer command reaction for association ${association || "unknown"}.`);

47+

return;

48+

}

49+50+

if (!issue.pull_request) {

51+

core.info("Skipping command reaction because the comment is not on a pull request.");

52+

return;

53+

}

54+55+

const commands = (process.env.MAINTAINER_COMMAND_REACTIONS || "")

56+

.split(",")

57+

.map((command) => command.trim())

58+

.filter(Boolean);

59+

const commandLine = String(comment.body || "")

60+

.split(/\r?\n/)

61+

.map((line) => line.trim())

62+

.find((line) => commands.some((command) => line === command || line.startsWith(`${command} `)));

63+64+

if (!commandLine) {

65+

core.info(`Skipping comment ${comment.id}; no tracked maintainer command found.`);

66+

return;

67+

}

68+69+

async function react(content) {

70+

try {

71+

await github.rest.reactions.createForIssueComment({

72+

owner: context.repo.owner,

73+

repo: context.repo.repo,

74+

comment_id: comment.id,

75+

content,

76+

});

77+

core.info(`Added ${content} reaction to comment ${comment.id}.`);

78+

} catch (error) {

79+

if (error.status === 422 && /already exists/i.test(String(error.message))) {

80+

core.info(`${content} reaction already exists on comment ${comment.id}.`);

81+

return;

82+

}

83+

throw error;

84+

}

85+

}

86+87+

await react("eyes");

88+

core.info(`Maintainer command observed on PR #${issue.number}: ${commandLine}`);

89+

await react("+1");