diff --git a/.github/workflows/Lark.yml b/.github/workflows/Lark.yml new file mode 100644 index 0000000..6463903 --- /dev/null +++ b/.github/workflows/Lark.yml @@ -0,0 +1,401 @@ +name: Lark notification + +# https://docs.github.com/en/actions/writing-workflows/choosing-when-your-workflow-runs/events-that-trigger-workflows +on: + push: + issues: + pull_request: + discussion: + issue_comment: + discussion_comment: + +jobs: + send-Lark-message: + runs-on: ubuntu-latest + steps: + - name: Commit message cleaning + id: commit_message + env: + COMMIT_MESSAGE: ${{ github.event.head_commit.message }} + run: | + echo "$COMMIT_MESSAGE" | sed 's/"/\\"/g' > commit_message.txt + { + echo 'commit_message<> $GITHUB_OUTPUT + + - name: Commits pushed + uses: foxundermoon/feishu-action@v2 + if: github.event_name == 'push' + with: + url: ${{ secrets.LARK_CHATBOT_HOOK_URL }} + msg_type: post + content: | + post: + zh_cn: + title: GitHub 代码提交 + content: + - - tag: text + text: 提交链接: + - tag: a + text: ${{ github.event.head_commit.url }} + href: ${{ github.event.head_commit.url }} + - - tag: text + text: 代码分支: + - tag: a + text: ${{ github.ref }} + href: ${{ github.server_url }}/${{ github.repository }}/tree/${{ github.ref_name }} + - - tag: text + text: 提交作者: + - tag: a + text: ${{ github.actor }} + href: ${{ github.server_url }}/${{ github.actor }} + - - tag: text + text: 提交信息: + - tag: text + text: "${{ steps.commit_message.outputs.commit_message }}" + + - name: Issue body cleaning + id: issue_body + env: + ISSUE_BODY: ${{ github.event.issue.body }} + run: | + echo "$ISSUE_BODY" | sed 's/"/\\"/g' > issue_body.txt + { + echo 'issue_body<> $GITHUB_OUTPUT + + - name: Issue opened + uses: foxundermoon/feishu-action@v2 + if: github.event_name == 'issues' && (github.event.action == 'opened' || github.event.action == 'reopened') + with: + url: ${{ secrets.LARK_CHATBOT_HOOK_URL }} + msg_type: post + content: | + post: + zh_cn: + title: GitHub issue 打开:${{ github.event.issue.title }} + content: + - - tag: text + text: 链接: + - tag: a + text: ${{ github.event.issue.html_url }} + href: ${{ github.event.issue.html_url }} + - - tag: text + text: 作者: + - tag: a + text: ${{ github.event.issue.user.login }} + href: ${{ github.event.issue.user.html_url }} + - - tag: text + text: 指派: + - tag: a + text: "${{ github.event.issue.assignee.login }}" + href: "${{ github.event.issue.assignee.html_url }}" + - - tag: text + text: 标签:${{ github.event.issue.labels }} + - - tag: text + text: 里程碑:${{ github.event.issue.milestone.title }} + - - tag: text + text: 描述: + - tag: text + text: "${{ steps.issue_body.outputs.issue_body }}" + + - name: Issue edited + uses: foxundermoon/feishu-action@v2 + if: github.event_name == 'issues' && (github.event.action == 'edited' || github.event.action == 'transferred' || github.event.action == 'labeled' || github.event.action == 'unlabeled' || github.event.action == 'assigned' || github.event.action == 'unassigned') + with: + url: ${{ secrets.LARK_CHATBOT_HOOK_URL }} + msg_type: post + content: | + post: + zh_cn: + title: GitHub issue 编辑:${{ github.event.issue.title }} + content: + - - tag: text + text: 链接: + - tag: a + text: ${{ github.event.issue.html_url }} + href: ${{ github.event.issue.html_url }} + - - tag: text + text: 作者: + - tag: a + text: ${{ github.event.issue.user.login }} + href: ${{ github.event.issue.user.html_url }} + - - tag: text + text: 指派: + - tag: a + text: "${{ github.event.issue.assignee.login }}" + href: "${{ github.event.issue.assignee.html_url }}" + - - tag: text + text: 标签:${{ github.event.issue.labels }} + - - tag: text + text: 里程碑:${{ github.event.issue.milestone.title }} + - - tag: text + text: 描述: + - tag: text + text: "${{ steps.issue_body.outputs.issue_body }}" + + - name: Issue closed + uses: foxundermoon/feishu-action@v2 + if: github.event_name == 'issues' && github.event.action == 'closed' + with: + url: ${{ secrets.LARK_CHATBOT_HOOK_URL }} + msg_type: post + content: | + post: + zh_cn: + title: GitHub issue 关闭:${{ github.event.issue.title }} + content: + - - tag: text + text: 链接: + - tag: a + text: ${{ github.event.issue.html_url }} + href: ${{ github.event.issue.html_url }} + - - tag: text + text: 作者: + - tag: a + text: ${{ github.event.issue.user.login }} + href: ${{ github.event.issue.user.html_url }} + - - tag: text + text: 指派: + - tag: a + text: "${{ github.event.issue.assignee.login }}" + href: "${{ github.event.issue.assignee.html_url }}" + - - tag: text + text: 标签:${{ github.event.issue.labels }} + - - tag: text + text: 里程碑:${{ github.event.issue.milestone.title }} + - - tag: text + text: 描述: + - tag: text + text: "${{ steps.issue_body.outputs.issue_body }}" + + - name: PR body cleaning + id: PR_body + env: + PR_BODY: ${{ github.event.pull_request.body }} + run: | + echo "$PR_BODY" | sed 's/"/\\"/g' > PR_body.txt + { + echo 'PR_body<> $GITHUB_OUTPUT + + - name: PR opened + uses: foxundermoon/feishu-action@v2 + if: github.event_name == 'pull_request' && (github.event.action == 'opened' || github.event.action == 'reopened') + with: + url: ${{ secrets.LARK_CHATBOT_HOOK_URL }} + msg_type: post + content: | + post: + zh_cn: + title: GitHub PR 打开:${{ github.event.pull_request.title }} + content: + - - tag: text + text: 链接: + - tag: a + text: ${{ github.event.pull_request.html_url }} + href: ${{ github.event.pull_request.html_url }} + - - tag: text + text: 作者: + - tag: a + text: ${{ github.event.pull_request.user.login }} + href: ${{ github.event.pull_request.user.html_url }} + - - tag: text + text: 指派: + - tag: a + text: "${{ github.event.pull_request.assignee.login }}" + href: "${{ github.event.pull_request.assignee.html_url }}" + - - tag: text + text: 标签:${{ github.event.pull_request.labels }} + - - tag: text + text: 里程碑:${{ github.event.pull_request.milestone.title }} + - - tag: text + text: 描述: + - tag: text + text: "${{ steps.PR_body.outputs.PR_body }}" + + - name: PR edited + uses: foxundermoon/feishu-action@v2 + if: github.event_name == 'pull_request' && (github.event.action == 'edited' || github.event.action == 'labeled' || github.event.action == 'unlabeled' || github.event.action == 'assigned' || github.event.action == 'unassigned') + with: + url: ${{ secrets.LARK_CHATBOT_HOOK_URL }} + msg_type: post + content: | + post: + zh_cn: + title: GitHub PR 编辑:${{ github.event.pull_request.title }} + content: + - - tag: text + text: 链接: + - tag: a + text: ${{ github.event.pull_request.html_url }} + href: ${{ github.event.pull_request.html_url }} + - - tag: text + text: 作者: + - tag: a + text: ${{ github.event.pull_request.user.login }} + href: ${{ github.event.pull_request.user.html_url }} + - - tag: text + text: 指派: + - tag: a + text: "${{ github.event.pull_request.assignee.login }}" + href: "${{ github.event.pull_request.assignee.html_url }}" + - - tag: text + text: 标签:${{ github.event.pull_request.labels }} + - - tag: text + text: 里程碑:${{ github.event.pull_request.milestone.title }} + - - tag: text + text: 描述: + - tag: text + text: "${{ steps.PR_body.outputs.PR_body }}" + + - name: PR closed + uses: foxundermoon/feishu-action@v2 + if: github.event_name == 'pull_request' && github.event.action == 'closed' + with: + url: ${{ secrets.LARK_CHATBOT_HOOK_URL }} + msg_type: post + content: | + post: + zh_cn: + title: GitHub PR 关闭:${{ github.event.pull_request.title }} + content: + - - tag: text + text: 链接: + - tag: a + text: ${{ github.event.pull_request.html_url }} + href: ${{ github.event.pull_request.html_url }} + - - tag: text + text: 作者: + - tag: a + text: ${{ github.event.pull_request.user.login }} + href: ${{ github.event.pull_request.user.html_url }} + - - tag: text + text: 指派: + - tag: a + text: "${{ github.event.pull_request.assignee.login }}" + href: "${{ github.event.pull_request.assignee.html_url }}" + - - tag: text + text: 标签:${{ github.event.pull_request.labels }} + - - tag: text + text: 里程碑:${{ github.event.pull_request.milestone.title }} + - - tag: text + text: 描述: + - tag: text + text: "${{ steps.PR_body.outputs.PR_body }}" + + - name: Discussion body cleaning + id: discussion_body + env: + DISCUSSION_BODY: ${{ github.event.discussion.body }} + run: | + echo "$DISCUSSION_BODY" | sed 's/"/\\"/g' > discussion_body.txt + { + echo 'discussion_body<> $GITHUB_OUTPUT + + - name: Discussion created + uses: foxundermoon/feishu-action@v2 + if: github.event_name == 'discussion' && github.event.action == 'created' + with: + url: ${{ secrets.LARK_CHATBOT_HOOK_URL }} + msg_type: post + content: | + post: + zh_cn: + title: GitHub 帖子发布:${{ github.event.discussion.title }} + content: + - - tag: text + text: 链接: + - tag: a + text: ${{ github.event.discussion.html_url }} + href: ${{ github.event.discussion.html_url }} + - - tag: text + text: 作者: + - tag: a + text: ${{ github.event.discussion.user.login }} + href: ${{ github.event.discussion.user.html_url }} + - - tag: text + text: 分类:${{ github.event.discussion.category }} + - - tag: text + text: 标签:${{ github.event.discussion.labels }} + - - tag: text + text: 描述: + - tag: text + text: "${{ steps.discussion_body.outputs.discussion_body }}" + + - name: Discussion edited + uses: foxundermoon/feishu-action@v2 + if: github.event_name == 'discussion' && (github.event.action == 'edited' || github.event.action == 'transferred' || github.event.action == 'category_changed' || github.event.action == 'labeled' || github.event.action == 'unlabeled') + with: + url: ${{ secrets.LARK_CHATBOT_HOOK_URL }} + msg_type: post + content: | + post: + zh_cn: + title: GitHub 帖子修改:${{ github.event.discussion.title }} + content: + - - tag: text + text: 链接: + - tag: a + text: ${{ github.event.discussion.html_url }} + href: ${{ github.event.discussion.html_url }} + - - tag: text + text: 作者: + - tag: a + text: ${{ github.event.discussion.user.login }} + href: ${{ github.event.discussion.user.html_url }} + - - tag: text + text: 分类:${{ github.event.discussion.category }} + - - tag: text + text: 标签:${{ github.event.discussion.labels }} + - - tag: text + text: 描述: + - tag: text + text: "${{ steps.discussion_body.outputs.discussion_body }}" + + - name: Comment body cleaning + id: comment_body + env: + COMMENT_BODY: ${{ github.event.comment.body }} + run: | + echo "$COMMENT_BODY" | sed 's/"/\\"/g' > comment_body.txt + { + echo 'comment_body<> $GITHUB_OUTPUT + + - name: Issue/Discussion commented + uses: foxundermoon/feishu-action@v2 + if: (github.event_name == 'issue_comment' || github.event_name == 'discussion_comment') && (github.event.action == 'created' || github.event.action == 'edited') + with: + url: ${{ secrets.LARK_CHATBOT_HOOK_URL }} + msg_type: post + content: | + post: + zh_cn: + title: GitHub 帖子评论:${{ github.event.issue.title }} + content: + - - tag: text + text: 链接: + - tag: a + text: ${{ github.event.comment.html_url }} + href: ${{ github.event.comment.html_url }} + - - tag: text + text: 作者: + - tag: a + text: ${{ github.event.comment.user.login }} + href: ${{ github.event.comment.user.html_url }} + - - tag: text + text: 描述: + - tag: text + text: "${{ steps.comment_body.outputs.comment_body }}" diff --git a/src/controller/CheckEvent.ts b/src/controller/CheckEvent.ts index cf519c1..5e55bd4 100644 --- a/src/controller/CheckEvent.ts +++ b/src/controller/CheckEvent.ts @@ -19,6 +19,7 @@ import { User, dataSource } from '../model'; +import { ActivityLogController } from './ActivityLog'; @JsonController('/event/check') export class CheckEventController { @@ -44,7 +45,14 @@ export class CheckEventController { if (checked) throw new ForbiddenError('No duplicated check'); - return this.store.save({ ...data, createdBy, user }); + const saved = await this.store.save({ ...data, createdBy, user }); + + await ActivityLogController.logCreate( + createdBy, + 'CheckEvent', + saved.id + ); + return saved; } @Get() diff --git a/src/controller/User.ts b/src/controller/User.ts index eab7b3c..9cf09ed 100644 --- a/src/controller/User.ts +++ b/src/controller/User.ts @@ -54,11 +54,8 @@ export class UserController { return user; } - static getSession({ context: { state } }: JWTAction) { - return state instanceof JsonWebTokenError - ? console.error(state) - : state.user; - } + static getSession = ({ context: { state } }: JWTAction) => + state instanceof JsonWebTokenError ? console.error(state) : state.user; @Get('/session') @Authorized() diff --git a/src/model/ActivityLog.ts b/src/model/ActivityLog.ts index 12c3a8c..d568e3e 100644 --- a/src/model/ActivityLog.ts +++ b/src/model/ActivityLog.ts @@ -10,6 +10,7 @@ import { import { Column, Entity, ViewColumn, ViewEntity } from 'typeorm'; import { Base, BaseFilter, InputData, ListChunk } from './Base'; +import { CheckEvent } from './CheckEvent'; import { User, UserBase } from './User'; export enum Operation { @@ -18,7 +19,7 @@ export enum Operation { Delete = 'delete' } -export const LogableTable = { User }; +export const LogableTable = { User, CheckEvent }; const LogableTableEnum = Object.fromEntries( Object.entries(LogableTable).map(([key]) => [key, key])