README.md (3807B)
1 # `stagit` for GitHub 2 3 GitHub の重厚な Web UI をバイパスし、個人の全 Git リポジトリを完全静的な HTML ポータルとして自動統合・配信するシステムです。 4 5 すべての所有リポジトリ(パブリック / プライベート)を単一のインデックス配下に集約し、ポータル全体を最小限のオーバーヘッドで(Cloudflare Pagesから)配信します。 6 なお、リポジトリにクルデンシャルを放流したことがある人は使うことができないものです。 7 8 ## 特徴 9 10 * 超軽量な静的サイト: `stagit`(Oxalorg フォーク)を用いて、シンプルで高速な Web UI を生成。 11 * 完全自動同期(WIP): 各リポジトリへの `git push` をフック(Webhook / `repository_dispatch`)し、GitHub Actions 上で全自動ビルド・デプロイを完結。 12 * 強固なアクセス制御: 成果物を Cloudflare Pages にデプロイし、Cloudflare Access(Zero Trust)を被せることで非公開コードや研究資産の漏洩を防止。 13 * 巨大差分の自動安全保護: 25 MiB を超えるような巨大な diff / ログページをビルド時に自動検知・サニタイズし、CI/CD パイプラインとデプロイの安定性を確保。(手書きSVGファイルをGitHubにあげた私のせいで作られたセーフティネットです) 14 15 ## アーキテクチャ 16 17 ```text 18 [ Any Repo ] --( git push )--> [ Webhook / repository_dispatch ] 19 │ 20 ▼ 21 [ Portal Repo (Actions) ] 22 │ 23 1. gh CLI で全 bare repo を取得 24 2. stagit / stagit-index をビルド&実行 25 3. 巨大 HTML ファイルのサニタイズ(粛清) 26 4. gh-pages ブランチへ Force Push 27 │ 28 ▼ 29 [ Cloudflare Pages ] 30 │ 31 [ Cloudflare Access ] 32 │ 33 ▼ 34 [ User Terminal ] 35 36 ``` 37 38 ## セットアップ & 設定 39 40 ### 1. 必須 Secrets 41 42 本リポジトリの **Settings > Secrets and variables > Actions** に以下を登録する。 43 44 * `PORTAL_PAT`: 全リポジトリの `git clone --bare` 権限およびポータルへの参照権限を持つ Personal Access Token(`repo` スコープ必須)。 45 46 ### 2. リポジトリ側の自動同期設定 47 48 各個別のリポジトリで `git push` が発生した際、本ポータルの `repository_dispatch` イベント(`type: repo_pushed`)をキックする Webhook / タスクを登録しておく。 49 50 ### 3. デプロイ先(Cloudflare Pages) 51 52 1. Cloudflare Pages で本リポジトリを連携。 53 2. ビルドブランチを **`gh-pages`** に指定(Build command: `ls` / Build output directory: `/`)。 54 3. (お好みで)Cloudflare Access ポリシーを設定し、ポータル全体にログイン認証を適用する。 55 56 --- 57 58 必要に応じて、リポジトリ構成や運用ルールに合わせて適宜調整して使用してください。 59 間違っても、クルデンシャルなんて流してしまわないように。 60 ちなみに過去に一度でもやらかしてると、そのcommitを拾って公開してくるシステムです。 61 後悔はしてるんだから、公開はしてほしくないですよね。全てはやらかした自分の責任ということで(3敗) 62