1
0
Fork 0
mirror of https://github.com/imjasonh/git-k8s synced 2026-07-17 06:23:00 +00:00
git-k8s/config/crds/git.k8s.io_gitreposyncs.yaml
Claude 8e65104201
Implement Git-as-K8s control plane with Knative controllers
Build a complete Kubernetes control plane for Git operations using Knative's
pkg framework, go-git for in-memory Git operations, and ko for builds.

Architecture:
- 4 CRDs: GitRepository, GitBranch, GitPushTransaction, GitRepoSync
- Push controller: atomic Git push via go-git with CAS (compare-and-swap)
- Sync controller: two-way sync with in-memory merge base calculation
- Resolver controller: automated 3-way merge for conflicted syncs
- In-cluster Gitea server for backing storage
- Full RBAC, ko-based deployments, and code-gen scaffolding

Note: go.sum needs generation via `go mod tidy` in an environment with
full internet access (knative.dev/pkg v0.0.0-20250520014526-44579e9ce5ed).

https://claude.ai/code/session_01QfFzqKQUsxxBsiZUhuJ3pG
2026-02-27 23:58:44 +00:00

105 lines
2.9 KiB
YAML

apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
name: gitreposyncs.git.k8s.io
spec:
group: git.k8s.io
names:
kind: GitRepoSync
listKind: GitRepoSyncList
plural: gitreposyncs
singular: gitreposync
shortNames:
- gitsync
categories:
- git
scope: Namespaced
versions:
- name: v1alpha1
served: true
storage: true
subresources:
status: {}
schema:
openAPIV3Schema:
type: object
properties:
spec:
type: object
required:
- repoA
- repoB
- branchName
properties:
repoA:
type: object
required:
- name
properties:
name:
type: string
description: Name of the first GitRepository resource.
repoB:
type: object
required:
- name
properties:
name:
type: string
description: Name of the second GitRepository resource.
branchName:
type: string
description: Branch to keep in sync between the two repos.
status:
type: object
properties:
conditions:
type: array
items:
type: object
properties:
type:
type: string
status:
type: string
lastTransitionTime:
type: string
format: date-time
reason:
type: string
message:
type: string
phase:
type: string
enum:
- InSync
- Syncing
- Conflicted
- RequiresManualIntervention
lastSyncTime:
type: string
format: date-time
repoACommit:
type: string
repoBCommit:
type: string
mergeBase:
type: string
message:
type: string
additionalPrinterColumns:
- name: Repo A
type: string
jsonPath: .spec.repoA.name
- name: Repo B
type: string
jsonPath: .spec.repoB.name
- name: Branch
type: string
jsonPath: .spec.branchName
- name: Phase
type: string
jsonPath: .status.phase
- name: Age
type: date
jsonPath: .metadata.creationTimestamp