1
0
Fork 0
mirror of https://github.com/imjasonh/git-k8s synced 2026-07-10 15:41:54 +00:00
git-k8s/pkg/client/clientset.go
Claude cc391645e1
Change API group from git.k8s.io to git-k8s.imjasonh.com
The *.k8s.io group is protected in Kubernetes and requires an
api-approved.kubernetes.io annotation. Switch to a custom domain
to avoid the restriction entirely.

https://claude.ai/code/session_01QfFzqKQUsxxBsiZUhuJ3pG
2026-02-28 00:34:34 +00:00

489 lines
15 KiB
Go

// Package client provides a typed Kubernetes client for the git-k8s.imjasonh.com API group.
//
// In a full Knative injection setup, this package would be auto-generated and
// clients would be retrieved from context via injection (e.g., gitclient.Get(ctx)).
// For now, we provide a manual typed client built on top of the dynamic client.
package client
import (
"context"
"encoding/json"
"fmt"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/client-go/dynamic"
"k8s.io/client-go/rest"
gitv1alpha1 "github.com/imjasonh/git-k8s/pkg/apis/git/v1alpha1"
)
// GitV1alpha1Client provides typed access to git-k8s.imjasonh.com/v1alpha1 resources.
type GitV1alpha1Client struct {
client dynamic.Interface
}
// NewForConfig creates a new GitV1alpha1Client for the given config.
func NewForConfig(config *rest.Config) (*GitV1alpha1Client, error) {
dynClient, err := dynamic.NewForConfig(config)
if err != nil {
return nil, fmt.Errorf("creating dynamic client: %w", err)
}
return &GitV1alpha1Client{client: dynClient}, nil
}
// NewFromDynamic creates a new GitV1alpha1Client from an existing dynamic client.
func NewFromDynamic(client dynamic.Interface) *GitV1alpha1Client {
return &GitV1alpha1Client{client: client}
}
type contextKey struct{}
// WithClient returns a new context with the given client stored.
func WithClient(ctx context.Context, client *GitV1alpha1Client) context.Context {
return context.WithValue(ctx, contextKey{}, client)
}
// Get retrieves the GitV1alpha1Client from the context.
func Get(ctx context.Context) *GitV1alpha1Client {
return ctx.Value(contextKey{}).(*GitV1alpha1Client)
}
var (
gitRepositoryGVR = schema.GroupVersionResource{
Group: gitv1alpha1.GroupName,
Version: gitv1alpha1.Version,
Resource: "gitrepositories",
}
gitBranchGVR = schema.GroupVersionResource{
Group: gitv1alpha1.GroupName,
Version: gitv1alpha1.Version,
Resource: "gitbranches",
}
gitPushTransactionGVR = schema.GroupVersionResource{
Group: gitv1alpha1.GroupName,
Version: gitv1alpha1.Version,
Resource: "gitpushtransactions",
}
gitRepoSyncGVR = schema.GroupVersionResource{
Group: gitv1alpha1.GroupName,
Version: gitv1alpha1.Version,
Resource: "gitreposyncs",
}
)
// toUnstructured converts a typed object to unstructured.
func toUnstructured(obj interface{}) (*unstructured.Unstructured, error) {
data, err := json.Marshal(obj)
if err != nil {
return nil, err
}
u := &unstructured.Unstructured{}
if err := json.Unmarshal(data, u); err != nil {
return nil, err
}
return u, nil
}
// fromUnstructured converts an unstructured object to a typed object.
func fromUnstructured(u *unstructured.Unstructured, obj interface{}) error {
data, err := json.Marshal(u.Object)
if err != nil {
return err
}
return json.Unmarshal(data, obj)
}
// GitRepositories returns a client for GitRepository resources in the given namespace.
func (c *GitV1alpha1Client) GitRepositories(namespace string) *GitRepositoryClient {
return &GitRepositoryClient{
client: c.client.Resource(gitRepositoryGVR).Namespace(namespace),
namespace: namespace,
}
}
// GitRepositoryClient provides typed operations on GitRepository resources.
type GitRepositoryClient struct {
client dynamic.ResourceInterface
namespace string
}
// Create creates a new GitRepository.
func (c *GitRepositoryClient) Create(ctx context.Context, obj *gitv1alpha1.GitRepository, opts metav1.CreateOptions) (*gitv1alpha1.GitRepository, error) {
obj.APIVersion = gitv1alpha1.SchemeGroupVersion.String()
obj.Kind = "GitRepository"
u, err := toUnstructured(obj)
if err != nil {
return nil, err
}
result, err := c.client.Create(ctx, u, opts)
if err != nil {
return nil, err
}
out := &gitv1alpha1.GitRepository{}
if err := fromUnstructured(result, out); err != nil {
return nil, err
}
return out, nil
}
// Get retrieves a GitRepository by name.
func (c *GitRepositoryClient) Get(ctx context.Context, name string, opts metav1.GetOptions) (*gitv1alpha1.GitRepository, error) {
result, err := c.client.Get(ctx, name, opts)
if err != nil {
return nil, err
}
out := &gitv1alpha1.GitRepository{}
if err := fromUnstructured(result, out); err != nil {
return nil, err
}
return out, nil
}
// Update updates an existing GitRepository.
func (c *GitRepositoryClient) Update(ctx context.Context, obj *gitv1alpha1.GitRepository, opts metav1.UpdateOptions) (*gitv1alpha1.GitRepository, error) {
u, err := toUnstructured(obj)
if err != nil {
return nil, err
}
result, err := c.client.Update(ctx, u, opts)
if err != nil {
return nil, err
}
out := &gitv1alpha1.GitRepository{}
if err := fromUnstructured(result, out); err != nil {
return nil, err
}
return out, nil
}
// UpdateStatus updates the status subresource of a GitRepository.
func (c *GitRepositoryClient) UpdateStatus(ctx context.Context, obj *gitv1alpha1.GitRepository, opts metav1.UpdateOptions) (*gitv1alpha1.GitRepository, error) {
u, err := toUnstructured(obj)
if err != nil {
return nil, err
}
result, err := c.client.UpdateStatus(ctx, u, opts)
if err != nil {
return nil, err
}
out := &gitv1alpha1.GitRepository{}
if err := fromUnstructured(result, out); err != nil {
return nil, err
}
return out, nil
}
// List lists GitRepository resources.
func (c *GitRepositoryClient) List(ctx context.Context, opts metav1.ListOptions) (*gitv1alpha1.GitRepositoryList, error) {
result, err := c.client.List(ctx, opts)
if err != nil {
return nil, err
}
out := &gitv1alpha1.GitRepositoryList{}
if err := runtime.DefaultUnstructuredConverter.FromUnstructured(result.UnstructuredContent(), out); err != nil {
return nil, err
}
return out, nil
}
// Delete deletes a GitRepository by name.
func (c *GitRepositoryClient) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error {
return c.client.Delete(ctx, name, opts)
}
// GitBranches returns a client for GitBranch resources in the given namespace.
func (c *GitV1alpha1Client) GitBranches(namespace string) *GitBranchClient {
return &GitBranchClient{
client: c.client.Resource(gitBranchGVR).Namespace(namespace),
namespace: namespace,
}
}
// GitBranchClient provides typed operations on GitBranch resources.
type GitBranchClient struct {
client dynamic.ResourceInterface
namespace string
}
// Create creates a new GitBranch.
func (c *GitBranchClient) Create(ctx context.Context, obj *gitv1alpha1.GitBranch, opts metav1.CreateOptions) (*gitv1alpha1.GitBranch, error) {
obj.APIVersion = gitv1alpha1.SchemeGroupVersion.String()
obj.Kind = "GitBranch"
u, err := toUnstructured(obj)
if err != nil {
return nil, err
}
result, err := c.client.Create(ctx, u, opts)
if err != nil {
return nil, err
}
out := &gitv1alpha1.GitBranch{}
if err := fromUnstructured(result, out); err != nil {
return nil, err
}
return out, nil
}
// Get retrieves a GitBranch by name.
func (c *GitBranchClient) Get(ctx context.Context, name string, opts metav1.GetOptions) (*gitv1alpha1.GitBranch, error) {
result, err := c.client.Get(ctx, name, opts)
if err != nil {
return nil, err
}
out := &gitv1alpha1.GitBranch{}
if err := fromUnstructured(result, out); err != nil {
return nil, err
}
return out, nil
}
// Update updates an existing GitBranch.
func (c *GitBranchClient) Update(ctx context.Context, obj *gitv1alpha1.GitBranch, opts metav1.UpdateOptions) (*gitv1alpha1.GitBranch, error) {
u, err := toUnstructured(obj)
if err != nil {
return nil, err
}
result, err := c.client.Update(ctx, u, opts)
if err != nil {
return nil, err
}
out := &gitv1alpha1.GitBranch{}
if err := fromUnstructured(result, out); err != nil {
return nil, err
}
return out, nil
}
// UpdateStatus updates the status subresource of a GitBranch.
func (c *GitBranchClient) UpdateStatus(ctx context.Context, obj *gitv1alpha1.GitBranch, opts metav1.UpdateOptions) (*gitv1alpha1.GitBranch, error) {
u, err := toUnstructured(obj)
if err != nil {
return nil, err
}
result, err := c.client.UpdateStatus(ctx, u, opts)
if err != nil {
return nil, err
}
out := &gitv1alpha1.GitBranch{}
if err := fromUnstructured(result, out); err != nil {
return nil, err
}
return out, nil
}
// List lists GitBranch resources.
func (c *GitBranchClient) List(ctx context.Context, opts metav1.ListOptions) (*gitv1alpha1.GitBranchList, error) {
result, err := c.client.List(ctx, opts)
if err != nil {
return nil, err
}
out := &gitv1alpha1.GitBranchList{}
if err := runtime.DefaultUnstructuredConverter.FromUnstructured(result.UnstructuredContent(), out); err != nil {
return nil, err
}
return out, nil
}
// Delete deletes a GitBranch by name.
func (c *GitBranchClient) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error {
return c.client.Delete(ctx, name, opts)
}
// GitPushTransactions returns a client for GitPushTransaction resources in the given namespace.
func (c *GitV1alpha1Client) GitPushTransactions(namespace string) *GitPushTransactionClient {
return &GitPushTransactionClient{
client: c.client.Resource(gitPushTransactionGVR).Namespace(namespace),
namespace: namespace,
}
}
// GitPushTransactionClient provides typed operations on GitPushTransaction resources.
type GitPushTransactionClient struct {
client dynamic.ResourceInterface
namespace string
}
// Create creates a new GitPushTransaction.
func (c *GitPushTransactionClient) Create(ctx context.Context, obj *gitv1alpha1.GitPushTransaction, opts metav1.CreateOptions) (*gitv1alpha1.GitPushTransaction, error) {
obj.APIVersion = gitv1alpha1.SchemeGroupVersion.String()
obj.Kind = "GitPushTransaction"
u, err := toUnstructured(obj)
if err != nil {
return nil, err
}
result, err := c.client.Create(ctx, u, opts)
if err != nil {
return nil, err
}
out := &gitv1alpha1.GitPushTransaction{}
if err := fromUnstructured(result, out); err != nil {
return nil, err
}
return out, nil
}
// Get retrieves a GitPushTransaction by name.
func (c *GitPushTransactionClient) Get(ctx context.Context, name string, opts metav1.GetOptions) (*gitv1alpha1.GitPushTransaction, error) {
result, err := c.client.Get(ctx, name, opts)
if err != nil {
return nil, err
}
out := &gitv1alpha1.GitPushTransaction{}
if err := fromUnstructured(result, out); err != nil {
return nil, err
}
return out, nil
}
// Update updates an existing GitPushTransaction.
func (c *GitPushTransactionClient) Update(ctx context.Context, obj *gitv1alpha1.GitPushTransaction, opts metav1.UpdateOptions) (*gitv1alpha1.GitPushTransaction, error) {
u, err := toUnstructured(obj)
if err != nil {
return nil, err
}
result, err := c.client.Update(ctx, u, opts)
if err != nil {
return nil, err
}
out := &gitv1alpha1.GitPushTransaction{}
if err := fromUnstructured(result, out); err != nil {
return nil, err
}
return out, nil
}
// UpdateStatus updates the status subresource of a GitPushTransaction.
func (c *GitPushTransactionClient) UpdateStatus(ctx context.Context, obj *gitv1alpha1.GitPushTransaction, opts metav1.UpdateOptions) (*gitv1alpha1.GitPushTransaction, error) {
u, err := toUnstructured(obj)
if err != nil {
return nil, err
}
result, err := c.client.UpdateStatus(ctx, u, opts)
if err != nil {
return nil, err
}
out := &gitv1alpha1.GitPushTransaction{}
if err := fromUnstructured(result, out); err != nil {
return nil, err
}
return out, nil
}
// List lists GitPushTransaction resources.
func (c *GitPushTransactionClient) List(ctx context.Context, opts metav1.ListOptions) (*gitv1alpha1.GitPushTransactionList, error) {
result, err := c.client.List(ctx, opts)
if err != nil {
return nil, err
}
out := &gitv1alpha1.GitPushTransactionList{}
if err := runtime.DefaultUnstructuredConverter.FromUnstructured(result.UnstructuredContent(), out); err != nil {
return nil, err
}
return out, nil
}
// Delete deletes a GitPushTransaction by name.
func (c *GitPushTransactionClient) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error {
return c.client.Delete(ctx, name, opts)
}
// GitRepoSyncs returns a client for GitRepoSync resources in the given namespace.
func (c *GitV1alpha1Client) GitRepoSyncs(namespace string) *GitRepoSyncClient {
return &GitRepoSyncClient{
client: c.client.Resource(gitRepoSyncGVR).Namespace(namespace),
namespace: namespace,
}
}
// GitRepoSyncClient provides typed operations on GitRepoSync resources.
type GitRepoSyncClient struct {
client dynamic.ResourceInterface
namespace string
}
// Create creates a new GitRepoSync.
func (c *GitRepoSyncClient) Create(ctx context.Context, obj *gitv1alpha1.GitRepoSync, opts metav1.CreateOptions) (*gitv1alpha1.GitRepoSync, error) {
obj.APIVersion = gitv1alpha1.SchemeGroupVersion.String()
obj.Kind = "GitRepoSync"
u, err := toUnstructured(obj)
if err != nil {
return nil, err
}
result, err := c.client.Create(ctx, u, opts)
if err != nil {
return nil, err
}
out := &gitv1alpha1.GitRepoSync{}
if err := fromUnstructured(result, out); err != nil {
return nil, err
}
return out, nil
}
// Get retrieves a GitRepoSync by name.
func (c *GitRepoSyncClient) Get(ctx context.Context, name string, opts metav1.GetOptions) (*gitv1alpha1.GitRepoSync, error) {
result, err := c.client.Get(ctx, name, opts)
if err != nil {
return nil, err
}
out := &gitv1alpha1.GitRepoSync{}
if err := fromUnstructured(result, out); err != nil {
return nil, err
}
return out, nil
}
// Update updates an existing GitRepoSync.
func (c *GitRepoSyncClient) Update(ctx context.Context, obj *gitv1alpha1.GitRepoSync, opts metav1.UpdateOptions) (*gitv1alpha1.GitRepoSync, error) {
u, err := toUnstructured(obj)
if err != nil {
return nil, err
}
result, err := c.client.Update(ctx, u, opts)
if err != nil {
return nil, err
}
out := &gitv1alpha1.GitRepoSync{}
if err := fromUnstructured(result, out); err != nil {
return nil, err
}
return out, nil
}
// UpdateStatus updates the status subresource of a GitRepoSync.
func (c *GitRepoSyncClient) UpdateStatus(ctx context.Context, obj *gitv1alpha1.GitRepoSync, opts metav1.UpdateOptions) (*gitv1alpha1.GitRepoSync, error) {
u, err := toUnstructured(obj)
if err != nil {
return nil, err
}
result, err := c.client.UpdateStatus(ctx, u, opts)
if err != nil {
return nil, err
}
out := &gitv1alpha1.GitRepoSync{}
if err := fromUnstructured(result, out); err != nil {
return nil, err
}
return out, nil
}
// List lists GitRepoSync resources.
func (c *GitRepoSyncClient) List(ctx context.Context, opts metav1.ListOptions) (*gitv1alpha1.GitRepoSyncList, error) {
result, err := c.client.List(ctx, opts)
if err != nil {
return nil, err
}
out := &gitv1alpha1.GitRepoSyncList{}
if err := runtime.DefaultUnstructuredConverter.FromUnstructured(result.UnstructuredContent(), out); err != nil {
return nil, err
}
return out, nil
}
// Delete deletes a GitRepoSync by name.
func (c *GitRepoSyncClient) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error {
return c.client.Delete(ctx, name, opts)
}