Skip to content

Expand Tide Grafana dashboard with operational metrics - #83118

Merged
openshift-merge-bot[bot] merged 1 commit into
openshift:mainfrom
petr-muller:pm2608-tide-dashboard-operational-metrics
Aug 7, 2026
Merged

Expand Tide Grafana dashboard with operational metrics#83118
openshift-merge-bot[bot] merged 1 commit into
openshift:mainfrom
petr-muller:pm2608-tide-dashboard-operational-metrics

Conversation

@petr-muller

@petr-muller petr-muller commented Aug 7, 2026

Copy link
Copy Markdown
Member

Replaces the current Tide dashboard (clusters/app.ci/openshift-user-workload-monitoring/mixins/_grafana_dashboards/tide.jsonnet) with a much more detailed one. Same dashboard uid, so existing bookmarks/links to it keep working.

New/expanded sections:

  • "Is Tide OK?" — process up/down, restart count, pod age, time since Tide last merged anything anywhere.
  • "Are We Merging PRs?" — merge rate vs. the same hour yesterday, merges by org (bar + trend), current pool sizes, and repos whose pool has stayed nonzero for hours without a merge.
  • "Controller Loops" — separate, clearly labeled sync vs. status halves covering: loop duration vs. configured period, GitHub search query completeness (success/partial/error shard counts), query error and partial-result rates with history, query duration (percentiles and a histogram-bucket breakdown), and the distribution of how many PRs each query returns.
  • "How Much GitHub API Is Tide Using?" — GraphQL request rate by org, isolated to Tide's own traffic (via user_agent) since the GitHub App identity Tide authenticates as is also shared by a few other bots.

A live preview of the rendered dashboard is up at https://ci-route-ci-grafana.apps.ci.l2s4.p1.openshiftapps.com/d/tide-preview/ as a tide-preview GrafanaDashboard applied directly to ci-grafana on app.ci (not part of this PR) — it'll be deleted once this replaces the real dashboard.

Heads up on maintenance: several panels here (query completeness/error/partial-result rates, query duration, PRs-returned-per-query) depend on Tide metrics (tide_query_errors_total, tide_query_partial_results_total, tide_query_duration_seconds, tide_query_prs_returned, tide_pool_completeness_ratio, tide_sync_query_shards) that only exist in the experimental Tide build currently running on app.ci (quay.io/prucek/tide:sharded-queries), not in upstream kubernetes-sigs/prow. These need to be upstreamed for this to be sustainable long-term, and if their names, labels, or semantics change during that process, the corresponding panels here will need to be retuned to match.

Summary by CodeRabbit

  • Replaces the OpenShift CI Tide Grafana dashboard while preserving its UID for existing links and bookmarks.
  • Adds panels for Tide health, liveness, restarts, pod age, merge activity, pool sizes, and separate sync and status controller-loop metrics.
  • Adds GitHub search observability for query completeness, errors, partial results, durations, and returned PR counts.
  • Adds Tide-specific GitHub GraphQL API usage by organization through user_agent.
  • Uses experimental Tide metrics from the app.ci build. These metrics must be upstreamed, and the dashboard may need updates if their names, labels, or semantics change.

@openshift-ci
openshift-ci Bot requested review from droslean and hector-vido August 7, 2026 17:38
@coderabbitai

coderabbitai Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository YAML (base), Central YAML (inherited)

Review profile: CHILL

Plan: Enterprise

Run ID: 4c922521-1553-40c5-a24f-1bc43803dc10

📥 Commits

Reviewing files that changed from the base of the PR and between 8aae492 and beae161.

📒 Files selected for processing (2)
  • clusters/app.ci/openshift-user-workload-monitoring/mixins/_grafana_dashboards/tide.jsonnet
  • clusters/app.ci/openshift-user-workload-monitoring/mixins/grafana_dashboards_out/tide_grafanadashboard.yaml
🚧 Files skipped from review as they are similar to previous changes (1)
  • clusters/app.ci/openshift-user-workload-monitoring/mixins/_grafana_dashboards/tide.jsonnet

Walkthrough

The Tide Grafana dashboard now uses schema 40 and structured rows. It adds reusable panel builders and query-observability helpers. Panels cover query completeness, durations, errors, partial results, merges, controller health, pool sizes, PR returns, and GitHub API usage.

Changes

Tide dashboard observability

