CI/CD
GitHub Actionsで自動化されています。.github/workflows/ に定義があります。
パイプライン全体像
Push to main / PR
│
├─ /web/** 変更あり ──── web-ci.yml ──── lint → typecheck → build
│
└─ /api/** 変更あり ──── api-ci-cd.yml ─ test → build → deploy
↑PR時は ↑mainのみ
ここで止まる
Web CI (web-ci.yml)
発火条件: main へのプッシュ、または /web/** を変更したPR
| ジョブ | 内容 |
|---|---|
lint-and-typecheck | ESLint + TypeScript型チェック |
build | Cloudflare Worker向けビルド(成果物の確認) |
PRを出したらこのパイプラインが通ることを確認してからマージしてください。
API CI/CD (api-ci-cd.yml)
発火条件: main へのプッシュ、または /api/** を変更したPR
ジョブ 1: test(PR・mainの両方で実行)
- Python 3.11
- MySQL 8.0(テスト用コンテナ)
- flake8 でコードスタイルチェック
- Black でフォーマットチェック
:::note テストについて
現在 pytest の実行はコメントアウトされています。CI上でテストを通すには api-ci-cd.yml の該当箇所を有効化してください。
:::
ジョブ 2: build(mainのみ)
test完了後に実行- Dockerイメージをビルド(マルチプラットフォーム対応)
- GitHub Container Registry(GHCR)にプッシュ
- タグ:
latest+ コミットSHA
ジョブ 3: deploy(mainのみ)
build完了後に実行- 本番サーバーにSSH接続
docker compose pull && docker compose up -dで更新alembic upgrade headでマイグレーション実行/healthエンドポイントへ5回リトライしてデプロイ確認
Dependabot
.github/dependabot.yml で依存関係の自動更新が設定されています。
| 対象 | 頻度 |
|---|---|
| DevContainers | 週次 |
| npm(web) | 週次 |
| npm(spn) | 週次 |
自動的にPRが作られます。CIが通ったものは適宜マージしてください。
必要なGitHub Secrets
本番デプロイが動くために以下のSecretsをリポジトリに設定する必要があります。
| Secret名 | 内容 |
|---|---|
PRODUCTION_HOST | デプロイ先サーバーのホスト名またはIP |
PRODUCTION_USERNAME | SSH接続ユーザー名 |
PRODUCTION_SSH_KEY | SSH秘密鍵 |
PRODUCTION_URL | ヘルスチェック用のAPI URL |
設定場所: GitHubリポジトリ → Settings → Secrets and variables → Actions