fix: add resource requests and scheduling docs to woodpecker pipeline
- Add backend_options.kubernetes.resources to all build/test steps - Helps scheduler spread pods across cluster nodes (works with agent-level WOODPECKER_BACKEND_K8S_POD_AFFINITY anti-affinity) - Build steps: 1Gi/1000m requests, 2Gi/4000m limits - Test steps: 256-512Mi/200-500m requests
This commit is contained in:
+166
-1
@@ -1,6 +1,10 @@
|
|||||||
# Woodpecker CI pipeline for Stonks Oracle
|
# Woodpecker CI pipeline for Stonks Oracle
|
||||||
# Translates .github/workflows/build.yml into Woodpecker native format
|
# Translates .github/workflows/build.yml into Woodpecker native format
|
||||||
# Images push to registry.celestium.life/stonks-oracle/<service>:<sha> and :latest
|
# Images push to registry.celestium.life/stonks-oracle/<service>:<sha> and :latest
|
||||||
|
#
|
||||||
|
# Scheduling: Pipeline pods are spread across cluster nodes via agent-level
|
||||||
|
# podAntiAffinity (WOODPECKER_BACKEND_K8S_POD_AFFINITY). Resource requests
|
||||||
|
# below help the scheduler make balanced placement decisions.
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
lint-python:
|
lint-python:
|
||||||
@@ -9,6 +13,15 @@ steps:
|
|||||||
- pip install ruff==0.15.10 --quiet
|
- pip install ruff==0.15.10 --quiet
|
||||||
- ruff --version
|
- ruff --version
|
||||||
- ruff check --output-format=concise .
|
- ruff check --output-format=concise .
|
||||||
|
backend_options:
|
||||||
|
kubernetes:
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
memory: 256Mi
|
||||||
|
cpu: 200m
|
||||||
|
limits:
|
||||||
|
memory: 512Mi
|
||||||
|
cpu: 1000m
|
||||||
when:
|
when:
|
||||||
event: [push, pull_request]
|
event: [push, pull_request]
|
||||||
|
|
||||||
@@ -18,6 +31,15 @@ steps:
|
|||||||
- pip install -r requirements.txt --quiet
|
- pip install -r requirements.txt --quiet
|
||||||
- pip install hypothesis --quiet
|
- pip install hypothesis --quiet
|
||||||
- pytest tests/ -x --tb=short -q --ignore=tests/integration
|
- pytest tests/ -x --tb=short -q --ignore=tests/integration
|
||||||
|
backend_options:
|
||||||
|
kubernetes:
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
memory: 512Mi
|
||||||
|
cpu: 500m
|
||||||
|
limits:
|
||||||
|
memory: 1Gi
|
||||||
|
cpu: 2000m
|
||||||
when:
|
when:
|
||||||
event: [push, pull_request]
|
event: [push, pull_request]
|
||||||
|
|
||||||
@@ -27,6 +49,15 @@ steps:
|
|||||||
- cd frontend
|
- cd frontend
|
||||||
- npm ci
|
- npm ci
|
||||||
- npx vitest --run
|
- npx vitest --run
|
||||||
|
backend_options:
|
||||||
|
kubernetes:
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
memory: 512Mi
|
||||||
|
cpu: 500m
|
||||||
|
limits:
|
||||||
|
memory: 1Gi
|
||||||
|
cpu: 2000m
|
||||||
when:
|
when:
|
||||||
event: [push, pull_request]
|
event: [push, pull_request]
|
||||||
|
|
||||||
@@ -60,6 +91,15 @@ steps:
|
|||||||
- latest
|
- latest
|
||||||
dockerfile: docker/Dockerfile.scheduler
|
dockerfile: docker/Dockerfile.scheduler
|
||||||
context: .
|
context: .
|
||||||
|
backend_options:
|
||||||
|
kubernetes:
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
memory: 1Gi
|
||||||
|
cpu: 1000m
|
||||||
|
limits:
|
||||||
|
memory: 2Gi
|
||||||
|
cpu: 4000m
|
||||||
when:
|
when:
|
||||||
event: push
|
event: push
|
||||||
branch: main
|
branch: main
|
||||||
@@ -99,6 +139,15 @@ steps:
|
|||||||
dockerfile: docker/Dockerfile
|
dockerfile: docker/Dockerfile
|
||||||
context: .
|
context: .
|
||||||
build_args: "SERVICE_CMD=uvicorn services.symbol_registry.app:app --host 0.0.0.0 --port 8000"
|
build_args: "SERVICE_CMD=uvicorn services.symbol_registry.app:app --host 0.0.0.0 --port 8000"
|
||||||
|
backend_options:
|
||||||
|
kubernetes:
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
memory: 1Gi
|
||||||
|
cpu: 1000m
|
||||||
|
limits:
|
||||||
|
memory: 2Gi
|
||||||
|
cpu: 4000m
|
||||||
when:
|
when:
|
||||||
event: push
|
event: push
|
||||||
branch: main
|
branch: main
|
||||||
@@ -138,6 +187,15 @@ steps:
|
|||||||
dockerfile: docker/Dockerfile
|
dockerfile: docker/Dockerfile
|
||||||
context: .
|
context: .
|
||||||
build_args: "SERVICE_CMD=python -m services.ingestion.worker"
|
build_args: "SERVICE_CMD=python -m services.ingestion.worker"
|
||||||
|
backend_options:
|
||||||
|
kubernetes:
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
memory: 1Gi
|
||||||
|
cpu: 1000m
|
||||||
|
limits:
|
||||||
|
memory: 2Gi
|
||||||
|
cpu: 4000m
|
||||||
when:
|
when:
|
||||||
event: push
|
event: push
|
||||||
branch: main
|
branch: main
|
||||||
@@ -177,6 +235,15 @@ steps:
|
|||||||
dockerfile: docker/Dockerfile
|
dockerfile: docker/Dockerfile
|
||||||
context: .
|
context: .
|
||||||
build_args: "SERVICE_CMD=python -m services.parser.worker"
|
build_args: "SERVICE_CMD=python -m services.parser.worker"
|
||||||
|
backend_options:
|
||||||
|
kubernetes:
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
memory: 1Gi
|
||||||
|
cpu: 1000m
|
||||||
|
limits:
|
||||||
|
memory: 2Gi
|
||||||
|
cpu: 4000m
|
||||||
when:
|
when:
|
||||||
event: push
|
event: push
|
||||||
branch: main
|
branch: main
|
||||||
@@ -216,6 +283,15 @@ steps:
|
|||||||
dockerfile: docker/Dockerfile
|
dockerfile: docker/Dockerfile
|
||||||
context: .
|
context: .
|
||||||
build_args: "SERVICE_CMD=python -m services.extractor.worker"
|
build_args: "SERVICE_CMD=python -m services.extractor.worker"
|
||||||
|
backend_options:
|
||||||
|
kubernetes:
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
memory: 1Gi
|
||||||
|
cpu: 1000m
|
||||||
|
limits:
|
||||||
|
memory: 2Gi
|
||||||
|
cpu: 4000m
|
||||||
when:
|
when:
|
||||||
event: push
|
event: push
|
||||||
branch: main
|
branch: main
|
||||||
@@ -255,6 +331,15 @@ steps:
|
|||||||
dockerfile: docker/Dockerfile
|
dockerfile: docker/Dockerfile
|
||||||
context: .
|
context: .
|
||||||
build_args: "SERVICE_CMD=python -m services.aggregation.worker"
|
build_args: "SERVICE_CMD=python -m services.aggregation.worker"
|
||||||
|
backend_options:
|
||||||
|
kubernetes:
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
memory: 1Gi
|
||||||
|
cpu: 1000m
|
||||||
|
limits:
|
||||||
|
memory: 2Gi
|
||||||
|
cpu: 4000m
|
||||||
when:
|
when:
|
||||||
event: push
|
event: push
|
||||||
branch: main
|
branch: main
|
||||||
@@ -294,6 +379,15 @@ steps:
|
|||||||
dockerfile: docker/Dockerfile
|
dockerfile: docker/Dockerfile
|
||||||
context: .
|
context: .
|
||||||
build_args: "SERVICE_CMD=python -m services.recommendation.worker"
|
build_args: "SERVICE_CMD=python -m services.recommendation.worker"
|
||||||
|
backend_options:
|
||||||
|
kubernetes:
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
memory: 1Gi
|
||||||
|
cpu: 1000m
|
||||||
|
limits:
|
||||||
|
memory: 2Gi
|
||||||
|
cpu: 4000m
|
||||||
when:
|
when:
|
||||||
event: push
|
event: push
|
||||||
branch: main
|
branch: main
|
||||||
@@ -333,6 +427,15 @@ steps:
|
|||||||
dockerfile: docker/Dockerfile
|
dockerfile: docker/Dockerfile
|
||||||
context: .
|
context: .
|
||||||
build_args: "SERVICE_CMD=uvicorn services.risk.app:app --host 0.0.0.0 --port 8000"
|
build_args: "SERVICE_CMD=uvicorn services.risk.app:app --host 0.0.0.0 --port 8000"
|
||||||
|
backend_options:
|
||||||
|
kubernetes:
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
memory: 1Gi
|
||||||
|
cpu: 1000m
|
||||||
|
limits:
|
||||||
|
memory: 2Gi
|
||||||
|
cpu: 4000m
|
||||||
when:
|
when:
|
||||||
event: push
|
event: push
|
||||||
branch: main
|
branch: main
|
||||||
@@ -372,6 +475,15 @@ steps:
|
|||||||
dockerfile: docker/Dockerfile
|
dockerfile: docker/Dockerfile
|
||||||
context: .
|
context: .
|
||||||
build_args: "SERVICE_CMD=python -m services.adapters.broker_adapter"
|
build_args: "SERVICE_CMD=python -m services.adapters.broker_adapter"
|
||||||
|
backend_options:
|
||||||
|
kubernetes:
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
memory: 1Gi
|
||||||
|
cpu: 1000m
|
||||||
|
limits:
|
||||||
|
memory: 2Gi
|
||||||
|
cpu: 4000m
|
||||||
when:
|
when:
|
||||||
event: push
|
event: push
|
||||||
branch: main
|
branch: main
|
||||||
@@ -411,6 +523,15 @@ steps:
|
|||||||
dockerfile: docker/Dockerfile
|
dockerfile: docker/Dockerfile
|
||||||
context: .
|
context: .
|
||||||
build_args: "SERVICE_CMD=python -m services.lake_publisher.worker"
|
build_args: "SERVICE_CMD=python -m services.lake_publisher.worker"
|
||||||
|
backend_options:
|
||||||
|
kubernetes:
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
memory: 1Gi
|
||||||
|
cpu: 1000m
|
||||||
|
limits:
|
||||||
|
memory: 2Gi
|
||||||
|
cpu: 4000m
|
||||||
when:
|
when:
|
||||||
event: push
|
event: push
|
||||||
branch: main
|
branch: main
|
||||||
@@ -450,6 +571,15 @@ steps:
|
|||||||
dockerfile: docker/Dockerfile
|
dockerfile: docker/Dockerfile
|
||||||
context: .
|
context: .
|
||||||
build_args: "SERVICE_CMD=uvicorn services.api.app:app --host 0.0.0.0 --port 8000"
|
build_args: "SERVICE_CMD=uvicorn services.api.app:app --host 0.0.0.0 --port 8000"
|
||||||
|
backend_options:
|
||||||
|
kubernetes:
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
memory: 1Gi
|
||||||
|
cpu: 1000m
|
||||||
|
limits:
|
||||||
|
memory: 2Gi
|
||||||
|
cpu: 4000m
|
||||||
when:
|
when:
|
||||||
event: push
|
event: push
|
||||||
branch: main
|
branch: main
|
||||||
@@ -489,6 +619,15 @@ steps:
|
|||||||
dockerfile: docker/Dockerfile
|
dockerfile: docker/Dockerfile
|
||||||
context: .
|
context: .
|
||||||
build_args: "SERVICE_CMD=uvicorn services.trading.app:app --host 0.0.0.0 --port 8000"
|
build_args: "SERVICE_CMD=uvicorn services.trading.app:app --host 0.0.0.0 --port 8000"
|
||||||
|
backend_options:
|
||||||
|
kubernetes:
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
memory: 1Gi
|
||||||
|
cpu: 1000m
|
||||||
|
limits:
|
||||||
|
memory: 2Gi
|
||||||
|
cpu: 4000m
|
||||||
when:
|
when:
|
||||||
event: push
|
event: push
|
||||||
branch: main
|
branch: main
|
||||||
@@ -528,7 +667,15 @@ steps:
|
|||||||
dockerfile: frontend/Dockerfile
|
dockerfile: frontend/Dockerfile
|
||||||
context: frontend
|
context: frontend
|
||||||
no_cache: true
|
no_cache: true
|
||||||
|
backend_options:
|
||||||
|
kubernetes:
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
memory: 1Gi
|
||||||
|
cpu: 1000m
|
||||||
|
limits:
|
||||||
|
memory: 2Gi
|
||||||
|
cpu: 4000m
|
||||||
when:
|
when:
|
||||||
event: push
|
event: push
|
||||||
branch: main
|
branch: main
|
||||||
@@ -567,6 +714,15 @@ steps:
|
|||||||
- latest
|
- latest
|
||||||
dockerfile: docker/Dockerfile.superset
|
dockerfile: docker/Dockerfile.superset
|
||||||
context: docker
|
context: docker
|
||||||
|
backend_options:
|
||||||
|
kubernetes:
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
memory: 1Gi
|
||||||
|
cpu: 1000m
|
||||||
|
limits:
|
||||||
|
memory: 2Gi
|
||||||
|
cpu: 4000m
|
||||||
when:
|
when:
|
||||||
event: push
|
event: push
|
||||||
branch: main
|
branch: main
|
||||||
@@ -584,6 +740,15 @@ steps:
|
|||||||
from_secret: docker_password
|
from_secret: docker_password
|
||||||
commands:
|
commands:
|
||||||
- bash infra/inttest/run_pipeline.sh --image-tag ${CI_COMMIT_SHA} --results-file inttest-results.json
|
- bash infra/inttest/run_pipeline.sh --image-tag ${CI_COMMIT_SHA} --results-file inttest-results.json
|
||||||
|
backend_options:
|
||||||
|
kubernetes:
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
memory: 256Mi
|
||||||
|
cpu: 200m
|
||||||
|
limits:
|
||||||
|
memory: 512Mi
|
||||||
|
cpu: 1000m
|
||||||
when:
|
when:
|
||||||
event: push
|
event: push
|
||||||
branch: main
|
branch: main
|
||||||
|
|||||||
Reference in New Issue
Block a user