Skip to content

Commit 0b31f38

Browse files
authored
docs(infisical): 说明独立 OAuth App 是正常的 (#305)
* ci(sync-uuid): 迁移到 SSH 进自建服务器跑脚本 DB 从 Neon 迁到自建后只绑 127.0.0.1:5432,GH runner 直连不通。最干净的 方案是 SSH 进服务器跑——服务器上有完整 repo clone + 本机能到 PG + 已有 github ssh key 可以 push 回来。 - 用 appleboy/ssh-action@v1.2.0,三件套 secrets:SERVER_HOST / SERVER_USER / SERVER_SSH_KEY - 脚本流程:fetch + reset --hard 到触发 commit → pnpm install + prisma generate → uuid.mjs → backfill-contributors.mjs → 只有 diff 时 commit [skip ci] + push - set -euo pipefail 保证任何一步失败整个 action 失败 - command_timeout 15m 给 backfill 足够余量 配套一次性准备(已完成,不在 CI 里): - 服务器 ~/.ssh/authorized_keys 加 gh-actions-leaderboard 公钥 - ~/involution-hell-project/frontend/.env 的 DATABASE_URL 改指 127.0.0.1 注:scripts/generate-leaderboard.mjs 还在 package.json 的 prebuild 钩子里, Vercel 部署时仍会尝试跑。该问题独立处理:要么挪到本 workflow,要么让 Vercel build 时优雅降级(失败跳过用上次提交的 JSON)。 * docs(infisical): 说明 Infisical 用独立 OAuth App 是正常的 避免贡献者以为 "刚授权过 InvolutionHell 怎么又要授权一次" 是钓鱼。 - DeveloperToolsIfOwner 按钮 title 告知:首次进入 GitHub 会要再授权一次, 这是正常的——Infisical 是独立 App,授权页显示 owned by InvolutionHell 和相同 logo 可以辨认 - CONTRIBUTING 服务一览表的 "登录方式" 列更新为 "独立 App InvolutionHell Infisical" - CONTRIBUTING 申请流程第 2 步展开:解释 scope / token 完全隔离、如何确认 不是钓鱼 后端设计选择:不复用主站 OAuth App。classic OAuth App 只允许单 callback URL, 硬复用要升级成 GitHub App 触发 92 用户集体重授权。独立 App 是 cleanest 方案。
1 parent cce5335 commit 0b31f38

3 files changed

Lines changed: 55 additions & 52 deletions

File tree

.github/workflows/sync-uuid.yml

Lines changed: 46 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,13 @@
11
name: Docs Backfill (on docs changes)
22

3+
# 2026-04-17 起从"GH runner 直连 Neon"改为"SSH 进自建服务器跑脚本"。
4+
# 原因:DB 从 Neon 迁到服务器自建 PG 后只绑 127.0.0.1:5432,不对公网暴露。
5+
# 设计权衡见 wiki Frontend-Auth-And-Admin / 后端 docs/database.md。
6+
#
7+
# Secrets 依赖:
8+
# SERVER_HOST / SERVER_USER / SERVER_SSH_KEY — SSH 远程登录三件套
9+
# (私钥生成方式 + 公钥已写入服务器 ~/.ssh/authorized_keys,见仓库 wiki)
10+
311
on:
412
push:
513
branches:
@@ -21,57 +29,52 @@ concurrency:
2129

2230
jobs:
2331
backfill:
24-
# 防止 fork、限定 main、并避免机器人循环
32+
# 防止 fork、限定 main / feat/contributor、并避免机器人循环
2533
if:
2634
(github.ref == 'refs/heads/main' || github.ref == 'refs/heads/feat/contributor') &&
2735
github.actor != 'github-actions[bot]'
2836
runs-on: ubuntu-latest
29-
permissions:
30-
contents: write
31-
env:
32-
DATABASE_URL: ${{ secrets.DATABASE_URL }}
33-
GITHUB_TOKEN: ${{ secrets.GH_PAT }} # 供脚本调用 GitHub API 提升速率
34-
DOCS_DIR: app/docs
35-
3637
steps:
37-
- uses: actions/checkout@v4
38-
39-
# Enable corepack to ensure the exact pnpm version from package.json is used
40-
- name: Enable Corepack
41-
run: corepack enable
42-
43-
- uses: pnpm/action-setup@v4
44-
45-
- uses: actions/setup-node@v4
38+
- name: Run backfill on server via SSH
39+
uses: appleboy/ssh-action@v1.2.0
4640
with:
47-
node-version: 22
48-
cache: "pnpm" # 顺便启用 pnpm 缓存,加速
41+
host: ${{ secrets.SERVER_HOST }}
42+
username: ${{ secrets.SERVER_USER }}
43+
key: ${{ secrets.SERVER_SSH_KEY }}
44+
# 超时 15 分钟:backfill-contributors 要遍历所有 docs + 拉 GitHub API,
45+
# 大改动一次跑 3-5 分钟,留足余量
46+
command_timeout: 15m
47+
# set -euo pipefail + BRANCH 透传,脚本内任何一步失败都让整个 action fail
48+
envs: GITHUB_REF_NAME
49+
script: |
50+
set -euo pipefail
51+
BRANCH="${GITHUB_REF_NAME:-main}"
52+
cd /home/ubuntu/involution-hell-project/frontend
4953
50-
# Verify pnpm version matches package.json packageManager field
51-
- name: Check pnpm version
52-
run: node scripts/check-pnpm-version.mjs
54+
# 1. 同步仓库到触发本次 workflow 的 commit
55+
git fetch --prune origin
56+
git checkout "$BRANCH"
57+
git reset --hard "origin/$BRANCH"
5358
54-
- name: Install deps
55-
run: pnpm install --frozen-lockfile
59+
# 2. 依赖和 Prisma client(frontend .env 里 DATABASE_URL 已指本地 PG)
60+
set -a && . ./.env && set +a
61+
pnpm install --frozen-lockfile
62+
pnpm prisma generate
5663
57-
- name: Generate Prisma Client
58-
run: pnpm prisma generate
64+
# 3. 给 docs 补 docId frontmatter(幂等;没新增就啥都不改)
65+
pnpm exec node scripts/uuid.mjs
5966
60-
- name: Ensure docId frontmatter
61-
run: pnpm exec node scripts/uuid.mjs
67+
# 4. 回填 contributors 并写 generated/doc-contributors.json
68+
pnpm exec tsx scripts/backfill-contributors.mjs
6269
63-
- name: Backfill contributors & sync DB
64-
run: pnpm exec tsx scripts/backfill-contributors.mjs
65-
66-
- name: Auto-commit doc metadata (if any)
67-
uses: stefanzweifel/git-auto-commit-action@v5
68-
with:
69-
commit_message: "chore(docs): sync doc metadata [skip ci]" # ← 防循环
70-
file_pattern: "app/docs/**/*.md app/docs/**/*.mdx generated/doc-contributors.json"
71-
72-
- name: Upload snapshot JSON
73-
uses: actions/upload-artifact@v4
74-
with:
75-
name: doc-contributors-snapshot
76-
path: generated/doc-contributors.json
77-
if-no-files-found: ignore
70+
# 5. 自动提交 —— 仅当 MDX / JSON 有实际变动时才推
71+
if ! git diff --quiet -- 'app/docs/**/*.md' 'app/docs/**/*.mdx' generated/doc-contributors.json; then
72+
git config user.name "github-actions[bot]"
73+
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
74+
git add 'app/docs/**/*.md' 'app/docs/**/*.mdx' generated/doc-contributors.json
75+
# [skip ci] 防止自提交再次触发本 workflow 死循环
76+
git commit -m "chore(docs): sync doc metadata [skip ci]"
77+
git push origin "$BRANCH"
78+
else
79+
echo "No metadata changes to commit."
80+
fi

CONTRIBUTING.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -355,18 +355,18 @@ pnpm postinstall # 同步必要的 Husky/Fumadocs 配置
355355

356356
### 服务一览
357357

358-
| 用途 | URL | 谁能进 | 登录方式 |
359-
| ------------ | ----------------------------------------------- | --------------------------------------- | --------------------------------------- |
360-
| 主站 | `https://involutionhell.com` | 所有登录用户 | GitHub OAuth |
361-
| 后端 API | `https://api.involutionhell.com` | — (内部调用) | sa-token (cookie/header) |
362-
| **密钥管理** | `https://secrets.involutionhell.com` | **所有登录协作者**,按 project 权限查看 | GitHub OAuth(复用主站 App |
363-
| 数据库管理 | `https://api.involutionhell.com/admin/pgadmin/` | **仅 admin** | 主站 cookie 自动通过 Caddy forward_auth |
364-
| 网站分析 | `https://umami.involutionhell.com` | **仅 admin** | 本地 umami 账号 |
358+
| 用途 | URL | 谁能进 | 登录方式 |
359+
| ------------ | ----------------------------------------------- | --------------------------------------- | ----------------------------------------------------------------------- |
360+
| 主站 | `https://involutionhell.com` | 所有登录用户 | GitHub OAuth |
361+
| 后端 API | `https://api.involutionhell.com` | — (内部调用) | sa-token (cookie/header) |
362+
| **密钥管理** | `https://secrets.involutionhell.com` | **所有登录协作者**,按 project 权限查看 | GitHub OAuth(独立 App "InvolutionHell Infisical",首次进入需授权一次) |
363+
| 数据库管理 | `https://api.involutionhell.com/admin/pgadmin/` | **仅 admin** | 主站 cookie 自动通过 Caddy forward_auth |
364+
| 网站分析 | `https://umami.involutionhell.com` | **仅 admin** | 本地 umami 账号 |
365365

366366
### 怎么拿到 admin / 密钥权限
367367

368368
1. **申请 admin 角色**:现有 superadmin 在 `/admin/users` 页面勾选即可授予(产品规则:superadmin 本身不能通过 API 变动)
369-
2. **申请 Infisical 项目访问**:登录 `secrets.involutionhell.com` 后(GitHub OAuth 自动建账号),联系现有 admin 加到对应 project。Infisical 内部按 environment 分 `dev` / `prod` / `shared`
369+
2. **申请 Infisical 项目访问**:登录 `secrets.involutionhell.com` 时会跳 GitHub 让你授权一个名叫 **InvolutionHell Infisical** 的 App —— 这是正常的。虽然你之前授权过主站的 "InvolutionHell" App,但 Infisical 是独立 OAuth App(org 下两个 App 共用同一个 GitHub 账号,但 scope / token 完全隔离,一个撤销不影响另一个)。授权页能看到 owned by InvolutionHell 和相同 logo,确认后点 Authorize 即可。进去后账号自动按 GitHub 身份建好,联系现有 admin 加到对应 project。Infisical 内部按 environment 分 `dev` / `prod` / `shared`
370370
3. **不要自己手动 INSERT `user_accounts` 表挂 admin 角色** —— OAuth 登录按 `github_<id>` 匹配 username,手工 insert 的人类 username 行永远是孤儿,用户登录后会另开一行丢 admin。历史上有人踩过
371371

372372
### `.env` 文件规则

app/u/[username]/DeveloperToolsIfOwner.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ export function DeveloperToolsIfOwner({ ownerGithubId, ownerUsername }: Props) {
4141
rel="noopener noreferrer"
4242
className="font-mono text-[11px] uppercase tracking-widest px-2 py-1 border border-[var(--foreground)] text-[var(--foreground)] hover:bg-[var(--foreground)] hover:text-[var(--background)] transition-colors font-bold"
4343
data-umami-event="profile_devtools_secrets_click"
44-
title="Infisical 密钥管理GitHub OAuth 登录,按 project 权限查看"
44+
title="Infisical 密钥管理 — 首次进入 GitHub 会要你再授权一次,这是正常的:Infisical 和主站是两个独立的 OAuth App(授权页会显示 owned by InvolutionHell 和相同 logo)。登录后按 project 权限查看"
4545
>
4646
密钥管理 ↗
4747
</Link>

0 commit comments

Comments
 (0)