Skip to content

Commit c9e839d

Browse files
Add ADO integration
1 parent 2844e6d commit c9e839d

File tree

15 files changed

+382
-77
lines changed

15 files changed

+382
-77
lines changed

cmd/api/api.go

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,17 @@ import (
1010
"github.com/simondanielsson/apPRoved/cmd/internal/middlewares"
1111
"github.com/simondanielsson/apPRoved/cmd/internal/routes"
1212
"github.com/simondanielsson/apPRoved/pkg/utils"
13+
"github.com/simondanielsson/apPRoved/pkg/utils/git"
1314
"github.com/simondanielsson/apPRoved/pkg/utils/mq"
1415
"gorm.io/gorm"
1516
)
1617

1718
type APIServer struct {
18-
config *config.ServerConfig
19-
db *gorm.DB
20-
app *fiber.App
21-
queue mq.MessageQueue
22-
githubClient *utils.GithubClient
19+
config *config.ServerConfig
20+
db *gorm.DB
21+
app *fiber.App
22+
queue mq.MessageQueue
23+
gitClient *git.GitClient
2324
}
2425

2526
func (s *APIServer) Run() {
@@ -49,17 +50,17 @@ func (s *APIServer) Shutdown() error {
4950
return nil
5051
}
5152

52-
func NewAPIServer(cfg *config.ServerConfig, db *gorm.DB, queue mq.MessageQueue, githubClient *utils.GithubClient) *APIServer {
53+
func NewAPIServer(cfg *config.ServerConfig, db *gorm.DB, queue mq.MessageQueue, gitClient *git.GitClient) *APIServer {
5354
server := &APIServer{
54-
config: cfg,
55-
db: db,
56-
app: fiber.New(),
57-
queue: queue,
58-
githubClient: githubClient,
55+
config: cfg,
56+
db: db,
57+
app: fiber.New(),
58+
queue: queue,
59+
gitClient: gitClient,
5960
}
6061

6162
utils.ConfigureSwagger(server.app)
62-
middlewares.SetupMiddlewares(server.app, queue, githubClient)
63+
middlewares.SetupMiddlewares(server.app, queue, gitClient)
6364
server.setupRoutes()
6465

6566
return server

cmd/internal/controllers/reviews_controllers.go

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
"github.com/simondanielsson/apPRoved/cmd/internal/middlewares"
1111
"github.com/simondanielsson/apPRoved/cmd/internal/services"
1212
"github.com/simondanielsson/apPRoved/pkg/utils"
13+
"github.com/simondanielsson/apPRoved/pkg/utils/git"
1314
"github.com/simondanielsson/apPRoved/pkg/utils/mq"
1415
)
1516

@@ -69,12 +70,12 @@ func (rc *ReviewsController) RegisterRepository(c *fiber.Ctx) error {
6970
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "Could not parse request body"})
7071
}
7172

72-
githubClient, ok := c.Locals("githubClient").(utils.GithubClient)
73+
gitClient, ok := c.Locals("gitClient").(git.GitClient)
7374
if !ok {
7475
return fiber.NewError(fiber.StatusInternalServerError, "Github client not available")
7576
}
7677

77-
repo, err := rc.reviewsService.RegisterRepository(ctx, tx, githubClient, userID, req.Name, req.Owner, req.URL)
78+
repo, err := rc.reviewsService.RegisterRepository(ctx, tx, gitClient, userID, req.Name, req.Owner, req.URL)
7879
if err != nil {
7980
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"message": "Could not create repository", "error": err.Error()})
8081
}
@@ -169,14 +170,14 @@ func (rc *ReviewsController) RefreshPullRequests(c *fiber.Ctx) error {
169170
}
170171
userID := middlewares.GetUserID(c)
171172

172-
githubClient, ok := c.Locals("githubClient").(utils.GithubClient)
173+
gitClient, ok := c.Locals("gitClient").(git.GitClient)
173174
if !ok {
174175
return fiber.NewError(fiber.StatusInternalServerError, "Github client not available")
175176
}
176177

