name: API Base Image Build on: push: branches: - develop - main paths: - 'requirements-base.txt' - 'requirements.txt' - 'infra/docker/api-base.Dockerfile' workflow_dispatch: jobs: build-api-base: name: Build API Base Image runs-on: runtime-builder timeout-minutes: 45 steps: - name: Checkout code shell: sh env: GITHUB_TOKEN: ${{ github.token }} run: | curl -sH "Authorization: token $GITHUB_TOKEN" \ "${GITHUB_API_URL}/repos/${GITHUB_REPOSITORY}/raw/scripts/ci/step_checkout.sh?ref=${GITHUB_SHA}" \ | bash - name: Docker login to Registry shell: sh env: ACR_USERNAME: ${{ secrets.ACR_USERNAME }} ACR_PASSWORD: ${{ secrets.ACR_PASSWORD }} GITEA_REGISTRY_USER: xiaoxia GITEA_REGISTRY_TOKEN: ${{ secrets.REGISTRY_TOKEN }} run: | set -eu for i in 1 2 3; do echo "=== Docker login 尝试 $i/3 ===" if printf '%s' "${ACR_PASSWORD}" | docker login xiaoxia-registry.cn-hangzhou.cr.aliyuncs.com -u "${ACR_USERNAME}" --password-stdin \ && docker login git.xiaoxiajianji.com -u "${GITEA_REGISTRY_USER}" -p "${GITEA_REGISTRY_TOKEN}"; then echo "✅ Docker login successful" break fi echo "❌ Docker login 失败(尝试 $i/3),5s 后重试..." sleep 5 done - name: Build and push API base image shell: sh run: | set -eu ACR_IMAGE="xiaoxia-registry.cn-hangzhou.cr.aliyuncs.com/xiaoxiakeji/saas-api-base:latest" GITEA_IMAGE="git.xiaoxiajianji.com/xiaoxia-saas/saas-api-base:latest" echo "=== Building API base image ===" # 使用普通 docker build(单平台不需要 buildx) docker build \ -f infra/docker/api-base.Dockerfile \ -t "${ACR_IMAGE}" \ . echo "" echo "✅ Image built successfully" # 推送到 ACR echo "=== Pushing to ACR ===" docker push "${ACR_IMAGE}" echo "✅ Pushed to ACR" # 打标签并推送到 Gitea Packages 作为备份 echo "=== Pushing to Gitea Packages ===" docker tag "${ACR_IMAGE}" "${GITEA_IMAGE}" docker push "${GITEA_IMAGE}" || echo "⚠️ Gitea Packages push failed (non-fatal)" echo "✅ Gitea backup push completed" - name: Cleanup if: always() shell: sh run: | ACR_IMAGE="xiaoxia-registry.cn-hangzhou.cr.aliyuncs.com/xiaoxiakeji/saas-api-base:latest" docker rmi "${ACR_IMAGE}" 2>/dev/null || true echo "Cleanup done"