refactor(db/get-repo): utilize db indexing #1192
reviewdog [golangci] report
reported by reviewdog 🐶
Findings (47)
database/step/create.go|3| 3-41 lines are duplicate of database/step/update.go:3-41
(dupl)
database/step/update.go|3| 3-41 lines are duplicate of database/step/create.go:3-41
(dupl)
database/service/create.go|3| 3-41 lines are duplicate of database/service/update.go:3-41
(dupl)
database/service/update.go|3| 3-41 lines are duplicate of database/service/create.go:3-41
(dupl)
database/deployment/list.go|33| 33-63 lines are duplicate of database/deployment/list_repo.go:46-76
(dupl)
database/deployment/list_repo.go|46| 46-76 lines are duplicate of database/deployment/list.go:33-63
(dupl)
database/deployment/create.go|3| 3-37 lines are duplicate of database/deployment/update.go:3-37
(dupl)
database/deployment/update.go|3| 3-37 lines are duplicate of database/deployment/create.go:3-37
(dupl)
database/pipeline/create.go|3| 3-57 lines are duplicate of database/pipeline/update.go:3-58
(dupl)
database/pipeline/update.go|3| 3-58 lines are duplicate of database/pipeline/create.go:3-57
(dupl)
mock/server/schedule.go|3| 3-284 lines are duplicate of mock/server/secret.go:4-181
(dupl)
database/worker/create.go|3| 3-41 lines are duplicate of database/worker/update.go:3-41
(dupl)
database/worker/update.go|3| 3-41 lines are duplicate of database/worker/create.go:3-41
(dupl)
database/hook/get.go|3| 3-40 lines are duplicate of database/hook/get_webhook.go:3-40
(dupl)
database/hook/get_webhook.go|3| 3-40 lines are duplicate of database/hook/get.go:3-40
(dupl)
database/hook/create.go|3| 3-39 lines are duplicate of database/hook/update.go:3-42
(dupl)
database/hook/update.go|3| 3-42 lines are duplicate of database/hook/create.go:3-39
(dupl)
api/pipeline/validate.go|78| 78-110 lines are duplicate of api/pipeline/compile.go:80-112
(dupl)
api/pipeline/validate.go|3| 3-110 lines are duplicate of api/pipeline/expand.go:4-112
(dupl)
mock/server/authentication.go|84 col 9| string error
has 4 occurrences, make it a constant (goconst)
database/types/build.go|375 col 44| G115: integer overflow conversion int -> int32 (gosec)
database/types/build.go|376 col 44| G115: integer overflow conversion int -> int32 (gosec)
database/types/repo.go|336 col 43| G115: integer overflow conversion int -> int32 (gosec)
database/types/settings.go|134 col 35| G115: integer overflow conversion int64 -> uint64 (gosec)
database/types/settings.go|205 col 49| G115: integer overflow conversion uint64 -> int64 (gosec)
secret/vault/create.go|18 col 25| unused-parameter: parameter 'ctx' seems to be unused, consider removing or renaming it as _ (revive)
secret/vault/delete.go|16 col 25| unused-parameter: parameter 'ctx' seems to be unused, consider removing or renaming it as _ (revive)
secret/vault/get.go|18 col 22| unused-parameter: parameter 'ctx' seems to be unused, consider removing or renaming it as _ (revive)
secret/vault/refresh_test.go|45 col 74| unused-parameter: parameter 'r' seems to be unused, consider removing or renaming it as _ (revive)
secret/vault/refresh_test.go|71 col 40| unused-parameter: parameter 'in' seems to be unused, consider removing or renaming it as _ (revive)
secret/vault/refresh_test.go|108 col 40| unused-parameter: parameter 'in' seems to be unused, consider removing or renaming it as _ (revive)
secret/vault/refresh_test.go|128 col 40| unused-parameter: parameter 'in' seems to be unused, consider removing or renaming it as _ (revive)
secret/vault/refresh_test.go|201 col 74| unused-parameter: parameter 'r' seems to be unused, consider removing or renaming it as _ (revive)
router/middleware/logger.go|48 col 36| unused-parameter: parameter 'timeFormat' seems to be unused, consider removing or renaming it as _ (revive)
api/webhook/post.go|193 col 32| Non-inherited new context, use function like context.WithXXX
instead (contextcheck)
api/webhook/post.go|662 col 38| Non-inherited new context, use function like context.WithXXX
instead (contextcheck)
api/webhook/post.go|673 col 40| Non-inherited new context, use function like context.WithXXX
instead (contextcheck)
compiler/native/compile.go|335 col 26| Function modifyConfig
should pass the context parameter (contextcheck)
compiler/native/compile.go|430 col 26| Function modifyConfig
should pass the context parameter (contextcheck)
api/webhook/post.go|437 col 29| SA1019: library.Build is deprecated: use Build from github.com/go-vela/server/api/types instead. (staticcheck)
database/testutils/api_resources.go|62 col 15| SA1019: library.Build is deprecated: use Build from github.com/go-vela/server/api/types instead. (staticcheck)
api/types/build.go|1211 col 30| SA1019: library.Build is deprecated: use Build from github.com/go-vela/server/api/types instead. (staticcheck)
compiler/template/starlark/render.go|44 col 18| SA1019: starlark.ExecFile is deprecated: use [ExecFileOptions] with [syntax.FileOptions] instead, because this function relies on legacy global variables. (staticcheck)
compiler/template/starlark/render.go|152 col 18| SA1019: starlark.ExecFile is deprecated: use [ExecFileOptions] with [syntax.FileOptions] instead, because this function relies on legacy global variables. (staticcheck)
compiler/template/starlark/starlark.go|131 col 4| only one cuddle assignment allowed before if statement (wsl)
database/repo/get_org.go|14 col 90| block should not start with a whitespace (wsl)
secret/vault/get.go|40 col 2| directive //nolint:ineffassign,staticcheck // ignore false positive
is unused for linter "staticcheck" (nolintlint)
Filtered Findings (0)
Annotations
Check failure on line 3 in database/step/create.go
github-actions / golangci
[golangci] database/step/create.go#L3
3-41 lines are duplicate of `database/step/update.go:3-41` (dupl)
Raw output
database/step/create.go:3: 3-41 lines are duplicate of `database/step/update.go:3-41` (dupl)
package step
import (
"context"
"github.com/sirupsen/logrus"
"github.com/go-vela/types/constants"
"github.com/go-vela/types/database"
"github.com/go-vela/types/library"
)
// CreateStep creates a new step in the database.
func (e *engine) CreateStep(ctx context.Context, s *library.Step) (*library.Step, error) {
e.logger.WithFields(logrus.Fields{
"step": s.GetNumber(),
}).Tracef("creating step %s in the database", s.GetName())
// cast the library type to database type
//
// https://pkg.go.dev/github.com/go-vela/types/database#StepFromLibrary
step := database.StepFromLibrary(s)
// validate the necessary fields are populated
//
// https://pkg.go.dev/github.com/go-vela/types/database#Step.Validate
err := step.Validate()
if err != nil {
return nil, err
}
// send query to the database
result := e.client.
WithContext(ctx).
Table(constants.TableStep).
Create(step)
return step.ToLibrary(), result.Error
}
Check failure on line 3 in database/step/update.go
github-actions / golangci
[golangci] database/step/update.go#L3
3-41 lines are duplicate of `database/step/create.go:3-41` (dupl)
Raw output
database/step/update.go:3: 3-41 lines are duplicate of `database/step/create.go:3-41` (dupl)
package step
import (
"context"
"github.com/sirupsen/logrus"
"github.com/go-vela/types/constants"
"github.com/go-vela/types/database"
"github.com/go-vela/types/library"
)
// UpdateStep updates an existing step in the database.
func (e *engine) UpdateStep(ctx context.Context, s *library.Step) (*library.Step, error) {
e.logger.WithFields(logrus.Fields{
"step": s.GetNumber(),
}).Tracef("updating step %s in the database", s.GetName())
// cast the library type to database type
//
// https://pkg.go.dev/github.com/go-vela/types/database#StepFromLibrary
step := database.StepFromLibrary(s)
// validate the necessary fields are populated
//
// https://pkg.go.dev/github.com/go-vela/types/database#Step.Validate
err := step.Validate()
if err != nil {
return nil, err
}
// send query to the database
result := e.client.
WithContext(ctx).
Table(constants.TableStep).
Save(step)
return step.ToLibrary(), result.Error
}
Check failure on line 3 in database/service/create.go
github-actions / golangci
[golangci] database/service/create.go#L3
3-41 lines are duplicate of `database/service/update.go:3-41` (dupl)
Raw output
database/service/create.go:3: 3-41 lines are duplicate of `database/service/update.go:3-41` (dupl)
package service
import (
"context"
"github.com/sirupsen/logrus"
"github.com/go-vela/types/constants"
"github.com/go-vela/types/database"
"github.com/go-vela/types/library"
)
// CreateService creates a new service in the database.
func (e *engine) CreateService(ctx context.Context, s *library.Service) (*library.Service, error) {
e.logger.WithFields(logrus.Fields{
"service": s.GetNumber(),
}).Tracef("creating service %s in the database", s.GetName())
// cast the library type to database type
//
// https://pkg.go.dev/github.com/go-vela/types/database#ServiceFromLibrary
service := database.ServiceFromLibrary(s)
// validate the necessary fields are populated
//
// https://pkg.go.dev/github.com/go-vela/types/database#Service.Validate
err := service.Validate()
if err != nil {
return nil, err
}
// send query to the database
result := e.client.
WithContext(ctx).
Table(constants.TableService).
Create(service)
return service.ToLibrary(), result.Error
}
Check failure on line 3 in database/service/update.go
github-actions / golangci
[golangci] database/service/update.go#L3
3-41 lines are duplicate of `database/service/create.go:3-41` (dupl)
Raw output
database/service/update.go:3: 3-41 lines are duplicate of `database/service/create.go:3-41` (dupl)
package service
import (
"context"
"github.com/sirupsen/logrus"
"github.com/go-vela/types/constants"
"github.com/go-vela/types/database"
"github.com/go-vela/types/library"
)
// UpdateService updates an existing service in the database.
func (e *engine) UpdateService(ctx context.Context, s *library.Service) (*library.Service, error) {
e.logger.WithFields(logrus.Fields{
"service": s.GetNumber(),
}).Tracef("updating service %s", s.GetName())
// cast the library type to database type
//
// https://pkg.go.dev/github.com/go-vela/types/database#ServiceFromLibrary
service := database.ServiceFromLibrary(s)
// validate the necessary fields are populated
//
// https://pkg.go.dev/github.com/go-vela/types/database#Service.Validate
err := service.Validate()
if err != nil {
return nil, err
}
// send query to the database
result := e.client.
WithContext(ctx).
Table(constants.TableService).
Save(service)
return service.ToLibrary(), result.Error
}
Check failure on line 33 in database/deployment/list.go
github-actions / golangci
[golangci] database/deployment/list.go#L33
33-63 lines are duplicate of `database/deployment/list_repo.go:46-76` (dupl)
Raw output
database/deployment/list.go:33: 33-63 lines are duplicate of `database/deployment/list_repo.go:46-76` (dupl)
for _, deployment := range *d {
// https://golang.org/doc/faq#closures_and_goroutines
tmp := deployment
builds := []*library.Build{}
for _, a := range tmp.Builds {
bID, err := strconv.ParseInt(a, 10, 64)
if err != nil {
return nil, err
}
// variable to store query results
b := new(database.Build)
// send query to the database and store result in variable
err = e.client.
WithContext(ctx).
Table(constants.TableBuild).
Where("id = ?", bID).
Take(b).
Error
if err != nil {
return nil, err
}
builds = append(builds, b.ToLibrary())
}
// convert query result to library type
deployments = append(deployments, tmp.ToLibrary(builds))
}
Check failure on line 46 in database/deployment/list_repo.go
github-actions / golangci
[golangci] database/deployment/list_repo.go#L46
46-76 lines are duplicate of `database/deployment/list.go:33-63` (dupl)
Raw output
database/deployment/list_repo.go:46: 46-76 lines are duplicate of `database/deployment/list.go:33-63` (dupl)
for _, deployment := range *d {
// https://golang.org/doc/faq#closures_and_goroutines
tmp := deployment
builds := []*library.Build{}
for _, a := range tmp.Builds {
bID, err := strconv.ParseInt(a, 10, 64)
if err != nil {
return nil, err
}
// variable to store query results
b := new(database.Build)
// send query to the database and store result in variable
err = e.client.
WithContext(ctx).
Table(constants.TableBuild).
Where("id = ?", bID).
Take(b).
Error
if err != nil {
return nil, err
}
builds = append(builds, b.ToLibrary())
}
// convert query result to library type
deployments = append(deployments, tmp.ToLibrary(builds))
}
Check failure on line 3 in database/deployment/create.go
github-actions / golangci
[golangci] database/deployment/create.go#L3
3-37 lines are duplicate of `database/deployment/update.go:3-37` (dupl)
Raw output
database/deployment/create.go:3: 3-37 lines are duplicate of `database/deployment/update.go:3-37` (dupl)
package deployment
import (
"context"
"github.com/sirupsen/logrus"
"github.com/go-vela/types/constants"
"github.com/go-vela/types/database"
"github.com/go-vela/types/library"
)
// CreateDeployment creates a new deployment in the database.
func (e *engine) CreateDeployment(ctx context.Context, d *library.Deployment) (*library.Deployment, error) {
e.logger.WithFields(logrus.Fields{
"deployment": d.GetID(),
}).Tracef("creating deployment %d", d.GetID())
// cast the library type to database type
deployment := database.DeploymentFromLibrary(d)
// validate the necessary fields are populated
err := deployment.Validate()
if err != nil {
return nil, err
}
result := e.client.
WithContext(ctx).
Table(constants.TableDeployment).
Create(deployment)
// send query to the database
return deployment.ToLibrary(d.Builds), result.Error
}
Check failure on line 3 in database/deployment/update.go
github-actions / golangci
[golangci] database/deployment/update.go#L3
3-37 lines are duplicate of `database/deployment/create.go:3-37` (dupl)
Raw output
database/deployment/update.go:3: 3-37 lines are duplicate of `database/deployment/create.go:3-37` (dupl)
package deployment
import (
"context"
"github.com/sirupsen/logrus"
"github.com/go-vela/types/constants"
"github.com/go-vela/types/database"
"github.com/go-vela/types/library"
)
// UpdateDeployment updates an existing deployment in the database.
func (e *engine) UpdateDeployment(ctx context.Context, d *library.Deployment) (*library.Deployment, error) {
e.logger.WithFields(logrus.Fields{
"deployment": d.GetID(),
}).Tracef("updating deployment %d", d.GetID())
// cast the library type to database type
deployment := database.DeploymentFromLibrary(d)
// validate the necessary fields are populated
err := deployment.Validate()
if err != nil {
return nil, err
}
result := e.client.
WithContext(ctx).
Table(constants.TableDeployment).
Save(deployment)
// send query to the database
return deployment.ToLibrary(d.Builds), result.Error
}
Check failure on line 3 in database/pipeline/create.go
github-actions / golangci
[golangci] database/pipeline/create.go#L3
3-57 lines are duplicate of `database/pipeline/update.go:3-58` (dupl)
Raw output
database/pipeline/create.go:3: 3-57 lines are duplicate of `database/pipeline/update.go:3-58` (dupl)
package pipeline
import (
"context"
"github.com/sirupsen/logrus"
"github.com/go-vela/types/constants"
"github.com/go-vela/types/database"
"github.com/go-vela/types/library"
)
// CreatePipeline creates a new pipeline in the database.
func (e *engine) CreatePipeline(ctx context.Context, p *library.Pipeline) (*library.Pipeline, error) {
e.logger.WithFields(logrus.Fields{
"pipeline": p.GetCommit(),
}).Tracef("creating pipeline %s in the database", p.GetCommit())
// cast the library type to database type
//
// https://pkg.go.dev/github.com/go-vela/types/database#PipelineFromLibrary
pipeline := database.PipelineFromLibrary(p)
// validate the necessary fields are populated
//
// https://pkg.go.dev/github.com/go-vela/types/database#Pipeline.Validate
err := pipeline.Validate()
if err != nil {
return nil, err
}
// compress data for the pipeline
//
// https://pkg.go.dev/github.com/go-vela/types/database#Pipeline.Compress
err = pipeline.Compress(e.config.CompressionLevel)
if err != nil {
return nil, err
}
// send query to the database
err = e.client.
WithContext(ctx).
Table(constants.TablePipeline).
Create(pipeline).Error
if err != nil {
return nil, err
}
err = pipeline.Decompress()
if err != nil {
return nil, err
}
return pipeline.ToLibrary(), nil
}
Check failure on line 3 in database/pipeline/update.go
github-actions / golangci
[golangci] database/pipeline/update.go#L3
3-58 lines are duplicate of `database/pipeline/create.go:3-57` (dupl)
Raw output
database/pipeline/update.go:3: 3-58 lines are duplicate of `database/pipeline/create.go:3-57` (dupl)
package pipeline
import (
"context"
"github.com/sirupsen/logrus"
"github.com/go-vela/types/constants"
"github.com/go-vela/types/database"
"github.com/go-vela/types/library"
)
// UpdatePipeline updates an existing pipeline in the database.
func (e *engine) UpdatePipeline(ctx context.Context, p *library.Pipeline) (*library.Pipeline, error) {
e.logger.WithFields(logrus.Fields{
"pipeline": p.GetCommit(),
}).Tracef("updating pipeline %s in the database", p.GetCommit())
// cast the library type to database type
//
// https://pkg.go.dev/github.com/go-vela/types/database#PipelineFromLibrary
pipeline := database.PipelineFromLibrary(p)
// validate the necessary fields are populated
//
// https://pkg.go.dev/github.com/go-vela/types/database#Pipeline.Validate
err := pipeline.Validate()
if err != nil {
return nil, err
}
// compress data for the pipeline
//
// https://pkg.go.dev/github.com/go-vela/types/database#Pipeline.Compress
err = pipeline.Compress(e.config.CompressionLevel)
if err != nil {
return nil, err
}
// send query to the database
err = e.client.
WithContext(ctx).
Table(constants.TablePipeline).
Save(pipeline).Error
if err != nil {
return nil, err
}
// decompress pipeline to return
err = pipeline.Decompress()
if err != nil {
return nil, err
}
return pipeline.ToLibrary(), nil
}
Check failure on line 3 in mock/server/schedule.go
github-actions / golangci
[golangci] mock/server/schedule.go#L3
3-284 lines are duplicate of `mock/server/secret.go:4-181` (dupl)
Raw output
mock/server/schedule.go:3: 3-284 lines are duplicate of `mock/server/secret.go:4-181` (dupl)
package server
import (
"encoding/json"
"fmt"
"net/http"
"strings"
"github.com/gin-gonic/gin"
api "github.com/go-vela/server/api/types"
"github.com/go-vela/types"
)
const (
// ScheduleResp represents a JSON return for a single schedule.
ScheduleResp = `{
"id": 2,
"repo": {
"id": 1,
"owner": {
"id": 1,
"name": "octocat",
"favorites": [],
"active": true,
"admin": false
},
"org": "github",
"counter": 10,
"name": "octocat",
"full_name": "github/octocat",
"link": "https://github.com/github/octocat",
"clone": "https://github.com/github/octocat",
"branch": "main",
"build_limit": 10,
"timeout": 60,
"visibility": "public",
"private": false,
"trusted": true,
"pipeline_type": "yaml",
"topics": [],
"active": true,
"allow_events": {
"push": {
"branch": true,
"tag": true
},
"pull_request": {
"opened": true,
"synchronize": true,
"reopened": true,
"edited": false
},
"deployment": {
"created": true
},
"comment": {
"created": false,
"edited": false
}
},
"approve_build": "fork-always",
"previous_name": ""
},
"active": true,
"name": "foo",
"entry": "@weekly",
"created_at": 1683154980,
"created_by": "octocat",
"updated_at": 1683154980,
"updated_by": "octocat",
"scheduled_at": 0,
"branch": "main",
"error": "error message",
"next_run": 0
}`
SchedulesResp = `[
{
"id": 2,
"repo": {
"id": 1,
"owner": {
"id": 1,
"name": "octocat",
"favorites": [],
"active": true,
"admin": false
},
"org": "github",
"counter": 10,
"name": "octocat",
"full_name": "github/octocat",
"link": "https://github.com/github/octocat",
"clone": "https://github.com/github/octocat",
"branch": "main",
"build_limit": 10,
"timeout": 60,
"visibility": "public",
"private": false,
"trusted": true,
"pipeline_type": "yaml",
"topics": [],
"active": true,
"allow_events": {
"push": {
"branch": true,
"tag": true
},
"pull_request": {
"opened": true,
"synchronize": true,
"reopened": true,
"edited": false
},
"deployment": {
"created": true
},
"comment": {
"created": false,
"edited": false
}
},
"approve_build": "fork-always",
"previous_name": ""
},
"active": true,
"name": "foo",
"entry": "@weekly",
"created_at": 1683154980,
"created_by": "octocat",
"updated_at": 1683154980,
"updated_by": "octocat",
"scheduled_at": 0,
"branch": "main",
"error": "error message",
"next_run": 0
},
{
"id": 1,
"repo": {
"id": 1,
"owner": {
"id": 1,
"name": "octocat",
"favorites": [],
"active": true,
"admin": false
},
"org": "github",
"counter": 10,
"name": "octocat",
"full_name": "github/octocat",
"link": "https://github.com/github/octocat",
"clone": "https://github.com/github/octocat",
"branch": "main",
"build_limit": 10,
"timeout": 60,
"visibility": "public",
"private": false,
"trusted": true,
"pipeline_type": "yaml",
"topics": [],
"active": true,
"allow_events": {
"push": {
"branch": true,
"tag": true
},
"pull_request": {
"opened": true,
"synchronize": true,
"reopened": true,
"edited": false
},
"deployment": {
"created": true
},
"comment": {
"created": false,
"edited": false
}
},
"approve_build": "fork-always",
"previous_name": ""
},
"active": true,
"name": "bar",
"entry": "@weekly",
"created_at": 1683154974,
"created_by": "octocat",
"updated_at": 1683154974,
"updated_by": "octocat",
"scheduled_at": 0,
"repo_id": 1,
"branch": "main",
"error": "error message",
"next_run": 0
}]`
)
// getSchedules returns mock JSON for a http GET.
func getSchedules(c *gin.Context) {
data := []byte(SchedulesResp)
var body []api.Schedule
_ = json.Unmarshal(data, &body)
c.JSON(http.StatusOK, body)
}
// getSchedule has a param :schedule returns mock JSON for a http GET.
//
// Pass "not-found" to :schedule to test receiving a http 404 response.
func getSchedule(c *gin.Context) {
s := c.Param("schedule")
if strings.Contains(s, "not-found") {
msg := fmt.Sprintf("Schedule %s does not exist", s)
c.AbortWithStatusJSON(http.StatusNotFound, types.Error{Message: &msg})
return
}
data := []byte(ScheduleResp)
var body api.Schedule
_ = json.Unmarshal(data, &body)
c.JSON(http.StatusOK, body)
}
// addSchedule returns mock JSON for a http POST.
func addSchedule(c *gin.Context) {
data := []byte(ScheduleResp)
var body api.Schedule
_ = json.Unmarshal(data, &body)
c.JSON(http.StatusCreated, body)
}
// updateSchedule has a param :schedule returns mock JSON for a http PUT.
//
// Pass "not-found" to :schedule to test receiving a http 404 response.
func updateSchedule(c *gin.Context) {
if !strings.Contains(c.FullPath(), "admin") {
s := c.Param("schedule")
if strings.Contains(s, "not-found") {
msg := fmt.Sprintf("Schedule %s does not exist", s)
c.AbortWithStatusJSON(http.StatusNotFound, types.Error{Message: &msg})
return
}
}
data := []byte(ScheduleResp)
var body api.Schedule
_ = json.Unmarshal(data, &body)
c.JSON(http.StatusOK, body)
}
// removeSchedule has a param :schedule returns mock JSON for a http DELETE.
//
// Pass "not-found" to :schedule to test receiving a http 404 response.
func removeSchedule(c *gin.Context) {
s := c.Param("schedule")
if strings.Contains(s, "not-found") {
msg := fmt.Sprintf("Schedule %s does not exist", s)
c.AbortWithStatusJSON(http.StatusNotFound, types.Error{Message: &msg})
return
}
c.JSON(http.StatusOK, fmt.Sprintf("schedule %s deleted", s))
}
Check failure on line 3 in database/worker/create.go
github-actions / golangci
[golangci] database/worker/create.go#L3
3-41 lines are duplicate of `database/worker/update.go:3-41` (dupl)
Raw output
database/worker/create.go:3: 3-41 lines are duplicate of `database/worker/update.go:3-41` (dupl)
package worker
import (
"context"
"github.com/sirupsen/logrus"
api "github.com/go-vela/server/api/types"
"github.com/go-vela/server/database/types"
"github.com/go-vela/types/constants"
)
// CreateWorker creates a new worker in the database.
func (e *engine) CreateWorker(ctx context.Context, w *api.Worker) (*api.Worker, error) {
e.logger.WithFields(logrus.Fields{
"worker": w.GetHostname(),
}).Tracef("creating worker %s", w.GetHostname())
// cast the library type to database type
//
// https://pkg.go.dev/github.com/go-vela/types/database#WorkerFromLibrary
worker := types.WorkerFromAPI(w)
// validate the necessary fields are populated
//
// https://pkg.go.dev/github.com/go-vela/types/database#Worker.Validate
err := worker.Validate()
if err != nil {
return nil, err
}
// send query to the database
result := e.client.
WithContext(ctx).
Table(constants.TableWorker).
Create(worker)
return worker.ToAPI(w.GetRunningBuilds()), result.Error
}
Check failure on line 3 in database/worker/update.go
github-actions / golangci
[golangci] database/worker/update.go#L3
3-41 lines are duplicate of `database/worker/create.go:3-41` (dupl)
Raw output
database/worker/update.go:3: 3-41 lines are duplicate of `database/worker/create.go:3-41` (dupl)
package worker
import (
"context"
"github.com/sirupsen/logrus"
api "github.com/go-vela/server/api/types"
"github.com/go-vela/server/database/types"
"github.com/go-vela/types/constants"
)
// UpdateWorker updates an existing worker in the database.
func (e *engine) UpdateWorker(ctx context.Context, w *api.Worker) (*api.Worker, error) {
e.logger.WithFields(logrus.Fields{
"worker": w.GetHostname(),
}).Tracef("updating worker %s", w.GetHostname())
// cast the library type to database type
//
// https://pkg.go.dev/github.com/go-vela/types/database#WorkerFromLibrary
worker := types.WorkerFromAPI(w)
// validate the necessary fields are populated
//
// https://pkg.go.dev/github.com/go-vela/types/database#Worker.Validate
err := worker.Validate()
if err != nil {
return nil, err
}
// send query to the database
result := e.client.
WithContext(ctx).
Table(constants.TableWorker).
Save(worker)
return worker.ToAPI(w.GetRunningBuilds()), result.Error
}
Check failure on line 3 in database/hook/get.go
github-actions / golangci
[golangci] database/hook/get.go#L3
3-40 lines are duplicate of `database/hook/get_webhook.go:3-40` (dupl)
Raw output
database/hook/get.go:3: 3-40 lines are duplicate of `database/hook/get_webhook.go:3-40` (dupl)
package hook
import (
"context"
api "github.com/go-vela/server/api/types"
"github.com/go-vela/server/constants"
"github.com/go-vela/server/database/types"
)
// GetHook gets a hook by ID from the database.
func (e *engine) GetHook(ctx context.Context, id int64) (*api.Hook, error) {
e.logger.Tracef("getting hook %d", id)
// variable to store query results
h := new(types.Hook)
// send query to the database and store result in variable
err := e.client.
WithContext(ctx).
Table(constants.TableHook).
Preload("Repo").
Preload("Repo.Owner").
Preload("Build").
Where("id = ?", id).
Take(h).
Error
if err != nil {
return nil, err
}
err = h.Repo.Decrypt(e.config.EncryptionKey)
if err != nil {
e.logger.Errorf("unable to decrypt repo for hook %d: %v", h.ID.Int64, err)
}
return h.ToAPI(), nil
}
Check failure on line 3 in database/hook/get_webhook.go
github-actions / golangci
[golangci] database/hook/get_webhook.go#L3
3-40 lines are duplicate of `database/hook/get.go:3-40` (dupl)
Raw output
database/hook/get_webhook.go:3: 3-40 lines are duplicate of `database/hook/get.go:3-40` (dupl)
package hook
import (
"context"
api "github.com/go-vela/server/api/types"
"github.com/go-vela/server/constants"
"github.com/go-vela/server/database/types"
)
// GetHookByWebhookID gets a single hook with a matching webhook id in the database.
func (e *engine) GetHookByWebhookID(ctx context.Context, webhookID int64) (*api.Hook, error) {
e.logger.Tracef("getting a hook with webhook id %d", webhookID)
// variable to store query results
h := new(types.Hook)
// send query to the database and store result in variable
err := e.client.
WithContext(ctx).
Table(constants.TableHook).
Preload("Repo").
Preload("Repo.Owner").
Preload("Build").
Where("webhook_id = ?", webhookID).
Take(h).
Error
if err != nil {
return nil, err
}
err = h.Repo.Decrypt(e.config.EncryptionKey)
if err != nil {
e.logger.Errorf("unable to decrypt repo for hook %d: %v", h.ID.Int64, err)
}
return h.ToAPI(), nil
}
Check failure on line 3 in database/hook/create.go
github-actions / golangci
[golangci] database/hook/create.go#L3
3-39 lines are duplicate of `database/hook/update.go:3-42` (dupl)
Raw output
database/hook/create.go:3: 3-39 lines are duplicate of `database/hook/update.go:3-42` (dupl)
package hook
import (
"context"
"github.com/sirupsen/logrus"
api "github.com/go-vela/server/api/types"
"github.com/go-vela/server/constants"
"github.com/go-vela/server/database/types"
)
// CreateHook creates a new hook in the database.
func (e *engine) CreateHook(ctx context.Context, h *api.Hook) (*api.Hook, error) {
e.logger.WithFields(logrus.Fields{
"hook": h.GetNumber(),
}).Tracef("creating hook %d", h.GetNumber())
hook := types.HookFromAPI(h)
err := hook.Validate()
if err != nil {
return nil, err
}
// send query to the database
err = e.client.WithContext(ctx).Table(constants.TableHook).Create(hook).Error
if err != nil {
return nil, err
}
result := hook.ToAPI()
result.SetRepo(h.GetRepo())
result.SetBuild(h.GetBuild())
return result, nil
}
Check failure on line 3 in database/hook/update.go
github-actions / golangci
[golangci] database/hook/update.go#L3
3-42 lines are duplicate of `database/hook/create.go:3-39` (dupl)
Raw output
database/hook/update.go:3: 3-42 lines are duplicate of `database/hook/create.go:3-39` (dupl)
package hook
import (
"context"
"github.com/sirupsen/logrus"
api "github.com/go-vela/server/api/types"
"github.com/go-vela/server/constants"
"github.com/go-vela/server/database/types"
)
// UpdateHook updates an existing hook in the database.
func (e *engine) UpdateHook(ctx context.Context, h *api.Hook) (*api.Hook, error) {
e.logger.WithFields(logrus.Fields{
"hook": h.GetNumber(),
}).Tracef("updating hook %d", h.GetNumber())
hook := types.HookFromAPI(h)
// validate the necessary fields are populated
//
// https://pkg.go.dev/github.com/go-vela/types/database#Hook.Validate
err := hook.Validate()
if err != nil {
return nil, err
}
// send query to the database
err = e.client.WithContext(ctx).Table(constants.TableHook).Save(hook).Error
if err != nil {
return nil, err
}
result := hook.ToAPI()
result.SetRepo(h.GetRepo())
result.SetBuild(h.GetBuild())
return result, nil
}
Check failure on line 78 in api/pipeline/validate.go
github-actions / golangci
[golangci] api/pipeline/validate.go#L78
78-110 lines are duplicate of `api/pipeline/compile.go:80-112` (dupl)
Raw output
api/pipeline/validate.go:78: 78-110 lines are duplicate of `api/pipeline/compile.go:80-112` (dupl)
func ValidatePipeline(c *gin.Context) {
// capture middleware values
m := c.MustGet("metadata").(*internal.Metadata)
l := c.MustGet("logger").(*logrus.Entry)
p := pipeline.Retrieve(c)
r := repo.Retrieve(c)
u := user.Retrieve(c)
ctx := c.Request.Context()
entry := fmt.Sprintf("%s/%s", r.GetFullName(), p.GetCommit())
l.Debugf("validating pipeline %s", entry)
// ensure we use the expected pipeline type when compiling
r.SetPipelineType(p.GetType())
// create the compiler object
compiler := compiler.FromContext(c).Duplicate().WithCommit(p.GetCommit()).WithMetadata(m).WithRepo(r).WithUser(u)
ruleData := prepareRuleData(c)
// validate the pipeline
pipeline, _, err := compiler.CompileLite(ctx, p.GetData(), ruleData, false)
if err != nil {
retErr := fmt.Errorf("unable to validate pipeline %s: %w", entry, err)
util.HandleError(c, http.StatusBadRequest, retErr)
return
}
writeOutput(c, pipeline)
}
Check failure on line 3 in api/pipeline/validate.go
github-actions / golangci
[golangci] api/pipeline/validate.go#L3
3-110 lines are duplicate of `api/pipeline/expand.go:4-112` (dupl)
Raw output
api/pipeline/validate.go:3: 3-110 lines are duplicate of `api/pipeline/expand.go:4-112` (dupl)
package pipeline
import (
"fmt"
"net/http"
"github.com/gin-gonic/gin"
"github.com/sirupsen/logrus"
"github.com/go-vela/server/compiler"
"github.com/go-vela/server/internal"
"github.com/go-vela/server/router/middleware/pipeline"
"github.com/go-vela/server/router/middleware/repo"
"github.com/go-vela/server/router/middleware/user"
"github.com/go-vela/server/util"
)
// swagger:operation POST /api/v1/pipelines/{org}/{repo}/{pipeline}/validate pipelines ValidatePipeline
//
// Get, expand and validate a pipeline
//
// ---
// produces:
// - application/yaml
// - application/json
// parameters:
// - in: path
// name: org
// description: Name of the organization
// required: true
// type: string
// - in: path
// name: repo
// description: Name of the repository
// required: true
// type: string
// - in: path
// name: pipeline
// description: Commit SHA for pipeline to retrieve
// required: true
// type: string
// - in: query
// name: output
// description: Output string for specifying output format
// type: string
// default: yaml
// enum:
// - json
// - yaml
// security:
// - ApiKeyAuth: []
// responses:
// '200':
// description: Successfully retrieved, expanded and validated the pipeline
// schema:
// type: string
// '400':
// description: Invalid request payload or path
// schema:
// "$ref": "#/definitions/Error"
// '401':
// description: Unauthorized
// schema:
// "$ref": "#/definitions/Error"
// '404':
// description: Not found
// schema:
// "$ref": "#/definitions/Error"
// '500':
// description: Unexpected server error
// schema:
// "$ref": "#/definitions/Error"
// ValidatePipeline represents the API handler to capture,
// expand and validate a pipeline configuration.
func ValidatePipeline(c *gin.Context) {
// capture middleware values
m := c.MustGet("metadata").(*internal.Metadata)
l := c.MustGet("logger").(*logrus.Entry)
p := pipeline.Retrieve(c)
r := repo.Retrieve(c)
u := user.Retrieve(c)
ctx := c.Request.Context()
entry := fmt.Sprintf("%s/%s", r.GetFullName(), p.GetCommit())
l.Debugf("validating pipeline %s", entry)
// ensure we use the expected pipeline type when compiling
r.SetPipelineType(p.GetType())
// create the compiler object
compiler := compiler.FromContext(c).Duplicate().WithCommit(p.GetCommit()).WithMetadata(m).WithRepo(r).WithUser(u)
ruleData := prepareRuleData(c)
// validate the pipeline
pipeline, _, err := compiler.CompileLite(ctx, p.GetData(), ruleData, false)
if err != nil {
retErr := fmt.Errorf("unable to validate pipeline %s: %w", entry, err)
util.HandleError(c, http.StatusBadRequest, retErr)
return
}
writeOutput(c, pipeline)
}
Check failure on line 84 in mock/server/authentication.go
github-actions / golangci
[golangci] mock/server/authentication.go#L84
string `error` has 4 occurrences, make it a constant (goconst)
Raw output
mock/server/authentication.go:84:9: string `error` has 4 occurrences, make it a constant (goconst)
err := "error"
^
Check failure on line 375 in database/types/build.go
github-actions / golangci
[golangci] database/types/build.go#L375
G115: integer overflow conversion int -> int32 (gosec)
Raw output
database/types/build.go:375:44: G115: integer overflow conversion int -> int32 (gosec)
Number: sql.NullInt32{Int32: int32(b.GetNumber()), Valid: true},
^
Check failure on line 376 in database/types/build.go
github-actions / golangci
[golangci] database/types/build.go#L376
G115: integer overflow conversion int -> int32 (gosec)
Raw output
database/types/build.go:376:44: G115: integer overflow conversion int -> int32 (gosec)
Parent: sql.NullInt32{Int32: int32(b.GetParent()), Valid: true},
^
Check failure on line 336 in database/types/repo.go
github-actions / golangci
[golangci] database/types/repo.go#L336
G115: integer overflow conversion int -> int32 (gosec)
Raw output
database/types/repo.go:336:43: G115: integer overflow conversion int -> int32 (gosec)
Counter: sql.NullInt32{Int32: int32(r.GetCounter()), Valid: true},
^
Check failure on line 134 in database/types/settings.go
github-actions / golangci
[golangci] database/types/settings.go#L134
G115: integer overflow conversion int64 -> uint64 (gosec)
Raw output
database/types/settings.go:134:35: G115: integer overflow conversion int64 -> uint64 (gosec)
psAPI.SetStarlarkExecLimit(uint64(ps.StarlarkExecLimit.Int64))
^
Check failure on line 205 in database/types/settings.go
github-actions / golangci
[golangci] database/types/settings.go#L205
G115: integer overflow conversion uint64 -> int64 (gosec)
Raw output
database/types/settings.go:205:49: G115: integer overflow conversion uint64 -> int64 (gosec)
StarlarkExecLimit: sql.NullInt64{Int64: int64(s.GetStarlarkExecLimit()), Valid: true},
^