CI/CD 連携
CI/CD では Personal API Token を secret として渡し、nolto pull で roadmap をキャッシュに取得してから nolto sync を実行します。roadmap の正本はサーバーにあるため、リポジトリへコミットしておくのは nolto.json だけです。
NOLTO_TOKEN を workflow、roadmap、ログへ直接書かないでください。CI の secret manager を使用します。
GitHub Actions
関連文書が main branch に入ったときに同期する例です。
name: Sync Nolto roadmap
on:
push:
branches: [main]
paths:
- "docs/plans/**/*.md"
- "nolto.json"
jobs:
sync:
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
- name: Sync roadmap
env:
NOLTO_TOKEN: ${{ secrets.NOLTO_TOKEN }}
run: |
npx --yes @nolto/cli pull
npx --yes @nolto/cli sync
GitHub の Settings → Secrets and variables → Actions に NOLTO_TOKEN を登録してください。
project binding
CI は nolto.json の projectId を同期先として使用します。
{
"projectId": "550e8400-e29b-41d4-a716-446655440000"
}
このファイルに secret は含まれません。別の project へ誤送信しないよう、pull request で変更をレビューしてください。
競合時の扱い
同期はキャッシュの revision を基準に送ります。サーバー側の変更と衝突した場合は 409 Conflict で失敗します。CI で自動リトライせず、原因を確かめてから再実行してください。
プロジェクトメモリを CI で読む
「設定」→「アプリと API トークン」の「API トークン」で「制限付き」を選び、「メモリ」を「読み取り」にし、対象プロジェクトを選んでトークンを作り、secret の NOLTO_TOKEN に渡して nolto memory pull --scope project,branch を実行します。CI からは読み取りだけを行います(トークンを作った人の user スコープを取り込まないよう、--scope を付けます)。PR の CI などブランチ名が取れない環境では、branch のエントリは索引に載りません。詳しくはプロジェクトメモリをご覧ください。
ベストプラクティス
- CI 専用の token 名と有効期限を設定する
- workflow の権限を
contents: readに限定する nolto syncが非ゼロ終了したら job を失敗させる- token をローテーションしたら古い token を失効する