Layer / File(s) Summary
Dashboard builders and row structure
clusters/app.ci/openshift-user-workload-monitoring/mixins/_grafana_dashboards/tide.jsonnet
Adds reusable timeseries and status-history builders, automatic target references, and collapsed-row nesting.
Query observability panels
clusters/app.ci/openshift-user-workload-monitoring/mixins/_grafana_dashboards/tide.jsonnet
Adds completeness, duration, error, partial-result, and PR-return panels for current and historical controller queries.
Tide health and API monitoring
clusters/app.ci/openshift-user-workload-monitoring/mixins/_grafana_dashboards/tide.jsonnet
Corrects merge queries for lazily created Prometheus series and adds health, merge, pool, freshness, controller-loop, merge-activity, and GitHub API usage panels. The dashboard uses schema version 40 and keeps “Is Tide OK?” open.

Estimated code review effort: 4 (Complex) | ~45 minutes

Suggested reviewers: droslean, hector-vido

🚥 Pre-merge checks | ✅ 15
✅ Passed checks (15 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the main change: expanding the Tide Grafana dashboard with operational metrics.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Stable And Deterministic Test Names ✅ Passed The PR changes only a Jsonnet dashboard and generated Grafana YAML. No Ginkgo test declarations or dynamic test titles exist in the changed files.
Test Structure And Quality ✅ Passed The PR changes only a 1,498-line Grafana Jsonnet dashboard; it adds no Ginkgo tests, cluster operations, waits, or assertions for this check to assess.
Microshift Test Compatibility ✅ Passed The PR changes only Tide Grafana Jsonnet/YAML dashboard files and adds no Ginkgo e2e tests, so MicroShift test compatibility is not applicable.
Single Node Openshift (Sno) Test Compatibility ✅ Passed The PR changes only a Tide Jsonnet dashboard and generated GrafanaDashboard YAML; the diff adds no Ginkgo tests or multi-node topology assumptions.
Topology-Aware Scheduling Compatibility ✅ Passed The PR changes only a Jsonnet Grafana dashboard and its generated GrafanaDashboard resource; searches found no scheduling, workload, affinity, topology, node, replica, or PDB constraints.
Ote Binary Stdout Contract ✅ Passed The PR changes only Jsonnet and generated Grafana YAML; no main/init/TestMain, suite setup, stdout writes, or logging configuration appears in the changed files.
Ipv6 And Disconnected Network Test Compatibility ✅ Passed The PR changes only a Jsonnet dashboard and generated GrafanaDashboard YAML. It adds no Ginkgo tests, IPv4 literals, URL construction, or external connectivity operations.
No-Weak-Crypto ✅ Passed The two changed dashboard files contain no added MD5, SHA-1, DES, 3DES, RC4, Blowfish, or ECB usage, and no custom crypto or secret-comparison code.
Container-Privileges ✅ Passed The PR changes only a GrafanaDashboard CR and its Jsonnet; neither added file contains privileged, hostPID, hostNetwork, hostIPC, SYS_ADMIN, securityContext, or allowPrivilegeEscalation settings.
No-Sensitive-Data-In-Logs ✅ Passed The commit only changes Grafana panel definitions and Prometheus queries; both source and generated files contain no logging calls or log payloads and no credential, PII, or hostname values.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Comment @coderabbitai help to get the list of available commands.

@openshift-merge-bot

Copy link
Copy Markdown
Contributor

@petr-muller: pj-rehearse could not automatically process this event because the request waited in queue for longer than 5 minutes. Use /pj-rehearse to trigger rehearsals manually.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In
`@clusters/app.ci/openshift-user-workload-monitoring/mixins/_grafana_dashboards/tide.jsonnet`:
- Around line 924-926: Update the query passed to prometheus.target in this
panel to use the existing lazy-series correction via mergesIncreasePinned or
mergesIncreaseTrend, including the corrected expression in both the displayed
daily rate and the max_over_time threshold calculation. Preserve the existing
org/repo/branch grouping, legend format, and >10 filter behavior.
- Around line 768-781: Update the titles passed to queryErrorCountPanel for the
sync and status panels so they describe raw query shard outcome counts rather
than error rates, distinguishing them from the existing “Sync Error Rate (5m)”
panel while preserving the current queries and layout.
- Around line 612-633: Update mergesIncreasePinned, mergesIncreaseTrend, and
mergesIncreasePinnedSameHourYesterday so their new-series correction credits the
first in-window sample via per-series min_over_time rather than the series’
current value. Preserve full per-series matching between the unless and
min_over_time operands, apply the appropriate timestamp/offset behavior for each
helper, and verify the resulting PromQL against live data.
- Around line 487-503: Update the `prometheus.target` expression using `counts`
to assign a stable label to the `vector(0)` fallback series, then change the
`overrides+` `byName` matcher to target that label value instead of an empty
name. Preserve hiding the fallback from the legend, tooltip, and visualization
while leaving the primary series unchanged.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository YAML (base), Central YAML (inherited)

Review profile: CHILL

Plan: Enterprise

Run ID: 92c6b78a-b575-4884-a82f-41a1b93a16f9

📥 Commits

Reviewing files that changed from the base of the PR and between 560d430 and 034c871.

📒 Files selected for processing (2)
  • clusters/app.ci/openshift-user-workload-monitoring/mixins/_grafana_dashboards/tide.jsonnet
  • clusters/app.ci/openshift-user-workload-monitoring/mixins/grafana_dashboards_out/tide_grafanadashboard.yaml

@petr-muller
petr-muller force-pushed the pm2608-tide-dashboard-operational-metrics branch from 034c871 to a0c41c0 Compare August 7, 2026 18:52
@coderabbitai

coderabbitai Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

Note

GitHub couldn't provide a complete incremental comparison for this pull request, so CodeRabbit is performing a full review instead. This review may take a little longer.

@openshift-merge-bot openshift-merge-bot Bot added the rehearsals-ack Signifies that rehearsal jobs have been acknowledged label Aug 7, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (4)
clusters/app.ci/openshift-user-workload-monitoring/mixins/_grafana_dashboards/tide.jsonnet (4)

1143-1146: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Stale cross-reference: no panel named "Merges per Hour by Repo" exists.

The rewrite removed that panel. Point the comment at the reason instead of at a missing panel.

✏️ Proposed comment fix
-        // See "Merges per Hour by Repo": without this the default
-        // intervalFactor of 2 turns the requested 30m step into 1h blocks.
+        // Without intervalFactor=1 the default factor of 2 turns the
+        // requested 30m step into 1h blocks.
         intervalFactor=1,
         interval='30m',
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@clusters/app.ci/openshift-user-workload-monitoring/mixins/_grafana_dashboards/tide.jsonnet`
around lines 1143 - 1146, Update the comment above intervalFactor in the
dashboard configuration to explain the 30m step and why intervalFactor=1 is
required, removing the stale reference to the deleted “Merges per Hour by Repo”
panel.

922-927: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

options: replaces the builder's options object instead of merging into it.

barGaugePanel.new sets an options object. Using : here discards it. The four bar gauges in this file (Lines 922-927, 1008-1013, 1059-1064, 1111-1116) all re-specify reduceOptions, orientation, displayMode, and valueMode, so the important keys survive. Any other key the builder set, such as showUnfilled, is dropped and falls back to the Grafana default. Use options+: so the panels keep the builder's baseline.

♻️ Proposed change (apply at all four bar gauges)
-      options: {
+      options+: {
         reduceOptions: { values: false, calcs: ['lastNotNull'], fields: '' },
         orientation: 'horizontal',
         displayMode: 'gradient',
         valueMode: 'color',
       },
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@clusters/app.ci/openshift-user-workload-monitoring/mixins/_grafana_dashboards/tide.jsonnet`
around lines 922 - 927, Change the options field from replacement to merge
semantics in all four bar gauge panel definitions using barGaugePanel.new:
replace options: with options+: at the four corresponding gauge blocks so their
explicitly configured values remain while preserving baseline options such as
showUnfilled from the builder.

490-508: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Use the same labeled fallback here as in queryPartialRateHistoryPanel.

This panel names the fallback series by the literal : that results when Grafana substitutes both missing labels with empty strings. The comment at Lines 554-560 in queryPartialRateHistoryPanel states that this substitution is not reliable, and that panel therefore attaches an explicit org_shard label so the override has a stable field name. Apply the same idiom here so both panels depend on one documented behavior instead of two.

♻️ Proposed change to align the two fallbacks
-        // The `or vector(0)` fallback below has no org_shard/error_class
-        // labels, so its legend substitutes to the literal string ":" — hide
-        // that pseudo-series entirely. It only exists so the panel always has
+        // The fallback below carries explicit org_shard/error_class values so
+        // it has a stable, matchable field name — hide that pseudo-series
+        // entirely. It only exists so the panel always has
         // at least one data point (a clean window otherwise has zero matching
         // time series, which Grafana renders as "No data" instead of "0
         // errors"); at value 0 on a bar chart it's invisible anyway.
-        { matcher: { id: 'byName', options: ':' }, properties: [
+        { matcher: { id: 'byName', options: '—:—' }, properties: [
           { id: 'custom.hideFrom', value: { legend: true, tooltip: true, viz: true } },
         ] },
       ],
     },
     options+: {
       legend+: { sortBy: 'Last', sortDesc: true },
     },
   })
   .addTarget(prometheus.target(
-      '(%s) > 0 or vector(0)' % counts,
+      '(%s) > 0 or label_replace(label_replace(vector(0), "org_shard", "—", "", ""), "error_class", "—", "", "")' % counts,
       legendFormat='{{org_shard}}:{{error_class}}',
   ));
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@clusters/app.ci/openshift-user-workload-monitoring/mixins/_grafana_dashboards/tide.jsonnet`
around lines 490 - 508, Update the fallback expression in the panel’s
prometheus.target call, alongside the counts query and legendFormat, to attach
an explicit org_shard label using the same labeled-fallback idiom as
queryPartialRateHistoryPanel. Then align the Grafana field override matcher and
explanatory comment with that stable fallback label, preserving the existing
hidden pseudo-series behavior.

17-33: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

pending is dead state.

No branch of step ever adds an element to pending. It is initialized to [], reset to [] on each row, and concatenated as an empty list at Line 23 and Line 33. Removing it simplifies the fold without changing the output.

♻️ Proposed simplification
 local collapseRowsExcept(keepOpen, panels) =
   local step(acc, panel) =
     if panel.type == 'row' then
-      // Close out whatever row was open, then start collecting for this one.
       // The kept-open row is emitted as an ordinary expanded row and collects
       // nothing, so its members stay top-level.
-      acc { out: acc.out + acc.pending + [panel], pending: [], collecting: panel.title != keepOpen }
+      acc { out: acc.out + [panel], collecting: panel.title != keepOpen }
     else if acc.collecting then
       acc { out: acc.out[:std.length(acc.out) - 1] + [acc.out[std.length(acc.out) - 1] {
         collapse: true,
         collapsed: true,
         panels+: [panel],
       }] }
     else
       acc { out: acc.out + [panel] };
-  local folded = std.foldl(step, panels, { out: [], pending: [], collecting: false });
-  folded.out + folded.pending;
+  std.foldl(step, panels, { out: [], collecting: false }).out;
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@clusters/app.ci/openshift-user-workload-monitoring/mixins/_grafana_dashboards/tide.jsonnet`
around lines 17 - 33, Remove the unused pending field from collapseRowsExcept
and its step accumulator. Update the row and non-row branches to build output
directly, remove pending concatenations and resets, and return folded.out while
preserving the existing row-collapsing behavior.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In
`@clusters/app.ci/openshift-user-workload-monitoring/mixins/_grafana_dashboards/tide.jsonnet`:
- Around line 696-717: Update mergesIncreasePinned, mergesIncreaseTrend, and
mergesIncreasePinnedSameHourYesterday so the merges_sum existence check in each
unless expression occurs before min_over_time, or otherwise removes __name__
from both operands. Preserve the existing window, offset, grouping, and fallback
behavior while ensuring only genuinely new series receive the correction.
- Around line 1164-1170: Replace the inline-styled HTML banners in both
controller panels of tide.jsonnet with Markdown headings, removing the
surrounding div and style attributes while preserving the Sync Controller and
other controller titles and descriptive text.

