chore(renovate): restrict auto-runs to non-office hours#49875
Conversation
Adds the `schedule:nonOfficeHours` preset to `extends`, which evaluates to: ["after 10pm every weekday", "before 5am every weekday", "every weekend"] Renovate (Mend-hosted) currently scans at unpredictable times throughout the day, which makes the dashboard-queued rerun button unusable when the platform is backlogged. Constraining auto-runs to nights and weekends leaves the queue free during the workday for on-demand triggers and reduces mid-workday PR noise. Package-level schedules (linux-images, windows-images, integrations-core, etc.) are unaffected — they already define their own quiet windows and remain the authoritative filter for their respective deps.
|
🎯 Code Coverage (details) 🔗 Commit SHA: 2cbc7e8 | Docs | Datadog PR Page | Give us feedback! |
Files inventory check summaryFile checks results against ancestor bb70bb10: Results for datadog-agent_7.80.0~devel.git.197.2cbc7e8.pipeline.109532109-1_amd64.deb:No change detected |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 2cbc7e8d3e
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Regression DetectorRegression Detector ResultsMetrics dashboard Baseline: 0605964 Optimization Goals: ✅ No significant changes detected
|
| perf | experiment | goal | Δ mean % | Δ mean % CI | trials | links |
|---|---|---|---|---|---|---|
| ➖ | docker_containers_cpu | % cpu utilization | -1.90 | [-4.91, +1.11] | 1 | Logs |
Fine details of change detection per experiment
| perf | experiment | goal | Δ mean % | Δ mean % CI | trials | links |
|---|---|---|---|---|---|---|
| ➖ | quality_gate_logs | % cpu utilization | +3.62 | [+1.93, +5.32] | 1 | Logs bounds checks dashboard |
| ➖ | quality_gate_metrics_logs | memory utilization | +0.68 | [+0.42, +0.94] | 1 | Logs bounds checks dashboard |
| ➖ | otlp_ingest_metrics | memory utilization | +0.20 | [+0.04, +0.35] | 1 | Logs |
| ➖ | quality_gate_idle_all_features | memory utilization | +0.11 | [+0.07, +0.14] | 1 | Logs bounds checks dashboard |
| ➖ | file_to_blackhole_100ms_latency | egress throughput | +0.07 | [-0.02, +0.17] | 1 | Logs |
| ➖ | file_to_blackhole_0ms_latency | egress throughput | +0.05 | [-0.44, +0.54] | 1 | Logs |
| ➖ | uds_dogstatsd_to_api_v3 | ingress throughput | +0.02 | [-0.18, +0.22] | 1 | Logs |
| ➖ | file_to_blackhole_1000ms_latency | egress throughput | +0.01 | [-0.42, +0.44] | 1 | Logs |
| ➖ | tcp_dd_logs_filter_exclude | ingress throughput | +0.00 | [-0.10, +0.11] | 1 | Logs |
| ➖ | uds_dogstatsd_to_api | ingress throughput | -0.00 | [-0.21, +0.20] | 1 | Logs |
| ➖ | file_tree | memory utilization | -0.01 | [-0.06, +0.03] | 1 | Logs |
| ➖ | file_to_blackhole_500ms_latency | egress throughput | -0.02 | [-0.41, +0.37] | 1 | Logs |
| ➖ | ddot_metrics_sum_cumulativetodelta_exporter | memory utilization | -0.03 | [-0.27, +0.22] | 1 | Logs |
| ➖ | ddot_metrics_sum_delta | memory utilization | -0.06 | [-0.25, +0.13] | 1 | Logs |
| ➖ | tcp_syslog_to_blackhole | ingress throughput | -0.07 | [-0.24, +0.10] | 1 | Logs |
| ➖ | ddot_metrics_sum_cumulative | memory utilization | -0.16 | [-0.32, -0.00] | 1 | Logs |
| ➖ | otlp_ingest_logs | memory utilization | -0.21 | [-0.30, -0.11] | 1 | Logs |
| ➖ | uds_dogstatsd_20mb_12k_contexts_20_senders | memory utilization | -0.23 | [-0.28, -0.18] | 1 | Logs |
| ➖ | ddot_logs | memory utilization | -0.29 | [-0.35, -0.23] | 1 | Logs |
| ➖ | quality_gate_idle | memory utilization | -0.30 | [-0.35, -0.24] | 1 | Logs bounds checks dashboard |
| ➖ | ddot_metrics | memory utilization | -0.32 | [-0.52, -0.12] | 1 | Logs |
| ➖ | docker_containers_memory | memory utilization | -0.44 | [-0.54, -0.34] | 1 | Logs |
| ➖ | docker_containers_cpu | % cpu utilization | -1.90 | [-4.91, +1.11] | 1 | Logs |
Bounds Checks: ✅ Passed
| perf | experiment | bounds_check_name | replicates_passed | observed_value | links |
|---|---|---|---|---|---|
| ✅ | docker_containers_cpu | simple_check_run | 10/10 | 674 ≥ 26 | |
| ✅ | docker_containers_memory | memory_usage | 10/10 | 240.16MiB ≤ 370MiB | |
| ✅ | docker_containers_memory | simple_check_run | 10/10 | 673 ≥ 26 | |
| ✅ | file_to_blackhole_0ms_latency | memory_usage | 10/10 | 0.16GiB ≤ 1.20GiB | |
| ✅ | file_to_blackhole_0ms_latency | missed_bytes | 10/10 | 0B = 0B | |
| ✅ | file_to_blackhole_1000ms_latency | memory_usage | 10/10 | 0.21GiB ≤ 1.20GiB | |
| ✅ | file_to_blackhole_1000ms_latency | missed_bytes | 10/10 | 0B = 0B | |
| ✅ | file_to_blackhole_100ms_latency | memory_usage | 10/10 | 0.16GiB ≤ 1.20GiB | |
| ✅ | file_to_blackhole_100ms_latency | missed_bytes | 10/10 | 0B = 0B | |
| ✅ | file_to_blackhole_500ms_latency | memory_usage | 10/10 | 0.18GiB ≤ 1.20GiB | |
| ✅ | file_to_blackhole_500ms_latency | missed_bytes | 10/10 | 0B = 0B | |
| ✅ | quality_gate_idle | intake_connections | 10/10 | 3 ≤ 4 | bounds checks dashboard |
| ✅ | quality_gate_idle | memory_usage | 10/10 | 139.68MiB ≤ 147MiB | bounds checks dashboard |
| ✅ | quality_gate_idle_all_features | intake_connections | 10/10 | 3 ≤ 4 | bounds checks dashboard |
| ✅ | quality_gate_idle_all_features | memory_usage | 10/10 | 466.70MiB ≤ 495MiB | bounds checks dashboard |
| ✅ | quality_gate_logs | intake_connections | 10/10 | 3 ≤ 6 | bounds checks dashboard |
| ✅ | quality_gate_logs | memory_usage | 10/10 | 182.45MiB ≤ 195MiB | bounds checks dashboard |
| ✅ | quality_gate_logs | missed_bytes | 10/10 | 0B = 0B | bounds checks dashboard |
| ✅ | quality_gate_metrics_logs | cpu_usage | 10/10 | 354.02 ≤ 2000 | bounds checks dashboard |
| ✅ | quality_gate_metrics_logs | intake_connections | 10/10 | 3 ≤ 6 | bounds checks dashboard |
| ✅ | quality_gate_metrics_logs | memory_usage | 10/10 | 390.41MiB ≤ 430MiB | bounds checks dashboard |
| ✅ | quality_gate_metrics_logs | missed_bytes | 10/10 | 0B = 0B | bounds checks dashboard |
Explanation
Confidence level: 90.00%
Effect size tolerance: |Δ mean %| ≥ 5.00%
Performance changes are noted in the perf column of each table:
- ✅ = significantly better comparison variant performance
- ❌ = significantly worse comparison variant performance
- ➖ = no significant change in performance
A regression test is an A/B test of target performance in a repeatable rig, where "performance" is measured as "comparison variant minus baseline variant" for an optimization goal (e.g., ingress throughput). Due to intrinsic variability in measuring that goal, we can only estimate its mean value for each experiment; we report uncertainty in that value as a 90.00% confidence interval denoted "Δ mean % CI".
For each experiment, we decide whether a change in performance is a "regression" -- a change worth investigating further -- if all of the following criteria are true:
-
Its estimated |Δ mean %| ≥ 5.00%, indicating the change is big enough to merit a closer look.
-
Its 90.00% confidence interval "Δ mean % CI" does not contain zero, indicating that if our statistical model is accurate, there is at least a 90.00% chance there is a difference in performance between baseline and comparison variants.
-
Its configuration does not mark it "erratic".
CI Pass/Fail Decision
✅ Passed. All Quality Gates passed.
- quality_gate_metrics_logs, bounds check memory_usage: 10/10 replicas passed. Gate passed.
- quality_gate_metrics_logs, bounds check intake_connections: 10/10 replicas passed. Gate passed.
- quality_gate_metrics_logs, bounds check missed_bytes: 10/10 replicas passed. Gate passed.
- quality_gate_metrics_logs, bounds check cpu_usage: 10/10 replicas passed. Gate passed.
- quality_gate_idle, bounds check memory_usage: 10/10 replicas passed. Gate passed.
- quality_gate_idle, bounds check intake_connections: 10/10 replicas passed. Gate passed.
- quality_gate_idle_all_features, bounds check memory_usage: 10/10 replicas passed. Gate passed.
- quality_gate_idle_all_features, bounds check intake_connections: 10/10 replicas passed. Gate passed.
- quality_gate_logs, bounds check intake_connections: 10/10 replicas passed. Gate passed.
- quality_gate_logs, bounds check memory_usage: 10/10 replicas passed. Gate passed.
- quality_gate_logs, bounds check missed_bytes: 10/10 replicas passed. Gate passed.
What does this PR do?
Adds the
schedule:nonOfficeHourspreset to the rootextendsarray ofrenovate.json. The preset evaluates to:Per-package schedules already defined in
packageRules(linux-images, windows-images, integrations-core, datadog-agent-dev) are not touched — they remain the authoritative filter for their respective deps.Motivation
Renovate currently opens, rebases, and closes dependency PRs at unpredictable times throughout the day, adding reviewer interruption during working hours. Constraining Renovate's update/branch activity to nights and weekends pushes that churn outside business hours.
Scope clarification (after Codex review): this preset only filters what Renovate does once a run is already in progress — it does not reduce how often Mend-hosted Renovate is invoked. Mend's scan cadence is platform-side and cannot be changed from
renovate.json(see https://docs.renovatebot.com/key-concepts/scheduling/#default-behavior). So the only concrete effect of this PR is reducing mid-workday PR noise. Queue/rerun-latency complaints have to be handled at the Mend platform level, not here.Describe how you validated your changes
schedule:nonOfficeHoursis a Renovate built-in preset: https://docs.renovatebot.com/presets-schedule/#schedulenonofficehours — no custom regex to get wrong.scheduleentries use office hours, so none are conflicted.2026-04-24T09:06Z) to confirm there is no rootscheduletoday.No code change, no user-visible behavior change beyond when Renovate PRs appear.
Additional Notes
git-refsregistry warning) — same review cycle but independent concerns.