Resolve all BLOCKER/CRITICAL/WARNING findings from the m11p7/p8 review: - tidalctl restore: safe_join path-traversal/Zip-Slip guard + fsync on write - corrupt-WAL checkpoint_seq guard; PITR archive-before-delete - cluster: x-tidal-relayed audit-dedup marker; forward_failures counts 5xx - mTLS/HTTP-TLS handshake hardening; accept-loop EMFILE backoff - per-principal rate-limit + node-token marker-pinning tests - self-heal tier-3 coverage; 5 router-auth tests tidal-stress: measurement-fidelity fixes (schedule-lag p99/max, exact feed-over-SLO verdict, shed annotation) + typed Body, workload.next 184ns->68ns, RoundRobin len==1 short-circuit, HeaderValue cache; new benches/hotpath.rs + lib.rs. perf wave 2: signal_snapshot SmallVec/SignalKey carrier; one-get-per-type ranking pre-pass.
45 lines
2.1 KiB
YAML
45 lines
2.1 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: .
|
|
# Tag by immutable identity only: `latest` plus the commit SHA (the durable
|
|
# handle). A per-milestone literal tag drifts every milestone and lies about
|
|
# the image's vintage (a hand-edited `m8p10` once tagged m11 code) — the SHA
|
|
# never goes stale and the version-skew machinery keys off the binary's
|
|
# CARGO_PKG_VERSION/BUILD_HASH, not the image tag.
|
|
tags:
|
|
- latest
|
|
- ${CI_COMMIT_SHA}
|
|
registry: registry.threesix.ai
|
|
build_args:
|
|
- TARGETPLATFORM=linux/amd64
|
|
extra_args: --customPlatform=linux/amd64
|