---

Nitpick comments:
In
`@clusters/app.ci/openshift-user-workload-monitoring/mixins/_grafana_dashboards/tide.jsonnet`:
- Around line 1143-1146: Update the comment above intervalFactor in the
dashboard configuration to explain the 30m step and why intervalFactor=1 is
required, removing the stale reference to the deleted “Merges per Hour by Repo”
panel.
- Around line 922-927: Change the options field from replacement to merge
semantics in all four bar gauge panel definitions using barGaugePanel.new:
replace options: with options+: at the four corresponding gauge blocks so their
explicitly configured values remain while preserving baseline options such as
showUnfilled from the builder.
- Around line 490-508: Update the fallback expression in the panel’s
prometheus.target call, alongside the counts query and legendFormat, to attach
an explicit org_shard label using the same labeled-fallback idiom as
queryPartialRateHistoryPanel. Then align the Grafana field override matcher and
explanatory comment with that stable fallback label, preserving the existing
hidden pseudo-series behavior.
- Around line 17-33: Remove the unused pending field from collapseRowsExcept and
its step accumulator. Update the row and non-row branches to build output
directly, remove pending concatenations and resets, and return folded.out while
preserving the existing row-collapsing behavior.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository YAML (base), Central YAML (inherited)

Review profile: CHILL

