Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
83 changes: 0 additions & 83 deletions .github/workflows/cms-content-pr.yml

This file was deleted.

3 changes: 3 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,9 @@
- 翻訳ファイルは `src/i18n/translations/{locale}.json` に集約されている。日本語 source のキー構造と翻訳側のキー構造を揃える。
- サイト文言を CMS から編集可能にする場合は `public/admin/config.yml` も更新し、対応する JSON key とフィールド名を揃える。
- CMS の日時、キャンペーン、告知、募集枠など期間制御が必要な情報は、表示開始と表示終了を CMS から扱える設計にする。
- CMS backend の publication branch は `main` にし、`publish_mode: editorial_workflow` で短命な CMS branch と PR を作らせる。
- `cms-content` のような恒久的な CMS 投稿受け皿 branch は使わない。
- CMS PR は merge commit または rebase merge で `main` に入れる。squash merge では `cms: ...` commit subject が失われ、翻訳 PR task の自動検出対象外になる場合がある。
- 翻訳作業だけを依頼された場合は、日本語 source を勝手に変更しない。placeholder、URL、コード風 token、製品名は壊さない。
- ブログやニュースを増やす場合は、タグ、関連記事、内部リンク、CTA、Pagefind への影響を確認する。

Expand Down
15 changes: 9 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -108,11 +108,15 @@ src/

#### 本番 CMS の保存と PR 反映

- 本番 CMS の保存先は `cms-content` ブランチです。`main` は protected branch のため、CMS から直接 commit しません。
- `cms-content` に保存されると `.github/workflows/cms-content-pr.yml` が `main` 向けの「CMS編集内容を反映」PRを作成します。既に open PR がある場合は二重作成しません。
- 初回セットアップやブランチ再作成が必要な場合は、`main` の最新状態から `git fetch origin main`、`git push origin origin/main:refs/heads/cms-content` で `cms-content` を用意します。
- 本番ソースの正は `main` です。Cloudflare Pages の production deploy 元も GitHub 連携の `main` にします。
- Sveltia CMS は `backend.branch: main` と `publish_mode: editorial_workflow` で運用します。
- CMS 保存時は `cms/...` のような短命 branch と PR が作られ、`main` に直接 commit しません。
- 恒久的な `cms-content` 投稿受け皿 branch は使いません。
- CMS PR は通常の merge commit または rebase merge でマージします。squash merge では `cms: ...` commit subject が失われ、翻訳 PR task の自動検出対象外になる場合があります。
- GitHub Actions の `GITHUB_TOKEN` で PR 作成が許可されていない環境では、Repository settings の Actions 権限を見直すか、PR 作成権限を持つ `CMS_PR_TOKEN` secret を設定します。
- CMS PR が `main` に merge されると、Cloudflare Pages が GitHub `main` push を受けて production deploy します。
- 既存の remote `cms-content` branch は、この変更の反映後に未反映差分がないことを確認して削除候補にします。

運用判断は [docs/cms-write-workflow.md](docs/cms-write-workflow.md) を参照してください。

#### キャンペーン告知の運用

Expand Down Expand Up @@ -149,7 +153,7 @@ author: 'author-id'
Sveltia CMS は日本語ソース記事と日本語の固定ページ文言を編集できます。多言語記事本文とページ文言は GitHub Copilot coding agent が作成する Pull Request ベースで管理します。PR 量を抑えるため、push 連動の対象は Sveltia CMS の `cms: ...` commit だけに限定します。

1. 日本語ソースを Sveltia CMS で更新する
2. CMS commit が `cms-content` ブランチに保存され、GitHub Actions が `main` 向け PR を作成する
2. editorial workflow が短命な CMS branch と `main` 向け PR を作成する
3. CMS PR を `main` にマージすると、CMS commit の本文差分または日本語文言 key 差分だけを GitHub Actions が検出する
4. Copilot coding agent が該当差分だけに沿って `src/content/blog/{locale}/` または `src/i18n/translations/{locale}.json` を更新する
5. 完了時に `[translation]` PR が ready for review になったら、内容とビルドを確認してから必要に応じて手動マージする
Expand All @@ -159,7 +163,6 @@ Sveltia CMS は日本語ソース記事と日本語の固定ページ文言を
### 自動 PR task workflow

