mirror of
https://github.com/certd/certd.git
synced 2026-06-13 20:57:33 +08:00
Compare commits
13 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 4a09cf289d | |||
| 89c23fef35 | |||
| 5e59651d45 | |||
| 5e72f75395 | |||
| 8edb6f8727 | |||
| b30f02a1fb | |||
| 7e2333a63a | |||
| 0be66cccbc | |||
| ed26ed196d | |||
| a204f270dd | |||
| 7585d7bbd0 | |||
| 2981f086c8 | |||
| 784ef8a6a4 |
@@ -44,7 +44,7 @@ jobs:
|
||||
# cache: 'npm'
|
||||
# working-directory: ./packages/ui/certd-client
|
||||
- run: |
|
||||
npm install -g pnpm
|
||||
npm install -g pnpm@10.33.4
|
||||
pnpm install
|
||||
npm run build
|
||||
working-directory: ./packages/ui/certd-client
|
||||
|
||||
@@ -46,7 +46,7 @@ jobs:
|
||||
console.log("certd_version:",pkg.version);
|
||||
return pkg.version
|
||||
- run: |
|
||||
npm install -g pnpm
|
||||
npm install -g pnpm@10.33.4
|
||||
pnpm install
|
||||
npm run build
|
||||
working-directory: ./packages/ui/certd-client
|
||||
|
||||
@@ -35,7 +35,7 @@ jobs:
|
||||
run: |
|
||||
export GITEE_TOKEN=${{ secrets.GITEE_TOKEN }}
|
||||
rm -rf ./pnpm*.yaml
|
||||
npm install -g pnpm
|
||||
npm install -g pnpm@10.33.4
|
||||
pnpm install
|
||||
npm run publish_to_gitee
|
||||
working-directory: ./
|
||||
|
||||
@@ -35,7 +35,7 @@ jobs:
|
||||
run: |
|
||||
export GITHUB_TOKEN=${{ secrets.GH_TOKEN }}
|
||||
rm -rf ./pnpm*.yaml
|
||||
npm install -g pnpm
|
||||
npm install -g pnpm@10.33.4
|
||||
pnpm install
|
||||
npm run publish_to_github
|
||||
working-directory: ./
|
||||
|
||||
@@ -50,7 +50,7 @@ jobs:
|
||||
# cache: 'npm'
|
||||
# working-directory: ./packages/ui/certd-client
|
||||
- run: |
|
||||
npm install -g pnpm
|
||||
npm install -g pnpm@10.33.4
|
||||
pnpm install
|
||||
npm run build
|
||||
working-directory: ./packages/ui/certd-client
|
||||
|
||||
+3
-1
@@ -32,4 +32,6 @@ test/**/*.js
|
||||
test.js
|
||||
.history
|
||||
/logs
|
||||
.pnpm-lock.yaml
|
||||
.pnpm-lock.yaml
|
||||
pnpm-lock.yaml
|
||||
.studio/
|
||||
Vendored
+2
-1
@@ -20,5 +20,6 @@
|
||||
"scm.repositories.visible": 9,
|
||||
"scm.repositories.explorer": false,
|
||||
"scm.repositories.selectionMode": "multiple",
|
||||
"scm.repositories.sortOrder": "discovery time"
|
||||
"scm.repositories.sortOrder": "discovery time",
|
||||
"git.ignoreLimitWarning": true
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
# Certd 开发 Agent 上下文
|
||||
# Certd 开发 Agent 上下文
|
||||
|
||||
这个文件是给在本仓库工作的开发 agent 看的常驻项目说明。后续会话进入仓库后,应先读取它,再按任务需要查看具体代码,避免每次都重新全量扫描项目。
|
||||
|
||||
@@ -218,3 +218,6 @@ Get-ChildItem packages\ui\certd-client\src\views\certd
|
||||
- 单个 monorepo 包运行单元测试时,优先使用 `corepack pnpm --dir <包目录> test:unit`,例如 `corepack pnpm --dir packages\ui\certd-server test:unit`、`corepack pnpm --dir packages\core\basic test:unit`、`corepack pnpm --dir packages\plugins\plugin-lib test:unit`;也可以用包名过滤,例如 `corepack pnpm --filter @certd/ui-server test:unit`。前端 `packages\ui\certd-client` 暂时不跑单元测试。
|
||||
- 前端 TS/Vue/locale 等文件改动后,优先只对本次改动文件运行项目现有自动格式化/修复;Windows/PowerShell 下 Prettier 已验证可用命令为 `packages\ui\certd-client\node_modules\.bin\prettier.cmd --write <files>`,ESLint 可用命令为 `packages\ui\certd-client\node_modules\.bin\eslint.cmd --fix <files>`;不要运行 `vue-tsc` / `pnpm tsc`;不要为了格式化无关文件而扩大 diff。项目保留了 `tslint` 依赖,但当前主要使用 ESLint + Prettier。
|
||||
- 优先对改动包运行聚焦的测试;后端可按包运行单元测试,前端优先使用 Prettier/ESLint 做改动文件验证。只有跨包影响明显时再考虑全 monorepo 构建。
|
||||
|
||||
- 不要主动运行 `pnpm install` 安装依赖:用户会事先准备好 `node_modules`。如果 `pnpm install` 或 `test:unit` 因缺少依赖、TTY 或网络问题失败,立即停止尝试,告知用户解决环境问题。
|
||||
|
||||
|
||||
@@ -3,6 +3,17 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.40.4](https://github.com/certd/certd/compare/v1.40.3...v1.40.4) (2026-05-24)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **pipeline-service:** 修复流水线运行时超过套餐部署次数仍然能够正常运行的bug ([5e59651](https://github.com/certd/certd/commit/5e59651d45bc91919629e35995ff1b3cff6b87ea))
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* 商业版套餐只支持设置为可叠加 ([5e72f75](https://github.com/certd/certd/commit/5e72f75395fb632a30e80c07d35d8ba40ef631fa))
|
||||
* 新增阿里云直播证书部署插件 ([8edb6f8](https://github.com/certd/certd/commit/8edb6f8727bd148f106801bef25567880fd35e9e))
|
||||
|
||||
## [1.40.3](https://github.com/certd/certd/compare/v1.40.2...v1.40.3) (2026-05-21)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
@@ -3,6 +3,16 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.40.3](https://github.com/certd/certd/compare/v1.40.2...v1.40.3) (2026-05-21)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* 修复暗黑模式下注册页面验证码看不清的问题 ([5ba33be](https://github.com/certd/certd/commit/5ba33be30f765f06cafbfcc04f5e25320db01449))
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* 修复商业版套餐添加和修改时的字段显示 ([fb5b00d](https://github.com/certd/certd/commit/fb5b00d73f925036a65ce5003c57c1199578c34d))
|
||||
|
||||
## [1.40.2](https://github.com/certd/certd/compare/v1.40.1...v1.40.2) (2026-05-19)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# 任务插件
|
||||
共 `131` 款任务插件
|
||||
共 `132` 款任务插件
|
||||
## 1. 证书申请
|
||||
|
||||
| 序号 | 名称 | 说明 |
|
||||
@@ -93,13 +93,14 @@
|
||||
| 9.| **阿里云-部署至ESA** | 部署证书到阿里云ESA(边缘安全加速),自动删除过期证书 |
|
||||
| 10.| **阿里云-部署至阿里云FC(3.0)** | 部署证书到阿里云函数计算(FC3.0) |
|
||||
| 11.| **阿里云-部署至GA** | 部署证书到阿里云GA(全球加速),支持更新默认证书和扩展证书 |
|
||||
| 12.| **阿里云-部署至NLB(网络负载均衡)** | NLB,网络负载均衡,更新监听器的默认证书 |
|
||||
| 13.| **阿里云-部署证书至OSS** | 部署域名证书至阿里云OSS自定义域名,不是上传到阿里云oss |
|
||||
| 14.| **阿里云-部署至CLB(传统负载均衡)** | 部署证书到阿里云CLB(传统负载均衡) |
|
||||
| 15.| **阿里云-部署至VOD** | 部署证书到阿里云视频点播(vod) |
|
||||
| 16.| **阿里云-部署至阿里云WAF(云产品接入)** | 部署证书到阿里云WAF(云产品接入),CNAME方式接入的请选择另外一个waf插件 |
|
||||
| 17.| **阿里云-部署至阿里云WAF(cname接入)** | 部署证书到阿里云WAF(cname接入),云资源的请选择另外一个waf插件 |
|
||||
| 18.| **阿里云-上传证书到CAS** | 上传证书到阿里云证书管理服务(CAS),如果不想在阿里云上同一份证书上传多次,可以把此任务作为前置任务,其他阿里云任务证书那一项选择此任务的输出 |
|
||||
| 12.| **阿里云-部署至直播(Live)** | 部署证书到阿里云视频直播(Live)域名 |
|
||||
| 13.| **阿里云-部署至NLB(网络负载均衡)** | NLB,网络负载均衡,更新监听器的默认证书 |
|
||||
| 14.| **阿里云-部署证书至OSS** | 部署域名证书至阿里云OSS自定义域名,不是上传到阿里云oss |
|
||||
| 15.| **阿里云-部署至CLB(传统负载均衡)** | 部署证书到阿里云CLB(传统负载均衡) |
|
||||
| 16.| **阿里云-部署至VOD** | 部署证书到阿里云视频点播(vod) |
|
||||
| 17.| **阿里云-部署至阿里云WAF(云产品接入)** | 部署证书到阿里云WAF(云产品接入),CNAME方式接入的请选择另外一个waf插件 |
|
||||
| 18.| **阿里云-部署至阿里云WAF(cname接入)** | 部署证书到阿里云WAF(cname接入),云资源的请选择另外一个waf插件 |
|
||||
| 19.| **阿里云-上传证书到CAS** | 上传证书到阿里云证书管理服务(CAS),如果不想在阿里云上同一份证书上传多次,可以把此任务作为前置任务,其他阿里云任务证书那一项选择此任务的输出 |
|
||||
## 6. 华为云
|
||||
|
||||
| 序号 | 名称 | 说明 |
|
||||
|
||||
+1
-1
@@ -9,5 +9,5 @@
|
||||
}
|
||||
},
|
||||
"npmClient": "pnpm",
|
||||
"version": "1.40.3"
|
||||
"version": "1.40.4"
|
||||
}
|
||||
|
||||
+2
-1
@@ -20,6 +20,7 @@
|
||||
"devb": "lerna run dev-build",
|
||||
"i-all": "lerna link && lerna exec npm install ",
|
||||
"publish": "pnpm run prepublishOnly2 && lerna publish --force-publish=pro/plus-core --conventional-commits && pnpm run afterpublishOnly ",
|
||||
"publish2":" npm run pub_all && pnpm run afterpublishOnly",
|
||||
"afterpublishOnly": "pnpm run copylogs && time /t >trigger/build.trigger && git add ./trigger/build.trigger && git commit -m \"build: trigger build image\" && TIMEOUT /T 10 && pnpm run commitAll",
|
||||
"transform-sql": "cd ./packages/ui/certd-server/db/ && node --experimental-json-modules transform.js",
|
||||
"plugin-doc-gen": "cd ./packages/ui/certd-server/ && pnpm run export-metadata",
|
||||
@@ -39,7 +40,7 @@
|
||||
"test:unit": "cross-env NODE_ENV=unittest pnpm -r --workspace-concurrency=1 run test:unit",
|
||||
"pub": "echo 1",
|
||||
"dev": "pnpm run -r --parallel compile ",
|
||||
"pub_all":"pnpm run -r --parallel pub ",
|
||||
"pub_all": "node ./scripts/pub-all.js",
|
||||
"release": "time /t >trigger/release.trigger && git add trigger/release.trigger && git commit -m \"build: release\" && git push",
|
||||
"publish_to_atomgit": "node --experimental-json-modules ./scripts/publish-atomgit.js",
|
||||
"publish_to_gitee": "node --experimental-json-modules ./scripts/publish-gitee.js",
|
||||
|
||||
@@ -3,6 +3,10 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.40.4](https://github.com/publishlab/node-acme-client/compare/v1.40.3...v1.40.4) (2026-05-24)
|
||||
|
||||
**Note:** Version bump only for package @certd/acme-client
|
||||
|
||||
## [1.40.3](https://github.com/publishlab/node-acme-client/compare/v1.40.2...v1.40.3) (2026-05-21)
|
||||
|
||||
**Note:** Version bump only for package @certd/acme-client
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
"description": "Simple and unopinionated ACME client",
|
||||
"private": false,
|
||||
"author": "nmorsman",
|
||||
"version": "1.40.3",
|
||||
"version": "1.40.4",
|
||||
"type": "module",
|
||||
"module": "./dist/index.js",
|
||||
"main": "./dist/index.js",
|
||||
@@ -18,7 +18,7 @@
|
||||
"types"
|
||||
],
|
||||
"dependencies": {
|
||||
"@certd/basic": "^1.40.3",
|
||||
"@certd/basic": "^1.40.4",
|
||||
"@peculiar/x509": "^1.11.0",
|
||||
"asn1js": "^3.0.5",
|
||||
"axios": "^1.9.0",
|
||||
@@ -76,5 +76,5 @@
|
||||
"bugs": {
|
||||
"url": "https://github.com/publishlab/node-acme-client/issues"
|
||||
},
|
||||
"gitHead": "678b70cee8510a2b5217788c5db9469f49cbd439"
|
||||
"gitHead": "01c91ba294f88bd07fddf9358c4301bbb4027916"
|
||||
}
|
||||
|
||||
@@ -3,6 +3,10 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.40.4](https://github.com/certd/certd/compare/v1.40.3...v1.40.4) (2026-05-24)
|
||||
|
||||
**Note:** Version bump only for package @certd/basic
|
||||
|
||||
## [1.40.3](https://github.com/certd/certd/compare/v1.40.2...v1.40.3) (2026-05-21)
|
||||
|
||||
**Note:** Version bump only for package @certd/basic
|
||||
|
||||
@@ -1 +1 @@
|
||||
22:57
|
||||
00:18
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@certd/basic",
|
||||
"private": false,
|
||||
"version": "1.40.3",
|
||||
"version": "1.40.4",
|
||||
"type": "module",
|
||||
"main": "./dist/index.js",
|
||||
"module": "./dist/index.js",
|
||||
@@ -52,5 +52,5 @@
|
||||
"tslib": "^2.8.1",
|
||||
"typescript": "^5.4.2"
|
||||
},
|
||||
"gitHead": "678b70cee8510a2b5217788c5db9469f49cbd439"
|
||||
"gitHead": "01c91ba294f88bd07fddf9358c4301bbb4027916"
|
||||
}
|
||||
|
||||
@@ -3,6 +3,10 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.40.4](https://github.com/certd/certd/compare/v1.40.3...v1.40.4) (2026-05-24)
|
||||
|
||||
**Note:** Version bump only for package @certd/pipeline
|
||||
|
||||
## [1.40.3](https://github.com/certd/certd/compare/v1.40.2...v1.40.3) (2026-05-21)
|
||||
|
||||
**Note:** Version bump only for package @certd/pipeline
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@certd/pipeline",
|
||||
"private": false,
|
||||
"version": "1.40.3",
|
||||
"version": "1.40.4",
|
||||
"type": "module",
|
||||
"main": "./dist/index.js",
|
||||
"module": "./dist/index.js",
|
||||
@@ -19,8 +19,8 @@
|
||||
"compile": "tsc --skipLibCheck --watch"
|
||||
},
|
||||
"dependencies": {
|
||||
"@certd/basic": "^1.40.3",
|
||||
"@certd/plus-core": "^1.40.3",
|
||||
"@certd/basic": "^1.40.4",
|
||||
"@certd/plus-core": "^1.40.4",
|
||||
"dayjs": "^1.11.7",
|
||||
"lodash-es": "^4.17.21",
|
||||
"reflect-metadata": "^0.1.13"
|
||||
@@ -49,5 +49,5 @@
|
||||
"tslib": "^2.8.1",
|
||||
"typescript": "^5.4.2"
|
||||
},
|
||||
"gitHead": "678b70cee8510a2b5217788c5db9469f49cbd439"
|
||||
"gitHead": "01c91ba294f88bd07fddf9358c4301bbb4027916"
|
||||
}
|
||||
|
||||
@@ -3,6 +3,10 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.40.4](https://github.com/certd/certd/compare/v1.40.3...v1.40.4) (2026-05-24)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-huawei
|
||||
|
||||
## [1.40.3](https://github.com/certd/certd/compare/v1.40.2...v1.40.3) (2026-05-21)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-huawei
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@certd/lib-huawei",
|
||||
"private": false,
|
||||
"version": "1.40.3",
|
||||
"version": "1.40.4",
|
||||
"main": "./dist/bundle.js",
|
||||
"module": "./dist/bundle.js",
|
||||
"types": "./dist/d/index.d.ts",
|
||||
@@ -27,5 +27,5 @@
|
||||
"prettier": "^2.8.8",
|
||||
"tslib": "^2.8.1"
|
||||
},
|
||||
"gitHead": "678b70cee8510a2b5217788c5db9469f49cbd439"
|
||||
"gitHead": "01c91ba294f88bd07fddf9358c4301bbb4027916"
|
||||
}
|
||||
|
||||
@@ -3,6 +3,10 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.40.4](https://github.com/certd/certd/compare/v1.40.3...v1.40.4) (2026-05-24)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-iframe
|
||||
|
||||
## [1.40.3](https://github.com/certd/certd/compare/v1.40.2...v1.40.3) (2026-05-21)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-iframe
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@certd/lib-iframe",
|
||||
"private": false,
|
||||
"version": "1.40.3",
|
||||
"version": "1.40.4",
|
||||
"type": "module",
|
||||
"main": "./dist/index.js",
|
||||
"module": "./dist/index.js",
|
||||
@@ -34,5 +34,5 @@
|
||||
"tslib": "^2.8.1",
|
||||
"typescript": "^5.4.2"
|
||||
},
|
||||
"gitHead": "678b70cee8510a2b5217788c5db9469f49cbd439"
|
||||
"gitHead": "01c91ba294f88bd07fddf9358c4301bbb4027916"
|
||||
}
|
||||
|
||||
@@ -3,6 +3,10 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.40.4](https://github.com/certd/certd/compare/v1.40.3...v1.40.4) (2026-05-24)
|
||||
|
||||
**Note:** Version bump only for package @certd/jdcloud
|
||||
|
||||
## [1.40.3](https://github.com/certd/certd/compare/v1.40.2...v1.40.3) (2026-05-21)
|
||||
|
||||
**Note:** Version bump only for package @certd/jdcloud
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@certd/jdcloud",
|
||||
"version": "1.40.3",
|
||||
"version": "1.40.4",
|
||||
"description": "jdcloud openApi sdk",
|
||||
"main": "./dist/bundle.js",
|
||||
"module": "./dist/bundle.js",
|
||||
@@ -59,5 +59,5 @@
|
||||
"fetch"
|
||||
]
|
||||
},
|
||||
"gitHead": "678b70cee8510a2b5217788c5db9469f49cbd439"
|
||||
"gitHead": "01c91ba294f88bd07fddf9358c4301bbb4027916"
|
||||
}
|
||||
|
||||
@@ -3,6 +3,10 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.40.4](https://github.com/certd/certd/compare/v1.40.3...v1.40.4) (2026-05-24)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-k8s
|
||||
|
||||
## [1.40.3](https://github.com/certd/certd/compare/v1.40.2...v1.40.3) (2026-05-21)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-k8s
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@certd/lib-k8s",
|
||||
"private": false,
|
||||
"version": "1.40.3",
|
||||
"version": "1.40.4",
|
||||
"type": "module",
|
||||
"main": "./dist/index.js",
|
||||
"module": "./dist/index.js",
|
||||
@@ -19,7 +19,7 @@
|
||||
"compile": "tsc --skipLibCheck --watch"
|
||||
},
|
||||
"dependencies": {
|
||||
"@certd/basic": "^1.40.3",
|
||||
"@certd/basic": "^1.40.4",
|
||||
"@kubernetes/client-node": "0.21.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
@@ -36,5 +36,5 @@
|
||||
"tslib": "^2.8.1",
|
||||
"typescript": "^5.4.2"
|
||||
},
|
||||
"gitHead": "678b70cee8510a2b5217788c5db9469f49cbd439"
|
||||
"gitHead": "01c91ba294f88bd07fddf9358c4301bbb4027916"
|
||||
}
|
||||
|
||||
@@ -3,6 +3,12 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.40.4](https://github.com/certd/certd/compare/v1.40.3...v1.40.4) (2026-05-24)
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* 商业版套餐只支持设置为可叠加 ([5e72f75](https://github.com/certd/certd/commit/5e72f75395fb632a30e80c07d35d8ba40ef631fa))
|
||||
|
||||
## [1.40.3](https://github.com/certd/certd/compare/v1.40.2...v1.40.3) (2026-05-21)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-server
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@certd/lib-server",
|
||||
"version": "1.40.3",
|
||||
"version": "1.40.4",
|
||||
"description": "midway with flyway, sql upgrade way ",
|
||||
"private": false,
|
||||
"type": "module",
|
||||
@@ -29,11 +29,11 @@
|
||||
],
|
||||
"license": "AGPL",
|
||||
"dependencies": {
|
||||
"@certd/acme-client": "^1.40.3",
|
||||
"@certd/basic": "^1.40.3",
|
||||
"@certd/pipeline": "^1.40.3",
|
||||
"@certd/plugin-lib": "^1.40.3",
|
||||
"@certd/plus-core": "^1.40.3",
|
||||
"@certd/acme-client": "^1.40.4",
|
||||
"@certd/basic": "^1.40.4",
|
||||
"@certd/pipeline": "^1.40.4",
|
||||
"@certd/plugin-lib": "^1.40.4",
|
||||
"@certd/plus-core": "^1.40.4",
|
||||
"@midwayjs/cache": "3.14.0",
|
||||
"@midwayjs/core": "3.20.11",
|
||||
"@midwayjs/i18n": "3.20.13",
|
||||
@@ -69,5 +69,5 @@
|
||||
"typeorm": "^0.3.11",
|
||||
"typescript": "^5.4.2"
|
||||
},
|
||||
"gitHead": "678b70cee8510a2b5217788c5db9469f49cbd439"
|
||||
"gitHead": "01c91ba294f88bd07fddf9358c4301bbb4027916"
|
||||
}
|
||||
|
||||
@@ -245,6 +245,8 @@ export class SysSuiteSetting extends BaseSettings {
|
||||
|
||||
enabled: boolean = false;
|
||||
|
||||
allowSuiteStack: boolean = false;
|
||||
|
||||
registerGift?: {
|
||||
productId: number;
|
||||
duration: number;
|
||||
|
||||
@@ -3,6 +3,10 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.40.4](https://github.com/certd/certd/compare/v1.40.3...v1.40.4) (2026-05-24)
|
||||
|
||||
**Note:** Version bump only for package @certd/midway-flyway-js
|
||||
|
||||
## [1.40.3](https://github.com/certd/certd/compare/v1.40.2...v1.40.3) (2026-05-21)
|
||||
|
||||
**Note:** Version bump only for package @certd/midway-flyway-js
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@certd/midway-flyway-js",
|
||||
"version": "1.40.3",
|
||||
"version": "1.40.4",
|
||||
"description": "midway with flyway, sql upgrade way ",
|
||||
"private": false,
|
||||
"type": "module",
|
||||
@@ -49,5 +49,5 @@
|
||||
"typeorm": "^0.3.11",
|
||||
"typescript": "^5.4.2"
|
||||
},
|
||||
"gitHead": "678b70cee8510a2b5217788c5db9469f49cbd439"
|
||||
"gitHead": "01c91ba294f88bd07fddf9358c4301bbb4027916"
|
||||
}
|
||||
|
||||
@@ -3,6 +3,10 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.40.4](https://github.com/certd/certd/compare/v1.40.3...v1.40.4) (2026-05-24)
|
||||
|
||||
**Note:** Version bump only for package @certd/plugin-cert
|
||||
|
||||
## [1.40.3](https://github.com/certd/certd/compare/v1.40.2...v1.40.3) (2026-05-21)
|
||||
|
||||
**Note:** Version bump only for package @certd/plugin-cert
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@certd/plugin-cert",
|
||||
"private": false,
|
||||
"version": "1.40.3",
|
||||
"version": "1.40.4",
|
||||
"type": "module",
|
||||
"main": "./dist/index.js",
|
||||
"types": "./dist/index.d.ts",
|
||||
@@ -18,10 +18,10 @@
|
||||
"compile": "tsc --skipLibCheck --watch"
|
||||
},
|
||||
"dependencies": {
|
||||
"@certd/acme-client": "^1.40.3",
|
||||
"@certd/basic": "^1.40.3",
|
||||
"@certd/pipeline": "^1.40.3",
|
||||
"@certd/plugin-lib": "^1.40.3",
|
||||
"@certd/acme-client": "^1.40.4",
|
||||
"@certd/basic": "^1.40.4",
|
||||
"@certd/pipeline": "^1.40.4",
|
||||
"@certd/plugin-lib": "^1.40.4",
|
||||
"psl": "^1.9.0",
|
||||
"punycode.js": "^2.3.1"
|
||||
},
|
||||
@@ -41,5 +41,5 @@
|
||||
"tslib": "^2.8.1",
|
||||
"typescript": "^5.4.2"
|
||||
},
|
||||
"gitHead": "678b70cee8510a2b5217788c5db9469f49cbd439"
|
||||
"gitHead": "01c91ba294f88bd07fddf9358c4301bbb4027916"
|
||||
}
|
||||
|
||||
@@ -3,6 +3,12 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.40.4](https://github.com/certd/certd/compare/v1.40.3...v1.40.4) (2026-05-24)
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* 新增阿里云直播证书部署插件 ([8edb6f8](https://github.com/certd/certd/commit/8edb6f8727bd148f106801bef25567880fd35e9e))
|
||||
|
||||
## [1.40.3](https://github.com/certd/certd/compare/v1.40.2...v1.40.3) (2026-05-21)
|
||||
|
||||
**Note:** Version bump only for package @certd/plugin-lib
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@certd/plugin-lib",
|
||||
"private": false,
|
||||
"version": "1.40.3",
|
||||
"version": "1.40.4",
|
||||
"type": "module",
|
||||
"main": "./dist/index.js",
|
||||
"types": "./dist/index.d.ts",
|
||||
@@ -23,10 +23,10 @@
|
||||
"@alicloud/pop-core": "^1.7.10",
|
||||
"@alicloud/tea-util": "^1.4.11",
|
||||
"@aws-sdk/client-s3": "^3.964.0",
|
||||
"@certd/acme-client": "^1.40.3",
|
||||
"@certd/basic": "^1.40.3",
|
||||
"@certd/pipeline": "^1.40.3",
|
||||
"@certd/plus-core": "^1.40.3",
|
||||
"@certd/acme-client": "^1.40.4",
|
||||
"@certd/basic": "^1.40.4",
|
||||
"@certd/pipeline": "^1.40.4",
|
||||
"@certd/plus-core": "^1.40.4",
|
||||
"@kubernetes/client-node": "0.21.0",
|
||||
"ali-oss": "^6.22.0",
|
||||
"basic-ftp": "^5.0.5",
|
||||
@@ -61,5 +61,5 @@
|
||||
"tslib": "^2.8.1",
|
||||
"typescript": "^5.4.2"
|
||||
},
|
||||
"gitHead": "678b70cee8510a2b5217788c5db9469f49cbd439"
|
||||
"gitHead": "01c91ba294f88bd07fddf9358c4301bbb4027916"
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@ export interface ICertInfoGetter {
|
||||
export type CertInfo = {
|
||||
crt: string; //fullchain证书
|
||||
key: string; //私钥
|
||||
csr: string; //csr
|
||||
csr?: string; //csr
|
||||
oc?: string; //仅证书,非fullchain证书
|
||||
ic?: string; //中间证书
|
||||
pfx?: string;
|
||||
|
||||
@@ -3,6 +3,12 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.40.4](https://github.com/certd/certd/compare/v1.40.3...v1.40.4) (2026-05-24)
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* 商业版套餐只支持设置为可叠加 ([5e72f75](https://github.com/certd/certd/commit/5e72f75395fb632a30e80c07d35d8ba40ef631fa))
|
||||
|
||||
## [1.40.3](https://github.com/certd/certd/compare/v1.40.2...v1.40.3) (2026-05-21)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@certd/ui-client",
|
||||
"version": "1.40.3",
|
||||
"version": "1.40.4",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "vite --open",
|
||||
@@ -106,8 +106,8 @@
|
||||
"zod-defaults": "^0.1.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@certd/lib-iframe": "^1.40.3",
|
||||
"@certd/pipeline": "^1.40.3",
|
||||
"@certd/lib-iframe": "^1.40.4",
|
||||
"@certd/pipeline": "^1.40.4",
|
||||
"@rollup/plugin-commonjs": "^25.0.7",
|
||||
"@rollup/plugin-node-resolve": "^15.2.3",
|
||||
"@types/chai": "^4.3.12",
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
<a-col :span="24">
|
||||
<a-card>
|
||||
<div class="suite-intro-box">
|
||||
<div>说明:① 同一时间只有最新购买的一个套餐生效;② 可以购买多个加量包,加量包立即生效;③ 套餐和加量包内的数量可以叠加</div>
|
||||
<div>{{ buyHelperText }}</div>
|
||||
<div v-if="suiteIntro" v-html="suiteIntro"></div>
|
||||
</div>
|
||||
</a-card>
|
||||
@@ -31,7 +31,7 @@
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { ref } from "vue";
|
||||
import { computed, ref } from "vue";
|
||||
import * as api from "./api";
|
||||
import ProductInfo from "/@/views/certd/suite/product-info.vue";
|
||||
import OrderModal from "/@/views/certd/suite/order-modal.vue";
|
||||
@@ -55,9 +55,17 @@ async function doOrder(req: any) {
|
||||
}
|
||||
|
||||
const suiteIntro = ref("");
|
||||
const allowSuiteStack = ref(false);
|
||||
const buyHelperText = computed(() => {
|
||||
if (allowSuiteStack.value) {
|
||||
return "说明:可以购买多个套餐和加量包,套餐和加量包内的数量可以叠加";
|
||||
}
|
||||
return "说明:① 同一时间只有最新购买的一个套餐生效;② 可以购买多个加量包,加量包立即生效;③ 套餐和加量包内的数量可以叠加";
|
||||
});
|
||||
async function loadSuiteIntro() {
|
||||
const res = await api.GetSuiteSetting();
|
||||
suiteIntro.value = res.intro;
|
||||
allowSuiteStack.value = !!res.allowSuiteStack;
|
||||
}
|
||||
loadSuiteIntro();
|
||||
</script>
|
||||
|
||||
@@ -4,8 +4,14 @@
|
||||
<a-popover>
|
||||
<template #content>
|
||||
<div style="width: 300px">
|
||||
<div v-if="detail.addonList.length > 0" class="flex flex-wrap">
|
||||
<a-tag v-for="(item, index) of detail.addonList" :key="index" color="green" class="pointer flex-o m-1">
|
||||
<div v-if="hiddenSuiteList.length > 0 || detail.addonList.length > 0" class="flex flex-wrap">
|
||||
<a-tag v-for="(item, index) of hiddenSuiteList" :key="`suite-${index}`" color="green" class="pointer flex-o m-1">
|
||||
<span class="mr-5">
|
||||
{{ item.title }}
|
||||
</span>
|
||||
<span>(<expires-time-text :value="item.expiresTime" />)</span>
|
||||
</a-tag>
|
||||
<a-tag v-for="(item, index) of detail.addonList" :key="`addon-${index}`" color="green" class="pointer flex-o m-1">
|
||||
<span class="mr-5">
|
||||
{{ item.title }}
|
||||
</span>
|
||||
@@ -43,13 +49,13 @@
|
||||
</template>
|
||||
<div class="flex-o">
|
||||
<fs-icon icon="ant-design:gift-outlined" class="color-green mr-5" />
|
||||
<a-tag v-for="(item, index) of detail.suiteList" :key="index" color="green" class="pointer flex-o">
|
||||
<a-tag v-if="currentSuite" color="green" class="pointer flex-o">
|
||||
<span class="mr-5">
|
||||
{{ item.title }}
|
||||
{{ currentSuite.title }}
|
||||
</span>
|
||||
<span>(<expires-time-text :value="item.expiresTime" />)</span>
|
||||
<span>(<expires-time-text :value="currentSuite.expiresTime" />)</span>
|
||||
<span v-if="hiddenCount > 0" class="ml-5">+{{ hiddenCount }}</span>
|
||||
</a-tag>
|
||||
<a-tag v-if="detail.addonList.length > 0" color="green" class="pointer flex-o">加量包+{{ detail.addonList.length }}</a-tag>
|
||||
<div v-if="detail.suites?.length === 0" class="flex-o ml-5">暂无套餐 <a-button class="ml-5" type="primary" size="small" @click="goBuy">去购买</a-button></div>
|
||||
</div>
|
||||
</a-popover>
|
||||
@@ -59,7 +65,7 @@
|
||||
|
||||
<script lang="ts" setup>
|
||||
import SuiteValue from "/@/views/sys/suite/product/suite-value.vue";
|
||||
import { ref } from "vue";
|
||||
import { computed, ref } from "vue";
|
||||
import ExpiresTimeText from "/@/components/expires-time-text.vue";
|
||||
import { mySuiteApi, SuiteDetail } from "/@/views/certd/suite/mine/api";
|
||||
import { FsIcon } from "@fast-crud/fast-crud";
|
||||
@@ -71,6 +77,10 @@ defineOptions({
|
||||
|
||||
const detail = ref<SuiteDetail>({});
|
||||
|
||||
const currentSuite = computed(() => detail.value.suiteList?.[0]);
|
||||
const hiddenSuiteList = computed(() => detail.value.suiteList?.slice(1) || []);
|
||||
const hiddenCount = computed(() => hiddenSuiteList.value.length + (detail.value.addonList?.length || 0));
|
||||
|
||||
async function loadSuiteDetail() {
|
||||
detail.value = await mySuiteApi.SuiteDetailGet();
|
||||
const suites = detail.value.suites.filter(item => item.productType === "suite");
|
||||
|
||||
@@ -21,6 +21,11 @@
|
||||
<div class="helper">不建议设置免费套餐,可以在下方配置注册赠送套餐,或者在用户套餐管理中手动赠送套餐</div>
|
||||
</a-form-item>
|
||||
|
||||
<a-form-item label="套餐支持叠加" name="allowSuiteStack">
|
||||
<a-switch v-model:checked="formState.allowSuiteStack" />
|
||||
<div class="helper">默认只有一个套餐生效。开启此开关,可以让多个套餐可以叠加;加量包无论是否开启此开关都可以叠加。</div>
|
||||
</a-form-item>
|
||||
|
||||
<a-form-item label="注册赠送套餐" name="registerGift">
|
||||
<suite-duration-selector ref="suiteDurationSelectedRef" v-model="formState.registerGift"></suite-duration-selector>
|
||||
<div class="helper">添加套餐后再选择</div>
|
||||
@@ -73,6 +78,7 @@ const formRef = ref<any>(null);
|
||||
const formState = reactive<
|
||||
Partial<{
|
||||
enabled: boolean;
|
||||
allowSuiteStack: boolean;
|
||||
registerGift?: {
|
||||
productId?: number;
|
||||
duration?: number;
|
||||
|
||||
@@ -3,6 +3,16 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.40.4](https://github.com/certd/certd/compare/v1.40.3...v1.40.4) (2026-05-24)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **pipeline-service:** 修复流水线运行时超过套餐部署次数仍然能够正常运行的bug ([5e59651](https://github.com/certd/certd/commit/5e59651d45bc91919629e35995ff1b3cff6b87ea))
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* 新增阿里云直播证书部署插件 ([8edb6f8](https://github.com/certd/certd/commit/8edb6f8727bd148f106801bef25567880fd35e9e))
|
||||
|
||||
## [1.40.3](https://github.com/certd/certd/compare/v1.40.2...v1.40.3) (2026-05-21)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
@@ -0,0 +1,96 @@
|
||||
showRunStrategy: false
|
||||
default:
|
||||
strategy:
|
||||
runStrategy: 1
|
||||
name: DeployCertToAliyunLive
|
||||
title: 阿里云-部署至直播(Live)
|
||||
icon: svg:icon-aliyun
|
||||
group: aliyun
|
||||
desc: 部署证书到阿里云视频直播(Live)域名
|
||||
needPlus: false
|
||||
input:
|
||||
cert:
|
||||
title: 域名证书
|
||||
helper: 请选择前置任务输出的域名证书
|
||||
component:
|
||||
name: output-selector
|
||||
from:
|
||||
- ':cert:'
|
||||
- uploadCertToAliyun
|
||||
template: false
|
||||
required: true
|
||||
order: 0
|
||||
certDomains:
|
||||
title: 当前证书域名
|
||||
component:
|
||||
name: cert-domains-getter
|
||||
mergeScript: |2-
|
||||
|
||||
return {
|
||||
component:{
|
||||
inputKey: ctx.compute(({form})=>{
|
||||
return form.cert
|
||||
}),
|
||||
}
|
||||
}
|
||||
|
||||
template: false
|
||||
required: false
|
||||
order: 0
|
||||
accessId:
|
||||
title: Access授权
|
||||
helper: 阿里云授权AccessKeyId、AccessKeySecret
|
||||
component:
|
||||
name: access-selector
|
||||
type: aliyun
|
||||
required: true
|
||||
order: 0
|
||||
endpoint:
|
||||
title: 证书服务接入点
|
||||
helper: 不会选就按默认
|
||||
value: cas.aliyuncs.com
|
||||
component:
|
||||
name: a-select
|
||||
options:
|
||||
- value: cas.aliyuncs.com
|
||||
label: 中国大陆
|
||||
- value: cas.ap-southeast-1.aliyuncs.com
|
||||
label: 新加坡
|
||||
- value: cas.eu-central-1.aliyuncs.com
|
||||
label: 德国(法兰克福)
|
||||
required: true
|
||||
order: 0
|
||||
domainList:
|
||||
title: 直播域名
|
||||
component:
|
||||
name: remote-select
|
||||
vModel: value
|
||||
mode: tags
|
||||
type: plugin
|
||||
typeName: DeployCertToAliyunLive
|
||||
action: onGetDomainList
|
||||
search: true
|
||||
pager: true
|
||||
multi: true
|
||||
watches:
|
||||
- certDomains
|
||||
- accessId
|
||||
- certDomains
|
||||
- accessId
|
||||
required: true
|
||||
mergeScript: |2-
|
||||
|
||||
return {
|
||||
component:{
|
||||
form: ctx.compute(({form})=>{
|
||||
return form
|
||||
})
|
||||
},
|
||||
}
|
||||
|
||||
helper: 请选择要部署证书的直播域名
|
||||
order: 0
|
||||
output: {}
|
||||
pluginType: deploy
|
||||
type: builtIn
|
||||
scriptFilePath: /plugins/plugin-aliyun/plugin/deploy-to-live/index.js
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@certd/ui-server",
|
||||
"version": "1.40.3",
|
||||
"version": "1.40.4",
|
||||
"description": "fast-server base midway",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
@@ -53,20 +53,20 @@
|
||||
"@aws-sdk/client-sts": "^3.990.0",
|
||||
"@azure/arm-dns": "^5.1.0",
|
||||
"@azure/identity": "^4.13.1",
|
||||
"@certd/acme-client": "^1.40.3",
|
||||
"@certd/basic": "^1.40.3",
|
||||
"@certd/commercial-core": "^1.40.3",
|
||||
"@certd/acme-client": "^1.40.4",
|
||||
"@certd/basic": "^1.40.4",
|
||||
"@certd/commercial-core": "^1.40.4",
|
||||
"@certd/cv4pve-api-javascript": "^8.4.2",
|
||||
"@certd/jdcloud": "^1.40.3",
|
||||
"@certd/lib-huawei": "^1.40.3",
|
||||
"@certd/lib-k8s": "^1.40.3",
|
||||
"@certd/lib-server": "^1.40.3",
|
||||
"@certd/midway-flyway-js": "^1.40.3",
|
||||
"@certd/pipeline": "^1.40.3",
|
||||
"@certd/plugin-cert": "^1.40.3",
|
||||
"@certd/plugin-lib": "^1.40.3",
|
||||
"@certd/plugin-plus": "^1.40.3",
|
||||
"@certd/plus-core": "^1.40.3",
|
||||
"@certd/jdcloud": "^1.40.4",
|
||||
"@certd/lib-huawei": "^1.40.4",
|
||||
"@certd/lib-k8s": "^1.40.4",
|
||||
"@certd/lib-server": "^1.40.4",
|
||||
"@certd/midway-flyway-js": "^1.40.4",
|
||||
"@certd/pipeline": "^1.40.4",
|
||||
"@certd/plugin-cert": "^1.40.4",
|
||||
"@certd/plugin-lib": "^1.40.4",
|
||||
"@certd/plugin-plus": "^1.40.4",
|
||||
"@certd/plus-core": "^1.40.4",
|
||||
"@google-cloud/dns": "^5.3.1",
|
||||
"@google-cloud/publicca": "^1.3.0",
|
||||
"@huaweicloud/huaweicloud-sdk-cdn": "3.1.185",
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
import assert from "assert";
|
||||
import { PipelineEntity } from "../entity/pipeline.js";
|
||||
import { PipelineService } from "./pipeline-service.js";
|
||||
|
||||
describe("PipelineService", () => {
|
||||
it("does not start a pipeline run when beforeCheck fails", async () => {
|
||||
const service = new PipelineService();
|
||||
let historyStarted = false;
|
||||
|
||||
service.beforeCheck = async () => {
|
||||
throw new Error("部署次数不足");
|
||||
};
|
||||
service.userService = {
|
||||
async isAdmin() {
|
||||
return false;
|
||||
},
|
||||
} as any;
|
||||
service.historyService = {
|
||||
async start() {
|
||||
historyStarted = true;
|
||||
throw new Error("history should not start");
|
||||
},
|
||||
} as any;
|
||||
|
||||
const entity = new PipelineEntity();
|
||||
entity.id = 1;
|
||||
entity.userId = 1;
|
||||
entity.projectId = 0;
|
||||
entity.content = JSON.stringify({
|
||||
stages: [{ id: "stage1", tasks: [] }],
|
||||
triggers: [],
|
||||
});
|
||||
|
||||
await service.doRun(entity, null, "ALL");
|
||||
|
||||
assert.equal(historyStarted, false);
|
||||
});
|
||||
});
|
||||
@@ -659,6 +659,7 @@ export class PipelineService extends BaseService<PipelineEntity> {
|
||||
suite = res.suite
|
||||
} catch (e) {
|
||||
logger.error(`流水线${entity.id}触发失败(${triggerId}):${e.message}`);
|
||||
return;
|
||||
}
|
||||
|
||||
const id = entity.id;
|
||||
|
||||
@@ -0,0 +1,159 @@
|
||||
import { AbstractTaskPlugin, IsTaskPlugin, PageSearch, pluginGroups, RunStrategy, TaskInput } from '@certd/pipeline';
|
||||
import { CertApplyPluginNames } from '@certd/plugin-cert';
|
||||
import { CertInfo, createCertDomainGetterInputDefine, createRemoteSelectInputDefine } from '@certd/plugin-lib';
|
||||
import { AliyunAccess } from '../../../plugin-lib/aliyun/access/index.js';
|
||||
import { AliyunSslClient, CasCertId } from '../../../plugin-lib/aliyun/lib/index.js';
|
||||
|
||||
@IsTaskPlugin({
|
||||
name: 'DeployCertToAliyunLive',
|
||||
title: '阿里云-部署至直播(Live)',
|
||||
icon: 'svg:icon-aliyun',
|
||||
group: pluginGroups.aliyun.key,
|
||||
desc: '部署证书到阿里云视频直播(Live)域名',
|
||||
needPlus: false,
|
||||
default: {
|
||||
strategy: {
|
||||
runStrategy: RunStrategy.SkipWhenSucceed,
|
||||
},
|
||||
},
|
||||
})
|
||||
export class DeployCertToAliyunLive extends AbstractTaskPlugin {
|
||||
|
||||
|
||||
@TaskInput({
|
||||
title: '域名证书',
|
||||
helper: '请选择前置任务输出的域名证书',
|
||||
component: {
|
||||
name: 'output-selector',
|
||||
from: [...CertApplyPluginNames, 'uploadCertToAliyun'],
|
||||
},
|
||||
template: false,
|
||||
required: true,
|
||||
})
|
||||
cert!: CertInfo | CasCertId;
|
||||
|
||||
@TaskInput(createCertDomainGetterInputDefine({ props: { required: false } }))
|
||||
certDomains!: string[];
|
||||
|
||||
|
||||
@TaskInput({
|
||||
title: 'Access授权',
|
||||
helper: '阿里云授权AccessKeyId、AccessKeySecret',
|
||||
component: {
|
||||
name: 'access-selector',
|
||||
type: 'aliyun',
|
||||
},
|
||||
required: true,
|
||||
})
|
||||
accessId!: string;
|
||||
|
||||
@TaskInput({
|
||||
title: '证书服务接入点',
|
||||
helper: '不会选就按默认',
|
||||
value: 'cas.aliyuncs.com',
|
||||
component: {
|
||||
name: 'a-select',
|
||||
options: [
|
||||
{ value: 'cas.aliyuncs.com', label: '中国大陆' },
|
||||
{ value: 'cas.ap-southeast-1.aliyuncs.com', label: '新加坡' },
|
||||
{ value: 'cas.eu-central-1.aliyuncs.com', label: '德国(法兰克福)' },
|
||||
],
|
||||
},
|
||||
required: true,
|
||||
})
|
||||
endpoint!: string;
|
||||
|
||||
@TaskInput(
|
||||
createRemoteSelectInputDefine({
|
||||
title: '直播域名',
|
||||
helper: '请选择要部署证书的直播域名',
|
||||
typeName: 'DeployCertToAliyunLive',
|
||||
action: DeployCertToAliyunLive.prototype.onGetDomainList.name,
|
||||
watches: ['certDomains', 'accessId'],
|
||||
pager: true,
|
||||
search: true,
|
||||
})
|
||||
)
|
||||
domainList!: string[];
|
||||
|
||||
async onInstance() {}
|
||||
|
||||
async execute(): Promise<void> {
|
||||
this.logger.info('开始部署证书到阿里云直播');
|
||||
const access = await this.getAccess<AliyunAccess>(this.accessId);
|
||||
|
||||
if (this.cert == null) {
|
||||
throw new Error('域名证书参数为空,请检查前置任务');
|
||||
}
|
||||
|
||||
const client = await this.getClient(access);
|
||||
const sslClient = new AliyunSslClient({
|
||||
access,
|
||||
logger: this.logger,
|
||||
endpoint: this.endpoint || 'cas.aliyuncs.com',
|
||||
});
|
||||
|
||||
// 确保证书已上传到 CAS,统一使用 cas 方式部署
|
||||
const casCert = await sslClient.uploadCertOrGet(this.cert);
|
||||
// const certName = this.appendTimeSuffix(this.certName || casCert.certName);
|
||||
for (const domain of this.domainList) {
|
||||
const res = await client.doRequest({
|
||||
action: 'SetLiveDomainCertificate',
|
||||
version: '2016-11-01',
|
||||
protocol: 'HTTPS',
|
||||
data: {
|
||||
query: {
|
||||
DomainName: domain,
|
||||
CertName: casCert.certName,
|
||||
CertType: 'cas',
|
||||
SSLProtocol: 'on',
|
||||
CertId: casCert.certId,
|
||||
},
|
||||
},
|
||||
});
|
||||
this.logger.info('部署直播域名[' + domain + ']证书成功:' + JSON.stringify(res));
|
||||
}
|
||||
}
|
||||
|
||||
async getClient(access: AliyunAccess) {
|
||||
const endpoint = 'live.aliyuncs.com';
|
||||
return access.getClient(endpoint);
|
||||
}
|
||||
|
||||
async onGetDomainList(data: PageSearch) {
|
||||
if (!this.accessId) {
|
||||
throw new Error('请选择Access授权');
|
||||
}
|
||||
const access = await this.getAccess<AliyunAccess>(this.accessId);
|
||||
const client = await this.getClient(access);
|
||||
|
||||
const res = await client.doRequest({
|
||||
action: 'DescribeLiveUserDomains',
|
||||
version: '2016-11-01',
|
||||
protocol: 'HTTPS',
|
||||
data: {
|
||||
query: {
|
||||
DomainName: data.searchKey || undefined,
|
||||
PageNumber: data.pageNo || 1,
|
||||
PageSize: data.pageSize || 50,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const list = res?.Domains?.PageData;
|
||||
if (!list || list.length === 0) {
|
||||
throw new Error('没有找到直播域名,请先在阿里云添加直播域名');
|
||||
}
|
||||
|
||||
const options = list.map((item: any) => {
|
||||
return {
|
||||
label: item.DomainName,
|
||||
value: item.DomainName,
|
||||
domain: item.DomainName,
|
||||
};
|
||||
});
|
||||
return this.ctx.utils.options.buildGroupOptions(options, this.certDomains);
|
||||
}
|
||||
}
|
||||
|
||||
new DeployCertToAliyunLive();
|
||||
@@ -1,4 +1,4 @@
|
||||
export * from './deploy-to-cdn/index.js';
|
||||
export * from './deploy-to-cdn/index.js';
|
||||
export * from './deploy-to-dcdn/index.js';
|
||||
export * from './deploy-to-oss/index.js';
|
||||
export * from './upload-to-aliyun/index.js';
|
||||
@@ -10,8 +10,9 @@ export * from './deploy-to-fc/index.js';
|
||||
export * from './deploy-to-esa/index.js';
|
||||
export * from './deploy-to-ga/index.js';
|
||||
export * from './deploy-to-vod/index.js';
|
||||
export * from './deploy-to-live/index.js';
|
||||
export * from './deploy-to-apigateway/index.js';
|
||||
export * from './deploy-to-apig/index.js';
|
||||
export * from './deploy-to-ack/index.js';
|
||||
export * from './deploy-to-all/index.js';
|
||||
export * from './delete-expiring-cert/index.js';
|
||||
export * from './delete-expiring-cert/index.js';
|
||||
|
||||
@@ -38,7 +38,7 @@ export type Providers = {
|
||||
export type CertInfo = {
|
||||
crt: string; //fullchain证书
|
||||
key: string; //私钥
|
||||
csr: string; //csr
|
||||
csr?: string; //csr
|
||||
oc?: string; //仅证书,非fullchain证书
|
||||
ic?: string; //中间证书
|
||||
pfx?: string;
|
||||
|
||||
@@ -194,7 +194,7 @@ cert.jks:jks格式证书文件,java服务器使用
|
||||
return pem;
|
||||
}
|
||||
|
||||
formatCerts(cert: { crt: string; key: string; csr: string }) {
|
||||
formatCerts(cert: { crt: string; key: string; csr?: string }) {
|
||||
const newCert: CertInfo = {
|
||||
crt: this.formatCert(cert.crt),
|
||||
key: this.formatCert(cert.key),
|
||||
|
||||
@@ -0,0 +1,81 @@
|
||||
import childProcess from "child_process";
|
||||
import fs from "fs";
|
||||
import path from "path";
|
||||
|
||||
function run(command, args, options = {}) {
|
||||
const result = childProcess.spawnSync(command, args, {
|
||||
stdio: options.stdio ?? "pipe",
|
||||
shell: process.platform === "win32",
|
||||
encoding: "utf-8",
|
||||
...options,
|
||||
});
|
||||
|
||||
if (result.error) {
|
||||
throw result.error;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
function printOutput(result) {
|
||||
if (result.stdout) {
|
||||
process.stdout.write(result.stdout);
|
||||
}
|
||||
if (result.stderr) {
|
||||
process.stderr.write(result.stderr);
|
||||
}
|
||||
}
|
||||
|
||||
function isAlreadyPublishedError(result) {
|
||||
const output = `${result.stdout ?? ""}\n${result.stderr ?? ""}`;
|
||||
return output.includes("You cannot publish over the previously published versions");
|
||||
}
|
||||
|
||||
function getWorkspacePackages() {
|
||||
const result = run("pnpm", ["list", "-r", "--depth", "-1", "--json"], {
|
||||
stdio: "pipe",
|
||||
});
|
||||
|
||||
if (result.status !== 0) {
|
||||
console.error(result.stderr);
|
||||
throw new Error("获取 workspace 包列表失败");
|
||||
}
|
||||
|
||||
return JSON.parse(result.stdout);
|
||||
}
|
||||
|
||||
function hasPubScript(packagePath) {
|
||||
const packageJsonPath = path.join(packagePath, "package.json");
|
||||
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, "utf-8"));
|
||||
return Boolean(packageJson.scripts?.pub);
|
||||
}
|
||||
|
||||
const packages = getWorkspacePackages().filter(item => item.name !== "root");
|
||||
let skippedCount = 0;
|
||||
let alreadyPublishedCount = 0;
|
||||
|
||||
for (const item of packages) {
|
||||
const packagePath = item.path;
|
||||
|
||||
if (!hasPubScript(packagePath)) {
|
||||
skippedCount++;
|
||||
console.log(`[pub_all] 跳过 ${item.name},未定义 pub 脚本`);
|
||||
continue;
|
||||
}
|
||||
|
||||
console.log(`\n[pub_all] 开始发布 ${item.name}`);
|
||||
const result = run("pnpm", ["--dir", packagePath, "run", "pub"]);
|
||||
printOutput(result);
|
||||
|
||||
if (result.status === 0) {
|
||||
console.log(`[pub_all] ${item.name} 发布完成`);
|
||||
} else if (isAlreadyPublishedError(result)) {
|
||||
alreadyPublishedCount++;
|
||||
console.warn(`[pub_all] ${item.name} 当前版本已发布,继续发布其他包`);
|
||||
} else {
|
||||
console.error(`[pub_all] ${item.name} 发布失败,停止发布`);
|
||||
process.exit(result.status ?? 1);
|
||||
}
|
||||
}
|
||||
|
||||
console.log(`\n[pub_all] 发布任务完成,跳过 ${skippedCount} 个未定义 pub 脚本的包,${alreadyPublishedCount} 个包版本已存在`);
|
||||
@@ -38,8 +38,8 @@ while true; do
|
||||
done
|
||||
|
||||
|
||||
echo "安装pnpm, 前提是已经安装了nodejs"
|
||||
$SUDO_CMD npm install -g pnpm --registry https://registry.npmmirror.com
|
||||
echo "安装pnpm@10.33.4, 前提是已经安装了nodejs"
|
||||
$SUDO_CMD npm install -g pnpm@10.33.4 --registry https://registry.npmmirror.com
|
||||
echo "安装依赖"
|
||||
$SUDO_CMD pnpm install --registry https://registry.npmmirror.com
|
||||
|
||||
|
||||
@@ -1 +1 @@
|
||||
00:40
|
||||
23:26
|
||||
|
||||
@@ -1 +1 @@
|
||||
01:06
|
||||
23:48
|
||||
|
||||
Reference in New Issue
Block a user