Skip to content

Commit 5c70b51

Browse files
Fral738iapershin
andauthored
feat(release): add trdl-vault cli for release and publish (#301)
Signed-off-by: Evgeniy Frolov <evgeniy.frolov@flant.com> Signed-off-by: Yaroslav Pershin <62902094+iapershin@users.noreply.github.com> Co-authored-by: Yaroslav Pershin <62902094+iapershin@users.noreply.github.com>
1 parent 2011f35 commit 5c70b51

File tree

8 files changed

+708
-0
lines changed

8 files changed

+708
-0
lines changed

release/cmd/trdl-vault/main.go

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
"log"
6+
"os"
7+
8+
"github.com/spf13/cobra"
9+
"github.com/werf/trdl/release/common"
10+
"github.com/werf/trdl/release/pkg/client"
11+
)
12+
13+
func main() {
14+
var commonCmdData common.CmdData
15+
16+
var cmd = &cobra.Command{
17+
Use: "trdl-vault",
18+
Short: "Trdl CLI for Vault operations",
19+
}
20+
21+
var publishCmd = &cobra.Command{
22+
Use: "publish <project-name>",
23+
Short: "Publish operation",
24+
Args: cobra.MinimumNArgs(1),
25+
Run: func(cmd *cobra.Command, args []string) {
26+
projectName := args[0]
27+
if err := publishCmd(&commonCmdData, projectName); err != nil {
28+
log.Fatalf("Publish failed: %s", err.Error())
29+
}
30+
},
31+
}
32+
33+
var releaseCmd = &cobra.Command{
34+
Use: "release <project-name> <git-tag>",
35+
Short: "Release operation",
36+
Args: cobra.MinimumNArgs(2),
37+
Run: func(cmd *cobra.Command, args []string) {
38+
projectName := args[0]
39+
gitTag := args[1]
40+
if err := releaseCmd(&commonCmdData, projectName, gitTag); err != nil {
41+
log.Fatalf("Release failed: %s", err.Error())
42+
}
43+
},
44+
}
45+
46+
common.SetupVaultAddress(&commonCmdData, cmd)
47+
common.SetupVaultToken(&commonCmdData, cmd)
48+
common.SetupRetry(&commonCmdData, cmd)
49+
common.SetupMaxAttemps(&commonCmdData, cmd)
50+
common.SetupDelay(&commonCmdData, cmd)
51+
common.SetupLogLevel(&commonCmdData, cmd)
52+
53+
cmd.AddCommand(publishCmd)
54+
cmd.AddCommand(releaseCmd)
55+
56+
cmd.SilenceUsage = true
57+
58+
if err := cmd.Execute(); err != nil {
59+
os.Exit(1)
60+
}
61+
}
62+
63+
func publishCmd(c *common.CmdData, projectName string) error {
64+
trdlClient, err := client.NewTrdlVaultClient(client.NewTrdlVaultClientOpts{
65+
VaultAddress: *c.VaultAddress,
66+
VaultToken: *c.VaultToken,
67+
Retry: *c.Retry,
68+
MaxAttempts: *c.MaxAttempts,
69+
Delay: *c.Delay,
70+
LogLevel: c.GetLogLevel(),
71+
})
72+
if err != nil {
73+
return fmt.Errorf("unable to create client: %w", err)
74+
}
75+
if err := trdlClient.Publish(projectName); err != nil {
76+
return fmt.Errorf("unable to publish project: %w", err)
77+
}
78+
return nil
79+
}
80+
81+
func releaseCmd(c *common.CmdData, projectName, gitTag string) error {
82+
trdlClient, err := client.NewTrdlVaultClient(client.NewTrdlVaultClientOpts{
83+
VaultAddress: *c.VaultAddress,
84+
VaultToken: *c.VaultToken,
85+
Retry: *c.Retry,
86+
MaxAttempts: *c.MaxAttempts,
87+
Delay: *c.Delay,
88+
LogLevel: c.GetLogLevel(),
89+
})
90+
if err != nil {
91+
return fmt.Errorf("unable to create client: %w", err)
92+
}
93+
if err := trdlClient.Release(projectName, gitTag); err != nil {
94+
return fmt.Errorf("unable to release project: %w", err)
95+
}
96+
return nil
97+
}

