diff --git a/.woodpecker.yml b/.woodpecker.yml index 726847b..5c7ab0f 100644 --- a/.woodpecker.yml +++ b/.woodpecker.yml @@ -1,6 +1,10 @@ # Woodpecker CI pipeline for Stonks Oracle # Translates .github/workflows/build.yml into Woodpecker native format # Images push to registry.celestium.life/stonks-oracle/: 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: lint-python: @@ -9,6 +13,15 @@ steps: - pip install ruff==0.15.10 --quiet - ruff --version - ruff check --output-format=concise . + backend_options: + kubernetes: + resources: + requests: + memory: 256Mi + cpu: 200m + limits: + memory: 512Mi + cpu: 1000m when: event: [push, pull_request] @@ -18,6 +31,15 @@ steps: - pip install -r requirements.txt --quiet - pip install hypothesis --quiet - pytest tests/ -x --tb=short -q --ignore=tests/integration + backend_options: + kubernetes: + resources: + requests: + memory: 512Mi + cpu: 500m + limits: + memory: 1Gi + cpu: 2000m when: event: [push, pull_request] @@ -27,6 +49,15 @@ steps: - cd frontend - npm ci - npx vitest --run + backend_options: + kubernetes: + resources: + requests: + memory: 512Mi + cpu: 500m + limits: + memory: 1Gi + cpu: 2000m when: event: [push, pull_request] @@ -60,6 +91,15 @@ steps: - latest dockerfile: docker/Dockerfile.scheduler context: . + backend_options: + kubernetes: + resources: + requests: + memory: 1Gi + cpu: 1000m + limits: + memory: 2Gi + cpu: 4000m when: event: push branch: main @@ -99,6 +139,15 @@ steps: dockerfile: docker/Dockerfile context: . 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: event: push branch: main @@ -138,6 +187,15 @@ steps: dockerfile: docker/Dockerfile context: . build_args: "SERVICE_CMD=python -m services.ingestion.worker" + backend_options: + kubernetes: + resources: + requests: + memory: 1Gi + cpu: 1000m + limits: + memory: 2Gi + cpu: 4000m when: event: push branch: main @@ -177,6 +235,15 @@ steps: dockerfile: docker/Dockerfile context: . build_args: "SERVICE_CMD=python -m services.parser.worker" + backend_options: + kubernetes: + resources: + requests: + memory: 1Gi + cpu: 1000m + limits: + memory: 2Gi + cpu: 4000m when: event: push branch: main @@ -216,6 +283,15 @@ steps: dockerfile: docker/Dockerfile context: . build_args: "SERVICE_CMD=python -m services.extractor.worker" + backend_options: + kubernetes: + resources: + requests: + memory: 1Gi + cpu: 1000m + limits: + memory: 2Gi + cpu: 4000m when: event: push branch: main @@ -255,6 +331,15 @@ steps: dockerfile: docker/Dockerfile context: . build_args: "SERVICE_CMD=python -m services.aggregation.worker" + backend_options: + kubernetes: + resources: + requests: + memory: 1Gi + cpu: 1000m + limits: + memory: 2Gi + cpu: 4000m when: event: push branch: main @@ -294,6 +379,15 @@ steps: dockerfile: docker/Dockerfile context: . build_args: "SERVICE_CMD=python -m services.recommendation.worker" + backend_options: + kubernetes: + resources: + requests: + memory: 1Gi + cpu: 1000m + limits: + memory: 2Gi + cpu: 4000m when: event: push branch: main @@ -333,6 +427,15 @@ steps: dockerfile: docker/Dockerfile context: . 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: event: push branch: main @@ -372,6 +475,15 @@ steps: dockerfile: docker/Dockerfile context: . 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: event: push branch: main @@ -411,6 +523,15 @@ steps: dockerfile: docker/Dockerfile context: . 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: event: push branch: main @@ -450,6 +571,15 @@ steps: dockerfile: docker/Dockerfile context: . 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: event: push branch: main @@ -489,6 +619,15 @@ steps: dockerfile: docker/Dockerfile context: . 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: event: push branch: main @@ -528,7 +667,15 @@ steps: dockerfile: frontend/Dockerfile context: frontend no_cache: true - + backend_options: + kubernetes: + resources: + requests: + memory: 1Gi + cpu: 1000m + limits: + memory: 2Gi + cpu: 4000m when: event: push branch: main @@ -567,6 +714,15 @@ steps: - latest dockerfile: docker/Dockerfile.superset context: docker + backend_options: + kubernetes: + resources: + requests: + memory: 1Gi + cpu: 1000m + limits: + memory: 2Gi + cpu: 4000m when: event: push branch: main @@ -584,6 +740,15 @@ steps: from_secret: docker_password commands: - 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: event: push branch: main