Compare commits

..

193 Commits

Author SHA1 Message Date
grafana-delivery-bot[bot]
d3ccac679b [v10.3.x] Azure data sources: Set selected config type before save (#87584)
Azure data sources: Set selected config type before save (#87481)

* set selected config type before save

* use effect once and move in mssql

* add to prom

* Update ConfigurationEditor.tsx

* Update ConfigurationEditor.tsx

* Delete public/app/plugins/datasource/mssql/configuration/ConfigurationEditor.tsx

* omadsfdsa

* remove unneeded assign

(cherry picked from commit 5e19aa7bd1)

Co-authored-by: Andrew Hackmann <5140848+bossinc@users.noreply.github.com>
2024-05-10 14:49:11 +01:00
Stephanie Hingtgen
1679d8afb5 [v10.3.x] Chore: Upgrade go to 1.21.10 (#87474)
* [v10.3.x] Chore: Upgrade go to 1.21.10

* format drone

* sign drone

---------

Co-authored-by: Kevin Minehart <kmineh0151@gmail.com>
2024-05-08 10:05:25 -05:00
Gábor Farkas
b9d08b76ab [10.3.x] Update golang.org/x/net to latest version (#87424)
[v9.5.x] upgrade google.com/x/net to newest version
2024-05-08 10:41:58 +01:00
Kevin Minehart
b9ce9b20b8 [v10.3.x] CI: set go-version in docker build pr pipelines (#87444) (#87451)
[v10.2.x] CI: set go-version in docker build pr pipelines (#87444)

set go-version in docker build pr pipelines

(cherry picked from commit 8397058274)
2024-05-07 17:50:52 +03:00
grafana-delivery-bot[bot]
e97a3f55de [v10.3.x] Docs: add data link cell type information (#87352)
Docs: add data link cell type information (#87350)

Add data link cell type information

(cherry picked from commit 386baf83cd)

Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>
2024-05-03 16:29:32 -04:00
grafana-delivery-bot[bot]
82839c710f [v10.3.x] docs: update flame graph visualization (#87267)
docs: update flame graph visualization (#86615)

* docs: update flame graph visualization

* fix: linting issues

* docs: add example data

* Apply suggestions from code review

Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>

* Removed Wikipedia link

* Fixed punctuation

* Updated max image width

* Update docs/sources/panels-visualizations/visualizations/flame-graph/index.md

Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>

* fix: linting issues

* docs: add links to pyroscope docs about flame graph and profile types

* Ran prettier

* docs: add flame graph video

* Updated wording

---------

Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>
Co-authored-by: Isabel Matwawana <isabel.matwawana@grafana.com>
(cherry picked from commit 7db41222c6)

Co-authored-by: Marie Cruz <mdcruz@users.noreply.github.com>
2024-05-02 14:09:53 -04:00
grafana-delivery-bot[bot]
1ea0f53927 [v10.3.x] Docs: Fix link to values.yaml file (#87254)
Docs: Fix link to values.yaml file (#87014)

Fix link to values.yaml file

Linking to the "edit" URL fails if the reader doesn't have write access
to the repo: they'll be prompted to fork the repo or to sign in to
GitHub. Instead link to the "blob" URL which is accessible to all
readers.

(cherry picked from commit 64d5440c5a)

Co-authored-by: Nicholas P. Cole <nicholas@nicholaspcole.com>
2024-05-02 10:46:06 -05:00
grafana-delivery-bot[bot]
37bda8cd0d [v10.3.x] Typo fix in User API doc example (#86820)
Co-authored-by: Jack Baldry <jack.baldry@grafana.com>
Co-authored-by: nextMJ <77353838+nextMJ@users.noreply.github.com>
fix in User API doc example (#81890)
2024-04-24 06:25:20 +01:00
grafana-delivery-bot[bot]
a39b439dcd [v10.3.x] Remove fmt.Println of client certificate (#86784)
Remove fmt.Println of client certificate (#86773)

(cherry picked from commit 2049f766c6)

Co-authored-by: George Robinson <george.robinson@grafana.com>
2024-04-23 16:53:48 +02:00
grafana-delivery-bot[bot]
3c772ce583 [v10.3.x] Update make docs procedure (#86766)
Co-authored-by: grafanabot <bot@grafana.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-04-23 13:23:45 +01:00
grafana-delivery-bot[bot]
b7c9930478 [v10.3.x] Docs: add snapshot deletion info (#86734)
Docs: add snapshot deletion info (#86725)

* Added delete snapshots section

* Replicated content, updated heading, and lowered heading level

(cherry picked from commit 2b3457e6ed)

Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>
2024-04-22 18:33:30 -04:00
grafana-delivery-bot[bot]
4789b29b77 [v10.3.x] Docs: Add config guidance for embedding (#86728)
Docs: Add config guidance for embedding (#86726)

Added note re iframes

(cherry picked from commit 05a4b3e80d)

Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>
2024-04-22 17:06:51 -04:00
Isabel Matwawana
27b284b371 [v10.3.x] Docs: Update example docs for (#86722)
Docs: Update example docs for `rename by regex` (#86627)

* baldm0mma/update_regex/ update example docs

* baldm0mma/ push ts

* baldm0mma/update_regex with new exmaples

* baldm0mma/update_regex/ update images

* baldm0mma/regex_update/ update text

(cherry picked from commit ad679c62c6)

Co-authored-by: Jev Forsberg <46619047+baldm0mma@users.noreply.github.com>
2024-04-22 15:02:22 -04:00
grafana-delivery-bot[bot]
863eea9b7a [v10.3.x] Embed Managing users and permissions video to the documentation (#86713)
Co-authored-by: Jack Baldry <jack.baldry@grafana.com>
Co-authored-by: Lisa <60980933+LisaHJung@users.noreply.github.com>
2024-04-22 17:52:24 +01:00
grafana-delivery-bot[bot]
1b0874b942 [v10.3.x] docs: update candlestick visualization (#86698)
docs: update candlestick visualization (#86053)

* docs: update candlestick visualization

* fix: linting issues

* Apply suggestions from code review

Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>

* docs: add candlestick video

---------

Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>
(cherry picked from commit 50b285ac69)

Co-authored-by: Marie Cruz <mdcruz@users.noreply.github.com>
2024-04-22 10:30:45 -04:00
grafana-delivery-bot[bot]
81e0cb6f90 [v10.3.x] Embed creating alerts with Grafana video to the documentation (#86664)
Embed creating alerts with Grafana video to the documentation (#86386)

(cherry picked from commit 65e6b67b2e)

Co-authored-by: Lisa <60980933+LisaHJung@users.noreply.github.com>
2024-04-22 11:12:25 +02:00
grafana-delivery-bot[bot]
4b06bf081a [v10.3.x] Docs: Add GeoMaps YouTube Video (#86531)
Docs: Add GeoMaps YouTube Video (#86472)

* Update index.md on GeoMaps adding YouTube Video

Added the GeoMap YouTube video to the documentation

* Update docs/sources/panels-visualizations/visualizations/geomap/index.md

Totally agree, I tend to use those words and not realize :P

Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>

---------

Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>
(cherry picked from commit 0d11f9b2f4)

Co-authored-by: Señor Performo - Leandro Melendez <54183040+srperf@users.noreply.github.com>
2024-04-18 11:01:18 -04:00
grafana-delivery-bot[bot]
d3235f7737 [v10.3.x] docs: update heatmap visualization and add play links (#86512)
docs: update heatmap visualization and add play links (#85926)

* docs: update heatmap visualization

* docs: add state timeline and status history play shortcodes

* Apply suggestions from code review

Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>

* docs: add heatmap video

---------

Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>
(cherry picked from commit 8373fc3544)

Co-authored-by: Marie Cruz <mdcruz@users.noreply.github.com>
2024-04-18 08:28:00 -04:00
grafana-delivery-bot[bot]
444c058260 [v10.3.x] Add Create annotations in panel video to the documentation (#86509)
Add Create annotations in panel video to the documentation (#86383)

* Add Create annotations in panel video to the documentation

* Update docs/sources/dashboards/build-dashboards/annotate-visualizations/index.md

Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>

---------

Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>
Co-authored-by: Isabel Matwawana <isabel.matwawana@grafana.com>
(cherry picked from commit bdd288d058)

Co-authored-by: Lisa <60980933+LisaHJung@users.noreply.github.com>
2024-04-18 08:24:42 -04:00
grafana-delivery-bot[bot]
90b2724194 [v10.3.x] docs: add annotations play link (#86246)
docs: add annotations play link (#86206)

* docs: add annotations play link

* PR feedback

(cherry picked from commit c9350a25c4)

Co-authored-by: David Allen <david.allen@grafana.com>
2024-04-15 17:40:31 -04:00
grafana-delivery-bot[bot]
00db115095 [v10.3.x] docs: add thresholds play link (#86239)
docs: add thresholds play link (#86212)

* docs: add thresholds play link

* PR review

(cherry picked from commit f50e29e004)

Co-authored-by: David Allen <david.allen@grafana.com>
2024-04-15 17:28:05 -04:00
grafana-delivery-bot[bot]
4d884ceca4 [v10.3.x] docs: added logs panel play link; added dedup options, reformatted fig (#86236)
docs: added logs panel play link; added dedup options, reformatted fig (#86209)

* docs: added logs panel play link; added dedup options, reformatted fig

* Update docs/sources/panels-visualizations/visualizations/logs/index.md

Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>

* Update docs/sources/panels-visualizations/visualizations/logs/index.md

Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>

---------

Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>
(cherry picked from commit 19ae9377b9)

Co-authored-by: David Allen <david.allen@grafana.com>
2024-04-15 17:11:42 -04:00
grafana-delivery-bot[bot]
5a57a48d06 [v10.3.x] Docs: added bar gauge play link (#86225)
Docs: added bar gauge play link (#86205)

* docs: added bar gauge play link

* Update docs/sources/panels-visualizations/visualizations/bar-gauge/index.md

Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>

---------

Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>
(cherry picked from commit 04e127b368)

Co-authored-by: David Allen <david.allen@grafana.com>
2024-04-15 15:58:51 -04:00
grafana-delivery-bot[bot]
299a88dd58 [v10.3.x] docs: query data/relative time range override play link (#86229)
docs: query data/relative time range override play link (#86213)

(cherry picked from commit c450d61d32)

Co-authored-by: David Allen <david.allen@grafana.com>
2024-04-15 15:56:34 -04:00
grafana-delivery-bot[bot]
5d3079df93 [v10.3.x] Docs: add template var Play link; cleanup existing (#86219)
Docs: add template var Play link; cleanup existing (#86074)

* Docs: add template var Play link; cleanup existing

* Update docs/sources/dashboards/variables/_index.md

Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>

* Update docs/sources/dashboards/variables/_index.md

Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>

* Apply suggestions from code review

Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>

---------

Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>
(cherry picked from commit 5a57c31607)

Co-authored-by: David Allen <david.allen@grafana.com>
2024-04-15 15:53:14 -04:00
grafana-delivery-bot[bot]
dcf8b1e677 [v10.3.x] Docs: add tags section to dashboard settings docs (#86176)
Docs: add tags section to dashboard settings docs (#85875)

Edited

(cherry picked from commit 918f122433)

Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>
2024-04-15 11:03:18 -04:00
grafana-delivery-bot[bot]
07aa5129d7 [v10.3.x] Docs: add best practices Play link (#86171)
Docs: add best practices Play link (#86076)

(cherry picked from commit eb46d85829)

Co-authored-by: David Allen <david.allen@grafana.com>
2024-04-15 11:00:45 -04:00
grafana-delivery-bot[bot]
6691c174af [v10.3.x] LibraryPanelRBAC: Fix issue with importing dashboards containing library panels (#86148)
LibraryPanelRBAC: Fix issue with importing dashboards containing library panels (#83980)

(cherry picked from commit 6a53864f7a)

Co-authored-by: kay delaney <45561153+kaydelaney@users.noreply.github.com>
2024-04-15 16:09:13 +02:00
grafana-delivery-bot[bot]
6a992825e8 [v10.3.x] Docs: add data source type play link; cleanup (#86103)
Co-authored-by: David Allen <david.allen@grafana.com>
2024-04-15 10:53:10 +01:00
grafana-delivery-bot[bot]
dfaa0d2779 [v10.3.x] Docs: add mysql data source Play link (#86017)
Co-authored-by: David Allen <david.allen@grafana.com>
2024-04-12 10:35:10 +01:00
grafana-delivery-bot[bot]
0239898466 [v10.3.x] Docs: add graphite data source Play link (#86014)
Co-authored-by: David Allen <david.allen@grafana.com>
2024-04-12 10:34:06 +01:00
grafana-delivery-bot[bot]
4dc3980dd4 [v10.3.x] Docs: add bar/pie visualization Play link (#85988)
Docs: add bar/pie visualization Play link (#85898)

* Update index.md

* pie chart equivalent commit

* Updated titles to match dashboard title

---------

Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>
(cherry picked from commit 623d4d580e)

Co-authored-by: David Allen <david.allen@grafana.com>
2024-04-11 14:10:38 -04:00
grafana-delivery-bot[bot]
9fae643902 [v10.3.x] Docs: add gague visualization Play link (#85984)
Docs: add gague visualization Play link (#85897)

* Docs: add gague visualization Play link

* Fixed typo

* Updated title to match dashboard title

---------

Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>
(cherry picked from commit 17a8de68e6)

Co-authored-by: David Allen <david.allen@grafana.com>
2024-04-11 14:06:26 -04:00
grafana-delivery-bot[bot]
a51ba26416 [v10.3.x] Docs: add stat visualization Play link (#85971)
Docs: add stat visualization Play link (#85895)

(cherry picked from commit cdfd092d11)

Co-authored-by: David Allen <david.allen@grafana.com>
2024-04-11 13:58:44 -04:00
grafana-delivery-bot[bot]
ec98e9070f [v10.3.x] Docs: add Table visualization Play link (#85975)
Docs: add Table visualization Play link (#85896)

Docs: add stat visualization Play link
(cherry picked from commit 83438bd231)

Co-authored-by: David Allen <david.allen@grafana.com>
2024-04-11 13:49:35 -04:00
grafana-delivery-bot[bot]
585cfaba59 [v10.3.x] Docs: add time series visualization Play link (#85992)
Docs: add time series visualization Play link (#85885)

* docs/play shortcode: time series visualization

* Ran prettier

* Updated title to match title of dashboard in Grafana Play

---------

Co-authored-by: Isabel Matwawana <isabel.matwawana@grafana.com>
Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>
(cherry picked from commit 765f20c555)

Co-authored-by: David Allen <david.allen@grafana.com>
2024-04-11 13:38:59 -04:00
grafana-delivery-bot[bot]
f7b7760f4d [v10.3.x] Chore: Update RPM docs to include beta release references (#85791)
Chore: Update RPM docs to include beta release references (#85753)

* Update RPM docs to include beta release references

* andreas/update-installation-docs/ run lint

* Don't number lists

---------

Co-authored-by: jev forsberg <jev.forsberg@grafana.com>
(cherry picked from commit 3420e942ac)

Co-authored-by: Andreas Christou <andreas.christou@grafana.com>
2024-04-09 12:29:06 +01:00
Isabel Matwawana
077db9d22e [v10.3.x] docs: add missing viz types to index (#85686)
docs: add missing viz types to index (#85400)

* docs: add missing viz types to index

* prettier

* Update _index.md

Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>

* fix merge mistake

* fix cloud links

---------

Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>
(cherry picked from commit cd05568459)

Co-authored-by: David Harris <david.harris@grafana.com>
2024-04-05 17:01:12 -04:00
grafana-delivery-bot[bot]
5bd9e423f5 [v10.3.x] Docs: add YouTube video link and description (#85536)
Docs: add YouTube video link and description (#85484)

* Update index.md Adding YouTube video link and description

Added a short description about the video and added the video to the page.

* Update docs/sources/panels-visualizations/visualizations/logs/index.md

Some edits went in. All nice :)

Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>

* Removed repetition

---------

Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>
(cherry picked from commit f6a94837c5)

Co-authored-by: Señor Performo - Leandro Melendez <54183040+srperf@users.noreply.github.com>
2024-04-03 11:21:00 -04:00
grafana-delivery-bot[bot]
81a213ed3d [v10.3.x] Alerting: Don't validate rules on group update if they've only been reordered (#85374)
Alerting: Don't validate rules on group update if they've only been reordered (#81841)

---------

Co-authored-by: Yuri Tseretyan <yuriy.tseretyan@grafana.com>
(cherry picked from commit b7bbc5058f)

Co-authored-by: William Wernert <william.wernert@grafana.com>
2024-03-28 12:41:14 -04:00
grafana-delivery-bot[bot]
df26054967 [v10.3.x] docs: update histogram visualization (#85362)
docs: update histogram visualization (#85125)

* docs: update histogram visualization docs

* docs: updates to histogram visualization

* Apply suggestions from code review

Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>

* Fixed typo I introduced

* docs: add youtube video

---------

Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>
(cherry picked from commit 4a3140a0aa)

Co-authored-by: Marie Cruz <mdcruz@users.noreply.github.com>
2024-03-28 11:37:38 -04:00
grafana-delivery-bot[bot]
74ad6d2723 [v10.3.x] Docs: fix availability note (#85344)
Docs: fix availability note (#85315)

Fixed availability note

(cherry picked from commit 5f38455f31)

Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>
2024-03-28 08:42:40 -04:00
Jo
2443f30303 [v10.3.x] AuthProxy: Fix missing session for ldap auth proxy users (#85250)
AuthProxy: Fix missing session for ldap auth proxy users (#85090)

fix missing session for ldap auth proxy users

(cherry picked from commit 7649d93d17)
(cherry picked from commit b8dda250c5)
2024-03-27 17:51:41 +01:00
grafana-delivery-bot[bot]
0f73ab3280 [v10.3.x] Added YouTube video to index.md on Time Series (#85275)
Added YouTube video to index.md on Time Series (#85188)

* Added YouTube video to index.md on Time Series

Added a brief description and the YouTube link for the Time Series video.

* Update index.md

Did quick fix

* Update index.md

Found double space, removed, hope PR goes through

* Update docs/sources/panels-visualizations/visualizations/time-series/index.md

Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>

---------

Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>
(cherry picked from commit d4953f4a1f)

Co-authored-by: Señor Performo - Leandro Melendez <54183040+srperf@users.noreply.github.com>
2024-03-27 11:14:01 -04:00
grafana-delivery-bot[bot]
e7b66d170e [v10.3.x] Clarify AWS Auth instructions for Grafana Cloud users (#85207)
Clarify AWS Auth instructions for Grafana Cloud users (#84312)

* Clarify "Grafana Assume Role" feature instructions for Grafana Cloud users

Following the recommendations provided in Support escalation https://github.com/grafana/support-escalations/issues/8277

* Update docs/sources/datasources/aws-cloudwatch/aws-authentication/index.md

Co-authored-by: Jack Baldry <jack.baldry@grafana.com>

* Update docs/sources/datasources/aws-cloudwatch/aws-authentication/index.md

Co-authored-by: Jack Baldry <jack.baldry@grafana.com>

---------

Co-authored-by: Eve Meelan <81647476+Eve832@users.noreply.github.com>
Co-authored-by: Jack Baldry <jack.baldry@grafana.com>
(cherry picked from commit ac9523bcad)

Co-authored-by: melGL <81323402+melgl@users.noreply.github.com>
2024-03-26 12:00:46 -07:00
grafana-delivery-bot[bot]
f3906d082e [v10.3.x] SQLEngine: Use debug method instead of custom implementation (#85153)
SQLEngine: Use `debug` method instead of custom implementation (#85118)

Use debug method instead of custom implementation

(cherry picked from commit 19159a89a2)

Co-authored-by: Andreas Christou <andreas.christou@grafana.com>
2024-03-26 13:41:50 +02:00
grafana-delivery-bot[bot]
fcebdc12e6 [v10.3.x] Access control: Improve annotation delete performance (#85149)
Access control: Improve annotation delete performance (#85068)

* Access control: Improve annotation delete performance

* simplify query string

* Refactor

* remove unnecessary join

(cherry picked from commit 02606be3ed)

Co-authored-by: Alexander Zobnin <alexanderzobnin@gmail.com>
2024-03-26 13:40:58 +02:00
grafana-delivery-bot[bot]
eb1e0c365f [v10.3.x] docs: update status history panel (#85104)
docs: update status history panel (#84939)

* docs: updates to status history panel documentation

* docs: updates to status history panel documentation

* Apply suggestions from code review

Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>

* fix: linting issues

---------

Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>
(cherry picked from commit 15dca45514)

Co-authored-by: Marie Cruz <mdcruz@users.noreply.github.com>
2024-03-25 12:33:25 -04:00
grafana-delivery-bot[bot]
76a4092537 [v10.3.x] docs: updates to stat panel documentation (#85100)
docs: updates to stat panel documentation (#84814)

* docs: updates to stat panel documentation

* Apply suggestions from code review

Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>

* Made formatting and wording edit

---------

Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>
Co-authored-by: Isabel Matwawana <isabel.matwawana@grafana.com>
(cherry picked from commit 34195ba854)

Co-authored-by: Marie Cruz <mdcruz@users.noreply.github.com>
2024-03-25 12:32:05 -04:00
grafana-delivery-bot[bot]
5b1049b4ab [v10.3.x] docs: update text panel documentation (#85097)
docs: update text panel documentation (#84884)

* docs: update text panel

* Apply suggestions from code review

Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>

---------

Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>
(cherry picked from commit 44ae127a6e)

Co-authored-by: Marie Cruz <mdcruz@users.noreply.github.com>
2024-03-25 12:24:10 -04:00
grafana-delivery-bot[bot]
eca7ce8659 [v10.3.x] CloudMonitoring: Only run query if filters are complete (#85015)
CloudMonitoring: Only run query if filters are complete (#85004)

* Only run query if filters are complete

- Update tests

* Fix tests

(cherry picked from commit 4855751d0d)

Co-authored-by: Andreas Christou <andreas.christou@grafana.com>
2024-03-22 19:21:05 +02:00
grafana-delivery-bot[bot]
2ab7c341a0 Release: Bump version to 10.3.6 (#84931)
"Release: Updated versions in package to 10.3.6"

Co-authored-by: grafana-delivery-bot[bot] <132647405+grafana-delivery-bot[bot]@users.noreply.github.com>
2024-03-21 12:33:04 -04:00
grafana-delivery-bot[bot]
6db35ad6b4 [v10.3.x] Alerting: Marshal incoming json.RawMessage in diff (#84852)
Alerting: Marshal incoming json.RawMessage in diff (#84692)

This will ensure the encoding is correct when comparing
to the existing rule.

(cherry picked from commit 6d16cf2699)

Co-authored-by: William Wernert <william.wernert@grafana.com>
2024-03-20 16:26:39 -04:00
Sofia Papagiannaki
cd81c5e4f9 [v10.3.x] Postgres: Allow disabling SNI on SSL-enabled connections (#84259)
* Postgres: Allow disabling SNI on SSL-enabled connections (#83892)

* Postgres: Allow disabling SNI on SSL-enabled connections

* Update docs/sources/setup-grafana/configure-grafana/_index.md

Co-authored-by: Christopher Moyer <35463610+chri2547@users.noreply.github.com>

---------

Co-authored-by: Christopher Moyer <35463610+chri2547@users.noreply.github.com>
(cherry picked from commit 22d8258e48)

* Adjust SNI test
2024-03-20 17:26:39 +02:00
grafana-delivery-bot[bot]
423b47df74 [v10.3.x] Elasticsearch: Fix legend for alerting, expressions and previously frontend queries (#84684)
* Elasticsearch: Fix legend for alerting, expressions and previously frontend queries (#84485)

* Elasticsearch: Fix legend for alerting, expressions and previously frontend queries

* Add comment

* Update comment

(cherry picked from commit 494d169980)

* Fix passing of queries to newclient

---------

Co-authored-by: Ivana Huckova <30407135+ivanahuckova@users.noreply.github.com>
Co-authored-by: Ivana Huckova <ivana.huckova@gmail.com>
2024-03-20 15:03:02 +01:00
grafana-delivery-bot[bot]
8c933d49db [v10.3.x] Visualizations-TablePanel: added YouTube link to Table Panel (#84770)
Visualizations-TablePanel: added YouTube link to Table Panel (#84533)

* Update index.md added YouTube link to Table Panel

* Moved video and added placement note

* Update index.md adding video description

Added a description to the video. Feel free to edit if my syntax or writing needs improvement.

* Wording and style edits

* Wording fix

---------

Co-authored-by: Isabel Matwawana <isabel.matwawana@grafana.com>
Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>
(cherry picked from commit e011c60a75)

Co-authored-by: Señor Performo - Leandro Melendez <54183040+srperf@users.noreply.github.com>
2024-03-19 13:49:02 -04:00
grafana-delivery-bot[bot]
7d9d17bab1 [v10.3.x] docs: initial updates to state timeline documentation (#84757)
docs: initial updates to state timeline documentation (#84224)

* docs: initial updates to state timeline documentation

* docs: apply linting

* Apply suggestions from code review

Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>

* docs: add feedback from PR review

* docs: apply linting

* Wording and formatting edits

* Fixed grammar

* Update docs/sources/panels-visualizations/visualizations/state-timeline/index.md

Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>

* docs: add two examples for state timeline to show null values and two timestamps

* docs: add steps to configuring a state timeline

* docs: add state timeline video

* docs: add link to creating dashboards

* Changed link text and added version interpolation syntax

---------

Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>
(cherry picked from commit 2f539060f8)

Co-authored-by: Marie Cruz <mdcruz@users.noreply.github.com>
2024-03-19 12:19:19 -04:00
Ryan McKinley
d80f83be01 Snapshots: Require delete within same org (backport) (#84707)
* check orgId on delete

* test from main
2024-03-19 15:50:03 +03:00
Ryan McKinley
b303c5c28a Revert "check orgId on delete"
This reverts commit 2a7adbb2fa.
2024-03-19 09:16:49 +03:00
Ryan McKinley
2a7adbb2fa check orgId on delete 2024-03-19 09:14:56 +03:00
grafana-delivery-bot[bot]
1aea1aad23 [v10.3.x] Chore: Removing error object from tracking (#84505)
Chore: Removing error object from tracking (#84500)

Removing error object from tracking

(cherry picked from commit 6bc662e53b)

Co-authored-by: Timur Olzhabayev <timur.olzhabayev@grafana.com>
2024-03-14 18:30:32 +01:00
grafana-delivery-bot[bot]
31d9df1e6f [v10.3.x] Chore: Adding log also for cases where datasource UID length is invalid (#84471)
Chore: Adding log also for cases where datasource UID length is invalid (#84443)

* Adding log also for datasource length

(cherry picked from commit 8e90e02db2)

Co-authored-by: Timur Olzhabayev <timur.olzhabayev@grafana.com>
2024-03-14 15:58:53 +01:00
grafana-delivery-bot[bot]
5fe20a365d [v10.3.x] Alerting: Fix preview getting the correct queries from the form (#81481)
Alerting: Fix preview getting the correct queries from the form (#80458)

* fix preview getting the correct queries from the form

* Remove setting queries in onChangeQueries handler as it only contains data queries and not expressions

* Keep setValue('queries') but also adding expressions

(cherry picked from commit 51f5e1af39)

Co-authored-by: Sonia Aguilar <33540275+soniaAguilarPeiron@users.noreply.github.com>
2024-03-14 12:50:06 +01:00
grafana-delivery-bot[bot]
a5dc97b4fe [v10.3.x] Chore: Bump update checker interval to 1 day (#84451)
Chore: Bump update checker interval to 1 day (#84404)

* Bump interval to 1hr

* 2 hours is better than 1

* Bump further to 1 day

(cherry picked from commit 391d14d091)

Co-authored-by: Andreas Christou <andreas.christou@grafana.com>
2024-03-14 13:15:15 +02:00
grafana-delivery-bot[bot]
053ff2bc2e [v10.3.x] Docs: clarify query formatting for time range variable queries (#84324)
Docs: clarify query formatting for time range variable queries (#84074)

* Added time range variable guidance

* Reworded

* Applied review suggestion

(cherry picked from commit e552e21221)

Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>
2024-03-12 15:48:42 -04:00
grafana-delivery-bot[bot]
cfc76de37f [v10.3.x] Docs: fix broken link (#84219)
Docs: fix broken link (#84103)

* Fixed broken link

* Removed trailing slash

* Ran prettier

(cherry picked from commit ffd0bdafe4)

Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>
2024-03-11 14:21:14 -04:00
grafana-delivery-bot[bot]
8da2f3c738 [v10.3.x] Docs: add missing alt text (#84215)
Docs: add missing alt text (#84102)

Added missing alt text

(cherry picked from commit e2cc5e57e5)

Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>
2024-03-11 14:19:26 -04:00
Isabel Matwawana
20a003a295 [v10.3.x] Docs: fix llm plugin link (#84104)
Fix llm plugin link
2024-03-11 12:57:17 -04:00
grafana-delivery-bot[bot]
6b1e04976b [v10.3.x] Docs: corrected data source management information (#84208)
corrected the minor details (#84046)

* corrected the minor details

Making minor changes after the PR merged on Data sources and Data source administration.

https://github.com/grafana/grafana/pull/83712

* Apply suggestions from code review

Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>

* Update docs/sources/panels-visualizations/_index.md

Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>

* Ran prettier

---------

Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>
Co-authored-by: Isabel Matwawana <isabel.matwawana@grafana.com>
(cherry picked from commit cfc7ea92da)

Co-authored-by: Usman Ahmad <usman.ahmad@grafana.com>
2024-03-11 12:56:31 -04:00
grafana-delivery-bot[bot]
b7aa8cdfe5 [v10.3.x] Dashboard: Fix issue where out-of-view shared query panels caused blank dependent panels (#84196)
Dashboard: Fix issue where out-of-view shared query panels caused blank dependent panels (#83966)

(cherry picked from commit d8b8a2c2b0)

Co-authored-by: kay delaney <45561153+kaydelaney@users.noreply.github.com>
2024-03-11 17:06:27 +02:00
grafana-delivery-bot[bot]
e5e165ec1a [v10.3.x] docs: adds alt text to images where missing (#84092)
docs: adds alt text to images where missing (#84028)

* adds alt text

* makes prettier

(cherry picked from commit 8c7090bc11)

Co-authored-by: Christopher Moyer <35463610+chri2547@users.noreply.github.com>
2024-03-07 13:00:59 -06:00
grafana-delivery-bot[bot]
684c6af150 [v10.3.x] Embed two visualization videos from the Grafana for Beginners series (#84087)
Embed two visualization videos from the Grafana for Beginners series (#83928)

* Embed two visualization videos from Grafana for Beginners series

* Implementing Isabel's recommendation on second video placement.

* edited introductory sentence to the second video.

* Added line between text and video

---------

Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>
(cherry picked from commit a15e48052f)

Co-authored-by: Lisa <60980933+LisaHJung@users.noreply.github.com>
2024-03-07 13:51:01 -05:00
Andreas Christou
2e2932b9f4 [v10.3.x] Chore: Bump docker image versions (#84066)
* Chore: Bump docker image versions (#84033)

Bump docker image versions

(cherry picked from commit 0236053f70)

# Conflicts:
#	Dockerfile

* Undo lint
2024-03-07 16:29:48 +00:00
grafana-delivery-bot[bot]
f15bc2f246 [v10.3.x] disable_sanitize_html update (#84021)
disable_sanitize_html update (#83643)

* disable_sanitize_html update

Added a note that states this configuration is not available for Grafana Cloud instances.

* Update docs/sources/setup-grafana/configure-grafana/_index.md

* Update docs/sources/setup-grafana/configure-grafana/_index.md

---------

Co-authored-by: Christopher Moyer <35463610+chri2547@users.noreply.github.com>
(cherry picked from commit 2142efc1a5)

Co-authored-by: Dai Nguyen <88277570+ej25a@users.noreply.github.com>
2024-03-06 11:39:45 -06:00
grafana-delivery-bot[bot]
ae52edd6e6 Release: Bump version to 10.3.5 (#84000)
"Release: Updated versions in package to 10.3.5"

Co-authored-by: grafana-delivery-bot[bot] <132647405+grafana-delivery-bot[bot]@users.noreply.github.com>
2024-03-06 18:03:57 +02:00
grafana-delivery-bot[bot]
ffbc82f66c [v10.3.x] Configure Grafana docs: fix custom configuration file location (#83998)
Configure Grafana docs: fix custom configuration file location (#83169)

* Configure Grafana docs: fix custom configuration file location

* Replace config file with `custom.ini`

---------

Co-authored-by: Jack Baldry <jack.baldry@grafana.com>
(cherry picked from commit ce827f9518)

Co-authored-by: Pepe Cano <825430+ppcano@users.noreply.github.com>
2024-03-06 10:02:55 -06:00
Andreas Christou
e954eeb344 [v10.3.x] Changelog: Updated changelog for 10.3.4 (#83994)
Changelog: Updated changelog for 10.3.4 (#83993)

Co-authored-by: grafanabot <bot@grafana.com>
(cherry picked from commit d3207df8b4)

# Conflicts:
#	CHANGELOG.md

Co-authored-by: grafana-delivery-bot[bot] <132647405+grafana-delivery-bot[bot]@users.noreply.github.com>
2024-03-06 08:58:12 -07:00
grafana-delivery-bot[bot]
d35a90ec10 [v10.3.x] Docs/datasources usman (#83984)
Docs/datasources usman (#83712)

* changed tags from oss to enterprise and cloud

* added Dashboard Panel example

* swapped the all-grafana-umbrella information to the correct page

* added minor visibility improvements in steps

* made some minor adjustments

* added minor improvements

* fixed a link

* updates links

* Apply suggestions from code review

thanks for the improved suggestions. looks more better

Co-authored-by: Jack Baldry <jack.baldry@grafana.com>

* fixed links

* fixed Grafana Enterprise link

* run prettier

* fixed add a data source links

---------

Co-authored-by: Chris Moyer <chris.moyer@grafana.com>
Co-authored-by: Jack Baldry <jack.baldry@grafana.com>
(cherry picked from commit 544bff2539)

Co-authored-by: Usman Ahmad <usman.ahmad@grafana.com>
2024-03-06 08:55:21 -06:00
Dave Henderson
5bde27379c [v10.3.x] chore: bump Go to 1.21.8 (#83936)
chore: bump Go to 1.21.8 (#83927)

* chore: bump Go to 1.21.8

Signed-off-by: Dave Henderson <dave.henderson@grafana.com>

* bump workflows too

Signed-off-by: Dave Henderson <dave.henderson@grafana.com>

---------

Signed-off-by: Dave Henderson <dave.henderson@grafana.com>
(cherry picked from commit 01fb2cff62)
2024-03-05 16:49:51 -05:00
grafana-delivery-bot[bot]
93987476e7 [v10.3.x] alerting:clarify silence preview (#83837)
alerting:clarify silence preview (#83754)

* alerting:clarify silence preview

* prettier

* Update docs/sources/alerting/configure-notifications/create-silence.md

Co-authored-by: brendamuir <100768211+brendamuir@users.noreply.github.com>

* Lint docs

---------

Co-authored-by: Armand Grillet <2117580+armandgrillet@users.noreply.github.com>
Co-authored-by: brendamuir <100768211+brendamuir@users.noreply.github.com>
(cherry picked from commit 89575f1df4)

Co-authored-by: tonypowa <45235678+tonypowa@users.noreply.github.com>
2024-03-04 19:36:23 +01:00
linoman
d01813163a [v10.3.x] Chore: Improve domain validation for Google OAuth - Backport 83229 to v10.3.x (#83725)
* Chore: Query oauth info from a new instance (#83229)

* query OAuth info from a new instance

* add `hd` validation flag

* add `disable_hd_validation` to settings map

* update documentation

---------

Co-authored-by: Jo <joao.guerreiro@grafana.com>
(cherry picked from commit b02ae375ba)
2024-03-04 13:05:08 +01:00
grafana-delivery-bot[bot]
448d85cc30 [v10.3.x] Fix: Cache busting of plugins module.js file (#83790)
Fix: Cache busting of plugins module.js file (#83763)

fix(plugins): make sure extractPath regex matches with and without leading slash

(cherry picked from commit c59ebfc60f)

Co-authored-by: Jack Westbrook <jack.westbrook@gmail.com>
2024-03-01 19:00:28 +01:00
Andreas Christou
84ed083fa5 [v10.3.x] Chore: Bumping go to 1.21.6 (#83731)
Chore: Bumping go to 1.21.6 (#80709)

* Bumping go to 1.25.6

* bumping sqlite to 1.14.19

* Bumping sqlite version

(cherry picked from commit 4083d23f01)

# Conflicts:
#	.drone.yml
#	scripts/drone/variables.star

Co-authored-by: Timur Olzhabayev <timur.olzhabayev@grafana.com>
2024-03-01 13:35:56 +00:00
grafana-delivery-bot[bot]
4ca2f8bebe [v10.3.x] Dashboards: Fixes issue where panels would not refresh if time range updated while in panel view mode (#83525)
Dashboards: Fixes issue where panels would not refresh if time range updated while in panel view mode (#83418)

(cherry picked from commit a8574226bb)

Co-authored-by: kay delaney <45561153+kaydelaney@users.noreply.github.com>
2024-03-01 10:57:57 +00:00
grafana-delivery-bot[bot]
4bb2348d68 [v10.3.x] LDAP: Fix LDAP users authenticated via auth proxy not being able to use LDAP active sync (#83750)
LDAP: Fix LDAP users authenticated via auth proxy not being able to use LDAP active sync (#83715)

* fix LDAP users authenticated via auth proxy not being able to use ldap sync

* simplify id resolution at the cost of no fallthrough

* remove unused services

* remove unused cache key

(cherry picked from commit 2182cc47ac)

Co-authored-by: Jo <joao.guerreiro@grafana.com>
2024-03-01 10:52:47 +01:00
Joey
8d989735e0 Tempo: Add template variable interpolation for filters (#83213) (#83706)
* Interpolate template variables in filters

* Add tests

(cherry picked from commit 1631e41303)
2024-03-01 08:52:44 +00:00
Andreas Christou
72d03fab60 [v10.3.x] CI: Bump alpine image version (#83722)
CI: Bump `alpine` image version (#83716)

Bump image version

(cherry picked from commit c9d8d8713b)
2024-02-29 21:16:51 +02:00
grafana-delivery-bot[bot]
c5aef8fd27 [v10.3.x] Docs: fix config file info in upgrade guide (#83702)
Docs: fix config file info in upgrade guide (#83273)

* Updated incorrect custom config file names and locations

* Corrected default config file name

* Updated more config file info

* Apply suggestions from code review

Co-authored-by: Pepe Cano <825430+ppcano@users.noreply.github.com>

* Reverted change

* Fixed default config file info, added second custom file option, and added note about file locations

* Added file path for second custom option

* Apply suggestion from review

Co-authored-by: Usman Ahmad <usman.ahmad@grafana.com>

* Apply suggestion from review

Co-authored-by: Usman Ahmad <usman.ahmad@grafana.com>

* Apply suggestions from review

Co-authored-by: Usman Ahmad <usman.ahmad@grafana.com>

* Apply suggestion from review

* Add version interpolation syntax

* Updated wording

* Ran prettier

---------

Co-authored-by: Pepe Cano <825430+ppcano@users.noreply.github.com>
Co-authored-by: Usman Ahmad <usman.ahmad@grafana.com>
(cherry picked from commit e26cd8614d)

Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>
2024-02-29 14:07:06 -05:00
Jack Baldry
9897b0965c [v10.3.x] Fix typos (#83683)
* Fix typos (#83621)

Co-authored-by: Isabel Matwawana <isabel.matwawana@grafana.com>
Co-authored-by: Jack Baldry <jack.baldry@grafana.com>
(cherry picked from commit 2a429cd7db)
Signed-off-by: Jack Baldry <jack.baldry@grafana.com>

* Fixed typos

---------

Signed-off-by: Jack Baldry <jack.baldry@grafana.com>
Co-authored-by: omahs <73983677+omahs@users.noreply.github.com>
Co-authored-by: Isabel Matwawana <isabel.matwawana@grafana.com>
2024-02-29 13:40:11 -05:00
grafana-delivery-bot[bot]
5a5420ed64 [v10.3.x] Update make docs procedure (#83680)
Co-authored-by: grafanabot <bot@grafana.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-02-29 13:53:28 +02:00
grafana-delivery-bot[bot]
f63de0ba6b [v10.3.x] Loki/Elastic: Assert queryfix value to always be string (#81463)
Loki/Elastic: Assert queryfix value to always be string (#81349)

Fix `value` can be `string` or `number`

(cherry picked from commit ca5c297bfa)

Co-authored-by: Sven Grossmann <sven.grossmann@grafana.com>
2024-02-29 08:34:45 +02:00
grafana-delivery-bot[bot]
acdd78d3b0 [v10.3.x] docs: link annotation queries video to documentation (#83612)
docs: link annotation queries video to documentation (#83586)

(cherry picked from commit ba4470dd7d)

Co-authored-by: Marie Cruz <mdcruz@users.noreply.github.com>
2024-02-28 11:34:43 -05:00
grafana-delivery-bot[bot]
729204dacb [v10.3.x] Elasticsearch: Fix adhoc filters not applied in frontend mode (#83596)
Elasticsearch: Fix adhoc filters not applied in frontend mode (#83592)

(cherry picked from commit 411c89012f)

Co-authored-by: Sven Grossmann <sven.grossmann@grafana.com>
2024-02-28 15:45:09 +02:00
grafana-delivery-bot[bot]
ba4be08a3d [v10.3.x] Docs: Add missing visualizations to Grafana vizualization index page (#83553)
Docs: Add missing visualizations to Grafana vizualization index page (#83351)

Co-authored-by: Nathan Marrs <nathanielmarrs@gmail.com>
Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>
Co-authored-by: jev forsberg <jev.forsberg@grafana.com>
(cherry picked from commit e8df62941b)

Co-authored-by: Señor Performo - Leandro Melendez <54183040+srperf@users.noreply.github.com>
2024-02-27 17:17:24 -05:00
Alexander Zobnin
1409398f32 [v10.3.x] Annotations: Improve query performance when using dashboard filter (#83405)
Annotations: Improve query performance when using dashboard filter (#83112)

* Annotations: Improve query performance when using dashboard filter

* Add dashboard id filter

(cherry picked from commit e7a1ecca28)
2024-02-27 17:02:11 +01:00
grafana-delivery-bot[bot]
8d687b4796 Auth: Fix email verification bypass when using basic authentication (#83484) 2024-02-27 16:35:31 +01:00
grafana-delivery-bot[bot]
b51b4f987f [v10.3.x] Docs/grafana helm (#83428)
Docs/grafana helm (#80390)

* added the helm project

* added page metadata

* added the intro section

* fixed menuTitle

* added section i.e. Setting up the Grafana Helm repository

* added the deployment section

* finished the deploying grafana section

* completed access grafana section

* updating changes

* added persistent storage section

* added debugging section

* fixed typos

* fixed headings

* fixed numerious typos

* Apply suggestions from code review

looks good now !!

Co-authored-by: Christopher Moyer <35463610+chri2547@users.noreply.github.com>

* Apply suggestions from code review

Thanks for the changes. It looks much better now

Co-authored-by: Christopher Moyer <35463610+chri2547@users.noreply.github.com>

* fixed the suggested changes and fixed minor typos

* Apply suggestions from code review

thanks for the improvements. looks polished now!!

Co-authored-by: Christopher Moyer <35463610+chri2547@users.noreply.github.com>

* fixed download link

* fixed typo

* final adjustments

* corrects spelling

* makes prettier

---------

Co-authored-by: Christopher Moyer <35463610+chri2547@users.noreply.github.com>
Co-authored-by: Chris Moyer <chris.moyer@grafana.com>
(cherry picked from commit 9f88a88303)

Co-authored-by: Usman Ahmad <usman.ahmad@grafana.com>
2024-02-26 11:39:53 -06:00
grafana-delivery-bot[bot]
7af760e6d6 [v10.3.x] remove oss from security config docs (#83325)
remove oss from security config docs (#82936)

(cherry picked from commit 92fa868a77)

Co-authored-by: Kristina <kristina.durivage@grafana.com>
2024-02-23 11:07:43 -06:00
grafana-delivery-bot[bot]
876891b266 [v10.3.x] AuthProxy: Invalidate previous cached item for user when changes are made to any header (#83203)
AuthProxy: Invalidate previous cached item for user when changes are made to any header (#81445)

* fix: sign in using auth_proxy with role a -> b -> a would end up with role b

* Update pkg/services/authn/clients/proxy.go

Co-authored-by: Karl Persson <kalle.persson92@gmail.com>

* Update pkg/services/authn/clients/proxy.go

Co-authored-by: Karl Persson <kalle.persson92@gmail.com>
(cherry picked from commit 9282c7a7a4)

Co-authored-by: Klesh Wong <klesh@qq.com>
2024-02-23 10:33:30 +01:00
grafana-delivery-bot[bot]
44455f0474 [v10.3.x] Docs: update import troubleshoot dashboards links (#83244)
Docs: update import troubleshoot dashboards links (#83124)

* Updated links to former manage dashboards content

* Removed links to manage dashboards and added export content to Sharing page

* Replaced grafana links with cloud docs links

* Removed trailing slash from link

* trigger CI

---------

Co-authored-by: Jack Baldry <jack.baldry@grafana.com>
(cherry picked from commit 5f41cc632e)

Co-authored-by: Isabel <76437239+imatwawana@users.noreply.github.com>
2024-02-22 09:46:44 -05:00
grafana-delivery-bot[bot]
03ae322bee [v10.3.x] OAuth: Improve domain validation (#83177)
OAuth: Improve domain validation (#83110)

* enforce hd claim validation

* add tests

(cherry picked from commit 7e8b679237)

Co-authored-by: linoman <2051016+linoman@users.noreply.github.com>
2024-02-21 16:41:56 +01:00
brendamuir
a2420cf050 Alerting docs: Fix migrating alert links (#83141) (#83148)
* Alerting docs: fixes migrating links

* Fixes underscores and stars

* Corrects numbering

* ran prettier

* Fix links

Signed-off-by: Jack Baldry <jack.baldry@grafana.com>

* Update docs/sources/alerting/set-up/migrating-alerts/_index.md

Co-authored-by: Jack Baldry <jack.baldry@grafana.com>

---------

Signed-off-by: Jack Baldry <jack.baldry@grafana.com>
Co-authored-by: Jack Baldry <jack.baldry@grafana.com>
(cherry picked from commit 4720c99bd5)
2024-02-21 11:31:14 +01:00
grafana-delivery-bot[bot]
bc11bd41a9 [v10.3.x] Alerting docs: fixes oncall broken links (#83142)
Alerting docs: fixes oncall broken links (#83139)

(cherry picked from commit 4b2ef36165)

Co-authored-by: brendamuir <100768211+brendamuir@users.noreply.github.com>
2024-02-21 10:42:27 +02:00
grafana-delivery-bot[bot]
abff02cfce [v10.3.x] Docs: add information about filtering for annotations (#83105)
Docs: add information about filtering for annotations (#82957)

* Added information about filtering for annotations

* Update generate-transformations.ts

(cherry picked from commit f18b9ddac6)

Co-authored-by: Isabel <76437239+imatwawana@users.noreply.github.com>
2024-02-20 09:06:59 -05:00
grafana-delivery-bot[bot]
c2a2ee734a [v10.3.x] Remove duplicate paragraph and wrap in note (#83055)
Co-authored-by: Jack Baldry <jack.baldry@grafana.com>
2024-02-19 13:24:52 +02:00
grafana-delivery-bot[bot]
fe93eebcd3 [v10.3.x] Update make docs procedure (#83052)
Co-authored-by: grafanabot <bot@grafana.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-02-19 11:22:08 +00:00
grafana-delivery-bot[bot]
b9d58cc277 [v10.3.x] Area Build/Packaging: release process - remove image check for armhf rpm no longer being built (#82561)
Area Build/Packaging: release process - remove image check for armhf rpm no longer being built (#82406)

remove image check for armhf rpm no longer being built

(cherry picked from commit 4aabfb7835)

Co-authored-by: Brian Gann <briangann@users.noreply.github.com>
2024-02-16 19:51:41 -05:00
grafana-delivery-bot[bot]
cbceafc328 [v10.3.x] docs: angular plugins list rewrite (#82930)
docs: angular plugins list rewrite (#82456)

(cherry picked from commit 538617bb00)

Co-authored-by: David Harris <david.harris@grafana.com>
2024-02-16 19:02:56 +00:00
grafana-delivery-bot[bot]
a9286551ff [v10.3.x] Add video to variables _index.md (#82939)
Add video to variables _index.md (#82926)

Added the YouTube link to the video created explaining Variables.

(cherry picked from commit 0a9389c8f7)

Co-authored-by: Señor Performo - Leandro Melendez <54183040+srperf@users.noreply.github.com>
2024-02-16 13:36:58 -05:00
kay delaney
866eb7757f [v10.3.x] LibraryPanels/RBAC: Fix issue where folder scopes weren't being correctly inherited (#82902)
LibraryPanels/RBAC: Fix issue where folder scopes weren't being correctly inherited (#82700)

(cherry picked from commit 82e3e2e558)
2024-02-16 14:59:11 +00:00
grafana-delivery-bot[bot]
2e9be4bf1a [v10.3.x] TeamSync: Fix auth proxy docs on teamsync (#82877)
TeamSync: Fix auth proxy docs on teamsync (#82457)

fix auth proxy docs on teamsync

(cherry picked from commit 901e1b1865)

Co-authored-by: Jo <joao.guerreiro@grafana.com>
2024-02-16 09:44:51 +01:00
Dimitris Sotirakis
65dba4e83b [v10.3.x] Chore: Remove grafana-delivery references (#82537)
Chore: Remove `grafana-delivery` references (#82505)

* s/grafana-delivery/grafana-release-guild/g

* Remove -squad suffix

(cherry picked from commit a6bc262093)
2024-02-16 09:07:17 +01:00
grafana-delivery-bot[bot]
6537218eae [v10.3.x] Adding "Exploring logs, metrics, and traces with Grafana" video to docs (#82731)
Adding "Exploring logs, metrics, and traces with Grafana" video to docs (#82724)

(cherry picked from commit 80f324fadb)

Co-authored-by: Lisa <60980933+LisaHJung@users.noreply.github.com>
2024-02-15 10:41:18 -08:00
grafana-delivery-bot[bot]
84d9293ac0 [v10.3.x] Adding Grafana for Beginners video to doc (#82713)
Adding Grafana for Beginners video to doc (#82710)

(cherry picked from commit 8e7c9f6587)

Co-authored-by: Lisa <60980933+LisaHJung@users.noreply.github.com>
2024-02-15 10:17:59 -08:00
grafana-delivery-bot[bot]
f173b382ee [v10.3.x] Add PagerDuty to the plugins list (#82438)
Add PagerDuty to the plugins list (#82419)

(cherry picked from commit 4cbc7dfb5b)

Co-authored-by: Andriy <andriy.urbanas@grafana.com>
2024-02-14 18:19:14 +01:00
grafana-delivery-bot[bot]
887bda4c94 [v10.3.x] Docs: Add copy dashboard instructions (#82445)
Docs: Add copy dashboard instructions (#82155)

* Update index.md

Added description of how to copy an existing dashboard

* Moved Copy dashboard task from Import to Create page and edited for style

---------

Co-authored-by: Isabel Matwawana <isabel.matwawana@grafana.com>
(cherry picked from commit 7efa8c2840)

Co-authored-by: Varsha <66315875+VarshaSBhat@users.noreply.github.com>
2024-02-14 09:38:21 -05:00
Andreas Christou
db28d71a67 [v10.3.x] Chore: Update grabpl to v3.0.50 (#82432)
Chore: Update `grabpl` to `v3.0.50` (#82379)

Bump grabpl version

(cherry picked from commit dcbc3aa46a)

# Conflicts:
#	.drone.yml
#	scripts/drone/variables.star
2024-02-14 14:29:27 +02:00
grafana-delivery-bot[bot]
9fb9ba0f52 Release: Bump version to 10.3.4 (#82402)
"Release: Updated versions in package to 10.3.4"

Co-authored-by: grafana-delivery-bot[bot] <132647405+grafana-delivery-bot[bot]@users.noreply.github.com>
2024-02-13 15:12:57 -07:00
grafana-delivery-bot[bot]
27aeb3ef53 [v10.3.x] Changelog: Updated changelog for 10.3.3 (#82400)
Changelog: Updated changelog for 10.3.3 (#82399)

Co-authored-by: grafanabot <bot@grafana.com>
(cherry picked from commit b3663eafee)

Co-authored-by: grafana-delivery-bot[bot] <132647405+grafana-delivery-bot[bot]@users.noreply.github.com>
2024-02-13 14:50:56 -07:00
grafana-delivery-bot[bot]
4aeab1fd55 [v10.3.x] Update make docs procedure (#82356)
Co-authored-by: grafanabot <bot@grafana.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-02-13 09:50:27 +00:00
grafana-delivery-bot[bot]
f648781497 [v10.3.x] Alerting docs: update <GRAFANA VERSION> to <GRAFANA_VERSION> (#82350)
Co-authored-by: Pepe Cano <825430+ppcano@users.noreply.github.com>
2024-02-13 09:30:22 +00:00
Kim Nylander
83c8c96b31 [v10.3.x] [DOC] Update Pyroscope data source (#82320)
[DOC] Update Pyroscope data source (#82130)

Co-authored-by: Jack Baldry <jack.baldry@grafana.com>
(cherry picked from commit 815e61258c)
2024-02-12 17:20:22 +02:00
Pepe Cano
a03495567c Alerting docs: Provision alerting resources updates (#82221) (#82300)
* Alert provisioning: initial restructuring

* Fix products labels

* Restructure `Import and export Grafana Alerting resources`

* Change URL to `export-alerting-resources`

* Complete `Export alerting resources`

* Export alerting resources

* Update `configuration files` provisioning

* Terraform Provisioning

* Change to `Provision/Import/Export` terms and some notes

* Replace `config` to `configuration`

* Set (menu)Title `Export alerting resources`

* Minor change on note about `Export Alerting endpoints`

* Fix `doc-validator` issues

* Fix grammar

* Update docs/sources/alerting/set-up/provision-alerting-resources/terraform-provisioning/index.md

Co-authored-by: brendamuir <100768211+brendamuir@users.noreply.github.com>

* Update docs/sources/alerting/set-up/provision-alerting-resources/terraform-provisioning/index.md

Co-authored-by: brendamuir <100768211+brendamuir@users.noreply.github.com>

* Fix numbered lists and `Note:` without admonition

* Convert text-based notes (`Note:`) to `admonition` blocks

* Replace text-based `Note:` with adminitions

* Remove `file-provisioning` grafana-cloud links

* Update `Export alerting resources` intro

* nitpicky format order

---------

Co-authored-by: brendamuir <100768211+brendamuir@users.noreply.github.com>
(cherry picked from commit 9c92329bee)
2024-02-12 11:26:56 +01:00
Matthew Jacobson
bd144b53d6 [v10.3.x] Alerting: Update legacy migration docs to include Upgrade Preview (#82039)
Alerting: Update legacy migration docs to include Upgrade Preview (#80628)

* Alerting: Update legacy migration docs to include Upgrade Preview

(cherry picked from commit 2607528b52)
2024-02-09 10:14:13 -05:00
grafana-delivery-bot[bot]
6d54337286 [v10.3.x] LibraryPanels: Fix issue with repeated library panels (#82259)
LibraryPanels: Fix issue with repeated library panels (#82255)

Fixes an issue where a library panel being repeated by a
template variable would briefly use the All value for the first
repeat instance

(cherry picked from commit 984d2da9ae)

Co-authored-by: kay delaney <45561153+kaydelaney@users.noreply.github.com>
2024-02-09 16:10:51 +02:00
grafana-delivery-bot[bot]
4898cc1dac [v10.3.x] Update RBAC role name: fixed:datasources.id:reader (#82244)
Co-authored-by: marybelvargas <107340764+marybelvargas@users.noreply.github.com>
fixed:datasources.id:reader (#82186)
2024-02-09 11:02:37 +00:00
grafana-delivery-bot[bot]
6f6607477e [v10.3.x] Docs: Update default value of rbac.permission_validation_enabled (#82240)
Co-authored-by: Misi <mgyongyosi@users.noreply.github.com>
2024-02-09 10:18:59 +00:00
grafana-delivery-bot[bot]
5d932e2cc5 [v10.3.x] Update make docs procedure (#82238)
Co-authored-by: grafanabot <bot@grafana.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-02-09 10:10:24 +00:00
grafana-delivery-bot[bot]
9881e5e4fe [v10.3.x] Doc: Custom branding is not applicable to OSS (#82164)
Doc: Custom branding is not applicable to OSS (#82082)

Custom branding is not applicable to OSS

Signed-off-by: Rao, B V Chalapathi <b_v_chalapathi.rao@nokia.com>
(cherry picked from commit 59b78cec43)

Co-authored-by: chalapat <b_v_chalapathi.rao@nokia.com>
2024-02-08 07:45:55 -06:00
grafana-delivery-bot[bot]
f5ee831350 [v10.3.x] Plugins: Don't auto prepend app sub url to plugin asset paths (#82147)
Plugins: Don't auto prepend app sub url to plugin asset paths (#81658)

* don't prepend app sub url to paths

* simplify logo path

* fix(plugins): dynamically prepend appSubUrl for System module resolving to work

* fix(sandbox): support dynamic appSuburl prepend when loading plugin module.js

* fix tests

* update test name

* fix tests

* update fe + add some tests

* refactor(plugins): move wrangleurl to utils, rename to resolveModulePath, update usage

* chore: fix a typo

* test(plugins): add missing name to utils test

* reset test flag

---------

Co-authored-by: Jack Westbrook <jack.westbrook@gmail.com>
(cherry picked from commit 99feb928cf)

Co-authored-by: Will Browne <wbrowne@users.noreply.github.com>
2024-02-08 12:55:16 +01:00
grafana-delivery-bot[bot]
a2eb053adf [v10.3.x] Add missing step (#82103)
Co-authored-by: Jack Baldry <jack.baldry@grafana.com>
2024-02-07 17:07:10 +02:00
grafana-delivery-bot[bot]
c795674299 [v10.3.x] Alerting docs: changes alerting rules to alert rules (#82055)
Alerting docs: changes alerting rules to alert rules (#82049)

* Alerting docs: changes alerting rules to alert rules

* ran prettier

(cherry picked from commit 899e06b439)

Co-authored-by: brendamuir <100768211+brendamuir@users.noreply.github.com>
2024-02-07 11:17:34 +01:00
grafana-delivery-bot[bot]
dbbf2c25ea [v10.3.x] ShareModal: Remove shareView param when creating a sharing URL (#81983)
* ShareModal: Remove shareView param when creating a sharing URL (#81976)

(cherry picked from commit eab7990349)

* fix ShareLink test

---------

Co-authored-by: Ezequiel Victorero <ezequiel.victorero@grafana.com>
2024-02-06 14:30:05 -03:00
grafana-delivery-bot[bot]
f72a60f9ab [v10.3.x] Remove X-Grafana-Device-Id from outbound requests (#81959)
Remove X-Grafana-Device-Id from outbound requests (#81957)

(cherry picked from commit cf616d5074)

Co-authored-by: Jo <joao.guerreiro@grafana.com>
2024-02-06 14:35:14 +01:00
grafana-delivery-bot[bot]
a29045adeb [v10.3.x] Docs: remove disable scaling units entry (#81954)
Docs: remove disable scaling units entry (#81917)

* Removed disable scaling units entry

* Removed QoL section

(cherry picked from commit fa30293987)

Co-authored-by: Isabel <76437239+imatwawana@users.noreply.github.com>
2024-02-06 07:27:15 -05:00
grafana-delivery-bot[bot]
e285daca88 [v10.3.x] Elasticsearch: Set middlewares from Grafana's httpClientProvider (#81929)
Elasticsearch: Set middlewares from Grafana's `httpClientProvider` (#81814)

Elasticsearch: Set middlewares from httpClientProvider
(cherry picked from commit bd48c06f95)

Co-authored-by: Sven Grossmann <sven.grossmann@grafana.com>
2024-02-06 07:38:23 +01:00
Sofia Papagiannaki
45426decd8 [v10.3.x] Folders: Fix failure to update folder in SQLite (#81862)
Folders: Fix failure to update folder in SQLite (#81795)

(cherry picked from commit ec5bc7c4ab)
2024-02-05 15:24:43 +02:00
grafana-delivery-bot[bot]
482a89b553 [v10.3.x] Docs: Restructure configure thresholds docs (#81809)
Docs: Restructure configure thresholds docs (#81519)

* Removed intro text and About thresholds heading

* Added Threshold options H2 with sub-headings and moved Default thresholds to H2

* Rearranged sections and added lorem ipsum placeholder text

* Updated heading to Add a threshold, moved delete content to after task, and reformatted task

* Replaced lorem ipsum text with TBA

* Fixing UI option names

* Docs: Edit configure thresholds page (#81520)

* Added contractions

* Added Threshold value heading and updated options information

* Rewrote task

* Added Supported visualizations section, updated links, and made general copy edits

* Copy edits

* Added screenshots for some examples

* Edited intro section

* Added table, removed note, and added note about options

* Updated table and removed bullet list

* Added table of threshold examples, other copy edits

* Applied suggestions from review

* Fixed deprecation note

* Updated deprecation note

* Replaced local images with uploaded images

* Fixed deprecation note

(cherry picked from commit 5d7ed2319f)

Co-authored-by: Isabel <76437239+imatwawana@users.noreply.github.com>
2024-02-02 11:10:13 -05:00
grafana-delivery-bot[bot]
f0778dd147 [v10.3.x] Elasticsearch: Fix creating of legend so it is backward compatible with frontend produced frames (#81786)
Elasticsearch: Fix creating of legend so it is backward compatible with frontend produced frames (#81708)

* Elasticsearch: Fix creating of legend so it is backward compatible with frontend produced frames

* Update tests

(cherry picked from commit f2936d6695)

Co-authored-by: Ivana Huckova <30407135+ivanahuckova@users.noreply.github.com>
2024-02-02 14:00:39 +02:00
grafana-delivery-bot[bot]
069704b39a [v10.3.x] Alerting docs: rename provisioning files (#81729)
Alerting docs: rename provisioning files (#81722)

(cherry picked from commit 95f90127ad)

Co-authored-by: brendamuir <100768211+brendamuir@users.noreply.github.com>
2024-02-02 10:06:10 +02:00
grafana-delivery-bot[bot]
5c10afaf63 [v10.3.x] Docs: add missing supported visualizations (#81754)
Docs: add missing supported visualizations (#81668)

* Added Supported visualizations sections and missing settings for value mappings

* Updated supported visualizations table and added docs ref links

* Updated supported visualizations table

* Removed placeholder headings and accidentally added section to data links page

* Added missing visualization

(cherry picked from commit 10bde9ce9c)

Co-authored-by: Isabel <76437239+imatwawana@users.noreply.github.com>
2024-02-01 19:28:58 -05:00
grafana-delivery-bot[bot]
c0049dcbd6 [v10.3.x] Fix typos (#81737)
Fix typos (#81270)

(cherry picked from commit 021aca256c)

Co-authored-by: lean.dev <34773040+leandro-deveikis@users.noreply.github.com>
2024-02-01 20:29:57 +02:00
Ivan Ortega Alba
be850d677a [v10.3.x] ShareModal: Fixes url sync issue that caused issue with save drawer (#81721)
ShareModal: Fixes url sync issue that caused issue with save drawer (#81706)

(cherry picked from commit 7c2622a4f1)

Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
2024-02-01 16:45:13 +01:00
grafana-delivery-bot[bot]
c03a7b9806 [v10.3.x] Alerting docs: corrects save text (#81703)
Alerting docs: corrects save text (#81700)

* Alerting docs: corrects save text

* updates numbering

(cherry picked from commit bac4c7fb32)

Co-authored-by: brendamuir <100768211+brendamuir@users.noreply.github.com>
2024-02-01 14:10:36 +01:00
grafana-delivery-bot[bot]
cf586a09ae [v10.3.x] Add timeout parameter to the example (#81600)
Add timeout parameter to the example (#80921)

Adding the http timeout parameter to the example to know where  is needed in the yaml configuration.

(cherry picked from commit 5c0d7749eb)

Co-authored-by: ausias-armesto <ausiasarmesto@gmail.com>
2024-01-31 07:01:13 -08:00
grafana-delivery-bot[bot]
18e510b027 [v10.3.x] Update Trace to Logs docs in configure-tempo-data-source.md (#81598)
Update Trace to Logs docs in configure-tempo-data-source.md (#79913)

* Update configure-tempo-data-source.md

Trace to logs documentation is unclear on a couple things. I think the context I've added will help people get things working a little easier.

* remove misunderstanding.

* Adds commas

Co-authored-by: Kim Nylander <104772500+knylander-grafana@users.noreply.github.com>

---------

Co-authored-by: Kim Nylander <104772500+knylander-grafana@users.noreply.github.com>
(cherry picked from commit df59f01cc3)

Co-authored-by: Angelo Manos <angelo@angelomanos.com>
2024-01-30 13:00:35 -08:00
Isabel
5ff228aeb6 [v10.3.x] Docs: restructure manage dashboards page (#81587)
Docs: restructure manage dashboards page (#81311)

* Added import and troubleshoot dashboards pages

* Moved import dashboards to build dashboards folder

* Updated import dashboards content

* Updated manage dashboards page

* Updated troublshooting dashboards page

* Finalized text for Import dashboards and moved orphaned content to Sharing page

* Made general copy edits to Troubleshooting dashboards

* Moved More examples heading and content from Troubleshooting to Import

* General copy edits to Troubleshooting

* Fixed broken links and made small copy edits

* Fixed broken link

* Removed note and replaced with plain text description of Dashboards page

Added to do for clarifying display of Shared with me section

* Deleted orphaned export content; to be rolled in later

* Copy edits

* Updated Shared with me section

* Copy edits

* Apply suggestions from code review

Co-authored-by: Jack Baldry <jack.baldry@grafana.com>

---------

Co-authored-by: Jack Baldry <jack.baldry@grafana.com>
(cherry picked from commit fb1368d1ef)
2024-01-30 11:57:46 -05:00
grafana-delivery-bot[bot]
557b86804e [v10.3.x] updated Grafana Open Source documentation (#81515)
updated Grafana Open Source documentation (#80357)

Added missing installation section to run Grafana on Kubernetes

(cherry picked from commit 4e6b0fd9ce)

Co-authored-by: Usman Ahmad <usman.ahmad@grafana.com>
2024-01-29 22:16:19 +02:00
grafana-delivery-bot[bot]
3d2005cd9b [v10.3.x] Field: Fix perf regression in getUniqueFieldName() (#81415)
Field: Fix perf regression in getUniqueFieldName() (#81323)

Co-authored-by: nmarrs <nathanielmarrs@gmail.com>
(cherry picked from commit 0530021396)

Co-authored-by: Leon Sorokin <leeoniya@gmail.com>
2024-01-26 16:56:57 -06:00
grafana-delivery-bot[bot]
7bdc53053b [v10.3.x] Docs: time range copy paste (#81413)
Docs: time range copy paste (#81408)

Added new entry and deleted internal enablement video notes

(cherry picked from commit 1213b66188)

Co-authored-by: Isabel <76437239+imatwawana@users.noreply.github.com>
2024-01-26 16:42:33 -05:00
grafana-delivery-bot[bot]
3377dc411c [v10.3.x] Docs: add saved dashboard guidance (#81411)
Docs: add saved dashboard guidance (#81406)

* Added saved dashboard guidance

* Ran prettier

(cherry picked from commit 42c9b582e0)

Co-authored-by: Isabel <76437239+imatwawana@users.noreply.github.com>
2024-01-26 16:30:28 -05:00
Ieva
534b23eb9d [v10.3.x] RBAC: Annotation permission migration (#81399)
RBAC: Annotation permission migration (#78899)

* add annotation permissions to dashboard managed role and add migrations for annotation permissions

* fix a bug with conditional access level definitions

* add tests

* Update pkg/services/sqlstore/migrations/accesscontrol/dashboard_permissions.go

Co-authored-by: Gabriel MABILLE <gamab@users.noreply.github.com>

* apply feedback

* add batching, fix tests and a typo

* add one more test

* undo unneeded change

* undo unwanted change

* only check the default basic permissions for non-OSS instances

* account for all wildcards and simplify the check a bit

* error handling and extra conditionals to avoid test failures

* fix a bug with admin permissions not appearing for folders

* fix the OSS check

---------

Co-authored-by: Gabriel MABILLE <gamab@users.noreply.github.com>
(cherry picked from commit 048d1e7c86)
2024-01-26 22:28:25 +02:00
grafana-delivery-bot[bot]
e6d2e4d8fe [v10.3.x] Logs: Fix toggleable filters to be applied for specified query (#81376)
Logs: Fix toggleable filters to be applied for specified query (#81368)

(cherry picked from commit 8c212a1952)

Co-authored-by: Ivana Huckova <30407135+ivanahuckova@users.noreply.github.com>
2024-01-26 16:11:13 +01:00
grafana-delivery-bot[bot]
537d7b46cf [v10.3.x] Loki: Fix label not being added to all subexpressions (#81363)
Loki: Fix label not being added to all subexpressions (#81360)

(cherry picked from commit 9c728def38)

Co-authored-by: Sven Grossmann <sven.grossmann@grafana.com>
2024-01-26 14:21:22 +01:00
grafana-delivery-bot[bot]
330d3adae2 [v10.3.x] Docs: restructure Configure value mappings page (#81305)
Docs: restructure Configure value mappings page (#80103)

* Consolidated four add mappings tasks into one

* Moved images from tasks to types of value mappings section

* Removed edit value mappings section

* Moved sentence about reordering mappings to intro section

* Docs: Add to and update Configure value mappings page (#80104)

* Added to do notes

* Updated intro text and screenshot

* More intro edits

* Updated Types of value mappings section

Replaced bullet list items with headings

Updated text and screenshots of section

* Updated Add a value mapping task

* Recast sentence to remove passive voice

* Replaced local image files with images on admin

(cherry picked from commit c696b5e1dd)

Co-authored-by: Isabel <76437239+imatwawana@users.noreply.github.com>
2024-01-25 14:43:55 -05:00
grafana-delivery-bot[bot]
3417e99a19 [v10.3.x] Docs: fix broken link (#81289)
Docs: fix broken link (#81285)

Fixed broken link

(cherry picked from commit a9731846cc)

Co-authored-by: Isabel <76437239+imatwawana@users.noreply.github.com>
2024-01-25 12:07:06 -05:00
grafana-delivery-bot[bot]
f2f9ece03a [v10.3.x] Alerting docs: recovery threshold (#81239)
Alerting docs: recovery threshold (#81069)

* Alerting docs: recovery threshold

* ran prettier

* Adds note that only available in oss

* ran prettier

(cherry picked from commit 030a68bbf7)

Co-authored-by: brendamuir <100768211+brendamuir@users.noreply.github.com>
2024-01-25 10:35:25 +01:00
grafana-delivery-bot[bot]
8abe04662b [v10.3.x] Explore: Set default time range to now-1h (#81227)
Explore: Set default time range to now-1h (#81135)

Update default time range in Explore back to now-1h

(cherry picked from commit ebe8c005ce)

Co-authored-by: Piotr Jamróz <pm.jamroz@gmail.com>
2024-01-25 09:11:00 +01:00
grafana-delivery-bot[bot]
8ce96414b0 [v10.3.x] [DOC] Fix broken link tempo data source (#81213)
[DOC] Fix broken link tempo data source (#81126)

* Fix broken link tempo data source

* Use docs/reference shortcode

* Update docs/sources/datasources/tempo/_index.md

Co-authored-by: Jack Baldry <jack.baldry@grafana.com>

---------

Co-authored-by: Jack Baldry <jack.baldry@grafana.com>
(cherry picked from commit 1d25039674)

Co-authored-by: Kim Nylander <104772500+knylander-grafana@users.noreply.github.com>
2024-01-24 16:54:52 -06:00
grafana-delivery-bot[bot]
5fcfade7f0 [v10.3.x] Update make docs procedure (#81182)
Co-authored-by: grafanabot <bot@grafana.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-01-24 17:13:35 +00:00
grafana-delivery-bot[bot]
4e69ce0830 [v10.3.x] docs: add grafana video to install grafana page (#81178)
docs: add grafana video to install grafana page (#80237)

(cherry picked from commit f3bb16c598)

Co-authored-by: Marie Cruz <mdcruz@users.noreply.github.com>
2024-01-24 16:15:31 +00:00
grafana-delivery-bot[bot]
1c8d8b35c2 [v10.3.x] Stop README being built into website (#81173)
Co-authored-by: Jack Baldry <jack.baldry@grafana.com>
2024-01-24 15:41:30 +00:00
grafana-delivery-bot[bot]
f4cf504009 [v10.3.x] Added Descope as an OAuth2 provider (#81165)
Added Descope as an OAuth2 provider (#80050)

* added Descope as an OAuth2 provider

Added docs for customers of ours that have asked us how to use Descope with Grafana. We wanted to make sure they can easily find these docs on both our website and Grafana's.

* Update docs/sources/setup-grafana/configure-security/configure-authentication/generic-oauth/index.md

Co-authored-by: Ieva <vasiljeva.ieva@gmail.com>

* Update docs/sources/setup-grafana/configure-security/configure-authentication/generic-oauth/index.md

Co-authored-by: Ieva <vasiljeva.ieva@gmail.com>

* Update docs/sources/setup-grafana/configure-security/configure-authentication/generic-oauth/index.md

Co-authored-by: lwandz13 <126723338+lwandz13@users.noreply.github.com>

* Changed note to use admonition

* Prettier

Signed-off-by: Jack Baldry <jack.baldry@grafana.com>

---------

Signed-off-by: Jack Baldry <jack.baldry@grafana.com>
Co-authored-by: Ieva <vasiljeva.ieva@gmail.com>
Co-authored-by: lwandz13 <126723338+lwandz13@users.noreply.github.com>
Co-authored-by: Jack Baldry <jack.baldry@grafana.com>
(cherry picked from commit f726ea1e52)

Co-authored-by: Kevin J Gao <32936811+gaokevin1@users.noreply.github.com>
2024-01-24 09:02:46 -06:00
grafana-delivery-bot[bot]
b6ce5e5885 [v10.3.x] Chore: Fix typo in docs workflow (#81113)
Chore: Fix typo in docs workflow (#81111)

Fix typo

(cherry picked from commit ed2647b742)

Co-authored-by: Andreas Christou <andreas.christou@grafana.com>
2024-01-23 17:02:08 +00:00
grafana-delivery-bot[bot]
403d00b0e4 Release: Bump version to 10.3.2 (#81108)
"Release: Updated versions in package to 10.3.2"

Co-authored-by: grafana-delivery-bot[bot] <132647405+grafana-delivery-bot[bot]@users.noreply.github.com>
2024-01-23 18:14:18 +02:00
grafana-delivery-bot[bot]
509313715a [v10.3.x] Changelog: Updated changelog for 10.3.1 (#81106)
Changelog: Updated changelog for 10.3.1 (#81105)

* Changelog: Updated changelog for 10.3.1

* Update 10.3.1 CHANGELOG

---------

Co-authored-by: grafanabot <bot@grafana.com>
Co-authored-by: Andreas Christou <andreas.christou@grafana.com>
(cherry picked from commit cbdbdf72e5)

Co-authored-by: grafana-delivery-bot[bot] <132647405+grafana-delivery-bot[bot]@users.noreply.github.com>
2024-01-23 16:57:12 +01:00
grafana-delivery-bot[bot]
3e6b3a69b4 [v10.3.x] Changelog: Updated changelog for 10.3.0 (#81104)
Changelog: Updated changelog for 10.3.0 (#81100)

* Changelog: Updated changelog for 10.3.0

* Add release note

---------

Co-authored-by: grafanabot <bot@grafana.com>
Co-authored-by: Andreas Christou <andreas.christou@grafana.com>
(cherry picked from commit f2e1e78b37)

Co-authored-by: grafana-delivery-bot[bot] <132647405+grafana-delivery-bot[bot]@users.noreply.github.com>
2024-01-23 17:51:30 +02:00
grafana-delivery-bot[bot]
34709d74cc [v10.3.x] Tempo TraceQl Editor update request #8382 (#81093)
Tempo TraceQl Editor update request #8382 (#80112)

* Tempo TraceQl Editor update request #8382

* Docs: Typo

* Docs: Typo 2 codespell lint

* Update docs/sources/shared/datasources/tempo-editor-traceql.md

* Update docs/sources/shared/datasources/tempo-editor-traceql.md

* Update docs/sources/shared/datasources/tempo-editor-traceql.md

---------

Co-authored-by: Eve Meelan <81647476+Eve832@users.noreply.github.com>
(cherry picked from commit c14ef43691)

Co-authored-by: Jara Suárez de Puga García <jara.suarezdepuga@grafana.com>
2024-01-23 07:07:59 -08:00
grafana-delivery-bot[bot]
ea8a2c4083 [v10.3.x] Docs: configure grafana database configuration MYSQL (#81087)
Docs: configure grafana database configuration MYSQL  (#80939)

* Docs database max_open_conn MYSQL

* Docs: suggestion max_connections

Co-authored-by: Christopher Moyer <35463610+chri2547@users.noreply.github.com>

---------

Co-authored-by: Christopher Moyer <35463610+chri2547@users.noreply.github.com>
(cherry picked from commit 8435e16215)

Co-authored-by: Jara Suárez de Puga García <jara.suarezdepuga@grafana.com>
2024-01-23 08:23:17 -06:00
grafana-delivery-bot[bot]
28cf2b300d [v10.3.x] Security: Fix vulnerability GHSA-9763-4f94-gfch (#81078)
Security: Fix vulnerability GHSA-9763-4f94-gfch (#80952)

chore: upgrade cloudfare circl dependency

Signed-off-by: Pier <53210578+pie-r@users.noreply.github.com>
(cherry picked from commit a8dec1916b)

Co-authored-by: Pier <53210578+pie-r@users.noreply.github.com>
2024-01-23 14:56:38 +01:00
grafana-delivery-bot[bot]
835744673c [v10.3.x] Alerting docs: updates eval group and provisioning topics for support (#81075)
Alerting docs: updates eval group and provisioning topics for support (#81066)

(cherry picked from commit f9486ad2ee)

Co-authored-by: brendamuir <100768211+brendamuir@users.noreply.github.com>
2024-01-23 14:28:09 +01:00
grafana-delivery-bot[bot]
0177550993 [v10.3.x] Elasticsearch: Fix URL creation and allowlist for /_mapping requests (#81057)
Elasticsearch: Fix URL creation and allowlist for `/_mapping` requests (#80970)

* Elasticsearch: Fix URL creation for mapping requests

* remove leading slash by default

* add comment for es route

* hardcode `_mapping`

* update doc

(cherry picked from commit 3d033839d7)

Co-authored-by: Sven Grossmann <sven.grossmann@grafana.com>
2024-01-23 13:15:58 +01:00
grafana-delivery-bot[bot]
b55cd1288c [v10.3.x] docs: What’s new & Upgrade guide 10.3 (#81028)
docs: What’s new & Upgrade guide 10.3 (#80399)

* initial commit for v10.3 whats new

* Added breaking changes guide and updated What's new doc

* Added 10.2.3 in frontmatter of files

* Added content from What's new in Cloud

* Added note about 10.203 and breaking changes section

* Made formatting edits

* Added 10.2.3 test note

* Replaced 10.2.3 notes with asterisks

* Added tag note

* Move reporting item out of D&V section

* Added breaking changes

* Fixed availability notes

* Moved feature from Traces to Profiles and removed Traces section

* Reordered sections

* Replaced Cloud links with OSS links and relrefs with full URLs

* Updated template

* Copy edit

* Clarified outstanding questions

* Updated data source admin permissions note

* Removed duplicate alerting items

* add InfluxDB SQL support

* Ran prettier

* Added availability, video and contributor info

* Ran prettier

* Added youtube video links

* Removed old video link

---------

Co-authored-by: nmarrs <nathanielmarrs@gmail.com>
Co-authored-by: ismail simsek <ismailsimsek09@gmail.com>
(cherry picked from commit 2a53ae637e)

Co-authored-by: Isabel <76437239+imatwawana@users.noreply.github.com>
2024-01-22 18:32:09 -05:00
grafana-delivery-bot[bot]
04b3a236f3 [v10.3.x] Docs: update per Support request (#81016)
Docs: update per Support request (#80845)

* update per support request, additional enhancements

* ran prettier

(cherry picked from commit 7375e64275)

Co-authored-by: lwandz13 <126723338+lwandz13@users.noreply.github.com>
2024-01-22 13:37:26 -06:00
Tania
c2f0203662 [v10.3.x] Nested Folders: Add back syncing of folders between folder and dashboard tbls (#81010)
Nested Folders: Add back syncing of folders between folder and dashboard tbls (#80972)

Add back syncing of folders between folder and dashboard tbls

This partially reverts commit 06d2ae3ada.

(cherry picked from commit 07aa173939)
2024-01-22 19:59:47 +01:00
Sofia Papagiannaki
b168ca8a9a [v10.3.x] Folders: Fix creating/updating a folder whose title has leading and trailing spaces (#81006)
Folders: Fix creating/updating a folder whose title has leading and trailing spaces (#80909)

* Add tests

* Folders: Fix creating folder whose title has leading and trailing spaces

* Fix folder update

* Remove redundant argument

* Fix test

(cherry picked from commit 4243079cb5)
2024-01-22 20:50:54 +02:00
grafana-delivery-bot[bot]
c57ba08e28 [v10.3.x] Docs: restructure Configure data links page (#80925)
Docs: restructure Configure data links page (#80100)

* Moved content under Data links heading to intro of page and deleted heading

* Made headings for data link variable types H3s nesting under Data link variables

* Removed unecessary update and delete data links sections

* Made old intro sentence part of new intro

* Made Add a data link section an H2

* Removed unecessary typeahead suggestions section

* Moved variables into tables and capitalized first word of descriptions

* Docs: Edit Configure data links page (#80101)

* Added content update notes

* Rewrote Add a data link section per style guidelines

* Copy edits

* Copy edits

* Copy edits

* Copy edited intro text, removed instances of e.g., and replaced OSS links with Cloud links

* Standardized the format of variables in tables

* Added images (locally) and clarified context menu behaviour

* Removed working notes

* Fixed typo

* Removed images from local and updated image pathways

(cherry picked from commit 9fc789d901)

Co-authored-by: Isabel <76437239+imatwawana@users.noreply.github.com>
2024-01-19 15:53:18 -05:00
Dimitris Sotirakis
0ec97b3878 [v10.3.x] ImagePullSecrets: Add GAR secret to image_pull_secret in .drone.yml (#80919)
`ImagePullSecrets`: Add `GAR` secret to `image_pull_secret` in `.drone.yml` (#80912)

* Add GAR secret to image_pull_secret

* Fix starlark fmt

(cherry picked from commit 65104a7efa)
2024-01-19 19:59:21 +02:00
grafana-delivery-bot[bot]
38732d474b [v10.3.x] Docs: move best practices page (#80888)
Docs: move best practices page (#80844)

Moved best practices page

(cherry picked from commit 35ade8974f)

Co-authored-by: Isabel <76437239+imatwawana@users.noreply.github.com>
2024-01-19 08:39:07 -05:00
grafana-delivery-bot[bot]
35a2b14c4b [v10.3.x] Elasticsearch: Fix showing of logs when __source is log message field (#80863)
Elasticsearch: Fix showing of logs when `__source` is log message field (#80804)

Elasticsearch: Fix showing of logs whe __source is log message field
(cherry picked from commit 759c088ac5)

Co-authored-by: Ivana Huckova <30407135+ivanahuckova@users.noreply.github.com>
2024-01-19 13:02:41 +01:00
grafana-delivery-bot[bot]
d19e5ec49f [v10.3.x] Explore: Re-enable basic e2e test for Explore (#80713)
Explore: Re-enable basic e2e test for Explore (#80617)

Re-enable basic test for Explore

(cherry picked from commit 322cd74b9c)

Co-authored-by: Piotr Jamróz <pm.jamroz@gmail.com>
2024-01-19 11:00:17 +01:00
grafana-delivery-bot[bot]
bfbe603bb2 [v10.3.x] Update make docs procedure (#80865)
Co-authored-by: grafanabot <bot@grafana.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-01-19 11:36:50 +02:00
grafana-delivery-bot[bot]
8bf3055cb6 [v10.3.x] Update _index.md (#80812)
Update _index.md (#79606)

Just suggesting a typo fix - change "an telemetry" to "a telemetry"

(cherry picked from commit 9f2775e771)

Co-authored-by: aalapk <32711124+aalapk@users.noreply.github.com>
2024-01-18 08:14:20 -06:00
grafana-delivery-bot[bot]
21e1008976 [v10.3.x] RBAC: Clean up data source permissions after data source deletion (#80723)
RBAC: Clean up data source permissions after data source deletion (#80654)

* clean up data source permissions after data source deletion

* remove a comment

(cherry picked from commit def1b05a93)

Co-authored-by: Ieva <ieva.vasiljeva@grafana.com>
2024-01-17 15:47:37 +02:00
grafana-delivery-bot[bot]
22d91ddb0b [v10.3.x] Docs: Updated anon user and dashboard access (#80687)
Docs:  Updated anon user and dashboard access (#80400)

* Clarified anon user and viewer role, style updates.

* fixed spelling error

(cherry picked from commit 00b954203d)

Co-authored-by: lwandz13 <126723338+lwandz13@users.noreply.github.com>
2024-01-16 17:24:36 -06:00
grafana-delivery-bot[bot]
570736eb23 [v10.3.x] Docs: add more time zone guidance (#80677)
Docs: add more time zone guidance (#79595)

* Created report time zone section with added guidance

* Added more information

* Updated from review suggestions

* Update docs/sources/dashboards/create-reports/index.md

Co-authored-by: Agnès Toulet <35176601+AgnesToulet@users.noreply.github.com>

* Ran prettier

---------

Co-authored-by: Agnès Toulet <35176601+AgnesToulet@users.noreply.github.com>
(cherry picked from commit f9dcc9ff90)

Co-authored-by: Isabel <76437239+imatwawana@users.noreply.github.com>
2024-01-16 17:04:47 -05:00
grafana-delivery-bot[bot]
7b06079f0d [v10.3.x] Annotations: Split cleanup into separate queries and deletes to avoid deadlocks on MySQL (#80486)
* Annotations: Split cleanup into separate queries and deletes to avoid deadlocks on MySQL (#80329)

* Split subquery when cleaning annotations

* update comment

* Raise batch size, now that we pay attention to it

* Iterate in batches

* Separate cancellable batch implementation to allow for multi-statement callbacks, add overload for single-statement use

* Use split-out utility in outer batching loop so it respects context cancellation

* guard against empty queries

* Use SQL parameters

* Use same approach for tags

* drop unused function

* Work around parameter limit on sqlite for large batches

* Bulk insert test data in DB

* Refactor test to customise test data creation

* Add test for catching SQLITE_MAX_VARIABLE_NUMBER limit

* Turn annotation cleanup test to integration tests

* lint

---------

Co-authored-by: Sofia Papagiannaki <1632407+papagian@users.noreply.github.com>
(cherry picked from commit 81c45bfe44)

* revert timing change

* remove log lines, fixed in main

* Two more log lines

---------

Co-authored-by: Alexander Weaver <weaver.alex.d@gmail.com>
2024-01-16 14:37:00 -06:00
grafana-delivery-bot[bot]
8ba22b11cf [v10.3.x] updated grafana docker video timestamp (#80663)
updated grafana docker video timestamp (#80659)

Update the documentation page:

https://grafana.com/docs/grafana/latest/setup-grafana/installation/docker/

Added the time when the actual demo starts.

(cherry picked from commit 739cba6eb9)

Co-authored-by: Usman Ahmad <usman.ahmad@grafana.com>
2024-01-16 11:36:55 -06:00
grafana-delivery-bot[bot]
b0f6404e0a [v10.3.x] Update Grafana Kubernetes installation page (#80650)
Update Grafana Kubernetes installation page (#80569)

Removed the Vimeo and added the YouTube link after an internal discussion with the team.

(cherry picked from commit 0f093c1463)

Co-authored-by: Usman Ahmad <usman.ahmad@grafana.com>
2024-01-16 10:58:29 -06:00
grafana-delivery-bot[bot]
6870f2381e [v10.3.x] Release: Deprecate latest.json and replace with api call to grafana.com (#80602)
Release: Deprecate latest.json and replace with api call to grafana.com (#80537)

* remove latest.json and replace with api call to grafana.com

* remove latest.json

* Revert "remove latest.json"

This reverts commit bcff43d898.

* Revert "remove latest.json and replace with api call to grafana.com"

This reverts commit 02b867d84e.

* add deprecation message to latest.json

(cherry picked from commit 127decee1e)

Co-authored-by: Ashley Harrison <ashley.harrison@grafana.com>
2024-01-16 12:09:22 +00:00
Ashley Harrison
7c2e5376c8 [v10.3.x] NestedFolderPicker: separate toggle to force enable picker without (#80549)
* NestedFolderPicker: separate toggle to force enable picker without `nestedFolders` (#80461)

* separate nestedFolderPickerOverride toggle to force enable it without nestedFolders

* let's call it newFolderPicker

* update unit tests and keyboard handling

* reduce spacing when no folder open chevron

---------

Co-authored-by: Josh Hunt <joshhunt@users.noreply.github.com>
(cherry picked from commit ec53487c99)

* add config import to NestedFolderPicker
2024-01-16 11:39:22 +00:00
grafana-delivery-bot[bot]
4ba9afa45f [v10.3.x] Auth: Use cfg.Raw in OAuthStrategy for loading settings (#80441)
Auth: Use cfg.Raw in OAuthStrategy for loading settings (#80136)

Use cfg.Raw in OAuthStrategy, remove unnecessary tests

(cherry picked from commit eae6adf002)

Co-authored-by: Misi <mgyongyosi@users.noreply.github.com>
2024-01-12 14:35:02 +01:00
grafana-delivery-bot[bot]
be211fbccb [v10.3.x] Loki: Fix bug duplicating parsed labels across multiple log lines (#80423)
Loki: Fix bug duplicating parsed labels across multiple log lines (#80292)

(cherry picked from commit e1aa8a95d9)

Co-authored-by: Sven Grossmann <sven.grossmann@grafana.com>
2024-01-12 12:19:24 +02:00
10923 changed files with 323337 additions and 642600 deletions

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -5,13 +5,11 @@ import path from 'path';
import { glob } from 'glob';
// Why are we ignoring these?
// They're all deprecated/being removed so doesn't make sense to fix types
// They're all deprecated/being removed soon so doesn't make sense to fix types
const eslintPathsToIgnore = [
'packages/grafana-ui/src/graveyard', // will be removed alongside angular in Grafana 12
'public/app/angular', // will be removed in Grafana 12
'public/app/plugins/panel/graph', // will be removed alongside angular in Grafana 12
'public/app/plugins/panel/table-old', // will be removed alongside angular in Grafana 12
'e2e/test-plugins',
'packages/grafana-e2e', // deprecated.
'public/app/angular', // will be removed in Grafana 11
'public/app/plugins/panel/graph', // will be removed alongside angular
];
// Avoid using functions that report the position of the issues, as this causes a lot of merge conflicts
@@ -22,9 +20,10 @@ export default {
.exclude(new RegExp(eslintPathsToIgnore.join('|'))),
'no undocumented stories': () => countUndocumentedStories().include('**/!(*.internal).story.tsx'),
'no gf-form usage': () =>
regexp(/gf-form/gm, 'gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.')
.include('**/*.{ts,tsx,html}')
.exclude(new RegExp('packages/grafana-ui/src/themes/GlobalStyles')),
regexp(
/gf-form/gm,
'gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.'
).include('**/*.{ts,tsx,html}'),
};
function countUndocumentedStories() {
@@ -32,16 +31,9 @@ function countUndocumentedStories() {
await Promise.all(
filePaths.map(async (filePath) => {
// look for .mdx import in the story file
const mdxImportRegex = new RegExp("^import.*\\.mdx';$", 'gm');
// Looks for the "autodocs" string in the file
const autodocsStringRegex = /autodocs/;
const regex = new RegExp("^import.*.mdx';$", 'gm');
const fileText = await fs.readFile(filePath, 'utf8');
const hasMdxImport = mdxImportRegex.test(fileText);
const hasAutodocsString = autodocsStringRegex.test(fileText);
// If both .mdx import and autodocs string are missing, add an issue
if (!hasMdxImport && !hasAutodocsString) {
if (!regex.test(fileText)) {
// In this case the file contents don't matter:
const file = fileTestResult.addFile(filePath, '');
// Add the issue to the first character of the file:
@@ -76,87 +68,68 @@ function regexp(pattern: RegExp, issueMessage: string) {
function countEslintErrors() {
return new BettererFileTest(async (filePaths, fileTestResult, resolver) => {
// Just bail early if there's no files to test. Prevents trying to get the base config from failing
if (filePaths.length === 0) {
return;
}
const { baseDirectory } = resolver;
const cli = new ESLint({ cwd: baseDirectory });
// Get the base config to set up parsing etc correctly
// this is by far the slowest part of this code. It takes eslint about 2 seconds just to find the config
const baseConfig = await cli.calculateConfigForFile(filePaths[0]);
const eslintConfigFiles = await glob('**/.eslintrc');
const eslintConfigMainPaths = eslintConfigFiles.map((file) => path.resolve(path.dirname(file)));
const baseRules: Partial<Linter.RulesRecord> = {
'@emotion/syntax-preference': [2, 'object'],
'@typescript-eslint/no-explicit-any': 'error',
'@grafana/no-aria-label-selectors': 'error',
'no-restricted-imports': [
'error',
{
patterns: [
{
group: ['@grafana/ui*', '*/Layout/*'],
importNames: ['Layout', 'HorizontalGroup', 'VerticalGroup'],
message: 'Use Stack component instead.',
},
],
},
],
};
const config: Linter.Config = {
...baseConfig,
rules: baseRules,
// Be careful when specifying overrides for the same rules as in baseRules - it will... override
// the same rule, not merge them with different configurations
overrides: [
{
files: ['**/*.{ts,tsx}'],
excludedFiles: ['*.{test,spec}.{ts,tsx}', '**/__mocks__/**', '**/public/test/**'],
rules: {
'@typescript-eslint/consistent-type-assertions': ['error', { assertionStyle: 'never' }],
},
},
{
files: ['public/app/**/*.{ts,tsx}'],
rules: {
'no-barrel-files/no-barrel-files': 'error',
},
},
{
files: ['public/**/*.tsx', 'packages/grafana-ui/**/*.tsx'],
excludedFiles: [
'public/app/plugins/**',
'*.story.tsx',
'*.{test,spec}.{ts,tsx}',
'**/__mocks__/**',
'public/test/**',
],
rules: {
'@grafana/no-untranslated-strings': 'error',
},
},
],
const nonTestFilesRules: Partial<Linter.RulesRecord> = {
...baseRules,
'@typescript-eslint/consistent-type-assertions': ['error', { assertionStyle: 'never' }],
};
const runner = new ESLint({
baseConfig: config,
useEslintrc: false,
cwd: baseDirectory,
});
// group files by eslint config file
// this will create two file groups for each eslint config file
// one for test files and one for non-test files
const fileGroups: Record<string, string[]> = {};
const lintResults = await runner.lintFiles(Array.from(filePaths));
lintResults
.filter((lintResult) => lintResult.source)
.forEach(({ messages, filePath }) => {
const file = fileTestResult.addFile(filePath, '');
messages.forEach((message, index) => {
file.addIssue(0, 0, message.message, `${index}`);
});
for (const filePath of filePaths) {
let configPath = eslintConfigMainPaths.find((configPath) => filePath.startsWith(configPath)) ?? '';
const isTestFile =
filePath.endsWith('.test.tsx') ||
filePath.endsWith('.test.ts') ||
filePath.includes('__mocks__') ||
filePath.includes('public/test/');
if (isTestFile) {
configPath += '-test';
}
if (!fileGroups[configPath]) {
fileGroups[configPath] = [];
}
fileGroups[configPath].push(filePath);
}
for (const configPath of Object.keys(fileGroups)) {
const rules = configPath.endsWith('-test') ? baseRules : nonTestFilesRules;
// this is by far the slowest part of this code. It takes eslint about 2 seconds just to find the config
const linterOptions = (await cli.calculateConfigForFile(fileGroups[configPath][0])) as Linter.Config;
const runner = new ESLint({
baseConfig: {
...linterOptions,
rules: rules,
},
useEslintrc: false,
cwd: baseDirectory,
});
const lintResults = await runner.lintFiles(fileGroups[configPath]);
lintResults
.filter((lintResult) => lintResult.source)
.forEach((lintResult) => {
const { messages } = lintResult;
const filePath = lintResult.filePath;
const file = fileTestResult.addFile(filePath, '');
messages.forEach((message, index) => {
file.addIssue(0, 0, message.message, `${index}`);
});
});
}
});
}

View File

@@ -1,8 +1,13 @@
# Auto generated binary variables helper managed by https://github.com/bwplotka/bingo v0.9. DO NOT EDIT.
# Auto generated binary variables helper managed by https://github.com/bwplotka/bingo v0.8. DO NOT EDIT.
# All tools are designed to be build inside $GOBIN.
BINGO_DIR := $(dir $(lastword $(MAKEFILE_LIST)))
GOPATH ?= $(shell go env GOPATH)
GOBIN ?= $(firstword $(subst :, ,${GOPATH}))/bin
ifeq ($(OS),Windows_NT)
PATHSEP := $(if $(COMSPEC),;,:)
GOBIN ?= $(firstword $(subst $(PATHSEP), ,$(subst \,/,${GOPATH})))/bin
else
GOBIN ?= $(firstword $(subst :, ,${GOPATH}))/bin
endif
GO ?= $(shell which go)
# Below generated variables ensure that every time a tool under each variable is invoked, the correct version
@@ -35,11 +40,11 @@ $(DRONE): $(BINGO_DIR)/drone.mod
@echo "(re)installing $(GOBIN)/drone-v1.5.0"
@cd $(BINGO_DIR) && GOWORK=off CGO_ENABLED=0 $(GO) build -mod=mod -modfile=drone.mod -o=$(GOBIN)/drone-v1.5.0 "github.com/drone/drone-cli/drone"
GOLANGCI_LINT := $(GOBIN)/golangci-lint-v1.60.1
GOLANGCI_LINT := $(GOBIN)/golangci-lint-v1.53.3
$(GOLANGCI_LINT): $(BINGO_DIR)/golangci-lint.mod
@# Install binary/ries using Go 1.14+ build command. This is using bwplotka/bingo-controlled, separate go module with pinned dependencies.
@echo "(re)installing $(GOBIN)/golangci-lint-v1.60.1"
@cd $(BINGO_DIR) && GOWORK=off $(GO) build -mod=mod -modfile=golangci-lint.mod -o=$(GOBIN)/golangci-lint-v1.60.1 "github.com/golangci/golangci-lint/cmd/golangci-lint"
@echo "(re)installing $(GOBIN)/golangci-lint-v1.53.3"
@cd $(BINGO_DIR) && GOWORK=off $(GO) build -mod=mod -modfile=golangci-lint.mod -o=$(GOBIN)/golangci-lint-v1.53.3 "github.com/golangci/golangci-lint/cmd/golangci-lint"
JB := $(GOBIN)/jb-v0.5.1
$(JB): $(BINGO_DIR)/jb.mod
@@ -53,9 +58,15 @@ $(LEFTHOOK): $(BINGO_DIR)/lefthook.mod
@echo "(re)installing $(GOBIN)/lefthook-v1.4.8"
@cd $(BINGO_DIR) && GOWORK=off $(GO) build -mod=mod -modfile=lefthook.mod -o=$(GOBIN)/lefthook-v1.4.8 "github.com/evilmartians/lefthook"
SWAGGER := $(GOBIN)/swagger-v0.30.6-0.20240310114303-db51e79a0e37
SWAGGER := $(GOBIN)/swagger-v0.30.2
$(SWAGGER): $(BINGO_DIR)/swagger.mod
@# Install binary/ries using Go 1.14+ build command. This is using bwplotka/bingo-controlled, separate go module with pinned dependencies.
@echo "(re)installing $(GOBIN)/swagger-v0.30.6-0.20240310114303-db51e79a0e37"
@cd $(BINGO_DIR) && GOWORK=off $(GO) build -mod=mod -modfile=swagger.mod -o=$(GOBIN)/swagger-v0.30.6-0.20240310114303-db51e79a0e37 "github.com/go-swagger/go-swagger/cmd/swagger"
@echo "(re)installing $(GOBIN)/swagger-v0.30.2"
@cd $(BINGO_DIR) && GOWORK=off $(GO) build -mod=mod -modfile=swagger.mod -o=$(GOBIN)/swagger-v0.30.2 "github.com/go-swagger/go-swagger/cmd/swagger"
WIRE := $(GOBIN)/wire-v0.5.0
$(WIRE): $(BINGO_DIR)/wire.mod
@# Install binary/ries using Go 1.14+ build command. This is using bwplotka/bingo-controlled, separate go module with pinned dependencies.
@echo "(re)installing $(GOBIN)/wire-v0.5.0"
@cd $(BINGO_DIR) && GOWORK=off $(GO) build -mod=mod -modfile=wire.mod -o=$(GOBIN)/wire-v0.5.0 "github.com/google/wire/cmd/wire"

View File

@@ -1,7 +1,5 @@
module _ // Auto generated by https://github.com/bwplotka/bingo. DO NOT EDIT
go 1.22.1
go 1.20
toolchain go1.23.0
require github.com/golangci/golangci-lint v1.60.1 // cmd/golangci-lint
require github.com/golangci/golangci-lint v1.53.3 // cmd/golangci-lint

File diff suppressed because it is too large Load Diff

View File

@@ -2,4 +2,4 @@ module _ // Auto generated by https://github.com/bwplotka/bingo. DO NOT EDIT
go 1.18
require github.com/go-swagger/go-swagger v0.30.6-0.20240310114303-db51e79a0e37 // cmd/swagger
require github.com/go-swagger/go-swagger v0.30.2 // cmd/swagger

View File

@@ -42,13 +42,8 @@ github.com/Masterminds/goutils v1.1.1 h1:5nUrii3FMTL5diU80unEVvNevw1nH4+ZV4DSLVJ
github.com/Masterminds/goutils v1.1.1/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU=
github.com/Masterminds/semver/v3 v3.1.1 h1:hLg3sBzpNErnxhQtUy/mmLR2I9foDujNK030IGemrRc=
github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs=
github.com/Masterminds/semver/v3 v3.2.0/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ=
github.com/Masterminds/semver/v3 v3.2.1 h1:RN9w6+7QoMeJVGyfmbcgs28Br8cvmnucEXnY0rYXWg0=
github.com/Masterminds/semver/v3 v3.2.1/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ=
github.com/Masterminds/sprig/v3 v3.2.2 h1:17jRggJu518dr3QaafizSXOjKYp94wKfABxUmyxvxX8=
github.com/Masterminds/sprig/v3 v3.2.2/go.mod h1:UoaO7Yp8KlPnJIYWTFkMaqPUYKTfGFPhxNuwnnxkKlk=
github.com/Masterminds/sprig/v3 v3.2.3 h1:eL2fZNezLomi0uOLqjQoN6BfsDD+fyLtgbJMAj9n6YA=
github.com/Masterminds/sprig/v3 v3.2.3/go.mod h1:rXcFaZ2zZbLRJv/xSysmlgIM1u11eBaRMhvYXJNkGuM=
github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI=
github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M=
@@ -56,8 +51,6 @@ github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdko
github.com/asaskevich/govalidator v0.0.0-20200907205600-7a23bdc65eef/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw=
github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d h1:Byv0BzEl3/e6D5CLfI0j/7hiIEtvGVFPCZ7Ei2oq8iQ=
github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw=
github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 h1:DklsrG3dyBCFEj5IhUbnKptjxatkF07cF2ak3yi77so=
github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
@@ -80,13 +73,9 @@ github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSw
github.com/felixge/httpsnoop v1.0.2 h1:+nS9g82KMXccJ/wp0zyRW9ZBHFETmMGtkk+2CTTrW4o=
github.com/felixge/httpsnoop v1.0.3 h1:s/nj+GCswXYzN5v2DpNMuMQYe+0DDwt5WVCU6CWBdXk=
github.com/felixge/httpsnoop v1.0.3/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
github.com/fsnotify/fsnotify v1.5.1 h1:mZcQUHVQUQWoPXXtuf9yuEXKudkV2sx1E06UadKWpgI=
github.com/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwVZI=
github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU=
github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=
github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
@@ -94,71 +83,49 @@ github.com/go-openapi/analysis v0.21.2 h1:hXFrOYFHUAMQdu6zwAiKKJHJQ8kqZs1ux/ru1P
github.com/go-openapi/analysis v0.21.2/go.mod h1:HZwRk4RRisyG8vx2Oe6aqeSQcoxRp47Xkp3+K6q+LdY=
github.com/go-openapi/analysis v0.21.4 h1:ZDFLvSNxpDaomuCueM0BlSXxpANBlFYiBvr+GXrvIHc=
github.com/go-openapi/analysis v0.21.4/go.mod h1:4zQ35W4neeZTqh3ol0rv/O8JBbka9QyAgQRPp9y3pfo=
github.com/go-openapi/analysis v0.23.0 h1:aGday7OWupfMs+LbmLZG4k0MYXIANxcuBTYUC03zFCU=
github.com/go-openapi/analysis v0.23.0/go.mod h1:9mz9ZWaSlV8TvjQHLl2mUW2PbZtemkE8yA5v22ohupo=
github.com/go-openapi/errors v0.19.8/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M=
github.com/go-openapi/errors v0.19.9/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M=
github.com/go-openapi/errors v0.20.2 h1:dxy7PGTqEh94zj2E3h1cUmQQWiM1+aeCROfAr02EmK8=
github.com/go-openapi/errors v0.20.2/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M=
github.com/go-openapi/errors v0.20.3 h1:rz6kiC84sqNQoqrtulzaL/VERgkoCyB6WdEkc2ujzUc=
github.com/go-openapi/errors v0.20.3/go.mod h1:Z3FlZ4I8jEGxjUK+bugx3on2mIAk4txuAOhlsB1FSgk=
github.com/go-openapi/errors v0.22.0 h1:c4xY/OLxUBSTiepAg3j/MHuAv5mJhnf53LLMWFB+u/w=
github.com/go-openapi/errors v0.22.0/go.mod h1:J3DmZScxCDufmIMsdOuDHxJbdOGC0xtUynjIx092vXE=
github.com/go-openapi/inflect v0.19.0 h1:9jCH9scKIbHeV9m12SmPilScz6krDxKRasNNSNPXu/4=
github.com/go-openapi/inflect v0.19.0/go.mod h1:lHpZVlpIQqLyKwJ4N+YSc9hchQy/i12fJykb83CRBH4=
github.com/go-openapi/inflect v0.21.0 h1:FoBjBTQEcbg2cJUWX6uwL9OyIW8eqc9k4KhN4lfbeYk=
github.com/go-openapi/inflect v0.21.0/go.mod h1:INezMuUu7SJQc2AyR3WO0DqqYUJSj8Kb4hBd7WtjlAw=
github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg=
github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY=
github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg=
github.com/go-openapi/jsonpointer v0.21.0 h1:YgdVicSA9vH5RiHs9TZW5oyafXZFc6+2Vc1rr/O9oNQ=
github.com/go-openapi/jsonpointer v0.21.0/go.mod h1:IUyH9l/+uyhIYQ/PXVA41Rexl+kOkAPDdXEYns6fzUY=
github.com/go-openapi/jsonreference v0.19.6 h1:UBIxjkht+AWIgYzCDSv2GN+E/togfwXUJFRTWhl2Jjs=
github.com/go-openapi/jsonreference v0.19.6/go.mod h1:diGHMEHg2IqXZGKxqyvWdfWU/aim5Dprw5bqpKkTvns=
github.com/go-openapi/jsonreference v0.20.0 h1:MYlu0sBgChmCfJxxUKZ8g1cPWFOB37YSZqewK7OKeyA=
github.com/go-openapi/jsonreference v0.20.0/go.mod h1:Ag74Ico3lPc+zR+qjn4XBUmXymS4zJbYVCZmcgkasdo=
github.com/go-openapi/jsonreference v0.21.0 h1:Rs+Y7hSXT83Jacb7kFyjn4ijOuVGSvOdF2+tg1TRrwQ=
github.com/go-openapi/jsonreference v0.21.0/go.mod h1:LmZmgsrTkVg9LG4EaHeY8cBDslNPMo06cago5JNLkm4=
github.com/go-openapi/loads v0.21.0 h1:jYtUO4wwP7psAweisP/MDoOpdzsYEESdoPcsWjHDR68=
github.com/go-openapi/loads v0.21.1/go.mod h1:/DtAMXXneXFjbQMGEtbamCZb+4x7eGwkvZCvBmwUG+g=
github.com/go-openapi/loads v0.21.2 h1:r2a/xFIYeZ4Qd2TnGpWDIQNcP80dIaZgf704za8enro=
github.com/go-openapi/loads v0.21.2/go.mod h1:Jq58Os6SSGz0rzh62ptiu8Z31I+OTHqmULx5e/gJbNw=
github.com/go-openapi/loads v0.22.0 h1:ECPGd4jX1U6NApCGG1We+uEozOAvXvJSF4nnwHZ8Aco=
github.com/go-openapi/loads v0.22.0/go.mod h1:yLsaTCS92mnSAZX5WWoxszLj0u+Ojl+Zs5Stn1oF+rs=
github.com/go-openapi/runtime v0.21.1 h1:/KIG00BzA2x2HRStX2tnhbqbQdPcFlkgsYCiNY20FZs=
github.com/go-openapi/runtime v0.24.1 h1:Sml5cgQKGYQHF+M7yYSHaH1eOjvTykrddTE/KtQVjqo=
github.com/go-openapi/runtime v0.24.1/go.mod h1:AKurw9fNre+h3ELZfk6ILsfvPN+bvvlaU/M9q/r9hpk=
github.com/go-openapi/runtime v0.28.0 h1:gpPPmWSNGo214l6n8hzdXYhPuJcGtziTOgUpvsFWGIQ=
github.com/go-openapi/runtime v0.28.0/go.mod h1:QN7OzcS+XuYmkQLw05akXk0jRH/eZ3kb18+1KwW9gyc=
github.com/go-openapi/spec v0.20.4 h1:O8hJrt0UMnhHcluhIdUgCLRWyM2x7QkBXRvOs7m+O1M=
github.com/go-openapi/spec v0.20.4/go.mod h1:faYFR1CvsJZ0mNsmsphTMSoRrNV3TEDoAM7FOEWeq8I=
github.com/go-openapi/spec v0.20.6/go.mod h1:2OpW+JddWPrpXSCIX8eOx7lZ5iyuWj3RYR6VaaBKcWA=
github.com/go-openapi/spec v0.20.7 h1:1Rlu/ZrOCCob0n+JKKJAWhNWMPW8bOZRg8FJaY+0SKI=
github.com/go-openapi/spec v0.20.7/go.mod h1:2OpW+JddWPrpXSCIX8eOx7lZ5iyuWj3RYR6VaaBKcWA=
github.com/go-openapi/spec v0.21.0 h1:LTVzPc3p/RzRnkQqLRndbAzjY0d0BCL72A6j3CdL9ZY=
github.com/go-openapi/spec v0.21.0/go.mod h1:78u6VdPw81XU44qEWGhtr982gJ5BWg2c0I5XwVMotYk=
github.com/go-openapi/strfmt v0.21.0/go.mod h1:ZRQ409bWMj+SOgXofQAGTIo2Ebu72Gs+WaRADcS5iNg=
github.com/go-openapi/strfmt v0.21.1 h1:G6s2t5V5kGCHLVbSdZ/6lI8Wm4OzoPFkc3/cjAsKQrM=
github.com/go-openapi/strfmt v0.21.1/go.mod h1:I/XVKeLc5+MM5oPNN7P6urMOpuLXEcNrCX/rPGuWb0k=
github.com/go-openapi/strfmt v0.21.2/go.mod h1:I/XVKeLc5+MM5oPNN7P6urMOpuLXEcNrCX/rPGuWb0k=
github.com/go-openapi/strfmt v0.21.3 h1:xwhj5X6CjXEZZHMWy1zKJxvW9AfHC9pkyUjLvHtKG7o=
github.com/go-openapi/strfmt v0.21.3/go.mod h1:k+RzNO0Da+k3FrrynSNN8F7n/peCmQQqbbXjtDfvmGg=
github.com/go-openapi/strfmt v0.23.0 h1:nlUS6BCqcnAk0pyhi9Y+kdDVZdZMHfEKQiS4HaMgO/c=
github.com/go-openapi/strfmt v0.23.0/go.mod h1:NrtIpfKtWIygRkKVsxh7XQMDQW5HKQl6S5ik2elW+K4=
github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
github.com/go-openapi/swag v0.19.15 h1:D2NRCBzS9/pEY3gP9Nl8aDqGUcPFrwG2p+CNFrLyrCM=
github.com/go-openapi/swag v0.19.15/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ=
github.com/go-openapi/swag v0.21.1/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ=
github.com/go-openapi/swag v0.22.3 h1:yMBqmnQ0gyZvEb/+KzuWZOXgllrXT4SADYbvDaXHv/g=
github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14=
github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+GrE=
github.com/go-openapi/swag v0.23.0/go.mod h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ=
github.com/go-openapi/validate v0.20.3 h1:GZPPhhKSZrE8HjB4eEkoYAZmoWA4+tCemSgINH1/vKw=
github.com/go-openapi/validate v0.21.0/go.mod h1:rjnrwK57VJ7A8xqfpAOEKRH8yQSGUriMu5/zuPSQ1hg=
github.com/go-openapi/validate v0.22.0 h1:b0QecH6VslW/TxtpKgzpO1SNG7GU2FsaqKdP1E2T50Y=
github.com/go-openapi/validate v0.22.0/go.mod h1:rjnrwK57VJ7A8xqfpAOEKRH8yQSGUriMu5/zuPSQ1hg=
github.com/go-openapi/validate v0.24.0 h1:LdfDKwNbpB6Vn40xhTdNZAnfLECL81w+VX3BumrGD58=
github.com/go-openapi/validate v0.24.0/go.mod h1:iyeX1sEufmv3nPbBdX3ieNviWnOZaJ1+zquzJEf2BAQ=
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
github.com/go-stack/stack v1.8.1 h1:ntEHSVwIt7PNXNpgPmVfMrNhLtgjlmnZha2kOpuRiDw=
github.com/go-stack/stack v1.8.1/go.mod h1:dcoOX6HbPZSZptuspn9bctJ+N/CnF5gGygcUP3XYfe4=
@@ -166,10 +133,6 @@ github.com/go-swagger/go-swagger v0.29.0 h1:z3YoZtLvS1Y8TE/PCat1VypcZxM0IgKLt0Nv
github.com/go-swagger/go-swagger v0.29.0/go.mod h1:Z4GJzI+bHKKkGB2Ji1rawpi3/ldXX8CkzGIa9HAC5EE=
github.com/go-swagger/go-swagger v0.30.2 h1:23odPUyQZdkNFZZSBJ3mqYYcdh+LnuReEbdWN18OMRo=
github.com/go-swagger/go-swagger v0.30.2/go.mod h1:neDPes8r8PCz2JPvHRDj8BTULLh4VJUt7n6MpQqxhHM=
github.com/go-swagger/go-swagger v0.30.6-0.20240310114303-db51e79a0e37 h1:KFcZmKdZmapAog2+eL1buervAYrYolBZk7fMecPPDmo=
github.com/go-swagger/go-swagger v0.30.6-0.20240310114303-db51e79a0e37/go.mod h1:i1/E+d8iPNReSE7y04FaVu5OPKB3il5cn+T1Egogg3I=
github.com/go-swagger/go-swagger v0.30.6-0.20240418033037-c46c303aaa02 h1:J6YiT/eg3gAfKMdVCkWXe6khsO+nxa8W4URZ4AUqzbA=
github.com/go-swagger/go-swagger v0.30.6-0.20240418033037-c46c303aaa02/go.mod h1:i1/E+d8iPNReSE7y04FaVu5OPKB3il5cn+T1Egogg3I=
github.com/gobuffalo/attrs v0.0.0-20190224210810-a9411de4debd/go.mod h1:4duuawTqi2wkkpB4ePgWMaai6/Kc6WEz83bhFwpHzj0=
github.com/gobuffalo/depgen v0.0.0-20190329151759-d478694a28d3/go.mod h1:3STtPUQYuzV0gBVOY3vy6CfMm/ljR4pABfrTeHNLHUY=
github.com/gobuffalo/depgen v0.1.0/go.mod h1:+ifsuy7fhi15RWncXQQKjWS9JPkdah5sZvtHc2RXGlg=
@@ -248,15 +211,11 @@ github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm4
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y=
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g=
github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4=
github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q=
github.com/gorilla/handlers v1.5.2 h1:cLTUSsNkgcwhgRqvCNmdbRWG0A3N4F+M2nWKdScwyEE=
github.com/gorilla/handlers v1.5.2/go.mod h1:dX+xVpaxdSw+q0Qek8SSsl3dfMk3jNddUkMzo0GtH0w=
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
@@ -264,16 +223,11 @@ github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T
github.com/huandu/xstrings v1.3.1/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE=
github.com/huandu/xstrings v1.3.2 h1:L18LIDzqlW6xN2rEkpdV8+oL/IXWJ1APd+vsdYy4Wdw=
github.com/huandu/xstrings v1.3.2/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE=
github.com/huandu/xstrings v1.3.3/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE=
github.com/huandu/xstrings v1.4.0 h1:D17IlohoQq4UcpqD7fDk80P7l+lwAmlFaBHgOipl2FU=
github.com/huandu/xstrings v1.4.0/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE=
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA=
github.com/imdario/mergo v0.3.12 h1:b6R2BslTbIEToALKP7LxUvijTsNI9TAe80pLWN2g/HU=
github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA=
github.com/imdario/mergo v0.3.16 h1:wwQJbIsHYGMUyLSPrEq1CT16AhnhNJQ51+4fdHUnCl4=
github.com/imdario/mergo v0.3.16/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY=
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
github.com/jessevdk/go-flags v1.5.0 h1:1jKYvbxEjfUl0fmqTCOfonvskHHXMjBySTLW4y9LFvc=
github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4=
@@ -292,8 +246,6 @@ github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0=
github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
@@ -301,8 +253,6 @@ github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/magiconair/properties v1.8.5 h1:b6kJs+EmPFMYGkow9GiUyCyOvIwYetYJ3fSaWak/Gls=
github.com/magiconair/properties v1.8.6 h1:5ibWZ6iY0NctNGWo87LalDlEZ6R41TqbbDamhfG/Qzo=
github.com/magiconair/properties v1.8.6/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60=
github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY=
github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
@@ -333,9 +283,6 @@ github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3v
github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c=
github.com/pelletier/go-toml/v2 v2.0.1 h1:8e3L2cCQzLFi2CR4g7vGFuFxX7Jl1kKX8gW+iV0GUKU=
github.com/pelletier/go-toml/v2 v2.0.1/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo=
github.com/pelletier/go-toml/v2 v2.1.1 h1:LWAJwfNvjQZCFIDKWYQaM62NcYeYViCmWIwmOStowAI=
github.com/pelletier/go-toml/v2 v2.1.1/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc=
github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
@@ -350,32 +297,18 @@ github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTE
github.com/rogpeppe/go-internal v1.8.1 h1:geMPLpDpQOgVyCg5z5GoRwLHepNdb71NXb67XFkP+Eg=
github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8=
github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs=
github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8=
github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4=
github.com/sagikazarmark/locafero v0.4.0 h1:HApY1R9zGo4DBgr7dqsTH/JJxLTTsOt7u6keLGt6kNQ=
github.com/sagikazarmark/locafero v0.4.0/go.mod h1:Pe1W6UlPYUk/+wc/6KFhbORCfqzgYEpgQ3O5fPuL3H4=
github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE=
github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ=
github.com/shopspring/decimal v1.2.0 h1:abSATXmQEYyShuxI4/vyW3tV1MrKAJzCZ/0zLUXYbsQ=
github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o=
github.com/shopspring/decimal v1.3.1 h1:2Usl1nmF/WZucqkFZhnfFYxxxu8LG21F6nPQBE5gKV8=
github.com/shopspring/decimal v1.3.1/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o=
github.com/sirupsen/logrus v1.4.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q=
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo=
github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0=
github.com/spf13/afero v1.8.0 h1:5MmtuhAgYeU6qpa7w7bP0dv6MBYuup0vekhSpSkoq60=
github.com/spf13/afero v1.8.2 h1:xehSyVa0YnHWsJ49JFljMpg1HX19V6NDZ1fkm1Xznbo=
github.com/spf13/afero v1.8.2/go.mod h1:CtAatgMJh6bJEIs48Ay/FOnkljP3WeGUG0MC1RfAqwo=
github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8=
github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY=
github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
github.com/spf13/cast v1.4.1 h1:s0hze+J0196ZfEMTs80N7UlFt0BDuQ7Q+JDnHiMWKdA=
github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w=
github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU=
github.com/spf13/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0=
github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo=
github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk=
github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo=
@@ -385,12 +318,9 @@ github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An
github.com/spf13/viper v1.10.1 h1:nuJZuYpG7gTj/XqiUwg8bA0cp1+M2mC3J4g5luUYBKk=
github.com/spf13/viper v1.12.0 h1:CZ7eSOd3kZoaYDLbXnmzgQI5RlciuXBMA+18HwHRfZQ=
github.com/spf13/viper v1.12.0/go.mod h1:b6COn30jlNxbm/V2IqWiNWkJ+vZNiMNksliPCiuKtSI=
github.com/spf13/viper v1.18.2 h1:LUXCnvUvSM6FXAsj6nnfc8Q2tp1dIgUfY9Kc8GsSOiQ=
github.com/spf13/viper v1.18.2/go.mod h1:EKmWIqdnk5lOcmR72yw6hS+8OPYcwD0jteitLMVB+yk=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
@@ -399,12 +329,9 @@ github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s=
github.com/subosito/gotenv v1.3.0 h1:mjC+YW8QpAdXibNi+vNWgzmgBH4+5l5dCXv8cNysBLI=
github.com/subosito/gotenv v1.3.0/go.mod h1:YzJjq/33h7nrwdY+iHMhEOEEbW0ovIz0tB6t6PwAXzs=
github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8=
github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU=
github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=
github.com/toqueteos/webbrowser v1.2.0 h1:tVP/gpK69Fx+qMJKsLE7TD8LuGWPnEV71wBN9rrstGQ=
github.com/toqueteos/webbrowser v1.2.0/go.mod h1:XWoZq4cyp9WeUeak7w7LXRUQf1F1ATJMir8RTqb4ayM=
@@ -418,7 +345,6 @@ github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
go.mongodb.org/mongo-driver v1.7.3/go.mod h1:NqaYOwnXWr5Pm7AOpO5QFxKJ503nbMse/R79oO62zWg=
go.mongodb.org/mongo-driver v1.7.5/go.mod h1:VXEWRZ6URJIkUq2SCAyapmhH0ZLRBP+FT4xhp5Zvxng=
go.mongodb.org/mongo-driver v1.8.2 h1:8ssUXufb90ujcIvR6MyE1SchaNj0SFxsakiZgxIyrMk=
@@ -426,16 +352,12 @@ go.mongodb.org/mongo-driver v1.8.3/go.mod h1:0sQWfOeY63QTntERDJJ/0SuKK0T1uVSgKCu
go.mongodb.org/mongo-driver v1.10.0/go.mod h1:wsihk0Kdgv8Kqu1Anit4sfK+22vSFbUrAVEYRhCXrA8=
go.mongodb.org/mongo-driver v1.10.1 h1:NujsPveKwHaWuKUer/ceo9DzEe7HIj1SlJ6uvXZG0S4=
go.mongodb.org/mongo-driver v1.10.1/go.mod h1:z4XpeoU6w+9Vht+jAFyLgVrD+jGSQQe0+CBWFHNiHt8=
go.mongodb.org/mongo-driver v1.14.0 h1:P98w8egYRjYe3XDjxhYJagTokP/H6HzlsnojRgZRd80=
go.mongodb.org/mongo-driver v1.14.0/go.mod h1:Vzb0Mk/pa7e6cWw85R4F/endUC3u0U9jGcNU603k65c=
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20190422162423-af44ce270edf/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE=
@@ -447,14 +369,10 @@ golang.org/x/crypto v0.0.0-20200414173820-0848c9571904/go.mod h1:LzIPMQfyMNhhGPh
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20201216223049-8b5274cf687f/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90 h1:Y/gsMcFOcR+6S6f3YeMKl5g+dZMEWqcz5Czj/GWYbkM=
golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/crypto v0.3.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4=
golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA=
golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
@@ -465,8 +383,6 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0
golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM=
golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU=
golang.org/x/exp v0.0.0-20240222234643-814bf88cf225 h1:LfspQV/FYTatPTr/3HzIcmiUFH7PGP+OQ6mgDYo3yuQ=
golang.org/x/exp v0.0.0-20240222234643-814bf88cf225/go.mod h1:CxmFvTBINI24O/j8iY7H1xHzx2i4OsyguNBmN/uPtqc=
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
@@ -493,8 +409,6 @@ golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.5.1 h1:OJxoQ/rynoF0dcCdI7cLPktw/hR2cueqYfjm43oqK38=
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s=
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
golang.org/x/mod v0.16.0 h1:QX4fJ0Rr5cPQCF7O9lh9Se4pmwfwskqZfq5moyldzic=
golang.org/x/mod v0.16.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -530,8 +444,6 @@ golang.org/x/net v0.0.0-20210421230115-4e50805a0758/go.mod h1:72T/g9IO56b78aLF+1
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20220121210141-e204ce36a2ba h1:6u6sik+bn/y7vILcYkK3iwTBWN7WtBvB0+SZswQnbf8=
golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
@@ -553,9 +465,6 @@ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ=
golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -602,17 +511,11 @@ golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBc
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220114195835-da31bd327af9 h1:XfKQ4OlFl8okEOr5UvAqFRVj8pY/4yfcXrddB8qAbU0=
golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220829200755-d48e67d00261 h1:v6hYoSR9T5oet+pMXwUWkbiVqx/63mlHjefrHmxwfeY=
golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4=
golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc=
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@@ -623,9 +526,6 @@ golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
@@ -683,8 +583,6 @@ golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
golang.org/x/tools v0.1.8 h1:P1HhGGuLW4aAclzjtmJdf0mJOjVUZUzOTqkAkWL+l6w=
golang.org/x/tools v0.1.12 h1:VveCTK38A2rkS8ZqFY25HIDFscX5X9OoEhJd3quQmXU=
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
golang.org/x/tools v0.19.0 h1:tfGCXNR1OsFG+sVdLAitlpjAvD/I6dHDKnYrpEZUHkw=
golang.org/x/tools v0.19.0/go.mod h1:qoJWxmGSIBmAeriMx19ogtrEPrGtDbPK634QFIcLAhc=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
@@ -785,8 +683,6 @@ gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
gopkg.in/ini.v1 v1.66.3 h1:jRskFVxYaMGAMUbN0UZ7niA9gzL9B49DOqE78vg0k3w=
gopkg.in/ini.v1 v1.66.4 h1:SsAcf+mM7mRZo2nJNGt8mZCjG8ZRaNGMURJw7BsIST4=
gopkg.in/ini.v1 v1.66.4/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=
gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=

View File

@@ -1,4 +1,4 @@
# Auto generated binary variables helper managed by https://github.com/bwplotka/bingo v0.9. DO NOT EDIT.
# Auto generated binary variables helper managed by https://github.com/bwplotka/bingo v0.8. DO NOT EDIT.
# All tools are designed to be build inside $GOBIN.
# Those variables will work only until 'bingo get' was invoked, or if tools were installed via Makefile's Variables.mk.
GOBIN=${GOBIN:=$(go env GOBIN)}
@@ -14,11 +14,13 @@ CUE="${GOBIN}/cue-v0.5.0"
DRONE="${GOBIN}/drone-v1.5.0"
GOLANGCI_LINT="${GOBIN}/golangci-lint-v1.60.1"
GOLANGCI_LINT="${GOBIN}/golangci-lint-v1.53.3"
JB="${GOBIN}/jb-v0.5.1"
LEFTHOOK="${GOBIN}/lefthook-v1.4.8"
SWAGGER="${GOBIN}/swagger-v0.30.6-0.20240310114303-db51e79a0e37"
SWAGGER="${GOBIN}/swagger-v0.30.2"
WIRE="${GOBIN}/wire-v0.5.0"

5
.bingo/wire.mod Normal file
View File

@@ -0,0 +1,5 @@
module _ // Auto generated by https://github.com/bwplotka/bingo. DO NOT EDIT
go 1.16
require github.com/google/wire v0.5.0 // cmd/wire

13
.bingo/wire.sum Normal file
View File

@@ -0,0 +1,13 @@
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
github.com/google/subcommands v1.0.1 h1:/eqq+otEXm5vhfBrbREPCSVQbvofip6kIz+mX5TUH7k=
github.com/google/subcommands v1.0.1/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk=
github.com/google/wire v0.5.0 h1:I7ELFeVBr3yfPIcc8+MWvrjk+3VjbcSzoXm3JVa+jD8=
github.com/google/wire v0.5.0/go.mod h1:ngWDr9Qvq3yZA10YrxfyGELY/AFWGVpy9c1LTRi1EoU=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/tools v0.0.0-20190422233926-fe54fb35175b h1:NVD8gBK33xpdqCaZVVtd6OFJp+3dxkXuz7+U7KaVN6s=
golang.org/x/tools v0.0.0-20190422233926-fe54fb35175b/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=

View File

@@ -2,7 +2,7 @@
init_cmds = [
["GO_BUILD_DEV=1", "make", "build-go"],
["make", "gen-jsonnet"],
["./bin/grafana", "server", "-profile", "-profile-addr=127.0.0.1", "-profile-port=6000", "-profile-block-rate=1", "-profile-mutex-rate=5", "-packaging=dev", "cfg:app_mode=development"]
["./bin/grafana", "server", "-packaging=dev", "cfg:app_mode=development"]
]
watch_all = true
follow_symlinks = true
@@ -18,5 +18,5 @@ build_delay = 1500
cmds = [
["GO_BUILD_DEV=1", "make", "build-go"],
["make", "gen-jsonnet"],
["./bin/grafana", "server", "-profile", "-profile-addr=127.0.0.1", "-profile-port=6000", "-profile-block-rate=1", "-profile-mutex-rate=5", "-packaging=dev", "cfg:app_mode=development"]
["./bin/grafana", "server", "-packaging=dev", "cfg:app_mode=development"]
]

View File

@@ -105,7 +105,7 @@
- Notice to makers/users of custom data sources, there is a minor breaking change in 2.2 that
require an update to custom data sources for them to work in 2.2. [Read this doc](https://github.com/grafana/grafana/tree/master/docs/sources/datasources/plugin_api.md) for more on the
data source api change.
- Data source api changes, [PLUGIN_CHANGES.md](https://github.com/grafana/grafana/blob/main/public/app/plugins/PLUGIN_CHANGES.md)
- Data source api changes, [PLUGIN_CHANGES.md](https://github.com/grafana/grafana/blob/master/public/app/plugins/PLUGIN_CHANGES.md)
- The duplicate query function used in data source editors is changed, and moveMetricQuery function was renamed
**Tech (Note for devs)**

View File

@@ -198,7 +198,7 @@ slack channel (link to slack channel in readme).
### Breaking changes
- **Plugin API**: Both data source and panel plugin api (and plugin.json schema) have been updated, requiring an update to plugins. See [plugin api](https://github.com/grafana/grafana/blob/main/public/app/plugins/plugin_api.md) for more info.
- **Plugin API**: Both data source and panel plugin api (and plugin.json schema) have been updated, requiring an update to plugins. See [plugin api](https://github.com/grafana/grafana/blob/master/public/app/plugins/plugin_api.md) for more info.
- **InfluxDB 0.8.x** The data source for the old version of influxdb (0.8.x) is no longer included in default builds, but can easily be installed via improved plugin system, closes [#3523](https://github.com/grafana/grafana/issues/3523)
- **KairosDB** The data source is no longer included in default builds, but can easily be installed via improved plugin system, closes [#3524](https://github.com/grafana/grafana/issues/3524)
- **Templating**: Templating value formats (glob/regex/pipe etc) are now handled automatically and not specified by the user, this makes variable values possible to reuse in many contexts. It can in some edge cases break existing dashboards that have template variables that do not reload on dashboard load. To fix any issue just go into template variable options and update the variable (so it's values are reloaded.).

View File

@@ -100,7 +100,7 @@ See [security announcement](https://community.grafana.com/t/grafana-5-2-3-and-4-
## Tech
- **Go**: Grafana is now built using golang 1.9
- **Webpack**: Changed from systemjs to webpack (see readme or building from source guide for new build instructions). Systemjs is still used to load plugins but now plugins can only import a limited set of dependencies. See [PLUGIN_DEV.md](https://github.com/grafana/grafana/blob/main/PLUGIN_DEV.md) for more details on how this can effect some plugins.
- **Webpack**: Changed from systemjs to webpack (see readme or building from source guide for new build instructions). Systemjs is still used to load plugins but now plugins can only import a limited set of dependencies. See [PLUGIN_DEV.md](https://github.com/grafana/grafana/blob/master/PLUGIN_DEV.md) for more details on how this can effect some plugins.
# 4.5.2 (2017-09-22)

View File

@@ -1291,4 +1291,4 @@ repo on July 1st. Make sure you have switched to the new repo by then. The new r
- **Text Panel**: The text panel does no longer by default allow unsanitized HTML. [#4117](https://github.com/grafana/grafana/issues/4117). This means that if you have text panels with scripts tags they will no longer work as before. To enable unsafe javascript execution in text panels enable the settings `disable_sanitize_html` under the section `[panels]` in your Grafana ini file, or set env variable `GF_PANELS_DISABLE_SANITIZE_HTML=true`.
- **Dashboard**: Panel property `minSpan` replaced by `maxPerRow`. Dashboard migration will automatically migrate all dashboard panels using the `minSpan` property to the new `maxPerRow` property [#12991](https://github.com/grafana/grafana/pull/12991)
For older release notes, refer to the [CHANGELOG_ARCHIVE.md](https://github.com/grafana/grafana/blob/main/CHANGELOG_ARCHIVE.md)
For older release notes, refer to the [CHANGELOG_ARCHIVE.md](https://github.com/grafana/grafana/blob/master/CHANGELOG_ARCHIVE.md)

View File

@@ -544,7 +544,7 @@ Issue [#29407](https://github.com/grafana/grafana/issues/29407)
We have upgraded AngularJS from version 1.6.6 to 1.8.2. Due to this upgrade some old angular plugins might stop working and will require a small update. This is due to the deprecation and removal of pre-assigned bindings. So if your custom angular controllers expect component bindings in the controller constructor you need to move this code to an `$onInit` function. For more details on how to migrate AngularJS code open the [migration guide](https://docs.angularjs.org/guide/migration) and search for **pre-assigning bindings**.
In order not to break all angular panel plugins and data sources we have some custom [angular inject behavior](https://github.com/grafana/grafana/blob/main/public/app/core/injectorMonkeyPatch.ts) that makes sure that bindings for these controllers are still set before constructor is called so many old angular panels and data source plugins will still work. Issue [#28736](https://github.com/grafana/grafana/issues/28736)
In order not to break all angular panel plugins and data sources we have some custom [angular inject behavior](https://github.com/grafana/grafana/blob/master/public/app/core/injectorMonkeyPatch.ts) that makes sure that bindings for these controllers are still set before constructor is called so many old angular panels and data source plugins will still work. Issue [#28736](https://github.com/grafana/grafana/issues/28736)
### Deprecations
@@ -1288,8 +1288,8 @@ This option to group query variable values into groups by tags has been an exper
- **Datasource/Loki**: Support for [deprecated Loki endpoints](https://github.com/grafana/loki/blob/master/docs/api.md#lokis-http-api) has been removed.
- **Backend plugins**: Grafana now requires backend plugins to be signed, otherwise Grafana will not load/start them. This is an additional security measure to make sure backend plugin binaries and files haven't been tampered with. Refer to [Upgrade Grafana](https://grafana.com/docs/grafana/latest/installation/upgrading/#upgrading-to-v7-0) for more information.
- **Docker**: Our Ubuntu based images have been upgraded to Ubuntu [20.04 LTS](https://releases.ubuntu.com/20.04/).
- **@grafana/ui**: Forms migration notice, see [@grafana/ui changelog](https://github.com/grafana/grafana/blob/main/packages/grafana-ui/CHANGELOG.md)
- **@grafana/ui**: Select API change for creating custom values, see [@grafana/ui changelog](https://github.com/grafana/grafana/blob/main/packages/grafana-ui/CHANGELOG.md)
- **@grafana/ui**: Forms migration notice, see [@grafana/ui changelog](https://github.com/grafana/grafana/blob/master/packages/grafana-ui/CHANGELOG.md)
- **@grafana/ui**: Select API change for creating custom values, see [@grafana/ui changelog](https://github.com/grafana/grafana/blob/master/packages/grafana-ui/CHANGELOG.md)
**Deprecation warnings**
@@ -1304,7 +1304,7 @@ Not just visualizing data from anywhere, in Grafana 7 you can transform it too.
Data transformations will provide a common set of data operations that were previously duplicated as custom features in many panels or data sources but are now an integral part of the Grafana data processing pipeline and something all data sources and panels can take advantage of.
In Grafana 7.0 we have a shared data model for both time series and table data that we call [DataFrame](https://github.com/grafana/grafana/blob/main/docs/sources/plugins/developing/dataframe.md). A DataFrame is like a table with columns but we refer to columns as fields. A time series is simply a DataFrame with two fields (time & value).
In Grafana 7.0 we have a shared data model for both time series and table data that we call [DataFrame](https://github.com/grafana/grafana/blob/master/docs/sources/plugins/developing/dataframe.md). A DataFrame is like a table with columns but we refer to columns as fields. A time series is simply a DataFrame with two fields (time & value).
**Transformations shipping in 7.0**
@@ -1414,7 +1414,7 @@ We have also extended the time zone options so you can select any of the standar
### Features / Enhancements
- **Docker**: Upgrade to Alpine 3.11. [#24056](https://github.com/grafana/grafana/pull/24056), [@aknuds1](https://github.com/aknuds1)
- **Forms**: Remove Forms namespace [BREAKING]. Will cause all `Forms` imports to stop working. See migration guide in [@grafana/ui changelog](https://github.com/grafana/grafana/blob/main/packages/grafana-ui/CHANGELOG.md)[#24378](https://github.com/grafana/grafana/pull/24378), [@tskarhed](https://github.com/tskarhed)
- **Forms**: Remove Forms namespace [BREAKING]. Will cause all `Forms` imports to stop working. See migration guide in [@grafana/ui changelog](https://github.com/grafana/grafana/blob/master/packages/grafana-ui/CHANGELOG.md)[#24378](https://github.com/grafana/grafana/pull/24378), [@tskarhed](https://github.com/tskarhed)
### Bug Fixes
@@ -1429,7 +1429,7 @@ We have also extended the time zone options so you can select any of the standar
- **Removed PhantomJS**: PhantomJS was deprecated in [Grafana v6.4](https://grafana.com/docs/grafana/latest/guides/whats-new-in-v6-4/#phantomjs-deprecation) and starting from Grafana v7.0.0, all PhantomJS support has been removed. This means that Grafana no longer ships with a built-in image renderer, and we advise you to install the [Grafana Image Renderer plugin](https://grafana.com/grafana/plugins/grafana-image-renderer).
- **Docker**: Our Ubuntu based images have been upgraded to Ubuntu [20.04 LTS](https://releases.ubuntu.com/20.04/).
- **Dashboard**: A global minimum dashboard refresh interval is now enforced and defaults to 5 seconds.
- **@grafana/ui**: Forms migration notice, see [@grafana/ui changelog](https://github.com/grafana/grafana/blob/main/packages/grafana-ui/CHANGELOG.md)
- **@grafana/ui**: Forms migration notice, see [@grafana/ui changelog](https://github.com/grafana/grafana/blob/master/packages/grafana-ui/CHANGELOG.md)
- **Interval calculation**: There is now a new option `Max data points` that controls the auto interval `$__interval` calculation. Interval was previously calculated by dividing the panel width by the time range. With the new max data points option it is now easy to set `$__interval` to a dynamic value that is time range agnostic. For example if you set `Max data points` to 10 Grafana will dynamically set `$__interval` by dividing the current time range by 10.
- **Datasource/Loki**: Support for [deprecated Loki endpoints](https://github.com/grafana/loki/blob/master/docs/api.md#lokis-http-api) has been removed.
@@ -1484,8 +1484,8 @@ We have also extended the time zone options so you can select any of the standar
- **Removed PhantomJS**: PhantomJS was deprecated in [Grafana v6.4](https://grafana.com/docs/grafana/latest/guides/whats-new-in-v6-4/#phantomjs-deprecation) and starting from Grafana v7.0.0, all PhantomJS support has been removed. This means that Grafana no longer ships with a built-in image renderer, and we advise you to install the [Grafana Image Renderer plugin](https://grafana.com/grafana/plugins/grafana-image-renderer).
- **Docker**: Our Ubuntu based images have been upgraded to Ubuntu [20.04 LTS](https://releases.ubuntu.com/20.04/).
- **Dashboard**: A global minimum dashboard refresh interval is now enforced and defaults to 5 seconds.
- **@grafana/ui**: Forms migration notice, see [@grafana/ui changelog](https://github.com/grafana/grafana/blob/main/packages/grafana-ui/CHANGELOG.md)
- **@grafana/ui**: Select API change for creating custom values, see [@grafana/ui changelog](https://github.com/grafana/grafana/blob/main/packages/grafana-ui/CHANGELOG.md)
- **@grafana/ui**: Forms migration notice, see [@grafana/ui changelog](https://github.com/grafana/grafana/blob/master/packages/grafana-ui/CHANGELOG.md)
- **@grafana/ui**: Select API change for creating custom values, see [@grafana/ui changelog](https://github.com/grafana/grafana/blob/master/packages/grafana-ui/CHANGELOG.md)
- **Interval calculation**: There is now a new option `Max data points` that controls the auto interval `$__interval` calculation. Interval was previously calculated by dividing the panel width by the time range. With the new max data points option it is now easy to set `$__interval` to a dynamic value that is time range agnostic. For example if you set `Max data points` to 10 Grafana will dynamically set `$__interval` by dividing the current time range by 10.
- **Datasource/Loki**: Support for [deprecated Loki endpoints](https://github.com/grafana/loki/blob/master/docs/api.md#lokis-http-api) has been removed.

6
.codespellignore Normal file
View File

@@ -0,0 +1,6 @@
aks
eror
iam
wan
[Operato Windrose](https://grafana.com/grafana/plugins/operato-windrose-panel/)
sergent

View File

@@ -17,11 +17,18 @@ load(
"publish_npm_pipelines",
"publish_packages_pipeline",
)
load("scripts/drone/events/rrc-patch.star", "rrc_patch_pipelines")
load(
"scripts/drone/pipelines/ci_images.star",
"publish_ci_windows_test_image_pipeline",
)
load(
"scripts/drone/pipelines/publish_images.star",
"publish_image_pipelines_public",
)
load(
"scripts/drone/pipelines/windows.star",
"windows_test_backend",
)
load(
"scripts/drone/rgm.star",
"rgm",
@@ -32,13 +39,17 @@ def main(_ctx):
return (
pr_pipelines() +
main_pipelines() +
rrc_patch_pipelines() +
publish_image_pipelines_public() +
publish_artifacts_pipelines("public") +
publish_npm_pipelines() +
publish_packages_pipeline() +
rgm() +
[windows_test_backend({
"event": ["promote"],
"target": ["test-windows"],
}, "oss", "testing")] +
integration_test_pipelines() +
publish_ci_windows_test_image_pipeline() +
cronjobs() +
secrets()
)

2735
.drone.yml

File diff suppressed because it is too large Load Diff

View File

@@ -13,8 +13,6 @@ node_modules
/public/lib/monaco
/scripts/grafana-server/tmp
vendor
e2e/test-plugins
playwright-report
# TS generate from cue by cuetsy
**/*.gen.ts

116
.eslintrc
View File

@@ -1,25 +1,13 @@
{
"extends": ["@grafana/eslint-config", "plugin:react/jsx-runtime"],
"extends": ["@grafana/eslint-config"],
"root": true,
"plugins": [
"@emotion",
"lodash",
"jest",
"import",
"jsx-a11y",
"@grafana",
"no-barrel-files",
// Included so betterer doesn't fail when processing all files,
// as other parts of the code use testing-library plugin
"testing-library",
],
"plugins": ["@emotion", "lodash", "jest", "import", "jsx-a11y", "@grafana"],
"settings": {
"import/internal-regex": "^(app/)|(@grafana)",
"import/external-module-folders": ["node_modules", ".yarn"],
"import/external-module-folders": ["node_modules", ".yarn"]
},
"rules": {
"@grafana/no-border-radius-literal": "error",
"@grafana/no-unreduced-motion": "error",
"react/prop-types": "off",
// need to ignore emotion's `css` prop, see https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-unknown-property.md#rule-options
"react/no-unknown-property": ["error", { "ignore": ["css"] }],
@@ -31,8 +19,8 @@
{
"groups": [["builtin", "external"], "internal", "parent", "sibling", "index"],
"newlines-between": "always",
"alphabetize": { "order": "asc" },
},
"alphabetize": { "order": "asc" }
}
],
"no-restricted-imports": [
"error",
@@ -41,43 +29,47 @@
{
"name": "react-redux",
"importNames": ["useDispatch", "useSelector"],
"message": "Please import from app/types instead.",
"message": "Please import from app/types instead."
},
{
"name": "react-i18next",
"importNames": ["Trans", "t"],
"message": "Please import from app/core/internationalization instead",
"message": "Please import from app/core/internationalization instead"
},
],
},
{
"name": "@grafana/e2e",
"message": "@grafana/e2e is deprecated. Please import from ./e2e/utils instead"
}
]
}
],
// Use typescript's no-redeclare for compatibility with overrides
"no-redeclare": "off",
"@typescript-eslint/no-redeclare": ["error"],
"@typescript-eslint/no-redeclare": ["error"]
},
"overrides": [
{
"files": ["packages/grafana-ui/src/components/uPlot/**/*.{ts,tsx}"],
"rules": {
"react-hooks/rules-of-hooks": "off",
"react-hooks/exhaustive-deps": "off",
},
"react-hooks/exhaustive-deps": "off"
}
},
{
"files": ["packages/grafana-ui/src/components/ThemeDemos/**/*.{ts,tsx}"],
"rules": {
"@emotion/jsx-import": "off",
"react/jsx-uses-react": "off",
"react/react-in-jsx-scope": "off",
},
"react/react-in-jsx-scope": "off"
}
},
{
"files": ["public/dashboards/scripted*.js"],
"rules": {
"no-redeclare": "error",
"@typescript-eslint/no-redeclare": "off",
},
"@typescript-eslint/no-redeclare": "off"
}
},
{
"extends": ["plugin:jsx-a11y/recommended"],
@@ -90,57 +82,33 @@
"jsx-a11y/no-autofocus": [
"error",
{
"ignoreNonDOM": true,
},
"ignoreNonDOM": true
}
],
"jsx-a11y/label-has-associated-control": [
"error",
{
"controlComponents": ["NumberInput"],
"depth": 2,
},
],
},
"depth": 2
}
]
}
},
{
"files": [
"public/app/plugins/datasource/azuremonitor/*.{ts,tsx}",
"public/app/plugins/datasource/azuremonitor/**/*.{ts,tsx}",
"public/app/plugins/datasource/cloud-monitoring/*.{ts,tsx}",
"public/app/plugins/datasource/cloud-monitoring/**/*.{ts,tsx}",
"public/app/plugins/datasource/elasticsearch/*.{ts,tsx}",
"public/app/plugins/datasource/elasticsearch/**/*.{ts,tsx}",
"public/app/plugins/datasource/grafana-postgresql-datasource/*.{ts,tsx}",
"public/app/plugins/datasource/grafana-postgresql-datasource/**/*.{ts,tsx}",
"public/app/plugins/datasource/grafana-pyroscope-datasource/*.{ts,tsx}",
"public/app/plugins/datasource/grafana-pyroscope-datasource/**/*.{ts,tsx}",
"public/app/plugins/datasource/grafana-testdata-datasource/*.{ts,tsx}",
"public/app/plugins/datasource/grafana-testdata-datasource/**/*.{ts,tsx}",
"public/app/plugins/datasource/jaeger/*.{ts,tsx}",
"public/app/plugins/datasource/jaeger/**/*.{ts,tsx}",
"public/app/plugins/datasource/loki/*.{ts,tsx}",
"public/app/plugins/datasource/loki/**/*.{ts,tsx}",
"public/app/plugins/datasource/mysql/*.{ts,tsx}",
"public/app/plugins/datasource/mysql/**/*.{ts,tsx}",
"public/app/plugins/datasource/azuremonitor/*.{ts,tsx}",
"public/app/plugins/datasource/azuremonitor/**/*.{ts,tsx}",
"public/app/plugins/datasource/parca/*.{ts,tsx}",
"public/app/plugins/datasource/parca/**/*.{ts,tsx}",
"public/app/plugins/datasource/tempo/*.{ts,tsx}",
"public/app/plugins/datasource/tempo/**/*.{ts,tsx}",
"public/app/plugins/datasource/loki/*.{ts,tsx}",
"public/app/plugins/datasource/loki/**/*.{ts,tsx}",
"public/app/plugins/datasource/elasticsearch/*.{ts,tsx}",
"public/app/plugins/datasource/elasticsearch/**/*.{ts,tsx}",
"public/app/plugins/datasource/cloudwatch/*.{ts,tsx}",
"public/app/plugins/datasource/cloudwatch/**/*.{ts,tsx}",
"public/app/plugins/datasource/zipkin/*.{ts,tsx}",
"public/app/plugins/datasource/zipkin/**/*.{ts,tsx}",
"public/app/plugins/datasource/parca/**/*.{ts,tsx}"
],
"settings": {
"import/resolver": {
"node": {
"extensions": [".ts", ".tsx"],
},
},
"extensions": [".ts", ".tsx"]
}
}
},
"rules": {
"import/no-restricted-paths": [
@@ -149,14 +117,14 @@
"zones": [
{
"target": "./public/app/plugins",
"from": "./public",
"except": ["./app/plugins"],
"message": "Core plugins are not allowed to depend on Grafana core packages",
},
],
},
],
},
},
],
"from": "./public/app",
"except": ["./plugins"],
"message": "Core plugins are not allowed to depend on Grafana core packages"
}
]
}
]
}
}
]
}

578
.github/CODEOWNERS vendored
View File

@@ -13,11 +13,13 @@
# Documentation
/.changelog-archive @grafana/grafana-release-guild
/.codespellignore @grafana/docs-tooling
/CHANGELOG.md @grafana/grafana-release-guild
/CODE_OF_CONDUCT.md @grafana/grafana-community-support
/CONTRIBUTING.md @grafana/grafana-community-support
/GOVERNANCE.md @RichiH
/HALL_OF_FAME.md @grafana/grafana-community-support
/ISSUE_TRIAGE.md @grafana/grafana-community-support
/LICENSE @torkelo
/LICENSING.md @torkelo
/MAINTAINERS.md @RichiH
@@ -26,148 +28,132 @@
/ROADMAP.md @torkelo
/SECURITY.md @grafana/security-team
/SUPPORT.md @torkelo
/UPGRADING_DEPENDENCIES.md @grafana/docs-grafana
/WORKFLOW.md @torkelo
/contribute/ @grafana/grafana-community-support
/contribute/UPGRADING_DEPENDENCIES.md @grafana/docs-grafana
/devenv/README.md @grafana/docs-grafana
# START Technical documentation
# Technical documentation
# `make docs` procedure and related workflows are owned @grafana/docs-tooling. Slack #docs.
/docs/ @grafana/docs-tooling
/docs/.codespellignore @grafana/docs-tooling
/docs/sources/ @irenerl24
/docs/sources/alerting/ @brendamuir
/docs/sources/dashboards/ @imatwawana
/docs/sources/explore/ @grafana/explore-squad @lwandz13
/docs/sources/panels-visualizations/ @imatwawana
/docs/sources/release-notes/ @irenerl24 @GrafanaWriter
/docs/sources/upgrade-guide/ @imatwawana
/docs/sources/whatsnew/ @imatwawana
/docs/sources/developers/plugins/ @grafana/plugins-platform-frontend @grafana/plugins-platform-backend
# Documentation sources might have different owners.
/docs/ @grafana/docs-tooling
/docs/sources/ @Eve832
/docs/sources/administration/ @jdbaldry
/docs/sources/alerting/ @brendamuir
/docs/sources/dashboards/ @imatwawana
/docs/sources/datasources/ @lwandz13
/docs/sources/explore/ @grafana/explore-squad
/docs/sources/fundamentals @chri2547
/docs/sources/getting-started/ @chri2547
/docs/sources/introduction/ @chri2547
/docs/sources/old-alerting/ @brendamuir
/docs/sources/panels-visualizations/ @imatwawana
/docs/sources/panels-visualizations/query-transform-data/transform-data/index.md @imatwawana @baldm0mma
# END Technical documentation
/docs/sources/release-notes/ @Eve832 @GrafanaWriter
/docs/sources/setup-grafana/ @chri2547
/docs/sources/upgrade-guide/ @imatwawana
/docs/sources/whatsnew/ @imatwawana
/docs/sources/developers/plugins/ @Eve832 @josmperez @grafana/plugins-platform-frontend @grafana/plugins-platform-backend
# Backend code
/go.mod @grafana/grafana-backend-group
/go.sum @grafana/grafana-backend-group
/go.work @grafana/grafana-app-platform-squad
/go.work.sum @grafana/grafana-app-platform-squad
/.bingo/ @grafana/grafana-backend-group
/pkg/README.md @grafana/grafana-backend-group
/pkg/ruleguard.rules.go @grafana/grafana-backend-group
/.bra.toml @grafana/grafana-backend-group
/.golangci.toml @grafana/grafana-backend-group
/build.go @grafana/grafana-backend-services-squad
/scripts/modowners/ @grafana/grafana-backend-services-squad
/scripts/go-workspace @grafana/grafana-app-platform-squad
/go.mod @grafana/backend-platform
/go.sum @grafana/backend-platform
/.bingo/ @grafana/backend-platform
/pkg/README.md @grafana/backend-platform
/pkg/ruleguard.rules.go @grafana/backend-platform
/.bra.toml @grafana/backend-platform
/.golangci.toml @grafana/backend-platform
/build.go @grafana/backend-platform
/scripts/modowners/ @grafana/backend-platform
/hack/ @grafana/grafana-app-platform-squad
/apps/alerting/ @grafana/alerting-backend
/apps/playlist/ @grafana/grafana-app-platform-squad
/pkg/api/ @grafana/grafana-backend-group
/pkg/api/ @grafana/backend-platform
/pkg/apis/ @grafana/grafana-app-platform-squad
/pkg/apis/alerting_notifications @grafana/grafana-app-platform-squad @grafana/alerting-backend @grafana/alerting-frontend
/pkg/apis/query @grafana/grafana-datasources-core-services
/pkg/bus/ @grafana/grafana-search-and-storage
/pkg/cmd/ @grafana/grafana-backend-group
/pkg/cmd/grafana-cli/commands/install_command.go @grafana/plugins-platform-backend
/pkg/cmd/grafana-cli/commands/install_command_test.go @grafana/plugins-platform-backend
/pkg/cmd/grafana-cli/commands/listremote_command.go @grafana/plugins-platform-backend
/pkg/cmd/grafana-cli/commands/listversions_command.go @grafana/plugins-platform-backend
/pkg/cmd/grafana-cli/commands/ls_command_test.go @grafana/plugins-platform-backend
/pkg/cmd/grafana-cli/commands/ls_command.go @grafana/plugins-platform-backend
/pkg/cmd/grafana-cli/commands/remove_command.go @grafana/plugins-platform-backend
/pkg/cmd/grafana-cli/commands/upgrade_command.go @grafana/plugins-platform-backend
/pkg/cmd/grafana-cli/commands/upgrade_all_command.go @grafana/plugins-platform-backend
/pkg/cmd/grafana-cli/commands/upgrade_all_command_test.go @grafana/plugins-platform-backend
/pkg/components/apikeygen/ @grafana/identity-squad
/pkg/components/satokengen/ @grafana/identity-squad
/pkg/components/dashdiffs/ @grafana/grafana-app-platform-squad
/pkg/components/imguploader/ @grafana/alerting-backend
/pkg/components/loki/ @grafana/grafana-backend-group
/pkg/components/null/ @grafana/grafana-backend-group
/pkg/components/simplejson/ @grafana/grafana-backend-group
/pkg/events/ @grafana/grafana-backend-group
/pkg/extensions/ @grafana/grafana-backend-group
/pkg/ifaces/ @grafana/grafana-backend-group
/pkg/infra/db/ @grafana/grafana-backend-group
/pkg/infra/localcache/ @grafana/grafana-backend-group
/pkg/infra/log/ @grafana/grafana-backend-group
/pkg/infra/metrics/ @grafana/grafana-backend-group
/pkg/infra/network/ @grafana/grafana-backend-group
/pkg/infra/process/ @grafana/grafana-backend-group
/pkg/infra/remotecache/ @grafana/grafana-backend-group
/pkg/infra/serverlock/ @grafana/grafana-backend-group
/pkg/infra/slugify/ @grafana/grafana-backend-group
/pkg/infra/tracing/ @grafana/grafana-backend-group
/pkg/infra/usagestats/ @grafana/grafana-backend-group
/pkg/middleware/ @grafana/grafana-backend-group
/pkg/mocks/ @grafana/grafana-backend-group
/pkg/models/ @grafana/grafana-backend-group
/pkg/semconv/ @grafana/grafana-backend-group
/pkg/server/ @grafana/grafana-backend-group
/pkg/apiserver @grafana/grafana-app-platform-squad
/pkg/aggregator @grafana/grafana-app-platform-squad
/pkg/apimachinery @grafana/grafana-app-platform-squad
/pkg/apimachinery/identity/ @grafana/identity-squad
/pkg/apimachinery/errutil/ @grafana/grafana-backend-group
/pkg/promlib @grafana/observability-metrics
/pkg/storage/ @grafana/grafana-search-and-storage
/pkg/services/annotations/ @grafana/grafana-search-and-storage
/pkg/services/apikey/ @grafana/identity-squad
/pkg/services/cleanup/ @grafana/grafana-backend-group
/pkg/services/contexthandler/ @grafana/grafana-backend-group @grafana/grafana-app-platform-squad
/pkg/bus/ @grafana/backend-platform
/pkg/cmd/ @grafana/backend-platform
/pkg/cmd/grafana/apiserver @grafana/grafana-app-platform-squad
/pkg/components/apikeygen/ @grafana/identity-access-team
/pkg/components/satokengen/ @grafana/identity-access-team
/pkg/components/dashdiffs/ @grafana/backend-platform
/pkg/components/imguploader/ @grafana/backend-platform
/pkg/components/loki/ @grafana/backend-platform
/pkg/components/null/ @grafana/backend-platform
/pkg/components/simplejson/ @grafana/backend-platform
/pkg/events/ @grafana/backend-platform
/pkg/extensions/ @grafana/backend-platform
/pkg/ifaces/ @grafana/backend-platform
/pkg/infra/appcontext/ @grafana/backend-platform
/pkg/infra/db/ @grafana/backend-platform
/pkg/infra/localcache/ @grafana/backend-platform
/pkg/infra/log/ @grafana/backend-platform
/pkg/infra/metrics/ @grafana/backend-platform
/pkg/infra/network/ @grafana/backend-platform
/pkg/infra/process/ @grafana/backend-platform
/pkg/infra/remotecache/ @grafana/backend-platform
/pkg/infra/serverlock/ @grafana/backend-platform
/pkg/infra/slugify/ @grafana/backend-platform
/pkg/infra/tracing/ @grafana/backend-platform
/pkg/infra/usagestats/ @grafana/backend-platform
/pkg/middleware/ @grafana/backend-platform
/pkg/mocks/ @grafana/backend-platform
/pkg/models/ @grafana/backend-platform
/pkg/server/ @grafana/backend-platform
/pkg/services/annotations/ @grafana/backend-platform
/pkg/services/apikey/ @grafana/identity-access-team
/pkg/services/cleanup/ @grafana/backend-platform
/pkg/services/contexthandler/ @grafana/backend-platform
/pkg/services/correlations/ @grafana/explore-squad
/pkg/services/dashboardimport/ @grafana/grafana-backend-group
/pkg/services/dashboards/ @grafana/grafana-app-platform-squad
/pkg/services/dashboardversion/ @grafana/grafana-backend-group
/pkg/services/encryption/ @grafana/grafana-operator-experience-squad
/pkg/services/folder/ @grafana/grafana-search-and-storage
/pkg/services/apiserver @grafana/grafana-app-platform-squad
/pkg/services/hooks/ @grafana/grafana-backend-group
/pkg/services/kmsproviders/ @grafana/grafana-operator-experience-squad
/pkg/services/licensing/ @grafana/grafana-operator-experience-squad
/pkg/services/navtree/ @grafana/grafana-backend-group
/pkg/services/notifications/ @grafana/grafana-backend-group
/pkg/services/org/ @grafana/grafana-backend-group
/pkg/services/dashboardimport/ @grafana/backend-platform
/pkg/services/dashboards/ @grafana/backend-platform
/pkg/services/dashboardversion/ @grafana/backend-platform
/pkg/services/encryption/ @grafana/backend-platform
/pkg/services/folder/ @grafana/backend-platform
/pkg/services/grafana-apiserver @grafana/grafana-app-platform-squad
/pkg/services/hooks/ @grafana/backend-platform
/pkg/services/kmsproviders/ @grafana/backend-platform
/pkg/services/licensing/ @grafana/backend-platform
/pkg/services/navtree/ @grafana/backend-platform
/pkg/services/notifications/ @grafana/backend-platform
/pkg/services/org/ @grafana/backend-platform
/pkg/services/playlist/ @grafana/grafana-app-platform-squad
/pkg/services/preference/ @grafana/grafana-backend-group
/pkg/services/provisioning/ @grafana/grafana-search-and-storage
/pkg/services/provisioning/alerting/ @grafana/alerting-backend
/pkg/services/query/ @grafana/grafana-app-platform-squad
/pkg/services/queryhistory/ @grafana/explore-squad
/pkg/services/quota/ @grafana/grafana-search-and-storage
/pkg/services/screenshot/ @grafana/grafana-backend-group
/pkg/services/search/ @grafana/grafana-search-and-storage
/pkg/services/searchusers/ @grafana/grafana-search-and-storage
/pkg/services/secrets/ @grafana/grafana-operator-experience-squad
/pkg/services/shorturls/ @grafana/grafana-backend-group
/pkg/services/sqlstore/ @grafana/grafana-search-and-storage
/pkg/services/ssosettings/ @grafana/identity-squad
/pkg/services/star/ @grafana/grafana-search-and-storage
/pkg/services/stats/ @grafana/grafana-backend-group
/pkg/services/tag/ @grafana/grafana-search-and-storage
/pkg/services/team/ @grafana/access-squad
/pkg/services/temp_user/ @grafana/grafana-backend-group
/pkg/services/updatechecker/ @grafana/grafana-backend-group
/pkg/services/user/ @grafana/access-squad
/pkg/services/validations/ @grafana/grafana-backend-group
/pkg/setting/ @grafana/grafana-backend-services-squad
/pkg/tests/ @grafana/grafana-backend-services-squad
/pkg/services/preference/ @grafana/backend-platform
/pkg/services/provisioning/ @grafana/backend-platform
/pkg/services/query/ @grafana/backend-platform
/pkg/services/queryhistory/ @grafana/backend-platform
/pkg/services/quota/ @grafana/backend-platform
/pkg/services/rendering/ @grafana/backend-platform
/pkg/services/screenshot/ @grafana/backend-platform
/pkg/services/search/ @grafana/backend-platform
/pkg/services/searchusers/ @grafana/backend-platform
/pkg/services/secrets/ @grafana/backend-platform
/pkg/services/shorturls/ @grafana/backend-platform
/pkg/services/sqlstore/ @grafana/backend-platform
/pkg/services/ssosettings/ @grafana/identity-access-team
/pkg/services/star/ @grafana/backend-platform
/pkg/services/stats/ @grafana/backend-platform
/pkg/services/tag/ @grafana/backend-platform
/pkg/services/team/ @grafana/identity-access-team
/pkg/services/temp_user/ @grafana/backend-platform
/pkg/services/updatechecker/ @grafana/backend-platform
/pkg/services/user/ @grafana/identity-access-team
/pkg/services/validations/ @grafana/backend-platform
/pkg/setting/ @grafana/backend-platform
/pkg/tests/ @grafana/backend-platform
/pkg/tests/apis/ @grafana/grafana-app-platform-squad
/pkg/tests/apis/alerting @grafana/grafana-app-platform-squad @grafana/alerting-backend
/pkg/tests/api/correlations/ @grafana/explore-squad
/pkg/tsdb/grafanads/ @grafana/grafana-backend-group
/pkg/tsdb/opentsdb/ @grafana/partner-datasources
/pkg/util/ @grafana/grafana-backend-group
/pkg/web/ @grafana/grafana-backend-group
/pkg/tsdb/grafanads/ @grafana/backend-platform
/pkg/tsdb/intervalv2/ @grafana/backend-platform
/pkg/tsdb/legacydata/ @grafana/backend-platform
/pkg/tsdb/opentsdb/ @grafana/backend-platform
/pkg/tsdb/sqleng/ @grafana/partner-datasources @grafana/oss-big-tent
/pkg/tsdb/sqleng/proxyutil @grafana/hosted-grafana-team
/pkg/util/ @grafana/backend-platform
/pkg/web/ @grafana/backend-platform
/pkg/infra/kvstore/ @grafana/backend-platform
/pkg/infra/fs/ @grafana/backend-platform
/pkg/infra/x/ @grafana/backend-platform
/pkg/infra/kvstore/ @grafana/grafana-backend-group
/pkg/infra/fs/ @grafana/grafana-backend-group
# devenv
# Backend code, developers environment
@@ -175,69 +161,66 @@
# Logs code, developers environment
/devenv/docker/blocks/loki* @grafana/observability-logs
/devenv/docker/blocks/elastic* @grafana/aws-datasources
/devenv/docker/blocks/elastic* @grafana/observability-logs
/devenv/docker/blocks/self-instrumentation* @grafana/observability-metrics
/devenv/bulk-dashboards/ @grafana/dashboards-squad
/devenv/bulk-folders/ @grafana/grafana-frontend-platform
/devenv/create_docker_compose.sh @grafana/grafana-backend-services-squad
/devenv/alert_rules.yaml @grafana/alerting-backend
/devenv/bulk_alerting_dashboards/ @grafana/alerting-backend-product
/devenv/create_docker_compose.sh @grafana/backend-platform
/devenv/dashboards.yaml @grafana/dashboards-squad
/devenv/datasources.yaml @grafana/grafana-backend-group
/devenv/datasources_docker.yaml @grafana/grafana-backend-group
/devenv/datasources.yaml @grafana/backend-platform
/devenv/datasources_docker.yaml @grafana/backend-platform
/devenv/dev-dashboards-without-uid/ @grafana/dashboards-squad
/devenv/dev-dashboards/ @grafana/dashboards-squad
/devenv/docker/blocks/alert_webhook_listener/ @grafana/alerting-backend
/devenv/docker/blocks/alert_webhook_listener/ @grafana/alerting-backend-product
/devenv/docker/blocks/clickhouse/ @grafana/partner-datasources
/devenv/docker/blocks/collectd/ @grafana/observability-metrics
/devenv/docker/blocks/etcd @grafana/grafana-app-platform-squad
/devenv/docker/blocks/grafana/ @grafana/grafana-as-code
/devenv/docker/blocks/graphite/ @grafana/partner-datasources
/devenv/docker/blocks/graphite09/ @grafana/partner-datasources
/devenv/docker/blocks/graphite1/ @grafana/partner-datasources
/devenv/docker/blocks/influxdb/ @grafana/partner-datasources
/devenv/docker/blocks/influxdb1/ @grafana/partner-datasources
/devenv/docker/blocks/jaeger/ @grafana/oss-big-tent
/devenv/docker/blocks/graphite/ @grafana/observability-metrics
/devenv/docker/blocks/graphite09/ @grafana/observability-metrics
/devenv/docker/blocks/graphite1/ @grafana/observability-metrics
/devenv/docker/blocks/influxdb/ @grafana/observability-metrics
/devenv/docker/blocks/influxdb1/ @grafana/observability-metrics
/devenv/docker/blocks/jaeger/ @grafana/observability-traces-and-profiling
/devenv/docker/blocks/maildev/ @grafana/alerting-frontend
/devenv/docker/blocks/mariadb/ @grafana/oss-big-tent
/devenv/docker/blocks/memcached/ @grafana/grafana-backend-group
/devenv/docker/blocks/mimir_backend/ @grafana/alerting-backend
/devenv/docker/blocks/mqtt/ @grafana/alerting-backend
/devenv/docker/blocks/mssql/ @grafana/partner-datasources
/devenv/docker/blocks/mssql_arm64/ @grafana/partner-datasources
/devenv/docker/blocks/mssql_tests/ @grafana/partner-datasources
/devenv/docker/blocks/mssql_tls/ @grafana/partner-datasources
/devenv/docker/blocks/mariadb/ @grafana/grafana-bi-squad
/devenv/docker/blocks/memcached/ @grafana/backend-platform
/devenv/docker/blocks/mimir_backend/ @grafana/alerting-backend-product
/devenv/docker/blocks/mssql/ @grafana/grafana-bi-squad
/devenv/docker/blocks/mssql_arm64/ @grafana/grafana-bi-squad
/devenv/docker/blocks/mssql_tests/ @grafana/grafana-bi-squad
/devenv/docker/blocks/mssql_tls/ @grafana/grafana-bi-squad
/devenv/docker/blocks/mysql/ @grafana/oss-big-tent
/devenv/docker/blocks/mysql_exporter/ @grafana/oss-big-tent
/devenv/docker/blocks/mysql_opendata/ @grafana/oss-big-tent
/devenv/docker/blocks/mysql_tests/ @grafana/oss-big-tent
/devenv/docker/blocks/opentsdb/ @grafana/partner-datasources
/devenv/docker/blocks/opentsdb/ @grafana/observability-metrics
/devenv/docker/blocks/postgres/ @grafana/oss-big-tent
/devenv/docker/blocks/postgres_tests/ @grafana/oss-big-tent
/devenv/docker/blocks/prometheus/ @grafana/observability-metrics
/devenv/docker/blocks/prometheus_random_data/ @grafana/observability-metrics
/devenv/docker/blocks/prometheus_high_card/ @grafana/observability-metrics
/devenv/docker/blocks/pyroscope/ @grafana/observability-traces-and-profiling
/devenv/docker/blocks/redis/ @bergquist
/devenv/docker/blocks/sensugo/ @grafana/grafana-backend-group
/devenv/docker/blocks/sensugo/ @grafana/backend-platform
/devenv/docker/blocks/slow_proxy/ @bergquist
/devenv/docker/blocks/smtp/ @bergquist
/devenv/docker/blocks/tempo/ @grafana/observability-traces-and-profiling
/devenv/docker/blocks/traefik/ @mckn
/devenv/docker/blocks/zipkin/ @grafana/oss-big-tent
/devenv/docker/blocks/webdav/ @grafana/alerting-backend
/devenv/docker/blocks/zipkin/ @grafana/observability-traces-and-profiling
/devenv/docker/blocks/webdav/ @grafana/alerting-backend-product
/devenv/docker/buildcontainer/ @bergquist
/devenv/docker/compose_header.yml @grafana/grafana-backend-services-squad
/devenv/docker/compose_header.yml @grafana/backend-platform
/devenv/docker/debtest/ @bergquist
/devenv/docker/ha-test-unified-alerting/ @grafana/alerting-backend
/devenv/docker/ha_test/ @grafana/grafana-backend-services-squad
/devenv/docker/loadtest/ @grafana/grafana-backend-services-squad
/devenv/docker/rpmtest/ @grafana/grafana-backend-services-squad
/devenv/docker/ha-test-unified-alerting/ @grafana/alerting-backend-product
/devenv/docker/ha_test/ @grafana/backend-platform
/devenv/docker/loadtest/ @grafana/backend-platform
/devenv/docker/rpmtest/ @grafana/backend-platform
/devenv/jsonnet/ @grafana/dataviz-squad
/devenv/local-npm/ @grafana/frontend-ops
/devenv/vscode/ @grafana/frontend-ops
/devenv/setup.sh @grafana/grafana-backend-services-squad
/devenv/plugins.yaml @grafana/plugins-platform-frontend
/devenv/setup.sh @grafana/backend-platform
# Emails
/emails/ @grafana/alerting-frontend
@@ -256,7 +239,6 @@
/Makefile @grafana/grafana-release-guild
/scripts/build/ @grafana/grafana-release-guild
/scripts/list-release-artifacts.sh @grafana/grafana-release-guild
/.trivyignore @grafana/grafana-backend-services-squad
# OSS Plugin Partnerships backend code
/pkg/tsdb/cloudwatch/ @grafana/aws-datasources
@@ -265,11 +247,13 @@
# Observability backend code
/pkg/tsdb/prometheus/ @grafana/observability-metrics
/pkg/tsdb/elasticsearch/ @grafana/aws-datasources
/pkg/tsdb/influxdb/ @grafana/observability-metrics
/pkg/tsdb/elasticsearch/ @grafana/observability-logs
/pkg/tsdb/graphite/ @grafana/observability-metrics
/pkg/tsdb/loki/ @grafana/observability-logs
/pkg/tsdb/tempo/ @grafana/observability-traces-and-profiling
/pkg/tsdb/grafana-pyroscope-datasource/ @grafana/observability-traces-and-profiling
/pkg/tsdb/parca/ @grafana/oss-big-tent
/pkg/tsdb/parca/ @grafana/observability-traces-and-profiling
# OSS Big Tent backend code
/pkg/tsdb/mysql/ @grafana/oss-big-tent
@@ -277,33 +261,31 @@
# Partner Datasources backend code
/pkg/tsdb/mssql/ @grafana/partner-datasources
/pkg/tsdb/influxdb/ @grafana/partner-datasources
/pkg/tsdb/graphite/ @grafana/partner-datasources
# Database migrations
/pkg/services/sqlstore/migrations/ @grafana/grafana-search-and-storage
*_mig.go @grafana/grafana-search-and-storage
/pkg/services/sqlstore/migrations/ @grafana/backend-platform @grafana/hosted-grafana-team
*_mig.go @grafana/backend-platform @grafana/hosted-grafana-team
# Grafana app platform
/pkg/services/live/ @grafana/grafana-app-platform-squad
/pkg/services/searchV2/ @grafana/grafana-app-platform-squad
/pkg/services/store/ @grafana/grafana-app-platform-squad
/pkg/infra/filestorage/ @grafana/grafana-app-platform-squad
/pkg/util/converter/ @grafana/grafana-app-platform-squad
/pkg/modules/ @grafana/grafana-app-platform-squad
/pkg/services/grpcserver/ @grafana/grafana-search-and-storage
/pkg/generated @grafana/grafana-app-platform-squad
/pkg/services/unifiedSearch/ @grafana/grafana-search-and-storage
/pkg/kindsysreport/ @grafana/grafana-app-platform-squad
/pkg/services/grpcserver/ @grafana/grafana-app-platform-squad
# Alerting
/pkg/services/ngalert/ @grafana/alerting-backend
/pkg/services/sqlstore/migrations/ualert/ @grafana/alerting-backend
/pkg/tests/api/alerting/ @grafana/alerting-backend
/pkg/services/ngalert/ @grafana/alerting-backend-product
/pkg/services/sqlstore/migrations/ualert/ @grafana/alerting-backend-product
/pkg/services/alerting/ @grafana/alerting-backend-product
/pkg/tests/api/alerting/ @grafana/alerting-backend-product
/public/app/features/alerting/ @grafana/alerting-frontend
/public/app/features/gops/ @grafana/alerting-frontend
# Library Services
/pkg/services/libraryelements/ @grafana/dashboards-squad
/pkg/services/librarypanels/ @grafana/dashboards-squad
/pkg/services/libraryelements/ @grafana/grafana-frontend-platform
/pkg/services/librarypanels/ @grafana/grafana-frontend-platform
# Plugins
/pkg/api/pluginproxy/ @grafana/plugins-platform-backend
@@ -319,7 +301,7 @@
/pkg/services/plugindashboards/ @grafana/plugins-platform-backend
# Backend code docs
/contribute/backend/ @grafana/grafana-backend-group
/contribute/backend/ @grafana/backend-platform
/crowdin.yml @grafana/grafana-frontend-platform
@@ -327,58 +309,41 @@
/public/app/core/internationalization/ @grafana/grafana-frontend-platform
/e2e/ @grafana/grafana-frontend-platform
/e2e/cloud-plugins-suite/ @grafana/partner-datasources
/e2e/plugin-e2e/plugin-e2e-api-tests/ @grafana/plugins-platform-frontend
/e2e/test-plugins/grafana-extensionstest-app/ @grafana/plugins-platform-frontend
# Packages
/packages/ @grafana/grafana-frontend-platform @grafana/plugins-platform-frontend
/packages/grafana-data/src/**/*logs* @grafana/observability-logs
/packages/grafana-data/src/transformations/ @grafana/dataviz-squad
/packages/grafana-e2e-selectors/ @grafana/grafana-frontend-platform
/packages/grafana-flamegraph/ @grafana/observability-traces-and-profiling
/packages/grafana-o11y-ds-frontend/ @grafana/observability-logs
/packages/grafana-o11y-ds-frontend/src/IntervalInput/ @grafana/observability-traces-and-profiling
/packages/grafana-o11y-ds-frontend/src/NodeGraph/ @grafana/observability-traces-and-profiling
/packages/grafana-o11y-ds-frontend/src/pyroscope/ @grafana/observability-traces-and-profiling
/packages/grafana-o11y-ds-frontend/src/SpanBar/ @grafana/observability-traces-and-profiling
/packages/grafana-o11y-ds-frontend/src/TraceToLogs/ @grafana/observability-traces-and-profiling
/packages/grafana-o11y-ds-frontend/src/TraceToMetrics/ @grafana/observability-traces-and-profiling
/packages/grafana-o11y-ds-frontend/src/TraceToProfiles/ @grafana/observability-traces-and-profiling
/packages/grafana-plugin-configs/ @grafana/plugins-platform-frontend
/packages/grafana-prometheus/ @grafana/observability-metrics
/packages/grafana-schema/src/**/*canvas* @grafana/dataviz-squad
/packages/grafana-schema/src/**/*tempo* @grafana/observability-traces-and-profiling
/packages/grafana-sql/ @grafana/partner-datasources @grafana/oss-big-tent
/packages/grafana-e2e/ @grafana/grafana-frontend-platform
/packages/grafana-ui/.storybook/ @grafana/plugins-platform-frontend
/packages/grafana-ui/src/components/ @grafana/grafana-frontend-platform
/packages/grafana-ui/src/components/BarGauge/ @grafana/dataviz-squad
/packages/grafana-ui/src/components/DataLinks/ @grafana/dataviz-squad
/packages/grafana-ui/src/components/DateTimePickers/ @grafana/grafana-frontend-platform
/packages/grafana-ui/src/components/Table/ @grafana/grafana-bi-squad
/packages/grafana-ui/src/components/Table/SparklineCell.tsx @grafana/grafana-bi-squad @grafana/app-o11y-visualizations
/packages/grafana-ui/src/components/Gauge/ @grafana/dataviz-squad
/packages/grafana-ui/src/components/PluginSignatureBadge/ @grafana/plugins-platform-frontend
/packages/grafana-ui/src/components/Sparkline/ @grafana/grafana-frontend-platform @grafana/app-o11y-visualizations
/packages/grafana-ui/src/components/Table/ @grafana/dataviz-squad
/packages/grafana-ui/src/components/Table/SparklineCell.tsx @grafana/dataviz-squad @grafana/app-o11y-visualizations
/packages/grafana-ui/src/components/BarGauge/ @grafana/dataviz-squad
/packages/grafana-ui/src/components/uPlot/ @grafana/dataviz-squad
/packages/grafana-ui/src/components/DataLinks/ @grafana/dataviz-squad
/packages/grafana-ui/src/components/ValuePicker/ @grafana/dataviz-squad
/packages/grafana-ui/src/components/VizLayout/ @grafana/dataviz-squad
/packages/grafana-ui/src/components/VizLegend/ @grafana/dataviz-squad
/packages/grafana-ui/src/components/VizRepeater/ @grafana/dataviz-squad
/packages/grafana-ui/src/components/VizTooltip/ @grafana/dataviz-squad
/packages/grafana-ui/src/components/Sparkline/ @grafana/grafana-frontend-platform @grafana/app-o11y-visualizations
/packages/grafana-ui/src/graveyard/Graph/ @grafana/dataviz-squad
/packages/grafana-ui/src/graveyard/GraphNG/ @grafana/dataviz-squad
/packages/grafana-ui/src/graveyard/TimeSeries/ @grafana/dataviz-squad
/packages/grafana-ui/src/utils/storybook/ @grafana/plugins-platform-frontend
/packages/grafana-data/src/transformations/ @grafana/grafana-bi-squad
/packages/grafana-data/src/**/*logs* @grafana/observability-logs
/packages/grafana-schema/src/**/*tempo* @grafana/observability-traces-and-profiling
/packages/grafana-schema/src/**/*canvas* @grafana/dataviz-squad
/packages/grafana-flamegraph/ @grafana/observability-traces-and-profiling
/plugins-bundled/ @grafana/plugins-platform-frontend
/packages/grafana-plugin-configs/ @grafana/plugins-platform-frontend
# root files, mostly frontend
/.browserslistrc @grafana/frontend-ops
/package.json @grafana/frontend-ops
/nx.json @grafana/frontend-ops
/project.json @grafana/frontend-ops
/.nxignore @grafana/frontend-ops
/tsconfig.json @grafana/frontend-ops
.browserslistrc @grafana/frontend-ops
package.json @grafana/frontend-ops
tsconfig.json @grafana/frontend-ops
/.editorconfig @grafana/frontend-ops
/.eslintignore @grafana/frontend-ops
/.gitattributes @grafana/frontend-ops
@@ -388,94 +353,85 @@
/.yarn @grafana/frontend-ops
/.yarnrc.yml @grafana/frontend-ops
/yarn.lock @grafana/frontend-ops
/lerna.json @grafana/frontend-ops
/babel.config.json @grafana/frontend-ops
lerna.json @grafana/frontend-ops
/.prettierrc.js @grafana/frontend-ops
/.eslintrc @grafana/frontend-ops
/.vim @zoltanbedi
/jest.config.js @grafana/frontend-ops
/latest.json @grafana/frontend-ops
/metadata.md @grafana/plugins-platform
/stylelint.config.js @grafana/frontend-ops
/tools/ @grafana/frontend-ops
/lefthook.yml @grafana/frontend-ops
/lefthook.rc @grafana/frontend-ops
/.husky/pre-commit @grafana/frontend-ops
/cypress.config.js @grafana/grafana-frontend-platform
/.levignore.js @grafana/plugins-platform-frontend
playwright.config.ts @grafana/plugins-platform-frontend
.husky/pre-commit @grafana/frontend-ops
cypress.config.js @grafana/grafana-frontend-platform
.levignore.js @grafana/plugins-platform-frontend
# public folder
/public/app/core/ @grafana/grafana-frontend-platform
/public/app/core/components/TimePicker/ @grafana/grafana-frontend-platform
/public/app/core/components/Layers/ @grafana/dataviz-squad
/public/app/core/components/TraceToLogs @grafana/observability-traces-and-profiling
/public/app/core/components/GraphNG/ @grafana/dataviz-squad
/public/app/core/components/TimeSeries/ @grafana/dataviz-squad
/public/app/core/components/TimelineChart/ @grafana/dataviz-squad
/public/app/core/components/Form/ @grafana/grafana-frontend-platform
/public/app/core/components/OptionsUI/ @grafana/dashboards-squad @grafana/dataviz-squad
/public/app/core/history/ @grafana/explore-squad
/public/app/features/all.ts @grafana/grafana-frontend-platform
/public/app/features/admin/ @grafana/identity-access-team
# Temp owners until Enterprise team takes over
/public/app/features/migrate-to-cloud @grafana/grafana-frontend-platform
/public/app/features/actions/ @grafana/dataviz-squad
/public/app/features/auth-config/ @grafana/identity-squad
/public/app/features/annotations/ @grafana/dashboards-squad
/public/app/features/api-keys/ @grafana/identity-squad
/public/app/features/auth-config/ @grafana/identity-access-team
/public/app/features/annotations/ @grafana/grafana-frontend-platform
/public/app/features/api-keys/ @grafana/identity-access-team
/public/app/features/canvas/ @grafana/dataviz-squad
/public/app/features/geo/ @grafana/dataviz-squad
/public/app/features/visualization/data-hover/ @grafana/dataviz-squad
/public/app/features/commandPalette/ @grafana/grafana-frontend-platform
/public/app/features/connections/ @grafana/plugins-platform-frontend
/public/app/features/connections/ @grafana/plugins-platform-frontend @mikkancso
/public/app/features/correlations/ @grafana/explore-squad
/public/app/features/dashboard/ @grafana/dashboards-squad
/public/app/features/dashboard/components/TransformationsEditor/ @grafana/dataviz-squad
/public/app/features/dashboard/components/TransformationsEditor/ @grafana/grafana-bi-squad
/public/app/features/dashboard-scene/ @grafana/dashboards-squad
/public/app/features/scopes/ @grafana/dashboards-squad
/public/app/features/datasources/ @grafana/plugins-platform-frontend
/public/app/features/datasources/ @grafana/plugins-platform-frontend @mikkancso
/public/app/features/dimensions/ @grafana/dataviz-squad
/public/app/features/dataframe-import/ @grafana/dataviz-squad
/public/app/features/dataframe-import/ @grafana/grafana-bi-squad
/public/app/features/explore/ @grafana/explore-squad
/public/app/features/expressions/ @grafana/observability-metrics
/public/app/features/folders/ @grafana/grafana-frontend-platform
/public/app/features/inspector/ @grafana/dashboards-squad
/public/app/features/invites/ @grafana/grafana-frontend-platform
/public/app/features/library-panels/ @grafana/dashboards-squad
/public/app/features/library-panels/ @grafana/grafana-frontend-platform
/public/app/features/logs/ @grafana/observability-logs
/public/app/features/live/ @grafana/dashboards-squad
/public/app/features/apiserver/ @grafana/grafana-app-platform-squad
/public/app/features/live/ @grafana/grafana-app-platform-squad
/public/app/features/manage-dashboards/ @grafana/dashboards-squad
/public/app/features/notifications/ @grafana/grafana-frontend-platform
/public/app/features/org/ @grafana/grafana-frontend-platform
/public/app/features/panel/ @grafana/dashboards-squad
/public/app/features/playlist/ @grafana/dashboards-squad
/public/app/features/plugins/ @grafana/plugins-platform-frontend
/public/app/features/plugins/sql/ @grafana/partner-datasources @grafana/oss-big-tent
/public/app/features/profile/ @grafana/grafana-frontend-platform
/public/app/features/query-library/ @grafana/explore-squad
/public/app/features/runtime/ @ryantxu
/public/app/features/query/ @grafana/dashboards-squad
/public/app/features/sandbox/ @grafana/grafana-frontend-platform
/public/app/features/browse-dashboards/ @grafana/grafana-frontend-platform
/public/app/features/search/ @grafana/grafana-frontend-platform
/public/app/features/serviceaccounts/ @grafana/identity-squad
/public/app/features/serviceaccounts/ @grafana/identity-access-team
/public/app/features/storage/ @grafana/grafana-app-platform-squad
/public/app/features/teams/ @grafana/access-squad
/public/app/features/teams/ @grafana/identity-access-team
/public/app/features/templating/ @grafana/dashboards-squad
/public/app/features/trails/ @grafana/observability-metrics
/public/app/features/transformers/ @grafana/dataviz-squad
/public/app/features/transformers/timeSeriesTable/ @grafana/dataviz-squad @grafana/app-o11y-visualizations
/public/app/features/users/ @grafana/access-squad
/public/app/features/trails/ @torkelo
/public/app/features/transformers/ @grafana/grafana-bi-squad
/public/app/features/transformers/timeSeriesTable/ @grafana/grafana-bi-squad @grafana/app-o11y-visualizations
/public/app/features/users/ @grafana/identity-access-team
/public/app/features/variables/ @grafana/dashboards-squad
/public/app/features/preferences/ @grafana/grafana-frontend-platform
/public/app/plugins/panel/alertGroups/ @grafana/alerting-frontend
/public/app/plugins/panel/alertlist/ @grafana/alerting-frontend
/public/app/plugins/panel/annolist/ @grafana/grafana-frontend-platform
/public/app/plugins/panel/barchart/ @grafana/dataviz-squad
/public/app/plugins/panel/bargauge/ @grafana/dataviz-squad
/public/app/plugins/panel/dashlist/ @grafana/grafana-frontend-platform
/public/app/plugins/panel/debug/ @ryantxu
/public/app/plugins/panel/datagrid/ @grafana/dataviz-squad
/public/app/plugins/panel/datagrid/ @grafana/grafana-bi-squad
/public/app/plugins/panel/gauge/ @grafana/dataviz-squad
/public/app/plugins/panel/gettingstarted/ @grafana/grafana-frontend-platform
/public/app/plugins/panel/graph/ @grafana/dataviz-squad
@@ -488,15 +444,15 @@ playwright.config.ts @grafana/plugins-platform-frontend
/public/app/plugins/panel/piechart/ @grafana/dataviz-squad
/public/app/plugins/panel/state-timeline/ @grafana/dataviz-squad
/public/app/plugins/panel/status-history/ @grafana/dataviz-squad
/public/app/plugins/panel/table/ @grafana/dataviz-squad
/public/app/plugins/panel/table/cells/SparklineCellOptionsEditor.tsx @grafana/dataviz-squad @grafana/app-o11y-visualizations
/public/app/plugins/panel/table-old/ @grafana/dataviz-squad
/public/app/plugins/panel/table/ @grafana/grafana-bi-squad
/public/app/plugins/panel/table/cells/SparklineCellOptionsEditor.tsx @grafana/grafana-bi-squad @grafana/app-o11y-visualizations
/public/app/plugins/panel/table-old/ @grafana/grafana-bi-squad
/public/app/plugins/panel/timeseries/ @grafana/dataviz-squad
/public/app/plugins/panel/trend/ @grafana/dataviz-squad
/public/app/plugins/panel/geomap/ @grafana/dataviz-squad
/public/app/plugins/panel/canvas/ @grafana/dataviz-squad
/public/app/plugins/panel/candlestick/ @grafana/dataviz-squad
/public/app/plugins/panel/live/ @grafana/dashboards-squad
/public/app/plugins/panel/live/ @grafana/grafana-app-platform-squad
/public/app/plugins/panel/news/ @grafana/grafana-frontend-platform
/public/app/plugins/panel/stat/ @grafana/dataviz-squad
/public/app/plugins/panel/text/ @grafana/grafana-frontend-platform
@@ -506,22 +462,19 @@ playwright.config.ts @grafana/plugins-platform-frontend
/public/app/routes/ @grafana/grafana-frontend-platform
/public/app/store/ @grafana/grafana-frontend-platform
/public/app/types/ @grafana/grafana-frontend-platform
/public/app/types/alerting.ts @grafana/alerting-frontend
/public/app/types/unified-alerting-dto.ts @grafana/alerting-frontend
/public/dashboards/ @grafana/dashboards-squad
/public/fonts/ @grafana/alerting-frontend
/public/gazetteer/ @ryantxu
/public/img/ @grafana/grafana-frontend-platform
/public/lib/ @grafana/grafana-frontend-platform
/public/lib/monaco-languages/kusto.ts @grafana/partner-datasources
/public/maps/ @ryantxu
/public/robots.txt @grafana/frontend-ops
/public/fonts/ @grafana/grafana-frontend-platform
/public/sass/ @grafana/grafana-frontend-platform
/public/test/ @grafana/grafana-frontend-platform
/public/test/helpers/alertingRuleEditor.tsx @grafana/alerting-frontend
/public/views/ @grafana/grafana-frontend-platform
/public/views/swagger.html @grafana/grafana-app-platform-squad
/public/swagger/ @grafana/grafana-app-platform-squad
/public/views/swagger.html @grafana/backend-platform
/public/app/features/explore/Logs/ @grafana/observability-logs
@@ -531,9 +484,9 @@ playwright.config.ts @grafana/plugins-platform-frontend
/public/app/features/explore/FlameGraph/ @grafana/observability-traces-and-profiling
/public/app/features/explore/TraceView/ @grafana/observability-traces-and-profiling
/public/api-merged.json @grafana/grafana-backend-group
/public/api-enterprise-spec.json @grafana/grafana-backend-group
/public/openapi3.json @grafana/grafana-backend-group
/public/api-merged.json @grafana/backend-platform
/public/api-enterprise-spec.json @grafana/backend-platform
/public/openapi3.json @grafana/backend-platform
/public/app/angular/ @torkelo
/public/app/app.ts @grafana/frontend-ops
/public/app/dev.ts @grafana/frontend-ops
@@ -545,13 +498,13 @@ playwright.config.ts @grafana/plugins-platform-frontend
/scripts/benchmark-access-control.sh @grafana/access-squad
/scripts/benchmark-access-control.sh @grafana/identity-access-team
/scripts/check-breaking-changes.sh @grafana/plugins-platform-frontend
/scripts/ci-* @grafana/grafana-release-guild
/scripts/circle-* @grafana/grafana-release-guild
/scripts/publish-npm-packages.sh @grafana/grafana-release-guild @grafana/plugins-platform-frontend
/scripts/validate-npm-packages.sh @grafana/grafana-release-guild @grafana/plugins-platform-frontend
/scripts/ci-frontend-metrics.sh @grafana/grafana-frontend-platform @grafana/plugins-platform-frontend @grafana/dataviz-squad
/scripts/ci-frontend-metrics.sh @grafana/grafana-frontend-platform @grafana/plugins-platform-frontend @grafana/grafana-bi-squad
/scripts/cli/ @grafana/grafana-frontend-platform
/scripts/clean-git-or-error.sh @grafana/grafana-as-code
/scripts/grafana-server/ @grafana/grafana-frontend-platform
@@ -569,19 +522,14 @@ playwright.config.ts @grafana/plugins-platform-frontend
/scripts/cleanup-husky.sh @grafana/frontend-ops
/scripts/verify-repo-update/ @grafana/grafana-release-guild
/scripts/generate-icon-bundle.js @grafana/plugins-platform-frontend @grafana/grafana-frontend-platform
/scripts/generate-rtk-apis.ts @grafana/grafana-frontend-platform
/scripts/generate-alerting-rtk-apis.ts @grafana/alerting-frontend
/scripts/levitate-parse-json-report.js @grafana/plugins-platform-frontend
/scripts/levitate-show-affected-plugins.js @grafana/plugins-platform-frontend
/scripts/codemods/explicit-barrel-imports.cjs @grafana/frontend-ops
/scripts/**/generate-transformations* @grafana/dataviz-squad
/scripts/docs/generate-transformations.ts @grafana/grafana-bi-squad
/scripts/webpack/ @grafana/frontend-ops
/scripts/generate-a11y-report.sh @grafana/grafana-frontend-platform
.pa11yci.conf.js @grafana/grafana-frontend-platform
.pa11yci-pr.conf.js @grafana/grafana-frontend-platform
.betterer.results @grafanabot
.betterer.results.json @grafanabot
.betterer.ts @grafana/grafana-frontend-platform
# @grafana/ui component documentation
@@ -593,75 +541,67 @@ playwright.config.ts @grafana/plugins-platform-frontend
# Core datasources
/public/app/plugins/datasource/dashboard/ @grafana/dashboards-squad
/public/app/plugins/datasource/cloudwatch/ @grafana/aws-datasources
/public/app/plugins/datasource/elasticsearch/ @grafana/aws-datasources
/public/app/plugins/datasource/elasticsearch/ @grafana/observability-logs
/public/app/plugins/datasource/grafana/ @grafana/grafana-frontend-platform
/public/app/plugins/datasource/grafana-testdata-datasource/ @grafana/plugins-platform-frontend
/public/app/plugins/datasource/azuremonitor/ @grafana/partner-datasources
/public/app/plugins/datasource/graphite/ @grafana/partner-datasources
/public/app/plugins/datasource/influxdb/ @grafana/partner-datasources
/public/app/plugins/datasource/jaeger/ @grafana/oss-big-tent
/public/app/plugins/datasource/graphite/ @grafana/observability-metrics
/public/app/plugins/datasource/influxdb/ @grafana/observability-metrics
/public/app/plugins/datasource/jaeger/ @grafana/observability-traces-and-profiling
/public/app/plugins/datasource/loki/ @grafana/observability-logs
/public/app/plugins/datasource/mixed/ @grafana/dashboards-squad
/public/app/plugins/datasource/mssql/ @grafana/partner-datasources
/public/app/plugins/datasource/mssql/ @grafana/grafana-bi-squad
/public/app/plugins/datasource/mysql/ @grafana/oss-big-tent
/public/app/plugins/datasource/opentsdb/ @grafana/partner-datasources
/public/app/plugins/datasource/opentsdb/ @grafana/observability-metrics
/public/app/plugins/datasource/grafana-postgresql-datasource/ @grafana/oss-big-tent
/public/app/plugins/datasource/prometheus/ @grafana/observability-metrics
/public/app/plugins/datasource/cloud-monitoring/ @grafana/partner-datasources
/public/app/plugins/datasource/zipkin/ @grafana/oss-big-tent
/public/app/plugins/datasource/zipkin/ @grafana/observability-traces-and-profiling
/public/app/plugins/datasource/tempo/ @grafana/observability-traces-and-profiling
/public/app/plugins/datasource/grafana-pyroscope-datasource/ @grafana/observability-traces-and-profiling
/public/app/plugins/datasource/parca/ @grafana/oss-big-tent
/public/app/plugins/datasource/parca/ @grafana/observability-traces-and-profiling
/public/app/plugins/datasource/alertmanager/ @grafana/alerting-squad
# Grafana Sharing Squad
/public/app/features/dashboard-scene/sharing/ @grafana/sharing-squad
/public/app/features/dashboard/components/ShareModal/ @grafana/sharing-squad
/public/app/features/manage-dashboards/components/PublicDashboardListTable/ @grafana/sharing-squad
/public/app/features/dashboard/containers/PublicDashboardPage.tsx @grafana/sharing-squad
/public/app/features/manage-dashboards/components/SnapshotListTable.tsx @grafana/sharing-squad
/pkg/api/render.go @grafana/sharing-squad
/pkg/services/dashboardsnapshots/ @grafana/sharing-squad
/pkg/services/publicdashboards/ @grafana/sharing-squad
/pkg/services/rendering/ @grafana/sharing-squad
# SSE - Server Side Expressions
/pkg/expr/ @grafana/observability-metrics
# Cloud middleware
/grafana-mixin/ @grafana/grafana-backend-services-squad
/grafana-mixin/ @grafana/hosted-grafana-team
# Grafana authentication and authorization
/pkg/login/ @grafana/identity-squad
/pkg/services/accesscontrol/ @grafana/access-squad
/pkg/login/ @grafana/identity-access-team
/pkg/services/accesscontrol/ @grafana/identity-access-team
/pkg/services/anonymous/ @grafana/identity-access-team
/pkg/services/auth/ @grafana/identity-squad
/pkg/services/authn/ @grafana/identity-squad
/pkg/services/authz/ @grafana/access-squad
/pkg/services/signingkeys/ @grafana/identity-squad
/pkg/services/dashboards/accesscontrol.go @grafana/access-squad
/pkg/services/datasources/guardian/ @grafana/access-squad
/pkg/services/guardian/ @grafana/access-squad
/pkg/services/ldap/ @grafana/identity-squad
/pkg/services/login/ @grafana/identity-squad
/pkg/services/loginattempt/ @grafana/identity-squad
/pkg/services/auth/ @grafana/identity-access-team
/pkg/services/authn/ @grafana/identity-access-team
/pkg/services/signingkeys/ @grafana/identity-access-team
/pkg/services/dashboards/accesscontrol.go @grafana/identity-access-team
/pkg/services/datasources/guardian/ @grafana/identity-access-team
/pkg/services/guardian/ @grafana/identity-access-team
/pkg/services/ldap/ @grafana/identity-access-team
/pkg/services/login/ @grafana/identity-access-team
/pkg/services/loginattempt/ @grafana/identity-access-team
/pkg/services/extsvcauth/ @grafana/identity-access-team
/pkg/services/oauthtoken/ @grafana/identity-squad
/pkg/services/serviceaccounts/ @grafana/identity-squad
/public/app/core/components/RolePicker/ @grafana/access-squad
/pkg/services/oauthtoken/ @grafana/identity-access-team
/pkg/services/serviceaccounts/ @grafana/identity-access-team
# Support bundles
/public/app/features/support-bundles/ @grafana/identity-access-team
/pkg/services/supportbundles/ @grafana/identity-access-team
# Grafana Operator Experience Team
/pkg/infra/httpclient/httpclientprovider/sigv4_middleware.go @grafana/grafana-operator-experience-squad
/pkg/infra/httpclient/httpclientprovider/sigv4_middleware_test.go @grafana/grafana-operator-experience-squad
/pkg/services/caching/ @grafana/grafana-operator-experience-squad
/pkg/services/cloudmigration/ @grafana/grafana-operator-experience-squad
/pkg/services/gcom/ @grafana/grafana-operator-experience-squad
# Feature toggles
/pkg/services/featuremgmt/ @grafana/grafana-backend-services-squad
/pkg/services/featuremgmt/ @grafana/grafana-operator-experience-squad
# Kind definitions
/kinds/dashboard @grafana/dashboards-squad
@@ -670,20 +610,18 @@ playwright.config.ts @grafana/plugins-platform-frontend
# Kind system and code generation
embed.go @grafana/grafana-as-code
/pkg/kinds/ @grafana/grafana-as-code
/pkg/cuectx/ @grafana/grafana-as-code
/pkg/registry/ @grafana/grafana-as-code
/pkg/registry/apis/ @grafana/grafana-app-platform-squad
/pkg/registry/apis/alerting @grafana/grafana-app-platform-squad @grafana/alerting-backend
/pkg/registry/apis/query @grafana/grafana-datasources-core-services
/pkg/codegen/ @grafana/grafana-as-code
/pkg/codegen/generators @grafana/grafana-as-code
/pkg/kinds/*/*_gen.go @grafana/grafana-as-code
/pkg/registry/schemas/ @grafana/grafana-as-code
/pkg/registry/corekind/ @grafana/grafana-as-code
/public/app/plugins/*gen.go @grafana/grafana-as-code
/cue.mod/ @grafana/grafana-as-code
# GitHub Workflows and Templates
/.github/CODEOWNERS @tolzhabayev
/.github/ISSUE_TEMPLATE/ @torkelo @sympatheticmoose
/.github/ISSUE_TEMPLATE/ @torkelo
/.github/PULL_REQUEST_TEMPLATE.md @torkelo
/.github/bot.md @torkelo
/.github/commands.json @torkelo
@@ -694,13 +632,11 @@ embed.go @grafana/grafana-as-code
/.github/pr-commands.json @marefr
/.github/renovate.json5 @grafana/frontend-ops
/.github/teams.yml @armandgrillet
/.github/workflows/alerting-swagger-gen.yml @grafana/alerting-backend
/.github/workflows/alerting-swagger-gen.yml @grafana/alerting-backend-product
/.github/workflows/auto-milestone.yml @grafana/grafana-release-guild
/.github/workflows/backport.yml @grafana/grafana-release-guild
/.github/workflows/bump-version.yml @grafana/grafana-release-guild
/.github/workflows/close-milestone.yml @grafana/grafana-release-guild
/.github/workflows/release-pr.yml @grafana/grafana-release-guild
/.github/workflows/release-comms.yml @grafana/grafana-release-guild
/.github/workflows/codeowners-validator.yml @tolzhabayev
/.github/workflows/codeql-analysis.yml @DanCech
/.github/workflows/commands.yml @torkelo
@@ -729,22 +665,19 @@ embed.go @grafana/grafana-as-code
/.github/workflows/stale.yml @grafana/grafana-release-guild
/.github/workflows/update-changelog.yml @grafana/grafana-release-guild
/.github/workflows/update-make-docs.yml @grafana/docs-tooling
/.github/workflows/scripts/kinds/verify-kinds.go @grafana/platform-cat
/.github/workflows/publish-kinds-next.yml @grafana/platform-cat
/.github/workflows/publish-kinds-release.yml @grafana/platform-cat
/.github/workflows/verify-kinds.yml @grafana/platform-cat
/.github/workflows/snyk.yml @grafana/security-team
/.github/workflows/scripts/kinds/verify-kinds.go @grafana/grafana-as-code
/.github/workflows/publish-kinds-next.yml @grafana/grafana-as-code
/.github/workflows/publish-kinds-release.yml @grafana/grafana-as-code
/.github/workflows/verify-kinds.yml @grafana/grafana-as-code
/.github/workflows/dashboards-issue-add-label.yml @grafana/dashboards-squad
/.github/workflows/ephemeral-instances-pr-comment.yml @grafana/grafana-backend-services-squad
/.github/workflows/ephemeral-instances-pr-comment.yml @grafana/grafana-operator-experience-squad
/.github/workflows/ephemeral-instances-pr-opened-closed.yml @grafana/grafana-operator-experience-squad
/.github/workflows/create-security-patch-from-security-mirror.yml @grafana/grafana-release-guild
/.github/workflows/core-plugins-build-and-release.yml @grafana/plugins-platform-frontend @grafana/plugins-platform-backend
/.github/workflows/i18n-crowdin-upload.yml @grafana/grafana-frontend-platform
/.github/workflows/i18n-crowdin-download.yml @grafana/grafana-frontend-platform
/.github/workflows/pr-go-workspace-check.yml @grafana/grafana-app-platform-squad
/.github/workflows/pr-k8s-codegen-check.yml @grafana/grafana-app-platform-squad
/.github/workflows/go_lint.yml @grafana/grafana-backend-services-squad
/.github/workflows/trivy-scan.yml @grafana/grafana-backend-services-squad
/.github/workflows/changelog.yml @zserge
/.github/workflows/actions/changelog @zserge
/.github/workflows/i18n-crowdin-fix-files.yml @grafana/grafana-frontend-platform
/.github/workflows/feature-toggle-cleanup.yml @tolzhabayev
/.github/workflows/scripts/feature-toggle-cleanup/feature-toggle-cleanup.js @tolzhabayev
# Generated files not requiring owner approval
/packages/grafana-data/src/types/featureToggles.gen.ts @grafanabot
@@ -756,10 +689,11 @@ embed.go @grafana/grafana-as-code
# Conf
/conf/defaults.ini @torkelo
/conf/sample.ini @torkelo
/conf/ldap.toml @grafana/identity-squad
/conf/ldap_multiple.toml @grafana/identity-squad
/conf/provisioning/access-control/ @grafana/access-squad
/conf/provisioning/alerting/ @grafana/alerting-backend
/conf/ldap.toml @grafana/identity-access-team
/conf/ldap_multiple.toml @grafana/identity-access-team
/conf/provisioning/access-control/ @grafana/identity-access-team
/conf/provisioning/alerting/ @grafana/alerting-backend-product
/conf/provisioning/dashboards/ @grafana/dashboards-squad
/conf/provisioning/datasources/ @grafana/plugins-platform-backend
/conf/provisioning/notifiers/ @bergquist
/conf/provisioning/plugins/ @grafana/plugins-platform-backend

View File

@@ -1,45 +0,0 @@
---
name: New data source request
description: Raise a request for a new data source plugin
title: "[New Data Source]: <name-of-service>"
labels:
- area/datasource,type/new-plugin-request
body:
- type: markdown
attributes:
value: |
Thank you for requesting a new data source plugin!
We greatly appreciate feedback from our community about which new data sources would be beneficial.
Grafana Labs regularly reviews these requests and uses them to inform our prioritization. Note: we cannot offer any guarantees on whether we or our community will build a given data source.
Please check our [roadmap](https://github.com/orgs/grafana/projects/619?pane=info) for existing requests and subscribe to stay informed of our plans. If no request exists, please fill out the following information.
Please do not request support or file bug reports and feature requests for existing plugins here.
- For support, please use the community support resources [here](https://grafana.com/help/).
- Please consider the `New Bug Report` or `Feature Requests` [issue templates](https://github.com/grafana/grafana/issues/new/choose) for other requests.
- type: textarea
id: background
attributes:
label: Background
description: Tell us about the service you would like to see integrated as a data source
placeholder: ACME_DB is an open source time-series database that is used by many organizations to store their metrics data. It is a popular choice for monitoring and observability.
validations:
required: true
- type: textarea
id: use_case
attributes:
label: Use case
description: Describe any key requirements or data you would need surfaced, ideally including why they are useful for you.
placeholder: My team uses ACME_DB as the application database to monitor our produciton workloads, so we'd like to alert on it and visualize ACME_DB data next to our logs and traces in Grafana.
validations:
required: true
- type: checkboxes
attributes:
label: Contribution
description: If you are interested in creating the data source yourself and contributing to the [plugin catalog](https://grafana.com/grafana/plugins/), please fill in the following
options:
- label: Are you looking to create the plugin?
- label: Are you affiliated with the project/product the data source integrates with?
- label: Does the plugin integrate with a commercial product?

View File

@@ -0,0 +1,39 @@
---
name: '@grafana/ui component request'
about: Suggest a component for the @grafana/ui package
labels: 'area/grafana/ui'
---
<!--
By using this template you will make it easier for us to make sure that documentation and implementation stays up to date for every component in @grafana/ui
Thank you!
-->
**Why is this component needed**:
<!-- Explain your use case -->
___
- [ ] Is/could it be used in more than one place in Grafana?
**Where is/could it be used?**:
___
- [ ] Post screenshots possible.
- [ ] It has a single use case.
- [ ] It is/could be used in multiple places.
**Implementation** (Checklist meant for the person implementing the component)
- [ ] Component has a story in Storybook.
- [ ] Props and naming follows [our style guide](https://github.com/grafana/grafana/blob/main/contribute/style-guides/frontend.md).
- [ ] It is extendable (rest props are spread, styles with className work, and so on).
- [ ] Uses [theme for spacing, colors, and so on](https://github.com/grafana/grafana/blob/main/contribute/style-guides/themes.md).
- [ ] Works with both light and dark theme.
**Documentation**
- [ ] Properties are documented.
- [ ] Use cases are described.
- [ ] Code examples for the different use cases.
- [ ] Dos and don'ts.
- [ ] Styling guidelines, specific color usage (if applicable).

43
.github/ISSUE_TEMPLATE/4-UX-design.yaml vendored Normal file
View File

@@ -0,0 +1,43 @@
name: UX design issue
description: Create an issue for delivering wireframes, mockups or other design solutions.
title: "UX: "
labels: ["type/ux"]
body:
- type: textarea
id: background
attributes:
label: "Background / Why we're doing this"
description: Describe the problem and background of the issue. This could include research insights that inform the design changes, unmet user needs, or other usability issues.
placeholder: Add UI improvements to make Grafana Alerting alert creation easier based on usability test results.
validations:
required: true
- type: dropdown
attributes:
label: Is there existing research for this?
description: Please link research results or insights in the Background section if you have any. If no research was conducted, you might want to consider usability testing your design later.
options: [
"Yes, I have linked it",
"No research yet"
]
validations:
required: true
- type: textarea
id: problems-or-tasks
attributes:
label: Problems or tasks
description: Describe problems the new design should solve or tasks the user needs to complete.
placeholder:
value: |
- A problem we're trying to solve
- A task the user needs to accomplish
- …
validations:
required: false
- type: textarea
attributes:
label: Deliverables
description: Add a checklist of deliverables here. You can later add links to each deliverable.
value: |
- Figma mockup
- Miro board
- …

17
.github/ISSUE_TEMPLATE/5-chore.md vendored Normal file
View File

@@ -0,0 +1,17 @@
---
name: Chore
about: Create an issue for a chore needing completion
labels: 'type: chore'
---
<!--
Please use this template to create your chore issue. You can use this template if you spot an out-of-date README, discover a misspelling, or happen upon a deeply nested 7-layer for-loop that could be better handled another way. Please use this template for your non-bug related fixes/updates/refactors.
- Questions should be posted to: https://community.grafana.com
- Use query inspector to troubleshoot issues: https://bit.ly/2XNF6YS
- How to record and attach gif: https://bit.ly/2Mi8T6K
-->
**What is the chore?**:
**Is there anything else we need to know?**:

View File

@@ -0,0 +1,65 @@
---
name: Saga contribution template
description: Contribute to the design system.
title: "Saga: "
labels:
- area/grafana/ui, design-system
body:
- type: markdown
attributes:
value: |
By using this template, you help expand our component and pattern solutions within the design system and let others reuse your work! You can contribute bug or design defect fixes, component, and pattern enhancements, or even net-new components! This template brings visibility to the great work everyone already does and in turn helps reduce duplicate efforts.
Thank you!
- type: checkboxes
attributes:
label: What type of contribution is this?
description: null
options:
- label: Fix - bug, design defect, typo, documentation conciseness
- label: Unification - combining similar components/patterns into a single
solution
- label: Proposal - net-new component, additions, variants
validations:
required: true
- type: textarea
id: background
attributes:
label: Why is this needed?
description: Explain the use case and where it can be used.
placeholder: null
validations:
required: true
- type: textarea
id: use_case
attributes:
label: Where is this or where can it be used?
description: Explain the current/future use case, be sure to include areas of impact
placeholder: null
validations:
required: true
- type: textarea
attributes:
label: Deliverables
description: Add a checklist of deliverables here. You can later add links to
each deliverable.
value: |
- Figma mockup
- Storybook story
- …
- type: checkboxes
attributes:
label: Contribution guiding principles
description: Use this checklist of guiding principles to ensure your
contribution makes Grafana a better product
options:
- label: Universal - not specific to a single product feature; able to be used
product-wide
- label: Accessible - inclusive to all types of users and assistive tools
- label: Flexible - thoughtfully built and designed to solve various
configurations and situations
- label: Coherent - follows existing visual styling and patterns
- label: Defined - documented clearly and concisely for ease of understanding
- label: Distinct - solves a unique gap or problem that cannot be solved with
current solutions
validations:
required: false

View File

@@ -47,4 +47,4 @@ Fixes #
Please check that:
- [ ] It works as expected from a user's perspective.
- [ ] If this is a pre-GA feature, it is behind a feature toggle.
- [ ] The docs are updated, and if this is a [notable improvement](https://grafana.com/docs/writers-toolkit/contribute/release-notes/#how-to-determine-if-content-belongs-in-whats-new), it's added to our [What's New](https://grafana.com/docs/writers-toolkit/contribute/release-notes/) doc.
- [ ] The docs are updated, and if this is a [notable improvement](https://grafana.com/docs/writers-toolkit/writing-guide/contribute-release-notes/#how-to-determine-if-content-belongs-in-a-whats-new-document), it's added to our [What's New](https://grafana.com/docs/writers-toolkit/writing-guide/contribute-release-notes/) doc.

4
.github/bot.md vendored
View File

@@ -4,8 +4,8 @@ The bot is configured via [commands.json](https://github.com/grafana/grafana/blo
Comment commands:
* Write the word `/duplicate #<number>` anywhere in a comment and the bot will add the correct label and standard message.
* Write the word `/needsMoreInfo` anywhere in a comment and the bot will add the correct label and standard message.
* Write the word `/duplicate #<number>` anywhere in a comment and the bot will add the correct label and standard message.
* Write the word `/needsMoreInfo` anywhere in a comment and the bot will add the correct label and standard message.
Label commands:

1028
.github/commands.json vendored

File diff suppressed because it is too large Load Diff

View File

@@ -1,11 +1,9 @@
[
{
"type": "author",
"memberOf": {
"org": "grafana"
},
"memberOf": { "org": "grafana" },
"noLabels": true,
"addLabel": "internal",
"comment": " please add one or more appropriate labels. Here are some tips:\r\n\r\n- if you are making an issue, TODO, or reminder for yourself or your team, please add one label that best describes the product or feature area. Please also add the issue to your project board. :rocket:\r\n\r\n- if you are making an issue for any other reason (docs typo, you found a bug, etc), please add at least one label that best describes the product or feature that you are discussing (e.g. `area/alerting`, `datasource/loki`, `type/docs`, `type/bug`, etc). [Our issue triage](https://github.com/grafana/grafana/blob/main/contribute/ISSUE_TRIAGE.md#3-categorize-an-issue) doc also provides additional guidance on labeling. :rocket:\r\n\r\n Thank you! :heart:"
"comment": " please add one or more appropriate labels. Here are some tips:\r\n\r\n- if you are making an issue, TODO, or reminder for yourself or your team, please add one label that best describes the product or feature area. Please also add the issue to your project board. :rocket:\r\n\r\n- if you are making an issue for any other reason (docs typo, you found a bug, etc), please add at least one label that best describes the product or feature that you are discussing (e.g. `area/alerting`, `datasource/loki`, `type/docs`, `type/bug`, etc). [Our issue triage](https://github.com/grafana/grafana/blob/main/ISSUE_TRIAGE.md#3-categorizing-an-issue) doc also provides additional guidance on labeling. :rocket:\r\n\r\n Thank you! :heart:"
}
]
]

View File

@@ -29,4 +29,4 @@
"query": "is:open is:pull-request"
}
]
}
}

View File

@@ -1,4 +1,11 @@
[
{
"type": "check-milestone",
"title": "Milestone Check",
"targetUrl": "https://github.com/grafana/grafana/blob/main/contribute/merge-pull-request.md#assign-a-milestone",
"success": "Milestone set",
"failure": "Milestone not set"
},
{
"type": "check-changelog",
"title": "Changelog Check",
@@ -20,4 +27,4 @@
},
"targetUrl": "https://github.com/grafana/grafana/blob/main/contribute/merge-pull-request.md#include-in-changelog-and-release-notes"
}
]
]

View File

@@ -2,8 +2,8 @@
{
"type": "changedfiles",
"matches": [
"docs/**/*",
"contribute/**/*"
"docs/**/*",
"contribute/**/*"
],
"action": "updateLabel",
"addLabel": "type/docs"
@@ -11,21 +11,22 @@
{
"type": "changedfiles",
"matches": [
"public/**/*",
"packages/**/*",
"e2e/**/*",
"plugins-bundled/**/*",
"scripts/build/release-packages.sh",
"scripts/circle-release-next-packages.sh",
"scripts/ci-frontend-metrics.sh",
"scripts/grunt/**/*",
"scripts/webpack/**/*",
"package.json",
"tsconfig.json",
"lerna.json",
".prettierrc.js",
".eslintrc",
"**/*.mdx"
"public/**/*",
"packages/**/*",
"e2e/**/*",
"plugins-bundled/**/*",
"scripts/build/release-packages.sh",
"scripts/circle-release-next-packages.sh",
"scripts/ci-frontend-metrics.sh",
"scripts/grunt/**/*",
"scripts/webpack/**/*",
"package.json",
"tsconfig.json",
"lerna.json",
".babelrc",
".prettierrc.js",
".eslintrc",
"**/*.mdx"
],
"action": "updateLabel",
"addLabel": "area/frontend"
@@ -33,11 +34,11 @@
{
"type": "changedfiles",
"matches": [
"**/*.go",
"go.mod",
"go.sum",
"contribute/style-guides/backend.md",
"contribute/architecture/backend/**/*"
"**/*.go",
"go.mod",
"go.sum",
"contribute/style-guides/backend.md",
"contribute/architecture/backend/**/*"
],
"action": "updateLabel",
"addLabel": "area/backend"
@@ -45,17 +46,15 @@
{
"type": "changedfiles",
"matches": [
"pkg/services/sqlstore/migrations/**/*",
"**/*_mig.go"
"pkg/services/sqlstore/migrations/**/*",
"**/*_mig.go"
],
"action": "updateLabel",
"addLabel": "area/backend/db/migration"
},
{
"type": "changedfiles",
"matches": [
"public/app/features/explore/**/*"
],
"matches": [ "public/app/features/explore/**/*"],
"action": "updateLabel",
"addLabel": "area/explore"
},
@@ -84,357 +83,372 @@
},
{
"type": "changedfiles",
"matches": [
"public/app/plugins/datasource/azuremonitor/**/*",
"pkg/tsdb/azuremonitor/**/*"
],
"matches": [ "public/app/plugins/datasource/azuremonitor/**/*", "pkg/tsdb/azuremonitor/**/*"],
"action": "updateLabel",
"addLabel": "datasource/Azure"
},
{
"type": "changedfiles",
"matches": [
"public/app/plugins/datasource/cloud-monitoring/**/*",
"pkg/tsdb/cloud-monitoring/**/*"
],
"matches": [ "public/app/plugins/datasource/cloud-monitoring/**/*", "pkg/tsdb/cloud-monitoring/**/*"],
"action": "updateLabel",
"addLabel": "datasource/GoogleCloudMonitoring"
},
{
"type": "changedfiles",
"matches": [
"public/app/plugins/datasource/cloudwatch/**/*",
"pkg/tsdb/cloudwatch/**/*"
],
"matches": [ "public/app/plugins/datasource/cloudwatch/**/*", "pkg/tsdb/cloudwatch/**/*"],
"action": "updateLabel",
"addLabel": "datasource/CloudWatch"
},
{
"type": "changedfiles",
"matches": [
"public/app/plugins/datasource/elasticsearch/**/*",
"pkg/tsdb/elasticsearch/**/*"
],
"matches": [ "public/app/plugins/datasource/elasticsearch/**/*", "pkg/tsdb/elasticsearch/**/*"],
"action": "updateLabel",
"addLabel": "datasource/Elasticsearch"
},
{
"type": "changedfiles",
"matches": [
"public/app/plugins/datasource/graphite/**/*",
"pkg/tsdb/graphite/**/*"
],
"matches": [ "public/app/plugins/datasource/graphite/**/*", "pkg/tsdb/graphite/**/*"],
"action": "updateLabel",
"addLabel": "datasource/Graphite"
},
{
"type": "changedfiles",
"matches": [
"public/app/plugins/datasource/influxdb/**/*",
"pkg/tsdb/influx/**/*"
],
"matches": [ "public/app/plugins/datasource/influxdb/**/*", "pkg/tsdb/influx/**/*"],
"action": "updateLabel",
"addLabel": "datasource/InfluxDB"
},
{
"type": "changedfiles",
"matches": [
"public/app/plugins/datasource/jaeger/**/*"
],
"matches": [ "public/app/plugins/datasource/jaeger"],
"action": "updateLabel",
"addLabel": "datasource/Jaeger"
},
{
"type": "changedfiles",
"matches": [
"public/app/plugins/datasource/loki/**/*",
"pkg/tsdb/loki/**/*"
],
"matches": [ "public/app/plugins/datasource/loki/**/*", "pkg/tsdb/loki/**/*"],
"action": "updateLabel",
"addLabel": "datasource/Loki"
},
{
"type": "changedfiles",
"matches": [
"public/app/plugins/datasource/mssql/**/*",
"pkg/tsdb/mssql/**/*"
],
"matches": [ "public/app/plugins/datasource/mssql/**/*", "pkg/tsdb/mssql/**/*"],
"action": "updateLabel",
"addLabel": "datasource/MSSQL"
},
{
"type": "changedfiles",
"matches": [
"public/app/plugins/datasource/mysql/**/*",
"pkg/tsdb/mysql/**/*"
],
"matches": [ "public/app/plugins/datasource/mysql/**/*", "pkg/tsdb/mysql/**/*"],
"action": "updateLabel",
"addLabel": "datasource/MySQL"
},
{
"type": "changedfiles",
"matches": [
"public/app/plugins/datasource/opentsdb/**/*",
"pkg/tsdb/opentsdb/**/*"
],
"matches": [ "public/app/plugins/datasource/opentsdb/**/*", "pkg/tsdb/opentsdb/**/*"],
"action": "updateLabel",
"addLabel": "datasource/OpenTSDB"
},
{
"type": "changedfiles",
"matches": [
"public/app/plugins/datasource/parca/**/*"
],
"action": "updateLabel",
"addLabel": "datasource/Parca"
},
{
"type": "changedfiles",
"matches": [
"public/app/plugins/datasource/grafana-pyroscope-datasource/**/*",
"pkg/tsdb/grafana-pyroscope-datasource/**/*"
],
"action": "updateLabel",
"addLabel": "datasource/grafana-pyroscope"
},
{
"type": "changedfiles",
"matches": [
"public/app/plugins/datasource/grafana-postgresql-datasource/**/*",
"pkg/tsdb/grafana-postgresql-datasource/**/*"
],
"matches": [ "public/app/plugins/datasource/grafana-postgresql-datasource/**/*", "pkg/tsdb/grafana-postgresql-datasource/**/*"],
"action": "updateLabel",
"addLabel": "datasource/Postgres"
},
{
"type": "changedfiles",
"matches": [
"public/app/plugins/datasource/prometheus/**/*",
"pkg/tsdb/prometheus/**/*"
],
"matches": [ "public/app/plugins/datasource/prometheus/**/*", "pkg/tsdb/prometheus/**/*"],
"action": "updateLabel",
"addLabel": "datasource/Prometheus"
},
{
"type": "changedfiles",
"matches": [
"public/app/plugins/datasource/tempo/**/*",
"pkg/tsdb/tempo/**/*"
],
"matches": [ "public/app/plugins/datasource/tempo/**/*", "pkg/tsdb/tempo/**/*"],
"action": "updateLabel",
"addLabel": "datasource/Tempo"
},
{
"type": "changedfiles",
"matches": [
"public/app/plugins/datasource/zipkin/**/*"
],
"matches": [ "public/app/plugins/datasource/zipkin/**/*"],
"action": "updateLabel",
"addLabel": "datasource/Zipkin"
},
{
"type": "changedfiles",
"matches": [
"public/app/features/variables/**/*",
"public/app/features/templating/**/*"
],
"matches": ["public/app/features/variables/**/*", "public/app/features/templating/**/*"],
"action": "updateLabel",
"addLabel": "area/dashboard/templating"
},
{
"type": "changedfiles",
"matches": [
"/pkg/services/ngalert/**/*",
"/pkg/services/sqlstore/migrations/ualert/**/*",
"/pkg/services/alerting/**/*",
"/public/app/features/alerting/**/*",
"/pkg/tests/api/alerting/**/*"
],
"matches": ["/pkg/services/ngalert/**/*", "/pkg/services/sqlstore/migrations/ualert/**/*", "/pkg/services/alerting/**/*", "/public/app/features/alerting/**/*", "/pkg/tests/api/alerting/**/*"],
"action": "updateLabel",
"addLabel": "area/alerting"
},
{
"type": "author",
"name": "pr/external",
"notMemberOf": {
"org": "grafana"
},
"ignoreList": [
"renovate[bot]",
"dependabot[bot]",
"grafana-delivery-bot[bot]",
"grafanabot"
],
"notMemberOf": { "org": "grafana" },
"ignoreList": ["renovate[bot]","dependabot[bot]","grafana-delivery-bot[bot]","grafanabot"],
"action": "updateLabel",
"addLabel": "pr/external"
},
{
"type": "label",
"name": "type/docs",
"action": "addToProject",
"addToProject": {
"url": "https://github.com/orgs/grafana/projects/69"
"type":"label",
"name":"type/docs",
"action":"addToProject",
"addToProject":{
"url":"https://github.com/orgs/grafana/projects/69"
}
},
{
"type": "changedfiles",
"matches": [
"public/app/plugins/panel/candlestick/**/*"
],
"matches": ["public/app/plugins/panel/candlestick/**/*"],
"action": "updateLabel",
"addLabel": "area/panel/candlestick"
},
{
"type": "label",
"name": "area/panel/candlestick",
"action": "addToProject",
"addToProject": {
"url": "https://github.com/orgs/grafana/projects/56"
}
},
{
"type": "changedfiles",
"matches": [
"public/app/plugins/panel/canvas/**/*",
"/public/app/features/canvas/**/*"
],
"matches": ["public/app/plugins/panel/canvas/**/*", "/public/app/features/canvas/**/*"],
"action": "updateLabel",
"addLabel": "area/panel/canvas"
},
{
"type": "label",
"name": "area/panel/canvas",
"action": "addToProject",
"addToProject": {
"url": "https://github.com/orgs/grafana/projects/56"
}
},
{
"type": "changedfiles",
"matches": [
"public/app/plugins/panel/barchart/**/*"
],
"matches": ["public/app/plugins/panel/barchart/**/*"],
"action": "updateLabel",
"addLabel": "area/panel/barchart"
},
{
"type": "label",
"name": "area/panel/barchart",
"action": "addToProject",
"addToProject": {
"url": "https://github.com/orgs/grafana/projects/56"
}
},
{
"type": "changedfiles",
"matches": [
"public/app/plugins/panel/geomap/**/*",
"/public/app/features/geo/**/*"
],
"matches": ["public/app/plugins/panel/geomap/**/*", "/public/app/features/geo/**/*"],
"action": "updateLabel",
"addLabel": "area/panel/geomap"
},
{
"type": "label",
"name": "area/panel/geomap",
"action": "addToProject",
"addToProject": {
"url": "https://github.com/orgs/grafana/projects/56"
}
},
{
"type": "changedfiles",
"matches": [
"public/app/plugins/panel/graph/**/*",
"/packages/grafana-ui/src/components/Graph/**/*",
"/packages/grafana-ui/src/components/GraphNG/**/*"
],
"matches": ["public/app/plugins/panel/graph/**/*", "/packages/grafana-ui/src/components/Graph/**/*", "/packages/grafana-ui/src/components/GraphNG/**/*"],
"action": "updateLabel",
"addLabel": "area/panel/graph"
},
{
"type": "label",
"name": "area/panel/graph",
"action": "addToProject",
"addToProject": {
"url": "https://github.com/orgs/grafana/projects/56"
}
},
{
"type": "changedfiles",
"matches": [
"public/app/plugins/panel/heatmap/**/*"
],
"matches": ["public/app/plugins/panel/heatmap/**/*"],
"action": "updateLabel",
"addLabel": "area/panel/heatmap"
},
{
"type": "label",
"name": "area/panel/heatmap",
"action": "addToProject",
"addToProject": {
"url": "https://github.com/orgs/grafana/projects/56"
}
},
{
"type": "changedfiles",
"matches": [
"public/app/plugins/panel/histogram/**/*"
],
"matches": ["public/app/plugins/panel/histogram/**/*"],
"action": "updateLabel",
"addLabel": "area/panel/histogram"
},
{
"type": "label",
"name": "area/panel/histogram",
"action": "addToProject",
"addToProject": {
"url": "https://github.com/orgs/grafana/projects/56"
}
},
{
"type": "changedfiles",
"matches": [
"public/app/plugins/panel/state-timeline/**/*"
],
"matches": ["public/app/plugins/panel/state-timeline/**/*"],
"action": "updateLabel",
"addLabel": "area/panel/state-timeline"
},
{
"type": "label",
"name": "area/panel/state-timeline",
"action": "addToProject",
"addToProject": {
"url": "https://github.com/orgs/grafana/projects/56"
}
},
{
"type": "changedfiles",
"matches": [
"public/app/plugins/panel/status-history/**/*"
],
"matches": ["public/app/plugins/panel/status-history/**/*"],
"action": "updateLabel",
"addLabel": "area/panel/status-history"
},
{
"type": "label",
"name": "area/panel/status-history",
"action": "addToProject",
"addToProject": {
"url": "https://github.com/orgs/grafana/projects/56"
}
},
{
"type": "changedfiles",
"matches": [
"public/app/plugins/panel/timeseries/**/*",
"/packages/grafana-ui/src/components/TimeSeries/**/*"
],
"matches": ["public/app/plugins/panel/timeseries/**/*", "/packages/grafana-ui/src/components/TimeSeries/**/*"],
"action": "updateLabel",
"addLabel": "area/panel/timeseries"
},
{
"type": "label",
"name": "area/panel/timeseries",
"action": "addToProject",
"addToProject": {
"url": "https://github.com/orgs/grafana/projects/56"
}
},
{
"type": "changedfiles",
"matches": [
"public/app/plugins/panel/xychart/**/*"
],
"matches": ["public/app/plugins/panel/xychart/**/*"],
"action": "updateLabel",
"addLabel": "area/panel/xychart"
},
{
"type": "label",
"name": "area/panel/xychart",
"action": "addToProject",
"addToProject": {
"url": "https://github.com/orgs/grafana/projects/56"
}
},
{
"type": "changedfiles",
"matches": [
"public/app/plugins/panel/trend/**/*"
],
"matches": ["public/app/plugins/panel/trend/**/*"],
"action": "updateLabel",
"addLabel": "area/panel/trend"
},
{
"type": "label",
"name": "area/panel/trend",
"action": "addToProject",
"addToProject": {
"url": "https://github.com/orgs/grafana/projects/56"
}
},
{
"type": "changedfiles",
"matches": [
"/packages/grafana-ui/src/components/VizLegend/**/*"
],
"matches": ["/packages/grafana-ui/src/components/VizLegend/**/*"],
"action": "updateLabel",
"addLabel": "area/legend"
},
{
"type": "label",
"name": "area/legend",
"action": "addToProject",
"addToProject": {
"url": "https://github.com/orgs/grafana/projects/56"
}
},
{
"type": "changedfiles",
"matches": [
"/packages/grafana-ui/src/components/VizTooltip/**/*",
"public/app/feature/visualization/data-hover/**/*"
],
"matches": ["/packages/grafana-ui/src/components/VizTooltip/**/*", "public/app/feature/visualization/data-hover/**/*" ],
"action": "updateLabel",
"addLabel": "area/tooltip"
},
{
"type": "label",
"name": "area/tooltip",
"action": "addToProject",
"addToProject": {
"url": "https://github.com/orgs/grafana/projects/56"
}
},
{
"type": "changedfiles",
"matches": [
"public/app/plugins/panel/gauge/**/*",
"/packages/grafana-ui/src/components/Gauge/**/*"
],
"matches": ["public/app/plugins/panel/gauge/**/*", "/packages/grafana-ui/src/components/Gauge/**/*"],
"action": "updateLabel",
"addLabel": "area/panel/gauge"
},
{
"type": "changedfiles",
"matches": [
"public/app/plugins/panel/bargauge/**/*",
"/packages/grafana-ui/src/components/BarGauge/**/*"
],
"action": "updateLabel",
"addLabel": "area/panel/bargauge"
"type": "label",
"name": "area/panel/gauge",
"action": "addToProject",
"addToProject": {
"url": "https://github.com/orgs/grafana/projects/56"
}
},
{
"type": "changedfiles",
"matches": [
"public/app/plugins/panel/stat/**/*"
],
"matches": ["public/app/plugins/panel/bargauge/**/*", "/packages/grafana-ui/src/components/BarGauge/**/*"],
"action": "updateLabel",
"addLabel": "area/panel/gauge"
},
{
"type": "label",
"name": "area/panel/bargauge",
"action": "addToProject",
"addToProject": {
"url": "https://github.com/orgs/grafana/projects/56"
}
},
{
"type": "changedfiles",
"matches": ["public/app/plugins/panel/stat/**/*"],
"action": "updateLabel",
"addLabel": "area/panel/stat"
},
{
"type": "label",
"name": "area/panel/stat",
"action": "addToProject",
"addToProject": {
"url": "https://github.com/orgs/grafana/projects/56"
}
},
{
"type": "changedfiles",
"matches": [
"public/app/plugins/panel/piechart/**/*"
],
"matches": ["public/app/plugins/panel/piechart/**/*"],
"action": "updateLabel",
"addLabel": "area/panel/piechart"
},
{
"type": "changedfiles",
"matches": [
"public/app/plugins/panel/table/**/*",
"/packages/grafana-ui/src/components/Table/**/*"
],
"action": "updateLabel",
"addLabel": "area/panel/table"
"type": "label",
"name": "area/panel/piechart",
"action": "addToProject",
"addToProject": {
"url": "https://github.com/orgs/grafana/projects/56"
}
}
]
]

View File

@@ -4,28 +4,21 @@
],
"enabledManagers": ["npm"],
"ignoreDeps": [
"@types/history", // this can be removed entirely when we upgrade history since v5 exposes types directly
"history", // we should bump this together with react-router-dom (see https://github.com/grafana/grafana/issues/76744)
"react-router-dom", // we should bump this together with history (see https://github.com/grafana/grafana/issues/76744)
"loader-utils", // v3 requires upstream changes in ngtemplate-loader. ignore, and remove when we remove angular.
"monaco-editor", // due to us exposing this via @grafana/ui/CodeEditor's props bumping can break plugins
"@fingerprintjs/fingerprintjs", // we don't want to bump to v4 due to licensing changes
"@swc/core", // versions ~1.4.5 contain multiple bugs related to baseUrl resolution breaking builds.
"slate", // we don't want to continue using this on the long run, use Monaco editor instead of Slate
"slate-react", // we don't want to continue using this on the long run, use Monaco editor instead of Slate
"@types/slate-react", // we don't want to continue using this on the long run, use Monaco editor instead of Slate
"@types/slate" // we don't want to continue using this on the long run, use Monaco editor instead of Slate
"react-hook-form", // due to us exposing these hooks via @grafana/ui form components bumping can break plugins
],
"includePaths": ["package.json", "packages/**", "public/app/plugins/**"],
"ignorePaths": ["emails/**", "plugins-bundled/**", "**/mocks/**"],
"ignorePaths": ["emails/**", "plugins-bundled/**", "**/mocks/**", "packages/grafana-e2e/**"],
"labels": ["area/frontend", "dependencies", "no-changelog"],
"postUpdateOptions": ["yarnDedupeHighest"],
"packageRules": [
{
"automerge": true,
"matchCurrentVersion": "!/^0/",
"matchUpdateTypes": ["patch"],
"excludePackagePatterns": ["^@?storybook", "^@locker"]
"excludePackagePatterns": ["^@?storybook", "^@locker"],
"extends": ["schedule:monthly"],
"groupName": "Monthly patch updates"
},
{
"matchPackagePatterns": ["^@?storybook"],

View File

@@ -1,22 +0,0 @@
name: Changelog generator
description: Generates and publishes a changelog for the given release version
inputs:
target:
description: Target tag, branch or commit hash for the changelog
required: true
previous:
description: Previous tag, branch or commit hash to start changelog from
required: false
github_token:
description: GitHub token with read/write access to all necessary repositories
required: true
output_file:
description: A file to store resulting changelog markdown
required: false
outputs:
changelog:
description: Changelog contents between the two given versions in Markdown format
runs:
using: 'node20'
main: 'index.js'

View File

@@ -1,319 +0,0 @@
import { appendFileSync, writeFileSync } from 'fs';
import { exec as execCallback } from 'node:child_process';
import { promisify } from 'node:util';
//
// Github Action core utils: logging (notice + debug log levels), must escape
// newlines and percent signs
//
const escapeData = (s) => s.replace(/%/g, '%25').replace(/\r/g, '%0D').replace(/\n/g, '%0A');
const LOG = (msg) => console.log(`::notice::${escapeData(msg)}`);
//
// Semver utils: parse, compare, sort etc (using official regexp)
// https://regex101.com/r/Ly7O1x/3/
//
const semverRegExp =
/^v?(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/;
const semverParse = (tag) => {
const m = tag.match(semverRegExp);
if (!m) {
return;
}
const [_, major, minor, patch, prerelease] = m;
return [+major, +minor, +patch, prerelease, tag];
};
// semverCompare takes two parsed semver tags and comparest them more or less
// according to the semver specs
const semverCompare = (a, b) => {
for (let i = 0; i < 3; i++) {
if (a[i] !== b[i]) {
return a[i] < b[i] ? 1 : -1;
}
}
if (a[3] !== b[3]) {
return a[3] < b[3] ? 1 : -1;
}
return 0;
};
// Using `git tag -l` output find the tag (version) that goes semantically
// right before the given version. This might not work correctly with some
// pre-release versions, which is why it's possible to pass previous version
// into this action explicitly to avoid this step.
const getPreviousVersion = async (version) => {
const exec = promisify(execCallback);
const { stdout } = await exec('git tag -l');
const prev = stdout
.split('\n')
.map(semverParse)
.filter((tag) => tag)
.sort(semverCompare)
.find((tag) => semverCompare(tag, semverParse(version)) > 0);
if (!prev) {
throw `Could not find previous git tag for ${version}`;
}
return prev[4];
};
// A helper for Github GraphQL API endpoint
const graphql = async (ghtoken, query, variables) => {
const { env } = process;
const results = await fetch('https://api.github.com/graphql', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
Authorization: `Bearer ${ghtoken}`,
},
body: JSON.stringify({ query, variables }),
});
const { data } = await results.json();
return data;
};
// Using Github GraphQL API find the timestamp for the given tag/commit hash.
// This is required for PR listing, because Github API only takes date/time as
// a "since" parameter while listing. Currently there is no way to provide two
// "commitish" items and get a list of PRs in between them.
const getCommitishDate = async (name, owner, target) => {
const result = await graphql(
ghtoken,
`
query getCommitDate($owner: String!, $name: String!, $target: String!) {
repository(owner: $owner, name: $name) {
object(expression: $target) {
... on Commit {
committedDate
}
}
}
}
`,
{ name, owner, target }
);
return result.repository.object.committedDate;
};
// Using Github GraphQL API get a list of PRs between the two "commitish" items.
// This resoves the "since" item's timestamp first and iterates over all PRs
// till "target" using naïve pagination.
const getHistory = async (name, owner, target, sinceDate) => {
LOG(`Fetching ${owner}/${name} PRs since ${sinceDate} till ${target}`);
const query = `
query findCommitsWithAssociatedPullRequests(
$name: String!
$owner: String!
$target: String!
$sinceDate: GitTimestamp
$cursor: String
) {
repository(name: $name, owner: $owner) {
object(expression: $target) {
... on Commit {
history(first: 50, since: $sinceDate, after: $cursor) {
totalCount
pageInfo {
hasNextPage
endCursor
}
nodes {
id
associatedPullRequests(first: 1) {
nodes {
title
number
labels(first: 10) {
nodes {
name
}
}
commits(first: 1) {
nodes {
commit {
author {
user {
login
}
}
}
}
}
}
}
}
}
}
}
}
}`;
let cursor;
let nodes = [];
for (;;) {
const result = await graphql(ghtoken, query, {
name,
owner,
target,
sinceDate,
cursor,
});
LOG(`GraphQL: ${JSON.stringify(result)}`);
nodes = [...nodes, ...result.repository.object.history.nodes];
const { hasNextPage, endCursor } = result.repository.object.history.pageInfo;
if (!hasNextPage) {
break;
}
cursor = endCursor;
}
return nodes;
};
// The main function for this action: given two "commitish" items it gets a
// list of PRs between them and filters/groups the PRs by category (bugfix,
// feature, deprecation, breaking change and plugin fixes/enhancements).
//
// PR grouping relies on Github labels only, not on the PR contents.
const getChangeLogItems = async (name, owner, sinceDate, to) => {
// check if a node contains a certain label
const hasLabel = ({ labels }, label) => labels.nodes.some(({ name }) => name === label);
// get all the PRs between the two "commitish" items
const history = await getHistory(name, owner, to, sinceDate);
const items = history.flatMap((node) => {
// discard PRs without a "changelog" label
const changes = node.associatedPullRequests.nodes.filter((PR) => hasLabel(PR, 'add to changelog'));
if (changes.length === 0) {
return [];
}
const item = changes[0];
const { number, url, labels } = item;
const title = item.title.replace(/^\[[^\]]+\]:?\s*/, '');
// for changelog PRs try to find a suitable category.
// Note that we can not detect "deprecation notices" like that
// as there is no suitable label yet.
const isBug = /fix/i.test(title) || hasLabel({ labels }, 'type/bug');
const isBreaking = hasLabel({ labels }, 'breaking change');
const isPlugin =
hasLabel({ labels }, 'area/grafana/ui') ||
hasLabel({ labels }, 'area/grafana/toolkit') ||
hasLabel({ labels }, 'area/grafana/runtime');
const author = item.commits.nodes[0].commit.author.user?.login;
return {
repo: name,
number,
title,
author,
isBug,
isPlugin,
isBreaking,
};
});
return items;
};
// ======================================================
// GENERATE CHANGELOG
// ======================================================
LOG(`Changelog action started`);
const ghtoken = process.env.GITHUB_TOKEN || process.env.INPUT_GITHUB_TOKEN;
if (!ghtoken) {
throw 'GITHUB_TOKEN is not set and "github_token" input is empty';
}
const target = process.argv[2] || process.env.INPUT_TARGET;
LOG(`Target tag/branch/commit: ${target}`);
const previous = process.argv[3] || process.env.INPUT_PREVIOUS || (await getPreviousVersion(target));
LOG(`Previous tag/commit: ${previous}`);
const sinceDate = await getCommitishDate('grafana', 'grafana', previous);
LOG(`Previous tag/commit timestamp: ${sinceDate}`);
// Get all changelog items from Grafana OSS
const oss = await getChangeLogItems('grafana', 'grafana', sinceDate, target);
// Get all changelog items from Grafana Enterprise
const entr = await getChangeLogItems('grafana-enterprise', 'grafana', sinceDate, target);
LOG(`Found OSS PRs: ${oss.length}`);
LOG(`Found Enterprise PRs: ${entr.length}`);
// Sort PRs and categorise them into sections
const changelog = [...oss, ...entr]
.sort((a, b) => (a.title < b.title ? -1 : 1))
.reduce(
(changelog, item) => {
if (item.isPlugin) {
changelog.plugins.push(item);
} else if (item.isBug) {
changelog.bugfixes.push(item);
} else if (item.isBreaking) {
changelog.breaking.push(item);
} else {
changelog.features.push(item);
}
return changelog;
},
{
breaking: [],
plugins: [],
bugfixes: [],
features: [],
}
);
// Convert PR numbers to Github links
const pullRequestLink = (n) => `[#${n}](https://github.com/grafana/grafana/pull/${n})`;
// Convert Github user IDs to Github links
const userLink = (u) => `[@${u}](https://github.com/${u})`;
// Now that we have a changelog - we can render some markdown as an output
const markdown = (changelog) => {
// This convers a list of changelog items into a markdown section with a list of titles/links
const section = (title, items) =>
items.length === 0
? ''
: `### ${title}
${items
.map(
(item) =>
`- ${item.title.replace(/^([^:]*:)/gm, '**$1**')} ${
item.repo === 'grafana-enterprise'
? '(Enterprise)'
: `${pullRequestLink(item.number)}${item.author ? ', ' + userLink(item.author) : ''}`
}`
)
.join('\n')}
`;
// Render all present sections for the given changelog
return `${section('Features and enhancements', changelog.features)}
${section('Bug fixes', changelog.bugfixes)}
${section('Breaking changes', changelog.breaking)}
${section('Plugin development fixes & changes', changelog.plugins)}
`;
};
const md = markdown(changelog);
// Print changelog, mostly for debugging
LOG(`Resulting markdown: ${md}`);
// Save changelog as an output for this action
if (process.env.GITHUB_OUTPUT) {
LOG(`Output to ${process.env.GITHUB_OUTPUT}`);
appendFileSync(process.env.GITHUB_OUTPUT, `changelog<<EOF\n${escapeData(md)}\nEOF`);
} else {
LOG('GITHUB_OUTPUT is not set');
}
// Save changelog as an output file (if requested)
if (process.env.INPUT_OUTPUT_FILE) {
LOG(`Output to ${process.env.INPUT_OUTPUT_FILE}`);
writeFileSync(process.env.INPUT_OUTPUT_FILE, md);
}

View File

@@ -1,6 +0,0 @@
{
"name": "changelog",
"main": "index.js",
"type": "module",
"description": "changelog generator"
}

View File

@@ -16,7 +16,7 @@ jobs:
- name: Set go version
uses: actions/setup-go@v4
with:
go-version-file: go.mod
go-version: '1.21.10'
- name: Build swagger
run: |
make -C pkg/services/ngalert/api/tooling post.json api.json
@@ -32,6 +32,6 @@ jobs:
branch: update-alerting-swagger-spec
delete-branch: true
labels: 'area/alerting,type/docs,no-changelog'
team-reviewers: 'grafana/alerting-backend'
team-reviewers: 'grafana/alerting-backend-product'
draft: false

View File

@@ -1,27 +1,39 @@
name: Auto-milestone
on:
pull_request_target:
pull_request:
types:
- opened
- reopened
- closed
- ready_for_review
permissions:
pull-requests: write
contents: write
# Note: this action runs with write permissions on GITHUB_TOKEN even from forks
# so it must not run untrusted code (such as checking out the pull request)
jobs:
main:
runs-on: ubuntu-latest
if: github.event.pull_request.draft == false
config:
runs-on: "ubuntu-latest"
outputs:
has-secrets: ${{ steps.check.outputs.has-secrets }}
steps:
# Note: Github will not trigger other actions from this because it uses
# the GITHUB_TOKEN token
- name: "Check for secrets"
id: check
shell: bash
run: |
if [ -n "${{ (secrets.GRAFANA_DELIVERY_BOT_APP_ID != '' && secrets.GRAFANA_DELIVERY_BOT_APP_PEM != '') || '' }}" ]; then
echo "has-secrets=1" >> "$GITHUB_OUTPUT"
fi
main:
needs: config
if: needs.config.outputs.has-secrets
runs-on: ubuntu-latest
steps:
- name: "Generate token"
id: generate_token
uses: tibdex/github-app-token@b62528385c34dbc9f38e5f4225ac829252d1ea92
with:
app_id: ${{ secrets.GRAFANA_DELIVERY_BOT_APP_ID }}
private_key: ${{ secrets.GRAFANA_DELIVERY_BOT_APP_PEM }}
- name: Run auto-milestone
uses: grafana/grafana-github-actions-go/auto-milestone@main
with:
pr: ${{ github.event.pull_request.number }}
token: ${{ secrets.GITHUB_TOKEN }}
token: ${{ steps.generate_token.outputs.token }}

View File

@@ -5,39 +5,74 @@ on:
version:
description: 'Needs to match, exactly, the name of a milestone. The version to be released please respect: major.minor.patch, major.minor.patch-preview or major.minor.patch-preview<number> format. example: 7.4.3, 7.4.3-preview or 7.4.3-preview1'
required: true
push:
default: true
required: false
dry_run:
default: false
required: false
env:
YARN_ENABLE_IMMUTABLE_INSTALLS: false
jobs:
main:
runs-on: ubuntu-latest
steps:
- name: Checkout Grafana
uses: actions/checkout@v4
- name: Update package.json versions
uses: ./pkg/build/actions/bump-version
# This is a basic workflow to help you get started with Actions
- uses: actions-ecosystem/action-regex-match@v2.0.2
if: ${{ github.event.inputs.version != '' }}
id: regex-match
with:
version: ${{ inputs.version }}
- if: ${{ inputs.push }}
name: Generate token
text: ${{ github.event.inputs.version }}
regex: '^(\d+.\d+).\d+(?:-(?:(preview\d?)|(pre)))?$'
- uses: actions-ecosystem/action-regex-match@v2.0.2
if: ${{ inputs.version_call != '' }}
id: regex-match-version-call
with:
text: ${{ inputs.version_call }}
regex: '^(\d+.\d+).\d+(?:-(?:(preview\d?)|(pre)))?$'
- name: Validate input version
if: ${{ steps.regex-match.outputs.match == '' && github.event.inputs.version != '' }}
run: |
echo "The input version format is not correct, please respect:\
major.minor.patch, major.minor.patch-preview or major.minor.patch-preview<number> format. \
example: 7.4.3, 7.4.3-preview or 7.4.3-preview1"
exit 1
- name: Validate input version call
if: ${{ inputs.version_call != '' && steps.regex-match-version-call.outputs.match == '' }}
run: |
echo "The input version format is not correct, please respect:\
major.minor.patch, major.minor.patch-preview or major.minor.patch-preview<number> format. \
example: 7.4.3, 7.4.3-preview or 7.4.3-preview1"
exit 1
- uses: actions/checkout@v4
- name: Set intermedia variables
id: intermedia
run: |
echo "short_ref=${GITHUB_REF#refs/*/}" >> $GITHUB_OUTPUT
echo "check_passed=false" >> $GITHUB_OUTPUT
echo "branch_name=v${{steps.regex-match.outputs.group1}}" >> $GITHUB_OUTPUT
echo "branch_exist=$(git ls-remote --heads https://github.com/grafana/grafana.git v${{ steps.regex-match.outputs.group1 }}.x | wc -l)" >> $GITHUB_OUTPUT
- name: Checkout Actions
uses: actions/checkout@v4
with:
repository: "grafana/grafana-github-actions"
path: ./actions
ref: main
# Go is required for also updating the schema versions as part of the precommit hook:
- uses: actions/setup-go@v4
with:
go-version: '1.20'
- uses: actions/setup-node@v4
with:
node-version: '18'
- name: Install Actions
run: npm install --production --prefix ./actions
- name: "Generate token"
id: generate_token
uses: tibdex/github-app-token@b62528385c34dbc9f38e5f4225ac829252d1ea92
with:
app_id: ${{ secrets.GRAFANA_DELIVERY_BOT_APP_ID }}
private_key: ${{ secrets.GRAFANA_DELIVERY_BOT_APP_PEM }}
- if: ${{ inputs.push }}
name: Push & Create PR
run: |
git config --local user.name "github-actions[bot]"
git config --local user.email "github-actions[bot]@users.noreply.github.com"
git config --local --add --bool push.autoSetupRemote true
git checkout -b "bump-version/${{ github.run_id }}/${{ inputs.version }}"
git add .
git commit -m "bump version ${{ inputs.version }}"
git push
gh pr create --dry-run=${{ inputs.dry_run }} -l "type/ci" -l "no-changelog" -B "${{ github.ref_name }}" --title "Release: Bump version to ${{ inputs.version }}" --body "Updated version to ${{ inputs.version }}"
env:
GH_TOKEN: ${{ steps.generate_token.outputs.token }}
- name: Run bump version (manually invoked)
uses: ./actions/bump-version
with:
token: ${{ steps.generate_token.outputs.token }}
metricsWriteAPIKey: ${{ secrets.GRAFANA_MISC_STATS_API_KEY }}
precommit_make_target: gen-cue

View File

@@ -1,148 +0,0 @@
name: Generate changelog
on:
workflow_call:
inputs:
previous_version:
type: string
required: false
description: 'The release version (semver, git tag, branch or commit) to use for comparison'
version:
type: string
required: true
description: 'Target release version (semver, git tag, branch or commit)'
target:
required: true
type: string
description: 'The base branch that these changes are being merged into'
dry_run:
required: false
default: false
type: boolean
latest:
required: false
default: false
type: boolean
secrets:
GRAFANA_DELIVERY_BOT_APP_ID:
required: true
GRAFANA_DELIVERY_BOT_APP_PEM:
required: true
workflow_dispatch:
inputs:
previous_version:
type: string
required: false
description: 'The release version (semver, git tag, branch or commit) to use for comparison'
version:
type: string
required: true
description: 'Target release version (semver, git tag, branch or commit)'
target:
required: true
type: string
description: 'The base branch that these changes are being merged into'
dry_run:
required: false
default: false
type: boolean
latest:
required: false
default: false
type: boolean
permissions:
contents: write
pull-requests: write
jobs:
main:
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: "Generate token"
id: generate_token
uses: tibdex/github-app-token@b62528385c34dbc9f38e5f4225ac829252d1ea92
with:
app_id: ${{ secrets.GRAFANA_DELIVERY_BOT_APP_ID }}
private_key: ${{ secrets.GRAFANA_DELIVERY_BOT_APP_PEM }}
- name: "Checkout Grafana repo"
uses: "actions/checkout@v4"
with:
ref: main
sparse-checkout: |
.github/workflows
CHANGELOG.md
.nvmrc
.prettierignore
.prettierrc.js
fetch-depth: 0
fetch-tags: true
- name: Setup nodejs environment
uses: actions/setup-node@v4
with:
node-version-file: .nvmrc
- name: "Configure git user"
run: |
git config --local user.name "github-actions[bot]"
git config --local user.email "github-actions[bot]@users.noreply.github.com"
git config --local --add --bool push.autoSetupRemote true
- name: "Create branch"
run: git checkout -b "changelog/${{ github.run_id }}/${{ inputs.version }}"
- name: "Generate changelog"
id: changelog
uses: ./.github/workflows/actions/changelog
with:
previous: ${{ inputs.previous_version }}
github_token: ${{ steps.generate_token.outputs.token }}
target: v${{ inputs.version }}
output_file: changelog_items.md
- name: "Patch CHANGELOG.md"
run: |
# Prepare CHANGELOG.md content with version delimiters
(
echo
echo "# ${{ inputs.version}} ($(date '+%F'))"
echo
cat changelog_items.md
) > CHANGELOG.part
# Check if a version exists in the changelog
if grep -q "<!-- ${{ inputs.version}} START" CHANGELOG.md ; then
# Replace the content between START and END delimiters
echo "Version ${{ inputs.version }} is found in the CHANGELOG.md, patching contents..."
sed -i -e '/${{ inputs.version }} START/,/${{ inputs.version }} END/{//!d;}' \
-e '/${{ inputs.version }} START/r CHANGELOG.part' CHANGELOG.md
else
# Prepend changelog part to the main changelog file
echo "Version ${{ inputs.version }} not found in the CHANGELOG.md"
(
echo "<!-- ${{ inputs.version }} START -->"
cat CHANGELOG.part
echo "<!-- ${{ inputs.version }} END -->"
cat CHANGELOG.md
) > CHANGELOG.tmp
mv CHANGELOG.tmp CHANGELOG.md
fi
git diff CHANGELOG.md
- name: "Prettify CHANGELOG.md"
run: npx prettier --write CHANGELOG.md
- name: "Commit changelog changes"
run: git add CHANGELOG.md && git commit --allow-empty -m "Update changelog" CHANGELOG.md
- name: "git push"
if: ${{ inputs.dry_run }} != true
run: git push
- name: "Create changelog PR"
run: >
gh pr create \
--dry-run=${{ inputs.dry_run }} \
--label "no-backport" \
--label "no-changelog" \
-B "${{ inputs.target }}" \
--title "Release: update changelog for ${{ inputs.version }}" \
--body "Changelog changes for release ${{ inputs.version }}"
env:
GH_TOKEN: ${{ steps.generate_token.outputs.token }}

View File

@@ -25,7 +25,6 @@ jobs:
analyze:
name: Analyze
runs-on: ubuntu-latest
if: github.repository == 'grafana/grafana'
strategy:
fail-fast: false
@@ -48,7 +47,7 @@ jobs:
name: Set go version
uses: actions/setup-go@v4
with:
go-version-file: go.mod
go-version: '1.21.10'
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL

View File

@@ -1,21 +1,11 @@
name: Run commands when issues are labeled or comments added
# important: this workflow uses a github app that is strictly limited
# to issues. If you want to change the triggers for this workflow,
# please review if the permissions are still sufficient.
on:
issues:
types: [labeled, unlabeled]
issue_comment:
types: [created]
concurrency:
group: issue-commands-${{ github.event.issue.number }}
permissions:
contents: read
id-token: write
jobs:
config:
runs-on: "ubuntu-latest"
@@ -26,7 +16,7 @@ jobs:
id: check
shell: bash
run: |
if [ "${{ github.repository }}" == "grafana/grafana" ] && [ -n "${{ secrets.GRAFANA_MISC_STATS_API_KEY }}" ]; then
if [ -n "${{ (secrets.GRAFANA_MISC_STATS_API_KEY != '' && secrets.ISSUE_COMMANDS_TOKEN != '') || '' }}" ]; then
echo "has-secrets=1" >> "$GITHUB_OUTPUT"
fi
@@ -35,34 +25,17 @@ jobs:
if: needs.config.outputs.has-secrets
runs-on: ubuntu-latest
steps:
- name: "Get vault secrets"
id: vault-secrets
uses: grafana/shared-workflows/actions/get-vault-secrets@main
with:
# Secrets placed in the ci/repo/grafana/grafana/plugins_platform_issue_commands_github_bot path in Vault
repo_secrets: |
GH_APP_ID=plugins_platform_issue_commands_github_bot:app_id
GH_APP_PEM=plugins_platform_issue_commands_github_bot:app_pem
- name: "Generate token"
id: generate_token
uses: tibdex/github-app-token@b62528385c34dbc9f38e5f4225ac829252d1ea92
with:
app_id: ${{ env.GH_APP_ID }}
private_key: ${{ env.GH_APP_PEM }}
- name: Checkout Actions
uses: actions/checkout@v4
with:
repository: "grafana/grafana-github-actions"
path: ./actions
ref: main
- name: Install Actions
run: npm install --production --prefix ./actions
- name: Run Commands
uses: ./actions/commands
with:
metricsWriteAPIKey: ${{secrets.GRAFANA_MISC_STATS_API_KEY}}
token: ${{ steps.generate_token.outputs.token }}
token: ${{secrets.ISSUE_COMMANDS_TOKEN}}
configPath: commands

View File

@@ -1,46 +1,25 @@
name: Create community release post
on:
workflow_call:
inputs:
version:
type: string
required: true
description: 'Needs to match, exactly, the name of a milestone. The version to be released please respect: major.minor.patch, major.minor.patch-preview or major.minor.patch-preview<number> format. example: 7.4.3, 7.4.3-preview or 7.4.3-preview1'
dry_run:
type: boolean
required: false
default: false
description: When enabled, this workflow will print a preview instead of creating an actual post.
secrets:
GRAFANA_MISC_STATS_API_KEY:
required: true
GRAFANABOT_FORUM_KEY:
required: true
workflow_dispatch:
inputs:
version:
type: string
required: true
description: 'Needs to match, exactly, the name of a milestone. The version to be released please respect: major.minor.patch, major.minor.patch-preview or major.minor.patch-preview<number> format. example: 7.4.3, 7.4.3-preview or 7.4.3-preview1'
dry_run:
type: boolean
required: false
default: false
description: When enabled, this workflow will print a preview instead of creating an actual post.
permissions:
contents: read
jobs:
main:
runs-on: ubuntu-latest
steps:
- name: "Generate token"
id: generate_token
uses: tibdex/github-app-token@b62528385c34dbc9f38e5f4225ac829252d1ea92
with:
app_id: ${{ secrets.GRAFANA_DELIVERY_BOT_APP_ID }}
private_key: ${{ secrets.GRAFANA_DELIVERY_BOT_APP_PEM }}
- name: Run community-release (manually invoked)
uses: grafana/grafana-github-actions-go/community-release@main
with:
token: ${{ secrets.GITHUB_TOKEN }}
token: ${{ steps.generate_token.outputs.token }}
version: ${{ inputs.version }}
metrics_api_key: ${{ secrets.GRAFANA_MISC_STATS_API_KEY }}
community_api_key: ${{ secrets.GRAFANABOT_FORUM_KEY }}
community_api_username: grafanabot
dry_run: ${{ inputs.dry_run }}

View File

@@ -1,5 +1,3 @@
name: Build and release core plugins
on:
workflow_dispatch:
inputs:
@@ -8,14 +6,7 @@ on:
required: true
type: choice
options:
- grafana-azure-monitor-datasource
- grafana-pyroscope-datasource
- grafana-testdata-datasource
- jaeger
- parca
- stackdriver
- tempo
- zipkin
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}-${{ inputs.plugin_id }}
@@ -68,12 +59,7 @@ jobs:
shell: bash
id: get_dir
run: |
dir=$(dirname \
$(egrep -lir --include=plugin.json --exclude-dir=dist \
'"id": "${{ inputs.plugin_id }}"' \
public/app/plugins \
) \
)
dir=$(find public/app/plugins -name ${{ inputs.plugin_id }} -print -quit)
echo "dir=${dir}" >> $GITHUB_OUTPUT
- name: Install frontend dependencies
shell: bash
@@ -91,7 +77,7 @@ jobs:
id: check_backend
shell: bash
run: |
if egrep -qr --include=main.go 'datasource.Manage\("${{ inputs.plugin_id }}"' pkg/tsdb; then
if [ -d ./pkg/tsdb/${{ inputs.plugin_id }} ]; then
echo "has_backend=true" >> $GITHUB_OUTPUT
else
echo "has_backend=false" >> $GITHUB_OUTPUT
@@ -186,7 +172,7 @@ jobs:
exit 1
fi
- name: store build artifacts
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v3
with:
name: build-artifacts
path: ${{ steps.get_dir.outputs.dir }}/ci/packages/*.zip
@@ -202,7 +188,6 @@ jobs:
gsutil -m cp -r ci/packages/*darwin* gs://${{ env.GCP_BUCKET }}/${{ inputs.plugin_id }}/release/${VERSION}/darwin
gsutil -m cp -r ci/packages/*any* gs://${{ env.GCP_BUCKET }}/${{ inputs.plugin_id }}/release/${VERSION}/any
- name: Publish new plugin version on grafana.com
if: steps.check_backend.outputs.has_backend == 'true'
working-directory: ${{ steps.get_dir.outputs.dir }}
env:
GCOM_TOKEN: ${{ env.PLUGINS_GCOM_TOKEN }}
@@ -243,27 +228,4 @@ jobs:
echo "Failed to publish plugin version. Got:"
echo $result
exit 1
fi
- name: Publish new plugin version on grafana.com (frontend only)
if: steps.check_backend.outputs.has_backend == 'false'
working-directory: ${{ steps.get_dir.outputs.dir }}
env:
GCOM_TOKEN: ${{ env.PLUGINS_GCOM_TOKEN }}
VERSION: ${{ steps.build_frontend.outputs.version }}
run: |
echo "Publish new plugin version on grafana.com:"
echo "Plugin version: ${VERSION}"
result=`curl -H "Authorization: Bearer $GCOM_TOKEN" -H "Content-Type: application/json" ${{ env.GCOM_API}}/api/plugins -d "{
\"url\": \"https://github.com/grafana/grafana/tree/main/${{ steps.get_dir.outputs.dir }}\",
\"download\": {
\"any\": {
\"url\": \"https://storage.googleapis.com/${{ env.GCP_BUCKET }}/${{ inputs.plugin_id }}/release/${VERSION}/any/${{ inputs.plugin_id }}-${VERSION}.any.zip\",
\"md5\": \"$(cat ci/packages/info-any.json | jq -r .plugin.md5)\"
}
}
}"`
if [[ "$(echo $result | jq -r .version)" == "null" ]]; then
echo "Failed to publish plugin version. Got:"
echo $result
exit 1
fi
fi

View File

@@ -1,10 +1,6 @@
# Only runs if anything under the packages/ directory changes.
---
name: Levitate / Detect breaking changes in PR
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
name: Levitate / Detect breaking changes in PR
on:
pull_request:
@@ -15,122 +11,117 @@ on:
jobs:
buildPR:
name: Build PR packages artifacts
name: Build PR
runs-on: ubuntu-latest
defaults:
run:
working-directory: './pr'
steps:
- uses: actions/checkout@v4
with:
path: './pr'
- uses: actions/setup-node@v4
with:
node-version: 20.9.0
- uses: actions/checkout@v4
with:
path: './pr'
- uses: actions/setup-node@v4
with:
node-version: 20.9.0
- name: Get yarn cache directory path
id: yarn-cache-dir-path
run: echo "dir=$(yarn config get cacheFolder)" >> "$GITHUB_OUTPUT"
- name: Restore yarn cache
uses: actions/cache@v4
id: yarn-cache
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
key: yarn-cache-folder-${{ hashFiles('**/yarn.lock', '.yarnrc.yml') }}
restore-keys: |
yarn-cache-folder-
- name: Get yarn cache directory path
id: yarn-cache-dir-path
run: echo "dir=$(yarn config get cacheFolder)" >> $GITHUB_OUTPUT
- name: Install dependencies
run: yarn install --immutable
- name: Restore yarn cache
uses: actions/cache@v3.3.1
id: yarn-cache
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
key: yarn-cache-folder-${{ hashFiles('**/yarn.lock', '.yarnrc.yml') }}
restore-keys: |
yarn-cache-folder-
- name: Build packages
run: yarn packages:build
- name: Install dependencies
run: yarn install --immutable
- name: Pack packages
run: yarn packages:pack --out ./%s.tgz
- name: Build packages
run: yarn packages:build
- name: Zip built tarballed packages
run: zip -r ./pr_built_packages.zip ./packages/**/*.tgz
- name: Pack packages
run: yarn packages:pack --out ./%s.tgz
- name: Upload build output as artifact
uses: actions/upload-artifact@v4
with:
name: buildPr
path: './pr/pr_built_packages.zip'
- name: Zip built tarballed packages
run: zip -r ./pr_built_packages.zip ./packages/**/*.tgz
- name: Upload build output as artifact
uses: actions/upload-artifact@v3
with:
name: buildPr
path: './pr/pr_built_packages.zip'
buildBase:
name: Build Base packages artifacts
name: Build Base
runs-on: ubuntu-latest
defaults:
run:
working-directory: './base'
steps:
- uses: actions/checkout@v4
with:
path: './base'
ref: ${{ github.event.pull_request.base.ref }}
- uses: actions/checkout@v4
with:
path: './base'
ref: ${{ github.event.pull_request.base.ref }}
- uses: actions/setup-node@v4
with:
node-version: 20.9.0
- uses: actions/setup-node@v4
with:
node-version: 20.9.0
- name: Get yarn cache directory path
id: yarn-cache-dir-path
run: echo "dir=$(yarn config get cacheFolder)" >> "$GITHUB_OUTPUT"
- name: Get yarn cache directory path
id: yarn-cache-dir-path
run: echo "dir=$(yarn config get cacheFolder)" >> $GITHUB_OUTPUT
- name: Restore yarn cache
uses: actions/cache@v4
id: yarn-cache
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
key: yarn-cache-folder-${{ hashFiles('**/yarn.lock', '.yarnrc.yml') }}
restore-keys: |
yarn-cache-folder-
- name: Restore yarn cache
uses: actions/cache@v3.3.1
id: yarn-cache
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
key: yarn-cache-folder-${{ hashFiles('**/yarn.lock', '.yarnrc.yml') }}
restore-keys: |
yarn-cache-folder-
- name: Install dependencies
run: yarn install --immutable
- name: Install dependencies
run: yarn install --immutable
- name: Build packages
run: yarn packages:build
- name: Build packages
run: yarn packages:build
- name: Pack packages
run: yarn packages:pack --out ./%s.tgz
- name: Pack packages
run: yarn packages:pack --out ./%s.tgz
- name: Zip built tarballed packages
run: zip -r ./base_built_packages.zip ./packages/**/*.tgz
- name: Zip built tarballed packages
run: zip -r ./base_built_packages.zip ./packages/**/*.tgz
- name: Upload build output as artifact
uses: actions/upload-artifact@v4
with:
name: buildBase
path: './base/base_built_packages.zip'
- name: Upload build output as artifact
uses: actions/upload-artifact@v3
with:
name: buildBase
path: './base/base_built_packages.zip'
Detect:
name: Detect breaking changes between PR and base
name: Detect breaking changes
runs-on: ubuntu-latest
needs: ['buildPR', 'buildBase']
env:
GITHUB_STEP_NUMBER: 8
permissions:
contents: 'read'
id-token: 'write'
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20.9.0
- name: Get built packages from pr
uses: actions/download-artifact@v4
uses: actions/download-artifact@v3
with:
name: buildPr
- name: Get built packages from base
uses: actions/download-artifact@v4
uses: actions/download-artifact@v3
with:
name: buildBase
@@ -140,20 +131,6 @@ jobs:
- name: Unzip artifact from base
run: unzip -j base_built_packages.zip -d ./base && rm base_built_packages.zip
- id: 'auth'
uses: 'google-github-actions/auth@v2'
with:
workload_identity_provider: ${{ secrets.WIF_PROVIDER }}
service_account: ${{ secrets.LEVITATE_SA }}
project_id: 'grafanalabs-global'
- name: 'Set up Cloud SDK'
uses: 'google-github-actions/setup-gcloud@v2'
with:
version: '>= 363.0.0'
project_id: 'grafanalabs-global'
install_components: 'bq'
- name: Get link for the Github Action job
id: job
uses: actions/github-script@v6
@@ -176,192 +153,185 @@ jobs:
echo "{ \"exit_code\": ${{ steps.breaking-changes.outputs.is_breaking }}, \"message\": \"${{ steps.breaking-changes.outputs.message }}\", \"job_link\": \"${{ steps.job.outputs.link }}#step:${GITHUB_STEP_NUMBER}:1\", \"pr_number\": \"${{ github.event.pull_request.number }}\" }" > ./levitate/result.json
- name: Upload check output as artifact
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v3
with:
name: levitate
path: levitate/
Report:
name: Report breaking changes in PR comment
name: Report breaking changes in PR
runs-on: ubuntu-latest
needs: ['Detect']
steps:
- name: "Generate token"
id: generate_token
uses: tibdex/github-app-token@b62528385c34dbc9f38e5f4225ac829252d1ea92
with:
app_id: ${{ secrets.GRAFANA_PR_AUTOMATION_APP_ID }}
private_key: ${{ secrets.GRAFANA_PR_AUTOMATION_APP_PEM }}
- name: "Generate token"
id: generate_token
uses: tibdex/github-app-token@b62528385c34dbc9f38e5f4225ac829252d1ea92
with:
app_id: ${{ secrets.GRAFANA_PR_AUTOMATION_APP_ID }}
private_key: ${{ secrets.GRAFANA_PR_AUTOMATION_APP_PEM }}
- uses: actions/checkout@v4
- uses: actions/checkout@v4
- name: 'Download artifact'
uses: actions/download-artifact@v4
with:
name: levitate
- name: 'Download artifact'
uses: actions/download-artifact@v3
with:
name: levitate
- name: Parsing levitate result
uses: actions/github-script@v6
id: levitate-run
with:
script: |
const filePath = 'result.json';
const script = require('./.github/workflows/scripts/json-file-to-job-output.js');
await script({ core, filePath });
- name: Parsing levitate result
uses: actions/github-script@v6
id: levitate-run
with:
script: |
const filePath = 'result.json';
const script = require('./.github/workflows/scripts/json-file-to-job-output.js');
await script({ core, filePath });
# Check if label exists
- name: Check if "levitate breaking change" label exists
id: does-label-exist
uses: actions/github-script@v6
env:
PR_NUMBER: ${{ github.event.pull_request.number }}
with:
script: |
const { data } = await github.rest.issues.listLabelsOnIssue({
issue_number: process.env.PR_NUMBER,
owner: context.repo.owner,
repo: context.repo.repo,
});
const labels = data.map(({ name }) => name);
const doesExist = labels.includes('levitate breaking change');
# Check if label exists
- name: Check if "levitate breaking change" label exists
id: does-label-exist
uses: actions/github-script@v6
env:
PR_NUMBER: ${{ github.event.pull_request.number }}
with:
script: |
const { data } = await github.rest.issues.listLabelsOnIssue({
issue_number: process.env.PR_NUMBER,
owner: context.repo.owner,
repo: context.repo.repo,
});
const labels = data.map(({ name }) => name);
const doesExist = labels.includes('levitate breaking change');
return doesExist ? 1 : 0;
return doesExist ? 1 : 0;
# put the markdown into a variable
- name: Levitate Markdown
id: levitate-markdown
run: |
if [ -f "levitate.md" ]; then
{
echo 'levitate_markdown<<EOF'
cat levitate.md
echo EOF
} >> "$GITHUB_OUTPUT"
else
echo "levitate_markdown=No breaking changes detected" >> "$GITHUB_OUTPUT"
fi
# put the markdown into a variable
- name: Levitate Markdown
id: levitate-markdown
run: |
if [ -f "levitate.md" ]; then
{
echo 'levitate_markdown<<EOF'
cat levitate.md
echo EOF
} >> $GITHUB_OUTPUT
else
echo "levitate_markdown=No breaking changes detected" >> $GITHUB_OUTPUT
fi
# Comment on the PR
- name: Comment on PR
if: steps.levitate-run.outputs.exit_code == 1
uses: marocchino/sticky-pull-request-comment@v2
with:
header: levitate-breaking-change-comment
number: ${{ github.event.pull_request.number }}
message: |
⚠️ &nbsp;&nbsp;**Possible breaking changes (md version)**&nbsp;&nbsp; ⚠️
# Comment on the PR
- name: Comment on PR
uses: marocchino/sticky-pull-request-comment@v2
with:
header: levitate-breaking-change-comment
number: ${{ github.event.pull_request.number }}
message: |
⚠️ &nbsp;&nbsp;**Possible breaking changes (md version)*** &nbsp;&nbsp ⚠️
${{ steps.levitate-markdown.outputs.levitate_markdown }}
${{ steps.levitate-markdown.outputs.levitate_markdown }}
[Read our guideline](https://github.com/grafana/grafana/blob/main/contribute/breaking-changes-guide/breaking-changes-guide.md)
[Read our guideline](https://github.com/grafana/grafana/blob/main/contribute/breaking-changes-guide/breaking-changes-guide.md)
[Console output](${{ steps.levitate-run.outputs.job_link }})
GITHUB_TOKEN: ${{ steps.generate_token.outputs.token }}
* Your pull request merge won't be blocked.
GITHUB_TOKEN: ${{ steps.generate_token.outputs.token }}
# Remove comment from the PR (no more breaking changes)
- name: Remove comment from PR
if: steps.levitate-run.outputs.exit_code == 0
uses: marocchino/sticky-pull-request-comment@v2
with:
header: levitate-breaking-change-comment
number: ${{ github.event.pull_request.number }}
delete: true
GITHUB_TOKEN: ${{ steps.generate_token.outputs.token }}
# Remove comment from the PR (no more breaking changes)
- name: Remove comment from PR
if: steps.levitate-run.outputs.exit_code == 0
uses: marocchino/sticky-pull-request-comment@v2
with:
header: levitate-breaking-change-comment
number: ${{ github.event.pull_request.number }}
delete: true
GITHUB_TOKEN: ${{ steps.generate_token.outputs.token }}
# Posts a notification to Slack if a PR has a breaking change and it did not have a breaking change before
- name: Post to Slack
id: slack
if: steps.levitate-run.outputs.exit_code == 1 && steps.does-label-exist.outputs.result == 0 && env.HAS_SECRETS
uses: slackapi/slack-github-action@v1.24.0
with:
payload: |
{
"pr_link": "https://github.com/grafana/grafana/pull/${{ steps.levitate-run.outputs.pr_number }}",
"pr_number": "${{ steps.levitate-run.outputs.pr_number }}",
"job_link": "${{ steps.levitate-run.outputs.job_link }}",
"reporting_job_link": "${{ github.event.workflow_run.html_url }}",
"message": "${{ steps.levitate-run.outputs.message }}"
}
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_LEVITATE_WEBHOOK_URL }}
HAS_SECRETS: ${{ (github.repository == 'grafana/grafana' || secrets.SLACK_LEVITATE_WEBHOOK_URL != '') || '' }}
# Posts a notification to Slack if a PR has a breaking change and it did not have a breaking change before
- name: Post to Slack
id: slack
if: steps.levitate-run.outputs.exit_code == 1 && steps.does-label-exist.outputs.result == 0 && env.HAS_SECRETS
uses: slackapi/slack-github-action@v1.26.0
with:
payload: |
{
"pr_link": "https://github.com/grafana/grafana/pull/${{ steps.levitate-run.outputs.pr_number }}",
"pr_number": "${{ steps.levitate-run.outputs.pr_number }}",
"job_link": "${{ steps.levitate-run.outputs.job_link }}",
"reporting_job_link": "${{ github.event.workflow_run.html_url }}",
"message": "${{ steps.levitate-run.outputs.message }}"
}
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_LEVITATE_WEBHOOK_URL }}
HAS_SECRETS: ${{ (github.repository == 'grafana/grafana' || secrets.SLACK_LEVITATE_WEBHOOK_URL != '') || '' }}
# Add the label
- name: Add "levitate breaking change" label
if: steps.levitate-run.outputs.exit_code == 1 && steps.does-label-exist.outputs.result == 0
uses: actions/github-script@v6
env:
PR_NUMBER: ${{ steps.levitate-run.outputs.pr_number }}
with:
github-token: ${{ steps.generate_token.outputs.token }}
script: |
await github.rest.issues.addLabels({
issue_number: process.env.PR_NUMBER,
owner: context.repo.owner,
repo: context.repo.repo,
labels: ['levitate breaking change']
})
# Add the label
- name: Add "levitate breaking change" label
if: steps.levitate-run.outputs.exit_code == 1 && steps.does-label-exist.outputs.result == 0
uses: actions/github-script@v6
env:
PR_NUMBER: ${{ steps.levitate-run.outputs.pr_number }}
with:
github-token: ${{ steps.generate_token.outputs.token }}
script: |
await github.rest.issues.addLabels({
issue_number: process.env.PR_NUMBER,
owner: context.repo.owner,
repo: context.repo.repo,
labels: ['levitate breaking change']
})
# Remove label (no more breaking changes)
- name: Remove "levitate breaking change" label
if: steps.levitate-run.outputs.exit_code == 0 && steps.does-label-exist.outputs.result == 1
uses: actions/github-script@v6
env:
PR_NUMBER: ${{ steps.levitate-run.outputs.pr_number }}
with:
github-token: ${{ steps.generate_token.outputs.token }}
script: |
await github.rest.issues.removeLabel({
issue_number: process.env.PR_NUMBER,
owner: context.repo.owner,
repo: context.repo.repo,
name: 'levitate breaking change'
})
# Remove label (no more breaking changes)
- name: Remove "levitate breaking change" label
if: steps.levitate-run.outputs.exit_code == 0 && steps.does-label-exist.outputs.result == 1
uses: actions/github-script@v6
env:
PR_NUMBER: ${{ steps.levitate-run.outputs.pr_number }}
with:
github-token: ${{ steps.generate_token.outputs.token }}
script: |
await github.rest.issues.removeLabel({
issue_number: process.env.PR_NUMBER,
owner: context.repo.owner,
repo: context.repo.repo,
name: 'levitate breaking change'
})
# Add reviewers
# This is very weird, the actual request goes through (comes back with a 201), but does not assign the team.
# Related issue: https://github.com/renovatebot/renovate/issues/1908
- name: Add "grafana/plugins-platform-frontend" as a reviewer
if: steps.levitate-run.outputs.exit_code
uses: actions/github-script@v6
env:
PR_NUMBER: ${{ steps.levitate-run.outputs.pr_number }}
with:
github-token: ${{ steps.generate_token.outputs.token }}
script: |
await github.rest.pulls.requestReviewers({
pull_number: process.env.PR_NUMBER,
owner: context.repo.owner,
repo: context.repo.repo,
reviewers: [],
team_reviewers: ['plugins-platform-frontend']
});
# Add reviewers
# This is very weird, the actual request goes through (comes back with a 201), but does not assign the team.
# Related issue: https://github.com/renovatebot/renovate/issues/1908
- name: Add "grafana/plugins-platform-frontend" as a reviewer
if: steps.levitate-run.outputs.exit_code == 1
uses: actions/github-script@v6
env:
PR_NUMBER: ${{ steps.levitate-run.outputs.pr_number }}
with:
github-token: ${{ steps.generate_token.outputs.token }}
script: |
await github.rest.pulls.requestReviewers({
pull_number: process.env.PR_NUMBER,
owner: context.repo.owner,
repo: context.repo.repo,
reviewers: [],
team_reviewers: ['plugins-platform-frontend']
});
# Remove reviewers (no more breaking changes)
- name: Remove "grafana/plugins-platform-frontend" from the list of reviewers
if: steps.levitate-run.outputs.exit_code == 0
uses: actions/github-script@v6
env:
PR_NUMBER: ${{ steps.levitate-run.outputs.pr_number }}
with:
github-token: ${{ steps.generate_token.outputs.token }}
script: |
await github.rest.pulls.removeRequestedReviewers({
pull_number: process.env.PR_NUMBER,
owner: context.repo.owner,
repo: context.repo.repo,
reviewers: [],
team_reviewers: ['plugins-platform-frontend']
});
# Remove reviewers (no more breaking changes)
- name: Remove "grafana/plugins-platform-frontend" from the list of reviewers
if: steps.levitate-run.outputs.exit_code == 0
uses: actions/github-script@v6
env:
PR_NUMBER: ${{ steps.levitate-run.outputs.pr_number }}
with:
github-token: ${{ steps.generate_token.outputs.token }}
script: |
await github.rest.pulls.removeRequestedReviewers({
pull_number: process.env.PR_NUMBER,
owner: context.repo.owner,
repo: context.repo.repo,
reviewers: [],
team_reviewers: ['plugins-platform-frontend']
});
- name: Exit
run: |
if [ "${{ steps.levitate-run.outputs.exit_code }}" -ne 0 ]; then
echo "Breaking changes detected. Please check the levitate report in your pull request. This workflow won't block merging."
fi
exit ${{ steps.levitate-run.outputs.exit_code }}
shell: bash
- name: Exit
run: exit ${{ steps.levitate-run.outputs.exit_code }}
shell: bash

View File

@@ -1,18 +1,13 @@
name: "doc-validator"
on:
pull_request:
paths: ["docs/sources/**"]
workflow_dispatch:
inputs:
include:
description: |
Regular expression that matches paths to include in linting.
For example: docs/sources/(?:alerting|fundamentals)/.+\.md
required: true
jobs:
doc-validator:
runs-on: "ubuntu-latest"
container:
image: "grafana/doc-validator:v5.2.0"
image: "grafana/doc-validator:v4.0.0"
steps:
- name: "Checkout code"
uses: "actions/checkout@v4"
@@ -20,7 +15,15 @@ jobs:
# Only run doc-validator on specific directories.
run: >
doc-validator
'--include=${{ inputs.include }}'
'--include=^docs/sources/(?:alerting|fundamentals|getting-started|introduction|setup-grafana|upgrade-guide|whatsnew/whats-new-in-v(?:9|10))/.+\.md$'
'--skip-checks=^(?:image.+|canonical-does-not-match-pretty-URL)$'
./docs/sources
/docs/grafana/latest
| reviewdog
-f=rdjsonl
--fail-on-error
--filter-mode=nofilter
--name=doc-validator
--reporter=github-pr-review
env:
REVIEWDOG_GITHUB_API_TOKEN: "${{ secrets.GITHUB_TOKEN }}"

View File

@@ -1,9 +1,7 @@
name: 'Ephemeral instances'
name: 'Ephemeral instances: PR comment'
on:
issue_comment:
types: [created]
pull_request:
types: [closed]
jobs:
config:
runs-on: "ubuntu-latest"
@@ -28,11 +26,18 @@ jobs:
handle-pull-request-event:
needs: config
if: needs.config.outputs.has-secrets &&
${{ github.event.issue.pull_request && (startsWith(github.event.comment.body, '/deploy-to-hg') || github.event.action == 'closed') }}
github.event.sender.type == 'User' &&
github.event.issue.pull_request &&
startsWith(github.event.comment.body, '/deploy-to-hg')
runs-on:
labels: ubuntu-latest-8-cores
continue-on-error: true
steps:
- name: Setup Go
uses: actions/setup-go@v4
with:
go-version: '>=1.20'
- name: Generate a GitHub app installation token
id: generate_token
uses: tibdex/github-app-token@b62528385c34dbc9f38e5f4225ac829252d1ea92
@@ -48,14 +53,21 @@ jobs:
ref: main
path: ephemeral
- name: build and deploy ephemeral instance
uses: ./ephemeral
with:
github-token: ${{ steps.generate_token.outputs.token }}
gcom-host: ${{ secrets.EI_GCOM_HOST }}
gcom-token: ${{ secrets.EI_GCOM_TOKEN }}
registry: "${{ secrets.EI_EPHEMERAL_INSTANCES_REGISTRY }}"
gcp-service-account-key: "${{ secrets.EI_GCP_SERVICE_ACCOUNT_KEY_BASE64 }}"
ephemeral-org-id: "${{ secrets.EI_EPHEMERAL_ORG_ID }}"
oss-or-enterprise: oss
verbose: true
- name: Run action
env:
GITHUB_EVENT: ${{ toJson(github.event)}}
run: |
GRAFANA_VERSION=10.1.0
cd $GITHUB_WORKSPACE/ephemeral/src
go run . \
-GITHUB_TOKEN="${{ steps.generate_token.outputs.token }}" \
-GITHUB_EVENT="$GITHUB_EVENT" \
-GITHUB_TRIGGERING_ACTOR="${{ github.triggering_actor }}" \
-GCOM_HOST="${{ secrets.EI_GCOM_HOST }}" \
-GCOM_TOKEN="${{ secrets.EI_GCOM_TOKEN }}" \
-HOSTED_GRAFANA_IMAGE_TAG="$GRAFANA_VERSION-ephemeral-oss-${{ github.event.issue.number}}-${{ github.run_number }}-${{ github.run_attempt }}" \
-REGISTRY="${{ secrets.EI_EPHEMERAL_INSTANCES_REGISTRY }}" \
-GRAFANA_VERSION="$GRAFANA_VERSION" \
-GCP_SERVICE_ACCOUNT_KEY_BASE64="${{ secrets.EI_GCP_SERVICE_ACCOUNT_KEY_BASE64 }}" \
-EPHEMERAL_ORG_ID="${{ secrets.EI_EPHEMERAL_ORG_ID }}" || true

View File

@@ -0,0 +1,69 @@
name: 'Ephemeral instances: PR opened/closed'
on:
pull_request:
types: [opened, reopened, closed]
jobs:
config:
runs-on: "ubuntu-latest"
outputs:
has-secrets: ${{ steps.check.outputs.has-secrets }}
steps:
- name: "Check for secrets"
id: check
shell: bash
run: |
if [ -n "${{ (secrets.EI_APP_ID != '' &&
secrets.EI_APP_PRIVATE_KEY != '' &&
secrets.EI_GCOM_HOST != '' &&
secrets.EI_GCOM_TOKEN != '' &&
secrets.EI_EPHEMERAL_INSTANCES_REGISTRY != '' &&
secrets.EI_GCP_SERVICE_ACCOUNT_KEY_BASE64 != '' &&
secrets.EI_EPHEMERAL_ORG_ID != ''
) || '' }}" ]; then
echo "has-secrets=1" >> "$GITHUB_OUTPUT"
fi
handle-pull-request-event:
needs: config
if: needs.config.outputs.has-secrets
runs-on: ubuntu-latest
continue-on-error: true
steps:
- name: Setup Go
uses: actions/setup-go@v4
with:
go-version: '>=1.20'
- name: Generate a GitHub app installation token
id: generate_token
uses: tibdex/github-app-token@b62528385c34dbc9f38e5f4225ac829252d1ea92
with:
app_id: ${{ secrets.EI_APP_ID }}
private_key: ${{ secrets.EI_APP_PRIVATE_KEY }}
- name: Checkout ephemeral instances repository
uses: actions/checkout@v4
with:
repository: grafana/ephemeral-grafana-instances-github-action
token: ${{ steps.generate_token.outputs.token }}
ref: main
path: ephemeral
- name: Run action
env:
GITHUB_EVENT: ${{ toJson(github.event)}}
run: |
GRAFANA_VERSION=10.1.0
cd $GITHUB_WORKSPACE/ephemeral/src
go run . \
-GITHUB_TOKEN="${{ steps.generate_token.outputs.token }}" \
-GITHUB_EVENT="$GITHUB_EVENT" \
-GITHUB_TRIGGERING_ACTOR="${{ github.triggering_actor }}" \
-GCOM_HOST="${{ secrets.EI_GCOM_HOST }}" \
-GCOM_TOKEN="${{ secrets.EI_GCOM_TOKEN }}" \
-HOSTED_GRAFANA_IMAGE_TAG="unused" \
-REGISTRY="${{ secrets.EI_EPHEMERAL_INSTANCES_REGISTRY }}" \
-GRAFANA_VERSION="$GRAFANA_VERSION" \
-GCP_SERVICE_ACCOUNT_KEY_BASE64="${{ secrets.EI_GCP_SERVICE_ACCOUNT_KEY_BASE64 }}" \
-EPHEMERAL_ORG_ID="${{ secrets.EI_EPHEMERAL_ORG_ID }}" || true

View File

@@ -0,0 +1,28 @@
name: Feature Toggle Cleanup
on:
workflow_dispatch:
schedule:
# * is a special character in YAML so you have to quote this string
- cron: '30 10 * * *'
jobs:
feature-toggle-cleanup:
runs-on: ubuntu-latest
# This check is here to prevent this workflow from running on forks.
if: github.repository == 'grafana/grafana'
steps:
- name: Check out the code
uses: actions/checkout@v3
- uses: actions/setup-node@v4
with:
node-version: "20.x"
- run: npm install csv-parse
- name: Parse CVS file to see which Feature Toggles should be notified about
id: parse-csv-file
uses: actions/github-script@v7
env:
FEATURE_TOGGLES_CSV_FILE_PATH: "pkg/services/featuremgmt/toggles_gen.csv"
with:
script: |
const { default: cleanupFeatureFlags } = await import('${{ github.workspace }}/.github/workflows/scripts/feature-toggle-cleanup/feature-toggle-cleanup.mjs')
await cleanupFeatureFlags({github, context, core})

View File

@@ -1,49 +1,27 @@
name: Create or update GitHub release
on:
workflow_call:
inputs:
version:
required: true
description: Needs to match, exactly, the name of a milestone (NO v prefix)
type: string
latest:
required: false
default: "0"
description: Mark this release as latest (`1`) or not (`0`, default)
type: string
dry_run:
required: false
default: false
type: boolean
workflow_dispatch:
inputs:
version:
required: true
description: Needs to match, exactly, the name of a milestone (NO v prefix)
type: string
latest:
required: false
default: "0"
description: Mark this release as latest (`1`) or not (`0`, default)
type: string
dry_run:
required: false
default: false
type: boolean
permissions:
# contents: write allows the action(s) to create github releases
contents: write
jobs:
main:
runs-on: ubuntu-latest
steps:
- name: "Generate token"
id: generate_token
uses: tibdex/github-app-token@b62528385c34dbc9f38e5f4225ac829252d1ea92
with:
app_id: ${{ secrets.GRAFANA_DELIVERY_BOT_APP_ID }}
private_key: ${{ secrets.GRAFANA_DELIVERY_BOT_APP_PEM }}
- name: Create GitHub release (manually invoked)
uses: grafana/grafana-github-actions-go/github-release@main
with:
token: ${{ secrets.GITHUB_TOKEN }}
token: ${{ steps.generate_token.outputs.token }}
version: ${{ inputs.version }}
metrics_api_key: ${{ secrets.GRAFANA_MISC_STATS_API_KEY }}
latest: ${{ inputs.latest }}
dry_run: ${{ inputs.dry_run }}

View File

@@ -1,32 +0,0 @@
name: golangci-lint
on:
push:
paths:
- pkg/**
- .github/workflows/go_lint.yml
- go.*
branches:
- main
pull_request:
permissions:
contents: read
jobs:
lint-go:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v5
with:
go-version-file: ./go.mod
- run: CODEGEN_VERIFY=1 make gen-cue
- run: make gen-go
- name: golangci-lint
uses: golangci/golangci-lint-action@v6
with:
version: v1.60.1
args: |
--config .golangci.toml --max-same-issues=0 --max-issues-per-linter=0 --verbose $(./scripts/go-workspace/golangci-lint-includes.sh)
skip-cache: true
install-mode: binary

View File

@@ -1,121 +0,0 @@
name: Crowdin Download Action
on:
workflow_dispatch:
schedule:
- cron: "0 * * * *"
jobs:
download-sources-from-crowdin:
runs-on: ubuntu-latest
permissions:
contents: write # needed to commit changes into the PR
pull-requests: write # needed to update PR description, labels, etc
steps:
- name: Generate token
id: generate_token
uses: tibdex/github-app-token@b62528385c34dbc9f38e5f4225ac829252d1ea92
with:
app_id: ${{ secrets.GRAFANA_PR_AUTOMATION_APP_ID }}
private_key: ${{ secrets.GRAFANA_PR_AUTOMATION_APP_PEM }}
- uses: actions/checkout@v4
with:
ref: ${{ github.head_ref }}
token: ${{ steps.generate_token.outputs.token }}
- name: Download sources
id: crowdin-download
uses: crowdin/github-action@v2
with:
upload_sources: false
upload_translations: false
download_sources: false
download_translations: true
export_only_approved: true
localization_branch_name: i18n_crowdin_translations
create_pull_request: true
pull_request_title: 'I18n: Download translations from Crowdin'
pull_request_body: |
:robot: Automatic download of translations from Crowdin.
Steps for merging:
1. A quick sanity check of the changes and approve. Things to look out for:
- No changes in the English file. The source of truth is in the main branch, NOT in Crowdin.
- Translations maybe be removed if the English phrase was removed, but there should not be many of these
- Anything else that looks 'funky'. Ask if you're not sure.
2. Approve & (Auto-)merge. :tada:
If there's a conflict, close the pull request and **delete the branch**. A GH action will recreate the pull request.
Remember, the longer this pull request is open, the more likely it is that it'll get conflicts.
pull_request_labels: 'area/frontend, area/internationalization, no-changelog, no-backport'
pull_request_reviewers: 'grafana-frontend-platform'
pull_request_base_branch_name: 'main'
base_url: 'https://grafana.api.crowdin.com'
config: 'crowdin.yml'
source: 'public/locales/en-US/grafana.json'
translation: 'public/locales/%locale%/%original_file_name%'
# Magic details of the github-actions bot user, to pass CLA checks
github_user_name: "github-actions[bot]"
github_user_email: "41898282+github-actions[bot]@users.noreply.github.com"
env:
GITHUB_TOKEN: ${{ steps.generate_token.outputs.token }}
CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }}
CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }}
- name: Get pull request ID
if: steps.crowdin-download.outputs.pull_request_url
shell: bash
# Crowdin action returns us the URL of the pull request, but we need an ID for the GraphQL API
# that looks like 'PR_kwDOAOaWjc5mP_GU'
run: |
pr_id=$(gh pr view ${{ steps.crowdin-download.outputs.pull_request_url }} --json id -q .id)
echo "PULL_REQUEST_ID=$pr_id" >> "$GITHUB_ENV"
env:
GITHUB_TOKEN: ${{ steps.generate_token.outputs.token }}
- name: Get project board ID
uses: octokit/graphql-action@v2.x
id: get-project-id
if: steps.crowdin-download.outputs.pull_request_url
with:
# Frontend Platform project - https://github.com/orgs/grafana/projects/78
org: grafana
project_number: 78
query: |
query getProjectId($org: String!, $project_number: Int!){
organization(login: $org) {
projectV2(number: $project_number) {
title
id
}
}
}
env:
GITHUB_TOKEN: ${{ steps.generate_token.outputs.token }}
- name: Add to project board
uses: octokit/graphql-action@v2.x
if: steps.crowdin-download.outputs.pull_request_url
with:
projectid: ${{ fromJson(steps.get-project-id.outputs.data).organization.projectV2.id }}
prid: ${{ env.PULL_REQUEST_ID }}
query: |
mutation addPullRequestToProject($projectid: ID!, $prid: ID!){
addProjectV2ItemById(input: {projectId: $projectid, contentId: $prid}) {
item {
id
}
}
}
env:
GITHUB_TOKEN: ${{ steps.generate_token.outputs.token }}
- name: Run auto-milestone
uses: grafana/grafana-github-actions-go/auto-milestone@main
if: steps.crowdin-download.outputs.pull_request_url
with:
pr: ${{ steps.crowdin-download.outputs.pull_request_number }}
token: ${{ steps.generate_token.outputs.token }}

View File

@@ -0,0 +1,67 @@
# When Crowdin creates a pull request from the crowdin-service-branch branch,
# run `yarn i18n:extract` and commit the changed grafana.json files back into the PR
# to reformat crowdin's changes to prevent conflicts with our CI checks.
name: Fix Crowdin I18n files
on:
pull_request:
paths:
- 'public/locales/*/grafana.json'
branches:
- main # Only run on pull requests *target* main (will be merged into main)
jobs:
fix-files:
# Only run on pull requests *from* the crowdin-service-branch branch
if: github.head_ref == 'crowdin-service-branch'
name: Fix files
runs-on: ubuntu-latest
permissions:
contents: write # needed to commit changes back into the PR
pull-requests: write # needed to update PR description
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.head_ref }}
- uses: actions/setup-node@v4
with:
node-version: 20.9.0
cache: 'yarn'
- name: Install dependencies
run: yarn install
- name: Extract I18n files
run: yarn i18n:extract
- name: Commit changes
uses: stefanzweifel/git-auto-commit-action@8756aa072ef5b4a080af5dc8fef36c5d586e521d # v5.0.0
with:
commit_message: "Github Action: Auto-fix i18n files"
file_pattern: public/locales/*/grafana.json
- name: Update PR description
uses: devindford/Append_PR_Comment@32dd2619cd96ac8da9907c416c992fe265233ca8 # v1.1.3
if: ${{ ! contains(github.event.pull_request.body, 'Steps for merging') }}
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
body-update-action: prefix
body-template: |
:robot: Automatic sync of translations from Crowdin.
Steps for merging:
1. Wait for the "Github Action: Auto-fix i18n files" commit that may be required for CI to pass.
2. A quick sanity check of the changes and approve. Things to look out for:
- No changes to the English strings. The source of truth is already in the main branch, NOT Crowdin.
- Translations maybe be removed if the English phrase was removed, but there should not be many of these
- Anything else that looks 'funky'. Ask if you're not sure.
3. Approve & (Auto-)merge. :tada:
If there's a conflict, close the pull request and **delete the branch**. Crowdin will recreate the pull request eventually.
Remember, the longer this pull request is open, the more likely it is that it'll get conflicts.

View File

@@ -1,33 +0,0 @@
name: Crowdin Upload Action
on:
workflow_dispatch:
push:
paths:
- 'public/locales/en-US/grafana.json'
branches:
- main
jobs:
upload-sources-to-crowdin:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Upload sources
uses: crowdin/github-action@v2
with:
upload_sources: true
upload_sources_args: '--dest=public/locales/en-US/grafana.json'
upload_translations: false
download_translations: false
create_pull_request: false
base_url: 'https://grafana.api.crowdin.com'
config: 'crowdin.yml'
source: 'public/locales/en-US/grafana.json'
translation: 'public/locales/%locale%/%original_file_name%'
env:
CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }}
CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }}

View File

@@ -49,11 +49,11 @@ jobs:
fi
# set environment for next steps
echo "CHANNEL=${CHANNEL}" >> "$GITHUB_ENV"
echo "TEAM=${TEAM}" >> "$GITHUB_ENV"
echo "CHANNEL=${CHANNEL}" >> $GITHUB_ENV
echo "TEAM=${TEAM}" >> $GITHUB_ENV
- name: "Prepare payload"
uses: frabert/replace-string-action@v2.5
uses: frabert/replace-string-action@v2.0
id: preparePayload
with:
# replace double quotes with single quotes to avoid breaking the JSON payload sent to Slack
@@ -64,29 +64,29 @@ jobs:
- name: Get Token
id: get_workflow_token
uses: tibdex/github-app-token@3beb63f4bd073e61482598c45c71c1019b59b73a
uses: peter-murray/workflow-application-token-action@v2
with:
app_id: ${{ secrets.APP_GRAFANA_TEAM_CHECKER_ID }}
private_key: ${{ secrets.APP_GRAFANA_TEAM_CHECKER_KEY }}
application_id: ${{ secrets.APP_GRAFANA_TEAM_CHECKER_ID }}
application_private_key: ${{ secrets.APP_GRAFANA_TEAM_CHECKER_KEY }}
- name: "Check that issue author is not part of the team"
if: ${{ env.TEAM != 'null' }}
run: |
response=$(gh api /orgs/grafana/teams/${{ env.TEAM }}/memberships/${{ github.event.issue.user.login }} -i -H "Accept: application/vnd.github.v3+json")
STATUS_CODE=$(echo "$response" | head -n 1 | cut -d' ' -f2)
if [ "$STATUS_CODE" -eq "404" ]; then
if [ "$status_code" -eq 404 ]; then
echo "The user was not found in the team."
echo "USER_FOUND=false" >> "$GITHUB_ENV"
echo "USER_FOUND=false" >> $GITHUB_ENV
else
echo "The user was potentially found in the team"
echo "USER_FOUND=maybe" >> "$GITHUB_ENV"
echo "USER_FOUND=maybe" >> $GITHUB_ENV
fi
env:
GITHUB_TOKEN: ${{ steps.get_workflow_token.outputs.token }}
- name: "Send Slack notification"
if: ${{ (env.CHANNEL != 'null') && ((env.USER_FOUND == 'false') || (env.TEAM != 'null')) }}
uses: slackapi/slack-github-action@v1.26.0
uses: slackapi/slack-github-action@v1.24.0
with:
payload: >
{

View File

@@ -1,120 +1,28 @@
name: Run commands when issues are opened
# important: this workflow uses a github app that is strictly limited
# to issues. If you want to change the triggers for this workflow,
# please review if the permissions are still sufficient.
on:
issues:
types: [opened]
concurrency:
group: issue-opened-${{ github.event.issue.number }}
permissions:
contents: read
id-token: write
jobs:
main:
runs-on: ubuntu-latest
if: github.repository == 'grafana/grafana'
steps:
- name: Checkout Actions
uses: actions/checkout@v4
with:
repository: "grafana/grafana-github-actions"
path: ./actions
ref: main
- name: Install Actions
run: npm install --production --prefix ./actions
# give issue-openers a chance to add labels after submit
- name: Sleep for 2 minutes
run: sleep 2m
shell: bash
- name: "Get vault secrets"
id: vault-secrets
uses: grafana/shared-workflows/actions/get-vault-secrets@main
with:
# Secrets placed in the ci/repo/grafana/grafana/plugins_platform_issue_commands_github_bot path in Vault
repo_secrets: |
GH_APP_ID=plugins_platform_issue_commands_github_bot:app_id
GH_APP_PEM=plugins_platform_issue_commands_github_bot:app_pem
- name: "Generate token"
id: generate_token
uses: tibdex/github-app-token@b62528385c34dbc9f38e5f4225ac829252d1ea92
with:
app_id: ${{ env.GH_APP_ID }}
private_key: ${{ env.GH_APP_PEM }}
- name: Run Commands
uses: ./actions/commands
with:
metricsWriteAPIKey: ${{secrets.GRAFANA_MISC_STATS_API_KEY}}
token: ${{ steps.generate_token.outputs.token }}
token: ${{secrets.ISSUE_COMMANDS_TOKEN}}
configPath: "issue-opened"
auto-triage:
needs: [main]
if: github.repository == 'grafana/grafana' && github.event.issue.author_association != 'MEMBER' && github.event.issue.author_association != 'OWNER'
runs-on: ubuntu-latest
steps:
- name: "Get vault secrets"
id: vault-secrets
uses: grafana/shared-workflows/actions/get-vault-secrets@main
with:
# Secrets placed in the ci/repo/grafana/grafana/plugins_platform_issue_triager path in Vault
repo_secrets: |
AUTOTRIAGER_OPENAI_API_KEY=plugins_platform_issue_triager:AUTOTRIAGER_OPENAI_API_KEY
AUTOTRIAGER_SLACK_WEBHOOK_URL=plugins_platform_issue_triager:AUTOTRIAGER_SLACK_WEBHOOK_URL
GH_APP_ID=plugins_platform_issue_commands_github_bot:app_id
GH_APP_PEM=plugins_platform_issue_commands_github_bot:app_pem
- name: "Generate token"
id: generate_token
uses: tibdex/github-app-token@b62528385c34dbc9f38e5f4225ac829252d1ea92
with:
app_id: ${{ env.GH_APP_ID }}
private_key: ${{ env.GH_APP_PEM }}
- name: Checkout auto-triager repository
uses: actions/checkout@v4
with:
repository: grafana/auto-triager
path: auto-triager
token: ${{ steps.generate_token.outputs.token }}
- name: Send issue to the auto triager action
id: auto_triage
# https://github.com/grafana/auto-triager/blob/main/action.yml
#uses: grafana/auto-triager@main
uses: ./auto-triager
with:
token: ${{ steps.generate_token.outputs.token }}
issue_number: ${{ github.event.issue.number }}
openai_api_key: ${{ env.AUTOTRIAGER_OPENAI_API_KEY }}
add_labels: true
- name: Labels from auto triage
run: |
echo ${{ steps.auto_triage.outputs.triage_labels }}
- name: "Send Slack notification"
if: ${{ steps.auto_triage.outputs.triage_labels != '' }}
uses: slackapi/slack-github-action@v1.27.0
with:
payload: >
{
"icon_emoji": ":robocto:",
"username": "Auto Triager",
"type": "mrkdwn",
"text": "Auto triager found the following labels: ${{ steps.auto_triage.outputs.triage_labels }} for issue ${{ github.event.issue.html_url }}",
"channel": "#triage-automation-ci"
}
env:
SLACK_WEBHOOK_URL: ${{ env.AUTOTRIAGER_SLACK_WEBHOOK_URL }}

View File

@@ -25,7 +25,7 @@ jobs:
id: check
shell: bash
run: |
if [ -n "${{ (secrets.GRAFANA_MISC_STATS_API_KEY != '') || '' }}" ]; then
if [ -n "${{ (secrets.GRAFANA_MISC_STATS_API_KEY != '' && secrets.GH_BOT_ACCESS_TOKEN != '') || '' }}" ]; then
echo "has-secrets=1" >> "$GITHUB_OUTPUT"
fi
@@ -46,5 +46,5 @@ jobs:
uses: ./actions/metrics-collector
with:
metricsWriteAPIKey: ${{secrets.GRAFANA_MISC_STATS_API_KEY}}
token: ${{secrets.GITHUB_TOKEN}}
token: ${{secrets.GH_BOT_ACCESS_TOKEN}}
configPath: "metrics-collector"

View File

@@ -9,7 +9,6 @@ on:
- labeled
- unlabeled
- edited
- auto_merge_enabled
issues:
types:
- milestoned

View File

@@ -14,29 +14,19 @@ jobs:
analyze:
name: Analyze
runs-on: ubuntu-latest
if: github.repository == 'grafana/grafana'
steps:
- name: "Generate token"
id: generate_token
continue-on-error: true
uses: tibdex/github-app-token@3beb63f4bd073e61482598c45c71c1019b59b73a
with:
app_id: ${{ secrets.GRAFANA_DELIVERY_BOT_APP_ID }}
private_key: ${{ secrets.GRAFANA_DELIVERY_BOT_APP_PEM }}
- name: Checkout repository
uses: actions/checkout@v4
with:
# We must fetch at least the immediate parents so that if this is
# a pull request then we can checkout the head.
fetch-depth: 2
token: ${{ steps.generate_token.outputs.token }}
- name: Set go version
uses: actions/setup-go@v4
with:
go-version-file: go.mod
go-version: '1.21.10'
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL

View File

@@ -16,7 +16,6 @@ jobs:
analyze:
name: Analyze
runs-on: ubuntu-latest
if: github.repository == 'grafana/grafana'
steps:
- name: Checkout repository

View File

@@ -14,7 +14,6 @@ jobs:
analyze:
name: Analyze
runs-on: ubuntu-latest
if: github.repository == 'grafana/grafana'
steps:
- name: Checkout repository

View File

@@ -1,35 +0,0 @@
name: "Go Workspace Check"
on:
workflow_dispatch:
pull_request:
branches: [main]
jobs:
check:
name: Go Workspace Check
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set go version
uses: actions/setup-go@v4
with:
go-version-file: go.mod
- name: Update workspace
run: make update-workspace
- name: Check for go mod & workspace changes
run: |
if ! git diff --exit-code --quiet; then
echo "Changes detected:"
git diff
echo "Please run 'make update-workspace' and commit the changes."
echo "If there is a change in enterprise dependencies, please update pkg/extensions/main.go."
exit 1
fi
- name: Ensure Dockerfile contains submodule COPY commands
run: ./scripts/go-workspace/validate-dockerfile.sh

View File

@@ -1,38 +0,0 @@
name: "K8s Codegen Check"
on:
workflow_dispatch:
pull_request:
branches: [main]
paths:
- "pkg/apis/**"
- "pkg/aggregator/apis/**"
- "pkg/apimachinery/apis/**"
- "hack/**"
- "*.sum"
jobs:
check:
name: K8s Codegen Check
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set go version
uses: actions/setup-go@v4
with:
go-version-file: go.mod
- name: Update k8s codegen
run: ./hack/update-codegen.sh
- name: Check for k8s codegen changes
run: |
if ! git diff --exit-code --quiet; then
echo "Changes detected:"
git diff
echo "Please run './hack/update-codegen.sh' and commit the changes."
exit 1
fi

View File

@@ -18,7 +18,6 @@ on:
jobs:
trigger_downstream_patch_check:
uses: grafana/security-patch-actions/.github/workflows/test-patches.yml@main
if: github.repository == 'grafana/grafana'
with:
src_repo: "${{ github.repository }}"
src_ref: "${{ github.head_ref }}" # this is the source branch name, Ex: "feature/newthing"

View File

@@ -36,7 +36,7 @@ jobs:
- name: "Setup Go"
uses: "actions/setup-go@v4"
with:
go-version-file: go.mod
go-version: '1.21.10'
- name: "Verify kinds"
run: go run .github/workflows/scripts/kinds/verify-kinds.go

View File

@@ -39,7 +39,7 @@ jobs:
- name: "Setup Go"
uses: "actions/setup-go@v4"
with:
go-version-file: go.mod
go-version: '1.21.10'
- name: "Verify kinds"
run: go run .github/workflows/scripts/kinds/verify-kinds.go

View File

@@ -1,21 +1,38 @@
name: publish-technical-documentation-next
name: "publish-technical-documentation-next"
on:
push:
branches:
- main
- "main"
paths:
- "docs/sources/**"
workflow_dispatch:
jobs:
sync:
if: github.repository == 'grafana/grafana'
permissions:
contents: read
id-token: write
runs-on: ubuntu-latest
runs-on: "ubuntu-latest"
steps:
- uses: actions/checkout@v4
- uses: grafana/writers-toolkit/publish-technical-documentation@publish-technical-documentation/v1
- name: "Checkout Grafana repo"
uses: "actions/checkout@v4"
- name: "Clone website-sync Action"
# WEBSITE_SYNC_TOKEN is a fine-grained GitHub Personal Access Token that expires.
# It must be regenerated in the grafanabot GitHub account and requires a Grafana organization
# GitHub administrator to update the organization secret.
# The IT helpdesk can update the organization secret.
run: "git clone --single-branch --no-tags --depth 1 -b master https://grafanabot:${{ secrets.WEBSITE_SYNC_TOKEN }}@github.com/grafana/website-sync ./.github/actions/website-sync"
- name: "Publish to website repository (next)"
uses: "./.github/actions/website-sync"
id: "publish-next"
with:
website_directory: content/docs/grafana/next
repository: "grafana/website"
branch: "master"
host: "github.com"
# PUBLISH_TO_WEBSITE_TOKEN is a fine-grained GitHub Personal Access Token that expires.
# It must be regenerated in the grafanabot GitHub account and requires a Grafana organization
# GitHub administrator to update the organization secret.
# The IT helpdesk can update the organization secret.
github_pat: "grafanabot:${{ secrets.PUBLISH_TO_WEBSITE_TOKEN }}"
source_folder: "docs/sources"
target_folder: "content/docs/grafana/next"

View File

@@ -1,4 +1,4 @@
name: publish-technical-documentation-release
name: "publish-technical-documentation-release"
on:
push:
@@ -12,18 +12,63 @@ on:
jobs:
sync:
if: github.repository == 'grafana/grafana'
permissions:
contents: read
id-token: write
runs-on: ubuntu-latest
runs-on: "ubuntu-latest"
steps:
- uses: actions/checkout@v4
- name: "Checkout Grafana repo"
uses: "actions/checkout@v4"
with:
fetch-depth: 0
- uses: grafana/writers-toolkit/publish-technical-documentation-release@publish-technical-documentation-release/v2
- name: "Checkout Actions library"
uses: "actions/checkout@v4"
with:
release_tag_regexp: "^v(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)$"
release_branch_regexp: "^v(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)\\.x$"
release_branch_with_patch_regexp: "^v(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)$"
website_directory: content/docs/grafana
version_suffix: ""
repository: "grafana/grafana-github-actions"
path: "./actions"
- name: "Install Actions from library"
run: "npm install --production --prefix ./actions"
- name: "Determine if there is a matching release tag"
id: "has-matching-release-tag"
uses: "./actions/has-matching-release-tag"
with:
ref_name: "${{ github.ref_name }}"
release_tag_regexp: "^v(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)$"
release_branch_regexp: "^v(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.x$"
- name: "Determine technical documentation version"
if: "steps.has-matching-release-tag.outputs.bool == 'true'"
uses: "./actions/docs-target"
id: "target"
with:
ref_name: "${{ github.ref_name }}"
- name: "Clone website-sync Action"
if: "steps.has-matching-release-tag.outputs.bool == 'true'"
# WEBSITE_SYNC_TOKEN is a fine-grained GitHub Personal Access Token that expires.
# It must be regenerated in the grafanabot GitHub account and requires a Grafana organization
# GitHub administrator to update the organization secret.
# The IT helpdesk can update the organization secret.
run: "git clone --single-branch --no-tags --depth 1 -b master https://grafanabot:${{ secrets.WEBSITE_SYNC_TOKEN }}@github.com/grafana/website-sync ./.github/actions/website-sync"
- name: "Switch to HEAD of version branch for tags"
# Tags aren't necessarily made to the HEAD of the version branch.
# The documentation to be published is always on the HEAD of the version branch.
if: "steps.has-matching-release-tag.outputs.bool == 'true' && github.ref_type == 'tag'"
run: "git switch --detach origin/${{ steps.target.outputs.target }}.x"
- name: "Publish to website repository (release)"
if: "steps.has-matching-release-tag.outputs.bool == 'true'"
uses: "./.github/actions/website-sync"
id: "publish-release"
with:
repository: "grafana/website"
branch: "master"
host: "github.com"
# PUBLISH_TO_WEBSITE_TOKEN is a fine-grained GitHub Personal Access Token that expires.
# It must be regenerated in the grafanabot GitHub account and requires a Grafana organization
# GitHub administrator to update the organization secret.
# The IT helpdesk can update the organization secret.
github_pat: "grafanabot:${{ secrets.PUBLISH_TO_WEBSITE_TOKEN }}"
source_folder: "docs/sources"
target_folder: "content/docs/grafana/${{ steps.target.outputs.target }}"

View File

@@ -1,80 +0,0 @@
# This workflow runs whenever the release PR is merged. It includes post-release communication processes like
# posting to slack, the website, community forums, etc.
# Only things that happen after a release is completed and all of the necessary code changes (like the changelog) are made.
name: Post-release
on:
workflow_dispatch:
inputs:
dry_run:
required: false
default: true
type: boolean
version:
required: true
latest:
type: boolean
default: false
pull_request:
types:
- closed
branches:
- 'main'
- 'v*.*.*'
jobs:
setup:
if: ${{ github.event_name == 'workflow_dispatch' || (github.event.pull_request.merged == true && startsWith(github.head_ref, 'release/')) }}
name: Setup and establish latest
outputs:
version: ${{ steps.output.outputs.version }}
dry_run: ${{ steps.output.outputs.dry_run }}
latest: ${{ steps.output.outputs.latest }}
runs-on: ubuntu-latest
steps:
# The github-release action expects a `LATEST` value of a string of either '1' or '0'
- if: ${{ github.event_name == 'workflow_dispatch' }}
run: |
echo setting up GITHUB_ENV for ${{ github.event_name }}
echo "VERSION=${{ inputs.version }}" >> $GITHUB_ENV
echo "DRY_RUN=${{ inputs.dry_run }}" >> $GITHUB_ENV
echo "LATEST=${{ inputs.latest && '1' || '0' }}" >> $GITHUB_ENV
- if: ${{ github.event.pull_request.merged == true && startsWith(github.head_ref, 'release/') }}
run: |
echo "VERSION=$(echo ${{ github.head_ref }} | sed -e 's/release\/.*\///g')" >> $GITHUB_ENV
echo "DRY_RUN=${{ contains(github.event.pull_request.labels.*.name, 'release/dry-run') }}" >> $GITHUB_ENV
echo "LATEST=${{ contains(github.event.pull_request.labels.*.name, 'release/latest') && '1' || '0' }}" >> $GITHUB_ENV
- id: output
run: |
echo "dry_run: $DRY_RUN"
echo "latest: $LATEST"
echo "version: $VERSION"
echo "dry_run=$DRY_RUN" >> "$GITHUB_OUTPUT"
echo "latest=$LATEST" >> "$GITHUB_OUTPUT"
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
post_changelog_on_forum:
needs: setup
uses: ./.github/workflows/community-release.yml
secrets:
GRAFANA_MISC_STATS_API_KEY: ${{ secrets.GRAFANA_MISC_STATS_API_KEY }}
GRAFANABOT_FORUM_KEY: ${{ secrets.GRAFANABOT_FORUM_KEY }}
with:
version: ${{ needs.setup.outputs.version }}
dry_run: ${{ needs.setup.outputs.dry_run == 'true' }}
create_github_release:
# a github release requires a git tag
# The github-release action retrieves the changelog using the /repos/grafana/grafana/contents/CHANGELOG.md API
# endpoint.
needs: setup
uses: ./.github/workflows/github-release.yml
with:
version: ${{ needs.setup.outputs.version }}
dry_run: ${{ needs.setup.outputs.dry_run == 'true' }}
latest: ${{ needs.setup.outputs.latest }}
post_on_slack:
needs: setup
runs-on: ubuntu-latest
steps:
- run: |
echo announce on slack that ${{ needs.setup.outputs.version }} has been released
echo dry run: ${{ needs.setup.outputs.dry_run }}

View File

@@ -1,172 +0,0 @@
# This workflow creates a new PR in Grafana which is triggered after a release is completed.
# It should include all code changes that are needed after a release is done. This includes the changelog update and
# version bumps, but could include more in the future.
# Please refrain from including any processes that do not result in code changes in this workflow. Instead, they should
# either be triggered in the release promotion process or in the release comms process (that is triggered by merging
# this PR).
name: Complete a Grafana release
on:
workflow_dispatch:
inputs:
previous_version:
type: string
required: false
description: 'The release version (semver, git tag, branch or commit) to use for comparison'
version:
required: true
type: string
description: The version of Grafana that is being released
target:
required: true
type: string
description: The base branch that these changes are being merged into
backport:
required: false
type: string
description: Branch to backport these changes to
dry_run:
required: false
default: false
type: boolean
latest:
required: false
default: false
type: boolean
permissions:
contents: write
pull-requests: write
jobs:
push-changelog-to-main:
name: Create PR to main to update the changelog
uses: ./.github/workflows/changelog.yml
with:
previous_version: ${{inputs.previous_version}}
version: ${{ inputs.version }}
latest: ${{ inputs.latest }}
dry_run: ${{ inputs.dry_run }}
target: main
secrets:
GRAFANA_DELIVERY_BOT_APP_ID: ${{ secrets.GRAFANA_DELIVERY_BOT_APP_ID }}
GRAFANA_DELIVERY_BOT_APP_PEM: ${{ secrets.GRAFANA_DELIVERY_BOT_APP_PEM }}
create-prs:
name: Create Release PR
runs-on: ubuntu-latest
if: github.repository == 'grafana/grafana'
steps:
- name: Generate bot token
id: generate_token
uses: tibdex/github-app-token@b62528385c34dbc9f38e5f4225ac829252d1ea92
with:
app_id: ${{ secrets.GRAFANA_DELIVERY_BOT_APP_ID }}
private_key: ${{ secrets.GRAFANA_DELIVERY_BOT_APP_PEM }}
- name: Checkout Grafana
uses: actions/checkout@v4
with:
ref: ${{ inputs.target }}
fetch-depth: 0
fetch-tags: true
- name: Checkout Grafana (main)
uses: actions/checkout@v4
with:
ref: main
fetch-depth: '0'
fetch-tags: 'false'
path: .grafana-main
- name: Setup nodejs environment
uses: actions/setup-node@v4
with:
node-version-file: .nvmrc
- name: Configure git user
run: |
git config --local user.name "github-actions[bot]"
git config --local user.email "github-actions[bot]@users.noreply.github.com"
git config --local --add --bool push.autoSetupRemote true
- name: Create branch
run: git checkout -b "release/${{ github.run_id }}/${{ inputs.version }}"
- name: Generate changelog
id: changelog
uses: ./.grafana-main/.github/workflows/actions/changelog
with:
github_token: ${{ steps.generate_token.outputs.token }}
target: v${{ inputs.version }}
output_file: changelog_items.md
- name: Patch CHANGELOG.md
run: |
# Prepare CHANGELOG.md content with version delimiters
(
echo
echo "# ${{ inputs.version}} ($(date '+%F'))"
echo
cat changelog_items.md
) > CHANGELOG.part
# Check if a version exists in the changelog
if grep -q "<!-- ${{ inputs.version}} START" CHANGELOG.md ; then
# Replace the content between START and END delimiters
echo "Version ${{ inputs.version }} is found in the CHANGELOG.md, patching contents..."
sed -i -e '/${{ inputs.version }} START/,/${{ inputs.version }} END/{//!d;}' \
-e '/${{ inputs.version }} START/r CHANGELOG.part' CHANGELOG.md
else
# Prepend changelog part to the main changelog file
echo "Version ${{ inputs.version }} not found in the CHANGELOG.md"
(
echo "<!-- ${{ inputs.version }} START -->"
cat CHANGELOG.part
echo "<!-- ${{ inputs.version }} END -->"
cat CHANGELOG.md
) > CHANGELOG.tmp
mv CHANGELOG.tmp CHANGELOG.md
fi
rm -f CHANGELOG.part changelog_items.md
git diff CHANGELOG.md
- name: "Prettify CHANGELOG.md"
run: npx prettier --write CHANGELOG.md
- name: Commit CHANGELOG.md changes
run: git add CHANGELOG.md && git commit --allow-empty -m "Update changelog" CHANGELOG.md
- name: Update package.json versions
uses: ./.grafana-main/pkg/build/actions/bump-version
with:
version: 'patch'
- name: Add package.json changes
run: |
git add package.json lerna.json yarn.lock packages public
git commit -m "Update version to ${{ inputs.version }}"
- name: Git push
if: ${{ inputs.dry_run }} != true
run: git push --set-upstream origin release/${{ github.run_id }}/${{ inputs.version }}
- name: Create PR without backports
if: "${{ inputs.backport == '' }}"
run: >
gh pr create \
$( [ "x${{ inputs.latest }}" == "xtrue" ] && printf %s '-l "release/latest"') \
-l "no-changelog" \
--dry-run=${{ inputs.dry_run }} \
-B "${{ inputs.target }}" \
--title "Release: ${{ inputs.version }}" \
--body "These code changes must be merged after a release is complete"
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Create PR with backports
if: "${{ inputs.backport != '' }}"
run: >
gh pr create \
$( [ "x${{ inputs.latest }}" == "xtrue" ] && printf %s '-l "release/latest"') \
-l "product-approved" \
-l "no-changelog" \
--dry-run=${{ inputs.dry_run }} \
-B "${{ inputs.target }}" \
--title "Release: ${{ inputs.version }}" \
--body "These code changes must be merged after a release is complete"
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View File

@@ -0,0 +1,38 @@
import { parse } from 'csv-parse/sync';
import fs from 'fs';
/***
* Feauture Flag Structure example
* Name: 'disableEnvelopeEncryption',
Stage: 'GA',
Owner: '@grafana/grafana-as-code',
Created: '2022-05-24',
requiresDevMode: 'false',
RequiresLicense: 'false',
RequiresRestart: 'false',
FrontendOnly: 'false'
*
*/
export default function cleanupFeatureFlags() {
const today = new Date();
const sixMonthAgo = today.setMonth(today.getMonth() - 6);
const inputFileContents = fs.readFileSync(process.env.FEATURE_TOGGLES_CSV_FILE_PATH);
const parsedFeatureFlags = parse(inputFileContents, {
columns: true,
skip_empty_lines: true,
cast: true,
cast_date: true,
});
// Here we can have the custom logic of how to handle what type of feature flag - e.g. GA can be treated differently than experimental and so on.
for (const flag of parsedFeatureFlags) {
if (flag.Created < sixMonthAgo) {
console.log(`The flag ${flag.Name} was created more than 6 months ago. It should be checked.`);
console.log(flag);
}
}
}

View File

@@ -1,111 +1,121 @@
package main
import (
"archive/zip"
"context"
"errors"
"fmt"
"golang.org/x/text/cases"
"golang.org/x/text/language"
"io"
"net/http"
"os"
"path/filepath"
"regexp"
"strconv"
"strings"
"testing/fstest"
"cuelang.org/go/cue"
cueformat "cuelang.org/go/cue/format"
"github.com/google/go-github/github"
"github.com/grafana/codejen"
"github.com/grafana/grafana/pkg/registry/schemas"
"github.com/grafana/grafana/pkg/codegen"
"github.com/grafana/grafana/pkg/cuectx"
"github.com/grafana/grafana/pkg/plugins/pfs"
"github.com/grafana/grafana/pkg/plugins/pfs/corelist"
"github.com/grafana/grafana/pkg/registry/corekind"
"github.com/grafana/kindsys"
"github.com/grafana/thema"
"golang.org/x/oauth2"
)
var nonAlphaNumRegex = regexp.MustCompile("[^a-zA-Z0-9 ]+")
const (
GITHUB_OWNER = "grafana"
GITHUB_REPO = "kind-registry"
)
// main This script verifies that stable kinds are not updated once published (new schemas
// can be added but existing ones cannot be updated).
// It generates kind files into a local "next" folder, ready to be published in the kind-registry repo.
// If the env variable CODEGEN_VERIFY is not present, this also generates kind files into a
// local "next" folder, ready to be published in the kind-registry repo.
// If kind names are given as parameters, the script will make the above actions only for the
// given kinds.
func main() {
var corek []kindsys.Kind
var compok []kindsys.Composable
kindRegistry, err := NewKindRegistry()
defer kindRegistry.cleanUp()
if err != nil {
die(err)
}
// Search for the latest version directory present in the kind-registry repo
latestRegistryDir, err := kindRegistry.findLatestDir()
if err != nil {
die(fmt.Errorf("failed to get latest directory for published kinds: %s", err))
}
errs := make([]error, 0)
// Kind verification
for _, kind := range corekind.NewBase(nil).All() {
name := kind.Props().Common().MachineName
err := verifyKind(kindRegistry, kind, name, "core", latestRegistryDir)
if err != nil {
errs = append(errs, err)
continue
}
corek = append(corek, kind)
}
for _, pp := range corelist.New(nil) {
for _, kind := range pp.ComposableKinds {
si, err := kindsys.FindSchemaInterface(kind.Def().Properties.SchemaInterface)
if err != nil {
errs = append(errs, err)
continue
}
name := strings.ToLower(fmt.Sprintf("%s/%s", strings.TrimSuffix(kind.Lineage().Name(), si.Name()), si.Name()))
err = verifyKind(kindRegistry, kind, name, "composable", latestRegistryDir)
if err != nil {
errs = append(errs, err)
continue
}
compok = append(compok, kind)
}
}
die(errs...)
if _, set := os.LookupEnv("CODEGEN_VERIFY"); set {
os.Exit(0)
}
// File generation
jfs := codejen.NewFS()
outputPath := filepath.Join(".github", "workflows", "scripts", "kinds")
corekinds, err := schemas.GetCoreKinds()
die(err)
composableKinds, err := schemas.GetComposableKinds()
die(err)
coreJennies := codejen.JennyList[schemas.CoreKind]{}
coreJennies := codejen.JennyList[kindsys.Kind]{}
coreJennies.Append(
CoreKindRegistryJenny(outputPath),
KindRegistryJenny(outputPath),
)
corefs, err := coreJennies.GenerateFS(corekinds...)
corefs, err := coreJennies.GenerateFS(corek...)
die(err)
die(jfs.Merge(corefs))
composableJennies := codejen.JennyList[schemas.ComposableKind]{}
composableJennies := codejen.JennyList[kindsys.Composable]{}
composableJennies.Append(
ComposableKindRegistryJenny(outputPath),
)
composablefs, err := composableJennies.GenerateFS(composableKinds...)
composablefs, err := composableJennies.GenerateFS(compok...)
die(err)
die(jfs.Merge(composablefs))
if err = jfs.Write(context.Background(), ""); err != nil {
die(fmt.Errorf("error while writing generated code to disk:\n%s", err))
}
if err := copyCueSchemas("packages/grafana-schema/src/common", filepath.Join(outputPath, "next")); err != nil {
die(fmt.Errorf("error while copying the grafana-schema/common package:\n%s", err))
}
}
func copyCueSchemas(fromDir string, toDir string) error {
baseTargetDir := filepath.Base(fromDir)
return filepath.Walk(fromDir, func(path string, info os.FileInfo, err error) error {
if err != nil {
return err
}
targetPath := filepath.Join(
toDir,
baseTargetDir,
strings.TrimPrefix(path, fromDir),
)
if info.IsDir() {
return ensureDirectoryExists(targetPath, info.Mode())
}
if !strings.HasSuffix(path, ".cue") {
return nil
}
return copyFile(path, targetPath, info.Mode())
})
}
func copyFile(from string, to string, mode os.FileMode) error {
input, err := os.ReadFile(from)
if err != nil {
return err
}
return os.WriteFile(to, input, mode)
}
func ensureDirectoryExists(directory string, mode os.FileMode) error {
_, err := os.Stat(directory)
if errors.Is(err, os.ErrNotExist) {
if err = os.Mkdir(directory, mode); err != nil {
return err
}
} else if err != nil {
return err
}
return os.Chmod(directory, mode)
}
func die(errs ...error) {
@@ -117,8 +127,101 @@ func die(errs ...error) {
}
}
// CoreKindRegistryJenny generates kind files into the "next" folder of the local kind registry.
func CoreKindRegistryJenny(path string) codejen.OneToOne[schemas.CoreKind] {
// verifyKind verifies that stable kinds are not updated once published (new schemas
// can be added but existing ones cannot be updated)
func verifyKind(registry *kindRegistry, kind kindsys.Kind, name string, category string, latestRegistryDir string) error {
oldKindString, err := registry.getPublishedKind(name, category, latestRegistryDir)
if err != nil {
return err
}
var oldKind kindsys.Kind
if oldKindString != "" {
switch category {
case "core":
oldKind, err = loadCoreKind(name, oldKindString)
case "composable":
oldKind, err = loadComposableKind(name, oldKindString)
default:
return fmt.Errorf("kind can only be core or composable")
}
}
if err != nil {
return err
}
// Kind is new - no need to compare it
if oldKind == nil {
return nil
}
// Check that maturity isn't downgraded
if kind.Maturity().Less(oldKind.Maturity()) {
return fmt.Errorf("kind maturity can't be downgraded once a kind is published")
}
if oldKind.Maturity().Less(kindsys.MaturityStable) {
return nil
}
// Check that old schemas do not contain updates
err = thema.IsAppendOnly(oldKind.Lineage(), kind.Lineage())
if err != nil {
return fmt.Errorf("existing schemas in lineage %s cannot be modified: %w", name, err)
}
return nil
}
func isLess(v1 []uint64, v2 []uint64) bool {
if len(v1) == 1 || len(v2) == 1 {
return v1[0] < v2[0]
}
return v1[0] < v2[0] || (v1[0] == v2[0] && isLess(v1[2:], v2[2:]))
}
func loadCoreKind(name string, kind string) (kindsys.Kind, error) {
fs := fstest.MapFS{
fmt.Sprintf("%s.cue", name): &fstest.MapFile{
Data: []byte(kind),
},
}
rt := cuectx.GrafanaThemaRuntime()
def, err := cuectx.LoadCoreKindDef(fmt.Sprintf("%s.cue", name), rt.Context(), fs)
if err != nil {
return nil, fmt.Errorf("%s is not a valid kind: %w", name, err)
}
return kindsys.BindCore(rt, def)
}
func loadComposableKind(name string, kind string) (kindsys.Kind, error) {
parts := strings.Split(name, "/")
if len(parts) > 1 {
name = parts[1]
}
fs := fstest.MapFS{
fmt.Sprintf("%s.cue", name): &fstest.MapFile{
Data: []byte(kind),
},
}
rt := cuectx.GrafanaThemaRuntime()
def, err := pfs.LoadComposableKindDef(fs, rt, fmt.Sprintf("%s.cue", name))
if err != nil {
return nil, fmt.Errorf("%s is not a valid kind: %w", name, err)
}
return kindsys.BindComposable(rt, def)
}
// KindRegistryJenny generates kind files into the "next" folder of the local kind registry.
func KindRegistryJenny(path string) codegen.OneToOne {
return &kindregjenny{
path: path,
}
@@ -132,46 +235,22 @@ func (j *kindregjenny) JennyName() string {
return "KindRegistryJenny"
}
func (j *kindregjenny) Generate(kind schemas.CoreKind) (*codejen.File, error) {
newKindBytes, err := kindToBytes(kind.CueFile)
func (j *kindregjenny) Generate(kind kindsys.Kind) (*codejen.File, error) {
name := kind.Props().Common().MachineName
core, ok := kind.(kindsys.Core)
if !ok {
return nil, fmt.Errorf("kind sent to KindRegistryJenny must be a core kind")
}
newKindBytes, err := kindToBytes(core.Def().V)
if err != nil {
return nil, err
}
path := filepath.Join(j.path, "next", "core", kind.Name, kind.Name+".cue")
path := filepath.Join(j.path, "next", "core", name, name+".cue")
return codejen.NewFile(path, newKindBytes, j), nil
}
// ComposableKindRegistryJenny generates kind files into the "next" folder of the local kind registry.
func ComposableKindRegistryJenny(path string) codejen.OneToOne[schemas.ComposableKind] {
return &ckrJenny{
path: path,
}
}
type ckrJenny struct {
path string
}
func (j *ckrJenny) JennyName() string {
return "ComposableKindRegistryJenny"
}
func (j *ckrJenny) Generate(k schemas.ComposableKind) (*codejen.File, error) {
name := strings.ToLower(fmt.Sprintf("%s/%s", k.Name, k.Filename))
v := fixComposableKindFormat(k)
newKindBytes, err := kindToBytes(v)
if err != nil {
return nil, err
}
newKindBytes = []byte(fmt.Sprintf("package grafanaplugin\n\n%s", newKindBytes))
return codejen.NewFile(filepath.Join(j.path, "next", "composable", name), newKindBytes, j), nil
}
// kindToBytes converts a kind cue value to a .cue file content
func kindToBytes(kind cue.Value) ([]byte, error) {
node := kind.Syntax(
@@ -183,47 +262,164 @@ func kindToBytes(kind cue.Value) ([]byte, error) {
return cueformat.Node(node)
}
func fixComposableKindFormat(schema schemas.ComposableKind) cue.Value {
variant := "PanelCfg"
if schema.CueFile.LookupPath(cue.ParsePath("composableKinds.DataQuery")).Exists() {
variant = "DataQuery"
// ComposableKindRegistryJenny generates kind files into the "next" folder of the local kind registry.
func ComposableKindRegistryJenny(path string) codejen.OneToOne[kindsys.Composable] {
return &ckrJenny{
path: path,
}
newCue := schema.CueFile.Context().CompileString(
fmt.Sprintf("schemaInterface: %q\n", variant) +
fmt.Sprintf("name: %q + %q\n\n", UpperCamelCase(schema.Name), variant) +
"lineage: _",
)
lineagePath := cue.MakePath(cue.Str("composableKinds"), cue.Str(variant), cue.Str("lineage"))
return newCue.FillPath(cue.MakePath(cue.Str("lineage")), schema.CueFile.LookupPath(lineagePath))
}
func UpperCamelCase(s string) string {
s = LowerCamelCase(s)
// Uppercase the first letter
if len(s) > 0 {
s = strings.ToUpper(s[:1]) + s[1:]
}
return s
type ckrJenny struct {
path string
}
func LowerCamelCase(s string) string {
// Replace all non-alphanumeric characters by spaces
s = nonAlphaNumRegex.ReplaceAllString(s, " ")
func (j *ckrJenny) JennyName() string {
return "ComposableKindRegistryJenny"
}
// Title case s
s = cases.Title(language.AmericanEnglish, cases.NoLower).String(s)
// Remove all spaces
s = strings.ReplaceAll(s, " ", "")
// Lowercase the first letter
if len(s) > 0 {
s = strings.ToLower(s[:1]) + s[1:]
func (j *ckrJenny) Generate(k kindsys.Composable) (*codejen.File, error) {
si, err := kindsys.FindSchemaInterface(k.Def().Properties.SchemaInterface)
if err != nil {
panic(err)
}
return s
name := strings.ToLower(fmt.Sprintf("%s/%s", strings.TrimSuffix(k.Lineage().Name(), si.Name()), si.Name()))
newKindBytes, err := kindToBytes(k.Def().V)
if err != nil {
return nil, err
}
newKindBytes = []byte(fmt.Sprintf("package grafanaplugin\n\n%s", newKindBytes))
return codejen.NewFile(filepath.Join(j.path, "next", "composable", name+".cue"), newKindBytes, j), nil
}
type kindRegistry struct {
zipDir string
zipFile *zip.ReadCloser
}
// NewKindRegistry downloads the archive of the kind-registry GH repository and open it
func NewKindRegistry() (*kindRegistry, error) {
ctx := context.Background()
tc := oauth2.NewClient(ctx, nil)
client := github.NewClient(tc)
// Create a temporary file to store the downloaded archive
file, err := os.CreateTemp("", "*.zip")
if err != nil {
return nil, fmt.Errorf("failed to create temporary file: %w", err)
}
defer file.Close()
// Get the repository archive URL
archiveURL, _, err := client.Repositories.GetArchiveLink(ctx, GITHUB_OWNER, GITHUB_REPO, github.Zipball, &github.RepositoryContentGetOptions{})
if err != nil {
return nil, fmt.Errorf("failed to get archive URL: %w", err)
}
// Download the archive file
httpClient := http.DefaultClient
resp, err := httpClient.Get(archiveURL.String())
if err != nil {
return nil, fmt.Errorf("failed to download archive: %w", err)
}
defer resp.Body.Close()
// Save the downloaded archive to the temporary file
_, err = io.Copy(file, resp.Body)
if err != nil {
return nil, fmt.Errorf("failed to save archive: %w", err)
}
// Open the zip file for reading
zipDir := file.Name()
zipFile, err := zip.OpenReader(zipDir)
if err != nil {
return nil, fmt.Errorf("failed to open zip file %s: %w", zipDir, err)
}
return &kindRegistry{
zipDir: zipDir,
zipFile: zipFile,
}, nil
}
// cleanUp removes the archive from the temporary files and closes the zip reader
func (registry *kindRegistry) cleanUp() {
if registry.zipDir != "" {
err := os.Remove(registry.zipDir)
if err != nil {
fmt.Fprint(os.Stderr, fmt.Errorf("failed to remove zip archive: %w", err))
}
}
if registry.zipFile != nil {
err := registry.zipFile.Close()
if err != nil {
fmt.Fprint(os.Stderr, fmt.Errorf("failed to close zip file reader: %w", err))
}
}
}
// findLatestDir get the latest version directory published in the kind registry
func (registry *kindRegistry) findLatestDir() (string, error) {
re := regexp.MustCompile(`([0-9]+)\.([0-9]+)\.([0-9]+)`)
latestVersion := []uint64{0, 0, 0}
latestDir := ""
for _, file := range registry.zipFile.File {
if !file.FileInfo().IsDir() {
continue
}
parts := re.FindStringSubmatch(file.Name)
if parts == nil || len(parts) < 4 {
continue
}
version := make([]uint64, len(parts)-1)
for i := 1; i < len(parts); i++ {
version[i-1], _ = strconv.ParseUint(parts[i], 10, 32)
}
if isLess(latestVersion, version) {
latestVersion = version
latestDir = file.Name
}
}
return latestDir, nil
}
// getPublishedKind retrieves the latest published kind from the kind registry
func (registry *kindRegistry) getPublishedKind(name string, category string, latestRegistryDir string) (string, error) {
if latestRegistryDir == "" {
return "", nil
}
var cueFilePath string
switch category {
case "core":
cueFilePath = fmt.Sprintf("%s/%s.cue", name, name)
case "composable":
cueFilePath = fmt.Sprintf("%s.cue", name)
default:
return "", fmt.Errorf("kind can only be core or composable")
}
kindPath := filepath.Join(latestRegistryDir, category, cueFilePath)
file, err := registry.zipFile.Open(kindPath)
if err != nil {
return "", fmt.Errorf("failed to open file: %w", err)
}
defer file.Close()
data, err := io.ReadAll(file)
if err != nil {
return "", fmt.Errorf("failed to read file: %w", err)
}
return string(data), nil
}

14
.github/workflows/snyk.yml vendored Normal file
View File

@@ -0,0 +1,14 @@
name: Snyk Monitor Scanning
on:
release:
types: [published]
push:
branches:
- 'main'
workflow_dispatch:
jobs:
snyk-scan-ci:
uses: 'grafana/security-github-actions/.github/workflows/snyk_monitor.yml@main'
secrets:
SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}

View File

@@ -4,7 +4,6 @@ on:
- cron: '30 1 * * *'
permissions:
issues: write
pull-requests: write
jobs:
@@ -14,29 +13,24 @@ jobs:
- uses: actions/stale@v9
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
operations-per-run: 750
# start from the oldest issues/PRs when performing stale operations
ascending: true
days-before-issue-stale: 365
days-before-issue-close: 30
stale-issue-label: stale
exempt-issue-labels: no stalebot,type/epic
stale-issue-message: >
This issue has been automatically marked as stale because it has not had
activity in the last year. It will be closed in 30 days if no further activity occurs. Please
feel free to leave a comment if you believe the issue is still relevant.
Thank you for your contributions!
close-issue-message: >
This issue has been automatically closed because it has not had any further
activity in the last 30 days. Thank you for your contributions!
days-before-pr-stale: 30
days-before-pr-close: 14
stale-pr-label: stale
# Number of days of inactivity before a stale Issue or Pull Request is closed.
# Set to -1 to disable. If disabled, issues still need to be closed manually, but will remain marked as stale.
days-before-close: 14
# Number of days of inactivity before an Issue or Pull Request becomes stale
days-before-stale: 30
# We don't want any Issues to be marked as stale for now.
days-before-issue-stale: -1
exempt-issue-labels: no stalebot
exempt-pr-labels: no stalebot
operations-per-run: 500
stale-issue-label: stale
stale-pr-label: stale
stale-pr-message: >
This pull request has been automatically marked as stale because it has not had
activity in the last 30 days. It will be closed in 2 weeks if no further activity occurs. Please
feel free to give a status update or ping for review. Thank you for your contributions!
feel free to give a status update now, ping for review, or re-open when it's ready.
Thank you for your contributions!
close-pr-message: >
This pull request has been automatically closed because it has not had any further
activity in the last 2 weeks. Thank you for your contributions!
This pull request has been automatically closed because it has not had
activity in the last 2 weeks. Please feel free to give a status update now, ping for review, or re-open when it's ready.
Thank you for your contributions!

View File

@@ -1,54 +0,0 @@
name: Trivy Scan
on:
pull_request:
# only run on PRs where go.mod/go.sum/etc have been updated
paths:
- go.*
push:
branches:
- main
paths:
- go.*
jobs:
trivy-scan:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
- name: Run Trivy vulnerability scanner (table output)
uses: aquasecurity/trivy-action@0.24.0
with:
# scan the filesystem, rather than building a Docker image prior - the
# downside is we won't catch dependencies that are only installed in the
# image, but the upside is we'll only catch vulnerabilities that are
# explicitly in the our dependencies
scan-type: 'fs'
scanners: 'vuln'
format: 'table'
exit-code: 1
ignore-unfixed: true
vuln-type: 'os,library'
severity: 'CRITICAL,HIGH'
trivyignores: .trivyignore
# for the PR check, ignore JS-related issues
skip-files: 'yarn.lock,package.json'
- name: Run Trivy vulnerability scanner (SARIF)
uses: aquasecurity/trivy-action@0.24.0
with:
scan-type: 'fs'
scanners: 'vuln'
# Note: The SARIF format ignores severity and uploads all vulns for
# later triage. The table-format step above is used to fail the build
# if there are any critical or high vulnerabilities.
# See https://github.com/aquasecurity/trivy-action/issues/95
format: 'sarif'
output: 'trivy-results.sarif'
ignore-unfixed: true
vuln-type: 'os,library'
trivyignores: .trivyignore
if: always() && github.repository == 'grafana/grafana'
- name: Upload Trivy scan results to GitHub Security tab
uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: 'trivy-results.sarif'
if: always() && github.repository == 'grafana/grafana'

View File

@@ -12,8 +12,8 @@ jobs:
- uses: grafana/writers-toolkit/update-make-docs@update-make-docs/v1
with:
pr_options: >
--label 'backport v10.0.x'
--label 'backport v10.1.x'
--label 'backport v10.2.x'
--label 'backport v10.3.x'
--label no-changelog
--label type/docs

View File

@@ -4,7 +4,7 @@ on:
pull_request:
branches: [ main ]
paths:
- '**/*.cue'
- '**/*.cue'
jobs:
main:
@@ -18,9 +18,10 @@ jobs:
- name: "Setup Go"
uses: "actions/setup-go@v4"
with:
go-version-file: go.mod
go-version: '1.21.10'
- name: "Verify kinds"
run: go run .github/workflows/scripts/kinds/verify-kinds.go
env:
CODEGEN_VERIFY: 1
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}

21
.gitignore vendored
View File

@@ -24,6 +24,9 @@ __debug_bin*
!.yarn/plugins
!.yarn/sdks
!.yarn/versions
# we temporarily commit this file because yarn downloading it
# somehow produces different checksum values
!.yarn/cache/pa11y-ci-https-1e9675e9e1-668c9119bd.zip
.pnp.*
# Enterprise emails
@@ -87,7 +90,6 @@ example-apiserver/
/devenv/docker/blocks/tempo/tempo-data/
/devenv/docker/ha-test-unified-alerting/logs/webhook/dumps/
/devenv/docker/ha-test-unified-alerting/logs/webhook/webhook-listener.log
/devenv/docker/blocks/auth/openldap/certs/
conf/custom.ini
@@ -132,7 +134,9 @@ pkg/services/quota/quotaimpl/storage/storage.json
/devenv/bulk-dashboards/*.json
/devenv/bulk-folders/*/*.json
/devenv/bulk_alerting_dashboards/*.json
/devenv/datasources_bulk.yaml
/devenv/bulk_alerting_dashboards/bulk_alerting_datasources.yaml
/scripts/build/release_publisher/release_publisher
*.patch
@@ -170,11 +174,6 @@ compilation-stats.json
/e2e/build_results.zip
/e2e/extensions
/e2e/extensions-suite
/test-results/
/playwright-report/
/blob-report/
/playwright/.cache/
/playwright/.auth/
# grafana server
/scripts/grafana-server/server.log
@@ -203,7 +202,6 @@ public/api-spec.json
deployment_tools_config.json
.betterer.cache
.nx
# Temporary file for backporting PRs
.pr-body.txt
@@ -214,12 +212,3 @@ public/app/plugins/**/dist/
# Ignore transpiled JavaScript resulting from the generate-transformations.ts script.
/public/app/features/transformers/docs/*.js
/scripts/docs/generate-transformations.js
# Go coverage files created with go test -cover -coverprogile=something.out ...
*.out
# Locally enabling the Go race detector until we can globally do so
.go-race-enabled-locally
# Mock service worker used for fake API responses in frontend development
public/mockServiceWorker.js

View File

@@ -1,7 +1,9 @@
[run]
timeout = "20m"
concurrency = 10
allow-parallel-runners = true
timeout = "10m"
[linters-settings.goconst]
min-len = 5
min-occurrences = 5
[linters-settings.exhaustive]
default-signifies-exhaustive = true
@@ -19,7 +21,6 @@ deny = [
{ pkg = "github.com/pkg/errors", desc = "Deprecated: Go 1.13 supports the functionality provided by pkg/errors in the standard library." },
{ pkg = "github.com/xorcare/pointer", desc = "Use pkg/util.Pointer instead, which is a generic one-liner alternative" },
{ pkg = "github.com/gofrs/uuid", desc = "Use github.com/google/uuid instead, which we already depend on." },
{ pkg = "github.com/bmizerany/assert", desc = "Use github.com/stretchr/testify/assert instead, which we already depend on." },
]
[linters-settings.depguard.rules.coreplugins]
@@ -54,115 +55,12 @@ deny = [
{ pkg = "github.com/grafana/grafana/pkg/tsdb/intervalv2", desc = "Core plugins are not allowed to depend on Grafana core packages" },
]
files = [
"**/pkg/tsdb/grafana-pyroscope-datasource/*",
"**/pkg/tsdb/grafana-pyroscope-datasource/**/*",
"**/pkg/tsdb/grafana-testdata-datasource/*",
"**/pkg/tsdb/grafana-testdata-datasource/**/*",
"**/pkg/tsdb/azuremonitor/*",
"**/pkg/tsdb/azuremonitor/**/*",
"**/pkg/tsdb/cloud-monitoring/*",
"**/pkg/tsdb/cloud-monitoring/**/*",
"**/pkg/tsdb/mysql/*",
"**/pkg/tsdb/mysql/**/*",
"**/pkg/tsdb/parca/*",
"**/pkg/tsdb/parca/**/*",
"**/pkg/tsdb/tempo/*",
"**/pkg/tsdb/tempo/**/*",
"**/pkg/tsdb/cloudwatch/*",
"**/pkg/tsdb/cloudwatch/**/*",
]
[linters-settings.depguard.rules.apiserver]
list-mode = "lax"
allow = [
"github.com/grafana/grafana/pkg/apimachinery",
"github.com/grafana/grafana/pkg/apiserver",
]
deny = [
{ pkg = "github.com/grafana/grafana/pkg", desc = "apiserver is not allowed to import grafana core" }
]
files = [
"**/pkg/apiserver/*",
"**/pkg/apiserver/**/*"
]
[linters-settings.depguard.rules.apimachinery]
list-mode = "lax"
allow = [
"github.com/grafana/grafana/pkg/apimachinery",
]
deny = [
{ pkg = "github.com/grafana/grafana/pkg", desc = "apimachinery is not allowed to import grafana core" }
]
files = [
"**/pkg/apimachinery/*",
"**/pkg/apimachinery/**/*"
]
[linters-settings.depguard.rules.aggregator]
list-mode = "lax"
allow = [
"github.com/grafana/grafana/pkg/aggregator",
"github.com/grafana/grafana/pkg/semconv",
"github.com/grafana/grafana/pkg/apimachinery",
]
deny = [
{ pkg = "github.com/grafana/grafana/pkg", desc = "apimachinery is not allowed to import grafana core" }
]
files = [
"./pkg/aggregator/*",
"./pkg/aggregator/**/*"
]
[linters-settings.depguard.rules.promlib]
list-mode = "lax" # allow unless explicitely denied
deny = [
{ pkg = "github.com/grafana/grafana/pkg", desc = "promlib is not allowed to import grafana core" }
]
allow = [
"github.com/grafana/grafana/pkg/promlib"
]
files = [
"**/pkg/promlib/**/*"
]
[linters-settings.depguard.rules.storage-unified-resource]
list-mode = "lax"
allow = [
"github.com/grafana/grafana/pkg/apimachinery",
]
deny = [
{ pkg = "github.com/grafana/grafana/pkg", desc = "pkg/storage/unified/resource is not allowed to import grafana core" }
]
files = [
"./pkg/storage/unified/resource/*",
"./pkg/storage/unified/resource/**/*"
]
[linters-settings.depguard.rules.storage-unified-apistore]
list-mode = "lax"
allow = [
"github.com/grafana/grafana/pkg/apimachinery",
"github.com/grafana/grafana/pkg/apiserver",
"github.com/grafana/grafana/pkg/unified/resource",
]
deny = [
{ pkg = "github.com/grafana/grafana/pkg", desc = "pkg/storage/unified/apistore is not allowed to import grafana core" }
]
files = [
"./pkg/storage/unified/apistore/*",
"./pkg/storage/unified/apistore/**/*"
]
[linters-settings.depguard.rules.apps-playlist]
list-mode = "lax"
allow = []
deny = [
{ pkg = "github.com/grafana/grafana/pkg", desc = "apps/playlist is not allowed to import grafana core" }
]
files = [
"./apps/playlist/*",
"./apps/playlist/**/*"
]
[linters-settings.gocritic]
@@ -170,28 +68,19 @@ enabled-checks = ["ruleguard"]
[linters-settings.gocritic.settings.ruleguard]
rules = "pkg/ruleguard.rules.go"
[linters-settings.misspell]
ignore-words = ["Unknwon", "Creater"]
[linters-settings.nakedret]
max-func-lines = 60
[linters]
disable-all = true
# try to keep this list sorted, please
enable = [
"asciicheck",
"bodyclose",
"depguard",
"dogsled",
"errcheck",
"errorlint",
"exhaustive",
"exportloopref",
# "gochecknoinits",
# "goconst",
"goconst",
# "gocritic", # Temporarily disabled on 2022-09-09, running into weird bug "ruleguard: execution error: used Run() with an empty rule set; forgot to call Load() first?"
"gocyclo",
"goimports",
"goprintffuncname",
"gosec",
@@ -200,13 +89,19 @@ enable = [
"ineffassign",
"misspell",
"nakedret",
"prealloc",
"revive",
"exportloopref",
"staticcheck",
"stylecheck",
"typecheck",
"unconvert",
"unused",
"whitespace",
"gocyclo",
"exhaustive",
"typecheck",
"asciicheck",
"errorlint",
"revive",
]
# Disabled linters (might want them later)
@@ -215,7 +110,6 @@ enable = [
[issues]
exclude-use-default = false
max-same-issues = 0
# Enable when appropriate
# Poorly chosen identifier
@@ -241,13 +135,6 @@ text = "SA1019: http.CloseNotifier"
linters = ["staticcheck"]
text = "SA1019: strings.Title"
# go.opentelemetry.io/otel/exporters/jaeger" is deprecated: This module is no longer supported. OpenTelemetry dropped support for Jaeger exporter in July 2023.
# Jaeger officially accepts and recommends using OTLP.
# Use [go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp] or [go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc] instead.
[[issues.exclude-rules]]
linters = ["staticcheck"]
text = "SA1019: \"go.opentelemetry.io/otel/exporters/jaeger\""
[[issues.exclude-rules]]
linters = ["staticcheck"]
text = "use fake service and real access control evaluator instead"
@@ -288,6 +175,10 @@ text = "501"
linters = ["gosec"]
text = "404"
[[issues.exclude-rules]]
linters = ["misspell"]
text = "Unknwon` is a misspelling of `Unknown"
[[issues.exclude-rules]]
linters = ["errorlint"]
text = "non-wrapping format verb for fmt.Errorf"
@@ -306,10 +197,3 @@ text = "ST1020"
[[issues.exclude-rules]]
linters = ["stylecheck"]
text = "ST1021"
# Remove this when we have go v1.22 in place
# https://stackoverflow.com/a/68247837/767660
[[issues.exclude-rules]]
linters = ["gosec"]
path = '(.+)_test\.go'
text = "G601"

View File

@@ -1 +0,0 @@
!conf/custom.ini

View File

@@ -34,7 +34,7 @@ var dashboardSettings = [
wait: 500,
rootElement: '.main-view',
// TODO: improve the accessibility of the permission tab https://github.com/grafana/grafana/issues/77203
threshold: 5,
threshold: 11,
},
{
url: '${HOST}/d/O6f11TZWk/panel-tests-bar-gauge?orgId=1&editview=dashboard_json',
@@ -64,7 +64,7 @@ var config = {
url: '${HOST}/login',
wait: 500,
rootElement: '.main-view',
threshold: 0,
threshold: 13,
},
{
url: '${HOST}/login',
@@ -76,13 +76,13 @@ var config = {
"click element button[data-testid='data-testid Login button']",
"wait for element button[data-testid='data-testid Skip change password button'] to be visible",
],
threshold: 2,
threshold: 15,
rootElement: '.main-view',
},
{
url: '${HOST}/?orgId=1',
wait: 500,
threshold: 0,
threshold: 3,
},
{
url: '${HOST}/d/O6f11TZWk/panel-tests-bar-gauge',
@@ -95,7 +95,7 @@ var config = {
url: '${HOST}/?orgId=1&search=open',
wait: 500,
rootElement: '.main-view',
threshold: 0,
threshold: 3,
},
{
url: '${HOST}/alerting/list',
@@ -103,49 +103,49 @@ var config = {
rootElement: '.main-view',
// the unified alerting promotion alert's content contrast is too low
// see https://github.com/grafana/grafana/pull/41829
threshold: 7,
threshold: 6,
},
{
url: '${HOST}/datasources',
wait: 500,
rootElement: '.main-view',
threshold: 0,
threshold: 3,
},
{
url: '${HOST}/org/users',
wait: 500,
rootElement: '.main-view',
threshold: 0,
threshold: 1,
},
{
url: '${HOST}/org/teams',
wait: 500,
rootElement: '.main-view',
threshold: 0,
threshold: 1,
},
{
url: '${HOST}/plugins',
wait: 500,
rootElement: '.main-view',
threshold: 0,
threshold: 3,
},
{
url: '${HOST}/org',
wait: 500,
rootElement: '.main-view',
threshold: 0,
threshold: 1,
},
{
url: '${HOST}/org/apikeys',
wait: 500,
rootElement: '.main-view',
threshold: 2,
threshold: 4,
},
{
url: '${HOST}/dashboards',
wait: 500,
rootElement: '.main-view',
threshold: 0,
threshold: 1,
},
],
};

View File

@@ -12,13 +12,16 @@ node_modules
pkg
public/lib/monaco
public/sass/*.generated.scss
scripts/cli/bettererIssueTemplate.md
scripts/grafana-server/tmp
vendor
# TS generate from cue by cuetsy
**/*.gen.ts
# Auto-generated internationalization files
public/locales/_build/
public/locales/**/*.js
# Auto-generated theme files
theme.light.generated.json
theme.dark.generated.json
@@ -28,8 +31,10 @@ public/api-merged.json
public/api-enterprise-spec.json
public/openapi3.json
# Generated mock service worker
public/mockServiceWorker.js
# Generated Kinds report
kinds/report.json
# Crowdin files
public/locales/**/*.json
# Generated schema docs
docs/sources/developers/kinds/
scripts/cli/bettererIssueTemplate.md

View File

@@ -1 +0,0 @@
# See https://aquasecurity.github.io/trivy/v0.48/docs/configuration/filtering/#trivyignore

49
.vscode/launch.json vendored
View File

@@ -9,54 +9,17 @@
"program": "${workspaceFolder}/pkg/cmd/grafana/",
"env": {},
"cwd": "${workspaceFolder}",
"args": ["server", "--homepath", "${workspaceFolder}", "--packaging", "dev", "cfg:app_mode=development"]
},
{
"name": "Run API Server (testdata)",
"type": "go",
"request": "launch",
"mode": "auto",
"program": "${workspaceFolder}/pkg/cmd/grafana/",
"env": {},
"cwd": "${workspaceFolder}",
"args": ["apiserver", "--secure-port=8443", "--runtime-config=testdata.datasource.grafana.app/v0alpha1=true"]
},
{
"name": "Run API Server (query-localhost)",
"type": "go",
"request": "launch",
"mode": "auto",
"program": "${workspaceFolder}/pkg/cmd/grafana/",
"env": {},
"cwd": "${workspaceFolder}",
"args": [
"apiserver",
"--secure-port=8443",
"--runtime-config=query.grafana.app/v0alpha1=true",
"--grafana.authn.signing-keys-url=http://localhost:3000/api/signing-keys/keys",
"--hg-url=http://localhost:3000",
"--hg-key=$HGAPIKEY"
]
},
{
"name": "Run Server (query GRPC Storage Server)",
"type": "go",
"request": "launch",
"mode": "auto",
"program": "${workspaceFolder}/pkg/cmd/grafana/",
"env": { "GF_GRAFANA_APISERVER_STORAGE_TYPE": "unified-grpc" },
"cwd": "${workspaceFolder}",
"args": ["server", "--homepath", "${workspaceFolder}", "--packaging", "dev"]
},
{
"name": "Run Storage Server",
"name": "Run API Server (k8s)",
"type": "go",
"request": "launch",
"mode": "auto",
"program": "${workspaceFolder}/pkg/cmd/grafana/",
"env": { "GF_DEFAULT_TARGET": "storage-server", "GF_SERVER_HTTP_PORT": "3001" },
"env": {},
"cwd": "${workspaceFolder}",
"args": ["server", "target", "--homepath", "${workspaceFolder}", "--packaging", "dev"]
"args": ["apiserver", "example.grafana.app"]
},
{
"name": "Attach to Chrome",
@@ -66,16 +29,14 @@
"webRoot": "${workspaceFolder}"
},
{
"name": "Debug UI test",
"name": "Debug Jest test",
"type": "node",
"request": "launch",
"runtimeExecutable": "yarn",
"runtimeArgs": ["run", "jest", "--runInBand", "${file}"],
"console": "integratedTerminal",
"internalConsoleOptions": "neverOpen",
"env": {
"NODE_ENV": "test"
}
"port": 9229
},
{
"name": "Debug Go test",

Binary file not shown.

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,121 +0,0 @@
diff --git a/build/GridItem.js b/build/GridItem.js
index 0a700da9f1180ca532e32e04dc7ea50f2e67b96c..a2e4673fa1133aeaa4018cc01312ca386c3395f5 100644
--- a/build/GridItem.js
+++ b/build/GridItem.js
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
});
exports.default = void 0;
var _react = _interopRequireDefault(require("react"));
+var _reactDOM = require("react-dom");
var _propTypes = _interopRequireDefault(require("prop-types"));
var _reactDraggable = require("react-draggable");
var _reactResizable = require("react-resizable");
@@ -147,8 +148,10 @@ class GridItem extends _react.default.Component /*:: <Props, State>*/{
const pTop = parentRect.top / transformScale;
newPosition.left = cLeft - pLeft + offsetParent.scrollLeft;
newPosition.top = cTop - pTop + offsetParent.scrollTop;
- this.setState({
- dragging: newPosition
+ _reactDOM.flushSync(() => {
+ this.setState({
+ dragging: newPosition
+ });
});
// Call callback with this data
@@ -213,8 +216,10 @@ class GridItem extends _react.default.Component /*:: <Props, State>*/{
top,
left
};
- this.setState({
- dragging: newPosition
+ _reactDOM.flushSync(() => {
+ this.setState({
+ dragging: newPosition
+ });
});
// Call callback with this data
@@ -261,8 +266,10 @@ class GridItem extends _react.default.Component /*:: <Props, State>*/{
top,
left
};
- this.setState({
- dragging: null
+ _reactDOM.flushSync(() => {
+ this.setState({
+ dragging: null
+ });
});
const {
x,
@@ -485,8 +492,10 @@ class GridItem extends _react.default.Component /*:: <Props, State>*/{
let updatedSize = size;
if (node) {
updatedSize = (0, _utils.resizeItemInDirection)(handle, position, size, containerWidth);
- this.setState({
- resizing: handlerName === "onResizeStop" ? null : updatedSize
+ _reactDOM.flushSync(() => {
+ this.setState({
+ resizing: handlerName === "onResizeStop" ? null : updatedSize
+ });
});
}
diff --git a/lib/GridItem.jsx b/lib/GridItem.jsx
index dbe41f92388f19d3e476690fa0ee5584ab9d5bb4..1e4713667cd7dadd6618fe06176804a02ee3ccc2 100644
--- a/lib/GridItem.jsx
+++ b/lib/GridItem.jsx
@@ -1,5 +1,6 @@
// @flow
import React from "react";
+import { flushSync } from "react-dom";
import PropTypes from "prop-types";
import { DraggableCore } from "react-draggable";
import { Resizable } from "react-resizable";
@@ -459,7 +460,9 @@ export default class GridItem extends React.Component<Props, State> {
const pTop = parentRect.top / transformScale;
newPosition.left = cLeft - pLeft + offsetParent.scrollLeft;
newPosition.top = cTop - pTop + offsetParent.scrollTop;
- this.setState({ dragging: newPosition });
+ flushSync(() => {
+ this.setState({ dragging: newPosition });
+ });
// Call callback with this data
const { x, y } = calcXY(
@@ -516,7 +519,9 @@ export default class GridItem extends React.Component<Props, State> {
}
const newPosition: PartialPosition = { top, left };
- this.setState({ dragging: newPosition });
+ flushSync(() => {
+ this.setState({ dragging: newPosition });
+ });
// Call callback with this data
const { containerPadding } = this.props;
@@ -549,7 +554,9 @@ export default class GridItem extends React.Component<Props, State> {
const { w, h, i, containerPadding } = this.props;
const { left, top } = this.state.dragging;
const newPosition: PartialPosition = { top, left };
- this.setState({ dragging: null });
+ flushSync(() => {
+ this.setState({ dragging: null });
+ });
const { x, y } = calcXY(
this.getPositionParams(),
@@ -605,8 +612,10 @@ export default class GridItem extends React.Component<Props, State> {
size,
containerWidth
);
- this.setState({
- resizing: handlerName === "onResizeStop" ? null : updatedSize
+ flushSync(() => {
+ this.setState({
+ resizing: handlerName === "onResizeStop" ? null : updatedSize
+ });
});
}

893
.yarn/releases/yarn-4.0.0.cjs vendored Executable file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

20
.yarn/sdks/eslint/bin/eslint.js vendored Executable file
View File

@@ -0,0 +1,20 @@
#!/usr/bin/env node
const {existsSync} = require(`fs`);
const {createRequire} = require(`module`);
const {resolve} = require(`path`);
const relPnpApiPath = "../../../../.pnp.cjs";
const absPnpApiPath = resolve(__dirname, relPnpApiPath);
const absRequire = createRequire(absPnpApiPath);
if (existsSync(absPnpApiPath)) {
if (!process.versions.pnp) {
// Setup the environment to be able to require eslint/bin/eslint.js
require(absPnpApiPath).setup();
}
}
// Defer to the real eslint/bin/eslint.js your application uses
module.exports = absRequire(`eslint/bin/eslint.js`);

20
.yarn/sdks/eslint/lib/api.js vendored Normal file
View File

@@ -0,0 +1,20 @@
#!/usr/bin/env node
const {existsSync} = require(`fs`);
const {createRequire} = require(`module`);
const {resolve} = require(`path`);
const relPnpApiPath = "../../../../.pnp.cjs";
const absPnpApiPath = resolve(__dirname, relPnpApiPath);
const absRequire = createRequire(absPnpApiPath);
if (existsSync(absPnpApiPath)) {
if (!process.versions.pnp) {
// Setup the environment to be able to require eslint
require(absPnpApiPath).setup();
}
}
// Defer to the real eslint your application uses
module.exports = absRequire(`eslint`);

14
.yarn/sdks/eslint/package.json vendored Normal file
View File

@@ -0,0 +1,14 @@
{
"name": "eslint",
"version": "8.52.0-sdk",
"main": "./lib/api.js",
"type": "commonjs",
"bin": {
"eslint": "./bin/eslint.js"
},
"exports": {
"./package.json": "./package.json",
".": "./lib/api.js",
"./use-at-your-own-risk": "./lib/unsupported-api.js"
}
}

6
.yarn/sdks/integrations.yml vendored Normal file
View File

@@ -0,0 +1,6 @@
# This file is automatically generated by @yarnpkg/sdks.
# Manual changes might be lost!
integrations:
- vscode
- vim

7
.yarn/sdks/prettier/package.json vendored Normal file
View File

@@ -0,0 +1,7 @@
{
"name": "prettier",
"version": "3.0.0-sdk",
"main": "./index.cjs",
"type": "commonjs",
"bin": "./bin/prettier.cjs"
}

20
.yarn/sdks/typescript/bin/tsc vendored Executable file
View File

@@ -0,0 +1,20 @@
#!/usr/bin/env node
const {existsSync} = require(`fs`);
const {createRequire} = require(`module`);
const {resolve} = require(`path`);
const relPnpApiPath = "../../../../.pnp.cjs";
const absPnpApiPath = resolve(__dirname, relPnpApiPath);
const absRequire = createRequire(absPnpApiPath);
if (existsSync(absPnpApiPath)) {
if (!process.versions.pnp) {
// Setup the environment to be able to require typescript/bin/tsc
require(absPnpApiPath).setup();
}
}
// Defer to the real typescript/bin/tsc your application uses
module.exports = absRequire(`typescript/bin/tsc`);

Some files were not shown because too many files have changed in this diff Show More