Skip to content

Commit

Permalink
feat: make prefix configurable
Browse files Browse the repository at this point in the history
  • Loading branch information
franklinkim committed Mar 14, 2024
1 parent b8297aa commit e5fcca2
Show file tree
Hide file tree
Showing 29 changed files with 861 additions and 691 deletions.
25 changes: 20 additions & 5 deletions _example/sesamy.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,28 @@ google:

typescript:
packages:
- path: "github.com/foomo/sesamy-cli/_example/server"
output_path: "./_example/client/types.d.ts"
indent: "\t"
- path: 'github.com/foomo/sesamy-cli/_example/server'
output_path: './_example/client/types.d.ts'
indent: '\t'

tagmanager:
packages:
- path: "github.com/foomo/sesamy-cli/_example/server"
output_path: "./_example/client/types.d.ts"
- path: 'github.com/foomo/sesamy-cli/_example/server'
output_path: './_example/client/types.d.ts'
exclude_files:
- item.go
prefixes:
client: ''
folder: ''
tags:
ga4_event: 'GA4 - '
google_tag: ''
server_ga4_event: 'GA4 - '
triggers:
client: ''
custom_event: 'Event - '
variables:
constant: ''
event_model: 'dlv.eventModel.'
gt_event_settings: 'Event Settings - '
gt_settings: 'Setttings - '
25 changes: 16 additions & 9 deletions cmd/root.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package cmd
import (
"bytes"
"io"
"log/slog"
"os"

"github.com/foomo/sesamy-cli/pkg/config"
Expand All @@ -13,7 +14,7 @@ import (
)

var (
logger *pterm.Logger
logger *slog.Logger
verbose bool
cfgFilename string
cfg *config.Config
Expand Down Expand Up @@ -46,7 +47,7 @@ func init() {

// Cobra also supports local flags, which will only run
// when this action is called directly.
//rootCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle")
// rootCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle")
}

// initConfig reads in config file and ENV variables if set.
Expand All @@ -64,14 +65,20 @@ func initConfig() {
}

// read in environment variables that match
//viper.EnvKeyReplacer(strings.NewReplacer(".", "_"))
//viper.SetEnvPrefix("SESAMY")
//viper.AutomaticEnv()
// viper.EnvKeyReplacer(strings.NewReplacer(".", "_"))
// viper.SetEnvPrefix("SESAMY")
// viper.AutomaticEnv()

logger = pterm.DefaultLogger.WithTime(false)
plogger := pterm.DefaultLogger.WithTime(false)
if verbose {
logger = logger.WithLevel(pterm.LogLevelTrace).WithCaller(true)
plogger = plogger.WithLevel(pterm.LogLevelTrace).WithCaller(true)
}

// Create a new slog handler with the default PTerm logger
handler := pterm.NewSlogHandler(plogger)

// Create a new slog logger with the handler
logger = slog.New(handler)
}

func preRunReadConfig(cmd *cobra.Command, args []string) error {
Expand All @@ -85,12 +92,12 @@ func preRunReadConfig(cmd *cobra.Command, args []string) error {
return err
}
} else {
logger.Debug("using config file", logger.Args("filename", viper.ConfigFileUsed()))
logger.Debug("using config file", "filename", viper.ConfigFileUsed())
if err := viper.ReadInConfig(); err != nil {
return err
}
}
logger.Debug("config", logger.ArgsFromMap(viper.AllSettings()))
// logger.Debug("config", logger.ArgsFromMap(viper.AllSettings()))

if err := viper.Unmarshal(&cfg, func(decoderConfig *mapstructure.DecoderConfig) {
decoderConfig.TagName = "yaml"
Expand Down
77 changes: 56 additions & 21 deletions cmd/tagmanagerserver.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,13 @@ package cmd

import (
"github.com/foomo/sesamy-cli/pkg/tagmanager"
"github.com/foomo/sesamy-cli/pkg/tagmanager/client"
client2 "github.com/foomo/sesamy-cli/pkg/tagmanager/tag"
"github.com/foomo/sesamy-cli/pkg/tagmanager/trigger"
"github.com/foomo/sesamy-cli/pkg/tagmanager/variable"
"github.com/spf13/cobra"
"google.golang.org/api/option"
tagmanager2 "google.golang.org/api/tagmanager/v2"
)

// tagmanagerServerCmd represents the server command
Expand All @@ -14,6 +19,7 @@ var tagmanagerServerCmd = &cobra.Command{
Short: "Provision Google Tag Manager Server Container",
PersistentPreRunE: preRunReadConfig,
RunE: func(cmd *cobra.Command, args []string) error {

var clientCredentialsOption option.ClientOption
if cfg.Google.CredentialsFile != "" {
clientCredentialsOption = option.WithCredentialsFile(cfg.Google.CredentialsFile)
Expand All @@ -23,6 +29,7 @@ var tagmanagerServerCmd = &cobra.Command{

c, err := tagmanager.NewClient(
cmd.Context(),
logger,
cfg.Google.GTM.AccountID,
cfg.Google.GTM.Server.ContainerID,
cfg.Google.GTM.Server.WorkspaceID,
Expand All @@ -34,37 +41,65 @@ var tagmanagerServerCmd = &cobra.Command{
return err
}

logger.Info("- Folder:", logger.Args("name", c.FolderName()))
if _, err := c.UpsertFolder(c.FolderName()); err != nil {
return err
p := cfg.Tagmanager.Prefixes

{
name := p.FolderName(c.FolderName())
if _, err := c.UpsertFolder(name); err != nil {
return err
}
}

logger.Info("- Variable:", logger.Args("name", "ga4-measurement-id"))
measurementID, err := c.UpsertConstantVariable("ga4-measurement-id", c.MeasurementID())
if err != nil {
return err
{
if _, err := c.EnableBuiltInVariable("clientName"); err != nil {
return err
}
}

logger.Info("- GTM client:", logger.Args("name", "Google Tag Manager Web Container"))
if _, err := c.UpsertGTMClient("Google Tag Manager Web Container", cfg.Google.GTM.Web.MeasurementID); err != nil {
return err
var ga4MeasurementID *tagmanager2.Variable
{
name := p.Variables.ConstantName("Google Analytics GA4 ID")
if ga4MeasurementID, err = c.UpsertVariable(variable.NewConstant(name, c.MeasurementID())); err != nil {
return err
}
}

logger.Info("- GA4 client:", logger.Args("name", "Google Analytics GA4"))
ga4Client, err := c.UpsertGA4Client("Google Analytics GA4")
if err != nil {
return err
var webContainerMeasurementID *tagmanager2.Variable
{
name := p.Variables.ConstantName("Google Tag Mangager Web Container ID")
if webContainerMeasurementID, err = c.UpsertVariable(variable.NewConstant(name, cfg.Google.GTM.Web.MeasurementID)); err != nil {
return err
}
}

logger.Info("- GA4 trigger:", logger.Args("name", "Google Analytics GA4"))
ga4ClientTrigger, err := c.UpsertClientTrigger("ga4", ga4Client)
if err != nil {
return err
{
name := p.ClientName("Google Tag Manager Web Container")
if _, err := c.UpsertClient(client.NewGTM(name, webContainerMeasurementID)); err != nil {
return err
}
}

logger.Info("- GA4 tag:", logger.Args("name", "Google Analytics GA4"))
if _, err := c.UpsertGA4ServerTag("Google Analytics GA4", measurementID, ga4ClientTrigger); err != nil {
return err
var ga4Client *tagmanager2.Client
{
name := p.ClientName("Google Analytics GA4")
if ga4Client, err = c.UpsertClient(client.NewGA4(name)); err != nil {
return err
}
}

var ga4ClientTrigger *tagmanager2.Trigger
{
name := p.Triggers.ClientName("Google Analytics GA4 Client")
if ga4ClientTrigger, err = c.UpsertTrigger(trigger.NewClient(name, ga4Client)); err != nil {
return err
}
}

{
name := p.Tags.ServerGA4EventName("Google Analytics GA4")
if _, err := c.UpsertTag(client2.NewServerGA4Event(name, ga4MeasurementID, ga4ClientTrigger)); err != nil {
return err
}
}

return nil
Expand Down
83 changes: 51 additions & 32 deletions cmd/tagmanagerweb.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@ package cmd
import (
"github.com/foomo/sesamy-cli/internal"
"github.com/foomo/sesamy-cli/pkg/tagmanager"
client "github.com/foomo/sesamy-cli/pkg/tagmanager/tag"
trigger2 "github.com/foomo/sesamy-cli/pkg/tagmanager/trigger"
"github.com/foomo/sesamy-cli/pkg/tagmanager/variable"
"github.com/spf13/cobra"
"google.golang.org/api/option"
tagmanager2 "google.golang.org/api/tagmanager/v2"
Expand All @@ -28,6 +31,7 @@ var tagmanagerWebCmd = &cobra.Command{

c, err := tagmanager.NewClient(
cmd.Context(),
logger,
cfg.Google.GTM.AccountID,
cfg.Google.GTM.Web.ContainerID,
cfg.Google.GTM.Web.WorkspaceID,
Expand All @@ -39,61 +43,76 @@ var tagmanagerWebCmd = &cobra.Command{
return err
}

logger.Info("- Folder:", logger.Args("name", c.FolderName()))
if _, err := c.UpsertFolder(c.FolderName()); err != nil {
p := cfg.Tagmanager.Prefixes

if _, err := c.UpsertFolder(p.FolderName(c.FolderName())); err != nil {
return err
}

logger.Info("- Variable:", logger.Args("name", "ga4-measurement-id"))
measurementID, err := c.UpsertConstantVariable("ga4-measurement-id", c.MeasurementID())
if err != nil {
return err
var ga4MeasurementID *tagmanager2.Variable
{
name := p.Variables.ConstantName("Google Analytics GA4 ID")
if ga4MeasurementID, err = c.UpsertVariable(variable.NewConstant(name, c.MeasurementID())); err != nil {
return err
}
}

logger.Info("- Variable:", logger.Args("name", "server-container-url"))
serverContainerURL, err := c.UpsertConstantVariable("server-container-url", cfg.Google.ServerContainerURL)
if err != nil {
return err
var serverContainerURL *tagmanager2.Variable
{
name := p.Variables.ConstantName("Server Container URL")
if serverContainerURL, err = c.UpsertVariable(variable.NewConstant(name, cfg.Google.ServerContainerURL)); err != nil {
return err
}
}

logger.Info("- Variable:", logger.Args("name", "Google Tag Settings"))
googleTagSettings, err := c.UpsertGoogleTagSettingsVariable("Google Tag Settings", map[string]*tagmanager2.Variable{
"server_container_url": serverContainerURL,
})
if err != nil {
return err
var googleTagSettings *tagmanager2.Variable
{
name := p.Variables.GTSettingsName("Google Tag")
if googleTagSettings, err = c.UpsertVariable(variable.NewGTSettings(name, map[string]*tagmanager2.Variable{
"server_container_url": serverContainerURL,
})); err != nil {
return err
}
}

logger.Info("- Tag:", logger.Args("name", "Google Tag"))
if _, err = c.UpsertGoogleTagWebTag("Google Tag", measurementID, googleTagSettings); err != nil {
return err
{
name := p.Tags.GoogleTagName("Google Tag")
if _, err = c.UpsertTag(client.NewGoogleTag(name, ga4MeasurementID, googleTagSettings)); err != nil {
return err
}
}

for event, parameters := range eventParameters {
logger.Info("- GA4 Event Trigger:", logger.Args("name", event))
trigger, err := c.UpsertCustomEventTrigger(event)
if err != nil {
return err
var trigger *tagmanager2.Trigger
{
name := p.Triggers.CustomEventName(event)
if trigger, err = c.UpsertTrigger(trigger2.NewCustomEvent(name, event)); err != nil {
return err
}
}

eventSettingsVariables := make(map[string]*tagmanager2.Variable, len(parameters))
for _, parameter := range parameters {
logger.Info("- Event Model Variable:", logger.Args("name", parameter))
eventSettingsVariables[parameter], err = c.UpsertEventModelVariable(parameter)
name := p.Variables.EventModelName(parameter)
eventSettingsVariables[parameter], err = c.UpsertVariable(variable.NewEventModel(name, parameter))
if err != nil {
return err
}
}

logger.Info("- GT Event Settings Variable:", logger.Args("name", event))
eventSettings, err := c.UpsertGTEventSettingsVariable(event, eventSettingsVariables)
if err != nil {
return err
var eventSettings *tagmanager2.Variable
{
name := p.Variables.GTEventSettingsName(event)
if eventSettings, err = c.UpsertVariable(variable.NewGTEventSettings(name, eventSettingsVariables)); err != nil {
return err
}
}

logger.Info("- GA4 Tag:", logger.Args("name", event, "parameters", parameters))
if _, err := c.UpsertGA4WebTag(event, eventSettings, measurementID, trigger); err != nil {
return err
{
name := p.Tags.GA4EventName(event)
if _, err := c.UpsertTag(client.NewGA4Event(name, event, eventSettings, ga4MeasurementID, trigger)); err != nil {
return err
}
}
}

Expand Down
2 changes: 1 addition & 1 deletion internal/events.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import (
"golang.org/x/tools/go/packages"
)

func GetEventParameters(source config.Source) (map[string][]string, error) {
func GetEventParameters(source config.Tagmanager) (map[string][]string, error) {
ret := map[string][]string{}

pkgs, err := packages.Load(&packages.Config{
Expand Down
Loading

0 comments on commit e5fcca2

Please sign in to comment.