release/common/cmd_data.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package common
2+
3+
import "time"
4+
5+
type CmdData struct {
6+
VaultAddress *string
7+
VaultToken *string
8+
Retry *bool
9+
MaxAttempts *int
10+
Delay *time.Duration
11+
LogLevel *string
12+
}

release/common/common.go

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
package common
2+
3+
import (
4+
"log/slog"
5+
"net/url"
6+
"os"
7+
"time"
8+
9+
"github.com/spf13/cobra"
10+
"github.com/werf/trdl/release/pkg/logger"
11+
)
12+
13+
func SetupVaultAddress(cmdData *CmdData, cmd *cobra.Command) {
14+
cmdData.VaultAddress = new(string)
15+
defaultValue := "http://localhost:8200"
16+
envValue := os.Getenv("VAULT_ADDR")
17+
if envValue != "" {
18+
defaultValue = envValue
19+
}
20+
21+
_, err := url.ParseRequestURI(defaultValue)
22+
if err != nil {
23+
panic(err)
24+
}
25+
26+
cmd.PersistentFlags().StringVarP(cmdData.VaultAddress, "vault-address", "", defaultValue, "Set vault address")
27+
28+
}
29+
30+
func SetupVaultToken(cmdData *CmdData, cmd *cobra.Command) {
31+
cmdData.VaultToken = new(string)
32+
defaultValue := "root"
33+
envValue := os.Getenv("VAULT_TOKEN")
34+
if envValue != "" {
35+
defaultValue = envValue
36+
}
37+
38+
cmd.PersistentFlags().StringVarP(cmdData.VaultToken, "vault-token", "", defaultValue, "Set vault token")
39+
40+
}
41+
42+
func SetupRetry(cmdData *CmdData, cmd *cobra.Command) {
43+
cmdData.Retry = new(bool)
44+
cmd.PersistentFlags().BoolVarP(cmdData.Retry, "retry", "", true, "Set flag to enable/disable retries")
45+
46+
}
47+
48+
func SetupMaxAttemps(cmdData *CmdData, cmd *cobra.Command) {
49+
cmdData.MaxAttempts = new(int)
50+
cmd.PersistentFlags().IntVarP(cmdData.MaxAttempts, "max-attemps", "", 5, "Set max retries")
51+
52+
}
53+
54+
func SetupDelay(cmdData *CmdData, cmd *cobra.Command) {
55+
cmdData.Delay = new(time.Duration)
56+
cmd.PersistentFlags().DurationVarP(cmdData.Delay, "delay", "", 10*time.Second, "Set max delay between retries")
57+
58+
}
59+
func SetupLogLevel(cmdData *CmdData, cmd *cobra.Command) {
60+
cmdData.LogLevel = new(string)
61+
cmd.PersistentFlags().StringVarP(cmdData.LogLevel, "log-level", "", "", "Set log level (debug, info, warn, error)")
62+
}
63+
64+
func (c *CmdData) GetLogLevel() slog.Level {
65+
return logger.ParseLogLevel(*c.LogLevel)
66+
}

release/go.mod

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
module github.com/werf/trdl/release
2+
3+
go 1.23.2
4+
5+
require (
6+
github.com/hashicorp/vault/api v1.16.0
7+
github.com/spf13/cobra v1.9.1
8+
)
9+
10+
require (
11+
github.com/cenkalti/backoff/v4 v4.3.0 // indirect
12+
github.com/go-jose/go-jose/v4 v4.0.1 // indirect
13+
github.com/hashicorp/errwrap v1.1.0 // indirect
14+
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
15+
github.com/hashicorp/go-multierror v1.1.1 // indirect
16+
github.com/hashicorp/go-retryablehttp v0.7.7 // indirect
17+
github.com/hashicorp/go-rootcerts v1.0.2 // indirect
18+
github.com/hashicorp/go-secure-stdlib/parseutil v0.1.6 // indirect
19+
github.com/hashicorp/go-secure-stdlib/strutil v0.1.2 // indirect
20+
github.com/hashicorp/go-sockaddr v1.0.2 // indirect
21+
github.com/hashicorp/hcl v1.0.0 // indirect
22+
github.com/inconshreveable/mousetrap v1.1.0 // indirect
23+
github.com/mitchellh/go-homedir v1.1.0 // indirect
24+
github.com/mitchellh/mapstructure v1.5.0 // indirect
25+
github.com/ryanuber/go-glob v1.0.0 // indirect
26+
github.com/spf13/pflag v1.0.6 // indirect
27+
golang.org/x/crypto v0.32.0 // indirect
28+
golang.org/x/net v0.34.0 // indirect
29+
golang.org/x/sync v0.12.0
30+
golang.org/x/text v0.21.0 // indirect
31+
golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1 // indirect
32+
)

