4bb1c4205d
CI/CD Pipeline / Check if frontend-only change (push) Has been skipped
CI/CD Pipeline / Frontend Lint (push) Has been skipped
CI/CD Pipeline / PR Build API Image (push) Has been skipped
CI/CD Pipeline / PR Build Web Image (push) Has been skipped
CI/CD Pipeline / PR Build Worker Image (push) Has been skipped
Worker Base Image Build / Build Worker Base Images (worker-base-runtime-cache, infra/docker/worker-base-runtime.Dockerfile, worker-base-runtime, runtime) (push) Failing after 1m19s
API Base Image Build / Build API Base Image (push) Successful in 1m40s
CI/CD Pipeline / Validate - Migration (alembic) (push) Successful in 3m5s
CI/CD Pipeline / Validate - Type Check (mypy) (push) Successful in 3m20s
CI/CD Pipeline / Frontend Unit Tests (push) Successful in 5m24s
CI/CD Pipeline / Validate - Code Quality (push) Successful in 8m22s
CI/CD Pipeline / Integration Tests (push) Successful in 3m3s
Worker Base Image Build / Build Worker Base Images (worker-base-builder-cache, infra/docker/worker-base-builder.Dockerfile, worker-base-builder, builder) (push) Failing after 11m48s
CI/CD Pipeline / Build Staging Web Image (push) Failing after 11m49s
CI/CD Pipeline / Unit Tests (push) Successful in 12m22s
CI/CD Pipeline / Build Production Web Image (push) Has been skipped
CI/CD Pipeline / Build Production Worker Image (push) Has been skipped
CI/CD Pipeline / CI Gate (push) Has been skipped
CI/CD Pipeline / Build Production API Image (push) Has been skipped
CI/CD Pipeline / Deploy Production (push) Has been skipped
CI/CD Pipeline / Production Browser E2E (push) Has been skipped
CI/CD Pipeline / Build Staging API Image (push) Has been cancelled
CI/CD Pipeline / Build Staging Worker Image (push) Has been cancelled
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (push) Has been cancelled
CI/CD Pipeline / Staging E2E Tests (push) Has been cancelled
CI/CD Pipeline / Staging API Integration Tests (push) Has been cancelled
CI/CD Pipeline / ACR Image Cleanup (push) Has been cancelled
CI/CD Pipeline / Canary Release to Production (push) Has been cancelled
Co-authored-by: xiaoxia <dev@xiaoxiajianji.com> Co-committed-by: xiaoxia <dev@xiaoxiajianji.com>
85 lines
2.6 KiB
YAML
85 lines
2.6 KiB
YAML
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"
|