chore(远端): 彻底剔除 GitHub —— 删除已退役的 GitHub Actions 定义

用户明确「GitHub 现在整改,不能再作为备份库」,据此把 GitHub 从本项目
所有环节清干净。上一轮(b39dc297)已完成 remote / 推送别名 / 发布链路的
去 GitHub 化,本轮清掉最后一块实体:CI 定义。

- 删除整个 `.github/` 目录(3 个文件、共 1268 行):
    deploy.yml          1169 行  原主构建发布流水线(已由 .cnb.yml 接管)
    aliyun-backup.yml     54 行  备份到阿里云 OSS
    cleanup.yml           45 行  清理 artifacts / cache
  已确认无任何脚本、配置或流水线引用它们(全仓只有 .cnb.yml 的注释提过 deploy.yml)。
  实现完整保留在 git 历史里,需要时可翻。

同步更新引用它们的注释与文档(否则会指向不存在的文件):
- `.cnb.yml` 头部:说明原流水线已删除、要查旧实现请翻 git 历史;
  去掉「见 deploy.yml 第 290 行」这类失效指向
- `CNB构建落地方案.md`:
    §4.0 标题「CNB 主仓 + GitHub 备份」→「+ 辅仓备份」
    §pushurl 缺陷论证里「GitHub 那份备份」→「辅仓那份备份」
    §敏感文件:「已核实 github.com 返回 Page not found」→ 更新为
      账号被标记 + 仓库被 AUP 清空,该威胁面已消失
    §历史清理的判断已变:当初不做的唯一顾虑(备份会分叉)已随 GitHub 消失,
      filter-repo 现在是可行窗口(代价:SHA 全变、自建 Gitea 需重推)
- `架构总览.md`:§5.1 标注当前实际只用 `git push origin main`(gitee remote 未建);
  §6 #1 改写为「GitHub 已彻底退出备份体系」、#5 由「可删」改为「已删除」;
  末尾「已退役参考」改为「已删除,可翻 git 历史」
- `README.md`:脚本表补上 `backup-bundle.mjs` / `backup-task.cmd`;
  `setup-cnb-remotes.sh` 的说明去掉 GitHub
This commit is contained in:
zqlit committed 2026-10-06 21:11:48 +08:00
1 parent 8abe93d17a
commit af1bbf9c1e
7 files changed
+24 -1284

No files matched your search

