Skip to content

Commit

Permalink
Merge branch 'main' into krancour/gc
Browse files Browse the repository at this point in the history
  • Loading branch information
krancour authored Jul 24, 2023
2 parents 7f07c1f + 1c73e70 commit 93d3aa3
Show file tree
Hide file tree
Showing 10 changed files with 425 additions and 210 deletions.
5 changes: 4 additions & 1 deletion api/service/v1alpha1/service.proto
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ syntax = "proto3";

package akuity.io.kargo.service.v1alpha1;

import "google/protobuf/timestamp.proto";

option go_package = "github.com/akuity/kargo/pkg/api/service/v1alpha1;svcv1alpha1";

import "v1alpha1/generated.proto";
Expand Down Expand Up @@ -85,14 +87,15 @@ message PromoteStageResponse {

message Project {
string name = 1;
google.protobuf.Timestamp create_time = 2;
}

message CreateProjectRequest {
string name = 1;
}

message CreateProjectResponse {
string name = 1;
Project project = 1;
}

message ListProjectsRequest {
Expand Down
2 changes: 2 additions & 0 deletions cmd/cli/root.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import (
"github.com/akuity/kargo/internal/api"
apioption "github.com/akuity/kargo/internal/api/option"
"github.com/akuity/kargo/internal/cli/option"
"github.com/akuity/kargo/internal/cli/project"
"github.com/akuity/kargo/internal/cli/stage"
"github.com/akuity/kargo/internal/kubeclient"
)
Expand Down Expand Up @@ -105,6 +106,7 @@ func NewRootCommand(opt *option.Option) (*cobra.Command, error) {
option.LocalServer(&opt.UseLocalServer)(cmd.PersistentFlags())

cmd.AddCommand(stage.NewCommand(opt))
cmd.AddCommand(project.NewCommand(opt))
cmd.AddCommand(newVersionCommand())
return cmd, nil
}
Expand Down
6 changes: 5 additions & 1 deletion internal/api/handler/create_project_v1alpha1.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (

"github.com/bufbuild/connect-go"
"github.com/pkg/errors"
"google.golang.org/protobuf/types/known/timestamppb"
corev1 "k8s.io/api/core/v1"
kubeerr "k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
Expand Down Expand Up @@ -58,7 +59,10 @@ func CreateProjectV1Alpha1(
return nil, connect.NewError(connect.CodeInternal, err)
}
return connect.NewResponse(&svcv1alpha1.CreateProjectResponse{
Name: ns.Name,
Project: &svcv1alpha1.Project{
Name: ns.Name,
CreateTime: timestamppb.New(ns.CreationTimestamp.Time),
},
}), nil
}
}
4 changes: 3 additions & 1 deletion internal/api/handler/list_projects_v1alpha1.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"context"

"github.com/bufbuild/connect-go"
"google.golang.org/protobuf/types/known/timestamppb"
corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/labels"
"sigs.k8s.io/controller-runtime/pkg/client"
Expand Down Expand Up @@ -34,7 +35,8 @@ func ListProjectsV1Alpha1(
var projects []*svcv1alpha1.Project
for _, ns := range nsList.Items {
projects = append(projects, &svcv1alpha1.Project{
Name: ns.Name,
Name: ns.Name,
CreateTime: timestamppb.New(ns.CreationTimestamp.Time),
})
}

Expand Down
59 changes: 59 additions & 0 deletions internal/cli/project/create.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package project

import (
"fmt"
"net/http"
"strings"

"github.com/bufbuild/connect-go"
"github.com/pkg/errors"
"github.com/spf13/cobra"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/utils/pointer"

kubev1alpha1 "github.com/akuity/kargo/api/v1alpha1"
"github.com/akuity/kargo/internal/cli/option"
v1alpha1 "github.com/akuity/kargo/pkg/api/service/v1alpha1"
"github.com/akuity/kargo/pkg/api/service/v1alpha1/svcv1alpha1connect"
)

func newCreateCommand(opt *option.Option) *cobra.Command {
cmd := &cobra.Command{
Use: "create",
Args: cobra.ExactArgs(1),
Example: "kargo project create (NAME)",
RunE: func(cmd *cobra.Command, args []string) error {
ctx := cmd.Context()

name := strings.TrimSpace(args[0])
if name == "" {
return errors.New("name is required")
}

client := svcv1alpha1connect.NewKargoServiceClient(http.DefaultClient, opt.ServerURL, opt.ClientOption)
res, err := client.CreateProject(ctx, connect.NewRequest(&v1alpha1.CreateProjectRequest{
Name: name,
}))
if err != nil {
return errors.Wrap(err, "create project")
}
if pointer.StringDeref(opt.PrintFlags.OutputFormat, "") == "" {
_, _ = fmt.Fprintf(opt.IOStreams.Out, "Project Created: %q", res.Msg.GetProject().GetName())
return nil
}
var project unstructured.Unstructured
project.SetAPIVersion(kubev1alpha1.GroupVersion.String())
project.SetKind("Project")
project.SetCreationTimestamp(metav1.NewTime(res.Msg.GetProject().GetCreateTime().AsTime()))
project.SetName(project.GetName())
printer, err := opt.PrintFlags.ToPrinter()
if err != nil {
return errors.Wrap(err, "new printer")
}
return printer.PrintObj(&project, opt.IOStreams.Out)
},
}
opt.PrintFlags.AddFlags(cmd)
return cmd
}
42 changes: 42 additions & 0 deletions internal/cli/project/delete.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package project

import (
"fmt"
"net/http"
"strings"

"github.com/bufbuild/connect-go"
"github.com/pkg/errors"
"github.com/spf13/cobra"

"github.com/akuity/kargo/internal/cli/option"
v1alpha1 "github.com/akuity/kargo/pkg/api/service/v1alpha1"
"github.com/akuity/kargo/pkg/api/service/v1alpha1/svcv1alpha1connect"
)

func newDeleteCommand(opt *option.Option) *cobra.Command {
cmd := &cobra.Command{
Use: "delete",
Args: cobra.ExactArgs(1),
Example: "kargo project delete (NAME)",
RunE: func(cmd *cobra.Command, args []string) error {
ctx := cmd.Context()

name := strings.TrimSpace(args[0])
if name == "" {
return errors.New("name is required")
}

client := svcv1alpha1connect.NewKargoServiceClient(http.DefaultClient, opt.ServerURL, opt.ClientOption)
_, err := client.DeleteProject(ctx, connect.NewRequest(&v1alpha1.DeleteProjectRequest{
Name: name,
}))
if err != nil {
return errors.Wrap(err, "delete project")
}
_, _ = fmt.Fprintf(opt.IOStreams.Out, "Project Deleted: %q", name)
return nil
},
}
return cmd
}
58 changes: 58 additions & 0 deletions internal/cli/project/list.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package project

import (
"net/http"

"github.com/bufbuild/connect-go"
"github.com/pkg/errors"
"github.com/spf13/cobra"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/cli-runtime/pkg/printers"
"k8s.io/utils/pointer"

kubev1alpha1 "github.com/akuity/kargo/api/v1alpha1"
"github.com/akuity/kargo/internal/cli/option"
v1alpha1 "github.com/akuity/kargo/pkg/api/service/v1alpha1"
"github.com/akuity/kargo/pkg/api/service/v1alpha1/svcv1alpha1connect"
)

func newListCommand(opt *option.Option) *cobra.Command {
cmd := &cobra.Command{
Use: "list",
Example: "kargo project list",
RunE: func(cmd *cobra.Command, args []string) error {
ctx := cmd.Context()

client := svcv1alpha1connect.NewKargoServiceClient(http.DefaultClient, opt.ServerURL, opt.ClientOption)
res, err := client.ListProjects(ctx, connect.NewRequest(&v1alpha1.ListProjectsRequest{
/* explicitly empty */
}))
if err != nil {
return errors.Wrap(err, "list projects")
}
list := &unstructured.UnstructuredList{}
list.SetAPIVersion(metav1.Unversioned.String())
list.SetKind("List")
for _, project := range res.Msg.GetProjects() {
item := &unstructured.Unstructured{}
item.SetAPIVersion(kubev1alpha1.GroupVersion.String())
item.SetKind("Project")
item.SetCreationTimestamp(metav1.NewTime(project.GetCreateTime().AsTime()))
item.SetName(project.GetName())
list.Items = append(list.Items, *item)
}
if pointer.StringDeref(opt.PrintFlags.OutputFormat, "") == "" {
_ = printers.NewTablePrinter(printers.PrintOptions{}).PrintObj(list, opt.IOStreams.Out)
return nil
}
printer, err := opt.PrintFlags.ToPrinter()
if err != nil {
return errors.Wrap(err, "new printer")
}
return printer.PrintObj(list, opt.IOStreams.Out)
},
}
opt.PrintFlags.AddFlags(cmd)
return cmd
}
18 changes: 18 additions & 0 deletions internal/cli/project/project.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package project

import (
"github.com/spf13/cobra"

"github.com/akuity/kargo/internal/cli/option"
)

func NewCommand(opt *option.Option) *cobra.Command {
cmd := &cobra.Command{
Use: "project",
Short: "Manage projects",
}
cmd.AddCommand(newCreateCommand(opt))
cmd.AddCommand(newDeleteCommand(opt))
cmd.AddCommand(newListCommand(opt))
return cmd
}
Loading

0 comments on commit 93d3aa3

Please sign in to comment.