runlot
リファレンスAPI

repos

repos カテゴリの 16 個の API 操作をカバーします。

メソッドパス説明
GET/v1/orgs/{orgSlug}/projects/{projectName}/reposプロジェクトのリポジトリ一覧(runlot repo list)
POST/v1/orgs/{orgSlug}/projects/{projectName}/reposリポジトリを作成します(runlot repo create)
GET/v1/orgs/{orgSlug}/projects/{projectName}/repos/{repoName}単一のリポジトリ
PATCH/v1/orgs/{orgSlug}/projects/{projectName}/repos/{repoName}名前、可視性、またはデフォルトブランチを変更します(runlot repo rename|visibility)
DELETE/v1/orgs/{orgSlug}/projects/{projectName}/repos/{repoName}リポジトリを削除します(runlot repo delete)
GET/v1/orgs/{orgSlug}/projects/{projectName}/repos/{repoName}/ref-updatesRef 履歴(runlot repo history)
GET/v1/me/ssh-keys自分の SSH 公開鍵(runlot key list)
POST/v1/me/ssh-keysSSH 公開鍵を登録します(runlot key add)
DELETE/v1/me/ssh-keys/{keyId}SSH 公開鍵を削除します(runlot key rm)
GET/v1/me/tokens自分のアクセストークン(runlot token list)
POST/v1/me/tokensアクセストークンを発行します(runlot token create)
DELETE/v1/me/tokens/{tokenId}アクセストークンを失効させます(runlot token revoke)
GET/v1/orgs/{orgSlug}/projects/{projectName}/repos/{repoName}/refsブランチとタグ(ダッシュボード閲覧)
GET/v1/orgs/{orgSlug}/projects/{projectName}/repos/{repoName}/tree単一のディレクトリ(ダッシュボード閲覧)
GET/v1/orgs/{orgSlug}/projects/{projectName}/repos/{repoName}/blob単一のファイル(ダッシュボード閲覧)
GET/v1/orgs/{orgSlug}/projects/{projectName}/repos/{repoName}/commitsコミットログ(ダッシュボード閲覧)

GET /v1/orgs/{orgSlug}/projects/{projectName}/repos

viewer 以上が必要です。

リポジトリはプロジェクトに属します(docs/git-hosting.md §19)。認可は組織のロールに由来します — プロジェクト自体にはロールがありません — が、名前の一意性と一覧はプロジェクト単位です。1 つのプロジェクトは複数のリポジトリ(アプリ、API、インフラ)を持つことができます。

operationId listRepos

ステータスコード説明レスポンスボディ
200リポジトリ一覧object
403
404

POST /v1/orgs/{orgSlug}/projects/{projectName}/repos

member 以上が必要です。repo.create として監査記録されます。

ディスク上には何も作成しません(docs/git-hosting.md §10)。行を1つ挿入するだけで、node-gitが初回アクセス時にリポジトリディレクトリを作成します。そのため、gitノードがダウンしていてもこの呼び出しは成功します。

operationId createRepo

リクエストボディ: application/jsonobject

ステータスコード説明レスポンスボディ
201作成されたリポジトリRepo
400
403
404
409このプロジェクトには同じ名前のリポジトリが既に存在します(repo_exists)Error

GET /v1/orgs/{orgSlug}/projects/{projectName}/repos/{repoName}

単一のリポジトリ

operationId getRepo

ステータスコード説明レスポンスボディ
200リポジトリRepo
403
404

PATCH /v1/orgs/{orgSlug}/projects/{projectName}/repos/{repoName}

管理者権限が必要です。repo.updateとして監査されます。

名前の変更はディスクに影響しません(§7.1 — パスに名前は含まれません)。プッシュの実行中に名前が変更されても、そのプッシュは中断されません。

operationId updateRepo

リクエストボディ: application/jsonobject

ステータスコード説明レスポンスボディ
204変更済み
400
403
404
409その名前のリポジトリは既に存在します(repo_exists)Error

DELETE /v1/orgs/{orgSlug}/projects/{projectName}/repos/{repoName}

管理者権限が必要です。repo.deleteとして監査されます。

これはソフトデリートです(§7.4)。URLからは即座に消えますが、ディスク上のコピーは保持期間の経過後に削除されます。不可逆な削除は常に最後に行われ、取り消し可能な猶予期間が必ず設けられます。

operationId deleteRepo

ステータスコード説明レスポンスボディ
204削除済み
403
404

GET /v1/orgs/{orgSlug}/projects/{projectName}/repos/{repoName}/ref-updates

閲覧者以上の権限が必要です。直近200件のエントリです。

これは監査ログのコピーではなく、リポジトリの履歴そのものです(§6.1)。oldは、force-pushで失われたコミットを復元するための唯一の手がかりです。

operationId listRefUpdates

