CI/CD 連携
Nolto の REST API を使って、CI/CD パイプラインからプランの登録やステータス更新、フェーズのテスト結果・最終レビュー結果の記録を自動化できます。
CI/CD では Personal API Token (nolto_user_*) を使ってください。
OAuth 2.1 はブラウザでの承認が必要なため、ヘッドレス環境には適しません。
GitHub Actions: プランの自動登録
リポジトリ内の Markdown ファイルをプランとして自動登録する例です。
name: Register Plan
on:
push:
branches: [main]
paths:
- 'plans/**/*.md'
jobs:
register:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Register plans
env:
VIDOCS_TOKEN: ${{ secrets.VIDOCS_TOKEN }}
PROJECT_ID: ${{ secrets.VIDOCS_PROJECT_ID }}
run: |
for file in plans/*.md; do
[ -f "$file" ] || continue
TITLE=$(head -1 "$file" | sed 's/^#\s*//')
CONTENT=$(cat "$file")
curl -s -X POST \
-H "Authorization: Bearer $VIDOCS_TOKEN" \
-H "Content-Type: application/json" \
-d "$(jq -n \
--arg title "$TITLE" \
--arg content "$CONTENT" \
--arg path "$file" \
'{
plan: { title: $title, content: $content, status: "not_started" },
source: { kind: "file", path: $path }
}')" \
"https://nolto.app/api/projects/$PROJECT_ID/plans"
done
シークレットの設定
GitHub リポジトリの Settings → Secrets and variables → Actions で以下を設定します:
VIDOCS_TOKEN— Personal API TokenVIDOCS_PROJECT_ID— 対象プロジェクトの UUID
GitHub Actions: デプロイ後のステータス更新
デプロイ成功時にプランのステータスを done に更新する例です。
name: Deploy and Update Plan
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
# ... デプロイステップ ...
- name: Update plan status
if: success()
env:
VIDOCS_TOKEN: ${{ secrets.VIDOCS_TOKEN }}
PROJECT_ID: ${{ secrets.VIDOCS_PROJECT_ID }}
PLAN_ID: ${{ vars.CURRENT_PLAN_ID }}
run: |
curl -s -X POST \
-H "Authorization: Bearer $VIDOCS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"status": "done", "message": "CI/CD でデプロイ完了"}' \
"https://nolto.app/api/projects/$PROJECT_ID/plans/$PLAN_ID/status"
GitHub Actions: フェーズのテスト結果を記録
テストジョブの結果を、対応するフェーズのテスト結果として記録する例です。合否を verdict に渡します(追記式なので再実行のたびにラウンドが増えます)。
name: Test and Record Result
on:
pull_request:
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run tests
id: tests
run: npm test
- name: Record phase test result
if: always()
env:
VIDOCS_TOKEN: ${{ secrets.VIDOCS_TOKEN }}
PROJECT_ID: ${{ secrets.VIDOCS_PROJECT_ID }}
PLAN_ID: ${{ vars.CURRENT_PLAN_ID }}
PHASE_ID: ${{ vars.CURRENT_PHASE_ID }}
run: |
VERDICT=$([ "${{ steps.tests.outcome }}" = "success" ] && echo "passed" || echo "failed")
curl -s -X POST \
-H "Authorization: Bearer $VIDOCS_TOKEN" \
-H "Content-Type: application/json" \
-d "$(jq -n --arg v "$VERDICT" \
'{ verdict: $v, summary: "CI でテストを実行" }')" \
"https://nolto.app/api/projects/$PROJECT_ID/plans/$PLAN_ID/phases/$PHASE_ID/test-results"
if: always() で、テストが失敗しても結果(failed)を記録します。round を省略すると自動的に次のラウンド番号が割り当てられます。verdict には passed / failed / skipped を渡せます。
GitHub Actions: 最終レビュー結果(GO / NO-GO)を記録
リリース判定を記録する例です。手動承認(environment protection rules)を通過したら go を、失敗時に no_go を記録します。
- name: Record final review
if: always()
env:
VIDOCS_TOKEN: ${{ secrets.VIDOCS_TOKEN }}
PROJECT_ID: ${{ secrets.VIDOCS_PROJECT_ID }}
PLAN_ID: ${{ vars.CURRENT_PLAN_ID }}
run: |
VERDICT=$([ "${{ job.status }}" = "success" ] && echo "go" || echo "no_go")
curl -s -X POST \
-H "Authorization: Bearer $VIDOCS_TOKEN" \
-H "Content-Type: application/json" \
-d "$(jq -n --arg v "$VERDICT" \
'{ verdict: $v, summary: "リリース判定" }')" \
"https://nolto.app/api/projects/$PROJECT_ID/plans/$PLAN_ID/reviews"
ベストプラクティス
- トークンのスコープ: CI 用のトークンには分かりやすい名前(例:
github-actions-deploy)を付け、必要に応じて有効期限を設定してください。 - エラーハンドリング: API が
4xx/5xxを返した場合のハンドリングを追加してください。特に429(レート制限)はRetry-Afterヘッダーに従ってリトライするのが推奨です。 - 冪等性: 同じプランを重複登録しないよう、
source.hashにファイルの SHA256 ハッシュを渡すことを検討してください。