release/go.sum

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
2+
github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
3+
github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
4+
github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
5+
github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
6+
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
7+
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
8+
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
9+
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
10+
github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM=
11+
github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE=
12+
github.com/go-jose/go-jose/v4 v4.0.1 h1:QVEPDE3OluqXBQZDcnNvQrInro2h0e4eqNbnZSWqS6U=
13+
github.com/go-jose/go-jose/v4 v4.0.1/go.mod h1:WVf9LFMHh/QVrmqrOfqun0C45tMe3RoiKJMPvgWwLfY=
14+
github.com/go-test/deep v1.0.2 h1:onZX1rnHT3Wv6cqNgYyFOOlgVKJrksuCMCRvJStbMYw=
15+
github.com/go-test/deep v1.0.2/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA=
16+
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
17+
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
18+
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
19+
github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I=
20+
github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
21+
github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ=
22+
github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48=
23+
github.com/hashicorp/go-hclog v1.6.3 h1:Qr2kF+eVWjTiYmU7Y31tYlP1h0q/X3Nl3tPGdaB11/k=
24+
github.com/hashicorp/go-hclog v1.6.3/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M=
25+
github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk=
26+
github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo=
27+
github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM=
28+
github.com/hashicorp/go-retryablehttp v0.7.7 h1:C8hUCYzor8PIfXHa4UrZkU4VvK8o9ISHxT2Q8+VepXU=
29+
github.com/hashicorp/go-retryablehttp v0.7.7/go.mod h1:pkQpWZeYWskR+D1tR2O5OcBFOxfA7DoAO6xtkuQnHTk=
30+
github.com/hashicorp/go-rootcerts v1.0.2 h1:jzhAVGtqPKbwpyCPELlgNWhE1znq+qwJtW5Oi2viEzc=
31+
github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8=
32+
github.com/hashicorp/go-secure-stdlib/parseutil v0.1.6 h1:om4Al8Oy7kCm/B86rLCLah4Dt5Aa0Fr5rYBG60OzwHQ=
33+
github.com/hashicorp/go-secure-stdlib/parseutil v0.1.6/go.mod h1:QmrqtbKuxxSWTN3ETMPuB+VtEiBJ/A9XhoYGv8E1uD8=
34+
github.com/hashicorp/go-secure-stdlib/strutil v0.1.1/go.mod h1:gKOamz3EwoIoJq7mlMIRBpVTAUn8qPCrEclOKKWhD3U=
35+
github.com/hashicorp/go-secure-stdlib/strutil v0.1.2 h1:kes8mmyCpxJsI7FTwtzRqEy9CdjCtrXrXGuOpxEA7Ts=
36+
github.com/hashicorp/go-secure-stdlib/strutil v0.1.2/go.mod h1:Gou2R9+il93BqX25LAKCLuM+y9U2T4hlwvT1yprcna4=
37+
github.com/hashicorp/go-sockaddr v1.0.2 h1:ztczhD1jLxIRjVejw8gFomI1BQZOe2WoVOu0SyteCQc=
38+
github.com/hashicorp/go-sockaddr v1.0.2/go.mod h1:rB4wwRAUzs07qva3c5SdrY/NEtAUjGlgmH/UkBUC97A=
39+
github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
40+
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
41+
github.com/hashicorp/vault/api v1.16.0 h1:nbEYGJiAPGzT9U4oWgaaB0g+Rj8E59QuHKyA5LhwQN4=
42+
github.com/hashicorp/vault/api v1.16.0/go.mod h1:KhuUhzOD8lDSk29AtzNjgAu2kxRA9jL9NAbkFlqvkBA=
43+
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
44+
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
45+
github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
46+
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
47+
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
48+
github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
49+
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
50+
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
51+
github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc=
52+
github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
53+
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
54+
github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo=
55+
github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
56+
github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
57+
github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
58+
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
59+
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
60+
github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
61+
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
62+
github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
63+
github.com/ryanuber/go-glob v1.0.0 h1:iQh3xXAumdQ+4Ufa5b25cRpC5TYKlno6hsv6Cb3pkBk=
64+
github.com/ryanuber/go-glob v1.0.0/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc=
65+
github.com/spf13/cobra v1.9.1 h1:CXSaggrXdbHK9CF+8ywj8Amf7PBRmPCOJugH954Nnlo=
66+
github.com/spf13/cobra v1.9.1/go.mod h1:nDyEzZ8ogv936Cinf6g1RU9MRY64Ir93oCnqb9wxYW0=
67+
github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o=
68+
github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
69+
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
70+
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
71+
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
72+
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
73+
golang.org/x/crypto v0.32.0 h1:euUpcYgM8WcP71gNpTqQCn6rC2t6ULUPiOzfWaXVVfc=
74+
golang.org/x/crypto v0.32.0/go.mod h1:ZnnJkOaASj8g0AjIduWNlq2NRxL0PlBrbKVyZ6V/Ugc=
75+
golang.org/x/net v0.34.0 h1:Mb7Mrk043xzHgnRM88suvJFwzVrRfHEHJEl5/71CKw0=
76+
golang.org/x/net v0.34.0/go.mod h1:di0qlW3YNM5oh6GqDGQr92MyTozJPmybPK4Ev/Gm31k=
77+
golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw=
78+
golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
79+
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
80+
golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU=
81+
golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
82+
golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo=
83+
golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
84+
golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1 h1:NusfzzA6yGQ+ua51ck7E3omNUX/JuqbFSaRGqU8CcLI=
85+
golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
86+
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
87+
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
88+
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
89+
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

