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