2021-12-21 09:52:10 +00:00
# Architecture
## Package architecture
![Woodpecker architecture ](./woodpecker-architecture.png )
## System architecture
2022-10-15 18:25:55 +00:00
### main package hierarchy
2022-06-16 13:35:58 +00:00
| package | meaning | imports
|------------|--------------------------------------------------------------|----------
2022-10-15 18:25:55 +00:00
| `cmd/**` | parse command-line args & environment to stat server/cli/agent | all other
2022-06-16 13:35:58 +00:00
| `agent/**` | code only agent (remote worker) will need | `pipeline` , `shared`
| `cli/**` | code only cli tool does need | `pipeline` , `shared` , `woodpecker-go`
| `server/**` | code only server will need | `pipeline` , `shared`
| `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
### Server
| package | meaning | imports
|---------------------|-------------------------------------------------|----------
| `server/api/**` | handle web requests from `server/router` | `pipeline` , `../badges` , `../ccmenue` , `../logging` , `../model` , `../pubsub` , `../queue` , `../remote` , `../shared` , `../store` , `shared` , (TODO: mv `server/router/middleware/session` )
| `server/badges/**` | generate svg badges 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` , `../remote` , `../pipeline` , `../store`
| `server/logging/**` | logging lib for gPRC server to stream logs while running | std
| `server/model/**` | structs for store (db) and api (json) | std
| `server/plugins/**` | plugins for server | `../model` , `../remote`
2022-10-15 18:25:55 +00:00
| `server/pipeline/**` | orchestrate pipelines | `pipeline` , `../model` , `../pubsub` , `../queue` , `../remote` , `../store` , `../plugins`
2022-06-16 13:35:58 +00:00
| `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/remote/**` | remote 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` , `../remote` , `../store` , `../web`
| `server/store/**` | handle database | `server/model`
| `server/shared/**` | TODO: move and split [#974 ](https://github.com/woodpecker-ci/woodpecker/issues/974 ) |
| `server/web/**` | server SPA |
* `../` = `server/`
### Agent
TODO
### CLI
2021-12-21 09:52:10 +00:00
TODO