diff --git a/.gitea/workflows/cleanup-old-gitee-repos.yml b/.gitea/workflows/cleanup-old-gitee-repos.yml new file mode 100644 index 0000000..2b254a0 --- /dev/null +++ b/.gitea/workflows/cleanup-old-gitee-repos.yml @@ -0,0 +1,60 @@ +name: cleanup-old-gitee-repos + +# 一次性任务:删除 Gitee 企业仓下 12 个已并入单仓的旧仓。 +# 用完后本文件应删除(见 CHANGELOG 记录)。执行前会逐个确认「不是 iotlcm 本身」。 +on: + workflow_dispatch: + +jobs: + cleanup: + runs-on: host + steps: + - name: 删除旧仓 + env: + DST_TOKEN: ${{ secrets.GITEE_TOKEN }} + DST_OWNER: ${{ secrets.GITEE_OWNER }} + run: | + set -u + + REPOS="iotlcm-admin-svr iotlcm-admin-ui iotlcm-app iotlcm-bot iotlcm-deploy iotlcm-docs iotlcm-onelink-mock iotlcm-openapi iotlcm-sms iotlcm-upstream-chan iotlcm-upstream-proxy iotlcm-worker-svr" + + fail=0 + for r in $REPOS; do + # 保险:绝不删单仓本身 + if [ "$r" = "iotlcm" ]; then + echo "❌ 拒绝删除单仓 $r"; exit 1 + fi + + code=$(curl -sS -o /tmp/del.out -w '%{http_code}' -X DELETE \ + "https://gitee.com/api/v5/repos/${DST_OWNER}/${r}?access_token=${DST_TOKEN}") + echo "DELETE ${DST_OWNER}/${r} -> HTTP $code" + case "$code" in + 200|202|204) ;; + 404) echo " (已不存在,跳过)" ;; + *) echo " ❌ 失败:$(head -c 200 /tmp/del.out)"; fail=1 ;; + esac + done + + echo "" + echo "===== 复核:逐个 GET 应返回 404 =====" + for r in $REPOS; do + code=$(curl -sS -o /dev/null -w '%{http_code}' \ + "https://gitee.com/api/v5/repos/${DST_OWNER}/${r}?access_token=${DST_TOKEN}") + echo "GET ${DST_OWNER}/${r} -> HTTP $code" + [ "$code" != "404" ] && { echo " ⚠️ 仍然存在"; fail=1; } + done + + echo "" + echo "===== 单仓必须仍在 =====" + code=$(curl -sS -o /dev/null -w '%{http_code}' \ + "https://gitee.com/api/v5/repos/${DST_OWNER}/iotlcm?access_token=${DST_TOKEN}") + echo "GET ${DST_OWNER}/iotlcm -> HTTP $code" + [ "$code" != "200" ] && { echo " ❌ 单仓不见了"; fail=1; } + + if [ "$fail" != "0" ]; then + echo "" + echo "===== 结论:存在失败项 =====" + exit 1 + fi + echo "" + echo "===== 结论:12 个旧仓已删除,单仓完好 ====="