Skip to content

Client repository access

Settings → Oduflow → Client Download Repositories contains one GitHub owner/repository per line. data/github_repositories.xml initializes it to oduflow/oduflow-platform. The public oduist/oduflow repository needs no deploy key and is not included in this list. The data uses noupdate so module upgrades preserve administrator edits. New plans snapshot this list.

New client deployments use an SSH deploy key with write access for their own repository and separate read-only deploy keys for the configured repositories. GitHub requires a distinct deploy key for each repository. Shared repository keys belong to the commercial customer within the control company and are reused across that customer's instances. The control GitHub token needs permission to manage deploy keys in every configured repository. It is never sent to new SSH-based clients. GitHub API operations such as creating issues or pull requests still need a separately configured GitHub API credential; Git fetch/clone/push use the managed SSH keys.

Key pairs are encrypted before the provisioning queue starts. External POSTs use durable dispatch receipts and reconcile matching key material, title, permissions, repository ID and credential fingerprint before reuse. An unknown POST that cannot be found is not retried automatically. Resolve its outcome before resuming provisioning or deletion.

Salt installs the keys on the verified client volume for root (Oduflow) and Paseo, with private permissions and suppressed content diffs. System Git URL rewrites select the correct SSH identity for HTTPS and SSH repository URLs ending in .git. SSH verifies GitHub against the pinned public host keys from https://api.github.com/meta; it does not accept arbitrary host keys.

Deleting an instance deletes its own repository and key. Shared keys remain until deletion of the customer's last prepared instance, including instances whose older plans have no download grants. Draft records do not hold access. Revocation runs in the deletion queue before encrypted credentials are erased; it verifies key absence on a later poll. Changing the configuration list does not lose previously issued keys: they are still revoked on final deletion. Prepared instances and grant history remain for audit.

Existing deployment snapshots and HTTPS credentials are preserved. Existing clients using manually supplied broad GitHub tokens need an explicit credential migration; deleting new deploy keys cannot revoke an independently issued token. This release updates Salt configuration only and does not require image rebuilds.