Add `sync_release_version` input to mirror-to-gitee.yml for ad-hoc release asset synchronization that bypasses the release.yml verify gate when tag metadata cannot be updated.
122 lines
4.9 KiB
YAML
122 lines
4.9 KiB
YAML
# 把本仓库 main 代码自动镜像到 Gitee,供国内用户访问 raw 脚本入口。
|
||
# Release tag 与附件只由 release.yml 的受控 publication queue 发布。
|
||
# 用 HTTPS + 令牌直接 git push(无需 SSH key),复用已配置的 secret:
|
||
# GITEE_TOKEN —— Gitee 私人令牌(勾 projects)
|
||
# GITEE_USER —— 令牌所属 Gitee 用户名(用于 https 推送鉴权)
|
||
# GITEE_REPO —— "owner/repo",如 DingTalk-Real-AI/dingtalk-workspace-cli
|
||
# 未配置 GITEE_TOKEN 时(如 fork)自动跳过,不报红叉。
|
||
name: Mirror code to Gitee
|
||
|
||
on:
|
||
push:
|
||
branches:
|
||
- main
|
||
schedule:
|
||
- cron: '0 18 * * *'
|
||
workflow_dispatch:
|
||
inputs:
|
||
sync_release_version:
|
||
description: "Sync a specific release version's assets to Gitee (e.g. v1.0.55-beta.3)"
|
||
required: false
|
||
type: string
|
||
|
||
concurrency:
|
||
group: gitee-code-mirror
|
||
cancel-in-progress: false
|
||
|
||
jobs:
|
||
mirror:
|
||
runs-on: ubuntu-latest
|
||
if: ${{ github.ref_name == github.event.repository.default_branch && github.repository_owner == 'DingTalk-Real-AI' }}
|
||
env:
|
||
GITEE_TOKEN: ${{ secrets.GITEE_TOKEN }}
|
||
GITEE_USER: ${{ secrets.GITEE_USER }}
|
||
GITEE_REPO: ${{ secrets.GITEE_REPO }}
|
||
steps:
|
||
- name: Checkout main history
|
||
if: env.GITEE_TOKEN != ''
|
||
uses: actions/checkout@v4
|
||
with:
|
||
fetch-depth: 0
|
||
|
||
- name: Push main + tags to Gitee (with README localization)
|
||
if: env.GITEE_TOKEN != ''
|
||
run: |
|
||
set -eu
|
||
REMOTE="https://${GITEE_USER}:${GITEE_TOKEN}@gitee.com/${GITEE_REPO}.git"
|
||
|
||
git fetch --force origin 'refs/heads/main:refs/remotes/origin/main'
|
||
|
||
# Gitee 专属分支:在 origin/main 之上叠加一个 README 本地化 commit。
|
||
# GitHub 那份 README 不变;只有推往 Gitee 的副本被改写。
|
||
git checkout -B gitee-main origin/main
|
||
git config user.email "actions@github.com"
|
||
git config user.name "github-actions[bot]"
|
||
|
||
# 1) 安装命令本地化:raw.githubusercontent → gitee raw(国内可达)。
|
||
for f in README.md README_zh.md; do
|
||
[ -f "$f" ] || continue
|
||
sed -i "s#raw.githubusercontent.com/${GITEE_REPO}/main#gitee.com/${GITEE_REPO}/raw/main#g" "$f"
|
||
done
|
||
|
||
# 2) coverage 徽章:仓库内相对路径 svg 在 Gitee 渲染不出来(gitee raw 对 svg
|
||
# 返回需签名、会过期的 URL,且 content-type 为 text/plain)。改成 shields.io
|
||
# 静态徽章——数值取自仓库 coverage.svg,颜色按覆盖率阈值。
|
||
SVG=".github/badges/coverage.svg"
|
||
if [ -f "$SVG" ]; then
|
||
PCT="$(grep -oE '[0-9]+(\.[0-9]+)?%' "$SVG" | head -1)"
|
||
NUM="${PCT%\%}"; INT="${NUM%.*}"
|
||
if [ "${INT:-0}" -ge 80 ]; then C=brightgreen; elif [ "${INT:-0}" -ge 60 ]; then C=yellow; else C=red; fi
|
||
BADGE="https://img.shields.io/badge/coverage-${NUM}%25-${C}"
|
||
for f in README.md README_zh.md; do
|
||
[ -f "$f" ] || continue
|
||
sed -i "s#\.github/badges/coverage\.svg#${BADGE}#g" "$f"
|
||
done
|
||
fi
|
||
|
||
git add README.md README_zh.md 2>/dev/null || true
|
||
git commit -m "docs(gitee): localize install commands + coverage badge for Gitee mirror" || true
|
||
|
||
# main 镜像对齐;release tag 由 release.yml 单独校验后创建,禁止在这里 force。
|
||
git push --force "$REMOTE" 'gitee-main:refs/heads/main'
|
||
echo "✅ 已镜像 main(含 Gitee README 本地化)到 Gitee ${GITEE_REPO}"
|
||
|
||
- name: Download GitHub Release assets
|
||
if: ${{ inputs.sync_release_version != '' }}
|
||
env:
|
||
VERSION: ${{ inputs.sync_release_version }}
|
||
GH_TOKEN: ${{ github.token }}
|
||
run: |
|
||
set -eu
|
||
echo "📥 Downloading release assets for ${VERSION}"
|
||
mkdir -p dist
|
||
gh release download "$VERSION" \
|
||
--repo "$GITHUB_REPOSITORY" \
|
||
--dir dist \
|
||
--pattern 'dws-*' \
|
||
--pattern 'checksums.txt' \
|
||
--clobber
|
||
ls -la dist/
|
||
|
||
- name: Verify release artifacts
|
||
if: ${{ inputs.sync_release_version != '' }}
|
||
env:
|
||
VERSION: ${{ inputs.sync_release_version }}
|
||
run: |
|
||
set -eu
|
||
DWS_PACKAGE_DIST_DIR="$GITHUB_WORKSPACE/dist" \
|
||
./scripts/release/verify-release-artifacts.sh "$VERSION"
|
||
|
||
- name: Sync release assets to Gitee
|
||
if: ${{ inputs.sync_release_version != '' }}
|
||
env:
|
||
VERSION: ${{ inputs.sync_release_version }}
|
||
GITEE_TOKEN: ${{ secrets.GITEE_TOKEN }}
|
||
GITEE_USER: ${{ secrets.GITEE_USER }}
|
||
GITEE_REPO: ${{ secrets.GITEE_REPO }}
|
||
DIST_DIR: ${{ github.workspace }}/dist
|
||
run: |
|
||
set -eu
|
||
echo "📦 Syncing release assets for ${VERSION} to Gitee ${GITEE_REPO}"
|
||
./scripts/release/sync-to-gitee.sh
|