Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions genqlient.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
schema: schema.graphql
optional: pointer
operations:
- internal/**/*.go
bindings:
Expand Down
5 changes: 3 additions & 2 deletions internal/activity/activity.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (

"github.com/nais/cli/internal/naisapi"
"github.com/nais/cli/internal/naisapi/gql"
"k8s.io/utils/ptr"
)

type Entry struct {
Expand Down Expand Up @@ -40,14 +41,14 @@ func List(ctx context.Context, team string, activityTypes []gql.ActivityLogActiv
return nil, err
}

resp, err := gql.GetTeamActivity(ctx, client, team, activityTypes, limit)
resp, err := gql.GetTeamActivity(ctx, client, team, activityTypes, new(limit))
if err != nil {
return nil, err
}

ret := make([]Entry, 0, len(resp.Team.ActivityLog.Nodes))
for _, entry := range resp.Team.ActivityLog.Nodes {
env := entry.GetEnvironmentName()
env := ptr.Deref(entry.GetEnvironmentName(), "")
if env == "" {
env = "N/A"
}
Expand Down
7 changes: 4 additions & 3 deletions internal/app/activity.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (

"github.com/nais/cli/internal/naisapi"
"github.com/nais/cli/internal/naisapi/gql"
"k8s.io/utils/ptr"
)

type ApplicationActivity struct {
Expand Down Expand Up @@ -46,7 +47,7 @@ func GetApplicationActivity(ctx context.Context, team, name string, environment
return nil, false, err
}

resp, err := gql.GetApplicationActivity(ctx, client, team, name, []string{environment}, activityTypes, limit)
resp, err := gql.GetApplicationActivity(ctx, client, team, name, []string{environment}, activityTypes, new(limit))
if err != nil {
return nil, false, err
}
Expand All @@ -63,8 +64,8 @@ func GetApplicationActivity(ctx context.Context, team, name string, environment
defaultEnv := a.TeamEnvironment.Environment.Name
for _, entry := range a.ActivityLog.Nodes {
env := defaultEnv
if entry.GetEnvironmentName() != "" {
env = entry.GetEnvironmentName()
if ptr.Deref(entry.GetEnvironmentName(), "") != "" {
env = ptr.Deref(entry.GetEnvironmentName(), "")
}
ret = append(ret, ApplicationActivity{
CreatedAt: entry.GetCreatedAt(),
Expand Down
8 changes: 4 additions & 4 deletions internal/app/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ func GetApplicationInstances(ctx context.Context, team, app, env string) ([]stri

filter := gql.TeamApplicationsFilter{
Environments: []string{env},
Name: app,
Name: new(app),
}
orderBy := gql.ApplicationOrder{
Field: gql.ApplicationOrderFieldIssues,
Expand All @@ -48,7 +48,7 @@ func GetApplicationInstances(ctx context.Context, team, app, env string) ([]stri
return nil, err
}

resp, err := gql.GetApplicationInstances(ctx, client, team, orderBy, filter)
resp, err := gql.GetApplicationInstances(ctx, client, team, new(orderBy), new(filter))
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -93,10 +93,10 @@ func ApplicationEnvironments(ctx context.Context, team, appName string) ([]strin
}

filter := gql.TeamApplicationsFilter{
Name: appName,
Name: new(appName),
}

resp, err := gql.ApplicationEnvironments(ctx, client, team, filter)
resp, err := gql.ApplicationEnvironments(ctx, client, team, new(filter))
if err != nil {
return nil, err
}
Expand Down
3 changes: 2 additions & 1 deletion internal/app/delete.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (

"github.com/nais/cli/internal/naisapi"
"github.com/nais/cli/internal/naisapi/gql"
"k8s.io/utils/ptr"
)

// DeleteApp starts deletion of an application. The Nais API deletes the
Expand All @@ -32,7 +33,7 @@ func DeleteApp(ctx context.Context, team, name, env string) error {
return err
}

if !resp.DeleteApplication.Success {
if !ptr.Deref(resp.DeleteApplication.Success, false) {
return fmt.Errorf("deletion of %q in %q was not successful", name, env)
}

Expand Down
3 changes: 2 additions & 1 deletion internal/app/envvars.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (

"github.com/nais/cli/internal/naisapi"
"github.com/nais/cli/internal/naisapi/gql"
"k8s.io/utils/ptr"
)

type ValueSource struct {
Expand Down Expand Up @@ -109,7 +110,7 @@ func GetApplicationEnvVars(ctx context.Context, slug, name, env string) ([]EnvVa
ret = append(ret, EnvVar{
Name: ev.Name,
Value: EnvVarValue{
Value: ev.Value,
Value: ptr.Deref(ev.Value, ""),
IsSecret: isSecret,
},
Source: ValueSource{
Expand Down
3 changes: 2 additions & 1 deletion internal/app/files.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (

"github.com/nais/cli/internal/naisapi"
"github.com/nais/cli/internal/naisapi/gql"
"k8s.io/utils/ptr"
)

type MountedFileError struct {
Expand Down Expand Up @@ -91,7 +92,7 @@ func GetApplicationFiles(ctx context.Context, slug, name, env string) ([]Mounted
Name: f.Source.Name,
},
Error: MountedFileError{
Error: f.Error,
Error: ptr.Deref(f.Error, ""),
},
})
}
Expand Down
2 changes: 1 addition & 1 deletion internal/app/list.go
Original file line number Diff line number Diff line change
Expand Up @@ -183,7 +183,7 @@ func GetTeamApplications(ctx context.Context, team string, orderBy gql.Applicati
return nil, err
}

resp, err := gql.GetTeamApplications(ctx, client, team, orderBy, filter)
resp, err := gql.GetTeamApplications(ctx, client, team, new(orderBy), new(filter))
if err != nil {
return nil, err
}
Expand Down
10 changes: 6 additions & 4 deletions internal/auth/auth.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import (

"github.com/nais/cli/internal/naisapi"
"github.com/nais/cli/internal/naisapi/gql"
"k8s.io/utils/ptr"
)

// GetEnvironmentOIDCIssuer returns the OIDC issuer URL for workload identity
Expand All @@ -34,17 +35,18 @@ func GetEnvironmentOIDCIssuer(ctx context.Context, env string) (*url.URL, error)
return nil, err
}

if resp.Environment.OidcIssuerURL == "" {
issuerURL := ptr.Deref(resp.Environment.OidcIssuerURL, "")
if issuerURL == "" {
return nil, fmt.Errorf("environment %q does not support workload identity (no OIDC issuer URL)", env)
}

issuer, err := url.Parse(resp.Environment.OidcIssuerURL)
issuer, err := url.Parse(issuerURL)
if err != nil {
return nil, fmt.Errorf("parsing OIDC issuer URL %q for environment %q: %w", resp.Environment.OidcIssuerURL, env, err)
return nil, fmt.Errorf("parsing OIDC issuer URL %q for environment %q: %w", issuerURL, env, err)
}

if issuer.Scheme != "https" || issuer.Host == "" || issuer.RawQuery != "" || issuer.Fragment != "" {
return nil, fmt.Errorf("invalid OIDC issuer URL %q for environment %q: expected an absolute https URL without query or fragment", resp.Environment.OidcIssuerURL, env)
return nil, fmt.Errorf("invalid OIDC issuer URL %q for environment %q: expected an absolute https URL without query or fragment", issuerURL, env)
}

return issuer, nil
Expand Down
5 changes: 3 additions & 2 deletions internal/config/activity.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import (

"github.com/nais/cli/internal/naisapi"
"github.com/nais/cli/internal/naisapi/gql"
"k8s.io/utils/ptr"
)

type ConfigActivity struct {
Expand Down Expand Up @@ -60,7 +61,7 @@ func GetActivity(ctx context.Context, team, name string, environment string, act
return nil, false, err
}

resp, err := gql.GetConfigActivity(ctx, client, team, name, activityTypes, limit)
resp, err := gql.GetConfigActivity(ctx, client, team, name, activityTypes, new(limit))
if err != nil {
return nil, false, err
}
Expand All @@ -73,7 +74,7 @@ func GetActivity(ctx context.Context, team, name string, environment string, act
CreatedAt: entry.GetCreatedAt(),
Actor: entry.GetActor(),
Message: entry.GetMessage(),
EnvironmentName: entry.GetEnvironmentName(),
EnvironmentName: ptr.Deref(entry.GetEnvironmentName(), ""),
})
}

Expand Down
4 changes: 3 additions & 1 deletion internal/config/command/get.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,15 @@ import (
"encoding/base64"
"fmt"
"os"
"time"

"github.com/nais/cli/internal/config"
"github.com/nais/cli/internal/config/command/flag"
"github.com/nais/cli/internal/naisapi/gql"
"github.com/nais/cli/internal/validation"
"github.com/nais/naistrix"
"github.com/nais/naistrix/output"
"k8s.io/utils/ptr"
)

// Entry represents a key-value pair in a config.
Expand Down Expand Up @@ -143,7 +145,7 @@ func runGetCommand(ctx context.Context, args *naistrix.Arguments, out *naistrix.
Name: existing.Name,
Environment: existing.TeamEnvironment.Environment.Name,
Data: entries,
LastModified: config.LastModified(existing.LastModifiedAt),
LastModified: config.LastModified(ptr.Deref(existing.LastModifiedAt, time.Time{})),
}
if existing.LastModifiedBy.Email != "" {
detail.ModifiedBy = existing.LastModifiedBy.Email
Expand Down
4 changes: 3 additions & 1 deletion internal/config/command/list.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,15 @@ import (
"context"
"fmt"
"strings"
"time"

"github.com/nais/cli/internal/config"
"github.com/nais/cli/internal/config/command/flag"
"github.com/nais/cli/internal/labels"
"github.com/nais/cli/internal/naisapi/gql"
"github.com/nais/naistrix"
"github.com/nais/naistrix/output"
"k8s.io/utils/ptr"
)

type ConfigSummary struct {
Expand Down Expand Up @@ -80,7 +82,7 @@ func list(parentFlags *flag.Config) *naistrix.Command {
Environment: envName,
Keys: summarizeList(keyNames),
Workloads: summarizeList(workloadNames),
LastModified: config.LastModified(c.LastModifiedAt),
LastModified: config.LastModified(ptr.Deref(c.LastModifiedAt, time.Time{})),
})
}

Expand Down
24 changes: 14 additions & 10 deletions internal/config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,10 @@ import (
"slices"
"time"

"github.com/davecgh/go-spew/spew"
"github.com/nais/cli/internal/naisapi"
"github.com/nais/cli/internal/naisapi/gql"
"k8s.io/utils/ptr"
)

// Metadata identifies a specific config in a team environment.
Expand Down Expand Up @@ -58,7 +60,7 @@ func (t LastModified) MarshalJSON() ([]byte, error) {

// ConfigEnvironments returns the environments where a config with the given name exists.
func ConfigEnvironments(ctx context.Context, teamSlug, name string) ([]string, error) {
all, err := GetAll(ctx, teamSlug, gql.ConfigFilter{Name: name})
all, err := GetAll(ctx, teamSlug, gql.ConfigFilter{Name: new(name)})
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -110,11 +112,13 @@ func GetAll(ctx context.Context, teamSlug string, filter gql.ConfigFilter) ([]gq
return nil, err
}

resp, err := gql.GetAllConfigs(ctx, client, teamSlug, filter)
resp, err := gql.GetAllConfigs(ctx, client, teamSlug, new(filter))
if err != nil {
return nil, err
}

spew.Dump(resp.Team.Configs.Nodes)

return resp.Team.Configs.Nodes, nil
}

Expand Down Expand Up @@ -188,7 +192,7 @@ func Create(ctx context.Context, metadata Metadata) (*gql.CreateConfigCreateConf
return nil, err
}

return &resp.CreateConfig.Config, nil
return resp.CreateConfig.Config, nil
}

// CreateWithValues creates a new config with the given values and labels in a single operation.
Expand Down Expand Up @@ -255,7 +259,7 @@ func Delete(ctx context.Context, metadata Metadata) (bool, error) {
return false, err
}

return resp.DeleteConfig.ConfigDeleted, nil
return ptr.Deref(resp.DeleteConfig.ConfigDeleted, false), nil
}

// SetValue sets a key-value pair in a config. If the key already exists, its value is updated.
Expand Down Expand Up @@ -297,7 +301,7 @@ func addValue(ctx context.Context, metadata Metadata, key, value string, encodin
_, err = gql.AddConfigValue(ctx, client, metadata.Name, metadata.EnvironmentName, metadata.TeamSlug, gql.ConfigValueInput{
Name: key,
Value: value,
Encoding: encoding,
Encoding: new(encoding),
})
return err
}
Expand All @@ -322,7 +326,7 @@ func updateValue(ctx context.Context, metadata Metadata, key, value string, enco
_, err = gql.UpdateConfigValue(ctx, client, metadata.Name, metadata.EnvironmentName, metadata.TeamSlug, gql.ConfigValueInput{
Name: key,
Value: value,
Encoding: encoding,
Encoding: new(encoding),
})
return err
}
Expand Down Expand Up @@ -358,10 +362,10 @@ func FormatDetails(metadata Metadata, c *gql.GetConfigTeamEnvironmentConfig) [][
{"Name", c.Name},
}

if !c.LastModifiedAt.IsZero() {
data = append(data, []string{"Last Modified", LastModified(c.LastModifiedAt).String()})
if c.LastModifiedAt != nil && !c.LastModifiedAt.IsZero() {
data = append(data, []string{"Last Modified", LastModified(*c.LastModifiedAt).String()})
}
if c.LastModifiedBy.Email != "" {
if c.LastModifiedBy != nil && c.LastModifiedBy.Email != "" {
data = append(data, []string{"Modified By", c.LastModifiedBy.Email})
}

Expand Down Expand Up @@ -398,7 +402,7 @@ func FormatWorkloads(c *gql.GetConfigTeamEnvironmentConfig) [][]string {
for _, w := range c.Workloads.Nodes {
workloads = append(workloads, []string{
w.GetName(),
w.GetTypename(),
ptr.Deref(w.GetTypename(), ""),
})
}

Expand Down
10 changes: 5 additions & 5 deletions internal/config/config_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,8 @@ func TestFormatDetails(t *testing.T) {
TeamEnvironment: gql.GetConfigTeamEnvironmentConfigTeamEnvironment{
Environment: gql.GetConfigTeamEnvironmentConfigTeamEnvironmentEnvironment{Name: "dev"},
},
LastModifiedAt: recentTime,
LastModifiedBy: gql.GetConfigTeamEnvironmentConfigLastModifiedByUser{Email: "user@example.com"},
LastModifiedAt: new(recentTime),
LastModifiedBy: &gql.GetConfigTeamEnvironmentConfigLastModifiedByUser{Email: "user@example.com"},
},
want: [][]string{
{"Field", "Value"},
Expand Down Expand Up @@ -78,7 +78,7 @@ func TestFormatDetails(t *testing.T) {
TeamEnvironment: gql.GetConfigTeamEnvironmentConfigTeamEnvironment{
Environment: gql.GetConfigTeamEnvironmentConfigTeamEnvironmentEnvironment{Name: "staging"},
},
LastModifiedAt: recentTime,
LastModifiedAt: new(recentTime),
},
want: [][]string{
{"Field", "Value"},
Expand Down Expand Up @@ -200,11 +200,11 @@ func TestFormatWorkloads(t *testing.T) {
Nodes: []gql.GetConfigTeamEnvironmentConfigWorkloadsWorkloadConnectionNodesWorkload{
&gql.GetConfigTeamEnvironmentConfigWorkloadsWorkloadConnectionNodesApplication{
Name: "my-app",
Typename: "Application",
Typename: new("Application"),
},
&gql.GetConfigTeamEnvironmentConfigWorkloadsWorkloadConnectionNodesJob{
Name: "my-job",
Typename: "Job",
Typename: new("Job"),
},
},
},
Expand Down
Loading
Loading