From d581a49a90bd81d19a71dd0791c2eb1db23c2e21 Mon Sep 17 00:00:00 2001 From: Gloridust Date: Sun, 31 May 2026 12:50:07 +0800 Subject: [PATCH] update svg --- README.md | 38 ++++++++++++++++++++++++++++++-- panel/web/public/favicon.svg | 5 ++--- panel/web/public/icon-180.png | Bin 2872 -> 2795 bytes panel/web/public/icon-192.png | Bin 3091 -> 2911 bytes panel/web/public/icon-512.png | Bin 8739 -> 8103 bytes panel/web/scripts/gen-icons.mjs | 12 +++++----- 6 files changed, 43 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 0b99621..c80993b 100644 --- a/README.md +++ b/README.md @@ -118,7 +118,7 @@ docker volume ls | grep woc # 看所有微信实例的数据卷 **方式 A · 本地自构建(官方尚未发布镜像时用这个)** ```bash -git clone WechatOnCloud +git clone https://github.com/Gloridust/WechatOnCloud.git WechatOnCloud cd WechatOnCloud cp .env.example .env # 至少改掉默认密码 WOC_PASSWORD ./scripts/build-local.sh # 构建面板 + 微信实例镜像,打成 compose 用的同名标签 @@ -128,7 +128,7 @@ docker compose up -d # compose 默认优先用本地镜像,不会 **方式 B · 拉取官方镜像(已发布到 GHCR 后)** ```bash -git clone WechatOnCloud +git clone https://github.com/Gloridust/WechatOnCloud.git WechatOnCloud cd WechatOnCloud cp .env.example .env # 至少改掉默认密码 WOC_PASSWORD docker compose up -d # 直接从 GHCR 拉取 @@ -182,13 +182,47 @@ docker compose up -d # 直接从 GHCR 拉取 ## 发布到 GHCR +两种方式任选其一。 + +### 方式 A · GitHub Actions(推荐) + 仓库自带 GitHub Actions([.github/workflows/release.yml](.github/workflows/release.yml)),在你**推送 `vX.Y.Z` 标签或发布 Release** 时,自动构建多架构(amd64+arm64)镜像并推到 GHCR: ```bash git tag v1.0.0 git push origin v1.0.0 # 触发 Actions,产出 ghcr.io//woc-panel:1.0.0 等标签 +# 或在 GitHub 上 Publish 一个 Release(会额外打 latest): +gh release create v1.0.0 --title v1.0.0 --notes "..." ``` +> 注意:单纯 push tag 只产出 `X.Y.Z / X.Y / X`,**不会更新 `latest`**;要更新 `latest` 请改用 **发布 Release** 或在 Actions 里手动 `workflow_dispatch`。 + +### 方式 B · 本机 buildx 手动构建并推送(不走 Actions) + +适合想立刻出包、或不依赖 CI 的场景。需要 Docker Buildx(Docker Desktop 自带;纯 Linux 跨架构需先装 QEMU:`docker run --privileged --rm tonistiigi/binfmt --install all`)。 + +```bash +# 1) 登录 GHCR(PAT 需 write:packages 权限) +echo | docker login ghcr.io -u --password-stdin + +# 2) 首次创建并启用多架构构建器(已建过改用 docker buildx use woc) +docker buildx create --name woc --use + +# 3) 构建并推送两个镜像(amd64 + arm64)。VER 与 git tag 保持一致(不带 v) +VER=1.0.1 +docker buildx build --platform linux/amd64,linux/arm64 \ + -t ghcr.io/gloridust/woc-panel:$VER -t ghcr.io/gloridust/woc-panel:latest \ + --push ./panel +docker buildx build --platform linux/amd64,linux/arm64 \ + -t ghcr.io/gloridust/wechat-on-cloud:$VER -t ghcr.io/gloridust/wechat-on-cloud:latest \ + --push ./docker +``` + +> 把 `gloridust` 换成你的 GHCR 命名空间(与 `docker-compose.yml` / `WOC_IMAGE_PREFIX` 一致)。 +> 只想本机自用、不推 GHCR,用 [`./scripts/build-local.sh`](scripts/build-local.sh) 构建本机架构单架构镜像即可。 + +### 发布后:把包设为公开 + 首次发布后还需把 GHCR 包设为公开,否则别人 `docker compose up -d` 会报 `denied`: 1. 打开 GitHub → 你的头像 → **Packages** → 分别进入 `woc-panel`、`wechat-on-cloud`; diff --git a/panel/web/public/favicon.svg b/panel/web/public/favicon.svg index 942b800..79703ba 100644 --- a/panel/web/public/favicon.svg +++ b/panel/web/public/favicon.svg @@ -7,9 +7,8 @@ - - - + + diff --git a/panel/web/public/icon-180.png b/panel/web/public/icon-180.png index 1365a1164fff6ade61d058a467b3c389f90cd2bb..d3ec46b8ceb40fa669406307d5b2e857d34193d0 100644 GIT binary patch delta 2787 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 delta 2865 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 K##M&C3I73Ou54le diff --git a/panel/web/public/icon-192.png b/panel/web/public/icon-192.png index f3fad248c46199dea0ded2a48c79bae60955eacc..8e6c77b738b99706a287296d56bee0c80e44022e 100644 GIT binary patch literal 2911 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 YBvXLga4h@=XK)6L4KEoy*CW#Y1MF=@=>Px# literal 3091 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 diff --git a/panel/web/public/icon-512.png b/panel/web/public/icon-512.png index ada061ce4283230cba961f65e10fe0222a230c41..312d6131571f068a6b3e7597ebc411f0cdc5d82f 100644 GIT binary patch literal 8103 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 ROb-CZ3{L15{N;G [x * s, y * s]); const underline = [ - [56, 60], - [72, 60], + [50, 54], + [66, 54], ].map(([x, y]) => [x * s, y * s]); - const dot = [22 * s, 36 * s, 3.4 * s]; // cx, cy, r const inRounded = (x, y) => { const r = radius; @@ -93,7 +92,6 @@ function makePng(size) { cov = Math.max(cov, clamp01(stroke - distToSeg(gx, gy, chevron[0][0], chevron[0][1], chevron[1][0], chevron[1][1]) + 0.5)); cov = Math.max(cov, clamp01(stroke - distToSeg(gx, gy, chevron[1][0], chevron[1][1], chevron[2][0], chevron[2][1]) + 0.5)); cov = Math.max(cov, clamp01(stroke - distToSeg(gx, gy, underline[0][0], underline[0][1], underline[1][0], underline[1][1]) + 0.5)); - cov = Math.max(cov, clamp01(dot[2] - Math.hypot(gx - dot[0], gy - dot[1]) + 0.5)); const o = y * rowLen + 1 + x * 4; raw[o] = Math.round(bg[0] + (WHITE[0] - bg[0]) * cov);