mirror of
https://github.com/grafana/grafana.git
synced 2026-01-07 22:41:10 +08:00
Compare commits
272 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4add91f03d | ||
|
|
e647b673ff | ||
|
|
ef2eb2b6bf | ||
|
|
bb6607daaf | ||
|
|
bf832c93e7 | ||
|
|
412f1c1cc6 | ||
|
|
10a2245f93 | ||
|
|
12013e9aa4 | ||
|
|
56d1dcc9b3 | ||
|
|
b5a274f392 | ||
|
|
08acfafffd | ||
|
|
fc8002d9ab | ||
|
|
75a44af935 | ||
|
|
53a06bf65f | ||
|
|
7a26957f87 | ||
|
|
d75b8c13ef | ||
|
|
01917df71a | ||
|
|
b7ff4d1661 | ||
|
|
eaace4fc45 | ||
|
|
039d9c379c | ||
|
|
6bce4d516d | ||
|
|
332e870086 | ||
|
|
6f22584d26 | ||
|
|
961446e7e1 | ||
|
|
419e8d782c | ||
|
|
aa09499343 | ||
|
|
cf3f234a54 | ||
|
|
de7d18d4e0 | ||
|
|
7f6c61f0bd | ||
|
|
47e1860e34 | ||
|
|
db9dfc7aef | ||
|
|
0d561b6c24 | ||
|
|
9bccf165be | ||
|
|
936e72f1e6 | ||
|
|
b66e903439 | ||
|
|
2911eec518 | ||
|
|
ea660e188e | ||
|
|
3b523c13a7 | ||
|
|
4474649869 | ||
|
|
772eb4b58a | ||
|
|
9e0cb259ee | ||
|
|
e272ce8274 | ||
|
|
2d0324ec70 | ||
|
|
5a6471c01f | ||
|
|
0d2a01f03f | ||
|
|
4c38e25ecd | ||
|
|
52288b87aa | ||
|
|
84e358660a | ||
|
|
269ae0d7be | ||
|
|
24e46f3ae7 | ||
|
|
232cbed853 | ||
|
|
c5583207ee | ||
|
|
c48ca77815 | ||
|
|
5fb2986aa5 | ||
|
|
6772c060d8 | ||
|
|
f918b3bf9d | ||
|
|
49ef18b2b7 | ||
|
|
f80239c21a | ||
|
|
bf6e7d2abe | ||
|
|
ddf5363aa6 | ||
|
|
a9faf4b9f1 | ||
|
|
8c12f75b0b | ||
|
|
5014df0521 | ||
|
|
5ccddbe071 | ||
|
|
6d0beaedaf | ||
|
|
8c1d16c879 | ||
|
|
4ee064da11 | ||
|
|
1548edc40e | ||
|
|
aad839e5b9 | ||
|
|
aa60a45f6b | ||
|
|
bdf8b7531b | ||
|
|
9ef2e8d7da | ||
|
|
79fb770ca5 | ||
|
|
b733b4fd5c | ||
|
|
a2b984cd7e | ||
|
|
0d7de2bbda | ||
|
|
1ad9362310 | ||
|
|
8861a8a977 | ||
|
|
f8df798afd | ||
|
|
25c31c2c7c | ||
|
|
3fe53ab222 | ||
|
|
4e687dfb6f | ||
|
|
eab26273d6 | ||
|
|
35fe167f0d | ||
|
|
5e48a1ad06 | ||
|
|
225128a5d9 | ||
|
|
64412b1195 | ||
|
|
0299b18b88 | ||
|
|
8c483cca31 | ||
|
|
4c22a2b8fb | ||
|
|
0de3ceb47c | ||
|
|
bb25297a9d | ||
|
|
b5135d8144 | ||
|
|
1b0d442ca2 | ||
|
|
38b5dd4486 | ||
|
|
66b94cd468 | ||
|
|
a7c1598ca6 | ||
|
|
437cf15105 | ||
|
|
6cab7f956c | ||
|
|
b23f3964e9 | ||
|
|
0b98b4d241 | ||
|
|
04a4774d4c | ||
|
|
3c58b2c176 | ||
|
|
a1bceeb1d3 | ||
|
|
bb7a485dbf | ||
|
|
b3682d498c | ||
|
|
183f9317c5 | ||
|
|
194dbead83 | ||
|
|
53b5cf5288 | ||
|
|
7900e795f1 | ||
|
|
0f1f842015 | ||
|
|
7e017790d2 | ||
|
|
3531683e87 | ||
|
|
b5747d397d | ||
|
|
f8120e9152 | ||
|
|
ae94a60981 | ||
|
|
65c2b4fea2 | ||
|
|
f18c84af5a | ||
|
|
c10b18d06e | ||
|
|
a3b692e1c5 | ||
|
|
30f3f63bd6 | ||
|
|
758783a2e2 | ||
|
|
5585dc0ba1 | ||
|
|
2012cd7954 | ||
|
|
77263b8e65 | ||
|
|
3e30c2024c | ||
|
|
cb13b75c6b | ||
|
|
242e05f448 | ||
|
|
7f6319393d | ||
|
|
57ecd3d3d3 | ||
|
|
edd755b834 | ||
|
|
db978cd48a | ||
|
|
6162e6f823 | ||
|
|
8e4fa99ec7 | ||
|
|
8aaca53a32 | ||
|
|
9eefd2e42a | ||
|
|
045aff4009 | ||
|
|
e9b269a5b8 | ||
|
|
fcc6c7c486 | ||
|
|
92ac380621 | ||
|
|
98489d5f81 | ||
|
|
60e88ffcb7 | ||
|
|
249c5b013e | ||
|
|
4ddc76f73e | ||
|
|
b6dc902ec0 | ||
|
|
479360e6bf | ||
|
|
f9845a6d70 | ||
|
|
96121adda2 | ||
|
|
56b478f84d | ||
|
|
7451db3f26 | ||
|
|
0bddceb24c | ||
|
|
65de5b497b | ||
|
|
edd529c2cf | ||
|
|
17605f97af | ||
|
|
e5d80f21e9 | ||
|
|
f69374abbd | ||
|
|
ec2082c172 | ||
|
|
3574fa5996 | ||
|
|
982624f7b1 | ||
|
|
69453133e7 | ||
|
|
8a489712cc | ||
|
|
87f6fef9d7 | ||
|
|
371149fa02 | ||
|
|
845b797b5b | ||
|
|
45dd9f9a9f | ||
|
|
8a8180c44d | ||
|
|
532fc8dd2c | ||
|
|
0d648ea977 | ||
|
|
23ac2de4d3 | ||
|
|
87497a1afc | ||
|
|
3c7cfecf50 | ||
|
|
63f1d95ed6 | ||
|
|
238f51fb73 | ||
|
|
88e8d97ad3 | ||
|
|
bd14abb309 | ||
|
|
96fa91e113 | ||
|
|
0ca7d1e210 | ||
|
|
200c94c722 | ||
|
|
7589dbe784 | ||
|
|
005fb9586c | ||
|
|
cb898dfe66 | ||
|
|
3dffe4099b | ||
|
|
d9710139e1 | ||
|
|
8e9fb8cf93 | ||
|
|
fba376b347 | ||
|
|
6895e75f70 | ||
|
|
4f826bc76c | ||
|
|
efaf4f5e09 | ||
|
|
907381ed5c | ||
|
|
8c9cb8e839 | ||
|
|
028cc7e72b | ||
|
|
00555606d5 | ||
|
|
9cf5b4eb9e | ||
|
|
8637518540 | ||
|
|
0c27df8b8c | ||
|
|
8fd1547edb | ||
|
|
21f204d35a | ||
|
|
84da688400 | ||
|
|
b742567ade | ||
|
|
385b15bf69 | ||
|
|
94ec932d29 | ||
|
|
2525b30803 | ||
|
|
324964b86b | ||
|
|
d31f932800 | ||
|
|
363171b182 | ||
|
|
32e3cd7cbc | ||
|
|
2a223cbea2 | ||
|
|
c7a182e9d5 | ||
|
|
d8f757cb8c | ||
|
|
bfe6b520d7 | ||
|
|
190c3aad58 | ||
|
|
022abcb47d | ||
|
|
5b305cb696 | ||
|
|
a03069fb08 | ||
|
|
0413fea8d2 | ||
|
|
30081ca04b | ||
|
|
53a1e5b7e6 | ||
|
|
29cc5f9c62 | ||
|
|
b485d1cde9 | ||
|
|
045c2d4e59 | ||
|
|
654af9a48d | ||
|
|
5bb58c5172 | ||
|
|
42b9c898bf | ||
|
|
795c86b045 | ||
|
|
5d5e7f97e9 | ||
|
|
c8cf18d8f6 | ||
|
|
70e4499f83 | ||
|
|
2e251a2b20 | ||
|
|
cdec4eb6ab | ||
|
|
71a18da270 | ||
|
|
40354c6b40 | ||
|
|
68fb4da24a | ||
|
|
89f9081658 | ||
|
|
84d2814f7c | ||
|
|
193b671246 | ||
|
|
2bb672a7de | ||
|
|
c156621981 | ||
|
|
9a8983e8e9 | ||
|
|
4bdfc2d926 | ||
|
|
bd9707e8f3 | ||
|
|
3023a43d4f | ||
|
|
41b0393140 | ||
|
|
90a4c84bc2 | ||
|
|
6749e8667d | ||
|
|
9727346e63 | ||
|
|
3683b7a5ff | ||
|
|
f9ca726290 | ||
|
|
15ec06b593 | ||
|
|
953d9db30d | ||
|
|
a7b9dcdce8 | ||
|
|
76f3ed3c3f | ||
|
|
2ad87ce213 | ||
|
|
cc5b3c11c4 | ||
|
|
20731672ed | ||
|
|
f9ec04bbb7 | ||
|
|
0e6d038934 | ||
|
|
b8c6ff611d | ||
|
|
ecfd92ed30 | ||
|
|
8eb9971797 | ||
|
|
c567e690ad | ||
|
|
acf1b1285b | ||
|
|
3d65500a4f | ||
|
|
589284778a | ||
|
|
b9e989cbf2 | ||
|
|
f39c46a1b5 | ||
|
|
48bd8ebe92 | ||
|
|
34524d6dfa | ||
|
|
6e861b19fa | ||
|
|
26f7b8ee65 | ||
|
|
04dd4e7f7c | ||
|
|
992e5d72ff | ||
|
|
1b0f5f0a81 |
3274
.betterer.results
3274
.betterer.results
File diff suppressed because it is too large
Load Diff
45
.betterer.ts
45
.betterer.ts
@@ -1,32 +1,35 @@
|
||||
import { BettererFileTest } from '@betterer/betterer';
|
||||
import { promises as fs } from 'fs';
|
||||
import { ESLint, Linter } from 'eslint';
|
||||
import { existsSync } from 'fs';
|
||||
import path from 'path';
|
||||
import { glob } from 'glob';
|
||||
import glob from 'glob';
|
||||
|
||||
export default {
|
||||
'better eslint': () =>
|
||||
countEslintErrors()
|
||||
.include('**/*.{ts,tsx}')
|
||||
.exclude(/public\/app\/angular/),
|
||||
'no undocumented stories': () => countUndocumentedStories().include('**/!(*.internal).story.tsx'),
|
||||
'better eslint': () => countEslintErrors().include('**/*.{ts,tsx}'),
|
||||
'no undocumented stories': () => countUndocumentedStories().include('**/*.story.tsx'),
|
||||
};
|
||||
|
||||
function countUndocumentedStories() {
|
||||
return new BettererFileTest(async (filePaths, fileTestResult) => {
|
||||
await Promise.all(
|
||||
filePaths.map(async (filePath) => {
|
||||
// look for .mdx import in the story file
|
||||
const regex = new RegExp("^import.*.mdx';$", 'gm');
|
||||
const fileText = await fs.readFile(filePath, 'utf8');
|
||||
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:
|
||||
file.addIssue(0, 0, 'No undocumented stories are allowed, please add an .mdx file with some documentation');
|
||||
}
|
||||
})
|
||||
);
|
||||
filePaths.forEach((filePath) => {
|
||||
if (!existsSync(filePath.replace(/\.story.tsx$/, '.mdx'))) {
|
||||
// In this case the file contents don't matter:
|
||||
const file = fileTestResult.addFile(filePath, '');
|
||||
// Add the issue to the first character of the file:
|
||||
file.addIssue(0, 0, 'No undocumented stories are allowed, please add an .mdx file with some documentation');
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
async function findEslintConfigFiles(): Promise<string[]> {
|
||||
return new Promise((resolve, reject) => {
|
||||
glob('**/.eslintrc', (err, files) => {
|
||||
if (err) {
|
||||
reject(err);
|
||||
}
|
||||
resolve(files);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
@@ -35,7 +38,7 @@ function countEslintErrors() {
|
||||
const { baseDirectory } = resolver;
|
||||
const cli = new ESLint({ cwd: baseDirectory });
|
||||
|
||||
const eslintConfigFiles = await glob('**/.eslintrc');
|
||||
const eslintConfigFiles = await findEslintConfigFiles();
|
||||
const eslintConfigMainPaths = eslintConfigFiles.map((file) => path.resolve(path.dirname(file)));
|
||||
|
||||
const baseRules: Partial<Linter.RulesRecord> = {
|
||||
|
||||
@@ -23,24 +23,23 @@ $(BRA): $(BINGO_DIR)/bra.mod
|
||||
@echo "(re)installing $(GOBIN)/bra-v0.0.0-20200517080246-1e3013ecaff8"
|
||||
@cd $(BINGO_DIR) && GOWORK=off $(GO) build -mod=mod -modfile=bra.mod -o=$(GOBIN)/bra-v0.0.0-20200517080246-1e3013ecaff8 "github.com/unknwon/bra"
|
||||
|
||||
CUE := $(GOBIN)/cue-v0.5.0
|
||||
CUE := $(GOBIN)/cue-v0.5.0-beta.2
|
||||
$(CUE): $(BINGO_DIR)/cue.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)/cue-v0.5.0"
|
||||
@cd $(BINGO_DIR) && GOWORK=off $(GO) build -mod=mod -modfile=cue.mod -o=$(GOBIN)/cue-v0.5.0 "cuelang.org/go/cmd/cue"
|
||||
@echo "(re)installing $(GOBIN)/cue-v0.5.0-beta.2"
|
||||
@cd $(BINGO_DIR) && GOWORK=off $(GO) build -mod=mod -modfile=cue.mod -o=$(GOBIN)/cue-v0.5.0-beta.2 "cuelang.org/go/cmd/cue"
|
||||
|
||||
DRONE := $(GOBIN)/drone-v1.5.0
|
||||
$(DRONE): $(BINGO_DIR)/drone.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)/drone-v1.5.0"
|
||||
@# Manual modification: CGo is disabled to make the Drone CLI build successfully on Darwin/arm64 machines.
|
||||
@cd $(BINGO_DIR) && CGO_ENABLED=0 GOWORK=off $(GO) build -mod=mod -modfile=drone.mod -o=$(GOBIN)/drone-v1.5.0 "github.com/drone/drone-cli/drone"
|
||||
@cd $(BINGO_DIR) && GOWORK=off $(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.53.3
|
||||
GOLANGCI_LINT := $(GOBIN)/golangci-lint-v1.51.2
|
||||
$(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.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"
|
||||
@echo "(re)installing $(GOBIN)/golangci-lint-v1.51.2"
|
||||
@cd $(BINGO_DIR) && GOWORK=off $(GO) build -mod=mod -modfile=golangci-lint.mod -o=$(GOBIN)/golangci-lint-v1.51.2 "github.com/golangci/golangci-lint/cmd/golangci-lint"
|
||||
|
||||
JB := $(GOBIN)/jb-v0.5.1
|
||||
$(JB): $(BINGO_DIR)/jb.mod
|
||||
|
||||
@@ -2,4 +2,4 @@ module _ // Auto generated by https://github.com/bwplotka/bingo. DO NOT EDIT
|
||||
|
||||
go 1.19
|
||||
|
||||
require cuelang.org/go v0.5.0 // cmd/cue
|
||||
require cuelang.org/go v0.5.0-beta.2 // cmd/cue
|
||||
|
||||
@@ -2,57 +2,29 @@ cuelang.org/go v0.4.3 h1:W3oBBjDTm7+IZfCKZAmC8uDG0eYfJL4Pp/xbbCMKaVo=
|
||||
cuelang.org/go v0.4.3/go.mod h1:7805vR9H+VoBNdWFdI7jyDR3QLUPp4+naHfbcgp55HI=
|
||||
cuelang.org/go v0.5.0-beta.2 h1:am5M7jGvNTJ0rnjrFNyvE7fucL/wRqb0emK4XxdThQI=
|
||||
cuelang.org/go v0.5.0-beta.2/go.mod h1:okjJBHFQFer+a41sAe2SaGm1glWS8oEb6CmJvn5Zdws=
|
||||
cuelang.org/go v0.5.0 h1:D6N0UgTGJCOxFKU8RU+qYvavKNsVc/+ZobmifStVJzU=
|
||||
cuelang.org/go v0.5.0/go.mod h1:okjJBHFQFer+a41sAe2SaGm1glWS8oEb6CmJvn5Zdws=
|
||||
github.com/cockroachdb/apd v1.1.0 h1:3LFP3629v+1aKXU5Q37mxmRxX/pIu1nijXydLShEq5I=
|
||||
github.com/cockroachdb/apd/v2 v2.0.1 h1:y1Rh3tEU89D+7Tgbw+lp52T6p/GJLpDmNvr10UWqLTE=
|
||||
github.com/cockroachdb/apd/v2 v2.0.2 h1:weh8u7Cneje73dDh+2tEVLUvyBc89iwepWCD8b8034E=
|
||||
github.com/cockroachdb/apd/v2 v2.0.2/go.mod h1:DDxRlzC2lo3/vSlmSoS7JkqbbrARPuFOGr0B9pvN3Gw=
|
||||
github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
|
||||
github.com/emicklei/proto v1.6.15 h1:XbpwxmuOPrdES97FrSfpyy67SSCV/wBIKXqgJzh6hNw=
|
||||
github.com/emicklei/proto v1.10.0 h1:pDGyFRVV5RvV+nkBK9iy3q67FBy9Xa7vwrOTE+g5aGw=
|
||||
github.com/emicklei/proto v1.10.0/go.mod h1:rn1FgRS/FANiZdD2djyH7TMA9jdRDcYQ9IEN9yvjX0A=
|
||||
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58=
|
||||
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
|
||||
github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE=
|
||||
github.com/google/uuid v1.2.0 h1:qJYtXnJRWmpe7m/3XlyhrsLrEURqHRM2kxzoxXqyUDs=
|
||||
github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||
github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM=
|
||||
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
|
||||
github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
|
||||
github.com/mitchellh/go-wordwrap v1.0.1 h1:TLuKupo69TCn6TQSyGxwI1EblZZEsQ0vMlAFQflz0v0=
|
||||
github.com/mitchellh/go-wordwrap v1.0.1/go.mod h1:R62XHJLzvMFRBbcrT7m7WgmE1eOyTSsCt+hzestvNj0=
|
||||
github.com/mpvl/unique v0.0.0-20150818121801-cbe035fff7de h1:D5x39vF5KCwKQaw+OC9ZPiLVHXz3UFw2+psEX+gYcto=
|
||||
github.com/mpvl/unique v0.0.0-20150818121801-cbe035fff7de/go.mod h1:kJun4WP5gFuHZgRjZUWWuH1DTxCtxbHDOIJsudS8jzY=
|
||||
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||
github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
|
||||
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||
github.com/protocolbuffers/txtpbfmt v0.0.0-20201118171849-f6a6b3f636fc h1:gSVONBi2HWMFXCa9jFdYvYk7IwW/mTLxWOF7rXS4LO0=
|
||||
github.com/protocolbuffers/txtpbfmt v0.0.0-20220428173112-74888fd59c2b h1:zd/2RNzIRkoGGMjE+YIsZ85CnDIz672JK2F3Zl4vux4=
|
||||
github.com/protocolbuffers/txtpbfmt v0.0.0-20220428173112-74888fd59c2b/go.mod h1:KjY0wibdYKc4DYkerHSbguaf3JeIPGhNJBp2BNiFH78=
|
||||
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
||||
github.com/spf13/cobra v1.4.0 h1:y+wJpx64xcgO1V+RcnwW0LEHxTKRi2ZDPSBjWnrg88Q=
|
||||
github.com/spf13/cobra v1.4.0/go.mod h1:Wo4iy3BUC+X2Fybo0PDqwJIv3dNRiZLHQymsfxlB84g=
|
||||
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
|
||||
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
|
||||
golang.org/x/mod v0.3.1-0.20200828183125-ce943fd02449 h1:xUIPaMhvROX9dhPvRCenIJtU78+lbEenGbgqB5hfHCQ=
|
||||
golang.org/x/mod v0.6.0-dev.0.20220818022119-ed83ed61efb9 h1:VtCrPQXM5Wo9l7XN64SjBMczl48j8mkP+2e3OhYlz+0=
|
||||
golang.org/x/mod v0.6.0-dev.0.20220818022119-ed83ed61efb9/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
||||
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b h1:0mm1VjtFUOIlE1SbDlwjYaDxZVDP2S5ou6y0gSgXHu8=
|
||||
golang.org/x/net v0.0.0-20220722155237-a158d28d115b h1:PxfKdU9lEEDYjdIzOtC4qFWgkU2rGHdKlKowJSMN9h0=
|
||||
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
||||
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f h1:v4INt8xihDGvnrfjMDVXGxw9wrfxYyCjk0KbXjhR55s=
|
||||
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk=
|
||||
golang.org/x/text v0.3.8 h1:nAL+RVCQ9uMn3vJZbV+MRnydTJFPf8qqY42YiA6MrqY=
|
||||
golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
|
||||
golang.org/x/tools v0.0.0-20200612220849-54c614fe050c h1:g6oFfz6Cmw68izP3xsdud3Oxu145IPkeFzyRg58AKHM=
|
||||
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/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
|
||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
|
||||
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo=
|
||||
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
module _ // Auto generated by https://github.com/bwplotka/bingo. DO NOT EDIT
|
||||
|
||||
go 1.20
|
||||
go 1.19
|
||||
|
||||
require github.com/golangci/golangci-lint v1.53.3 // cmd/golangci-lint
|
||||
require github.com/golangci/golangci-lint v1.51.2 // cmd/golangci-lint
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,138 +1,86 @@
|
||||
github.com/Masterminds/goutils v1.1.1 h1:5nUrii3FMTL5diU80unEVvNevw1nH4+ZV4DSLVJLSYI=
|
||||
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/sprig/v3 v3.2.2 h1:17jRggJu518dr3QaafizSXOjKYp94wKfABxUmyxvxX8=
|
||||
github.com/Masterminds/sprig/v3 v3.2.2/go.mod h1:UoaO7Yp8KlPnJIYWTFkMaqPUYKTfGFPhxNuwnnxkKlk=
|
||||
github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI=
|
||||
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M=
|
||||
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/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/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/go-openapi/analysis v0.21.2 h1:hXFrOYFHUAMQdu6zwAiKKJHJQ8kqZs1ux/ru1P1wLJU=
|
||||
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/errors v0.20.2 h1:dxy7PGTqEh94zj2E3h1cUmQQWiM1+aeCROfAr02EmK8=
|
||||
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/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/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY=
|
||||
github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg=
|
||||
github.com/go-openapi/jsonreference v0.19.6 h1:UBIxjkht+AWIgYzCDSv2GN+E/togfwXUJFRTWhl2Jjs=
|
||||
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/loads v0.21.0 h1:jYtUO4wwP7psAweisP/MDoOpdzsYEESdoPcsWjHDR68=
|
||||
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/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/spec v0.20.4 h1:O8hJrt0UMnhHcluhIdUgCLRWyM2x7QkBXRvOs7m+O1M=
|
||||
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/strfmt v0.21.1 h1:G6s2t5V5kGCHLVbSdZ/6lI8Wm4OzoPFkc3/cjAsKQrM=
|
||||
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/swag v0.19.15 h1:D2NRCBzS9/pEY3gP9Nl8aDqGUcPFrwG2p+CNFrLyrCM=
|
||||
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/validate v0.20.3 h1:GZPPhhKSZrE8HjB4eEkoYAZmoWA4+tCemSgINH1/vKw=
|
||||
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-stack/stack v1.8.1 h1:ntEHSVwIt7PNXNpgPmVfMrNhLtgjlmnZha2kOpuRiDw=
|
||||
github.com/go-swagger/go-swagger v0.29.0 h1:z3YoZtLvS1Y8TE/PCat1VypcZxM0IgKLt0NvZxQyNl8=
|
||||
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/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/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4=
|
||||
github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q=
|
||||
github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
|
||||
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
|
||||
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/imdario/mergo v0.3.12 h1:b6R2BslTbIEToALKP7LxUvijTsNI9TAe80pLWN2g/HU=
|
||||
github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA=
|
||||
github.com/jessevdk/go-flags v1.5.0 h1:1jKYvbxEjfUl0fmqTCOfonvskHHXMjBySTLW4y9LFvc=
|
||||
github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4=
|
||||
github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
|
||||
github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
|
||||
github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0=
|
||||
github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk=
|
||||
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
|
||||
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/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
|
||||
github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
|
||||
github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
|
||||
github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
|
||||
github.com/mitchellh/mapstructure v1.4.3 h1:OVowDSCllw/YjdLkam3/sm7wEtOy59d8ndGgCcyj8cs=
|
||||
github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
|
||||
github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
|
||||
github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
|
||||
github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
|
||||
github.com/oklog/ulid v1.3.1 h1:EGfNDEx6MqHz8B3uNV6QAib1UR2Lm97sHi3ocA6ESJ4=
|
||||
github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
|
||||
github.com/pelletier/go-toml v1.9.4 h1:tjENF6MfZAg8e4ZmZTeWaWiT2vXtsoO6+iuOjFhECwM=
|
||||
github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8=
|
||||
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/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
|
||||
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||
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/shopspring/decimal v1.2.0 h1:abSATXmQEYyShuxI4/vyW3tV1MrKAJzCZ/0zLUXYbsQ=
|
||||
github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o=
|
||||
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/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/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk=
|
||||
github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo=
|
||||
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
|
||||
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
|
||||
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/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/toqueteos/webbrowser v1.2.0 h1:tVP/gpK69Fx+qMJKsLE7TD8LuGWPnEV71wBN9rrstGQ=
|
||||
github.com/toqueteos/webbrowser v1.2.0/go.mod h1:XWoZq4cyp9WeUeak7w7LXRUQf1F1ATJMir8RTqb4ayM=
|
||||
go.mongodb.org/mongo-driver v1.8.2 h1:8ssUXufb90ujcIvR6MyE1SchaNj0SFxsakiZgxIyrMk=
|
||||
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=
|
||||
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/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/net v0.0.0-20220121210141-e204ce36a2ba h1:6u6sik+bn/y7vILcYkK3iwTBWN7WtBvB0+SZswQnbf8=
|
||||
golang.org/x/sys v0.0.0-20220114195835-da31bd327af9 h1:XfKQ4OlFl8okEOr5UvAqFRVj8pY/4yfcXrddB8qAbU0=
|
||||
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/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk=
|
||||
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
||||
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/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
|
||||
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/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
|
||||
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
|
||||
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
|
||||
@@ -10,11 +10,11 @@ fi
|
||||
|
||||
BRA="${GOBIN}/bra-v0.0.0-20200517080246-1e3013ecaff8"
|
||||
|
||||
CUE="${GOBIN}/cue-v0.5.0"
|
||||
CUE="${GOBIN}/cue-v0.5.0-beta.2"
|
||||
|
||||
DRONE="${GOBIN}/drone-v1.5.0"
|
||||
|
||||
GOLANGCI_LINT="${GOBIN}/golangci-lint-v1.53.3"
|
||||
GOLANGCI_LINT="${GOBIN}/golangci-lint-v1.51.2"
|
||||
|
||||
JB="${GOBIN}/jb-v0.5.1"
|
||||
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
[run]
|
||||
init_cmds = [
|
||||
["GO_BUILD_DEV=1", "make", "build-go"],
|
||||
["make", "gen-go"],
|
||||
["make", "gen-jsonnet"],
|
||||
["GO_BUILD_DEV=1", "make", "build-go"],
|
||||
["./bin/grafana", "server", "-packaging=dev", "cfg:app_mode=development"]
|
||||
]
|
||||
watch_all = true
|
||||
@@ -16,7 +17,8 @@ watch_exts = [".go", ".ini", ".toml", ".template.html"]
|
||||
ignore_files = [".*_gen.go"]
|
||||
build_delay = 1500
|
||||
cmds = [
|
||||
["GO_BUILD_DEV=1", "make", "build-go"],
|
||||
["make", "gen-go"],
|
||||
["make", "gen-jsonnet"],
|
||||
["GO_BUILD_DEV=1", "make", "build-go"],
|
||||
["./bin/grafana", "server", "-packaging=dev", "cfg:app_mode=development"]
|
||||
]
|
||||
|
||||
@@ -1294,7 +1294,7 @@ This option to group query variable values into groups by tags has been an exper
|
||||
**Deprecation warnings**
|
||||
|
||||
- Scripted dashboards is now deprecated. The feature is not removed but will be in a future release. We hope to address the underlying requirement of dynamic dashboards in a different way. [#24059](https://github.com/grafana/grafana/issues/24059)
|
||||
- The unofficial first version of backend plugins together with usage of [grafana/grafana-plugin-model](https://github.com/grafana/grafana-plugin-model) is now deprecated and support for that will be removed in a future release. Please refer to [backend plugins documentation](/developers/plugin-tools/introduction/backend-plugins) for information about the new officially supported backend plugins.
|
||||
- The unofficial first version of backend plugins together with usage of [grafana/grafana-plugin-model](https://github.com/grafana/grafana-plugin-model) is now deprecated and support for that will be removed in a future release. Please refer to [backend plugins documentation](https://grafana.com/docs/grafana/latest/developers/plugins/backend/) for information about the new officially supported backend plugins.
|
||||
|
||||
## 7.0 Feature highlights
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,5 +0,0 @@
|
||||
aks
|
||||
eror
|
||||
iam
|
||||
wan
|
||||
operato
|
||||
46
.drone.star
46
.drone.star
@@ -7,49 +7,51 @@
|
||||
This module returns a Drone configuration including pipelines and secrets.
|
||||
"""
|
||||
|
||||
load("scripts/drone/events/cron.star", "cronjobs")
|
||||
load("scripts/drone/events/main.star", "main_pipelines")
|
||||
load("scripts/drone/events/pr.star", "pr_pipelines")
|
||||
load("scripts/drone/events/main.star", "main_pipelines")
|
||||
load(
|
||||
"scripts/drone/events/release.star",
|
||||
"integration_test_pipelines",
|
||||
"artifacts_page_pipeline",
|
||||
"enterprise2_pipelines",
|
||||
"enterprise_pipelines",
|
||||
"oss_pipelines",
|
||||
"publish_artifacts_pipelines",
|
||||
"publish_npm_pipelines",
|
||||
"publish_packages_pipeline",
|
||||
)
|
||||
load(
|
||||
"scripts/drone/pipelines/ci_images.star",
|
||||
"publish_ci_windows_test_image_pipeline",
|
||||
)
|
||||
load(
|
||||
"scripts/drone/pipelines/publish_images.star",
|
||||
"publish_image_pipelines_public",
|
||||
"publish_image_pipelines_security",
|
||||
)
|
||||
load(
|
||||
"scripts/drone/pipelines/windows.star",
|
||||
"windows_test_backend",
|
||||
)
|
||||
load(
|
||||
"scripts/drone/rgm.star",
|
||||
"rgm",
|
||||
)
|
||||
load("scripts/drone/pipelines/github.star", "publish_github_pipeline")
|
||||
load("scripts/drone/pipelines/aws_marketplace.star", "publish_aws_marketplace_pipeline")
|
||||
load("scripts/drone/version.star", "version_branch_pipelines")
|
||||
load("scripts/drone/events/cron.star", "cronjobs")
|
||||
load("scripts/drone/vault.star", "secrets")
|
||||
|
||||
def main(_ctx):
|
||||
return (
|
||||
pr_pipelines() +
|
||||
main_pipelines() +
|
||||
oss_pipelines() +
|
||||
enterprise_pipelines() +
|
||||
enterprise2_pipelines() +
|
||||
enterprise2_pipelines(
|
||||
prefix = "custom-",
|
||||
trigger = {"event": ["custom"]},
|
||||
) +
|
||||
publish_image_pipelines_public() +
|
||||
publish_image_pipelines_security() +
|
||||
publish_github_pipeline("public") +
|
||||
publish_github_pipeline("security") +
|
||||
publish_aws_marketplace_pipeline("public") +
|
||||
publish_artifacts_pipelines("security") +
|
||||
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() +
|
||||
artifacts_page_pipeline() +
|
||||
version_branch_pipelines() +
|
||||
cronjobs() +
|
||||
secrets()
|
||||
)
|
||||
|
||||
6686
.drone.yml
6686
.drone.yml
File diff suppressed because it is too large
Load Diff
@@ -3,23 +3,23 @@
|
||||
.yarn
|
||||
build
|
||||
compiled
|
||||
/data
|
||||
data
|
||||
deployment_tools_config.json
|
||||
/devenv
|
||||
devenv
|
||||
dist
|
||||
/e2e/tmp
|
||||
e2e/tmp
|
||||
node_modules
|
||||
/pkg
|
||||
/public/lib/monaco
|
||||
/scripts/grafana-server/tmp
|
||||
pkg
|
||||
public/lib/monaco
|
||||
scripts/grafana-server/tmp
|
||||
vendor
|
||||
|
||||
# TS generate from cue by cuetsy
|
||||
**/*.gen.ts
|
||||
|
||||
# Auto-generated internationalization files
|
||||
/public/locales/_build/
|
||||
/public/locales/**/*.js
|
||||
public/locales/_build/
|
||||
public/locales/**/*.js
|
||||
|
||||
# Auto-generated icon file
|
||||
/packages/grafana-ui/src/components/Icon/iconBundle.ts
|
||||
packages/grafana-ui/src/components/Icon/iconBundle.ts
|
||||
|
||||
45
.eslintrc
45
.eslintrc
@@ -44,6 +44,12 @@
|
||||
"@typescript-eslint/no-redeclare": ["error"]
|
||||
},
|
||||
"overrides": [
|
||||
{
|
||||
"files": ["public/app/features/scenes/**/*.{ts,tsx}"],
|
||||
"rules": {
|
||||
"@typescript-eslint/explicit-member-accessibility": ["error", { "accessibility": "explicit" }]
|
||||
}
|
||||
},
|
||||
{
|
||||
"files": ["packages/grafana-ui/src/components/uPlot/**/*.{ts,tsx}"],
|
||||
"rules": {
|
||||
@@ -68,18 +74,20 @@
|
||||
},
|
||||
{
|
||||
"extends": ["plugin:jsx-a11y/recommended"],
|
||||
"files": ["**/*.tsx"],
|
||||
"excludedFiles": ["**/*.{spec,test}.tsx"],
|
||||
"files": ["**/*"],
|
||||
"excludedFiles": ["**/*.{spec,test}.{ts,tsx}"],
|
||||
"rules": {
|
||||
// rules marked "off" are those left in the recommended preset we need to fix
|
||||
// we should remove the corresponding line and fix them one by one
|
||||
// any marked "error" contain specific overrides we'll need to keep
|
||||
"jsx-a11y/click-events-have-key-events": "off",
|
||||
"jsx-a11y/no-autofocus": [
|
||||
"error",
|
||||
{
|
||||
"ignoreNonDOM": true
|
||||
}
|
||||
],
|
||||
"jsx-a11y/no-static-element-interactions": "off",
|
||||
"jsx-a11y/label-has-associated-control": [
|
||||
"error",
|
||||
{
|
||||
@@ -88,39 +96,6 @@
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"files": [
|
||||
"public/app/plugins/datasource/testdata/*.{ts,tsx}",
|
||||
"public/app/plugins/datasource/testdata/**/*.{ts,tsx}"
|
||||
],
|
||||
"rules": {
|
||||
"no-restricted-imports": [
|
||||
"error",
|
||||
{
|
||||
"paths": [
|
||||
// generic rules
|
||||
{
|
||||
"name": "react-redux",
|
||||
"importNames": ["useDispatch", "useSelector"],
|
||||
"message": "Please import from app/types instead."
|
||||
},
|
||||
{
|
||||
"name": "react-i18next",
|
||||
"importNames": ["Trans", "t"],
|
||||
"message": "Please import from app/core/internationalization instead"
|
||||
}
|
||||
],
|
||||
// new rules
|
||||
"patterns": [
|
||||
{
|
||||
"group": ["**/app/*"],
|
||||
"message": "Core plugins are not allowed to depend on Grafana core packages"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
452
.github/CODEOWNERS
vendored
452
.github/CODEOWNERS
vendored
@@ -12,47 +12,41 @@
|
||||
# This should make it easy to add new rules without breaking existing ones.
|
||||
|
||||
# Documentation
|
||||
/.changelog-archive @grafana/docs-grafana
|
||||
/.codespellignore @grafana/docs-tooling
|
||||
/CHANGELOG.md @grafana/grafana-delivery
|
||||
/CODE_OF_CONDUCT.md @grafana/docs-grafana
|
||||
/CONTRIBUTING.md @grafana/docs-grafana
|
||||
/GOVERNANCE.md @RichiH
|
||||
/HALL_OF_FAME.md @grafana/docs-grafana
|
||||
/ISSUE_TRIAGE.md @grafana/grafana-community-support
|
||||
/LICENSE @torkelo
|
||||
/LICENSING.md @torkelo
|
||||
/MAINTAINERS.md @RichiH
|
||||
/NOTICE.md @torkelo
|
||||
/README.md @grafana/docs-grafana
|
||||
/ROADMAP.md @torkelo
|
||||
/SECURITY.md @grafana/security-team
|
||||
/SUPPORT.md @torkelo
|
||||
/UPGRADING_DEPENDENCIES.md @grafana/docs-grafana
|
||||
/WORKFLOW.md @torkelo
|
||||
/docs/ @grafana/docs-grafana
|
||||
/contribute/ @grafana/docs-grafana
|
||||
/devenv/README.md @grafana/docs-grafana
|
||||
/docs/sources/developers/plugins/ @grafana/docs-grafana @grafana/plugins-platform-frontend @grafana/plugins-platform-backend
|
||||
/docs/sources/developers/plugins/backend/ @grafana/docs-grafana @grafana/plugins-platform-backend
|
||||
/.changelog-archive @grafana/docs-grafana
|
||||
CHANGELOG.md @grafana/docs-grafana
|
||||
CODE_OF_CONDUCT.md @grafana/docs-grafana
|
||||
CONTRIBUTING.md @grafana/docs-grafana
|
||||
GOVERNANCE.md @RichiH
|
||||
HALL_OF_FAME.md @grafana/docs-grafana
|
||||
ISSUE_TRIAGE.md @grafana/grafana-community-support
|
||||
LICENSE @torkelo
|
||||
LICENSING.md @torkelo
|
||||
MAINTAINERS.md @RichiH
|
||||
NOTICE.md @torkelo
|
||||
README.md @grafana/docs-grafana
|
||||
ROADMAP.md @torkelo
|
||||
SECURITY.md @grafana/security-team
|
||||
SUPPORT.md @torkelo
|
||||
UPGRADING_DEPENDENCIES.md @grafana/docs-grafana
|
||||
WORKFLOW.md @torkelo
|
||||
|
||||
# Technical documentation
|
||||
# `make docs` procedure and related workflows are owned @grafana/docs-tooling. Slack #docs.
|
||||
# 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/ @Eve832 @GrafanaWriter
|
||||
/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/release-notes/ @Eve832 @GrafanaWriter
|
||||
/docs/sources/setup-grafana/ @chri2547
|
||||
/docs/sources/upgrade-guide/ @chri2547 @imatwawana
|
||||
/docs/sources/whatsnew/ @chri2547 @imatwawana
|
||||
/docs/sources/developers/plugins/ @Eve832 @josmperez @grafana/plugins-platform-frontend @grafana/plugins-platform-backend
|
||||
|
||||
# Set up, dashboards/visualization, best practices: Chris Moyer
|
||||
# Alerting: Brenda Muir
|
||||
/docs/sources/administration/ @Eve832 @GrafanaWriter
|
||||
/docs/sources/alerting/ @brendamuir
|
||||
/docs/sources/dashboards/ @chri2547
|
||||
/docs/sources/datasources/ @Eve832 @GrafanaWriter
|
||||
/docs/sources/explore/ @Eve832 @GrafanaWriter
|
||||
/docs/sources/getting-started/ @chri2547
|
||||
/docs/sources/old-alerting/ @brendamuir
|
||||
/docs/sources/release-notes/ @Eve832 @GrafanaWriter
|
||||
/docs/sources/setup-grafana/ @chri2547
|
||||
/docs/sources/whatsnew/ @Eve832 @GrafanaWriter
|
||||
|
||||
# Backend code
|
||||
/go.mod @grafana/backend-platform
|
||||
@@ -63,14 +57,12 @@
|
||||
/.bra.toml @grafana/backend-platform
|
||||
/.golangci.toml @grafana/backend-platform
|
||||
/build.go @grafana/backend-platform
|
||||
/scripts/modowners/ @grafana/backend-platform
|
||||
|
||||
/pkg/api/ @grafana/backend-platform
|
||||
/pkg/bus/ @grafana/backend-platform
|
||||
/pkg/cmd/ @grafana/backend-platform
|
||||
/pkg/systemd/ @grafana/backend-platform
|
||||
/pkg/components/apikeygen/ @grafana/grafana-authnz-team
|
||||
/pkg/components/satokengen/ @grafana/grafana-authnz-team
|
||||
/pkg/components/apikeygenprefixed/ @grafana/grafana-authnz-team
|
||||
/pkg/components/dashdiffs/ @grafana/backend-platform
|
||||
/pkg/components/imguploader/ @grafana/backend-platform
|
||||
/pkg/components/loki/ @grafana/backend-platform
|
||||
@@ -97,9 +89,9 @@
|
||||
/pkg/models/ @grafana/backend-platform
|
||||
/pkg/server/ @grafana/backend-platform
|
||||
/pkg/services/annotations/ @grafana/backend-platform
|
||||
/pkg/services/apikey/ @grafana/grafana-authnz-team
|
||||
/pkg/services/certgenerator @grafana/grafana-app-platform-squad
|
||||
/pkg/services/apikey/ @grafana/backend-platform
|
||||
/pkg/services/cleanup/ @grafana/backend-platform
|
||||
/pkg/services/comments/ @grafana/backend-platform
|
||||
/pkg/services/contexthandler/ @grafana/backend-platform
|
||||
/pkg/services/correlations/ @grafana/backend-platform
|
||||
/pkg/services/dashboardimport/ @grafana/backend-platform
|
||||
@@ -107,8 +99,8 @@
|
||||
/pkg/services/dashboardsnapshots/ @grafana/backend-platform
|
||||
/pkg/services/dashboardversion/ @grafana/backend-platform
|
||||
/pkg/services/encryption/ @grafana/backend-platform
|
||||
/pkg/services/featuremgmt/ @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
|
||||
@@ -117,6 +109,7 @@
|
||||
/pkg/services/org/ @grafana/backend-platform
|
||||
/pkg/services/playlist/ @grafana/backend-platform
|
||||
/pkg/services/plugindashboards/ @grafana/backend-platform
|
||||
/pkg/services/pluginsettings/ @grafana/backend-platform
|
||||
/pkg/services/preference/ @grafana/backend-platform
|
||||
/pkg/services/provisioning/ @grafana/backend-platform
|
||||
/pkg/services/publicdashboards/ @grafana/dashboards-squad
|
||||
@@ -146,7 +139,6 @@
|
||||
/pkg/tsdb/legacydata/ @grafana/backend-platform
|
||||
/pkg/tsdb/opentsdb/ @grafana/backend-platform
|
||||
/pkg/tsdb/sqleng/ @grafana/backend-platform
|
||||
/pkg/tsdb/sqleng/proxyutil @grafana/hosted-grafana-team
|
||||
/pkg/util/ @grafana/backend-platform
|
||||
/pkg/web/ @grafana/backend-platform
|
||||
|
||||
@@ -163,18 +155,20 @@
|
||||
# Logs code, developers environment
|
||||
/devenv/docker/blocks/loki* @grafana/observability-logs
|
||||
/devenv/docker/blocks/elastic* @grafana/observability-logs
|
||||
/devenv/docker/blocks/self-instrumentation* @grafana/observability-metrics
|
||||
|
||||
# Performance tests
|
||||
/devenv/docker/loadtest-ts/ @grafana/multitenancy-squad
|
||||
|
||||
/devenv/bulk-dashboards/ @grafana/dashboards-squad
|
||||
/devenv/bulk_alerting_dashboards/ @grafana/alerting-backend-product
|
||||
/devenv/bulk_alerting_dashboards/ @grafana/alerting-squad-backend
|
||||
/devenv/create_docker_compose.sh @grafana/backend-platform
|
||||
/devenv/dashboards.yaml @grafana/dashboards-squad
|
||||
/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-product
|
||||
/devenv/docker/blocks/clickhouse/ @grafana/partner-datasources
|
||||
/devenv/docker/blocks/alert_webhook_listener/ @grafana/alerting-squad-backend
|
||||
/devenv/docker/blocks/clickhouse/ @grafana/partner-plugins
|
||||
/devenv/docker/blocks/collectd/ @grafana/observability-metrics
|
||||
/devenv/docker/blocks/grafana/ @grafana/grafana-as-code
|
||||
/devenv/docker/blocks/graphite/ @grafana/observability-metrics
|
||||
@@ -183,8 +177,7 @@
|
||||
/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/grafana-bi-squad
|
||||
/devenv/docker/blocks/maildev/ @grafana/alerting-squad-frontend
|
||||
/devenv/docker/blocks/memcached/ @grafana/backend-platform
|
||||
/devenv/docker/blocks/mssql/ @grafana/grafana-bi-squad
|
||||
/devenv/docker/blocks/mssql_arm64/ @grafana/grafana-bi-squad
|
||||
@@ -200,7 +193,6 @@
|
||||
/devenv/docker/blocks/postgres_tests/ @grafana/grafana-bi-squad
|
||||
/devenv/docker/blocks/prometheus/ @grafana/observability-metrics
|
||||
/devenv/docker/blocks/prometheus_random_data/ @grafana/observability-metrics
|
||||
/devenv/docker/blocks/pyroscope/ @grafana/observability-traces-and-profiling
|
||||
/devenv/docker/blocks/redis/ @bergquist
|
||||
/devenv/docker/blocks/sensugo/ @grafana/backend-platform
|
||||
/devenv/docker/blocks/slow_proxy/ @bergquist
|
||||
@@ -211,37 +203,36 @@
|
||||
/devenv/docker/buildcontainer/ @bergquist
|
||||
/devenv/docker/compose_header.yml @grafana/backend-platform
|
||||
/devenv/docker/debtest/ @bergquist
|
||||
/devenv/docker/ha-test-unified-alerting/ @grafana/alerting-backend-product
|
||||
/devenv/docker/ha-test-unified-alerting/ @grafana/alerting-squad-backend
|
||||
/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/jsonnet/ @grafana/grafana-edge-squad
|
||||
/devenv/local-npm/ @grafana/frontend-ops
|
||||
/devenv/vscode/ @grafana/frontend-ops
|
||||
/devenv/setup.sh @grafana/backend-platform
|
||||
|
||||
# Emails
|
||||
/emails/ @grafana/alerting-frontend
|
||||
/emails/ @grafana/alerting-squad-frontend
|
||||
|
||||
#Packaging
|
||||
/packaging/ @DanCech
|
||||
|
||||
|
||||
# Continuous Integration
|
||||
.drone.yml @grafana/grafana-delivery
|
||||
.drone.star @grafana/grafana-delivery
|
||||
/scripts/drone/ @grafana/grafana-delivery
|
||||
/pkg/build/ @grafana/grafana-delivery
|
||||
/.dockerignore @grafana/grafana-delivery
|
||||
/Dockerfile @grafana/grafana-delivery
|
||||
/Makefile @grafana/grafana-delivery
|
||||
/scripts/build/ @grafana/grafana-delivery
|
||||
/scripts/list-release-artifacts.sh @grafana/grafana-delivery
|
||||
.drone.yml @grafana/grafana-release-eng
|
||||
.drone.star @grafana/grafana-release-eng
|
||||
/scripts/drone/ @grafana/grafana-release-eng
|
||||
/pkg/build/ @grafana/grafana-release-eng
|
||||
/.dockerignore @grafana/grafana-release-eng
|
||||
/Dockerfile @grafana/grafana-release-eng
|
||||
/Makefile @grafana/grafana-release-eng
|
||||
/scripts/build/ @grafana/grafana-release-eng
|
||||
|
||||
# OSS Plugin Partnerships backend code
|
||||
/pkg/tsdb/cloudwatch/ @grafana/aws-datasources
|
||||
/pkg/tsdb/azuremonitor/ @grafana/partner-datasources
|
||||
/pkg/tsdb/cloud-monitoring/ @grafana/partner-datasources
|
||||
/pkg/tsdb/cloudwatch/ @grafana/aws-plugins
|
||||
/pkg/tsdb/azuremonitor/ @grafana/partner-plugins
|
||||
/pkg/tsdb/cloudmonitoring/ @grafana/partner-plugins
|
||||
|
||||
# Observability backend code
|
||||
/pkg/tsdb/prometheus/ @grafana/observability-metrics
|
||||
@@ -250,7 +241,7 @@
|
||||
/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/phlare/ @grafana/observability-traces-and-profiling
|
||||
/pkg/tsdb/parca/ @grafana/observability-traces-and-profiling
|
||||
|
||||
# BI backend code
|
||||
@@ -262,25 +253,25 @@
|
||||
/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/kindsysreport/ @grafana/grafana-app-platform-squad
|
||||
# Grafana multitenancy
|
||||
/pkg/services/live/ @grafana/multitenancy-squad
|
||||
/pkg/services/searchV2/ @grafana/multitenancy-squad
|
||||
/pkg/services/store/ @grafana/multitenancy-squad
|
||||
/pkg/services/querylibrary/ @grafana/multitenancy-squad
|
||||
/pkg/services/export/ @grafana/multitenancy-squad
|
||||
/pkg/infra/filestorage/ @grafana/multitenancy-squad
|
||||
/pkg/util/converter/ @grafana/multitenancy-squad
|
||||
|
||||
# Alerting
|
||||
/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
|
||||
/pkg/services/ngalert/ @grafana/alerting-squad-backend
|
||||
/pkg/services/sqlstore/migrations/ualert/ @grafana/alerting-squad-backend
|
||||
/pkg/services/alerting/ @grafana/alerting-squad-backend
|
||||
/pkg/tests/api/alerting/ @grafana/alerting-squad-backend
|
||||
/public/app/features/alerting/ @grafana/alerting-squad-frontend
|
||||
|
||||
# Library Services
|
||||
/pkg/services/libraryelements/ @grafana/grafana-frontend-platform
|
||||
/pkg/services/librarypanels/ @grafana/grafana-frontend-platform
|
||||
/pkg/services/libraryelements/ @grafana/user-essentials
|
||||
/pkg/services/librarypanels/ @grafana/user-essentials
|
||||
|
||||
# Plugins
|
||||
/pkg/api/pluginproxy/ @grafana/plugins-platform-backend
|
||||
@@ -291,37 +282,30 @@
|
||||
/pkg/services/pluginsintegration/ @grafana/plugins-platform-backend
|
||||
/pkg/plugins/pfs/ @grafana/plugins-platform-backend @grafana/grafana-as-code
|
||||
/pkg/tsdb/testdatasource/ @grafana/plugins-platform-backend
|
||||
/pkg/services/pluginsintegration/pluginsettings/ @grafana/plugins-platform-backend
|
||||
|
||||
# Dashboard previews / crawler (behind feature flag)
|
||||
/pkg/services/thumbs/ @grafana/multitenancy-squad
|
||||
|
||||
# Backend code docs
|
||||
/contribute/backend/ @grafana/backend-platform
|
||||
|
||||
|
||||
/crowdin.yml @grafana/grafana-frontend-platform
|
||||
/public/locales/ @grafana/grafana-frontend-platform
|
||||
/public/app/core/internationalization/ @grafana/grafana-frontend-platform
|
||||
/e2e/ @grafana/grafana-frontend-platform
|
||||
/e2e/cloud-plugins-suite/ @grafana/partner-datasources
|
||||
/packages/ @grafana/grafana-frontend-platform @grafana/plugins-platform-frontend
|
||||
/packages/grafana-e2e-selectors/ @grafana/grafana-frontend-platform
|
||||
/packages/grafana-e2e/ @grafana/grafana-frontend-platform
|
||||
/crowdin.yml @grafana/user-essentials
|
||||
/public/locales/ @grafana/user-essentials
|
||||
/public/app/core/internationalization/ @grafana/user-essentials
|
||||
/e2e/ @grafana/user-essentials
|
||||
/e2e/cloud-plugins-suite/ @grafana/partner-plugins
|
||||
/packages/ @grafana/user-essentials @grafana/plugins-platform-frontend @grafana/grafana-bi-squad
|
||||
/packages/grafana-e2e-selectors/ @grafana/user-essentials
|
||||
/packages/grafana-e2e/ @grafana/user-essentials
|
||||
/packages/grafana-toolkit/ @grafana/plugins-platform-frontend
|
||||
/packages/grafana-ui/.storybook/ @grafana/plugins-platform-frontend
|
||||
/packages/grafana-ui/src/components/ @grafana/grafana-frontend-platform
|
||||
/packages/grafana-ui/src/components/DateTimePickers/ @grafana/grafana-frontend-platform
|
||||
/packages/grafana-ui/src/components/DateTimePickers/ @grafana/user-essentials
|
||||
/packages/grafana-ui/src/components/GraphNG/ @grafana/grafana-bi-squad
|
||||
/packages/grafana-ui/src/components/Logs/ @grafana/observability-logs
|
||||
/packages/grafana-ui/src/components/Table/ @grafana/grafana-bi-squad
|
||||
/packages/grafana-ui/src/components/Gauge/ @grafana/dataviz-squad
|
||||
/packages/grafana-ui/src/components/BarGauge/ @grafana/dataviz-squad
|
||||
/packages/grafana-ui/src/components/GraphNG/ @grafana/dataviz-squad
|
||||
/packages/grafana-ui/src/components/Graph/ @grafana/dataviz-squad
|
||||
/packages/grafana-ui/src/components/TimeSeries/ @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/TimeSeries/ @grafana/grafana-bi-squad
|
||||
/packages/grafana-ui/src/components/uPlot/ @grafana/grafana-bi-squad
|
||||
/packages/grafana-ui/src/utils/storybook/ @grafana/plugins-platform-frontend
|
||||
/packages/grafana-data/src/**/*logs* @grafana/observability-logs
|
||||
/plugins-bundled/ @grafana/plugins-platform-frontend
|
||||
@@ -341,7 +325,7 @@ tsconfig.json @grafana/frontend-ops
|
||||
/.yarn @grafana/frontend-ops
|
||||
/.yarnrc.yml @grafana/frontend-ops
|
||||
/yarn.lock @grafana/frontend-ops
|
||||
/.linguirc @grafana/grafana-frontend-platform
|
||||
/.linguirc @grafana/user-essentials
|
||||
/babel.config.json @grafana/frontend-ops
|
||||
lerna.json @grafana/frontend-ops
|
||||
/.prettierrc.js @grafana/frontend-ops
|
||||
@@ -355,153 +339,146 @@ lerna.json @grafana/frontend-ops
|
||||
|
||||
|
||||
# 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/features/all.ts @grafana/grafana-frontend-platform
|
||||
/public/app/core/ @grafana/user-essentials
|
||||
/public/app/core/components/TimePicker/ @grafana/user-essentials
|
||||
/public/app/core/components/Layers/ @grafana/grafana-edge-squad
|
||||
/public/app/features/all.ts @grafana/user-essentials
|
||||
/public/app/features/admin/ @grafana/grafana-authnz-team
|
||||
/public/app/features/auth-config/ @grafana/grafana-authnz-team
|
||||
/public/app/features/annotations/ @grafana/grafana-frontend-platform
|
||||
/public/app/features/api-keys/ @grafana/grafana-authnz-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 @mikkancso
|
||||
/public/app/features/annotations/ @grafana/user-essentials
|
||||
/public/app/features/api-keys/ @grafana/user-essentials
|
||||
/public/app/features/canvas/ @grafana/grafana-edge-squad
|
||||
/public/app/features/commandPalette/ @grafana/user-essentials
|
||||
/public/app/features/comments/ @grafana/grafana-edge-squad
|
||||
/public/app/features/connections/ @grafana/plugins-platform-frontend
|
||||
/public/app/features/correlations/ @grafana/explore-squad
|
||||
/public/app/features/dashboard/ @grafana/dashboards-squad
|
||||
/public/app/features/datasources/ @grafana/plugins-platform-frontend @mikkancso
|
||||
/public/app/features/dimensions/ @grafana/dataviz-squad
|
||||
/public/app/features/dataframe-import/ @grafana/grafana-bi-squad
|
||||
/public/app/features/datasources/ @grafana/user-essentials
|
||||
/public/app/features/dimensions/ @grafana/grafana-edge-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/grafana-frontend-platform
|
||||
/public/app/features/folders/ @grafana/user-essentials
|
||||
/public/app/features/inspector/ @grafana/user-essentials
|
||||
/public/app/features/invites/ @grafana/user-essentials
|
||||
/public/app/features/geo/ @grafana/grafana-edge-squad
|
||||
/public/app/features/library-panels/ @grafana/user-essentials
|
||||
/public/app/features/logs/ @grafana/observability-logs
|
||||
/public/app/features/live/ @grafana/grafana-app-platform-squad
|
||||
/public/app/features/live/ @grafana/multitenancy-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/notifications/ @grafana/user-essentials
|
||||
/public/app/features/org/ @grafana/user-essentials
|
||||
/public/app/features/panel/ @grafana/user-essentials
|
||||
/public/app/features/playlist/ @grafana/dashboards-squad
|
||||
/public/app/features/plugins/ @grafana/plugins-platform-frontend
|
||||
/public/app/features/profile/ @grafana/grafana-frontend-platform
|
||||
/public/app/features/profile/ @grafana/user-essentials
|
||||
/public/app/features/runtime/ @ryantxu
|
||||
/public/app/features/query/ @grafana/dashboards-squad
|
||||
/public/app/features/sandbox/ @grafana/grafana-frontend-platform
|
||||
/public/app/features/query-library/ @grafana/grafana-edge-squad
|
||||
/public/app/features/sandbox/ @grafana/user-essentials
|
||||
/public/app/features/scenes/ @grafana/dashboards-squad
|
||||
/public/app/features/browse-dashboards/ @grafana/grafana-frontend-platform
|
||||
/public/app/features/search/ @grafana/grafana-frontend-platform
|
||||
/public/app/features/search/ @grafana/user-essentials
|
||||
/public/app/features/serviceaccounts/ @grafana/grafana-authnz-team
|
||||
/public/app/features/storage/ @grafana/grafana-app-platform-squad
|
||||
/public/app/features/storage/ @grafana/multitenancy-squad
|
||||
/public/app/features/teams/ @grafana/grafana-authnz-team
|
||||
/public/app/features/templating/ @grafana/dashboards-squad
|
||||
/public/app/features/transformers/ @grafana/dataviz-squad
|
||||
/public/app/features/transformers/ @grafana/grafana-edge-squad
|
||||
/public/app/features/users/ @grafana/grafana-authnz-team
|
||||
/public/app/features/variables/ @grafana/dashboards-squad
|
||||
/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/alertGroups/ @grafana/alerting-squad-frontend
|
||||
/public/app/plugins/panel/alertlist/ @grafana/alerting-squad-frontend
|
||||
/public/app/plugins/panel/annolist/ @grafana/user-essentials
|
||||
/public/app/plugins/panel/barchart/ @grafana/grafana-bi-squad
|
||||
/public/app/plugins/panel/bargauge/ @grafana/user-essentials
|
||||
/public/app/plugins/panel/dashlist/ @grafana/user-essentials
|
||||
/public/app/plugins/panel/debug/ @ryantxu
|
||||
/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
|
||||
/public/app/plugins/panel/heatmap/ @grafana/dataviz-squad
|
||||
/public/app/plugins/panel/histogram/ @grafana/dataviz-squad
|
||||
/public/app/plugins/panel/gauge/ @grafana/user-essentials
|
||||
/public/app/plugins/panel/gettingstarted/ @grafana/user-essentials
|
||||
/public/app/plugins/panel/graph/ @grafana/user-essentials
|
||||
/public/app/plugins/panel/heatmap/ @grafana/grafana-bi-squad
|
||||
/public/app/plugins/panel/histogram/ @grafana/grafana-bi-squad
|
||||
/public/app/plugins/panel/logs/ @grafana/observability-logs
|
||||
/public/app/plugins/panel/nodeGraph/ @grafana/observability-traces-and-profiling
|
||||
/public/app/plugins/panel/traces/ @grafana/observability-traces-and-profiling
|
||||
/public/app/plugins/panel/flamegraph/ @grafana/observability-traces-and-profiling
|
||||
/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/piechart/ @grafana/grafana-bi-squad
|
||||
/public/app/plugins/panel/state-timeline/ @grafana/grafana-bi-squad
|
||||
/public/app/plugins/panel/status-history/ @grafana/grafana-bi-squad
|
||||
/public/app/plugins/panel/table/ @grafana/grafana-bi-squad
|
||||
/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/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
|
||||
/public/app/plugins/panel/welcome/ @grafana/grafana-frontend-platform
|
||||
/public/app/plugins/panel/xychart/ @grafana/dataviz-squad
|
||||
/public/app/plugins/panel/timeseries/ @grafana/grafana-bi-squad
|
||||
/public/app/plugins/panel/geomap/ @grafana/grafana-edge-squad
|
||||
/public/app/plugins/panel/canvas/ @grafana/grafana-edge-squad
|
||||
/public/app/plugins/panel/candlestick/ @grafana/grafana-edge-squad
|
||||
/public/app/plugins/panel/icon/ @grafana/grafana-edge-squad
|
||||
/public/app/plugins/panel/live/ @grafana/multitenancy-squad
|
||||
/public/app/plugins/panel/news/ @grafana/user-essentials
|
||||
/public/app/plugins/panel/stat/ @grafana/user-essentials
|
||||
/public/app/plugins/panel/text/ @grafana/user-essentials
|
||||
/public/app/plugins/panel/welcome/ @grafana/user-essentials
|
||||
/public/app/plugins/panel/xychart/ @grafana/grafana-bi-squad
|
||||
/public/app/plugins/sdk.ts @grafana/plugins-platform-frontend
|
||||
/public/app/polyfills/old-mediaquerylist.ts @grafana/grafana-frontend-platform
|
||||
/public/app/routes/ @grafana/grafana-frontend-platform
|
||||
/public/app/store/ @grafana/grafana-frontend-platform
|
||||
/public/app/types/ @grafana/grafana-frontend-platform
|
||||
/public/app/polyfills/old-mediaquerylist.ts @grafana/user-essentials
|
||||
/public/app/routes/ @grafana/user-essentials
|
||||
/public/app/store/ @grafana/user-essentials
|
||||
/public/app/types/ @grafana/user-essentials
|
||||
/public/dashboards/ @grafana/dashboards-squad
|
||||
/public/fonts/ @grafana/alerting-frontend
|
||||
/public/fonts/ @grafana/alerting-squad-frontend
|
||||
/public/emails/ @grafana/user-essentials
|
||||
/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/img/ @grafana/user-essentials
|
||||
/public/lib/ @grafana/user-essentials
|
||||
/public/maps/ @ryantxu
|
||||
/public/robots.txt @grafana/frontend-ops
|
||||
/public/sass/ @grafana/grafana-frontend-platform
|
||||
/public/test/ @grafana/grafana-frontend-platform
|
||||
/public/views/ @grafana/grafana-frontend-platform
|
||||
/public/sass/ @grafana/user-essentials
|
||||
/public/test/ @grafana/user-essentials
|
||||
/public/testdata/ @grafana/user-essentials
|
||||
/public/views/ @grafana/user-essentials
|
||||
|
||||
/public/app/features/explore/Logs/ @grafana/observability-logs
|
||||
/public/app/features/explore/Logs.tsx @grafana/observability-logs
|
||||
/public/app/features/explore/LogsContainer.tsx @grafana/observability-logs
|
||||
|
||||
/public/app/features/explore/RawPrometheus/ @grafana/observability-metrics
|
||||
|
||||
/public/app/features/explore/NodeGraph/ @grafana/observability-traces-and-profiling
|
||||
/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/backend-platform
|
||||
/public/api-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
|
||||
/public/app/core/utils/metrics.ts @grafana/plugins-platform-frontend
|
||||
/public/app/index.ts @grafana/frontend-ops
|
||||
/public/app/AppWrapper.tsx @grafana/frontend-ops
|
||||
/public/app/partials/ @grafana/grafana-frontend-platform
|
||||
/public/app/partials/ @grafana/user-essentials
|
||||
|
||||
|
||||
|
||||
|
||||
/scripts/benchmark-access-control.sh @grafana/grafana-authnz-team
|
||||
/scripts/check-breaking-changes.sh @grafana/plugins-platform-frontend
|
||||
/scripts/ci-* @grafana/grafana-delivery
|
||||
/scripts/circle-* @grafana/grafana-delivery
|
||||
/scripts/publish-npm-packages.sh @grafana/grafana-delivery @grafana/plugins-platform-frontend
|
||||
/scripts/validate-npm-packages.sh @grafana/grafana-delivery @grafana/plugins-platform-frontend
|
||||
/scripts/ci-frontend-metrics.sh @grafana/grafana-frontend-platform @grafana/plugins-platform-frontend @grafana/grafana-bi-squad
|
||||
/scripts/cli/ @grafana/grafana-frontend-platform
|
||||
/scripts/ci-* @grafana/grafana-release-eng
|
||||
/scripts/circle-* @grafana/grafana-release-eng
|
||||
/scripts/ci-frontend-metrics.sh @grafana/user-essentials @grafana/plugins-platform-frontend @grafana/grafana-bi-squad
|
||||
/scripts/cli/ @grafana/user-essentials
|
||||
/scripts/clean-git-or-error.sh @grafana/grafana-as-code
|
||||
/scripts/grafana-server/ @grafana/grafana-frontend-platform
|
||||
/scripts/helpers/ @grafana/grafana-delivery
|
||||
/scripts/grafana-server/ @grafana/user-essentials
|
||||
/scripts/helpers/ @grafana/grafana-release-eng
|
||||
/scripts/import_many_dashboards.sh @torkelo
|
||||
/scripts/mixin-check.sh @bergquist
|
||||
/scripts/openapi3/ @grafana/grafana-operator-experience-squad
|
||||
/scripts/openapi3/ @grafana/grafana-partnerships-team
|
||||
/scripts/prepare-packagejson.js @grafana/frontend-ops
|
||||
/scripts/protobuf-check.sh @grafana/plugins-platform-backend
|
||||
/scripts/stripnulls.sh @grafana/grafana-as-code
|
||||
/scripts/tag_release.sh @grafana/grafana-delivery
|
||||
/scripts/trigger_docker_build.sh @grafana/grafana-delivery
|
||||
/scripts/trigger_grafana_packer.sh @grafana/grafana-delivery
|
||||
/scripts/trigger_windows_build.sh @grafana/grafana-delivery
|
||||
/scripts/verify-repo-update/ @grafana/grafana-delivery
|
||||
/scripts/tag_release.sh @grafana/grafana-release-eng
|
||||
/scripts/trigger_docker_build.sh @grafana/grafana-release-eng
|
||||
/scripts/trigger_grafana_packer.sh @grafana/grafana-release-eng
|
||||
/scripts/trigger_windows_build.sh @grafana/grafana-release-eng
|
||||
/scripts/validate-devenv-dashboards.sh @grafana/grafana-release-eng
|
||||
/scripts/verify-repo-update/ @grafana/grafana-release-eng
|
||||
|
||||
/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.ts @grafana/grafana-frontend-platform
|
||||
/scripts/generate-a11y-report.sh @grafana/user-essentials
|
||||
.pa11yci.conf.js @grafana/user-essentials
|
||||
.pa11yci-pr.conf.js @grafana/user-essentials
|
||||
.betterer.results @joshhunt
|
||||
.betterer.ts @joshhunt
|
||||
|
||||
# @grafana/ui component documentation
|
||||
*.mdx @grafana/plugins-platform-frontend
|
||||
@@ -511,11 +488,11 @@ lerna.json @grafana/frontend-ops
|
||||
|
||||
# Core datasources
|
||||
/public/app/plugins/datasource/dashboard/ @grafana/dashboards-squad
|
||||
/public/app/plugins/datasource/cloudwatch/ @grafana/aws-datasources
|
||||
/public/app/plugins/datasource/cloudwatch/ @grafana/aws-plugins
|
||||
/public/app/plugins/datasource/elasticsearch/ @grafana/observability-logs
|
||||
/public/app/plugins/datasource/grafana/ @grafana/grafana-frontend-platform
|
||||
/public/app/plugins/datasource/grafana/ @grafana/user-essentials
|
||||
/public/app/plugins/datasource/testdata/ @grafana/plugins-platform-frontend
|
||||
/public/app/plugins/datasource/azuremonitor/ @grafana/partner-datasources
|
||||
/public/app/plugins/datasource/grafana-azure-monitor-datasource/ @grafana/partner-plugins
|
||||
/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
|
||||
@@ -523,13 +500,13 @@ lerna.json @grafana/frontend-ops
|
||||
/public/app/plugins/datasource/mixed/ @grafana/dashboards-squad
|
||||
/public/app/plugins/datasource/mssql/ @grafana/grafana-bi-squad
|
||||
/public/app/plugins/datasource/mysql/ @grafana/grafana-bi-squad
|
||||
/public/app/plugins/datasource/opentsdb/ @grafana/observability-metrics
|
||||
/public/app/plugins/datasource/opentsdb/ @grafana/backend-platform
|
||||
/public/app/plugins/datasource/postgres/ @grafana/grafana-bi-squad
|
||||
/public/app/plugins/datasource/prometheus/ @grafana/observability-metrics
|
||||
/public/app/plugins/datasource/cloud-monitoring/ @grafana/partner-datasources
|
||||
/public/app/plugins/datasource/cloud-monitoring/ @grafana/partner-plugins
|
||||
/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/phlare/ @grafana/observability-traces-and-profiling
|
||||
/public/app/plugins/datasource/parca/ @grafana/observability-traces-and-profiling
|
||||
/public/app/plugins/datasource/alertmanager/ @grafana/alerting-squad
|
||||
|
||||
@@ -545,26 +522,24 @@ lerna.json @grafana/frontend-ops
|
||||
/pkg/services/anonymous/ @grafana/grafana-authnz-team
|
||||
/pkg/services/auth/ @grafana/grafana-authnz-team
|
||||
/pkg/services/authn/ @grafana/grafana-authnz-team
|
||||
/pkg/services/signingkeys/ @grafana/grafana-authnz-team
|
||||
/pkg/services/dashboards/accesscontrol.go @grafana/grafana-authnz-team
|
||||
/pkg/services/datasources/permissions/ @grafana/grafana-authnz-team
|
||||
/pkg/services/guardian/ @grafana/grafana-authnz-team
|
||||
/pkg/services/ldap/ @grafana/grafana-authnz-team
|
||||
/pkg/services/login/ @grafana/grafana-authnz-team
|
||||
/pkg/services/multildap/ @grafana/grafana-authnz-team
|
||||
/pkg/services/loginattempt/ @grafana/grafana-authnz-team
|
||||
/pkg/services/oauthserver/ @grafana/grafana-authnz-team
|
||||
/pkg/services/oauthtoken/ @grafana/grafana-authnz-team
|
||||
/pkg/services/serviceaccounts/ @grafana/grafana-authnz-team
|
||||
/pkg/services/teamguardian/ @grafana/grafana-authnz-team
|
||||
|
||||
# Support bundles
|
||||
/public/app/features/support-bundles/ @grafana/grafana-authnz-team
|
||||
/pkg/services/supportbundles/ @grafana/grafana-authnz-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/featuremgmt/ @grafana/grafana-operator-experience-squad
|
||||
# Grafana Partnerships Team
|
||||
/pkg/infra/httpclient/httpclientprovider/sigv4_middleware.go @grafana/grafana-partnerships-team
|
||||
/pkg/infra/httpclient/httpclientprovider/sigv4_middleware_test.go @grafana/grafana-partnerships-team
|
||||
|
||||
# Kind definitions
|
||||
/kinds/dashboard @grafana/dashboards-squad
|
||||
@@ -576,6 +551,8 @@ embed.go @grafana/grafana-as-code
|
||||
/pkg/cuectx/ @grafana/grafana-as-code
|
||||
/pkg/registry/ @grafana/grafana-as-code
|
||||
/pkg/codegen/ @grafana/grafana-as-code
|
||||
/pkg/kindsys/ @grafana/grafana-as-code
|
||||
/pkg/kindsys/kindcat_custom.cue @grafana/apps-platform-core
|
||||
/pkg/kinds/*/*_gen.go @grafana/grafana-as-code
|
||||
/pkg/registry/corekind/ @grafana/grafana-as-code
|
||||
/public/app/plugins/*gen.go @grafana/grafana-as-code
|
||||
@@ -588,26 +565,24 @@ embed.go @grafana/grafana-as-code
|
||||
/.github/bot.md @torkelo
|
||||
/.github/commands.json @torkelo
|
||||
/.github/dependabot.yml @grafana/frontend-ops
|
||||
/.github/issue-opened.json @grafana/grafana-community-support
|
||||
/.github/metrics-collector.json @torkelo
|
||||
/.github/pr-checks.json @marefr
|
||||
/.github/pr-commands.json @marefr
|
||||
/.github/renovate.json5 @grafana/frontend-ops
|
||||
/.github/teams.yml @armandgrillet
|
||||
/.github/workflows/alerting-swagger-gen.yml @grafana/alerting-backend-product
|
||||
/.github/workflows/auto-milestone.yml @grafana/grafana-delivery
|
||||
/.github/workflows/backport.yml @grafana/grafana-delivery
|
||||
/.github/workflows/bump-version.yml @grafana/grafana-delivery
|
||||
/.github/workflows/close-milestone.yml @grafana/grafana-delivery
|
||||
/.github/workflows/backport.yml @grafana/grafana-release-eng
|
||||
/.github/workflows/bump-version.yml @grafana/grafana-release-eng
|
||||
/.github/workflows/close-milestone.yml @grafana/grafana-release-eng
|
||||
/.github/workflows/cloud-data-sources-code-coverage.yml @grafana/partner-plugins @grafana/aws-plugins
|
||||
/.github/workflows/codeowners-validator.yml @tolzhabayev
|
||||
/.github/workflows/codeql-analysis.yml @DanCech
|
||||
/.github/workflows/commands.yml @torkelo
|
||||
/.github/workflows/detect-breaking-changes-* @grafana/plugins-platform-frontend
|
||||
/.github/workflows/doc-validator.yml @grafana/docs-tooling
|
||||
/.github/workflows/doc-validator.yml @grafana/docs-grafana
|
||||
/.github/workflows/enterprise-pr-check.yml @grafana/grafana-release-eng
|
||||
/.github/workflows/epic-add-to-platform-ux-parent-project.yml @meanmina
|
||||
/.github/workflows/github-release.yml @grafana/grafana-delivery
|
||||
/.github/workflows/github-release.yml @torkelo
|
||||
/.github/workflows/issue-labeled.yml @armandgrillet
|
||||
/.github/workflows/issue-opened.yml @grafana/grafana-community-support
|
||||
/.github/workflows/metrics-collector.yml @torkelo
|
||||
/.github/workflows/milestone.yml @marefr
|
||||
/.github/workflows/ox-code-coverage.yml @grafana/explore-squad
|
||||
@@ -617,42 +592,23 @@ embed.go @grafana/grafana-as-code
|
||||
/.github/workflows/pr-codeql-analysis-python.yml @DanCech
|
||||
/.github/workflows/pr-commands-closed.yml @tolzhabayev
|
||||
/.github/workflows/pr-commands.yml @marefr
|
||||
/.github/workflows/pr-patch-check.yml @grafana/grafana-delivery
|
||||
/.github/workflows/sync-mirror.yml @grafana/grafana-delivery
|
||||
/.github/workflows/publish-technical-documentation-next.yml @grafana/docs-tooling
|
||||
/.github/workflows/publish-technical-documentation-release.yml @grafana/docs-tooling
|
||||
/.github/workflows/remove-milestone.yml @grafana/grafana-delivery
|
||||
/.github/workflows/publish-technical-documentation-next.yml @grafana/docs-grafana
|
||||
/.github/workflows/publish-technical-documentation-release.yml @grafana/docs-grafana
|
||||
/.github/workflows/remove-milestone.yml @grafana/user-essentials
|
||||
/.github/workflows/sbom-report.yml @grafana/security-team
|
||||
/.github/workflows/scripts/json-file-to-job-output.js @grafana/plugins-platform-frontend
|
||||
/.github/workflows/scripts/pr-get-job-link.js @grafana/plugins-platform-frontend
|
||||
/.github/workflows/stale.yml @grafana/grafana-delivery
|
||||
/.github/workflows/update-changelog.yml @grafana/grafana-delivery
|
||||
/.github/workflows/update-make-docs.yml @grafana/docs-tooling
|
||||
/.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-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-delivery
|
||||
/.github/workflows/stale.yml @grafana/user-essentials
|
||||
/.github/workflows/update-changelog.yml @grafana/grafana-release-eng
|
||||
|
||||
|
||||
# Generated files not requiring owner approval
|
||||
/packages/grafana-data/src/types/featureToggles.gen.ts @grafanabot
|
||||
/docs/sources/setup-grafana/configure-grafana/feature-toggles/index.md @grafanabot
|
||||
/pkg/services/featuremgmt/toggles_gen.csv @grafanabot
|
||||
/pkg/services/featuremgmt/toggles_gen.go @grafanabot
|
||||
/public/emails/ @grafanabot
|
||||
|
||||
# Conf
|
||||
/conf/defaults.ini @torkelo
|
||||
/conf/sample.ini @torkelo
|
||||
/conf/ldap.toml @grafana/grafana-authnz-team
|
||||
/conf/ldap_multiple.toml @grafana/grafana-authnz-team
|
||||
/conf/provisioning/access-control/ @grafana/grafana-authnz-team
|
||||
/conf/provisioning/alerting/ @grafana/alerting-backend-product
|
||||
/conf/provisioning/alerting/ @grafana/alerting-squad-backend
|
||||
/conf/provisioning/dashboards/ @grafana/dashboards-squad
|
||||
/conf/provisioning/datasources/ @grafana/plugins-platform-backend
|
||||
/conf/provisioning/notifiers/ @bergquist
|
||||
|
||||
93
.github/ISSUE_TEMPLATE/0-bug-report.yaml
vendored
93
.github/ISSUE_TEMPLATE/0-bug-report.yaml
vendored
@@ -1,93 +0,0 @@
|
||||
name: New Bug Report
|
||||
description: File a bug report
|
||||
title: "Product Area: Short description of bug"
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Thanks for taking the time to fill out this bug report!
|
||||
|
||||
Please try to give your issue a good title. Try using the product-area where you are having an issue and a brief description of the problem. Like this:
|
||||
- `Dashboards: Template Variables break when I do X` or
|
||||
- `Alerting: message templating plus Slack channel breaks when I do X`
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
**HINT:** Have you tried [searching](https://github.com/grafana/grafana/issues) for similar issues? Duplicate issues are common.
|
||||
|
||||
**Are you reporting a security vulnerability?** [Submit it here instead](https://github.com/grafana/grafana/security/policy).
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
#
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: What happened?
|
||||
description: "**Hot Tip:** Record your screen and attach it here."
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: What did you expect to happen?
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Did this work before?
|
||||
description: "If this worked before, what Grafana version worked correctly?"
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: How do we reproduce it?
|
||||
placeholder: "Steps to reproduce..."
|
||||
value: |
|
||||
1.
|
||||
2.
|
||||
3.
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Is the bug inside a dashboard panel?
|
||||
description: |
|
||||
If the bug appears inside a [dashboard panel](https://grafana.com/docs/grafana/latest/panels-visualizations/#panels-and-visualizations), please use the ["Get help" feature](https://grafana.com/docs/grafana/latest/troubleshooting/send-panel-to-grafana-support/). Select **Copy to clipboard** and paste the data below.
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Environment (with versions)?
|
||||
description: |
|
||||
[How do I find my Grafana version info?](https://community.grafana.com/t/how-to-find-your-grafana-version-info-3-different-ways/86857)
|
||||
placeholder: "Grafana, OS, and Browser versions..."
|
||||
value: |
|
||||
Grafana:
|
||||
OS:
|
||||
Browser:
|
||||
validations:
|
||||
required: false
|
||||
|
||||
- type: dropdown
|
||||
attributes:
|
||||
label: Grafana platform?
|
||||
description: How are you running/deploying Grafana?
|
||||
options:
|
||||
- I use Grafana Cloud
|
||||
- Docker
|
||||
- Kubernetes
|
||||
- A package manager (APT, YUM, BREW, etc.)
|
||||
- A downloaded binary
|
||||
- Other
|
||||
- I don't know
|
||||
validations:
|
||||
required: false
|
||||
|
||||
- type: input
|
||||
attributes:
|
||||
label: Datasource(s)?
|
||||
description: "Is this issue specific to a datasource plugin? (Please list all that apply)"
|
||||
placeholder: "ex. Elasticsearch 5.0.0 or Infinity 1.4.1 ..."
|
||||
31
.github/ISSUE_TEMPLATE/1-bug_report.md
vendored
Normal file
31
.github/ISSUE_TEMPLATE/1-bug_report.md
vendored
Normal file
@@ -0,0 +1,31 @@
|
||||
---
|
||||
name: Bug report
|
||||
about: Report a bug you found when using Grafana
|
||||
labels: 'type: bug'
|
||||
---
|
||||
|
||||
<!--
|
||||
Please use this template to create your bug report. By providing as much info as possible you help us understand the issue, reproduce it and resolve it for you quicker. Therefore take a couple of extra minutes to make sure you have provided all info needed.
|
||||
|
||||
PROTIP: record your screen and attach it as a gif to showcase the issue.
|
||||
|
||||
- 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 happened**:
|
||||
|
||||
**What you expected to happen**:
|
||||
|
||||
**How to reproduce it (as minimally and precisely as possible)**:
|
||||
|
||||
**Anything else we need to know?**:
|
||||
|
||||
**Environment**:
|
||||
- Grafana version:
|
||||
- Data source type & version:
|
||||
- OS Grafana is installed on:
|
||||
- User OS & Browser:
|
||||
- Grafana plugins:
|
||||
- Others:
|
||||
5
.github/ISSUE_TEMPLATE/1-staff_issues.md
vendored
5
.github/ISSUE_TEMPLATE/1-staff_issues.md
vendored
@@ -1,5 +0,0 @@
|
||||
---
|
||||
name: Staff Issues
|
||||
about: Blank issue for Grafana staff members
|
||||
labels: 'internal'
|
||||
---
|
||||
17
.github/ISSUE_TEMPLATE/5-chore.md
vendored
17
.github/ISSUE_TEMPLATE/5-chore.md
vendored
@@ -1,17 +0,0 @@
|
||||
---
|
||||
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?**:
|
||||
65
.github/ISSUE_TEMPLATE/8-Saga_contribution.yaml
vendored
65
.github/ISSUE_TEMPLATE/8-Saga_contribution.yaml
vendored
@@ -1,65 +0,0 @@
|
||||
---
|
||||
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
|
||||
2
.github/ISSUE_TEMPLATE/config.yml
vendored
2
.github/ISSUE_TEMPLATE/config.yml
vendored
@@ -2,7 +2,7 @@ blank_issues_enabled: false
|
||||
contact_links:
|
||||
- name: Feature Request
|
||||
url: https://github.com/grafana/grafana/discussions/new
|
||||
about: Discuss ideas for new features or enhancements
|
||||
about: Discuss ideas for new features of changes
|
||||
- name: Questions & Help
|
||||
url: https://community.grafana.com
|
||||
about: Please ask and answer questions here.
|
||||
|
||||
6
.github/PULL_REQUEST_TEMPLATE.md
vendored
6
.github/PULL_REQUEST_TEMPLATE.md
vendored
@@ -42,9 +42,5 @@ Usage: "Fixes #<issue number>", or "Fixes (paste link of issue)"
|
||||
|
||||
Fixes #
|
||||
|
||||
**Special notes for your reviewer:**
|
||||
**Special notes for your reviewer**:
|
||||
|
||||
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/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.
|
||||
|
||||
2
.github/bot.md
vendored
2
.github/bot.md
vendored
@@ -23,7 +23,7 @@ Metrics are configured in [metrics-collector.json](https://github.com/grafana/gr
|
||||
## Backport PR
|
||||
|
||||
To automatically backport a PR to a release branch like v7.3.x add a label named `backport v7.3.x`. The label name should follow the pattern `backport <branch-name>`. Once merged grafanabot will automatically
|
||||
try to cherry-pick the PR merge commit into that branch and open a PR. You must then add the milestone to your backport PR.
|
||||
try to cherry-pick the PR merge commit into that branch and open a PR. It will sync the milestone with the source PR so make sure the source PR also is assigned the milestone for the patch release. If the PR is already merged you can still add this label and trigger the backport automation.
|
||||
|
||||
If there are merge conflicts the bot will write a comment on the source PR saying the cherry-pick failed. In this case you have to do the cherry pick and backport PR manually.
|
||||
|
||||
|
||||
174
.github/commands.json
vendored
174
.github/commands.json
vendored
@@ -11,7 +11,7 @@
|
||||
"type":"comment",
|
||||
"name":"duplicate",
|
||||
"allowUsers":[],
|
||||
"action":"close",
|
||||
"action":"updateLabels",
|
||||
"addLabel":"type/duplicate"
|
||||
},
|
||||
{
|
||||
@@ -51,6 +51,14 @@
|
||||
"addLabel":"not implemented",
|
||||
"comment":"This feature request has been open for a long time with few received upvotes or comments, so we are closing it. We're trying to limit open GitHub issues in order to better track planned work and features. \r\n\r\nThis doesn't mean that we'll never ever implement it or that we will never accept a PR for it. A closed issue can still attract upvotes and act as a ticket to track feature demand\/interest. \r\n\r\nThank You to you for taking the time to create this issue!"
|
||||
},
|
||||
{
|
||||
"type":"label",
|
||||
"name":"oss-user-essentials",
|
||||
"action":"addToProject",
|
||||
"addToProject":{
|
||||
"url":"https://github.com/orgs/grafana/projects/78"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type":"label",
|
||||
"name":"area/plugins-catalog",
|
||||
@@ -195,12 +203,28 @@
|
||||
"url":"https://github.com/orgs/grafana/projects/111"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type":"label",
|
||||
"name":"oss-user-essentials",
|
||||
"action":"removeFromProject",
|
||||
"removeFromProject":{
|
||||
"url":"https://github.com/orgs/grafana/projects/78"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type":"label",
|
||||
"name":"oss-user-essentials",
|
||||
"action":"removeFromProject",
|
||||
"removeFromProject":{
|
||||
"url":"https://github.com/grafana/grafana/projects/33"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "label",
|
||||
"name": "team/operator-experience",
|
||||
"name": "team/grafana-partners",
|
||||
"action": "addToProject",
|
||||
"addToProject": {
|
||||
"url": "https://github.com/orgs/grafana/projects/336"
|
||||
"url": "https://github.com/orgs/grafana/projects/87"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -298,149 +322,5 @@
|
||||
"addToProject": {
|
||||
"url": "https://github.com/orgs/grafana/projects/78"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "label",
|
||||
"name": "area/panel/candlestick",
|
||||
"action": "addToProject",
|
||||
"addToProject": {
|
||||
"url": "https://github.com/orgs/grafana/projects/56"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "label",
|
||||
"name": "area/panel/canvas",
|
||||
"action": "addToProject",
|
||||
"addToProject": {
|
||||
"url": "https://github.com/orgs/grafana/projects/56"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "label",
|
||||
"name": "area/panel/barchart",
|
||||
"action": "addToProject",
|
||||
"addToProject": {
|
||||
"url": "https://github.com/orgs/grafana/projects/56"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "label",
|
||||
"name": "area/panel/bargauge",
|
||||
"action": "addToProject",
|
||||
"addToProject": {
|
||||
"url": "https://github.com/orgs/grafana/projects/56"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "label",
|
||||
"name": "area/panel/gauge",
|
||||
"action": "addToProject",
|
||||
"addToProject": {
|
||||
"url": "https://github.com/orgs/grafana/projects/56"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "label",
|
||||
"name": "area/panel/geomap",
|
||||
"action": "addToProject",
|
||||
"addToProject": {
|
||||
"url": "https://github.com/orgs/grafana/projects/56"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "label",
|
||||
"name": "area/panel/graph",
|
||||
"action": "addToProject",
|
||||
"addToProject": {
|
||||
"url": "https://github.com/orgs/grafana/projects/56"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "label",
|
||||
"name": "area/panel/heatmap",
|
||||
"action": "addToProject",
|
||||
"addToProject": {
|
||||
"url": "https://github.com/orgs/grafana/projects/56"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "label",
|
||||
"name": "area/panel/histogram",
|
||||
"action": "addToProject",
|
||||
"addToProject": {
|
||||
"url": "https://github.com/orgs/grafana/projects/56"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "label",
|
||||
"name": "area/panel/icon",
|
||||
"action": "addToProject",
|
||||
"addToProject": {
|
||||
"url": "https://github.com/orgs/grafana/projects/56"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "label",
|
||||
"name": "area/panel/piechart",
|
||||
"action": "addToProject",
|
||||
"addToProject": {
|
||||
"url": "https://github.com/orgs/grafana/projects/56"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "label",
|
||||
"name": "area/panel/stat",
|
||||
"action": "addToProject",
|
||||
"addToProject": {
|
||||
"url": "https://github.com/orgs/grafana/projects/56"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "label",
|
||||
"name": "area/panel/state-timeline",
|
||||
"action": "addToProject",
|
||||
"addToProject": {
|
||||
"url": "https://github.com/orgs/grafana/projects/56"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "label",
|
||||
"name": "area/panel/status-history",
|
||||
"action": "addToProject",
|
||||
"addToProject": {
|
||||
"url": "https://github.com/orgs/grafana/projects/56"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "label",
|
||||
"name": "area/panel/timeseries",
|
||||
"action": "addToProject",
|
||||
"addToProject": {
|
||||
"url": "https://github.com/orgs/grafana/projects/56"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "label",
|
||||
"name": "area/panel/xychart",
|
||||
"action": "addToProject",
|
||||
"addToProject": {
|
||||
"url": "https://github.com/orgs/grafana/projects/56"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "label",
|
||||
"name": "area/panel/trend",
|
||||
"action": "addToProject",
|
||||
"addToProject": {
|
||||
"url": "https://github.com/orgs/grafana/projects/56"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "label",
|
||||
"name": "area/panel/table",
|
||||
"action": "addToProject",
|
||||
"addToProject": {
|
||||
"url": "https://github.com/orgs/grafana/projects/72"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
9
.github/issue-opened.json
vendored
9
.github/issue-opened.json
vendored
@@ -1,9 +0,0 @@
|
||||
[
|
||||
{
|
||||
"type": "author",
|
||||
"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/ISSUE_TRIAGE.md#3-categorizing-an-issue) doc also provides additional guidance on labeling. :rocket:\r\n\r\n Thank you! :heart:"
|
||||
}
|
||||
]
|
||||
12
.github/metrics-collector.json
vendored
12
.github/metrics-collector.json
vendored
@@ -2,23 +2,23 @@
|
||||
"queries": [
|
||||
{
|
||||
"name": "type_bug",
|
||||
"query": "label:\"type/bug\" is:issue is:open"
|
||||
"query": "label:\"type/bug\" is:open"
|
||||
},
|
||||
{
|
||||
"name": "type_docs",
|
||||
"query": "label:\"type/docs\" is:issue is:open"
|
||||
"query": "label:\"type/docs\" is:open"
|
||||
},
|
||||
{
|
||||
"name": "needs_investigation",
|
||||
"query": "label:\"needs investigation\" is:issue is:open"
|
||||
"query": "label:\"needs investigation\" is:open"
|
||||
},
|
||||
{
|
||||
"name": "needs_more_info",
|
||||
"query": "label:\"needs more info\" is:issue is:open"
|
||||
"query": "label:\"needs more info\" is:open"
|
||||
},
|
||||
{
|
||||
"name": "triage_needs_confirmation",
|
||||
"query": "label:\"triage/needs-confirmation\" is:issue is:open"
|
||||
"query": "label:\"triage/needs-confirmation\" is:open"
|
||||
},
|
||||
{
|
||||
"name": "unlabeled",
|
||||
@@ -26,7 +26,7 @@
|
||||
},
|
||||
{
|
||||
"name": "open_prs",
|
||||
"query": "is:open is:pull-request"
|
||||
"query": "is:open is:pr"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
2
.github/pr-checks.json
vendored
2
.github/pr-checks.json
vendored
@@ -46,4 +46,4 @@
|
||||
},
|
||||
"targetUrl": "https://github.com/grafana/grafana/blob/main/contribute/merge-pull-request.md#include-in-changelog-and-release-notes"
|
||||
}
|
||||
]
|
||||
]
|
||||
266
.github/pr-commands.json
vendored
266
.github/pr-commands.json
vendored
@@ -83,13 +83,13 @@
|
||||
},
|
||||
{
|
||||
"type": "changedfiles",
|
||||
"matches": [ "public/app/plugins/datasource/azuremonitor/**/*", "pkg/tsdb/azuremonitor/**/*"],
|
||||
"matches": [ "public/app/plugins/datasource/grafana-azure-monitor-datasource/**/*", "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/cloudmonitoring/**/*"],
|
||||
"action": "updateLabel",
|
||||
"addLabel": "datasource/GoogleCloudMonitoring"
|
||||
},
|
||||
@@ -187,268 +187,8 @@
|
||||
"type": "author",
|
||||
"name": "pr/external",
|
||||
"notMemberOf": { "org": "grafana" },
|
||||
"ignoreList": ["renovate[bot]","dependabot[bot]","grafana-delivery-bot[bot]","grafanabot"],
|
||||
"ignoreList": ["renovate[bot]","dependabot[bot]"],
|
||||
"action": "updateLabel",
|
||||
"addLabel": "pr/external"
|
||||
},
|
||||
{
|
||||
"type":"label",
|
||||
"name":"type/docs",
|
||||
"action":"addToProject",
|
||||
"addToProject":{
|
||||
"url":"https://github.com/orgs/grafana/projects/69"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "changedfiles",
|
||||
"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/**/*"],
|
||||
"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/**/*"],
|
||||
"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/**/*"],
|
||||
"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/**/*"],
|
||||
"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/**/*"],
|
||||
"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/**/*"],
|
||||
"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/**/*"],
|
||||
"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/**/*"],
|
||||
"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/**/*"],
|
||||
"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/**/*"],
|
||||
"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/**/*"],
|
||||
"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/**/*"],
|
||||
"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/**/*" ],
|
||||
"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/**/*"],
|
||||
"action": "updateLabel",
|
||||
"addLabel": "area/panel/gauge"
|
||||
},
|
||||
{
|
||||
"type": "label",
|
||||
"name": "area/panel/gauge",
|
||||
"action": "addToProject",
|
||||
"addToProject": {
|
||||
"url": "https://github.com/orgs/grafana/projects/56"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "changedfiles",
|
||||
"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/**/*"],
|
||||
"action": "updateLabel",
|
||||
"addLabel": "area/panel/piechart"
|
||||
},
|
||||
{
|
||||
"type": "label",
|
||||
"name": "area/panel/piechart",
|
||||
"action": "addToProject",
|
||||
"addToProject": {
|
||||
"url": "https://github.com/orgs/grafana/projects/56"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
27
.github/renovate.json5
vendored
27
.github/renovate.json5
vendored
@@ -10,12 +10,29 @@
|
||||
"history", // we should bump this together with react-router-dom
|
||||
"@mdx-js/react", // storybook peer-depends on its 1.x version, we should upgrade this when we upgrade storybook
|
||||
"monaco-editor", // due to us exposing this via @grafana/ui/CodeEditor's props bumping can break plugins
|
||||
"node-fetch", // we should bump this once we move to esm modules
|
||||
"react-hook-form", // due to us exposing these hooks via @grafana/ui form components bumping can break plugins
|
||||
"react-redux", // react-beautiful-dnd depends on react-redux 7.x, we need to update that one first
|
||||
"react-router-dom", // we should bump this together with history
|
||||
"systemjs",
|
||||
"copy-webpack-plugin", // try to upgrade with newer yarn release. Not working with 3.1.1
|
||||
"ts-loader", // we should remove ts-loader and use babel-loader instead
|
||||
"ora", // we should bump this once we move to esm modules
|
||||
|
||||
// Sentry deprecated in favor of Grafana Faro for frontend logging.
|
||||
// Major effort required to upgrade to latest Sentry, not worthwhile
|
||||
"@sentry/browser",
|
||||
"@sentry/types",
|
||||
"@sentry/utils",
|
||||
|
||||
// dep updates blocked by React 18
|
||||
"@testing-library/react",
|
||||
"@types/react",
|
||||
"@types/react-dom",
|
||||
"@types/react-test-renderer",
|
||||
"react",
|
||||
"react-dom",
|
||||
"react-test-renderer"
|
||||
],
|
||||
"includePaths": ["package.json", "packages/**"],
|
||||
"ignorePaths": ["packages/grafana-toolkit/package.json", "emails/**", "plugins-bundled/**", "**/mocks/**"],
|
||||
@@ -67,15 +84,7 @@
|
||||
"matchPackagePrefixes": [
|
||||
"@visx/"
|
||||
]
|
||||
},
|
||||
{
|
||||
"groupName": "uLibraries",
|
||||
"matchPackageNames": [
|
||||
"@leeoniya/ufuzzy",
|
||||
"uplot"
|
||||
],
|
||||
"reviewers": ["leeoniya"],
|
||||
},
|
||||
}
|
||||
],
|
||||
"pin": {
|
||||
"enabled": false
|
||||
|
||||
4
.github/teams.yml
vendored
4
.github/teams.yml
vendored
@@ -7,5 +7,5 @@ test:
|
||||
|
||||
# Alerting team
|
||||
area/alerting:
|
||||
channel-label: C028MCV4R7C
|
||||
exclude-github-team: alerting-squad
|
||||
github-board: 52
|
||||
channel-label: C02B9MXQE0J
|
||||
|
||||
37
.github/workflows/alerting-swagger-gen.yml
vendored
37
.github/workflows/alerting-swagger-gen.yml
vendored
@@ -1,37 +0,0 @@
|
||||
on:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: '0 0 * * 1'
|
||||
|
||||
jobs:
|
||||
gen-swagger:
|
||||
name: Alerting Swagger spec generation cron job
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 2
|
||||
- name: Set go version
|
||||
uses: actions/setup-go@v4
|
||||
with:
|
||||
go-version: '1.21.5'
|
||||
- name: Build swagger
|
||||
run: |
|
||||
make -C pkg/services/ngalert/api/tooling post.json api.json
|
||||
- name: Open Pull Request
|
||||
uses: peter-evans/create-pull-request@v3
|
||||
with:
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
commit-message: "chore: update alerting swagger spec"
|
||||
title: "Alerting: Update Swagger spec"
|
||||
body: |
|
||||
This is an automated pull request to update the alerting swagger spec.
|
||||
Please review and merge.
|
||||
branch: update-alerting-swagger-spec
|
||||
delete-branch: true
|
||||
labels: 'area/alerting,type/docs,no-backport,no-changelog'
|
||||
team-reviewers: 'grafana/alerting-backend-product'
|
||||
draft: false
|
||||
|
||||
24
.github/workflows/auto-milestone.yml
vendored
24
.github/workflows/auto-milestone.yml
vendored
@@ -1,24 +0,0 @@
|
||||
name: Auto-milestone
|
||||
on:
|
||||
pull_request:
|
||||
types:
|
||||
- opened
|
||||
- reopened
|
||||
- closed
|
||||
|
||||
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 auto-milestone
|
||||
uses: grafana/grafana-github-actions-go/auto-milestone@main
|
||||
with:
|
||||
pr: ${{ github.event.pull_request.number }}
|
||||
token: ${{ steps.generate_token.outputs.token }}
|
||||
10
.github/workflows/backport.yml
vendored
10
.github/workflows/backport.yml
vendored
@@ -17,16 +17,10 @@ jobs:
|
||||
ref: main
|
||||
- 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 }}
|
||||
- name: Run backport
|
||||
uses: ./actions/backport
|
||||
with:
|
||||
metricsWriteAPIKey: ${{secrets.GRAFANA_MISC_STATS_API_KEY}}
|
||||
token: ${{ steps.generate_token.outputs.token }}
|
||||
labelsToAdd: "backport"
|
||||
token: ${{secrets.GH_BOT_ACCESS_TOKEN}}
|
||||
labelsToAdd: "backport,no-changelog"
|
||||
title: "[{{base}}] {{originalTitle}}"
|
||||
|
||||
41
.github/workflows/bump-version.yml
vendored
41
.github/workflows/bump-version.yml
vendored
@@ -3,40 +3,40 @@ on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
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'
|
||||
description: 'Needs to match, exactly, the name of a milestone. The version to be released please respect: major.minor.patch or major.minor.patch-beta<number> format. example: 7.4.3 or 7.4.3-beta1'
|
||||
required: true
|
||||
env:
|
||||
YARN_ENABLE_IMMUTABLE_INSTALLS: false
|
||||
YARN_ENABLE_IMMUTABLE_INSTALLS: false
|
||||
jobs:
|
||||
main:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
# This is a basic workflow to help you get started with Actions
|
||||
# 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:
|
||||
text: ${{ github.event.inputs.version }}
|
||||
regex: '^(\d+.\d+).\d+(?:-(?:(preview\d?)|(pre)))?$'
|
||||
regex: '^(\d+.\d+).\d+(?:-beta\d+)?$'
|
||||
- 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)))?$'
|
||||
regex: '^(\d+.\d+).\d+(?:-beta\d+)?$'
|
||||
- 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"
|
||||
major.minor.patch or major.minor.patch-beta.number format. \
|
||||
example: 7.4.3 or 7.4.3-beta1"
|
||||
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"
|
||||
major.minor.patch or major.minor.patch-beta<number> format. \
|
||||
example: 7.4.3 or 7.4.3-beta1"
|
||||
exit 1
|
||||
|
||||
- uses: actions/checkout@v3
|
||||
@@ -49,30 +49,27 @@ jobs:
|
||||
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: Check input version is aligned with branch(main)
|
||||
if: ${{ github.event.inputs.version != '' && steps.intermedia.outputs.branch_exist == '0' && !contains(steps.intermedia.outputs.short_ref, 'main') }}
|
||||
run: |
|
||||
echo "When you want to deliver a new new minor version, you might want to create a new branch first \
|
||||
with naming convention v[major].[minor].x, and just run the workflow on that branch. \
|
||||
Run the workflow on main only when needed"
|
||||
exit 1
|
||||
|
||||
- name: Checkout Actions
|
||||
uses: actions/checkout@v3
|
||||
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@v3.5.1
|
||||
with:
|
||||
node-version: '16'
|
||||
- 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 }}
|
||||
- name: Run bump version (manually invoked)
|
||||
- name: Run bump version (manually invoked)
|
||||
uses: ./actions/bump-version
|
||||
with:
|
||||
token: ${{ steps.generate_token.outputs.token }}
|
||||
token: ${{ secrets.GH_BOT_ACCESS_TOKEN }}
|
||||
metricsWriteAPIKey: ${{ secrets.GRAFANA_MISC_STATS_API_KEY }}
|
||||
precommit_make_target: gen-cue
|
||||
|
||||
14
.github/workflows/close-milestone.yml
vendored
14
.github/workflows/close-milestone.yml
vendored
@@ -11,7 +11,9 @@ on:
|
||||
description: Needs to match, exactly, the name of a milestone
|
||||
required: true
|
||||
type: string
|
||||
|
||||
secrets:
|
||||
token:
|
||||
required: true
|
||||
jobs:
|
||||
main:
|
||||
runs-on: ubuntu-latest
|
||||
@@ -24,20 +26,14 @@ jobs:
|
||||
ref: main
|
||||
- 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 }}
|
||||
- name: Close milestone (manually invoked)
|
||||
if: ${{ github.event.inputs.version != '' }}
|
||||
uses: ./actions/close-milestone
|
||||
with:
|
||||
token: ${{ steps.generate_token.outputs.token }}
|
||||
token: ${{ secrets.GH_BOT_ACCESS_TOKEN }}
|
||||
- name: Close milestone (workflow invoked)
|
||||
if: ${{ inputs.version_call != '' }}
|
||||
uses: ./actions/close-milestone
|
||||
with:
|
||||
version_call: ${{ inputs.version_call }}
|
||||
token: ${{ steps.generate_token.outputs.token }}
|
||||
token: ${{ secrets.token }}
|
||||
|
||||
20
.github/workflows/cloud-data-sources-code-coverage.yml
vendored
Normal file
20
.github/workflows/cloud-data-sources-code-coverage.yml
vendored
Normal file
@@ -0,0 +1,20 @@
|
||||
name: Cloud data sources test code coverage
|
||||
on:
|
||||
pull_request:
|
||||
paths:
|
||||
- 'pkg/tsdb/azuremonitor/**'
|
||||
- 'pkg/tsdb/cloudwatch/**'
|
||||
- 'pkg/tsdb/cloudmonitoring/**'
|
||||
- 'public/app/plugins/datasource/grafana-azure-monitor-datasource/**'
|
||||
- 'public/app/plugins/datasource/cloudwatch/**'
|
||||
- 'public/app/plugins/datasource/cloud-monitoring/**'
|
||||
branches-ignore:
|
||||
- dependabot/**
|
||||
- backport-*
|
||||
|
||||
jobs:
|
||||
workflow-call:
|
||||
uses: grafana/code-coverage/.github/workflows/code-coverage.yml@v0.1.18
|
||||
with:
|
||||
frontend-path-regexp: public\/app\/plugins\/datasource\/(grafana-azure-monitor-datasource|cloud-monitoring|cloudwatch)
|
||||
backend-path-regexp: pkg\/tsdb\/(azuremonitor|cloudmonitoring|cloudwatch)
|
||||
4
.github/workflows/codeql-analysis.yml
vendored
4
.github/workflows/codeql-analysis.yml
vendored
@@ -42,9 +42,9 @@ jobs:
|
||||
|
||||
- if: matrix.language == 'go'
|
||||
name: Set go version
|
||||
uses: actions/setup-go@v4
|
||||
uses: actions/setup-go@v3
|
||||
with:
|
||||
go-version: '1.21.5'
|
||||
go-version: '1.19.2'
|
||||
|
||||
# Initializes the CodeQL tools for scanning.
|
||||
- name: Initialize CodeQL
|
||||
|
||||
2
.github/workflows/commands.yml
vendored
2
.github/workflows/commands.yml
vendored
@@ -22,5 +22,5 @@ jobs:
|
||||
uses: ./actions/commands
|
||||
with:
|
||||
metricsWriteAPIKey: ${{secrets.GRAFANA_MISC_STATS_API_KEY}}
|
||||
token: ${{secrets.ISSUE_COMMANDS_TOKEN}}
|
||||
token: ${{secrets.GH_BOT_ACCESS_TOKEN}}
|
||||
configPath: commands
|
||||
|
||||
@@ -1,28 +0,0 @@
|
||||
# Owned by grafana-delivery-squad
|
||||
# Intended to be dropped into the base repo (Ex: grafana/grafana) for use in the security mirror.
|
||||
name: Create security patch
|
||||
run-name: create-security-patch
|
||||
on:
|
||||
pull_request:
|
||||
types:
|
||||
- opened
|
||||
- reopened
|
||||
- synchronize
|
||||
branches:
|
||||
- "main"
|
||||
- "v*.*.*"
|
||||
|
||||
# This is run before the pull request has been merged, so we'll run against the src branch
|
||||
jobs:
|
||||
trigger_downstream_create_security_patch:
|
||||
concurrency: create-patch-${{ github.ref_name }}
|
||||
uses: grafana/security-patch-actions/.github/workflows/create-patch.yml@main
|
||||
if: github.repository == 'grafana/grafana-security-mirror'
|
||||
with:
|
||||
repo: "${{ github.repository }}"
|
||||
src_ref: "${{ github.head_ref }}" # this is the source branch name, Ex: "feature/newthing"
|
||||
patch_ref: "${{ github.base_ref }}" # this is the target branch name, Ex: "main"
|
||||
patch_repo: "grafana/grafana-security-patches"
|
||||
patch_prefix: "${{ github.event.pull_request.number }}"
|
||||
secrets: inherit
|
||||
|
||||
58
.github/workflows/dashboards-issue-add-label.yml
vendored
58
.github/workflows/dashboards-issue-add-label.yml
vendored
@@ -1,58 +0,0 @@
|
||||
name: When an issue changes and it's part of the dashboards project, add the dashboards squad label
|
||||
on:
|
||||
issues:
|
||||
types: [opened, closed, edited, reopened, assigned, unassigned, labeled, unlabeled]
|
||||
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.ISSUE_COMMANDS_TOKEN }}
|
||||
ORGANIZATION: ${{ github.repository_owner }}
|
||||
REPO: ${{ github.event.repository.name }}
|
||||
TARGET_PROJECT: 202
|
||||
LABEL_IDs: "LA_kwDOAOaWjc8AAAABT38U-A"
|
||||
|
||||
concurrency:
|
||||
group: issue-label-when-in-project-${{ github.event.number }}
|
||||
jobs:
|
||||
main:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: log in
|
||||
run: gh api user -q .login
|
||||
- name: Check if issue is in target project
|
||||
run: |
|
||||
gh api graphql -f query='
|
||||
query($org: String!, $repo: String!) {
|
||||
repository(name: $repo, owner: $org) {
|
||||
issue (number: ${{ github.event.issue.number }}) {
|
||||
id
|
||||
projectItems(first:20) {
|
||||
nodes {
|
||||
project {
|
||||
number,
|
||||
},
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}' -f org=$ORGANIZATION -f repo=$REPO > projects_data.json
|
||||
|
||||
echo 'IN_TARGET_PROJ='$(jq '.data.repository.issue.projectItems.nodes[] | select(.project.number==${{ env.TARGET_PROJECT }}) | .project != null' projects_data.json) >> $GITHUB_ENV
|
||||
echo 'ITEM_ID='$(jq '.data.repository.issue.id' projects_data.json) >> $GITHUB_ENV
|
||||
- name: Set up label array
|
||||
if: env.IN_TARGET_PROJ
|
||||
run: |
|
||||
IFS=',' read -ra LABEL_IDs <<< "${{ env.LABEL_IDs }}"
|
||||
for item in "${LABEL_IDs[@]}"; do
|
||||
echo "Item: $item"
|
||||
done
|
||||
- name: Add label to issue
|
||||
if: env.IN_TARGET_PROJ
|
||||
run: |
|
||||
gh api graphql -f query='
|
||||
mutation ($labelableId: ID!, $labelIds: [ID!]!) {
|
||||
addLabelsToLabelable(
|
||||
input: {labelableId: $labelableId, labelIds: $labelIds}
|
||||
) {
|
||||
clientMutationId
|
||||
}
|
||||
}' -f labelableId=$ITEM_ID -f labelIds=${{ env.LABEL_IDs }}
|
||||
@@ -31,7 +31,7 @@ jobs:
|
||||
run: echo "dir=$(yarn config get cacheFolder)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Restore yarn cache
|
||||
uses: actions/cache@v3.3.1
|
||||
uses: actions/cache@v3.0.11
|
||||
id: yarn-cache
|
||||
with:
|
||||
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
|
||||
@@ -79,7 +79,7 @@ jobs:
|
||||
run: echo "dir=$(yarn config get cacheFolder)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Restore yarn cache
|
||||
uses: actions/cache@v3.3.1
|
||||
uses: actions/cache@v3.0.11
|
||||
id: yarn-cache
|
||||
with:
|
||||
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
|
||||
|
||||
@@ -117,7 +117,7 @@ jobs:
|
||||
- name: Post to Slack
|
||||
id: slack
|
||||
if: steps.levitate-run.outputs.exit_code == 1 && steps.does-label-exist.outputs.result == 0 && steps.levitate-run.outputs.shouldSkip != 'true'
|
||||
uses: slackapi/slack-github-action@v1.24.0
|
||||
uses: slackapi/slack-github-action@v1.23.0
|
||||
with:
|
||||
payload: |
|
||||
{
|
||||
|
||||
19
.github/workflows/doc-validator.yml
vendored
19
.github/workflows/doc-validator.yml
vendored
@@ -7,23 +7,10 @@ jobs:
|
||||
doc-validator:
|
||||
runs-on: "ubuntu-latest"
|
||||
container:
|
||||
image: "grafana/doc-validator:v4.0.0"
|
||||
image: "grafana/doc-validator:v1.9.0"
|
||||
steps:
|
||||
- name: "Checkout code"
|
||||
uses: "actions/checkout@v3"
|
||||
- name: "Run doc-validator tool"
|
||||
# Only run doc-validator on specific directories.
|
||||
run: >
|
||||
doc-validator
|
||||
'--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 }}"
|
||||
# Ensure that the CI always passes until all errors are resolved.
|
||||
run: "doc-validator --skip-image-validation ./docs/sources /docs/grafana/latest || true"
|
||||
|
||||
26
.github/workflows/enterprise-pr-check.yml
vendored
Normal file
26
.github/workflows/enterprise-pr-check.yml
vendored
Normal file
@@ -0,0 +1,26 @@
|
||||
name: Enterprise PR check
|
||||
on:
|
||||
pull_request:
|
||||
branches:
|
||||
- main
|
||||
- 'v[0-9]+.[0-9]+.x'
|
||||
jobs:
|
||||
dispatch:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout Actions
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: "grafana/grafana-github-actions"
|
||||
path: ./actions
|
||||
ref: main
|
||||
- name: Install Actions
|
||||
run: npm install --production --prefix ./actions
|
||||
- name: Repository Dispatch
|
||||
uses: ./actions/repository-dispatch
|
||||
with:
|
||||
token: ${{ secrets.GH_BOT_ACCESS_TOKEN }}
|
||||
repository: grafana/grafana-enterprise
|
||||
event_type: oss-pull-request
|
||||
client_payload:
|
||||
'{"source_sha": "${{ github.event.pull_request.head.sha }}", "source_branch": "${{ github.head_ref }}", "target_branch": "${{ github.base_ref }}", "pr_number": "${{ github.event.number }}"}'
|
||||
@@ -1,51 +0,0 @@
|
||||
name: 'Ephemeral instances: PR comment'
|
||||
on:
|
||||
issue_comment:
|
||||
types: [created]
|
||||
jobs:
|
||||
handle-pull-request-event:
|
||||
if: 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
|
||||
with:
|
||||
app_id: ${{ secrets.EI_APP_ID }}
|
||||
private_key: ${{ secrets.EI_APP_PRIVATE_KEY }}
|
||||
|
||||
- name: Checkout ephemeral instances repository
|
||||
uses: actions/checkout@v3
|
||||
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="$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
|
||||
@@ -1,47 +0,0 @@
|
||||
name: 'Ephemeral instances: PR opened/closed'
|
||||
on:
|
||||
pull_request:
|
||||
types: [opened, reopened, closed]
|
||||
jobs:
|
||||
handle-pull-request-event:
|
||||
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@v3
|
||||
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
|
||||
@@ -19,7 +19,6 @@ concurrency:
|
||||
group: issue-add-to-parent-project-${{ github.event.number }}
|
||||
jobs:
|
||||
main:
|
||||
if: contains(github.event.issue.labels.*.name, 'type/epic')
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Check if issue is in child or parent projects
|
||||
|
||||
26
.github/workflows/github-release.yml
vendored
26
.github/workflows/github-release.yml
vendored
@@ -3,24 +3,22 @@ on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
version:
|
||||
required: true
|
||||
required: true
|
||||
description: Needs to match, exactly, the name of a milestone (NO v prefix)
|
||||
latest:
|
||||
required: false
|
||||
description: Mark this release as latest (`1`) or not (`0`, default)
|
||||
jobs:
|
||||
main:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: "Generate token"
|
||||
id: generate_token
|
||||
uses: tibdex/github-app-token@b62528385c34dbc9f38e5f4225ac829252d1ea92
|
||||
- name: Checkout Actions
|
||||
uses: actions/checkout@v3
|
||||
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
|
||||
repository: "grafana/grafana-github-actions"
|
||||
path: ./actions
|
||||
ref: main
|
||||
- name: Install Actions
|
||||
run: npm install --production --prefix ./actions
|
||||
- name: Run github release action
|
||||
uses: ./actions/github-release
|
||||
with:
|
||||
token: ${{ steps.generate_token.outputs.token }}
|
||||
version: ${{ inputs.version }}
|
||||
metrics_api_key: ${{ secrets.GRAFANA_MISC_STATS_API_KEY }}
|
||||
token: ${{secrets.GH_BOT_ACCESS_TOKEN}}
|
||||
metricsWriteAPIKey: ${{secrets.GRAFANA_MISC_STATS_API_KEY}}
|
||||
|
||||
42
.github/workflows/issue-labeled.yml
vendored
42
.github/workflows/issue-labeled.yml
vendored
@@ -1,4 +1,4 @@
|
||||
name: Notify Slack channel based on new issue label
|
||||
name: Notify Slack channel based on issue label
|
||||
|
||||
on:
|
||||
issues:
|
||||
@@ -14,28 +14,37 @@ jobs:
|
||||
- name: "Determine which team to notify"
|
||||
run: |
|
||||
# Default to null values.
|
||||
BOARD="null"
|
||||
CHANNEL="null"
|
||||
TEAM="null"
|
||||
|
||||
echo "${{ github.event.label.name }} label added"
|
||||
export CURRENT_LABEL="${{ github.event.label.name }}" # Enable the use of the label in yq evaluations
|
||||
# yq is installed by default in ubuntu-latest
|
||||
if [[ $(yq e 'keys | .[] | select(. == env(CURRENT_LABEL))' teams.yml ) ]]; then
|
||||
# Check if we have a board set to use.
|
||||
if [[ $(yq '.[env(CURRENT_LABEL)] | has("github-board")' teams.yml ) == true ]]; then
|
||||
BOARD=$(yq '.[env(CURRENT_LABEL)].github-board' teams.yml)
|
||||
echo "Ready to add issue to Grafana board ${BOARD}"
|
||||
fi
|
||||
# Check if we have a channel set to notify on comments.
|
||||
if [[ $(yq '.[env(CURRENT_LABEL)] | has("channel-label")' teams.yml ) == true ]]; then
|
||||
CHANNEL=$(yq '.[env(CURRENT_LABEL)].channel-label' teams.yml)
|
||||
echo "Ready to send issue to channel ID ${CHANNEL}"
|
||||
fi
|
||||
|
||||
if [[ $(yq '.[env(CURRENT_LABEL)] | has("exclude-github-team")' teams.yml ) == true ]]; then
|
||||
TEAM=$(yq '.[env(CURRENT_LABEL)].exclude-github-team' teams.yml)
|
||||
echo "Will not send issue to channel if issue author is part of the team ${TEAM}"
|
||||
fi
|
||||
fi
|
||||
|
||||
# set environment for next steps
|
||||
# set environment for next step
|
||||
echo "BOARD=${BOARD}" >> $GITHUB_ENV
|
||||
echo "CHANNEL=${CHANNEL}" >> $GITHUB_ENV
|
||||
echo "TEAM=${TEAM}" >> $GITHUB_ENV
|
||||
|
||||
- name: "Add to GitHub board"
|
||||
if: ${{ env.BOARD != 'null' }}
|
||||
uses: leonsteinhaeuser/project-beta-automations@v1.3.0
|
||||
with:
|
||||
project_id: ${{ env.BOARD }}
|
||||
organization: grafana
|
||||
resource_node_id: ${{ github.event.issue.node_id }}
|
||||
gh_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: "Prepare payload"
|
||||
uses: frabert/replace-string-action@v2.0
|
||||
@@ -47,24 +56,15 @@ jobs:
|
||||
replace-with: "'"
|
||||
flags: 'g'
|
||||
|
||||
- name: "Check that issue author is not part of the team"
|
||||
if: ${{ env.TEAM != 'null' }}
|
||||
uses: tspascoal/get-user-teams-membership@v2
|
||||
id: checkUserMember
|
||||
with:
|
||||
username: ${{ github.event.issue.user.login }}
|
||||
team: "${{ env.TEAM }}"
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: "Send Slack notification"
|
||||
if: ${{ (env.CHANNEL != 'null') && ((steps.checkUserMember.outputs.isTeamMember == 'false') || (env.TEAM != 'null')) }}
|
||||
uses: slackapi/slack-github-action@v1.24.0
|
||||
if: ${{ env.CHANNEL != 'null' }}
|
||||
uses: slackapi/slack-github-action@v1.23.0
|
||||
with:
|
||||
payload: >
|
||||
{
|
||||
"icon_emoji": ":grafana:",
|
||||
"username": "Grafana issue labeled",
|
||||
"text": "Issue \"${{ steps.preparePayload.outputs.replaced }}\" labeled \"${{ github.event.label.name }}\": ${{ github.event.issue.html_url }}, please triage.",
|
||||
"text": "Issue \"${{ steps.preparePayload.outputs.replaced }}\" labeled \"${{ github.event.label.name }}\": ${{ github.event.issue.html_url }}",
|
||||
"channel": "${{ env.CHANNEL }}"
|
||||
}
|
||||
env:
|
||||
|
||||
28
.github/workflows/issue-opened.yml
vendored
28
.github/workflows/issue-opened.yml
vendored
@@ -1,28 +0,0 @@
|
||||
name: Run commands when issues are opened
|
||||
on:
|
||||
issues:
|
||||
types: [opened]
|
||||
concurrency:
|
||||
group: issue-opened-${{ github.event.issue.number }}
|
||||
jobs:
|
||||
main:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout Actions
|
||||
uses: actions/checkout@v3
|
||||
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: Run Commands
|
||||
uses: ./actions/commands
|
||||
with:
|
||||
metricsWriteAPIKey: ${{secrets.GRAFANA_MISC_STATS_API_KEY}}
|
||||
token: ${{secrets.ISSUE_COMMANDS_TOKEN}}
|
||||
configPath: "issue-opened"
|
||||
10
.github/workflows/milestone.yml
vendored
10
.github/workflows/milestone.yml
vendored
@@ -3,17 +3,19 @@ on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
version_input:
|
||||
description: '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'
|
||||
description: 'The version to be released please respect: major.minor.patch or major.minor.patch-beta<number> format. example: 7.4.3 or 7.4.3-beta1'
|
||||
required: true
|
||||
jobs:
|
||||
call-remove-milestone:
|
||||
uses: grafana/grafana/.github/workflows/remove-milestone.yml@main
|
||||
with:
|
||||
version_call: ${{ github.event.inputs.version_input }}
|
||||
secrets: inherit
|
||||
secrets:
|
||||
token: ${{ secrets.GH_BOT_ACCESS_TOKEN }}
|
||||
call-close-milestone:
|
||||
uses: grafana/grafana/.github/workflows/close-milestone.yml@main
|
||||
with:
|
||||
version_call: ${{ github.event.inputs.version_input }}
|
||||
secrets: inherit
|
||||
needs: call-remove-milestone
|
||||
secrets:
|
||||
token: ${{ secrets.GH_BOT_ACCESS_TOKEN }}
|
||||
needs: call-remove-milestone
|
||||
2
.github/workflows/ox-code-coverage.yml
vendored
2
.github/workflows/ox-code-coverage.yml
vendored
@@ -15,7 +15,7 @@ on:
|
||||
|
||||
jobs:
|
||||
workflow-call:
|
||||
uses: grafana/code-coverage/.github/workflows/code-coverage.yml@v0.1.19
|
||||
uses: grafana/code-coverage/.github/workflows/code-coverage.yml@v0.1.18
|
||||
with:
|
||||
frontend-path-regexp: public\/app\/features\/(explore|correlations)|public\/app\/plugins\/datasource\/(loki|elasticsearch)
|
||||
backend-path-regexp: pkg\/services\/(queryhistory)|pkg\/tsdb\/(loki|elasticsearch)
|
||||
|
||||
4
.github/workflows/pr-codeql-analysis-go.yml
vendored
4
.github/workflows/pr-codeql-analysis-go.yml
vendored
@@ -21,9 +21,9 @@ jobs:
|
||||
fetch-depth: 2
|
||||
|
||||
- name: Set go version
|
||||
uses: actions/setup-go@v4
|
||||
uses: actions/setup-go@v3
|
||||
with:
|
||||
go-version: '1.21.5'
|
||||
go-version: '1.19.2'
|
||||
|
||||
# Initializes the CodeQL tools for scanning.
|
||||
- name: Initialize CodeQL
|
||||
|
||||
9
.github/workflows/pr-commands.yml
vendored
9
.github/workflows/pr-commands.yml
vendored
@@ -2,7 +2,6 @@ name: PR automation
|
||||
on:
|
||||
pull_request_target:
|
||||
types:
|
||||
- labeled
|
||||
- opened
|
||||
- synchronize
|
||||
concurrency:
|
||||
@@ -19,15 +18,9 @@ jobs:
|
||||
ref: main
|
||||
- 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_PR_AUTOMATION_APP_ID }}
|
||||
private_key: ${{ secrets.GRAFANA_PR_AUTOMATION_APP_PEM }}
|
||||
- name: Run Commands
|
||||
uses: ./actions/commands
|
||||
with:
|
||||
metricsWriteAPIKey: ${{secrets.GRAFANA_MISC_STATS_API_KEY}}
|
||||
token: ${{ steps.generate_token.outputs.token }}
|
||||
token: ${{secrets.GH_BOT_ACCESS_TOKEN}}
|
||||
configPath: pr-commands
|
||||
|
||||
26
.github/workflows/pr-patch-check.yml
vendored
26
.github/workflows/pr-patch-check.yml
vendored
@@ -1,26 +0,0 @@
|
||||
# Owned by grafana-delivery-squad
|
||||
# Intended to be dropped into the base repo Ex: grafana/grafana
|
||||
name: Check for patch conflicts
|
||||
run-name: check-patch-conflicts-${{ github.base_ref }}-${{ github.head_ref }}
|
||||
on:
|
||||
pull_request:
|
||||
types:
|
||||
- opened
|
||||
- reopened
|
||||
- synchronize
|
||||
branches:
|
||||
- "main"
|
||||
- "v*.*.*"
|
||||
- "release-*"
|
||||
|
||||
# Since this is run on a pull request, we want to apply the patches intended for the
|
||||
# target branch onto the source branch, to verify compatibility before merging.
|
||||
jobs:
|
||||
trigger_downstream_patch_check:
|
||||
uses: grafana/security-patch-actions/.github/workflows/test-patches.yml@main
|
||||
with:
|
||||
src_repo: "${{ github.repository }}"
|
||||
src_ref: "${{ github.head_ref }}" # this is the source branch name, Ex: "feature/newthing"
|
||||
patch_repo: "${{ github.repository }}-security-patches"
|
||||
patch_ref: "${{ github.base_ref }}" # this is the target branch name, Ex: "main"
|
||||
secrets: inherit
|
||||
48
.github/workflows/publish-kinds-next.yml
vendored
48
.github/workflows/publish-kinds-next.yml
vendored
@@ -1,48 +0,0 @@
|
||||
name: "publish-kinds-next"
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- "main"
|
||||
paths:
|
||||
- '**/*.cue'
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
main:
|
||||
if: github.repository == 'grafana/grafana'
|
||||
runs-on: "ubuntu-latest"
|
||||
steps:
|
||||
- name: "Checkout Grafana repo"
|
||||
uses: "actions/checkout@v3"
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: "Setup Go"
|
||||
uses: "actions/setup-go@v4"
|
||||
with:
|
||||
go-version: '1.21.5'
|
||||
|
||||
- name: "Verify kinds"
|
||||
run: go run .github/workflows/scripts/kinds/verify-kinds.go
|
||||
|
||||
- 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: "Clone website-sync Action"
|
||||
run: "git clone --single-branch --no-tags --depth 1 -b master https://grafana-delivery-bot:${{ steps.generate_token.outputs.token }}@github.com/grafana/website-sync ./.github/actions/website-sync"
|
||||
|
||||
- name: "Publish to kind registry (next)"
|
||||
uses: "./.github/actions/website-sync"
|
||||
id: "publish-next"
|
||||
with:
|
||||
repository: "grafana/kind-registry"
|
||||
branch: "main"
|
||||
host: "github.com"
|
||||
github_pat: "grafana-delivery-bot:${{ steps.generate_token.outputs.token }}"
|
||||
source_folder: ".github/workflows/scripts/kinds/next"
|
||||
target_folder: "grafana/next"
|
||||
70
.github/workflows/publish-kinds-release.yml
vendored
70
.github/workflows/publish-kinds-release.yml
vendored
@@ -1,70 +0,0 @@
|
||||
name: "publish-kinds-release"
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- v[0-9]+.[0-9]+.x
|
||||
tags:
|
||||
- v[0-9]+.[0-9]+.[0-9]+
|
||||
paths:
|
||||
- '**/*.cue'
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
main:
|
||||
if: github.repository == 'grafana/grafana'
|
||||
runs-on: "ubuntu-latest"
|
||||
steps:
|
||||
- name: "Checkout Grafana repo"
|
||||
uses: "actions/checkout@v3"
|
||||
with:
|
||||
# required for the `grafana/grafana-github-actions/has-matching-release-tag` action to work
|
||||
fetch-depth: 0
|
||||
|
||||
- name: "Setup Go"
|
||||
uses: "actions/setup-go@v4"
|
||||
with:
|
||||
go-version: '1.21.5'
|
||||
|
||||
- name: "Verify kinds"
|
||||
run: go run .github/workflows/scripts/kinds/verify-kinds.go
|
||||
|
||||
- name: "Checkout Actions library"
|
||||
uses: "actions/checkout@v3"
|
||||
with:
|
||||
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: "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: "Clone website-sync Action"
|
||||
if: "steps.has-matching-release-tag.outputs.bool == 'true'"
|
||||
run: "git clone --single-branch --no-tags --depth 1 -b master https://grafana-delivery-bot:${{ steps.generate_token.outputs.token }}@github.com/grafana/website-sync ./.github/actions/website-sync"
|
||||
|
||||
- name: "Publish to kind registry (release)"
|
||||
if: "steps.has-matching-release-tag.outputs.bool == 'true'"
|
||||
uses: "./.github/actions/website-sync"
|
||||
id: "publish-release"
|
||||
with:
|
||||
repository: "grafana/kind-registry"
|
||||
branch: "main"
|
||||
host: "github.com"
|
||||
github_pat: "grafana-delivery-bot:${{ steps.generate_token.outputs.token }}"
|
||||
source_folder: ".github/workflows/scripts/kinds/next"
|
||||
target_folder: "grafana/${{ github.ref_name }}"
|
||||
14
.github/workflows/remove-milestone.yml
vendored
14
.github/workflows/remove-milestone.yml
vendored
@@ -11,7 +11,9 @@ on:
|
||||
description: Needs to match, exactly, the name of a milestone
|
||||
required: true
|
||||
type: string
|
||||
|
||||
secrets:
|
||||
token:
|
||||
required: true
|
||||
jobs:
|
||||
main:
|
||||
runs-on: ubuntu-latest
|
||||
@@ -24,20 +26,14 @@ jobs:
|
||||
ref: main
|
||||
- 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 }}
|
||||
- name: Remove milestone from open issues (manually invoked)
|
||||
if: ${{ github.event.inputs.version != '' }}
|
||||
uses: ./actions/remove-milestone
|
||||
with:
|
||||
token: ${{ steps.generate_token.outputs.token }}
|
||||
token: ${{ secrets.GH_BOT_ACCESS_TOKEN }}
|
||||
- name: Remove milestone from open issues (workflow invoked)
|
||||
if: ${{ inputs.version_call != '' }}
|
||||
uses: ./actions/remove-milestone
|
||||
with:
|
||||
version_call: ${{ inputs.version_call }}
|
||||
token: ${{ steps.generate_token.outputs.token }}
|
||||
token: ${{ secrets.token }}
|
||||
|
||||
2
.github/workflows/sbom-report.yml
vendored
2
.github/workflows/sbom-report.yml
vendored
@@ -14,7 +14,7 @@ jobs:
|
||||
uses: actions/checkout@v2
|
||||
|
||||
- name: Anchore SBOM Action
|
||||
uses: anchore/sbom-action@v0.14.2
|
||||
uses: anchore/sbom-action@v0.12.0
|
||||
with:
|
||||
artifact-name: ${{ github.event.repository.name }}-spdx.json
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
module.exports = async ({ core, filePath }) => {
|
||||
try {
|
||||
const fs = require('fs').promises;
|
||||
const content = await fs.readFile(filePath)
|
||||
const fs = require('fs');
|
||||
const content = await readFile(fs, filePath);
|
||||
const result = JSON.parse(content);
|
||||
|
||||
core.startGroup('Parsing json file...');
|
||||
@@ -13,6 +13,15 @@ module.exports = async ({ core, filePath }) => {
|
||||
|
||||
core.endGroup();
|
||||
} catch (error) {
|
||||
core.setFailed(error.message);
|
||||
core.restFailed(error.message);
|
||||
}
|
||||
}
|
||||
|
||||
async function readFile(fs, path) {
|
||||
return new Promise((resolve, reject) => {
|
||||
fs.readFile(path, (error, data) => {
|
||||
if (error) return reject(error);
|
||||
return resolve(data);
|
||||
});
|
||||
});
|
||||
}
|
||||
425
.github/workflows/scripts/kinds/verify-kinds.go
vendored
425
.github/workflows/scripts/kinds/verify-kinds.go
vendored
@@ -1,425 +0,0 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"archive/zip"
|
||||
"context"
|
||||
"fmt"
|
||||
"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/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"
|
||||
)
|
||||
|
||||
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).
|
||||
// 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")
|
||||
|
||||
coreJennies := codejen.JennyList[kindsys.Kind]{}
|
||||
coreJennies.Append(
|
||||
KindRegistryJenny(outputPath),
|
||||
)
|
||||
corefs, err := coreJennies.GenerateFS(corek...)
|
||||
die(err)
|
||||
die(jfs.Merge(corefs))
|
||||
|
||||
composableJennies := codejen.JennyList[kindsys.Composable]{}
|
||||
composableJennies.Append(
|
||||
ComposableKindRegistryJenny(outputPath),
|
||||
)
|
||||
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))
|
||||
}
|
||||
}
|
||||
|
||||
func die(errs ...error) {
|
||||
if len(errs) > 0 && errs[0] != nil {
|
||||
for _, err := range errs {
|
||||
fmt.Fprint(os.Stderr, err, "\n")
|
||||
}
|
||||
os.Exit(1)
|
||||
}
|
||||
}
|
||||
|
||||
// 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,
|
||||
}
|
||||
}
|
||||
|
||||
type kindregjenny struct {
|
||||
path string
|
||||
}
|
||||
|
||||
func (j *kindregjenny) JennyName() string {
|
||||
return "KindRegistryJenny"
|
||||
}
|
||||
|
||||
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", name, name+".cue")
|
||||
return codejen.NewFile(path, newKindBytes, j), nil
|
||||
}
|
||||
|
||||
// kindToBytes converts a kind cue value to a .cue file content
|
||||
func kindToBytes(kind cue.Value) ([]byte, error) {
|
||||
node := kind.Syntax(
|
||||
cue.All(),
|
||||
cue.Schema(),
|
||||
cue.Docs(true),
|
||||
)
|
||||
|
||||
return cueformat.Node(node)
|
||||
}
|
||||
|
||||
// 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,
|
||||
}
|
||||
}
|
||||
|
||||
type ckrJenny struct {
|
||||
path string
|
||||
}
|
||||
|
||||
func (j *ckrJenny) JennyName() string {
|
||||
return "ComposableKindRegistryJenny"
|
||||
}
|
||||
|
||||
func (j *ckrJenny) Generate(k kindsys.Composable) (*codejen.File, error) {
|
||||
si, err := kindsys.FindSchemaInterface(k.Def().Properties.SchemaInterface)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
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
14
.github/workflows/snyk.yml
vendored
@@ -1,14 +0,0 @@
|
||||
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 }}
|
||||
2
.github/workflows/stale.yml
vendored
2
.github/workflows/stale.yml
vendored
@@ -7,7 +7,7 @@ jobs:
|
||||
stale:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/stale@v8
|
||||
- uses: actions/stale@v6
|
||||
with:
|
||||
repo-token: ${{ secrets.GH_BOT_ACCESS_TOKEN }}
|
||||
# Number of days of inactivity before a stale Issue or Pull Request is closed.
|
||||
|
||||
25
.github/workflows/sync-mirror.yml
vendored
25
.github/workflows/sync-mirror.yml
vendored
@@ -1,25 +0,0 @@
|
||||
# Owned by grafana-delivery-squad
|
||||
# Intended to be dropped into the base repo, Ex: grafana/grafana
|
||||
name: Sync to mirror
|
||||
run-name: sync-to-mirror-${{ github.ref_name }}
|
||||
on:
|
||||
workflow_dispatch:
|
||||
push:
|
||||
branches:
|
||||
- "main"
|
||||
- "v*.*.*"
|
||||
- "release-*"
|
||||
|
||||
# This is run after the pull request has been merged, so we'll run against the target branch
|
||||
jobs:
|
||||
trigger_downstream_patch_mirror:
|
||||
concurrency: patch-mirror-${{ github.ref_name }}
|
||||
uses: grafana/security-patch-actions/.github/workflows/mirror-branch-and-apply-patches.yml@main
|
||||
if: github.repository == 'grafana/grafana'
|
||||
with:
|
||||
ref: "${{ github.ref_name }}" # this is the target branch name, Ex: "main"
|
||||
src_repo: "${{ github.repository }}"
|
||||
dest_repo: "${{ github.repository }}-security-mirror"
|
||||
patch_repo: "${{ github.repository }}-security-patches"
|
||||
secrets: inherit
|
||||
|
||||
33
.github/workflows/update-changelog.yml
vendored
33
.github/workflows/update-changelog.yml
vendored
@@ -4,30 +4,21 @@ on:
|
||||
inputs:
|
||||
version:
|
||||
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'
|
||||
skip_pr:
|
||||
required: false
|
||||
default: "0"
|
||||
skip_community_post:
|
||||
required: false
|
||||
default: "0"
|
||||
description: 'Needs to match, exactly, the name of a milestone. The version to be released please respect: major.minor.patch or major.minor.patch-beta<number> format. example: 7.4.3 or 7.4.3-beta1'
|
||||
jobs:
|
||||
main:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: "Generate token"
|
||||
id: generate_token
|
||||
uses: tibdex/github-app-token@b62528385c34dbc9f38e5f4225ac829252d1ea92
|
||||
- name: Checkout Actions
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
app_id: ${{ secrets.GRAFANA_DELIVERY_BOT_APP_ID }}
|
||||
private_key: ${{ secrets.GRAFANA_DELIVERY_BOT_APP_PEM }}
|
||||
- name: Run update changelog (manually invoked)
|
||||
uses: grafana/grafana-github-actions-go/update-changelog@main
|
||||
repository: "grafana/grafana-github-actions"
|
||||
path: ./actions
|
||||
ref: main
|
||||
- name: Install Actions
|
||||
run: npm install --production --prefix ./actions
|
||||
- name: Run update changelog (manually invoked)
|
||||
uses: ./actions/update-changelog
|
||||
with:
|
||||
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
|
||||
skip_pr: ${{ inputs.skip_pr }}
|
||||
skip_community_post: ${{ inputs.skip_community_post }}
|
||||
token: ${{ secrets.GH_BOT_ACCESS_TOKEN }}
|
||||
metricsWriteAPIKey: ${{ secrets.GRAFANA_MISC_STATS_API_KEY }}
|
||||
|
||||
27
.github/workflows/update-make-docs.yml
vendored
27
.github/workflows/update-make-docs.yml
vendored
@@ -1,27 +0,0 @@
|
||||
name: Update `make docs` procedure
|
||||
on:
|
||||
schedule:
|
||||
- cron: '0 7 * * 1-5'
|
||||
jobs:
|
||||
main:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Update procedure
|
||||
if: github.repository != 'grafana/writers-toolkit'
|
||||
run: |
|
||||
curl -s -Lo docs/docs.mk https://raw.githubusercontent.com/grafana/writers-toolkit/main/docs/docs.mk
|
||||
curl -s -Lo docs/make-docs https://raw.githubusercontent.com/grafana/writers-toolkit/main/docs/make-docs
|
||||
if git diff --exit-code; then exit 0; fi
|
||||
BRANCH="$(date +%Y-%m-%d)/update-make-docs"
|
||||
git checkout -b "${BRANCH}"
|
||||
git add .
|
||||
git config --local user.email "bot@grafana.com"
|
||||
git config --local user.name "grafanabot"
|
||||
git commit -m "Update \`make docs\` procedure"
|
||||
git push -v origin "refs/heads/${BRANCH}"
|
||||
gh pr create --fill
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
27
.github/workflows/verify-kinds.yml
vendored
27
.github/workflows/verify-kinds.yml
vendored
@@ -1,27 +0,0 @@
|
||||
name: "verify-kinds"
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
branches: [ main ]
|
||||
paths:
|
||||
- '**/*.cue'
|
||||
|
||||
jobs:
|
||||
main:
|
||||
runs-on: "ubuntu-latest"
|
||||
steps:
|
||||
- name: "Checkout Grafana repo"
|
||||
uses: "actions/checkout@v3"
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: "Setup Go"
|
||||
uses: "actions/setup-go@v4"
|
||||
with:
|
||||
go-version: '1.21.5'
|
||||
|
||||
- name: "Verify kinds"
|
||||
run: go run .github/workflows/scripts/kinds/verify-kinds.go
|
||||
env:
|
||||
CODEGEN_VERIFY: 1
|
||||
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
|
||||
13
.gitignore
vendored
13
.gitignore
vendored
@@ -17,7 +17,6 @@ vendor/
|
||||
/docs/menu.yaml
|
||||
/requests
|
||||
tsconfig.tsbuildinfo
|
||||
__debug_bin*
|
||||
|
||||
# Yarn
|
||||
.yarn/*
|
||||
@@ -80,8 +79,6 @@ public/css/*.min.css
|
||||
/devenv/docker-compose.override.yaml
|
||||
/devenv/.env
|
||||
/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
|
||||
|
||||
conf/custom.ini
|
||||
/conf/provisioning/**/custom.yaml
|
||||
@@ -97,8 +94,6 @@ profile.cov
|
||||
/pkg/cmd/grafana-server/grafana-server
|
||||
/pkg/cmd/grafana-server/debug
|
||||
/pkg/extensions/*
|
||||
/pkg/build/cmd/artifactspage.go
|
||||
/pkg/build/cmd/artifactspage.tmpl.html
|
||||
/pkg/server/wireexts_enterprise.go
|
||||
/pkg/cmd/grafana-cli/runner/wireexts_enterprise.go
|
||||
!/pkg/extensions/main.go
|
||||
@@ -140,7 +135,7 @@ pkg/services/quota/quotaimpl/storage/storage.json
|
||||
/packages/**/package.tgz
|
||||
/packages/grafana-toolkit/sass
|
||||
## CI places the packages in a different location
|
||||
/npm-artifacts
|
||||
/npm-artifacts/*.tgz
|
||||
|
||||
# Ignore frontend build manifest
|
||||
manifest.json
|
||||
@@ -186,12 +181,6 @@ public/locales/_build/
|
||||
public/locales/*/*.js
|
||||
public/locales/*/grafana_old.json
|
||||
|
||||
# Auto-generated swagger intermediate file
|
||||
public/api-spec.json
|
||||
|
||||
deployment_tools_config.json
|
||||
|
||||
.betterer.cache
|
||||
|
||||
# Temporary file for backporting PRs
|
||||
.pr-body.txt
|
||||
|
||||
@@ -13,33 +13,19 @@ ignore-generated-header = false
|
||||
severity = "warning"
|
||||
confidence = 3
|
||||
|
||||
[linters-settings.depguard.rules.main]
|
||||
allow = [] # allow all
|
||||
deny = [
|
||||
{pkg = "io/ioutil", desc = "Deprecated: As of Go 1.16, the same functionality is now provided by package io or package os, and those implementations should be preferred in new code. See the specific function documentation for details."},
|
||||
{pkg = "gopkg.in/yaml.v2", desc = "Grafana packages are not allowed to depend on gopkg.in/yaml.v2 as gopkg.in/yaml.v3 is now available"},
|
||||
{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."},
|
||||
]
|
||||
|
||||
[linters-settings.depguard.rules.coreplugins]
|
||||
deny = [
|
||||
{pkg = "github.com/grafana/grafana/pkg/", desc = "Core plugins are not allowed to depend on Grafana core packages"},
|
||||
]
|
||||
files = [
|
||||
"**/pkg/tsdb/testdatasource/*",
|
||||
"**/pkg/tsdb/testdatasource/**/*",
|
||||
]
|
||||
[linters-settings.depguard]
|
||||
list-type = "blacklist"
|
||||
include-go-root = true
|
||||
packages = ["io/ioutil"]
|
||||
[[linters-settings.depguard.packages-with-error-message]]
|
||||
"io/ioutil" = "Deprecated: As of Go 1.16, the same functionality is now provided by package io or package os, and those implementations should be preferred in new code. See the specific function documentation for details."
|
||||
"gopkg.in/yaml.v2" = "Grafana packages are not allowed to depend on gopkg.in/yaml.v2 as gopkg.in/yaml.v3 is now available"
|
||||
|
||||
[linters-settings.gocritic]
|
||||
enabled-checks = ["ruleguard"]
|
||||
[linters-settings.gocritic.settings.ruleguard]
|
||||
rules = "pkg/ruleguard.rules.go"
|
||||
|
||||
[linters-settings.nakedret]
|
||||
max-func-lines = 60
|
||||
|
||||
[linters]
|
||||
disable-all = true
|
||||
enable = [
|
||||
@@ -58,6 +44,7 @@ enable = [
|
||||
"ineffassign",
|
||||
"misspell",
|
||||
"nakedret",
|
||||
"rowserrcheck",
|
||||
"exportloopref",
|
||||
"staticcheck",
|
||||
"stylecheck",
|
||||
@@ -75,7 +62,6 @@ enable = [
|
||||
|
||||
# Disabled linters (might want them later)
|
||||
# "unparam"
|
||||
# "rowserrcheck" # The linter doesn't detect that both Scan and Close also returns the error message returned by Err.
|
||||
|
||||
[issues]
|
||||
exclude-use-default = false
|
||||
@@ -93,11 +79,6 @@ linters = ["stylecheck"]
|
||||
text = "ST1001"
|
||||
|
||||
# Enable when appropriate
|
||||
# http.CloseNotifier has been deprecated since Go 1.11 and an alternative has been available since Go 1.7: We currently need it in pkg/web/response_writer.go.
|
||||
[[issues.exclude-rules]]
|
||||
linters = ["staticcheck"]
|
||||
text = "SA1019: http.CloseNotifier"
|
||||
|
||||
# strings.Title has been deprecated since Go 1.18 and an alternative has been available since Go 1.0: The rule Title uses for word boundaries does not handle Unicode punctuation properly.
|
||||
# Use golang.org/x/text/cases instead.
|
||||
[[issues.exclude-rules]]
|
||||
|
||||
@@ -74,13 +74,13 @@ var config = {
|
||||
"click element button[aria-label='Login button']",
|
||||
"wait for element [aria-label='Skip change password button'] to be visible",
|
||||
],
|
||||
threshold: 15,
|
||||
threshold: 14,
|
||||
rootElement: '.main-view',
|
||||
},
|
||||
{
|
||||
url: '${HOST}/?orgId=1',
|
||||
wait: 500,
|
||||
threshold: 3,
|
||||
threshold: 0,
|
||||
},
|
||||
{
|
||||
url: '${HOST}/d/O6f11TZWk/panel-tests-bar-gauge',
|
||||
@@ -93,7 +93,7 @@ var config = {
|
||||
url: '${HOST}/?orgId=1&search=open',
|
||||
wait: 500,
|
||||
rootElement: '.main-view',
|
||||
threshold: 3,
|
||||
threshold: 0,
|
||||
},
|
||||
{
|
||||
url: '${HOST}/alerting/list',
|
||||
@@ -107,7 +107,7 @@ var config = {
|
||||
url: '${HOST}/datasources',
|
||||
wait: 500,
|
||||
rootElement: '.main-view',
|
||||
threshold: 3,
|
||||
threshold: 1,
|
||||
},
|
||||
{
|
||||
url: '${HOST}/org/users',
|
||||
@@ -125,7 +125,7 @@ var config = {
|
||||
url: '${HOST}/plugins',
|
||||
wait: 500,
|
||||
rootElement: '.main-view',
|
||||
threshold: 3,
|
||||
threshold: 1,
|
||||
},
|
||||
{
|
||||
url: '${HOST}/org',
|
||||
|
||||
@@ -27,6 +27,7 @@ theme.light.generated.json
|
||||
theme.dark.generated.json
|
||||
|
||||
# Generated Swagger API specs
|
||||
public/api-spec.json
|
||||
public/api-merged.json
|
||||
public/openapi3.json
|
||||
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
module.exports = {
|
||||
trailingComma: 'es5',
|
||||
singleQuote: true,
|
||||
printWidth: 120,
|
||||
...require('@grafana/toolkit/src/config/prettier.plugin.config.json'),
|
||||
};
|
||||
|
||||
BIN
.yarn/cache/rst2html-https-e87da7ea2f-63d5ff3068.zip
vendored
Normal file
BIN
.yarn/cache/rst2html-https-e87da7ea2f-63d5ff3068.zip
vendored
Normal file
Binary file not shown.
File diff suppressed because one or more lines are too long
@@ -1,12 +0,0 @@
|
||||
diff --git a/index.d.ts b/index.d.ts
|
||||
index d116f54d6da12d24b48e24ff3636c9066059aa58..93290945d8b1818cab893d6466179b33869a47b9 100644
|
||||
--- a/index.d.ts
|
||||
+++ b/index.d.ts
|
||||
@@ -25,6 +25,7 @@ export type SplitPaneProps = {
|
||||
pane2Style?: React.CSSProperties;
|
||||
resizerClassName?: string;
|
||||
step?: number;
|
||||
+ children?: React.ReactNode;
|
||||
};
|
||||
|
||||
export type SplitPaneState = {
|
||||
807
.yarn/releases/yarn-3.3.0.cjs
vendored
Executable file
807
.yarn/releases/yarn-3.3.0.cjs
vendored
Executable file
File diff suppressed because one or more lines are too long
874
.yarn/releases/yarn-3.6.0.cjs
vendored
874
.yarn/releases/yarn-3.6.0.cjs
vendored
File diff suppressed because one or more lines are too long
2
.yarn/sdks/eslint/package.json
vendored
2
.yarn/sdks/eslint/package.json
vendored
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "eslint",
|
||||
"version": "8.44.0-sdk",
|
||||
"version": "8.32.0-sdk",
|
||||
"main": "./lib/api.js",
|
||||
"type": "commonjs"
|
||||
}
|
||||
|
||||
2
.yarn/sdks/integrations.yml
vendored
2
.yarn/sdks/integrations.yml
vendored
@@ -2,5 +2,5 @@
|
||||
# Manual changes might be lost!
|
||||
|
||||
integrations:
|
||||
- vscode
|
||||
- vim
|
||||
- vscode
|
||||
|
||||
6
.yarn/sdks/prettier/index.js
vendored
6
.yarn/sdks/prettier/index.js
vendored
@@ -11,10 +11,10 @@ const absRequire = createRequire(absPnpApiPath);
|
||||
|
||||
if (existsSync(absPnpApiPath)) {
|
||||
if (!process.versions.pnp) {
|
||||
// Setup the environment to be able to require prettier
|
||||
// Setup the environment to be able to require prettier/index.js
|
||||
require(absPnpApiPath).setup();
|
||||
}
|
||||
}
|
||||
|
||||
// Defer to the real prettier your application uses
|
||||
module.exports = absRequire(`prettier`);
|
||||
// Defer to the real prettier/index.js your application uses
|
||||
module.exports = absRequire(`prettier/index.js`);
|
||||
|
||||
2
.yarn/sdks/prettier/package.json
vendored
2
.yarn/sdks/prettier/package.json
vendored
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "prettier",
|
||||
"version": "3.0.0-sdk",
|
||||
"version": "2.8.1-sdk",
|
||||
"main": "./index.js",
|
||||
"type": "commonjs"
|
||||
}
|
||||
|
||||
2
.yarn/sdks/typescript/lib/tsserver.js
vendored
2
.yarn/sdks/typescript/lib/tsserver.js
vendored
@@ -109,8 +109,6 @@ const moduleWrapper = tsserver => {
|
||||
str = `zip:${str}`;
|
||||
} break;
|
||||
}
|
||||
} else {
|
||||
str = str.replace(/^\/?/, process.platform === `win32` ? `` : `/`);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
2
.yarn/sdks/typescript/lib/tsserverlibrary.js
vendored
2
.yarn/sdks/typescript/lib/tsserverlibrary.js
vendored
@@ -109,8 +109,6 @@ const moduleWrapper = tsserver => {
|
||||
str = `zip:${str}`;
|
||||
} break;
|
||||
}
|
||||
} else {
|
||||
str = str.replace(/^\/?/, process.platform === `win32` ? `` : `/`);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
30
.yarnrc.yml
30
.yarnrc.yml
@@ -3,9 +3,33 @@ enableTelemetry: false
|
||||
nodeLinker: pnp
|
||||
|
||||
packageExtensions:
|
||||
'@storybook/core-common@*':
|
||||
'@storybook/addon-docs@6.5.12':
|
||||
peerDependencies:
|
||||
'@babel/core': ^7.0.0
|
||||
'@storybook/manager-webpack5': 6.5.12
|
||||
'webpack': 5.74.0
|
||||
'@storybook/addon-essentials@6.5.12':
|
||||
peerDependencies:
|
||||
'@storybook/components': 6.5.12
|
||||
'@storybook/core-events': 6.5.12
|
||||
'@storybook/manager-webpack5': 6.5.12
|
||||
'@storybook/theming': 6.5.12
|
||||
'@storybook/core-server@6.5.12':
|
||||
peerDependencies:
|
||||
'@babel/core': ^7.0.0
|
||||
'@storybook/core@6.5.12':
|
||||
peerDependencies:
|
||||
'@babel/core': ^7.0.0
|
||||
'@storybook/manager-webpack5': 6.5.12
|
||||
'@storybook/csf-tools@6.5.12':
|
||||
peerDependencies:
|
||||
'@babel/core': ^7.0.0
|
||||
'@storybook/mdx2-csf@0.0.3':
|
||||
dependencies:
|
||||
'@storybook/react-webpack5': '*'
|
||||
'@babel/types': ^7.14.8
|
||||
'@storybook/react@6.5.12':
|
||||
peerDependencies:
|
||||
'@storybook/manager-webpack5': 6.5.12
|
||||
doctrine@3.0.0:
|
||||
dependencies:
|
||||
assert: 2.0.0
|
||||
@@ -35,7 +59,7 @@ plugins:
|
||||
- path: .yarn/plugins/@yarnpkg/plugin-outdated.cjs
|
||||
spec: 'https://mskelton.dev/yarn-outdated/v2'
|
||||
|
||||
yarnPath: .yarn/releases/yarn-3.6.0.cjs
|
||||
yarnPath: .yarn/releases/yarn-3.3.0.cjs
|
||||
# Uncomment the following lines if you want to use Verdaccio local npm registry. Read more at packages/README.md
|
||||
# npmScopes:
|
||||
# grafana:
|
||||
|
||||
5455
CHANGELOG.md
5455
CHANGELOG.md
File diff suppressed because it is too large
Load Diff
@@ -40,7 +40,7 @@ Project maintainers who do not follow or enforce the Code of Conduct in good fai
|
||||
|
||||
## Attribution
|
||||
|
||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [https://contributor-covenant.org/version/1/4/code-of-conduct][version]
|
||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]
|
||||
|
||||
[homepage]: https://contributor-covenant.org
|
||||
[version]: https://www.contributor-covenant.org/version/1/4/code-of-conduct/
|
||||
[homepage]: http://contributor-covenant.org
|
||||
[version]: http://contributor-covenant.org/version/1/4/
|
||||
|
||||
@@ -15,7 +15,7 @@ You can contribute to Grafana in several ways. Here are some examples:
|
||||
- Organize meetups and user groups in your local area.
|
||||
- Help others by answering questions about Grafana.
|
||||
|
||||
**Please note:** We do not currently accept contributions for translations. Please do not submit pull requests translating grafana.json files - they will be rejected. We do accept contributions to mark up phrases for translation. See [Internationalization](contribute/internationalization.md).
|
||||
**Please note:** We do not currently accept contributions for translations. Please do not submit pull requests for messages.po files - they will be rejected.
|
||||
|
||||
For more ways to contribute, check out the [Open Source Guides](https://opensource.guide/how-to-contribute/).
|
||||
|
||||
@@ -82,6 +82,6 @@ Before we can accept your pull request, you need to [sign our CLA](https://grafa
|
||||
## Where do I go from here?
|
||||
|
||||
- Set up your [development environment](contribute/developer-guide.md).
|
||||
- Learn how to [contribute to our documentation](contribute/documentation/README.md).
|
||||
- Get started [developing plugins](https://grafana.com/developers/plugin-tools) for Grafana.
|
||||
- Learn how to [contribute documentation](contribute/README.md).
|
||||
- Get started [developing plugins](https://grafana.com/docs/grafana/latest/developers/plugins/) for Grafana.
|
||||
- Look through the resources in the [contribute](contribute) folder.
|
||||
|
||||
40
Dockerfile
40
Dockerfile
@@ -1,14 +1,13 @@
|
||||
# syntax=docker/dockerfile:1
|
||||
|
||||
ARG BASE_IMAGE=alpine:3.18.3
|
||||
ARG JS_IMAGE=node:18-alpine3.18
|
||||
ARG JS_PLATFORM=linux/amd64
|
||||
ARG GO_IMAGE=golang:1.21.5-alpine3.18
|
||||
ARG BASE_IMAGE=alpine:3.17
|
||||
ARG JS_IMAGE=node:18-alpine3.17
|
||||
ARG GO_IMAGE=golang:1.20.1-alpine3.17
|
||||
|
||||
ARG GO_SRC=go-builder
|
||||
ARG JS_SRC=js-builder
|
||||
|
||||
FROM --platform=${JS_PLATFORM} ${JS_IMAGE} as js-builder
|
||||
FROM ${JS_IMAGE} as js-builder
|
||||
|
||||
ENV NODE_OPTIONS=--max_old_space_size=8000
|
||||
|
||||
@@ -19,7 +18,7 @@ COPY .yarn .yarn
|
||||
COPY packages packages
|
||||
COPY plugins-bundled plugins-bundled
|
||||
|
||||
RUN yarn install --immutable
|
||||
RUN yarn install
|
||||
|
||||
COPY tsconfig.json .eslintrc .editorconfig .browserslistrc .prettierrc.js babel.config.json .linguirc ./
|
||||
COPY public public
|
||||
@@ -31,15 +30,9 @@ RUN yarn build
|
||||
|
||||
FROM ${GO_IMAGE} as go-builder
|
||||
|
||||
ARG COMMIT_SHA=""
|
||||
ARG BUILD_BRANCH=""
|
||||
ARG GO_BUILD_TAGS="oss"
|
||||
ARG WIRE_TAGS="oss"
|
||||
ARG BINGO="true"
|
||||
|
||||
# Install build dependencies
|
||||
RUN if grep -i -q alpine /etc/issue; then \
|
||||
apk add --no-cache gcc g++ make git; \
|
||||
apk add --no-cache gcc g++ make; \
|
||||
fi
|
||||
|
||||
WORKDIR /tmp/grafana
|
||||
@@ -47,11 +40,9 @@ WORKDIR /tmp/grafana
|
||||
COPY go.* ./
|
||||
COPY .bingo .bingo
|
||||
|
||||
RUN go mod download
|
||||
RUN if [[ "$BINGO" = "true" ]]; then \
|
||||
go install github.com/bwplotka/bingo@latest && \
|
||||
bingo get -v; \
|
||||
fi
|
||||
RUN go mod download && \
|
||||
go install github.com/bwplotka/bingo@latest && \
|
||||
bingo get
|
||||
|
||||
COPY embed.go Makefile build.go package.json ./
|
||||
COPY cue.mod cue.mod
|
||||
@@ -59,17 +50,13 @@ COPY kinds kinds
|
||||
COPY local local
|
||||
COPY packages/grafana-schema packages/grafana-schema
|
||||
COPY public/app/plugins public/app/plugins
|
||||
COPY public/api-merged.json public/api-merged.json
|
||||
COPY public/api-spec.json public/api-spec.json
|
||||
COPY pkg pkg
|
||||
COPY scripts scripts
|
||||
COPY conf conf
|
||||
COPY .github .github
|
||||
COPY LICENSE ./
|
||||
|
||||
ENV COMMIT_SHA=${COMMIT_SHA}
|
||||
ENV BUILD_BRANCH=${BUILD_BRANCH}
|
||||
|
||||
RUN make build-go GO_BUILD_TAGS=${GO_BUILD_TAGS} WIRE_TAGS=${WIRE_TAGS}
|
||||
RUN make build-go
|
||||
|
||||
FROM ${BASE_IMAGE} as tgz-builder
|
||||
|
||||
@@ -106,12 +93,12 @@ WORKDIR $GF_PATHS_HOME
|
||||
|
||||
# Install dependencies
|
||||
RUN if grep -i -q alpine /etc/issue; then \
|
||||
apk add --no-cache ca-certificates bash curl tzdata musl-utils && \
|
||||
apk add --no-cache ca-certificates bash tzdata musl-utils && \
|
||||
apk info -vv | sort; \
|
||||
elif grep -i -q ubuntu /etc/issue; then \
|
||||
DEBIAN_FRONTEND=noninteractive && \
|
||||
apt-get update && \
|
||||
apt-get install -y ca-certificates curl tzdata musl && \
|
||||
apt-get install -y ca-certificates curl tzdata && \
|
||||
apt-get autoremove -y && \
|
||||
rm -rf /var/lib/apt/lists/*; \
|
||||
else \
|
||||
@@ -166,7 +153,6 @@ RUN if [ ! $(getent group "$GF_GID") ]; then \
|
||||
|
||||
COPY --from=go-src /tmp/grafana/bin/grafana* /tmp/grafana/bin/*/grafana* ./bin/
|
||||
COPY --from=js-src /tmp/grafana/public ./public
|
||||
COPY --from=go-src /tmp/grafana/LICENSE ./
|
||||
|
||||
EXPOSE 3000
|
||||
|
||||
|
||||
@@ -99,7 +99,7 @@ The current team members are:
|
||||
- Ryan McKinley ([Grafana Labs](https://grafana.com/))
|
||||
- Sofia Papagiannaki ([Grafana Labs](https://grafana.com/))
|
||||
- Stephanie Closson ([Grafana Labs](https://grafana.com/))
|
||||
- Tobias Skarhed ([Grafana Labs](https://grafana.com/))
|
||||
- Tobias Skarhed ([CERN](https://home.web.cern.ch/))
|
||||
- Torkel Ödegaard ([Grafana Labs](https://grafana.com/))
|
||||
- Utkarsh Bhatnagar ([Tinder](https://www.tinder.com/))
|
||||
- Will Browne ([Grafana Labs](https://grafana.com/))
|
||||
|
||||
132
Makefile
132
Makefile
@@ -13,12 +13,9 @@ GO = go
|
||||
GO_FILES ?= ./pkg/...
|
||||
SH_FILES ?= $(shell find ./scripts -name *.sh)
|
||||
GO_BUILD_FLAGS += $(if $(GO_BUILD_DEV),-dev)
|
||||
GO_BUILD_FLAGS += $(if $(GO_BUILD_DEV),-dev)
|
||||
GO_BUILD_FLAGS += $(if $(GO_BUILD_TAGS),-build-tags=$(GO_BUILD_TAGS))
|
||||
|
||||
targets := $(shell echo '$(sources)' | tr "," " ")
|
||||
|
||||
GO_INTEGRATION_TESTS := $(shell find ./pkg -type f -name '*_test.go' -exec grep -l '^func TestIntegration' '{}' '+' | grep -o '\(.*\)/' | sort -u)
|
||||
|
||||
all: deps build
|
||||
|
||||
##@ Dependencies
|
||||
@@ -36,68 +33,35 @@ node_modules: package.json yarn.lock ## Install node modules.
|
||||
|
||||
##@ Swagger
|
||||
SPEC_TARGET = public/api-spec.json
|
||||
ENTERPRISE_SPEC_TARGET = public/api-enterprise-spec.json
|
||||
MERGED_SPEC_TARGET = public/api-merged.json
|
||||
MERGED_SPEC_TARGET := public/api-merged.json
|
||||
NGALERT_SPEC_TARGET = pkg/services/ngalert/api/tooling/api.json
|
||||
|
||||
$(NGALERT_SPEC_TARGET):
|
||||
+$(MAKE) -C pkg/services/ngalert/api/tooling api.json
|
||||
|
||||
$(MERGED_SPEC_TARGET): swagger-oss-gen swagger-enterprise-gen $(NGALERT_SPEC_TARGET) $(SWAGGER) ## Merge generated and ngalert API specs
|
||||
$(MERGED_SPEC_TARGET): $(SPEC_TARGET) $(NGALERT_SPEC_TARGET) $(SWAGGER) ## Merge generated and ngalert API specs
|
||||
# known conflicts DsPermissionType, AddApiKeyCommand, Json, Duration (identical models referenced by both specs)
|
||||
$(SWAGGER) mixin $(SPEC_TARGET) $(ENTERPRISE_SPEC_TARGET) $(NGALERT_SPEC_TARGET) --ignore-conflicts -o $(MERGED_SPEC_TARGET)
|
||||
$(SWAGGER) mixin $(SPEC_TARGET) $(NGALERT_SPEC_TARGET) --ignore-conflicts -o $(MERGED_SPEC_TARGET)
|
||||
|
||||
swagger-oss-gen: $(SWAGGER) ## Generate API Swagger specification
|
||||
@echo "re-generating swagger for OSS"
|
||||
rm -f $(SPEC_TARGET)
|
||||
$(SPEC_TARGET): $(SWAGGER) ## Generate API Swagger specification
|
||||
SWAGGER_GENERATE_EXTENSION=false $(SWAGGER) generate spec -m -w pkg/server -o $(SPEC_TARGET) \
|
||||
-x "github.com/grafana/grafana/pkg/services/ngalert/api/tooling/definitions" \
|
||||
-x "github.com/prometheus/alertmanager" \
|
||||
-i pkg/api/swagger_tags.json \
|
||||
--exclude-tag=alpha \
|
||||
--exclude-tag=enterprise
|
||||
--exclude-tag=alpha
|
||||
|
||||
# this file only exists if enterprise is enabled
|
||||
ENTERPRISE_EXT_FILE = pkg/extensions/ext.go
|
||||
ifeq ("$(wildcard $(ENTERPRISE_EXT_FILE))","") ## if enterprise is not enabled
|
||||
swagger-enterprise-gen:
|
||||
@echo "skipping re-generating swagger for enterprise: not enabled"
|
||||
else
|
||||
swagger-enterprise-gen: $(SWAGGER) ## Generate API Swagger specification
|
||||
@echo "re-generating swagger for enterprise"
|
||||
rm -f $(ENTERPRISE_SPEC_TARGET)
|
||||
SWAGGER_GENERATE_EXTENSION=false $(SWAGGER) generate spec -m -w pkg/server -o $(ENTERPRISE_SPEC_TARGET) \
|
||||
-x "github.com/grafana/grafana/pkg/services/ngalert/api/tooling/definitions" \
|
||||
-x "github.com/prometheus/alertmanager" \
|
||||
-i pkg/api/swagger_tags.json \
|
||||
--exclude-tag=alpha \
|
||||
--include-tag=enterprise
|
||||
endif
|
||||
swagger-api-spec: gen-go $(SPEC_TARGET) $(MERGED_SPEC_TARGET) validate-api-spec
|
||||
|
||||
swagger-gen: gen-go $(MERGED_SPEC_TARGET) swagger-validate
|
||||
|
||||
swagger-validate: $(MERGED_SPEC_TARGET) $(SWAGGER) ## Validate API spec
|
||||
validate-api-spec: $(MERGED_SPEC_TARGET) $(SWAGGER) ## Validate API spec
|
||||
$(SWAGGER) validate $(<)
|
||||
|
||||
swagger-clean:
|
||||
rm -f $(SPEC_TARGET) $(MERGED_SPEC_TARGET) $(OAPI_SPEC_TARGET)
|
||||
|
||||
.PHONY: cleanup-old-git-hooks
|
||||
cleanup-old-git-hooks:
|
||||
./scripts/cleanup-husky.sh
|
||||
|
||||
.PHONY: lefthook-install
|
||||
lefthook-install: cleanup-old-git-hooks $(LEFTHOOK) # install lefthook for pre-commit hooks
|
||||
$(LEFTHOOK) install -f
|
||||
|
||||
.PHONY: lefthook-uninstall
|
||||
lefthook-uninstall: $(LEFTHOOK)
|
||||
$(LEFTHOOK) uninstall
|
||||
clean-api-spec:
|
||||
rm $(SPEC_TARGET) $(MERGED_SPEC_TARGET) $(OAPI_SPEC_TARGET)
|
||||
|
||||
##@ OpenAPI 3
|
||||
OAPI_SPEC_TARGET = public/openapi3.json
|
||||
|
||||
openapi3-gen: swagger-gen ## Generates OpenApi 3 specs from the Swagger 2 already generated
|
||||
openapi3-gen: swagger-api-spec ## Generates OpenApi 3 specs from the Swagger 2 already generated
|
||||
$(GO) run scripts/openapi3/openapi3conv.go $(MERGED_SPEC_TARGET) $(OAPI_SPEC_TARGET)
|
||||
|
||||
##@ Building
|
||||
@@ -106,11 +70,11 @@ gen-cue: ## Do all CUE/Thema code generation
|
||||
go generate ./pkg/plugins/plugindef
|
||||
go generate ./kinds/gen.go
|
||||
go generate ./public/app/plugins/gen.go
|
||||
go generate ./pkg/kindsysreport/codegen/report.go
|
||||
go generate ./pkg/kindsys/report.go
|
||||
|
||||
gen-go: $(WIRE)
|
||||
gen-go: $(WIRE) gen-cue
|
||||
@echo "generate go files"
|
||||
$(WIRE) gen -tags $(WIRE_TAGS) ./pkg/server
|
||||
$(WIRE) gen -tags $(WIRE_TAGS) ./pkg/server ./pkg/cmd/grafana-cli/runner
|
||||
|
||||
fix-cue: $(CUE)
|
||||
@echo "formatting cue files"
|
||||
@@ -120,7 +84,7 @@ fix-cue: $(CUE)
|
||||
gen-jsonnet:
|
||||
go generate ./devenv/jsonnet
|
||||
|
||||
build-go: gen-go ## Build all Go binaries.
|
||||
build-go: $(MERGED_SPEC_TARGET) gen-go ## Build all Go binaries.
|
||||
@echo "build go files"
|
||||
$(GO) run build.go $(GO_BUILD_FLAGS) build
|
||||
|
||||
@@ -162,39 +126,19 @@ test-go-unit: ## Run unit tests for backend with flags.
|
||||
.PHONY: test-go-integration
|
||||
test-go-integration: ## Run integration tests for backend with flags.
|
||||
@echo "test backend integration tests"
|
||||
$(GO) test -count=1 -run "^TestIntegration" -covermode=atomic -timeout=5m $(GO_INTEGRATION_TESTS)
|
||||
|
||||
.PHONY: test-go-integration-alertmanager
|
||||
test-go-integration-alertmanager: ## Run integration tests for the remote alertmanager (config taken from the mimir_backend block).
|
||||
@echo "test remote alertmanager integration tests"
|
||||
$(GO) clean -testcache
|
||||
AM_URL=http://localhost:8080 AM_TENANT_ID=test AM_PASSWORD=test \
|
||||
$(GO) test -count=1 -run "^TestIntegrationRemoteAlertmanager" -covermode=atomic -timeout=5m ./pkg/services/ngalert/notifier/...
|
||||
$(GO) test -run Integration -covermode=atomic -timeout=30m ./pkg/...
|
||||
|
||||
.PHONY: test-go-integration-postgres
|
||||
test-go-integration-postgres: devenv-postgres ## Run integration tests for postgres backend with flags.
|
||||
@echo "test backend integration postgres tests"
|
||||
$(GO) clean -testcache
|
||||
GRAFANA_TEST_DB=postgres \
|
||||
$(GO) test -p=1 -count=1 -run "^TestIntegration" -covermode=atomic -timeout=10m $(GO_INTEGRATION_TESTS)
|
||||
$(GO) list './pkg/...' | xargs -I {} sh -c 'GRAFANA_TEST_DB=postgres go test -run Integration -covermode=atomic -timeout=2m {}'
|
||||
|
||||
.PHONY: test-go-integration-mysql
|
||||
test-go-integration-mysql: devenv-mysql ## Run integration tests for mysql backend with flags.
|
||||
@echo "test backend integration mysql tests"
|
||||
GRAFANA_TEST_DB=mysql \
|
||||
$(GO) test -p=1 -count=1 -run "^TestIntegration" -covermode=atomic -timeout=10m $(GO_INTEGRATION_TESTS)
|
||||
|
||||
.PHONY: test-go-integration-redis
|
||||
test-go-integration-redis: ## Run integration tests for redis cache.
|
||||
@echo "test backend integration redis tests"
|
||||
$(GO) clean -testcache
|
||||
REDIS_URL=localhost:6379 $(GO) test -run IntegrationRedis -covermode=atomic -timeout=2m $(GO_INTEGRATION_TESTS)
|
||||
|
||||
.PHONY: test-go-integration-memcached
|
||||
test-go-integration-memcached: ## Run integration tests for memcached cache.
|
||||
@echo "test backend integration memcached tests"
|
||||
$(GO) clean -testcache
|
||||
MEMCACHED_HOSTS=localhost:11211 $(GO) test -run IntegrationMemcached -covermode=atomic -timeout=2m $(GO_INTEGRATION_TESTS)
|
||||
$(GO) list './pkg/...' | xargs -I {} sh -c 'GRAFANA_TEST_DB=mysql go test -run Integration -covermode=atomic -timeout=2m {}'
|
||||
|
||||
test-js: ## Run tests for frontend.
|
||||
@echo "test frontend"
|
||||
@@ -218,36 +162,19 @@ shellcheck: $(SH_FILES) ## Run checks for shell scripts.
|
||||
|
||||
##@ Docker
|
||||
|
||||
TAG_SUFFIX=$(if $(WIRE_TAGS)!=oss,-$(WIRE_TAGS))
|
||||
PLATFORM=linux/amd64
|
||||
|
||||
build-docker-full: ## Build Docker image for development.
|
||||
@echo "build docker container"
|
||||
tar -ch . | \
|
||||
docker buildx build - \
|
||||
--platform $(PLATFORM) \
|
||||
--build-arg BINGO=false \
|
||||
--build-arg GO_BUILD_TAGS=$(GO_BUILD_TAGS) \
|
||||
--build-arg WIRE_TAGS=$(WIRE_TAGS) \
|
||||
--build-arg COMMIT_SHA=$$(git rev-parse HEAD) \
|
||||
--build-arg BUILD_BRANCH=$$(git rev-parse --abbrev-ref HEAD) \
|
||||
--tag grafana/grafana$(TAG_SUFFIX):dev \
|
||||
$(DOCKER_BUILD_ARGS)
|
||||
DOCKER_BUILDKIT=1 \
|
||||
docker build \
|
||||
--tag grafana/grafana:dev .
|
||||
|
||||
build-docker-full-ubuntu: ## Build Docker image based on Ubuntu for development.
|
||||
@echo "build docker container"
|
||||
tar -ch . | \
|
||||
docker buildx build - \
|
||||
--platform $(PLATFORM) \
|
||||
--build-arg BINGO=false \
|
||||
--build-arg GO_BUILD_TAGS=$(GO_BUILD_TAGS) \
|
||||
--build-arg WIRE_TAGS=$(WIRE_TAGS) \
|
||||
--build-arg COMMIT_SHA=$$(git rev-parse HEAD) \
|
||||
--build-arg BUILD_BRANCH=$$(git rev-parse --abbrev-ref HEAD) \
|
||||
--build-arg BASE_IMAGE=ubuntu:22.04 \
|
||||
--build-arg GO_IMAGE=golang:1.21.5 \
|
||||
--tag grafana/grafana$(TAG_SUFFIX):dev-ubuntu \
|
||||
$(DOCKER_BUILD_ARGS)
|
||||
DOCKER_BUILDKIT=1 \
|
||||
docker build \
|
||||
--build-arg BASE_IMAGE=ubuntu:20.04 \
|
||||
--build-arg GO_IMAGE=golang:1.20.1 \
|
||||
--tag grafana/grafana:dev-ubuntu .
|
||||
|
||||
##@ Services
|
||||
|
||||
@@ -258,6 +185,8 @@ devenv:
|
||||
@printf 'You have to define sources for this command \nexample: make devenv sources=postgres,openldap\n'
|
||||
else
|
||||
devenv: devenv-down ## Start optional services, e.g. postgres, prometheus, and elasticsearch.
|
||||
$(eval targets := $(shell echo '$(sources)' | tr "," " "))
|
||||
|
||||
@cd devenv; \
|
||||
./create_docker_compose.sh $(targets) || \
|
||||
(rm -rf {docker-compose.yaml,conf.tmp,.env}; exit 1)
|
||||
@@ -290,9 +219,6 @@ devenv-mysql:
|
||||
protobuf: ## Compile protobuf definitions
|
||||
bash scripts/protobuf-check.sh
|
||||
bash pkg/plugins/backendplugin/pluginextensionv2/generate.sh
|
||||
bash pkg/plugins/backendplugin/secretsmanagerplugin/generate.sh
|
||||
bash pkg/services/store/entity/generate.sh
|
||||
bash pkg/infra/grn/generate.sh
|
||||
|
||||
clean: ## Clean up intermediate build artifacts.
|
||||
@echo "cleaning"
|
||||
@@ -318,7 +244,7 @@ scripts/drone/TAGS: $(shell find scripts/drone -name '*.star')
|
||||
etags --lang none --regex="/def \(\w+\)[^:]+:/\1/" --regex="/\s*\(\w+\) =/\1/" $^ -o $@
|
||||
|
||||
format-drone:
|
||||
buildifier --lint=fix -r scripts/drone
|
||||
buildifier -r scripts/drone
|
||||
|
||||
help: ## Display this help.
|
||||
@awk 'BEGIN {FS = ":.*##"; printf "\nUsage:\n make \033[36m<target>\033[0m\n"} /^[a-zA-Z_-]+:.*?##/ { printf " \033[36m%-15s\033[0m %s\n", $$1, $$2 } /^##@/ { printf "\n\033[1m%s\033[0m\n", substr($$0, 5) } ' $(MAKEFILE_LIST)
|
||||
|
||||
@@ -42,8 +42,6 @@ If you're interested in contributing to the Grafana project:
|
||||
- If you have a specific question, check out our [discussion forums](https://community.grafana.com/).
|
||||
- For general discussions, join us on the [official Slack](https://slack.grafana.com) team.
|
||||
|
||||
This project is tested with [BrowserStack](https://www.browserstack.com/)
|
||||
|
||||
## License
|
||||
|
||||
Grafana is distributed under [AGPL-3.0-only](LICENSE). For Apache-2.0 exceptions, see [LICENSING.md](https://github.com/grafana/grafana/blob/HEAD/LICENSING.md).
|
||||
|
||||
10
SECURITY.md
10
SECURITY.md
@@ -1,16 +1,12 @@
|
||||
# Reporting security issues
|
||||
|
||||
This product is in scope for our Bug Bounty Program. To submit a vulnerability report, please visit [Grafana Labs Bug Bounty Policy page](https://github.com/grafana/bugbounty) and follow the instructions provided. Our security team will review your submission and get back to you as soon as possible.
|
||||
|
||||
---
|
||||
|
||||
For any other security issues, please send an email to security@grafana.com
|
||||
If you think you have found a security vulnerability, please send a report to [security@grafana.com](mailto:security@grafana.com). This address can be used for all of Grafana Labs's open source and commercial products (including but not limited to Grafana, Grafana Cloud, Grafana Enterprise, and grafana.com). We can accept only vulnerability reports at this address.
|
||||
|
||||
Please encrypt your message to us; please use our PGP key. The key fingerprint is:
|
||||
|
||||
225E 6A9B BB15 A37E 95EB 6312 C66A 51CC B44C 27E0
|
||||
F988 7BEA 027A 049F AE8E 5CAA D125 8932 BE24 C5CA
|
||||
|
||||
The key is available from [keyserver.ubuntu.com](https://keyserver.ubuntu.com/pks/lookup?search=0x225E6A9BBB15A37E95EB6312C66A51CCB44C27E0&fingerprint=on&op=index).
|
||||
The key is available from [keyserver.ubuntu.com](https://keyserver.ubuntu.com/pks/lookup?search=0xF9887BEA027A049FAE8E5CAAD1258932BE24C5CA&fingerprint=on&op=index).
|
||||
|
||||
Grafana Labs will send you a response indicating the next steps in handling your report. After the initial reply to your report, the security team will keep you informed of the progress towards a fix and full announcement, and may ask for additional information or guidance.
|
||||
|
||||
|
||||
@@ -34,9 +34,6 @@ provisioning = conf/provisioning
|
||||
# Protocol (http, https, h2, socket)
|
||||
protocol = http
|
||||
|
||||
# Minimum TLS version allowed. By default, this value is empty. Accepted values are: TLS1.2, TLS1.3. If nothing is set TLS1.2 would be taken
|
||||
min_tls_version = ""
|
||||
|
||||
# The ip address to bind to, empty will bind to all interfaces
|
||||
http_addr =
|
||||
|
||||
@@ -93,14 +90,6 @@ read_timeout = 0
|
||||
#exampleHeader1 = exampleValue1
|
||||
#exampleHeader2 = exampleValue2
|
||||
|
||||
#################################### GRPC Server #########################
|
||||
[grpc_server]
|
||||
network = "tcp"
|
||||
address = "127.0.0.1:10000"
|
||||
use_tls = false
|
||||
cert_file =
|
||||
key_file =
|
||||
|
||||
#################################### Database ############################
|
||||
[database]
|
||||
# You can configure the database connection by specifying type, host, name, user and password
|
||||
@@ -162,9 +151,6 @@ query_retries = 0
|
||||
# For "sqlite" only. How many times to retry transaction in case of database is locked failures. Default is 5.
|
||||
transaction_retries = 5
|
||||
|
||||
# Set to true to add metrics and tracing for database queries.
|
||||
instrument_queries = false
|
||||
|
||||
#################################### Cache server #############################
|
||||
[remote_cache]
|
||||
# Either "redis", "memcached" or "database" default is "database"
|
||||
@@ -227,9 +213,6 @@ response_limit = 0
|
||||
# Limits the number of rows that Grafana will process from SQL data sources.
|
||||
row_limit = 1000000
|
||||
|
||||
# Sets a custom value for the `User-Agent` header for outgoing data proxy requests. If empty, the default value is `Grafana/<BuildVersion>` (for example `Grafana/9.0.0`).
|
||||
user_agent =
|
||||
|
||||
#################################### Analytics ###########################
|
||||
[analytics]
|
||||
# Server reporting, sends usage counters to stats.grafana.org every 24 hours.
|
||||
@@ -375,12 +358,6 @@ content_security_policy_report_only_template = """script-src 'self' 'unsafe-eval
|
||||
# Controls if old angular plugins are supported or not. This will be disabled by default in future release
|
||||
angular_support_enabled = true
|
||||
|
||||
# The CSRF check will be executed even if the request has no login cookie.
|
||||
csrf_always_check = false
|
||||
|
||||
# Comma-separated list of plugins ids that won't be loaded inside the frontend sandbox
|
||||
disable_frontend_sandbox_for_plugins =
|
||||
|
||||
[security.encryption]
|
||||
# Defines the time-to-live (TTL) for decrypted data encryption keys stored in memory (cache).
|
||||
# Please note that small values may cause performance issues due to a high frequency decryption operations.
|
||||
@@ -425,21 +402,6 @@ default_home_dashboard_path =
|
||||
# Upper limit of data sources that Grafana will return. This limit is a temporary configuration and it will be deprecated when pagination will be introduced on the list data sources API.
|
||||
datasource_limit = 5000
|
||||
|
||||
|
||||
################################### SQL Data Sources #####################
|
||||
[sql_datasources]
|
||||
# Default maximum number of open connections maintained in the connection pool
|
||||
# when connecting to SQL based data sources
|
||||
max_open_conns_default = 100
|
||||
|
||||
# Default maximum number of idle connections maintained in the connection pool
|
||||
# when connecting to SQL based data sources
|
||||
max_idle_conns_default = 100
|
||||
|
||||
# Default maximum connection lifetime used when connecting
|
||||
# to SQL based data sources.
|
||||
max_conn_lifetime_default = 14400
|
||||
|
||||
#################################### Users ###############################
|
||||
[users]
|
||||
# disable user signup / registration
|
||||
@@ -454,7 +416,7 @@ auto_assign_org = true
|
||||
# Set this value to automatically add new users to the provided organization (if auto_assign_org above is set to true)
|
||||
auto_assign_org_id = 1
|
||||
|
||||
# Default role new users will be automatically assigned
|
||||
# Default role new users will be automatically assigned (if auto_assign_org above is set to true)
|
||||
auto_assign_org_role = Viewer
|
||||
|
||||
# Require email validation before sign up completes
|
||||
@@ -490,22 +452,6 @@ user_invite_max_lifetime_duration = 24h
|
||||
# Enter a comma-separated list of usernames to hide them in the Grafana UI. These users are shown to Grafana admins and to themselves.
|
||||
hidden_users =
|
||||
|
||||
[secretscan]
|
||||
# Enable secretscan feature
|
||||
enabled = false
|
||||
|
||||
# Interval to check for token leaks
|
||||
interval = 5m
|
||||
|
||||
# base URL of the grafana token leak check service
|
||||
base_url = https://secret-scanning.grafana.net
|
||||
|
||||
# URL to send outgoing webhooks to in case of detection
|
||||
oncall_url =
|
||||
|
||||
# Whether to revoke the token if a leak is detected or just send a notification
|
||||
revoke = true
|
||||
|
||||
[service_accounts]
|
||||
# When set, Grafana will not allow the creation of tokens with expiry greater than this setting.
|
||||
token_expiration_day_limit =
|
||||
@@ -544,7 +490,6 @@ oauth_auto_login = false
|
||||
oauth_state_cookie_max_age = 600
|
||||
|
||||
# Skip forced assignment of OrgID 1 or 'auto_assign_org_id' for social logins
|
||||
# Deprecated, use skip_org_role_sync option for specific provider instead.
|
||||
oauth_skip_org_role_update_sync = false
|
||||
|
||||
# limit of api_key seconds to live before expiration
|
||||
@@ -559,20 +504,6 @@ sigv4_verbose_logging = false
|
||||
# Set to true to enable Azure authentication option for HTTP-based datasources
|
||||
azure_auth_enabled = false
|
||||
|
||||
# Use email lookup in addition to the unique ID provided by the IdP
|
||||
oauth_allow_insecure_email_lookup = false
|
||||
|
||||
# Set to true to include id of identity as a response header
|
||||
id_response_header_enabled = false
|
||||
|
||||
# Prefix used for the id response header, X-Grafana-Identity-Id
|
||||
id_response_header_prefix = X-Grafana
|
||||
|
||||
# List of identity namespaces to add id response headers for, separated by space.
|
||||
# Available namespaces are user, api-key and service-account.
|
||||
# The header value will encode the namespace ("user:<id>", "api-key:<id>", "service-account:<id>")
|
||||
id_response_header_namespaces = user api-key service-account
|
||||
|
||||
#################################### Anonymous Auth ######################
|
||||
[auth.anonymous]
|
||||
# enable anonymous access
|
||||
@@ -589,8 +520,6 @@ hide_version = false
|
||||
|
||||
#################################### GitHub Auth #########################
|
||||
[auth.github]
|
||||
name = GitHub
|
||||
icon = github
|
||||
enabled = false
|
||||
allow_sign_up = true
|
||||
auto_login = false
|
||||
@@ -606,24 +535,15 @@ allowed_organizations =
|
||||
role_attribute_path =
|
||||
role_attribute_strict = false
|
||||
allow_assign_grafana_admin = false
|
||||
skip_org_role_sync = false
|
||||
tls_skip_verify_insecure = false
|
||||
tls_client_cert =
|
||||
tls_client_key =
|
||||
tls_client_ca =
|
||||
# GitHub OAuth apps does not provide refresh tokens and the access tokens never expires.
|
||||
use_refresh_token = false
|
||||
|
||||
#################################### GitLab Auth #########################
|
||||
[auth.gitlab]
|
||||
name = GitLab
|
||||
icon = gitlab
|
||||
enabled = false
|
||||
allow_sign_up = true
|
||||
auto_login = false
|
||||
client_id = some_id
|
||||
client_secret =
|
||||
scopes = openid email profile
|
||||
scopes = api
|
||||
auth_url = https://gitlab.com/oauth/authorize
|
||||
token_url = https://gitlab.com/oauth/token
|
||||
api_url = https://gitlab.com/api/v4
|
||||
@@ -633,35 +553,21 @@ role_attribute_path =
|
||||
role_attribute_strict = false
|
||||
allow_assign_grafana_admin = false
|
||||
skip_org_role_sync = false
|
||||
tls_skip_verify_insecure = false
|
||||
tls_client_cert =
|
||||
tls_client_key =
|
||||
tls_client_ca =
|
||||
use_pkce = true
|
||||
use_refresh_token = true
|
||||
|
||||
#################################### Google Auth #########################
|
||||
[auth.google]
|
||||
name = Google
|
||||
icon = google
|
||||
enabled = false
|
||||
allow_sign_up = true
|
||||
auto_login = false
|
||||
client_id = some_client_id
|
||||
client_secret =
|
||||
scopes = openid email profile
|
||||
auth_url = https://accounts.google.com/o/oauth2/v2/auth
|
||||
token_url = https://oauth2.googleapis.com/token
|
||||
api_url = https://openidconnect.googleapis.com/v1/userinfo
|
||||
scopes = https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email
|
||||
auth_url = https://accounts.google.com/o/oauth2/auth
|
||||
token_url = https://accounts.google.com/o/oauth2/token
|
||||
api_url = https://www.googleapis.com/oauth2/v1/userinfo
|
||||
allowed_domains =
|
||||
hosted_domain =
|
||||
skip_org_role_sync = false
|
||||
tls_skip_verify_insecure = false
|
||||
tls_client_cert =
|
||||
tls_client_key =
|
||||
tls_client_ca =
|
||||
use_pkce = true
|
||||
use_refresh_token = true
|
||||
|
||||
#################################### Grafana.com Auth ####################
|
||||
# legacy key names (so they work in env variables)
|
||||
@@ -672,11 +578,8 @@ client_id = some_id
|
||||
client_secret =
|
||||
scopes = user:email
|
||||
allowed_organizations =
|
||||
use_refresh_token = false
|
||||
|
||||
[auth.grafana_com]
|
||||
name = Grafana.com
|
||||
icon = grafana
|
||||
enabled = false
|
||||
allow_sign_up = true
|
||||
auto_login = false
|
||||
@@ -685,12 +588,10 @@ client_secret =
|
||||
scopes = user:email
|
||||
allowed_organizations =
|
||||
skip_org_role_sync = false
|
||||
use_refresh_token = false
|
||||
|
||||
#################################### Azure AD OAuth #######################
|
||||
[auth.azuread]
|
||||
name = Microsoft
|
||||
icon = microsoft
|
||||
name = Azure AD
|
||||
enabled = false
|
||||
allow_sign_up = true
|
||||
auto_login = false
|
||||
@@ -701,17 +602,9 @@ auth_url = https://login.microsoftonline.com/<tenant-id>/oauth2/v2.0/authorize
|
||||
token_url = https://login.microsoftonline.com/<tenant-id>/oauth2/v2.0/token
|
||||
allowed_domains =
|
||||
allowed_groups =
|
||||
allowed_organizations =
|
||||
role_attribute_strict = false
|
||||
allow_assign_grafana_admin = false
|
||||
force_use_graph_api = false
|
||||
tls_skip_verify_insecure = false
|
||||
tls_client_cert =
|
||||
tls_client_key =
|
||||
tls_client_ca =
|
||||
use_pkce = true
|
||||
skip_org_role_sync = false
|
||||
use_refresh_token = true
|
||||
|
||||
#################################### Okta OAuth #######################
|
||||
[auth.okta]
|
||||
@@ -732,12 +625,6 @@ role_attribute_path =
|
||||
role_attribute_strict = false
|
||||
allow_assign_grafana_admin = false
|
||||
skip_org_role_sync = false
|
||||
tls_skip_verify_insecure = false
|
||||
tls_client_cert =
|
||||
tls_client_key =
|
||||
tls_client_ca =
|
||||
use_pkce = true
|
||||
use_refresh_token = false
|
||||
|
||||
#################################### Generic OAuth #######################
|
||||
[auth.generic_oauth]
|
||||
@@ -764,7 +651,6 @@ token_url =
|
||||
api_url =
|
||||
teams_url =
|
||||
allowed_domains =
|
||||
allowed_groups =
|
||||
team_ids =
|
||||
allowed_organizations =
|
||||
tls_skip_verify_insecure = false
|
||||
@@ -774,8 +660,6 @@ tls_client_ca =
|
||||
use_pkce = false
|
||||
auth_style =
|
||||
allow_assign_grafana_admin = false
|
||||
skip_org_role_sync = false
|
||||
use_refresh_token = false
|
||||
|
||||
#################################### Basic Auth ##########################
|
||||
[auth.basic]
|
||||
@@ -837,9 +721,6 @@ assume_role_enabled = true
|
||||
# Specify max no of pages to be returned by the ListMetricPages API
|
||||
list_metrics_page_limit = 500
|
||||
|
||||
# Experimental, for use in Grafana Cloud only. Please do not set.
|
||||
external_id =
|
||||
|
||||
#################################### Azure ###############################
|
||||
[azure]
|
||||
# Azure cloud environment where Grafana is hosted
|
||||
@@ -856,41 +737,6 @@ managed_identity_enabled = false
|
||||
# Should be set for user-assigned identity and should be empty for system-assigned identity
|
||||
managed_identity_client_id =
|
||||
|
||||
# Specifies whether Azure AD Workload Identity authentication should be enabled in datasources that support it
|
||||
# For more documentation on Azure AD Workload Identity, review this documentation:
|
||||
# https://azure.github.io/azure-workload-identity/docs/
|
||||
# Disabled by default, needs to be explicitly enabled
|
||||
workload_identity_enabled = false
|
||||
|
||||
# Tenant ID of the Azure AD Workload Identity
|
||||
# Allows to override default tenant ID of the Azure AD identity associated with the Kubernetes service account
|
||||
workload_identity_tenant_id =
|
||||
|
||||
# Client ID of the Azure AD Workload Identity
|
||||
# Allows to override default client ID of the Azure AD identity associated with the Kubernetes service account
|
||||
workload_identity_client_id =
|
||||
|
||||
# Custom path to token file for the Azure AD Workload Identity
|
||||
# Allows to set a custom path to the projected service account token file
|
||||
workload_identity_token_file =
|
||||
|
||||
# Specifies whether user identity authentication (on behalf of currently signed-in user) should be enabled in datasources
|
||||
# that support it (requires AAD authentication)
|
||||
# Disabled by default, needs to be explicitly enabled
|
||||
user_identity_enabled = false
|
||||
|
||||
# Override token URL for Azure Active Directory
|
||||
# By default is the same as token URL configured for AAD authentication settings
|
||||
user_identity_token_url =
|
||||
|
||||
# Override ADD application ID which would be used to exchange users token to an access token for the datasource
|
||||
# By default is the same as used in AAD authentication or can be set to another application (for OBO flow)
|
||||
user_identity_client_id =
|
||||
|
||||
# Override the AAD application client secret
|
||||
# By default is the same as used in AAD authentication or can be set to another application (for OBO flow)
|
||||
user_identity_client_secret =
|
||||
|
||||
#################################### Role-based Access Control ###########
|
||||
[rbac]
|
||||
# If enabled, cache permissions in a in memory cache
|
||||
@@ -932,9 +778,6 @@ level = info
|
||||
# optional settings to set different levels for specific loggers. Ex filters = sqlstore:debug
|
||||
filters =
|
||||
|
||||
# Set the default error message shown to users. This message is displayed instead of sensitive backend errors which should be obfuscated.
|
||||
user_facing_default_error = "please inspect Grafana server log for details"
|
||||
|
||||
# For "console" mode only
|
||||
[log.console]
|
||||
level =
|
||||
@@ -981,12 +824,21 @@ facility =
|
||||
tag =
|
||||
|
||||
[log.frontend]
|
||||
# Should Faro javascript agent be initialized
|
||||
# Should Sentry javascript agent be initialized
|
||||
enabled = false
|
||||
|
||||
# Defines which provider to use sentry or grafana
|
||||
provider = sentry
|
||||
|
||||
# Sentry DSN if you want to send events to Sentry.
|
||||
sentry_dsn =
|
||||
|
||||
# Custom HTTP endpoint to send events to. Default will log the events to stdout.
|
||||
custom_endpoint =
|
||||
|
||||
# Rate of events to be reported to Sentry between 0 (none) and 1 (all), float
|
||||
sample_rate = 1.0
|
||||
|
||||
# Requests per second limit enforced per an extended period, for Grafana backend log ingestion endpoint (/log).
|
||||
log_endpoint_requests_per_second_limit = 3
|
||||
|
||||
@@ -1049,9 +901,6 @@ global_alert_rule = -1
|
||||
# global limit of files uploaded to the SQL DB
|
||||
global_file = 1000
|
||||
|
||||
# global limit of correlations
|
||||
global_correlations = -1
|
||||
|
||||
#################################### Unified Alerting ####################
|
||||
[unified_alerting]
|
||||
# Enable the Unified Alerting sub-system and interface. When enabled we'll migrate all of your alert rules and notification channels to the new system. New alert rules will be created and your notification channels will be converted into an Alertmanager configuration. Previous data is preserved to enable backwards compatibility but new data is removed when switching. When this configuration section and flag are not defined, the state is defined at runtime. See the documentation for more details.
|
||||
@@ -1068,29 +917,6 @@ admin_config_poll_interval = 60s
|
||||
# The interval string is a possibly signed sequence of decimal numbers, followed by a unit suffix (ms, s, m, h, d), e.g. 30s or 1m.
|
||||
alertmanager_config_poll_interval = 60s
|
||||
|
||||
# The redis server address that should be connected to.
|
||||
ha_redis_address =
|
||||
|
||||
# The username that should be used to authenticate with the redis server.
|
||||
ha_redis_username =
|
||||
|
||||
# The password that should be used to authenticate with the redis server.
|
||||
ha_redis_password =
|
||||
|
||||
# The redis database, by default it's 0.
|
||||
ha_redis_db =
|
||||
|
||||
# A prefix that is used for every key or channel that is created on the redis server
|
||||
# as part of HA for alerting.
|
||||
ha_redis_prefix =
|
||||
|
||||
# The name of the cluster peer that will be used as identifier. If none is
|
||||
# provided, a random one will be generated.
|
||||
ha_redis_peer_name =
|
||||
|
||||
# The maximum number of simultaneous redis connections.
|
||||
ha_redis_max_conns = 5
|
||||
|
||||
# Listen address/hostname and port to receive unified alerting messages for other Grafana instances. The port is used for both TCP and UDP. It is assumed other Grafana instances are also running on the same port.
|
||||
ha_listen_address = "0.0.0.0:9094"
|
||||
|
||||
@@ -1106,11 +932,6 @@ ha_peers = ""
|
||||
# The interval string is a possibly signed sequence of decimal numbers, followed by a unit suffix (ms, s, m, h, d), e.g. 30s or 1m.
|
||||
ha_peer_timeout = 15s
|
||||
|
||||
# The label is an optional string to include on each packet and stream.
|
||||
# It uniquely identifies the cluster and prevents cross-communication
|
||||
# issues when sending gossip messages in an enviromenet with multiple clusters.
|
||||
ha_label =
|
||||
|
||||
# The interval between sending gossip messages. By lowering this value (more frequent) gossip messages are propagated
|
||||
# across cluster more quickly at the expense of increased bandwidth usage.
|
||||
# The interval string is a possibly signed sequence of decimal numbers, followed by a unit suffix (ms, s, m, h, d), e.g. 30s or 1m.
|
||||
@@ -1128,18 +949,13 @@ execute_alerts = true
|
||||
# The timeout string is a possibly signed sequence of decimal numbers, followed by a unit suffix (ms, s, m, h, d), e.g. 30s or 1m.
|
||||
evaluation_timeout = 30s
|
||||
|
||||
# Number of times we'll attempt to evaluate an alert rule before giving up on that evaluation. The default value is 1.
|
||||
max_attempts = 1
|
||||
# Number of times we'll attempt to evaluate an alert rule before giving up on that evaluation. This option has a legacy version in the `[alerting]` section that takes precedence.
|
||||
max_attempts = 3
|
||||
|
||||
# Minimum interval to enforce between rule evaluations. Rules will be adjusted if they are less than this value or if they are not multiple of the scheduler interval (10s). Higher values can help with resource management as we'll schedule fewer evaluations over time. This option has a legacy version in the `[alerting]` section that takes precedence.
|
||||
# The interval string is a possibly signed sequence of decimal numbers, followed by a unit suffix (ms, s, m, h, d), e.g. 30s or 1m.
|
||||
min_interval = 10s
|
||||
|
||||
# This is an experimental option to add parallelization to saving alert states in the database.
|
||||
# It configures the maximum number of concurrent queries per rule evaluated. The default value is 1
|
||||
# (concurrent queries per rule disabled).
|
||||
max_state_save_concurrency = 1
|
||||
|
||||
[unified_alerting.screenshots]
|
||||
# Enable screenshots in notifications. You must have either installed the Grafana image rendering
|
||||
# plugin, or set up Grafana to use a remote rendering service.
|
||||
@@ -1172,54 +988,6 @@ disabled_labels =
|
||||
# Enable the state history functionality in Unified Alerting. The previous states of alert rules will be visible in panels and in the UI.
|
||||
enabled = true
|
||||
|
||||
# Select which pluggable state history backend to use. Either "annotations", "loki", or "multiple"
|
||||
# "loki" writes state history to an external Loki instance. "multiple" allows history to be written to multiple backends at once.
|
||||
# Defaults to "annotations".
|
||||
backend =
|
||||
|
||||
# For "multiple" only.
|
||||
# Indicates the main backend used to serve state history queries.
|
||||
# Either "annotations" or "loki"
|
||||
primary =
|
||||
|
||||
# For "multiple" only.
|
||||
# Comma-separated list of additional backends to write state history data to.
|
||||
secondaries =
|
||||
|
||||
# For "loki" only.
|
||||
# URL of the external Loki instance.
|
||||
# Either "loki_remote_url", or both of "loki_remote_read_url" and "loki_remote_write_url" is required for the "loki" backend.
|
||||
loki_remote_url =
|
||||
|
||||
# For "loki" only.
|
||||
# URL of the external Loki's read path. To be used in configurations where Loki has separated read and write URLs.
|
||||
# Either "loki_remote_url", or both of "loki_remote_read_url" and "loki_remote_write_url" is required for the "loki" backend.
|
||||
loki_remote_read_url =
|
||||
|
||||
# For "loki" only.
|
||||
# URL of the external Loki's write path. To be used in configurations where Loki has separated read and write URLs.
|
||||
# Either "loki_remote_url", or both of "loki_remote_read_url" and "loki_remote_write_url" is required for the "loki" backend.
|
||||
loki_remote_write_url =
|
||||
|
||||
# For "loki" only.
|
||||
# Optional tenant ID to attach to requests sent to Loki.
|
||||
loki_tenant_id =
|
||||
|
||||
# For "loki" only.
|
||||
# Optional username for basic authentication on requests sent to Loki. Can be left blank to disable basic auth.
|
||||
loki_basic_auth_username =
|
||||
|
||||
# For "loki" only.
|
||||
# Optional password for basic authentication on requests sent to Loki. Can be left blank.
|
||||
loki_basic_auth_password =
|
||||
|
||||
[unified_alerting.state_history.external_labels]
|
||||
# Optional extra labels to attach to outbound state history records or log streams.
|
||||
# Any number of label key-value-pairs can be provided.
|
||||
#
|
||||
# ex.
|
||||
# mylabelkey = mylabelvalue
|
||||
|
||||
#################################### Alerting ############################
|
||||
[alerting]
|
||||
# Enable the legacy alerting sub-system and interface. If Unified Alerting is already enabled and you try to go back to legacy alerting, all data that is part of Unified Alerting will be deleted. When this configuration section and flag are not defined, the state is defined at runtime. See the documentation for more details.
|
||||
@@ -1302,16 +1070,6 @@ enabled = true
|
||||
# Enable the Profile section
|
||||
enabled = true
|
||||
|
||||
#################################### News #############################
|
||||
[news]
|
||||
# Enable the news feed section
|
||||
news_feed_enabled = true
|
||||
|
||||
#################################### Query #############################
|
||||
[query]
|
||||
# Set the number of data source queries that can be executed concurrently in mixed queries. Default is the number of CPUs.
|
||||
concurrent_query_limit =
|
||||
|
||||
#################################### Query History #############################
|
||||
[query_history]
|
||||
# Enable the Query history
|
||||
@@ -1324,8 +1082,6 @@ enabled = true
|
||||
interval_seconds = 10
|
||||
# Disable total stats (stat_totals_*) metrics to be generated
|
||||
disable_total_stats = false
|
||||
# The interval at which the total stats collector will update the stats. Default is 1800 seconds.
|
||||
total_stats_collector_interval_seconds = 1800
|
||||
|
||||
#If both are set, basic auth will be required for the metrics endpoints.
|
||||
basic_auth_username =
|
||||
@@ -1465,13 +1221,6 @@ plugin_admin_external_manage_enabled = false
|
||||
plugin_catalog_url = https://grafana.com/grafana/plugins/
|
||||
# Enter a comma-separated list of plugin identifiers to hide in the plugin catalog.
|
||||
plugin_catalog_hidden_plugins =
|
||||
# Log all backend requests for core and external plugins.
|
||||
log_backend_requests = false
|
||||
# Disable download of the public key for verifying plugin signature.
|
||||
public_key_retrieval_disabled = false
|
||||
# Force download of the public key for verifying plugin signature on startup. If disabled, the public key will be retrieved every 10 days.
|
||||
# Requires public_key_retrieval_disabled to be false to have any effect.
|
||||
public_key_retrieval_on_startup = false
|
||||
|
||||
#################################### Grafana Live ##########################################
|
||||
[live]
|
||||
@@ -1608,14 +1357,25 @@ default_baselayer_config =
|
||||
# Enable or disable loading other base map layers
|
||||
enable_custom_baselayers = true
|
||||
|
||||
#################################### Support Bundles #####################################
|
||||
[support_bundles]
|
||||
# Enable support bundle creation (default: true)
|
||||
enabled = true
|
||||
# Only server admins can generate and view support bundles (default: true)
|
||||
server_admin_only = true
|
||||
# If set, bundles will be encrypted with the provided public keys separated by whitespace
|
||||
public_keys = ""
|
||||
#################################### Dashboard previews #####################################
|
||||
|
||||
[dashboard_previews.crawler]
|
||||
# Number of dashboards rendered in parallel. Default is 6.
|
||||
thread_count =
|
||||
|
||||
# Timeout passed down to the Image Renderer plugin. It is used in two separate places within a single rendering request:
|
||||
# First during the initial navigation to the dashboard and then when waiting for all the panels to load. Default is 20s.
|
||||
# This setting should be expressed as a duration. Examples: 10s (seconds), 1m (minutes).
|
||||
rendering_timeout =
|
||||
|
||||
# Maximum duration of a single crawl. Default is 1h.
|
||||
# This setting should be expressed as a duration. Examples: 10s (seconds), 1m (minutes).
|
||||
max_crawl_duration =
|
||||
|
||||
# Minimum interval between two subsequent scheduler runs. Default is 12h.
|
||||
# This setting should be expressed as a duration. Examples: 10s (seconds), 1m (minutes).
|
||||
scheduler_interval =
|
||||
|
||||
|
||||
#################################### Storage ################################################
|
||||
|
||||
@@ -1641,6 +1401,7 @@ index_update_interval = 10s
|
||||
|
||||
|
||||
# Move an app plugin referenced by its id (including all its pages) to a specific navigation section
|
||||
# Dependencies: needs the `topnav` feature to be enabled
|
||||
# Format: <Plugin ID> = <Section ID> <Sort Weight>
|
||||
[navigation.app_sections]
|
||||
|
||||
@@ -1658,13 +1419,3 @@ client_cert =
|
||||
server_name =
|
||||
# The address of the socks5 proxy datasources should connect to
|
||||
proxy_address =
|
||||
# Determines if the secure socks proxy should be shown on the datasources page, defaults to true if the feature is enabled
|
||||
show_ui = true
|
||||
|
||||
################################## Feature Management ##############################################
|
||||
[feature_management]
|
||||
# Hides specific feature toggles from the feature management page
|
||||
hidden_toggles =
|
||||
|
||||
# Disables updating specific feature toggles in the feature management page
|
||||
read_only_toggles =
|
||||
@@ -11,11 +11,6 @@ port = 389
|
||||
use_ssl = false
|
||||
# If set to true, use LDAP with STARTTLS instead of LDAPS
|
||||
start_tls = false
|
||||
# The value of an accepted TLS cipher. By default, this value is empty. Example value: ["TLS_AES_256_GCM_SHA384"])
|
||||
# For a complete list of supported ciphers and TLS versions, refer to: https://go.dev/src/crypto/tls/cipher_suites.go
|
||||
tls_ciphers = []
|
||||
# This is the minimum TLS version allowed. By default, this value is empty. Accepted values are: TLS1.1, TLS1.2, TLS1.3.
|
||||
min_tls_version = ""
|
||||
# set to true if you want to skip ssl cert validation
|
||||
ssl_skip_verify = false
|
||||
# set to the path to your root CA certificate or leave unset to use system defaults
|
||||
|
||||
270
conf/sample.ini
270
conf/sample.ini
@@ -34,9 +34,6 @@
|
||||
# Protocol (http, https, h2, socket)
|
||||
;protocol = http
|
||||
|
||||
# This is the minimum TLS version allowed. By default, this value is empty. Accepted values are: TLS1.2, TLS1.3. If nothing is set TLS1.2 would be taken
|
||||
;min_tls_version = ""
|
||||
|
||||
# The ip address to bind to, empty will bind to all interfaces
|
||||
;http_addr =
|
||||
|
||||
@@ -94,14 +91,6 @@
|
||||
#exampleHeader1 = exampleValue1
|
||||
#exampleHeader2 = exampleValue2
|
||||
|
||||
#################################### GRPC Server #########################
|
||||
;[grpc_server]
|
||||
;network = "tcp"
|
||||
;address = "127.0.0.1:10000"
|
||||
;use_tls = false
|
||||
;cert_file =
|
||||
;key_file =
|
||||
|
||||
#################################### Database ####################################
|
||||
[database]
|
||||
# You can configure the database connection by specifying type, host, name, user and password
|
||||
@@ -164,9 +153,6 @@
|
||||
# For "sqlite" only. How many times to retry transaction in case of database is locked failures. Default is 5.
|
||||
;transaction_retries = 5
|
||||
|
||||
# Set to true to add metrics and tracing for database queries.
|
||||
;instrument_queries = false
|
||||
|
||||
################################### Data sources #########################
|
||||
[datasources]
|
||||
# Upper limit of data sources that Grafana will return. This limit is a temporary configuration and it will be deprecated when pagination will be introduced on the list data sources API.
|
||||
@@ -234,9 +220,6 @@
|
||||
# Limits the number of rows that Grafana will process from SQL data sources.
|
||||
;row_limit = 1000000
|
||||
|
||||
# Sets a custom value for the `User-Agent` header for outgoing data proxy requests. If empty, the default value is `Grafana/<BuildVersion>` (for example `Grafana/9.0.0`).
|
||||
;user_agent =
|
||||
|
||||
#################################### Analytics ####################################
|
||||
[analytics]
|
||||
# Server reporting, sends usage counters to stats.grafana.org every 24 hours.
|
||||
@@ -381,12 +364,6 @@
|
||||
# List of allowed headers to be set by the user, separated by spaces. Suggested to use for if authentication lives behind reverse proxies.
|
||||
;csrf_additional_headers =
|
||||
|
||||
# The CSRF check will be executed even if the request has no login cookie.
|
||||
;csrf_always_check = false
|
||||
|
||||
# Comma-separated list of plugins ids that won't be loaded inside the frontend sandbox
|
||||
;disable_frontend_sandbox_for_plugins =
|
||||
|
||||
[security.encryption]
|
||||
# Defines the time-to-live (TTL) for decrypted data encryption keys stored in memory (cache).
|
||||
# Please note that small values may cause performance issues due to a high frequency decryption operations.
|
||||
@@ -439,7 +416,7 @@
|
||||
# Set this value to automatically add new users to the provided organization (if auto_assign_org above is set to true)
|
||||
;auto_assign_org_id = 1
|
||||
|
||||
# Default role new users will be automatically assigned
|
||||
# Default role new users will be automatically assigned (if auto_assign_org above is set to true)
|
||||
;auto_assign_org_role = Viewer
|
||||
|
||||
# Require email validation before sign up completes
|
||||
@@ -475,22 +452,6 @@
|
||||
# Enter a comma-separated list of users login to hide them in the Grafana UI. These users are shown to Grafana admins and themselves.
|
||||
; hidden_users =
|
||||
|
||||
[secretscan]
|
||||
# Enable secretscan feature
|
||||
;enabled = false
|
||||
|
||||
# Interval to check for token leaks
|
||||
;interval = 5m
|
||||
|
||||
# base URL of the grafana token leak check service
|
||||
;base_url = https://secret-scanning.grafana.net
|
||||
|
||||
# URL to send outgoing webhooks to in case of detection
|
||||
;oncall_url =
|
||||
|
||||
# Whether to revoke the token if a leak is detected or just send a notification
|
||||
;revoke = true
|
||||
|
||||
[service_accounts]
|
||||
# Service account maximum expiration date in days.
|
||||
# When set, Grafana will not allow the creation of tokens with expiry greater than this setting.
|
||||
@@ -530,7 +491,6 @@
|
||||
;oauth_state_cookie_max_age = 600
|
||||
|
||||
# Skip forced assignment of OrgID 1 or 'auto_assign_org_id' for social logins
|
||||
# Deprecated, use skip_org_role_sync option for specific provider instead.
|
||||
;oauth_skip_org_role_update_sync = false
|
||||
|
||||
# limit of api_key seconds to live before expiration
|
||||
@@ -548,20 +508,6 @@
|
||||
# Set to skip the organization role from JWT login and use system's role assignment instead.
|
||||
; skip_org_role_sync = false
|
||||
|
||||
# Use email lookup in addition to the unique ID provided by the IdP
|
||||
;oauth_allow_insecure_email_lookup = false
|
||||
|
||||
# Set to true to include id of identity as a response header
|
||||
;id_response_header_enabled = false
|
||||
|
||||
# Prefix used for the id response header, X-Grafana-Identity-Id
|
||||
;id_response_header_prefix = X-Grafana
|
||||
|
||||
# List of identity namespaces to add id response headers for, separated by space.
|
||||
# Available namespaces are user, api-key and service-account.
|
||||
# The header value will encode the namespace ("user:<id>", "api-key:<id>", "service-account:<id>")
|
||||
;id_response_header_namespaces = user api-key service-account
|
||||
|
||||
#################################### Anonymous Auth ######################
|
||||
[auth.anonymous]
|
||||
# enable anonymous access
|
||||
@@ -578,8 +524,6 @@
|
||||
|
||||
#################################### GitHub Auth ##########################
|
||||
[auth.github]
|
||||
;name = GitHub
|
||||
;icon = github
|
||||
;enabled = false
|
||||
;allow_sign_up = true
|
||||
;auto_login = false
|
||||
@@ -595,18 +539,15 @@
|
||||
;role_attribute_path =
|
||||
;role_attribute_strict = false
|
||||
;allow_assign_grafana_admin = false
|
||||
;skip_org_role_sync = false
|
||||
|
||||
#################################### GitLab Auth #########################
|
||||
[auth.gitlab]
|
||||
;name = GitLab
|
||||
;icon = gitlab
|
||||
;enabled = false
|
||||
;allow_sign_up = true
|
||||
;auto_login = false
|
||||
;client_id = some_id
|
||||
;client_secret = some_secret
|
||||
;scopes = openid email profile
|
||||
;scopes = api
|
||||
;auth_url = https://gitlab.com/oauth/authorize
|
||||
;token_url = https://gitlab.com/oauth/token
|
||||
;api_url = https://gitlab.com/api/v4
|
||||
@@ -616,34 +557,24 @@
|
||||
;role_attribute_strict = false
|
||||
;allow_assign_grafana_admin = false
|
||||
;skip_org_role_sync = false
|
||||
;tls_skip_verify_insecure = false
|
||||
;tls_client_cert =
|
||||
;tls_client_key =
|
||||
;tls_client_ca =
|
||||
;use_pkce = true
|
||||
|
||||
#################################### Google Auth ##########################
|
||||
[auth.google]
|
||||
;name = Google
|
||||
;icon = google
|
||||
;enabled = false
|
||||
;allow_sign_up = true
|
||||
;auto_login = false
|
||||
;client_id = some_client_id
|
||||
;client_secret = some_client_secret
|
||||
;scopes = openid email profile
|
||||
;auth_url = https://accounts.google.com/o/oauth2/v2/auth
|
||||
;token_url = https://oauth2.googleapis.com/token
|
||||
;api_url = https://openidconnect.googleapis.com/v1/userinfo
|
||||
;scopes = https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email
|
||||
;auth_url = https://accounts.google.com/o/oauth2/auth
|
||||
;token_url = https://accounts.google.com/o/oauth2/token
|
||||
;api_url = https://www.googleapis.com/oauth2/v1/userinfo
|
||||
;allowed_domains =
|
||||
;hosted_domain =
|
||||
;skip_org_role_sync = false
|
||||
;use_pkce = true
|
||||
|
||||
#################################### Grafana.com Auth ####################
|
||||
[auth.grafana_com]
|
||||
;name = Grafana.com
|
||||
;icon = grafana
|
||||
;enabled = false
|
||||
;allow_sign_up = true
|
||||
;auto_login = false
|
||||
@@ -655,8 +586,7 @@
|
||||
|
||||
#################################### Azure AD OAuth #######################
|
||||
[auth.azuread]
|
||||
;name = Microsoft
|
||||
;icon = microsoft
|
||||
;name = Azure AD
|
||||
;enabled = false
|
||||
;allow_sign_up = true
|
||||
;auto_login = false
|
||||
@@ -667,10 +597,8 @@
|
||||
;token_url = https://login.microsoftonline.com/<tenant-id>/oauth2/v2.0/token
|
||||
;allowed_domains =
|
||||
;allowed_groups =
|
||||
;allowed_organizations =
|
||||
;role_attribute_strict = false
|
||||
;allow_assign_grafana_admin = false
|
||||
;use_pkce = true
|
||||
# prevent synchronizing users organization roles
|
||||
;skip_org_role_sync = false
|
||||
|
||||
@@ -692,7 +620,6 @@
|
||||
;role_attribute_strict = false
|
||||
;allow_assign_grafana_admin = false
|
||||
;skip_org_role_sync = false
|
||||
;use_pkce = true
|
||||
|
||||
#################################### Generic OAuth ##########################
|
||||
[auth.generic_oauth]
|
||||
@@ -786,12 +713,6 @@
|
||||
# If true, assume role will be enabled for all AWS authentication providers that are specified in aws_auth_providers
|
||||
; assume_role_enabled = true
|
||||
|
||||
# Specify max no of pages to be returned by the ListMetricPages API
|
||||
; list_metrics_page_limit = 500
|
||||
|
||||
# Experimental, for use in Grafana Cloud only. Please do not set.
|
||||
; external_id =
|
||||
|
||||
#################################### Azure ###############################
|
||||
[azure]
|
||||
# Azure cloud environment where Grafana is hosted
|
||||
@@ -808,41 +729,6 @@
|
||||
# Should be set for user-assigned identity and should be empty for system-assigned identity
|
||||
;managed_identity_client_id =
|
||||
|
||||
# Specifies whether Azure AD Workload Identity authentication should be enabled in datasources that support it
|
||||
# For more documentation on Azure AD Workload Identity, review this documentation:
|
||||
# https://azure.github.io/azure-workload-identity/docs/
|
||||
# Disabled by default, needs to be explicitly enabled
|
||||
;workload_identity_enabled = false
|
||||
|
||||
# Tenant ID of the Azure AD Workload Identity
|
||||
# Allows to override default tenant ID of the Azure AD identity associated with the Kubernetes service account
|
||||
;workload_identity_tenant_id =
|
||||
|
||||
# Client ID of the Azure AD Workload Identity
|
||||
# Allows to override default client ID of the Azure AD identity associated with the Kubernetes service account
|
||||
;workload_identity_client_id =
|
||||
|
||||
# Custom path to token file for the Azure AD Workload Identity
|
||||
# Allows to set a custom path to the projected service account token file
|
||||
;workload_identity_token_file =
|
||||
|
||||
# Specifies whether user identity authentication (on behalf of currently signed-in user) should be enabled in datasources
|
||||
# that support it (requires AAD authentication)
|
||||
# Disabled by default, needs to be explicitly enabled
|
||||
;user_identity_enabled = false
|
||||
|
||||
# Override token URL for Azure Active Directory
|
||||
# By default is the same as token URL configured for AAD authentication settings
|
||||
;user_identity_token_url =
|
||||
|
||||
# Override ADD application ID which would be used to exchange users token to an access token for the datasource
|
||||
# By default is the same as used in AAD authentication or can be set to another application (for OBO flow)
|
||||
;user_identity_client_id =
|
||||
|
||||
# Override the AAD application client secret
|
||||
# By default is the same as used in AAD authentication or can be set to another application (for OBO flow)
|
||||
;user_identity_client_secret =
|
||||
|
||||
#################################### Role-based Access Control ###########
|
||||
[rbac]
|
||||
;permission_cache = true
|
||||
@@ -885,9 +771,6 @@
|
||||
# optional settings to set different levels for specific loggers. Ex filters = sqlstore:debug
|
||||
;filters =
|
||||
|
||||
# Set the default error message shown to users. This message is displayed instead of sensitive backend errors which should be obfuscated. Default is the same as the sample value.
|
||||
;user_facing_default_error = "please inspect Grafana server log for details"
|
||||
|
||||
# For "console" mode only
|
||||
[log.console]
|
||||
;level =
|
||||
@@ -934,11 +817,20 @@
|
||||
;tag =
|
||||
|
||||
[log.frontend]
|
||||
# Should Faro javascript agent be initialized
|
||||
# Should Sentry javascript agent be initialized
|
||||
;enabled = false
|
||||
|
||||
# Custom HTTP endpoint to send events to. Default will log the events to stdout.
|
||||
;custom_endpoint = /log-grafana-javascript-agent
|
||||
# Defines which provider to use, default is Sentry
|
||||
;provider = sentry
|
||||
|
||||
# Sentry DSN if you want to send events to Sentry.
|
||||
;sentry_dsn =
|
||||
|
||||
# Custom HTTP endpoint to send events captured by the Sentry agent to. Default will log the events to stdout.
|
||||
;custom_endpoint = /log
|
||||
|
||||
# Rate of events to be reported between 0 (none) and 1 (all), float
|
||||
;sample_rate = 1.0
|
||||
|
||||
# Requests per second limit enforced an extended period, for Grafana backend log ingestion endpoint (/log).
|
||||
;log_endpoint_requests_per_second_limit = 3
|
||||
@@ -999,9 +891,6 @@
|
||||
# global limit of alerts
|
||||
;global_alert_rule = -1
|
||||
|
||||
# global limit of correlations
|
||||
; global_correlations = -1
|
||||
|
||||
#################################### Unified Alerting ####################
|
||||
[unified_alerting]
|
||||
#Enable the Unified Alerting sub-system and interface. When enabled we'll migrate all of your alert rules and notification channels to the new system. New alert rules will be created and your notification channels will be converted into an Alertmanager configuration. Previous data is preserved to enable backwards compatibility but new data is removed.```
|
||||
@@ -1018,26 +907,6 @@
|
||||
# The interval string is a possibly signed sequence of decimal numbers, followed by a unit suffix (ms, s, m, h, d), e.g. 30s or 1m.
|
||||
;alertmanager_config_poll_interval = 60s
|
||||
|
||||
# The redis server address that should be connected to.
|
||||
;ha_redis_address =
|
||||
|
||||
# The username that should be used to authenticate with the redis server.
|
||||
;ha_redis_username =
|
||||
|
||||
# The password that should be used to authenticate with the redis server.
|
||||
;ha_redis_password =
|
||||
|
||||
# The redis database, by default it's 0.
|
||||
;ha_redis_db =
|
||||
|
||||
# A prefix that is used for every key or channel that is created on the redis server
|
||||
# as part of HA for alerting.
|
||||
;ha_redis_prefix =
|
||||
|
||||
# The name of the cluster peer that will be used as identifier. If none is
|
||||
# provided, a random one will be generated.
|
||||
;ha_redis_peer_name =
|
||||
|
||||
# Listen address/hostname and port to receive unified alerting messages for other Grafana instances. The port is used for both TCP and UDP. It is assumed other Grafana instances are also running on the same port. The default value is `0.0.0.0:9094`.
|
||||
;ha_listen_address = "0.0.0.0:9094"
|
||||
|
||||
@@ -1053,11 +922,6 @@
|
||||
# The interval string is a possibly signed sequence of decimal numbers, followed by a unit suffix (ms, s, m, h, d), e.g. 30s or 1m.
|
||||
;ha_peer_timeout = "15s"
|
||||
|
||||
# The label is an optional string to include on each packet and stream.
|
||||
# It uniquely identifies the cluster and prevents cross-communication
|
||||
# issues when sending gossip messages in an enviromenet with multiple clusters.
|
||||
;ha_label =
|
||||
|
||||
# The interval between sending gossip messages. By lowering this value (more frequent) gossip messages are propagated
|
||||
# across cluster more quickly at the expense of increased bandwidth usage.
|
||||
# The interval string is a possibly signed sequence of decimal numbers, followed by a unit suffix (ms, s, m, h, d), e.g. 30s or 1m.
|
||||
@@ -1075,8 +939,8 @@
|
||||
# The timeout string is a possibly signed sequence of decimal numbers, followed by a unit suffix (ms, s, m, h, d), e.g. 30s or 1m.
|
||||
;evaluation_timeout = 30s
|
||||
|
||||
# Number of times we'll attempt to evaluate an alert rule before giving up on that evaluation. The default value is 1.
|
||||
;max_attempts = 1
|
||||
# Number of times we'll attempt to evaluate an alert rule before giving up on that evaluation. This option has a legacy version in the `[alerting]` section that takes precedence.
|
||||
;max_attempts = 3
|
||||
|
||||
# Minimum interval to enforce between rule evaluations. Rules will be adjusted if they are less than this value or if they are not multiple of the scheduler interval (10s). Higher values can help with resource management as we'll schedule fewer evaluations over time. This option has a legacy version in the `[alerting]` section that takes precedence.
|
||||
# The interval string is a possibly signed sequence of decimal numbers, followed by a unit suffix (ms, s, m, h, d), e.g. 30s or 1m.
|
||||
@@ -1087,56 +951,6 @@
|
||||
# For example: `disabled_labels=grafana_folder`
|
||||
;disabled_labels =
|
||||
|
||||
[unified_alerting.state_history]
|
||||
# Enable the state history functionality in Unified Alerting. The previous states of alert rules will be visible in panels and in the UI.
|
||||
; enabled = true
|
||||
|
||||
# Select which pluggable state history backend to use. Either "annotations", "loki", or "multiple"
|
||||
# "loki" writes state history to an external Loki instance. "multiple" allows history to be written to multiple backends at once.
|
||||
# Defaults to "annotations".
|
||||
; backend = "multiple"
|
||||
|
||||
# For "multiple" only.
|
||||
# Indicates the main backend used to serve state history queries.
|
||||
# Either "annotations" or "loki"
|
||||
; primary = "loki"
|
||||
|
||||
# For "multiple" only.
|
||||
# Comma-separated list of additional backends to write state history data to.
|
||||
; secondaries = "annotations"
|
||||
|
||||
# For "loki" only.
|
||||
# URL of the external Loki instance.
|
||||
# Either "loki_remote_url", or both of "loki_remote_read_url" and "loki_remote_write_url" is required for the "loki" backend.
|
||||
; loki_remote_url = "http://loki:3100"
|
||||
|
||||
# For "loki" only.
|
||||
# URL of the external Loki's read path. To be used in configurations where Loki has separated read and write URLs.
|
||||
# Either "loki_remote_url", or both of "loki_remote_read_url" and "loki_remote_write_url" is required for the "loki" backend.
|
||||
; loki_remote_read_url = "http://loki-querier:3100"
|
||||
|
||||
# For "loki" only.
|
||||
# URL of the external Loki's write path. To be used in configurations where Loki has separated read and write URLs.
|
||||
# Either "loki_remote_url", or both of "loki_remote_read_url" and "loki_remote_write_url" is required for the "loki" backend.
|
||||
; loki_remote_write_url = "http://loki-distributor:3100"
|
||||
|
||||
# For "loki" only.
|
||||
# Optional tenant ID to attach to requests sent to Loki.
|
||||
; loki_tenant_id = 123
|
||||
|
||||
# For "loki" only.
|
||||
# Optional username for basic authentication on requests sent to Loki. Can be left blank to disable basic auth.
|
||||
; loki_basic_auth_username = "myuser"
|
||||
|
||||
# For "loki" only.
|
||||
# Optional password for basic authentication on requests sent to Loki. Can be left blank.
|
||||
; loki_basic_auth_password = "mypass"
|
||||
|
||||
[unified_alerting.state_history.external_labels]
|
||||
# Optional extra labels to attach to outbound state history records or log streams.
|
||||
# Any number of label key-value-pairs can be provided.
|
||||
; mylabelkey = mylabelvalue
|
||||
|
||||
#################################### Alerting ############################
|
||||
[alerting]
|
||||
# Disable legacy alerting engine & UI features
|
||||
@@ -1219,16 +1033,6 @@
|
||||
# Enable the Profile section
|
||||
;enabled = true
|
||||
|
||||
#################################### News #############################
|
||||
[news]
|
||||
# Enable the news feed section
|
||||
; news_feed_enabled = true
|
||||
|
||||
#################################### Query #############################
|
||||
[query]
|
||||
# Set the number of data source queries that can be executed concurrently in mixed queries. Default is the number of CPUs.
|
||||
;concurrent_query_limit =
|
||||
|
||||
#################################### Query History #############################
|
||||
[query_history]
|
||||
# Enable the Query history
|
||||
@@ -1243,8 +1047,6 @@
|
||||
;interval_seconds = 10
|
||||
# Disable total stats (stat_totals_*) metrics to be generated
|
||||
;disable_total_stats = false
|
||||
# The interval at which the total stats collector will update the stats. Default is 1800 seconds.
|
||||
;total_stats_collector_interval_seconds = 1800
|
||||
|
||||
#If both are set, basic auth will be required for the metrics endpoints.
|
||||
; basic_auth_username =
|
||||
@@ -1377,13 +1179,6 @@
|
||||
;plugin_catalog_url = https://grafana.com/grafana/plugins/
|
||||
# Enter a comma-separated list of plugin identifiers to hide in the plugin catalog.
|
||||
;plugin_catalog_hidden_plugins =
|
||||
# Log all backend requests for core and external plugins.
|
||||
;log_backend_requests = false
|
||||
# Disable download of the public key for verifying plugin signature.
|
||||
; public_key_retrieval_disabled = false
|
||||
# Force download of the public key for verifying plugin signature on startup. If disabled, the public key will be retrieved every 10 days.
|
||||
# Requires public_key_retrieval_disabled to be false to have any effect.
|
||||
; public_key_retrieval_on_startup = false
|
||||
|
||||
#################################### Grafana Live ##########################################
|
||||
[live]
|
||||
@@ -1468,14 +1263,6 @@
|
||||
;grpc_host =
|
||||
;grpc_port =
|
||||
|
||||
[support_bundles]
|
||||
# Enable support bundle creation (default: true)
|
||||
#enabled = true
|
||||
# Only server admins can generate and view support bundles (default: true)
|
||||
#server_admin_only = true
|
||||
# If set, bundles will be encrypted with the provided public keys separated by whitespace
|
||||
#public_keys = ""
|
||||
|
||||
[enterprise]
|
||||
# Path to a valid Grafana Enterprise license.jwt file
|
||||
;license_path =
|
||||
@@ -1529,14 +1316,15 @@
|
||||
;enable_custom_baselayers = true
|
||||
|
||||
# Move an app plugin referenced by its id (including all its pages) to a specific navigation section
|
||||
# Dependencies: needs the `topnav` feature to be enabled
|
||||
[navigation.app_sections]
|
||||
# The following will move an app plugin with the id of `my-app-id` under the `cfg` section
|
||||
# my-app-id = cfg
|
||||
# The following will move an app plugin with the id of `my-app-id` under the `starred` section
|
||||
# my-app-id = admin
|
||||
|
||||
# Move a specific app plugin page (referenced by its `path` field) to a specific navigation section
|
||||
[navigation.app_standalone_pages]
|
||||
# The following will move the page with the path "/a/my-app-id/my-page" from `my-app-id` to the `cfg` section
|
||||
# /a/my-app-id/my-page = cfg
|
||||
# The following will move the page with the path "/a/my-app-id/starred-content" from `my-app-id` to the `starred` section
|
||||
# /a/my-app-id/starred-content = starred
|
||||
|
||||
#################################### Secure Socks5 Datasource Proxy #####################################
|
||||
[secure_socks_datasource_proxy]
|
||||
@@ -1547,9 +1335,3 @@
|
||||
; server_name =
|
||||
# The address of the socks5 proxy datasources should connect to
|
||||
; proxy_address =
|
||||
; show_ui = true
|
||||
|
||||
################################## Feature Management ##############################################
|
||||
[feature_management]
|
||||
hidden_toggles =
|
||||
read_only_toggles =
|
||||
@@ -7,7 +7,6 @@ This directory contains guides for contributors to the Grafana project.
|
||||
- [Developer guide](developer-guide.md)
|
||||
- [Triage issues](triage-issues.md)
|
||||
- [Merge a pull request](merge-pull-request.md)
|
||||
- [Making changes to the CI pipeline](drone-pipeline.md)
|
||||
|
||||
The `style-guides` directory contains style guides for the Grafana software project and documentation.
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user