Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ jobs:
GPG_SIGNING_KEY: ${{ secrets.GPG_SIGNING_KEY }}
GPG_PASS: ${{secrets.GPG_PASS}}
CGO_ENABLED: 0
GOEXPERIMENT: greenteagc
LDFLAGS: >-
-s
-X github.com/roadrunner-server/roadrunner/v2025/internal/meta.version=${{ steps.values.outputs.version }}
Expand Down
38 changes: 0 additions & 38 deletions .github/workflows/schema.yaml

This file was deleted.

45 changes: 43 additions & 2 deletions .rr.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -932,6 +932,18 @@ http:
# Default: 128
max_concurrent_streams: 128

# HTTP/3 settings (experimental). Enable QUIC + HTTP/3 on a separate (optional) address.
# Provide key+cert here if ACME is not configured (same as for the TLS section above).
http3:
# Host and port to listen on for HTTP/3.
#
# Default: disabled (section absent)
address: 127.0.0.1:8443
# Path to the certificate (must be provided together with the key if section enabled).
# cert: "/ssl/cert.crt"
# Path to the private key.
# key: "/ssl/key.pem"

# Redis section.
redis:
# UniversalClient is an abstract client which - based on the provided options -
Expand Down Expand Up @@ -964,6 +976,15 @@ redis:
idle_check_freq: 0s # accepted values [1s, 5m, 3h]
read_only: false

# Optional TLS configuration for Redis (leave section absent to disable TLS).
# tls:
# # Path to the CA certificate (required if section enabled).
# root_ca: "/ssl/ca.crt"
# # (Optional) Client certificate + key if mTLS required.
# # cert: "/ssl/cert.crt"
# # key: "/ssl/key.pem"
# # client_auth_type: no_client_certs

# Application metrics in Prometheus format (docs: https://roadrunner.dev/docs/plugins-metrics/2.x/en). Drop this section
# for this feature disabling.
metrics:
Expand Down Expand Up @@ -1005,6 +1026,12 @@ status:
# Default: 503
unavailable_status_code: 503

# Maximum duration (in seconds) to wait for a complete response from the queried plugin(s).
# If the plugin does not respond within this time RR returns `unavailable_status_code`.
#
# Default: 60
check_timeout: 60

# Automatically detect PHP file changes and reload connected services
# (docs: https://roadrunner.dev/docs/plugins-reload/2.x/en). Drop this section for this feature disabling.
reload:
Expand Down Expand Up @@ -1671,6 +1698,10 @@ jobs:
# Optional, default is chosen in the order preferred based on broker support. Possible values: gzip, snappy, lz4, zstd.
compression_codec: gzip

# Partitioning strategy to use. Possible values: Manual, Uniform, RoundRobin, LeastBackup, Sticky.
# Default (if omitted): Uniform
partitioning_strategy: Uniform

# Kafka Consumer options. Needed to consume messages from the Kafka cluster.
#
# Optional, needed only if `consume` is used.
Expand Down Expand Up @@ -1765,6 +1796,16 @@ jobs:
# Optional, default: false.
block_rebalance_on_poll: true

# InstanceID switches the group member from dynamic to static membership.
# Optional.
# instance_id: rr-instance-1

# SASL options specific for this pipeline (optional). If omitted, global driver SASL settings are used.
sasl_options:
mechanism: plain
username: foo
password: bar

