GitHub Actions 拒绝加载本 workflow, 报: Invalid workflow file: .github/workflows/docker.yml#L1 (Line: 49, Col: 13): Unrecognized named-value: 'secrets'. Located at position 40 within expression: github.event_name != 'pull_request' && secrets.DOCKERHUB_USERNAME != '' 原因: secrets 上下文不允许在 step 的 if: 表达式里引用(GitHub 沙箱限制)。 secrets 只在 with: / env: / run: 等位置可用, if: 里必须走 env 中转。 修复: - 新增 job 级 env: DOCKERHUB_USERNAME / DOCKERHUB_TOKEN (值来自 secrets) - DockerHub login step: if 改 env.DOCKERHUB_USERNAME != '' - DockerHub login step: username/password 改读 env.* - metadata-action images: DockerHub 那行改 env.DOCKERHUB_USERNAME, enable 判断同样改 env 上下文 副作用: 无。secret 未配置时行为不变(跳过 login + 不渲染 DockerHub image)。 已用 js-yaml 校验 YAML 结构合法, 并扫描确认全部 step 的 if: 不含 secrets 引用。
原 .github/workflows/docker.yml: - 触发: v* tag + 手动 - 仅推 GHCR - 无 build 缓存 - buildx action v5 新版本: - 触发: v*.*.* tag (限定 semver, 避免 vtest 误触发) + 手动按钮 - 双 registry 推送: GHCR (默认) + DockerHub (blueink05/ttshub,需 secrets) - GHA buildx cache (cache-from + cache-to, mode=max): 首次 ~3-5 min, 后续 30-60s - buildx action v6 - multi-arch (amd64+arm64, 不变) - tag 策略: semver + major.minor + tag->latest + short sha - 安全网: secrets.DOCKERHUB_USERNAME 空时自动跳过 DockerHub login + image name 渲染, 避免生成 'docker.io//ttshub' 这种非法 image 名 - 不验 PR 编译(合到 main 不重跑, 只在打 tag 时构建) - workflow_dispatch 推镜像: push 表达式保留 '!= pull_request' 兼容未来扩展 需要 GitHub repo 配置的 secrets: - DOCKERHUB_USERNAME = blueink05 - DOCKERHUB_TOKEN = (hub.docker.com/settings/security 拿 access token) 没加之前,DockerHub login 步骤被 actions 自动跳过,只推 GHCR 一份。 Dockerfile / docker-compose.yml / .dockerignore 不动(Dockerfile 1.26-alpine base image 已确认存在,tags list 拉到 tip-20260920)。
为 Gitea→GitHub 镜像 + GitHub 镜像仓库场景准备 Docker 镜像 自动构建和发布流程。 触发条件: - push tag v* (release 时打 tag 自动触发) - workflow_dispatch (手动触发,可在 GitHub UI 测试) 构建: - 多平台:linux/amd64 + linux/arm64 - 通过 QEMU + Buildx 跨架构构建 - 推送到 ghcr.io/<github-user>/volcano-engine-tts-ui - 双标签:语义版本 + 短 commit hash - OCI labels 包含 version 和 revision 与之前 version 包配合: workflow 用 git describe --tags --always --dirty 算 VERSION (commit hash 类似),通过 --build-arg 传给 Dockerfile, Dockerfile 用 -ldflags 注入到 version.Version / version.Commit 两个变量。最终 /health 端点返回构建时注入的真实版本信息。 前置条件(用户需自行完成): 1. GitHub 建镜像仓库 2. Gitea 配置 Push Mirror 到 GitHub(开启 Sync Tags) 3. 仓库设为 Public(否则 GHCR 镜像默认 private)