Skip to content

feat: 重构为基于汉化版镜像 + 三仓库CI推送 + 版本锁定2026.3.7-zh.2 #7

feat: 重构为基于汉化版镜像 + 三仓库CI推送 + 版本锁定2026.3.7-zh.2

feat: 重构为基于汉化版镜像 + 三仓库CI推送 + 版本锁定2026.3.7-zh.2 #7

Workflow file for this run

name: Build and Push Docker Images
on:
push:
tags:
- 'v*'
workflow_dispatch:
inputs:
openclaw_zh_tag:
description: '汉化版基础镜像标签(如 2026.3.7-zh.2)'
required: false
default: ''
env:
GHCR_REGISTRY: ghcr.io
TENCENT_REGISTRY: ccr.ccs.tencentyun.com
DOCKERHUB_REGISTRY: docker.io
IMAGE_NAME: qingchencloud/openclaw
jobs:
build-and-push:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
strategy:
matrix:
include:
- target: full
dockerfile: full/Dockerfile
tag_suffix: ""
- target: gateway
dockerfile: gateway/Dockerfile
tag_suffix: "-gateway"
steps:
- name: Checkout
uses: actions/checkout@v4
# 读取 VERSION 文件获取锁定的基础镜像版本
- name: Read VERSION file
id: version
run: |
# 从 VERSION 文件读取默认值
ZH_TAG=$(grep '^OPENCLAW_ZH_TAG=' VERSION | cut -d= -f2)
# workflow_dispatch 可覆盖
INPUT_TAG="${{ github.event.inputs.openclaw_zh_tag }}"
if [ -n "$INPUT_TAG" ]; then
ZH_TAG="$INPUT_TAG"
fi
echo "zh_tag=${ZH_TAG}" >> $GITHUB_OUTPUT
# 从 git tag 提取版本号
OUR_VERSION="latest"
if [[ "$GITHUB_REF" == refs/tags/v* ]]; then
OUR_VERSION="${GITHUB_REF#refs/tags/v}"
fi
echo "our_version=${OUR_VERSION}" >> $GITHUB_OUTPUT
echo "基础镜像: 1186258278/openclaw-zh:${ZH_TAG}"
echo "输出版本: ${OUR_VERSION}"
- name: Set up QEMU (multi-arch)
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
# ── 登录三个仓库 ──
- name: Login to GHCR
uses: docker/login-action@v3
with:
registry: ${{ env.GHCR_REGISTRY }}
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_TOKEN }}
- name: Login to Tencent Cloud TCR
uses: docker/login-action@v3
with:
registry: ${{ env.TENCENT_REGISTRY }}
username: ${{ secrets.TCR_USERNAME }}
password: ${{ secrets.TCR_PASSWORD }}
# ── 生成标签 ──
- name: Generate tags
id: tags
run: |
SUFFIX="${{ matrix.tag_suffix }}"
VER="${{ steps.version.outputs.our_version }}"
# 三个仓库都推 latest 标签
TAGS="${{ env.GHCR_REGISTRY }}/${{ env.IMAGE_NAME }}:latest${SUFFIX}"
TAGS="${TAGS},${{ env.DOCKERHUB_REGISTRY }}/${{ env.IMAGE_NAME }}:latest${SUFFIX}"
TAGS="${TAGS},${{ env.TENCENT_REGISTRY }}/${{ env.IMAGE_NAME }}:latest${SUFFIX}"
# 如果有版本号,额外推版本标签
if [ "$VER" != "latest" ]; then
TAGS="${TAGS},${{ env.GHCR_REGISTRY }}/${{ env.IMAGE_NAME }}:${VER}${SUFFIX}"
TAGS="${TAGS},${{ env.DOCKERHUB_REGISTRY }}/${{ env.IMAGE_NAME }}:${VER}${SUFFIX}"
TAGS="${TAGS},${{ env.TENCENT_REGISTRY }}/${{ env.IMAGE_NAME }}:${VER}${SUFFIX}"
fi
echo "tags=${TAGS}" >> $GITHUB_OUTPUT
echo "推送标签:"
echo "$TAGS" | tr ',' '\n' | sed 's/^/ /'
# ── 构建并推送 ──
- name: Build and push
uses: docker/build-push-action@v5
with:
context: .
file: ${{ matrix.dockerfile }}
push: true
tags: ${{ steps.tags.outputs.tags }}
platforms: linux/amd64,linux/arm64
build-args: |
OPENCLAW_ZH_TAG=${{ steps.version.outputs.zh_tag }}
cache-from: type=gha
cache-to: type=gha,mode=max
summary:
needs: build-and-push
runs-on: ubuntu-latest
steps:
- name: Summary
run: |
echo "✅ 镜像构建并推送成功!"
echo ""
echo "📦 GHCR: ghcr.io/${{ env.IMAGE_NAME }}:latest"
echo "🐳 DockerHub: docker.io/${{ env.IMAGE_NAME }}:latest"
echo "🇨🇳 腾讯云: ${{ env.TENCENT_REGISTRY }}/${{ env.IMAGE_NAME }}:latest"
echo ""
echo "用户一键部署:"
echo " docker run -d -p 1420:1420 -p 18789:18789 -v openclaw-data:/root/.openclaw ghcr.io/${{ env.IMAGE_NAME }}:latest"