Plan: Enterprise

Run ID: 23ffefc8-6ee1-4e08-be58-a1d75ad4d728

📥 Commits

Reviewing files that changed from the base of the PR and between ccfd628 and a0c41c0.

📒 Files selected for processing (2)
  • clusters/app.ci/openshift-user-workload-monitoring/mixins/_grafana_dashboards/tide.jsonnet
  • clusters/app.ci/openshift-user-workload-monitoring/mixins/grafana_dashboards_out/tide_grafanadashboard.yaml

@petr-muller
petr-muller force-pushed the pm2608-tide-dashboard-operational-metrics branch from a0c41c0 to d0e4ec2 Compare August 7, 2026 19:20
@coderabbitai

coderabbitai Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

Note

GitHub couldn't provide a complete incremental comparison for this pull request, so CodeRabbit is performing a full review instead. This review may take a little longer.

Adds health/liveness checks, per-controller (sync/status) loop cadence
and completeness/error/partial-result tracking, GitHub search query
duration and size distributions, merge activity by org, and GraphQL
API usage attribution, replacing the previous, much thinner dashboard.
Same dashboard uid, so existing links/bookmarks keep working.
@petr-muller
petr-muller force-pushed the pm2608-tide-dashboard-operational-metrics branch from d0e4ec2 to beae161 Compare August 7, 2026 19:36
@coderabbitai

