Merge branch 'v8.3.x' of github.com:grafana/grafana into v8.3.x

This commit is contained in:
Sriramajeyam Sugumaran
2022-03-01 10:16:15 +00:00
27 changed files with 625 additions and 308 deletions
+2 -1
View File
@@ -6,6 +6,7 @@
load('scripts/drone/pipelines/pr.star', 'pr_pipelines')
load('scripts/drone/pipelines/main.star', 'main_pipelines')
load('scripts/drone/pipelines/docs.star', 'docs_pipelines')
load('scripts/drone/pipelines/release.star', 'release_pipelines', 'publish_image_pipelines', 'publish_artifacts_pipelines', 'publish_npm_pipelines', 'publish_packages_pipeline')
load('scripts/drone/version.star', 'version_branch_pipelines')
load('scripts/drone/pipelines/cron.star', 'cronjobs')
@@ -13,7 +14,7 @@ load('scripts/drone/vault.star', 'secrets')
def main(ctx):
edition = 'oss'
return pr_pipelines(edition=edition) + main_pipelines(edition=edition) + release_pipelines() + \
return pr_pipelines(edition=edition) + docs_pipelines(edition=edition) + main_pipelines(edition=edition) + release_pipelines() + \
publish_image_pipelines('public') + publish_image_pipelines('security') + \
publish_artifacts_pipelines('security') + publish_artifacts_pipelines('public') + \
publish_npm_pipelines('public') + publish_packages_pipeline() + \
+225 -149
View File
@@ -11,7 +11,7 @@ services: []
steps:
- commands:
- mkdir -p bin
- curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.8.7/grabpl
- curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.4/grabpl
- chmod +x bin/grabpl
image: byrnedo/alpine-curl:0.1.8
name: grabpl
@@ -92,6 +92,9 @@ steps:
trigger:
event:
- pull_request
paths:
exclude:
- docs/**
type: docker
volumes:
- host:
@@ -110,7 +113,7 @@ services: []
steps:
- commands:
- mkdir -p bin
- curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.8.7/grabpl
- curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.4/grabpl
- chmod +x bin/grabpl
image: byrnedo/alpine-curl:0.1.8
name: grabpl
@@ -255,20 +258,6 @@ steps:
failure: always
image: grafana/docker-puppeteer:1.0.0
name: test-a11y-frontend
- commands:
- ./scripts/ci-reference-docs-lint.sh ci
depends_on:
- build-frontend
image: grafana/build-container:1.4.9
name: build-frontend-docs
- commands:
- mkdir -p /hugo/content/docs/grafana
- cp -r docs/sources/* /hugo/content/docs/grafana/latest/
- cd /hugo && make prod
depends_on:
- build-frontend-docs
image: grafana/docs-base:latest
name: build-docs-website
- commands:
- ls dist/*.tar.gz*
- cp dist/*.tar.gz* packaging/docker/
@@ -276,18 +265,24 @@ steps:
- package
image: grafana/build-container:1.4.9
name: copy-packages-for-docker
- depends_on:
- commands:
- ./bin/grabpl build-docker --edition oss -archs amd64
depends_on:
- copy-packages-for-docker
image: grafana/drone-grafana-docker:0.3.2
environment:
GCP_KEY:
from_secret: gcp_key
image: google/cloud-sdk
name: build-docker-images
settings:
archs: amd64
dry_run: true
edition: oss
ubuntu: false
volumes:
- name: docker
path: /var/run/docker.sock
trigger:
event:
- pull_request
paths:
exclude:
- docs/**
type: docker
volumes:
- host:
@@ -326,7 +321,7 @@ services:
steps:
- commands:
- mkdir -p bin
- curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.8.7/grabpl
- curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.4/grabpl
- chmod +x bin/grabpl
image: byrnedo/alpine-curl:0.1.8
name: grabpl
@@ -373,6 +368,9 @@ steps:
trigger:
event:
- pull_request
paths:
exclude:
- docs/**
type: docker
volumes:
- host:
@@ -387,6 +385,68 @@ volumes:
---
depends_on: []
kind: pipeline
name: pr-docs
node:
type: no-parallel
platform:
arch: amd64
os: linux
services: []
steps:
- commands:
- mkdir -p bin
- curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.4/grabpl
- chmod +x bin/grabpl
image: byrnedo/alpine-curl:0.1.8
name: grabpl
- commands:
- echo $DRONE_RUNNER_NAME
image: alpine:3.15
name: identify-runner
- commands:
- make gen-go
- ./bin/grabpl gen-version --build-id ${DRONE_BUILD_NUMBER}
- yarn install --immutable
image: grafana/build-container:1.4.9
name: initialize
- commands:
- ./bin/grabpl build-frontend --jobs 8 --no-install-deps --edition oss --build-id
${DRONE_BUILD_NUMBER} --no-pull-enterprise
depends_on:
- initialize
environment:
NODE_OPTIONS: --max_old_space_size=8192
image: grafana/build-container:1.4.9
name: build-frontend
- commands:
- ./scripts/ci-reference-docs-lint.sh ci
depends_on:
- build-frontend
image: grafana/build-container:1.4.9
name: build-frontend-docs
- commands:
- mkdir -p /hugo/content/docs/grafana
- cp -r docs/sources/* /hugo/content/docs/grafana/latest/
- cd /hugo && make prod
depends_on:
- build-frontend-docs
image: grafana/docs-base:latest
name: build-docs-website
trigger:
event:
- pull_request
paths:
include:
- docs/**
- packages/**
type: docker
volumes:
- host:
path: /var/run/docker.sock
name: docker
---
depends_on: []
kind: pipeline
name: main-test
node:
type: no-parallel
@@ -397,7 +457,7 @@ services: []
steps:
- commands:
- mkdir -p bin
- curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.8.7/grabpl
- curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.4/grabpl
- chmod +x bin/grabpl
image: byrnedo/alpine-curl:0.1.8
name: grabpl
@@ -497,7 +557,7 @@ services: []
steps:
- commands:
- mkdir -p bin
- curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.8.7/grabpl
- curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.4/grabpl
- chmod +x bin/grabpl
image: byrnedo/alpine-curl:0.1.8
name: grabpl
@@ -705,30 +765,66 @@ steps:
- package
image: grafana/build-container:1.4.9
name: copy-packages-for-docker
- depends_on:
- commands:
- ./bin/grabpl build-docker --edition oss
depends_on:
- copy-packages-for-docker
image: grafana/drone-grafana-docker:0.3.2
environment:
GCP_KEY:
from_secret: gcp_key
image: google/cloud-sdk
name: build-docker-images
settings:
dry_run: false
edition: oss
password:
from_secret: docker_password
ubuntu: false
username:
from_secret: docker_user
- depends_on:
volumes:
- name: docker
path: /var/run/docker.sock
- commands:
- ./bin/grabpl build-docker --edition oss --ubuntu
depends_on:
- copy-packages-for-docker
image: grafana/drone-grafana-docker:0.3.2
environment:
GCP_KEY:
from_secret: gcp_key
image: google/cloud-sdk
name: build-docker-images-ubuntu
settings:
dry_run: false
edition: oss
password:
volumes:
- name: docker
path: /var/run/docker.sock
- commands:
- ./bin/grabpl artifacts docker publish --dockerhub-repo grafana --base alpine --base
ubuntu --arch amd64 --arch arm64 --arch armv7
depends_on:
- build-docker-images
- build-docker-images-ubuntu
environment:
DOCKER_PASSWORD:
from_secret: docker_password
ubuntu: true
username:
from_secret: docker_user
DOCKER_USER:
from_secret: docker_username
GCP_KEY:
from_secret: gcp_key
image: google/cloud-sdk
name: publish-images-grafana
volumes:
- name: docker
path: /var/run/docker.sock
- commands:
- ./bin/grabpl artifacts docker publish --dockerhub-repo grafana-oss --base alpine
--base ubuntu --arch amd64 --arch arm64 --arch armv7
depends_on:
- build-docker-images
- build-docker-images-ubuntu
environment:
DOCKER_PASSWORD:
from_secret: docker_password
DOCKER_USER:
from_secret: docker_username
GCP_KEY:
from_secret: gcp_key
image: google/cloud-sdk
name: publish-images-grafana-oss
volumes:
- name: docker
path: /var/run/docker.sock
- commands:
- ./scripts/circle-release-canary-packages.sh
depends_on:
@@ -749,18 +845,18 @@ steps:
- end-to-end-tests-smoke-tests-suite
- end-to-end-tests-various-suite
environment:
GCP_GRAFANA_UPLOAD_KEY:
GCP_KEY:
from_secret: gcp_key
PRERELEASE_BUCKET:
from_secret: prerelease_bucket
image: grafana/grafana-ci-deploy:1.3.1
name: upload-packages
- commands:
- ./bin/grabpl upload-cdn --edition oss --bucket "grafana-static-assets"
- ./bin/grabpl upload-cdn --edition oss --src-bucket "grafana-static-assets"
depends_on:
- grafana-server
environment:
GCP_GRAFANA_UPLOAD_KEY:
GCP_KEY:
from_secret: gcp_key
PRERELEASE_BUCKET:
from_secret: prerelease_bucket
@@ -814,7 +910,7 @@ services:
steps:
- commands:
- mkdir -p bin
- curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.8.7/grabpl
- curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.4/grabpl
- chmod +x bin/grabpl
image: byrnedo/alpine-curl:0.1.8
name: grabpl
@@ -892,7 +988,7 @@ steps:
name: identify-runner
- commands:
- $$ProgressPreference = "SilentlyContinue"
- Invoke-WebRequest https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.8.7/windows/grabpl.exe
- Invoke-WebRequest https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.4/windows/grabpl.exe
-OutFile grabpl.exe
image: grafana/ci-wix:0.1.1
name: initialize
@@ -905,10 +1001,11 @@ steps:
- rm gcpkey.json
- cp C:\App\nssm-2.24.zip .
- .\grabpl.exe gen-version --build-id $$env:DRONE_BUILD_NUMBER
- .\grabpl.exe windows-installer --edition oss --build-id $$env:DRONE_BUILD_NUMBER
- .\grabpl.exe windows-installer --edition oss --packages-bucket grafana-downloads
--build-id $$env:DRONE_BUILD_NUMBER
- $$fname = ((Get-Childitem grafana*.msi -name) -split "`n")[0]
- gsutil cp $$fname gs://%PRERELEASE_BUCKET%/artifacts/downloads/oss/main/
- gsutil cp "$$fname.sha256" gs://%PRERELEASE_BUCKET%/artifacts/downloads/oss/main/
- gsutil cp $$fname gs://grafana-downloads/oss/main/
- gsutil cp "$$fname.sha256" gs://grafana-downloads/oss/main/
depends_on:
- initialize
environment:
@@ -946,7 +1043,7 @@ services: []
steps:
- commands:
- mkdir -p bin
- curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.8.7/grabpl
- curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.4/grabpl
- chmod +x bin/grabpl
image: byrnedo/alpine-curl:0.1.8
name: grabpl
@@ -959,7 +1056,6 @@ steps:
image: grafana/build-container:1.4.9
name: initialize
- commands:
- printenv GCP_KEY | base64 -d > /tmp/gcpkey.json
- ./bin/grabpl store-packages --edition oss --gcp-key /tmp/gcpkey.json --build-id
${DRONE_BUILD_NUMBER}
depends_on:
@@ -1029,7 +1125,7 @@ services: []
steps:
- commands:
- mkdir -p bin
- curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.8.7/grabpl
- curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.4/grabpl
- chmod +x bin/grabpl
image: byrnedo/alpine-curl:0.1.8
name: grabpl
@@ -1127,8 +1223,6 @@ steps:
image: grafana/build-container:1.4.9
name: copy-packages-for-docker
- commands:
- printenv GCP_KEY | base64 -d > /tmp/gcpkey.json
- gcloud auth activate-service-account --key-file=/tmp/gcpkey.json
- ./bin/grabpl build-docker --edition oss --shouldSave
depends_on:
- copy-packages-for-docker
@@ -1136,13 +1230,11 @@ steps:
GCP_KEY:
from_secret: gcp_key
image: google/cloud-sdk
name: package-docker-images
name: build-docker-images
volumes:
- name: docker
path: /var/run/docker.sock
- commands:
- printenv GCP_KEY | base64 -d > /tmp/gcpkey.json
- gcloud auth activate-service-account --key-file=/tmp/gcpkey.json
- ./bin/grabpl build-docker --edition oss --shouldSave --ubuntu
depends_on:
- copy-packages-for-docker
@@ -1150,7 +1242,7 @@ steps:
GCP_KEY:
from_secret: gcp_key
image: google/cloud-sdk
name: package-docker-images-ubuntu
name: build-docker-images-ubuntu
volumes:
- name: docker
path: /var/run/docker.sock
@@ -1212,11 +1304,12 @@ steps:
image: grafana/build-container:1.4.9
name: build-storybook
- commands:
- ./bin/grabpl upload-cdn --edition oss --bucket "$${PRERELEASE_BUCKET}/artifacts/static-assets"
- ./bin/grabpl upload-cdn --edition oss --src-bucket "$${PRERELEASE_BUCKET}" --src-dir
artifacts/static-assets
depends_on:
- grafana-server
environment:
GCP_GRAFANA_UPLOAD_KEY:
GCP_KEY:
from_secret: gcp_key
PRERELEASE_BUCKET:
from_secret: prerelease_bucket
@@ -1230,7 +1323,7 @@ steps:
- end-to-end-tests-smoke-tests-suite
- end-to-end-tests-various-suite
environment:
GCP_GRAFANA_UPLOAD_KEY:
GCP_KEY:
from_secret: gcp_key
PRERELEASE_BUCKET:
from_secret: prerelease_bucket
@@ -1304,7 +1397,7 @@ services: []
steps:
- commands:
- mkdir -p bin
- curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.8.7/grabpl
- curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.4/grabpl
- chmod +x bin/grabpl
image: byrnedo/alpine-curl:0.1.8
name: grabpl
@@ -1424,7 +1517,7 @@ services:
steps:
- commands:
- mkdir -p bin
- curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.8.7/grabpl
- curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.4/grabpl
- chmod +x bin/grabpl
image: byrnedo/alpine-curl:0.1.8
name: grabpl
@@ -1508,7 +1601,7 @@ steps:
name: identify-runner
- commands:
- $$ProgressPreference = "SilentlyContinue"
- Invoke-WebRequest https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.8.7/windows/grabpl.exe
- Invoke-WebRequest https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.4/windows/grabpl.exe
-OutFile grabpl.exe
image: grafana/ci-wix:0.1.1
name: initialize
@@ -1567,7 +1660,7 @@ services: []
steps:
- commands:
- mkdir -p bin
- curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.8.7/grabpl
- curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.4/grabpl
- chmod +x bin/grabpl
image: byrnedo/alpine-curl:0.1.8
name: grabpl
@@ -1699,8 +1792,6 @@ steps:
image: grafana/build-container:1.4.9
name: copy-packages-for-docker
- commands:
- printenv GCP_KEY | base64 -d > /tmp/gcpkey.json
- gcloud auth activate-service-account --key-file=/tmp/gcpkey.json
- ./bin/grabpl build-docker --edition enterprise --shouldSave
depends_on:
- copy-packages-for-docker
@@ -1708,13 +1799,11 @@ steps:
GCP_KEY:
from_secret: gcp_key
image: google/cloud-sdk
name: package-docker-images
name: build-docker-images
volumes:
- name: docker
path: /var/run/docker.sock
- commands:
- printenv GCP_KEY | base64 -d > /tmp/gcpkey.json
- gcloud auth activate-service-account --key-file=/tmp/gcpkey.json
- ./bin/grabpl build-docker --edition enterprise --shouldSave --ubuntu
depends_on:
- copy-packages-for-docker
@@ -1722,7 +1811,7 @@ steps:
GCP_KEY:
from_secret: gcp_key
image: google/cloud-sdk
name: package-docker-images-ubuntu
name: build-docker-images-ubuntu
volumes:
- name: docker
path: /var/run/docker.sock
@@ -1776,11 +1865,12 @@ steps:
image: cypress/included:8.4.1
name: end-to-end-tests-various-suite
- commands:
- ./bin/grabpl upload-cdn --edition enterprise --bucket "$${PRERELEASE_BUCKET}/artifacts/static-assets"
- ./bin/grabpl upload-cdn --edition enterprise --src-bucket "$${PRERELEASE_BUCKET}"
--src-dir artifacts/static-assets
depends_on:
- package
environment:
GCP_GRAFANA_UPLOAD_KEY:
GCP_KEY:
from_secret: gcp_key
PRERELEASE_BUCKET:
from_secret: prerelease_bucket
@@ -1791,7 +1881,7 @@ steps:
depends_on:
- package
environment:
GCP_GRAFANA_UPLOAD_KEY:
GCP_KEY:
from_secret: gcp_key
PRERELEASE_BUCKET:
from_secret: prerelease_bucket
@@ -1819,11 +1909,12 @@ steps:
image: grafana/build-container:1.4.9
name: package-enterprise2
- commands:
- ./bin/grabpl upload-cdn --edition enterprise2 --bucket "$${PRERELEASE_BUCKET}/artifacts/static-assets"
- ./bin/grabpl upload-cdn --edition enterprise2 --src-bucket "$${PRERELEASE_BUCKET}"
--src-dir artifacts/static-assets
depends_on:
- package-enterprise2
environment:
GCP_GRAFANA_UPLOAD_KEY:
GCP_KEY:
from_secret: gcp_key
PRERELEASE_BUCKET:
from_secret: prerelease_bucket
@@ -1834,7 +1925,7 @@ steps:
depends_on:
- package-enterprise2
environment:
GCP_GRAFANA_UPLOAD_KEY:
GCP_KEY:
from_secret: gcp_key
PRERELEASE_BUCKET:
from_secret: prerelease_bucket
@@ -1877,7 +1968,7 @@ services: []
steps:
- commands:
- mkdir -p bin
- curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.8.7/grabpl
- curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.4/grabpl
- chmod +x bin/grabpl
image: byrnedo/alpine-curl:0.1.8
name: grabpl
@@ -2049,7 +2140,7 @@ services:
steps:
- commands:
- mkdir -p bin
- curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.8.7/grabpl
- curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.4/grabpl
- chmod +x bin/grabpl
image: byrnedo/alpine-curl:0.1.8
name: grabpl
@@ -2177,7 +2268,7 @@ steps:
name: identify-runner
- commands:
- $$ProgressPreference = "SilentlyContinue"
- Invoke-WebRequest https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.8.7/windows/grabpl.exe
- Invoke-WebRequest https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.4/windows/grabpl.exe
-OutFile grabpl.exe
- git clone "https://$$env:GITHUB_TOKEN@github.com/grafana/grafana-enterprise.git"
- cd grafana-enterprise
@@ -2252,7 +2343,7 @@ services: []
steps:
- commands:
- mkdir -p bin
- curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.8.7/grabpl
- curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.4/grabpl
- chmod +x bin/grabpl
image: byrnedo/alpine-curl:0.1.8
name: grabpl
@@ -2274,8 +2365,8 @@ steps:
- name: docker
path: /var/run/docker.sock
- commands:
- ./bin/grabpl artifacts docker publish --version-tag ${TAG} --dockerhub-repo grafana
--base alpine --base ubuntu --arch amd64 --arch arm64 --arch armv7
- ./bin/grabpl artifacts docker publish --dockerhub-repo grafana --base alpine --base
ubuntu --arch amd64 --arch arm64 --arch armv7 --version-tag ${TAG}
depends_on:
- fetch-images-oss
environment:
@@ -2291,8 +2382,8 @@ steps:
- name: docker
path: /var/run/docker.sock
- commands:
- ./bin/grabpl artifacts docker publish --version-tag ${TAG} --dockerhub-repo grafana-oss
--base alpine --base ubuntu --arch amd64 --arch arm64 --arch armv7
- ./bin/grabpl artifacts docker publish --dockerhub-repo grafana-oss --base alpine
--base ubuntu --arch amd64 --arch arm64 --arch armv7 --version-tag ${TAG}
depends_on:
- fetch-images-oss
environment:
@@ -2330,7 +2421,7 @@ services: []
steps:
- commands:
- mkdir -p bin
- curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.8.7/grabpl
- curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.4/grabpl
- chmod +x bin/grabpl
image: byrnedo/alpine-curl:0.1.8
name: grabpl
@@ -2352,8 +2443,8 @@ steps:
- name: docker
path: /var/run/docker.sock
- commands:
- ./bin/grabpl artifacts docker publish --version-tag ${TAG} --dockerhub-repo grafana-enterprise
--base alpine --base ubuntu --arch amd64 --arch arm64 --arch armv7
- ./bin/grabpl artifacts docker publish --dockerhub-repo grafana-enterprise --base
alpine --base ubuntu --arch amd64 --arch arm64 --arch armv7 --version-tag ${TAG}
depends_on:
- fetch-images-enterprise
environment:
@@ -2391,7 +2482,7 @@ services: []
steps:
- commands:
- mkdir -p bin
- curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.8.7/grabpl
- curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.4/grabpl
- chmod +x bin/grabpl
image: byrnedo/alpine-curl:0.1.8
name: grabpl
@@ -2413,8 +2504,8 @@ steps:
- name: docker
path: /var/run/docker.sock
- commands:
- ./bin/grabpl artifacts docker publish --security --version-tag ${TAG} --dockerhub-repo
grafana --base alpine --base ubuntu --arch amd64 --arch arm64 --arch armv7
- ./bin/grabpl artifacts docker publish --security --dockerhub-repo grafana --base
alpine --base ubuntu --arch amd64 --arch arm64 --arch armv7 --version-tag ${TAG}
depends_on:
- fetch-images-oss
environment:
@@ -2430,8 +2521,9 @@ steps:
- name: docker
path: /var/run/docker.sock
- commands:
- ./bin/grabpl artifacts docker publish --security --version-tag ${TAG} --dockerhub-repo
grafana-oss --base alpine --base ubuntu --arch amd64 --arch arm64 --arch armv7
- ./bin/grabpl artifacts docker publish --security --dockerhub-repo grafana-oss
--base alpine --base ubuntu --arch amd64 --arch arm64 --arch armv7 --version-tag
${TAG}
depends_on:
- fetch-images-oss
environment:
@@ -2469,7 +2561,7 @@ services: []
steps:
- commands:
- mkdir -p bin
- curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.8.7/grabpl
- curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.4/grabpl
- chmod +x bin/grabpl
image: byrnedo/alpine-curl:0.1.8
name: grabpl
@@ -2491,9 +2583,9 @@ steps:
- name: docker
path: /var/run/docker.sock
- commands:
- ./bin/grabpl artifacts docker publish --security --version-tag ${TAG} --dockerhub-repo
grafana-enterprise --base alpine --base ubuntu --arch amd64 --arch arm64 --arch
armv7
- ./bin/grabpl artifacts docker publish --security --dockerhub-repo grafana-enterprise
--base alpine --base ubuntu --arch amd64 --arch arm64 --arch armv7 --version-tag
${TAG}
depends_on:
- fetch-images-enterprise
environment:
@@ -2531,7 +2623,7 @@ services: []
steps:
- commands:
- mkdir -p bin
- curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.8.7/grabpl
- curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.4/grabpl
- chmod +x bin/grabpl
image: byrnedo/alpine-curl:0.1.8
name: grabpl
@@ -2567,7 +2659,7 @@ services: []
steps:
- commands:
- mkdir -p bin
- curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.8.7/grabpl
- curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.4/grabpl
- chmod +x bin/grabpl
image: byrnedo/alpine-curl:0.1.8
name: grabpl
@@ -2614,7 +2706,7 @@ steps:
name: initialize
- commands:
- mkdir -p bin
- curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.8.7/grabpl
- curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.4/grabpl
- chmod +x bin/grabpl
image: byrnedo/alpine-curl:0.1.8
name: grabpl
@@ -2662,12 +2754,11 @@ services: []
steps:
- commands:
- mkdir -p bin
- curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.8.7/grabpl
- curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.4/grabpl
- chmod +x bin/grabpl
image: byrnedo/alpine-curl:0.1.8
name: grabpl
- commands:
- printenv GCP_KEY | base64 -d > /tmp/gcpkey.json
- ./bin/grabpl store-packages --edition oss --packages-bucket grafana-downloads
--gcp-key /tmp/gcpkey.json ${DRONE_TAG}
depends_on:
@@ -2686,7 +2777,6 @@ steps:
image: grafana/grafana-ci-deploy:1.3.1
name: store-packages-oss
- commands:
- printenv GCP_KEY | base64 -d > /tmp/gcpkey.json
- ./bin/grabpl store-packages --edition enterprise --packages-bucket grafana-downloads
--gcp-key /tmp/gcpkey.json ${DRONE_TAG}
depends_on:
@@ -2727,7 +2817,7 @@ services: []
steps:
- commands:
- mkdir -p bin
- curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.8.7/grabpl
- curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.4/grabpl
- chmod +x bin/grabpl
image: byrnedo/alpine-curl:0.1.8
name: grabpl
@@ -2822,8 +2912,6 @@ steps:
image: grafana/build-container:1.4.9
name: copy-packages-for-docker
- commands:
- printenv GCP_KEY | base64 -d > /tmp/gcpkey.json
- gcloud auth activate-service-account --key-file=/tmp/gcpkey.json
- ./bin/grabpl build-docker --edition oss --shouldSave
depends_on:
- copy-packages-for-docker
@@ -2831,13 +2919,11 @@ steps:
GCP_KEY:
from_secret: gcp_key
image: google/cloud-sdk
name: package-docker-images
name: build-docker-images
volumes:
- name: docker
path: /var/run/docker.sock
- commands:
- printenv GCP_KEY | base64 -d > /tmp/gcpkey.json
- gcloud auth activate-service-account --key-file=/tmp/gcpkey.json
- ./bin/grabpl build-docker --edition oss --shouldSave --ubuntu
depends_on:
- copy-packages-for-docker
@@ -2845,7 +2931,7 @@ steps:
GCP_KEY:
from_secret: gcp_key
image: google/cloud-sdk
name: package-docker-images-ubuntu
name: build-docker-images-ubuntu
volumes:
- name: docker
path: /var/run/docker.sock
@@ -2907,11 +2993,11 @@ steps:
image: grafana/build-container:1.4.9
name: build-storybook
- commands:
- ./bin/grabpl upload-cdn --edition oss --bucket "grafana-static-assets"
- ./bin/grabpl upload-cdn --edition oss --src-bucket "grafana-static-assets"
depends_on:
- grafana-server
environment:
GCP_GRAFANA_UPLOAD_KEY:
GCP_KEY:
from_secret: gcp_key
PRERELEASE_BUCKET:
from_secret: prerelease_bucket
@@ -2925,7 +3011,7 @@ steps:
- end-to-end-tests-smoke-tests-suite
- end-to-end-tests-various-suite
environment:
GCP_GRAFANA_UPLOAD_KEY:
GCP_KEY:
from_secret: gcp_key
PRERELEASE_BUCKET:
from_secret: prerelease_bucket
@@ -2958,7 +3044,7 @@ services: []
steps:
- commands:
- mkdir -p bin
- curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.8.7/grabpl
- curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.4/grabpl
- chmod +x bin/grabpl
image: byrnedo/alpine-curl:0.1.8
name: grabpl
@@ -3071,7 +3157,7 @@ services:
steps:
- commands:
- mkdir -p bin
- curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.8.7/grabpl
- curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.4/grabpl
- chmod +x bin/grabpl
image: byrnedo/alpine-curl:0.1.8
name: grabpl
@@ -3148,7 +3234,7 @@ steps:
name: identify-runner
- commands:
- $$ProgressPreference = "SilentlyContinue"
- Invoke-WebRequest https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.8.7/windows/grabpl.exe
- Invoke-WebRequest https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.4/windows/grabpl.exe
-OutFile grabpl.exe
image: grafana/ci-wix:0.1.1
name: initialize
@@ -3196,7 +3282,7 @@ services: []
steps:
- commands:
- mkdir -p bin
- curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.8.7/grabpl
- curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.4/grabpl
- chmod +x bin/grabpl
image: byrnedo/alpine-curl:0.1.8
name: grabpl
@@ -3217,7 +3303,7 @@ steps:
- mv bin/grabpl /tmp/
- rmdir bin
- mv grafana-enterprise /tmp/
- /tmp/grabpl init-enterprise --github-token $${GITHUB_TOKEN} /tmp/grafana-enterprise
- /tmp/grabpl init-enterprise /tmp/grafana-enterprise
- mv /tmp/grafana-enterprise/deployment_tools_config.json deployment_tools_config.json
- mkdir bin
- mv /tmp/grabpl bin/
@@ -3226,9 +3312,7 @@ steps:
- yarn install --immutable
depends_on:
- clone-enterprise
environment:
GITHUB_TOKEN:
from_secret: github_token
environment: {}
image: grafana/build-container:1.4.9
name: initialize
- commands:
@@ -3322,8 +3406,6 @@ steps:
image: grafana/build-container:1.4.9
name: copy-packages-for-docker
- commands:
- printenv GCP_KEY | base64 -d > /tmp/gcpkey.json
- gcloud auth activate-service-account --key-file=/tmp/gcpkey.json
- ./bin/grabpl build-docker --edition enterprise --shouldSave
depends_on:
- copy-packages-for-docker
@@ -3331,13 +3413,11 @@ steps:
GCP_KEY:
from_secret: gcp_key
image: google/cloud-sdk
name: package-docker-images
name: build-docker-images
volumes:
- name: docker
path: /var/run/docker.sock
- commands:
- printenv GCP_KEY | base64 -d > /tmp/gcpkey.json
- gcloud auth activate-service-account --key-file=/tmp/gcpkey.json
- ./bin/grabpl build-docker --edition enterprise --shouldSave --ubuntu
depends_on:
- copy-packages-for-docker
@@ -3345,7 +3425,7 @@ steps:
GCP_KEY:
from_secret: gcp_key
image: google/cloud-sdk
name: package-docker-images-ubuntu
name: build-docker-images-ubuntu
volumes:
- name: docker
path: /var/run/docker.sock
@@ -3408,11 +3488,11 @@ steps:
image: grafana/build-container:1.4.9
name: build-storybook
- commands:
- ./bin/grabpl upload-cdn --edition enterprise --bucket "grafana-static-assets"
- ./bin/grabpl upload-cdn --edition enterprise --src-bucket "grafana-static-assets"
depends_on:
- package
environment:
GCP_GRAFANA_UPLOAD_KEY:
GCP_KEY:
from_secret: gcp_key
PRERELEASE_BUCKET:
from_secret: prerelease_bucket
@@ -3423,7 +3503,7 @@ steps:
depends_on:
- package
environment:
GCP_GRAFANA_UPLOAD_KEY:
GCP_KEY:
from_secret: gcp_key
PRERELEASE_BUCKET:
from_secret: prerelease_bucket
@@ -3451,11 +3531,11 @@ steps:
image: grafana/build-container:1.4.9
name: package-enterprise2
- commands:
- ./bin/grabpl upload-cdn --edition enterprise2 --bucket "grafana-static-assets"
- ./bin/grabpl upload-cdn --edition enterprise2 --src-bucket "grafana-static-assets"
depends_on:
- package-enterprise2
environment:
GCP_GRAFANA_UPLOAD_KEY:
GCP_KEY:
from_secret: gcp_key
PRERELEASE_BUCKET:
from_secret: prerelease_bucket
@@ -3466,7 +3546,7 @@ steps:
depends_on:
- package-enterprise2
environment:
GCP_GRAFANA_UPLOAD_KEY:
GCP_KEY:
from_secret: gcp_key
PRERELEASE_BUCKET:
from_secret: prerelease_bucket
@@ -3503,7 +3583,7 @@ services: []
steps:
- commands:
- mkdir -p bin
- curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.8.7/grabpl
- curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.4/grabpl
- chmod +x bin/grabpl
image: byrnedo/alpine-curl:0.1.8
name: grabpl
@@ -3524,7 +3604,7 @@ steps:
- mv bin/grabpl /tmp/
- rmdir bin
- mv grafana-enterprise /tmp/
- /tmp/grabpl init-enterprise --github-token $${GITHUB_TOKEN} /tmp/grafana-enterprise
- /tmp/grabpl init-enterprise /tmp/grafana-enterprise
- mv /tmp/grafana-enterprise/deployment_tools_config.json deployment_tools_config.json
- mkdir bin
- mv /tmp/grabpl bin/
@@ -3533,9 +3613,7 @@ steps:
- yarn install --immutable
depends_on:
- clone-enterprise
environment:
GITHUB_TOKEN:
from_secret: github_token
environment: {}
image: grafana/build-container:1.4.9
name: initialize
- commands:
@@ -3667,7 +3745,7 @@ services:
steps:
- commands:
- mkdir -p bin
- curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.8.7/grabpl
- curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.4/grabpl
- chmod +x bin/grabpl
image: byrnedo/alpine-curl:0.1.8
name: grabpl
@@ -3688,7 +3766,7 @@ steps:
- mv bin/grabpl /tmp/
- rmdir bin
- mv grafana-enterprise /tmp/
- /tmp/grabpl init-enterprise --github-token $${GITHUB_TOKEN} /tmp/grafana-enterprise
- /tmp/grabpl init-enterprise /tmp/grafana-enterprise
- mv /tmp/grafana-enterprise/deployment_tools_config.json deployment_tools_config.json
- mkdir bin
- mv /tmp/grabpl bin/
@@ -3697,9 +3775,7 @@ steps:
- yarn install --immutable
depends_on:
- clone-enterprise
environment:
GITHUB_TOKEN:
from_secret: github_token
environment: {}
image: grafana/build-container:1.4.9
name: initialize
- commands:
@@ -3787,7 +3863,7 @@ steps:
name: identify-runner
- commands:
- $$ProgressPreference = "SilentlyContinue"
- Invoke-WebRequest https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.8.7/windows/grabpl.exe
- Invoke-WebRequest https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.4/windows/grabpl.exe
-OutFile grabpl.exe
- git clone "https://$$env:GITHUB_TOKEN@github.com/grafana/grafana-enterprise.git"
- cd grafana-enterprise
@@ -3899,6 +3975,6 @@ kind: secret
name: prerelease_bucket
---
kind: signature
hmac: 1c39a83bdf091e43a83d39be224283c10d9e5a47cde268a1c3c6fd1478531cb4
hmac: a39cc6926bbf02f091f7867ea09f2f818d83451aa1125955f6993a5bc1bf7c10
...
-49
View File
@@ -1,49 +0,0 @@
name: publish_docs
on:
push:
branches:
- v8.3.x
paths:
- 'docs/sources/**'
- 'packages/grafana-*/**'
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- run: git clone --single-branch --no-tags --depth 1 -b master https://grafanabot:${{ secrets.GH_BOT_ACCESS_TOKEN }}@github.com/grafana/website-sync ./.github/actions/website-sync
- name: generate-packages-docs
uses: actions/setup-node@v2.4.1
id: generate-docs
with:
node-version: '14'
- name: Get yarn cache directory path
id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn config get cacheFolder)"
- uses: actions/cache@v2.1.6
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
key: yarn-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
yarn-
- run: yarn install --immutable
- run: ./scripts/ci-reference-docs-build.sh
- name: publish-to-git
uses: ./.github/actions/website-sync
id: publish
with:
repository: grafana/website
branch: master
host: github.com
github_pat: '${{ secrets.GH_BOT_ACCESS_TOKEN }}'
source_folder: docs/sources
target_folder: content/docs/grafana/latest
allow_no_changes: 'true'
- shell: bash
run: |
test -n "${{ steps.publish.outputs.commit_hash }}"
test -n "${{ steps.publish.outputs.working_directory }}"
+1 -1
View File
@@ -20,7 +20,7 @@ COPY emails emails
ENV NODE_ENV production
RUN yarn build
FROM golang:1.17.6-alpine3.15 as go-builder
FROM golang:1.17.7-alpine3.15 as go-builder
RUN apk add --no-cache gcc g++ make
+1 -1
View File
@@ -21,7 +21,7 @@ COPY emails emails
ENV NODE_ENV production
RUN yarn build
FROM golang:1.17.6 AS go-builder
FROM golang:1.17.7 AS go-builder
WORKDIR /src/grafana
+1 -1
View File
@@ -70,7 +70,7 @@ The markers layer allows you to display data points as different marker shapes s
![Markers Layer Options](/static/img/docs/geomap-panel/geomap-markers-options-8-1-0.png)
- **Marker Color** configures the color of the marker. The default `Fixed size` keeps all points a single color. There is an alternate option to have multiple colors depending on the data point values and the threshold set at the `Thresholds` section.
- **Marker Color** configures the color of the marker. The default `Single color` keeps all points a single color. There is an alternate option to have multiple colors depending on the data point values and the threshold set at the `Thresholds` section.
- **Marker Size** configures the size of the marker. Default is `Fixed size`, making all marker size the same regardless of the data points. However, there is also an option to scale the circles to the corresponding data points. `Min` and `Max` marker size has to be set such that the Marker layer can scale within this range.
- **Marker Shape** allows you to choose the shape, icon, or graphic to aid in providing additional visual context to your data. Choose from assets that are included with Grafana such as simple shapes or the Unicon library. You can also specify a URL containing an image asset. The image must be a scalable vector graphic (SVG).
- **Fill opacity** configures the transparency of each marker.
+1 -1
View File
@@ -1,4 +1,4 @@
{
"stable": "8.3.5",
"stable": "8.3.6",
"testing": "8.4.0-beta1"
}
+1 -1
View File
@@ -422,7 +422,7 @@ func (hs *HTTPServer) addMiddlewaresAndStaticRoutes() {
}
m.Use(middleware.Recovery(hs.Cfg))
m.UseMiddleware(middleware.CSRF(hs.Cfg.LoginCookieName))
m.UseMiddleware(middleware.CSRF(hs.Cfg.LoginCookieName, hs.log))
hs.mapStatic(m, hs.Cfg.StaticRootPath, "build", "public/build")
hs.mapStatic(m, hs.Cfg.StaticRootPath, "", "public")
+15 -4
View File
@@ -4,10 +4,12 @@ import (
"errors"
"net/http"
"net/url"
"strings"
"github.com/grafana/grafana/pkg/infra/log"
"github.com/grafana/grafana/pkg/util"
)
func CSRF(loginCookieName string) func(http.Handler) http.Handler {
func CSRF(loginCookieName string, logger log.Logger) func(http.Handler) http.Handler {
// As per RFC 7231/4.2.2 these methods are idempotent:
// (GET is excluded because it may have side effects in some APIs)
safeMethods := []string{"HEAD", "OPTIONS", "TRACE"}
@@ -27,12 +29,21 @@ func CSRF(loginCookieName string) func(http.Handler) http.Handler {
}
}
// Otherwise - verify that Origin matches the server origin
host := strings.Split(r.Host, ":")[0]
netAddr, err := util.SplitHostPortDefault(r.Host, "", "0") // we ignore the port
if err != nil {
http.Error(w, err.Error(), http.StatusBadRequest)
return
}
origin, err := url.Parse(r.Header.Get("Origin"))
if err != nil || (origin.String() != "" && origin.Hostname() != host) {
if err != nil {
logger.Error("error parsing Origin header", "err", err)
}
if err != nil || netAddr.Host == "" || (origin.String() != "" && origin.Hostname() != netAddr.Host) {
http.Error(w, "origin not allowed", http.StatusForbidden)
return
}
next.ServeHTTP(w, r)
})
}
+124
View File
@@ -0,0 +1,124 @@
package middleware
import (
"net/http"
"net/http/httptest"
"testing"
"github.com/grafana/grafana/pkg/infra/log"
"github.com/stretchr/testify/require"
)
func TestMiddlewareCSRF(t *testing.T) {
tests := []struct {
name string
cookieName string
method string
origin string
host string
code int
}{
{
name: "mismatched origin and host is forbidden",
cookieName: "foo",
method: "GET",
origin: "http://notLocalhost",
host: "localhost",
code: http.StatusForbidden,
},
{
name: "mismatched origin and host is NOT forbidden with a 'Safe Method'",
cookieName: "foo",
method: "TRACE",
origin: "http://notLocalhost",
host: "localhost",
code: http.StatusOK,
},
{
name: "mismatched origin and host is NOT forbidden without a cookie",
cookieName: "",
method: "GET",
origin: "http://notLocalhost",
host: "localhost",
code: http.StatusOK,
},
{
name: "malformed host is a bad request",
cookieName: "foo",
method: "GET",
host: "localhost:80:80",
code: http.StatusBadRequest,
},
{
name: "host works without port",
cookieName: "foo",
method: "GET",
host: "localhost",
origin: "http://localhost",
code: http.StatusOK,
},
{
name: "port does not have to match",
cookieName: "foo",
method: "GET",
host: "localhost:80",
origin: "http://localhost:3000",
code: http.StatusOK,
},
{
name: "IPv6 host works with port",
cookieName: "foo",
method: "GET",
host: "[::1]:3000",
origin: "http://[::1]:3000",
code: http.StatusOK,
},
{
name: "IPv6 host (with longer address) works with port",
cookieName: "foo",
method: "GET",
host: "[2001:db8::1]:3000",
origin: "http://[2001:db8::1]:3000",
code: http.StatusOK,
},
{
name: "IPv6 host (with longer address) works without port",
cookieName: "foo",
method: "GET",
host: "[2001:db8::1]",
origin: "http://[2001:db8::1]",
code: http.StatusOK,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
rr := csrfScenario(t, tt.cookieName, tt.method, tt.origin, tt.host)
require.Equal(t, tt.code, rr.Code)
})
}
}
func csrfScenario(t *testing.T, cookieName, method, origin, host string) *httptest.ResponseRecorder {
req, err := http.NewRequest(method, "/", nil)
if err != nil {
t.Fatal(err)
}
req.AddCookie(&http.Cookie{
Name: cookieName,
})
// Note: Not sure where host header populates req.Host, or how that works.
req.Host = host
req.Header.Set("HOST", host)
req.Header.Set("ORIGIN", origin)
testHandler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
})
rr := httptest.NewRecorder()
handler := CSRF(cookieName, log.New("test"))(testHandler)
handler.ServeHTTP(rr, req)
return rr
}
+7 -1
View File
@@ -2,6 +2,7 @@ package alerting
import (
"context"
"fmt"
"github.com/grafana/grafana/pkg/bus"
"github.com/grafana/grafana/pkg/models"
@@ -74,6 +75,7 @@ func (s *AlertNotificationService) UpdateAlertNotification(ctx context.Context,
model := models.AlertNotification{
Id: cmd.Id,
OrgId: cmd.OrgId,
Name: cmd.Name,
Type: cmd.Type,
Settings: cmd.Settings,
@@ -134,7 +136,11 @@ func (s *AlertNotificationService) createNotifier(ctx context.Context, model *mo
return nil, err
}
if query.Result != nil && query.Result.SecureSettings != nil {
if query.Result == nil {
return nil, fmt.Errorf("unable to find the alert notification")
}
if query.Result.SecureSettings != nil {
var err error
secureSettingsMap, err = s.EncryptionService.DecryptJsonData(ctx, query.Result.SecureSettings, setting.SecretKey)
if err != nil {
@@ -93,11 +93,11 @@ func (cr *configReader) parseDatasourceConfig(path string, file os.FileInfo) (*c
func (cr *configReader) validateDefaultUniqueness(ctx context.Context, datasources []*configs) error {
defaultCount := map[int64]int{}
for i := range datasources {
if datasources[i].Datasources == nil {
continue
}
for _, ds := range datasources[i].Datasources {
if ds == nil {
continue
}
if ds.OrgID == 0 {
ds.OrgID = 1
}
@@ -115,6 +115,10 @@ func (cr *configReader) validateDefaultUniqueness(ctx context.Context, datasourc
}
for _, ds := range datasources[i].DeleteDatasources {
if ds == nil {
continue
}
if ds.OrgID == 0 {
ds.OrgID = 1
}
@@ -18,6 +18,7 @@ var (
twoDatasourcesConfig = "testdata/two-datasources"
twoDatasourcesConfigPurgeOthers = "testdata/insert-two-delete-two"
deleteOneDatasource = "testdata/delete-one"
doubleDatasourcesConfig = "testdata/double-default"
allProperties = "testdata/all-properties"
versionZero = "testdata/version-0"
@@ -129,6 +130,27 @@ func TestDatasourceAsConfig(t *testing.T) {
})
})
t.Run("Remove one datasource", func(t *testing.T) {
setup()
t.Run("Remove one datasource", func(t *testing.T) {
fakeRepo.loadAll = []*models.DataSource{}
t.Run("should have removed old datasource", func(t *testing.T) {
dc := newDatasourceProvisioner(logger)
err := dc.applyChanges(context.Background(), deleteOneDatasource)
if err != nil {
t.Fatalf("applyChanges return an error %v", err)
}
require.Equal(t, 1, len(fakeRepo.deleted))
// should have set OrgID to 1
require.Equal(t, fakeRepo.deleted[0].OrgID, int64(1))
require.Equal(t, 0, len(fakeRepo.inserted))
require.Equal(t, len(fakeRepo.updated), 0)
})
})
})
t.Run("Two configured datasource and purge others ", func(t *testing.T) {
setup()
t.Run("two other datasources in database", func(t *testing.T) {
@@ -0,0 +1,3 @@
datasources: []
delete_datasources:
- name: old-data-source
@@ -262,6 +262,8 @@ func transExecErr(s string) (string, error) {
// Keep last state is translated to error as we now emit a
// DatasourceError alert when the state is error
return "Error", nil
case "ok":
return "OK", nil
}
return "", fmt.Errorf("unrecognized Execution Error setting %v", s)
}
@@ -31,16 +31,23 @@ describe('Alertmanager utils', () => {
});
});
it('should parse escaped values correctly', () => {
expect(parseMatcher('foo=~"bar\\"baz\\""')).toEqual<Matcher>({
// Alertmanager has some strict requirements for label values;
// we should not automatically encode or decode any values sent
// and instead let AM return any errors like (matcher value contains unescaped double quote: bar"baz")
// and allow the user to update the values to the correct format
//
// see https://github.com/prometheus/alertmanager/blob/4030e3670b359b8814aa8340ea1144f32b1f5ab3/pkg/labels/parse.go#L55-L99
// and https://github.com/prometheus/alertmanager/blob/4030e3670b359b8814aa8340ea1144f32b1f5ab3/pkg/labels/parse.go#L101-L178
it('should not parse escaped values', () => {
expect(parseMatcher('foo="^[a-z0-9-]{1}[a-z0-9-]{0,30}$"')).toEqual<Matcher>({
name: 'foo',
value: 'bar"baz"',
isRegex: true,
value: '"^[a-z0-9-]{1}[a-z0-9-]{0,30}$"',
isRegex: false,
isEqual: true,
});
expect(parseMatcher('foo=~bar\\"baz\\"')).toEqual<Matcher>({
name: 'foo',
value: 'bar"baz"',
value: 'bar\\"baz\\"',
isRegex: true,
isEqual: true,
});
@@ -92,14 +92,6 @@ const matcherOperators = [
MatcherOperator.equal,
];
function unescapeMatcherValue(value: string) {
let trimmed = value.trim().replace(/\\"/g, '"');
if (trimmed.startsWith('"') && trimmed.endsWith('"') && !trimmed.endsWith('\\"')) {
trimmed = trimmed.substr(1, trimmed.length - 2);
}
return trimmed.replace(/\\"/g, '"');
}
export function parseMatcher(matcher: string): Matcher {
const trimmed = matcher.trim();
if (trimmed.startsWith('{') && trimmed.endsWith('}')) {
@@ -115,7 +107,7 @@ export function parseMatcher(matcher: string): Matcher {
}
const [operator, idx] = operatorsFound[0];
const name = trimmed.substr(0, idx).trim();
const value = unescapeMatcherValue(trimmed.substr(idx + operator.length).trim());
const value = trimmed.substr(idx + operator.length).trim();
if (!name) {
throw new Error(`Invalid matcher: ${trimmed}`);
}
@@ -88,6 +88,31 @@ describe('mapPromMetricsToServiceMap', () => {
{ name: 'secondaryStat', values: new ArrayVector([1000, 2000]) },
]);
});
it('handles invalid failed count', () => {
// If node.failed > node.total, the stat circle will render in the wrong position
// Fixed this by limiting the failed value to the total value
const range = {
from: dateTime('2000-01-01T00:00:00'),
to: dateTime('2000-01-01T00:01:00'),
};
const { nodes } = mapPromMetricsToServiceMap(
[{ data: [totalsPromMetric, secondsPromMetric, invalidFailedPromMetric] }],
{
...range,
raw: range,
}
);
expect(nodes.fields).toMatchObject([
{ name: 'id', values: new ArrayVector(['db', 'app', 'lb']) },
{ name: 'title', values: new ArrayVector(['db', 'app', 'lb']) },
{ name: 'mainStat', values: new ArrayVector([1000, 2000, NaN]) },
{ name: 'secondaryStat', values: new ArrayVector([0.17, 0.33, NaN]) },
{ name: 'arc__success', values: new ArrayVector([0, 0, 1]) },
{ name: 'arc__failed', values: new ArrayVector([1, 1, 0]) },
]);
});
});
const singleSpanResponse = new MutableDataFrame({
@@ -152,3 +177,16 @@ const failedPromMetric = new MutableDataFrame({
{ name: 'Value #traces_service_graph_request_failed_total', values: [2, 15] },
],
});
const invalidFailedPromMetric = new MutableDataFrame({
refId: 'traces_service_graph_request_failed_total',
fields: [
{ name: 'Time', values: [1628169788000, 1628169788000] },
{ name: 'client', values: ['app', 'lb'] },
{ name: 'instance', values: ['127.0.0.1:12345', '127.0.0.1:12345'] },
{ name: 'job', values: ['local_scrape', 'local_scrape'] },
{ name: 'server', values: ['db', 'app'] },
{ name: 'tempo_config', values: ['default', 'default'] },
{ name: 'Value #traces_service_graph_request_failed_total', values: [20, 40] },
],
});
@@ -303,8 +303,8 @@ function convertToDataFrames(
// any requests itself.
[Fields.mainStat]: node.total ? (node.seconds! / node.total) * 1000 : Number.NaN, // Average response time
[Fields.secondaryStat]: node.total ? Math.round((node.total / (rangeMs / 1000)) * 100) / 100 : Number.NaN, // Request per second (to 2 decimals)
[Fields.arc + 'success']: node.total ? (node.total - (node.failed || 0)) / node.total : 1,
[Fields.arc + 'failed']: node.total ? (node.failed || 0) / node.total : 0,
[Fields.arc + 'success']: node.total ? (node.total - Math.min(node.failed || 0, node.total)) / node.total : 1,
[Fields.arc + 'failed']: node.total ? Math.min(node.failed || 0, node.total) / node.total : 0,
});
}
for (const edgeId of Object.keys(edgesMap)) {
+10 -6
View File
@@ -91,7 +91,7 @@ export function getConfig(opts: BarsOptions, theme: GrafanaTheme2) {
// this expands the distr: 2 scale so that the indicies of each data[0] land at the proper justified positions
const xRange: Scale.Range = (u, min, max) => {
min = 0;
max = u.data[0].length - 1;
max = Math.max(1, u.data[0].length - 1);
let pctOffset = 0;
@@ -101,13 +101,17 @@ export function getConfig(opts: BarsOptions, theme: GrafanaTheme2) {
});
// expand scale range by equal amounts on both ends
let rn = max - min; // TODO: clamp to 1?
let rn = max - min;
let upScale = 1 / (1 - pctOffset * 2);
let offset = (upScale * rn - rn) / 2;
if (pctOffset === 0.5) {
min -= rn;
} else {
let upScale = 1 / (1 - pctOffset * 2);
let offset = (upScale * rn - rn) / 2;
min -= offset;
max += offset;
min -= offset;
max += offset;
}
return [min, max];
};
@@ -15,7 +15,15 @@ import {
getFieldSeriesColor,
GrafanaTheme2,
} from '@grafana/data';
import { Themeable2, UPlotConfigBuilder, UPlotChart, VizLayout, PlotLegend } from '@grafana/ui';
import {
Themeable2,
UPlotConfigBuilder,
UPlotChart,
VizLayout,
PlotLegend,
measureText,
UPLOT_AXIS_FONT_SIZE,
} from '@grafana/ui';
import {
histogramBucketSizes,
@@ -119,7 +127,20 @@ const prepConfig = (frame: DataFrame, theme: GrafanaTheme2) => {
placement: AxisPlacement.Bottom,
incrs: histogramBucketSizes,
splits: xSplits,
values: (u: uPlot, vals: any[]) => vals.map(xAxisFormatter),
values: (u: uPlot, splits: any[]) => {
const tickLabels = splits.map(xAxisFormatter);
const maxWidth = tickLabels.reduce(
(curMax, label) => Math.max(measureText(label, UPLOT_AXIS_FONT_SIZE).width, curMax),
0
);
const labelSpacing = 10;
const maxCount = u.bbox.width / ((maxWidth + labelSpacing) * devicePixelRatio);
const keepMod = Math.ceil(tickLabels.length / maxCount);
return tickLabels.map((label, i) => (i % keepMod === 0 ? label : null));
},
//incrs: () => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10].map((mult) => mult * bucketSize),
//splits: config.xSplits,
//values: config.xValues,
+1 -1
View File
@@ -110,7 +110,7 @@ RUN rm dockerize-linux-amd64-v${DOCKERIZE_VERSION}.tar.gz
# Use old Debian (this has support into 2022) in order to ensure binary compatibility with older glibc's.
FROM debian:stretch-20210208
ENV GOVERSION=1.17.6 \
ENV GOVERSION=1.17.7 \
PATH=/usr/local/go/bin:$PATH \
GOPATH=/go \
NODEVERSION=16.13.0-1nodesource1 \
+55
View File
@@ -0,0 +1,55 @@
load(
'scripts/drone/steps/lib.star',
'initialize_step',
'download_grabpl_step',
'lint_frontend_step',
'codespell_step',
'shellcheck_step',
'build_frontend_step',
'test_frontend_step',
'build_storybook_step',
'build_frontend_docs_step',
'build_docs_website_step',
)
load(
'scripts/drone/services/services.star',
'integration_test_services',
'ldap_service',
)
load(
'scripts/drone/utils/utils.star',
'pipeline',
)
ver_mode = 'pr'
def docs_pipelines(edition):
steps = [download_grabpl_step()] + initialize_step(edition, platform='linux', ver_mode=ver_mode)
steps.extend([
build_frontend_step(edition=edition, ver_mode=ver_mode),
])
# Insert remaining steps
steps.extend([
build_frontend_docs_step(edition=edition),
build_docs_website_step(),
])
trigger = {
'event': [
'pull_request',
],
'paths': {
'include': [
'docs/**',
'packages/**',
],
},
}
return [
pipeline(
name='pr-docs', edition=edition, trigger=trigger, services=[], steps=steps,
),
]
+5 -2
View File
@@ -20,6 +20,7 @@ load(
'build_frontend_docs_step',
'copy_packages_for_docker_step',
'build_docker_images_step',
'publish_images_step',
'postgres_integration_tests_step',
'mysql_integration_tests_step',
'redis_integration_tests_step',
@@ -107,8 +108,10 @@ def get_steps(edition, is_downstream=False):
frontend_metrics_step(edition=edition),
build_frontend_docs_step(edition=edition),
copy_packages_for_docker_step(),
build_docker_images_step(edition=edition, ver_mode=ver_mode, publish=publish),
build_docker_images_step(edition=edition, ver_mode=ver_mode, ubuntu=True, publish=publish),
build_docker_images_step(edition=edition, ver_mode=ver_mode, publish=False),
build_docker_images_step(edition=edition, ver_mode=ver_mode, ubuntu=True, publish=False),
publish_images_step(edition=edition, ver_mode=ver_mode, mode='', docker_repo='grafana', ubuntu=False),
publish_images_step(edition=edition, ver_mode=ver_mode, mode='', docker_repo='grafana-oss', ubuntu=True)
])
if include_enterprise2:
+8 -5
View File
@@ -17,8 +17,6 @@ load(
'grafana_server_step',
'e2e_tests_step',
'build_storybook_step',
'build_frontend_docs_step',
'build_docs_website_step',
'copy_packages_for_docker_step',
'build_docker_images_step',
'postgres_integration_tests_step',
@@ -96,8 +94,6 @@ def pr_pipelines(edition):
e2e_tests_step('various-suite', edition=edition),
build_storybook_step(edition=edition, ver_mode=ver_mode),
test_a11y_frontend_step(ver_mode=ver_mode, edition=edition),
build_frontend_docs_step(edition=edition),
build_docs_website_step(),
copy_packages_for_docker_step(),
build_docker_images_step(edition=edition, ver_mode=ver_mode, archs=['amd64',]),
])
@@ -112,7 +108,14 @@ def pr_pipelines(edition):
])
trigger = {
'event': ['pull_request',],
'event': [
'pull_request',
],
'paths': {
'exclude': [
'docs/**',
],
},
}
return [
+7 -27
View File
@@ -21,7 +21,7 @@ load(
'e2e_tests_step',
'build_storybook_step',
'copy_packages_for_docker_step',
'package_docker_images_step',
'build_docker_images_step',
'postgres_integration_tests_step',
'mysql_integration_tests_step',
'redis_integration_tests_step',
@@ -34,7 +34,8 @@ load(
'store_packages_step',
'upload_cdn_step',
'validate_scuemata_step',
'ensure_cuetsified_step'
'ensure_cuetsified_step',
'publish_images_step'
)
load(
@@ -113,27 +114,6 @@ def release_npm_packages_step():
],
}
def publish_images_step(edition, mode, docker_repo):
if mode == 'security':
mode = '--{} '.format(mode)
else:
mode = ''
return {
'name': 'publish-images-{}'.format(docker_repo),
'image': 'google/cloud-sdk',
'environment': {
'GCP_KEY': from_secret('gcp_key'),
'DOCKER_USER': from_secret('docker_username'),
'DOCKER_PASSWORD': from_secret('docker_password'),
},
'commands': ['./bin/grabpl artifacts docker publish {}--version-tag ${{TAG}} --dockerhub-repo {} --base alpine --base ubuntu --arch amd64 --arch arm64 --arch armv7'.format(mode, docker_repo)],
'depends_on': ['fetch-images-{}'.format(edition)],
'volumes': [{
'name': 'docker',
'path': '/var/run/docker.sock'
}],
}
def fetch_images_step(edition):
return {
'name': 'fetch-images-{}'.format(edition),
@@ -155,10 +135,10 @@ def publish_image_steps(version, mode, docker_repo, additional_docker_repo=""):
steps = [
download_grabpl_step(),
fetch_images_step(version),
publish_images_step(version, mode, docker_repo),
publish_images_step(version, 'release', mode, docker_repo),
]
if additional_docker_repo != "":
steps.extend([publish_images_step(version, mode, additional_docker_repo)])
steps.extend([publish_images_step(version, 'release', mode, additional_docker_repo)])
return steps
@@ -220,8 +200,8 @@ def get_steps(edition, ver_mode):
build_steps.extend([
package_step(edition=edition, ver_mode=ver_mode, include_enterprise2=include_enterprise2),
copy_packages_for_docker_step(),
package_docker_images_step(edition=edition, ver_mode=ver_mode, publish=should_publish),
package_docker_images_step(edition=edition, ver_mode=ver_mode, ubuntu=True, publish=should_publish),
build_docker_images_step(edition=edition, ver_mode=ver_mode, publish=True),
build_docker_images_step(edition=edition, ver_mode=ver_mode, ubuntu=True, publish=True),
grafana_server_step(edition=edition),
])
+50 -36
View File
@@ -1,9 +1,8 @@
load('scripts/drone/vault.star', 'from_secret', 'github_token', 'pull_secret', 'drone_token', 'prerelease_bucket')
grabpl_version = 'v2.8.7'
grabpl_version = 'v2.9.4'
build_image = 'grafana/build-container:1.4.9'
publish_image = 'grafana/grafana-ci-deploy:1.3.1'
grafana_docker_image = 'grafana/drone-grafana-docker:0.3.2'
deploy_docker_image = 'us.gcr.io/kubernetes-dev/drone/plugins/deploy-image'
alpine_image = 'alpine:3.15'
curl_image = 'byrnedo/alpine-curl:0.1.8'
@@ -64,12 +63,20 @@ def initialize_step(edition, platform, ver_mode, is_downstream=False, install_de
if ver_mode == 'release':
committish = '${DRONE_TAG}'
source_commit = ' ${DRONE_TAG}'
environment = {
'GITHUB_TOKEN': from_secret(github_token),
}
token = "--github-token $${GITHUB_TOKEN}"
elif ver_mode == 'release-branch':
committish = '${DRONE_BRANCH}'
environment = {}
token = ""
else:
environment = {}
if is_downstream:
source_commit = ' $${SOURCE_COMMIT}'
committish = '${DRONE_COMMIT}'
token = ""
steps = [
identify_runner,
clone_enterprise(committish),
@@ -79,14 +86,12 @@ def initialize_step(edition, platform, ver_mode, is_downstream=False, install_de
'depends_on': [
'clone-enterprise',
],
'environment': {
'GITHUB_TOKEN': from_secret(github_token),
},
'environment': environment,
'commands': [
'mv bin/grabpl /tmp/',
'rmdir bin',
'mv grafana-enterprise /tmp/',
'/tmp/grabpl init-enterprise --github-token $${{GITHUB_TOKEN}} /tmp/grafana-enterprise{}'.format(source_commit),
'/tmp/grabpl init-enterprise {} /tmp/grafana-enterprise{}'.format(token, source_commit),
'mv /tmp/grafana-enterprise/deployment_tools_config.json deployment_tools_config.json',
'mkdir bin',
'mv /tmp/grabpl bin/'
@@ -278,8 +283,10 @@ def store_storybook_step(edition, ver_mode):
def upload_cdn_step(edition, ver_mode):
src_dir = ''
if ver_mode == "release":
bucket = "$${PRERELEASE_BUCKET}/artifacts/static-assets"
bucket = "$${PRERELEASE_BUCKET}"
src_dir = " --src-dir artifacts/static-assets"
else:
bucket = "grafana-static-assets"
@@ -298,11 +305,11 @@ def upload_cdn_step(edition, ver_mode):
'image': publish_image,
'depends_on': deps,
'environment': {
'GCP_GRAFANA_UPLOAD_KEY': from_secret('gcp_key'),
'GCP_KEY': from_secret('gcp_key'),
'PRERELEASE_BUCKET': from_secret(prerelease_bucket)
},
'commands': [
'./bin/grabpl upload-cdn --edition {} --bucket "{}"'.format(edition, bucket),
'./bin/grabpl upload-cdn --edition {} --src-bucket "{}"{}'.format(edition, bucket, src_dir),
],
}
@@ -688,8 +695,11 @@ def copy_packages_for_docker_step():
}
def package_docker_images_step(edition, ver_mode, archs=None, ubuntu=False, publish=False):
cmd = './bin/grabpl build-docker --edition {} --shouldSave'.format(edition)
def build_docker_images_step(edition, ver_mode, archs=None, ubuntu=False, publish=False):
cmd = './bin/grabpl build-docker --edition {}'.format(edition)
if publish:
cmd += ' --shouldSave'
ubuntu_sfx = ''
if ubuntu:
ubuntu_sfx = '-ubuntu'
@@ -699,12 +709,10 @@ def package_docker_images_step(edition, ver_mode, archs=None, ubuntu=False, publ
cmd += ' -archs {}'.format(','.join(archs))
return {
'name': 'package-docker-images' + ubuntu_sfx,
'name': 'build-docker-images' + ubuntu_sfx,
'image': 'google/cloud-sdk',
'depends_on': ['copy-packages-for-docker'],
'commands': [
'printenv GCP_KEY | base64 -d > /tmp/gcpkey.json',
'gcloud auth activate-service-account --key-file=/tmp/gcpkey.json',
cmd
],
'volumes': [{
@@ -716,27 +724,34 @@ def package_docker_images_step(edition, ver_mode, archs=None, ubuntu=False, publ
},
}
def build_docker_images_step(edition, ver_mode, archs=None, ubuntu=False, publish=False):
ubuntu_sfx = ''
if ubuntu:
ubuntu_sfx = '-ubuntu'
def publish_images_step(edition, ver_mode, mode, docker_repo, ubuntu=False):
if mode == 'security':
mode = '--{} '.format(mode)
else:
mode = ''
settings = {
'dry_run': not publish,
'edition': edition,
'ubuntu': ubuntu,
}
cmd = './bin/grabpl artifacts docker publish {}--dockerhub-repo {} --base alpine --base ubuntu --arch amd64 --arch arm64 --arch armv7'.format(mode, docker_repo)
if ver_mode == 'release':
deps = ['fetch-images-{}'.format(edition)]
cmd += ' --version-tag ${TAG}'
else:
deps = ['build-docker-images', 'build-docker-images-ubuntu']
if publish:
settings['username'] = from_secret('docker_user')
settings['password'] = from_secret('docker_password')
if archs:
settings['archs'] = ','.join(archs)
return {
'name': 'build-docker-images' + ubuntu_sfx,
'image': grafana_docker_image,
'depends_on': ['copy-packages-for-docker'],
'settings': settings,
'name': 'publish-images-{}'.format(docker_repo),
'image': 'google/cloud-sdk',
'environment': {
'GCP_KEY': from_secret('gcp_key'),
'DOCKER_USER': from_secret('docker_username'),
'DOCKER_PASSWORD': from_secret('docker_password'),
},
'commands': [cmd],
'depends_on': deps,
'volumes': [{
'name': 'docker',
'path': '/var/run/docker.sock'
}],
}
@@ -861,8 +876,6 @@ def upload_packages_step(edition, ver_mode, is_downstream=False):
if ver_mode == 'main' and edition in ('enterprise', 'enterprise2') and not is_downstream:
return None
packages_bucket = ' --packages-bucket $${PRERELEASE_BUCKET}/artifacts/downloads' + enterprise2_suffix(edition)
if ver_mode == 'release':
packages_bucket = '$${{PRERELEASE_BUCKET}}/artifacts/downloads{}'.format(enterprise2_suffix(edition))
cmd = './bin/grabpl upload-packages --edition {} --packages-bucket {}'.format(edition, packages_bucket)
@@ -884,7 +897,7 @@ def upload_packages_step(edition, ver_mode, is_downstream=False):
'image': publish_image,
'depends_on': deps,
'environment': {
'GCP_GRAFANA_UPLOAD_KEY': from_secret('gcp_key'),
'GCP_KEY': from_secret('gcp_key'),
'PRERELEASE_BUCKET': from_secret('prerelease_bucket'),
},
'commands': [cmd, ],
@@ -921,7 +934,6 @@ def store_packages_step(edition, ver_mode, is_downstream=False):
'GPG_KEY_PASSWORD': from_secret('gpg_key_password'),
},
'commands': [
'printenv GCP_KEY | base64 -d > /tmp/gcpkey.json',
cmd,
],
}
@@ -960,6 +972,8 @@ def get_windows_steps(edition, ver_mode, is_downstream=False):
dir = 'release'
else:
dir = 'main'
bucket = 'grafana-downloads'
bucket_part = ' --packages-bucket {}'.format(bucket)
if not is_downstream:
build_no = 'DRONE_BUILD_NUMBER'
else: