cspell lint go code (#3706)

This commit is contained in:
6543 2024-05-24 22:35:04 +02:00 committed by GitHub
parent 4628a97c93
commit 42f2734308
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
44 changed files with 214 additions and 161 deletions

View file

@ -1,7 +1,17 @@
{ {
"version": "0.2", "version": "0.2",
"language": "en", "language": "en",
"dictionaries": [
// language
"en_us",
// code
"go",
"node",
// package names
"npm"
],
"words": [ "words": [
"abool",
"BUILDPLATFORM", "BUILDPLATFORM",
"Codeberg", "Codeberg",
"Curr", "Curr",
@ -21,35 +31,40 @@
"Ionescu", "Ionescu",
"Kaniko", "Kaniko",
"Keyfunc", "Keyfunc",
"LASTEXITCODE",
"Laszlo", "Laszlo",
"Msgf", "Msgf",
"Netrc", "Netrc",
"PROTOC", "PROTOC",
"Pinia", "Pinia",
"Println", "Println",
"pwsh",
"Refspec", "Refspec",
"Reviewdog", "Reviewdog",
"Rydzewski", "Rydzewski",
"SSHURL",
"TARGETARCH", "TARGETARCH",
"TARGETOS", "TARGETOS",
"Typeflag",
"Upsert", "Upsert",
"WORKDIR", "WORKDIR",
"Warnf", "Warnf",
"Weblate", "Weblate",
"Wrapf", "Wrapf",
"anbraten", "anbraten",
"apimachinery",
"autoincr", "autoincr",
"autoscaler", "autoscaler",
"binutils", "binutils",
"bitbucketdatacenter", "bitbucketdatacenter",
"bradrydzewski", "bradrydzewski",
"brightbox",
"buildx", "buildx",
"ccmenu", "ccmenu",
"charmbracelet", "charmbracelet",
"ciphertext", "ciphertext",
"compatiblelicenses", "compatiblelicenses",
"corepack", "corepack",
"cpuset",
"creativecommons", "creativecommons",
"datacenter", "datacenter",
"desaturate", "desaturate",
@ -57,11 +72,14 @@
"doublestar", "doublestar",
"envsubst", "envsubst",
"estree", "estree",
"errgroup",
"evenodd", "evenodd",
"excalidraw", "excalidraw",
"favicons", "favicons",
"forbidigo",
"fsnotify", "fsnotify",
"gitea", "gitea",
"gocritic",
"golangci", "golangci",
"gomod", "gomod",
"gonic", "gonic",
@ -73,7 +91,10 @@
"laszlocph", "laszlocph",
"logfile", "logfile",
"loglevel", "loglevel",
"mapstructure",
"markdownlint", "markdownlint",
"memswap",
"moby",
"multiarch", "multiarch",
"multierr", "multierr",
"netdns", "netdns",
@ -86,24 +107,37 @@
"ppid", "ppid",
"prismjs", "prismjs",
"proto", "proto",
"protobuf",
"protoc", "protoc",
"protoimpl",
"protoreflect",
"rawurl", "rawurl",
"regcred",
"repology", "repology",
"reslimit",
"riscv",
"rundll32",
"seccomp",
"secprofile",
"securecookie", "securecookie",
"sess", "sess",
"shellescape",
"stepbuilder", "stepbuilder",
"stretchr", "stretchr",
"sublicensable", "sublicensable",
"swaggo",
"techknowlogick", "techknowlogick",
"testdata", "testdata",
"tink", "tink",
"tinycolor", "tinycolor",
"tmpfs",
"tmpl",
"tolerations",
"ttlcache",
"typecheck", "typecheck",
"unplugin", "unplugin",
"urfave", "urfave",
"varchar", "varchar",
"vite",
"vitejs",
"vueuse", "vueuse",
"waivable", "waivable",
"windi", "windi",
@ -112,6 +146,7 @@
"xlog", "xlog",
"xorm", "xorm",
"xormigrate", "xormigrate",
"xyaml",
"zerolog", "zerolog",
"zerologger" "zerologger"
], ],
@ -119,6 +154,7 @@
"**/node_modules/**/*", "**/node_modules/**/*",
"*.excalidraw", "*.excalidraw",
"*.svg", "*.svg",
"*_test.go",
".cspell.json", ".cspell.json",
".git/**/*", ".git/**/*",
".gitignore", ".gitignore",
@ -130,18 +166,29 @@
"flake.nix", "flake.nix",
"go.mod", "go.mod",
"go.sum", "go.sum",
"pipeline/rpc/proto/woodpecker.pb.go",
"pnpm-lock.yaml", "pnpm-lock.yaml",
"server/store/datastore/migration/**/*", "server/store/datastore/migration/**/*",
"web/components.d.ts", "web/components.d.ts",
"web/src/assets/locales/**/*", "web/src/assets/locales/**/*",
"**/fixtures/**",
"**/testdata/**",
// TODO: remove the following // TODO: remove the following
".woodpecker/",
"agent/",
"cli/",
"cmd/",
"docs/", "docs/",
"pipeline/",
"server/" "server/"
], ],
// Exclude imports, because they are also strings.
"ignoreRegExpList": [
// ignore mulltiline imports
"import\\s*\\((.|[\r\n])*?\\)",
// ignore single line imports
"import\\s*.*\".*?\"",
// ignore go generate directive
"//\\s*go:generate.*",
// ignore nolint directive
"//\\s*nolint:.*",
// ignore docker image names
"\\s*docker\\.io/.*"
],
"enableFiletypes": ["dockercompose"] "enableFiletypes": ["dockercompose"]
} }

View file

@ -6,6 +6,8 @@ variables:
- &node_image 'docker.io/node:22-alpine' - &node_image 'docker.io/node:22-alpine'
- &xgo_image 'docker.io/techknowlogick/xgo:go-1.22.x' - &xgo_image 'docker.io/techknowlogick/xgo:go-1.22.x'
# cspell:words bindata netgo TARGZ
steps: steps:
build-web: build-web:
image: *node_image image: *node_image

View file

@ -9,6 +9,8 @@ variables:
- &platforms_alpine 'linux/arm/v6,linux/arm/v7,linux/arm64/v8,linux/amd64,linux/ppc64le' - &platforms_alpine 'linux/arm/v6,linux/arm/v7,linux/arm64/v8,linux/amd64,linux/ppc64le'
- &build_args 'CI_COMMIT_SHA=${CI_COMMIT_SHA},CI_COMMIT_BRANCH=${CI_COMMIT_BRANCH},CI_COMMIT_TAG=${CI_COMMIT_TAG}' - &build_args 'CI_COMMIT_SHA=${CI_COMMIT_SHA},CI_COMMIT_BRANCH=${CI_COMMIT_BRANCH},CI_COMMIT_TAG=${CI_COMMIT_TAG}'
# cspell:words woodpeckerbot netgo TARGZ
# vars used on push / tag events only # vars used on push / tag events only
- publish_logins: &publish_logins # Default DockerHub login - publish_logins: &publish_logins # Default DockerHub login
- registry: https://index.docker.io/v1/ - registry: https://index.docker.io/v1/
@ -96,7 +98,7 @@ steps:
- make cross-compile-server - make cross-compile-server
environment: environment:
PLATFORMS: linux|amd64 PLATFORMS: linux|amd64
TAGS: bindata sqlite sqlite_unlock_notify netgo TAGS: sqlite sqlite_unlock_notify netgo
when: when:
- event: pull_request - event: pull_request
evaluate: 'CI_COMMIT_PULL_REQUEST_LABELS contains "build_pr_images"' evaluate: 'CI_COMMIT_PULL_REQUEST_LABELS contains "build_pr_images"'
@ -118,7 +120,7 @@ steps:
- make cross-compile-server - make cross-compile-server
environment: environment:
PLATFORMS: linux|arm/v7;linux|arm64/v8;linux|amd64;linux|ppc64le;linux|riscv64 PLATFORMS: linux|arm/v7;linux|arm64/v8;linux|amd64;linux|ppc64le;linux|riscv64
TAGS: bindata sqlite sqlite_unlock_notify netgo TAGS: sqlite sqlite_unlock_notify netgo
when: when:
branch: branch:
- ${CI_REPO_DEFAULT_BRANCH} - ${CI_REPO_DEFAULT_BRANCH}

