diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 945bf0d..6e3f80b 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -16,19 +16,11 @@ jobs: runs-on: ubuntu-latest env: NODE_VERSION: '18' - GIT_USER_NAME: 'mocayo' - GIT_USER_EMAIL: 'qihai@bytedance.com' steps: - uses: actions/checkout@v3 with: fetch-depth: 1 - - name: Config Git User - # should be turn to ci user - run: | - git config --local user.name ${{ env.GIT_USER_NAME }} - git config --local user.email ${{ env.GIT_USER_EMAIL }} - - uses: actions/setup-node@v3 with: node-version: ${{ env.NODE_VERSION }} diff --git a/packages/ci-tools/CHANGELOG.md b/packages/ci-tools/CHANGELOG.md index dc583cf..3d1912c 100644 --- a/packages/ci-tools/CHANGELOG.md +++ b/packages/ci-tools/CHANGELOG.md @@ -1,6 +1,6 @@ # πŸ•— Change Log - @cozeloop/ci-tools -## 0.0.2 +## 0.0.2 ~ 0.0.5 * [feat] add `sync-pr` to synchronize GitHub PR via lark in `lark` command ## 0.0.1 diff --git a/packages/ci-tools/package.json b/packages/ci-tools/package.json index d09ad83..e6a7c7f 100644 --- a/packages/ci-tools/package.json +++ b/packages/ci-tools/package.json @@ -1,7 +1,7 @@ { "name": "@cozeloop/ci-tools", - "version": "0.0.4", - "description": "πŸ”§ Tools for CI", + "version": "0.0.5", + "description": "πŸ”§ Tools for Coze Loop CI", "homepage": "https://github.com/coze-dev/cozeloop-js/tree/main/packages/ci-tools", "bugs": { "url": "https://github.com/coze-dev/cozeloop-js/issues" diff --git a/packages/ci-tools/src/index.ts b/packages/ci-tools/src/index.ts index 1ad5ad8..718eb6e 100644 --- a/packages/ci-tools/src/index.ts +++ b/packages/ci-tools/src/index.ts @@ -22,3 +22,7 @@ export function run() { program.parse(process.argv); } + +// if (require.main === module) { +// run(); +// } diff --git a/packages/ci-tools/src/lark/sync-pr.ts b/packages/ci-tools/src/lark/sync-pr.ts index 6a097ba..cb60c3b 100644 --- a/packages/ci-tools/src/lark/sync-pr.ts +++ b/packages/ci-tools/src/lark/sync-pr.ts @@ -5,6 +5,27 @@ import { Client } from '@larksuiteoapi/node-sdk'; import { larkOptionSchema, messageReceiverSchema } from './schema'; +function makeCRUrl(pr_url?: string) { + const baseUrl = process.env.PR_CR_BASE_URL; + + if (!pr_url || !baseUrl) { + return; + } + + const docUrl = process.env.PR_CR_DOC_URL || ''; + const formData = JSON.stringify([ + { name: 'pr_url', value: pr_url }, + { name: 'doc_url', value: docUrl }, + ]); + + const cr_url = new URL(baseUrl); + cr_url.searchParams.append('formData', formData); + cr_url.searchParams.append('autoreg', 'true'); + cr_url.searchParams.append('fromapp', 'GitHub'); + + return cr_url.toString(); +} + function makePrMessage() { const repo_name = process.env.REPO_NAME; const pr_action = process.env.PR_ACTION; @@ -17,11 +38,14 @@ function makePrMessage() { const pr_target_owner = process.env.PR_TARGET_OWNER; const pr_target_ref = process.env.PR_TARGET_REF; const pr_merged = process.env.PR_MERGED; + const cr_url = makeCRUrl(pr_url); - const title = - pr_action === 'closed' && pr_merged === 'true' - ? `πŸŽ‰ PR #${pr_number} merged` - : `πŸ“’ PR #${pr_number} ${pr_action}`; + const isOpen = pr_action === 'opened' || pr_action === 'reopened'; + const isMerged = pr_action === 'closed' && pr_merged === 'true'; + + const title = isMerged + ? `πŸŽ‰ PR #${pr_number} merged` + : `πŸ“’ PR #${pr_number} ${pr_action}`; return JSON.stringify({ schema: '2.0', @@ -59,13 +83,43 @@ function makePrMessage() { margin: '0px 0px 0px 0px', }, { - tag: 'markdown', - content: `πŸ‘‰ 前往ζŸ₯ηœ‹`, - text_align: 'left', - text_size: 'normal_v2', - margin: '0px 0px 0px 0px', + tag: 'column_set', + columns: [ + { + tag: 'column', + width: 'weighted', + elements: [ + { + tag: 'markdown', + content: `πŸ‘‰ 前往ζŸ₯ηœ‹`, + text_align: 'left', + text_size: 'normal_v2', + margin: '0px 0px 0px 0px', + }, + ], + vertical_align: 'top', + weight: 1, + }, + isOpen && cr_url + ? { + tag: 'column', + width: 'weighted', + elements: [ + { + tag: 'markdown', + content: `πŸ” Aime CR`, + text_align: 'left', + text_size: 'normal_v2', + margin: '0px 0px 0px 0px', + }, + ], + vertical_align: 'top', + weight: 1, + } + : undefined, + ], }, - ], + ].filter(v => Boolean(v)), }, header: { title: {