diff --git a/Taskfile.yml b/Taskfile.yml index d42d76b7..9a82b22a 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -14,7 +14,7 @@ dotenv: ['.env'] tasks: default: cmds: - - task: build + - task: build_all install_tools: desc: "Install required Dev tools by GDG" cmds: @@ -53,6 +53,11 @@ tasks: desc: "Build linux binary" cmds: - env GOOS='linux' GOARCH='amd64' go build -ldflags "{{ .LD_FLAGS }}" -o bin/{{ .BIN_NAME }}_linux cmd/gdg/main.go + build_all: + desc: "Buiding All binaries" + cmds: + - task: build + - task: build_generate build: desc: "Buiding {{ .BIN_NAME }} {{ .VERSION }}" cmds: diff --git a/cli/backup/backup.go b/cli/backup/backup.go index dc92ae5c..2a740cca 100644 --- a/cli/backup/backup.go +++ b/cli/backup/backup.go @@ -21,6 +21,7 @@ limited to clear/delete, list, download and upload. Any other functionality wil return cd.CobraCommand.Help() }, InitCFunc: func(cd *simplecobra.Commandeer, r *support.RootCommand) error { + support.InitConfiguration(cd.CobraCommand) r.GrafanaSvc().InitOrganizations() return nil }, diff --git a/cli/commandeer.go b/cli/commandeer.go index 9eb01dc9..701a3878 100644 --- a/cli/commandeer.go +++ b/cli/commandeer.go @@ -38,7 +38,6 @@ func getNewRootCmd() *support.RootCommand { NameP: "gdg", CommandEntries: []simplecobra.Commander{ newVersionCmd(), - newContextCmd(), tools.NewToolsCommand(), backup.NewBackupCommand(), }, diff --git a/cli/support/init_cfg.go b/cli/support/init_cfg.go new file mode 100644 index 00000000..b99d0fc6 --- /dev/null +++ b/cli/support/init_cfg.go @@ -0,0 +1,29 @@ +package support + +import ( + "github.com/esnet/gdg/internal/config" + appconfig "github.com/esnet/gdg/internal/log" + "github.com/spf13/cobra" + "os" +) + +// InitConfiguration Loads configuration, and setups fail over case +func InitConfiguration(cmd *cobra.Command) { + configOverride, _ := cmd.Flags().GetString("config") + if DefaultConfig == "" { + raw, err := os.ReadFile("config/importer-example.yml") + if err == nil { + DefaultConfig = string(raw) + } else { + DefaultConfig = "" + } + } + + //Registers sub CommandsList + config.InitConfig(configOverride, DefaultConfig) + appconfig.InitializeAppLogger(os.Stdout, os.Stderr, config.Config().IsDebug()) + + //Validate current configuration + config.Config().GetDefaultGrafanaConfig().Validate() + +} diff --git a/cli/support/root.go b/cli/support/root.go index b58b1c1a..ac1aa5cf 100644 --- a/cli/support/root.go +++ b/cli/support/root.go @@ -4,7 +4,6 @@ import ( "context" "errors" "github.com/bep/simplecobra" - "github.com/esnet/gdg/internal/config" appconfig "github.com/esnet/gdg/internal/log" "github.com/esnet/gdg/internal/service" "github.com/jedib0t/go-pretty/v6/table" @@ -63,22 +62,7 @@ func (c *RootCommand) PreRun(this, runner *simplecobra.Commandeer) error { // initConfiguration Loads configuration, and setups fail over case func (c *RootCommand) initConfiguration() { - cmd := c.initRunner.CobraCommand - configOverride, _ := cmd.Flags().GetString("config") - if DefaultConfig == "" { - raw, err := os.ReadFile("config/importer-example.yml") - if err == nil { - DefaultConfig = string(raw) - } else { - DefaultConfig = "" - } - } - //Registers sub CommandsList - config.InitConfig(configOverride, DefaultConfig) - appconfig.InitializeAppLogger(os.Stdout, os.Stderr, config.Config().GetGDGConfig().Global.Debug) - - //Validate current configuration - config.Config().GetDefaultGrafanaConfig().Validate() + appconfig.InitializeAppLogger(os.Stdout, os.Stderr, false) } diff --git a/cli/context.go b/cli/tools/context.go similarity index 99% rename from cli/context.go rename to cli/tools/context.go index 27e85974..9db182f8 100644 --- a/cli/context.go +++ b/cli/tools/context.go @@ -1,4 +1,4 @@ -package cli +package tools import ( "context" diff --git a/cli/tools/tools.go b/cli/tools/tools.go index 1c046e63..112c688b 100644 --- a/cli/tools/tools.go +++ b/cli/tools/tools.go @@ -13,10 +13,14 @@ func NewToolsCommand() simplecobra.Commander { NameP: "tools", Short: description, Long: description, - CommandsList: []simplecobra.Commander{newDevelCmd(), newUserCommand(), newAuthCmd(), newOrgCommand()}, + CommandsList: []simplecobra.Commander{newContextCmd(), newDevelCmd(), newUserCommand(), newAuthCmd(), newOrgCommand()}, WithCFunc: func(cmd *cobra.Command, r *support.RootCommand) { cmd.Aliases = []string{"t"} }, + InitCFunc: func(cd *simplecobra.Commandeer, r *support.RootCommand) error { + support.InitConfiguration(cd.CobraCommand) + return nil + }, RunFunc: func(ctx context.Context, cd *simplecobra.Commandeer, rootCmd *support.RootCommand, args []string) error { return cd.CobraCommand.Help() }, diff --git a/cli/version.go b/cli/version.go index 75cbf29a..f059ccda 100644 --- a/cli/version.go +++ b/cli/version.go @@ -7,19 +7,18 @@ import ( "github.com/esnet/gdg/cli/support" "github.com/esnet/gdg/internal/version" "github.com/spf13/cobra" - "os" + "log/slog" ) func newVersionCmd() simplecobra.Commander { return &support.SimpleCommand{ NameP: "version", RunFunc: func(ctx context.Context, cd *simplecobra.Commandeer, r *support.RootCommand, args []string) error { - stdout := os.Stdout - fmt.Fprintf(stdout, "Build Date: %s\n", version.BuildDate) - fmt.Fprintf(stdout, "Git Commit: %s\n", version.GitCommit) - fmt.Fprintf(stdout, "Version: %s\n", version.Version) - fmt.Fprintf(stdout, "Go Version: %s\n", version.GoVersion) - fmt.Fprintf(stdout, "OS / Arch: %s\n", version.OsArch) + slog.Info(fmt.Sprintf("Build Date: %s", version.BuildDate)) + slog.Info(fmt.Sprintf("Git Commit: %s", version.GitCommit)) + slog.Info(fmt.Sprintf("Version: %s", version.Version)) + slog.Info(fmt.Sprintf("Go Version: %s", version.GoVersion)) + slog.Info(fmt.Sprintf("OS / Arch: %s", version.OsArch)) return nil }, WithCFunc: func(cmd *cobra.Command, r *support.RootCommand) { diff --git a/cmd/gdg/main.go b/cmd/gdg/main.go index 87ff7cb4..1f50e5d5 100644 --- a/cmd/gdg/main.go +++ b/cmd/gdg/main.go @@ -1,7 +1,6 @@ package main import ( - _ "embed" "github.com/esnet/gdg/cli" "github.com/esnet/gdg/cli/support" "log" diff --git a/internal/config/config.go b/internal/config/config.go index 2c82adf0..b2d50acb 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -171,7 +171,7 @@ func (app *GDGAppConfiguration) GetContextMap() map[string]interface{} { } var ( - configData *Configuration + configData = new(Configuration) configSearchPaths = []string{"config", ".", "../config", "../../config", "/etc/gdg"} ) @@ -196,7 +196,10 @@ func (s *Configuration) GetContexts() map[string]*GrafanaConfig { // IsDebug returns true if debug mode is enabled func (s *Configuration) IsDebug() bool { - return s.GetViperConfig(ViperGdgConfig).GetBool("global.debug") + if val := s.GetViperConfig(ViperGdgConfig); val != nil { + return val.GetBool("global.debug") + } + return false } // IgnoreSSL returns true if SSL errors should be ignored diff --git a/internal/service/connection_permissions.go b/internal/service/connection_permissions.go index 0f405d53..129b44bb 100644 --- a/internal/service/connection_permissions.go +++ b/internal/service/connection_permissions.go @@ -3,20 +3,21 @@ package service import ( "encoding/json" "fmt" + "log" + "log/slog" + "path/filepath" + "strings" + "github.com/esnet/gdg/internal/config" "github.com/esnet/gdg/internal/service/filters" "github.com/esnet/gdg/internal/tools" "github.com/gosimple/slug" "github.com/grafana/grafana-openapi-client-go/client/datasource_permissions" "github.com/grafana/grafana-openapi-client-go/models" - "log" - "log/slog" - "path/filepath" - "strings" ) type ConnectionPermissions interface { - //Permissions Enterprise only + // Permissions Enterprise only ListConnectionPermissions(filter filters.Filter) map[*models.DataSourceListItemDTO]*models.DataSourcePermissionsDTO DownloadConnectionPermissions(filter filters.Filter) []string UploadConnectionPermissions(filter filters.Filter) []string @@ -100,7 +101,7 @@ func (s *DashNGoImpl) UploadConnectionPermissions(filter filters.Filter) []strin slog.Warn("Failed to Decode payload for file", "filename", fileLocation) continue } - //Get current permissions + // Get current permissions permissions, err := s.getConnectionPermission(newEntries.DatasourceID) if err != nil { slog.Error("connection permission could not be retrieved, cannot update permissions") @@ -108,7 +109,7 @@ func (s *DashNGoImpl) UploadConnectionPermissions(filter filters.Filter) []strin } success := true - //Delete datasource Permissions + // Delete datasource Permissions for _, p := range permissions.GetPayload().Permissions { success = s.deleteConnectionPermission(p.ID, newEntries.DatasourceID) } @@ -128,7 +129,6 @@ func (s *DashNGoImpl) UploadConnectionPermissions(filter filters.Filter) []strin p.SetBuiltinRole(tools.PtrOf(entry.BuiltInRole)) } _, err = s.GetClient().DatasourcePermissions.AddPermission(p) - //err = s.extended.AddConnectionPermission(p) if err != nil { slog.Error("Failed to update folder permissions") } else { diff --git a/internal/service/mocks/AuthenticationApi.go b/internal/service/mocks/AuthenticationApi.go index 855057d2..a453a7a3 100644 --- a/internal/service/mocks/AuthenticationApi.go +++ b/internal/service/mocks/AuthenticationApi.go @@ -3,10 +3,10 @@ package mocks import ( - api "github.com/esnet/gdg/internal/api" + models "github.com/grafana/grafana-openapi-client-go/models" mock "github.com/stretchr/testify/mock" - models "github.com/grafana/grafana-openapi-client-go/models" + types "github.com/esnet/gdg/internal/types" ) // AuthenticationApi is an autogenerated mock type for the AuthenticationApi type @@ -364,15 +364,15 @@ func (_c *AuthenticationApi_ListAPIKeys_Call) RunAndReturn(run func() []*models. } // ListServiceAccounts provides a mock function with given fields: -func (_m *AuthenticationApi) ListServiceAccounts() []*api.ServiceAccountDTOWithTokens { +func (_m *AuthenticationApi) ListServiceAccounts() []*types.ServiceAccountDTOWithTokens { ret := _m.Called() - var r0 []*api.ServiceAccountDTOWithTokens - if rf, ok := ret.Get(0).(func() []*api.ServiceAccountDTOWithTokens); ok { + var r0 []*types.ServiceAccountDTOWithTokens + if rf, ok := ret.Get(0).(func() []*types.ServiceAccountDTOWithTokens); ok { r0 = rf() } else { if ret.Get(0) != nil { - r0 = ret.Get(0).([]*api.ServiceAccountDTOWithTokens) + r0 = ret.Get(0).([]*types.ServiceAccountDTOWithTokens) } } @@ -396,12 +396,12 @@ func (_c *AuthenticationApi_ListServiceAccounts_Call) Run(run func()) *Authentic return _c } -func (_c *AuthenticationApi_ListServiceAccounts_Call) Return(_a0 []*api.ServiceAccountDTOWithTokens) *AuthenticationApi_ListServiceAccounts_Call { +func (_c *AuthenticationApi_ListServiceAccounts_Call) Return(_a0 []*types.ServiceAccountDTOWithTokens) *AuthenticationApi_ListServiceAccounts_Call { _c.Call.Return(_a0) return _c } -func (_c *AuthenticationApi_ListServiceAccounts_Call) RunAndReturn(run func() []*api.ServiceAccountDTOWithTokens) *AuthenticationApi_ListServiceAccounts_Call { +func (_c *AuthenticationApi_ListServiceAccounts_Call) RunAndReturn(run func() []*types.ServiceAccountDTOWithTokens) *AuthenticationApi_ListServiceAccounts_Call { _c.Call.Return(run) return _c } diff --git a/internal/service/mocks/GrafanaService.go b/internal/service/mocks/GrafanaService.go index 5a3edfb7..552c46b0 100644 --- a/internal/service/mocks/GrafanaService.go +++ b/internal/service/mocks/GrafanaService.go @@ -3,11 +3,12 @@ package mocks import ( - api "github.com/esnet/gdg/internal/api" filters "github.com/esnet/gdg/internal/service/filters" mock "github.com/stretchr/testify/mock" models "github.com/grafana/grafana-openapi-client-go/models" + + types "github.com/esnet/gdg/internal/types" ) // GrafanaService is an autogenerated mock type for the GrafanaService type @@ -1904,15 +1905,15 @@ func (_c *GrafanaService_ListOrganizations_Call) RunAndReturn(run func() []*mode } // ListServiceAccounts provides a mock function with given fields: -func (_m *GrafanaService) ListServiceAccounts() []*api.ServiceAccountDTOWithTokens { +func (_m *GrafanaService) ListServiceAccounts() []*types.ServiceAccountDTOWithTokens { ret := _m.Called() - var r0 []*api.ServiceAccountDTOWithTokens - if rf, ok := ret.Get(0).(func() []*api.ServiceAccountDTOWithTokens); ok { + var r0 []*types.ServiceAccountDTOWithTokens + if rf, ok := ret.Get(0).(func() []*types.ServiceAccountDTOWithTokens); ok { r0 = rf() } else { if ret.Get(0) != nil { - r0 = ret.Get(0).([]*api.ServiceAccountDTOWithTokens) + r0 = ret.Get(0).([]*types.ServiceAccountDTOWithTokens) } } @@ -1936,12 +1937,12 @@ func (_c *GrafanaService_ListServiceAccounts_Call) Run(run func()) *GrafanaServi return _c } -func (_c *GrafanaService_ListServiceAccounts_Call) Return(_a0 []*api.ServiceAccountDTOWithTokens) *GrafanaService_ListServiceAccounts_Call { +func (_c *GrafanaService_ListServiceAccounts_Call) Return(_a0 []*types.ServiceAccountDTOWithTokens) *GrafanaService_ListServiceAccounts_Call { _c.Call.Return(_a0) return _c } -func (_c *GrafanaService_ListServiceAccounts_Call) RunAndReturn(run func() []*api.ServiceAccountDTOWithTokens) *GrafanaService_ListServiceAccounts_Call { +func (_c *GrafanaService_ListServiceAccounts_Call) RunAndReturn(run func() []*types.ServiceAccountDTOWithTokens) *GrafanaService_ListServiceAccounts_Call { _c.Call.Return(run) return _c } diff --git a/internal/service/mocks/ServiceAccountApi.go b/internal/service/mocks/ServiceAccountApi.go index bf67e992..35184051 100644 --- a/internal/service/mocks/ServiceAccountApi.go +++ b/internal/service/mocks/ServiceAccountApi.go @@ -3,10 +3,10 @@ package mocks import ( - api "github.com/esnet/gdg/internal/api" + models "github.com/grafana/grafana-openapi-client-go/models" mock "github.com/stretchr/testify/mock" - models "github.com/grafana/grafana-openapi-client-go/models" + types "github.com/esnet/gdg/internal/types" ) // ServiceAccountApi is an autogenerated mock type for the ServiceAccountApi type @@ -222,15 +222,15 @@ func (_c *ServiceAccountApi_DeleteServiceAccountTokens_Call) RunAndReturn(run fu } // ListServiceAccounts provides a mock function with given fields: -func (_m *ServiceAccountApi) ListServiceAccounts() []*api.ServiceAccountDTOWithTokens { +func (_m *ServiceAccountApi) ListServiceAccounts() []*types.ServiceAccountDTOWithTokens { ret := _m.Called() - var r0 []*api.ServiceAccountDTOWithTokens - if rf, ok := ret.Get(0).(func() []*api.ServiceAccountDTOWithTokens); ok { + var r0 []*types.ServiceAccountDTOWithTokens + if rf, ok := ret.Get(0).(func() []*types.ServiceAccountDTOWithTokens); ok { r0 = rf() } else { if ret.Get(0) != nil { - r0 = ret.Get(0).([]*api.ServiceAccountDTOWithTokens) + r0 = ret.Get(0).([]*types.ServiceAccountDTOWithTokens) } } @@ -254,12 +254,12 @@ func (_c *ServiceAccountApi_ListServiceAccounts_Call) Run(run func()) *ServiceAc return _c } -func (_c *ServiceAccountApi_ListServiceAccounts_Call) Return(_a0 []*api.ServiceAccountDTOWithTokens) *ServiceAccountApi_ListServiceAccounts_Call { +func (_c *ServiceAccountApi_ListServiceAccounts_Call) Return(_a0 []*types.ServiceAccountDTOWithTokens) *ServiceAccountApi_ListServiceAccounts_Call { _c.Call.Return(_a0) return _c } -func (_c *ServiceAccountApi_ListServiceAccounts_Call) RunAndReturn(run func() []*api.ServiceAccountDTOWithTokens) *ServiceAccountApi_ListServiceAccounts_Call { +func (_c *ServiceAccountApi_ListServiceAccounts_Call) RunAndReturn(run func() []*types.ServiceAccountDTOWithTokens) *ServiceAccountApi_ListServiceAccounts_Call { _c.Call.Return(run) return _c } diff --git a/internal/service/serviceaccounts.go b/internal/service/serviceaccounts.go index d436119a..acaf30c5 100644 --- a/internal/service/serviceaccounts.go +++ b/internal/service/serviceaccounts.go @@ -2,9 +2,9 @@ package service import ( "fmt" + "github.com/esnet/gdg/internal/types" "log/slog" - "github.com/esnet/gdg/internal/api" "github.com/esnet/gdg/internal/tools" "github.com/grafana/grafana-openapi-client-go/client/service_accounts" "github.com/grafana/grafana-openapi-client-go/models" @@ -13,7 +13,7 @@ import ( ) type ServiceAccountApi interface { - ListServiceAccounts() []*api.ServiceAccountDTOWithTokens + ListServiceAccounts() []*types.ServiceAccountDTOWithTokens ListServiceAccountsTokens(id int64) ([]*models.TokenDTO, error) DeleteAllServiceAccounts() []string DeleteServiceAccountTokens(serviceId int64) []string @@ -52,7 +52,7 @@ func (s *DashNGoImpl) CreateServiceAccountToken(serviceAccountId int64, name str return token.GetPayload(), nil } -func (s *DashNGoImpl) ListServiceAccounts() []*api.ServiceAccountDTOWithTokens { +func (s *DashNGoImpl) ListServiceAccounts() []*types.ServiceAccountDTOWithTokens { p := service_accounts.NewSearchOrgServiceAccountsWithPagingParams() p.Disabled = tools.PtrOf(false) p.Perpage = tools.PtrOf(int64(5000)) @@ -62,8 +62,8 @@ func (s *DashNGoImpl) ListServiceAccounts() []*api.ServiceAccountDTOWithTokens { log.Fatal("unable to retrieve service accounts") } data := resp.GetPayload() - result := lo.Map(data.ServiceAccounts, func(entity *models.ServiceAccountDTO, _ int) *api.ServiceAccountDTOWithTokens { - t := api.ServiceAccountDTOWithTokens{ + result := lo.Map(data.ServiceAccounts, func(entity *models.ServiceAccountDTO, _ int) *types.ServiceAccountDTOWithTokens { + t := types.ServiceAccountDTOWithTokens{ ServiceAccount: entity, } return &t diff --git a/internal/api/models.go b/internal/types/models.go similarity index 92% rename from internal/api/models.go rename to internal/types/models.go index d334ab62..b9d8289b 100644 --- a/internal/api/models.go +++ b/internal/types/models.go @@ -1,4 +1,4 @@ -package api +package types import "github.com/grafana/grafana-openapi-client-go/models" diff --git a/website/content/en/docs/gdg/configuration.md b/website/content/en/docs/gdg/configuration.md index bbdbf095..6405e38e 100644 --- a/website/content/en/docs/gdg/configuration.md +++ b/website/content/en/docs/gdg/configuration.md @@ -271,7 +271,7 @@ The pattern for GDG's is as follows: `GDG_SECTION__SECTION__keyname` For example if I want to set the context name to a different value I can use: ```sh -GDG_CONTEXT_NAME="testing" gdg ctx show ## Which will override the value from the context file. +GDG_CONTEXT_NAME="testing" gdg tools ctx show ## Which will override the value from the context file. GDG_CONTEXTS__TESTING__URL="www.google.com" Will override the URL with the one provided. ``` diff --git a/website/content/en/docs/gdg/getting_started.md b/website/content/en/docs/gdg/getting_started.md index c2953c46..a5bcd9ce 100644 --- a/website/content/en/docs/gdg/getting_started.md +++ b/website/content/en/docs/gdg/getting_started.md @@ -7,7 +7,7 @@ weight: 13 You can create new context configuration using an interactive setup. ``` -$ ./bin/gdg ctx new mycontext +$ ./bin/gdg tools ctx new mycontext ``` When creating a new context, you will be asked for authorization type, your default datasource and username/password, along with which folders you wish to manage under the context. You have three options: diff --git a/website/content/en/docs/gdg/installation.md b/website/content/en/docs/gdg/installation.md index 06a34090..3f76e270 100644 --- a/website/content/en/docs/gdg/installation.md +++ b/website/content/en/docs/gdg/installation.md @@ -81,7 +81,7 @@ You can verify the version by running `gdg version`. ## Configuration -You can then create a simple configuration using `gdg ctx new` which will do a best effort to guide to setup a basic config that will get you up and going or read the more detailed documentation that can be found [here](/gdg/docs/gdg/configuration/) +You can then create a simple configuration using `gdg tools ctx new` which will do a best effort to guide to setup a basic config that will get you up and going or read the more detailed documentation that can be found [here](/gdg/docs/gdg/configuration/) **NOTE**: wizard doesn't currently support ALL features but it should help you get a head start. diff --git a/website/content/en/docs/gdg/other_commands.md b/website/content/en/docs/gdg/other_commands.md index c058dacb..c2ff3519 100644 --- a/website/content/en/docs/gdg/other_commands.md +++ b/website/content/en/docs/gdg/other_commands.md @@ -12,12 +12,12 @@ Starting with version 0.1.4 contexts are now supported. Your config can contain ctx is shorthand for context and basic CRUD is supported which is mainly tooling to make it easier to avoid updating the yaml file manually ```sh -./bin/gdg ctx list -- Lists all known contexts -./bin/gdg ctx show qa -- shows the configuration for the selected context -./bin/gdg ctx set production -- updates the active config and sets it to the request value. -./bin/gdg ctx delete qa -- Deletes the QA context -./bin/gdg ctx cp qa staging -- copies the qa context to staging and sets it as active -./bin/gdg ctx clear -- Will delete all active contexts leaving only a single example entry +./bin/gdg tools ctx list -- Lists all known contexts +./bin/gdg tools ctx show qa -- shows the configuration for the selected context +./bin/gdg tools ctx set production -- updates the active config and sets it to the request value. +./bin/gdg tools ctx delete qa -- Deletes the QA context +./bin/gdg tools ctx cp qa staging -- copies the qa context to staging and sets it as active +./bin/gdg tools ctx clear -- Will delete all active contexts leaving only a single example entry ``` ### Version diff --git a/website/content/en/docs/releases/current_release.md b/website/content/en/docs/releases/current_release.md deleted file mode 100644 index 2d61360a..00000000 --- a/website/content/en/docs/releases/current_release.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: "Current Release Notes" -description: "Release Notes for Current Version" -date: 2023-03-31T15:21:01+02:00 -lastmod: 2023-04-14T19:25:12+02:00 -draft: true -images: [] -weight: 199 -toc: true ---- - -## Release Notes for v0.5.2 -**Release Date: TBD 12/13/2023** - - -### Changes - - Replacing Connection Auth with a secure/foobar.json file. Allows for more flexible data to be pushed to grafana. - - [TechDebt] refactored packages, moving cmd-> cli, and created cmd/ to allow for multiple binaries to be generated. - - [#168](https://github.com/esnet/gdg/issues/168) Introduced a new tool called gdg-generate which allows for templating of dashboards using go.tmpl syntax. - - - -### Bug Fixes - - [#111](https://github.com/esnet/gdg/issues/111) Did good - -### Developer Changes - - - diff --git a/website/content/en/docs/releases/gdg_0.5.md b/website/content/en/docs/releases/gdg_0.5.md index b1f0934c..e790bd07 100644 --- a/website/content/en/docs/releases/gdg_0.5.md +++ b/website/content/en/docs/releases/gdg_0.5.md @@ -8,6 +8,20 @@ weight: 197 toc: true --- +## Release Notes for v0.5.2 +### Changes + - Replacing Connection Auth with a secure/foobar.json file. Allows for more flexible data to be pushed to grafana. + - *TechDebt* refactored packages, moving cmd-> cli, and created cmd/ to allow for multiple binaries to be generated. + - [#168](https://github.com/esnet/gdg/issues/168) Introduced a new tool called gdg-generate which allows for templating of dashboards using go.tmpl syntax. + - gdg context has been moved under tools. ie. `gdg tools ctx` instead of `gdg ctx` + - [#221](https://github.com/esnet/gdg/issues/221) Version check no longer requires a valid configuration + +### Bug Fixes + +### Developer Changes + - Migrated to Office Grafana GoLang API + + ## Release Notes for v0.5.1 **Release Date: 11/03/2023**