View file

@ -6,8 +6,7 @@ when:
- renovate/* - renovate/*
variables: variables:
- &trivy_image aquasec/trivy:0.46.1 - &trivy_plugin docker.io/woodpeckerci/plugin-trivy:1.0.1
- &trivy_plugin woodpeckerci/plugin-trivy:1.0.1
steps: steps:
backend: backend:
@ -22,7 +21,7 @@ steps:
settings: settings:
skip-dirs: node_modules/,plugins/woodpecker-plugins/node_modules/ skip-dirs: node_modules/,plugins/woodpecker-plugins/node_modules/
dir: docs/ dir: docs/
# well we should check it, but we can not do much about old deps if docusaurus do not take that serously # well we should check it, but we can not do much about old deps if docusaurus do not take that seriously
# but this is not an issue as we just generate a static site anyway ... # but this is not an issue as we just generate a static site anyway ...
failure: ignore failure: ignore

View file

@ -18,7 +18,8 @@ steps:
commands: commands:
- corepack enable - corepack enable
- pnpx cspell lint --no-progress --gitignore '{**,.*}/{*,.*}' - pnpx cspell lint --no-progress --gitignore '{**,.*}/{*,.*}'
- apk add --no-cache -U tree # busybox tree dont understand "-I" - apk add --no-cache -U tree # busybox tree don't understand "-I"
# cspell:disable-next-line
- tree --gitignore -I 012_columns_rename_procs_to_steps.go -I versioned_docs -I '*opensource.svg'| pnpx cspell lint --no-progress stdin - tree --gitignore -I 012_columns_rename_procs_to_steps.go -I versioned_docs -I '*opensource.svg'| pnpx cspell lint --no-progress stdin
- name: prettier - name: prettier
@ -28,7 +29,7 @@ steps:
version: 3.2.5 version: 3.2.5
- name: links - name: links
image: lycheeverse/lychee:0.14.3 image: docker.io/lycheeverse/lychee:0.14.3
depends_on: [] depends_on: []
commands: commands:
- lychee pipeline/frontend/yaml/linter/schema/schema.json - lychee pipeline/frontend/yaml/linter/schema/schema.json

View file

@ -74,7 +74,7 @@ steps:
lint-license-header: lint-license-header:
image: *golang_image image: *golang_image
commands: commands:
- go install github.com/google/addlicense@latest - go install github.com/google/addlicense@latest # cspell:words addlicense
- 'addlicense -check -ignore "vendor/**" **/*.go' - 'addlicense -check -ignore "vendor/**" **/*.go'
when: *when when: *when
@ -107,7 +107,7 @@ steps:
image: *golang_image image: *golang_image
environment: environment:
WOODPECKER_DATABASE_DRIVER: postgres WOODPECKER_DATABASE_DRIVER: postgres
WOODPECKER_DATABASE_DATASOURCE: 'host=postgres user=postgres dbname=postgres sslmode=disable' WOODPECKER_DATABASE_DATASOURCE: 'host=postgres user=postgres dbname=postgres sslmode=disable' # cspell:disable-line
commands: commands:
- make test-server-datastore - make test-server-datastore
when: *when when: *when

View file

@ -35,7 +35,7 @@ steps:
- pnpm lint - pnpm lint
when: *when when: *when
formatcheck: format-check:
depends_on: depends_on:
- install-dependencies - install-dependencies
image: *node_image image: *node_image

View file

@ -28,7 +28,7 @@ import (
func (r *Runner) createLogger(logger zerolog.Logger, uploads *sync.WaitGroup, workflow *rpc.Workflow) pipeline.Logger { func (r *Runner) createLogger(logger zerolog.Logger, uploads *sync.WaitGroup, workflow *rpc.Workflow) pipeline.Logger {
return func(step *backend.Step, rc io.Reader) error { return func(step *backend.Step, rc io.Reader) error {
loglogger := logger.With(). logLogger := logger.With().
Str("image", step.Image). Str("image", step.Image).
Str("workflowID", workflow.ID). Str("workflowID", workflow.ID).
Logger() Logger()
@ -40,14 +40,14 @@ func (r *Runner) createLogger(logger zerolog.Logger, uploads *sync.WaitGroup, wo
secrets = append(secrets, secret.Value) secrets = append(secrets, secret.Value)
} }
loglogger.Debug().Msg("log stream opened") logLogger.Debug().Msg("log stream opened")
logStream := rpc.NewLineWriter(r.client, step.UUID, secrets...) logStream := rpc.NewLineWriter(r.client, step.UUID, secrets...)
if _, err := io.Copy(logStream, rc); err != nil { if _, err := io.Copy(logStream, rc); err != nil {
log.Error().Err(err).Msg("copy limited logStream part") log.Error().Err(err).Msg("copy limited logStream part")
} }
loglogger.Debug().Msg("log stream copied, close ...") logLogger.Debug().Msg("log stream copied, close ...")
uploads.Done() uploads.Done()
return nil return nil

View file

@ -54,7 +54,7 @@ func (r *Runner) Run(runnerCtx context.Context) error { //nolint:contextcheck
log.Debug().Msg("request next execution") log.Debug().Msg("request next execution")
meta, _ := metadata.FromOutgoingContext(runnerCtx) meta, _ := metadata.FromOutgoingContext(runnerCtx)
ctxmeta := metadata.NewOutgoingContext(context.Background(), meta) ctxMeta := metadata.NewOutgoingContext(context.Background(), meta)
// get the next workflow from the queue // get the next workflow from the queue
work, err := r.client.Next(runnerCtx, r.filter) work, err := r.client.Next(runnerCtx, r.filter)
@ -89,7 +89,7 @@ func (r *Runner) Run(runnerCtx context.Context) error { //nolint:contextcheck
logger.Debug().Msg("received execution") logger.Debug().Msg("received execution")
workflowCtx, cancel := context.WithTimeout(ctxmeta, timeout) workflowCtx, cancel := context.WithTimeout(ctxMeta, timeout)
defer cancel() defer cancel()
// Add sigterm support for internal context. // Add sigterm support for internal context.
@ -103,9 +103,9 @@ func (r *Runner) Run(runnerCtx context.Context) error { //nolint:contextcheck
go func() { go func() {
logger.Debug().Msg("listen for cancel signal") logger.Debug().Msg("listen for cancel signal")
if werr := r.client.Wait(workflowCtx, work.ID); werr != nil { if err := r.client.Wait(workflowCtx, work.ID); err != nil {
canceled.SetTo(true) canceled.SetTo(true)
logger.Warn().Err(werr).Msg("cancel signal received") logger.Warn().Err(err).Msg("cancel signal received")
cancel() cancel()
} else { } else {
@ -144,7 +144,7 @@ func (r *Runner) Run(runnerCtx context.Context) error { //nolint:contextcheck
pipeline.WithContext(workflowCtx), pipeline.WithContext(workflowCtx),
pipeline.WithTaskUUID(fmt.Sprint(work.ID)), pipeline.WithTaskUUID(fmt.Sprint(work.ID)),
pipeline.WithLogger(r.createLogger(logger, &uploads, work)), pipeline.WithLogger(r.createLogger(logger, &uploads, work)),
pipeline.WithTracer(r.createTracer(ctxmeta, logger, work)), pipeline.WithTracer(r.createTracer(ctxMeta, logger, work)),
pipeline.WithBackend(*r.backend), pipeline.WithBackend(*r.backend),
pipeline.WithDescription(map[string]string{ pipeline.WithDescription(map[string]string{
"ID": work.ID, "ID": work.ID,

View file

@ -26,9 +26,9 @@ import (
"go.woodpecker-ci.org/woodpecker/v2/pipeline/rpc" "go.woodpecker-ci.org/woodpecker/v2/pipeline/rpc"
) )
func (r *Runner) createTracer(ctxmeta context.Context, logger zerolog.Logger, workflow *rpc.Workflow) pipeline.TraceFunc { func (r *Runner) createTracer(ctxMeta context.Context, logger zerolog.Logger, workflow *rpc.Workflow) pipeline.TraceFunc {
return func(state *pipeline.State) error { return func(state *pipeline.State) error {
steplogger := logger.With(). stepLogger := logger.With().
Str("image", state.Pipeline.Step.Image). Str("image", state.Pipeline.Step.Image).
Str("workflowID", workflow.ID). Str("workflowID", workflow.ID).
Err(state.Process.Error). Err(state.Process.Error).
@ -48,15 +48,15 @@ func (r *Runner) createTracer(ctxmeta context.Context, logger zerolog.Logger, wo
} }
defer func() { defer func() {
steplogger.Debug().Msg("update step status") stepLogger.Debug().Msg("update step status")
if uerr := r.client.Update(ctxmeta, workflow.ID, stepState); uerr != nil { if err := r.client.Update(ctxMeta, workflow.ID, stepState); err != nil {
steplogger.Debug(). stepLogger.Debug().
Err(uerr). Err(err).
Msg("update step status error") Msg("update step status error")
} }
steplogger.Debug().Msg("update step status complete") stepLogger.Debug().Msg("update step status complete")
}() }()
if state.Process.Exited { if state.Process.Exited {
return nil return nil

View file

@ -78,9 +78,9 @@ func deploy(c *cli.Context) error {
var number int64 var number int64
if pipelineArg == "last" { if pipelineArg == "last" {
// Fetch the pipeline number from the last pipeline // Fetch the pipeline number from the last pipeline
pipelines, berr := client.PipelineList(repoID) pipelines, err := client.PipelineList(repoID)
if berr != nil { if err != nil {
return berr return err
} }
for _, pipeline := range pipelines { for _, pipeline := range pipelines {
if branch != "" && pipeline.Branch != branch { if branch != "" && pipeline.Branch != branch {

View file

@ -146,14 +146,14 @@ func execWithAxis(c *cli.Context, file, repoPath string, axis matrix.Axis) error
if err != nil { if err != nil {
return err return err
} }
confstr, err := tmpl.Execute(func(name string) string { confStr, err := tmpl.Execute(func(name string) string {
return environ[name] return environ[name]
}) })
if err != nil { if err != nil {
return err return err
} }
conf, err := yaml.ParseString(confstr) conf, err := yaml.ParseString(confStr)
if err != nil { if err != nil {
return err return err
} }
@ -177,12 +177,12 @@ func execWithAxis(c *cli.Context, file, repoPath string, axis matrix.Axis) error
} }
// lint the yaml file // lint the yaml file
if lerr := linter.New(linter.WithTrusted(true)).Lint([]*linter.WorkflowConfig{{ if err := linter.New(linter.WithTrusted(true)).Lint([]*linter.WorkflowConfig{{
File: path.Base(file), File: path.Base(file),
RawConfig: confstr, RawConfig: confStr,
Workflow: conf, Workflow: conf,
}}); lerr != nil { }}); err != nil {
return lerr return err
} }
// compiles the yaml file // compiles the yaml file

View file

@ -35,7 +35,7 @@ func NewClient(c *cli.Context) (woodpecker.Client, error) {
var ( var (
skip = c.Bool("skip-verify") skip = c.Bool("skip-verify")
socks = c.String("socks-proxy") socks = c.String("socks-proxy")
socksoff = c.Bool("socks-proxy-off") socksOff = c.Bool("socks-proxy-off")
token = c.String("token") token = c.String("token")
server = c.String("server") server = c.String("server")
) )
@ -70,7 +70,7 @@ func NewClient(c *cli.Context) (woodpecker.Client, error) {
trans, _ := client.Transport.(*oauth2.Transport) trans, _ := client.Transport.(*oauth2.Transport)
if len(socks) != 0 && !socksoff { if len(socks) != 0 && !socksOff {
dialer, err := proxy.SOCKS5("tcp", socks, nil, proxy.Direct) dialer, err := proxy.SOCKS5("tcp", socks, nil, proxy.Direct)
if err != nil { if err != nil {
return nil, err return nil, err

View file

@ -22,7 +22,7 @@ import (
"path/filepath" "path/filepath"
"strings" "strings"
"github.com/muesli/termenv" term_env "github.com/muesli/termenv"
"github.com/urfave/cli/v2" "github.com/urfave/cli/v2"
"go.woodpecker-ci.org/woodpecker/v2/cli/common" "go.woodpecker-ci.org/woodpecker/v2/cli/common"
@ -72,7 +72,7 @@ func lintDir(c *cli.Context, dir string) error {
} }
func lintFile(_ *cli.Context, file string) error { func lintFile(_ *cli.Context, file string) error {
output := termenv.NewOutput(os.Stdout) output := term_env.NewOutput(os.Stdout)
fi, err := os.Open(file) fi, err := os.Open(file)
if err != nil { if err != nil {

View file

@ -64,7 +64,7 @@ func (o *Table) AddFieldFn(field string, fn FieldFn) *Table {
return o return o
} }
// AddAllowedFields reads all first level fieldnames of the struct and allows them to be used. // AddAllowedFields reads all first level field names of the struct and allows them to be used.
func (o *Table) AddAllowedFields(obj any) (*Table, error) { func (o *Table) AddAllowedFields(obj any) (*Table, error) {
v := reflect.ValueOf(obj) v := reflect.ValueOf(obj)
if v.Kind() != reflect.Struct { if v.Kind() != reflect.Struct {

View file

@ -47,7 +47,7 @@ var Command = &cli.Command{
} }
func pipelineOutput(c *cli.Context, resources []woodpecker.Pipeline, fd ...io.Writer) error { func pipelineOutput(c *cli.Context, resources []woodpecker.Pipeline, fd ...io.Writer) error {
outfmt, outopt := output.ParseOutputOptions(c.String("output")) outFmt, outOpt := output.ParseOutputOptions(c.String("output"))
noHeader := c.Bool("output-no-headers") noHeader := c.Bool("output-no-headers")
var out io.Writer var out io.Writer
@ -60,13 +60,13 @@ func pipelineOutput(c *cli.Context, resources []woodpecker.Pipeline, fd ...io.Wr
out = os.Stdout out = os.Stdout
} }
switch outfmt { switch outFmt {
case "go-template": case "go-template":
if len(outopt) < 1 { if len(outOpt) < 1 {
return fmt.Errorf("%w: missing template", output.ErrOutputOptionRequired) return fmt.Errorf("%w: missing template", output.ErrOutputOptionRequired)
} }
tmpl, err := template.New("_").Parse(outopt[0] + "\n") tmpl, err := template.New("_").Parse(outOpt[0] + "\n")
if err != nil { if err != nil {
return err return err
} }
@ -79,8 +79,8 @@ func pipelineOutput(c *cli.Context, resources []woodpecker.Pipeline, fd ...io.Wr
table := output.NewTable(out) table := output.NewTable(out)
cols := []string{"Number", "Status", "Event", "Branch", "Commit", "Author"} cols := []string{"Number", "Status", "Event", "Branch", "Commit", "Author"}
if len(outopt) > 0 { if len(outOpt) > 0 {
cols = outopt cols = outOpt
} }
if !noHeader { if !noHeader {
table.WriteHeader(cols) table.WriteHeader(cols)

View file

@ -73,14 +73,13 @@ func registryCreate(c *cli.Context) error {
} }
if strings.HasPrefix(registry.Password, "@") { if strings.HasPrefix(registry.Password, "@") {
path := strings.TrimPrefix(registry.Password, "@") path := strings.TrimPrefix(registry.Password, "@")
out, ferr := os.ReadFile(path) out, err := os.ReadFile(path)
if ferr != nil { if err != nil {
return ferr return err
} }
registry.Password = string(out) registry.Password = string(out)
} }
_, err = client.RegistryCreate(repoID, registry) if _, err := client.RegistryCreate(repoID, registry); err != nil {
if err != nil {
return err return err
} }
return nil return nil

View file

@ -73,9 +73,9 @@ func registryUpdate(c *cli.Context) error {
} }
if strings.HasPrefix(registry.Password, "@") { if strings.HasPrefix(registry.Password, "@") {
path := strings.TrimPrefix(registry.Password, "@") path := strings.TrimPrefix(registry.Password, "@")
out, ferr := os.ReadFile(path) out, err := os.ReadFile(path)
if ferr != nil { if err != nil {
return ferr return err
} }
registry.Password = string(out) registry.Password = string(out)
} }

View file

@ -11,7 +11,7 @@ import (
const tarDirectoryMode fs.FileMode = 0x755 const tarDirectoryMode fs.FileMode = 0x755
func Untar(dst string, r io.Reader) error { func UnTar(dst string, r io.Reader) error {
gzr, err := gzip.NewReader(r) gzr, err := gzip.NewReader(r)
if err != nil { if err != nil {
return err return err

View file

@ -122,7 +122,7 @@ func extractNewVersion(tarFilePath string) (string, error) {
return "", err return "", err
} }
err = Untar(tmpDir, tarFile) err = UnTar(tmpDir, tarFile)
if err != nil { if err != nil {
return "", err return "", err
} }

View file

@ -31,14 +31,14 @@ import (
"github.com/urfave/cli/v2" "github.com/urfave/cli/v2"
"google.golang.org/grpc" "google.golang.org/grpc"
"google.golang.org/grpc/codes" "google.golang.org/grpc/codes"
grpccredentials "google.golang.org/grpc/credentials" grpc_credentials "google.golang.org/grpc/credentials"
"google.golang.org/grpc/credentials/insecure" "google.golang.org/grpc/credentials/insecure"
"google.golang.org/grpc/keepalive" "google.golang.org/grpc/keepalive"
"google.golang.org/grpc/metadata" "google.golang.org/grpc/metadata"
"google.golang.org/grpc/status" "google.golang.org/grpc/status"
"go.woodpecker-ci.org/woodpecker/v2/agent" "go.woodpecker-ci.org/woodpecker/v2/agent"
agentRpc "go.woodpecker-ci.org/woodpecker/v2/agent/rpc" agent_rpc "go.woodpecker-ci.org/woodpecker/v2/agent/rpc"
"go.woodpecker-ci.org/woodpecker/v2/pipeline/backend" "go.woodpecker-ci.org/woodpecker/v2/pipeline/backend"
"go.woodpecker-ci.org/woodpecker/v2/pipeline/backend/types" "go.woodpecker-ci.org/woodpecker/v2/pipeline/backend/types"
"go.woodpecker-ci.org/woodpecker/v2/pipeline/rpc" "go.woodpecker-ci.org/woodpecker/v2/pipeline/rpc"
@ -67,7 +67,7 @@ func run(c *cli.Context, backends []types.Backend) error {
var transport grpc.DialOption var transport grpc.DialOption
if c.Bool("grpc-secure") { if c.Bool("grpc-secure") {
transport = grpc.WithTransportCredentials(grpccredentials.NewTLS(&tls.Config{InsecureSkipVerify: c.Bool("grpc-skip-insecure")})) transport = grpc.WithTransportCredentials(grpc_credentials.NewTLS(&tls.Config{InsecureSkipVerify: c.Bool("grpc-skip-insecure")}))
} else { } else {
transport = grpc.WithTransportCredentials(insecure.NewCredentials()) transport = grpc.WithTransportCredentials(insecure.NewCredentials())
} }
@ -88,8 +88,8 @@ func run(c *cli.Context, backends []types.Backend) error {
agentConfig := readAgentConfig(agentConfigPath) agentConfig := readAgentConfig(agentConfigPath)
agentToken := c.String("grpc-token") agentToken := c.String("grpc-token")
authClient := agentRpc.NewAuthGrpcClient(authConn, agentToken, agentConfig.AgentID) authClient := agent_rpc.NewAuthGrpcClient(authConn, agentToken, agentConfig.AgentID)
authInterceptor, err := agentRpc.NewAuthInterceptor(authClient, 30*time.Minute) //nolint:mnd authInterceptor, err := agent_rpc.NewAuthInterceptor(authClient, 30*time.Minute) //nolint:mnd
if err != nil { if err != nil {
return err return err
} }
@ -109,7 +109,7 @@ func run(c *cli.Context, backends []types.Backend) error {
} }
defer conn.Close() defer conn.Close()
client := agentRpc.NewGrpcClient(conn) client := agent_rpc.NewGrpcClient(conn)
sigterm := abool.New() sigterm := abool.New()
ctx := metadata.NewOutgoingContext( ctx := metadata.NewOutgoingContext(
@ -138,12 +138,12 @@ func run(c *cli.Context, backends []types.Backend) error {
log.Error().Err(err).Msg("could not get grpc server version") log.Error().Err(err).Msg("could not get grpc server version")
return err return err
} }
if grpcServerVersion.GrpcVersion != agentRpc.ClientGrpcVersion { if grpcServerVersion.GrpcVersion != agent_rpc.ClientGrpcVersion {
err := errors.New("GRPC version mismatch") err := errors.New("GRPC version mismatch")
log.Error().Err(err).Msgf("server version %s does report grpc version %d but we only understand %d", log.Error().Err(err).Msgf("server version %s does report grpc version %d but we only understand %d",
grpcServerVersion.ServerVersion, grpcServerVersion.ServerVersion,
grpcServerVersion.GrpcVersion, grpcServerVersion.GrpcVersion,
agentRpc.ClientGrpcVersion) agent_rpc.ClientGrpcVersion)
return err return err
} }

View file

@ -64,7 +64,7 @@ var flags = []cli.Flag{
Usage: "List of labels to filter tasks on. An agent must be assigned every tag listed in a task to be selected.", Usage: "List of labels to filter tasks on. An agent must be assigned every tag listed in a task to be selected.",
}, },
&cli.IntFlag{ &cli.IntFlag{
EnvVars: []string{"WOODPECKER_MAX_WORKFLOWS", "WOODPECKER_MAX_PROCS"}, EnvVars: []string{"WOODPECKER_MAX_WORKFLOWS", "WOODPECKER_MAX_PROCS"}, // cspell:words PROCS
Name: "max-workflows", Name: "max-workflows",
Usage: "agent parallel workflows", Usage: "agent parallel workflows",
Value: 1, Value: 1,

View file

@ -32,8 +32,8 @@ import (
// https://github.com/mozilla-services/Dockerflow // https://github.com/mozilla-services/Dockerflow
func initHealth() { func initHealth() {
http.HandleFunc("/varz", handleStats) http.HandleFunc("/varz", handleStats) // cspell:words varz
http.HandleFunc("/healthz", handleHeartbeat) http.HandleFunc("/healthz", handleHeartbeat) // cspell:words healthz
http.HandleFunc("/version", handleVersion) http.HandleFunc("/version", handleVersion)
} }

View file

@ -24,6 +24,7 @@ func GenerateContainerConf(commands []string, goos string) (env map[string]strin
env["CI_SCRIPT"] = base64.StdEncoding.EncodeToString([]byte(generateScriptWindows(commands))) env["CI_SCRIPT"] = base64.StdEncoding.EncodeToString([]byte(generateScriptWindows(commands)))
env["HOME"] = "c:\\root" env["HOME"] = "c:\\root"
env["SHELL"] = "powershell.exe" env["SHELL"] = "powershell.exe"
// cspell:disable-next-line
entry = []string{"powershell", "-noprofile", "-noninteractive", "-command", "[System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($Env:CI_SCRIPT)) | iex"} entry = []string{"powershell", "-noprofile", "-noninteractive", "-command", "[System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($Env:CI_SCRIPT)) | iex"}
} else { } else {
env["CI_SCRIPT"] = base64.StdEncoding.EncodeToString([]byte(generateScriptPosix(commands))) env["CI_SCRIPT"] = base64.StdEncoding.EncodeToString([]byte(generateScriptPosix(commands)))

View file

@ -197,6 +197,7 @@ func encodeAuthToBase64(authConfig types.Auth) (string, error) {
// //
// It handles Windows and Linux style volume paths. // It handles Windows and Linux style volume paths.
func splitVolumeParts(volumeParts string) ([]string, error) { func splitVolumeParts(volumeParts string) ([]string, error) {
// cspell:disable-next-line
pattern := `^((?:[\w]\:)?[^\:]*)\:((?:[\w]\:)?[^\:]*)(?:\:([rwom]*))?` pattern := `^((?:[\w]\:)?[^\:]*)\:((?:[\w]\:)?[^\:]*)(?:\:([rwom]*))?`
r, err := regexp.Compile(pattern) r, err := regexp.Compile(pattern)
if err != nil { if err != nil {

View file

@ -25,10 +25,10 @@ import (
"github.com/docker/docker/api/types" "github.com/docker/docker/api/types"
"github.com/docker/docker/api/types/network" "github.com/docker/docker/api/types/network"
"github.com/docker/docker/api/types/volume" "github.com/docker/docker/api/types/volume"
"github.com/docker/go-connections/tlsconfig" tls_config "github.com/docker/go-connections/tlsconfig"
"github.com/moby/moby/client" "github.com/moby/moby/client"
"github.com/moby/moby/pkg/jsonmessage" json_message "github.com/moby/moby/pkg/jsonmessage"
"github.com/moby/moby/pkg/stdcopy" std_copy "github.com/moby/moby/pkg/stdcopy"
"github.com/moby/term" "github.com/moby/term"
"github.com/rs/zerolog/log" "github.com/rs/zerolog/log"
"github.com/urfave/cli/v2" "github.com/urfave/cli/v2"
@ -75,13 +75,13 @@ func httpClientOfOpts(dockerCertPath string, verifyTLS bool) *http.Client {
return nil return nil
} }
options := tlsconfig.Options{ options := tls_config.Options{
CAFile: filepath.Join(dockerCertPath, "ca.pem"), CAFile: filepath.Join(dockerCertPath, "ca.pem"),
CertFile: filepath.Join(dockerCertPath, "cert.pem"), CertFile: filepath.Join(dockerCertPath, "cert.pem"),
KeyFile: filepath.Join(dockerCertPath, "key.pem"), KeyFile: filepath.Join(dockerCertPath, "key.pem"),
InsecureSkipVerify: !verifyTLS, InsecureSkipVerify: !verifyTLS,
} }
tlsConf, err := tlsconfig.Client(options) tlsConf, err := tls_config.Client(options)
if err != nil { if err != nil {
log.Error().Err(err).Msg("could not create http client out of docker backend options") log.Error().Err(err).Msg("could not create http client out of docker backend options")
return nil return nil
@ -188,27 +188,27 @@ func (e *docker) StartStep(ctx context.Context, step *backend.Step, taskUUID str
containerName := toContainerName(step) containerName := toContainerName(step)
// create pull options with encoded authorization credentials. // create pull options with encoded authorization credentials.
pullopts := types.ImagePullOptions{} pullOpts := types.ImagePullOptions{}
if step.AuthConfig.Username != "" && step.AuthConfig.Password != "" { if step.AuthConfig.Username != "" && step.AuthConfig.Password != "" {
pullopts.RegistryAuth, _ = encodeAuthToBase64(step.AuthConfig) pullOpts.RegistryAuth, _ = encodeAuthToBase64(step.AuthConfig)
} }
// automatically pull the latest version of the image if requested // automatically pull the latest version of the image if requested
// by the process configuration. // by the process configuration.
if step.Pull { if step.Pull {
responseBody, perr := e.client.ImagePull(ctx, config.Image, pullopts) responseBody, pErr := e.client.ImagePull(ctx, config.Image, pullOpts)
if perr == nil { if pErr == nil {
// TODO(1936): show image pull progress in web-ui // TODO(1936): show image pull progress in web-ui
fd, isTerminal := term.GetFdInfo(os.Stdout) fd, isTerminal := term.GetFdInfo(os.Stdout)
if err := jsonmessage.DisplayJSONMessagesStream(responseBody, os.Stdout, fd, isTerminal, nil); err != nil { if err := json_message.DisplayJSONMessagesStream(responseBody, os.Stdout, fd, isTerminal, nil); err != nil {
log.Error().Err(err).Msg("DisplayJSONMessagesStream") log.Error().Err(err).Msg("DisplayJSONMessagesStream")
} }
responseBody.Close() responseBody.Close()
} }
// Fix "Show warning when fail to auth to docker registry" // Fix "Show warning when fail to auth to docker registry"
// (https://web.archive.org/web/20201023145804/https://github.com/drone/drone/issues/1917) // (https://web.archive.org/web/20201023145804/https://github.com/drone/drone/issues/1917)
if perr != nil && step.AuthConfig.Password != "" { if pErr != nil && step.AuthConfig.Password != "" {
return perr return pErr
} }
} }
@ -219,13 +219,13 @@ func (e *docker) StartStep(ctx context.Context, step *backend.Step, taskUUID str
if client.IsErrNotFound(err) { if client.IsErrNotFound(err) {
// automatically pull and try to re-create the image if the // automatically pull and try to re-create the image if the
// failure is caused because the image does not exist. // failure is caused because the image does not exist.
responseBody, perr := e.client.ImagePull(ctx, config.Image, pullopts) responseBody, pErr := e.client.ImagePull(ctx, config.Image, pullOpts)
if perr != nil { if pErr != nil {
return perr return pErr
} }
// TODO(1936): show image pull progress in web-ui // TODO(1936): show image pull progress in web-ui
fd, isTerminal := term.GetFdInfo(os.Stdout) fd, isTerminal := term.GetFdInfo(os.Stdout)
if err := jsonmessage.DisplayJSONMessagesStream(responseBody, os.Stdout, fd, isTerminal, nil); err != nil { if err := json_message.DisplayJSONMessagesStream(responseBody, os.Stdout, fd, isTerminal, nil); err != nil {
log.Error().Err(err).Msg("DisplayJSONMessagesStream") log.Error().Err(err).Msg("DisplayJSONMessagesStream")
} }
responseBody.Close() responseBody.Close()
@ -263,10 +263,10 @@ func (e *docker) WaitStep(ctx context.Context, step *backend.Step, taskUUID stri
containerName := toContainerName(step) containerName := toContainerName(step)
wait, errc := e.client.ContainerWait(ctx, containerName, "") wait, errC := e.client.ContainerWait(ctx, containerName, "")
select { select {
case <-wait: case <-wait:
case <-errc: case <-errC:
} }
info, err := e.client.ContainerInspect(ctx, containerName) info, err := e.client.ContainerInspect(ctx, containerName)
@ -292,7 +292,7 @@ func (e *docker) TailStep(ctx context.Context, step *backend.Step, taskUUID stri
// de multiplex 'logs' who contains two streams, previously multiplexed together using StdWriter // de multiplex 'logs' who contains two streams, previously multiplexed together using StdWriter
go func() { go func() {
_, _ = stdcopy.StdCopy(wc, wc, logs) _, _ = std_copy.StdCopy(wc, wc, logs)
_ = logs.Close() _ = logs.Close()
_ = wc.Close() _ = wc.Close()
}() }()

View file

@ -68,7 +68,7 @@ var Flags = []cli.Flag{
Value: false, Value: false,
}, },
&cli.BoolFlag{ &cli.BoolFlag{
EnvVars: []string{"WOODPECKER_BACKEND_K8S_SECCTX_NONROOT"}, EnvVars: []string{"WOODPECKER_BACKEND_K8S_SECCTX_NONROOT"}, // cspell:words secctx nonroot
Name: "backend-k8s-secctx-nonroot", Name: "backend-k8s-secctx-nonroot",
Usage: "`run as non root` Kubernetes security context option", Usage: "`run as non root` Kubernetes security context option",
}, },

View file

@ -28,7 +28,7 @@ import (
"github.com/urfave/cli/v2" "github.com/urfave/cli/v2"
"gopkg.in/yaml.v3" "gopkg.in/yaml.v3"
v1 "k8s.io/api/core/v1" v1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/informers" "k8s.io/client-go/informers"
"k8s.io/client-go/kubernetes" "k8s.io/client-go/kubernetes"
"k8s.io/client-go/kubernetes/scheme" "k8s.io/client-go/kubernetes/scheme"
@ -69,11 +69,11 @@ type SecurityContextConfig struct {
RunAsNonRoot bool RunAsNonRoot bool
} }
func newDefaultDeleteOptions() metav1.DeleteOptions { func newDefaultDeleteOptions() meta_v1.DeleteOptions {
gracePeriodSeconds := int64(0) // immediately gracePeriodSeconds := int64(0) // immediately
propagationPolicy := metav1.DeletePropagationBackground propagationPolicy := meta_v1.DeletePropagationBackground
return metav1.DeleteOptions{ return meta_v1.DeleteOptions{
GracePeriodSeconds: &gracePeriodSeconds, GracePeriodSeconds: &gracePeriodSeconds,
PropagationPolicy: &propagationPolicy, PropagationPolicy: &propagationPolicy,
} }
@ -93,7 +93,7 @@ func configFromCliContext(ctx context.Context) (*config, error) {
PodAnnotationsAllowFromStep: c.Bool("backend-k8s-pod-annotations-allow-from-step"), PodAnnotationsAllowFromStep: c.Bool("backend-k8s-pod-annotations-allow-from-step"),
ImagePullSecretNames: c.StringSlice("backend-k8s-pod-image-pull-secret-names"), ImagePullSecretNames: c.StringSlice("backend-k8s-pod-image-pull-secret-names"),
SecurityContext: SecurityContextConfig{ SecurityContext: SecurityContextConfig{
RunAsNonRoot: c.Bool("backend-k8s-secctx-nonroot"), RunAsNonRoot: c.Bool("backend-k8s-secctx-nonroot"), // cspell:words secctx nonroot
}, },
} }
// TODO: remove in next major // TODO: remove in next major
@ -270,7 +270,7 @@ func (e *kube) WaitStep(ctx context.Context, step *types.Step, taskUUID string)
// TODO: Cancel on ctx.Done // TODO: Cancel on ctx.Done
<-finished <-finished
pod, err := e.client.CoreV1().Pods(e.config.Namespace).Get(ctx, podName, metav1.GetOptions{}) pod, err := e.client.CoreV1().Pods(e.config.Namespace).Get(ctx, podName, meta_v1.GetOptions{})
if err != nil { if err != nil {
return nil, err return nil, err
} }

View file

@ -24,7 +24,7 @@ import (
v1 "k8s.io/api/core/v1" v1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/api/errors"
"k8s.io/apimachinery/pkg/api/resource" "k8s.io/apimachinery/pkg/api/resource"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"go.woodpecker-ci.org/woodpecker/v2/pipeline/backend/common" "go.woodpecker-ci.org/woodpecker/v2/pipeline/backend/common"
"go.woodpecker-ci.org/woodpecker/v2/pipeline/backend/types" "go.woodpecker-ci.org/woodpecker/v2/pipeline/backend/types"
@ -73,9 +73,9 @@ func podName(step *types.Step) (string, error) {
return dnsName(podPrefix + step.UUID) return dnsName(podPrefix + step.UUID)
} }
func podMeta(step *types.Step, config *config, options BackendOptions, podName string) (metav1.ObjectMeta, error) { func podMeta(step *types.Step, config *config, options BackendOptions, podName string) (meta_v1.ObjectMeta, error) {
var err error var err error
meta := metav1.ObjectMeta{ meta := meta_v1.ObjectMeta{
Name: podName, Name: podName,
Namespace: config.Namespace, Namespace: config.Namespace,
Annotations: podAnnotations(config, options, podName), Annotations: podAnnotations(config, options, podName),
@ -509,10 +509,10 @@ func startPod(ctx context.Context, engine *kube, step *types.Step, options Backe
} }
log.Trace().Msgf("creating pod: %s", pod.Name) log.Trace().Msgf("creating pod: %s", pod.Name)
return engine.client.CoreV1().Pods(engineConfig.Namespace).Create(ctx, pod, metav1.CreateOptions{}) return engine.client.CoreV1().Pods(engineConfig.Namespace).Create(ctx, pod, meta_v1.CreateOptions{})
} }
func stopPod(ctx context.Context, engine *kube, step *types.Step, deleteOpts metav1.DeleteOptions) error { func stopPod(ctx context.Context, engine *kube, step *types.Step, deleteOpts meta_v1.DeleteOptions) error {
podName, err := stepToPodName(step) podName, err := stepToPodName(step)
if err != nil { if err != nil {
return err return err

View file

@ -22,8 +22,8 @@ import (
"github.com/rs/zerolog/log" "github.com/rs/zerolog/log"
v1 "k8s.io/api/core/v1" v1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/util/intstr" int_str "k8s.io/apimachinery/pkg/util/intstr"
"go.woodpecker-ci.org/woodpecker/v2/pipeline/backend/types" "go.woodpecker-ci.org/woodpecker/v2/pipeline/backend/types"
) )
@ -50,7 +50,7 @@ func mkService(step *types.Step, config *config) (*v1.Service, error) {
log.Trace().Str("name", name).Interface("selector", selector).Interface("ports", svcPorts).Msg("creating service") log.Trace().Str("name", name).Interface("selector", selector).Interface("ports", svcPorts).Msg("creating service")
return &v1.Service{ return &v1.Service{
ObjectMeta: metav1.ObjectMeta{ ObjectMeta: meta_v1.ObjectMeta{
Name: name, Name: name,
Namespace: config.Namespace, Namespace: config.Namespace,
}, },
@ -73,7 +73,7 @@ func servicePort(port types.Port) v1.ServicePort {
Name: fmt.Sprintf("port-%d", portNumber), Name: fmt.Sprintf("port-%d", portNumber),
Port: portNumber, Port: portNumber,
Protocol: v1.Protocol(portProtocol), Protocol: v1.Protocol(portProtocol),
TargetPort: intstr.IntOrString{IntVal: portNumber}, TargetPort: int_str.IntOrString{IntVal: portNumber},
} }
} }
@ -85,10 +85,10 @@ func startService(ctx context.Context, engine *kube, step *types.Step) (*v1.Serv
} }
log.Trace().Str("name", svc.Name).Interface("selector", svc.Spec.Selector).Interface("ports", svc.Spec.Ports).Msg("creating service") log.Trace().Str("name", svc.Name).Interface("selector", svc.Spec.Selector).Interface("ports", svc.Spec.Ports).Msg("creating service")
return engine.client.CoreV1().Services(engineConfig.Namespace).Create(ctx, svc, metav1.CreateOptions{}) return engine.client.CoreV1().Services(engineConfig.Namespace).Create(ctx, svc, meta_v1.CreateOptions{})
} }
func stopService(ctx context.Context, engine *kube, step *types.Step, deleteOpts metav1.DeleteOptions) error { func stopService(ctx context.Context, engine *kube, step *types.Step, deleteOpts meta_v1.DeleteOptions) error {
svcName, err := serviceName(step) svcName, err := serviceName(step)
if err != nil { if err != nil {
return err return err

View file

@ -23,7 +23,7 @@ import (
v1 "k8s.io/api/core/v1" v1 "k8s.io/api/core/v1"
"k8s.io/client-go/kubernetes" "k8s.io/client-go/kubernetes"
"k8s.io/client-go/rest" "k8s.io/client-go/rest"
"k8s.io/client-go/tools/clientcmd" client_cmd "k8s.io/client-go/tools/clientcmd"
) )
var ( var (
@ -65,15 +65,15 @@ func isImagePullBackOffState(pod *v1.Pod) bool {
return false return false
} }
// getClientOutOfCluster returns a k8s clientset to the request from outside of cluster. // getClientOutOfCluster returns a k8s client set to the request from outside of cluster.
func getClientOutOfCluster() (kubernetes.Interface, error) { func getClientOutOfCluster() (kubernetes.Interface, error) {
kubeConfigPath := os.Getenv("KUBECONFIG") kubeConfigPath := os.Getenv("KUBECONFIG") // cspell:words KUBECONFIG
if kubeConfigPath == "" { if kubeConfigPath == "" {
kubeConfigPath = os.Getenv("HOME") + "/.kube/config" kubeConfigPath = os.Getenv("HOME") + "/.kube/config"
} }
// use the current context in kubeconfig // use the current context in kube config
config, err := clientcmd.BuildConfigFromFlags("", kubeConfigPath) config, err := client_cmd.BuildConfigFromFlags("", kubeConfigPath)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -81,7 +81,7 @@ func getClientOutOfCluster() (kubernetes.Interface, error) {
return kubernetes.NewForConfig(config) return kubernetes.NewForConfig(config)
} }
// getClient returns a k8s clientset to the request from inside of cluster. // getClient returns a k8s client set to the request from inside of cluster.
func getClientInsideOfCluster() (kubernetes.Interface, error) { func getClientInsideOfCluster() (kubernetes.Interface, error) {
config, err := rest.InClusterConfig() config, err := rest.InClusterConfig()
if err != nil { if err != nil {

View file

@ -22,7 +22,7 @@ import (
v1 "k8s.io/api/core/v1" v1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/api/errors"
"k8s.io/apimachinery/pkg/api/resource" "k8s.io/apimachinery/pkg/api/resource"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
) )
func mkPersistentVolumeClaim(config *config, name string) (*v1.PersistentVolumeClaim, error) { func mkPersistentVolumeClaim(config *config, name string) (*v1.PersistentVolumeClaim, error) {
@ -45,7 +45,7 @@ func mkPersistentVolumeClaim(config *config, name string) (*v1.PersistentVolumeC
} }
pvc := &v1.PersistentVolumeClaim{ pvc := &v1.PersistentVolumeClaim{
ObjectMeta: metav1.ObjectMeta{ ObjectMeta: meta_v1.ObjectMeta{
Name: volumeName, Name: volumeName,
Namespace: config.Namespace, Namespace: config.Namespace,
}, },
@ -83,10 +83,10 @@ func startVolume(ctx context.Context, engine *kube, name string) (*v1.Persistent
} }
log.Trace().Msgf("creating volume: %s", pvc.Name) log.Trace().Msgf("creating volume: %s", pvc.Name)
return engine.client.CoreV1().PersistentVolumeClaims(engineConfig.Namespace).Create(ctx, pvc, metav1.CreateOptions{}) return engine.client.CoreV1().PersistentVolumeClaims(engineConfig.Namespace).Create(ctx, pvc, meta_v1.CreateOptions{})
} }
func stopVolume(ctx context.Context, engine *kube, name string, deleteOpts metav1.DeleteOptions) error { func stopVolume(ctx context.Context, engine *kube, name string, deleteOpts meta_v1.DeleteOptions) error {
pvcName, err := volumeName(name) pvcName, err := volumeName(name)
if err != nil { if err != nil {
return err return err

View file

@ -24,9 +24,9 @@ import (
"github.com/alessio/shellescape" "github.com/alessio/shellescape"
) )
func (e *local) genCmdByShell(shell string, cmds []string) (args []string, err error) { func (e *local) genCmdByShell(shell string, cmdList []string) (args []string, err error) {
script := "" script := ""
for _, cmd := range cmds { for _, cmd := range cmdList {
script += fmt.Sprintf("echo %s\n%s\n", strings.TrimSpace(shellescape.Quote("+ "+cmd)), cmd) script += fmt.Sprintf("echo %s\n%s\n", strings.TrimSpace(shellescape.Quote("+ "+cmd)), cmd)
} }
script = strings.TrimSpace(script) script = strings.TrimSpace(script)
@ -34,7 +34,7 @@ func (e *local) genCmdByShell(shell string, cmds []string) (args []string, err e
switch strings.TrimSuffix(strings.ToLower(shell), ".exe") { switch strings.TrimSuffix(strings.ToLower(shell), ".exe") {
case "cmd": case "cmd":
script := "@SET PROMPT=$\n" script := "@SET PROMPT=$\n"
for _, cmd := range cmds { for _, cmd := range cmdList {
script += fmt.Sprintf("@echo + %s\n", strings.TrimSpace(shellescape.Quote(cmd))) script += fmt.Sprintf("@echo + %s\n", strings.TrimSpace(shellescape.Quote(cmd)))
script += fmt.Sprintf("@%s\n", cmd) script += fmt.Sprintf("@%s\n", cmd)
script += "@IF NOT %ERRORLEVEL% == 0 exit %ERRORLEVEL%\n" script += "@IF NOT %ERRORLEVEL% == 0 exit %ERRORLEVEL%\n"
@ -50,11 +50,12 @@ func (e *local) genCmdByShell(shell string, cmds []string) (args []string, err e
return []string{"/c", cmd.Name()}, nil return []string{"/c", cmd.Name()}, nil
case "fish": case "fish":
script := "" script := ""
for _, cmd := range cmds { for _, cmd := range cmdList {
script += fmt.Sprintf("echo %s\n%s || exit $status\n", strings.TrimSpace(shellescape.Quote("+ "+cmd)), cmd) script += fmt.Sprintf("echo %s\n%s || exit $status\n", strings.TrimSpace(shellescape.Quote("+ "+cmd)), cmd)
} }
return []string{"-c", script}, nil return []string{"-c", script}, nil
case "powershell", "pwsh": case "powershell", "pwsh":
// cspell:disable-next-line
return []string{"-noprofile", "-noninteractive", "-c", "$ErrorActionPreference = \"Stop\"; " + script}, nil return []string{"-noprofile", "-noninteractive", "-c", "$ErrorActionPreference = \"Stop\"; " + script}, nil
default: default:
// normal posix shells // normal posix shells

View file

@ -159,12 +159,12 @@ func WithNetworks(networks ...string) Option {
// WithResourceLimit configures the compiler with default resource limits that // WithResourceLimit configures the compiler with default resource limits that
// are applied each container in the pipeline. // are applied each container in the pipeline.
func WithResourceLimit(swap, mem, shmsize, cpuQuota, cpuShares int64, cpuSet string) Option { func WithResourceLimit(swap, mem, shmSize, cpuQuota, cpuShares int64, cpuSet string) Option {
return func(compiler *Compiler) { return func(compiler *Compiler) {
compiler.reslimit = ResourceLimit{ compiler.reslimit = ResourceLimit{
MemSwapLimit: swap, MemSwapLimit: swap,
MemLimit: mem, MemLimit: mem,
ShmSize: shmsize, ShmSize: shmSize,
CPUQuota: cpuQuota, CPUQuota: cpuQuota,
CPUShares: cpuShares, CPUShares: cpuShares,
CPUSet: cpuSet, CPUSet: cpuSet,

View file

@ -197,11 +197,11 @@ func (c *Constraint) Match(m metadata.Metadata, global bool, env map[string]stri
if err != nil { if err != nil {
return false, err return false, err
} }
bresult, ok := result.(bool) bResult, ok := result.(bool)
if !ok { if !ok {
return false, fmt.Errorf("could not parse result: %v", result) return false, fmt.Errorf("could not parse result: %v", result)
} }
match = match && bresult match = match && bResult
} }
return match, nil return match, nil
@ -247,7 +247,7 @@ func (c *List) Excludes(v string) bool {
return false return false
} }
// UnmarshalYAML unmarshals the constraint. // UnmarshalYAML unmarshal the constraint.
func (c *List) UnmarshalYAML(value *yaml.Node) error { func (c *List) UnmarshalYAML(value *yaml.Node) error {
out1 := struct { out1 := struct {
Include yamlBaseTypes.StringOrSlice Include yamlBaseTypes.StringOrSlice

View file

@ -22,7 +22,7 @@ import (
"codeberg.org/6543/go-yaml2json" "codeberg.org/6543/go-yaml2json"
"codeberg.org/6543/xyaml" "codeberg.org/6543/xyaml"
"github.com/xeipuuv/gojsonschema" json_schema "github.com/xeipuuv/gojsonschema"
"gopkg.in/yaml.v3" "gopkg.in/yaml.v3"
) )
@ -30,8 +30,8 @@ import (
var schemaDefinition []byte var schemaDefinition []byte
// Lint lints an io.Reader against the Woodpecker `schema.json`. // Lint lints an io.Reader against the Woodpecker `schema.json`.
func Lint(r io.Reader) ([]gojsonschema.ResultError, error) { func Lint(r io.Reader) ([]json_schema.ResultError, error) {
schemaLoader := gojsonschema.NewBytesLoader(schemaDefinition) schemaLoader := json_schema.NewBytesLoader(schemaDefinition)
// read yaml config // read yaml config
rBytes, err := io.ReadAll(r) rBytes, err := io.ReadAll(r)
@ -51,8 +51,8 @@ func Lint(r io.Reader) ([]gojsonschema.ResultError, error) {
return nil, fmt.Errorf("failed to convert yaml %w", err) return nil, fmt.Errorf("failed to convert yaml %w", err)
} }
documentLoader := gojsonschema.NewBytesLoader(jsonDoc) documentLoader := json_schema.NewBytesLoader(jsonDoc)
result, err := gojsonschema.Validate(schemaLoader, documentLoader) result, err := json_schema.Validate(schemaLoader, documentLoader)
if err != nil { if err != nil {
return nil, fmt.Errorf("validation failed %w", err) return nil, fmt.Errorf("validation failed %w", err)
} }
@ -64,6 +64,6 @@ func Lint(r io.Reader) ([]gojsonschema.ResultError, error) {
return nil, nil return nil, nil
} }
func LintString(s string) ([]gojsonschema.ResultError, error) { func LintString(s string) ([]json_schema.ResultError, error) {
return Lint(bytes.NewBufferString(s)) return Lint(bytes.NewBufferString(s))
} }

View file

@ -86,11 +86,11 @@ func calc(matrix Matrix) []Axis {
// for each axis calculate the unique set of values that should be used. // for each axis calculate the unique set of values that should be used.
for p := 0; p < perm; p++ { for p := 0; p < perm; p++ {
axis := map[string]string{} axis := map[string]string{}
decr := perm decrease := perm
for i, tag := range tags { for i, tag := range tags {
elems := matrix[tag] elems := matrix[tag]
decr /= len(elems) decrease /= len(elems)
elem := p / decr % len(elems) elem := p / decrease % len(elems)
axis[tag] = elems[elem] axis[tag] = elems[elem]
// enforce a maximum number of tags in the pipeline matrix. // enforce a maximum number of tags in the pipeline matrix.

View file

@ -25,7 +25,7 @@ type BoolTrue struct {
value bool value bool
} }
// UnmarshalYAML implements custom Yaml unmarshaling. // UnmarshalYAML implements custom Yaml unmarshal.
func (b *BoolTrue) UnmarshalYAML(value *yaml.Node) error { func (b *BoolTrue) UnmarshalYAML(value *yaml.Node) error {
var s string var s string
if err := value.Decode(&s); err != nil { if err := value.Decode(&s); err != nil {

View file

@ -66,24 +66,24 @@ func (v *Volumes) UnmarshalYAML(unmarshal func(any) error) error {
if !ok { if !ok {
return fmt.Errorf("cannot unmarshal '%v' to type %T into a string value", name, name) return fmt.Errorf("cannot unmarshal '%v' to type %T into a string value", name, name)
} }
elts := strings.SplitN(name, ":", 3) elements := strings.SplitN(name, ":", 3)
var vol *Volume var vol *Volume
//nolint:mnd //nolint:mnd
switch { switch {
case len(elts) == 1: case len(elements) == 1:
vol = &Volume{ vol = &Volume{
Destination: elts[0], Destination: elements[0],
} }
case len(elts) == 2: case len(elements) == 2:
vol = &Volume{ vol = &Volume{
Source: elts[0], Source: elements[0],
Destination: elts[1], Destination: elements[1],
} }
case len(elts) == 3: case len(elements) == 3:
vol = &Volume{ vol = &Volume{
Source: elts[0], Source: elements[0],
Destination: elts[1], Destination: elements[1],
AccessMode: elts[2], AccessMode: elements[2],
} }
default: default:
// FIXME // FIXME

View file

@ -134,7 +134,7 @@ message RegisterAgentResponse {
int64 agent_id = 1; int64 agent_id = 1;
} }
// Woodpecker auth service is a simple service to authenticate agents and aquire a token // Woodpecker auth service is a simple service to authenticate agents and acquire a token
service WoodpeckerAuth { service WoodpeckerAuth {
rpc Auth (AuthRequest) returns (AuthResponse) {} rpc Auth (AuthRequest) returns (AuthResponse) {}

View file

@ -22,7 +22,7 @@ import "strings"
// secrets with asterisks. Each secret string is split on newlines to // secrets with asterisks. Each secret string is split on newlines to
// handle multi-line secrets. // handle multi-line secrets.
func NewSecretsReplacer(secrets []string) *strings.Replacer { func NewSecretsReplacer(secrets []string) *strings.Replacer {
var oldnew []string var oldNew []string
// Strings shorter than minStringLength are not considered secrets. // Strings shorter than minStringLength are not considered secrets.
// Do not sanitize them. // Do not sanitize them.
@ -38,10 +38,10 @@ func NewSecretsReplacer(secrets []string) *strings.Replacer {
if len(part) == 0 { if len(part) == 0 {
continue continue
} }
oldnew = append(oldnew, part) oldNew = append(oldNew, part)
oldnew = append(oldnew, "********") oldNew = append(oldNew, "********")
} }
} }
return strings.NewReplacer(oldnew...) return strings.NewReplacer(oldNew...)
} }

View file

@ -20,7 +20,7 @@ import (
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"github.com/rs/zerolog/log" "github.com/rs/zerolog/log"
swaggerfiles "github.com/swaggo/files" swagger_files "github.com/swaggo/files"
ginSwagger "github.com/swaggo/gin-swagger" ginSwagger "github.com/swaggo/gin-swagger"
"go.woodpecker-ci.org/woodpecker/v2/cmd/server/docs" "go.woodpecker-ci.org/woodpecker/v2/cmd/server/docs"
@ -82,7 +82,7 @@ func Load(noRouteHandler http.HandlerFunc, middleware ...gin.HandlerFunc) http.H
func setupSwaggerConfigAndRoutes(e *gin.Engine) { func setupSwaggerConfigAndRoutes(e *gin.Engine) {
docs.SwaggerInfo.Host = getHost(server.Config.Server.Host) docs.SwaggerInfo.Host = getHost(server.Config.Server.Host)
docs.SwaggerInfo.BasePath = server.Config.Server.RootPath + "/api" docs.SwaggerInfo.BasePath = server.Config.Server.RootPath + "/api"
e.GET(server.Config.Server.RootPath+"/swagger/*any", ginSwagger.WrapHandler(swaggerfiles.Handler)) e.GET(server.Config.Server.RootPath+"/swagger/*any", ginSwagger.WrapHandler(swagger_files.Handler))
} }
func getHost(s string) string { func getHost(s string) string {

View file

@ -80,10 +80,10 @@ func (h *http) Fetch(ctx context.Context, forge forge.Forge, user *model.User, r
return oldConfigData, nil return oldConfigData, nil
} }
fileMetas := make([]*types.FileMeta, len(response.Configs)) fileMetaList := make([]*types.FileMeta, len(response.Configs))
for i, config := range response.Configs { for i, config := range response.Configs {
fileMetas[i] = &types.FileMeta{Name: config.Name, Data: []byte(config.Data)} fileMetaList[i] = &types.FileMeta{Name: config.Name, Data: []byte(config.Data)}
} }
return fileMetas, nil return fileMetaList, nil
} }

View file

@ -111,7 +111,7 @@ func (m *manager) RegistryService() registry.Service {
} }
func (m *manager) ConfigServiceFromRepo(_ *model.Repo) config.Service { func (m *manager) ConfigServiceFromRepo(_ *model.Repo) config.Service {
// TODO: decied based on repo property which config service to use // TODO: decide based on repo property which config service to use
return m.config return m.config
} }