Skip to content

fix: switch to node:22-slim, fix gateway cmd, optimize Dockerfiles, a… #3

fix: switch to node:22-slim, fix gateway cmd, optimize Dockerfiles, a…

fix: switch to node:22-slim, fix gateway cmd, optimize Dockerfiles, a… #3

Workflow file for this run

name: Build and Push Docker Images

Check failure on line 1 in .github/workflows/build-push.yml

View workflow run for this annotation

GitHub Actions / .github/workflows/build-push.yml

Invalid workflow file

(Line: 60, Col: 13): Unrecognized named-value: 'secrets'. Located at position 1 within expression: secrets.TENCENT_TCR_USERNAME != ''
on:
push:
tags:
- 'v*'
workflow_dispatch:
inputs:
openclaw_version:
description: 'OpenClaw version to build (e.g. latest, 4.0.2)'
required: false
default: 'latest'
openclaw_source:
description: 'OpenClaw source (zh or official)'
required: false
default: 'zh'
env:
GHCR_REGISTRY: ghcr.io
TENCENT_REGISTRY: ccr.ccs.tencentyun.com
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
- name: Set up QEMU (multi-arch)
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
# ── 登录 GHCR(国际源) ──
- name: Login to GHCR
uses: docker/login-action@v3
with:
registry: ${{ env.GHCR_REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
# ── 登录腾讯云 TCR(国内源,可选) ──
- name: Login to Tencent Cloud TCR
if: ${{ secrets.TENCENT_TCR_USERNAME != '' }}
uses: docker/login-action@v3
with:
registry: ${{ env.TENCENT_REGISTRY }}
username: ${{ secrets.TENCENT_TCR_USERNAME }}
password: ${{ secrets.TENCENT_TCR_PASSWORD }}
- name: Determine version and tags
id: meta
env:
HAS_TENCENT: ${{ secrets.TENCENT_TCR_USERNAME != '' }}
run: |
VERSION="${{ github.event.inputs.openclaw_version || 'latest' }}"
SOURCE="${{ github.event.inputs.openclaw_source || 'zh' }}"
# 如果是 tag 触发,从 tag 名提取版本
if [[ "$GITHUB_REF" == refs/tags/v* ]]; then
VERSION="${GITHUB_REF#refs/tags/v}"
fi
SUFFIX="${{ matrix.tag_suffix }}"
# GHCR 标签
TAGS="${{ env.GHCR_REGISTRY }}/${{ env.IMAGE_NAME }}:latest${SUFFIX}"
if [ "$VERSION" != "latest" ]; then
TAGS="${TAGS},${{ env.GHCR_REGISTRY }}/${{ env.IMAGE_NAME }}:${VERSION}${SUFFIX}"
fi
if [ "$SOURCE" = "official" ]; then
TAGS="${TAGS},${{ env.GHCR_REGISTRY }}/${{ env.IMAGE_NAME }}:official${SUFFIX}"
fi
# 腾讯云 TCR 标签(如果配置了)
if [ "$HAS_TENCENT" = "true" ]; then
TAGS="${TAGS},${{ env.TENCENT_REGISTRY }}/${{ env.IMAGE_NAME }}:latest${SUFFIX}"
if [ "$VERSION" != "latest" ]; then
TAGS="${TAGS},${{ env.TENCENT_REGISTRY }}/${{ env.IMAGE_NAME }}:${VERSION}${SUFFIX}"
fi
if [ "$SOURCE" = "official" ]; then
TAGS="${TAGS},${{ env.TENCENT_REGISTRY }}/${{ env.IMAGE_NAME }}:official${SUFFIX}"
fi
fi
echo "tags=${TAGS}" >> $GITHUB_OUTPUT
echo "version=${VERSION}" >> $GITHUB_OUTPUT
echo "source=${SOURCE}" >> $GITHUB_OUTPUT
- name: Build and push
uses: docker/build-push-action@v5
with:
context: .
file: ${{ matrix.dockerfile }}
push: true
tags: ${{ steps.meta.outputs.tags }}
platforms: linux/amd64,linux/arm64
build-args: |
OPENCLAW_VERSION=${{ steps.meta.outputs.version }}
OPENCLAW_SOURCE=${{ steps.meta.outputs.source }}
cache-from: type=gha
cache-to: type=gha,mode=max
summary:
needs: build-and-push
runs-on: ubuntu-latest
steps:
- name: Print image locations
run: |
echo "✅ 镜像构建并推送成功"
echo ""
echo "📦 国际源(GHCR):"
echo " ghcr.io/${{ env.IMAGE_NAME }}:latest"
echo " ghcr.io/${{ env.IMAGE_NAME }}:latest-gateway"
echo ""
echo "🇨🇳 国内源(腾讯云 TCR):"
echo " ${{ env.TENCENT_REGISTRY }}/${{ env.IMAGE_NAME }}:latest"
echo " ${{ env.TENCENT_REGISTRY }}/${{ env.IMAGE_NAME }}:latest-gateway"