Dashboard: Graduate Dynamic Dashboards to GA (#121836)

This commit is contained in:
Bogdan Matei
2026-04-03 17:04:02 +03:00
committed by GitHub
parent a565a318a2
commit f3cc999743
13 changed files with 34 additions and 18 deletions
@@ -38,6 +38,7 @@ Most [generally available](https://grafana.com/docs/release-life-cycle/#general-
| `cloudWatchBatchQueries` | Runs CloudWatch metrics queries as separate batches | |
| `annotationPermissionUpdate` | Change the way annotation permissions work by scoping them to folders and dashboards. | Yes |
| `dashboardScene` | Enables dashboard rendering using scenes for all roles | Yes |
| `dashboardNewLayouts` | Enables new dashboard layouts | Yes |
| `dashboardDefaultLayoutSelector` | Enables default layout selector in dashboard settings | Yes |
| `alertingQueryOptimization` | Optimizes eligible queries in order to reduce load on datasources | |
| `cloudWatchNewLabelParsing` | Updates CloudWatch label parsing to be more accurate | Yes |
@@ -87,7 +88,6 @@ Most [generally available](https://grafana.com/docs/release-life-cycle/#general-
| `faroDatasourceSelector` | Enable the data source selector within the Frontend Apps section of the Frontend Observability |
| `externalServiceAccounts` | Automatic service account and token setup for plugins |
| `annotationsClustering` | Enables annotation clustering and switches to refactored annotation code |
| `dashboardNewLayouts` | Enables new dashboard layouts |
| `dashboardFiltersOverview` | Enables the dashboard filters overview pane |
| `feedbackButton` | Enables the feedback button in the dashboard edit sidebar |
| `pdfTables` | Enables generating table data as PDF in reporting |
@@ -8,6 +8,7 @@ test.use({
alertingListViewV2: true,
alertingFilterV2: true,
alertingSavedSearches: true,
dashboardNewLayouts: false,
},
});
@@ -9,6 +9,7 @@ test.use({
groupByVariable: true,
reloadDashboardsOnParamsChange: true,
useScopesNavigationEndpoint: true,
dashboardNewLayouts: false,
},
});
@@ -60,7 +60,10 @@ const ALERT_ANNOTATIONS_COUNTS = {
},
};
test.use({ viewport: { width: 1000, height: 1840 }, featureToggles: { annotationsClustering: true } });
test.use({
viewport: { width: 1000, height: 1840 },
featureToggles: { annotationsClustering: true, dashboardNewLayouts: false },
});
test.describe('Panels test: Clustering', { tag: ['@panels', '@annotations'] }, () => {
test.describe('width: 1000', () => {
@@ -5,6 +5,7 @@ import { test, expect } from '@grafana/plugin-e2e';
test.use({
featureToggles: {
canvasPanelPanZoom: true,
dashboardNewLayouts: false,
},
});
test.describe('Canvas Panel - Scene Tests', () => {
@@ -37,6 +37,7 @@ test.describe('Panels test: Heatmap', { tag: ['@panels', '@heatmap'] }, () => {
test.use({
featureToggles: {
timeRangePan: true,
dashboardNewLayouts: false,
},
});
@@ -5,6 +5,7 @@ const test = base.extend({});
test.use({
featureToggles: {
dashboardTemplates: true,
dashboardNewLayouts: false,
},
});
+1 -1
View File
@@ -410,7 +410,7 @@ export interface FeatureToggles {
dashboardScene?: boolean;
/**
* Enables new dashboard layouts
* @default false
* @default true
*/
dashboardNewLayouts?: boolean;
/**
+2 -2
View File
@@ -627,10 +627,10 @@ var (
{
Name: "dashboardNewLayouts",
Description: "Enables new dashboard layouts",
Stage: FeatureStagePublicPreview,
Stage: FeatureStageGeneralAvailability,
FrontendOnly: false, // The restore backend feature changes behavior based on this flag
Owner: grafanaDashboardsSquad,
Expression: "false",
Expression: "true",
},
{
Name: "dashboardDefaultLayoutSelector",
+1 -1
View File
@@ -77,7 +77,7 @@ Created,Name,Stage,Owner,requiresDevMode,RequiresRestart,FrontendOnly
2023-10-31,annotationPermissionUpdate,GA,@grafana/identity-access-team,false,false,false
2026-03-12,annotationsClustering,preview,@grafana/dataviz-squad,false,false,true
2023-11-13,dashboardScene,GA,@grafana/dashboards-squad,false,false,true
2024-10-23,dashboardNewLayouts,preview,@grafana/dashboards-squad,false,false,false
2024-10-23,dashboardNewLayouts,GA,@grafana/dashboards-squad,false,false,false
2026-03-19,dashboardDefaultLayoutSelector,GA,@grafana/dashboards-squad,false,false,true
2026-03-10,dashboardAssistantPopover,experimental,@grafana/dashboards-squad,false,false,true
2025-08-29,dashboardUndoRedo,experimental,@grafana/dashboards-squad,false,false,true
1 Created Name Stage Owner requiresDevMode RequiresRestart FrontendOnly
77 2023-10-31 annotationPermissionUpdate GA @grafana/identity-access-team false false false
78 2026-03-12 annotationsClustering preview @grafana/dataviz-squad false false true
79 2023-11-13 dashboardScene GA @grafana/dashboards-squad false false true
80 2024-10-23 dashboardNewLayouts preview GA @grafana/dashboards-squad false false false
81 2026-03-19 dashboardDefaultLayoutSelector GA @grafana/dashboards-squad false false true
82 2026-03-10 dashboardAssistantPopover experimental @grafana/dashboards-squad false false true
83 2025-08-29 dashboardUndoRedo experimental @grafana/dashboards-squad false false true
+7 -4
View File
@@ -1481,14 +1481,17 @@
{
"metadata": {
"name": "dashboardNewLayouts",
"resourceVersion": "1771434338561",
"creationTimestamp": "2024-10-23T08:55:45Z"
"resourceVersion": "1775209187023",
"creationTimestamp": "2024-10-23T08:55:45Z",
"annotations": {
"grafana.app/updatedTimestamp": "2026-04-03 09:39:47.02364 +0000 UTC"
}
},
"spec": {
"description": "Enables new dashboard layouts",
"stage": "preview",
"stage": "GA",
"codeowner": "@grafana/dashboards-squad",
"expression": "false"
"expression": "true"
}
},
{
+8 -8
View File
@@ -7,7 +7,7 @@ import (
"github.com/stretchr/testify/require"
"k8s.io/apimachinery/pkg/runtime/schema"
dashboardV1 "github.com/grafana/grafana/apps/dashboard/pkg/apis/dashboard/v1"
dashboardV2 "github.com/grafana/grafana/apps/dashboard/pkg/apis/dashboard/v2"
"github.com/grafana/grafana/pkg/registry/apis/provisioning/resources"
)
@@ -22,24 +22,24 @@ func TestIntegrationProvisioning_Client(t *testing.T) {
t.Run("dashboard client support", func(t *testing.T) {
_, _, err := clients.ForResource(ctx, schema.GroupVersionResource{
Group: dashboardV1.GROUP,
Version: dashboardV1.VERSION,
Group: dashboardV2.GROUP,
Version: dashboardV2.VERSION,
Resource: "dashboards",
})
require.NoError(t, err)
// With empty version, we should get the preferred version (v1beta1)
// With empty version, we should get the preferred version (v2)
_, gvk, err := clients.ForResource(ctx, schema.GroupVersionResource{
Group: dashboardV1.GROUP,
Group: dashboardV2.GROUP,
Resource: "dashboards",
})
require.NoError(t, err)
require.Equal(t, dashboardV1.VERSION, gvk.Version)
require.Equal(t, dashboardV2.VERSION, gvk.Version)
require.Equal(t, "Dashboard", gvk.Kind)
_, _, err = clients.ForKind(ctx, schema.GroupVersionKind{
Group: dashboardV1.GROUP,
Version: dashboardV1.VERSION,
Group: dashboardV2.GROUP,
Version: dashboardV2.VERSION,
Kind: "Dashboard",
})
require.NoError(t, err)
+5
View File
@@ -43,6 +43,11 @@ export const baseConfig: PlaywrightTestConfig<PluginOptions, {}> = {
screenshot: 'only-on-failure',
permissions: ['clipboard-read', 'clipboard-write'],
provisioningRootDir: path.join(process.cwd(), process.env.PROV_DIR ?? 'conf/provisioning'),
// Preserve legacy dashboard layout behavior in E2E unless a test overrides this (shallow merge on
// `featureToggles` would otherwise drop toggles when a spec sets only a subset).
featureToggles: {
dashboardNewLayouts: false,
},
},
};