Compare commits

...

27 Commits

Author SHA1 Message Date
Josh Hunt
7d79059251 [release-12.2.0] Chore: Fix @grafana/alerting package repo (#111532) (#111533)
Some checks failed
Actionlint / Lint GitHub Actions files (push) Has been cancelled
Backend Unit Tests / Detect whether code changed (push) Has been cancelled
Lint Frontend / Detect whether code changed (push) Has been cancelled
Lint Frontend / Verify API clients (push) Has been cancelled
Lint Frontend / Verify API clients (enterprise) (push) Has been cancelled
Verify i18n / verify-i18n (push) Has been cancelled
End-to-end tests / Detect whether code changed (push) Has been cancelled
Frontend tests / Detect whether code changed (push) Has been cancelled
Integration Tests / Detect whether code changed (push) Has been cancelled
Reject GitHub secrets / reject-gh-secrets (push) Has been cancelled
Build Release Packages / setup (push) Has been cancelled
Shellcheck / Shellcheck scripts (push) Has been cancelled
Run Storybook a11y tests / Detect whether code changed (push) Has been cancelled
Swagger generated code / Detect whether code changed (push) Has been cancelled
Dispatch sync to mirror / dispatch-job (push) Has been cancelled
Backend Unit Tests / Grafana (1/8) (push) Has been cancelled
Backend Unit Tests / Grafana (2/8) (push) Has been cancelled
Backend Unit Tests / Grafana (3/8) (push) Has been cancelled
Backend Unit Tests / Grafana (4/8) (push) Has been cancelled
Backend Unit Tests / Grafana (5/8) (push) Has been cancelled
Backend Unit Tests / Grafana (6/8) (push) Has been cancelled
Backend Unit Tests / Grafana (7/8) (push) Has been cancelled
Backend Unit Tests / Grafana (8/8) (push) Has been cancelled
Backend Unit Tests / Grafana Enterprise (1/8) (push) Has been cancelled
Backend Unit Tests / Grafana Enterprise (2/8) (push) Has been cancelled
Backend Unit Tests / Grafana Enterprise (3/8) (push) Has been cancelled
Backend Unit Tests / Grafana Enterprise (4/8) (push) Has been cancelled
Backend Unit Tests / Grafana Enterprise (5/8) (push) Has been cancelled
Backend Unit Tests / Grafana Enterprise (6/8) (push) Has been cancelled
Backend Unit Tests / Grafana Enterprise (7/8) (push) Has been cancelled
Backend Unit Tests / Grafana Enterprise (8/8) (push) Has been cancelled
Backend Unit Tests / All backend unit tests complete (push) Has been cancelled
Lint Frontend / Lint (push) Has been cancelled
Lint Frontend / Typecheck (push) Has been cancelled
End-to-end tests / Build & Package Grafana (push) Has been cancelled
End-to-end tests / Build E2E test runner (push) Has been cancelled
End-to-end tests / push-docker-image (push) Has been cancelled
End-to-end tests / dashboards-suite (old arch) (push) Has been cancelled
End-to-end tests / panels-suite (old arch) (push) Has been cancelled
End-to-end tests / smoke-tests-suite (old arch) (push) Has been cancelled
End-to-end tests / various-suite (old arch) (push) Has been cancelled
End-to-end tests / various-suite (push) Has been cancelled
End-to-end tests / Verify Storybook (Playwright) (push) Has been cancelled
End-to-end tests / Playwright E2E tests (1/8) (push) Has been cancelled
End-to-end tests / Playwright E2E tests (2/8) (push) Has been cancelled
End-to-end tests / Playwright E2E tests (3/8) (push) Has been cancelled
End-to-end tests / Playwright E2E tests (4/8) (push) Has been cancelled
End-to-end tests / Playwright E2E tests (5/8) (push) Has been cancelled
End-to-end tests / Playwright E2E tests (6/8) (push) Has been cancelled
End-to-end tests / Playwright E2E tests (7/8) (push) Has been cancelled
End-to-end tests / Playwright E2E tests (8/8) (push) Has been cancelled
End-to-end tests / run-azure-monitor-e2e (push) Has been cancelled
End-to-end tests / All Playwright tests complete (push) Has been cancelled
End-to-end tests / A11y test (push) Has been cancelled
End-to-end tests / Publish metrics (push) Has been cancelled
End-to-end tests / All E2E tests complete (push) Has been cancelled
Frontend tests / Unit tests (1 / 16) (push) Has been cancelled
Frontend tests / Unit tests (10 / 16) (push) Has been cancelled
Frontend tests / Unit tests (11 / 16) (push) Has been cancelled
Frontend tests / Unit tests (12 / 16) (push) Has been cancelled
Frontend tests / Unit tests (13 / 16) (push) Has been cancelled
Frontend tests / Unit tests (14 / 16) (push) Has been cancelled
Frontend tests / Unit tests (15 / 16) (push) Has been cancelled
Frontend tests / Unit tests (16 / 16) (push) Has been cancelled
Frontend tests / Unit tests (2 / 16) (push) Has been cancelled
Frontend tests / Unit tests (3 / 16) (push) Has been cancelled
Frontend tests / Unit tests (4 / 16) (push) Has been cancelled
Frontend tests / Unit tests (5 / 16) (push) Has been cancelled
Frontend tests / Unit tests (6 / 16) (push) Has been cancelled
Frontend tests / Unit tests (7 / 16) (push) Has been cancelled
Frontend tests / Unit tests (8 / 16) (push) Has been cancelled
Frontend tests / Unit tests (9 / 16) (push) Has been cancelled
Frontend tests / Decoupled plugin tests (push) Has been cancelled
Frontend tests / Packages unit tests (push) Has been cancelled
Frontend tests / All frontend unit tests complete (push) Has been cancelled
Integration Tests / Sqlite (1/4) (push) Has been cancelled
Integration Tests / Sqlite (2/4) (push) Has been cancelled
Integration Tests / Sqlite (3/4) (push) Has been cancelled
Integration Tests / Sqlite (4/4) (push) Has been cancelled
Integration Tests / Sqlite Without CGo (1/4) (push) Has been cancelled
Integration Tests / Sqlite Without CGo (2/4) (push) Has been cancelled
Integration Tests / Sqlite Without CGo (3/4) (push) Has been cancelled
Integration Tests / Sqlite Without CGo (4/4) (push) Has been cancelled
Integration Tests / MySQL (1/16) (push) Has been cancelled
Integration Tests / MySQL (10/16) (push) Has been cancelled
Integration Tests / MySQL (11/16) (push) Has been cancelled
Integration Tests / MySQL (12/16) (push) Has been cancelled
Integration Tests / MySQL (13/16) (push) Has been cancelled
Integration Tests / MySQL (14/16) (push) Has been cancelled
Integration Tests / MySQL (15/16) (push) Has been cancelled
Integration Tests / MySQL (16/16) (push) Has been cancelled
Integration Tests / MySQL (2/16) (push) Has been cancelled
Integration Tests / MySQL (3/16) (push) Has been cancelled
Integration Tests / MySQL (4/16) (push) Has been cancelled
Integration Tests / MySQL (5/16) (push) Has been cancelled
Integration Tests / MySQL (6/16) (push) Has been cancelled
Integration Tests / MySQL (7/16) (push) Has been cancelled
Integration Tests / MySQL (8/16) (push) Has been cancelled
Integration Tests / MySQL (9/16) (push) Has been cancelled
Integration Tests / Postgres (1/16) (push) Has been cancelled
Integration Tests / Postgres (10/16) (push) Has been cancelled
Integration Tests / Postgres (11/16) (push) Has been cancelled
Integration Tests / Postgres (12/16) (push) Has been cancelled
Integration Tests / Postgres (13/16) (push) Has been cancelled
Integration Tests / Postgres (14/16) (push) Has been cancelled
Integration Tests / Postgres (15/16) (push) Has been cancelled
Integration Tests / Postgres (16/16) (push) Has been cancelled
Integration Tests / Postgres (2/16) (push) Has been cancelled
Integration Tests / Postgres (3/16) (push) Has been cancelled
Integration Tests / Postgres (4/16) (push) Has been cancelled
Integration Tests / Postgres (5/16) (push) Has been cancelled
Integration Tests / Postgres (6/16) (push) Has been cancelled
Integration Tests / Postgres (7/16) (push) Has been cancelled
Integration Tests / Postgres (8/16) (push) Has been cancelled
Integration Tests / Postgres (9/16) (push) Has been cancelled
Integration Tests / All backend integration tests complete (push) Has been cancelled
Build Release Packages / Dispatch grafana-enterprise build (push) Has been cancelled
Build Release Packages / / darwin-amd64 (push) Has been cancelled
Build Release Packages / / darwin-arm64 (push) Has been cancelled
Build Release Packages / / linux-amd64 (push) Has been cancelled
Build Release Packages / / linux-armv6 (push) Has been cancelled
Build Release Packages / / linux-armv7 (push) Has been cancelled
Build Release Packages / / linux-arm64 (push) Has been cancelled
Build Release Packages / / linux-s390x (push) Has been cancelled
Build Release Packages / / windows-amd64 (push) Has been cancelled
Build Release Packages / / windows-arm64 (push) Has been cancelled
Build Release Packages / Upload artifacts (push) Has been cancelled
Build Release Packages / publish-dockerhub (push) Has been cancelled
Build Release Packages / Publish NPM canaries (push) Has been cancelled
Build Release Packages / notify-pr (push) Has been cancelled
Run Storybook a11y tests / Run Storybook a11y tests (push) Has been cancelled
Swagger generated code / Verify committed API specs match (push) Has been cancelled
[release-12.2.1] Chore: Fix @grafana/alerting package repo (#111532)

Chore: Fix @grafana/alerting package repo (#110939)

(cherry picked from commit ab3c93b279)


(cherry picked from commit af460952d5)

Co-authored-by: grafana-delivery-bot[bot] <132647405+grafana-delivery-bot[bot]@users.noreply.github.com>
2025-09-24 10:18:37 +01:00
github-actions[bot]
066f57472e Release: 12.2.0 (#111517)
Some checks failed
Actionlint / Lint GitHub Actions files (push) Has been cancelled
Backend Unit Tests / Detect whether code changed (push) Has been cancelled
Backend Unit Tests / Grafana (1/8) (push) Has been cancelled
Backend Unit Tests / Grafana (2/8) (push) Has been cancelled
Backend Unit Tests / Grafana (3/8) (push) Has been cancelled
Backend Unit Tests / Grafana (4/8) (push) Has been cancelled
Backend Unit Tests / Grafana (5/8) (push) Has been cancelled
Backend Unit Tests / Grafana (6/8) (push) Has been cancelled
Backend Unit Tests / Grafana (7/8) (push) Has been cancelled
Backend Unit Tests / Grafana (8/8) (push) Has been cancelled
Backend Unit Tests / Grafana Enterprise (1/8) (push) Has been cancelled
Backend Unit Tests / Grafana Enterprise (2/8) (push) Has been cancelled
Backend Unit Tests / Grafana Enterprise (3/8) (push) Has been cancelled
Backend Unit Tests / Grafana Enterprise (4/8) (push) Has been cancelled
Backend Unit Tests / Grafana Enterprise (5/8) (push) Has been cancelled
Backend Unit Tests / Grafana Enterprise (6/8) (push) Has been cancelled
Backend Unit Tests / Grafana Enterprise (7/8) (push) Has been cancelled
Backend Unit Tests / Grafana Enterprise (8/8) (push) Has been cancelled
Backend Unit Tests / All backend unit tests complete (push) Has been cancelled
Lint Frontend / Detect whether code changed (push) Has been cancelled
Lint Frontend / Lint (push) Has been cancelled
Lint Frontend / Typecheck (push) Has been cancelled
Lint Frontend / Verify API clients (push) Has been cancelled
Lint Frontend / Verify API clients (enterprise) (push) Has been cancelled
Verify i18n / verify-i18n (push) Has been cancelled
End-to-end tests / Detect whether code changed (push) Has been cancelled
End-to-end tests / Build & Package Grafana (push) Has been cancelled
End-to-end tests / Build E2E test runner (push) Has been cancelled
End-to-end tests / push-docker-image (push) Has been cancelled
End-to-end tests / dashboards-suite (old arch) (push) Has been cancelled
End-to-end tests / panels-suite (old arch) (push) Has been cancelled
End-to-end tests / smoke-tests-suite (old arch) (push) Has been cancelled
End-to-end tests / various-suite (old arch) (push) Has been cancelled
End-to-end tests / various-suite (push) Has been cancelled
End-to-end tests / Verify Storybook (Playwright) (push) Has been cancelled
End-to-end tests / Playwright E2E tests (1/8) (push) Has been cancelled
End-to-end tests / Playwright E2E tests (2/8) (push) Has been cancelled
End-to-end tests / Playwright E2E tests (3/8) (push) Has been cancelled
End-to-end tests / Playwright E2E tests (4/8) (push) Has been cancelled
End-to-end tests / Playwright E2E tests (5/8) (push) Has been cancelled
End-to-end tests / Playwright E2E tests (6/8) (push) Has been cancelled
End-to-end tests / Playwright E2E tests (7/8) (push) Has been cancelled
End-to-end tests / Playwright E2E tests (8/8) (push) Has been cancelled
End-to-end tests / run-azure-monitor-e2e (push) Has been cancelled
End-to-end tests / All Playwright tests complete (push) Has been cancelled
End-to-end tests / A11y test (push) Has been cancelled
End-to-end tests / Publish metrics (push) Has been cancelled
End-to-end tests / All E2E tests complete (push) Has been cancelled
Frontend tests / Detect whether code changed (push) Has been cancelled
Frontend tests / Unit tests (1 / 16) (push) Has been cancelled
Frontend tests / Unit tests (10 / 16) (push) Has been cancelled
Frontend tests / Unit tests (11 / 16) (push) Has been cancelled
Frontend tests / Unit tests (12 / 16) (push) Has been cancelled
Frontend tests / Unit tests (13 / 16) (push) Has been cancelled
Frontend tests / Unit tests (14 / 16) (push) Has been cancelled
Frontend tests / Unit tests (15 / 16) (push) Has been cancelled
Frontend tests / Unit tests (16 / 16) (push) Has been cancelled
Frontend tests / Unit tests (2 / 16) (push) Has been cancelled
Frontend tests / Unit tests (3 / 16) (push) Has been cancelled
Frontend tests / Unit tests (4 / 16) (push) Has been cancelled
Frontend tests / Unit tests (5 / 16) (push) Has been cancelled
Frontend tests / Unit tests (6 / 16) (push) Has been cancelled
Frontend tests / Unit tests (7 / 16) (push) Has been cancelled
Frontend tests / Unit tests (8 / 16) (push) Has been cancelled
Frontend tests / Unit tests (9 / 16) (push) Has been cancelled
Frontend tests / Decoupled plugin tests (push) Has been cancelled
Frontend tests / Packages unit tests (push) Has been cancelled
Frontend tests / All frontend unit tests complete (push) Has been cancelled
Integration Tests / Detect whether code changed (push) Has been cancelled
Integration Tests / Sqlite (1/4) (push) Has been cancelled
Integration Tests / Sqlite (2/4) (push) Has been cancelled
Integration Tests / Sqlite (3/4) (push) Has been cancelled
Integration Tests / Sqlite (4/4) (push) Has been cancelled
Integration Tests / Sqlite Without CGo (1/4) (push) Has been cancelled
Integration Tests / Sqlite Without CGo (2/4) (push) Has been cancelled
Integration Tests / Sqlite Without CGo (3/4) (push) Has been cancelled
Integration Tests / Sqlite Without CGo (4/4) (push) Has been cancelled
Integration Tests / MySQL (1/16) (push) Has been cancelled
Integration Tests / MySQL (10/16) (push) Has been cancelled
Integration Tests / MySQL (11/16) (push) Has been cancelled
Integration Tests / MySQL (12/16) (push) Has been cancelled
Integration Tests / MySQL (13/16) (push) Has been cancelled
Integration Tests / MySQL (14/16) (push) Has been cancelled
Integration Tests / MySQL (15/16) (push) Has been cancelled
Integration Tests / MySQL (16/16) (push) Has been cancelled
Integration Tests / MySQL (2/16) (push) Has been cancelled
Integration Tests / MySQL (3/16) (push) Has been cancelled
Integration Tests / MySQL (4/16) (push) Has been cancelled
Integration Tests / MySQL (5/16) (push) Has been cancelled
Integration Tests / MySQL (6/16) (push) Has been cancelled
Integration Tests / MySQL (7/16) (push) Has been cancelled
Integration Tests / MySQL (8/16) (push) Has been cancelled
Integration Tests / MySQL (9/16) (push) Has been cancelled
Integration Tests / Postgres (1/16) (push) Has been cancelled
Integration Tests / Postgres (10/16) (push) Has been cancelled
Integration Tests / Postgres (11/16) (push) Has been cancelled
Integration Tests / Postgres (12/16) (push) Has been cancelled
Integration Tests / Postgres (13/16) (push) Has been cancelled
Integration Tests / Postgres (14/16) (push) Has been cancelled
Integration Tests / Postgres (15/16) (push) Has been cancelled
Integration Tests / Postgres (16/16) (push) Has been cancelled
Integration Tests / Postgres (2/16) (push) Has been cancelled
Integration Tests / Postgres (3/16) (push) Has been cancelled
Integration Tests / Postgres (4/16) (push) Has been cancelled
Integration Tests / Postgres (5/16) (push) Has been cancelled
Integration Tests / Postgres (6/16) (push) Has been cancelled
Integration Tests / Postgres (7/16) (push) Has been cancelled
Integration Tests / Postgres (8/16) (push) Has been cancelled
Integration Tests / Postgres (9/16) (push) Has been cancelled
Integration Tests / All backend integration tests complete (push) Has been cancelled
Reject GitHub secrets / reject-gh-secrets (push) Has been cancelled
Build Release Packages / setup (push) Has been cancelled
Build Release Packages / Dispatch grafana-enterprise build (push) Has been cancelled
Build Release Packages / / darwin-amd64 (push) Has been cancelled
Build Release Packages / / darwin-arm64 (push) Has been cancelled
Build Release Packages / / linux-amd64 (push) Has been cancelled
Build Release Packages / / linux-armv6 (push) Has been cancelled
Build Release Packages / / linux-armv7 (push) Has been cancelled
Build Release Packages / / linux-arm64 (push) Has been cancelled
Build Release Packages / / linux-s390x (push) Has been cancelled
Build Release Packages / / windows-amd64 (push) Has been cancelled
Build Release Packages / / windows-arm64 (push) Has been cancelled
Build Release Packages / Upload artifacts (push) Has been cancelled
Build Release Packages / publish-dockerhub (push) Has been cancelled
Build Release Packages / Publish NPM canaries (push) Has been cancelled
Build Release Packages / notify-pr (push) Has been cancelled
Shellcheck / Shellcheck scripts (push) Has been cancelled
Run Storybook a11y tests / Detect whether code changed (push) Has been cancelled
Run Storybook a11y tests / Run Storybook a11y tests (push) Has been cancelled
Swagger generated code / Detect whether code changed (push) Has been cancelled
Swagger generated code / Verify committed API specs match (push) Has been cancelled
Dispatch sync to mirror / dispatch-job (push) Has been cancelled
CodeQL checks / Detect whether code changed (push) Has been cancelled
CodeQL checks / Analyze (actions) (push) Has been cancelled
CodeQL checks / Analyze (go) (push) Has been cancelled
CodeQL checks / Analyze (javascript) (push) Has been cancelled
* Update changelog

* Update version to 12.2.0

---------

Co-authored-by: grafana-delivery-bot[bot] <grafana-delivery-bot[bot]@users.noreply.github.com>
2025-09-23 18:46:42 -05:00
Josh Hunt
69883ccf95 [release-12.2.0] Backport npm release 12.2.0 (#111499)
Update NPM release workflow
2025-09-23 20:39:33 +01:00
Kevin Minehart
68061f7524 update missing npm publish scripts
Some checks failed
Actionlint / Lint GitHub Actions files (push) Has been cancelled
Backend Unit Tests / Detect whether code changed (push) Has been cancelled
Backend Unit Tests / Grafana (1/8) (push) Has been cancelled
Backend Unit Tests / Grafana (2/8) (push) Has been cancelled
Backend Unit Tests / Grafana (3/8) (push) Has been cancelled
Backend Unit Tests / Grafana (4/8) (push) Has been cancelled
Backend Unit Tests / Grafana (5/8) (push) Has been cancelled
Backend Unit Tests / Grafana (6/8) (push) Has been cancelled
Backend Unit Tests / Grafana (7/8) (push) Has been cancelled
Backend Unit Tests / Grafana (8/8) (push) Has been cancelled
Backend Unit Tests / Grafana Enterprise (1/8) (push) Has been cancelled
Backend Unit Tests / Grafana Enterprise (2/8) (push) Has been cancelled
Backend Unit Tests / Grafana Enterprise (3/8) (push) Has been cancelled
Backend Unit Tests / Grafana Enterprise (4/8) (push) Has been cancelled
Backend Unit Tests / Grafana Enterprise (5/8) (push) Has been cancelled
Backend Unit Tests / Grafana Enterprise (6/8) (push) Has been cancelled
Backend Unit Tests / Grafana Enterprise (7/8) (push) Has been cancelled
Backend Unit Tests / Grafana Enterprise (8/8) (push) Has been cancelled
Backend Unit Tests / All backend unit tests complete (push) Has been cancelled
CodeQL checks / Detect whether code changed (push) Has been cancelled
CodeQL checks / Analyze (actions) (push) Has been cancelled
CodeQL checks / Analyze (go) (push) Has been cancelled
CodeQL checks / Analyze (javascript) (push) Has been cancelled
Lint Frontend / Detect whether code changed (push) Has been cancelled
Lint Frontend / Lint (push) Has been cancelled
Lint Frontend / Typecheck (push) Has been cancelled
Lint Frontend / Verify API clients (push) Has been cancelled
Lint Frontend / Verify API clients (enterprise) (push) Has been cancelled
Verify i18n / verify-i18n (push) Has been cancelled
End-to-end tests / Detect whether code changed (push) Has been cancelled
End-to-end tests / Build & Package Grafana (push) Has been cancelled
End-to-end tests / Build E2E test runner (push) Has been cancelled
End-to-end tests / push-docker-image (push) Has been cancelled
End-to-end tests / dashboards-suite (old arch) (push) Has been cancelled
End-to-end tests / panels-suite (old arch) (push) Has been cancelled
End-to-end tests / smoke-tests-suite (old arch) (push) Has been cancelled
End-to-end tests / various-suite (old arch) (push) Has been cancelled
End-to-end tests / various-suite (push) Has been cancelled
End-to-end tests / Verify Storybook (Playwright) (push) Has been cancelled
End-to-end tests / Playwright E2E tests (1/8) (push) Has been cancelled
End-to-end tests / Playwright E2E tests (2/8) (push) Has been cancelled
End-to-end tests / Playwright E2E tests (3/8) (push) Has been cancelled
End-to-end tests / Playwright E2E tests (4/8) (push) Has been cancelled
End-to-end tests / Playwright E2E tests (5/8) (push) Has been cancelled
End-to-end tests / Playwright E2E tests (6/8) (push) Has been cancelled
End-to-end tests / Playwright E2E tests (7/8) (push) Has been cancelled
End-to-end tests / Playwright E2E tests (8/8) (push) Has been cancelled
End-to-end tests / run-azure-monitor-e2e (push) Has been cancelled
End-to-end tests / All Playwright tests complete (push) Has been cancelled
End-to-end tests / A11y test (push) Has been cancelled
End-to-end tests / Publish metrics (push) Has been cancelled
End-to-end tests / All E2E tests complete (push) Has been cancelled
Frontend tests / Detect whether code changed (push) Has been cancelled
Frontend tests / Unit tests (1 / 16) (push) Has been cancelled
Frontend tests / Unit tests (10 / 16) (push) Has been cancelled
Frontend tests / Unit tests (11 / 16) (push) Has been cancelled
Frontend tests / Unit tests (12 / 16) (push) Has been cancelled
Frontend tests / Unit tests (13 / 16) (push) Has been cancelled
Frontend tests / Unit tests (14 / 16) (push) Has been cancelled
Frontend tests / Unit tests (15 / 16) (push) Has been cancelled
Frontend tests / Unit tests (16 / 16) (push) Has been cancelled
Frontend tests / Unit tests (2 / 16) (push) Has been cancelled
Frontend tests / Unit tests (3 / 16) (push) Has been cancelled
Frontend tests / Unit tests (4 / 16) (push) Has been cancelled
Frontend tests / Unit tests (5 / 16) (push) Has been cancelled
Frontend tests / Unit tests (6 / 16) (push) Has been cancelled
Frontend tests / Unit tests (7 / 16) (push) Has been cancelled
Frontend tests / Unit tests (8 / 16) (push) Has been cancelled
Frontend tests / Unit tests (9 / 16) (push) Has been cancelled
Frontend tests / Decoupled plugin tests (push) Has been cancelled
Frontend tests / Packages unit tests (push) Has been cancelled
Frontend tests / All frontend unit tests complete (push) Has been cancelled
Integration Tests / Detect whether code changed (push) Has been cancelled
Integration Tests / Sqlite (1/4) (push) Has been cancelled
Integration Tests / Sqlite (2/4) (push) Has been cancelled
Integration Tests / Sqlite (3/4) (push) Has been cancelled
Integration Tests / Sqlite (4/4) (push) Has been cancelled
Integration Tests / Sqlite Without CGo (1/4) (push) Has been cancelled
Integration Tests / Sqlite Without CGo (2/4) (push) Has been cancelled
Integration Tests / Sqlite Without CGo (3/4) (push) Has been cancelled
Integration Tests / Sqlite Without CGo (4/4) (push) Has been cancelled
Integration Tests / MySQL (1/16) (push) Has been cancelled
Integration Tests / MySQL (10/16) (push) Has been cancelled
Integration Tests / MySQL (11/16) (push) Has been cancelled
Integration Tests / MySQL (12/16) (push) Has been cancelled
Integration Tests / MySQL (13/16) (push) Has been cancelled
Integration Tests / MySQL (14/16) (push) Has been cancelled
Integration Tests / MySQL (15/16) (push) Has been cancelled
Integration Tests / MySQL (16/16) (push) Has been cancelled
Integration Tests / MySQL (2/16) (push) Has been cancelled
Integration Tests / MySQL (3/16) (push) Has been cancelled
Integration Tests / MySQL (4/16) (push) Has been cancelled
Integration Tests / MySQL (5/16) (push) Has been cancelled
Integration Tests / MySQL (6/16) (push) Has been cancelled
Integration Tests / MySQL (7/16) (push) Has been cancelled
Integration Tests / MySQL (8/16) (push) Has been cancelled
Integration Tests / MySQL (9/16) (push) Has been cancelled
Integration Tests / Postgres (1/16) (push) Has been cancelled
Integration Tests / Postgres (10/16) (push) Has been cancelled
Integration Tests / Postgres (11/16) (push) Has been cancelled
Integration Tests / Postgres (12/16) (push) Has been cancelled
Integration Tests / Postgres (13/16) (push) Has been cancelled
Integration Tests / Postgres (14/16) (push) Has been cancelled
Integration Tests / Postgres (15/16) (push) Has been cancelled
Integration Tests / Postgres (16/16) (push) Has been cancelled
Integration Tests / Postgres (2/16) (push) Has been cancelled
Integration Tests / Postgres (3/16) (push) Has been cancelled
Integration Tests / Postgres (4/16) (push) Has been cancelled
Integration Tests / Postgres (5/16) (push) Has been cancelled
Integration Tests / Postgres (6/16) (push) Has been cancelled
Integration Tests / Postgres (7/16) (push) Has been cancelled
Integration Tests / Postgres (8/16) (push) Has been cancelled
Integration Tests / Postgres (9/16) (push) Has been cancelled
Integration Tests / All backend integration tests complete (push) Has been cancelled
Reject GitHub secrets / reject-gh-secrets (push) Has been cancelled
Build Release Packages / setup (push) Has been cancelled
Build Release Packages / Dispatch grafana-enterprise build (push) Has been cancelled
Build Release Packages / / darwin-amd64 (push) Has been cancelled
Build Release Packages / / darwin-arm64 (push) Has been cancelled
Build Release Packages / / linux-amd64 (push) Has been cancelled
Build Release Packages / / linux-armv6 (push) Has been cancelled
Build Release Packages / / linux-armv7 (push) Has been cancelled
Build Release Packages / / linux-arm64 (push) Has been cancelled
Build Release Packages / / linux-s390x (push) Has been cancelled
Build Release Packages / / windows-amd64 (push) Has been cancelled
Build Release Packages / / windows-arm64 (push) Has been cancelled
Build Release Packages / Upload artifacts (push) Has been cancelled
Build Release Packages / publish-dockerhub (push) Has been cancelled
Build Release Packages / Publish NPM canaries (push) Has been cancelled
Build Release Packages / notify-pr (push) Has been cancelled
Shellcheck / Shellcheck scripts (push) Has been cancelled
Run Storybook a11y tests / Detect whether code changed (push) Has been cancelled
Run Storybook a11y tests / Run Storybook a11y tests (push) Has been cancelled
Swagger generated code / Detect whether code changed (push) Has been cancelled
Swagger generated code / Verify committed API specs match (push) Has been cancelled
Dispatch sync to mirror / dispatch-job (push) Has been cancelled
publish-technical-documentation-release / sync (push) Has been cancelled
2025-09-23 10:30:15 -05:00
Kevin Minehart
e54fbf6b37 update release-npm and validate script 2025-09-23 09:54:23 -05:00
Jacob Valdez
92f1fba9b4 docs: reorder whats new posts and include plugin translation (#111482) (#111485) 2025-09-23 16:40:24 +02:00
grafana-delivery-bot[bot]
563ca4aa39 Release: Bump version to 12.2.0 (#111346)
bump version 12.2.0

Co-authored-by: grafana-delivery-bot[bot] <grafana-delivery-bot[bot]@users.noreply.github.com>
2025-09-23 09:09:40 -05:00
Jacob Valdez
f1d4c6433b backporting What's New in Grafana 12.2.0 (#111471) 2025-09-23 13:55:37 +02:00
grafana-delivery-bot[bot]
ccf0c5b40e Release: Bump version to 12.2.0 (#111414)
Some checks failed
Actionlint / Lint GitHub Actions files (push) Has been cancelled
Backend Unit Tests / Detect whether code changed (push) Has been cancelled
CodeQL checks / Detect whether code changed (push) Has been cancelled
Lint Frontend / Detect whether code changed (push) Has been cancelled
Lint Frontend / Verify API clients (push) Has been cancelled
Lint Frontend / Verify API clients (enterprise) (push) Has been cancelled
Verify i18n / verify-i18n (push) Has been cancelled
End-to-end tests / Detect whether code changed (push) Has been cancelled
Frontend tests / Detect whether code changed (push) Has been cancelled
Integration Tests / Detect whether code changed (push) Has been cancelled
Reject GitHub secrets / reject-gh-secrets (push) Has been cancelled
Build Release Packages / setup (push) Has been cancelled
Shellcheck / Shellcheck scripts (push) Has been cancelled
Run Storybook a11y tests / Detect whether code changed (push) Has been cancelled
Swagger generated code / Detect whether code changed (push) Has been cancelled
Dispatch sync to mirror / dispatch-job (push) Has been cancelled
Backend Unit Tests / Grafana (1/8) (push) Has been cancelled
Backend Unit Tests / Grafana (2/8) (push) Has been cancelled
Backend Unit Tests / Grafana (3/8) (push) Has been cancelled
Backend Unit Tests / Grafana (4/8) (push) Has been cancelled
Backend Unit Tests / Grafana (5/8) (push) Has been cancelled
Backend Unit Tests / Grafana (6/8) (push) Has been cancelled
Backend Unit Tests / Grafana (7/8) (push) Has been cancelled
Backend Unit Tests / Grafana (8/8) (push) Has been cancelled
Backend Unit Tests / Grafana Enterprise (1/8) (push) Has been cancelled
Backend Unit Tests / Grafana Enterprise (2/8) (push) Has been cancelled
Backend Unit Tests / Grafana Enterprise (3/8) (push) Has been cancelled
Backend Unit Tests / Grafana Enterprise (4/8) (push) Has been cancelled
Backend Unit Tests / Grafana Enterprise (5/8) (push) Has been cancelled
Backend Unit Tests / Grafana Enterprise (6/8) (push) Has been cancelled
Backend Unit Tests / Grafana Enterprise (7/8) (push) Has been cancelled
Backend Unit Tests / Grafana Enterprise (8/8) (push) Has been cancelled
Backend Unit Tests / All backend unit tests complete (push) Has been cancelled
CodeQL checks / Analyze (actions) (push) Has been cancelled
CodeQL checks / Analyze (go) (push) Has been cancelled
CodeQL checks / Analyze (javascript) (push) Has been cancelled
Lint Frontend / Lint (push) Has been cancelled
Lint Frontend / Typecheck (push) Has been cancelled
End-to-end tests / Build & Package Grafana (push) Has been cancelled
End-to-end tests / Build E2E test runner (push) Has been cancelled
End-to-end tests / push-docker-image (push) Has been cancelled
End-to-end tests / dashboards-suite (old arch) (push) Has been cancelled
End-to-end tests / panels-suite (old arch) (push) Has been cancelled
End-to-end tests / smoke-tests-suite (old arch) (push) Has been cancelled
End-to-end tests / various-suite (old arch) (push) Has been cancelled
End-to-end tests / various-suite (push) Has been cancelled
End-to-end tests / Verify Storybook (Playwright) (push) Has been cancelled
End-to-end tests / Playwright E2E tests (1/8) (push) Has been cancelled
End-to-end tests / Playwright E2E tests (2/8) (push) Has been cancelled
End-to-end tests / Playwright E2E tests (3/8) (push) Has been cancelled
End-to-end tests / Playwright E2E tests (4/8) (push) Has been cancelled
End-to-end tests / Playwright E2E tests (5/8) (push) Has been cancelled
End-to-end tests / Playwright E2E tests (6/8) (push) Has been cancelled
End-to-end tests / Playwright E2E tests (7/8) (push) Has been cancelled
End-to-end tests / Playwright E2E tests (8/8) (push) Has been cancelled
End-to-end tests / run-azure-monitor-e2e (push) Has been cancelled
End-to-end tests / All Playwright tests complete (push) Has been cancelled
End-to-end tests / A11y test (push) Has been cancelled
End-to-end tests / Publish metrics (push) Has been cancelled
End-to-end tests / All E2E tests complete (push) Has been cancelled
Frontend tests / Unit tests (1 / 16) (push) Has been cancelled
Frontend tests / Unit tests (10 / 16) (push) Has been cancelled
Frontend tests / Unit tests (11 / 16) (push) Has been cancelled
Frontend tests / Unit tests (12 / 16) (push) Has been cancelled
Frontend tests / Unit tests (13 / 16) (push) Has been cancelled
Frontend tests / Unit tests (14 / 16) (push) Has been cancelled
Frontend tests / Unit tests (15 / 16) (push) Has been cancelled
Frontend tests / Unit tests (16 / 16) (push) Has been cancelled
Frontend tests / Unit tests (2 / 16) (push) Has been cancelled
Frontend tests / Unit tests (3 / 16) (push) Has been cancelled
Frontend tests / Unit tests (4 / 16) (push) Has been cancelled
Frontend tests / Unit tests (5 / 16) (push) Has been cancelled
Frontend tests / Unit tests (6 / 16) (push) Has been cancelled
Frontend tests / Unit tests (7 / 16) (push) Has been cancelled
Frontend tests / Unit tests (8 / 16) (push) Has been cancelled
Frontend tests / Unit tests (9 / 16) (push) Has been cancelled
Frontend tests / Decoupled plugin tests (push) Has been cancelled
Frontend tests / Packages unit tests (push) Has been cancelled
Frontend tests / All frontend unit tests complete (push) Has been cancelled
Integration Tests / Sqlite (1/4) (push) Has been cancelled
Integration Tests / Sqlite (2/4) (push) Has been cancelled
Integration Tests / Sqlite (3/4) (push) Has been cancelled
Integration Tests / Sqlite (4/4) (push) Has been cancelled
Integration Tests / Sqlite Without CGo (1/4) (push) Has been cancelled
Integration Tests / Sqlite Without CGo (2/4) (push) Has been cancelled
Integration Tests / Sqlite Without CGo (3/4) (push) Has been cancelled
Integration Tests / Sqlite Without CGo (4/4) (push) Has been cancelled
Integration Tests / MySQL (1/16) (push) Has been cancelled
Integration Tests / MySQL (10/16) (push) Has been cancelled
Integration Tests / MySQL (11/16) (push) Has been cancelled
Integration Tests / MySQL (12/16) (push) Has been cancelled
Integration Tests / MySQL (13/16) (push) Has been cancelled
Integration Tests / MySQL (14/16) (push) Has been cancelled
Integration Tests / MySQL (15/16) (push) Has been cancelled
Integration Tests / MySQL (16/16) (push) Has been cancelled
Integration Tests / MySQL (2/16) (push) Has been cancelled
Integration Tests / MySQL (3/16) (push) Has been cancelled
Integration Tests / MySQL (4/16) (push) Has been cancelled
Integration Tests / MySQL (5/16) (push) Has been cancelled
Integration Tests / MySQL (6/16) (push) Has been cancelled
Integration Tests / MySQL (7/16) (push) Has been cancelled
Integration Tests / MySQL (8/16) (push) Has been cancelled
Integration Tests / MySQL (9/16) (push) Has been cancelled
Integration Tests / Postgres (1/16) (push) Has been cancelled
Integration Tests / Postgres (10/16) (push) Has been cancelled
Integration Tests / Postgres (11/16) (push) Has been cancelled
Integration Tests / Postgres (12/16) (push) Has been cancelled
Integration Tests / Postgres (13/16) (push) Has been cancelled
Integration Tests / Postgres (14/16) (push) Has been cancelled
Integration Tests / Postgres (15/16) (push) Has been cancelled
Integration Tests / Postgres (16/16) (push) Has been cancelled
Integration Tests / Postgres (2/16) (push) Has been cancelled
Integration Tests / Postgres (3/16) (push) Has been cancelled
Integration Tests / Postgres (4/16) (push) Has been cancelled
Integration Tests / Postgres (5/16) (push) Has been cancelled
Integration Tests / Postgres (6/16) (push) Has been cancelled
Integration Tests / Postgres (7/16) (push) Has been cancelled
Integration Tests / Postgres (8/16) (push) Has been cancelled
Integration Tests / Postgres (9/16) (push) Has been cancelled
Integration Tests / All backend integration tests complete (push) Has been cancelled
Build Release Packages / Dispatch grafana-enterprise build (push) Has been cancelled
Build Release Packages / / darwin-amd64 (push) Has been cancelled
Build Release Packages / / darwin-arm64 (push) Has been cancelled
Build Release Packages / / linux-amd64 (push) Has been cancelled
Build Release Packages / / linux-armv6 (push) Has been cancelled
Build Release Packages / / linux-armv7 (push) Has been cancelled
Build Release Packages / / linux-arm64 (push) Has been cancelled
Build Release Packages / / linux-s390x (push) Has been cancelled
Build Release Packages / / windows-amd64 (push) Has been cancelled
Build Release Packages / / windows-arm64 (push) Has been cancelled
Build Release Packages / Upload artifacts (push) Has been cancelled
Build Release Packages / publish-dockerhub (push) Has been cancelled
Build Release Packages / Publish NPM canaries (push) Has been cancelled
Build Release Packages / notify-pr (push) Has been cancelled
Run Storybook a11y tests / Run Storybook a11y tests (push) Has been cancelled
Swagger generated code / Verify committed API specs match (push) Has been cancelled
bump version 12.2.0

Co-authored-by: grafana-delivery-bot[bot] <grafana-delivery-bot[bot]@users.noreply.github.com>
2025-09-19 13:59:49 -05:00
Josh Hunt
6569f64267 [release-12.2.0] CI: Backport release-npm.yml (#111395)
backport release-npm.yml from main
2025-09-19 18:31:45 +01:00
Josh Hunt
1cc2a4cbe7 [release-12.2.0] CI: Fix NPM workflow inputs (#111352)
Some checks failed
Actionlint / Lint GitHub Actions files (push) Has been cancelled
Backend Unit Tests / Detect whether code changed (push) Has been cancelled
Backend Unit Tests / Grafana (1/8) (push) Has been cancelled
Backend Unit Tests / Grafana (2/8) (push) Has been cancelled
Backend Unit Tests / Grafana (3/8) (push) Has been cancelled
Backend Unit Tests / Grafana (4/8) (push) Has been cancelled
Backend Unit Tests / Grafana (5/8) (push) Has been cancelled
Backend Unit Tests / Grafana (6/8) (push) Has been cancelled
Backend Unit Tests / Grafana (7/8) (push) Has been cancelled
Backend Unit Tests / Grafana (8/8) (push) Has been cancelled
Backend Unit Tests / Grafana Enterprise (1/8) (push) Has been cancelled
Backend Unit Tests / Grafana Enterprise (2/8) (push) Has been cancelled
Backend Unit Tests / Grafana Enterprise (3/8) (push) Has been cancelled
Backend Unit Tests / Grafana Enterprise (4/8) (push) Has been cancelled
Backend Unit Tests / Grafana Enterprise (5/8) (push) Has been cancelled
Backend Unit Tests / Grafana Enterprise (6/8) (push) Has been cancelled
Backend Unit Tests / Grafana Enterprise (7/8) (push) Has been cancelled
Backend Unit Tests / Grafana Enterprise (8/8) (push) Has been cancelled
Backend Unit Tests / All backend unit tests complete (push) Has been cancelled
Lint Frontend / Detect whether code changed (push) Has been cancelled
Lint Frontend / Lint (push) Has been cancelled
Lint Frontend / Typecheck (push) Has been cancelled
Lint Frontend / Verify API clients (push) Has been cancelled
Lint Frontend / Verify API clients (enterprise) (push) Has been cancelled
Verify i18n / verify-i18n (push) Has been cancelled
End-to-end tests / Detect whether code changed (push) Has been cancelled
End-to-end tests / Build & Package Grafana (push) Has been cancelled
End-to-end tests / Build E2E test runner (push) Has been cancelled
End-to-end tests / push-docker-image (push) Has been cancelled
End-to-end tests / dashboards-suite (old arch) (push) Has been cancelled
End-to-end tests / panels-suite (old arch) (push) Has been cancelled
End-to-end tests / smoke-tests-suite (old arch) (push) Has been cancelled
End-to-end tests / various-suite (old arch) (push) Has been cancelled
End-to-end tests / various-suite (push) Has been cancelled
End-to-end tests / Verify Storybook (Playwright) (push) Has been cancelled
End-to-end tests / Playwright E2E tests (1/8) (push) Has been cancelled
End-to-end tests / Playwright E2E tests (2/8) (push) Has been cancelled
End-to-end tests / Playwright E2E tests (3/8) (push) Has been cancelled
End-to-end tests / Playwright E2E tests (4/8) (push) Has been cancelled
End-to-end tests / Playwright E2E tests (5/8) (push) Has been cancelled
End-to-end tests / Playwright E2E tests (6/8) (push) Has been cancelled
End-to-end tests / Playwright E2E tests (7/8) (push) Has been cancelled
End-to-end tests / Playwright E2E tests (8/8) (push) Has been cancelled
End-to-end tests / run-azure-monitor-e2e (push) Has been cancelled
End-to-end tests / All Playwright tests complete (push) Has been cancelled
End-to-end tests / A11y test (push) Has been cancelled
End-to-end tests / Publish metrics (push) Has been cancelled
End-to-end tests / All E2E tests complete (push) Has been cancelled
Frontend tests / Detect whether code changed (push) Has been cancelled
Frontend tests / Unit tests (1 / 16) (push) Has been cancelled
Frontend tests / Unit tests (10 / 16) (push) Has been cancelled
Frontend tests / Unit tests (11 / 16) (push) Has been cancelled
Frontend tests / Unit tests (12 / 16) (push) Has been cancelled
Frontend tests / Unit tests (13 / 16) (push) Has been cancelled
Frontend tests / Unit tests (14 / 16) (push) Has been cancelled
Frontend tests / Unit tests (15 / 16) (push) Has been cancelled
Frontend tests / Unit tests (16 / 16) (push) Has been cancelled
Frontend tests / Unit tests (2 / 16) (push) Has been cancelled
Frontend tests / Unit tests (3 / 16) (push) Has been cancelled
Frontend tests / Unit tests (4 / 16) (push) Has been cancelled
Frontend tests / Unit tests (5 / 16) (push) Has been cancelled
Frontend tests / Unit tests (6 / 16) (push) Has been cancelled
Frontend tests / Unit tests (7 / 16) (push) Has been cancelled
Frontend tests / Unit tests (8 / 16) (push) Has been cancelled
Frontend tests / Unit tests (9 / 16) (push) Has been cancelled
Frontend tests / Decoupled plugin tests (push) Has been cancelled
Frontend tests / Packages unit tests (push) Has been cancelled
Frontend tests / All frontend unit tests complete (push) Has been cancelled
Integration Tests / Detect whether code changed (push) Has been cancelled
Integration Tests / Sqlite (1/4) (push) Has been cancelled
Integration Tests / Sqlite (2/4) (push) Has been cancelled
Integration Tests / Sqlite (3/4) (push) Has been cancelled
Integration Tests / Sqlite (4/4) (push) Has been cancelled
Integration Tests / Sqlite Without CGo (1/4) (push) Has been cancelled
Integration Tests / Sqlite Without CGo (2/4) (push) Has been cancelled
Integration Tests / Sqlite Without CGo (3/4) (push) Has been cancelled
Integration Tests / Sqlite Without CGo (4/4) (push) Has been cancelled
Integration Tests / MySQL (1/16) (push) Has been cancelled
Integration Tests / MySQL (10/16) (push) Has been cancelled
Integration Tests / MySQL (11/16) (push) Has been cancelled
Integration Tests / MySQL (12/16) (push) Has been cancelled
Integration Tests / MySQL (13/16) (push) Has been cancelled
Integration Tests / MySQL (14/16) (push) Has been cancelled
Integration Tests / MySQL (15/16) (push) Has been cancelled
Integration Tests / MySQL (16/16) (push) Has been cancelled
Integration Tests / MySQL (2/16) (push) Has been cancelled
Integration Tests / MySQL (3/16) (push) Has been cancelled
Integration Tests / MySQL (4/16) (push) Has been cancelled
Integration Tests / MySQL (5/16) (push) Has been cancelled
Integration Tests / MySQL (6/16) (push) Has been cancelled
Integration Tests / MySQL (7/16) (push) Has been cancelled
Integration Tests / MySQL (8/16) (push) Has been cancelled
Integration Tests / MySQL (9/16) (push) Has been cancelled
Integration Tests / Postgres (1/16) (push) Has been cancelled
Integration Tests / Postgres (10/16) (push) Has been cancelled
Integration Tests / Postgres (11/16) (push) Has been cancelled
Integration Tests / Postgres (12/16) (push) Has been cancelled
Integration Tests / Postgres (13/16) (push) Has been cancelled
Integration Tests / Postgres (14/16) (push) Has been cancelled
Integration Tests / Postgres (15/16) (push) Has been cancelled
Integration Tests / Postgres (16/16) (push) Has been cancelled
Integration Tests / Postgres (2/16) (push) Has been cancelled
Integration Tests / Postgres (3/16) (push) Has been cancelled
Integration Tests / Postgres (4/16) (push) Has been cancelled
Integration Tests / Postgres (5/16) (push) Has been cancelled
Integration Tests / Postgres (6/16) (push) Has been cancelled
Integration Tests / Postgres (7/16) (push) Has been cancelled
Integration Tests / Postgres (8/16) (push) Has been cancelled
Integration Tests / Postgres (9/16) (push) Has been cancelled
Integration Tests / All backend integration tests complete (push) Has been cancelled
Reject GitHub secrets / reject-gh-secrets (push) Has been cancelled
Build Release Packages / setup (push) Has been cancelled
Build Release Packages / Dispatch grafana-enterprise build (push) Has been cancelled
Build Release Packages / / darwin-amd64 (push) Has been cancelled
Build Release Packages / / darwin-arm64 (push) Has been cancelled
Build Release Packages / / linux-amd64 (push) Has been cancelled
Build Release Packages / / linux-armv6 (push) Has been cancelled
Build Release Packages / / linux-armv7 (push) Has been cancelled
Build Release Packages / / linux-arm64 (push) Has been cancelled
Build Release Packages / / linux-s390x (push) Has been cancelled
Build Release Packages / / windows-amd64 (push) Has been cancelled
Build Release Packages / / windows-arm64 (push) Has been cancelled
Build Release Packages / Upload artifacts (push) Has been cancelled
Build Release Packages / publish-dockerhub (push) Has been cancelled
Build Release Packages / Publish NPM canaries (push) Has been cancelled
Build Release Packages / notify-pr (push) Has been cancelled
Shellcheck / Shellcheck scripts (push) Has been cancelled
Run Storybook a11y tests / Detect whether code changed (push) Has been cancelled
Run Storybook a11y tests / Run Storybook a11y tests (push) Has been cancelled
Swagger generated code / Detect whether code changed (push) Has been cancelled
Swagger generated code / Verify committed API specs match (push) Has been cancelled
Dispatch sync to mirror / dispatch-job (push) Has been cancelled
Fix referring to inputs (#111345)

(cherry picked from commit 1d6c1da94f)
2025-09-18 23:26:53 +01:00
Kevin Minehart
93c9887bc4 [release-12.2.0] backport bump-version.yml and release-build.yml (#111340)
* [release-12.2.0] backport bump-version.yml and release-build.yml

* add release-npm.yml
2025-09-18 16:57:26 -05:00
Ashley Harrison
66d8379061 [release-12.2.0] Chore: bump axios to a version without CVE (#111113)
Some checks failed
Actionlint / Lint GitHub Actions files (push) Has been cancelled
Backend Unit Tests / Detect whether code changed (push) Has been cancelled
CodeQL checks / Detect whether code changed (push) Has been cancelled
Lint Frontend / Detect whether code changed (push) Has been cancelled
Lint Frontend / Verify API clients (push) Has been cancelled
Lint Frontend / Verify API clients (enterprise) (push) Has been cancelled
Verify i18n / verify-i18n (push) Has been cancelled
End-to-end tests / Detect whether code changed (push) Has been cancelled
Frontend tests / Detect whether code changed (push) Has been cancelled
Integration Tests / Detect whether code changed (push) Has been cancelled
Reject GitHub secrets / reject-gh-secrets (push) Has been cancelled
Build Release Packages / setup (push) Has been cancelled
Shellcheck / Shellcheck scripts (push) Has been cancelled
Run Storybook a11y tests / Detect whether code changed (push) Has been cancelled
Swagger generated code / Detect whether code changed (push) Has been cancelled
Dispatch sync to mirror / dispatch-job (push) Has been cancelled
Backend Unit Tests / Grafana (1/8) (push) Has been cancelled
Backend Unit Tests / Grafana (2/8) (push) Has been cancelled
Backend Unit Tests / Grafana (3/8) (push) Has been cancelled
Backend Unit Tests / Grafana (4/8) (push) Has been cancelled
Backend Unit Tests / Grafana (5/8) (push) Has been cancelled
Backend Unit Tests / Grafana (6/8) (push) Has been cancelled
Backend Unit Tests / Grafana (7/8) (push) Has been cancelled
Backend Unit Tests / Grafana (8/8) (push) Has been cancelled
Backend Unit Tests / Grafana Enterprise (1/8) (push) Has been cancelled
Backend Unit Tests / Grafana Enterprise (2/8) (push) Has been cancelled
Backend Unit Tests / Grafana Enterprise (3/8) (push) Has been cancelled
Backend Unit Tests / Grafana Enterprise (4/8) (push) Has been cancelled
Backend Unit Tests / Grafana Enterprise (5/8) (push) Has been cancelled
Backend Unit Tests / Grafana Enterprise (6/8) (push) Has been cancelled
Backend Unit Tests / Grafana Enterprise (7/8) (push) Has been cancelled
Backend Unit Tests / Grafana Enterprise (8/8) (push) Has been cancelled
Backend Unit Tests / All backend unit tests complete (push) Has been cancelled
CodeQL checks / Analyze (actions) (push) Has been cancelled
CodeQL checks / Analyze (go) (push) Has been cancelled
CodeQL checks / Analyze (javascript) (push) Has been cancelled
Lint Frontend / Lint (push) Has been cancelled
Lint Frontend / Typecheck (push) Has been cancelled
End-to-end tests / Build & Package Grafana (push) Has been cancelled
End-to-end tests / Build E2E test runner (push) Has been cancelled
End-to-end tests / push-docker-image (push) Has been cancelled
End-to-end tests / dashboards-suite (old arch) (push) Has been cancelled
End-to-end tests / panels-suite (old arch) (push) Has been cancelled
End-to-end tests / smoke-tests-suite (old arch) (push) Has been cancelled
End-to-end tests / various-suite (old arch) (push) Has been cancelled
End-to-end tests / various-suite (push) Has been cancelled
End-to-end tests / Verify Storybook (Playwright) (push) Has been cancelled
End-to-end tests / Playwright E2E tests (1/8) (push) Has been cancelled
End-to-end tests / Playwright E2E tests (2/8) (push) Has been cancelled
End-to-end tests / Playwright E2E tests (3/8) (push) Has been cancelled
End-to-end tests / Playwright E2E tests (4/8) (push) Has been cancelled
End-to-end tests / Playwright E2E tests (5/8) (push) Has been cancelled
End-to-end tests / Playwright E2E tests (6/8) (push) Has been cancelled
End-to-end tests / Playwright E2E tests (7/8) (push) Has been cancelled
End-to-end tests / Playwright E2E tests (8/8) (push) Has been cancelled
End-to-end tests / run-azure-monitor-e2e (push) Has been cancelled
End-to-end tests / All Playwright tests complete (push) Has been cancelled
End-to-end tests / A11y test (push) Has been cancelled
End-to-end tests / Publish metrics (push) Has been cancelled
End-to-end tests / All E2E tests complete (push) Has been cancelled
Frontend tests / Unit tests (1 / 16) (push) Has been cancelled
Frontend tests / Unit tests (10 / 16) (push) Has been cancelled
Frontend tests / Unit tests (11 / 16) (push) Has been cancelled
Frontend tests / Unit tests (12 / 16) (push) Has been cancelled
Frontend tests / Unit tests (13 / 16) (push) Has been cancelled
Frontend tests / Unit tests (14 / 16) (push) Has been cancelled
Frontend tests / Unit tests (15 / 16) (push) Has been cancelled
Frontend tests / Unit tests (16 / 16) (push) Has been cancelled
Frontend tests / Unit tests (2 / 16) (push) Has been cancelled
Frontend tests / Unit tests (3 / 16) (push) Has been cancelled
Frontend tests / Unit tests (4 / 16) (push) Has been cancelled
Frontend tests / Unit tests (5 / 16) (push) Has been cancelled
Frontend tests / Unit tests (6 / 16) (push) Has been cancelled
Frontend tests / Unit tests (7 / 16) (push) Has been cancelled
Frontend tests / Unit tests (8 / 16) (push) Has been cancelled
Frontend tests / Unit tests (9 / 16) (push) Has been cancelled
Frontend tests / Decoupled plugin tests (push) Has been cancelled
Frontend tests / Packages unit tests (push) Has been cancelled
Frontend tests / All frontend unit tests complete (push) Has been cancelled
Integration Tests / Sqlite (1/4) (push) Has been cancelled
Integration Tests / Sqlite (2/4) (push) Has been cancelled
Integration Tests / Sqlite (3/4) (push) Has been cancelled
Integration Tests / Sqlite (4/4) (push) Has been cancelled
Integration Tests / Sqlite Without CGo (1/4) (push) Has been cancelled
Integration Tests / Sqlite Without CGo (2/4) (push) Has been cancelled
Integration Tests / Sqlite Without CGo (3/4) (push) Has been cancelled
Integration Tests / Sqlite Without CGo (4/4) (push) Has been cancelled
Integration Tests / MySQL (1/16) (push) Has been cancelled
Integration Tests / MySQL (10/16) (push) Has been cancelled
Integration Tests / MySQL (11/16) (push) Has been cancelled
Integration Tests / MySQL (12/16) (push) Has been cancelled
Integration Tests / MySQL (13/16) (push) Has been cancelled
Integration Tests / MySQL (14/16) (push) Has been cancelled
Integration Tests / MySQL (15/16) (push) Has been cancelled
Integration Tests / MySQL (16/16) (push) Has been cancelled
Integration Tests / MySQL (2/16) (push) Has been cancelled
Integration Tests / MySQL (3/16) (push) Has been cancelled
Integration Tests / MySQL (4/16) (push) Has been cancelled
Integration Tests / MySQL (5/16) (push) Has been cancelled
Integration Tests / MySQL (6/16) (push) Has been cancelled
Integration Tests / MySQL (7/16) (push) Has been cancelled
Integration Tests / MySQL (8/16) (push) Has been cancelled
Integration Tests / MySQL (9/16) (push) Has been cancelled
Integration Tests / Postgres (1/16) (push) Has been cancelled
Integration Tests / Postgres (10/16) (push) Has been cancelled
Integration Tests / Postgres (11/16) (push) Has been cancelled
Integration Tests / Postgres (12/16) (push) Has been cancelled
Integration Tests / Postgres (13/16) (push) Has been cancelled
Integration Tests / Postgres (14/16) (push) Has been cancelled
Integration Tests / Postgres (15/16) (push) Has been cancelled
Integration Tests / Postgres (16/16) (push) Has been cancelled
Integration Tests / Postgres (2/16) (push) Has been cancelled
Integration Tests / Postgres (3/16) (push) Has been cancelled
Integration Tests / Postgres (4/16) (push) Has been cancelled
Integration Tests / Postgres (5/16) (push) Has been cancelled
Integration Tests / Postgres (6/16) (push) Has been cancelled
Integration Tests / Postgres (7/16) (push) Has been cancelled
Integration Tests / Postgres (8/16) (push) Has been cancelled
Integration Tests / Postgres (9/16) (push) Has been cancelled
Integration Tests / All backend integration tests complete (push) Has been cancelled
Build Release Packages / Dispatch grafana-enterprise build (push) Has been cancelled
Build Release Packages / / darwin-amd64 (push) Has been cancelled
Build Release Packages / / darwin-arm64 (push) Has been cancelled
Build Release Packages / / linux-amd64 (push) Has been cancelled
Build Release Packages / / linux-armv6 (push) Has been cancelled
Build Release Packages / / linux-armv7 (push) Has been cancelled
Build Release Packages / / linux-arm64 (push) Has been cancelled
Build Release Packages / / linux-s390x (push) Has been cancelled
Build Release Packages / / windows-amd64 (push) Has been cancelled
Build Release Packages / / windows-arm64 (push) Has been cancelled
Build Release Packages / Upload artifacts (push) Has been cancelled
Build Release Packages / publish-dockerhub (push) Has been cancelled
Run Storybook a11y tests / Run Storybook a11y tests (push) Has been cancelled
Swagger generated code / Verify committed API specs match (push) Has been cancelled
Chore: bump `axios` to a version without CVE (#111076)

bump axios to a version without CVE

(cherry picked from commit 7bba151416)
2025-09-15 16:25:59 +01:00
Adela Almasan
7e708e5976 [release-12.2.0] Actions: Add permission check to missing panels (#111115) 2025-09-15 09:55:11 -05:00
Luminessa Starlight
a9f59cf340 [release-12.2.0]: Accessibility: enable responsive reflow of variables in dashboard edit (#111032)
Accessibility: enable responsive reflow of variables in dashboard edit (#110967)

enable responsive reflow of variables in dashboard edit
2025-09-15 10:46:52 -04:00
Ashley Harrison
02fadf48fc Geomap: Only prefix with grafana public path if relative url (#111081) (#111108)
only prefix with grafana public path if relative url
2025-09-15 15:42:53 +01:00
grafana-delivery-bot[bot]
496911e716 [release-12.2.0] Table: Restore previous footer behavior of reducers applying to filtered data (#111050)
Some checks failed
Actionlint / Lint GitHub Actions files (push) Has been cancelled
Backend Unit Tests / Detect whether code changed (push) Has been cancelled
CodeQL checks / Detect whether code changed (push) Has been cancelled
Lint Frontend / Detect whether code changed (push) Has been cancelled
Lint Frontend / Verify API clients (push) Has been cancelled
Lint Frontend / Verify API clients (enterprise) (push) Has been cancelled
Verify i18n / verify-i18n (push) Has been cancelled
End-to-end tests / Detect whether code changed (push) Has been cancelled
Frontend tests / Detect whether code changed (push) Has been cancelled
Integration Tests / Detect whether code changed (push) Has been cancelled
Reject GitHub secrets / reject-gh-secrets (push) Has been cancelled
Build Release Packages / setup (push) Has been cancelled
Shellcheck / Shellcheck scripts (push) Has been cancelled
Run Storybook a11y tests / Detect whether code changed (push) Has been cancelled
Swagger generated code / Detect whether code changed (push) Has been cancelled
Dispatch sync to mirror / dispatch-job (push) Has been cancelled
Backend Unit Tests / Grafana (1/8) (push) Has been cancelled
Backend Unit Tests / Grafana (2/8) (push) Has been cancelled
Backend Unit Tests / Grafana (3/8) (push) Has been cancelled
Backend Unit Tests / Grafana (4/8) (push) Has been cancelled
Backend Unit Tests / Grafana (5/8) (push) Has been cancelled
Backend Unit Tests / Grafana (6/8) (push) Has been cancelled
Backend Unit Tests / Grafana (7/8) (push) Has been cancelled
Backend Unit Tests / Grafana (8/8) (push) Has been cancelled
Backend Unit Tests / Grafana Enterprise (1/8) (push) Has been cancelled
Backend Unit Tests / Grafana Enterprise (2/8) (push) Has been cancelled
Backend Unit Tests / Grafana Enterprise (3/8) (push) Has been cancelled
Backend Unit Tests / Grafana Enterprise (4/8) (push) Has been cancelled
Backend Unit Tests / Grafana Enterprise (5/8) (push) Has been cancelled
Backend Unit Tests / Grafana Enterprise (6/8) (push) Has been cancelled
Backend Unit Tests / Grafana Enterprise (7/8) (push) Has been cancelled
Backend Unit Tests / Grafana Enterprise (8/8) (push) Has been cancelled
Backend Unit Tests / All backend unit tests complete (push) Has been cancelled
CodeQL checks / Analyze (actions) (push) Has been cancelled
CodeQL checks / Analyze (go) (push) Has been cancelled
CodeQL checks / Analyze (javascript) (push) Has been cancelled
Lint Frontend / Lint (push) Has been cancelled
Lint Frontend / Typecheck (push) Has been cancelled
End-to-end tests / Build & Package Grafana (push) Has been cancelled
End-to-end tests / Build E2E test runner (push) Has been cancelled
End-to-end tests / push-docker-image (push) Has been cancelled
End-to-end tests / dashboards-suite (old arch) (push) Has been cancelled
End-to-end tests / panels-suite (old arch) (push) Has been cancelled
End-to-end tests / smoke-tests-suite (old arch) (push) Has been cancelled
End-to-end tests / various-suite (old arch) (push) Has been cancelled
End-to-end tests / various-suite (push) Has been cancelled
End-to-end tests / Verify Storybook (Playwright) (push) Has been cancelled
End-to-end tests / Playwright E2E tests (1/8) (push) Has been cancelled
End-to-end tests / Playwright E2E tests (2/8) (push) Has been cancelled
End-to-end tests / Playwright E2E tests (3/8) (push) Has been cancelled
End-to-end tests / Playwright E2E tests (4/8) (push) Has been cancelled
End-to-end tests / Playwright E2E tests (5/8) (push) Has been cancelled
End-to-end tests / Playwright E2E tests (6/8) (push) Has been cancelled
End-to-end tests / Playwright E2E tests (7/8) (push) Has been cancelled
End-to-end tests / Playwright E2E tests (8/8) (push) Has been cancelled
End-to-end tests / run-azure-monitor-e2e (push) Has been cancelled
End-to-end tests / All Playwright tests complete (push) Has been cancelled
End-to-end tests / A11y test (push) Has been cancelled
End-to-end tests / Publish metrics (push) Has been cancelled
End-to-end tests / All E2E tests complete (push) Has been cancelled
Frontend tests / Unit tests (1 / 16) (push) Has been cancelled
Frontend tests / Unit tests (10 / 16) (push) Has been cancelled
Frontend tests / Unit tests (11 / 16) (push) Has been cancelled
Frontend tests / Unit tests (12 / 16) (push) Has been cancelled
Frontend tests / Unit tests (13 / 16) (push) Has been cancelled
Frontend tests / Unit tests (14 / 16) (push) Has been cancelled
Frontend tests / Unit tests (15 / 16) (push) Has been cancelled
Frontend tests / Unit tests (16 / 16) (push) Has been cancelled
Frontend tests / Unit tests (2 / 16) (push) Has been cancelled
Frontend tests / Unit tests (3 / 16) (push) Has been cancelled
Frontend tests / Unit tests (4 / 16) (push) Has been cancelled
Frontend tests / Unit tests (5 / 16) (push) Has been cancelled
Frontend tests / Unit tests (6 / 16) (push) Has been cancelled
Frontend tests / Unit tests (7 / 16) (push) Has been cancelled
Frontend tests / Unit tests (8 / 16) (push) Has been cancelled
Frontend tests / Unit tests (9 / 16) (push) Has been cancelled
Frontend tests / Decoupled plugin tests (push) Has been cancelled
Frontend tests / Packages unit tests (push) Has been cancelled
Frontend tests / All frontend unit tests complete (push) Has been cancelled
Integration Tests / Sqlite (1/4) (push) Has been cancelled
Integration Tests / Sqlite (2/4) (push) Has been cancelled
Integration Tests / Sqlite (3/4) (push) Has been cancelled
Integration Tests / Sqlite (4/4) (push) Has been cancelled
Integration Tests / Sqlite Without CGo (1/4) (push) Has been cancelled
Integration Tests / Sqlite Without CGo (2/4) (push) Has been cancelled
Integration Tests / Sqlite Without CGo (3/4) (push) Has been cancelled
Integration Tests / Sqlite Without CGo (4/4) (push) Has been cancelled
Integration Tests / MySQL (1/16) (push) Has been cancelled
Integration Tests / MySQL (10/16) (push) Has been cancelled
Integration Tests / MySQL (11/16) (push) Has been cancelled
Integration Tests / MySQL (12/16) (push) Has been cancelled
Integration Tests / MySQL (13/16) (push) Has been cancelled
Integration Tests / MySQL (14/16) (push) Has been cancelled
Integration Tests / MySQL (15/16) (push) Has been cancelled
Integration Tests / MySQL (16/16) (push) Has been cancelled
Integration Tests / MySQL (2/16) (push) Has been cancelled
Integration Tests / MySQL (3/16) (push) Has been cancelled
Integration Tests / MySQL (4/16) (push) Has been cancelled
Integration Tests / MySQL (5/16) (push) Has been cancelled
Integration Tests / MySQL (6/16) (push) Has been cancelled
Integration Tests / MySQL (7/16) (push) Has been cancelled
Integration Tests / MySQL (8/16) (push) Has been cancelled
Integration Tests / MySQL (9/16) (push) Has been cancelled
Integration Tests / Postgres (1/16) (push) Has been cancelled
Integration Tests / Postgres (10/16) (push) Has been cancelled
Integration Tests / Postgres (11/16) (push) Has been cancelled
Integration Tests / Postgres (12/16) (push) Has been cancelled
Integration Tests / Postgres (13/16) (push) Has been cancelled
Integration Tests / Postgres (14/16) (push) Has been cancelled
Integration Tests / Postgres (15/16) (push) Has been cancelled
Integration Tests / Postgres (16/16) (push) Has been cancelled
Integration Tests / Postgres (2/16) (push) Has been cancelled
Integration Tests / Postgres (3/16) (push) Has been cancelled
Integration Tests / Postgres (4/16) (push) Has been cancelled
Integration Tests / Postgres (5/16) (push) Has been cancelled
Integration Tests / Postgres (6/16) (push) Has been cancelled
Integration Tests / Postgres (7/16) (push) Has been cancelled
Integration Tests / Postgres (8/16) (push) Has been cancelled
Integration Tests / Postgres (9/16) (push) Has been cancelled
Integration Tests / All backend integration tests complete (push) Has been cancelled
Build Release Packages / Dispatch grafana-enterprise build (push) Has been cancelled
Build Release Packages / / darwin-amd64 (push) Has been cancelled
Build Release Packages / / darwin-arm64 (push) Has been cancelled
Build Release Packages / / linux-amd64 (push) Has been cancelled
Build Release Packages / / linux-armv6 (push) Has been cancelled
Build Release Packages / / linux-armv7 (push) Has been cancelled
Build Release Packages / / linux-arm64 (push) Has been cancelled
Build Release Packages / / linux-s390x (push) Has been cancelled
Build Release Packages / / windows-amd64 (push) Has been cancelled
Build Release Packages / / windows-arm64 (push) Has been cancelled
Build Release Packages / Upload artifacts (push) Has been cancelled
Build Release Packages / publish-dockerhub (push) Has been cancelled
Run Storybook a11y tests / Run Storybook a11y tests (push) Has been cancelled
Swagger generated code / Verify committed API specs match (push) Has been cancelled
Table: Restore previous footer behavior of reducers applying to filtered data (#111041)

* Table: Restore previous footer behavior of reducers applying to filtered data

* update e2e to match new behavior

(cherry picked from commit f258d8a417)

Co-authored-by: Paul Marbach <paul.marbach@grafana.com>
2025-09-12 19:10:29 -04:00
grafana-delivery-bot[bot]
6d8ad119bf [release-12.2.0] Table: Fix logic to calculate footer height (#111049)
Table: Fix logic to calculate footer height (#110954)

* Table: Fix logic to calculate footer height

* add non-numeric footer case to gdev

* Update packages/grafana-ui/src/components/Table/TableNG/utils.ts



* Update packages/grafana-ui/src/components/Table/TableNG/TableNG.tsx



---------


(cherry picked from commit cb37539ed7)

Co-authored-by: Paul Marbach <paul.marbach@grafana.com>
Co-authored-by: Leon Sorokin <leeoniya@gmail.com>
2025-09-12 17:51:37 -04:00
Kevin Minehart
49f78c15e8 [release-12.2.0] CI: fix bump version action to use grafana-delivery-bot (#110976) (#110981)
Some checks failed
Actionlint / Lint GitHub Actions files (push) Has been cancelled
Backend Unit Tests / Detect whether code changed (push) Has been cancelled
Backend Unit Tests / Grafana (1/8) (push) Has been cancelled
Backend Unit Tests / Grafana (2/8) (push) Has been cancelled
Backend Unit Tests / Grafana (3/8) (push) Has been cancelled
Backend Unit Tests / Grafana (4/8) (push) Has been cancelled
Backend Unit Tests / Grafana (5/8) (push) Has been cancelled
Backend Unit Tests / Grafana (6/8) (push) Has been cancelled
Backend Unit Tests / Grafana (7/8) (push) Has been cancelled
Backend Unit Tests / Grafana (8/8) (push) Has been cancelled
Backend Unit Tests / Grafana Enterprise (1/8) (push) Has been cancelled
Backend Unit Tests / Grafana Enterprise (2/8) (push) Has been cancelled
Backend Unit Tests / Grafana Enterprise (3/8) (push) Has been cancelled
Backend Unit Tests / Grafana Enterprise (4/8) (push) Has been cancelled
Backend Unit Tests / Grafana Enterprise (5/8) (push) Has been cancelled
Backend Unit Tests / Grafana Enterprise (6/8) (push) Has been cancelled
Backend Unit Tests / Grafana Enterprise (7/8) (push) Has been cancelled
Backend Unit Tests / Grafana Enterprise (8/8) (push) Has been cancelled
Backend Unit Tests / All backend unit tests complete (push) Has been cancelled
Lint Frontend / Detect whether code changed (push) Has been cancelled
Lint Frontend / Lint (push) Has been cancelled
Lint Frontend / Typecheck (push) Has been cancelled
Lint Frontend / Verify API clients (push) Has been cancelled
Lint Frontend / Verify API clients (enterprise) (push) Has been cancelled
Verify i18n / verify-i18n (push) Has been cancelled
End-to-end tests / Detect whether code changed (push) Has been cancelled
End-to-end tests / Build & Package Grafana (push) Has been cancelled
End-to-end tests / Build E2E test runner (push) Has been cancelled
End-to-end tests / push-docker-image (push) Has been cancelled
End-to-end tests / dashboards-suite (old arch) (push) Has been cancelled
End-to-end tests / panels-suite (old arch) (push) Has been cancelled
End-to-end tests / smoke-tests-suite (old arch) (push) Has been cancelled
End-to-end tests / various-suite (old arch) (push) Has been cancelled
End-to-end tests / various-suite (push) Has been cancelled
End-to-end tests / Verify Storybook (Playwright) (push) Has been cancelled
End-to-end tests / Playwright E2E tests (1/8) (push) Has been cancelled
End-to-end tests / Playwright E2E tests (2/8) (push) Has been cancelled
End-to-end tests / Playwright E2E tests (3/8) (push) Has been cancelled
End-to-end tests / Playwright E2E tests (4/8) (push) Has been cancelled
End-to-end tests / Playwright E2E tests (5/8) (push) Has been cancelled
End-to-end tests / Playwright E2E tests (6/8) (push) Has been cancelled
End-to-end tests / Playwright E2E tests (7/8) (push) Has been cancelled
End-to-end tests / Playwright E2E tests (8/8) (push) Has been cancelled
End-to-end tests / run-azure-monitor-e2e (push) Has been cancelled
End-to-end tests / All Playwright tests complete (push) Has been cancelled
End-to-end tests / A11y test (push) Has been cancelled
End-to-end tests / Publish metrics (push) Has been cancelled
End-to-end tests / All E2E tests complete (push) Has been cancelled
Frontend tests / Detect whether code changed (push) Has been cancelled
Frontend tests / Unit tests (1 / 16) (push) Has been cancelled
Frontend tests / Unit tests (10 / 16) (push) Has been cancelled
Frontend tests / Unit tests (11 / 16) (push) Has been cancelled
Frontend tests / Unit tests (12 / 16) (push) Has been cancelled
Frontend tests / Unit tests (13 / 16) (push) Has been cancelled
Frontend tests / Unit tests (14 / 16) (push) Has been cancelled
Frontend tests / Unit tests (15 / 16) (push) Has been cancelled
Frontend tests / Unit tests (16 / 16) (push) Has been cancelled
Frontend tests / Unit tests (2 / 16) (push) Has been cancelled
Frontend tests / Unit tests (3 / 16) (push) Has been cancelled
Frontend tests / Unit tests (4 / 16) (push) Has been cancelled
Frontend tests / Unit tests (5 / 16) (push) Has been cancelled
Frontend tests / Unit tests (6 / 16) (push) Has been cancelled
Frontend tests / Unit tests (7 / 16) (push) Has been cancelled
Frontend tests / Unit tests (8 / 16) (push) Has been cancelled
Frontend tests / Unit tests (9 / 16) (push) Has been cancelled
Frontend tests / Decoupled plugin tests (push) Has been cancelled
Frontend tests / Packages unit tests (push) Has been cancelled
Frontend tests / All frontend unit tests complete (push) Has been cancelled
Integration Tests / Detect whether code changed (push) Has been cancelled
Integration Tests / Sqlite (1/4) (push) Has been cancelled
Integration Tests / Sqlite (2/4) (push) Has been cancelled
Integration Tests / Sqlite (3/4) (push) Has been cancelled
Integration Tests / Sqlite (4/4) (push) Has been cancelled
Integration Tests / Sqlite Without CGo (1/4) (push) Has been cancelled
Integration Tests / Sqlite Without CGo (2/4) (push) Has been cancelled
Integration Tests / Sqlite Without CGo (3/4) (push) Has been cancelled
Integration Tests / Sqlite Without CGo (4/4) (push) Has been cancelled
Integration Tests / MySQL (1/16) (push) Has been cancelled
Integration Tests / MySQL (10/16) (push) Has been cancelled
Integration Tests / MySQL (11/16) (push) Has been cancelled
Integration Tests / MySQL (12/16) (push) Has been cancelled
Integration Tests / MySQL (13/16) (push) Has been cancelled
Integration Tests / MySQL (14/16) (push) Has been cancelled
Integration Tests / MySQL (15/16) (push) Has been cancelled
Integration Tests / MySQL (16/16) (push) Has been cancelled
Integration Tests / MySQL (2/16) (push) Has been cancelled
Integration Tests / MySQL (3/16) (push) Has been cancelled
Integration Tests / MySQL (4/16) (push) Has been cancelled
Integration Tests / MySQL (5/16) (push) Has been cancelled
Integration Tests / MySQL (6/16) (push) Has been cancelled
Integration Tests / MySQL (7/16) (push) Has been cancelled
Integration Tests / MySQL (8/16) (push) Has been cancelled
Integration Tests / MySQL (9/16) (push) Has been cancelled
Integration Tests / Postgres (1/16) (push) Has been cancelled
Integration Tests / Postgres (10/16) (push) Has been cancelled
Integration Tests / Postgres (11/16) (push) Has been cancelled
Integration Tests / Postgres (12/16) (push) Has been cancelled
Integration Tests / Postgres (13/16) (push) Has been cancelled
Integration Tests / Postgres (14/16) (push) Has been cancelled
Integration Tests / Postgres (15/16) (push) Has been cancelled
Integration Tests / Postgres (16/16) (push) Has been cancelled
Integration Tests / Postgres (2/16) (push) Has been cancelled
Integration Tests / Postgres (3/16) (push) Has been cancelled
Integration Tests / Postgres (4/16) (push) Has been cancelled
Integration Tests / Postgres (5/16) (push) Has been cancelled
Integration Tests / Postgres (6/16) (push) Has been cancelled
Integration Tests / Postgres (7/16) (push) Has been cancelled
Integration Tests / Postgres (8/16) (push) Has been cancelled
Integration Tests / Postgres (9/16) (push) Has been cancelled
Integration Tests / All backend integration tests complete (push) Has been cancelled
Reject GitHub secrets / reject-gh-secrets (push) Has been cancelled
Build Release Packages / setup (push) Has been cancelled
Build Release Packages / Dispatch grafana-enterprise build (push) Has been cancelled
Build Release Packages / / darwin-amd64 (push) Has been cancelled
Build Release Packages / / darwin-arm64 (push) Has been cancelled
Build Release Packages / / linux-amd64 (push) Has been cancelled
Build Release Packages / / linux-armv6 (push) Has been cancelled
Build Release Packages / / linux-armv7 (push) Has been cancelled
Build Release Packages / / linux-arm64 (push) Has been cancelled
Build Release Packages / / linux-s390x (push) Has been cancelled
Build Release Packages / / windows-amd64 (push) Has been cancelled
Build Release Packages / / windows-arm64 (push) Has been cancelled
Build Release Packages / Upload artifacts (push) Has been cancelled
Build Release Packages / publish-dockerhub (push) Has been cancelled
Shellcheck / Shellcheck scripts (push) Has been cancelled
Run Storybook a11y tests / Detect whether code changed (push) Has been cancelled
Run Storybook a11y tests / Run Storybook a11y tests (push) Has been cancelled
Swagger generated code / Detect whether code changed (push) Has been cancelled
Swagger generated code / Verify committed API specs match (push) Has been cancelled
Dispatch sync to mirror / dispatch-job (push) Has been cancelled
CI: fix bump version action to use grafana-delivery-bot (#110976)

* update bump-version

* Add id-token: write

* update generate-token step

* pull-requests -> pull_requests

* clone with token and set right name

(cherry picked from commit c28a917871)
2025-09-11 15:47:47 -05:00
grafana-delivery-bot[bot]
76340a9741 [release-12.2.0] Alerting: Fix bug where rules with identical mute/active intervals produced conflicting routes (#110971)
Some checks failed
Actionlint / Lint GitHub Actions files (push) Has been cancelled
Backend Unit Tests / Detect whether code changed (push) Has been cancelled
Backend Unit Tests / Grafana (1/8) (push) Has been cancelled
Backend Unit Tests / Grafana (2/8) (push) Has been cancelled
Backend Unit Tests / Grafana (3/8) (push) Has been cancelled
Backend Unit Tests / Grafana (4/8) (push) Has been cancelled
Backend Unit Tests / Grafana (5/8) (push) Has been cancelled
Backend Unit Tests / Grafana (6/8) (push) Has been cancelled
Backend Unit Tests / Grafana (7/8) (push) Has been cancelled
Backend Unit Tests / Grafana (8/8) (push) Has been cancelled
Backend Unit Tests / Grafana Enterprise (1/8) (push) Has been cancelled
Backend Unit Tests / Grafana Enterprise (2/8) (push) Has been cancelled
Backend Unit Tests / Grafana Enterprise (3/8) (push) Has been cancelled
Backend Unit Tests / Grafana Enterprise (4/8) (push) Has been cancelled
Backend Unit Tests / Grafana Enterprise (5/8) (push) Has been cancelled
Backend Unit Tests / Grafana Enterprise (6/8) (push) Has been cancelled
Backend Unit Tests / Grafana Enterprise (7/8) (push) Has been cancelled
Backend Unit Tests / Grafana Enterprise (8/8) (push) Has been cancelled
Backend Unit Tests / All backend unit tests complete (push) Has been cancelled
Lint Frontend / Detect whether code changed (push) Has been cancelled
Lint Frontend / Lint (push) Has been cancelled
Lint Frontend / Typecheck (push) Has been cancelled
Lint Frontend / Verify API clients (push) Has been cancelled
Lint Frontend / Verify API clients (enterprise) (push) Has been cancelled
Verify i18n / verify-i18n (push) Has been cancelled
End-to-end tests / Detect whether code changed (push) Has been cancelled
End-to-end tests / Build & Package Grafana (push) Has been cancelled
End-to-end tests / Build E2E test runner (push) Has been cancelled
End-to-end tests / push-docker-image (push) Has been cancelled
End-to-end tests / dashboards-suite (old arch) (push) Has been cancelled
End-to-end tests / panels-suite (old arch) (push) Has been cancelled
End-to-end tests / smoke-tests-suite (old arch) (push) Has been cancelled
End-to-end tests / various-suite (old arch) (push) Has been cancelled
End-to-end tests / various-suite (push) Has been cancelled
End-to-end tests / Verify Storybook (Playwright) (push) Has been cancelled
End-to-end tests / Playwright E2E tests (1/8) (push) Has been cancelled
End-to-end tests / Playwright E2E tests (2/8) (push) Has been cancelled
End-to-end tests / Playwright E2E tests (3/8) (push) Has been cancelled
End-to-end tests / Playwright E2E tests (4/8) (push) Has been cancelled
End-to-end tests / Playwright E2E tests (5/8) (push) Has been cancelled
End-to-end tests / Playwright E2E tests (6/8) (push) Has been cancelled
End-to-end tests / Playwright E2E tests (7/8) (push) Has been cancelled
End-to-end tests / Playwright E2E tests (8/8) (push) Has been cancelled
End-to-end tests / run-azure-monitor-e2e (push) Has been cancelled
End-to-end tests / All Playwright tests complete (push) Has been cancelled
End-to-end tests / A11y test (push) Has been cancelled
End-to-end tests / Publish metrics (push) Has been cancelled
End-to-end tests / All E2E tests complete (push) Has been cancelled
Frontend tests / Detect whether code changed (push) Has been cancelled
Frontend tests / Unit tests (1 / 16) (push) Has been cancelled
Frontend tests / Unit tests (10 / 16) (push) Has been cancelled
Frontend tests / Unit tests (11 / 16) (push) Has been cancelled
Frontend tests / Unit tests (12 / 16) (push) Has been cancelled
Frontend tests / Unit tests (13 / 16) (push) Has been cancelled
Frontend tests / Unit tests (14 / 16) (push) Has been cancelled
Frontend tests / Unit tests (15 / 16) (push) Has been cancelled
Frontend tests / Unit tests (16 / 16) (push) Has been cancelled
Frontend tests / Unit tests (2 / 16) (push) Has been cancelled
Frontend tests / Unit tests (3 / 16) (push) Has been cancelled
Frontend tests / Unit tests (4 / 16) (push) Has been cancelled
Frontend tests / Unit tests (5 / 16) (push) Has been cancelled
Frontend tests / Unit tests (6 / 16) (push) Has been cancelled
Frontend tests / Unit tests (7 / 16) (push) Has been cancelled
Frontend tests / Unit tests (8 / 16) (push) Has been cancelled
Frontend tests / Unit tests (9 / 16) (push) Has been cancelled
Frontend tests / Decoupled plugin tests (push) Has been cancelled
Frontend tests / Packages unit tests (push) Has been cancelled
Frontend tests / All frontend unit tests complete (push) Has been cancelled
Integration Tests / Detect whether code changed (push) Has been cancelled
Integration Tests / Sqlite (1/4) (push) Has been cancelled
Integration Tests / Sqlite (2/4) (push) Has been cancelled
Integration Tests / Sqlite (3/4) (push) Has been cancelled
Integration Tests / Sqlite (4/4) (push) Has been cancelled
Integration Tests / Sqlite Without CGo (1/4) (push) Has been cancelled
Integration Tests / Sqlite Without CGo (2/4) (push) Has been cancelled
Integration Tests / Sqlite Without CGo (3/4) (push) Has been cancelled
Integration Tests / Sqlite Without CGo (4/4) (push) Has been cancelled
Integration Tests / MySQL (1/16) (push) Has been cancelled
Integration Tests / MySQL (10/16) (push) Has been cancelled
Integration Tests / MySQL (11/16) (push) Has been cancelled
Integration Tests / MySQL (12/16) (push) Has been cancelled
Integration Tests / MySQL (13/16) (push) Has been cancelled
Integration Tests / MySQL (14/16) (push) Has been cancelled
Integration Tests / MySQL (15/16) (push) Has been cancelled
Integration Tests / MySQL (16/16) (push) Has been cancelled
Integration Tests / MySQL (2/16) (push) Has been cancelled
Integration Tests / MySQL (3/16) (push) Has been cancelled
Integration Tests / MySQL (4/16) (push) Has been cancelled
Integration Tests / MySQL (5/16) (push) Has been cancelled
Integration Tests / MySQL (6/16) (push) Has been cancelled
Integration Tests / MySQL (7/16) (push) Has been cancelled
Integration Tests / MySQL (8/16) (push) Has been cancelled
Integration Tests / MySQL (9/16) (push) Has been cancelled
Integration Tests / Postgres (1/16) (push) Has been cancelled
Integration Tests / Postgres (10/16) (push) Has been cancelled
Integration Tests / Postgres (11/16) (push) Has been cancelled
Integration Tests / Postgres (12/16) (push) Has been cancelled
Integration Tests / Postgres (13/16) (push) Has been cancelled
Integration Tests / Postgres (14/16) (push) Has been cancelled
Integration Tests / Postgres (15/16) (push) Has been cancelled
Integration Tests / Postgres (16/16) (push) Has been cancelled
Integration Tests / Postgres (2/16) (push) Has been cancelled
Integration Tests / Postgres (3/16) (push) Has been cancelled
Integration Tests / Postgres (4/16) (push) Has been cancelled
Integration Tests / Postgres (5/16) (push) Has been cancelled
Integration Tests / Postgres (6/16) (push) Has been cancelled
Integration Tests / Postgres (7/16) (push) Has been cancelled
Integration Tests / Postgres (8/16) (push) Has been cancelled
Integration Tests / Postgres (9/16) (push) Has been cancelled
Integration Tests / All backend integration tests complete (push) Has been cancelled
Reject GitHub secrets / reject-gh-secrets (push) Has been cancelled
Build Release Packages / setup (push) Has been cancelled
Build Release Packages / Dispatch grafana-enterprise build (push) Has been cancelled
Build Release Packages / / darwin-amd64 (push) Has been cancelled
Build Release Packages / / darwin-arm64 (push) Has been cancelled
Build Release Packages / / linux-amd64 (push) Has been cancelled
Build Release Packages / / linux-armv6 (push) Has been cancelled
Build Release Packages / / linux-armv7 (push) Has been cancelled
Build Release Packages / / linux-arm64 (push) Has been cancelled
Build Release Packages / / linux-s390x (push) Has been cancelled
Build Release Packages / / windows-amd64 (push) Has been cancelled
Build Release Packages / / windows-arm64 (push) Has been cancelled
Build Release Packages / Upload artifacts (push) Has been cancelled
Build Release Packages / publish-dockerhub (push) Has been cancelled
Shellcheck / Shellcheck scripts (push) Has been cancelled
Run Storybook a11y tests / Detect whether code changed (push) Has been cancelled
Run Storybook a11y tests / Run Storybook a11y tests (push) Has been cancelled
Swagger generated code / Detect whether code changed (push) Has been cancelled
Swagger generated code / Verify committed API specs match (push) Has been cancelled
Dispatch sync to mirror / dispatch-job (push) Has been cancelled
CodeQL checks / Detect whether code changed (push) Has been cancelled
publish-technical-documentation-release / sync (push) Has been cancelled
CodeQL checks / Analyze (actions) (push) Has been cancelled
CodeQL checks / Analyze (go) (push) Has been cancelled
CodeQL checks / Analyze (javascript) (push) Has been cancelled
Alerting: Fix bug where rules with identical mute/active intervals produced conflicting routes (#110935)

Alerting: Fix hash collision in NotificationSettings fingerprint
(cherry picked from commit fc3636acf2)

Co-authored-by: Alexander Akhmetov <me@alx.cx>
2025-09-11 19:44:08 +02:00
Isabel Matwawana
b15acdf1f2 [release-12.2.0] Docs: ad hoc filter improvements (#110961) 2025-09-11 12:15:52 -04:00
Isabel Matwawana
ca8402fbda [release-12.2.0] docs: clarify that data links must use variable names, not labels (#110965)
Co-authored-by: Sidharth Chauhan <chauhansiddharth71@gmail.com>
2025-09-11 12:09:51 -04:00
Isabel Matwawana
abb44794fe [release-12.2.0] Docs: Replace screenshots for pill and markdown cells (#110962) 2025-09-11 12:03:56 -04:00
Isabel Matwawana
c228eaa99d [release-12.2.0] Docs: Add panel filtering (#110960)
Co-authored-by: Sam Jewell <2903904+samjewell@users.noreply.github.com>
2025-09-11 11:59:24 -04:00
Larissa Wandzura
f41cc1c0d6 created new doc 2025-09-11 10:03:36 -05:00
Larissa Wandzura
b557d71c9a Merge branch 'docs/sql-expressions-updates-082025' of github.com:grafana/grafana into docs/sql-expressions-updates-082025
(cherry picked from commit b0bfbbf547)
2025-09-11 10:01:19 -05:00
Will Browne
e404352a38 Plugins: StaticFS should implement FSRemover (#110706) (#110943)
make staticfs implement fs removal interface
2025-09-11 14:44:47 +01:00
95 changed files with 1655 additions and 380 deletions

View File

@@ -13,17 +13,29 @@ on:
required: false required: false
permissions: permissions:
contents: write id-token: write
pull-requests: write contents: read
jobs: jobs:
bump-version: bump-version:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Checkout Grafana - uses: grafana/shared-workflows/actions/get-vault-secrets@main
uses: actions/checkout@v4
with: with:
persist-credentials: false repo_secrets: |
GRAFANA_DELIVERY_BOT_APP_PEM=delivery-bot-app:PRIVATE_KEY
- name: Generate token
id: generate_token
uses: tibdex/github-app-token@3beb63f4bd073e61482598c45c71c1019b59b73a
with:
app_id: ${{ vars.DELIVERY_BOT_APP_ID }}
private_key: ${{ env.GRAFANA_DELIVERY_BOT_APP_PEM }}
repositories: '["grafana"]'
permissions: '{"contents": "write", "pull_requests": "write", "workflows": "write"}'
- name: Checkout Grafana
uses: actions/checkout@v5
with:
token: ${{ steps.generate_token.outputs.token }}
- name: Update package.json versions - name: Update package.json versions
uses: ./pkg/build/actions/bump-version uses: ./pkg/build/actions/bump-version
with: with:
@@ -35,10 +47,10 @@ jobs:
DRY_RUN: ${{ inputs.dry_run }} DRY_RUN: ${{ inputs.dry_run }}
REF_NAME: ${{ github.ref_name }} REF_NAME: ${{ github.ref_name }}
RUN_ID: ${{ github.run_id }} RUN_ID: ${{ github.run_id }}
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} GH_TOKEN: ${{ steps.generate_token.outputs.token }}
run: | run: |
git config --local user.name "github-actions[bot]" git config --local user.name "grafana-delivery-bot[bot]"
git config --local user.email "github-actions[bot]@users.noreply.github.com" git config --local user.email "grafana-delivery-bot[bot]@users.noreply.github.com"
git config --local --add --bool push.autoSetupRemote true git config --local --add --bool push.autoSetupRemote true
git checkout -b "bump-version/${RUN_ID}/${VERSION}" git checkout -b "bump-version/${RUN_ID}/${VERSION}"
git add . git add .

View File

@@ -56,7 +56,7 @@ jobs:
permissions: permissions:
contents: read contents: read
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v5
with: with:
persist-credentials: false persist-credentials: false
- name: Set up version (Release Branches) - name: Set up version (Release Branches)
@@ -140,7 +140,7 @@ jobs:
# The downside to this is that the frontend will be built for each one when it could be reused for all of them. # The downside to this is that the frontend will be built for each one when it could be reused for all of them.
# This could be a future improvement. # This could be a future improvement.
include: include:
- name: linux-amd64 - name: linux-amd64 # publish-npm relies on this step building npm packages
artifacts: targz:grafana:linux/amd64,deb:grafana:linux/amd64,rpm:grafana:linux/amd64,docker:grafana:linux/amd64,docker:grafana:linux/amd64:ubuntu,npm:grafana,storybook artifacts: targz:grafana:linux/amd64,deb:grafana:linux/amd64,rpm:grafana:linux/amd64,docker:grafana:linux/amd64,docker:grafana:linux/amd64:ubuntu,npm:grafana,storybook
verify: true verify: true
- name: linux-arm64 - name: linux-arm64
@@ -169,7 +169,7 @@ jobs:
verify: true verify: true
steps: steps:
- uses: grafana/shared-workflows/actions/dockerhub-login@dockerhub-login/v1.0.2 - uses: grafana/shared-workflows/actions/dockerhub-login@dockerhub-login/v1.0.2
- uses: actions/checkout@v4 - uses: actions/checkout@v5
with: with:
persist-credentials: false persist-credentials: false
- name: Set up QEMU - name: Set up QEMU
@@ -197,6 +197,7 @@ jobs:
name: artifacts-${{ matrix.name }} name: artifacts-${{ matrix.name }}
path: ${{ steps.build.outputs.dist-dir }} path: ${{ steps.build.outputs.dist-dir }}
retention-days: 1 retention-days: 1
publish-artifacts: publish-artifacts:
name: Upload artifacts name: Upload artifacts
uses: grafana/grafana/.github/workflows/publish-artifact.yml@main uses: grafana/grafana/.github/workflows/publish-artifact.yml@main
@@ -211,6 +212,7 @@ jobs:
run-id: ${{ github.run_id }} run-id: ${{ github.run_id }}
bucket-path: ${{ needs.setup.outputs.version }}_${{ github.run_id }} bucket-path: ${{ needs.setup.outputs.version }}_${{ github.run_id }}
environment: prod environment: prod
publish-dockerhub: publish-dockerhub:
if: github.ref_name == 'main' if: github.ref_name == 'main'
permissions: permissions:
@@ -268,3 +270,68 @@ jobs:
docker manifest push grafana/grafana:main-ubuntu docker manifest push grafana/grafana:main-ubuntu
docker manifest push "grafana/grafana-dev:${VERSION}" docker manifest push "grafana/grafana-dev:${VERSION}"
docker manifest push "grafana/grafana-dev:${VERSION}-ubuntu" docker manifest push "grafana/grafana-dev:${VERSION}-ubuntu"
publish-npm-canaries:
if: github.ref_name == 'main'
name: Publish NPM canaries
uses: ./.github/workflows/release-npm.yml
permissions:
contents: read
id-token: write
needs:
- setup
- build
with:
grafana_commit: ${{ needs.setup.outputs.grafana-commit }}
version: ${{ needs.setup.outputs.version }}
build_id: ${{ github.run_id }}
version_type: "canary"
# notify-pr creates (or updates) a comment in a pull request to link to this workflow where the release artifacts are
# being built.
notify-pr:
runs-on: ubuntu-x64-small
permissions:
contents: read
id-token: write
needs:
- setup
steps:
- id: vault-secrets
uses: grafana/shared-workflows/actions/get-vault-secrets@main
with:
repo_secrets: |
GRAFANA_DELIVERY_BOT_APP_PEM=delivery-bot-app:PRIVATE_KEY
- name: Generate token
id: generate_token
uses: tibdex/github-app-token@3beb63f4bd073e61482598c45c71c1019b59b73a
with:
app_id: ${{ vars.DELIVERY_BOT_APP_ID }}
private_key: ${{ env.GRAFANA_DELIVERY_BOT_APP_PEM }}
repositories: '["grafana"]'
permissions: '{"issues": "write", "pull_requests": "write", "contents": "read"}'
- name: Find PR
env:
GITHUB_TOKEN: ${{ steps.generate_token.outputs.token }}
GRAFANA_COMMIT: ${{ needs.setup.outputs.grafana-commit }}
run: echo "ISSUE_NUMBER=$(gh api "/repos/grafana/grafana/commits/${GRAFANA_COMMIT}/pulls" | jq -r '.[0].number')" >> "$GITHUB_ENV"
- name: Find Comment
uses: peter-evans/find-comment@3eae4d37986fb5a8592848f6a574fdf654e61f9e # v3
id: fc
with:
issue-number: ${{ env.ISSUE_NUMBER }}
comment-author: 'grafana-delivery-bot[bot]'
body-includes: GitHub Actions Build
token: ${{ steps.generate_token.outputs.token }}
- name: Create or update comment
uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4
with:
token: ${{ steps.generate_token.outputs.token }}
comment-id: ${{ steps.fc.outputs.comment-id }}
issue-number: ${{ env.ISSUE_NUMBER }}
body: |
:rocket: Your submission is now being built and packaged.
- [GitHub Actions Build](https://github.com/grafana/grafana/actions/runs/${{ github.run_id }})
- Version: ${{ needs.setup.outputs.version }}
edit-mode: replace

146
.github/workflows/release-npm.yml vendored Normal file
View File

@@ -0,0 +1,146 @@
name: Release NPM packages
run-name: Publish NPM ${{ inputs.version_type }} ${{ inputs.version }}
on:
workflow_call:
inputs:
grafana_commit:
description: 'Grafana commit SHA to build against'
required: true
type: string
version:
description: 'Version to publish as'
required: true
type: string
build_id:
description: 'Run ID from the original release-build workflow'
required: true
type: string
version_type:
description: 'Version type (canary, nightly, stable)'
required: true
type: string
workflow_dispatch:
inputs:
grafana_commit:
description: 'Grafana commit SHA to build against'
required: true
version:
description: 'Version to publish as'
required: true
build_id:
description: 'Run ID from the original release-build workflow'
required: true
version_type:
description: 'Version type (canary, nightly, stable)'
required: true
permissions: {}
jobs:
# If called with version_type 'canary' or 'stable', build + publish to NPM
# If called with version_type 'nightly', just tag the given version with nightly tag. It was already published by the canary build.
publish:
name: Publish NPM packages
runs-on: github-hosted-ubuntu-x64-small
if: inputs.version_type == 'canary' || inputs.version_type == 'stable'
permissions:
contents: read
id-token: write
steps:
- name: Info
env:
GITHUB_REF: ${{ github.ref }}
GRAFANA_COMMIT: ${{ inputs.grafana_commit }}
run: |
echo "GRAFANA_COMMIT: $GRAFANA_COMMIT"
echo "github.ref: $GITHUB_REF"
- name: Checkout workflow ref
uses: actions/checkout@v4
with:
persist-credentials: false
fetch-depth: 100
fetch-tags: false
# this will fail with "{commit} is not a valid commit" if the commit is valid but
# not in the last 100 commits.
- name: Verify commit is in workflow HEAD
env:
GIT_COMMIT: ${{ inputs.grafana_commit }}
run: ./.github/workflows/scripts/validate-commit-in-head.sh
shell: bash
- name: Map version type to NPM tag
id: npm-tag
env:
VERSION: ${{ inputs.version }}
VERSION_TYPE: ${{ inputs.version_type }}
REFERENCE_PKG: "@grafana/runtime"
run: |
TAG=$(./.github/workflows/scripts/determine-npm-tag.sh)
echo "NPM_TAG=$TAG" >> "$GITHUB_OUTPUT"
shell: bash
- name: Checkout build commit
uses: actions/checkout@v4
with:
persist-credentials: false
ref: ${{ inputs.grafana_commit }}
- uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'
cache: 'yarn'
cache-dependency-path: 'yarn.lock'
# Trusted Publishing is only available in npm v11.5.1 and later
- name: Update npm
run: npm install -g npm@^11.5.1
- name: Install dependencies
run: yarn install --immutable
- name: Typecheck packages
run: yarn run packages:typecheck
- name: Version, build, and pack packages
env:
VERSION: ${{ inputs.version }}
run: |
yarn run packages:build
yarn lerna version "$VERSION" \
--exact \
--no-git-tag-version \
--no-push \
--force-publish \
--yes
yarn run packages:pack
- name: Debug packed files
run: tree -a ./npm-artifacts
- name: Debug OIDC Claims
uses: github/actions-oidc-debugger@2e9ba5d3f4bebaad1f91a2cede055115738b7ae8
with:
audience: '${{ github.server_url }}/${{ github.repository_owner }}'
- name: Publish packages
env:
NPM_TAG: ${{ steps.npm-tag.outputs.NPM_TAG }}
run: ./scripts/publish-npm-packages.sh --dist-tag "$NPM_TAG" --registry 'https://registry.npmjs.org/'
# TODO: finish this step
tag-nightly:
name: Tag nightly release
runs-on: github-hosted-ubuntu-x64-small
if: inputs.version_type == 'nightly'
steps:
- name: Checkout workflow ref
uses: actions/checkout@v4
with:
persist-credentials: false
# TODO: tag the given release with nightly

View File

@@ -0,0 +1,66 @@
#!/usr/bin/env bash
set -euo pipefail
fail() { echo "Error: $*" >&2; exit 1; }
# Ensure required variables are set
if [[ -z "${REFERENCE_PKG}" || -z "${VERSION_TYPE}" || -z "${VERSION}" ]]; then
fail "Missing required environment variables: REFERENCE_PKG, VERSION_TYPE, VERSION"
fi
semver_cmp () {
IFS='.' read -r -a arr_a <<< "$1"
IFS='.' read -r -a arr_b <<< "$2"
for i in 0 1 2; do
local aa=${arr_a[i]:-0}
local bb=${arr_b[i]:-0}
# shellcheck disable=SC2004
if (( 10#$aa > 10#$bb )); then echo gt; return 0; fi
if (( 10#$aa < 10#$bb )); then echo lt; return 0; fi
done
echo "eq"
}
STABLE_REGEX='^([0-9]+)\.([0-9]+)\.([0-9]+)$' # x.y.z
PRE_REGEX='^([0-9]+)\.([0-9]+)\.([0-9]+)-([0-9]+)$' # x.y.z-123456
# Validate that the VERSION matches VERSION_TYPE
# - stable must be x.y.z
# - nightly/canary must be x.y.z-123456
case "$VERSION_TYPE" in
stable)
[[ $VERSION =~ $STABLE_REGEX ]] || fail "For 'stable', version must match x.y.z" ;;
nightly|canary)
[[ $VERSION =~ $PRE_REGEX ]] || fail "For '$VERSION_TYPE', version must match x.y.z-123456" ;;
*)
fail "Unknown version_type '$VERSION_TYPE'" ;;
esac
# Extract major, minor from VERSION
IFS=.- read -r major minor patch _ <<< "$VERSION"
# Determine NPM tag
case "$VERSION_TYPE" in
canary) TAG="canary" ;;
nightly) TAG="nightly" ;;
stable)
# Use npm dist-tag "latest" as the reference
LATEST="$(npm view --silent "$REFERENCE_PKG" dist-tags.latest 2>/dev/null || true)"
echo "Latest for $REFERENCE_PKG is ${LATEST:-<none>}" >&2
if [[ -z ${LATEST:-} ]]; then
TAG="latest" # first ever publish
else
case "$(semver_cmp "$VERSION" "$LATEST")" in
gt) TAG="latest" ;; # newer than reference -> latest
lt|eq) TAG="v${major}.${minor}-latest" ;; # older or equal -> vX.Y-latest
esac
fi
;;
esac
echo "Resolved NPM_TAG=$TAG (VERSION=$VERSION, current latest=${LATEST:-none})" 1>&2 # stderr
printf '%s' "$TAG"

View File

@@ -0,0 +1,14 @@
#!/usr/bin/env bash
set -euo pipefail
if [[ -z "${GIT_COMMIT:-}" ]]; then
echo "Error: Environment variable GIT_COMMIT is required"
exit 1
fi
if git merge-base --is-ancestor "$GIT_COMMIT" HEAD; then
echo "Commit $GIT_COMMIT is contained in HEAD"
else
echo "Error: Commit $GIT_COMMIT is not contained in HEAD"
exit 1
fi

View File

@@ -1,3 +1,157 @@
<!-- 12.2.0 START -->
# 12.2.0 (2025-09-23)
### Features and enhancements
- ** Alerting:** Add feedback buttons for the new AI helpers (Enterprise)
- **Access:** Remove plugin app access in plugin basic role seeder (Enterprise)
- **Actions:** Infinity authentication [#109493](https://github.com/grafana/grafana/pull/109493), [@adela-almasan](https://github.com/adela-almasan)
- **Alerting:** Add GMA export to the new list page [#109784](https://github.com/grafana/grafana/pull/109784), [@konrad147](https://github.com/konrad147)
- **Alerting:** Add alerting AI buttons for cloud (Enterprise)
- **Alerting:** Add contact point filter to Active Notifications page [#109775](https://github.com/grafana/grafana/pull/109775), [@alexander-akhmetov](https://github.com/alexander-akhmetov)
- **Alerting:** Add enrichment per rule extension component (Enterprise)
- **Alerting:** Add extension point link from alert rule to grafana-metricsdrilldown-app [#108566](https://github.com/grafana/grafana/pull/108566), [@bohandley](https://github.com/bohandley)
- **Alerting:** Add feature toggle and extension point [#110141](https://github.com/grafana/grafana/pull/110141), [@soniaAguilarPeiron](https://github.com/soniaAguilarPeiron)
- **Alerting:** Add keepFiringFor and missing_series_evals_to_resolve to file provisioning [#109699](https://github.com/grafana/grafana/pull/109699), [@alexander-akhmetov](https://github.com/alexander-akhmetov)
- **Alerting:** Add observability to enrichment UI (Enterprise)
- **Alerting:** Add tooltips in enrichment list for enrichment type (Enterprise)
- **Alerting:** Alert enrichment list page (Enterprise)
- **Alerting:** Allow filter by rule source in Filter V2 [#110336](https://github.com/grafana/grafana/pull/110336), [@laurenashleigh](https://github.com/laurenashleigh)
- **Alerting:** Auto refresh contact points in the rule form [#109539](https://github.com/grafana/grafana/pull/109539), [@konrad147](https://github.com/konrad147)
- **Alerting:** Check if TimeInterval is used in ActiveTimings when deleting [#110691](https://github.com/grafana/grafana/pull/110691), [@fayzal-g](https://github.com/fayzal-g)
- **Alerting:** Disable group consistency check for GMA rules [#109599](https://github.com/grafana/grafana/pull/109599), [@konrad147](https://github.com/konrad147)
- **Alerting:** Display Error Message in Alert History View [#110123](https://github.com/grafana/grafana/pull/110123), [@laurenashleigh](https://github.com/laurenashleigh)
- **Alerting:** Enrichment Config Form (Enterprise)
- **Alerting:** Filter out private labels before writing recording rules [#109295](https://github.com/grafana/grafana/pull/109295), [@alexander-akhmetov](https://github.com/alexander-akhmetov)
- **Alerting:** List V2 - Add a group link to the rule list item [#108960](https://github.com/grafana/grafana/pull/108960), [@konrad147](https://github.com/konrad147)
- **Alerting:** List V2 - datasource icons for rules [#109033](https://github.com/grafana/grafana/pull/109033), [@konrad147](https://github.com/konrad147)
- **Alerting:** Load labels in drop-downs without blocking the interaction with the form inputs [#110648](https://github.com/grafana/grafana/pull/110648), [@soniaAguilarPeiron](https://github.com/soniaAguilarPeiron)
- **Alerting:** Mark Prometheus to Grafana conversion API as stable [#103499](https://github.com/grafana/grafana/pull/103499), [@alexander-akhmetov](https://github.com/alexander-akhmetov)
- **Alerting:** Move alerting file to an alerting folder [#110257](https://github.com/grafana/grafana/pull/110257), [@soniaAguilarPeiron](https://github.com/soniaAguilarPeiron)
- **Alerting:** Support JSON responses in the Prometheus conversion API [#109070](https://github.com/grafana/grafana/pull/109070), [@alexander-akhmetov](https://github.com/alexander-akhmetov)
- **Alerting:** Support extra labels in the Prometheus conversion API [#109136](https://github.com/grafana/grafana/pull/109136), [@alexander-akhmetov](https://github.com/alexander-akhmetov)
- **Alerting:** Support retry with backoff in alert rule evaluation [#99710](https://github.com/grafana/grafana/pull/99710), [@alexander-akhmetov](https://github.com/alexander-akhmetov)
- **Alerting:** Triage alert history with Assistant if available (Enterprise)
- **Auditing:** Add settings to control recording of datasource query request and response body (Enterprise)
- **Auth:** Add setting to disable username based brute force login protection [#109152](https://github.com/grafana/grafana/pull/109152), [@TheoBrigitte](https://github.com/TheoBrigitte)
- **Auth:** Support JWT configs `tls_client_ca` and `jwk_set_bearer_token_file` [#109095](https://github.com/grafana/grafana/pull/109095), [@Baarsgaard](https://github.com/Baarsgaard)
- **Azure:** Resource picker improvements (#109458) [#109520](https://github.com/grafana/grafana/pull/109520), [@aangelisc](https://github.com/aangelisc)
- **Azure:** Show resource group in picker [#110442](https://github.com/grafana/grafana/pull/110442), [@aangelisc](https://github.com/aangelisc)
- **Canvas:** Add option to disable tooltips for one-click elements [#109937](https://github.com/grafana/grafana/pull/109937), [@adela-almasan](https://github.com/adela-almasan)
- **Canvas:** Dynamic connection direction [#108423](https://github.com/grafana/grafana/pull/108423), [@adela-almasan](https://github.com/adela-almasan)
- **Chore:** Remove prometheusCodeModeMetricNamesSearch feature toggle [#109024](https://github.com/grafana/grafana/pull/109024), [@itsmylife](https://github.com/itsmylife)
- **Chore:** Removes HideAngularDeprecation configuration [#110665](https://github.com/grafana/grafana/pull/110665), [@hugohaggmark](https://github.com/hugohaggmark)
- **CloudConfig:** Add config from defaults.ini to StackInfo (Enterprise)
- **CloudWatch:** Append query type to the request id [#109068](https://github.com/grafana/grafana/pull/109068), [@idastambuk](https://github.com/idastambuk)
- **CloudWatch:** Use default region when query region is unset [#109089](https://github.com/grafana/grafana/pull/109089), [@iwysiu](https://github.com/iwysiu)
- **CloudWatch:** Use the correct metric name for errors per function panel in the AWS Lambda sample dashboard [#110718](https://github.com/grafana/grafana/pull/110718), [@kevinwcyu](https://github.com/kevinwcyu)
- **CommandPalette:** Use fuzzySearch util from grafana/data [#108884](https://github.com/grafana/grafana/pull/108884), [@Clarity-89](https://github.com/Clarity-89)
- **Dashboard:** Inspect drawer can no longer be opened with url or linked to [#109617](https://github.com/grafana/grafana/pull/109617), [@torkelo](https://github.com/torkelo)
- **Dashboards:** Add support for full screen panel view and embedded (solo panel) route to repeated panels and new layouts (via new SoloPanelContex) [#107375](https://github.com/grafana/grafana/pull/107375), [@torkelo](https://github.com/torkelo)
- **Dashboards:** Conserve timestamp on time range copy-paste across timezones [#109769](https://github.com/grafana/grafana/pull/109769), [@alik-r](https://github.com/alik-r)
- **Dashboards:** Enable kubernetesDashboards by default [#107618](https://github.com/grafana/grafana/pull/107618), [@dprokop](https://github.com/dprokop)
- **Dashboards:** Make it possible to render variables under a drop-down [#109225](https://github.com/grafana/grafana/pull/109225), [@leventebalogh](https://github.com/leventebalogh)
- **Database:** Add primary key to Settings table (Enterprise)
- **Database:** Add primary key to settings table (Enterprise)
- **Dependencies:** Bump Go to v1.24.5 (Enterprise)
- **Docs:** Deprecate `grafana/grafana-oss` docker repo in favor of `grafana/grafana` [#110065](https://github.com/grafana/grafana/pull/110065), [@kminehart](https://github.com/kminehart)
- **Flame Graph:** Analyze with Grafana Assistant [#108684](https://github.com/grafana/grafana/pull/108684), [@ifrost](https://github.com/ifrost)
- **Folders:** Add team folders feature toggle [#109389](https://github.com/grafana/grafana/pull/109389), [@tomratcliffe](https://github.com/tomratcliffe)
- **Folders:** Update folder using app platform APIs [#110449](https://github.com/grafana/grafana/pull/110449), [@tomratcliffe](https://github.com/tomratcliffe)
- **Folders:** Use app platform search endpoint and update tests [#108814](https://github.com/grafana/grafana/pull/108814), [@tomratcliffe](https://github.com/tomratcliffe)
- **Go:** Update to 1.24.6 [#109313](https://github.com/grafana/grafana/pull/109313), [@Proximyst](https://github.com/Proximyst)
- **InfluxDB:** Ad hoc filters support for expressions [#109344](https://github.com/grafana/grafana/pull/109344), [@aangelisc](https://github.com/aangelisc)
- **Metrics:** Add http_response_size_bytes metric [#110428](https://github.com/grafana/grafana/pull/110428), [@joshhunt](https://github.com/joshhunt)
- **Nested folders:** Remove feature flag [#109212](https://github.com/grafana/grafana/pull/109212), [@stephaniehingtgen](https://github.com/stephaniehingtgen)
- **NestedFolderPicker:** Add rootFolderUID prop [#109991](https://github.com/grafana/grafana/pull/109991), [@ywzheng1](https://github.com/ywzheng1)
- **P2P Filter:** Add adhoc filter option toggle [#110160](https://github.com/grafana/grafana/pull/110160), [@Develer](https://github.com/Develer)
- **PieChart:** Add panel options for ascending/descending sort, and no sorting [#109564](https://github.com/grafana/grafana/pull/109564), [@cglukas](https://github.com/cglukas)
- **Plugin Extensions:** DataSource Configuration Components [#108350](https://github.com/grafana/grafana/pull/108350), [@shelldandy](https://github.com/shelldandy)
- **Plugins:** Add Connections homepage [#108316](https://github.com/grafana/grafana/pull/108316), [@oshirohugo](https://github.com/oshirohugo)
- **Plugins:** Record plugin version in request metrics [#110210](https://github.com/grafana/grafana/pull/110210), [@njvrzm](https://github.com/njvrzm)
- **Preferences:** Move codegen to apps [#109178](https://github.com/grafana/grafana/pull/109178), [@ryantxu](https://github.com/ryantxu)
- **Prometheus data source:** Migration service [#107364](https://github.com/grafana/grafana/pull/107364), [@bossinc](https://github.com/bossinc)
- **Prometheus:** Refactor metrics modal to handle high cardinality metrics [#108437](https://github.com/grafana/grafana/pull/108437), [@itsmylife](https://github.com/itsmylife)
- **Pyroscope:** Process and display sampling annotations [#109707](https://github.com/grafana/grafana/pull/109707), [@aleks-p](https://github.com/aleks-p)
- **Reporting:** Permit valid but weird emails (Enterprise)
- **Reporting:** Show correct recipient count (Enterprise)
- **Revert:** DataSource: Support config CRUD from apiservers (#106996) [#110342](https://github.com/grafana/grafana/pull/110342), [@njvrzm](https://github.com/njvrzm)
- **Revert:** DataSource: Support config CRUD from apiservers (#8860) (Enterprise)
- **SCIM:** Add flag for rejecting non provisioned users from logging in (Enterprise)
- **SCIM:** Allow empty externalId on update operation (Enterprise)
- **SCIM:** Delete user instead of disabling it on SCIM DELETE user request (Enterprise)
- **SQL Expressions:** Switch feature toggle to public preview [#110473](https://github.com/grafana/grafana/pull/110473), [@kylebrandt](https://github.com/kylebrandt)
- **Table:** Frozen columns [#109276](https://github.com/grafana/grafana/pull/109276), [@fastfrwrd](https://github.com/fastfrwrd)
- **Table:** Max row height for variable height rows [#109639](https://github.com/grafana/grafana/pull/109639), [@fastfrwrd](https://github.com/fastfrwrd)
- **Table:** Tooltip from Field [#109428](https://github.com/grafana/grafana/pull/109428), [@fastfrwrd](https://github.com/fastfrwrd)
- **Table:** Update UX for uniform-reducer case in new footer and overflow [#110493](https://github.com/grafana/grafana/pull/110493), [@fastfrwrd](https://github.com/fastfrwrd)
- **TableNG:** Footer enhancements [#102948](https://github.com/grafana/grafana/pull/102948), [@alexjonspencer1](https://github.com/alexjonspencer1)
- **Text:** Add Inter italic font variants to Grafana UI [#110313](https://github.com/grafana/grafana/pull/110313), [@kapowaz](https://github.com/kapowaz)
- **TraceView:** Refine UI visual hierarchy inside details section [#108929](https://github.com/grafana/grafana/pull/108929), [@ifrost](https://github.com/ifrost)
- **Transformations:** Add empty values options to Transpose [#108421](https://github.com/grafana/grafana/pull/108421), [@gelicia](https://github.com/gelicia)
- **Trend/TimeSeries:** Add "Show values" option [#108090](https://github.com/grafana/grafana/pull/108090), [@HasithDeAlwis](https://github.com/HasithDeAlwis)
- **Trend:** Add support for a logarithmic x axis [#101433](https://github.com/grafana/grafana/pull/101433), [@gelicia](https://github.com/gelicia)
- **Variables:** shows warning when user tries to save erroneous variables [#110154](https://github.com/grafana/grafana/pull/110154), [@hugohaggmark](https://github.com/hugohaggmark)
- **VizTooltip:** Replace `ExemplarHoverView` with `VizTooltip` components [#109369](https://github.com/grafana/grafana/pull/109369), [@adela-almasan](https://github.com/adela-almasan)
### Bug fixes
- **Alerting:** Fix bug where rules with identical mute/active intervals produced conflicting routes [#110971](https://github.com/grafana/grafana/pull/110971), [@alexander-akhmetov](https://github.com/alexander-akhmetov)
- **Alerting:** Fix copying of recording rule fields [#110311](https://github.com/grafana/grafana/pull/110311), [@moustafab](https://github.com/moustafab)
- **Alerting:** Fix field names on webhook HMAC/TLS config HCL export [#110722](https://github.com/grafana/grafana/pull/110722), [@JacobsonMT](https://github.com/JacobsonMT)
- **Alerting:** Fix newly created alert rules not immediately showing up in folder view [#109584](https://github.com/grafana/grafana/pull/109584), [@tomratcliffe](https://github.com/tomratcliffe)
- **Alerting:** Fix permission checks for the Import to GMA [#109950](https://github.com/grafana/grafana/pull/109950), [@konrad147](https://github.com/konrad147)
- **Alerting:** Fix permissions for enrichment routes (Enterprise)
- **Alerting:** Fix subpath handling in the alerting package [#109448](https://github.com/grafana/grafana/pull/109448), [@konrad147](https://github.com/konrad147)
- **Alerting:** Fix wrong import (Enterprise)
- **Alerting:** Hide list view loader if we don't have anything yet [#110464](https://github.com/grafana/grafana/pull/110464), [@gillesdemey](https://github.com/gillesdemey)
- **Alerting:** Set dataSourceName to GRAFANA_RULES_SOURCE_NAME when switch… [#109900](https://github.com/grafana/grafana/pull/109900), [@laurenashleigh](https://github.com/laurenashleigh)
- **Alerting:** Update alerting module to 10915888e4f099586ad37bea5f4a70f45101d2f5 [#109989](https://github.com/grafana/grafana/pull/109989), [@yuri-tceretian](https://github.com/yuri-tceretian)
- **Azure:** Fix logs editor rendering [#109491](https://github.com/grafana/grafana/pull/109491), [@aangelisc](https://github.com/aangelisc)
- **Canvas:** Fix element selection being cleared on panel resize [#110010](https://github.com/grafana/grafana/pull/110010), [@adela-almasan](https://github.com/adela-almasan)
- **CloudConfig:** Fix panic in defaults.ini merge (Enterprise)
- **CloudWatch:** Fix handling region for legacy alerts [#109217](https://github.com/grafana/grafana/pull/109217), [@iwysiu](https://github.com/iwysiu)
- **CloudWatch:** Fix logs query requestId to prevent setting undefined-logs as a requestId [#109930](https://github.com/grafana/grafana/pull/109930), [@kevinwcyu](https://github.com/kevinwcyu)
- **CloudWatch:** Update grafana/aws-sdk-go with STS endpoint bugfix [#109120](https://github.com/grafana/grafana/pull/109120), [@idastambuk](https://github.com/idastambuk)
- **Config:** Fix date_formats options being moved to a different section [#109339](https://github.com/grafana/grafana/pull/109339), [@joshhunt](https://github.com/joshhunt)
- **Dashboard List:** Fix how link query part is created when variables are included [#109861](https://github.com/grafana/grafana/pull/109861), [@aocenas](https://github.com/aocenas)
- **Dashboard versions:** Fix list for large dashboards [#109433](https://github.com/grafana/grafana/pull/109433), [@stephaniehingtgen](https://github.com/stephaniehingtgen)
- **Dashboard:** Fix AngularJS deprecation in grafana-overview dashboard [#106462](https://github.com/grafana/grafana/pull/106462), [@schoen2](https://github.com/schoen2)
- **Dashboard:** Fixes url links to embedded panels in scene based dashboards [#109837](https://github.com/grafana/grafana/pull/109837), [@torkelo](https://github.com/torkelo)
- **Dashboards:** Fix UTF-8 characters not working with excel downloads by replacing download for excel with excel compatibility mode. [#110099](https://github.com/grafana/grafana/pull/110099), [@oscarkilhed](https://github.com/oscarkilhed)
- **Dashboards:** Fix issue where the time range picker would seemingly be hidden behind the side menu if it was set to always open. [#108607](https://github.com/grafana/grafana/pull/108607), [@oscarkilhed](https://github.com/oscarkilhed)
- **Dashboards:** Fix kiosk mode not persisting through refresh [#110284](https://github.com/grafana/grafana/pull/110284), [@oscarkilhed](https://github.com/oscarkilhed)
- **Dashboards:** Fixing saving and viewing snapshots for repeated panels [#109856](https://github.com/grafana/grafana/pull/109856), [@torkelo](https://github.com/torkelo)
- **Explore:** Fix units overflow for trace durations [#108515](https://github.com/grafana/grafana/pull/108515), [@martincostello](https://github.com/martincostello)
- **Fix:** Install plugins when they have no plugin archive info(catalog en… [#109200](https://github.com/grafana/grafana/pull/109200), [@s4kh](https://github.com/s4kh)
- **InfluxDB:** Fix Unable to use self-signed CA for adding influxdb data source [#105586](https://github.com/grafana/grafana/pull/105586), [@geekeryy](https://github.com/geekeryy)
- **Prometheus:** Don't use incremental querying if one of the queries has $\_\_range variable [#108823](https://github.com/grafana/grafana/pull/108823), [@itsmylife](https://github.com/itsmylife)
- **Prometheus:** Fix eager auto completion [#109128](https://github.com/grafana/grafana/pull/109128), [@itsmylife](https://github.com/itsmylife)
- **Prometheus:** QueryEditor fix error when switching from code to builder for undefined aggregation operations [#110179](https://github.com/grafana/grafana/pull/110179), [@jcolladokuri](https://github.com/jcolladokuri)
- **Pyroscope:** Add start and end date to profiletypes call [#110277](https://github.com/grafana/grafana/pull/110277), [@zoltanbedi](https://github.com/zoltanbedi)
- **Pyroscope:** Fix incorrect rate calculation from flamegraph totals [#110470](https://github.com/grafana/grafana/pull/110470), [@marcsanmi](https://github.com/marcsanmi)
- **Service Accounts:** Fix typo on page indicating none are present [#109560](https://github.com/grafana/grafana/pull/109560), [@eamonryan](https://github.com/eamonryan)
- **Tempo:** Fix instant query streaming [#108924](https://github.com/grafana/grafana/pull/108924), [@adrapereira](https://github.com/adrapereira)
- **TimeSeries:** Use exported time shift and fix time comparison tooltip [#109947](https://github.com/grafana/grafana/pull/109947), [@drew08t](https://github.com/drew08t)
- **Transformations:** Account for group by / count when assessing if calculation is needed [#110546](https://github.com/grafana/grafana/pull/110546), [@gelicia](https://github.com/gelicia)
- **Transforms:** GroupToMatrix transform should retain keyRowField config [#109066](https://github.com/grafana/grafana/pull/109066), [@fastfrwrd](https://github.com/fastfrwrd)
### Breaking changes
- **Alerting:** Enable alertingSaveStateCompressed by default [#109390](https://github.com/grafana/grafana/pull/109390), [@alexander-akhmetov](https://github.com/alexander-akhmetov)
- **Dashboards:** Repeating with no clone keys [#109839](https://github.com/grafana/grafana/pull/109839), [@torkelo](https://github.com/torkelo)
- **Provisioning:** Use inline secrets for gitsync [#109908](https://github.com/grafana/grafana/pull/109908), [@ryantxu](https://github.com/ryantxu)
- **Stars:** Remove deprecated internal ID apis [#110499](https://github.com/grafana/grafana/pull/110499), [@ryantxu](https://github.com/ryantxu)
### Plugin development fixes & changes
- **Drawer:** Truncate Drawer title to just one line [#109540](https://github.com/grafana/grafana/pull/109540), [@joshhunt](https://github.com/joshhunt)
- **Modal:** Center modals at smaller screen heights [#109256](https://github.com/grafana/grafana/pull/109256), [@ashharrison90](https://github.com/ashharrison90)
- **MultiCombobox:** Fix async options to being able to be removed [#109473](https://github.com/grafana/grafana/pull/109473), [@joshhunt](https://github.com/joshhunt)
- **MultiCombobox:** Fix select all when only a single option is available [#109910](https://github.com/grafana/grafana/pull/109910), [@aangelisc](https://github.com/aangelisc)
<!-- 12.2.0 END -->
<!-- 12.1.1 START --> <!-- 12.1.1 START -->
# 12.1.1 (2025-08-13) # 12.1.1 (2025-08-13)

View File

@@ -1442,6 +1442,67 @@
} }
], ],
"type": "table" "type": "table"
},
{
"datasource": {
"type": "grafana-testdata-datasource"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "thresholds"
},
"custom": {
"align": "auto",
"cellOptions": {
"type": "auto"
},
"footer": {
"reducers": ["lastNotNull", "countAll"]
},
"inspect": false
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": 0
},
{
"color": "red",
"value": 80
}
]
}
},
"overrides": []
},
"gridPos": {
"h": 6,
"w": 12,
"x": 0,
"y": 24
},
"id": 9,
"options": {
"cellHeight": "sm",
"showHeader": true
},
"pluginVersion": "12.2.0-pre",
"targets": [
{
"csvContent": "a,b\nfoo,bar\nbaz,bim\nbop,boop",
"datasource": {
"type": "grafana-testdata-datasource"
},
"refId": "A",
"scenarioId": "csv_content"
}
],
"title": "No numeric fields",
"type": "table"
} }
], ],
"preload": false, "preload": false,

View File

@@ -298,16 +298,21 @@ groupByNode(summarize(movingAverage(apps.$app.$server.counters.requests.count, 5
## Add ad hoc filters ## Add ad hoc filters
_Ad hoc filters_ are one of the most complex and flexible variable options available. _Ad hoc filters_ are one of the most complex and flexible variable options available.
Instead of a regular list of variable options, this variable allows you to build a dashboard-wide ad hoc query. Instead of creating a variable for each dimension by which you want to filter, ad hoc filters automatically create variables (key/value pairs) for all the dimensions returned by your data source query.
This allows you to apply filters dashboard-wide.
Ad hoc filters let you add label/value filters that are automatically added to all metric queries that use the specified data source. Ad hoc filters let you add label/value filters that are automatically added to all metric queries that use the specified data source.
Unlike other variables, you don't use ad hoc filters in queries. Unlike other variables, you don't use ad hoc filters in queries.
Instead, you use ad hoc filters to write filters for existing queries. Instead, you use ad hoc filters to write filters for existing queries.
{{< admonition type="note" >}} The following data sources support ad hoc filters:
Not all data sources support ad hoc filters.
Examples of those that do include Prometheus, Loki, InfluxDB, and Elasticsearch. - Dashboard - Use this special data source to [apply ad hoc filters to data from unsupported data sources](#filter-any-data-using-the-dashboard-data-source).
{{< /admonition >}} - Prometheus
- Loki
- InfluxDB
- Elasticsearch
- OpenSearch
To create an ad hoc filter, follow these steps: To create an ad hoc filter, follow these steps:
@@ -324,6 +329,60 @@ To create an ad hoc filter, follow these steps:
Now you can [filter data on the dashboard](ref:filter-dashboard). Now you can [filter data on the dashboard](ref:filter-dashboard).
### Filter any data using the Dashboard data source
In cases where a data source doesn't support the use of ad hoc filters, you can use the Dashboard data source to reference that data, and then filter it in a new panel.
This allows you to bypass the limitations of the data source in the source panel.
{{< figure src="/media/docs/grafana/panels-visualizations/screenshot-adhoc-filter-dashboard-ds-v12.2.png" max-width="750px" alt="The query section of a panel with the Dashboard data source configured" >}}
To use ad hoc filters on data from an unsupported data source, follow these steps:
1. Navigate to the dashboard with the panel with the data you want to filter.
1. Click **Edit** in top-right corner of the dashboard.
1. At the top of the dashboard, click **Add** and select **Visualization** in the drop-down list.
1. In the **Queries** tab of the edit panel view, enter `Dashboard` in the **Data source** field and select **-- Dashboard --**.
1. In the query configuration section, make the following selections:
- **Source panel** - Choose the panel with the source data.
- **Data** - Select **All Data** to use the data of the panel, and not just the annotations. This is the default selection.
- **AdHoc Filters** - Toggle on the switch to make the data from the referenced panel filterable.
{{< admonition type="note">}}
If you're referencing multiple panels in a dashboard with the Dashboard data source, you can only use one of those source panels at a time for ad hoc filtering.
{{< /admonition >}}
1. Configure any other needed options for the panel.
1. Click **Save dashboard**.
Now you can filter the data from the source panel by way of the Dashboard data source.
Add as many panels as you need.
### Dashboard drilldown with ad hoc filters
In table and bar chart visualizations, you can apply ad hoc filters directly from the visualization.
To quickly apply ad hoc filter variables, follow these steps:
1. To display the filter icons, hover your cursor over the table cell with the value for which you want to filter. In this example, the cell value is `ConfigMap Updated`, which is in the `alertname` column:
{{< figure src="/media/docs/grafana/panels-visualizations/screenshot-adhoc-filter-icon-v12.2.png" max-width="550px" alt="Table and bar chart with ad hoc filter icon displayed on a table cell" >}}
In bar chart visualizations, hover and click the bar to display the filter button:
{{< figure src="/media/docs/grafana/panels-visualizations/screenshot-adhoc-filter-icon-bar-v12.2.png" max-width="300px" alt="The ad hoc filter button in a bar chart tooltip">}}
1. Click the add filter icon.
The variable pair `alertname = ConfigMap Updated` is added to the ad hoc filter and all panels using the same data source that include that variable value are filtered by that value:
{{< figure src="/media/docs/grafana/panels-visualizations/screenshot-adhoc-filter-applied-v12.2.png" max-width="550px" alt="Table and bar chart, filtered" >}}
If one of the panels in the dashboard using that data source doesn't include that variable value, the panel won't return any data. In this example, the variable pair `_name_ = ALERTS` has been added to the ad hoc filter so the bar chart doesn't return any results:
{{< figure src="/media/docs/grafana/panels-visualizations/screenshot-adhoc-filter-no-data-v12.2.png" max-width="650px" alt="Table, filtered and bar chart returning no results" >}}
In cases where the data source you're using doesn't support ad hoc filtering, consider using the special Dashboard data source.
For more information, refer to [Filter any data using the Dashboard data source](https://grafana.com/docs/grafana/<GRAFANA_VERSION>/dashboards/variables/add-template-variables/#filter-any-data-using-the-dashboard-data-source).
<!-- vale Grafana.Spelling = YES --> <!-- vale Grafana.Spelling = YES -->
<!-- vale Grafana.WordList = YES --> <!-- vale Grafana.WordList = YES -->

View File

@@ -278,6 +278,17 @@ When linking to another dashboard that uses template variables, select variable
If you want to add all of the current dashboard's variables to the URL, then use `${__all_variables}`. If you want to add all of the current dashboard's variables to the URL, then use `${__all_variables}`.
When you link to another dashboard, ensure that:
- The target dashboard has the same variable name. If it doesn't (for example, `server` in the source dashboard and `host` in the target), you must align them or explicitly map values (for example, `&var-host=${server}`).
- You use the variable _name_, and not the label. Labels are only used as display text and aren't recognized in URLs.
For example, if you have a variable with the name `var-server` and the label `ChooseYourServer`, you must use `var-server` in the URL, as shown in the following table:
| Correct link | Incorrect link |
| ---------------------------------------------- | -------------------------------------------------------- |
| `/d/xxxx/dashboard-b?orgId=1&var-server=web02` | `/d/xxxx/dashboard-b?orgId=1&var-ChooseYourServer=web02` |
## Add data links or actions {#add-a-data-link} ## Add data links or actions {#add-a-data-link}
The following tasks describe how to configure data links and actions. The following tasks describe how to configure data links and actions.
@@ -296,9 +307,7 @@ To add a data link, follow these steps:
This is a human-readable label for the link displayed in the UI. This is a required field. This is a human-readable label for the link displayed in the UI. This is a required field.
1. Enter the **URL** to which you want to link. 1. Enter the **URL** to which you want to link.
1. (Optional) To add a data link variable, click in the **URL** field and enter `$` or press Ctrl+Space or Cmd+Space to see a list of available variables.
To add a data link variable, click in the **URL** field and enter `$` or press Ctrl+Space or Cmd+Space to see a list of available variables. This is a required field.
1. If you want the link to open in a new tab, toggle the **Open in a new tab** switch. 1. If you want the link to open in a new tab, toggle the **Open in a new tab** switch.
1. If you want the data link to open with a single click on the visualization, toggle the **One click** switch. 1. If you want the data link to open with a single click on the visualization, toggle the **One click** switch.

View File

@@ -19,7 +19,7 @@ refs:
# SQL expressions # SQL expressions
{{< docs/private-preview product="SQL expressions" >}} {{< docs/public-preview product="SQL expressions" >}}
SQL Expressions are server-side expressions that manipulate and transform the results of data source queries using MySQL-like syntax. They allow you to easily query and transform your data after it has been queried, using SQL, which provides a familiar and powerful syntax that can handle everything from simple filters to highly complex, multi-step transformations. SQL Expressions are server-side expressions that manipulate and transform the results of data source queries using MySQL-like syntax. They allow you to easily query and transform your data after it has been queried, using SQL, which provides a familiar and powerful syntax that can handle everything from simple filters to highly complex, multi-step transformations.
@@ -60,11 +60,17 @@ A key capability of SQL expressions is the ability to JOIN data from multiple ta
To work with SQL expressions, you must use data from a backend data source. In Grafana, a backend data source refers to a data source plugin or integration that communicates with a database, service, or API through the Grafana server, rather than directly from the browser (frontend). To work with SQL expressions, you must use data from a backend data source. In Grafana, a backend data source refers to a data source plugin or integration that communicates with a database, service, or API through the Grafana server, rather than directly from the browser (frontend).
## Known limitations
- Currently, only one SQL expression is supported per panel or alert.
- Grafana supports certain data sources. Refer to [compatible data sources](#compatible-data-sources) for a current list.
- Autocomplete is available, but column/field autocomplete is only available after enabling the `sqlExpressionsColumnAutoComplete` feature toggle, which is provided on an experimental basis.
## Compatible data sources ## Compatible data sources
The following are compatible data sources: The following are compatible data sources:
**Full support:** All query types for each data source are supported. **Full support:** Grafana supports all query types for each of these data sources.
- Elasticsearch - Elasticsearch
- MySQL - MySQL
@@ -73,7 +79,7 @@ The following are compatible data sources:
- Google Sheets - Google Sheets
- Amazon Athena - Amazon Athena
**Partial support:** The following data sources offer limited or conditional support. Some allow different types of queries, depending on the service being accessed. For example, Azure Monitor can query multiple services, each with its own query format. In some cases, you can also change the query type within a panel. **Partial support:** The following data sources have limited or conditional support. Some support multiple query types depending on the service. For example, Azure Monitor can query multiple services, each with its own query format. In some cases, you can also switch the query type within a panel.
- InfluxDB - InfluxDB
- Infinity - Infinity
@@ -97,6 +103,10 @@ To create a SQL expression, complete the following steps:
After you have added a SQL expression, you can select from other data source queries by referencing the RefIDs of the queries in your SQL expression as if they were tables in a SQL database. After you have added a SQL expression, you can select from other data source queries by referencing the RefIDs of the queries in your SQL expression as if they were tables in a SQL database.
{{< admonition type="note" >}}
The **RefID** is a unique identifier assigned to each query within a Grafana panel that serves as a reference name for that query's data.
{{< /admonition >}}
![Using the RefID](/media/docs/sql-expressions/using-the-RefID.png) ![Using the RefID](/media/docs/sql-expressions/using-the-RefID.png)
## Workflow to build SQL expressions ## Workflow to build SQL expressions
@@ -134,22 +144,65 @@ The SQL expression workflow in Grafana is designed with the following behaviors:
- **Non-tabular or incorrectly shaped data will not render in certain panels.** Visualizations such as graphs or gauges require properly structured data. Mismatched formats will result in rendering issues or missing data. - **Non-tabular or incorrectly shaped data will not render in certain panels.** Visualizations such as graphs or gauges require properly structured data. Mismatched formats will result in rendering issues or missing data.
For data to be used in SQL expressions, it must be in a **tabular format**, specifically the **FullLong format**. This means all relevant data is contained within a single table, with values such as metric labels stored as columns and individual cells. Because not all data sources return results in this format by default, Grafana will automatically convert compatible query results to FullLong format when they are referenced in a SQL expression.
## SQL conversion rules ## SQL conversion rules
When a RefID is referenced within a SQL statement (e.g., `SELECT * FROM A`), the system invokes a distinct SQL conversion process. When you reference a RefID within a SQL statement (e.g., `SELECT * FROM A`), the system invokes a distinct SQL conversion process.
The SQL conversion path: The SQL conversion path:
- The query result is treated as a single data frame, without labels, and is mapped directly to a tabular format. - The query result appears as a single data frame, without labels, and is mapped directly to a tabular format.
- If the frame type is present and is either numeric, wide time series, or multi-frame time series (for example, labeled formats), Grafana automatically converts the data into a table structure. - If the frame type is present and is either numeric, wide time series, or multi-frame time series (for example: labeled formats), Grafana automatically converts the data into a table structure.
## Known limitations ## Supported functions
- Currently, only one SQL expression is supported per panel or alert. Grafana maintains a complete list of supported SQL keywords, operators, and functions in the SQL expressions query validator implementation.
- Grafana supports certain data sources. Refer to [compatible data sources](#compatible-data-sources) for a current list.
- Autocomplete is available, but column/field autocomplete is only available after enabling the `sqlExpressionsColumnAutoComplete` feature toggle, which is provided on an experimental basis. For the most up-to-date reference of all supported SQL functionality, refer to the `allowedNode` and `allowedFunction` definitions in the Grafana [codebase](https://github.com/grafana/grafana/blob/main/pkg/expr/sql/parser_allow.go).
## Alerting and recording rules
SQL expressions integrates alerting and recording rules, allowing you to define complex conditions and metrics using standard SQL queries. The system processes your query results and automatically creates alert instances or recorded metrics based on the returned data structure.
For SQL Expressions to work properly with alerting and recording rules, your query must return:
- One numeric column - **_required_**. This contains the value that triggers alerts or gets recorded.
- Unique string column combinations - **_required_**. Each row must have a unique combination of string column values.
- One or more string columns - _optional_. These become **labels** for the alert instances or metrics. Examples: `service`, `region`.
Consider the following query results:
```sql
error_count,service,region
25,auth-service,us-east
0,payment-service,us-west
15,user-service,eu-west
```
This query returns:
- the numeric column `error_count` (values: 25, 0, 15)
- the string columns `service` and `region`
For alert rules, this creates three alert instances:
- First instance with labels {service=auth-service, region=us-east} and value 25 (triggers alert - high error count)
- Second instance with labels {service=payment-service, region=us-west} and value 0 (no alert - zero errors)
- Third instance with labels {service=user-service, region=eu-west} and value 15 (triggers alert - elevated error count)
For recording rules, creates one metric with three series:
- First series: error_count_total{service=auth-service, region=us-east} 25
- Second series: error_count_total{service=payment-service, region=us-west} 0
- Third series: error_count_total{service=user-service, region=eu-west} 15
Following are some best practices for alerting and recording rules:
- Keep numeric values meaningful (for example: error counts, request duration).
- Use clear, descriptive column names - these become your labels.
- Keep string values short and consistent.
- Avoid too many unique label combinations, as this can result in high cardinality.
- Always use `GROUP BY` to avoid duplicate label errors.
- Aggregate numeric values logically (for example: `SUM(error_count)`).
## Supported data source formats ## Supported data source formats
@@ -202,3 +255,19 @@ During conversion:
2. Add the SQL expression `SELECT * from A`. After you add a SQL expression that selects from RefID A, Grafana converts it to a table response: 2. Add the SQL expression `SELECT * from A`. After you add a SQL expression that selects from RefID A, Grafana converts it to a table response:
![Add the SQL expression](/media/docs/sql-expressions/add-the-sql-expression.png) ![Add the SQL expression](/media/docs/sql-expressions/add-the-sql-expression.png)
## LLM integration
The Grafana LLM plugin seamlessly integrates AI-powered assistance into your SQL expressions workflow.
{{< admonition type="note" >}}
The Grafana LLM plugin is currently in public preview, meaning Grafana offers limited support, and breaking changes might occur prior to the feature being made generally available.
{{< /admonition >}}
To use this integration, first [install and configure the LLM plugin](https://grafana.com/grafana/plugins/grafana-llm-app/). After installation, open your dashboard and select **Edit** to open the panel editor. Navigate to the **Queries** tab and scroll to the bottom where you'll find two new buttons positioned to the right of the **Run query** button in your SQL Expressions query.
{{< figure src="/media/docs/sql-expressions/sqlexpressions-LLM-integration-v12.2.png" caption="LLM integration" >}}
Click **Explain query** to open a drawer that displays a detailed explanation of your query, including its interpreted business meaning and performance statistics. Once the explanation is generated, the button changes to **View explanation**.
Click **Improve query** to open a suggestions drawer that contains performance and reliability enhancements, column naming best practices, and guidance on panel optimization. Click **Apply** to implement a suggestion. After youve interacted with the interface, you'll see a **Suggestions** button for quick access. Newer suggestions appear at the top, with older ones listed below, creating a history of improvements. If your SQL query has a parsing error, such as a syntax issue, the LLM will attempt to provide a corrected version. The LLM automatically identifies errors and helps you rewrite the query correctly.

View File

@@ -88,6 +88,22 @@ While the first field can be time-based and you can use a bar chart to plot time
We recommend that you only use one dataset in a bar chart because using multiple datasets can result in unexpected behavior. We recommend that you only use one dataset in a bar chart because using multiple datasets can result in unexpected behavior.
<!-- vale Grafana.WordList = NO -->
<!-- vale Grafana.Spelling = NO -->
## Apply ad hoc filters from the bar chart
In bar charts, you can apply ad hoc filters directly from the visualization.
To display the filter button, hover your cursor over the bar that has the value for which you want to filter and click the bar:
{{< figure src="/media/docs/grafana/panels-visualizations/screenshot-adhoc-filter-icon-bar-v12.2.png" max-width="300px" alt="The ad hoc filter button in a bar chart tooltip">}}
For more information about applying ad hoc filters this way, refer to [Dashboard drilldown with ad hoc filters](https://grafana.com/docs/grafana/<GRAFANA_VERSION>/dashboards/variables/add-template-variables/#dashboard-drilldown-with-ad-hoc-filters).
<!-- vale Grafana.Spelling = YES -->
<!-- vale Grafana.WordList = YES -->
## Configuration options ## Configuration options
{{< docs/shared lookup="visualizations/config-options-intro.md" source="grafana" version="<GRAFANA_VERSION>" >}} {{< docs/shared lookup="visualizations/config-options-intro.md" source="grafana" version="<GRAFANA_VERSION>" >}}

View File

@@ -174,6 +174,22 @@ Columns with filters applied have a blue filter displayed next to the title.
To remove the filter, click the blue filter icon and then click **Clear filter**. To remove the filter, click the blue filter icon and then click **Clear filter**.
<!-- vale Grafana.WordList = NO -->
<!-- vale Grafana.Spelling = NO -->
### Apply ad hoc filters from the table
In tables, you can apply ad hoc filters directly from the visualization with one click.
To display the filter icons, hover your cursor over the cell that has the value for which you want to filter:
{{< figure src="/media/docs/grafana/panels-visualizations/screenshot-table-adhoc-filter-v12.2.png" max-width="500px" alt="Table with ad hoc filter icon displayed on a cell" >}}
For more information about applying ad hoc filters this way, refer to [Dashboard drilldown with ad hoc filters](https://grafana.com/docs/grafana/<GRAFANA_VERSION>/dashboards/variables/add-template-variables/#dashboard-drilldown-with-ad-hoc-filters).
<!-- vale Grafana.Spelling = YES -->
<!-- vale Grafana.WordList = YES -->
## Sort columns ## Sort columns
Click a column title to change the sort order from default to descending to ascending. Click a column title to change the sort order from default to descending to ascending.
@@ -408,7 +424,7 @@ However, you can switch back and forth between tabs.
The **Pill** cell type displays each item in a comma-separated string in a colored block. The **Pill** cell type displays each item in a comma-separated string in a colored block.
{{< figure src="/media/docs/grafana/panels-visualizations/screenshot-table-pills-v12.1.png" max-width="750px" alt="Table using the pill cell type" >}} {{< figure src="/media/docs/grafana/panels-visualizations/screenshot-table-pill-cells-v12.2.png" max-width="750px" alt="Table using the pill cell type" >}}
The colors applied to each piece of text are maintained throughout the table. The colors applied to each piece of text are maintained throughout the table.
For example, if the word "test" is first displayed in a red pill, it will always be displayed in a red pill. For example, if the word "test" is first displayed in a red pill, it will always be displayed in a red pill.
@@ -439,6 +455,8 @@ in these cells if the [`disable_sanitize_html`](https://grafana.com/docs/grafana
Toggle on the **Tooltip from field** switch to use the values from another field (or column) in a tooltip. Toggle on the **Tooltip from field** switch to use the values from another field (or column) in a tooltip.
For more information, refer to [Tooltip from field](#tooltip-from-field). For more information, refer to [Tooltip from field](#tooltip-from-field).
{{< figure src="/media/docs/grafana/panels-visualizations/screenshot-table-markdown-v12.2.png" max-width="600px" alt="Table using the pill cell type" >}}
#### Image #### Image
If you have a field value that is an image URL or a base64 encoded image, this cell type displays it as an image. If you have a field value that is an image URL or a base64 encoded image, this cell type displays it as an image.

View File

@@ -0,0 +1,20 @@
---
description: Guide for upgrading to Grafana v12.2
keywords:
- grafana
- configuration
- documentation
- upgrade
- '12.2'
title: Upgrade to Grafana v12.2
menuTitle: Upgrade to v12.2
weight: 498
---
# Upgrade to Grafana v12.2
{{< docs/shared lookup="upgrade/intro_2.md" source="grafana" version="<GRAFANA_VERSION>" >}}
{{< docs/shared lookup="back-up/back-up-grafana.md" source="grafana" version="<GRAFANA_VERSION>" leveloffset="+1" >}}
{{< docs/shared lookup="upgrade/upgrade-common-tasks.md" source="grafana" version="<GRAFANA_VERSION>" >}}

View File

@@ -192,6 +192,7 @@ For a complete list of every change, with links to pull requests and related iss
## Grafana 12 ## Grafana 12
- [What's new in 12.2](https://grafana.com/docs/grafana/<GRAFANA_VERSION>/whatsnew/whats-new-in-v12-2)
- [What's new in 12.1](https://grafana.com/docs/grafana/<GRAFANA_VERSION>/whatsnew/whats-new-in-v12-1) - [What's new in 12.1](https://grafana.com/docs/grafana/<GRAFANA_VERSION>/whatsnew/whats-new-in-v12-1)
- [What's new in 12.0](https://grafana.com/docs/grafana/<GRAFANA_VERSION>/whatsnew/whats-new-in-v12-0) - [What's new in 12.0](https://grafana.com/docs/grafana/<GRAFANA_VERSION>/whatsnew/whats-new-in-v12-0)

View File

@@ -0,0 +1,72 @@
---
description: Feature and improvement highlights for Grafana v12.2
keywords:
- grafana
- new
- documentation
- '12.2'
- release notes
labels:
products:
- cloud
- enterprise
- oss
title: What's new in Grafana v12.2
posts:
- title: SQL expressions
items:
- whats-new/2025-09-05-sql-expressions.md
- title: Dashboards and visualizations
items:
- whats-new/2025-08-22-new-table-visualization-is-generally-available.md
- whats-new/2025-08-27-generate-tooltips-from-table-fields.md
- whats-new/2025-08-27-improved-footer-for-table-visualization.md
- whats-new/2025-07-17-disable-tooltips-in-canvas-visualizations.md
- whats-new/2025-07-14-static-options-for-query-variable.md
- whats-new/2025-07-24-dynamic-connection-direction-in-canvas.md
- whats-new/2025-08-04-canvas-pan-zoom-improvements.md
- whats-new/2025-09-01-actions-authentication-via-infinity-datasource.md
- whats-new/2025-09-02-enhanced-ad-hoc-filter-support.md
- whats-new/2025-09-02-new-dashboard-apis-now-enabled-by-default.md
- title: Reporting
items:
- whats-new/2025-05-27-new-and-improved-reporting.md
- title: Data sources
items:
- whats-new/2025-08-12-jenkins-enterprise-data-source-for-grafana.md
- whats-new/2025-07-16-google-sheets-data-source-now-supports-template-variables.md
- whats-new/2025-09-04-azure-monitor-resource-picker-filtering-and-recent-resources.md
- title: Explore
items:
- whats-new/2025-07-08-saved-queries-in-dashboards-and-explore.md
- title: Logs Drilldown
items:
- whats-new/2025-08-29-json-log-line-viewer-in-logs-drilldown-is-now-generally-available.md
- title: Metrics Drilldown
items:
- whats-new/2025-08-07-grafana-metrics-drilldown-entry-point-from-alerting-rule.md
- title: Plugins
items:
- whats-new/2025-09-11-translate-your-plugin.md
- title: Authentication and authorization
items:
- whats-new/2025-09-10-scim-configuration-ui.md
whats_new_grafana_version: 12.2
weight: -51
---
# Whats new in Grafana v12.2
Welcome to Grafana 12.2! This release focuses on making it easier to gain insights from your data.
We're excited to announce several features are now GA. Enhanced ad hoc filtering transforms your dashboards into true command centers, allowing you to slice and dice datasets on the fly. The redesigned table visualization offers improved performance and visual aids for quick pattern and anomaly identification, helping you make faster decisions. The Logs Drilldown JSON viewer makes intimidating log structures organized and explorable. Metrics Drilldown now integrates with alert creation in Grafana, so you can explore Prometheus data with intuitive point-and-click interactions, find the right visualization, and easily use its query in your alert rule.
We're also collecting feedback on some new public preview features. AI-powered SQL expressions eliminate the barrier between questions and answers by generating SQL queries from natural language and providing instant explanations for existing queries. Our enhanced Canvas Pan and Zoom experience lets you design complex dashboards exactly as you envision them.
Keep reading to learn more about everything 12.2 has in store.
{{< youtube id=-7A_tePidEM >}}
For even more detail about all the changes in this release, refer to the [changelog](https://github.com/grafana/grafana/blob/main/CHANGELOG.md). For the specific steps we recommend when you upgrade to v12.2, check out our [Upgrade Guide](https://grafana.com/docs/grafana/<GRAFANA_VERSION>/upgrade-guide/upgrade-v12.2/).
{{< docs/whats-new >}}

View File

@@ -11,7 +11,7 @@ const waitForTableLoad = async (loc: Page | Locator) => {
}; };
test.describe('Panels test: Table - Footer', { tag: ['@panels', '@table'] }, () => { test.describe('Panels test: Table - Footer', { tag: ['@panels', '@table'] }, () => {
test('Footer unaffected by filtering', async ({ gotoDashboardPage, selectors, page }) => { test('Footer affected by filtering', async ({ gotoDashboardPage, selectors, page }) => {
const dashboardPage = await gotoDashboardPage({ const dashboardPage = await gotoDashboardPage({
uid: DASHBOARD_UID, uid: DASHBOARD_UID,
queryParams: new URLSearchParams({ editPanel: '4' }), queryParams: new URLSearchParams({ editPanel: '4' }),
@@ -51,7 +51,7 @@ test.describe('Panels test: Table - Footer', { tag: ['@panels', '@table'] }, ()
dashboardPage dashboardPage
.getByGrafanaSelector(selectors.components.Panels.Visualization.TableNG.Footer.Value) .getByGrafanaSelector(selectors.components.Panels.Visualization.TableNG.Footer.Value)
.nth(minColumnIdx) .nth(minColumnIdx)
).toHaveText(minReducerValue); ).not.toHaveText(minReducerValue);
}); });
test('Footer unaffected by sorting', async ({ gotoDashboardPage, selectors, page }) => { test('Footer unaffected by sorting', async ({ gotoDashboardPage, selectors, page }) => {

View File

@@ -1,6 +1,6 @@
{ {
"name": "@test-plugins/extensions-test-app", "name": "@test-plugins/extensions-test-app",
"version": "12.2.0-pre", "version": "12.2.1",
"private": true, "private": true,
"scripts": { "scripts": {
"build": "NODE_OPTIONS='--experimental-strip-types --no-warnings=ExperimentalWarning' webpack -c ./webpack.config.ts --env production", "build": "NODE_OPTIONS='--experimental-strip-types --no-warnings=ExperimentalWarning' webpack -c ./webpack.config.ts --env production",

View File

@@ -1,6 +1,6 @@
{ {
"name": "@test-plugins/grafana-e2etest-datasource", "name": "@test-plugins/grafana-e2etest-datasource",
"version": "12.2.0-pre", "version": "12.2.1",
"private": true, "private": true,
"scripts": { "scripts": {
"build": "NODE_OPTIONS='--experimental-strip-types --no-warnings=ExperimentalWarning' webpack -c ./webpack.config.ts --env production", "build": "NODE_OPTIONS='--experimental-strip-types --no-warnings=ExperimentalWarning' webpack -c ./webpack.config.ts --env production",

View File

@@ -1,5 +1,5 @@
{ {
"$schema": "node_modules/lerna/schemas/lerna-schema.json", "$schema": "node_modules/lerna/schemas/lerna-schema.json",
"npmClient": "yarn", "npmClient": "yarn",
"version": "12.2.0-pre" "version": "12.2.1"
} }

View File

@@ -3,7 +3,7 @@
"license": "AGPL-3.0-only", "license": "AGPL-3.0-only",
"private": true, "private": true,
"name": "grafana", "name": "grafana",
"version": "12.2.0-pre", "version": "12.2.1",
"repository": "github:grafana/grafana", "repository": "github:grafana/grafana",
"scripts": { "scripts": {
"predev": "./scripts/check-frontend-dev.sh", "predev": "./scripts/check-frontend-dev.sh",

View File

@@ -2,7 +2,7 @@
"author": "Grafana Labs", "author": "Grafana Labs",
"license": "Apache-2.0", "license": "Apache-2.0",
"name": "@grafana/alerting", "name": "@grafana/alerting",
"version": "12.2.0-pre", "version": "12.2.1",
"description": "Grafana Alerting Library Build vertical integrations on top of the industry-leading alerting solution", "description": "Grafana Alerting Library Build vertical integrations on top of the industry-leading alerting solution",
"keywords": [ "keywords": [
"typescript", "typescript",
@@ -14,7 +14,7 @@
"sideEffects": false, "sideEffects": false,
"repository": { "repository": {
"type": "git", "type": "git",
"url": "git+http://github.com/grafana/grafana.git", "url": "http://github.com/grafana/grafana.git",
"directory": "packages/grafana-alerting" "directory": "packages/grafana-alerting"
}, },
"main": "src/index.ts", "main": "src/index.ts",

View File

@@ -2,7 +2,7 @@
"author": "Grafana Labs", "author": "Grafana Labs",
"license": "Apache-2.0", "license": "Apache-2.0",
"name": "@grafana/data", "name": "@grafana/data",
"version": "12.2.0-pre", "version": "12.2.1",
"description": "Grafana Data Library", "description": "Grafana Data Library",
"keywords": [ "keywords": [
"typescript" "typescript"
@@ -56,8 +56,8 @@
}, },
"dependencies": { "dependencies": {
"@braintree/sanitize-url": "7.0.1", "@braintree/sanitize-url": "7.0.1",
"@grafana/i18n": "12.2.0-pre", "@grafana/i18n": "12.2.1",
"@grafana/schema": "12.2.0-pre", "@grafana/schema": "12.2.1",
"@leeoniya/ufuzzy": "1.0.18", "@leeoniya/ufuzzy": "1.0.18",
"@types/d3-interpolate": "^3.0.0", "@types/d3-interpolate": "^3.0.0",
"@types/string-hash": "1.1.3", "@types/string-hash": "1.1.3",

View File

@@ -2,7 +2,7 @@
"author": "Grafana Labs", "author": "Grafana Labs",
"license": "Apache-2.0", "license": "Apache-2.0",
"name": "@grafana/e2e-selectors", "name": "@grafana/e2e-selectors",
"version": "12.2.0-pre", "version": "12.2.1",
"description": "Grafana End-to-End Test Selectors Library", "description": "Grafana End-to-End Test Selectors Library",
"keywords": [ "keywords": [
"cli", "cli",

View File

@@ -1,7 +1,7 @@
{ {
"name": "@grafana/eslint-plugin", "name": "@grafana/eslint-plugin",
"description": "ESLint rules for use within the Grafana repo. Not suitable (or supported) for external use.", "description": "ESLint rules for use within the Grafana repo. Not suitable (or supported) for external use.",
"version": "12.2.0-pre", "version": "12.2.1",
"main": "./index.cjs", "main": "./index.cjs",
"author": "Grafana Labs", "author": "Grafana Labs",
"license": "Apache-2.0", "license": "Apache-2.0",

View File

@@ -2,7 +2,7 @@
"author": "Grafana Labs", "author": "Grafana Labs",
"license": "Apache-2.0", "license": "Apache-2.0",
"name": "@grafana/flamegraph", "name": "@grafana/flamegraph",
"version": "12.2.0-pre", "version": "12.2.1",
"description": "Grafana flamegraph visualization component", "description": "Grafana flamegraph visualization component",
"keywords": [ "keywords": [
"grafana", "grafana",
@@ -44,8 +44,8 @@
], ],
"dependencies": { "dependencies": {
"@emotion/css": "11.13.5", "@emotion/css": "11.13.5",
"@grafana/data": "12.2.0-pre", "@grafana/data": "12.2.1",
"@grafana/ui": "12.2.0-pre", "@grafana/ui": "12.2.1",
"@leeoniya/ufuzzy": "1.0.18", "@leeoniya/ufuzzy": "1.0.18",
"d3": "^7.8.5", "d3": "^7.8.5",
"lodash": "4.17.21", "lodash": "4.17.21",

View File

@@ -2,7 +2,7 @@
"author": "Grafana Labs", "author": "Grafana Labs",
"license": "Apache-2.0", "license": "Apache-2.0",
"name": "@grafana/i18n", "name": "@grafana/i18n",
"version": "12.2.0-pre", "version": "12.2.1",
"description": "Grafana Internationalization Library", "description": "Grafana Internationalization Library",
"keywords": [ "keywords": [
"grafana", "grafana",

View File

@@ -3,7 +3,7 @@
"license": "AGPL-3.0-only", "license": "AGPL-3.0-only",
"name": "@grafana/o11y-ds-frontend", "name": "@grafana/o11y-ds-frontend",
"private": true, "private": true,
"version": "12.2.0-pre", "version": "12.2.1",
"description": "Library to manage traces in Grafana.", "description": "Library to manage traces in Grafana.",
"sideEffects": false, "sideEffects": false,
"repository": { "repository": {
@@ -18,12 +18,12 @@
}, },
"dependencies": { "dependencies": {
"@emotion/css": "11.13.5", "@emotion/css": "11.13.5",
"@grafana/data": "12.2.0-pre", "@grafana/data": "12.2.1",
"@grafana/e2e-selectors": "12.2.0-pre", "@grafana/e2e-selectors": "12.2.1",
"@grafana/plugin-ui": "^0.10.10", "@grafana/plugin-ui": "^0.10.10",
"@grafana/runtime": "12.2.0-pre", "@grafana/runtime": "12.2.1",
"@grafana/schema": "12.2.0-pre", "@grafana/schema": "12.2.1",
"@grafana/ui": "12.2.0-pre", "@grafana/ui": "12.2.1",
"react-select": "5.10.2", "react-select": "5.10.2",
"react-use": "17.6.0", "react-use": "17.6.0",
"rxjs": "7.8.2", "rxjs": "7.8.2",

View File

@@ -2,7 +2,7 @@
"name": "@grafana/plugin-configs", "name": "@grafana/plugin-configs",
"description": "Shared dependencies and files for core plugins", "description": "Shared dependencies and files for core plugins",
"private": true, "private": true,
"version": "12.2.0-pre", "version": "12.2.1",
"dependencies": { "dependencies": {
"tslib": "2.8.1" "tslib": "2.8.1"
}, },

View File

@@ -2,7 +2,7 @@
"author": "Grafana Labs", "author": "Grafana Labs",
"license": "AGPL-3.0-only", "license": "AGPL-3.0-only",
"name": "@grafana/prometheus", "name": "@grafana/prometheus",
"version": "12.2.0-pre", "version": "12.2.1",
"description": "Grafana Prometheus Library", "description": "Grafana Prometheus Library",
"keywords": [ "keywords": [
"typescript", "typescript",
@@ -41,13 +41,13 @@
"dependencies": { "dependencies": {
"@emotion/css": "11.13.5", "@emotion/css": "11.13.5",
"@floating-ui/react": "0.27.16", "@floating-ui/react": "0.27.16",
"@grafana/data": "12.2.0-pre", "@grafana/data": "12.2.1",
"@grafana/e2e-selectors": "12.2.0-pre", "@grafana/e2e-selectors": "12.2.1",
"@grafana/i18n": "12.2.0-pre", "@grafana/i18n": "12.2.1",
"@grafana/plugin-ui": "^0.10.10", "@grafana/plugin-ui": "^0.10.10",
"@grafana/runtime": "12.2.0-pre", "@grafana/runtime": "12.2.1",
"@grafana/schema": "12.2.0-pre", "@grafana/schema": "12.2.1",
"@grafana/ui": "12.2.0-pre", "@grafana/ui": "12.2.1",
"@hello-pangea/dnd": "18.0.1", "@hello-pangea/dnd": "18.0.1",
"@leeoniya/ufuzzy": "1.0.18", "@leeoniya/ufuzzy": "1.0.18",
"@lezer/common": "1.2.3", "@lezer/common": "1.2.3",

View File

@@ -2,7 +2,7 @@
"author": "Grafana Labs", "author": "Grafana Labs",
"license": "Apache-2.0", "license": "Apache-2.0",
"name": "@grafana/runtime", "name": "@grafana/runtime",
"version": "12.2.0-pre", "version": "12.2.1",
"description": "Grafana Runtime Library", "description": "Grafana Runtime Library",
"keywords": [ "keywords": [
"grafana", "grafana",
@@ -53,11 +53,11 @@
"postpack": "mv package.json.bak package.json && rimraf ./unstable" "postpack": "mv package.json.bak package.json && rimraf ./unstable"
}, },
"dependencies": { "dependencies": {
"@grafana/data": "12.2.0-pre", "@grafana/data": "12.2.1",
"@grafana/e2e-selectors": "12.2.0-pre", "@grafana/e2e-selectors": "12.2.1",
"@grafana/faro-web-sdk": "^1.13.2", "@grafana/faro-web-sdk": "^1.13.2",
"@grafana/schema": "12.2.0-pre", "@grafana/schema": "12.2.1",
"@grafana/ui": "12.2.0-pre", "@grafana/ui": "12.2.1",
"@types/systemjs": "6.15.3", "@types/systemjs": "6.15.3",
"history": "4.10.1", "history": "4.10.1",
"lodash": "4.17.21", "lodash": "4.17.21",

View File

@@ -2,7 +2,7 @@
"author": "Grafana Labs", "author": "Grafana Labs",
"license": "Apache-2.0", "license": "Apache-2.0",
"name": "@grafana/schema", "name": "@grafana/schema",
"version": "12.2.0-pre", "version": "12.2.1",
"description": "Grafana Schema Library", "description": "Grafana Schema Library",
"keywords": [ "keywords": [
"typescript" "typescript"

View File

@@ -8,7 +8,7 @@
// //
// Run 'make gen-cue' from repository root to regenerate. // Run 'make gen-cue' from repository root to regenerate.
export const pluginVersion = "12.2.0-pre"; export const pluginVersion = "12.2.1";
export interface Options { export interface Options {
limit: number; limit: number;

View File

@@ -10,7 +10,7 @@
import * as common from '@grafana/schema'; import * as common from '@grafana/schema';
export const pluginVersion = "12.2.0-pre"; export const pluginVersion = "12.2.1";
export interface Options extends common.OptionsWithLegend, common.OptionsWithTooltip, common.OptionsWithTextFormatting { export interface Options extends common.OptionsWithLegend, common.OptionsWithTooltip, common.OptionsWithTextFormatting {
/** /**

View File

@@ -10,7 +10,7 @@
import * as common from '@grafana/schema'; import * as common from '@grafana/schema';
export const pluginVersion = "12.2.0-pre"; export const pluginVersion = "12.2.1";
export interface Options extends common.OptionsWithLegend, common.SingleStatBaseOptions { export interface Options extends common.OptionsWithLegend, common.SingleStatBaseOptions {
displayMode: common.BarGaugeDisplayMode; displayMode: common.BarGaugeDisplayMode;

View File

@@ -10,7 +10,7 @@
import * as common from '@grafana/schema'; import * as common from '@grafana/schema';
export const pluginVersion = "12.2.0-pre"; export const pluginVersion = "12.2.1";
export enum VizDisplayMode { export enum VizDisplayMode {
Candles = 'candles', Candles = 'candles',

View File

@@ -10,7 +10,7 @@
import * as ui from '@grafana/schema'; import * as ui from '@grafana/schema';
export const pluginVersion = "12.2.0-pre"; export const pluginVersion = "12.2.1";
export enum HorizontalConstraint { export enum HorizontalConstraint {
Center = 'center', Center = 'center',

View File

@@ -10,7 +10,7 @@
import * as common from '@grafana/schema'; import * as common from '@grafana/schema';
export const pluginVersion = "12.2.0-pre"; export const pluginVersion = "12.2.1";
export interface MetricStat { export interface MetricStat {
/** /**

View File

@@ -8,7 +8,7 @@
// //
// Run 'make gen-cue' from repository root to regenerate. // Run 'make gen-cue' from repository root to regenerate.
export const pluginVersion = "12.2.0-pre"; export const pluginVersion = "12.2.1";
export interface Options { export interface Options {
/** /**

View File

@@ -8,7 +8,7 @@
// //
// Run 'make gen-cue' from repository root to regenerate. // Run 'make gen-cue' from repository root to regenerate.
export const pluginVersion = "12.2.0-pre"; export const pluginVersion = "12.2.1";
export interface Options { export interface Options {
selectedSeries: number; selectedSeries: number;

View File

@@ -8,7 +8,7 @@
// //
// Run 'make gen-cue' from repository root to regenerate. // Run 'make gen-cue' from repository root to regenerate.
export const pluginVersion = "12.2.0-pre"; export const pluginVersion = "12.2.1";
export type UpdateConfig = { export type UpdateConfig = {
render: boolean, render: boolean,

View File

@@ -10,7 +10,7 @@
import * as common from '@grafana/schema'; import * as common from '@grafana/schema';
export const pluginVersion = "12.2.0-pre"; export const pluginVersion = "12.2.1";
export type BucketAggregation = (DateHistogram | Histogram | Terms | Filters | GeoHashGrid | Nested); export type BucketAggregation = (DateHistogram | Histogram | Terms | Filters | GeoHashGrid | Nested);

View File

@@ -10,7 +10,7 @@
import * as common from '@grafana/schema'; import * as common from '@grafana/schema';
export const pluginVersion = "12.2.0-pre"; export const pluginVersion = "12.2.1";
export interface Options extends common.SingleStatBaseOptions { export interface Options extends common.SingleStatBaseOptions {
minVizHeight: number; minVizHeight: number;

View File

@@ -10,7 +10,7 @@
import * as ui from '@grafana/schema'; import * as ui from '@grafana/schema';
export const pluginVersion = "12.2.0-pre"; export const pluginVersion = "12.2.1";
export interface Options { export interface Options {
basemap: ui.MapLayerOptions; basemap: ui.MapLayerOptions;

View File

@@ -10,7 +10,7 @@
import * as ui from '@grafana/schema'; import * as ui from '@grafana/schema';
export const pluginVersion = "12.2.0-pre"; export const pluginVersion = "12.2.1";
/** /**
* Controls the color mode of the heatmap * Controls the color mode of the heatmap

View File

@@ -10,7 +10,7 @@
import * as common from '@grafana/schema'; import * as common from '@grafana/schema';
export const pluginVersion = "12.2.0-pre"; export const pluginVersion = "12.2.1";
export interface Options extends common.OptionsWithLegend, common.OptionsWithTooltip { export interface Options extends common.OptionsWithLegend, common.OptionsWithTooltip {
/** /**

View File

@@ -10,7 +10,7 @@
import * as common from '@grafana/schema'; import * as common from '@grafana/schema';
export const pluginVersion = "12.2.0-pre"; export const pluginVersion = "12.2.1";
export interface Options { export interface Options {
controlsStorageKey?: string; controlsStorageKey?: string;

View File

@@ -8,7 +8,7 @@
// //
// Run 'make gen-cue' from repository root to regenerate. // Run 'make gen-cue' from repository root to regenerate.
export const pluginVersion = "12.2.0-pre"; export const pluginVersion = "12.2.1";
export interface Options { export interface Options {
/** /**

View File

@@ -8,7 +8,7 @@
// //
// Run 'make gen-cue' from repository root to regenerate. // Run 'make gen-cue' from repository root to regenerate.
export const pluginVersion = "12.2.0-pre"; export const pluginVersion = "12.2.1";
export interface ArcOption { export interface ArcOption {
/** /**

View File

@@ -10,7 +10,7 @@
import * as common from '@grafana/schema'; import * as common from '@grafana/schema';
export const pluginVersion = "12.2.0-pre"; export const pluginVersion = "12.2.1";
/** /**
* Select the pie chart display style. * Select the pie chart display style.

View File

@@ -10,7 +10,7 @@
import * as common from '@grafana/schema'; import * as common from '@grafana/schema';
export const pluginVersion = "12.2.0-pre"; export const pluginVersion = "12.2.1";
export interface Options extends common.SingleStatBaseOptions { export interface Options extends common.SingleStatBaseOptions {
colorMode: common.BigValueColorMode; colorMode: common.BigValueColorMode;

View File

@@ -10,7 +10,7 @@
import * as ui from '@grafana/schema'; import * as ui from '@grafana/schema';
export const pluginVersion = "12.2.0-pre"; export const pluginVersion = "12.2.1";
export interface Options extends ui.OptionsWithLegend, ui.OptionsWithTooltip, ui.OptionsWithTimezones { export interface Options extends ui.OptionsWithLegend, ui.OptionsWithTooltip, ui.OptionsWithTimezones {
/** /**

View File

@@ -10,7 +10,7 @@
import * as ui from '@grafana/schema'; import * as ui from '@grafana/schema';
export const pluginVersion = "12.2.0-pre"; export const pluginVersion = "12.2.1";
export interface Options extends ui.OptionsWithLegend, ui.OptionsWithTooltip, ui.OptionsWithTimezones { export interface Options extends ui.OptionsWithLegend, ui.OptionsWithTooltip, ui.OptionsWithTimezones {
/** /**

View File

@@ -10,7 +10,7 @@
import * as ui from '@grafana/schema'; import * as ui from '@grafana/schema';
export const pluginVersion = "12.2.0-pre"; export const pluginVersion = "12.2.1";
export interface Options { export interface Options {
/** /**

View File

@@ -8,7 +8,7 @@
// //
// Run 'make gen-cue' from repository root to regenerate. // Run 'make gen-cue' from repository root to regenerate.
export const pluginVersion = "12.2.0-pre"; export const pluginVersion = "12.2.1";
export enum TextMode { export enum TextMode {
Code = 'code', Code = 'code',

View File

@@ -10,7 +10,7 @@
import * as common from '@grafana/schema'; import * as common from '@grafana/schema';
export const pluginVersion = "12.2.0-pre"; export const pluginVersion = "12.2.1";
export interface Options extends common.OptionsWithTimezones { export interface Options extends common.OptionsWithTimezones {
legend: common.VizLegendOptions; legend: common.VizLegendOptions;

View File

@@ -10,7 +10,7 @@
import * as common from '@grafana/schema'; import * as common from '@grafana/schema';
export const pluginVersion = "12.2.0-pre"; export const pluginVersion = "12.2.1";
/** /**
* Identical to timeseries... except it does not have timezone settings * Identical to timeseries... except it does not have timezone settings

View File

@@ -10,7 +10,7 @@
import * as common from '@grafana/schema'; import * as common from '@grafana/schema';
export const pluginVersion = "12.2.0-pre"; export const pluginVersion = "12.2.1";
export enum PointShape { export enum PointShape {
Circle = 'circle', Circle = 'circle',

View File

@@ -3,7 +3,7 @@
"license": "AGPL-3.0-only", "license": "AGPL-3.0-only",
"private": true, "private": true,
"name": "@grafana/sql", "name": "@grafana/sql",
"version": "12.2.0-pre", "version": "12.2.1",
"repository": { "repository": {
"type": "git", "type": "git",
"url": "http://github.com/grafana/grafana.git", "url": "http://github.com/grafana/grafana.git",
@@ -16,12 +16,12 @@
}, },
"dependencies": { "dependencies": {
"@emotion/css": "11.13.5", "@emotion/css": "11.13.5",
"@grafana/data": "12.2.0-pre", "@grafana/data": "12.2.1",
"@grafana/e2e-selectors": "12.2.0-pre", "@grafana/e2e-selectors": "12.2.1",
"@grafana/i18n": "12.2.0-pre", "@grafana/i18n": "12.2.1",
"@grafana/plugin-ui": "^0.10.10", "@grafana/plugin-ui": "^0.10.10",
"@grafana/runtime": "12.2.0-pre", "@grafana/runtime": "12.2.1",
"@grafana/ui": "12.2.0-pre", "@grafana/ui": "12.2.1",
"@react-awesome-query-builder/ui": "6.6.15", "@react-awesome-query-builder/ui": "6.6.15",
"immutable": "5.1.3", "immutable": "5.1.3",
"lodash": "4.17.21", "lodash": "4.17.21",

View File

@@ -2,7 +2,7 @@
"author": "Grafana Labs", "author": "Grafana Labs",
"license": "Apache-2.0", "license": "Apache-2.0",
"name": "@grafana/test-utils", "name": "@grafana/test-utils",
"version": "12.2.0-pre", "version": "12.2.1",
"private": true, "private": true,
"description": "Grafana test utils & Mock API", "description": "Grafana test utils & Mock API",
"keywords": [ "keywords": [

View File

@@ -2,7 +2,7 @@
"author": "Grafana Labs", "author": "Grafana Labs",
"license": "Apache-2.0", "license": "Apache-2.0",
"name": "@grafana/ui", "name": "@grafana/ui",
"version": "12.2.0-pre", "version": "12.2.1",
"description": "Grafana Components Library", "description": "Grafana Components Library",
"keywords": [ "keywords": [
"grafana", "grafana",
@@ -67,11 +67,11 @@
"@emotion/react": "11.14.0", "@emotion/react": "11.14.0",
"@emotion/serialize": "1.3.3", "@emotion/serialize": "1.3.3",
"@floating-ui/react": "0.27.16", "@floating-ui/react": "0.27.16",
"@grafana/data": "12.2.0-pre", "@grafana/data": "12.2.1",
"@grafana/e2e-selectors": "12.2.0-pre", "@grafana/e2e-selectors": "12.2.1",
"@grafana/faro-web-sdk": "^1.13.2", "@grafana/faro-web-sdk": "^1.13.2",
"@grafana/i18n": "12.2.0-pre", "@grafana/i18n": "12.2.1",
"@grafana/schema": "12.2.0-pre", "@grafana/schema": "12.2.1",
"@hello-pangea/dnd": "18.0.1", "@hello-pangea/dnd": "18.0.1",
"@monaco-editor/react": "4.7.0", "@monaco-editor/react": "4.7.0",
"@popperjs/core": "2.11.8", "@popperjs/core": "2.11.8",

View File

@@ -108,7 +108,6 @@ export function TableNG(props: TableNGProps) {
enablePagination = false, enablePagination = false,
enableSharedCrosshair = false, enableSharedCrosshair = false,
enableVirtualization, enableVirtualization,
fieldConfig,
frozenColumns = 0, frozenColumns = 0,
getActions = () => [], getActions = () => [],
height, height,
@@ -125,12 +124,6 @@ export function TableNG(props: TableNGProps) {
width, width,
} = props; } = props;
const hasFooter = useMemo(
() => data.fields.some((field) => field.config?.custom?.footer?.reducers?.length ?? false),
[data.fields]
);
const footerHeight = hasFooter ? calculateFooterHeight(data, fieldConfig) : 0;
const theme = useTheme2(); const theme = useTheme2();
const styles = useStyles2(getGridStyles, enablePagination, transparent); const styles = useStyles2(getGridStyles, enablePagination, transparent);
const panelContext = usePanelContext(); const panelContext = usePanelContext();
@@ -146,7 +139,16 @@ export function TableNG(props: TableNGProps) {
[getActions, data, userCanExecuteActions] [getActions, data, userCanExecuteActions]
); );
const visibleFields = useMemo(() => getVisibleFields(data.fields), [data.fields]);
const hasHeader = !noHeader; const hasHeader = !noHeader;
const hasFooter = useMemo(
() => visibleFields.some((field) => Boolean(field.config.custom?.footer?.reducers?.length)),
[visibleFields]
);
const footerHeight = useMemo(
() => (hasFooter ? calculateFooterHeight(visibleFields) : 0),
[hasFooter, visibleFields]
);
const resizeHandler = useColumnResize(onColumnResize); const resizeHandler = useColumnResize(onColumnResize);
@@ -173,7 +175,7 @@ export function TableNG(props: TableNGProps) {
const [expandedRows, setExpandedRows] = useState(() => new Set<number>()); const [expandedRows, setExpandedRows] = useState(() => new Set<number>());
// vt scrollbar accounting for column auto-sizing // vt scrollbar accounting for column auto-sizing
const visibleFields = useMemo(() => getVisibleFields(data.fields), [data.fields]);
const defaultRowHeight = useMemo( const defaultRowHeight = useMemo(
() => getDefaultRowHeight(theme, visibleFields, cellHeight), () => getDefaultRowHeight(theme, visibleFields, cellHeight),
[theme, visibleFields, cellHeight] [theme, visibleFields, cellHeight]
@@ -677,7 +679,7 @@ export function TableNG(props: TableNGProps) {
), ),
renderSummaryCell: () => ( renderSummaryCell: () => (
<SummaryCell <SummaryCell
rows={rows} rows={sortedRows}
footers={footers} footers={footers}
field={field} field={field}
colIdx={i} colIdx={i}
@@ -707,10 +709,11 @@ export function TableNG(props: TableNGProps) {
maxRowHeight, maxRowHeight,
numFrozenColsFullyInView, numFrozenColsFullyInView,
onCellFilterAdded, onCellFilterAdded,
rows,
rowHeight, rowHeight,
rowHeightFn, rowHeightFn,
rows,
setFilter, setFilter,
sortedRows,
showTypeIcons, showTypeIcons,
theme, theme,
timeRange, timeRange,

View File

@@ -46,6 +46,7 @@ import {
getDefaultRowHeight, getDefaultRowHeight,
getDisplayName, getDisplayName,
predicateByName, predicateByName,
calculateFooterHeight,
} from './utils'; } from './utils';
describe('TableNG utils', () => { describe('TableNG utils', () => {
@@ -1380,6 +1381,35 @@ describe('TableNG utils', () => {
}); });
}); });
describe('calculateFooterHeight', () => {
it('should return 0 if no footer is present', () => {
const frame = createDataFrame({
fields: [
{ name: 'time', values: [1, 1, 2], nanos: [100, 99, 0] },
{ name: 'value', values: [10, 20, 30] },
],
});
expect(calculateFooterHeight(frame.fields)).toBe(0);
});
it('should return the height in pixels for the max reducers on a given field', () => {
const frame = createDataFrame({
fields: [
{
name: 'time',
values: [1, 1, 2],
nanos: [100, 99, 0],
config: { custom: { footer: { reducers: ['min', 'max', 'count'] } } },
},
{ name: 'value', values: [10, 20, 30], config: { custom: { footer: { reducers: ['min'] } } } },
],
});
expect(calculateFooterHeight(frame.fields)).toBe(78); // 3 reducers * 22px line height + 12px padding
});
});
describe('getDisplayName', () => { describe('getDisplayName', () => {
it('should return the display name if set', () => { it('should return the display name if set', () => {
const field: Field = { const field: Field = {

View File

@@ -8,7 +8,6 @@ import { Count, varPreLine } from 'uwrap';
import { import {
FieldType, FieldType,
Field, Field,
FieldConfigSource,
formattedValueToString, formattedValueToString,
GrafanaTheme2, GrafanaTheme2,
DisplayValue, DisplayValue,
@@ -842,55 +841,18 @@ export const processNestedTableRows = (
return result; return result;
}; };
/**
* @internal
* Get the maximum number of reducers across all fields
*/
const getMaxReducerCount = (dataFrame: DataFrame, fieldConfig?: FieldConfigSource): number => {
// Filter to only numeric fields that can have reducers
const numericFields = dataFrame.fields.filter(({ type }) => type === FieldType.number);
// If there are no numeric fields, return 0
if (numericFields.length === 0) {
return 0;
}
// Map each field to its reducer count (direct config or override)
const reducerCounts = numericFields.map((field) => {
// Get the direct reducer count from the field config
const directReducers = field.config?.custom?.footer?.reducers ?? [];
let reducerCount = directReducers.length;
// Check for overrides if field config is available
if (fieldConfig?.overrides) {
// Find override that matches this field
const override = fieldConfig.overrides.find(
({ matcher: { id, options } }) => id === 'byName' && options === getDisplayName(field)
);
// Check if there's a footer reducer property in the override
const footerProperty = override?.properties?.find(({ id }) => id === 'custom.footer.reducers');
if (footerProperty?.value && Array.isArray(footerProperty.value)) {
// If override exists, it takes precedence over direct config
reducerCount = footerProperty.value.length;
}
}
return reducerCount;
});
// Return the maximum count or 0 if no reducers found
return reducerCounts.length > 0 ? Math.max(...reducerCounts) : 0;
};
/** /**
* @internal * @internal
* Calculate the footer height based on the maximum reducer count * Calculate the footer height based on the maximum reducer count
*/ */
export const calculateFooterHeight = (dataFrame: DataFrame, fieldConfig?: FieldConfigSource) => { export const calculateFooterHeight = (fields: Field[]): number => {
const maxReducerCount = getMaxReducerCount(dataFrame, fieldConfig); let maxReducerCount = 0;
for (const field of fields) {
maxReducerCount = Math.max(maxReducerCount, field.config.custom?.footer?.reducers?.length ?? 0);
}
// Base height (+ padding) + height per reducer // Base height (+ padding) + height per reducer
return maxReducerCount * TABLE.LINE_HEIGHT + TABLE.CELL_PADDING * 2; return maxReducerCount > 0 ? maxReducerCount * TABLE.LINE_HEIGHT + TABLE.CELL_PADDING * 2 : 0;
}; };
/** /**

View File

@@ -0,0 +1,102 @@
package commands
import (
"flag"
"os"
"path/filepath"
"testing"
"github.com/stretchr/testify/require"
"github.com/urfave/cli/v2"
"github.com/grafana/grafana/pkg/cmd/grafana-cli/utils"
)
func TestRemoveCommand_StaticFS_FailsWithImmutableError(t *testing.T) {
t.Run("removeCommand fails with immutable error for plugins using StaticFS", func(t *testing.T) {
tmpDir := t.TempDir()
pluginID := "test-plugin"
pluginDir := filepath.Join(tmpDir, pluginID)
err := os.MkdirAll(pluginDir, 0750)
require.NoError(t, err)
pluginJSON := `{
"id": "test-plugin",
"name": "Test Plugin",
"type": "datasource",
"info": {
"version": "1.0.0"
}
}`
err = os.WriteFile(filepath.Join(pluginDir, "plugin.json"), []byte(pluginJSON), 0644)
require.NoError(t, err)
cmdLine := createCliContextWithArgs(t, []string{pluginID}, "pluginsDir", tmpDir)
require.NotNil(t, cmdLine)
// Verify plugin directory exists before attempting removal
_, err = os.Stat(pluginDir)
require.NoError(t, err, "Plugin directory should exist before removal attempt")
err = removeCommand(cmdLine)
require.NoError(t, err)
// Verify plugin directory has been removed
_, err = os.Stat(pluginDir)
require.ErrorIs(t, err, os.ErrNotExist)
})
}
func TestRemoveCommand_PluginNotFound(t *testing.T) {
t.Run("removeCommand should handle missing plugin gracefully", func(t *testing.T) {
tmpDir := t.TempDir()
cmdLine := createCliContextWithArgs(t, []string{"non-existent-plugin"}, "pluginsDir", tmpDir)
require.NotNil(t, cmdLine)
err := removeCommand(cmdLine)
require.NoError(t, err)
})
}
func TestRemoveCommand_MissingPluginParameter(t *testing.T) {
t.Run("removeCommand should error when no plugin ID is provided", func(t *testing.T) {
cmdLine := createCliContextWithArgs(t, []string{})
require.NotNil(t, cmdLine)
err := removeCommand(cmdLine)
require.Error(t, err)
require.Contains(t, err.Error(), "missing plugin parameter")
})
}
// createCliContextWithArgs creates a CLI context with the specified arguments and optional flag key-value pairs.
// Usage: createCliContextWithArgs(t, []string{"plugin-id"}, "pluginsDir", "/path/to/plugins", "flag2", "value2")
func createCliContextWithArgs(t *testing.T, args []string, flagPairs ...string) *utils.ContextCommandLine {
if len(flagPairs)%2 != 0 {
t.Fatalf("flagPairs must be provided in key-value pairs, got %d arguments", len(flagPairs))
}
app := &cli.App{
Name: "grafana",
}
flagSet := flag.NewFlagSet("test", 0)
// Add flags from the key-value pairs
for i := 0; i < len(flagPairs); i += 2 {
key := flagPairs[i]
value := flagPairs[i+1]
flagSet.String(key, "", "")
err := flagSet.Set(key, value)
require.NoError(t, err, "Failed to set flag %s=%s", key, value)
}
err := flagSet.Parse(args)
require.NoError(t, err)
ctx := cli.NewContext(app, flagSet, nil)
return &utils.ContextCommandLine{
Context: ctx,
}
}

View File

@@ -0,0 +1,150 @@
package commands
import (
"encoding/json"
"net/http"
"net/http/httptest"
"os"
"path/filepath"
"testing"
"github.com/stretchr/testify/require"
"github.com/urfave/cli/v2"
"github.com/grafana/grafana/pkg/cmd/grafana-cli/models"
)
func TestUpgradeCommand(t *testing.T) {
t.Run("Plugin is removed even if upgrade fails", func(t *testing.T) {
tmpDir := t.TempDir()
pluginID := "test-upgrade-plugin"
pluginDir := filepath.Join(tmpDir, pluginID)
err := os.MkdirAll(pluginDir, 0750)
require.NoError(t, err)
pluginJSON := `{
"id": "test-upgrade-plugin",
"name": "Test Upgrade Plugin",
"type": "datasource",
"info": {
"version": "1.0.0"
}
}`
err = os.WriteFile(filepath.Join(pluginDir, "plugin.json"), []byte(pluginJSON), 0644)
require.NoError(t, err)
// Create a mock HTTP server that returns plugin info with a newer version
mockServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
// Handle plugin info request
if r.URL.Path == "/repo/"+pluginID {
plugin := models.Plugin{
ID: pluginID,
Versions: []models.Version{
{
Version: "2.0.0", // Newer than the local version (1.0.0)
},
},
}
w.Header().Set("Content-Type", "application/json")
err = json.NewEncoder(w).Encode(plugin)
require.NoError(t, err)
return
}
// For any other request (like installation), return 500 to cause the upgrade to fail
// after the removal attempt, which is what we want to test
w.WriteHeader(http.StatusInternalServerError)
_, err = w.Write([]byte("Server error"))
require.NoError(t, err)
}))
defer mockServer.Close()
// Use our test implementation that properly implements GcomToken()
cmdLine := newTestCommandLine([]string{pluginID}, tmpDir, mockServer.URL)
// Verify plugin directory exists before attempting upgrade
_, err = os.Stat(pluginDir)
require.NoError(t, err)
err = upgradeCommand(cmdLine)
require.Error(t, err)
require.Contains(t, err.Error(), "API returned invalid status: 500 Internal Server Error")
// Verify plugin directory was removed during the removal step
_, err = os.Stat(pluginDir)
require.True(t, os.IsNotExist(err))
})
}
func TestUpgradeCommand_PluginNotFound(t *testing.T) {
t.Run("upgradeCommand should handle missing plugin gracefully", func(t *testing.T) {
tmpDir := t.TempDir()
cmdLine := createCliContextWithArgs(t, []string{"non-existent-plugin"}, "pluginsDir", tmpDir)
require.NotNil(t, cmdLine)
err := upgradeCommand(cmdLine)
require.Error(t, err)
// Should fail trying to find the local plugin
require.Contains(t, err.Error(), "could not find plugin non-existent-plugin")
})
}
func TestUpgradeCommand_MissingPluginParameter(t *testing.T) {
t.Run("upgradeCommand should error when no plugin ID is provided", func(t *testing.T) {
cmdLine := createCliContextWithArgs(t, []string{})
require.NotNil(t, cmdLine)
err := upgradeCommand(cmdLine)
require.Error(t, err)
require.Contains(t, err.Error(), "please specify plugin to update")
})
}
// Simple args implementation
type simpleArgs []string
func (a simpleArgs) First() string {
if len(a) > 0 {
return a[0]
}
return ""
}
func (a simpleArgs) Get(int) string { return "" }
func (a simpleArgs) Tail() []string { return nil }
func (a simpleArgs) Len() int { return len(a) }
func (a simpleArgs) Present() bool { return len(a) > 0 }
func (a simpleArgs) Slice() []string { return []string(a) }
// Base struct with default implementations for unused CommandLine methods
type baseCommandLine struct{}
func (b baseCommandLine) ShowHelp() error { return nil }
func (b baseCommandLine) ShowVersion() {}
func (b baseCommandLine) Application() *cli.App { return nil }
func (b baseCommandLine) Int(_ string) int { return 0 }
func (b baseCommandLine) String(_ string) string { return "" }
func (b baseCommandLine) StringSlice(_ string) []string { return nil }
func (b baseCommandLine) FlagNames() []string { return nil }
func (b baseCommandLine) Generic(_ string) any { return nil }
func (b baseCommandLine) Bool(_ string) bool { return false }
func (b baseCommandLine) PluginURL() string { return "" }
func (b baseCommandLine) GcomToken() string { return "" }
// Test implementation - only implements what we actually need
type testCommandLine struct {
baseCommandLine // Embedded struct provides default implementations
args simpleArgs
pluginDir string
repoURL string
}
func newTestCommandLine(args []string, pluginDir, repoURL string) *testCommandLine {
return &testCommandLine{args: simpleArgs(args), pluginDir: pluginDir, repoURL: repoURL}
}
// Only implement the methods actually used by upgradeCommand
func (t *testCommandLine) Args() cli.Args { return t.args }
func (t *testCommandLine) PluginDirectory() string { return t.pluginDir }
func (t *testCommandLine) PluginRepoURL() string { return t.repoURL }

View File

@@ -236,6 +236,15 @@ func (f StaticFS) Files() ([]string, error) {
return files, nil return files, nil
} }
func (f StaticFS) Remove() error {
if remover, ok := f.FS.(FSRemover); ok {
if err := remover.Remove(); err != nil {
return err
}
}
return nil
}
// LocalFile implements a fs.File for accessing the local filesystem. // LocalFile implements a fs.File for accessing the local filesystem.
type LocalFile struct { type LocalFile struct {
f *os.File f *os.File

View File

@@ -270,12 +270,27 @@ func TestStaticFS(t *testing.T) {
require.Equal(t, []string{allowedFn, deniedFn}, files) require.Equal(t, []string{allowedFn, deniedFn}, files)
}) })
t.Run("staticfs filters underelying fs's files", func(t *testing.T) { t.Run("staticfs filters underlying fs's files", func(t *testing.T) {
files, err := staticFS.Files() files, err := staticFS.Files()
require.NoError(t, err) require.NoError(t, err)
require.Equal(t, []string{allowedFn}, files) require.Equal(t, []string{allowedFn}, files)
}) })
}) })
t.Run("FSRemover interface implementation verification", func(t *testing.T) {
tmpDir := t.TempDir()
lfs := NewLocalFS(tmpDir)
var localFSInterface FS = lfs
_, isRemover := localFSInterface.(FSRemover)
require.True(t, isRemover)
sfs, err := NewStaticFS(localFS)
require.NoError(t, err)
var staticFSInterface FS = sfs
_, isRemover = staticFSInterface.(FSRemover)
require.True(t, isRemover)
})
} }
// TestFSTwoDotsInFileName ensures that LocalFS and StaticFS allow two dots in file names. // TestFSTwoDotsInFileName ensures that LocalFS and StaticFS allow two dots in file names.

View File

@@ -5,6 +5,8 @@ import (
"context" "context"
"errors" "errors"
"fmt" "fmt"
"os"
"path/filepath"
"runtime" "runtime"
"testing" "testing"
@@ -422,3 +424,100 @@ func createPlugin(t *testing.T, pluginID string, class plugins.Class, managed, b
func testCompatOpts() plugins.AddOpts { func testCompatOpts() plugins.AddOpts {
return plugins.NewAddOpts("10.0.0", runtime.GOOS, runtime.GOARCH, "") return plugins.NewAddOpts("10.0.0", runtime.GOOS, runtime.GOARCH, "")
} }
func TestPluginInstaller_Removal(t *testing.T) {
tmpDir := t.TempDir()
t.Run("LocalFS plugin removal succeeds via installer.Remove", func(t *testing.T) {
pluginDir := filepath.Join(tmpDir, "localfs-plugin")
err := os.MkdirAll(pluginDir, 0750)
require.NoError(t, err)
pluginJSON := `{
"id": "localfs-plugin",
"name": "LocalFS Plugin",
"type": "datasource",
"info": {
"version": "1.0.0"
}
}`
err = os.WriteFile(filepath.Join(pluginDir, "plugin.json"), []byte(pluginJSON), 0644)
require.NoError(t, err)
localFS := plugins.NewLocalFS(pluginDir)
pluginV1 := createPlugin(t, "localfs-plugin", plugins.ClassExternal, true, true, func(plugin *plugins.Plugin) {
plugin.Info.Version = "1.0.0"
plugin.FS = localFS
})
registry := &fakes.FakePluginRegistry{
Store: map[string]*plugins.Plugin{
"localfs-plugin": pluginV1,
},
}
loader := &fakes.FakeLoader{
UnloadFunc: func(_ context.Context, p *plugins.Plugin) (*plugins.Plugin, error) {
return p, nil
},
}
_, err = os.Stat(pluginDir)
require.NoError(t, err)
inst := New(&config.PluginManagementCfg{}, registry, loader, &fakes.FakePluginRepo{}, &fakes.FakePluginStorage{}, storage.SimpleDirNameGeneratorFunc, &fakes.FakeAuthService{})
err = inst.Remove(context.Background(), "localfs-plugin", "1.0.0")
require.NoError(t, err)
_, err = os.Stat(pluginDir)
require.True(t, os.IsNotExist(err))
})
t.Run("StaticFS plugin removal is skipped via installer.Remove", func(t *testing.T) {
pluginDir := filepath.Join(tmpDir, "staticfs-plugin")
err := os.MkdirAll(pluginDir, 0750)
require.NoError(t, err)
pluginJSON := `{
"id": "staticfs-plugin",
"name": "StaticFS Plugin",
"type": "datasource",
"info": {
"version": "1.0.0"
}
}`
err = os.WriteFile(filepath.Join(pluginDir, "plugin.json"), []byte(pluginJSON), 0644)
require.NoError(t, err)
localFS := plugins.NewLocalFS(pluginDir)
staticFS, err := plugins.NewStaticFS(localFS)
require.NoError(t, err)
pluginV1 := createPlugin(t, "staticfs-plugin", plugins.ClassExternal, true, true, func(plugin *plugins.Plugin) {
plugin.Info.Version = "1.0.0"
plugin.FS = staticFS
})
registry := &fakes.FakePluginRegistry{
Store: map[string]*plugins.Plugin{
"staticfs-plugin": pluginV1,
},
}
loader := &fakes.FakeLoader{
UnloadFunc: func(_ context.Context, p *plugins.Plugin) (*plugins.Plugin, error) {
return p, nil
},
}
_, err = os.Stat(pluginDir)
require.NoError(t, err)
inst := New(&config.PluginManagementCfg{}, registry, loader, &fakes.FakePluginRepo{}, &fakes.FakePluginStorage{}, storage.SimpleDirNameGeneratorFunc, &fakes.FakeAuthService{})
err = inst.Remove(context.Background(), "staticfs-plugin", "1.0.0")
require.NoError(t, err)
_, err = os.Stat(pluginDir)
require.ErrorIs(t, err, os.ErrNotExist)
})
}

View File

@@ -2,6 +2,7 @@ package sources
import ( import (
"errors" "errors"
"os"
"path/filepath" "path/filepath"
"testing" "testing"
@@ -110,3 +111,32 @@ func TestDirAsLocalSources(t *testing.T) {
}) })
} }
} }
func TestLocalSource(t *testing.T) {
t.Run("NewLocalSource should always return plugins with StaticFS", func(t *testing.T) {
tmpDir := t.TempDir()
pluginID := "test-plugin"
pluginDir := filepath.Join(tmpDir, pluginID)
err := os.MkdirAll(pluginDir, 0750)
require.NoError(t, err)
pluginJSON := `{
"id": "test-plugin",
"name": "Test Plugin",
"type": "datasource",
"info": {
"version": "1.0.0"
}
}`
err = os.WriteFile(filepath.Join(pluginDir, "plugin.json"), []byte(pluginJSON), 0644)
require.NoError(t, err)
bundles, err := NewLocalSource(plugins.ClassExternal, []string{pluginDir}).Discover(t.Context())
require.NoError(t, err)
require.Len(t, bundles, 1, "Should discover exactly one plugin")
require.Equal(t, pluginID, bundles[0].Primary.JSONData.ID)
_, canRemove := bundles[0].Primary.FS.(plugins.FSRemover)
require.True(t, canRemove)
})
}

View File

@@ -688,15 +688,15 @@ var validConfigWithAutogen = `{
"receiver": "some email", "receiver": "some email",
"object_matchers": [["__grafana_autogenerated__", "=", "true"]], "object_matchers": [["__grafana_autogenerated__", "=", "true"]],
"routes": [{ "routes": [{
"receiver": "some email",
"group_by": ["grafana_folder", "alertname"],
"object_matchers": [["__grafana_receiver__", "=", "some email"]],
"continue": false
},{
"receiver": "other email", "receiver": "other email",
"group_by": ["grafana_folder", "alertname"], "group_by": ["grafana_folder", "alertname"],
"object_matchers": [["__grafana_receiver__", "=", "other email"]], "object_matchers": [["__grafana_receiver__", "=", "other email"]],
"continue": false "continue": false
},{
"receiver": "some email",
"group_by": ["grafana_folder", "alertname"],
"object_matchers": [["__grafana_receiver__", "=", "some email"]],
"continue": false
}] }]
},{ },{
"receiver": "other email", "receiver": "other email",

View File

@@ -190,8 +190,12 @@ func (s *NotificationSettings) Fingerprint() data.Fingerprint {
for _, interval := range s.MuteTimeIntervals { for _, interval := range s.MuteTimeIntervals {
writeString(interval) writeString(interval)
} }
// Add a separator between the time intervals to avoid collisions
// when all settings are the same including interval names except for the interval type (mute vs active).
_, _ = h.Write([]byte{255})
for _, interval := range s.ActiveTimeIntervals { for _, interval := range s.ActiveTimeIntervals {
writeString(interval) writeString(interval)
} }
return data.Fingerprint(h.Sum64()) return data.Fingerprint(h.Sum64())
} }

View File

@@ -113,6 +113,8 @@ func TestValidate(t *testing.T) {
} }
func TestNotificationSettingsLabels(t *testing.T) { func TestNotificationSettingsLabels(t *testing.T) {
timeInterval := "time-interval-1"
testCases := []struct { testCases := []struct {
name string name string
notificationSettings NotificationSettings notificationSettings NotificationSettings
@@ -135,7 +137,7 @@ func TestNotificationSettingsLabels(t *testing.T) {
labels: data.Labels{ labels: data.Labels{
AutogeneratedRouteLabel: "true", AutogeneratedRouteLabel: "true",
AutogeneratedRouteReceiverNameLabel: "receiver name", AutogeneratedRouteReceiverNameLabel: "receiver name",
AutogeneratedRouteSettingsHashLabel: "6027cdeaff62ba3f", AutogeneratedRouteSettingsHashLabel: "c65d254ff4c279f2",
}, },
}, },
{ {
@@ -151,7 +153,7 @@ func TestNotificationSettingsLabels(t *testing.T) {
labels: data.Labels{ labels: data.Labels{
AutogeneratedRouteLabel: "true", AutogeneratedRouteLabel: "true",
AutogeneratedRouteReceiverNameLabel: "receiver name", AutogeneratedRouteReceiverNameLabel: "receiver name",
AutogeneratedRouteSettingsHashLabel: "47164c92f2986a35", AutogeneratedRouteSettingsHashLabel: "634e52b238fc78f0",
}, },
}, },
{ {
@@ -168,7 +170,25 @@ func TestNotificationSettingsLabels(t *testing.T) {
labels: data.Labels{ labels: data.Labels{
AutogeneratedRouteLabel: "true", AutogeneratedRouteLabel: "true",
AutogeneratedRouteReceiverNameLabel: "receiver name", AutogeneratedRouteReceiverNameLabel: "receiver name",
AutogeneratedRouteSettingsHashLabel: "a173df6210e43af0", AutogeneratedRouteSettingsHashLabel: "9ac606ba0f6bcfb5",
},
},
{
name: "default notification settings with active time interval",
notificationSettings: CopyNotificationSettings(NewDefaultNotificationSettings("receiver name"), NSMuts.WithActiveTimeIntervals(timeInterval)),
labels: data.Labels{
AutogeneratedRouteLabel: "true",
AutogeneratedRouteReceiverNameLabel: "receiver name",
AutogeneratedRouteSettingsHashLabel: "8304d9c06fda36e2",
},
},
{
name: "default notification settings with mute time interval",
notificationSettings: CopyNotificationSettings(NewDefaultNotificationSettings("receiver name"), NSMuts.WithMuteTimeIntervals(timeInterval)),
labels: data.Labels{
AutogeneratedRouteLabel: "true",
AutogeneratedRouteReceiverNameLabel: "receiver name",
AutogeneratedRouteSettingsHashLabel: "171cfd2d4e0810fa",
}, },
}, },
} }
@@ -181,6 +201,27 @@ func TestNotificationSettingsLabels(t *testing.T) {
} }
} }
func TestNotificationSettings_TimeIntervals(t *testing.T) {
// Create notification settings with default settings and usign the same
// time interval, but in one case as a mute time interval and in another case
// as an active time interval. They should produce different hashes.
receiver := "receiver name"
timeInterval := "time interval name"
muteSettings := NotificationSettings{
Receiver: receiver,
MuteTimeIntervals: []string{timeInterval},
}
activeSettings := NotificationSettings{
Receiver: receiver,
ActiveTimeIntervals: []string{timeInterval},
}
require.NotEqual(t, activeSettings.Fingerprint(), muteSettings.Fingerprint())
}
func TestNormalizedGroupBy(t *testing.T) { func TestNormalizedGroupBy(t *testing.T) {
validNotificationSettings := NotificationSettingsGen() validNotificationSettings := NotificationSettingsGen()

View File

@@ -86,9 +86,9 @@ func TestAddAutogenConfig(t *testing.T) {
Receiver: "default", Receiver: "default",
ObjectMatchers: matcher(models.AutogeneratedRouteLabel, "true"), ObjectMatchers: matcher(models.AutogeneratedRouteLabel, "true"),
Routes: []*definitions.Route{ Routes: []*definitions.Route{
basicContactRoute("receiver1"),
basicContactRoute("receiver3"),
basicContactRoute("receiver2"), basicContactRoute("receiver2"),
basicContactRoute("receiver3"),
basicContactRoute("receiver1"),
}, },
}), }),
}, },
@@ -100,9 +100,9 @@ func TestAddAutogenConfig(t *testing.T) {
Receiver: "default", Receiver: "default",
ObjectMatchers: matcher(models.AutogeneratedRouteLabel, "true"), ObjectMatchers: matcher(models.AutogeneratedRouteLabel, "true"),
Routes: []*definitions.Route{ Routes: []*definitions.Route{
basicContactRoute("receiver1"),
basicContactRoute("receiver3"),
basicContactRoute("receiver2"), basicContactRoute("receiver2"),
basicContactRoute("receiver3"),
basicContactRoute("receiver1"),
}, },
}), }),
}, },
@@ -130,42 +130,42 @@ func TestAddAutogenConfig(t *testing.T) {
Receiver: "default", Receiver: "default",
ObjectMatchers: matcher(models.AutogeneratedRouteLabel, "true"), ObjectMatchers: matcher(models.AutogeneratedRouteLabel, "true"),
Routes: []*definitions.Route{ Routes: []*definitions.Route{
withChildRoutes(basicContactRoute("receiver5"), &definitions.Route{
Receiver: "receiver5",
ObjectMatchers: matcher(models.AutogeneratedRouteSettingsHashLabel, "030d6474aec0b553"),
MuteTimeIntervals: []string{"maintenance"},
}, &definitions.Route{
Receiver: "receiver5",
ObjectMatchers: matcher(models.AutogeneratedRouteSettingsHashLabel, "cd6cd2089632453c"),
ActiveTimeIntervals: []string{"active"},
}),
withChildRoutes(basicContactRoute("receiver1"), &definitions.Route{ withChildRoutes(basicContactRoute("receiver1"), &definitions.Route{
Receiver: "receiver1",
ObjectMatchers: matcher(models.AutogeneratedRouteSettingsHashLabel, "dde34b8127e68f31"),
GroupInterval: util.Pointer(model.Duration(1 * time.Minute)),
}, &definitions.Route{
Receiver: "receiver1", Receiver: "receiver1",
ObjectMatchers: matcher(models.AutogeneratedRouteSettingsHashLabel, "f134b8faf7db083c"), ObjectMatchers: matcher(models.AutogeneratedRouteSettingsHashLabel, "02466789dc88da23"),
GroupByStr: []string{models.FolderTitleLabel, model.AlertNameLabel, "custom"}, GroupByStr: []string{models.FolderTitleLabel, model.AlertNameLabel, "custom"},
GroupInterval: util.Pointer(model.Duration(1 * time.Minute)), GroupInterval: util.Pointer(model.Duration(1 * time.Minute)),
GroupWait: util.Pointer(model.Duration(2 * time.Minute)), GroupWait: util.Pointer(model.Duration(2 * time.Minute)),
RepeatInterval: util.Pointer(model.Duration(3 * time.Minute)), RepeatInterval: util.Pointer(model.Duration(3 * time.Minute)),
MuteTimeIntervals: []string{"maintenance"}, MuteTimeIntervals: []string{"maintenance"},
ActiveTimeIntervals: []string{"active"}, ActiveTimeIntervals: []string{"active"},
}, &definitions.Route{
Receiver: "receiver1",
ObjectMatchers: matcher(models.AutogeneratedRouteSettingsHashLabel, "efc87d76ccc550bc"),
GroupInterval: util.Pointer(model.Duration(1 * time.Minute)),
}), }),
withChildRoutes(basicContactRoute("receiver2"), &definitions.Route{ withChildRoutes(basicContactRoute("receiver2"), &definitions.Route{
Receiver: "receiver2", Receiver: "receiver2",
ObjectMatchers: matcher(models.AutogeneratedRouteSettingsHashLabel, "27e1d1717c9ef621"), ObjectMatchers: matcher(models.AutogeneratedRouteSettingsHashLabel, "63ad04d6c21c3aec"),
GroupWait: util.Pointer(model.Duration(2 * time.Minute)), GroupWait: util.Pointer(model.Duration(2 * time.Minute)),
}), }),
withChildRoutes(basicContactRoute("receiver5"), &definitions.Route{
Receiver: "receiver5",
ObjectMatchers: matcher(models.AutogeneratedRouteSettingsHashLabel, "8cd5f9adeac58123"),
ActiveTimeIntervals: []string{"active"},
}, &definitions.Route{
Receiver: "receiver5",
ObjectMatchers: matcher(models.AutogeneratedRouteSettingsHashLabel, "f0770544f1741cf6"),
MuteTimeIntervals: []string{"maintenance"},
}),
withChildRoutes(basicContactRoute("receiver4"), &definitions.Route{ withChildRoutes(basicContactRoute("receiver4"), &definitions.Route{
Receiver: "receiver4", Receiver: "receiver4",
ObjectMatchers: matcher(models.AutogeneratedRouteSettingsHashLabel, "b3a2fa5e615dcc7e"), ObjectMatchers: matcher(models.AutogeneratedRouteSettingsHashLabel, "9bbbec5f72627ae5"),
GroupByStr: []string{models.FolderTitleLabel, model.AlertNameLabel, "custom"}, GroupByStr: []string{models.FolderTitleLabel, model.AlertNameLabel, "custom"},
}), }),
withChildRoutes(basicContactRoute("receiver3"), &definitions.Route{ withChildRoutes(basicContactRoute("receiver3"), &definitions.Route{
Receiver: "receiver3", Receiver: "receiver3",
ObjectMatchers: matcher(models.AutogeneratedRouteSettingsHashLabel, "9e282ef0193d830a"), ObjectMatchers: matcher(models.AutogeneratedRouteSettingsHashLabel, "fbcacbfae385a901"),
RepeatInterval: util.Pointer(model.Duration(3 * time.Minute)), RepeatInterval: util.Pointer(model.Duration(3 * time.Minute)),
}), }),
}, },
@@ -183,7 +183,7 @@ func TestAddAutogenConfig(t *testing.T) {
Routes: []*definitions.Route{ Routes: []*definitions.Route{
withChildRoutes(basicContactRoute("receiver1"), &definitions.Route{ withChildRoutes(basicContactRoute("receiver1"), &definitions.Route{
Receiver: "receiver1", Receiver: "receiver1",
ObjectMatchers: matcher(models.AutogeneratedRouteSettingsHashLabel, "dde34b8127e68f31"), ObjectMatchers: matcher(models.AutogeneratedRouteSettingsHashLabel, "efc87d76ccc550bc"),
GroupByStr: nil, GroupByStr: nil,
GroupInterval: util.Pointer(model.Duration(1 * time.Minute)), GroupInterval: util.Pointer(model.Duration(1 * time.Minute)),
}), }),
@@ -203,13 +203,13 @@ func TestAddAutogenConfig(t *testing.T) {
Routes: []*definitions.Route{ Routes: []*definitions.Route{
withChildRoutes(basicContactRoute("receiver1"), &definitions.Route{ withChildRoutes(basicContactRoute("receiver1"), &definitions.Route{
Receiver: "receiver1", Receiver: "receiver1",
ObjectMatchers: matcher(models.AutogeneratedRouteSettingsHashLabel, "dde34b8127e68f31"), ObjectMatchers: matcher(models.AutogeneratedRouteSettingsHashLabel, "828092ed6f427a00"), // Different hash.
GroupByStr: nil, GroupByStr: []string{models.FolderTitleLabel, model.AlertNameLabel},
GroupInterval: util.Pointer(model.Duration(1 * time.Minute)), GroupInterval: util.Pointer(model.Duration(1 * time.Minute)),
}, &definitions.Route{ }, &definitions.Route{
Receiver: "receiver1", Receiver: "receiver1",
ObjectMatchers: matcher(models.AutogeneratedRouteSettingsHashLabel, "e1f3a275a8918385"), // Different hash. ObjectMatchers: matcher(models.AutogeneratedRouteSettingsHashLabel, "efc87d76ccc550bc"),
GroupByStr: []string{models.FolderTitleLabel, model.AlertNameLabel}, GroupByStr: nil,
GroupInterval: util.Pointer(model.Duration(1 * time.Minute)), GroupInterval: util.Pointer(model.Duration(1 * time.Minute)),
}), }),
}, },
@@ -229,7 +229,7 @@ func TestAddAutogenConfig(t *testing.T) {
Routes: []*definitions.Route{ Routes: []*definitions.Route{
withChildRoutes(basicContactRoute("receiver1"), &definitions.Route{ withChildRoutes(basicContactRoute("receiver1"), &definitions.Route{
Receiver: "receiver1", Receiver: "receiver1",
ObjectMatchers: matcher(models.AutogeneratedRouteSettingsHashLabel, "e1f3a275a8918385"), ObjectMatchers: matcher(models.AutogeneratedRouteSettingsHashLabel, "828092ed6f427a00"),
GroupByStr: []string{models.FolderTitleLabel, model.AlertNameLabel}, GroupByStr: []string{models.FolderTitleLabel, model.AlertNameLabel},
GroupInterval: util.Pointer(model.Duration(1 * time.Minute)), GroupInterval: util.Pointer(model.Duration(1 * time.Minute)),
}), }),
@@ -249,9 +249,9 @@ func TestAddAutogenConfig(t *testing.T) {
Receiver: "default", Receiver: "default",
ObjectMatchers: matcher(models.AutogeneratedRouteLabel, "true"), ObjectMatchers: matcher(models.AutogeneratedRouteLabel, "true"),
Routes: []*definitions.Route{ Routes: []*definitions.Route{
basicContactRoute("receiver1"),
basicContactRoute("receiver3"),
basicContactRoute("receiver2"), basicContactRoute("receiver2"),
basicContactRoute("receiver3"),
basicContactRoute("receiver1"),
}, },
}), }),
}, },

View File

@@ -147,10 +147,10 @@ function DashboardControlsRenderer({ model }: SceneComponentProps<DashboardContr
{editPanel && <PanelEditControls panelEditor={editPanel} />} {editPanel && <PanelEditControls panelEditor={editPanel} />}
</Stack> </Stack>
{!hideTimeControls && ( {!hideTimeControls && (
<Stack justifyContent="flex-end"> <div className={cx(styles.timeControls, editPanel && styles.timeControlsWrap)}>
<timePicker.Component model={timePicker} /> <timePicker.Component model={timePicker} />
<refreshPicker.Component model={refreshPicker} /> <refreshPicker.Component model={refreshPicker} />
</Stack> </div>
)} )}
<Stack> <Stack>
<DropdownVariableControls dashboard={dashboard} /> <DropdownVariableControls dashboard={dashboard} />
@@ -191,6 +191,7 @@ function getStyles(theme: GrafanaTheme2) {
}, },
}), }),
controlsPanelEdit: css({ controlsPanelEdit: css({
flexWrap: 'wrap-reverse',
// In panel edit we do not need any right padding as the splitter is providing it // In panel edit we do not need any right padding as the splitter is providing it
paddingRight: 0, paddingRight: 0,
}), }),
@@ -198,5 +199,14 @@ function getStyles(theme: GrafanaTheme2) {
background: 'unset', background: 'unset',
position: 'unset', position: 'unset',
}), }),
timeControls: css({
display: 'flex',
justifyContent: 'flex-end',
gap: theme.spacing(1),
}),
timeControlsWrap: css({
flexWrap: 'wrap',
marginLeft: 'auto',
}),
}; };
} }

View File

@@ -2,15 +2,15 @@
"name": "@grafana-plugins/grafana-azure-monitor-datasource", "name": "@grafana-plugins/grafana-azure-monitor-datasource",
"description": "Grafana data source for Azure Monitor", "description": "Grafana data source for Azure Monitor",
"private": true, "private": true,
"version": "12.2.0-pre", "version": "12.2.1",
"dependencies": { "dependencies": {
"@emotion/css": "11.13.5", "@emotion/css": "11.13.5",
"@grafana/data": "12.2.0-pre", "@grafana/data": "12.2.1",
"@grafana/i18n": "12.2.0-pre", "@grafana/i18n": "12.2.1",
"@grafana/plugin-ui": "^0.10.10", "@grafana/plugin-ui": "^0.10.10",
"@grafana/runtime": "12.2.0-pre", "@grafana/runtime": "12.2.1",
"@grafana/schema": "12.2.0-pre", "@grafana/schema": "12.2.1",
"@grafana/ui": "12.2.0-pre", "@grafana/ui": "12.2.1",
"@kusto/monaco-kusto": "^10.0.0", "@kusto/monaco-kusto": "^10.0.0",
"fast-deep-equal": "^3.1.3", "fast-deep-equal": "^3.1.3",
"i18next": "^25.0.0", "i18next": "^25.0.0",
@@ -26,8 +26,8 @@
"tslib": "2.8.1" "tslib": "2.8.1"
}, },
"devDependencies": { "devDependencies": {
"@grafana/e2e-selectors": "12.2.0-pre", "@grafana/e2e-selectors": "12.2.1",
"@grafana/plugin-configs": "12.2.0-pre", "@grafana/plugin-configs": "12.2.1",
"@testing-library/dom": "10.4.1", "@testing-library/dom": "10.4.1",
"@testing-library/jest-dom": "6.6.4", "@testing-library/jest-dom": "6.6.4",
"@testing-library/react": "16.3.0", "@testing-library/react": "16.3.0",

View File

@@ -2,15 +2,15 @@
"name": "@grafana-plugins/stackdriver", "name": "@grafana-plugins/stackdriver",
"description": "Grafana data source for Google Cloud Monitoring", "description": "Grafana data source for Google Cloud Monitoring",
"private": true, "private": true,
"version": "12.2.0-pre", "version": "12.2.1",
"dependencies": { "dependencies": {
"@emotion/css": "11.13.5", "@emotion/css": "11.13.5",
"@grafana/data": "12.2.0-pre", "@grafana/data": "12.2.1",
"@grafana/google-sdk": "0.3.4", "@grafana/google-sdk": "0.3.4",
"@grafana/plugin-ui": "^0.10.10", "@grafana/plugin-ui": "^0.10.10",
"@grafana/runtime": "12.2.0-pre", "@grafana/runtime": "12.2.1",
"@grafana/schema": "12.2.0-pre", "@grafana/schema": "12.2.1",
"@grafana/ui": "12.2.0-pre", "@grafana/ui": "12.2.1",
"debounce-promise": "3.1.2", "debounce-promise": "3.1.2",
"fast-deep-equal": "^3.1.3", "fast-deep-equal": "^3.1.3",
"i18next": "^25.0.0", "i18next": "^25.0.0",
@@ -26,8 +26,8 @@
"tslib": "2.8.1" "tslib": "2.8.1"
}, },
"devDependencies": { "devDependencies": {
"@grafana/e2e-selectors": "12.2.0-pre", "@grafana/e2e-selectors": "12.2.1",
"@grafana/plugin-configs": "12.2.0-pre", "@grafana/plugin-configs": "12.2.1",
"@testing-library/dom": "10.4.1", "@testing-library/dom": "10.4.1",
"@testing-library/jest-dom": "6.6.4", "@testing-library/jest-dom": "6.6.4",
"@testing-library/react": "16.3.0", "@testing-library/react": "16.3.0",

View File

@@ -2,22 +2,22 @@
"name": "@grafana-plugins/grafana-postgresql-datasource", "name": "@grafana-plugins/grafana-postgresql-datasource",
"description": "PostgreSQL data source plugin", "description": "PostgreSQL data source plugin",
"private": true, "private": true,
"version": "12.2.0-pre", "version": "12.2.1",
"dependencies": { "dependencies": {
"@emotion/css": "11.13.5", "@emotion/css": "11.13.5",
"@grafana/data": "12.2.0-pre", "@grafana/data": "12.2.1",
"@grafana/plugin-ui": "^0.10.10", "@grafana/plugin-ui": "^0.10.10",
"@grafana/runtime": "12.2.0-pre", "@grafana/runtime": "12.2.1",
"@grafana/sql": "12.2.0-pre", "@grafana/sql": "12.2.1",
"@grafana/ui": "12.2.0-pre", "@grafana/ui": "12.2.1",
"lodash": "4.17.21", "lodash": "4.17.21",
"react": "18.3.1", "react": "18.3.1",
"rxjs": "7.8.2", "rxjs": "7.8.2",
"tslib": "2.8.1" "tslib": "2.8.1"
}, },
"devDependencies": { "devDependencies": {
"@grafana/e2e-selectors": "12.2.0-pre", "@grafana/e2e-selectors": "12.2.1",
"@grafana/plugin-configs": "12.2.0-pre", "@grafana/plugin-configs": "12.2.1",
"@testing-library/dom": "10.4.1", "@testing-library/dom": "10.4.1",
"@testing-library/react": "16.3.0", "@testing-library/react": "16.3.0",
"@testing-library/user-event": "14.6.1", "@testing-library/user-event": "14.6.1",

View File

@@ -2,13 +2,13 @@
"name": "@grafana-plugins/grafana-pyroscope-datasource", "name": "@grafana-plugins/grafana-pyroscope-datasource",
"description": "Continuous profiling for analysis of CPU and memory usage, down to the line number and throughout time. Saving infrastructure cost, improving performance, and increasing reliability.", "description": "Continuous profiling for analysis of CPU and memory usage, down to the line number and throughout time. Saving infrastructure cost, improving performance, and increasing reliability.",
"private": true, "private": true,
"version": "12.2.0-pre", "version": "12.2.1",
"dependencies": { "dependencies": {
"@emotion/css": "11.13.5", "@emotion/css": "11.13.5",
"@grafana/data": "12.2.0-pre", "@grafana/data": "12.2.1",
"@grafana/runtime": "12.2.0-pre", "@grafana/runtime": "12.2.1",
"@grafana/schema": "12.2.0-pre", "@grafana/schema": "12.2.1",
"@grafana/ui": "12.2.0-pre", "@grafana/ui": "12.2.1",
"fast-deep-equal": "^3.1.3", "fast-deep-equal": "^3.1.3",
"lodash": "4.17.21", "lodash": "4.17.21",
"monaco-editor": "0.34.1", "monaco-editor": "0.34.1",
@@ -20,7 +20,7 @@
"tslib": "2.8.1" "tslib": "2.8.1"
}, },
"devDependencies": { "devDependencies": {
"@grafana/plugin-configs": "12.2.0-pre", "@grafana/plugin-configs": "12.2.1",
"@testing-library/dom": "10.4.1", "@testing-library/dom": "10.4.1",
"@testing-library/jest-dom": "6.6.4", "@testing-library/jest-dom": "6.6.4",
"@testing-library/react": "16.3.0", "@testing-library/react": "16.3.0",

View File

@@ -2,13 +2,13 @@
"name": "@grafana-plugins/grafana-testdata-datasource", "name": "@grafana-plugins/grafana-testdata-datasource",
"description": "Generates test data in different forms", "description": "Generates test data in different forms",
"private": true, "private": true,
"version": "12.2.0-pre", "version": "12.2.1",
"dependencies": { "dependencies": {
"@emotion/css": "11.13.5", "@emotion/css": "11.13.5",
"@grafana/data": "12.2.0-pre", "@grafana/data": "12.2.1",
"@grafana/runtime": "12.2.0-pre", "@grafana/runtime": "12.2.1",
"@grafana/schema": "12.2.0-pre", "@grafana/schema": "12.2.1",
"@grafana/ui": "12.2.0-pre", "@grafana/ui": "12.2.1",
"d3-random": "^3.0.1", "d3-random": "^3.0.1",
"lodash": "4.17.21", "lodash": "4.17.21",
"micro-memoize": "^4.1.2", "micro-memoize": "^4.1.2",
@@ -21,8 +21,8 @@
"uuid": "11.1.0" "uuid": "11.1.0"
}, },
"devDependencies": { "devDependencies": {
"@grafana/e2e-selectors": "12.2.0-pre", "@grafana/e2e-selectors": "12.2.1",
"@grafana/plugin-configs": "12.2.0-pre", "@grafana/plugin-configs": "12.2.1",
"@testing-library/dom": "10.4.1", "@testing-library/dom": "10.4.1",
"@testing-library/jest-dom": "6.6.4", "@testing-library/jest-dom": "6.6.4",
"@testing-library/react": "16.3.0", "@testing-library/react": "16.3.0",

View File

@@ -2,7 +2,7 @@
"name": "@grafana-plugins/jaeger", "name": "@grafana-plugins/jaeger",
"description": "Jaeger plugin for Grafana", "description": "Jaeger plugin for Grafana",
"private": true, "private": true,
"version": "12.2.0-pre", "version": "12.2.1",
"dependencies": { "dependencies": {
"@emotion/css": "11.13.5", "@emotion/css": "11.13.5",
"@grafana/data": "workspace:*", "@grafana/data": "workspace:*",

View File

@@ -2,16 +2,16 @@
"name": "@grafana-plugins/loki", "name": "@grafana-plugins/loki",
"description": "Loki data source plugin for Grafana", "description": "Loki data source plugin for Grafana",
"private": true, "private": true,
"version": "12.2.0-pre", "version": "12.2.1",
"dependencies": { "dependencies": {
"@emotion/css": "11.13.5", "@emotion/css": "11.13.5",
"@grafana/data": "12.2.0-pre", "@grafana/data": "12.2.1",
"@grafana/lezer-logql": "0.2.8", "@grafana/lezer-logql": "0.2.8",
"@grafana/llm": "0.22.1", "@grafana/llm": "0.22.1",
"@grafana/monaco-logql": "^0.0.8", "@grafana/monaco-logql": "^0.0.8",
"@grafana/runtime": "12.2.0-pre", "@grafana/runtime": "12.2.1",
"@grafana/schema": "12.2.0-pre", "@grafana/schema": "12.2.1",
"@grafana/ui": "12.2.0-pre", "@grafana/ui": "12.2.1",
"d3-random": "^3.0.1", "d3-random": "^3.0.1",
"lodash": "4.17.21", "lodash": "4.17.21",
"micro-memoize": "^4.1.2", "micro-memoize": "^4.1.2",
@@ -24,8 +24,8 @@
"uuid": "11.1.0" "uuid": "11.1.0"
}, },
"devDependencies": { "devDependencies": {
"@grafana/e2e-selectors": "12.2.0-pre", "@grafana/e2e-selectors": "12.2.1",
"@grafana/plugin-configs": "12.2.0-pre", "@grafana/plugin-configs": "12.2.1",
"@testing-library/dom": "10.4.1", "@testing-library/dom": "10.4.1",
"@testing-library/jest-dom": "6.6.4", "@testing-library/jest-dom": "6.6.4",
"@testing-library/react": "16.3.0", "@testing-library/react": "16.3.0",

View File

@@ -2,23 +2,23 @@
"name": "@grafana-plugins/mssql", "name": "@grafana-plugins/mssql",
"description": "MSSQL data source plugin", "description": "MSSQL data source plugin",
"private": true, "private": true,
"version": "12.2.0-pre", "version": "12.2.1",
"dependencies": { "dependencies": {
"@emotion/css": "11.13.5", "@emotion/css": "11.13.5",
"@grafana/data": "12.2.0-pre", "@grafana/data": "12.2.1",
"@grafana/i18n": "12.2.0-pre", "@grafana/i18n": "12.2.1",
"@grafana/plugin-ui": "^0.10.10", "@grafana/plugin-ui": "^0.10.10",
"@grafana/runtime": "12.2.0-pre", "@grafana/runtime": "12.2.1",
"@grafana/sql": "12.2.0-pre", "@grafana/sql": "12.2.1",
"@grafana/ui": "12.2.0-pre", "@grafana/ui": "12.2.1",
"lodash": "4.17.21", "lodash": "4.17.21",
"react": "18.3.1", "react": "18.3.1",
"rxjs": "7.8.2", "rxjs": "7.8.2",
"tslib": "2.8.1" "tslib": "2.8.1"
}, },
"devDependencies": { "devDependencies": {
"@grafana/e2e-selectors": "12.2.0-pre", "@grafana/e2e-selectors": "12.2.1",
"@grafana/plugin-configs": "12.2.0-pre", "@grafana/plugin-configs": "12.2.1",
"@testing-library/dom": "10.4.1", "@testing-library/dom": "10.4.1",
"@testing-library/react": "16.3.0", "@testing-library/react": "16.3.0",
"@testing-library/user-event": "14.6.1", "@testing-library/user-event": "14.6.1",

View File

@@ -2,22 +2,22 @@
"name": "@grafana-plugins/mysql", "name": "@grafana-plugins/mysql",
"description": "MySQL data source plugin", "description": "MySQL data source plugin",
"private": true, "private": true,
"version": "12.2.0-pre", "version": "12.2.1",
"dependencies": { "dependencies": {
"@emotion/css": "11.13.5", "@emotion/css": "11.13.5",
"@grafana/data": "12.2.0-pre", "@grafana/data": "12.2.1",
"@grafana/plugin-ui": "^0.10.10", "@grafana/plugin-ui": "^0.10.10",
"@grafana/runtime": "12.2.0-pre", "@grafana/runtime": "12.2.1",
"@grafana/sql": "12.2.0-pre", "@grafana/sql": "12.2.1",
"@grafana/ui": "12.2.0-pre", "@grafana/ui": "12.2.1",
"lodash": "4.17.21", "lodash": "4.17.21",
"react": "18.3.1", "react": "18.3.1",
"rxjs": "7.8.2", "rxjs": "7.8.2",
"tslib": "2.8.1" "tslib": "2.8.1"
}, },
"devDependencies": { "devDependencies": {
"@grafana/e2e-selectors": "12.2.0-pre", "@grafana/e2e-selectors": "12.2.1",
"@grafana/plugin-configs": "12.2.0-pre", "@grafana/plugin-configs": "12.2.1",
"@testing-library/dom": "10.4.1", "@testing-library/dom": "10.4.1",
"@testing-library/react": "16.3.0", "@testing-library/react": "16.3.0",
"@testing-library/user-event": "14.6.1", "@testing-library/user-event": "14.6.1",

View File

@@ -2,13 +2,13 @@
"name": "@grafana-plugins/parca", "name": "@grafana-plugins/parca",
"description": "Continuous profiling for analysis of CPU and memory usage, down to the line number and throughout time. Saving infrastructure cost, improving performance, and increasing reliability.", "description": "Continuous profiling for analysis of CPU and memory usage, down to the line number and throughout time. Saving infrastructure cost, improving performance, and increasing reliability.",
"private": true, "private": true,
"version": "12.2.0-pre", "version": "12.2.1",
"dependencies": { "dependencies": {
"@emotion/css": "11.13.5", "@emotion/css": "11.13.5",
"@grafana/data": "12.2.0-pre", "@grafana/data": "12.2.1",
"@grafana/runtime": "12.2.0-pre", "@grafana/runtime": "12.2.1",
"@grafana/schema": "12.2.0-pre", "@grafana/schema": "12.2.1",
"@grafana/ui": "12.2.0-pre", "@grafana/ui": "12.2.1",
"lodash": "4.17.21", "lodash": "4.17.21",
"monaco-editor": "0.34.1", "monaco-editor": "0.34.1",
"react": "18.3.1", "react": "18.3.1",
@@ -18,7 +18,7 @@
"tslib": "2.8.1" "tslib": "2.8.1"
}, },
"devDependencies": { "devDependencies": {
"@grafana/plugin-configs": "12.2.0-pre", "@grafana/plugin-configs": "12.2.1",
"@testing-library/dom": "10.4.1", "@testing-library/dom": "10.4.1",
"@testing-library/react": "16.3.0", "@testing-library/react": "16.3.0",
"@testing-library/user-event": "14.6.1", "@testing-library/user-event": "14.6.1",

View File

@@ -2,7 +2,7 @@
"name": "@grafana-plugins/tempo", "name": "@grafana-plugins/tempo",
"description": "Grafana plugin for the Tempo data source.", "description": "Grafana plugin for the Tempo data source.",
"private": true, "private": true,
"version": "12.2.0-pre", "version": "12.2.1",
"dependencies": { "dependencies": {
"@emotion/css": "11.13.5", "@emotion/css": "11.13.5",
"@grafana/data": "workspace:*", "@grafana/data": "workspace:*",
@@ -38,7 +38,7 @@
"uuid": "11.1.0" "uuid": "11.1.0"
}, },
"devDependencies": { "devDependencies": {
"@grafana/plugin-configs": "12.2.0-pre", "@grafana/plugin-configs": "12.2.1",
"@testing-library/dom": "10.4.1", "@testing-library/dom": "10.4.1",
"@testing-library/jest-dom": "6.6.4", "@testing-library/jest-dom": "6.6.4",
"@testing-library/react": "16.3.0", "@testing-library/react": "16.3.0",

View File

@@ -2,7 +2,7 @@
"name": "@grafana-plugins/zipkin", "name": "@grafana-plugins/zipkin",
"description": "Zipkin plugin for Grafana", "description": "Zipkin plugin for Grafana",
"private": true, "private": true,
"version": "12.2.0-pre", "version": "12.2.1",
"dependencies": { "dependencies": {
"@emotion/css": "11.13.5", "@emotion/css": "11.13.5",
"@grafana/data": "workspace:*", "@grafana/data": "workspace:*",

View File

@@ -31,7 +31,9 @@ export const BarChartPanel = (props: PanelProps<Options>) => {
// const { dataLinkPostProcessor } = usePanelContext(); // const { dataLinkPostProcessor } = usePanelContext();
const theme = useTheme2(); const theme = useTheme2();
const { onAddAdHocFilter } = usePanelContext(); const { onAddAdHocFilter, canExecuteActions } = usePanelContext();
const userCanExecuteActions = useMemo(() => canExecuteActions?.() ?? false, [canExecuteActions]);
const { const {
barWidth, barWidth,
@@ -210,6 +212,7 @@ export const BarChartPanel = (props: PanelProps<Options>) => {
dataLinks={dataLinks} dataLinks={dataLinks}
adHocFilters={adHocFilters} adHocFilters={adHocFilters}
hideZeros={options.tooltip.hideZeros} hideZeros={options.tooltip.hideZeros}
canExecuteActions={userCanExecuteActions}
/> />
); );
}} }}

View File

@@ -78,9 +78,11 @@ export const geojsonLayer: MapLayerRegistryItem<GeoJSONMapperConfig> = {
// Interpolate variables in the URL // Interpolate variables in the URL
const interpolatedUrl = getTemplateSrv().replace(config.src || ''); const interpolatedUrl = getTemplateSrv().replace(config.src || '');
const isAbsoluteUrl = interpolatedUrl.startsWith('http');
const layerUrl = isAbsoluteUrl ? interpolatedUrl : `${window.__grafana_public_path__}${interpolatedUrl.replace(/^(public\/)/, '')}`;
const source = new VectorSource({ const source = new VectorSource({
url: `${window.__grafana_public_path__}build/${interpolatedUrl.replace(/^(public\/)/, '')}`, url: layerUrl,
format: new GeoJSON(), format: new GeoJSON(),
}); });

View File

@@ -45,9 +45,11 @@ export const HeatmapPanel = ({
}: HeatmapPanelProps) => { }: HeatmapPanelProps) => {
const theme = useTheme2(); const theme = useTheme2();
const styles = useStyles2(getStyles); const styles = useStyles2(getStyles);
const { sync, eventsScope, canAddAnnotations, onSelectRange } = usePanelContext(); const { sync, eventsScope, canAddAnnotations, onSelectRange, canExecuteActions } = usePanelContext();
const cursorSync = sync?.() ?? DashboardCursorSync.Off; const cursorSync = sync?.() ?? DashboardCursorSync.Off;
const userCanExecuteActions = useMemo(() => canExecuteActions?.() ?? false, [canExecuteActions]);
// temp range set for adding new annotation set by TooltipPlugin2, consumed by AnnotationPlugin2 // temp range set for adding new annotation set by TooltipPlugin2, consumed by AnnotationPlugin2
const [newAnnotationRange, setNewAnnotationRange] = useState<TimeRange2 | null>(null); const [newAnnotationRange, setNewAnnotationRange] = useState<TimeRange2 | null>(null);
@@ -220,6 +222,7 @@ export const HeatmapPanel = ({
maxHeight={options.tooltip.maxHeight} maxHeight={options.tooltip.maxHeight}
maxWidth={options.tooltip.maxWidth} maxWidth={options.tooltip.maxWidth}
replaceVariables={replaceVariables} replaceVariables={replaceVariables}
canExecuteActions={userCanExecuteActions}
/> />
); );
}} }}

View File

@@ -48,10 +48,12 @@ export const StatusHistoryPanel = ({
// temp range set for adding new annotation set by TooltipPlugin2, consumed by AnnotationPlugin2 // temp range set for adding new annotation set by TooltipPlugin2, consumed by AnnotationPlugin2
const [newAnnotationRange, setNewAnnotationRange] = useState<TimeRange2 | null>(null); const [newAnnotationRange, setNewAnnotationRange] = useState<TimeRange2 | null>(null);
const { sync, eventsScope, canAddAnnotations, dataLinkPostProcessor, eventBus } = usePanelContext(); const { sync, eventsScope, canAddAnnotations, dataLinkPostProcessor, eventBus, canExecuteActions } =
usePanelContext();
const cursorSync = sync?.() ?? DashboardCursorSync.Off; const cursorSync = sync?.() ?? DashboardCursorSync.Off;
const enableAnnotationCreation = Boolean(canAddAnnotations && canAddAnnotations()); const enableAnnotationCreation = Boolean(canAddAnnotations && canAddAnnotations());
const userCanExecuteActions = useMemo(() => canExecuteActions?.() ?? false, [canExecuteActions]);
const { frames, warn } = useMemo( const { frames, warn } = useMemo(
() => prepareTimelineFields(data.series, false, timeRange, theme), () => prepareTimelineFields(data.series, false, timeRange, theme),
@@ -152,6 +154,7 @@ export const StatusHistoryPanel = ({
maxHeight={options.tooltip.maxHeight} maxHeight={options.tooltip.maxHeight}
replaceVariables={replaceVariables} replaceVariables={replaceVariables}
dataLinks={dataLinks} dataLinks={dataLinks}
canExecuteActions={userCanExecuteActions}
/> />
); );
}} }}

View File

@@ -33,7 +33,10 @@ export const TrendPanel = ({
replaceVariables, replaceVariables,
id, id,
}: PanelProps<Options>) => { }: PanelProps<Options>) => {
const { dataLinkPostProcessor } = usePanelContext(); const { dataLinkPostProcessor, canExecuteActions } = usePanelContext();
const userCanExecuteActions = useMemo(() => canExecuteActions?.() ?? false, [canExecuteActions]);
// Need to fallback to first number field if no xField is set in options otherwise panel crashes 😬 // Need to fallback to first number field if no xField is set in options otherwise panel crashes 😬
const trendXFieldName = const trendXFieldName =
options.xField ?? data.series[0]?.fields.find((field) => field.type === FieldType.number)?.name; options.xField ?? data.series[0]?.fields.find((field) => field.type === FieldType.number)?.name;
@@ -142,6 +145,7 @@ export const TrendPanel = ({
replaceVariables={replaceVariables} replaceVariables={replaceVariables}
dataLinks={dataLinks} dataLinks={dataLinks}
hideZeros={options.tooltip.hideZeros} hideZeros={options.tooltip.hideZeros}
canExecuteActions={userCanExecuteActions}
/> />
); );
}} }}

View File

@@ -12,6 +12,7 @@ import {
VizLegendItem, VizLegendItem,
useStyles2, useStyles2,
useTheme2, useTheme2,
usePanelContext,
} from '@grafana/ui'; } from '@grafana/ui';
import { getDisplayValuesForCalcs, TooltipHoverMode } from '@grafana/ui/internal'; import { getDisplayValuesForCalcs, TooltipHoverMode } from '@grafana/ui/internal';
@@ -28,6 +29,9 @@ export const XYChartPanel2 = (props: Props2) => {
const styles = useStyles2(getStyles); const styles = useStyles2(getStyles);
const theme = useTheme2(); const theme = useTheme2();
const { canExecuteActions } = usePanelContext();
const userCanExecuteActions = useMemo(() => canExecuteActions?.() ?? false, [canExecuteActions]);
let { mapping, series: mappedSeries } = props.options; let { mapping, series: mappedSeries } = props.options;
// regenerate series schema when mappings or data changes // regenerate series schema when mappings or data changes
@@ -128,6 +132,7 @@ export const XYChartPanel2 = (props: Props2) => {
seriesIdx={seriesIdx!} seriesIdx={seriesIdx!}
replaceVariables={props.replaceVariables} replaceVariables={props.replaceVariables}
dataLinks={dataLinks} dataLinks={dataLinks}
canExecuteActions={userCanExecuteActions}
/> />
); );
}} }}

View File

@@ -24,6 +24,7 @@ export interface Props {
xySeries: XYSeries[]; xySeries: XYSeries[];
replaceVariables: InterpolateFunction; replaceVariables: InterpolateFunction;
dataLinks: LinkModel[]; dataLinks: LinkModel[];
canExecuteActions?: boolean;
} }
function stripSeriesName(fieldName: string, seriesName: string) { function stripSeriesName(fieldName: string, seriesName: string) {
@@ -51,6 +52,7 @@ export const XYChartTooltip = ({
isPinned, isPinned,
replaceVariables, replaceVariables,
dataLinks, dataLinks,
canExecuteActions,
}: Props) => { }: Props) => {
const rowIndex = dataIdxs.find((idx) => idx !== null)!; const rowIndex = dataIdxs.find((idx) => idx !== null)!;
@@ -130,7 +132,7 @@ export const XYChartTooltip = ({
if (isPinned || hasOneClickLink) { if (isPinned || hasOneClickLink) {
const yFieldFrame = data.find((frame) => frame.fields.includes(yField))!; const yFieldFrame = data.find((frame) => frame.fields.includes(yField))!;
const actions = getFieldActions(yFieldFrame, yField, replaceVariables, rowIndex); const actions = canExecuteActions ? getFieldActions(yFieldFrame, yField, replaceVariables, rowIndex) : [];
footer = <VizTooltipFooter dataLinks={dataLinks} actions={actions} />; footer = <VizTooltipFooter dataLinks={dataLinks} actions={actions} />;
} }

View File

@@ -5,12 +5,11 @@
dist_tag="canary" dist_tag="canary"
registry="http://localhost:4873" registry="http://localhost:4873"
# shellcheck source=./scripts/helpers/exit-if-fail.sh # Require either ACTIONS_ID_TOKEN_REQUEST_URL or NPM_TOKEN to be set
source "$(dirname "$0")/helpers/exit-if-fail.sh" if [ -z "$ACTIONS_ID_TOKEN_REQUEST_URL" ] && [ -z "$NPM_TOKEN" ]; then
echo "ERROR: Either ACTIONS_ID_TOKEN_REQUEST_URL or NPM_TOKEN environment variable must be set."
if [ -z "$NPM_TOKEN" ]; then echo "If running in Github Actions, ensure that 'id-token: write' permission is granted."
echo "The NPM_TOKEN environment variable does not exist." exit 1
exit 1
fi fi
# Parse command line arguments # Parse command line arguments
@@ -34,17 +33,32 @@ while [[ $# -gt 0 ]]; do
esac esac
done done
echo "Starting to release $dist_tag version" echo "Starting to release $dist_tag version with NPM version $(npm --version) to registry $registry"
registry_without_protocol=${registry#*:} if [ -n "$NPM_TOKEN" ]; then
echo "Configured NPM_TOKEN in ~/.npmrc"
echo "$registry_without_protocol/:_authToken=${NPM_TOKEN}" >> ~/.npmrc registry_without_protocol=${registry#*:}
echo "$registry_without_protocol/:_authToken=${NPM_TOKEN}" >> ~/.npmrc
fi
# Loop over .tar files in directory and publish them to npm registry # Loop over .tar files in directory and publish them to npm registry
failed_packages=()
for file in ./npm-artifacts/*.tgz; do for file in ./npm-artifacts/*.tgz; do
npm publish "$file" --tag "$dist_tag" --registry "$registry" if ! npm publish "$file" --tag "$dist_tag" --registry "$registry"; then
failed_packages+=("$file")
fi
done done
# Log failed packages and exit with error if any failed
if (( ${#failed_packages[@]} > 0 )); then
echo ""
echo "ERROR: The following packages failed to publish:"
for pkg in "${failed_packages[@]}"; do
echo " - $pkg"
done
exit 1
fi
# Check if any files in packages/grafana-e2e-selectors were changed. If so, add a 'modified' tag to the package # Check if any files in packages/grafana-e2e-selectors were changed. If so, add a 'modified' tag to the package
CHANGES_COUNT=$(git diff HEAD~1..HEAD --name-only -- packages/grafana-e2e-selectors | awk 'END{print NR}') CHANGES_COUNT=$(git diff HEAD~1..HEAD --name-only -- packages/grafana-e2e-selectors | awk 'END{print NR}')
if (( CHANGES_COUNT > 0 )); then if (( CHANGES_COUNT > 0 )); then

188
yarn.lock
View File

@@ -2426,14 +2426,14 @@ __metadata:
resolution: "@grafana-plugins/grafana-azure-monitor-datasource@workspace:public/app/plugins/datasource/azuremonitor" resolution: "@grafana-plugins/grafana-azure-monitor-datasource@workspace:public/app/plugins/datasource/azuremonitor"
dependencies: dependencies:
"@emotion/css": "npm:11.13.5" "@emotion/css": "npm:11.13.5"
"@grafana/data": "npm:12.2.0-pre" "@grafana/data": "npm:12.2.1"
"@grafana/e2e-selectors": "npm:12.2.0-pre" "@grafana/e2e-selectors": "npm:12.2.1"
"@grafana/i18n": "npm:12.2.0-pre" "@grafana/i18n": "npm:12.2.1"
"@grafana/plugin-configs": "npm:12.2.0-pre" "@grafana/plugin-configs": "npm:12.2.1"
"@grafana/plugin-ui": "npm:^0.10.10" "@grafana/plugin-ui": "npm:^0.10.10"
"@grafana/runtime": "npm:12.2.0-pre" "@grafana/runtime": "npm:12.2.1"
"@grafana/schema": "npm:12.2.0-pre" "@grafana/schema": "npm:12.2.1"
"@grafana/ui": "npm:12.2.0-pre" "@grafana/ui": "npm:12.2.1"
"@kusto/monaco-kusto": "npm:^10.0.0" "@kusto/monaco-kusto": "npm:^10.0.0"
"@testing-library/dom": "npm:10.4.1" "@testing-library/dom": "npm:10.4.1"
"@testing-library/jest-dom": "npm:6.6.4" "@testing-library/jest-dom": "npm:6.6.4"
@@ -2473,13 +2473,13 @@ __metadata:
resolution: "@grafana-plugins/grafana-postgresql-datasource@workspace:public/app/plugins/datasource/grafana-postgresql-datasource" resolution: "@grafana-plugins/grafana-postgresql-datasource@workspace:public/app/plugins/datasource/grafana-postgresql-datasource"
dependencies: dependencies:
"@emotion/css": "npm:11.13.5" "@emotion/css": "npm:11.13.5"
"@grafana/data": "npm:12.2.0-pre" "@grafana/data": "npm:12.2.1"
"@grafana/e2e-selectors": "npm:12.2.0-pre" "@grafana/e2e-selectors": "npm:12.2.1"
"@grafana/plugin-configs": "npm:12.2.0-pre" "@grafana/plugin-configs": "npm:12.2.1"
"@grafana/plugin-ui": "npm:^0.10.10" "@grafana/plugin-ui": "npm:^0.10.10"
"@grafana/runtime": "npm:12.2.0-pre" "@grafana/runtime": "npm:12.2.1"
"@grafana/sql": "npm:12.2.0-pre" "@grafana/sql": "npm:12.2.1"
"@grafana/ui": "npm:12.2.0-pre" "@grafana/ui": "npm:12.2.1"
"@testing-library/dom": "npm:10.4.1" "@testing-library/dom": "npm:10.4.1"
"@testing-library/react": "npm:16.3.0" "@testing-library/react": "npm:16.3.0"
"@testing-library/user-event": "npm:14.6.1" "@testing-library/user-event": "npm:14.6.1"
@@ -2505,11 +2505,11 @@ __metadata:
resolution: "@grafana-plugins/grafana-pyroscope-datasource@workspace:public/app/plugins/datasource/grafana-pyroscope-datasource" resolution: "@grafana-plugins/grafana-pyroscope-datasource@workspace:public/app/plugins/datasource/grafana-pyroscope-datasource"
dependencies: dependencies:
"@emotion/css": "npm:11.13.5" "@emotion/css": "npm:11.13.5"
"@grafana/data": "npm:12.2.0-pre" "@grafana/data": "npm:12.2.1"
"@grafana/plugin-configs": "npm:12.2.0-pre" "@grafana/plugin-configs": "npm:12.2.1"
"@grafana/runtime": "npm:12.2.0-pre" "@grafana/runtime": "npm:12.2.1"
"@grafana/schema": "npm:12.2.0-pre" "@grafana/schema": "npm:12.2.1"
"@grafana/ui": "npm:12.2.0-pre" "@grafana/ui": "npm:12.2.1"
"@testing-library/dom": "npm:10.4.1" "@testing-library/dom": "npm:10.4.1"
"@testing-library/jest-dom": "npm:6.6.4" "@testing-library/jest-dom": "npm:6.6.4"
"@testing-library/react": "npm:16.3.0" "@testing-library/react": "npm:16.3.0"
@@ -2546,12 +2546,12 @@ __metadata:
resolution: "@grafana-plugins/grafana-testdata-datasource@workspace:public/app/plugins/datasource/grafana-testdata-datasource" resolution: "@grafana-plugins/grafana-testdata-datasource@workspace:public/app/plugins/datasource/grafana-testdata-datasource"
dependencies: dependencies:
"@emotion/css": "npm:11.13.5" "@emotion/css": "npm:11.13.5"
"@grafana/data": "npm:12.2.0-pre" "@grafana/data": "npm:12.2.1"
"@grafana/e2e-selectors": "npm:12.2.0-pre" "@grafana/e2e-selectors": "npm:12.2.1"
"@grafana/plugin-configs": "npm:12.2.0-pre" "@grafana/plugin-configs": "npm:12.2.1"
"@grafana/runtime": "npm:12.2.0-pre" "@grafana/runtime": "npm:12.2.1"
"@grafana/schema": "npm:12.2.0-pre" "@grafana/schema": "npm:12.2.1"
"@grafana/ui": "npm:12.2.0-pre" "@grafana/ui": "npm:12.2.1"
"@testing-library/dom": "npm:10.4.1" "@testing-library/dom": "npm:10.4.1"
"@testing-library/jest-dom": "npm:6.6.4" "@testing-library/jest-dom": "npm:6.6.4"
"@testing-library/react": "npm:16.3.0" "@testing-library/react": "npm:16.3.0"
@@ -2630,15 +2630,15 @@ __metadata:
resolution: "@grafana-plugins/loki@workspace:public/app/plugins/datasource/loki" resolution: "@grafana-plugins/loki@workspace:public/app/plugins/datasource/loki"
dependencies: dependencies:
"@emotion/css": "npm:11.13.5" "@emotion/css": "npm:11.13.5"
"@grafana/data": "npm:12.2.0-pre" "@grafana/data": "npm:12.2.1"
"@grafana/e2e-selectors": "npm:12.2.0-pre" "@grafana/e2e-selectors": "npm:12.2.1"
"@grafana/lezer-logql": "npm:0.2.8" "@grafana/lezer-logql": "npm:0.2.8"
"@grafana/llm": "npm:0.22.1" "@grafana/llm": "npm:0.22.1"
"@grafana/monaco-logql": "npm:^0.0.8" "@grafana/monaco-logql": "npm:^0.0.8"
"@grafana/plugin-configs": "npm:12.2.0-pre" "@grafana/plugin-configs": "npm:12.2.1"
"@grafana/runtime": "npm:12.2.0-pre" "@grafana/runtime": "npm:12.2.1"
"@grafana/schema": "npm:12.2.0-pre" "@grafana/schema": "npm:12.2.1"
"@grafana/ui": "npm:12.2.0-pre" "@grafana/ui": "npm:12.2.1"
"@testing-library/dom": "npm:10.4.1" "@testing-library/dom": "npm:10.4.1"
"@testing-library/jest-dom": "npm:6.6.4" "@testing-library/jest-dom": "npm:6.6.4"
"@testing-library/react": "npm:16.3.0" "@testing-library/react": "npm:16.3.0"
@@ -2674,14 +2674,14 @@ __metadata:
resolution: "@grafana-plugins/mssql@workspace:public/app/plugins/datasource/mssql" resolution: "@grafana-plugins/mssql@workspace:public/app/plugins/datasource/mssql"
dependencies: dependencies:
"@emotion/css": "npm:11.13.5" "@emotion/css": "npm:11.13.5"
"@grafana/data": "npm:12.2.0-pre" "@grafana/data": "npm:12.2.1"
"@grafana/e2e-selectors": "npm:12.2.0-pre" "@grafana/e2e-selectors": "npm:12.2.1"
"@grafana/i18n": "npm:12.2.0-pre" "@grafana/i18n": "npm:12.2.1"
"@grafana/plugin-configs": "npm:12.2.0-pre" "@grafana/plugin-configs": "npm:12.2.1"
"@grafana/plugin-ui": "npm:^0.10.10" "@grafana/plugin-ui": "npm:^0.10.10"
"@grafana/runtime": "npm:12.2.0-pre" "@grafana/runtime": "npm:12.2.1"
"@grafana/sql": "npm:12.2.0-pre" "@grafana/sql": "npm:12.2.1"
"@grafana/ui": "npm:12.2.0-pre" "@grafana/ui": "npm:12.2.1"
"@testing-library/dom": "npm:10.4.1" "@testing-library/dom": "npm:10.4.1"
"@testing-library/react": "npm:16.3.0" "@testing-library/react": "npm:16.3.0"
"@testing-library/user-event": "npm:14.6.1" "@testing-library/user-event": "npm:14.6.1"
@@ -2707,13 +2707,13 @@ __metadata:
resolution: "@grafana-plugins/mysql@workspace:public/app/plugins/datasource/mysql" resolution: "@grafana-plugins/mysql@workspace:public/app/plugins/datasource/mysql"
dependencies: dependencies:
"@emotion/css": "npm:11.13.5" "@emotion/css": "npm:11.13.5"
"@grafana/data": "npm:12.2.0-pre" "@grafana/data": "npm:12.2.1"
"@grafana/e2e-selectors": "npm:12.2.0-pre" "@grafana/e2e-selectors": "npm:12.2.1"
"@grafana/plugin-configs": "npm:12.2.0-pre" "@grafana/plugin-configs": "npm:12.2.1"
"@grafana/plugin-ui": "npm:^0.10.10" "@grafana/plugin-ui": "npm:^0.10.10"
"@grafana/runtime": "npm:12.2.0-pre" "@grafana/runtime": "npm:12.2.1"
"@grafana/sql": "npm:12.2.0-pre" "@grafana/sql": "npm:12.2.1"
"@grafana/ui": "npm:12.2.0-pre" "@grafana/ui": "npm:12.2.1"
"@testing-library/dom": "npm:10.4.1" "@testing-library/dom": "npm:10.4.1"
"@testing-library/react": "npm:16.3.0" "@testing-library/react": "npm:16.3.0"
"@testing-library/user-event": "npm:14.6.1" "@testing-library/user-event": "npm:14.6.1"
@@ -2739,11 +2739,11 @@ __metadata:
resolution: "@grafana-plugins/parca@workspace:public/app/plugins/datasource/parca" resolution: "@grafana-plugins/parca@workspace:public/app/plugins/datasource/parca"
dependencies: dependencies:
"@emotion/css": "npm:11.13.5" "@emotion/css": "npm:11.13.5"
"@grafana/data": "npm:12.2.0-pre" "@grafana/data": "npm:12.2.1"
"@grafana/plugin-configs": "npm:12.2.0-pre" "@grafana/plugin-configs": "npm:12.2.1"
"@grafana/runtime": "npm:12.2.0-pre" "@grafana/runtime": "npm:12.2.1"
"@grafana/schema": "npm:12.2.0-pre" "@grafana/schema": "npm:12.2.1"
"@grafana/ui": "npm:12.2.0-pre" "@grafana/ui": "npm:12.2.1"
"@testing-library/dom": "npm:10.4.1" "@testing-library/dom": "npm:10.4.1"
"@testing-library/react": "npm:16.3.0" "@testing-library/react": "npm:16.3.0"
"@testing-library/user-event": "npm:14.6.1" "@testing-library/user-event": "npm:14.6.1"
@@ -2772,14 +2772,14 @@ __metadata:
resolution: "@grafana-plugins/stackdriver@workspace:public/app/plugins/datasource/cloud-monitoring" resolution: "@grafana-plugins/stackdriver@workspace:public/app/plugins/datasource/cloud-monitoring"
dependencies: dependencies:
"@emotion/css": "npm:11.13.5" "@emotion/css": "npm:11.13.5"
"@grafana/data": "npm:12.2.0-pre" "@grafana/data": "npm:12.2.1"
"@grafana/e2e-selectors": "npm:12.2.0-pre" "@grafana/e2e-selectors": "npm:12.2.1"
"@grafana/google-sdk": "npm:0.3.4" "@grafana/google-sdk": "npm:0.3.4"
"@grafana/plugin-configs": "npm:12.2.0-pre" "@grafana/plugin-configs": "npm:12.2.1"
"@grafana/plugin-ui": "npm:^0.10.10" "@grafana/plugin-ui": "npm:^0.10.10"
"@grafana/runtime": "npm:12.2.0-pre" "@grafana/runtime": "npm:12.2.1"
"@grafana/schema": "npm:12.2.0-pre" "@grafana/schema": "npm:12.2.1"
"@grafana/ui": "npm:12.2.0-pre" "@grafana/ui": "npm:12.2.1"
"@testing-library/dom": "npm:10.4.1" "@testing-library/dom": "npm:10.4.1"
"@testing-library/jest-dom": "npm:6.6.4" "@testing-library/jest-dom": "npm:6.6.4"
"@testing-library/react": "npm:16.3.0" "@testing-library/react": "npm:16.3.0"
@@ -2824,7 +2824,7 @@ __metadata:
"@grafana/lezer-traceql": "npm:0.0.23" "@grafana/lezer-traceql": "npm:0.0.23"
"@grafana/monaco-logql": "npm:^0.0.8" "@grafana/monaco-logql": "npm:^0.0.8"
"@grafana/o11y-ds-frontend": "workspace:*" "@grafana/o11y-ds-frontend": "workspace:*"
"@grafana/plugin-configs": "npm:12.2.0-pre" "@grafana/plugin-configs": "npm:12.2.1"
"@grafana/plugin-ui": "npm:^0.10.10" "@grafana/plugin-ui": "npm:^0.10.10"
"@grafana/runtime": "workspace:*" "@grafana/runtime": "workspace:*"
"@grafana/schema": "workspace:*" "@grafana/schema": "workspace:*"
@@ -2989,13 +2989,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@grafana/data@npm:12.2.0-pre, @grafana/data@workspace:*, @grafana/data@workspace:packages/grafana-data": "@grafana/data@npm:12.2.1, @grafana/data@workspace:*, @grafana/data@workspace:packages/grafana-data":
version: 0.0.0-use.local version: 0.0.0-use.local
resolution: "@grafana/data@workspace:packages/grafana-data" resolution: "@grafana/data@workspace:packages/grafana-data"
dependencies: dependencies:
"@braintree/sanitize-url": "npm:7.0.1" "@braintree/sanitize-url": "npm:7.0.1"
"@grafana/i18n": "npm:12.2.0-pre" "@grafana/i18n": "npm:12.2.1"
"@grafana/schema": "npm:12.2.0-pre" "@grafana/schema": "npm:12.2.1"
"@leeoniya/ufuzzy": "npm:1.0.18" "@leeoniya/ufuzzy": "npm:1.0.18"
"@rollup/plugin-node-resolve": "npm:16.0.1" "@rollup/plugin-node-resolve": "npm:16.0.1"
"@types/d3-interpolate": "npm:^3.0.0" "@types/d3-interpolate": "npm:^3.0.0"
@@ -3042,7 +3042,7 @@ __metadata:
languageName: unknown languageName: unknown
linkType: soft linkType: soft
"@grafana/e2e-selectors@npm:12.2.0-pre, @grafana/e2e-selectors@workspace:*, @grafana/e2e-selectors@workspace:packages/grafana-e2e-selectors": "@grafana/e2e-selectors@npm:12.2.1, @grafana/e2e-selectors@workspace:*, @grafana/e2e-selectors@workspace:packages/grafana-e2e-selectors":
version: 0.0.0-use.local version: 0.0.0-use.local
resolution: "@grafana/e2e-selectors@workspace:packages/grafana-e2e-selectors" resolution: "@grafana/e2e-selectors@workspace:packages/grafana-e2e-selectors"
dependencies: dependencies:
@@ -3142,8 +3142,8 @@ __metadata:
"@babel/preset-env": "npm:7.28.0" "@babel/preset-env": "npm:7.28.0"
"@babel/preset-react": "npm:7.27.1" "@babel/preset-react": "npm:7.27.1"
"@emotion/css": "npm:11.13.5" "@emotion/css": "npm:11.13.5"
"@grafana/data": "npm:12.2.0-pre" "@grafana/data": "npm:12.2.1"
"@grafana/ui": "npm:12.2.0-pre" "@grafana/ui": "npm:12.2.1"
"@leeoniya/ufuzzy": "npm:1.0.18" "@leeoniya/ufuzzy": "npm:1.0.18"
"@rollup/plugin-node-resolve": "npm:16.0.1" "@rollup/plugin-node-resolve": "npm:16.0.1"
"@testing-library/dom": "npm:10.4.1" "@testing-library/dom": "npm:10.4.1"
@@ -3193,7 +3193,7 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@grafana/i18n@npm:12.2.0-pre, @grafana/i18n@workspace:*, @grafana/i18n@workspace:packages/grafana-i18n": "@grafana/i18n@npm:12.2.1, @grafana/i18n@workspace:*, @grafana/i18n@workspace:packages/grafana-i18n":
version: 0.0.0-use.local version: 0.0.0-use.local
resolution: "@grafana/i18n@workspace:packages/grafana-i18n" resolution: "@grafana/i18n@workspace:packages/grafana-i18n"
dependencies: dependencies:
@@ -3263,12 +3263,12 @@ __metadata:
resolution: "@grafana/o11y-ds-frontend@workspace:packages/grafana-o11y-ds-frontend" resolution: "@grafana/o11y-ds-frontend@workspace:packages/grafana-o11y-ds-frontend"
dependencies: dependencies:
"@emotion/css": "npm:11.13.5" "@emotion/css": "npm:11.13.5"
"@grafana/data": "npm:12.2.0-pre" "@grafana/data": "npm:12.2.1"
"@grafana/e2e-selectors": "npm:12.2.0-pre" "@grafana/e2e-selectors": "npm:12.2.1"
"@grafana/plugin-ui": "npm:^0.10.10" "@grafana/plugin-ui": "npm:^0.10.10"
"@grafana/runtime": "npm:12.2.0-pre" "@grafana/runtime": "npm:12.2.1"
"@grafana/schema": "npm:12.2.0-pre" "@grafana/schema": "npm:12.2.1"
"@grafana/ui": "npm:12.2.0-pre" "@grafana/ui": "npm:12.2.1"
"@testing-library/dom": "npm:10.4.1" "@testing-library/dom": "npm:10.4.1"
"@testing-library/jest-dom": "npm:^6.1.2" "@testing-library/jest-dom": "npm:^6.1.2"
"@testing-library/react": "npm:16.3.0" "@testing-library/react": "npm:16.3.0"
@@ -3292,7 +3292,7 @@ __metadata:
languageName: unknown languageName: unknown
linkType: soft linkType: soft
"@grafana/plugin-configs@npm:12.2.0-pre, @grafana/plugin-configs@workspace:*, @grafana/plugin-configs@workspace:packages/grafana-plugin-configs": "@grafana/plugin-configs@npm:12.2.1, @grafana/plugin-configs@workspace:*, @grafana/plugin-configs@workspace:packages/grafana-plugin-configs":
version: 0.0.0-use.local version: 0.0.0-use.local
resolution: "@grafana/plugin-configs@workspace:packages/grafana-plugin-configs" resolution: "@grafana/plugin-configs@workspace:packages/grafana-plugin-configs"
dependencies: dependencies:
@@ -3369,13 +3369,13 @@ __metadata:
dependencies: dependencies:
"@emotion/css": "npm:11.13.5" "@emotion/css": "npm:11.13.5"
"@floating-ui/react": "npm:0.27.16" "@floating-ui/react": "npm:0.27.16"
"@grafana/data": "npm:12.2.0-pre" "@grafana/data": "npm:12.2.1"
"@grafana/e2e-selectors": "npm:12.2.0-pre" "@grafana/e2e-selectors": "npm:12.2.1"
"@grafana/i18n": "npm:12.2.0-pre" "@grafana/i18n": "npm:12.2.1"
"@grafana/plugin-ui": "npm:^0.10.10" "@grafana/plugin-ui": "npm:^0.10.10"
"@grafana/runtime": "npm:12.2.0-pre" "@grafana/runtime": "npm:12.2.1"
"@grafana/schema": "npm:12.2.0-pre" "@grafana/schema": "npm:12.2.1"
"@grafana/ui": "npm:12.2.0-pre" "@grafana/ui": "npm:12.2.1"
"@hello-pangea/dnd": "npm:18.0.1" "@hello-pangea/dnd": "npm:18.0.1"
"@leeoniya/ufuzzy": "npm:1.0.18" "@leeoniya/ufuzzy": "npm:1.0.18"
"@lezer/common": "npm:1.2.3" "@lezer/common": "npm:1.2.3"
@@ -3434,15 +3434,15 @@ __metadata:
languageName: unknown languageName: unknown
linkType: soft linkType: soft
"@grafana/runtime@npm:12.2.0-pre, @grafana/runtime@workspace:*, @grafana/runtime@workspace:packages/grafana-runtime": "@grafana/runtime@npm:12.2.1, @grafana/runtime@workspace:*, @grafana/runtime@workspace:packages/grafana-runtime":
version: 0.0.0-use.local version: 0.0.0-use.local
resolution: "@grafana/runtime@workspace:packages/grafana-runtime" resolution: "@grafana/runtime@workspace:packages/grafana-runtime"
dependencies: dependencies:
"@grafana/data": "npm:12.2.0-pre" "@grafana/data": "npm:12.2.1"
"@grafana/e2e-selectors": "npm:12.2.0-pre" "@grafana/e2e-selectors": "npm:12.2.1"
"@grafana/faro-web-sdk": "npm:^1.13.2" "@grafana/faro-web-sdk": "npm:^1.13.2"
"@grafana/schema": "npm:12.2.0-pre" "@grafana/schema": "npm:12.2.1"
"@grafana/ui": "npm:12.2.0-pre" "@grafana/ui": "npm:12.2.1"
"@rollup/plugin-node-resolve": "npm:16.0.1" "@rollup/plugin-node-resolve": "npm:16.0.1"
"@rollup/plugin-terser": "npm:0.4.4" "@rollup/plugin-terser": "npm:0.4.4"
"@testing-library/dom": "npm:10.4.1" "@testing-library/dom": "npm:10.4.1"
@@ -3521,7 +3521,7 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@grafana/schema@npm:12.2.0-pre, @grafana/schema@workspace:*, @grafana/schema@workspace:packages/grafana-schema": "@grafana/schema@npm:12.2.1, @grafana/schema@workspace:*, @grafana/schema@workspace:packages/grafana-schema":
version: 0.0.0-use.local version: 0.0.0-use.local
resolution: "@grafana/schema@workspace:packages/grafana-schema" resolution: "@grafana/schema@workspace:packages/grafana-schema"
dependencies: dependencies:
@@ -3537,17 +3537,17 @@ __metadata:
languageName: unknown languageName: unknown
linkType: soft linkType: soft
"@grafana/sql@npm:12.2.0-pre, @grafana/sql@workspace:*, @grafana/sql@workspace:packages/grafana-sql": "@grafana/sql@npm:12.2.1, @grafana/sql@workspace:*, @grafana/sql@workspace:packages/grafana-sql":
version: 0.0.0-use.local version: 0.0.0-use.local
resolution: "@grafana/sql@workspace:packages/grafana-sql" resolution: "@grafana/sql@workspace:packages/grafana-sql"
dependencies: dependencies:
"@emotion/css": "npm:11.13.5" "@emotion/css": "npm:11.13.5"
"@grafana/data": "npm:12.2.0-pre" "@grafana/data": "npm:12.2.1"
"@grafana/e2e-selectors": "npm:12.2.0-pre" "@grafana/e2e-selectors": "npm:12.2.1"
"@grafana/i18n": "npm:12.2.0-pre" "@grafana/i18n": "npm:12.2.1"
"@grafana/plugin-ui": "npm:^0.10.10" "@grafana/plugin-ui": "npm:^0.10.10"
"@grafana/runtime": "npm:12.2.0-pre" "@grafana/runtime": "npm:12.2.1"
"@grafana/ui": "npm:12.2.0-pre" "@grafana/ui": "npm:12.2.1"
"@react-awesome-query-builder/ui": "npm:6.6.15" "@react-awesome-query-builder/ui": "npm:6.6.15"
"@testing-library/dom": "npm:10.4.1" "@testing-library/dom": "npm:10.4.1"
"@testing-library/jest-dom": "npm:^6.1.2" "@testing-library/jest-dom": "npm:^6.1.2"
@@ -3603,7 +3603,7 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@grafana/ui@npm:12.2.0-pre, @grafana/ui@workspace:*, @grafana/ui@workspace:packages/grafana-ui": "@grafana/ui@npm:12.2.1, @grafana/ui@workspace:*, @grafana/ui@workspace:packages/grafana-ui":
version: 0.0.0-use.local version: 0.0.0-use.local
resolution: "@grafana/ui@workspace:packages/grafana-ui" resolution: "@grafana/ui@workspace:packages/grafana-ui"
dependencies: dependencies:
@@ -3613,11 +3613,11 @@ __metadata:
"@emotion/serialize": "npm:1.3.3" "@emotion/serialize": "npm:1.3.3"
"@faker-js/faker": "npm:^9.0.0" "@faker-js/faker": "npm:^9.0.0"
"@floating-ui/react": "npm:0.27.16" "@floating-ui/react": "npm:0.27.16"
"@grafana/data": "npm:12.2.0-pre" "@grafana/data": "npm:12.2.1"
"@grafana/e2e-selectors": "npm:12.2.0-pre" "@grafana/e2e-selectors": "npm:12.2.1"
"@grafana/faro-web-sdk": "npm:^1.13.2" "@grafana/faro-web-sdk": "npm:^1.13.2"
"@grafana/i18n": "npm:12.2.0-pre" "@grafana/i18n": "npm:12.2.1"
"@grafana/schema": "npm:12.2.0-pre" "@grafana/schema": "npm:12.2.1"
"@hello-pangea/dnd": "npm:18.0.1" "@hello-pangea/dnd": "npm:18.0.1"
"@monaco-editor/react": "npm:4.7.0" "@monaco-editor/react": "npm:4.7.0"
"@popperjs/core": "npm:2.11.8" "@popperjs/core": "npm:2.11.8"
@@ -11678,13 +11678,13 @@ __metadata:
linkType: hard linkType: hard
"axios@npm:^1, axios@npm:^1.10.0, axios@npm:^1.6.1, axios@npm:^1.8.3, axios@npm:^1.9.0": "axios@npm:^1, axios@npm:^1.10.0, axios@npm:^1.6.1, axios@npm:^1.8.3, axios@npm:^1.9.0":
version: 1.11.0 version: 1.12.2
resolution: "axios@npm:1.11.0" resolution: "axios@npm:1.12.2"
dependencies: dependencies:
follow-redirects: "npm:^1.15.6" follow-redirects: "npm:^1.15.6"
form-data: "npm:^4.0.4" form-data: "npm:^4.0.4"
proxy-from-env: "npm:^1.1.0" proxy-from-env: "npm:^1.1.0"
checksum: 10/232df4af7a4e4e07baa84621b9cc4b0c518a757b4eacc7f635c0eb3642cb98dff347326739f24b891b3b4481b7b838c79a3a0c4819c9fbc1fc40232431b9c5dc checksum: 10/886a79770594eaad76493fecf90344b567bd956240609b5dcd09bd0afe8d3e6f1ad6d3257a93a483b6192b409d4b673d9515a34619e3e3ed1b2c0ec2a83b20ba
languageName: node languageName: node
linkType: hard linkType: hard