From 8203a7f8939421e72797a1feaeb85070d9fee408 Mon Sep 17 00:00:00 2001 From: "jif2.zhang" Date: Sun, 25 Oct 2026 21:40:13 +0800 Subject: [PATCH] =?UTF-8?q?fix(V0.2):=20=E7=89=88=E6=9C=AC=E8=A7=84?= =?UTF-8?q?=E5=88=99=E6=94=B6=E5=B0=BE=20=E2=80=94=E2=80=94=20=E6=89=8B?= =?UTF-8?q?=E5=8A=A8=20OTA=20=E5=B7=A5=E4=BD=9C=E6=B5=81=E5=AF=B9=E9=BD=90?= =?UTF-8?q?=E5=8F=91=E5=B8=83=E8=AF=B4=E6=98=8E/commit=20=E5=8F=A3?= =?UTF-8?q?=E5=BE=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - ota-build.yml: notes 默认取检出 commit 的 message, --commit 写入 manifest (与 docker-build 一致); 参数加引号防空格断裂 - docker-build.yml: 去掉 head -c 400 字节截断 (会把多字节汉字切成 非法 UTF-8 导致 latest.json 解析失败), 截断统一由打包脚本按字符处理 - build-ota.mjs: CI 日志输出 build_id 与 commit --- .gitea/workflows/docker-build.yml | 5 +++-- .gitea/workflows/ota-build.yml | 15 ++++++++++----- scripts/build-ota.mjs | 2 ++ 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/.gitea/workflows/docker-build.yml b/.gitea/workflows/docker-build.yml index bc41287..0990807 100644 --- a/.gitea/workflows/docker-build.yml +++ b/.gitea/workflows/docker-build.yml @@ -85,14 +85,15 @@ jobs: - name: Build & sign OTA package # 每次主分支提交生成 OTA 升级包, sequence 默认时间戳 (单调递增) - # 发布说明 = 触发构建的 commit message (标题+正文, 截断 400 字), + # 发布说明 = 触发构建的 commit message (标题+正文; 打包脚本内安全截断 400 字符), # commit sha 通过 --commit 单独写入 manifest, 前端分行展示 # 产物 ota-package/ (tar.gz + latest.json + .minisig) 进入 docker build context, 由 Dockerfile COPY 进镜像 env: MINISIGN_PRIVATE_KEY: ${{ secrets.MINISIGN_PRIVATE_KEY }} run: | set -euo pipefail - MSG="$(git log -1 --pretty=format:%B | sed -e '/^[[:space:]]*$/d' | head -c 400)" + # 不用 head -c 截断: 那会把多字节汉字切成非法 UTF-8, latest.json 解析失败 + MSG="$(git log -1 --pretty=format:%B | sed -e '/^[[:space:]]*$/d')" echo "notes: ${MSG}" node scripts/build-ota.mjs --out ota-package --notes "${MSG}" --commit "${GITHUB_SHA}" --min-binary ${OTA_MIN_BINARY} echo "===== latest.json =====" diff --git a/.gitea/workflows/ota-build.yml b/.gitea/workflows/ota-build.yml index cf71028..6bcc46f 100644 --- a/.gitea/workflows/ota-build.yml +++ b/.gitea/workflows/ota-build.yml @@ -66,18 +66,23 @@ jobs: minisign -v - name: Build & sign OTA package + # 发布说明默认 = 检出 commit 的 message (标题+正文), commit sha 单独写入; + # 手动填写的 notes 优先 env: MINISIGN_PRIVATE_KEY: ${{ secrets.MINISIGN_PRIVATE_KEY }} - OTA_NOTES: ${{ inputs.notes }} run: | set -euo pipefail OUT="ota-package" - ARGS="--out ${OUT}" - # sequence 留空 → 脚本默认用时间戳; min_binary 默认 0.1.0 (与前端版本解耦) + ARGS="--out ${OUT} --commit ${GITHUB_SHA}" if [ -n "${{ inputs.sequence }}" ]; then ARGS="${ARGS} --sequence ${{ inputs.sequence }}"; fi - if [ -n "${OTA_NOTES}" ]; then ARGS="${ARGS} --notes ${OTA_NOTES}"; fi + if [ -n "${{ inputs.notes }}" ]; then + ARGS="${ARGS} --notes \"${{ inputs.notes }}\"" + else + MSG="$(git log -1 --pretty=format:%B | sed -e '/^[[:space:]]*$/d')" + ARGS="${ARGS} --notes \"${MSG}\"" + fi if [ -n "${{ inputs.min_binary }}" ]; then ARGS="${ARGS} --min-binary ${{ inputs.min_binary }}"; fi - node scripts/build-ota.mjs ${ARGS} + eval "node scripts/build-ota.mjs ${ARGS}" echo "===== latest.json =====" cat ${OUT}/latest.json echo "===== bundle sha256 =====" diff --git a/scripts/build-ota.mjs b/scripts/build-ota.mjs index 3b9d640..3eab17e 100644 --- a/scripts/build-ota.mjs +++ b/scripts/build-ota.mjs @@ -139,6 +139,8 @@ console.log('=== OTA 包生成完成 ===') console.log('输出目录: ', OUT_DIR) console.log('版本: ', manifest.version) console.log('sequence: ', manifest.sequence) +console.log('build_id: ', manifest.build_id) +console.log('commit: ', manifest.commit || '(未指定)') console.log('bundle 大小: ', (bundleStat.size / 1024).toFixed(1) + ' KB') console.log('bundle sha256:', bundleSha256) console.log('签名: ', signature ? '(已生成, 写入 latest.json)' : '(未签名, --no-sign)')