Files
base-workflow/.gitea/workflows/common-trigger.yml
2026-06-10 16:09:43 +08:00

137 lines
4.7 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

name: Build Any Repository Docker Image
on:
workflow_dispatch:
inputs:
repo_url:
description: '要构建的仓库地址xc-workflows/engine-demo'
required: true
type: string
ref:
description: '分支/tag/commit'
required: true
default: 'main'
type: string
dry_run:
description: '仅构建不推送'
required: false
default: 'true'
type: choice
options:
- 'true'
- 'false'
jobs:
build:
runs-on: amd64-ubuntu-24.04
steps:
- name: Debug URL info
run: |
echo "Server URL: ${{ gitea.server_url }}"
echo "Repo URL input: ${{ github.event.inputs.repo_url }}"
echo "Ref: ${{ github.event.inputs.ref }}"
echo "Dry run: ${{ github.event.inputs.dry_run }}"
- name: Clone target repository
run: |
# 拼接完整的 clone URLgitea.server_url 已包含协议)
CLONE_URL="${{ gitea.server_url }}/${{ github.event.inputs.repo_url }}.git"
echo "正在克隆: $CLONE_URL"
git clone "$CLONE_URL" target_repo
cd target_repo
git checkout "${{ github.event.inputs.ref }}"
# 保存仓库信息供后续步骤使用
echo "TARGET_REPO_PATH=$(pwd)" >> "$GITEA_ENV"
echo "TARGET_REPO_NAME=$(basename ${{ github.event.inputs.repo_url }})" >> "$GITEA_ENV"
echo "克隆完成,当前目录: $(pwd)"
- name: Set image metadata
run: |
cd target_repo
# 生成镜像名称(将仓库路径中的 / 替换为 -
IMAGE_NAME="$(echo "${{ github.event.inputs.repo_url }}" | tr '[:upper:]' '[:lower:]' | tr '/' '-')"
SAFE_TAG=$(echo "${{ github.event.inputs.ref }}" | sed 's/\//-/g')
IMAGE="${DOCKER_REGISTRY}/${DOCKER_USERNAME}/${IMAGE_NAME}:${SAFE_TAG}"
echo "IMAGE_NAME=${IMAGE_NAME}" >> "$GITEA_ENV"
echo "IMAGE=${IMAGE}" >> "$GITEA_ENV"
echo "镜像名称: ${IMAGE}"
- name: Check Dockerfile exists
run: |
cd target_repo
if [ ! -f "Dockerfile" ]; then
echo "错误: 仓库根目录下未找到 Dockerfile"
exit 1
fi
echo "Dockerfile 存在"
- name: Login to Docker Registry
if: github.event.inputs.dry_run != 'true'
run: |
echo "$DOCKER_PASSWORD" | docker login "$DOCKER_REGISTRY" \
-u "$DOCKER_USERNAME" \
--password-stdin
echo "Docker 登录成功"
- name: Build Docker Image
run: |
cd target_repo
echo "开始构建镜像: ${IMAGE}"
docker build -t "${IMAGE}" .
echo "镜像构建完成"
- name: List built image
run: |
docker images | grep "${IMAGE_NAME}" || echo "镜像列表查看完成"
- name: Push Docker Image
if: github.event.inputs.dry_run != 'true'
run: |
for attempt in 1 2 3; do
echo "Starting docker push attempt ${attempt}/3 for ${IMAGE}"
if docker push "${IMAGE}"; then
echo "docker push completed successfully"
exit 0
fi
echo "docker push failed on attempt ${attempt}/3"
if [ $attempt -lt 3 ]; then
echo "等待 30 秒后重试..."
sleep 30
fi
done
echo "docker push failed after 3 attempts"
exit 1
- name: Dry Run Summary
if: github.event.inputs.dry_run == 'true'
run: |
echo "=========================================="
echo "✅ 仅构建模式完成(未推送)"
echo "=========================================="
echo "源仓库: ${{ github.event.inputs.repo_url }}"
echo "分支/Tag: ${{ github.event.inputs.ref }}"
echo "镜像名称: ${IMAGE}"
echo "镜像标签: ${SAFE_TAG}"
echo "=========================================="
echo "如需完整发布(推送镜像),请使用 dry_run=false 重新触发"
- name: Full Build Summary
if: github.event.inputs.dry_run != 'true'
run: |
echo "=========================================="
echo "✅ 完整构建完成(已推送)"
echo "=========================================="
echo "源仓库: ${{ github.event.inputs.repo_url }}"
echo "分支/Tag: ${{ github.event.inputs.ref }}"
echo "镜像名称: ${IMAGE}"
echo "镜像标签: ${SAFE_TAG}"
echo "=========================================="