add common-trigger
This commit is contained in:
115
.gitea/workflows/common-trigger.yml
Normal file
115
.gitea/workflows/common-trigger.yml
Normal file
@@ -0,0 +1,115 @@
|
|||||||
|
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: Clone target repository
|
||||||
|
run: |
|
||||||
|
# 构建完整的 clone URL
|
||||||
|
CLONE_URL="https://${{ 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"
|
||||||
|
|
||||||
|
- 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: Login to Docker Registry
|
||||||
|
if: github.event.inputs.dry_run != 'true'
|
||||||
|
run: |
|
||||||
|
echo "$DOCKER_PASSWORD" | docker login "$DOCKER_REGISTRY" \
|
||||||
|
-u "$DOCKER_USERNAME" \
|
||||||
|
--password-stdin
|
||||||
|
|
||||||
|
- name: Build Docker Image
|
||||||
|
run: |
|
||||||
|
cd target_repo
|
||||||
|
echo "开始构建镜像: ${IMAGE}"
|
||||||
|
docker build -t "${IMAGE}" .
|
||||||
|
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}"
|
||||||
|
docker push "${IMAGE}" &
|
||||||
|
PUSH_PID=$!
|
||||||
|
|
||||||
|
while kill -0 "$PUSH_PID" 2>/dev/null; do
|
||||||
|
echo "docker push is still running at $(date -u '+%Y-%m-%dT%H:%M:%SZ')"
|
||||||
|
sleep 60
|
||||||
|
done
|
||||||
|
|
||||||
|
if wait "$PUSH_PID"; then
|
||||||
|
echo "docker push completed successfully"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "docker push failed on attempt ${attempt}/3"
|
||||||
|
sleep 30
|
||||||
|
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 "=========================================="
|
||||||
|
|
||||||
|
- 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 "=========================================="
|
||||||
Reference in New Issue
Block a user