tidaldb/.woodpecker.yaml
jx12n d5d1e7d81a feat(m11): observability+ops (m11p8) + perf-sweep wave 2 T2
m11p8 closes G-O + §1.4-3:
- Cluster metrics: breaker state, forwards, self-heal on /metrics; multi-shard sibling render (shard="N")
- Grafana cluster row + 8-rule Prometheus alert group
- Request-id / TraceLayer on both cluster routers; id rides forward hop
- Truthful status: flushed leader applied_events frontier; post-promote ShardId(0) keying fix
- Self-driving heal: tick_self_heal re-arms stuck-peer backlog every ~3s
- WAL PITR: wal.archive_dir, archive-before-delete gap-free
- tidalctl backup/restore with BLAKE3 content-hash verification
- Rolling-upgrade build_version handshake (N/N+1, never rejects) + Woodpecker release gate

perf-sweep wave 2 T2: one-get-per-type pre-pass in ranking executor
- signal_values.rs pre-fetches all signal kinds before scoring loop
- Eliminates per-item repeated DashMap lookups: −18.8% for_you, −31% under writes
- Byte-identical output verified with A/B test harness
2026-06-13 09:17:49 -06:00

41 lines
1.8 KiB
YAML

# Pipeline: a rolling-upgrade RELEASE GATE (m11p8) runs FIRST; only if it passes
# does Kaniko build the tidal-server image and push it to the in-cluster zot
# registry. DEPLOYMENT IS MANUAL (kustomize, from the orchard9-k3sf ops repo) —
# the old auto-`kubectl set image deployment/tidaldb` step was removed because it
# coupled every image build to a standalone roll and the cluster ops repo's
# contract is "manual deploy via scripts, no CI/CD deploy". The same
# `tidal-server` binary serves every subcommand (standalone AND multi-process
# `cluster --region`), so one image covers both deployments.
when:
branch: main
event: push
steps:
# m11p8 release gate: prove a rolling upgrade under load loses no acknowledged
# write and never stalls (mp_rolling_upgrade_no_loss_no_stall — a tier-3 test
# spawning three real OS processes with a graceful SIGTERM → version-tagged
# restart → heal-until-converged → fixpoint cycle). Serial (--test-threads 1):
# the harness binds fixed ports and spawns real processes, so suites must not
# overlap. A failure here BLOCKS the image build below — the gate, not the start.
rolling-upgrade-gate:
image: rust:1-bookworm
commands:
- apt-get update && apt-get install -y --no-install-recommends protobuf-compiler cmake clang
- cargo test -p tidal-server --features cluster-e2e --test cluster_lifecycle
mp_rolling_upgrade_no_loss_no_stall -- --nocapture --test-threads 1
build:
image: woodpeckerci/plugin-kaniko
settings:
repo: tidal/server
dockerfile: docker/standalone/Dockerfile
context: .
tags:
- latest
- m8p10
- ${CI_COMMIT_SHA}
registry: registry.threesix.ai
build_args:
- TARGETPLATFORM=linux/amd64
extra_args: --customPlatform=linux/amd64