# list of pipelines to be consumed by the server automatically at the start, keep empty if you want to start consuming manually
consume:
[
Expand Down Expand Up @@ -2067,8 +2108,8 @@ centrifuge:

# gRPC server API address (docs: https://centrifugal.dev/docs/server/server_api#grpc-api)
#
# Optional, default: tcp://127.0.0.1:30000. Centrifugo: `grpc_api` should be set to true and `grpc_port` should be the same as in the RR's config.
grpc_api_address: tcp://127.0.0.1:30000
# Optional, default: tcp://127.0.0.1:10000. Centrifugo: `grpc_api` should be set to true and `grpc_port` should match this value.
grpc_api_address: tcp://127.0.0.1:10000

# Use gRPC gzip compressor
#
Expand Down
38 changes: 38 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
# Repository Guidelines

This guide helps contributors work efficiently on the RoadRunner core (Go) CLI and runtime.

## Project Structure & Module Organization
- `cmd/rr/`: CLI entrypoint (`main.go`) and basic CLI tests.
- `internal/`: CLI commands, debug helpers, metadata, RPC, service wiring.
- `lib/`: Public Go API to embed and control RoadRunner (`RR` type).
- `schemas/`: YAML schemas and config examples; `.rr.yaml` at repo root.
- `benchmarks/`, `container/`: Performance samples and container settings.
- Tests live alongside code as `*_test.go` files.

## Build, Test, and Development Commands
- `make build` — build the `rr` binary to `./rr`.
- `make test` — run `go test -v -race ./...` across modules.
- `./rr serve -c .rr.yaml` — run locally with the sample config.
- `dlv debug cmd/rr/main.go -- serve -c .rr-sample-bench-http.yaml` — debug run (needs Delve).
- `golangci-lint run` — lint/format per `.golangci.yml` (install locally).

## Coding Style & Naming Conventions
- Go 1.x standards: `gofmt`/`goimports`; tabs; 120‑char lines (see linter config).
- Package names: short, lower‑case; exported identifiers use Go’s `UpperCamelCase`.
- Errors: wrap with `%w`; prefer sentinel/typed errors; no panics in library code.
- Keep functions small; avoid globals (see `gochecknoglobals`); prefer context‑aware APIs.

## Testing Guidelines
- Use table‑driven tests; place in `*_test.go`. Call `t.Parallel()` where safe.
- Run with race detector and coverage: `go test -race -cover ./...`.
- Add tests for new CLI flags, config parsing, and plugin wiring. Keep fixtures minimal.

## Commit & Pull Request Guidelines
- Conventional commits: `feat:`, `fix:`, `chore:`, `docs:`, `refactor:`, `test:`, `ci:`.
- PRs must include: clear description, linked issues, test updates, and config/schema changes if applicable.
- Ensure `make test` and `golangci-lint run` pass; include usage examples for CLI‑related changes.

## Security & Configuration Tips
- Never commit secrets; prefer `.env` loaded via `DOTENV_PATH` or `--dotenv`.
- Debug server (`-d`) listens on `:6061`; avoid exposing in production.
3 changes: 3 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@ ENV LDFLAGS="-s \
-X github.com/roadrunner-server/roadrunner/v2025/internal/meta.version=$APP_VERSION \
-X github.com/roadrunner-server/roadrunner/v2025/internal/meta.buildTime=$BUILD_TIME"

# enable Go greentea GC experiment during build
ENV GOEXPERIMENT=greenteagc

# compile binary file
RUN set -x
RUN go mod download
Expand Down
101 changes: 49 additions & 52 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -10,49 +10,49 @@ require (
github.com/fatih/color v1.18.0
github.com/joho/godotenv v1.5.1
github.com/olekukonko/tablewriter v1.0.9
github.com/roadrunner-server/amqp/v5 v5.2.2
github.com/roadrunner-server/amqp/v5 v5.2.3
github.com/roadrunner-server/api/v4 v4.22.1
github.com/roadrunner-server/app-logger/v5 v5.1.8
github.com/roadrunner-server/beanstalk/v5 v5.1.8
github.com/roadrunner-server/boltdb/v5 v5.1.8
github.com/roadrunner-server/centrifuge/v5 v5.1.8
github.com/roadrunner-server/config/v5 v5.1.8
github.com/roadrunner-server/app-logger/v5 v5.1.9
github.com/roadrunner-server/beanstalk/v5 v5.1.9
github.com/roadrunner-server/boltdb/v5 v5.1.9
github.com/roadrunner-server/centrifuge/v5 v5.1.9
github.com/roadrunner-server/config/v5 v5.1.9
github.com/roadrunner-server/endure/v2 v2.6.2
github.com/roadrunner-server/errors v1.4.1
github.com/roadrunner-server/google-pub-sub/v5 v5.1.8
github.com/roadrunner-server/google-pub-sub/v5 v5.1.9
github.com/roadrunner-server/goridge/v3 v3.8.3
github.com/roadrunner-server/grpc/v5 v5.2.2
github.com/roadrunner-server/gzip/v5 v5.1.8
github.com/roadrunner-server/headers/v5 v5.1.8
github.com/roadrunner-server/http/v5 v5.2.7
github.com/roadrunner-server/informer/v5 v5.1.8
github.com/roadrunner-server/jobs/v5 v5.1.8
github.com/roadrunner-server/kafka/v5 v5.2.4
github.com/roadrunner-server/kv/v5 v5.2.8
github.com/roadrunner-server/lock/v5 v5.1.8
github.com/roadrunner-server/logger/v5 v5.1.8
github.com/roadrunner-server/memcached/v5 v5.1.8
github.com/roadrunner-server/memory/v5 v5.2.8
github.com/roadrunner-server/metrics/v5 v5.1.8
github.com/roadrunner-server/nats/v5 v5.1.8
github.com/roadrunner-server/otel/v5 v5.3.0
github.com/roadrunner-server/grpc/v5 v5.2.3
github.com/roadrunner-server/gzip/v5 v5.1.9
github.com/roadrunner-server/headers/v5 v5.1.9
github.com/roadrunner-server/http/v5 v5.2.8
github.com/roadrunner-server/informer/v5 v5.1.9
github.com/roadrunner-server/jobs/v5 v5.1.9
github.com/roadrunner-server/kafka/v5 v5.2.5
github.com/roadrunner-server/kv/v5 v5.2.9
github.com/roadrunner-server/lock/v5 v5.1.9
github.com/roadrunner-server/logger/v5 v5.1.9
github.com/roadrunner-server/memcached/v5 v5.1.9
github.com/roadrunner-server/memory/v5 v5.2.9
github.com/roadrunner-server/metrics/v5 v5.1.9
github.com/roadrunner-server/nats/v5 v5.1.9
github.com/roadrunner-server/otel/v5 v5.3.1
github.com/roadrunner-server/pool v1.1.3
github.com/roadrunner-server/prometheus/v5 v5.1.7
github.com/roadrunner-server/proxy_ip_parser/v5 v5.1.8
github.com/roadrunner-server/redis/v5 v5.1.9
github.com/roadrunner-server/resetter/v5 v5.1.8
github.com/roadrunner-server/rpc/v5 v5.1.8
github.com/roadrunner-server/send/v5 v5.1.5
github.com/roadrunner-server/server/v5 v5.2.9
github.com/roadrunner-server/service/v5 v5.1.8
github.com/roadrunner-server/sqs/v5 v5.1.8
github.com/roadrunner-server/static/v5 v5.1.6
github.com/roadrunner-server/status/v5 v5.1.8
github.com/roadrunner-server/tcp/v5 v5.1.8
github.com/roadrunner-server/prometheus/v5 v5.1.8
github.com/roadrunner-server/proxy_ip_parser/v5 v5.1.9
github.com/roadrunner-server/redis/v5 v5.1.10
github.com/roadrunner-server/resetter/v5 v5.1.9
github.com/roadrunner-server/rpc/v5 v5.1.9
github.com/roadrunner-server/send/v5 v5.1.6
github.com/roadrunner-server/server/v5 v5.2.10
github.com/roadrunner-server/service/v5 v5.1.9
github.com/roadrunner-server/sqs/v5 v5.1.9
github.com/roadrunner-server/static/v5 v5.1.7
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Remove static plugin from root require to truly exclude it (and avoid pulling Fiber with CVEs).

PR description says the Fileserver plugin is excluded from the standard bundle. Keeping github.com/roadrunner-server/static/v5 in root require still fetches/transitively pins its deps (incl. GoFiber), triggering scanners and supply-chain surface.

-	github.com/roadrunner-server/static/v5 v5.1.7

If Velox builds need it, document adding it in a Velox-specific go.mod or via replace in that build context.

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
github.com/roadrunner-server/static/v5 v5.1.7
🤖 Prompt for AI Agents
In go.mod around line 49, the project still lists
"github.com/roadrunner-server/static/v5 v5.1.7" in the root require which keeps
its transitive deps (including GoFiber) in the module graph; remove that require
from the root go.mod to truly exclude the static/fileserver plugin and then run
go mod tidy to prune unused transitive dependencies. If Velox builds need the
plugin, instead add the static module to a Velox-specific go.mod or introduce a
build-context replace/add in that build's module file and document the change so
scanners and supply-chain tooling no longer see Fiber in the main module.

github.com/roadrunner-server/status/v5 v5.1.9
github.com/roadrunner-server/tcp/v5 v5.1.9
github.com/spf13/cobra v1.10.1
github.com/spf13/viper v1.21.0
github.com/stretchr/testify v1.11.1
github.com/temporalio/roadrunner-temporal/v5 v5.8.0
github.com/temporalio/roadrunner-temporal/v5 v5.9.0
go.uber.org/automaxprocs v1.6.0
)

Expand All @@ -68,22 +68,20 @@ require (
cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect
cloud.google.com/go/compute/metadata v0.8.0 // indirect
cloud.google.com/go/iam v1.5.2 // indirect
cloud.google.com/go/pubsub v1.50.1 // indirect
cloud.google.com/go/pubsub/v2 v2.0.0 // indirect
github.com/aws/aws-sdk-go v1.55.8 // indirect
github.com/aws/aws-sdk-go-v2 v1.39.0 // indirect
github.com/aws/aws-sdk-go-v2/config v1.31.7 // indirect
github.com/aws/aws-sdk-go-v2/credentials v1.18.11 // indirect
github.com/aws/aws-sdk-go-v2/config v1.31.8 // indirect
github.com/aws/aws-sdk-go-v2/credentials v1.18.12 // indirect
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.7 // indirect
github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.7 // indirect
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.7 // indirect
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3 // indirect
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.1 // indirect
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.7 // indirect
github.com/aws/aws-sdk-go-v2/service/sqs v1.42.4 // indirect
github.com/aws/aws-sdk-go-v2/service/sso v1.29.2 // indirect
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.34.3 // indirect
github.com/aws/aws-sdk-go-v2/service/sts v1.38.3 // indirect
github.com/aws/aws-sdk-go-v2/service/sqs v1.42.5 // indirect
github.com/aws/aws-sdk-go-v2/service/sso v1.29.3 // indirect
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.34.4 // indirect
github.com/aws/aws-sdk-go-v2/service/sts v1.38.4 // indirect
github.com/aws/smithy-go v1.23.0 // indirect
github.com/beanstalkd/go-beanstalk v0.2.0 // indirect
github.com/beorn7/perks v1.0.1 // indirect
Expand Down Expand Up @@ -114,7 +112,6 @@ require (
github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.3.2 // indirect
github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.2 // indirect
github.com/inconshreveable/mousetrap v1.1.0 // indirect
github.com/jmespath/go-jmespath v0.4.0 // indirect
github.com/klauspost/compress v1.18.0 // indirect
github.com/klauspost/cpuid/v2 v2.3.0 // indirect
github.com/libdns/libdns v1.1.1 // indirect
Expand All @@ -129,7 +126,7 @@ require (
github.com/nats-io/nkeys v0.4.11 // indirect
github.com/nats-io/nuid v1.0.1 // indirect
github.com/nexus-rpc/sdk-go v0.4.0 // indirect
github.com/olekukonko/cat v0.0.0-20250908003013-b0de306c343b // indirect
github.com/olekukonko/cat v0.0.0-20250911104152-50322a0618f6 // indirect
github.com/olekukonko/errors v1.1.0 // indirect
github.com/olekukonko/ll v0.1.1 // indirect
github.com/openzipkin/zipkin-go v0.4.3 // indirect
Expand All @@ -144,14 +141,14 @@ require (
github.com/quic-go/qpack v0.5.1 // indirect
github.com/quic-go/quic-go v0.54.0 // indirect
github.com/rabbitmq/amqp091-go v1.10.0 // indirect
github.com/redis/go-redis/extra/rediscmd/v9 v9.13.0 // indirect
github.com/redis/go-redis/extra/redisotel/v9 v9.13.0 // indirect
github.com/redis/go-redis/extra/redisprometheus/v9 v9.13.0 // indirect
github.com/redis/go-redis/v9 v9.13.0 // indirect
github.com/redis/go-redis/extra/rediscmd/v9 v9.14.0 // indirect
github.com/redis/go-redis/extra/redisotel/v9 v9.14.0 // indirect
github.com/redis/go-redis/extra/redisprometheus/v9 v9.14.0 // indirect
github.com/redis/go-redis/v9 v9.14.0 // indirect
github.com/rivo/uniseg v0.4.7 // indirect
github.com/roadrunner-server/context v1.1.0 // indirect
github.com/roadrunner-server/events v1.0.1 // indirect
github.com/roadrunner-server/priority_queue v1.0.5 // indirect
github.com/roadrunner-server/priority_queue v1.0.6 // indirect
github.com/roadrunner-server/tcplisten v1.5.2 // indirect
github.com/robfig/cron v1.2.0 // indirect
github.com/rs/cors v1.11.1 // indirect
Expand Down Expand Up @@ -201,7 +198,7 @@ require (
go.uber.org/multierr v1.11.0 // indirect
go.uber.org/zap v1.27.0 // indirect
go.uber.org/zap/exp v0.3.0 // indirect
go.yaml.in/yaml/v2 v2.4.2 // indirect
go.yaml.in/yaml/v2 v2.4.3 // indirect
go.yaml.in/yaml/v3 v3.0.4 // indirect
golang.org/x/crypto v0.42.0 // indirect
Comment on lines +201 to 203
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Fix invalid YAML module paths and dedupe v3 entry.

go.yaml.in/yaml/{v2,v3} are not valid module paths; canonical is gopkg.in/yaml.{v2,v3}. You also have two v3 entries (one wrong, one correct at Line 219). This will break go mod download and confuse SCA.

Apply:

-	go.yaml.in/yaml/v2 v2.4.3 // indirect
-	go.yaml.in/yaml/v3 v3.0.4 // indirect
+	gopkg.in/yaml.v2 v2.4.0 // indirect

Then run go mod tidy to reconcile the single gopkg.in/yaml.v3 entry (Line 219) and pin to the solver’s chosen version.

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
go.yaml.in/yaml/v2 v2.4.3 // indirect
go.yaml.in/yaml/v3 v3.0.4 // indirect
golang.org/x/crypto v0.42.0 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
golang.org/x/crypto v0.42.0 // indirect
🤖 Prompt for AI Agents
In go.mod around lines 201 to 203, the module paths use the invalid prefix
"go.yaml.in" and you also have a duplicate v3 entry; replace "go.yaml.in/yaml/v2
v2.4.3" with the canonical "gopkg.in/yaml.v2 v2.4.3" (if you need v2), and
remove the incorrect "go.yaml.in/yaml/v3" line so only the correct
"gopkg.in/yaml.v3" entry remains (keep the solver-chosen version at Line 219),
then run "go mod tidy" to reconcile and pin the single gopkg.in/yaml.v3
dependency.

golang.org/x/mod v0.28.0 // indirect
Expand All @@ -211,7 +208,7 @@ require (
golang.org/x/sys v0.36.0 // indirect
golang.org/x/text v0.29.0 // indirect
golang.org/x/time v0.13.0 // indirect
golang.org/x/tools v0.36.0 // indirect
golang.org/x/tools v0.37.0 // indirect
google.golang.org/api v0.249.0 // indirect
google.golang.org/genproto v0.0.0-20250908214217-97024824d090 // indirect
google.golang.org/genproto/googleapis/api v0.0.0-20250908214217-97024824d090 // indirect
Expand Down
Loading
Loading