ctfd-auto-deploy
├── .github
│ └── workflows
│ ├── deploy_challenges.yml # GitHub Actionsワークフロー
│ └── lint_challeges.yml # 問題形式チェック
├── challenges
│ ├── category1
│ │ └── challenge1
│ │ ├── challenge.yml # 問題設定ファイル
│ │ └── files/
│ │ └── example.png # 添付ファイル
│ └── category2
│ ├── challenge2/
│ └── challenge3/
│ └── challenge.yml
|
├── requirements.txt # Python依存関係
├── pull_request_template.md # PRテンプレート
└── README.md
- 管理用CTFdに Adminアカウント でログイン
- プロフィール → アクセストークン を発行
- GitHub の Secrets に以下を登録
→https://github.com/ユーザー名/リポジトリ名/settings/secrets/actions
| Secret名 | 説明 |
|---|---|
CTFD_URL |
CTFdのURL(例: https://ctf.example.com) |
CTFD_ACCESS_TOKEN |
Admin APIトークン(例: ctfd_abc123...) |
⚠️ 名前のスペルミスに注意! → 正しくないとCIが失敗します。
このテンプレートは自分のCTFチャレンジを管理・デプロイするためのテンプレートです。Forkせずに、自分で新しいリポジトリを作成して使ってください。
-
GitHubで空のパブリック/プライベートリポジトリを作成します(例:
my-ctf-challenges) -
このページ上部の「Code」→「Download ZIP」でテンプレートをダウンロードします
-
ダウンロードしたZIPを解凍し、先ほど作ったリポジトリをクローンした作業フォルダに中身をコピーします:
git clone https://github.com/あなたのユーザー名/my-ctf-challenges.git
cd my-ctf-challenges
# zipで解凍した中身をここに上書きで配置(.git/は上書きしない)
- 変更をコミットして初回Pushします:
git add .
git commit -m "add ctfd-auto-deploy"
git push origin main
- GitHub Secrets に以下を登録(管理者手順参照)
CTFD_URLCTFD_ACCESS_TOKEN
-
challenges/の中からカテゴリを選ぶ(なければ作成)
例:challenges/OSINT -
カテゴリディレクトリ内に問題用ディレクトリを作成
例:challenges/OSINT/Fastest_Car -
challenge.ymlを追加
例:challenges/OSINT/Fastest_Car/challenge.yml
→ カテゴリ直下のテンプレchallenge.ymlをコピーすると楽です -
添付ファイルがある場合は
files/を作って、challenge.ymlのfiles:にパスを指定
例:Fastest_Car/files/Car.png
- GitHub Actions が push/pull request をトリガーに自動で CTFd にアップロードします
.ymlも.yamlも動くとは思いますが、.ymlを推奨(動作保証外の挙動が起こる可能性あり)challenges/**/challenge.ymlの階層以外は無視されるので、正しい構造に注意- カテゴリ直下にテンプレとして
challenge.ymlを置いておくと問題作成が楽になる - 例:
challenges/OSINT/challenge.yml→challenges/OSINT/Fastest_Car/にコピーして編集
- テスト用のチャレンジテンプレートを
test/などに作っておくと、問題作成者がコピペしやすい ctfcliの詳細は ctfcli公式ドキュメント を参照してください
バグ報告・機能提案・プルリクなんでも歓迎です!