Native Shell
Native Shell:AI 生成的 UI,在你的應用中原生呈現,涵蓋每個平台。iOS、Android、macOS、Windows 與 Linux 上的應用、GPUI 應用與網頁在執行時載入已簽名、沙箱隔離的 TSX 模組並繪製 th
AI 翻譯
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 README ↗A lightweight Kubernetes operator that provisions Gitea bot users, API tokens, SSH keys, repository access, and Actions secrets declaratively via CRDs.
Applications and automation pipelines can request their own Gitea credentials without manual Gitea admin access or pre-deploy scripts.
The operator manages one CRD kind:
| Kind | What it provisions |
|---|---|
GiteaUser | A Gitea user with an API token, SSH keys, repository collaborations, and Actions secrets |
All resources are reconciled continuously — the operator detects and repairs out-of-band drift every 5 minutes.
Add the Helm repository:
helm repo add gitea-provisioner https://drewsonne.github.io/gitea-provisioner
helm repo update
Install the chart:
helm install gitea-provisioner gitea-provisioner/gitea-provisioner \
--namespace gitea \
--set gitea.url=http://gitea-http.gitea.svc.cluster.local \
--set gitea.adminSecret.name=gitea-admin-credentials
apiVersion: v1
kind: Secret
metadata:
name: gitea-admin-credentials
namespace: gitea
stringData:
username: admin
password: <admin-password>
Default values:
image:
repository: drewsonne/gitea-provisioner
tag: latest
gitea:
url: http://gitea-http.gitea.svc.cluster.local
adminSecret:
name: gitea-admin-credentials
namespace: gitea
Creates a Gitea user with a managed API token stored in a Kubernetes Secret.
apiVersion: gitea.drewsonne.github.io/v1
kind: GiteaUser
metadata:
name: gizmo
namespace: gitea
spec:
username: gizmo
email: [email protected]
Control what the generated API token can access. Defaults to ["repository"].
spec:
tokenScopes:
- repository
- issue
- user
- organization
Available scopes: activitypub, admin, issue, misc, notification, organization, package, repository, user.
Grant the user collaborator access to specific repositories with a permission level.
spec:
repositories:
- name: myorg/my-repo
permission: write # read | write | admin
- name: myorg/other-repo
permission: read
Register SSH public keys on the account. Keys are identified by their name (title in Gitea). The operator adds missing keys, replaces keys whose content has changed, and removes keys whose name is dropped from the list. Keys added outside this spec are never touched.
Inline public key:
spec:
sshKeys:
- name: my-laptop
publicKey: "ssh-ed25519 AAAA... user@host"
From a Kubernetes Secret (compatible with the 1Password operator):
# The 1Password operator syncs the key into a Secret
apiVersion: onepassword.com/v1
kind: OnePasswordItem
metadata:
name: drew-ssh-key
namespace: gitea
spec:
itemPath: "vaults/Home Lab/items/gitea-drew-ssh-key"
---
apiVersion: gitea.drewsonne.github.io/v1
kind: GiteaUser
metadata:
name: drew
namespace: gitea
spec:
username: drew
email: [email protected]
sshKeys:
- name: home-lab
secretRef:
name: drew-ssh-key # Secret created by OnePasswordItem above
namespace: gitea
key: "public key" # field name within the 1Password item / Secret
Set user-level Gitea Actions secrets sourced from Kubernetes Secrets. Secret values are always re-applied on reconcile (Gitea never returns values so drift can only be detected by name). Secrets removed from the list are deleted from Gitea.
spec:
actionsSecrets:
- name: OP_SERVICE_ACCOUNT_TOKEN
secretRef:
name: op-service-account
namespace: gitea
key: token
- name: REGISTRY_TOKEN
secretRef:
name: registry-credentials
key: token # namespace defaults to the CR's namespace
secretRef fields:
| Field | Required | Description |
|---|---|---|
name | yes | Name of the Kubernetes Secret |
key | yes | Key within the Secret whose value is used |
namespace | no | Namespace of the Secret; defaults to the CR's namespace |
spec:
admin: true # default: false
By default the token Secret is created as {cr-name}-gitea-token in the CR's namespace. Override with:
spec:
tokenSecretRef:
name: my-bot-token
namespace: other-namespace # cross-namespace; no owner reference applied
apiVersion: gitea.drewsonne.github.io/v1
kind: GiteaUser
metadata:
name: gizmo
namespace: gitea
spec:
username: gizmo
email: [email protected]
admin: false
tokenScopes:
- repository
- issue
- user
- organization
repositories:
- name: myorg/openclaw
permission: write
- name: myorg/docs
permission: read
sshKeys:
- name: deploy-key
secretRef:
name: gizmo-ssh-key
key: "public key"
actionsSecrets:
- name: OP_SERVICE_ACCOUNT_TOKEN
secretRef:
name: op-credentials
key: token
tokenSecretRef:
name: openclaw-gitea-token
namespace: gitea
Every CR accepts an optional giteaAdminSecret field to use credentials from a different Gitea instance (useful for multi-tenant setups):
spec:
giteaAdminSecret:
name: my-other-gitea-admin
namespace: gitea
The referenced Secret may contain username, password, and optionally url (overrides the GITEA_URL env var).
GiteaUser creates a Secret containing:
| Key | Description |
|---|---|
token | The Gitea API token |
username | The Gitea username |
password | The user's Gitea password (for basic-auth clients) |
url | The Gitea instance URL |
kubectl get secret gizmo-gitea-token -n gitea -o yaml
name (title); only keys whose title appears in the spec are ever modified or removedkubectl describe as a K8s Warning event and in the Drift printer columnkubectl get giteausers
Printer columns include Username, Email, Admin, Ready, Drift, and Age.
Drift events are also emitted as Kubernetes Warning events visible via kubectl describe giteauser <name>.
Build locally:
docker build -t drewsonne/gitea-provisioner:dev .
Run locally (requires cluster access):
docker run --rm \
-e GITEA_URL=http://gitea-http.gitea.svc.cluster.local \
-e GITEA_ADMIN_USERNAME=admin \
-e GITEA_ADMIN_PASSWORD=... \
drewsonne/gitea-provisioner:dev
GPLv3