🔥 Okibi

yuki / okibi

焚き火の仲間だけの自前Gitホスティング(このサイト自身)

git clone https://okibi.fly.dev/yuki/okibi.git

okibi / tasks / todo.md

# Okibi — 焚き火(atsm)会員だけの自前 Git ホスティング

> 言葉が、残る。焚き火の仲間だけが安全に push できる、モダンな自作 GitHub。
> Stack: Rust + axum + sqlx(SQLite) + maud。git smart-HTTP は git-http-backend(CGI) に委譲。

## 決定事項(2026-06-10)
- 本体: 完全自作(Rust/axum)
- 認証: 自前 magic-link(メール)+ **atsm 会員 allowlist** ゲート
  - 理由: atsm.wtf に OIDC 無し / members API は表示名のみ → 純正 SSO は kenny 側依存。allowlist で疎結合に。
  - upgrade path: atsm.wtf が /api/me or OIDC を出したら差し替え
- git: smart-HTTP を `git-http-backend` に委譲(pack 自前実装しない)
- CI: v1 は `.okibi/ci.yml` を push 時に実行(最小ランナー)。隔離は後追い。
- ホスト: Fly.io + Volume(`/data`)

## フェーズ
- [x] P0 scaffold: Cargo + axum + health + SQLite 初期化
- [ ] P1 認証: magic-link 発行/検証 + セッション + atsm allowlist + PAT 発行
- [ ] P2 リポ: 作成/一覧 + ディスクに bare repo init
- [ ] P3 **git smart-HTTP push/pull**(CGI bridge + 認証ゲート)★コア
- [ ] P4 Web UI: リポ一覧 / ファイルツリー / blob 表示(モダン最小)
- [ ] P5 CI: post-receive → ci.yml 実行 → ログ保存/表示
- [ ] P6 Fly デプロイ(git push → Actions、Volume、Resend secret)

## v1 完了の定義(検証)
1. allowlist のメールで magic-link ログインできる / 非会員は弾かれる
2. ブラウザでリポ作成 → PAT 発行
3. `git clone https://<handle>:<PAT>@okibi/<handle>/<repo>.git` → commit → push → pull が通る
4. push した内容がブラウザのファイルツリーで見える
5. `.okibi/ci.yml` の script が走りログが残る

## ローカル検証コマンド
```
cargo build
cargo run                       # :8787
# 別シェルで git push/pull E2E(scripts/e2e.sh)
```