+4 -2
View File
@@ -1,11 +1,13 @@
# =====================================================================
# CNB 流水线 | 由 .github/workflows/deploy.yml 迁移(2026-10-04)
# CNB 流水线 | 由原 GitHub Actions 流水线迁移(2026-10-04)
# ★ 原 .github/workflows/ 已于 2026-10-06 随 GitHub 一并删除
# (账号被平台标记 + 仓库被按 AUP 清空),需要查旧实现请翻 git 历史
# =====================================================================
# 为什么迁过来反而更简单:
# 1. 构建节点在国内(腾讯云)→ 又拍云「境内直传」恢复。
# 原版因 runner 在境外(Gitea 在境外 VPS),直传又拍云恒失败被 if:false
# 停用,改用「COS 中转 + 广州机 sync.sh 每分钟轮询」兜底。CNB 让这条
# 整链失去存在理由(见 deploy.yml 第 290 行那段注释的「复活条件」)。
# 整链失去存在理由。
# 2. 不需要 artifact 传递:同一 pipeline 的 stages 顺序执行、共享工作目录,
# public/ 天然传给后续 stage —— 连带 upload/download-artifact 在 Gitea 上
# 那两个坑(v4 不支持 / v3 finalize 500)一起消失。
-54
View File
@@ -1,54 +0,0 @@
name: 备份到阿里云OSS
on:
schedule:
- cron: "0 0 * * 0" # 每周日的00:00执行一次(UTC)
workflow_dispatch: # 手动触发工作流
concurrency:
group: "aliyun-backup"
cancel-in-progress: true
jobs:
backup:
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- name: 下载代码
uses: actions/checkout@v4
with:
submodules: true
fetch-depth: 0
- name: 配置阿里云OSS
uses: manyuanrong/setup-ossutil@v3.0
with:
endpoint: ${{ secrets.OSS_ENDPOINT }}
access-key-id: ${{ secrets.OSS_ACCESS_KEY_ID }}
access-key-secret: ${{ secrets.OSS_ACCESS_KEY_SECRET }}
- name: 增量上传资源(排除 public 文件夹)
run: |
# 使用 find -print0 和 xargs -0 安全处理特殊字符
# 排除 public、.git、node_modules 等不必要的文件
find . \
-path ./public -prune -o \
-path ./.git -prune -o \
-path ./node_modules -prune -o \
-path ./resources -prune -o \
-type f -print0 | xargs -0 -I {} ossutil cp "{}" "oss://${{ secrets.OSS_BUCKET }}/{}" --update
- name: 验证备份完整性
run: |
# 统计本地文件数(排除目录)
LOCAL_COUNT=$(find . -path ./public -prune -o -path ./.git -prune -o -path ./node_modules -prune -o -path ./resources -prune -o -type f | wc -l)
echo "本地文件数: $LOCAL_COUNT"
# 统计 OSS 上的文件数
REMOTE_COUNT=$(ossutil ls oss://${{ secrets.OSS_BUCKET }}/ --recursive | grep -v "Directory:" | wc -l)
echo "OSS 文件数: $REMOTE_COUNT"
echo "## 备份统计" >> $GITHUB_STEP_SUMMARY
echo "- **本地文件数**: $LOCAL_COUNT" >> $GITHUB_STEP_SUMMARY
echo "- **OSS 文件数**: $REMOTE_COUNT" >> $GITHUB_STEP_SUMMARY
-45
View File
@@ -1,45 +0,0 @@
name: Cleanup Artifacts and Cache
on:
workflow_dispatch:
jobs:
cleanup:
runs-on: ubuntu-latest
permissions:
actions: write
contents: read
env:
GH_TOKEN: ${{ github.token }}
steps:
- name: Setup GitHub CLI
run: |
gh extension install actions/gh-actions-cache || true
- name: Delete all artifacts
run: |
echo "🗑️ 正在删除所有 artifacts..."
for artifact in $(gh api repos/${{ github.repository }}/actions/artifacts --paginate | jq -r '.artifacts[].id'); do
echo "删除 artifact: $artifact"
gh api -X DELETE repos/${{ github.repository }}/actions/artifacts/$artifact || true
done
echo "✅ Artifacts 清理完成!"
- name: Delete all caches
run: |
echo "🗑️ 正在删除所有 caches..."
for cache in $(gh api repos/${{ github.repository }}/actions/caches --paginate | jq -r '.actions_caches[].id'); do
echo "删除 cache: $cache"
gh api -X DELETE repos/${{ github.repository }}/actions/caches/$cache || true
done
echo "✅ Caches 清理完成!"
- name: Verify cleanup
run: |
echo "📊 当前存储状态:"
echo "Artifacts:"
gh api repos/${{ github.repository }}/actions/artifacts --paginate | jq -r '.artifacts | length' | xargs -I {} echo " - {} 个 artifacts"
echo "Caches:"
gh api repos/${{ github.repository }}/actions/caches --paginate | jq -r '.actions_caches | length' | xargs -I {} echo " - {} 个 caches"
echo ""
echo "✅ 清理完成!"
File diff suppressed because it is too large. Load diff
+11 -8
View File
@@ -143,7 +143,7 @@ CNB 只替换「构建 + 搬运」这一段,顺带砍掉广州中转机上那
## 四、落地骨架
### 4.0 第一步:仓库迁移与「双远端推送」(CNB 主仓 + GitHub 备份)
### 4.0 第一步:仓库迁移与「双远端推送」(CNB 主仓 + 辅仓备份)
**目标形态**
@@ -167,7 +167,7 @@ gitea → 自建 Gitea ← 暂时留着当只读参考,
| 两个 pushurl 都可用 | ✅ 两个都收到,一次 push 搞定 |
| **第一个失败** | ❌ **git 立即中止,第二个根本不会被推** |
也就是说:**CNB 推失败时,GitHub 那份备份也不会更新** —— 备份的意义就没了。
也就是说:**主仓推失败时,辅仓那份备份也不会更新** —— 备份的意义就没了。
所以拆成两个独立 remote,别名里用 `;` 而不是 `&&`,保证互不阻塞。
**脚本**(已就位,可直接用)
@@ -211,12 +211,12 @@ git config --global credential.helper manager # Windows 的 Git Credential Man
| `GITEA_SECRETS.md` | Gitea 相关凭据说明 | 已跟踪 |
| `content/posts/2024/.../setup-secrets.png` | 疑似密钥配置截图 | 已跟踪 |
**好消息**:已核实 `https://github.com/zqlit/blog` 返回 **Page not found**,仓库不可公开访问
→ **私钥没有被公开暴露**,无需紧急处置。
**关于暴露面**:该仓一直是**私有**的(匿名 API 返回 404)。2026-10-06 账号被平台标记后
仓库更被按 **AUP 合规**清空、本地也移除了 `gh` remote → **这条威胁面已彻底消失**。
**但两件事建议顺手做掉**:
**但两件事仍建议做掉**:
1. **CNB 仓库建成「私有」** —— 这些文件在私有仓里影响可控
1. **CNB 仓库保持「私有」** —— 这些文件在私有仓里影响可控
2. **`git rm --cached` 停止继续跟踪**(历史里的删不掉,但至少不再新增):
```bash
git rm --cached .env GITEA_SECRETS.md write-server/nginx/ssl/privkey.pem write-server/nginx/ssl/fullchain.pem
@@ -226,8 +226,11 @@ git config --global credential.helper manager # Windows 的 Git Credential Man
(另:`.gitignore` 里那条 `write\.env` 是写错的 —— gitignore 中 `\` 是转义符,
它实际匹配文件名 `write.env` 而非 `write/.env`;幸好 `write/.gitignore` 里有 `.env*` 兜住了。)
**不建议现在做历史清理**(`git filter-repo`):会重写 955 个提交、让 GitHub 备份随之分叉,
收益(去掉一个未公开的私钥)远小于风险。正确做法是**轮换凭据**而不是重写历史。
**历史清理(`git filter-repo`)的判断已变**:当初不做的唯一顾虑是「会让备份分叉」——
2026-10-06 GitHub 那份已消失,**这个顾虑没有了**;且离线 bundle 已加密
(见 `架构总览.md` §5.6),不受影响。
所以**现在是彻底抹掉这些文件历史的最佳窗口**。
代价:全部提交 SHA 改变、自建 Gitea 那份需重推。
---
+3 -1
View File
@@ -131,7 +131,9 @@ Hugo + Ying 主题。`hugo.toml` 控站点信息、永久链接、Artalk 地址
| `add_draft_to_hidden.py` | 构建前把 `status: hidden` 转成草稿 | **CI** |
| `refresh_cdn.js` | 刷新多吉云 CDN(零依赖) | **CI** |
| `send_mail.js` | 构建结果邮件通知(零依赖 SMTP) | **CI** |
| `setup-cnb-remotes.sh` | 切换/重建 git 远端(CNB 主仓 + GitHub 备份) | 本机 |
| `setup-cnb-remotes.sh` | 切换/重建 git 远端(CNB 主仓 + 辅仓备份) | 本机 |
| `backup-bundle.mjs` | 整仓 bundle → AES-256-GCM 加密 → WebDAV 传中兴 F50(见 架构总览 §5.6) | 本机/计划任务 |
| `backup-task.cmd` | 上面的计划任务入口(每天 03:30;**内容必须全 ASCII**) | 计划任务 |
| `optimize_images.js` | 图片批量压缩优化 | 本机 |
| `generate_circle_data.js` | 抓友链 RSS 生成朋友圈数据 | 本机 |
| `update_link_lite_json.ps1` | 友链 `links.yaml` → JSON | 本机 |
+6 -4
View File
@@ -112,7 +112,8 @@
### 5.1 推送
```bash
git pushall # 别名 = git push origin main; git push gitee main
git pushall # 别名 = git push origin main; git push gitee main
git push origin main # ← 当前实际只用这条:gitee remote 尚未建立(见 §6 #2)
```
用 `;` 而非 `&&` —— **一段失败不影响另一段**(实测:串联 `pushurl` 时第一个失败会中止后续)。
@@ -272,11 +273,11 @@ git clone blog.bundle blog # 或 git fetch blog.bundle 'refs/*:refs/*'
| # | 项 | 说明 |
|---|---|---|
| 1 | `gh` remote(GitHub) | ✅ **已移除**(2026-10-06)。GitHub 账号被标记、仓库被 AUP 清空,改以 Gitee 为辅仓 |
| 1 | `gh` remote(GitHub) | ✅ **已移除**(2026-10-06)。GitHub 账号被标记、仓库被 AUP 清空 —— **GitHub 已彻底退出本项目的备份体系**:远端、推送别名、发布链路、CI 定义全部清干净。辅仓选型见 #2 |
| 2 | **辅仓选型(未定)** | 当前 `pushall` 已写成 `origin + gitee`,但 `gitee` remote **尚不存在** → 每次 `git pushall` 的第二段会报错(**不影响 CNB 那段**)。两条路:**Gitee**(需先解 §5.3 两条硬约束)或**云效 Codeup**(见 §5.3 对照,零改造,但需绑钉钉或选「地域组织」)。定下后再 `git remote add` |
| 3 | `bin/linux/hugo` 出库 | 83.1MB,超 Gitee 单文件上限。**只有选 Gitee 才必须做**;选 Codeup 则不必(占其命令行 200MB 上限的 41.6%)。要做的话需改为构建时获取(国内镜像 / CNB 对象存储),并同步改 `.cnb.yml` 的 `by:` 字段 |
| 4 | `gitea` remote | 只读保留,稳定几天后 `git remote remove gitea` |
| 5 | GitHub 侧旧 workflow | `.github/workflows/*`(`deploy.yml` 1169 行 + 两个辅助)已随 GitHub 一并退役,可删 |
| 5 | GitHub 侧旧 workflow | ✅ **已删除**(2026-10-06)。整个 `.github/` 目录移除(`deploy.yml` 1169 行 + `aliyun-backup.yml` + `cleanup.yml`)—— **GitHub 已不再是任何环节的依赖**。旧实现可在 git 历史中查 |
| 6 | 令牌 scope | 缺 `repo-cnb-history:r`(读构建日志);补上后 agent 可自行排错 |
| 7 | Gitea 主机 / 广州中转机 | 发布链路已不依赖;是否退役取决于其它用途 |
| 8 | `README.md` | 仍写着旧 GitHub Actions 流程,待更新 |
@@ -295,4 +296,5 @@ git clone blog.bundle blog # 或 git fetch blog.bundle 'refs/*:refs/*'
**证据出处(现行)**:`.cnb.yml`(284 行)、`deploy/Dockerfile`、`bin/linux/hugo`、
`scripts/send_mail.js`、`scripts/refresh_cdn.js`、`scripts/setup-cnb-remotes.sh`、
`scripts/backup-bundle.mjs`、`scripts/backup-task.cmd`。
已退役参考:`.github/workflows/deploy.yml`(1169 行)。
原 GitHub Actions 流水线(`.github/workflows/deploy.yml`,1169 行)已于 2026-10-06 删除,
需要查请翻 git 历史。