From 420f3e8e6d33ace7aad9102f60e4baa34eeba28e Mon Sep 17 00:00:00 2001 From: nxtcoder17 Date: Thu, 1 Feb 2024 23:31:51 +0530 Subject: [PATCH 1/3] feat(apps/infra): charts/kloudlite-agent is now installed and managed by kloudlite api for tenant clusters --- apps/infra/internal/app/grpc-server.go | 4 +- apps/infra/internal/domain/clusters.go | 73 +++++++++- apps/infra/internal/domain/helm-release.go | 16 +++ apps/infra/internal/domain/nodepool.go | 57 +------- apps/infra/internal/domain/templates/embed.go | 23 +++ .../helm-charts-kloudlite-agent.yml.tpl | 135 ++++++++++++++++++ apps/infra/internal/env/env.go | 3 + 7 files changed, 254 insertions(+), 57 deletions(-) create mode 100644 apps/infra/internal/domain/templates/embed.go create mode 100644 apps/infra/internal/domain/templates/helm-charts-kloudlite-agent.yml.tpl diff --git a/apps/infra/internal/app/grpc-server.go b/apps/infra/internal/app/grpc-server.go index a16741ae4..1ed0e085c 100644 --- a/apps/infra/internal/app/grpc-server.go +++ b/apps/infra/internal/app/grpc-server.go @@ -81,8 +81,8 @@ func (g *grpcServer) GetNodepool(ctx context.Context, in *infra.GetNodepoolIn) ( } return &infra.GetNodepoolOut{ - IACJobName: np.Spec.IAC.JobName, - IACJobNamespace: np.Spec.IAC.JobNamespace, + // IACJobName: np.Spec.IAC.JobName, + // IACJobNamespace: np.Spec.IAC.JobNamespace, }, nil } diff --git a/apps/infra/internal/domain/clusters.go b/apps/infra/internal/domain/clusters.go index 68762d3ab..ae9b3e197 100644 --- a/apps/infra/internal/domain/clusters.go +++ b/apps/infra/internal/domain/clusters.go @@ -4,12 +4,14 @@ import ( "fmt" iamT "github.com/kloudlite/api/apps/iam/types" + "github.com/kloudlite/api/apps/infra/internal/domain/templates" fc "github.com/kloudlite/api/apps/infra/internal/entities/field-constants" "github.com/kloudlite/api/common" "github.com/kloudlite/api/common/fields" message_office_internal "github.com/kloudlite/api/grpc-interfaces/kloudlite.io/rpc/message-office-internal" ct "github.com/kloudlite/operator/apis/common-types" "github.com/kloudlite/operator/operators/resource-watcher/types" + "sigs.k8s.io/yaml" "github.com/kloudlite/api/apps/infra/internal/entities" clustersv1 "github.com/kloudlite/operator/apis/clusters/v1" @@ -18,6 +20,7 @@ import ( fn "github.com/kloudlite/api/pkg/functions" "github.com/kloudlite/api/pkg/repos" t "github.com/kloudlite/api/pkg/types" + crdsv1 "github.com/kloudlite/operator/apis/crds/v1" corev1 "k8s.io/api/core/v1" apiErrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -56,8 +59,8 @@ func (d *domain) createTokenSecret(ctx InfraContext, ps *entities.CloudProviderS return nil, errors.NewE(err) } - secret.StringData = map[string]string{ - keyClusterToken: tout.ClusterToken, + secret.Data = map[string][]byte{ + keyClusterToken: []byte(tout.ClusterToken), } return secret, nil @@ -256,9 +259,75 @@ func (d *domain) CreateCluster(ctx InfraContext, cluster entities.Cluster) (*ent d.resourceEventPublisher.PublishInfraEvent(ctx, ResourceTypeCluster, nCluster.Name, PublishAdd) + if err := d.applyHelmKloudliteAgent(ctx, nCluster, string(tokenScrt.Data[keyClusterToken])); err != nil { + return nil, errors.NewE(err) + } + return nCluster, nil } +func (d *domain) applyHelmKloudliteAgent(ctx InfraContext, cluster *entities.Cluster, clusterToken string) error { + b, err := templates.Read(templates.HelmKloudliteAgent) + if err != nil { + return errors.NewE(err) + } + + b2, err := templates.ParseBytes(b, map[string]any{ + "account-name": ctx.AccountName, + "cluster-name": cluster.Name, + "cluster-token": clusterToken, + + "kloudlite-release": d.env.KloudliteRelease, + "message-office-grpc-addr": d.env.MessageOfficeExternalGrpcAddr, + }) + if err != nil { + return errors.NewE(err) + } + + var m map[string]any + if err := yaml.Unmarshal(b2, &m); err != nil { + return errors.NewE(err) + } + + helmChart, err := fn.JsonConvert[crdsv1.HelmChart](m) + if err != nil { + return errors.NewE(err) + } + + hr := entities.HelmRelease{ + HelmChart: helmChart, + ResourceMetadata: common.ResourceMetadata{ + DisplayName: fmt.Sprintf("kloudlite agent %s", d.env.KloudliteRelease), + CreatedBy: common.CreatedOrUpdatedBy{ + UserId: "kloudlite-platform", + UserName: "kloudlite-platform", + UserEmail: "kloudlite-platform", + }, + LastUpdatedBy: common.CreatedOrUpdatedBy{ + UserId: "kloudlite-platform", + UserName: "kloudlite-platform", + UserEmail: "kloudlite-platform", + }, + }, + AccountName: ctx.AccountName, + ClusterName: cluster.Name, + SyncStatus: t.GenSyncStatus(t.SyncActionApply, 0), + } + + hr.IncrementRecordVersion() + + uhr, err := d.upsertHelmRelease(ctx, cluster.Name, &hr) + if err != nil { + return errors.NewE(err) + } + + if err := d.resDispatcher.ApplyToTargetCluster(ctx, cluster.Name, &uhr.HelmChart, uhr.RecordVersion); err != nil { + return errors.NewE(err) + } + + return nil +} + func (d *domain) ListClusters(ctx InfraContext, mf map[string]repos.MatchFilter, pagination repos.CursorPagination) (*repos.PaginatedRecord[*entities.Cluster], error) { if err := d.canPerformActionInAccount(ctx, iamT.ListClusters); err != nil { return nil, errors.NewE(err) diff --git a/apps/infra/internal/domain/helm-release.go b/apps/infra/internal/domain/helm-release.go index 943981375..b56e6dfc6 100644 --- a/apps/infra/internal/domain/helm-release.go +++ b/apps/infra/internal/domain/helm-release.go @@ -30,6 +30,22 @@ func (d *domain) findHelmRelease(ctx InfraContext, clusterName string, hrName st return cluster, nil } +func (d *domain) upsertHelmRelease(ctx InfraContext, clusterName string, hr *entities.HelmRelease) (*entities.HelmRelease, error) { + cluster, err := d.helmReleaseRepo.Upsert(ctx, repos.Filter{ + fields.ClusterName: clusterName, + fields.AccountName: ctx.AccountName, + fields.MetadataName: hr.Name, + }, hr) + if err != nil { + return nil, errors.NewE(err) + } + + if cluster == nil { + return nil, errors.Newf("could not upsert helm release %s", hr.Name) + } + return cluster, nil +} + func (d *domain) ListHelmReleases(ctx InfraContext, clusterName string, mf map[string]repos.MatchFilter, pagination repos.CursorPagination) (*repos.PaginatedRecord[*entities.HelmRelease], error) { if err := d.canPerformActionInAccount(ctx, iamT.ListHelmReleases); err != nil { return nil, errors.NewE(err) diff --git a/apps/infra/internal/domain/nodepool.go b/apps/infra/internal/domain/nodepool.go index 3f83e8758..d20d19442 100644 --- a/apps/infra/internal/domain/nodepool.go +++ b/apps/infra/internal/domain/nodepool.go @@ -1,8 +1,6 @@ package domain import ( - "fmt" - iamT "github.com/kloudlite/api/apps/iam/types" fc "github.com/kloudlite/api/apps/infra/internal/entities/field-constants" "github.com/kloudlite/api/common" @@ -13,15 +11,10 @@ import ( "github.com/kloudlite/operator/operators/resource-watcher/types" "github.com/kloudlite/api/apps/infra/internal/entities" - fn "github.com/kloudlite/api/pkg/functions" "github.com/kloudlite/api/pkg/repos" t "github.com/kloudlite/api/pkg/types" - corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) -const tenantControllerNamespace = "kloudlite" - func (d *domain) applyNodePool(ctx InfraContext, np *entities.NodePool) error { addTrackingId(&np.NodePool, np.Id) return d.resDispatcher.ApplyToTargetCluster(ctx, np.ClusterName, &np.NodePool, np.RecordVersion) @@ -40,57 +33,11 @@ func (d *domain) CreateNodePool(ctx InfraContext, clusterName string, nodepool e } nodepool.LastUpdatedBy = nodepool.CreatedBy - out, err := d.accountsSvc.GetAccount(ctx, string(ctx.UserId), ctx.AccountName) - if err != nil { - return nil, errors.NewE(err) - } - cluster, err := d.findCluster(ctx, clusterName) if err != nil { return nil, errors.NewE(err) } - // fetch cloud provider credentials, access key, and ps key - credsSecret := &corev1.Secret{} - if err := d.k8sClient.Get(ctx, fn.NN(cluster.Spec.CredentialsRef.Namespace, cluster.Spec.CredentialsRef.Name), credsSecret); err != nil { - return nil, errors.NewE(err) - } - - providerSecret := &corev1.Secret{ - TypeMeta: metav1.TypeMeta{ - Kind: "Secret", - APIVersion: "v1", - }, - ObjectMeta: metav1.ObjectMeta{ - Name: "provider-creds", - Namespace: tenantControllerNamespace, - }, - Data: map[string][]byte{ - "access_key": credsSecret.Data[cluster.Spec.CredentialKeys.KeyAccessKey], - "secret_key": credsSecret.Data[cluster.Spec.CredentialKeys.KeySecretKey], - }, - } - - if err := d.resDispatcher.ApplyToTargetCluster(ctx, clusterName, providerSecret, 1); err != nil { - return nil, errors.NewE(err) - } - - nodepool.Spec.IAC = clustersv1.InfrastuctureAsCode{ - StateS3BucketName: fmt.Sprintf("kl-%s", out.AccountId), - StateS3BucketRegion: "ap-south-1", - StateS3BucketFilePath: fmt.Sprintf("iac/kl-account-%s/cluster-%s/nodepool-%s.tfstate", ctx.AccountName, clusterName, nodepool.Name), - CloudProviderAccessKey: ct.SecretKeyRef{ - Name: providerSecret.Name, - Namespace: providerSecret.Namespace, - Key: "access_key", - }, - CloudProviderSecretKey: ct.SecretKeyRef{ - Name: providerSecret.Name, - Namespace: providerSecret.Namespace, - Key: "secret_key", - }, - } - ps, err := d.findProviderSecret(ctx, cluster.Spec.CredentialsRef.Name) if err != nil { return nil, errors.NewE(err) @@ -127,6 +74,10 @@ func (d *domain) CreateNodePool(ctx InfraContext, clusterName string, nodepool e }(), } } + default: + { + return nil, errors.Newf("cloudprovider: %s, currently not supported", nodepool.Spec.CloudProvider) + } } nodepool.AccountName = ctx.AccountName diff --git a/apps/infra/internal/domain/templates/embed.go b/apps/infra/internal/domain/templates/embed.go new file mode 100644 index 000000000..cd4d68e66 --- /dev/null +++ b/apps/infra/internal/domain/templates/embed.go @@ -0,0 +1,23 @@ +package templates + +import ( + "embed" + "path/filepath" + + "github.com/kloudlite/operator/pkg/templates" +) + +//go:embed * +var templatesDir embed.FS + +type templateFile string + +const ( + HelmKloudliteAgent templateFile = "./helm-charts-kloudlite-agent.yml.tpl" +) + +func Read(t templateFile) ([]byte, error) { + return templatesDir.ReadFile(filepath.Join(string(t))) +} + +var ParseBytes = templates.ParseBytes diff --git a/apps/infra/internal/domain/templates/helm-charts-kloudlite-agent.yml.tpl b/apps/infra/internal/domain/templates/helm-charts-kloudlite-agent.yml.tpl new file mode 100644 index 000000000..c32d0e392 --- /dev/null +++ b/apps/infra/internal/domain/templates/helm-charts-kloudlite-agent.yml.tpl @@ -0,0 +1,135 @@ +{{- $accountName := get . "account-name" }} +{{- $clusterName := get . "cluster-name" }} + +{{- $kloudliteRelease := get . "kloudlite-release" }} +{{- $messageOfficeGrpcAddr := get . "message-office-grpc-addr" }} + +{{- $clusterToken := get . "cluster-token" }} + +--- +apiVersion: crds.kloudlite.io/v1 +kind: HelmChart +metadata: + name: kloudlite-agent + namespace: kloudlite +spec: + chartRepoURL: https://kloudlite.github.io/helm-charts + chartVersion: {{$kloudliteRelease}} + chartName: kloudlite-agent + + jobVars: + tolerations: + - operator: Exists + + preInstall: |+ + if kubectl get ns kloudlite-tmp; + then + kubectl delete ns kloudlite-tmp + fi + + values: + imagePullPolicy: Always + + accountName: {{$accountName}} + clusterName: {{$clusterName}} + + clusterToken: {{$clusterToken}} + + clusterIdentitySecretName: kl-cluster-identity + + messageOfficeGRPCAddr: {{$messageOfficeGrpcAddr}} + + svcAccountName: sa + + clusterInternalDNS: "cluster.local" + + defaults: + imageTag: {{$kloudliteRelease}} + imagePullPolicy: "Always" + nodeSelector: + node-role.kubernetes.io/master: "true" + tolerations: + - key: "node-role.kubernetes.io/master" + operator: "Exists" + effect: "NoSchedule" + + agent: + enabled: true + name: kl-agent + image: + repository: ghcr.io/kloudlite/api/tenant-agent + tag: "" + pullPolicy: "" + nodeSelector: {} + tolerations: [] + + preferOperatorsOnMasterNodes: true + operators: + agentOperator: + enabled: true + name: kl-agent-operator + image: + repository: ghcr.io/kloudlite/operator/agent + tag: "" + pullPolicy: "" + + tolerations: [] + nodeSelector: {} + + configuration: + letsEncryptSupportEmail: "support@kloudlite.io" + + wgOperator: + enabled: true + name: kl-wg-operator + # -- wg operator image and tag + image: + repository: ghcr.io/kloudlite/operator/wireguard + tag: "" + pullPolicy: "" + + tolerations: [] + nodeSelector: {} + + # -- wireguard configuration options + configuration: + # -- cluster pods CIDR range + podCIDR: 10.42.0.0/16 + # -- cluster services CIDR range + svcCIDR: 10.43.0.0/16 + # -- dns hosted zone, i.e., dns pointing to this cluster, like 'wireguard.domain.com' + + enableExamples: false + + helmCharts: + ingressNginx: + enabled: true + name: "ingress-nginx" + tolerations: [] + nodeSelector: {} + configuration: + controllerKind: DaemonSet + ingressClassName: nginx + + certManager: + enabled: true + name: "cert-manager" + nodeSelector: {} + tolerations: [] + affinity: {} + configuration: + defaultClusterIssuer: letsencrypt-prod + clusterIssuers: + - name: letsencrypt-prod + default: true + acme: + email: "support@kloudlite.io" + server: https://acme-v02.api.letsencrypt.org/directory + + vector: + enabled: true + name: "vector" + debugOnStdout: false + nodeSelector: {} + tolerations: [] + diff --git a/apps/infra/internal/env/env.go b/apps/infra/internal/env/env.go index 29b0ff102..46dacbead 100644 --- a/apps/infra/internal/env/env.go +++ b/apps/infra/internal/env/env.go @@ -23,6 +23,7 @@ type Env struct { AccountsGrpcAddr string `env:"ACCOUNTS_GRPC_ADDR" required:"true"` MessageOfficeInternalGrpcAddr string `env:"MESSAGE_OFFICE_INTERNAL_GRPC_ADDR" required:"true"` + MessageOfficeExternalGrpcAddr string `env:"MESSAGE_OFFICE_EXTERNAL_GRPC_ADDR" required:"true"` AWSCfParamTrustedARN string `env:"AWS_CF_PARAM_TRUSTED_ARN" required:"true"` AWSCfStackNamePrefix string `env:"AWS_CF_STACK_NAME_PREFIX" required:"true"` @@ -43,6 +44,8 @@ type Env struct { MsvcTemplateFilePath string `env:"MSVC_TEMPLATE_FILE_PATH" required:"true"` DeviceNamespace string `env:"DEVICE_NAMESPACE" required:"true"` + + KloudliteRelease string `env:"KLOUDLITE_RELEASE" required:"true" default="v1.0.5-nightly"` } func LoadEnv() (*Env, error) { From 3848ea913a81391ff8cc7c3f41d9bc7b76431710 Mon Sep 17 00:00:00 2001 From: nxtcoder17 Date: Thu, 1 Feb 2024 23:44:45 +0530 Subject: [PATCH 2/3] refactor(apps/tenant-agent): cleanup, and some refactorings - http cli updates --- .../__http__/accounts/accounts.graphql.yml | 3 -- .tools/nvim/__http__/auth/auth.graphql.yml | 2 +- .../nvim/__http__/infra/clusters.graphql.yml | 7 ++- .../nvim/__http__/infra/nodepools.graphql.yml | 2 +- apps/auth/Taskfile.yml | 4 +- apps/tenant-agent/internal/env/env.go | 3 -- apps/tenant-agent/main.go | 45 ++----------------- 7 files changed, 10 insertions(+), 56 deletions(-) diff --git a/.tools/nvim/__http__/accounts/accounts.graphql.yml b/.tools/nvim/__http__/accounts/accounts.graphql.yml index df393ccac..b352865c4 100644 --- a/.tools/nvim/__http__/accounts/accounts.graphql.yml +++ b/.tools/nvim/__http__/accounts/accounts.graphql.yml @@ -16,9 +16,6 @@ query: |+ # labels name } - spec { - targetNamespace - } } } diff --git a/.tools/nvim/__http__/auth/auth.graphql.yml b/.tools/nvim/__http__/auth/auth.graphql.yml index 71d703ed2..824d6dc62 100644 --- a/.tools/nvim/__http__/auth/auth.graphql.yml +++ b/.tools/nvim/__http__/auth/auth.graphql.yml @@ -221,7 +221,7 @@ query: |+ } } variables: - token: "***********************************" + token: "{{.verify_token}}" --- diff --git a/.tools/nvim/__http__/infra/clusters.graphql.yml b/.tools/nvim/__http__/infra/clusters.graphql.yml index 59ba1b2b5..889a4ebf0 100644 --- a/.tools/nvim/__http__/infra/clusters.graphql.yml +++ b/.tools/nvim/__http__/infra/clusters.graphql.yml @@ -1,10 +1,9 @@ --- global: - accountName: kloudlite-dev - clusterName: sample-cluster + clusterName: sample-cluster2 - providerSecretName: "aws-creds" - providerSecretNamespace: "kl-account-kloudlite-dev" + providerSecretName: "aws-283277" + providerSecretNamespace: "kl-account-new-prod-team" --- label: Create Cluster diff --git a/.tools/nvim/__http__/infra/nodepools.graphql.yml b/.tools/nvim/__http__/infra/nodepools.graphql.yml index 47e1fa46a..a02a058c6 100644 --- a/.tools/nvim/__http__/infra/nodepools.graphql.yml +++ b/.tools/nvim/__http__/infra/nodepools.graphql.yml @@ -5,7 +5,7 @@ global: providerNamespace: s1 providerSecretName: provider-sample - clusterName: sample-cluster + clusterName: sample-cluster2 # clusterName: teshdhr-797053 --- diff --git a/apps/auth/Taskfile.yml b/apps/auth/Taskfile.yml index 4cbe6f78a..92185c879 100644 --- a/apps/auth/Taskfile.yml +++ b/apps/auth/Taskfile.yml @@ -3,7 +3,7 @@ version: '3' dotenv: [".secrets/oauth.env", ".secrets/env"] vars: - ImagePrefix: "ghcr.io/kloudlite/platform/apis" + ImagePrefix: "ghcr.io/kloudlite/api" tasks: run: @@ -32,7 +32,7 @@ tasks: - sh: '[ -n "{{.Out}}" ]' msg: var Out must have a value cmds: - - go build -v -ldflags="-s -w -X kloudlite.io/common.BuiltAt=\"{{.BuiltAt}}\"" -o {{.Out}} + - go build -v -ldflags="-s -w -X github.com/kloudlite/api/common.BuiltAt=\"{{.BuiltAt}}\"" -o {{.Out}} - upx {{.Out}} local-build: diff --git a/apps/tenant-agent/internal/env/env.go b/apps/tenant-agent/internal/env/env.go index e303c4a81..96ffae7ab 100644 --- a/apps/tenant-agent/internal/env/env.go +++ b/apps/tenant-agent/internal/env/env.go @@ -15,9 +15,6 @@ type Env struct { ClusterName string `env:"CLUSTER_NAME" required:"true"` AccountName string `env:"ACCOUNT_NAME" required:"true"` - // ImagePullSecretName string `env:"IMAGE_PULL_SECRET_NAME" required:"true"` - // ImagePullSecrerNamespace string `env:"IMAGE_PULL_SECRET_NAMESPACE" required:"true"` - VectorProxyGrpcServerAddr string `env:"VECTOR_PROXY_GRPC_SERVER_ADDR" required:"true"` ResourceWatcherName string `env:"RESOURCE_WATCHER_NAME" required:"true"` ResourceWatcherNamespace string `env:"RESOURCE_WATCHER_NAMESPACE" required:"true"` diff --git a/apps/tenant-agent/main.go b/apps/tenant-agent/main.go index 92524c91c..810a8f226 100644 --- a/apps/tenant-agent/main.go +++ b/apps/tenant-agent/main.go @@ -138,48 +138,6 @@ func (g *grpcHandler) handleMessage(msg t.AgentMessage) error { mLogger.Infof("[%d] rolled out statefulsets", g.inMemCounter) mLogger.Infof("[%d] processed message", g.inMemCounter) } - - // case t.ActionApply, t.ActionDelete: - // { - // ann := obj.GetAnnotations() - // if ann == nil { - // ann = make(map[string]string, 2) - // } - // - // ann[constants.ObservabilityAccountNameKey] = g.ev.AccountName - // ann[constants.ObservabilityClusterNameKey] = g.ev.ClusterName - // obj.SetAnnotations(ann) - // - // b, err := yaml.Marshal(msg.Object) - // if err != nil { - // return g.handleErrorOnApply(ctx, err, msg) - // } - // - // if msg.Action == "apply" { - // if _, err := g.yamlClient.ApplyYAML(ctx, b); err != nil { - // mLogger.Infof("[%d] [error-on-apply]: %s", g.inMemCounter, err.Error()) - // mLogger.Infof("[%d] failed to process message", g.inMemCounter) - // return g.handleErrorOnApply(ctx, err, msg) - // } - // mLogger.Infof("[%d] processed message", g.inMemCounter) - // return nil - // } - // - // if msg.Action == "delete" { - // err := g.yamlClient.DeleteYAML(ctx, b) - // if err != nil { - // mLogger.Infof("[%d] [error-on-delete]: %v", g.inMemCounter, err) - // if apiErrors.IsNotFound(err) { - // mLogger.Infof("[%d] process message", g.inMemCounter) - // return g.handleErrorOnApply(ctx, err, msg) - // } - // mLogger.Infof("[%d] failed to process message", g.inMemCounter) - // } - // mLogger.Infof("[%d] processed message", g.inMemCounter) - // return nil - // } - // return nil - // } default: { err := errors.Newf("invalid action (%s)", msg.Action) @@ -230,6 +188,9 @@ func (g *grpcHandler) ensureAccessToken() error { return errors.NewE(err) } + if s.Data == nil { + s.Data = make(map[string][]byte, 1) + } s.Data["ACCESS_TOKEN"] = []byte(out.AccessToken) _, err = g.yamlClient.Client().CoreV1().Secrets(g.ev.AccessTokenSecretNamespace).Update(context.TODO(), s, metav1.UpdateOptions{}) if err != nil { From 3ddbd509e9b05ee0c2422a3610d9bc4b82e9bc23 Mon Sep 17 00:00:00 2001 From: nxtcoder17 Date: Thu, 1 Feb 2024 23:50:39 +0530 Subject: [PATCH 3/3] docs: Adds CHANGELOG and removes sweep AI from github repo --- .github/ISSUE_TEMPLATE/sweep-template.yml | 15 ------------- CHANGELOG.md | 13 +++++++++++ sweep.yaml | 27 ----------------------- 3 files changed, 13 insertions(+), 42 deletions(-) delete mode 100644 .github/ISSUE_TEMPLATE/sweep-template.yml create mode 100644 CHANGELOG.md delete mode 100644 sweep.yaml diff --git a/.github/ISSUE_TEMPLATE/sweep-template.yml b/.github/ISSUE_TEMPLATE/sweep-template.yml deleted file mode 100644 index 44116f535..000000000 --- a/.github/ISSUE_TEMPLATE/sweep-template.yml +++ /dev/null @@ -1,15 +0,0 @@ -name: Sweep Issue -title: 'Sweep: ' -description: For small bugs, features, refactors, and tests to be handled by Sweep, an AI-powered junior developer. -labels: sweep -body: - - type: textarea - id: description - attributes: - label: Details - description: Tell Sweep where and what to edit and provide enough context for a new developer to the codebase - placeholder: | - Unit Tests: Write unit tests for . Test each function in the file. Make sure to test edge cases. - Bugs: The bug might be in . Here are the logs: ... - Features: the new endpoint should use the ... class from because it contains ... logic. - Refactors: We are migrating this function to ... version because ... \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 000000000..41c66a076 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,13 @@ +# Changelog +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [Unreleased] + +## [v1.0.5] - 2024-02-02 + +### Added + +- [apps/infra] tenant clusters installation of `charts/kloudlite-agent` is now installed and managed by infra API. It is done to ensure that kloudlite can upgrade those releases, as new releases arrive diff --git a/sweep.yaml b/sweep.yaml deleted file mode 100644 index 89e1d0279..000000000 --- a/sweep.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# Sweep AI turns bugs & feature requests into code changes (https://sweep.dev) -# For details on our config file, check out our docs at https://docs.sweep.dev/usage/config - -# This setting contains a list of rules that Sweep will check for. If any of these rules are broken in a new commit, Sweep will create an pull request to fix the broken rule. -rules: - - "All new business logic should have corresponding unit tests." - - "Refactor large functions to be more modular." - - "Add docstrings to all functions and file headers." - -# This is the branch that Sweep will develop from and make pull requests to. Most people use 'main' or 'master' but some users also use 'dev' or 'staging'. -branch: 'main' - -# By default Sweep will read the logs and outputs from your existing Github Actions. To disable this, set this to false. -gha_enabled: True - -# This is the description of your project. It will be used by sweep when creating PRs. You can tell Sweep what's unique about your project, what frameworks you use, or anything else you want. -# -# Example: -# -# description: sweepai/sweep is a python project. The main api endpoints are in sweepai/api.py. Write code that adheres to PEP8. -description: '' - -# This sets whether to create pull requests as drafts. If this is set to True, then all pull requests will be created as drafts and GitHub Actions will not be triggered. -draft: False - -# This is a list of directories that Sweep will not be able to edit. -blocked_dirs: []