diff --git a/.drone.yml b/.drone.yml
index 50a82810fe8..192f29b7c59 100644
--- a/.drone.yml
+++ b/.drone.yml
@@ -127,12 +127,27 @@ steps:
- yarn-install
image: node:20.9.0-alpine
name: betterer-frontend
+- commands:
+ - echo $(/usr/bin/github-app-external-token) > /github-app/token
+ environment:
+ GITHUB_APP_ID:
+ from_secret: github-app-app-id
+ GITHUB_APP_INSTALLATION_ID:
+ from_secret: github-app-installation-id
+ GITHUB_APP_PRIVATE_KEY:
+ from_secret: github-app-private-key
+ image: us-docker.pkg.dev/grafanalabs-global/docker-deployment-tools-prod/github-app-secret-writer:2024-11-05-v11688112090.1-83920c59
+ name: github-app-generate-token
+ volumes:
+ - name: github-app
+ path: /github-app
- commands:
- apk add --update curl jq bash
- - is_fork=$(curl "https://$GITHUB_TOKEN@api.github.com/repos/grafana/grafana/pulls/$DRONE_PULL_REQUEST"
+ - GITHUB_TOKEN=$(cat /github-app/token)
+ - is_fork=$(curl --retry 5 "https://$${GITHUB_TOKEN}@api.github.com/repos/grafana/grafana/pulls/$DRONE_PULL_REQUEST"
| jq .head.repo.fork)
- if [ "$is_fork" != false ]; then return 1; fi
- - git clone "https://$${GITHUB_TOKEN}@github.com/grafana/grafana-enterprise.git"
+ - git clone "https://x-access-token:$${GITHUB_TOKEN}@github.com/grafana/grafana-enterprise.git"
../grafana-enterprise
- cd ../grafana-enterprise
- if git checkout ${DRONE_SOURCE_BRANCH}; then echo "checked out ${DRONE_SOURCE_BRANCH}";
@@ -142,12 +157,14 @@ steps:
- ln -s src grafana
- cd ./grafana-enterprise
- ./build.sh
- environment:
- GITHUB_TOKEN:
- from_secret: github_token
+ depends_on:
+ - github-app-generate-token
failure: ignore
image: alpine/git:2.40.1
name: clone-enterprise
+ volumes:
+ - name: github-app
+ path: /github-app
- commands:
- yarn run ci:test-frontend
depends_on:
@@ -173,6 +190,8 @@ volumes:
- host:
path: /var/run/docker.sock
name: docker
+- name: github-app
+ temp: {}
---
clone:
retries: 3
@@ -191,12 +210,27 @@ platform:
os: linux
services: []
steps:
+- commands:
+ - echo $(/usr/bin/github-app-external-token) > /github-app/token
+ environment:
+ GITHUB_APP_ID:
+ from_secret: github-app-app-id
+ GITHUB_APP_INSTALLATION_ID:
+ from_secret: github-app-installation-id
+ GITHUB_APP_PRIVATE_KEY:
+ from_secret: github-app-private-key
+ image: us-docker.pkg.dev/grafanalabs-global/docker-deployment-tools-prod/github-app-secret-writer:2024-11-05-v11688112090.1-83920c59
+ name: github-app-generate-token
+ volumes:
+ - name: github-app
+ path: /github-app
- commands:
- apk add --update curl jq bash
- - is_fork=$(curl "https://$GITHUB_TOKEN@api.github.com/repos/grafana/grafana/pulls/$DRONE_PULL_REQUEST"
+ - GITHUB_TOKEN=$(cat /github-app/token)
+ - is_fork=$(curl --retry 5 "https://$${GITHUB_TOKEN}@api.github.com/repos/grafana/grafana/pulls/$DRONE_PULL_REQUEST"
| jq .head.repo.fork)
- if [ "$is_fork" != false ]; then return 1; fi
- - git clone "https://$${GITHUB_TOKEN}@github.com/grafana/grafana-enterprise.git"
+ - git clone "https://x-access-token:$${GITHUB_TOKEN}@github.com/grafana/grafana-enterprise.git"
../grafana-enterprise
- cd ../grafana-enterprise
- if git checkout ${DRONE_SOURCE_BRANCH}; then echo "checked out ${DRONE_SOURCE_BRANCH}";
@@ -206,12 +240,14 @@ steps:
- ln -s src grafana
- cd ./grafana-enterprise
- ./build.sh
- environment:
- GITHUB_TOKEN:
- from_secret: github_token
+ depends_on:
+ - github-app-generate-token
failure: ignore
image: alpine/git:2.40.1
name: clone-enterprise
+ volumes:
+ - name: github-app
+ path: /github-app
- commands:
- echo $DRONE_RUNNER_NAME
image: alpine:3.20.3
@@ -264,6 +300,8 @@ volumes:
- host:
path: /var/run/docker.sock
name: docker
+- name: github-app
+ temp: {}
---
clone:
retries: 3
@@ -282,12 +320,27 @@ platform:
os: linux
services: []
steps:
+- commands:
+ - echo $(/usr/bin/github-app-external-token) > /github-app/token
+ environment:
+ GITHUB_APP_ID:
+ from_secret: github-app-app-id
+ GITHUB_APP_INSTALLATION_ID:
+ from_secret: github-app-installation-id
+ GITHUB_APP_PRIVATE_KEY:
+ from_secret: github-app-private-key
+ image: us-docker.pkg.dev/grafanalabs-global/docker-deployment-tools-prod/github-app-secret-writer:2024-11-05-v11688112090.1-83920c59
+ name: github-app-generate-token
+ volumes:
+ - name: github-app
+ path: /github-app
- commands:
- apk add --update curl jq bash
- - is_fork=$(curl "https://$GITHUB_TOKEN@api.github.com/repos/grafana/grafana/pulls/$DRONE_PULL_REQUEST"
+ - GITHUB_TOKEN=$(cat /github-app/token)
+ - is_fork=$(curl --retry 5 "https://$${GITHUB_TOKEN}@api.github.com/repos/grafana/grafana/pulls/$DRONE_PULL_REQUEST"
| jq .head.repo.fork)
- if [ "$is_fork" != false ]; then return 1; fi
- - git clone "https://$${GITHUB_TOKEN}@github.com/grafana/grafana-enterprise.git"
+ - git clone "https://x-access-token:$${GITHUB_TOKEN}@github.com/grafana/grafana-enterprise.git"
../grafana-enterprise
- cd ../grafana-enterprise
- if git checkout ${DRONE_SOURCE_BRANCH}; then echo "checked out ${DRONE_SOURCE_BRANCH}";
@@ -297,12 +350,14 @@ steps:
- ln -s src grafana
- cd ./grafana-enterprise
- ./build.sh
- environment:
- GITHUB_TOKEN:
- from_secret: github_token
+ depends_on:
+ - github-app-generate-token
failure: ignore
image: alpine/git:2.40.1
name: clone-enterprise
+ volumes:
+ - name: github-app
+ path: /github-app
- commands:
- echo $DRONE_RUNNER_NAME
image: alpine:3.20.3
@@ -373,6 +428,8 @@ volumes:
- host:
path: /var/run/docker.sock
name: docker
+- name: github-app
+ temp: {}
---
clone:
retries: 3
@@ -402,12 +459,27 @@ steps:
CGO_ENABLED: 0
image: golang:1.22.7-alpine
name: compile-build-cmd
+- commands:
+ - echo $(/usr/bin/github-app-external-token) > /github-app/token
+ environment:
+ GITHUB_APP_ID:
+ from_secret: github-app-app-id
+ GITHUB_APP_INSTALLATION_ID:
+ from_secret: github-app-installation-id
+ GITHUB_APP_PRIVATE_KEY:
+ from_secret: github-app-private-key
+ image: us-docker.pkg.dev/grafanalabs-global/docker-deployment-tools-prod/github-app-secret-writer:2024-11-05-v11688112090.1-83920c59
+ name: github-app-generate-token
+ volumes:
+ - name: github-app
+ path: /github-app
- commands:
- apk add --update curl jq bash
- - is_fork=$(curl "https://$GITHUB_TOKEN@api.github.com/repos/grafana/grafana/pulls/$DRONE_PULL_REQUEST"
+ - GITHUB_TOKEN=$(cat /github-app/token)
+ - is_fork=$(curl --retry 5 "https://$${GITHUB_TOKEN}@api.github.com/repos/grafana/grafana/pulls/$DRONE_PULL_REQUEST"
| jq .head.repo.fork)
- if [ "$is_fork" != false ]; then return 1; fi
- - git clone "https://$${GITHUB_TOKEN}@github.com/grafana/grafana-enterprise.git"
+ - git clone "https://x-access-token:$${GITHUB_TOKEN}@github.com/grafana/grafana-enterprise.git"
../grafana-enterprise
- cd ../grafana-enterprise
- if git checkout ${DRONE_SOURCE_BRANCH}; then echo "checked out ${DRONE_SOURCE_BRANCH}";
@@ -417,12 +489,14 @@ steps:
- ln -s src grafana
- cd ./grafana-enterprise
- ./build.sh
- environment:
- GITHUB_TOKEN:
- from_secret: github_token
+ depends_on:
+ - github-app-generate-token
failure: ignore
image: alpine/git:2.40.1
name: clone-enterprise
+ volumes:
+ - name: github-app
+ path: /github-app
- commands:
- apk add --update make
- make gen-go
@@ -471,6 +545,8 @@ volumes:
- host:
path: /var/run/docker.sock
name: docker
+- name: github-app
+ temp: {}
---
clone:
retries: 3
@@ -489,6 +565,20 @@ platform:
os: linux
services: []
steps:
+- commands:
+ - echo $(/usr/bin/github-app-external-token) > /github-app/token
+ environment:
+ GITHUB_APP_ID:
+ from_secret: github-app-app-id
+ GITHUB_APP_INSTALLATION_ID:
+ from_secret: github-app-installation-id
+ GITHUB_APP_PRIVATE_KEY:
+ from_secret: github-app-private-key
+ image: us-docker.pkg.dev/grafanalabs-global/docker-deployment-tools-prod/github-app-secret-writer:2024-11-05-v11688112090.1-83920c59
+ name: github-app-generate-token
+ volumes:
+ - name: github-app
+ path: /github-app
- commands:
- echo $DRONE_RUNNER_NAME
image: alpine:3.20.3
@@ -624,10 +714,12 @@ steps:
image: cypress/included:13.1.0
name: end-to-end-tests-various-suite
- commands:
+ - GITHUB_TOKEN=$(cat /github-app/token)
- cd /
- ./cpp-e2e/scripts/ci-run.sh azure ${DRONE_SOURCE_BRANCH}
depends_on:
- grafana-server
+ - github-app-generate-token
environment:
AZURE_SP_APP_ID:
from_secret: azure_sp_app_id
@@ -636,11 +728,12 @@ steps:
AZURE_TENANT:
from_secret: azure_tenant
CYPRESS_CI: "true"
- GITHUB_TOKEN:
- from_secret: github_token
HOST: grafana-server
image: us-docker.pkg.dev/grafanalabs-dev/cloud-data-sources/e2e-13.1.0:1.0.0
name: end-to-end-tests-cloud-plugins-suite-azure
+ volumes:
+ - name: github-app
+ path: /github-app
when:
paths:
include:
@@ -681,6 +774,7 @@ steps:
- success
- failure
- commands:
+ - GITHUB_TOKEN=$(cat /github-app/token)
- if [ ! -d ./playwright-report/trace ]; then echo 'all tests passed'; exit 0; fi
- export E2E_PLAYWRIGHT_REPORT_URL=https://storage.googleapis.com/releng-pipeline-artifacts-dev/${DRONE_BUILD_NUMBER}/playwright-report/index.html
- 'curl -L -X POST https://api.github.com/repos/grafana/grafana/issues/${DRONE_PULL_REQUEST}/comments
@@ -692,17 +786,19 @@ steps:
\"}"'
depends_on:
- playwright-e2e-report-upload
- environment:
- GITHUB_TOKEN:
- from_secret: github_token
+ - github-app-generate-token
failure: ignore
image: byrnedo/alpine-curl:0.1.8
name: playwright-e2e-report-post-link
+ volumes:
+ - name: github-app
+ path: /github-app
when:
status:
- success
- failure
- commands:
+ - export GITHUB_TOKEN=$(cat /github-app/token)
- if [ -z `find ./e2e -type f -name *spec.ts.mp4` ]; then echo 'missing videos';
false; fi
- apt-get update
@@ -722,15 +818,17 @@ steps:
- end-to-end-tests-panels-suite
- end-to-end-tests-smoke-tests-suite
- end-to-end-tests-various-suite
+ - github-app-generate-token
environment:
E2E_TEST_ARTIFACTS_BUCKET: releng-pipeline-artifacts-dev
GCP_GRAFANA_UPLOAD_ARTIFACTS_KEY:
from_secret: gcp_upload_artifacts_key
- GITHUB_TOKEN:
- from_secret: github_token
failure: ignore
image: google/cloud-sdk:431.0.0
name: e2e-tests-artifacts-upload
+ volumes:
+ - name: github-app
+ path: /github-app
when:
status:
- success
@@ -816,6 +914,8 @@ volumes:
- host:
path: /var/run/docker.sock
name: docker
+- name: github-app
+ temp: {}
---
clone:
retries: 3
@@ -879,12 +979,27 @@ services:
image: memcached:1.6.9-alpine
name: memcached
steps:
+- commands:
+ - echo $(/usr/bin/github-app-external-token) > /github-app/token
+ environment:
+ GITHUB_APP_ID:
+ from_secret: github-app-app-id
+ GITHUB_APP_INSTALLATION_ID:
+ from_secret: github-app-installation-id
+ GITHUB_APP_PRIVATE_KEY:
+ from_secret: github-app-private-key
+ image: us-docker.pkg.dev/grafanalabs-global/docker-deployment-tools-prod/github-app-secret-writer:2024-11-05-v11688112090.1-83920c59
+ name: github-app-generate-token
+ volumes:
+ - name: github-app
+ path: /github-app
- commands:
- apk add --update curl jq bash
- - is_fork=$(curl "https://$GITHUB_TOKEN@api.github.com/repos/grafana/grafana/pulls/$DRONE_PULL_REQUEST"
+ - GITHUB_TOKEN=$(cat /github-app/token)
+ - is_fork=$(curl --retry 5 "https://$${GITHUB_TOKEN}@api.github.com/repos/grafana/grafana/pulls/$DRONE_PULL_REQUEST"
| jq .head.repo.fork)
- if [ "$is_fork" != false ]; then return 1; fi
- - git clone "https://$${GITHUB_TOKEN}@github.com/grafana/grafana-enterprise.git"
+ - git clone "https://x-access-token:$${GITHUB_TOKEN}@github.com/grafana/grafana-enterprise.git"
../grafana-enterprise
- cd ../grafana-enterprise
- if git checkout ${DRONE_SOURCE_BRANCH}; then echo "checked out ${DRONE_SOURCE_BRANCH}";
@@ -894,12 +1009,14 @@ steps:
- ln -s src grafana
- cd ./grafana-enterprise
- ./build.sh
- environment:
- GITHUB_TOKEN:
- from_secret: github_token
+ depends_on:
+ - github-app-generate-token
failure: ignore
image: alpine/git:2.40.1
name: clone-enterprise
+ volumes:
+ - name: github-app
+ path: /github-app
- commands:
- mkdir -p bin
- curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.1.1/grabpl
@@ -1083,6 +1200,8 @@ volumes:
- name: mysql80
temp:
medium: memory
+- name: github-app
+ temp: {}
---
clone:
retries: 3
@@ -1213,12 +1332,27 @@ platform:
os: linux
services: []
steps:
+- commands:
+ - echo $(/usr/bin/github-app-external-token) > /github-app/token
+ environment:
+ GITHUB_APP_ID:
+ from_secret: github-app-app-id
+ GITHUB_APP_INSTALLATION_ID:
+ from_secret: github-app-installation-id
+ GITHUB_APP_PRIVATE_KEY:
+ from_secret: github-app-private-key
+ image: us-docker.pkg.dev/grafanalabs-global/docker-deployment-tools-prod/github-app-secret-writer:2024-11-05-v11688112090.1-83920c59
+ name: github-app-generate-token
+ volumes:
+ - name: github-app
+ path: /github-app
- commands:
- apk add --update curl jq bash
- - is_fork=$(curl "https://$GITHUB_TOKEN@api.github.com/repos/grafana/grafana/pulls/$DRONE_PULL_REQUEST"
+ - GITHUB_TOKEN=$(cat /github-app/token)
+ - is_fork=$(curl --retry 5 "https://$${GITHUB_TOKEN}@api.github.com/repos/grafana/grafana/pulls/$DRONE_PULL_REQUEST"
| jq .head.repo.fork)
- if [ "$is_fork" != false ]; then return 1; fi
- - git clone "https://$${GITHUB_TOKEN}@github.com/grafana/grafana-enterprise.git"
+ - git clone "https://x-access-token:$${GITHUB_TOKEN}@github.com/grafana/grafana-enterprise.git"
../grafana-enterprise
- cd ../grafana-enterprise
- if git checkout ${DRONE_SOURCE_BRANCH}; then echo "checked out ${DRONE_SOURCE_BRANCH}";
@@ -1228,12 +1362,14 @@ steps:
- ln -s src grafana
- cd ./grafana-enterprise
- ./build.sh
- environment:
- GITHUB_TOKEN:
- from_secret: github_token
+ depends_on:
+ - github-app-generate-token
failure: ignore
image: alpine/git:2.40.1
name: clone-enterprise
+ volumes:
+ - name: github-app
+ path: /github-app
- commands:
- apk add --update git make
- make swagger-clean && make openapi3-gen
@@ -1244,9 +1380,6 @@ steps:
&& return 1; fi
depends_on:
- clone-enterprise
- environment:
- GITHUB_TOKEN:
- from_secret: github_token
image: golang:1.22.7-alpine
name: swagger-gen
trigger:
@@ -1257,6 +1390,8 @@ volumes:
- host:
path: /var/run/docker.sock
name: docker
+- name: github-app
+ temp: {}
---
clone:
retries: 3
@@ -1320,9 +1455,24 @@ services:
image: memcached:1.6.9-alpine
name: memcached
steps:
+- commands:
+ - echo $(/usr/bin/github-app-external-token) > /github-app/token
+ environment:
+ GITHUB_APP_ID:
+ from_secret: github-app-app-id
+ GITHUB_APP_INSTALLATION_ID:
+ from_secret: github-app-installation-id
+ GITHUB_APP_PRIVATE_KEY:
+ from_secret: github-app-private-key
+ image: us-docker.pkg.dev/grafanalabs-global/docker-deployment-tools-prod/github-app-secret-writer:2024-11-05-v11688112090.1-83920c59
+ name: github-app-generate-token
+ volumes:
+ - name: github-app
+ path: /github-app
- commands:
- apk add --update curl jq bash
- - git clone "https://$${GITHUB_TOKEN}@github.com/grafana/grafana-enterprise.git"
+ - GITHUB_TOKEN=$(cat /github-app/token)
+ - git clone "https://x-access-token:$${GITHUB_TOKEN}@github.com/grafana/grafana-enterprise.git"
../grafana-enterprise
- cd ../grafana-enterprise
- if git checkout ${DRONE_SOURCE_BRANCH}; then echo "checked out ${DRONE_SOURCE_BRANCH}";
@@ -1332,12 +1482,14 @@ steps:
- ln -s src grafana
- cd ./grafana-enterprise
- ./build.sh
- environment:
- GITHUB_TOKEN:
- from_secret: github_token
+ depends_on:
+ - github-app-generate-token
failure: ignore
image: alpine/git:2.40.1
name: clone-enterprise
+ volumes:
+ - name: github-app
+ path: /github-app
- commands:
- go build -o ./bin/build -ldflags '-extldflags -static' ./pkg/build/cmd
depends_on: []
@@ -1434,6 +1586,8 @@ volumes:
- name: mysql80
temp:
medium: memory
+- name: github-app
+ temp: {}
---
clone:
retries: 3
@@ -1813,6 +1967,20 @@ platform:
os: linux
services: []
steps:
+- commands:
+ - echo $(/usr/bin/github-app-external-token) > /github-app/token
+ environment:
+ GITHUB_APP_ID:
+ from_secret: github-app-app-id
+ GITHUB_APP_INSTALLATION_ID:
+ from_secret: github-app-installation-id
+ GITHUB_APP_PRIVATE_KEY:
+ from_secret: github-app-private-key
+ image: us-docker.pkg.dev/grafanalabs-global/docker-deployment-tools-prod/github-app-secret-writer:2024-11-05-v11688112090.1-83920c59
+ name: github-app-generate-token
+ volumes:
+ - name: github-app
+ path: /github-app
- commands:
- echo $DRONE_RUNNER_NAME
image: alpine:3.20.3
@@ -1947,10 +2115,12 @@ steps:
image: cypress/included:13.1.0
name: end-to-end-tests-various-suite
- commands:
+ - GITHUB_TOKEN=$(cat /github-app/token)
- cd /
- ./cpp-e2e/scripts/ci-run.sh azure ${DRONE_SOURCE_BRANCH}
depends_on:
- grafana-server
+ - github-app-generate-token
environment:
AZURE_SP_APP_ID:
from_secret: azure_sp_app_id
@@ -1959,11 +2129,12 @@ steps:
AZURE_TENANT:
from_secret: azure_tenant
CYPRESS_CI: "true"
- GITHUB_TOKEN:
- from_secret: github_token
HOST: grafana-server
image: us-docker.pkg.dev/grafanalabs-dev/cloud-data-sources/e2e-13.1.0:1.0.0
name: end-to-end-tests-cloud-plugins-suite-azure
+ volumes:
+ - name: github-app
+ path: /github-app
when:
paths:
include:
@@ -2004,6 +2175,7 @@ steps:
- success
- failure
- commands:
+ - GITHUB_TOKEN=$(cat /github-app/token)
- if [ ! -d ./playwright-report/trace ]; then echo 'all tests passed'; exit 0; fi
- export E2E_PLAYWRIGHT_REPORT_URL=https://storage.googleapis.com/releng-pipeline-artifacts-dev/${DRONE_BUILD_NUMBER}/playwright-report/index.html
- 'curl -L -X POST https://api.github.com/repos/grafana/grafana/issues/${DRONE_PULL_REQUEST}/comments
@@ -2015,17 +2187,19 @@ steps:
\"}"'
depends_on:
- playwright-e2e-report-upload
- environment:
- GITHUB_TOKEN:
- from_secret: github_token
+ - github-app-generate-token
failure: ignore
image: byrnedo/alpine-curl:0.1.8
name: playwright-e2e-report-post-link
+ volumes:
+ - name: github-app
+ path: /github-app
when:
status:
- success
- failure
- commands:
+ - export GITHUB_TOKEN=$(cat /github-app/token)
- if [ -z `find ./e2e -type f -name *spec.ts.mp4` ]; then echo 'missing videos';
false; fi
- apt-get update
@@ -2045,15 +2219,17 @@ steps:
- end-to-end-tests-panels-suite
- end-to-end-tests-smoke-tests-suite
- end-to-end-tests-various-suite
+ - github-app-generate-token
environment:
E2E_TEST_ARTIFACTS_BUCKET: releng-pipeline-artifacts-dev
GCP_GRAFANA_UPLOAD_ARTIFACTS_KEY:
from_secret: gcp_upload_artifacts_key
- GITHUB_TOKEN:
- from_secret: github_token
failure: ignore
image: google/cloud-sdk:431.0.0
name: e2e-tests-artifacts-upload
+ volumes:
+ - name: github-app
+ path: /github-app
when:
status:
- success
@@ -2258,6 +2434,8 @@ volumes:
- host:
path: /var/run/docker.sock
name: docker
+- name: github-app
+ temp: {}
---
clone:
retries: 3
@@ -2843,6 +3021,7 @@ platform:
services: []
steps:
- commands:
+ - export GITHUB_TOKEN=$(cat /github-app/token)
- apk add perl
- v_target=`echo $${TAG} | perl -pe 's/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/v\1.\2.x/'`
- curl -L $${GH_CLI_URL} | tar -xz --strip-components=1 -C /usr
@@ -2851,10 +3030,11 @@ steps:
depends_on: []
environment:
GH_CLI_URL: https://github.com/cli/cli/releases/download/v2.50.0/gh_2.50.0_linux_amd64.tar.gz
- GITHUB_TOKEN:
- from_secret: github_token
image: byrnedo/alpine-curl:0.1.8
name: create-release-pr
+ volumes:
+ - name: github-app
+ path: /github-app
trigger:
event:
- promote
@@ -2864,6 +3044,8 @@ volumes:
- host:
path: /var/run/docker.sock
name: docker
+- name: github-app
+ temp: {}
---
clone:
retries: 3
@@ -2913,6 +3095,21 @@ steps:
image: grafana/grafana-ci-deploy:1.3.3
name: publish-storybook
- commands:
+ - echo $(/usr/bin/github-app-external-token) > /github-app/token
+ environment:
+ GITHUB_APP_ID:
+ from_secret: github-app-app-id
+ GITHUB_APP_INSTALLATION_ID:
+ from_secret: github-app-installation-id
+ GITHUB_APP_PRIVATE_KEY:
+ from_secret: github-app-private-key
+ image: us-docker.pkg.dev/grafanalabs-global/docker-deployment-tools-prod/github-app-secret-writer:2024-11-05-v11688112090.1-83920c59
+ name: github-app-generate-token
+ volumes:
+ - name: github-app
+ path: /github-app
+- commands:
+ - export GITHUB_TOKEN=$(cat /github-app/token)
- apk add perl
- v_target=`echo $${TAG} | perl -pe 's/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/v\1.\2.x/'`
- curl -L $${GH_CLI_URL} | tar -xz --strip-components=1 -C /usr
@@ -2920,12 +3117,14 @@ steps:
-f latest=$${LATEST} --repo=grafana/grafana release-pr.yml
depends_on:
- publish-artifacts
+ - github-app-generate-token
environment:
GH_CLI_URL: https://github.com/cli/cli/releases/download/v2.50.0/gh_2.50.0_linux_amd64.tar.gz
- GITHUB_TOKEN:
- from_secret: github_token
image: byrnedo/alpine-curl:0.1.8
name: create-release-pr
+ volumes:
+ - name: github-app
+ path: /github-app
trigger:
event:
- promote
@@ -3385,6 +3584,7 @@ services: []
steps:
- commands:
- export GRAFANA_DIR=$$(pwd)
+ - export GITHUB_TOKEN=$(cat /github-app/token)
- cd /src && ./scripts/drone_build_main.sh
environment:
_EXPERIMENTAL_DAGGER_CLOUD_TOKEN:
@@ -3404,8 +3604,6 @@ steps:
from_secret: grafana_api_key
GCP_KEY_BASE64:
from_secret: gcp_key_base64
- GITHUB_TOKEN:
- from_secret: github_token
GO_VERSION: 1.22.7
GPG_PASSPHRASE:
from_secret: packages_gpg_passphrase
@@ -3424,6 +3622,8 @@ steps:
volumes:
- name: docker
path: /var/run/docker.sock
+ - name: github-app
+ path: /github-app
trigger:
branch: main
event:
@@ -3459,6 +3659,7 @@ services: []
steps:
- commands:
- export GRAFANA_DIR=$$(pwd)
+ - export GITHUB_TOKEN=$(cat /github-app/token)
- cd /src && ./scripts/drone_build_tag_grafana.sh
environment:
_EXPERIMENTAL_DAGGER_CLOUD_TOKEN:
@@ -3478,8 +3679,6 @@ steps:
from_secret: grafana_api_key
GCP_KEY_BASE64:
from_secret: gcp_key_base64
- GITHUB_TOKEN:
- from_secret: github_token
GO_VERSION: 1.22.7
GPG_PASSPHRASE:
from_secret: packages_gpg_passphrase
@@ -3498,6 +3697,8 @@ steps:
volumes:
- name: docker
path: /var/run/docker.sock
+ - name: github-app
+ path: /github-app
trigger:
event:
exclude:
@@ -3620,6 +3821,7 @@ services: []
steps:
- commands:
- export GRAFANA_DIR=$$(pwd)
+ - export GITHUB_TOKEN=$(cat /github-app/token)
- cd /src && ./scripts/drone_build_tag_grafana.sh
environment:
_EXPERIMENTAL_DAGGER_CLOUD_TOKEN:
@@ -3639,8 +3841,6 @@ steps:
from_secret: grafana_api_key
GCP_KEY_BASE64:
from_secret: gcp_key_base64
- GITHUB_TOKEN:
- from_secret: github_token
GO_VERSION: 1.22.7
GPG_PASSPHRASE:
from_secret: packages_gpg_passphrase
@@ -3659,6 +3859,8 @@ steps:
volumes:
- name: docker
path: /var/run/docker.sock
+ - name: github-app
+ path: /github-app
trigger:
ref:
- refs/heads/v[0-9]*
@@ -3858,6 +4060,7 @@ services: []
steps:
- commands:
- export GRAFANA_DIR=$$(pwd)
+ - export GITHUB_TOKEN=$(cat /github-app/token)
- cd /src && ./scripts/drone_build_nightly_grafana.sh
environment:
_EXPERIMENTAL_DAGGER_CLOUD_TOKEN:
@@ -3877,8 +4080,6 @@ steps:
from_secret: grafana_api_key
GCP_KEY_BASE64:
from_secret: gcp_key_base64
- GITHUB_TOKEN:
- from_secret: github_token
GO_VERSION: 1.22.7
GPG_PASSPHRASE:
from_secret: packages_gpg_passphrase
@@ -3897,6 +4098,8 @@ steps:
volumes:
- name: docker
path: /var/run/docker.sock
+ - name: github-app
+ path: /github-app
- commands:
- mkdir -p $${DESTINATION}/$${DRONE_BUILD_EVENT}
- printenv GCP_KEY_BASE64 | base64 -d > /tmp/key.json
@@ -3921,8 +4124,6 @@ steps:
from_secret: grafana_api_key
GCP_KEY_BASE64:
from_secret: gcp_key_base64
- GITHUB_TOKEN:
- from_secret: github_token
GPG_PASSPHRASE:
from_secret: packages_gpg_passphrase
GPG_PRIVATE_KEY:
@@ -3987,8 +4188,6 @@ steps:
from_secret: grafana_api_key
GCP_KEY_BASE64:
from_secret: gcp_key_base64
- GITHUB_TOKEN:
- from_secret: github_token
GPG_PASSPHRASE:
from_secret: packages_gpg_passphrase
GPG_PRIVATE_KEY:
@@ -4003,6 +4202,7 @@ steps:
name: rgm-copy
- commands:
- export GRAFANA_DIR=$$(pwd)
+ - export GITHUB_TOKEN=$(cat /github-app/token)
- cd /src && ./scripts/drone_publish_nightly_grafana.sh
depends_on:
- rgm-copy
@@ -4024,8 +4224,6 @@ steps:
from_secret: grafana_api_key
GCP_KEY_BASE64:
from_secret: gcp_key_base64
- GITHUB_TOKEN:
- from_secret: github_token
GO_VERSION: 1.22.7
GPG_PASSPHRASE:
from_secret: packages_gpg_passphrase
@@ -4044,6 +4242,8 @@ steps:
volumes:
- name: docker
path: /var/run/docker.sock
+ - name: github-app
+ path: /github-app
- depends_on:
- rgm-publish
image: us.gcr.io/kubernetes-dev/package-publish:latest
@@ -4113,8 +4313,25 @@ platform:
services: []
steps:
- commands:
+ - echo $(/usr/bin/github-app-external-token) > /github-app/token
+ environment:
+ GITHUB_APP_ID:
+ from_secret: github-app-app-id
+ GITHUB_APP_INSTALLATION_ID:
+ from_secret: github-app-installation-id
+ GITHUB_APP_PRIVATE_KEY:
+ from_secret: github-app-private-key
+ image: us-docker.pkg.dev/grafanalabs-global/docker-deployment-tools-prod/github-app-secret-writer:2024-11-05-v11688112090.1-83920c59
+ name: github-app-generate-token
+ volumes:
+ - name: github-app
+ path: /github-app
+- commands:
+ - export GITHUB_TOKEN=$(cat /github-app/token)
- 'dagger run --silent /src/grafana-build artifacts -a $${ARTIFACTS} --grafana-ref=$${GRAFANA_REF}
--enterprise-ref=$${ENTERPRISE_REF} --grafana-repo=$${GRAFANA_REPO} --version=$${VERSION} '
+ depends_on:
+ - github-app-generate-token
environment:
_EXPERIMENTAL_DAGGER_CLOUD_TOKEN:
from_secret: dagger_token
@@ -4133,8 +4350,6 @@ steps:
from_secret: grafana_api_key
GCP_KEY_BASE64:
from_secret: gcp_key_base64
- GITHUB_TOKEN:
- from_secret: github_token
GO_VERSION: 1.22.7
GPG_PASSPHRASE:
from_secret: packages_gpg_passphrase
@@ -4153,6 +4368,8 @@ steps:
volumes:
- name: docker
path: /var/run/docker.sock
+ - name: github-app
+ path: /github-app
- commands:
- printenv GCP_KEY_BASE64 | base64 -d > /tmp/key.json
- gcloud auth activate-service-account --key-file=/tmp/key.json
@@ -4174,8 +4391,6 @@ steps:
from_secret: grafana_api_key
GCP_KEY_BASE64:
from_secret: gcp_key_base64
- GITHUB_TOKEN:
- from_secret: github_token
GPG_PASSPHRASE:
from_secret: packages_gpg_passphrase
GPG_PRIVATE_KEY:
@@ -4737,6 +4952,7 @@ steps:
- trivy --exit-code 0 --severity UNKNOWN,LOW,MEDIUM mcr.microsoft.com/playwright:v1.42.1-jammy
- trivy --exit-code 0 --severity UNKNOWN,LOW,MEDIUM rockylinux:9
- trivy --exit-code 0 --severity UNKNOWN,LOW,MEDIUM scottyhardy/docker-wine:stable-9.0
+ - trivy --exit-code 0 --severity UNKNOWN,LOW,MEDIUM us-docker.pkg.dev/grafanalabs-global/docker-deployment-tools-prod/github-app-secret-writer:2024-11-05-v11688112090.1-83920c59
depends_on:
- authenticate-gcr
image: aquasec/trivy:0.21.0
@@ -4775,6 +4991,7 @@ steps:
- trivy --exit-code 1 --severity HIGH,CRITICAL mcr.microsoft.com/playwright:v1.42.1-jammy
- trivy --exit-code 1 --severity HIGH,CRITICAL rockylinux:9
- trivy --exit-code 1 --severity HIGH,CRITICAL scottyhardy/docker-wine:stable-9.0
+ - trivy --exit-code 1 --severity HIGH,CRITICAL us-docker.pkg.dev/grafanalabs-global/docker-deployment-tools-prod/github-app-secret-writer:2024-11-05-v11688112090.1-83920c59
depends_on:
- authenticate-gcr
environment:
@@ -4807,6 +5024,24 @@ volumes:
- name: config
temp: {}
---
+get:
+ name: app-id
+ path: ci/data/repo/grafana/grafana/github-app
+kind: secret
+name: github-app-app-id
+---
+get:
+ name: app-installation-id
+ path: ci/data/repo/grafana/grafana/github-app
+kind: secret
+name: github-app-installation-id
+---
+get:
+ name: private-key
+ path: ci/data/repo/grafana/grafana/github-app
+kind: secret
+name: github-app-private-key
+---
get:
name: credentials.json
path: infra/data/ci/grafana-release-eng/grafanauploads
@@ -4837,12 +5072,6 @@ get:
kind: secret
name: gar
---
-get:
- name: pat
- path: ci/data/repo/grafana/grafana/grafanabot
-kind: secret
-name: github_token
----
get:
name: machine-user-token
path: infra/data/ci/drone
@@ -5006,6 +5235,6 @@ kind: secret
name: gcr_credentials
---
kind: signature
-hmac: d5f02fed30598fc59c873a605fd5dd7fad2a28d3fed739f638ef8134cd043e31
+hmac: ba05b7ef1f4137332e448b4b5e5bcebe2e9f0e377036e1c118f8643f4e8e4ce4
...
diff --git a/scripts/drone/events/release.star b/scripts/drone/events/release.star
index 5ad56882411..b3faaefa2a7 100644
--- a/scripts/drone/events/release.star
+++ b/scripts/drone/events/release.star
@@ -7,6 +7,12 @@ load(
"integration_test_services",
"integration_test_services_volumes",
)
+load(
+ "scripts/drone/steps/github.star",
+ "github_app_generate_token_step",
+ "github_app_pipeline_volumes",
+ "github_app_step_volumes",
+)
load(
"scripts/drone/steps/lib.star",
"compile_build_cmd",
@@ -69,10 +75,10 @@ def release_pr_step(depends_on = []):
"image": images["curl"],
"depends_on": depends_on,
"environment": {
- "GITHUB_TOKEN": from_secret("github_token"),
"GH_CLI_URL": "https://github.com/cli/cli/releases/download/v2.50.0/gh_2.50.0_linux_amd64.tar.gz",
},
"commands": [
+ "export GITHUB_TOKEN=$(cat /github-app/token)",
"apk add perl",
"v_target=`echo $${{TAG}} | perl -pe 's/{}/v\\1.\\2.x/'`".format(semver_regex),
# Install gh CLI
@@ -86,6 +92,7 @@ def release_pr_step(depends_on = []):
"-f latest=$${LATEST} " +
"--repo=grafana/grafana release-pr.yml",
],
+ "volumes": github_app_step_volumes(),
}
def release_npm_packages_step():
@@ -149,7 +156,8 @@ def publish_artifacts_pipelines(mode):
compile_build_cmd(),
publish_artifacts_step(),
publish_storybook_step(),
- release_pr_step(depends_on = ["publish-artifacts"]),
+ github_app_generate_token_step(),
+ release_pr_step(depends_on = ["publish-artifacts", github_app_generate_token_step()["name"]]),
]
return [
@@ -162,6 +170,7 @@ def publish_artifacts_pipelines(mode):
steps = [
release_pr_step(),
],
+ volumes = github_app_pipeline_volumes(),
),
pipeline(
name = "publish-artifacts-{}".format(mode),
diff --git a/scripts/drone/pipelines/benchmarks.star b/scripts/drone/pipelines/benchmarks.star
index ae5a9611675..b7d554b15f0 100644
--- a/scripts/drone/pipelines/benchmarks.star
+++ b/scripts/drone/pipelines/benchmarks.star
@@ -7,6 +7,11 @@ load(
"integration_test_services",
"integration_test_services_volumes",
)
+load(
+ "scripts/drone/steps/github.star",
+ "github_app_generate_token_step",
+ "github_app_pipeline_volumes",
+)
load(
"scripts/drone/steps/lib.star",
"compile_build_cmd",
@@ -32,10 +37,13 @@ def integration_benchmarks(prefix):
environment = {"EDITION": "oss"}
services = integration_test_services()
- volumes = integration_test_services_volumes()
+ volumes = integration_test_services_volumes() + github_app_pipeline_volumes()
# In pull requests, attempt to clone grafana enterprise.
- init_steps = [enterprise_setup_step(isPromote = True)]
+ init_steps = [
+ github_app_generate_token_step(),
+ enterprise_setup_step(isPromote = True),
+ ]
verify_step = verify_gen_cue_step()
verify_jsonnet_step = verify_gen_jsonnet_step()
diff --git a/scripts/drone/pipelines/build.star b/scripts/drone/pipelines/build.star
index 395ae441ca7..257ad44cae3 100644
--- a/scripts/drone/pipelines/build.star
+++ b/scripts/drone/pipelines/build.star
@@ -1,5 +1,10 @@
"""This module contains the comprehensive build pipeline."""
+load(
+ "scripts/drone/steps/github.star",
+ "github_app_generate_token_step",
+ "github_app_pipeline_volumes",
+)
load(
"scripts/drone/steps/lib.star",
"build_frontend_package_step",
@@ -57,6 +62,7 @@ def build_e2e(trigger, ver_mode):
environment = {"EDITION": "oss"}
init_steps = [
+ github_app_generate_token_step(),
identify_runner_step(),
download_grabpl_step(),
compile_build_cmd(),
@@ -172,4 +178,5 @@ def build_e2e(trigger, ver_mode):
services = [],
steps = init_steps + build_steps,
trigger = trigger,
+ volumes = github_app_pipeline_volumes(),
)
diff --git a/scripts/drone/pipelines/integration_tests.star b/scripts/drone/pipelines/integration_tests.star
index e51b55bf48f..096b1b4b368 100644
--- a/scripts/drone/pipelines/integration_tests.star
+++ b/scripts/drone/pipelines/integration_tests.star
@@ -7,6 +7,11 @@ load(
"integration_test_services",
"integration_test_services_volumes",
)
+load(
+ "scripts/drone/steps/github.star",
+ "github_app_generate_token_step",
+ "github_app_pipeline_volumes",
+)
load(
"scripts/drone/steps/lib.star",
"compile_build_cmd",
@@ -50,8 +55,11 @@ def integration_tests(trigger, prefix, ver_mode = "pr"):
if ver_mode == "pr":
# In pull requests, attempt to clone grafana enterprise.
+ init_steps.append(github_app_generate_token_step())
init_steps.append(enterprise_setup_step())
+ volumes += github_app_pipeline_volumes()
+
init_steps += [
download_grabpl_step(),
compile_build_cmd(),
diff --git a/scripts/drone/pipelines/lint_backend.star b/scripts/drone/pipelines/lint_backend.star
index 1dd1f6e8833..0f5482d0378 100644
--- a/scripts/drone/pipelines/lint_backend.star
+++ b/scripts/drone/pipelines/lint_backend.star
@@ -2,6 +2,11 @@
This module returns the pipeline used for linting backend code.
"""
+load(
+ "scripts/drone/steps/github.star",
+ "github_app_generate_token_step",
+ "github_app_pipeline_volumes",
+)
load(
"scripts/drone/steps/lib.star",
"compile_build_cmd",
@@ -38,10 +43,15 @@ def lint_backend_pipeline(trigger, ver_mode):
compile_build_cmd(),
]
+ volumes = []
+
if ver_mode == "pr":
# In pull requests, attempt to clone grafana enterprise.
+ init_steps.append(github_app_generate_token_step())
init_steps.append(enterprise_setup_step())
+ volumes += github_app_pipeline_volumes()
+
init_steps.append(wire_step)
test_steps = [
@@ -59,4 +69,5 @@ def lint_backend_pipeline(trigger, ver_mode):
services = [],
steps = init_steps + test_steps,
environment = environment,
+ volumes = volumes,
)
diff --git a/scripts/drone/pipelines/lint_frontend.star b/scripts/drone/pipelines/lint_frontend.star
index c8a0c4f9671..1f98e371bb9 100644
--- a/scripts/drone/pipelines/lint_frontend.star
+++ b/scripts/drone/pipelines/lint_frontend.star
@@ -2,6 +2,11 @@
This module returns the pipeline used for linting frontend code.
"""
+load(
+ "scripts/drone/steps/github.star",
+ "github_app_generate_token_step",
+ "github_app_pipeline_volumes",
+)
load(
"scripts/drone/steps/lib.star",
"enterprise_setup_step",
@@ -31,9 +36,16 @@ def lint_frontend_pipeline(trigger, ver_mode):
lint_step = lint_frontend_step()
i18n_step = verify_i18n_step()
+ volumes = []
+
if ver_mode == "pr":
# In pull requests, attempt to clone grafana enterprise.
- init_steps = [enterprise_setup_step()]
+ init_steps = [
+ github_app_generate_token_step(),
+ enterprise_setup_step(),
+ ]
+
+ volumes += github_app_pipeline_volumes()
init_steps += [
identify_runner_step(),
@@ -50,4 +62,5 @@ def lint_frontend_pipeline(trigger, ver_mode):
services = [],
steps = init_steps + test_steps,
environment = environment,
+ volumes = volumes,
)
diff --git a/scripts/drone/pipelines/swagger_gen.star b/scripts/drone/pipelines/swagger_gen.star
index 41018250cd2..4332ddd92fc 100644
--- a/scripts/drone/pipelines/swagger_gen.star
+++ b/scripts/drone/pipelines/swagger_gen.star
@@ -2,6 +2,11 @@
This module returns all pipelines used in OpenAPI specification generation of Grafana HTTP APIs
"""
+load(
+ "scripts/drone/steps/github.star",
+ "github_app_generate_token_step",
+ "github_app_pipeline_volumes",
+)
load(
"scripts/drone/steps/lib.star",
"enterprise_setup_step",
@@ -14,10 +19,6 @@ load(
"scripts/drone/utils/utils.star",
"pipeline",
)
-load(
- "scripts/drone/vault.star",
- "from_secret",
-)
def swagger_gen_step(ver_mode):
if ver_mode != "pr":
@@ -26,9 +27,6 @@ def swagger_gen_step(ver_mode):
return {
"name": "swagger-gen",
"image": images["go"],
- "environment": {
- "GITHUB_TOKEN": from_secret("github_token"),
- },
"commands": [
"apk add --update git make",
"make swagger-clean && make openapi3-gen",
@@ -42,6 +40,7 @@ def swagger_gen_step(ver_mode):
def swagger_gen(ver_mode, source = "${DRONE_SOURCE_BRANCH}"):
test_steps = [
+ github_app_generate_token_step(),
enterprise_setup_step(source = source, canFail = True),
swagger_gen_step(ver_mode = ver_mode),
]
@@ -53,6 +52,7 @@ def swagger_gen(ver_mode, source = "${DRONE_SOURCE_BRANCH}"):
},
services = [],
steps = test_steps,
+ volumes = github_app_pipeline_volumes(),
)
return p
diff --git a/scripts/drone/pipelines/test_backend.star b/scripts/drone/pipelines/test_backend.star
index c5bb47da11e..e49c9f952b9 100644
--- a/scripts/drone/pipelines/test_backend.star
+++ b/scripts/drone/pipelines/test_backend.star
@@ -2,6 +2,11 @@
This module returns the pipeline used for testing backend code.
"""
+load(
+ "scripts/drone/steps/github.star",
+ "github_app_generate_token_step",
+ "github_app_pipeline_volumes",
+)
load(
"scripts/drone/steps/lib.star",
"enterprise_setup_step",
@@ -34,10 +39,15 @@ def test_backend(trigger, ver_mode):
verify_step = verify_gen_cue_step()
verify_jsonnet_step = verify_gen_jsonnet_step()
+ volumes = []
+
if ver_mode == "pr":
# In pull requests, attempt to clone grafana enterprise.
+ steps.append(github_app_generate_token_step())
steps.append(enterprise_setup_step())
+ volumes += github_app_pipeline_volumes()
+
steps += [
identify_runner_step(),
verify_step,
@@ -52,4 +62,5 @@ def test_backend(trigger, ver_mode):
trigger = trigger,
steps = steps,
environment = environment,
+ volumes = volumes,
)
diff --git a/scripts/drone/pipelines/test_frontend.star b/scripts/drone/pipelines/test_frontend.star
index 9a01f101c58..e30a5105d28 100644
--- a/scripts/drone/pipelines/test_frontend.star
+++ b/scripts/drone/pipelines/test_frontend.star
@@ -2,6 +2,11 @@
This module returns the pipeline used for testing backend code.
"""
+load(
+ "scripts/drone/steps/github.star",
+ "github_app_generate_token_step",
+ "github_app_pipeline_volumes",
+)
load(
"scripts/drone/steps/lib.star",
"betterer_frontend_step",
@@ -35,10 +40,15 @@ def test_frontend(trigger, ver_mode):
test_step = test_frontend_step()
+ volumes = []
+
if ver_mode == "pr":
# In pull requests, attempt to clone grafana enterprise.
+ steps.append(github_app_generate_token_step())
steps.append(enterprise_setup_step())
+ volumes += github_app_pipeline_volumes()
+
steps.append(test_step)
return pipeline(
@@ -46,4 +56,5 @@ def test_frontend(trigger, ver_mode):
trigger = trigger,
steps = steps,
environment = environment,
+ volumes = volumes,
)
diff --git a/scripts/drone/rgm.star b/scripts/drone/rgm.star
index 76f38368d38..ca23013476a 100644
--- a/scripts/drone/rgm.star
+++ b/scripts/drone/rgm.star
@@ -20,6 +20,11 @@ load(
"scripts/drone/pipelines/whats_new_checker.star",
"whats_new_checker_pipeline",
)
+load(
+ "scripts/drone/steps/github.star",
+ "github_app_generate_token_step",
+ "github_app_step_volumes",
+)
load(
"scripts/drone/utils/images.star",
"images",
@@ -42,7 +47,6 @@ load(
"rgm_destination",
"rgm_downloads_destination",
"rgm_gcp_key_base64",
- "rgm_github_token",
"rgm_storybook_destination",
)
@@ -111,7 +115,6 @@ def rgm_env_secrets(env):
env["DOWNLOADS_DESTINATION"] = from_secret(rgm_downloads_destination)
env["GCP_KEY_BASE64"] = from_secret(rgm_gcp_key_base64)
- env["GITHUB_TOKEN"] = from_secret(rgm_github_token)
env["_EXPERIMENTAL_DAGGER_CLOUD_TOKEN"] = from_secret(rgm_dagger_token)
env["GPG_PRIVATE_KEY"] = from_secret("packages_gpg_private_key")
env["GPG_PUBLIC_KEY"] = from_secret("packages_gpg_public_key")
@@ -142,12 +145,13 @@ def rgm_run(name, script):
"pull": "always",
"commands": [
"export GRAFANA_DIR=$$(pwd)",
+ "export GITHUB_TOKEN=$(cat /github-app/token)",
"cd /src && ./scripts/{}".format(script),
],
"environment": rgm_env_secrets(env),
# The docker socket is a requirement for running dagger programs
# In the future we should find a way to use dagger without mounting the docker socket.
- "volumes": [{"name": "docker", "path": "/var/run/docker.sock"}],
+ "volumes": [{"name": "docker", "path": "/var/run/docker.sock"}] + github_app_step_volumes(),
}
return [
@@ -345,6 +349,7 @@ def rgm_promotion_pipeline():
"image": "grafana/grafana-build:main",
"pull": "always",
"commands": [
+ "export GITHUB_TOKEN=$(cat /github-app/token)",
"dagger run --silent /src/grafana-build artifacts " +
"-a $${ARTIFACTS} " +
"--grafana-ref=$${GRAFANA_REF} " +
@@ -355,12 +360,16 @@ def rgm_promotion_pipeline():
"environment": rgm_env_secrets(env),
# The docker socket is a requirement for running dagger programs
# In the future we should find a way to use dagger without mounting the docker socket.
- "volumes": [{"name": "docker", "path": "/var/run/docker.sock"}],
+ "volumes": [{"name": "docker", "path": "/var/run/docker.sock"}] + github_app_step_volumes(),
}
+ generate_token_step = github_app_generate_token_step()
publish_step = rgm_copy("dist/*", "$${UPLOAD_TO}")
-
+ build_step["depends_on"] = [
+ generate_token_step["name"],
+ ]
steps = [
+ generate_token_step,
build_step,
publish_step,
]
diff --git a/scripts/drone/steps/github.star b/scripts/drone/steps/github.star
new file mode 100644
index 00000000000..d40ff829751
--- /dev/null
+++ b/scripts/drone/steps/github.star
@@ -0,0 +1,40 @@
+"""
+This module is used to interface with the GitHub App to extract temporary installation tokens.
+"""
+
+load(
+ "scripts/drone/utils/images.star",
+ "images",
+)
+load(
+ "scripts/drone/vault.star",
+ "from_secret",
+ "github_app_app_id",
+ "github_app_app_installation_id",
+ "github_app_private_key",
+)
+
+def github_app_step_volumes():
+ return [
+ {"name": "github-app", "path": "/github-app"},
+ ]
+
+def github_app_pipeline_volumes():
+ return [
+ {"name": "github-app", "temp": {}},
+ ]
+
+def github_app_generate_token_step():
+ return {
+ "name": "github-app-generate-token",
+ "image": images["github_app_secret_writer"],
+ "environment": {
+ "GITHUB_APP_ID": from_secret(github_app_app_id),
+ "GITHUB_APP_INSTALLATION_ID": from_secret(github_app_app_installation_id),
+ "GITHUB_APP_PRIVATE_KEY": from_secret(github_app_private_key),
+ },
+ "commands": [
+ "echo $(/usr/bin/github-app-external-token) > /github-app/token",
+ ],
+ "volumes": github_app_step_volumes(),
+ }
diff --git a/scripts/drone/steps/lib.star b/scripts/drone/steps/lib.star
index cfb5e2ec09e..bdf78d6679c 100644
--- a/scripts/drone/steps/lib.star
+++ b/scripts/drone/steps/lib.star
@@ -2,6 +2,11 @@
This module is a library of Drone steps and other pipeline components.
"""
+load(
+ "scripts/drone/steps/github.star",
+ "github_app_generate_token_step",
+ "github_app_step_volumes",
+)
load(
"scripts/drone/steps/rgm.star",
"rgm_build_backend_step",
@@ -101,23 +106,25 @@ def clone_enterprise_step_pr(source = "${DRONE_COMMIT}", target = "main", canFai
check = []
else:
check = [
- 'is_fork=$(curl "https://$GITHUB_TOKEN@api.github.com/repos/grafana/grafana/pulls/$DRONE_PULL_REQUEST" | jq .head.repo.fork)',
+ 'is_fork=$(curl --retry 5 "https://$${GITHUB_TOKEN}@api.github.com/repos/grafana/grafana/pulls/$DRONE_PULL_REQUEST" | jq .head.repo.fork)',
'if [ "$is_fork" != false ]; then return 1; fi', # Only clone if we're confident that 'fork' is 'false'. Fail if it's also empty.
]
step = {
"name": "clone-enterprise",
"image": images["git"],
- "environment": {
- "GITHUB_TOKEN": from_secret("github_token"),
- },
"commands": [
"apk add --update curl jq bash",
+ "GITHUB_TOKEN=$(cat /github-app/token)",
] + check + [
- 'git clone "https://$${GITHUB_TOKEN}@github.com/grafana/grafana-enterprise.git" ' + location,
+ 'git clone "https://x-access-token:$${GITHUB_TOKEN}@github.com/grafana/grafana-enterprise.git" ' + location,
"cd {}".format(location),
'if git checkout {0}; then echo "checked out {0}"; elif git checkout {1}; then echo "git checkout {1}"; else git checkout main; fi'.format(source, target),
],
+ "depends_on": [
+ github_app_generate_token_step()["name"],
+ ],
+ "volumes": github_app_step_volumes(),
}
if canFail:
@@ -328,6 +335,7 @@ def e2e_tests_artifacts():
"end-to-end-tests-panels-suite",
"end-to-end-tests-smoke-tests-suite",
"end-to-end-tests-various-suite",
+ github_app_generate_token_step()["name"],
],
"failure": "ignore",
"when": {
@@ -339,9 +347,9 @@ def e2e_tests_artifacts():
"environment": {
"GCP_GRAFANA_UPLOAD_ARTIFACTS_KEY": from_secret(gcp_upload_artifacts_key),
"E2E_TEST_ARTIFACTS_BUCKET": "releng-pipeline-artifacts-dev",
- "GITHUB_TOKEN": from_secret("github_token"),
},
"commands": [
+ "export GITHUB_TOKEN=$(cat /github-app/token)",
# if no videos found do nothing
"if [ -z `find ./e2e -type f -name *spec.ts.mp4` ]; then echo 'missing videos'; false; fi",
"apt-get update",
@@ -356,6 +364,7 @@ def e2e_tests_artifacts():
'curl -X POST https://api.github.com/repos/${DRONE_REPO}/statuses/${DRONE_COMMIT_SHA} -H "Authorization: token $${GITHUB_TOKEN}" -d ' +
'"{\\"state\\":\\"success\\",\\"target_url\\":\\"$${E2E_ARTIFACTS_VIDEO_ZIP}\\", \\"description\\": \\"Click on the details to download e2e recording videos\\", \\"context\\": \\"e2e_artifacts\\"}"',
],
+ "volumes": github_app_step_volumes(),
}
def playwright_e2e_report_upload():
@@ -392,6 +401,7 @@ def playwright_e2e_report_post_link():
"image": images["curl"],
"depends_on": [
"playwright-e2e-report-upload",
+ github_app_generate_token_step()["name"],
],
"failure": "ignore",
"when": {
@@ -400,10 +410,8 @@ def playwright_e2e_report_post_link():
"failure",
],
},
- "environment": {
- "GITHUB_TOKEN": from_secret("github_token"),
- },
"commands": [
+ "GITHUB_TOKEN=$(cat /github-app/token)",
# if the trace doesn't folder exists, it means that there are no failed tests.
"if [ ! -d ./playwright-report/trace ]; then echo 'all tests passed'; exit 0; fi",
# if it exists, we will post a comment on the PR with the link to the report
@@ -415,6 +423,7 @@ def playwright_e2e_report_post_link():
'-H "X-GitHub-Api-Version: 2022-11-28" -d ' +
'"{\\"body\\":\\"❌ Failed to run Playwright plugin e2e tests.
Click [here]($${E2E_PLAYWRIGHT_REPORT_URL}) to browse the Playwright report and trace viewer.
For information on how to run Playwright tests locally, refer to the [Developer guide](https://github.com/grafana/grafana/blob/main/contribute/developer-guide.md#to-run-the-playwright-tests). \\"}"',
],
+ "volumes": github_app_step_volumes(),
}
def upload_cdn_step(ver_mode, trigger = None):
@@ -815,7 +824,6 @@ def cloud_plugins_e2e_tests_step(suite, cloud, trigger = None):
environment = {
"CYPRESS_CI": "true",
"HOST": "grafana-server",
- "GITHUB_TOKEN": from_secret("github_token"),
"AZURE_SP_APP_ID": from_secret("azure_sp_app_id"),
"AZURE_SP_PASSWORD": from_secret("azure_sp_app_pw"),
"AZURE_TENANT": from_secret("azure_tenant"),
@@ -836,9 +844,15 @@ def cloud_plugins_e2e_tests_step(suite, cloud, trigger = None):
"image": "us-docker.pkg.dev/grafanalabs-dev/cloud-data-sources/e2e-13.1.0:1.0.0",
"depends_on": [
"grafana-server",
+ github_app_generate_token_step()["name"],
],
"environment": environment,
- "commands": ["cd /", "./cpp-e2e/scripts/ci-run.sh {} {}".format(cloud, branch)],
+ "commands": [
+ "GITHUB_TOKEN=$(cat /github-app/token)",
+ "cd /",
+ "./cpp-e2e/scripts/ci-run.sh {} {}".format(cloud, branch),
+ ],
+ "volumes": github_app_step_volumes(),
}
step = dict(step, when = when)
return step
diff --git a/scripts/drone/utils/images.star b/scripts/drone/utils/images.star
index c93ed3a7515..4c16062ece0 100644
--- a/scripts/drone/utils/images.star
+++ b/scripts/drone/utils/images.star
@@ -37,4 +37,5 @@ images = {
"playwright": "mcr.microsoft.com/playwright:v1.42.1-jammy",
"rocky": "rockylinux:9",
"wine": "scottyhardy/docker-wine:stable-9.0",
+ "github_app_secret_writer": "us-docker.pkg.dev/grafanalabs-global/docker-deployment-tools-prod/github-app-secret-writer:2024-11-05-v11688112090.1-83920c59",
}
diff --git a/scripts/drone/vault.star b/scripts/drone/vault.star
index a15a17f5060..aa77f81be39 100644
--- a/scripts/drone/vault.star
+++ b/scripts/drone/vault.star
@@ -9,16 +9,20 @@ gcp_upload_artifacts_key = "gcp_upload_artifacts_key"
gcp_grafanauploads = "gcp_grafanauploads"
gcp_grafanauploads_base64 = "gcp_grafanauploads_base64"
gcp_download_build_container_assets_key = "gcp_download_build_container_assets_key"
+
azure_sp_app_id = "azure_sp_app_id"
azure_sp_app_pw = "azure_sp_app_pw"
azure_tenant = "azure_tenant"
+github_app_app_id = "github-app-app-id"
+github_app_app_installation_id = "github-app-installation-id"
+github_app_private_key = "github-app-private-key"
+
rgm_gcp_key_base64 = "gcp_key_base64"
rgm_destination = "destination"
rgm_storybook_destination = "rgm_storybook_destination"
rgm_cdn_destination = "rgm_cdn_destination"
rgm_downloads_destination = "rgm_downloads_destination"
-rgm_github_token = "github_token"
rgm_dagger_token = "dagger_token"
docker_username = "docker_username"
@@ -41,12 +45,14 @@ def vault_secret(name, path, key):
def secrets():
return [
+ vault_secret(github_app_app_id, "ci/data/repo/grafana/grafana/github-app", "app-id"),
+ vault_secret(github_app_app_installation_id, "ci/data/repo/grafana/grafana/github-app", "app-installation-id"),
+ vault_secret(github_app_private_key, "ci/data/repo/grafana/grafana/github-app", "private-key"),
vault_secret(gcp_grafanauploads, "infra/data/ci/grafana-release-eng/grafanauploads", "credentials.json"),
vault_secret(gcp_grafanauploads_base64, "infra/data/ci/grafana-release-eng/grafanauploads", "credentials_base64"),
vault_secret("grafana_api_key", "infra/data/ci/grafana-release-eng/grafanacom", "api_key"),
vault_secret(gcr_pull_secret, "secret/data/common/gcr", ".dockerconfigjson"),
vault_secret(gar_pull_secret, "secret/data/common/gar", ".dockerconfigjson"),
- vault_secret("github_token", "ci/data/repo/grafana/grafana/grafanabot", "pat"),
vault_secret(drone_token, "infra/data/ci/drone", "machine-user-token"),
vault_secret(prerelease_bucket, "infra/data/ci/grafana/prerelease", "bucket"),
vault_secret(docker_username, "infra/data/ci/grafanaci-docker-hub", "username"),