setup-github

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

GitHub の設定

GitHub 的设置

設定はすべて
gh
で行う。対象リポジトリを
REPO=<owner>/<name>
とする。 どの手順も、同じ値で何度実行しても結果が変わらない。
所有设置均通过
gh
完成。将目标仓库设置为
REPO=<owner>/<name>
。 每个步骤都可以使用相同的值重复执行,结果不会发生变化。

1. アプリ名を変える

1. 更改应用名称

apps/web/app-name.ts
の
APP_NAME
は、テンプレートの名前のままになっている。
APP_NAME
はスタック名とリソース名の接頭辞になる。 状態は Cloudflare アカウントの中でスタック名ごとに保存されるため、同じアカウントを使う別のリポジトリと名前が重なると、互いのリソースを置き換えてしまう。 リポジトリ名に合わせて変える。
apps/web/app-name.ts
中的
APP_NAME
仍然是模板的名称。
APP_NAME
将作为 stack 名称和 resource 名称的前缀。 状态按 Cloudflare 账户中的 stack 名称分别保存,因此,如果同一账户下的其他仓库使用了相同名称,它们的 resources 会相互覆盖。 请将其改为与仓库名称一致。

2. secrets を登録する

2. 注册 secrets

値はユーザーに尋ねる。
sh
gh secret set OPENROUTER_API_KEY --repo "$REPO"
gh secret set CLAUDE_CODE_OAUTH_TOKEN --repo "$REPO"
gh secret set CLOUDFLARE_ACCOUNT_ID --repo "$REPO"
gh secret set CLOUDFLARE_API_TOKEN --repo "$REPO"
名前用途
OPENROUTER_API_KEY
verify ワークフローの oxlint-plugin-decision
CLAUDE_CODE_OAUTH_TOKEN
verify 失敗時に Claude Code が自動修正する
CLOUDFLARE_ACCOUNT_ID
デプロイ先と Alchemy の状態を置くアカウント
CLOUDFLARE_API_TOKEN
同じアカウントの API トークン
Organization のリポジトリなら、Organization の secrets に一度登録すれば、各リポジトリでの登録は要らない。
向用户询问具体值。
sh
gh secret set OPENROUTER_API_KEY --repo "$REPO"
gh secret set CLAUDE_CODE_OAUTH_TOKEN --repo "$REPO"
gh secret set CLOUDFLARE_ACCOUNT_ID --repo "$REPO"
gh secret set CLOUDFLARE_API_TOKEN --repo "$REPO"
名称用途
OPENROUTER_API_KEY
verify workflow 的 oxlint-plugin-decision
CLAUDE_CODE_OAUTH_TOKEN
verify 失败时由 Claude Code 自动修复
CLOUDFLARE_ACCOUNT_ID
存放部署目标及 Alchemy 状态的账户
CLOUDFLARE_API_TOKEN
同一账户的 API token
如果仓库属于 Organization,只需在 Organization 的 secrets 中注册一次,无需在各仓库中分别注册。

3. Actions に PR の作成を許可する

3. 允许 Actions 创建 PR

release-please と自動修正が PR を作るためである。
sh
gh api --method PUT "repos/$REPO/actions/permissions/workflow" \
  -f default_workflow_permissions=read -F can_approve_pull_request_reviews=true
这是因为 release-please 和自动修复流程需要创建 PR。
sh
gh api --method PUT "repos/$REPO/actions/permissions/workflow" \
  -f default_workflow_permissions=read -F can_approve_pull_request_reviews=true

4. PR を作れる人を collaborator に限り、auto-merge を有効にする

4. 将可创建 PR 的人员限制为 collaborator,并启用 auto-merge

sh
gh api --method PATCH "repos/$REPO" -f pull_request_creation_policy=collaborators_only \
  -F allow_auto_merge=true -F allow_update_branch=true
sh
gh api --method PATCH "repos/$REPO" -f pull_request_creation_policy=collaborators_only \
  -F allow_auto_merge=true -F allow_update_branch=true

5. 既定ブランチを保護する

5. 保护默认分支

既定ブランチの削除と force push を禁じ、最新の既定ブランチを取り込んでいない PR のマージを拒むルールセットを置く。 取り込みの検査は、
up-to-date
ワークフローのチェックを必須にし、
strict_required_status_checks_policy
を有効にして行う。 バイパスは置かない。release-please の PR は、Claude が既定ブランチを取り込んで push し、そこで動いた
up-to-date
を通してからマージする。 同じ名前のルールセットがあれば置き換える。
sh
id="$(gh api "repos/$REPO/rulesets" --jq '.[] | select(.name == "protect default branch") | .id')"
gh api --method "$([ -n "$id" ] && echo PUT || echo POST)" "repos/$REPO/rulesets${id:+/$id}" --input - <<'JSON'
{
  "name": "protect default branch",
  "target": "branch",
  "enforcement": "active",
  "conditions": { "ref_name": { "include": ["~DEFAULT_BRANCH"], "exclude": [] } },
  "bypass_actors": [],
  "rules": [
    { "type": "deletion" },
    { "type": "non_fast_forward" },
    {
      "type": "required_status_checks",
      "parameters": {
        "strict_required_status_checks_policy": true,
        "do_not_enforce_on_create": false,
        "required_status_checks": [{ "context": "up-to-date", "integration_id": 15368 }]
      }
    }
  ]
}
JSON
禁止删除默认分支和 force push,并设置 ruleset,拒绝合并没有包含最新默认分支的 PR。 在合并检查中,将
up-to-date
workflow check 设为必需,并启用
strict_required_status_checks_policy
。 不设置任何 bypass。release-please 的 PR 会由 Claude 合并默认分支并 push,通过在该分支上运行的
up-to-date
后再进行合并。 如果存在同名 ruleset,则予以替换。
sh
id="$(gh api "repos/$REPO/rulesets" --jq '.[] | select(.name == "protect default branch") | .id')"
gh api --method "$([ -n "$id" ] && echo PUT || echo POST)" "repos/$REPO/rulesets${id:+/$id}" --input - <<'JSON'
{
  "name": "protect default branch",
  "target": "branch",
  "enforcement": "active",
  "conditions": { "ref_name": { "include": ["~DEFAULT_BRANCH"], "exclude": [] } },
  "bypass_actors": [],
  "rules": [
    { "type": "deletion" },
    { "type": "non_fast_forward" },
    {
      "type": "required_status_checks",
      "parameters": {
        "strict_required_status_checks_policy": true,
        "do_not_enforce_on_create": false,
        "required_status_checks": [{ "context": "up-to-date", "integration_id": 15368 }]
      }
    }
  ]
}
JSON

6. 反映を確かめる

6. 确认设置已生效

gh api "repos/$REPO" --jq '[.pull_request_creation_policy, .allow_auto_merge]'
が
["collaborators_only",true]
を返すことを確かめる。
gh api "repos/$REPO/rules/branches/main" --jq '[.[].type]'
に
required_status_checks
があることも確かめる。
确认
gh api "repos/$REPO" --jq '[.pull_request_creation_policy, .allow_auto_merge]'
返回
["collaborators_only",true]
。 同时确认
gh api "repos/$REPO/rules/branches/main" --jq '[.[].type]'
中包含
required_status_checks
。