From 15740904e5e97ee767c39e4401dbc1d645795c38 Mon Sep 17 00:00:00 2001 From: xiaojunnuo Date: Fri, 17 Jul 2026 00:58:19 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E5=A2=9E=E5=8A=A0=E7=A8=B3=E5=AE=9A?= =?UTF-8?q?=E7=89=88=EF=BC=8C=E9=A2=84=E8=A7=88=E7=89=88=E5=8C=BA=E5=88=86?= =?UTF-8?q?=EF=BC=8C=E9=A2=84=E8=A7=88=E7=89=88=E6=98=AF=E6=9C=80=E6=96=B0?= =?UTF-8?q?=E7=89=88=EF=BC=8C=E7=A8=B3=E5=AE=9A=E7=89=88=E5=9C=A8=E9=A2=84?= =?UTF-8?q?=E8=A7=88=E7=89=88=E9=AA=8C=E8=AF=81=E7=A8=B3=E5=AE=9A=E5=90=8E?= =?UTF-8?q?=EF=BC=8C=E5=86=8D=E5=B0=86=E9=A2=84=E8=A7=88=E7=89=88=E8=BD=AC?= =?UTF-8?q?=E4=B8=BA=E7=A8=B3=E5=AE=9A=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/stable-release.yml | 84 +++++++++ C | 1 - package.json | 6 +- packages/ui/Dockerfile | 3 +- .../locales/langs/en-US/certd/dashboard.ts | 2 + .../locales/langs/zh-CN/certd/dashboard.ts | 2 + .../src/store/settings/api.basic.ts | 1 + .../certd-client/src/store/settings/index.tsx | 5 + .../views/framework/home/dashboard/index.vue | 7 +- packages/ui/certd-server/.env | 3 +- .../controller/basic/app-controller.test.ts | 28 ++- .../src/controller/basic/app-controller.ts | 34 +++- .../controller/basic/settings-controller.ts | 2 + scripts/publish-atomgit.js | 22 +++ scripts/set-release-stable.js | 59 +++++++ scripts/stable.js | 160 ++++++++++++++++++ 16 files changed, 402 insertions(+), 17 deletions(-) create mode 100644 .github/workflows/stable-release.yml delete mode 100644 C create mode 100644 scripts/set-release-stable.js create mode 100644 scripts/stable.js diff --git a/.github/workflows/stable-release.yml b/.github/workflows/stable-release.yml new file mode 100644 index 000000000..c4f6d9a50 --- /dev/null +++ b/.github/workflows/stable-release.yml @@ -0,0 +1,84 @@ +name: stable-release +on: + workflow_dispatch: + inputs: + version: + description: "版本号(如 v1.42.5)" + required: true + type: string + +permissions: + contents: read + packages: write + +jobs: + make-stable: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Login to aliyun container Registry + uses: docker/login-action@v3 + with: + registry: registry.cn-shenzhen.aliyuncs.com + username: ${{ secrets.aliyun_cs_username }} + password: ${{ secrets.aliyun_cs_password }} + + - name: Login to GitHub Packages + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Login to Docker Hub + uses: docker/login-action@v3 + with: + username: ${{ secrets.dockerhub_username }} + password: ${{ secrets.dockerhub_password }} + + # stable 镜像:叠加 ENV 层 + - name: Build and push stable images + run: | + echo "FROM greper/certd:${{ inputs.version }} + ENV certd_release_mode=stable" > Dockerfile.stable + docker buildx build \ + --platform linux/amd64,linux/arm64 \ + --push \ + -f Dockerfile.stable \ + -t registry.cn-shenzhen.aliyuncs.com/handsfree/certd:stable \ + -t registry.cn-shenzhen.aliyuncs.com/handsfree/certd:${{ inputs.version }}-stable \ + -t greper/certd:stable \ + -t greper/certd:${{ inputs.version }}-stable \ + -t ghcr.io/${{ github.repository }}:stable \ + -t ghcr.io/${{ github.repository }}:${{ inputs.version }}-stable \ + . + + # slim-stable 镜像 + - name: Build and push slim-stable images + run: | + echo "FROM greper/certd:${{ inputs.version }}-slim + ENV certd_release_mode=stable" > Dockerfile.slim-stable + docker buildx build \ + --platform linux/amd64,linux/arm64 \ + --push \ + -f Dockerfile.slim-stable \ + -t registry.cn-shenzhen.aliyuncs.com/handsfree/certd:slim-stable \ + -t registry.cn-shenzhen.aliyuncs.com/handsfree/certd:${{ inputs.version }}-slim-stable \ + -t greper/certd:slim-stable \ + -t greper/certd:${{ inputs.version }}-slim-stable \ + -t ghcr.io/${{ github.repository }}:slim-stable \ + -t ghcr.io/${{ github.repository }}:${{ inputs.version }}-slim-stable \ + . + + - name: Set AtomGit release as stable + run: | + export ATOMGIT_TOKEN=${{ secrets.ATOMGIT_TOKEN }} + export VERSION=${{ inputs.version }} + npm run set-release-stable \ No newline at end of file diff --git a/C b/C deleted file mode 100644 index 5f282702b..000000000 --- a/C +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/package.json b/package.json index 28f818c71..3ea00d58d 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,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", + "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", @@ -45,7 +45,9 @@ "publish_to_atomgit": "node --experimental-json-modules ./scripts/publish-atomgit.js", "publish_to_gitee": "node --experimental-json-modules ./scripts/publish-gitee.js", "publish_to_github": "node --experimental-json-modules ./scripts/publish-github.js", - "get_version": "node --experimental-json-modules ./scripts/version.js" + "get_version": "node --experimental-json-modules ./scripts/version.js", + "stable": "node ./scripts/stable.js", + "set-release-stable": "node ./scripts/set-release-stable.js" }, "license": "AGPL-3.0", "dependencies": { diff --git a/packages/ui/Dockerfile b/packages/ui/Dockerfile index 1b72ff5e0..097151f88 100644 --- a/packages/ui/Dockerfile +++ b/packages/ui/Dockerfile @@ -1,4 +1,4 @@ -ARG base_type=alpine +ARG base_type=alpine # 根据 base_type 参数选择基础镜像系列 FROM --platform=linux/amd64 node:22-alpine AS base-amd64-alpine @@ -99,6 +99,7 @@ RUN ARCH=$(uname -m) && \ ENV TZ=Asia/Shanghai ENV NODE_ENV=production +ENV certd_release_mode=latest ENV MIDWAY_SERVER_ENV=production RUN npm install -g pnpm@10.33.4 diff --git a/packages/ui/certd-client/src/locales/langs/en-US/certd/dashboard.ts b/packages/ui/certd-client/src/locales/langs/en-US/certd/dashboard.ts index 159ded6dc..47c9253f5 100644 --- a/packages/ui/certd-client/src/locales/langs/en-US/certd/dashboard.ts +++ b/packages/ui/certd-client/src/locales/langs/en-US/certd/dashboard.ts @@ -25,5 +25,7 @@ export default { expiringCerts: "Soon-to-Expire Certificates", supportedTasks: "Overview of Supported Deployment Tasks", changeLog: "Change Log", + stableRelease: "Stable", + latestRelease: "Preview", }, }; diff --git a/packages/ui/certd-client/src/locales/langs/zh-CN/certd/dashboard.ts b/packages/ui/certd-client/src/locales/langs/zh-CN/certd/dashboard.ts index 3217e83a8..a04f8c4bb 100644 --- a/packages/ui/certd-client/src/locales/langs/zh-CN/certd/dashboard.ts +++ b/packages/ui/certd-client/src/locales/langs/zh-CN/certd/dashboard.ts @@ -26,5 +26,7 @@ export default { expiringCerts: "最快到期证书", supportedTasks: "已支持的部署任务总览", changeLog: "更新日志", + stableRelease: "稳定版", + latestRelease: "预览版", }, }; diff --git a/packages/ui/certd-client/src/store/settings/api.basic.ts b/packages/ui/certd-client/src/store/settings/api.basic.ts index ffc5d2057..7b3d4b30e 100644 --- a/packages/ui/certd-client/src/store/settings/api.basic.ts +++ b/packages/ui/certd-client/src/store/settings/api.basic.ts @@ -11,6 +11,7 @@ export type AppInfo = { version?: string; time?: number; deltaTime?: number; + releaseMode?: string; }; export type SiteInfo = { title?: string; diff --git a/packages/ui/certd-client/src/store/settings/index.tsx b/packages/ui/certd-client/src/store/settings/index.tsx index 7f97acc64..36beab4a9 100644 --- a/packages/ui/certd-client/src/store/settings/index.tsx +++ b/packages/ui/certd-client/src/store/settings/index.tsx @@ -35,6 +35,7 @@ export interface SettingState { version?: string; time?: number; deltaTime?: number; + releaseMode?: string; }; productInfo: { notice?: string; @@ -109,6 +110,7 @@ export const useSettingStore = defineStore({ version: "", time: 0, deltaTime: 0, + releaseMode: "latest", }, productInfo: { notice: "", @@ -229,6 +231,9 @@ export const useSettingStore = defineStore({ this.app.time = appInfo.time; this.app.version = appInfo.version; this.app.deltaTime = new Date().getTime() - this.app.time; + if (appInfo.releaseMode) { + this.app.releaseMode = appInfo.releaseMode; + } }, initSiteInfo(siteInfo: SiteInfo) { //@ts-ignore diff --git a/packages/ui/certd-client/src/views/framework/home/dashboard/index.vue b/packages/ui/certd-client/src/views/framework/home/dashboard/index.vue index c815434ff..9b1de4ec0 100644 --- a/packages/ui/certd-client/src/views/framework/home/dashboard/index.vue +++ b/packages/ui/certd-client/src/views/framework/home/dashboard/index.vue @@ -1,4 +1,4 @@ -