coderabbitai Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

Note

GitHub couldn't provide a complete incremental comparison for this pull request, so CodeRabbit is performing a full review instead. This review may take a little longer.

@openshift-merge-bot

Copy link
Copy Markdown
Contributor

[REHEARSALNOTIFIER]
@petr-muller: no rehearsable tests are affected by this change

Note: If this PR includes changes to step registry files (ci-operator/step-registry/) and you expected jobs to be found, try rebasing your PR onto the base branch. This helps pj-rehearse accurately detect changes when the base branch has moved forward.

Interacting with pj-rehearse

Comment: /pj-rehearse to run up to 5 rehearsals
Comment: /pj-rehearse skip to opt-out of rehearsals
Comment: /pj-rehearse {test-name}, with each test separated by a space, to run one or more specific rehearsals
Comment: /pj-rehearse more to run up to 10 rehearsals
Comment: /pj-rehearse max to run up to 25 rehearsals
Comment: /pj-rehearse auto-ack to run up to 5 rehearsals, and add the rehearsals-ack label on success
Comment: /pj-rehearse list to get an up-to-date list of affected jobs
Comment: /pj-rehearse abort to abort all active rehearsals
Comment: /pj-rehearse network-access-allowed to allow rehearsals of tests that have the restrict_network_access field set to false. This must be executed by an openshift org member who is not the PR author

Once you are satisfied with the results of the rehearsals, comment: /pj-rehearse ack to unblock merge. When the rehearsals-ack label is present on your PR, merge will no longer be blocked by rehearsals.
If you would like the rehearsals-ack label removed, comment: /pj-rehearse reject to re-block merging.

@hector-vido

Copy link
Copy Markdown
Contributor

/lgtm

@openshift-ci openshift-ci Bot added the lgtm Indicates that a PR is ready to be merged. label Aug 7, 2026
@openshift-ci

openshift-ci Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: hector-vido, petr-muller

The full list of commands accepted by this bot can be found here.

The pull request process is described here

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@openshift-ci openshift-ci Bot added the approved Indicates a PR has been approved by an approver from all required OWNERS files. label Aug 7, 2026
@openshift-ci

openshift-ci Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

@petr-muller: all tests passed!

Full PR test history. Your PR dashboard.

Details

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository. I understand the commands that are listed here.

@openshift-merge-bot
openshift-merge-bot Bot merged commit 916113d into openshift:main Aug 7, 2026
10 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

approved Indicates a PR has been approved by an approver from all required OWNERS files. lgtm Indicates that a PR is ready to be merged. rehearsals-ack Signifies that rehearsal jobs have been acknowledged

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants