fix: switch to node:22-slim, fix gateway cmd, optimize Dockerfiles, a… #3
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Build and Push Docker Images | ||
|
Check failure on line 1 in .github/workflows/build-push.yml
|
||
| 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" | ||