release/pkg/client/main.go

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package client
2+
3+
import (
4+
"fmt"
5+
"log/slog"
6+
"time"
7+
8+
"github.com/werf/trdl/release/pkg/logger"
9+
"github.com/werf/trdl/release/pkg/vault"
10+
)
11+
12+
type Clientinterface interface {
13+
Publish(projectName string) error
14+
Release(projectName, gitTag string) error
15+
}
16+
17+
type Client struct {
18+
client Clientinterface
19+
}
20+
21+
func newClient(client Clientinterface) *Client {
22+
return &Client{client: client}
23+
}
24+
25+
func (c *Client) Publish(projectName string) error {
26+
return c.client.Publish(projectName)
27+
}
28+
29+
func (c *Client) Release(projectName, gitTag string) error {
30+
return c.client.Release(projectName, gitTag)
31+
}
32+
33+
type NewTrdlVaultClientOpts struct {
34+
VaultAddress string
35+
VaultToken string
36+
Retry bool
37+
MaxAttempts int
38+
Delay time.Duration
39+
LogLevel slog.Level
40+
}
41+
42+
func NewTrdlVaultClient(opts NewTrdlVaultClientOpts) (*Client, error) {
43+
log := logger.NewLogger(opts.LogLevel)
44+
trdlClient, err := vault.NewTrdlClient(vault.NewTrdlClientOpts{
45+
VaultAddress: opts.VaultAddress,
46+
VaultToken: opts.VaultToken,
47+
Retry: opts.Retry,
48+
MaxAttempts: opts.MaxAttempts,
49+
Delay: opts.Delay,
50+
Logger: log,
51+
})
52+
if err != nil {
53+
log.Error("", fmt.Sprintf("Unable to create Vault client: %s", err.Error()))
54+
return nil, fmt.Errorf("new Vault client error: %w", err)
55+
}
56+
return newClient(trdlClient), nil
57+
}

0 commit comments

Comments
 (0)