- Workflow: `.github/workflows/create-translation-prs.yml`
- CMS PR Workflow: `.github/workflows/cms-content-pr.yml`
- Script: `scripts/create-translation-prs.mjs`
- Trigger: `src/content/blog/*.md` または `src/i18n/source/ja/**/*.json` の `main` 反映時。ただし自動実行は Sveltia CMS の `cms: ...` commit のみ
- CMS commit と通常 commit が同じ push に混在した場合は、自動翻訳 PR task を作成せず workflow を止める。CMS PR の merge commit はこの判定から除外する
Expand Down
27 changes: 27 additions & 0 deletions docs/cms-write-workflow.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# CMS 書き込み branch 運用

最終確認日: 2026-06-19

## 方針

`main` は本番ソースの唯一の正にします。Cloudflare Pages の production deploy 元も GitHub 連携の `main` だけにします。

Sveltia CMS は `backend.branch: main` と `publish_mode: editorial_workflow` で運用します。CMS 保存は恒久的な投稿受け皿 branch ではなく、短命な `cms/...` branch と PR として扱います。

`cms-content` は恒久運用しません。既存 remote branch は、この変更が `main` に反映され、未反映差分や open PR がないことを確認してから削除候補にします。

## 現行フロー

1. Sveltia CMS が `main` を publication branch として読み込む。
2. CMS 保存時、editorial workflow が短命な CMS branch と PR を作る。
3. CMS PR を merge commit または rebase merge で `main` に入れる。
4. `main` push を受けて Cloudflare Pages が production deploy する。
5. `src/content/blog/*.md` または `src/i18n/source/ja/**/*.json` の CMS commit を検出した場合、翻訳 PR task が作成される。

CMS PR は squash merge しません。squash merge では `cms: ...` commit subject が失われ、翻訳 PR task の自動検出対象外になる場合があります。

## 残る制約

現在の Sveltia CMS は GitHub OAuth 経由で保存します。editorial workflow により `main` 直 commit は避けられますが、PR branch 作成の actor は編集者個人の GitHub 権限です。

編集者個人ではなく専用 bot / GitHub App / backend actor に完全移行したい場合は、CMS 保存を受ける backend を別途実装し、その backend が content-only PR を作る形にします。
4 changes: 3 additions & 1 deletion public/admin/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
backend:
name: github
repo: acecore-systems/acecore-net
branch: cms-content
branch: main
base_url: https://sveltia-cms-auth.sparkling-tree-7cef.workers.dev
auth_methods: [oauth]
commit_messages:
Expand All @@ -13,6 +13,8 @@ backend:
uploadMedia: 'cms: upload "{{path}}"'
deleteMedia: 'cms: delete media "{{path}}"'

publish_mode: editorial_workflow

media_folder: /public/uploads
public_folder: /uploads

Expand Down
4 changes: 2 additions & 2 deletions scripts/write-cms-runtime-config.mjs
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
import { mkdir, writeFile } from 'node:fs/promises'
import { dirname, resolve } from 'node:path'

const defaultCmsBranch = 'cms-content'
const defaultCmsBranch = 'main'
const deploymentBranch =
process.env.CF_PAGES_BRANCH ||
process.env.GITHUB_HEAD_REF ||
process.env.GITHUB_REF_NAME ||
process.env.BRANCH
const cmsBranch =
process.env.CMS_CONTENT_BRANCH ||
process.env.CMS_BACKEND_BRANCH ||
(deploymentBranch && deploymentBranch !== 'main'
? deploymentBranch
: defaultCmsBranch)
Expand Down