Update Architecture: move pipeline/rpc => rpc & server/{grpc => rpc} (#6012)

This commit is contained in:
6543
2026-01-26 21:25:38 +01:00
committed by GitHub
parent ff6895308a
commit 3786077c07
38 changed files with 145 additions and 92 deletions

View File

@@ -28,9 +28,9 @@
"Bluesky", "Bluesky",
"Boguslawski", "Boguslawski",
"bradrydzewski", "bradrydzewski",
"buildkit",
"BUILDPLATFORM", "BUILDPLATFORM",
"buildx", "buildx",
"buildkit",
"caddyfile", "caddyfile",
"ccmenu", "ccmenu",
"CERTDIR", "CERTDIR",
@@ -120,10 +120,10 @@
"mapstructure", "mapstructure",
"markdownlint", "markdownlint",
"mdbook", "mdbook",
"Milestoned",
"memswap", "memswap",
"Metas", "Metas",
"mhmxs", "mhmxs",
"Milestoned",
"moby", "moby",
"Msgf", "Msgf",
"mstruebing", "mstruebing",
@@ -209,8 +209,8 @@
"unsanitize", "unsanitize",
"Upsert", "Upsert",
"urfave", "urfave",
"useragent",
"usecase", "usecase",
"useragent",
"varchar", "varchar",
"varz", "varz",
"Vieter", "Vieter",
@@ -239,32 +239,33 @@
"zerologger" "zerologger"
], ],
"ignorePaths": [ "ignorePaths": [
"*.excalidraw",
"*.svg",
"*_test.go",
".cspell.json", ".cspell.json",
".git/**/*", ".git/**/*",
".gitignore", ".gitignore",
".golangci.yaml", ".golangci.yaml",
".vscode/extensions.json", ".vscode/extensions.json",
"*_test.go",
"*.excalidraw",
"*.svg",
"**/*.pb.go",
"**/fixtures/**",
"**/testdata/**",
"CHANGELOG.md", "CHANGELOG.md",
"Makefile", "docs/versioned_docs/",
"flake.nix", "flake.nix",
"go.mod", "go.mod",
"**/*.pb.go", "Makefile",
"package.json",
"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/**",
"docs/versioned_docs/",
"package.json",
// generated // generated
"go.sum", "**/mocks/**",
"flake.lock",
"pnpm-lock.yaml",
"**/node_modules/**/*", "**/node_modules/**/*",
"cmd/server/openapi/docs.go", "cmd/server/openapi/docs.go",
"flake.lock",
"go.sum",
"pnpm-lock.yaml",
"renovate.json", "renovate.json",
// TODO: remove the following // TODO: remove the following
"docs/**/*.js", "docs/**/*.js",

View File

@@ -49,10 +49,10 @@ linters:
agent: agent:
list-mode: lax list-mode: lax
files: files:
- '**/agent/**/*.go'
- '**/agent/*.go' - '**/agent/*.go'
- '**/cmd/agent/**/*.go' - '**/agent/**/*.go'
- '**/cmd/agent/*.go' - '**/cmd/agent/*.go'
- '**/cmd/agent/**/*.go'
deny: deny:
- pkg: go.woodpecker-ci.org/woodpecker/v3/cli - pkg: go.woodpecker-ci.org/woodpecker/v3/cli
- pkg: go.woodpecker-ci.org/woodpecker/v3/cmd/cli - pkg: go.woodpecker-ci.org/woodpecker/v3/cmd/cli
@@ -63,70 +63,89 @@ linters:
cli: cli:
list-mode: lax list-mode: lax
files: files:
- '**/cli/**/*.go'
- '**/cli/*.go' - '**/cli/*.go'
- '**/cmd/cli/**/*.go' - '**/cli/**/*.go'
- '**/cmd/cli/*.go' - '**/cmd/cli/*.go'
- '**/cmd/cli/**/*.go'
deny: deny:
- pkg: go.woodpecker-ci.org/woodpecker/v3/agent - pkg: go.woodpecker-ci.org/woodpecker/v3/agent
- pkg: go.woodpecker-ci.org/woodpecker/v3/server
- pkg: go.woodpecker-ci.org/woodpecker/v3/cmd/agent - pkg: go.woodpecker-ci.org/woodpecker/v3/cmd/agent
- pkg: go.woodpecker-ci.org/woodpecker/v3/cmd/server - pkg: go.woodpecker-ci.org/woodpecker/v3/cmd/server
- pkg: go.woodpecker-ci.org/woodpecker/v3/rpc
- pkg: go.woodpecker-ci.org/woodpecker/v3/server
- pkg: go.woodpecker-ci.org/woodpecker/v3/web - pkg: go.woodpecker-ci.org/woodpecker/v3/web
pipeline: pipeline:
list-mode: lax list-mode: lax
files: files:
- '**/pipeline/**/*.go'
- '**/pipeline/*.go'
- '!**/cli/pipeline/*.go' - '!**/cli/pipeline/*.go'
- '!**/cli/pipeline/**/*.go' - '!**/cli/pipeline/**/*.go'
- '!**/server/pipeline/*.go' - '!**/server/pipeline/*.go'
- '!**/server/pipeline/**/*.go' - '!**/server/pipeline/**/*.go'
- '**/pipeline/*.go'
- '**/pipeline/**/*.go'
deny: deny:
- pkg: go.woodpecker-ci.org/woodpecker/v3/agent - pkg: go.woodpecker-ci.org/woodpecker/v3/agent
- pkg: go.woodpecker-ci.org/woodpecker/v3/cli - pkg: go.woodpecker-ci.org/woodpecker/v3/cli
- pkg: go.woodpecker-ci.org/woodpecker/v3/cmd - pkg: go.woodpecker-ci.org/woodpecker/v3/cmd
- pkg: go.woodpecker-ci.org/woodpecker/v3/rpc
- pkg: go.woodpecker-ci.org/woodpecker/v3/server - pkg: go.woodpecker-ci.org/woodpecker/v3/server
- pkg: go.woodpecker-ci.org/woodpecker/v3/web - pkg: go.woodpecker-ci.org/woodpecker/v3/web
server: server:
list-mode: lax list-mode: lax
files: files:
- '**/server/**/*.go'
- '**/server/*.go'
- '**/cmd/server/**/*.go'
- '**/cmd/server/*.go' - '**/cmd/server/*.go'
- '**/web/**/*.go' - '**/cmd/server/**/*.go'
- '**/server/*.go'
- '**/server/**/*.go'
- '**/web/*.go' - '**/web/*.go'
- '**/web/**/*.go'
deny: deny:
- pkg: go.woodpecker-ci.org/woodpecker/v3/agent - pkg: go.woodpecker-ci.org/woodpecker/v3/agent
- pkg: go.woodpecker-ci.org/woodpecker/v3/cli - pkg: go.woodpecker-ci.org/woodpecker/v3/cli
- pkg: go.woodpecker-ci.org/woodpecker/v3/cmd/agent - pkg: go.woodpecker-ci.org/woodpecker/v3/cmd/agent
- pkg: go.woodpecker-ci.org/woodpecker/v3/cmd/cli - pkg: go.woodpecker-ci.org/woodpecker/v3/cmd/cli
- pkg: go.woodpecker-ci.org/woodpecker/v3/woodpecker-go/woodpecker - pkg: go.woodpecker-ci.org/woodpecker/v3/woodpecker-go/woodpecker
rpc:
list-mode: lax
files:
- '!**/agent/rpc/*.go'
- '!**/agent/rpc/**/*.go'
- '!**/server/rpc/*.go'
- '!**/server/rpc/**/*.go'
- '**/rpc/*.go'
- '**/rpc/**/*.go'
deny:
- pkg: go.woodpecker-ci.org/woodpecker/v3/agent
- pkg: go.woodpecker-ci.org/woodpecker/v3/cli
- pkg: go.woodpecker-ci.org/woodpecker/v3/cmd
- pkg: go.woodpecker-ci.org/woodpecker/v3/server
- pkg: go.woodpecker-ci.org/woodpecker/v3/web
shared: shared:
list-mode: lax list-mode: lax
files: files:
- '**/shared/**/*.go'
- '**/shared/*.go'
- '!**/pipeline/shared/*.go' - '!**/pipeline/shared/*.go'
- '!**/pipeline/shared/**/*.go' - '!**/pipeline/shared/**/*.go'
- '**/shared/*.go'
- '**/shared/**/*.go'
deny: deny:
- pkg: go.woodpecker-ci.org/woodpecker/v3/agent - pkg: go.woodpecker-ci.org/woodpecker/v3/agent
- pkg: go.woodpecker-ci.org/woodpecker/v3/cli - pkg: go.woodpecker-ci.org/woodpecker/v3/cli
- pkg: go.woodpecker-ci.org/woodpecker/v3/cmd - pkg: go.woodpecker-ci.org/woodpecker/v3/cmd
- pkg: go.woodpecker-ci.org/woodpecker/v3/pipeline - pkg: go.woodpecker-ci.org/woodpecker/v3/pipeline
- pkg: go.woodpecker-ci.org/woodpecker/v3/rpc
- pkg: go.woodpecker-ci.org/woodpecker/v3/server - pkg: go.woodpecker-ci.org/woodpecker/v3/server
- pkg: go.woodpecker-ci.org/woodpecker/v3/web - pkg: go.woodpecker-ci.org/woodpecker/v3/web
woodpecker-go: woodpecker-go:
list-mode: lax list-mode: lax
files: files:
- '**/woodpecker-go/woodpecker/**/*.go'
- '**/woodpecker-go/woodpecker/*.go' - '**/woodpecker-go/woodpecker/*.go'
- '**/woodpecker-go/woodpecker/**/*.go'
deny: deny:
- pkg: go.woodpecker-ci.org/woodpecker/v3/agent - pkg: go.woodpecker-ci.org/woodpecker/v3/agent
- pkg: go.woodpecker-ci.org/woodpecker/v3/cli - pkg: go.woodpecker-ci.org/woodpecker/v3/cli
- pkg: go.woodpecker-ci.org/woodpecker/v3/cmd - pkg: go.woodpecker-ci.org/woodpecker/v3/cmd
- pkg: go.woodpecker-ci.org/woodpecker/v3/pipeline - pkg: go.woodpecker-ci.org/woodpecker/v3/pipeline
- pkg: go.woodpecker-ci.org/woodpecker/v3/rpc
- pkg: go.woodpecker-ci.org/woodpecker/v3/server - pkg: go.woodpecker-ci.org/woodpecker/v3/server
- pkg: go.woodpecker-ci.org/woodpecker/v3/shared - pkg: go.woodpecker-ci.org/woodpecker/v3/shared
- pkg: go.woodpecker-ci.org/woodpecker/v3/web - pkg: go.woodpecker-ci.org/woodpecker/v3/web

View File

@@ -5,7 +5,7 @@ filename: mock_{{.InterfaceName}}.go
pkgname: mocks pkgname: mocks
recursive: true recursive: true
packages: packages:
go.woodpecker-ci.org/woodpecker/v3/pipeline/rpc: go.woodpecker-ci.org/woodpecker/v3/rpc:
config: config:
recursive: false recursive: false
go.woodpecker-ci.org/woodpecker/v3/server/forge: go.woodpecker-ci.org/woodpecker/v3/server/forge:

View File

@@ -123,7 +123,7 @@ generate: install-mockery generate-openapi ## Run all code generations
CGO_ENABLED=0 go generate ./... CGO_ENABLED=0 go generate ./...
generate-openapi: ## Run openapi code generation and format it generate-openapi: ## Run openapi code generation and format it
CGO_ENABLED=0 go run github.com/swaggo/swag/cmd/swag fmt --exclude pipeline/rpc/proto CGO_ENABLED=0 go run github.com/swaggo/swag/cmd/swag fmt --exclude rpc/proto
CGO_ENABLED=0 go generate cmd/server/openapi.go CGO_ENABLED=0 go generate cmd/server/openapi.go
generate-license-header: install-addlicense generate-license-header: install-addlicense

View File

@@ -23,8 +23,8 @@ import (
"github.com/rs/zerolog/log" "github.com/rs/zerolog/log"
"go.woodpecker-ci.org/woodpecker/v3/pipeline/rpc"
"go.woodpecker-ci.org/woodpecker/v3/pipeline/shared" "go.woodpecker-ci.org/woodpecker/v3/pipeline/shared"
"go.woodpecker-ci.org/woodpecker/v3/rpc"
) )
// LineWriter sends logs to the client. // LineWriter sends logs to the client.

View File

@@ -20,9 +20,9 @@ import (
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/mock" "github.com/stretchr/testify/mock"
"go.woodpecker-ci.org/woodpecker/v3/pipeline/log" "go.woodpecker-ci.org/woodpecker/v3/agent/log"
"go.woodpecker-ci.org/woodpecker/v3/pipeline/rpc" "go.woodpecker-ci.org/woodpecker/v3/rpc"
"go.woodpecker-ci.org/woodpecker/v3/pipeline/rpc/mocks" "go.woodpecker-ci.org/woodpecker/v3/rpc/mocks"
) )
func TestLineWriter(t *testing.T) { func TestLineWriter(t *testing.T) {

View File

@@ -20,10 +20,11 @@ import (
"github.com/rs/zerolog" "github.com/rs/zerolog"
"go.woodpecker-ci.org/woodpecker/v3/agent/log"
"go.woodpecker-ci.org/woodpecker/v3/pipeline" "go.woodpecker-ci.org/woodpecker/v3/pipeline"
backend "go.woodpecker-ci.org/woodpecker/v3/pipeline/backend/types" backend "go.woodpecker-ci.org/woodpecker/v3/pipeline/backend/types"
"go.woodpecker-ci.org/woodpecker/v3/pipeline/log" pipeline_utils "go.woodpecker-ci.org/woodpecker/v3/pipeline/utils"
"go.woodpecker-ci.org/woodpecker/v3/pipeline/rpc" "go.woodpecker-ci.org/woodpecker/v3/rpc"
) )
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 {
@@ -44,7 +45,7 @@ func (r *Runner) createLogger(_logger zerolog.Logger, uploads *sync.WaitGroup, w
logger.Debug().Msg("log stream opened") logger.Debug().Msg("log stream opened")
logStream := log.NewLineWriter(r.client, step.UUID, secrets...) logStream := log.NewLineWriter(r.client, step.UUID, secrets...)
if err := log.CopyLineByLine(logStream, rc, pipeline.MaxLogLineLength); err != nil { if err := pipeline_utils.CopyLineByLine(logStream, rc, pipeline.MaxLogLineLength); err != nil {
logger.Error().Err(err).Msg("copy limited logStream part") logger.Error().Err(err).Msg("copy limited logStream part")
} }

View File

@@ -20,7 +20,7 @@ import (
"google.golang.org/grpc" "google.golang.org/grpc"
"go.woodpecker-ci.org/woodpecker/v3/pipeline/rpc/proto" "go.woodpecker-ci.org/woodpecker/v3/rpc/proto"
) )
const authClientTimeout = time.Second * 5 const authClientTimeout = time.Second * 5

View File

@@ -28,8 +28,8 @@ import (
grpcproto "google.golang.org/protobuf/proto" grpcproto "google.golang.org/protobuf/proto"
backend "go.woodpecker-ci.org/woodpecker/v3/pipeline/backend/types" backend "go.woodpecker-ci.org/woodpecker/v3/pipeline/backend/types"
"go.woodpecker-ci.org/woodpecker/v3/pipeline/rpc" "go.woodpecker-ci.org/woodpecker/v3/rpc"
"go.woodpecker-ci.org/woodpecker/v3/pipeline/rpc/proto" "go.woodpecker-ci.org/woodpecker/v3/rpc/proto"
) )
const ( const (

View File

@@ -27,7 +27,7 @@ import (
"go.woodpecker-ci.org/woodpecker/v3/pipeline" "go.woodpecker-ci.org/woodpecker/v3/pipeline"
backend "go.woodpecker-ci.org/woodpecker/v3/pipeline/backend/types" backend "go.woodpecker-ci.org/woodpecker/v3/pipeline/backend/types"
"go.woodpecker-ci.org/woodpecker/v3/pipeline/rpc" "go.woodpecker-ci.org/woodpecker/v3/rpc"
"go.woodpecker-ci.org/woodpecker/v3/shared/constant" "go.woodpecker-ci.org/woodpecker/v3/shared/constant"
"go.woodpecker-ci.org/woodpecker/v3/shared/utils" "go.woodpecker-ci.org/woodpecker/v3/shared/utils"
) )

View File

@@ -24,7 +24,7 @@ import (
"github.com/rs/zerolog" "github.com/rs/zerolog"
"go.woodpecker-ci.org/woodpecker/v3/pipeline" "go.woodpecker-ci.org/woodpecker/v3/pipeline"
"go.woodpecker-ci.org/woodpecker/v3/pipeline/rpc" "go.woodpecker-ci.org/woodpecker/v3/rpc"
) )
func (r *Runner) createTracer(ctxMeta context.Context, uploads *sync.WaitGroup, logger zerolog.Logger, workflow *rpc.Workflow) pipeline.TraceFunc { func (r *Runner) createTracer(ctxMeta context.Context, uploads *sync.WaitGroup, logger zerolog.Logger, workflow *rpc.Workflow) pipeline.TraceFunc {

View File

@@ -45,7 +45,7 @@ import (
"go.woodpecker-ci.org/woodpecker/v3/pipeline/frontend/yaml/compiler" "go.woodpecker-ci.org/woodpecker/v3/pipeline/frontend/yaml/compiler"
"go.woodpecker-ci.org/woodpecker/v3/pipeline/frontend/yaml/linter" "go.woodpecker-ci.org/woodpecker/v3/pipeline/frontend/yaml/linter"
"go.woodpecker-ci.org/woodpecker/v3/pipeline/frontend/yaml/matrix" "go.woodpecker-ci.org/woodpecker/v3/pipeline/frontend/yaml/matrix"
pipelineLog "go.woodpecker-ci.org/woodpecker/v3/pipeline/log" pipeline_utils "go.woodpecker-ci.org/woodpecker/v3/pipeline/utils"
"go.woodpecker-ci.org/woodpecker/v3/shared/constant" "go.woodpecker-ci.org/woodpecker/v3/shared/constant"
"go.woodpecker-ci.org/woodpecker/v3/shared/utils" "go.woodpecker-ci.org/woodpecker/v3/shared/utils"
) )
@@ -350,5 +350,5 @@ func convertPathForWindows(path string) string {
var defaultLogger = pipeline.Logger(func(step *backend_types.Step, rc io.ReadCloser) error { var defaultLogger = pipeline.Logger(func(step *backend_types.Step, rc io.ReadCloser) error {
logWriter := NewLineWriter(step.Name, step.UUID) logWriter := NewLineWriter(step.Name, step.UUID)
return pipelineLog.CopyLineByLine(logWriter, rc, pipeline.MaxLogLineLength) return pipeline_utils.CopyLineByLine(logWriter, rc, pipeline.MaxLogLineLength)
}) })

View File

@@ -43,7 +43,7 @@ import (
"go.woodpecker-ci.org/woodpecker/v3/pipeline" "go.woodpecker-ci.org/woodpecker/v3/pipeline"
"go.woodpecker-ci.org/woodpecker/v3/pipeline/backend" "go.woodpecker-ci.org/woodpecker/v3/pipeline/backend"
"go.woodpecker-ci.org/woodpecker/v3/pipeline/backend/types" "go.woodpecker-ci.org/woodpecker/v3/pipeline/backend/types"
"go.woodpecker-ci.org/woodpecker/v3/pipeline/rpc" "go.woodpecker-ci.org/woodpecker/v3/rpc"
"go.woodpecker-ci.org/woodpecker/v3/shared/logger" "go.woodpecker-ci.org/woodpecker/v3/shared/logger"
"go.woodpecker-ci.org/woodpecker/v3/shared/utils" "go.woodpecker-ci.org/woodpecker/v3/shared/utils"
"go.woodpecker-ci.org/woodpecker/v3/version" "go.woodpecker-ci.org/woodpecker/v3/version"

View File

@@ -24,9 +24,9 @@ import (
"google.golang.org/grpc" "google.golang.org/grpc"
"google.golang.org/grpc/keepalive" "google.golang.org/grpc/keepalive"
"go.woodpecker-ci.org/woodpecker/v3/pipeline/rpc/proto" "go.woodpecker-ci.org/woodpecker/v3/rpc/proto"
"go.woodpecker-ci.org/woodpecker/v3/server" "go.woodpecker-ci.org/woodpecker/v3/server"
woodpeckerGrpcServer "go.woodpecker-ci.org/woodpecker/v3/server/grpc" woodpeckerGrpcServer "go.woodpecker-ci.org/woodpecker/v3/server/rpc"
"go.woodpecker-ci.org/woodpecker/v3/server/store" "go.woodpecker-ci.org/woodpecker/v3/server/store"
) )

View File

@@ -11,38 +11,70 @@
| package | meaning | imports | | package | meaning | imports |
| ------------------ | -------------------------------------------------------------- | ------------------------------------- | | ------------------ | -------------------------------------------------------------- | ------------------------------------- |
| `cmd/**` | parse command-line args & environment to stat server/cli/agent | all other | | `cmd/**` | parse command-line args & environment to stat server/cli/agent | all other |
| `agent/**` | code only agent (remote worker) will need | `pipeline`, `shared` | | `agent/**` | code only agent (remote worker) will need | `pipeline`, `rpc`, `shared` |
| `cli/**` | code only cli tool does need | `pipeline`, `shared`, `woodpecker-go` | | `cli/**` | code only cli tool does need | `pipeline`, `shared`, `woodpecker-go` |
| `server/**` | code only server will need | `pipeline`, `shared` | | `server/**` | code only server will need | `pipeline`, `rpc`, `shared` |
| `pipeline/**` | core ci/cd engine from parsing to execution | `shared` |
| `rpc/**` | RPC interface for agent-server communication | `pipeline` |
| `shared/**` | code shared for all three main tools (go help utils) | only std and external libs | | `shared/**` | code shared for all three main tools (go help utils) | only std and external libs |
| `woodpecker-go/**` | go client for server rest api | std | | `woodpecker-go/**` | go client for server rest api | std |
### Server ### Server
| package | meaning | imports | | package | meaning | imports |
| -------------------- | ----------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | -------------------- | ------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `server/api/**` | handle web requests from `server/router` | `pipeline`, `../badges`, `../ccmenu`, `../logging`, `../model`, `../pubsub`, `../queue`, `../forge`, `../shared`, `../store`, `shared`, (TODO: mv `server/router/middleware/session`) | | `server/api/**` | handle web requests from `server/router` | `pipeline`, `rpc`, `../badges`, `../ccmenu`, `../logging`, `../model`, `../pubsub`, `../queue`, `../forge`, `../shared`, `../store`, `shared`, (TODO: mv `server/router/middleware/session`) |
| `server/badges/**` | generate svg badges for pipelines | `../model` | | `server/badges/**` | generate svg badges for pipelines | `../model` |
| `server/ccmenu/**` | generate xml ccmenu for pipelines | `../model` | | `server/ccmenu/**` | generate xml ccmenu for pipelines | `../model` |
| `server/grpc/**` | gRPC server agents can connect to | `pipeline/rpc/**`, `../logging`, `../model`, `../pubsub`, `../queue`, `../forge`, `../pipeline`, `../store` | | `server/rpc/**` | gRPC server agents can connect to | `rpc`, `../logging`, `../model`, `../pubsub`, `../queue`, `../forge`, `../pipeline`, `../store` |
| `server/logging/**` | logging lib for gPRC server to stream logs while running | std | | `server/logging/**` | logging lib for gPRC server to stream logs while running | std |
| `server/model/**` | structs for store (db) and api (json) | std | | `server/model/**` | structs for store (db) and api (json) | std |
| `server/plugins/**` | plugins for server | `../model`, `../forge` | | `server/pipeline/**` | orchestrate pipelines (TODO: parts of it should move into /pipeline) | `pipeline`, `../model`, `../pubsub`, `../queue`, `../forge`, `../store`, `../plugins` |
| `server/pipeline/**` | orchestrate pipelines | `pipeline`, `../model`, `../pubsub`, `../queue`, `../forge`, `../store`, `../plugins` | | `server/pubsub/**` | pubsub lib for server to push changes to the WebUI | std |
| `server/pubsub/**` | pubsub lib for server to push changes to the WebUI | std | | `server/queue/**` | queue lib for server where agents pull new pipelines from via gRPC | `server/model` |
| `server/queue/**` | queue lib for server where agents pull new pipelines from via gRPC | `server/model` | | `server/forge/**` | forge lib for server to connect and handle forge specific stuff | `shared`, `server/model` |
| `server/forge/**` | forge lib for server to connect and handle forge specific stuff | `shared`, `server/model` | | `server/router/**` | handle requests to REST API (and all middleware) and serve UI and WebUI config | `shared`, `../api`, `../model`, `../forge`, `../store`, `../web` |
| `server/router/**` | handle requests to REST API (and all middleware) and serve UI and WebUI config | `shared`, `../api`, `../model`, `../forge`, `../store`, `../web` | | `server/store/**` | handle database | `server/model` |
| `server/store/**` | handle database | `server/model` | | `server/web/**` | server SPA | |
| `server/shared/**` | TODO: move and split [#974](https://github.com/woodpecker-ci/woodpecker/issues/974) | |
| `server/web/**` | server SPA | |
- `../` = `server/` - `../` = `server/`
### Agent ### Agent
TODO | package | meaning | imports |
| -------------- | ---------------------------------------------------- | ------------------------------------------------------ |
| `agent/**` | agent implementation that runs workflows | `pipeline`, `rpc`, `shared` |
| `agent/rpc/**` | gRPC client for agent-server communication | `rpc`, `pipeline/backend/types`, std and external libs |
| `cmd/agent/**` | CLI interface for starting and configuring the agent | `agent`, std and external libs |
The agent is a remote worker that connects to the server via gRPC to receive pipeline execution instructions and report back execution state and logs.
The agent polls the server's queue for new work, executes pipeline steps using the pipeline engine, and streams results back to the server.
TODO: Review cmd/agent/core to determine if any logic should be moved into the agent package for better separation of concerns.
### CLI ### CLI
TODO | package | meaning | imports |
| ------------------------ | ----------------------------------------------------------------------- | -------------------------------------------------------------------------------- |
| `cli/admin/**` | admin commands for server management (users, secrets, registries, etc.) | `../common`, `../internal`, `woodpecker-go` |
| `cli/common/**` | shared utilities and helpers used across all CLI subcommands | `../internal/config`, `../update`, `shared` |
| `cli/context/**` | manage multiple server contexts (connections to different servers) | `../common`, `../internal/config`, `../output` |
| `cli/exec/**` | execute pipelines locally without server orchestration | `pipeline`, `../common`, `../lint`, `shared` |
| `cli/info/**` | display information about the current user | `../common`, `../internal` |
| `cli/internal/**` | internal utilities for HTTP client, auth, and server communication | `../internal/config`, `woodpecker-go`, `shared` |
| `cli/internal/config/**` | configuration file management (load, store, credentials) | std and external libs |
| `cli/lint/**` | validate pipeline configuration files | `pipeline/frontend/yaml`, `pipeline/frontend/yaml/linter`, `../common`, `shared` |
| `cli/org/**` | manage organization-level resources (secrets, registries) | `../common`, `../internal`, `woodpecker-go` |
| `cli/output/**` | formatting utilities for CLI output (tables, etc.) | std and external libs |
| `cli/pipeline/**` | manage pipeline operations (start, stop, approve, logs, etc.) | `../common`, `../internal`, `../output`, `woodpecker-go`, `shared` |
| `cli/repo/**` | manage repository-level resources (repos, crons, secrets, registries) | `../common`, `../internal`, `../output`, `woodpecker-go` |
| `cli/setup/**` | interactive first-time setup wizard for CLI configuration | `../internal/config` |
| `cli/update/**` | self-updater for the CLI binary | std and external libs |
| `cmd/cli/**` | CLI entry point and command structure | `cli/**` |
The CLI provides a command-line interface for interacting with Woodpecker servers.
Each subcommand is organized into its own package under `cli/<subcommand>/`.
The `cli/exec` subcommand allows local pipeline execution for testing and development by combining pipeline parsing and execution without requiring a running server or agent.
- `../` = `cli/`

View File

@@ -12,7 +12,7 @@
// See the License for the specific language governing permissions and // See the License for the specific language governing permissions and
// limitations under the License. // limitations under the License.
package log package utils
import ( import (
"bufio" "bufio"

View File

@@ -12,7 +12,7 @@
// See the License for the specific language governing permissions and // See the License for the specific language governing permissions and
// limitations under the License. // limitations under the License.
package log_test package utils_test
import ( import (
"io" "io"
@@ -23,7 +23,7 @@ import (
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"go.woodpecker-ci.org/woodpecker/v3/pipeline/log" "go.woodpecker-ci.org/woodpecker/v3/pipeline/utils"
) )
type testWriter struct { type testWriter struct {
@@ -61,7 +61,7 @@ func TestCopyLineByLine(t *testing.T) {
done := make(chan struct{}) done := make(chan struct{})
go func() { go func() {
err := log.CopyLineByLine(testWriter, r, 1024) err := utils.CopyLineByLine(testWriter, r, 1024)
assert.NoError(t, err) assert.NoError(t, err)
close(done) close(done)
}() }()
@@ -118,7 +118,7 @@ func TestCopyLineByLineSizeLimit(t *testing.T) {
go func() { go func() {
defer wg.Done() defer wg.Done()
err := log.CopyLineByLine(testWriter, r, 4) err := utils.CopyLineByLine(testWriter, r, 4)
assert.NoError(t, err) assert.NoError(t, err)
}() }()
@@ -161,7 +161,7 @@ func TestStringReader(t *testing.T) {
writes: make([]string, 0), writes: make([]string, 0),
} }
err := log.CopyLineByLine(testWriter, r, 1024) err := utils.CopyLineByLine(testWriter, r, 1024)
assert.NoError(t, err) assert.NoError(t, err)
writes := testWriter.GetWrites() writes := testWriter.GetWrites()
@@ -179,7 +179,7 @@ func TestCopyLineByLineNewlineCharacter(t *testing.T) {
done := make(chan struct{}) done := make(chan struct{})
go func() { go func() {
err := log.CopyLineByLine(testWriter, r, 4) err := utils.CopyLineByLine(testWriter, r, 4)
assert.NoError(t, err) assert.NoError(t, err)
close(done) close(done)
}() }()
@@ -243,7 +243,7 @@ func TestCopyLineByLineLongLine(t *testing.T) {
maxSize := 10 maxSize := 10
go func() { go func() {
err := log.CopyLineByLine(testWriter, r, maxSize) err := utils.CopyLineByLine(testWriter, r, maxSize)
assert.NoError(t, err) assert.NoError(t, err)
close(done) close(done)
}() }()
@@ -296,7 +296,7 @@ func TestCopyLineByLineWriteChunks(t *testing.T) {
maxSize := 8 maxSize := 8
go func() { go func() {
err := log.CopyLineByLine(testWriter, r, maxSize) err := utils.CopyLineByLine(testWriter, r, maxSize)
assert.NoError(t, err) assert.NoError(t, err)
close(done) close(done)
}() }()

View File

@@ -8,7 +8,7 @@ import (
"context" "context"
mock "github.com/stretchr/testify/mock" mock "github.com/stretchr/testify/mock"
"go.woodpecker-ci.org/woodpecker/v3/pipeline/rpc" "go.woodpecker-ci.org/woodpecker/v3/rpc"
) )
// NewMockPeer creates a new instance of MockPeer. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. // NewMockPeer creates a new instance of MockPeer. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.

View File

@@ -1238,7 +1238,7 @@ const file_woodpecker_proto_rawDesc = "" +
"\x0fUnregisterAgent\x12\f.proto.Empty\x1a\f.proto.Empty\"\x00\x12:\n" + "\x0fUnregisterAgent\x12\f.proto.Empty\x1a\f.proto.Empty\"\x00\x12:\n" +
"\fReportHealth\x12\x1a.proto.ReportHealthRequest\x1a\f.proto.Empty\"\x002C\n" + "\fReportHealth\x12\x1a.proto.ReportHealthRequest\x1a\f.proto.Empty\"\x002C\n" +
"\x0eWoodpeckerAuth\x121\n" + "\x0eWoodpeckerAuth\x121\n" +
"\x04Auth\x12\x12.proto.AuthRequest\x1a\x13.proto.AuthResponse\"\x00B7Z5go.woodpecker-ci.org/woodpecker/v3/pipeline/rpc/protob\x06proto3" "\x04Auth\x12\x12.proto.AuthRequest\x1a\x13.proto.AuthResponse\"\x00B.Z,go.woodpecker-ci.org/woodpecker/v3/rpc/protob\x06proto3"
var ( var (
file_woodpecker_proto_rawDescOnce sync.Once file_woodpecker_proto_rawDescOnce sync.Once

View File

@@ -15,7 +15,7 @@
syntax = "proto3"; syntax = "proto3";
option go_package = "go.woodpecker-ci.org/woodpecker/v3/pipeline/rpc/proto"; option go_package = "go.woodpecker-ci.org/woodpecker/v3/rpc/proto";
package proto; package proto;
// !IMPORTANT! // !IMPORTANT!

View File

@@ -20,7 +20,7 @@ import (
"fmt" "fmt"
"maps" "maps"
"go.woodpecker-ci.org/woodpecker/v3/pipeline/rpc" "go.woodpecker-ci.org/woodpecker/v3/rpc"
"go.woodpecker-ci.org/woodpecker/v3/server" "go.woodpecker-ci.org/woodpecker/v3/server"
"go.woodpecker-ci.org/woodpecker/v3/server/model" "go.woodpecker-ci.org/woodpecker/v3/server/model"
"go.woodpecker-ci.org/woodpecker/v3/server/pipeline/stepbuilder" "go.woodpecker-ci.org/woodpecker/v3/server/pipeline/stepbuilder"

View File

@@ -17,7 +17,7 @@ package pipeline
import ( import (
"go.woodpecker-ci.org/woodpecker/v3/pipeline" "go.woodpecker-ci.org/woodpecker/v3/pipeline"
"go.woodpecker-ci.org/woodpecker/v3/pipeline/rpc" "go.woodpecker-ci.org/woodpecker/v3/rpc"
"go.woodpecker-ci.org/woodpecker/v3/server/model" "go.woodpecker-ci.org/woodpecker/v3/server/model"
"go.woodpecker-ci.org/woodpecker/v3/server/store" "go.woodpecker-ci.org/woodpecker/v3/server/store"
) )

View File

@@ -22,7 +22,7 @@ import (
"github.com/stretchr/testify/mock" "github.com/stretchr/testify/mock"
"go.woodpecker-ci.org/woodpecker/v3/pipeline" "go.woodpecker-ci.org/woodpecker/v3/pipeline"
"go.woodpecker-ci.org/woodpecker/v3/pipeline/rpc" "go.woodpecker-ci.org/woodpecker/v3/rpc"
"go.woodpecker-ci.org/woodpecker/v3/server/model" "go.woodpecker-ci.org/woodpecker/v3/server/model"
"go.woodpecker-ci.org/woodpecker/v3/server/store" "go.woodpecker-ci.org/woodpecker/v3/server/store"
"go.woodpecker-ci.org/woodpecker/v3/server/store/mocks" "go.woodpecker-ci.org/woodpecker/v3/server/store/mocks"

View File

@@ -15,7 +15,7 @@
package pipeline package pipeline
import ( import (
"go.woodpecker-ci.org/woodpecker/v3/pipeline/rpc" "go.woodpecker-ci.org/woodpecker/v3/rpc"
"go.woodpecker-ci.org/woodpecker/v3/server/model" "go.woodpecker-ci.org/woodpecker/v3/server/model"
"go.woodpecker-ci.org/woodpecker/v3/server/store" "go.woodpecker-ci.org/woodpecker/v3/server/store"
) )

View File

@@ -21,7 +21,7 @@ import (
"github.com/rs/zerolog/log" "github.com/rs/zerolog/log"
"go.woodpecker-ci.org/woodpecker/v3/pipeline/rpc/proto" "go.woodpecker-ci.org/woodpecker/v3/rpc/proto"
"go.woodpecker-ci.org/woodpecker/v3/server/model" "go.woodpecker-ci.org/woodpecker/v3/server/model"
"go.woodpecker-ci.org/woodpecker/v3/server/store" "go.woodpecker-ci.org/woodpecker/v3/server/store"
"go.woodpecker-ci.org/woodpecker/v3/server/store/types" "go.woodpecker-ci.org/woodpecker/v3/server/store/types"

View File

@@ -19,7 +19,7 @@ import (
"strings" "strings"
pipelineConsts "go.woodpecker-ci.org/woodpecker/v3/pipeline" pipelineConsts "go.woodpecker-ci.org/woodpecker/v3/pipeline"
"go.woodpecker-ci.org/woodpecker/v3/pipeline/rpc" "go.woodpecker-ci.org/woodpecker/v3/rpc"
"go.woodpecker-ci.org/woodpecker/v3/server/model" "go.woodpecker-ci.org/woodpecker/v3/server/model"
"go.woodpecker-ci.org/woodpecker/v3/server/queue" "go.woodpecker-ci.org/woodpecker/v3/server/queue"
) )

View File

@@ -19,7 +19,7 @@ import (
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"go.woodpecker-ci.org/woodpecker/v3/pipeline/rpc" "go.woodpecker-ci.org/woodpecker/v3/rpc"
"go.woodpecker-ci.org/woodpecker/v3/server/model" "go.woodpecker-ci.org/woodpecker/v3/server/model"
) )

View File

@@ -29,7 +29,7 @@ import (
"github.com/rs/zerolog/log" "github.com/rs/zerolog/log"
grpcMetadata "google.golang.org/grpc/metadata" grpcMetadata "google.golang.org/grpc/metadata"
"go.woodpecker-ci.org/woodpecker/v3/pipeline/rpc" "go.woodpecker-ci.org/woodpecker/v3/rpc"
"go.woodpecker-ci.org/woodpecker/v3/server" "go.woodpecker-ci.org/woodpecker/v3/server"
"go.woodpecker-ci.org/woodpecker/v3/server/forge" "go.woodpecker-ci.org/woodpecker/v3/server/forge"
"go.woodpecker-ci.org/woodpecker/v3/server/logging" "go.woodpecker-ci.org/woodpecker/v3/server/logging"

View File

@@ -23,7 +23,7 @@ import (
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
"google.golang.org/grpc/metadata" "google.golang.org/grpc/metadata"
"go.woodpecker-ci.org/woodpecker/v3/pipeline/rpc" "go.woodpecker-ci.org/woodpecker/v3/rpc"
"go.woodpecker-ci.org/woodpecker/v3/server/model" "go.woodpecker-ci.org/woodpecker/v3/server/model"
store_mocks "go.woodpecker-ci.org/woodpecker/v3/server/store/mocks" store_mocks "go.woodpecker-ci.org/woodpecker/v3/server/store/mocks"
) )

View File

@@ -22,8 +22,8 @@ import (
prometheus_auto "github.com/prometheus/client_golang/prometheus/promauto" prometheus_auto "github.com/prometheus/client_golang/prometheus/promauto"
"github.com/rs/zerolog/log" "github.com/rs/zerolog/log"
"go.woodpecker-ci.org/woodpecker/v3/pipeline/rpc" "go.woodpecker-ci.org/woodpecker/v3/rpc"
"go.woodpecker-ci.org/woodpecker/v3/pipeline/rpc/proto" "go.woodpecker-ci.org/woodpecker/v3/rpc/proto"
"go.woodpecker-ci.org/woodpecker/v3/server/logging" "go.woodpecker-ci.org/woodpecker/v3/server/logging"
"go.woodpecker-ci.org/woodpecker/v3/server/pubsub" "go.woodpecker-ci.org/woodpecker/v3/server/pubsub"
"go.woodpecker-ci.org/woodpecker/v3/server/queue" "go.woodpecker-ci.org/woodpecker/v3/server/queue"