ステータスコード説明レスポンスボディ
200Ref履歴object
403
404

GET /v1/me/ssh-keys

自分の SSH 公開鍵(runlot key list)

operationId listSSHKeys

ステータスコード説明レスポンスボディ
200キー一覧object

POST /v1/me/ssh-keys

フィンガープリントはグローバルに一意です(§5.3)。鍵そのものがアイデンティティであるため、重複するとアイデンティティが曖昧になります — 登録順序にアイデンティティが依存する認証は、認証とは呼べません。既に登録済みの鍵は409 ssh_key_existsを返します。

許可される鍵種別: ed25519、ecdsa-sha2-nistp256/384/521、rsa(2048ビット以上)。DSAは拒否されます。

operationId addSSHKey

リクエストボディ: application/jsonobject

ステータスコード説明レスポンスボディ
201登録された鍵SSHKey
400
409公開鍵は既に登録済みです(ssh_key_exists)Error

DELETE /v1/me/ssh-keys/{keyId}

認可キャッシュをバイパスします(§5.4)。鍵の削除機能があるのは、まさに今すぐブロックしたいからであり、TTLの経過を待たせるとこの機能は意味をなさなくなります。

operationId deleteSSHKey

ステータスコード説明レスポンスボディ
204削除済み
404

GET /v1/me/tokens

平文はどこにも存在しません。保存されるのはハッシュのみです(§5.2)。

operationId listAccessTokens

ステータスコード説明レスポンスボディ
200トークン一覧object

POST /v1/me/tokens

**平文はこのレスポンスで一度だけ返されます。**再度参照することはできません。

gitはHTTPS経由でBasic認証を送信します。ユーザー名は無視され、パスワードフィールド内のトークンのみが参照されます(§5.2)。プレフィックスrunlot_pat_は固定です — 漏洩スキャンを機能させるには、リポジトリやログ、ペーストの中で機械的に検出できる必要があります。

operationId createAccessToken

リクエストボディ: application/jsonobject

ステータスコード説明レスポンスボディ
201発行されたトークン(平文を含む)AccessTokenCreated
400

DELETE /v1/me/tokens/{tokenId}

行を削除する代わりにrevokedAtを設定します — 削除してしまうと「このトークンがどれだけの期間有効だったか」に答える手段がなくなります。認可キャッシュをバイパスします(§5.4)。

operationId revokeAccessToken

ステータスコード説明レスポンスボディ
204破棄済み
404

GET /v1/orgs/{orgSlug}/projects/{projectName}/repos/{repoName}/refs

viewer 以上が必要です。

ブラウジングはダッシュボードセッションで認証され、git転送はPATまたはSSHで認証されます(docs/git-hosting.md §12.2)。両方の認証を1つの経路に同居させると、そのプロセスはセッションCookieも扱う必要が生じ、CSRFの影響範囲がリポジトリへの書き込みにまで広がってしまいます。そのためダッシュボードはこのパスを経由し、cp-publicがnode-gitの内部読み取り経路に中継します — 認可はここで完結します。

operationId getRepoRefs

ステータスコード説明レスポンスボディ
200Refの一覧RepoRefs
403
404
503gitノードが存在しないか到達できません(git_unavailablegit_unreachable)Error

GET /v1/orgs/{orgSlug}/projects/{projectName}/repos/{repoName}/tree

閲覧者以上の権限が必要です。pathが空の場合はルートを指します。

1000件で切り詰められます — 上限のないブラウジングは、単一のリポジトリがダッシュボードを停止させる手段になり得ます。切り詰められた場合、truncatedはtrueになります。

ツリーの外に出るパス(a/../..)は404を返します。..を黙って取り除くと、要求されたものとは異なるパスが返されてしまいます。

operationId getRepoTree

ステータスコード説明レスポンスボディ
200ディレクトリRepoTree
403
404リポジトリ、ref、またはパスが存在しません(no_refno_path)Error

GET /v1/orgs/{orgSlug}/projects/{projectName}/repos/{repoName}/blob

viewer 以上が必要です。

1 MiBを超えるコンテンツは含まれません(tooLarge)。読み込んでから切り詰めるのではなく、そもそも読み込みません — 一度読み込んでしまえば、その時点でメモリは既に消費されています。バイナリファイルもコンテンツを含みません(binary)。

operationId getRepoBlob

ステータスコード説明レスポンスボディ
200ファイルRepoBlob
403
404リポジトリ、ref、またはパスが存在しません(no_refno_path)Error

GET /v1/orgs/{orgSlug}/projects/{projectName}/repos/{repoName}/commits

閲覧者以上の権限が必要です。デフォルトは200件、最大200件です。

operationId getRepoCommits

パラメーター場所必須説明
limitquery不可integer
ステータスコード説明レスポンスボディ
200コミット一覧object
403
404

このページの目次