177178
tx := db.GetDBTransaction(c)
178179
ctx := context.Background()
179-
if err := rc.reviewsService.RefreshPullRequests(ctx, tx, githubClient, userID, repoID); err != nil {
180+
if err := rc.reviewsService.RefreshPullRequests(ctx, tx, gitClient, userID, repoID); err != nil {
180181
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
181182
"message": "Could not update pull requests",
182183
"error": err.Error(),
@@ -373,13 +374,13 @@ func (rc *ReviewsController) CreateReview(c *fiber.Ctx) error {
373374
if !ok {
374375
return fiber.NewError(fiber.StatusInternalServerError, "Message queue not available")
375376
}
376-
githubClient, ok := c.Locals("githubClient").(utils.GithubClient)
377+
gitClient, ok := c.Locals("gitClient").(git.GitClient)
377378
if !ok {
378379
return fiber.NewError(fiber.StatusInternalServerError, "Github client not available")
379380
}
380381

381382
ctx := context.Background()
382-
review, err := rc.reviewsService.CreateReview(tx, ctx, messageQueue, githubClient, repoID, prID, req.Name, userID)
383+
review, err := rc.reviewsService.CreateReview(tx, ctx, messageQueue, gitClient, repoID, prID, req.Name, userID)
383384
if err != nil {
384385
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
385386
"message": "Could not create review",

cmd/internal/db/db.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"fmt"
55
"log"
66
"net"
7+
"strconv"
78

89
_ "github.com/GoogleCloudPlatform/cloudsql-proxy/proxy/dialers/postgres"
910
"github.com/gofiber/fiber/v2"
@@ -30,8 +31,7 @@ func NewDB(cfg *config.DatabaseConfig) (*gorm.DB, error) {
3031
default:
3132
log.Fatalf("unsupported driver name: %s", cfg.DriverName)
3233
}
33-
34-
log.Printf("connecting to database %s:%s\n", cfg.Host, cfg.DBName)
34+
log.Printf("connecting to database %s:%s:%s\n", cfg.Host, strconv.Itoa(cfg.Port), cfg.DBName)
3535

3636
db, err := gorm.Open(postgres.New(postgres.Config{
3737
DriverName: cfg.DriverName,

cmd/internal/dto/requests/mq.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package requests
22

3-
import "github.com/simondanielsson/apPRoved/pkg/utils"
3+
import "github.com/simondanielsson/apPRoved/pkg/utils/git"
44

55
type FileDiffReviewRequest struct {
6-
ReviewID uint `json:"review_id" validate:"required"`
7-
ReviewStatusID uint `json:"review_status_id" validate:"required"`
8-
FileDiffs []*utils.GithubPullRequestFileChanges `json:"file_diffs" validate:"required"`
6+
ReviewID uint `json:"review_id" validate:"required"`
7+
ReviewStatusID uint `json:"review_status_id" validate:"required"`
8+
FileDiffs []*git.GitPullRequestFileChanges `json:"file_diffs" validate:"required"`
99
}

cmd/internal/middlewares/middlewares.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import (
44
"github.com/gofiber/fiber/v2"
55
"github.com/gofiber/fiber/v2/middleware/cors"
66
"github.com/gofiber/fiber/v2/middleware/logger"
7-
"github.com/simondanielsson/apPRoved/pkg/utils"
7+
"github.com/simondanielsson/apPRoved/pkg/utils/git"
88
"github.com/simondanielsson/apPRoved/pkg/utils/mq"
99
"gorm.io/gorm"
1010
)
@@ -14,7 +14,7 @@ type OptionalMiddlewares struct {
1414
Transaction func(*fiber.Ctx) error
1515
}
1616

17-
func SetupMiddlewares(app *fiber.App, queue mq.MessageQueue, githubClient *utils.GithubClient) {
17+
func SetupMiddlewares(app *fiber.App, queue mq.MessageQueue, gitClient *git.GitClient) {
1818
app.Use(cors.New())
1919

2020
app.Use(logger.New(logger.Config{
@@ -25,7 +25,7 @@ func SetupMiddlewares(app *fiber.App, queue mq.MessageQueue, githubClient *utils
2525

2626
app.Use(func(c *fiber.Ctx) error {
2727
c.Locals("messageQueue", queue)
28-
c.Locals("githubClient", *githubClient)
28+
c.Locals("gitClient", *gitClient)
2929
return c.Next()
3030
})
3131
}

cmd/internal/repositories/reviews_repositories.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,6 @@ func (r *ReviewsRepository) CreatePullRequests(tx *gorm.DB, prs []*models.PullRe
5252
if len(prs) == 0 {
5353
return nil
5454
}
55-
log.Printf("Inserting pull requests %v", prs)
5655
if err := tx.CreateInBatches(prs, 30).Error; err != nil {
5756
return fmt.Errorf("failed to insert pull requests: %v", err)
5857
}

cmd/internal/services/reviews_services.go

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import (
1010
"github.com/simondanielsson/apPRoved/cmd/internal/dto/responses"
1111
"github.com/simondanielsson/apPRoved/cmd/internal/models"
1212
"github.com/simondanielsson/apPRoved/cmd/internal/repositories"
13-
"github.com/simondanielsson/apPRoved/pkg/utils"
13+
"github.com/simondanielsson/apPRoved/pkg/utils/git"
1414
"github.com/simondanielsson/apPRoved/pkg/utils/mq"
1515
"gorm.io/gorm"
1616
)
@@ -47,7 +47,7 @@ func (rs *ReviewsService) GetRepositories(tx *gorm.DB, userID uint) ([]*response
4747
}
4848

4949
// RegisterRepository registers a new repository and its pull requests
50-
func (rs *ReviewsService) RegisterRepository(ctx context.Context, tx *gorm.DB, githubClient utils.GithubClient, userID uint, name, owner, url string) (*responses.GetRepositoriesResponse, error) {
50+
func (rs *ReviewsService) RegisterRepository(ctx context.Context, tx *gorm.DB, gitClient git.GitClient, userID uint, name, owner, url string) (*responses.GetRepositoriesResponse, error) {
5151
repo := &models.Repository{
5252
UserID: userID,
5353
Name: name,
@@ -59,7 +59,7 @@ func (rs *ReviewsService) RegisterRepository(ctx context.Context, tx *gorm.DB, g
5959
return nil, err
6060
}
6161

62-
prs, err := rs.findPullRequests(ctx, githubClient, repo, userID)
62+
prs, err := rs.findPullRequests(ctx, gitClient, repo, userID)
6363
if err != nil {
6464
return nil, err
6565
}
@@ -97,7 +97,7 @@ func (rs *ReviewsService) GetRepository(tx *gorm.DB, repoID uint) (*responses.Ge
9797
return response, nil
9898
}
9999

100-
func (rs *ReviewsService) RefreshPullRequests(ctx context.Context, tx *gorm.DB, githubClient utils.GithubClient, userID, repoID uint) error {
100+
func (rs *ReviewsService) RefreshPullRequests(ctx context.Context, tx *gorm.DB, gitClient git.GitClient, userID, repoID uint) error {
101101
repository, err := rs.reviewsRepository.GetRepository(tx, repoID)
102102
if err != nil {
103103
return err
@@ -108,7 +108,7 @@ func (rs *ReviewsService) RefreshPullRequests(ctx context.Context, tx *gorm.DB,
108108
return err
109109
}
110110

111-
currentOpenPRs, err := githubClient.ListPullRequests(ctx, repository.Name, repository.Owner, userID)
111+
currentOpenPRs, err := gitClient.ListPullRequests(ctx, repository.Name, repository.Owner, userID)
112112
if err != nil {
113113
return err
114114
}
@@ -166,8 +166,8 @@ func (rs *ReviewsService) RefreshPullRequests(ctx context.Context, tx *gorm.DB,
166166
return nil
167167
}
168168

169-
func (rs *ReviewsService) findPullRequests(ctx context.Context, githubClient utils.GithubClient, repo *models.Repository, userID uint) ([]*models.PullRequest, error) {
170-
fetched_prs, err := githubClient.ListPullRequests(ctx, repo.Name, repo.Owner, userID)
169+
func (rs *ReviewsService) findPullRequests(ctx context.Context, gitClient git.GitClient, repo *models.Repository, userID uint) ([]*models.PullRequest, error) {
170+
fetched_prs, err := gitClient.ListPullRequests(ctx, repo.Name, repo.Owner, userID)
171171
if err != nil {
172172
return nil, err
173173
}
@@ -319,7 +319,7 @@ func (rs *ReviewsService) GetFileReviews(tx *gorm.DB, reviewID uint) (*responses
319319
return response, nil
320320
}
321321

322-
func (rs *ReviewsService) CreateReview(tx *gorm.DB, ctx context.Context, queue mq.MessageQueue, githubClient utils.GithubClient, repoID, prID uint, name string, userID uint) (*responses.GetReviewsResponse, error) {
322+
func (rs *ReviewsService) CreateReview(tx *gorm.DB, ctx context.Context, queue mq.MessageQueue, gitClient git.GitClient, repoID, prID uint, name string, userID uint) (*responses.GetReviewsResponse, error) {
323323
repo, err := rs.reviewsRepository.GetRepository(tx, repoID)
324324
if err != nil {
325325
return nil, err
@@ -350,7 +350,7 @@ func (rs *ReviewsService) CreateReview(tx *gorm.DB, ctx context.Context, queue m
350350
// fetch file diffs for the PR from github using github client
351351
// send info over RabbitMQ to call external review service api to retrieve file reviews
352352
go func() {
353-
fileDiffs, err := githubClient.FetchFileDiffs(ctx, repo.Name, repo.Owner, pr.Number, userID)
353+
fileDiffs, err := gitClient.FetchFileDiffs(ctx, repo.Name, repo.Owner, pr.Number, userID)
354354
if err != nil {
355355
log.Println("Error fetching file diffs:", err)
356356
return

cmd/main.go

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"github.com/simondanielsson/apPRoved/cmd/config"
1212
"github.com/simondanielsson/apPRoved/cmd/internal/db"
1313
"github.com/simondanielsson/apPRoved/pkg/utils"
14+
"github.com/simondanielsson/apPRoved/pkg/utils/git"
1415
"github.com/simondanielsson/apPRoved/pkg/utils/mq"
1516
)
1617

@@ -39,12 +40,16 @@ func main() {
3940
}
4041
defer messageQueue.Close()
4142

42-
githubClient, err := utils.NewGithubClient(context.Background())
43+
clientType := os.Getenv("GIT_CLIENT")
44+
if clientType == "" {
45+
log.Fatal("GIT_CLIENT environment variable is not set")
46+
}
47+
gitClient, err := git.NewGitClient(context.Background(), clientType)
4348
if err != nil {
44-
log.Fatalf("could not create github client: %v", err)
49+
log.Fatalf("could not create git client: %v", err)
4550
}
4651

47-
server := api.NewAPIServer(config.Server, db, messageQueue, githubClient)
52+
server := api.NewAPIServer(config.Server, db, messageQueue, &gitClient)
4853

4954
gracefulShutdown(server, &messageQueue)
5055
server.Run()

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@ require (
1010
github.com/gofiber/swagger v1.1.0
1111
github.com/golang-jwt/jwt v3.2.2+incompatible
1212
github.com/google/go-github/v64 v64.0.0
13+
github.com/hexops/gotextdiff v1.0.3
1314
github.com/joho/godotenv v1.5.1
1415
github.com/microsoft/azure-devops-go-api/azuredevops/v7 v7.1.0
1516
github.com/rabbitmq/amqp091-go v1.10.0
16-
github.com/sergi/go-diff v1.3.1
1717
github.com/spf13/viper v1.19.0
1818
github.com/swaggo/swag v1.16.3
1919
golang.org/x/crypto v0.27.0

go.sum

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,8 @@ github.com/googleapis/gax-go/v2 v2.13.0 h1:yitjD5f7jQHhyDsnhKEBU52NdvvdSeGzlAnDP
101101
github.com/googleapis/gax-go/v2 v2.13.0/go.mod h1:Z/fvTZXF8/uw7Xu5GuslPw+bplx6SS338j1Is2S+B7A=
102102
github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
103103
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
104+
github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM=
105+
github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg=
104106
github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM=
105107
github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg=
106108
github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 h1:iCEnooe7UlwOQYpKFhBabPMi4aNAfoODPEFNiAnClxo=
@@ -119,11 +121,8 @@ github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8Hm
119121
github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
120122
github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA=
121123
github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw=
122-
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
123124
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
124125
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
125-
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
126-
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
127126
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
128127
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
129128
github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw=
@@ -160,8 +159,6 @@ github.com/sagikazarmark/locafero v0.4.0 h1:HApY1R9zGo4DBgr7dqsTH/JJxLTTsOt7u6ke
160159
github.com/sagikazarmark/locafero v0.4.0/go.mod h1:Pe1W6UlPYUk/+wc/6KFhbORCfqzgYEpgQ3O5fPuL3H4=
161160
github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE=
162161
github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ=
163-
github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8=
164-
github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I=
165162
github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo=
166163
github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0=
167164
github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8=
@@ -177,7 +174,6 @@ github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSS
177174
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
178175
github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
179176
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
180-
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
181177
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
182178
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
183179
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
@@ -301,13 +297,10 @@ google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlba
301297
google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg=
302298
google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw=
303299
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
304-
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
305300
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
306301
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
307302
gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=
308303
gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
309-
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
310-
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
311304
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
312305
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
313306
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

0 commit comments

Comments
 (0)