From 2755a139e988a499bcdc8670d264bd3e68b732f4 Mon Sep 17 00:00:00 2001 From: Kevin Minehart Date: Fri, 7 Jul 2023 12:39:46 -0500 Subject: [PATCH] [v9.5.x] CI: Add GPG keys to rgm, don't clone RGM just use the docker image (#71233) * CI: Add rgm to drone (#66991) * add drone stub that build grafana using 'grafana/build' (dagger) --------- Co-authored-by: Ricky Whitaker (cherry picked from commit 768efe9748e4041eab92ee64161b33902977d5a8) * Add dagger token to rgm builds (#68651) (cherry picked from commit a870b227dba172dc67012f27b12c7b2f510cd014) * CI: Add GPG keys to rgm, don't clone RGM just use the docker image (#71143) (cherry picked from commit d5a4c81fa1ed9ceb897db34b42a189a7eccc47f1) --- .drone.star | 5 + .drone.yml | 206 +++++++++++++++++++++++++++++- scripts/drone/events/release.star | 2 +- scripts/drone/rgm.star | 114 +++++++++++++++++ scripts/drone/vault.star | 45 +++++++ scripts/list-release-artifacts.sh | 69 +++++----- 6 files changed, 404 insertions(+), 37 deletions(-) create mode 100644 scripts/drone/rgm.star diff --git a/.drone.star b/.drone.star index bd0fca97700..36c55cbe47a 100644 --- a/.drone.star +++ b/.drone.star @@ -20,6 +20,10 @@ load( "publish_packages_pipeline", "verify_release_pipeline", ) +load( + "scripts/drone/rgm.star", + "rgm", +) load( "scripts/drone/pipelines/publish_images.star", "publish_image_pipelines_public", @@ -58,6 +62,7 @@ def main(_ctx): "event": ["promote"], "target": ["test-windows"], }, "oss", "testing")] + + rgm() + version_branch_pipelines() + integration_test_pipelines() + publish_ci_windows_test_image_pipeline() + diff --git a/.drone.yml b/.drone.yml index d9f9a2e69fb..b92dfe78162 100644 --- a/.drone.yml +++ b/.drone.yml @@ -4291,7 +4291,8 @@ steps: - apt-get update && apt-get install -yq gettext - printenv GCP_KEY | base64 -d > /tmp/key.json - gcloud auth activate-service-account --key-file=/tmp/key.json - - ./scripts/list-release-artifacts.sh ${DRONE_TAG} | xargs -n1 gsutil stat + - ./scripts/list-release-artifacts.sh ${DRONE_TAG} | xargs -n1 gsutil stat | grep + "No URLs matched" depends_on: - clone environment: @@ -4368,6 +4369,159 @@ volumes: path: //./pipe/docker_engine/ name: docker --- +clone: + retries: 3 +depends_on: +- main-test-backend +- main-test-frontend +image_pull_secrets: +- dockerconfigjson +kind: pipeline +name: rgm-main-prerelease +node: + type: no-parallel +platform: + arch: amd64 + os: linux +services: [] +steps: +- commands: + - export GRAFANA_DIR=$$(pwd) + - cd /src && ./scripts/drone_publish_main.sh + environment: + _EXPERIMENTAL_DAGGER_CLOUD_TOKEN: + from_secret: dagger_token + DESTINATION: + from_secret: destination + GCP_KEY_BASE64: + from_secret: gcp_key_base64 + GITHUB_TOKEN: + from_secret: github_token + GPG_PASSPHRASE: + from_secret: packages_gpg_passphrase + GPG_PRIVATE_KEY: + from_secret: packages_gpg_private_key + GPG_PUBLIC_KEY: + from_secret: packages_gpg_public_key + failure: ignore + image: grafana/grafana-build:main + name: rgm-build + volumes: + - name: docker + path: /var/run/docker.sock +trigger: + branch: main + event: + - push + paths: + exclude: + - '*.md' + - docs/** + - packages/**/*.md + - latest.json +type: docker +volumes: +- host: + path: /var/run/docker.sock + name: docker +--- +clone: + retries: 3 +depends_on: [] +image_pull_secrets: +- dockerconfigjson +kind: pipeline +name: rgm-tag-prerelease +node: + type: no-parallel +platform: + arch: amd64 + os: linux +services: [] +steps: +- commands: + - export GRAFANA_DIR=$$(pwd) + - cd /src && ./scripts/drone_publish_tag.sh + environment: + _EXPERIMENTAL_DAGGER_CLOUD_TOKEN: + from_secret: dagger_token + DESTINATION: + from_secret: destination + GCP_KEY_BASE64: + from_secret: gcp_key_base64 + GITHUB_TOKEN: + from_secret: github_token + GPG_PASSPHRASE: + from_secret: packages_gpg_passphrase + GPG_PRIVATE_KEY: + from_secret: packages_gpg_private_key + GPG_PUBLIC_KEY: + from_secret: packages_gpg_public_key + failure: ignore + image: grafana/grafana-build:main + name: rgm-build + volumes: + - name: docker + path: /var/run/docker.sock +trigger: + event: + exclude: + - promote + ref: + exclude: + - refs/tags/*-cloud* + include: + - refs/tags/v* +type: docker +volumes: +- host: + path: /var/run/docker.sock + name: docker +--- +clone: + retries: 3 +depends_on: +- rgm-tag-prerelease +image_pull_secrets: +- dockerconfigjson +kind: pipeline +name: rgm-tag-verify-prerelease-assets +node: + type: no-parallel +platform: + arch: amd64 + os: linux +services: [] +steps: +- commands: + - apt-get update && apt-get install -yq gettext + - printenv GCP_KEY | base64 -d > /tmp/key.json + - gcloud auth activate-service-account --key-file=/tmp/key.json + - ./scripts/list-release-artifacts.sh ${DRONE_TAG} | xargs -n1 gsutil stat | grep + "No URLs matched" + depends_on: + - clone + environment: + BUCKET: grafana-prerelease-dev + GCP_KEY: + from_secret: gcp_key + image: google/cloud-sdk:431.0.0 + name: gsutil-stat +trigger: + event: + exclude: + - promote + ref: + exclude: + - refs/tags/*-cloud* + include: + - refs/tags/v* +type: docker +volumes: +- host: + path: /var/run/docker.sock + name: docker +--- clone: retries: 3 depends_on: [] @@ -6605,6 +6759,36 @@ get: kind: secret name: enterprise2-cdn-path --- +get: + name: security_prefix + path: infra/data/ci/grafana-release-eng/enterprise2 +kind: secret +name: enterprise2_security_prefix +--- +get: + name: gcp_service_account_base64 + path: infra/data/ci/grafana-release-eng/rgm +kind: secret +name: gcp_key_base64 +--- +get: + name: destination + path: infra/data/ci/grafana-release-eng/rgm +kind: secret +name: destination +--- +get: + name: dagger_token + path: infra/data/ci/grafana-release-eng/rgm +kind: secret +name: dagger_token +--- +get: + name: pat + path: infra/data/ci/github/grafanabot +kind: secret +name: github_token +--- get: name: app-id path: infra/data/ci/grafana-release-eng/grafana-delivery-bot @@ -6623,7 +6807,25 @@ get: kind: secret name: delivery-bot-app-private-key --- +get: + name: gcp_service_account_base64 + path: infra/data/ci/grafana-release-eng/rgm +kind: secret +name: gcp_key_base64 +--- +get: + name: destination + path: infra/data/ci/grafana-release-eng/rgm +kind: secret +name: destination +--- +get: + name: pat + path: infra/data/ci/github/grafanabot +kind: secret +name: github_token +--- kind: signature -hmac: 60a7acfa3be8ddc529c99b3a94761c40be632f715dce44478744f76140f49651 +hmac: 2350d00c90676307742d678277a788e584c470f2c373f27b3ac5d3536244af37 ... diff --git a/scripts/drone/events/release.star b/scripts/drone/events/release.star index 3303673aaed..09618a1e0af 100644 --- a/scripts/drone/events/release.star +++ b/scripts/drone/events/release.star @@ -799,7 +799,7 @@ def verify_release_pipeline( "apt-get update && apt-get install -yq gettext", "printenv GCP_KEY | base64 -d > /tmp/key.json", "gcloud auth activate-service-account --key-file=/tmp/key.json", - "./scripts/list-release-artifacts.sh {} | xargs -n1 gsutil stat".format(version), + "./scripts/list-release-artifacts.sh {} | xargs -n1 gsutil stat | grep \"No URLs matched\"".format(version), ], } return pipeline( diff --git a/scripts/drone/rgm.star b/scripts/drone/rgm.star new file mode 100644 index 00000000000..b7e81d65925 --- /dev/null +++ b/scripts/drone/rgm.star @@ -0,0 +1,114 @@ +""" +rgm uses 'github.com/grafana/grafana-build' to build Grafana on the following events: +* A merge to main +* A tag that begins with a 'v' +""" + +load( + "scripts/drone/utils/utils.star", + "pipeline", +) +load( + "scripts/drone/events/release.star", + "verify_release_pipeline", +) +load( + "scripts/drone/vault.star", + "from_secret", + "rgm_dagger_token", + "rgm_destination", + "rgm_gcp_key_base64", + "rgm_github_token", +) + +rgm_env_secrets = { + "GCP_KEY_BASE64": from_secret(rgm_gcp_key_base64), + "DESTINATION": from_secret(rgm_destination), + "GITHUB_TOKEN": from_secret(rgm_github_token), + "_EXPERIMENTAL_DAGGER_CLOUD_TOKEN": from_secret(rgm_dagger_token), + "GPG_PRIVATE_KEY": from_secret("packages_gpg_private_key"), + "GPG_PUBLIC_KEY": from_secret("packages_gpg_public_key"), + "GPG_PASSPHRASE": from_secret("packages_gpg_passphrase"), +} + +def rgm_build(script = "drone_publish_main.sh"): + rgm_build_step = { + "name": "rgm-build", + "image": "grafana/grafana-build:main", + "commands": [ + "export GRAFANA_DIR=$$(pwd)", + "cd /src && ./scripts/{}".format(script), + ], + "environment": rgm_env_secrets, + # 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"}], + "failure": "ignore", + } + + return [ + rgm_build_step, + ] + +docs_paths = { + "exclude": [ + "*.md", + "docs/**", + "packages/**/*.md", + "latest.json", + ], +} + +def rgm_main(): + trigger = { + "event": [ + "push", + ], + "branch": "main", + "paths": docs_paths, + } + + return pipeline( + name = "rgm-main-prerelease", + edition = "all", + trigger = trigger, + steps = rgm_build(), + depends_on = ["main-test-backend", "main-test-frontend"], + ) + +tag_trigger = { + "event": { + "exclude": [ + "promote", + ], + }, + "ref": { + "include": [ + "refs/tags/v*", + ], + "exclude": [ + "refs/tags/*-cloud*", + ], + }, +} + +def rgm_tag(): + return pipeline( + name = "rgm-tag-prerelease", + edition = "all", + trigger = tag_trigger, + steps = rgm_build(script = "drone_publish_tag.sh"), + depends_on = [], + ) + +def rgm(): + return [ + rgm_main(), + rgm_tag(), + verify_release_pipeline( + name = "rgm-tag-verify-prerelease-assets", + trigger = tag_trigger, + depends_on = ["rgm-tag-prerelease"], + bucket = "grafana-prerelease-dev", + ), + ] diff --git a/scripts/drone/vault.star b/scripts/drone/vault.star index 8546ae426eb..7c62ca16cb8 100644 --- a/scripts/drone/vault.star +++ b/scripts/drone/vault.star @@ -9,6 +9,11 @@ azure_sp_app_id = "azure_sp_app_id" azure_sp_app_pw = "azure_sp_app_pw" azure_tenant = "azure_tenant" +rgm_gcp_key_base64 = "gcp_key_base64" +rgm_destination = "destination" +rgm_github_token = "github_token" +rgm_dagger_token = "dagger_token" + def from_secret(secret): return {"from_secret": secret} @@ -104,6 +109,31 @@ def secrets(): "infra/data/ci/grafana-release-eng/enterprise2", "cdn_path", ), + vault_secret( + "enterprise2_security_prefix", + "infra/data/ci/grafana-release-eng/enterprise2", + "security_prefix", + ), + vault_secret( + rgm_gcp_key_base64, + "infra/data/ci/grafana-release-eng/rgm", + "gcp_service_account_base64", + ), + vault_secret( + rgm_destination, + "infra/data/ci/grafana-release-eng/rgm", + "destination", + ), + vault_secret( + rgm_dagger_token, + "infra/data/ci/grafana-release-eng/rgm", + "dagger_token", + ), + vault_secret( + rgm_github_token, + "infra/data/ci/github/grafanabot", + "pat", + ), # grafana-delivery-bot secrets vault_secret( "delivery-bot-app-id", @@ -120,4 +150,19 @@ def secrets(): "infra/data/ci/grafana-release-eng/grafana-delivery-bot", "app-private-key", ), + vault_secret( + rgm_gcp_key_base64, + "infra/data/ci/grafana-release-eng/rgm", + "gcp_service_account_base64", + ), + vault_secret( + rgm_destination, + "infra/data/ci/grafana-release-eng/rgm", + "destination", + ), + vault_secret( + rgm_github_token, + "infra/data/ci/github/grafanabot", + "pat", + ), ] diff --git a/scripts/list-release-artifacts.sh b/scripts/list-release-artifacts.sh index a5c3c4eebbc..588b49d8b5f 100755 --- a/scripts/list-release-artifacts.sh +++ b/scripts/list-release-artifacts.sh @@ -3,17 +3,18 @@ set -e VERSION="${1:-v9.5.2}" ERSION="${VERSION#*v}" +ERSION_DEB="${ERSION//-/\~}" ASSETS=$(cat << EOF gs://${BUCKET}/artifacts/static-assets/grafana-oss/${ERSION}/public/robots.txt gs://${BUCKET}/artifacts/static-assets/grafana/${ERSION}/public/robots.txt gs://${BUCKET}/artifacts/static-assets/grafana-pro/${ERSION}/public/robots.txt -gs://${BUCKET}/artifacts/downloads/${VERSION}/oss/release/grafana-${ERSION}-1.aarch64.rpm -gs://${BUCKET}/artifacts/downloads/${VERSION}/oss/release/grafana-${ERSION}-1.aarch64.rpm.sha256 -gs://${BUCKET}/artifacts/downloads/${VERSION}/oss/release/grafana-${ERSION}-1.armhfp.rpm -gs://${BUCKET}/artifacts/downloads/${VERSION}/oss/release/grafana-${ERSION}-1.armhfp.rpm.sha256 -gs://${BUCKET}/artifacts/downloads/${VERSION}/oss/release/grafana-${ERSION}-1.x86_64.rpm -gs://${BUCKET}/artifacts/downloads/${VERSION}/oss/release/grafana-${ERSION}-1.x86_64.rpm.sha256 +gs://${BUCKET}/artifacts/downloads/${VERSION}/oss/release/grafana-${ERSION_DEB}-1.aarch64.rpm +gs://${BUCKET}/artifacts/downloads/${VERSION}/oss/release/grafana-${ERSION_DEB}-1.aarch64.rpm.sha256 +gs://${BUCKET}/artifacts/downloads/${VERSION}/oss/release/grafana-${ERSION_DEB}-1.armhfp.rpm +gs://${BUCKET}/artifacts/downloads/${VERSION}/oss/release/grafana-${ERSION_DEB}-1.armhfp.rpm.sha256 +gs://${BUCKET}/artifacts/downloads/${VERSION}/oss/release/grafana-${ERSION_DEB}-1.x86_64.rpm +gs://${BUCKET}/artifacts/downloads/${VERSION}/oss/release/grafana-${ERSION_DEB}-1.x86_64.rpm.sha256 gs://${BUCKET}/artifacts/downloads/${VERSION}/oss/release/grafana-${ERSION}.darwin-amd64.tar.gz gs://${BUCKET}/artifacts/downloads/${VERSION}/oss/release/grafana-${ERSION}.darwin-amd64.tar.gz.sha256 gs://${BUCKET}/artifacts/downloads/${VERSION}/oss/release/grafana-${ERSION}.linux-amd64-musl.tar.gz @@ -34,20 +35,26 @@ gs://${BUCKET}/artifacts/downloads/${VERSION}/oss/release/grafana-${ERSION}.wind gs://${BUCKET}/artifacts/downloads/${VERSION}/oss/release/grafana-${ERSION}.windows-amd64.msi.sha256 gs://${BUCKET}/artifacts/downloads/${VERSION}/oss/release/grafana-${ERSION}.windows-amd64.zip gs://${BUCKET}/artifacts/downloads/${VERSION}/oss/release/grafana-${ERSION}.windows-amd64.zip.sha256 -gs://${BUCKET}/artifacts/downloads/${VERSION}/oss/release/grafana-rpi_${ERSION}_armhf.deb -gs://${BUCKET}/artifacts/downloads/${VERSION}/oss/release/grafana-rpi_${ERSION}_armhf.deb.sha256 -gs://${BUCKET}/artifacts/downloads/${VERSION}/oss/release/grafana_${ERSION}_amd64.deb -gs://${BUCKET}/artifacts/downloads/${VERSION}/oss/release/grafana_${ERSION}_amd64.deb.sha256 -gs://${BUCKET}/artifacts/downloads/${VERSION}/oss/release/grafana_${ERSION}_arm64.deb -gs://${BUCKET}/artifacts/downloads/${VERSION}/oss/release/grafana_${ERSION}_arm64.deb.sha256 -gs://${BUCKET}/artifacts/downloads/${VERSION}/oss/release/grafana_${ERSION}_armhf.deb -gs://${BUCKET}/artifacts/downloads/${VERSION}/oss/release/grafana_${ERSION}_armhf.deb.sha256 -gs://${BUCKET}/artifacts/downloads/${VERSION}/enterprise/release/grafana-enterprise-${ERSION}-1.aarch64.rpm -gs://${BUCKET}/artifacts/downloads/${VERSION}/enterprise/release/grafana-enterprise-${ERSION}-1.aarch64.rpm.sha256 -gs://${BUCKET}/artifacts/downloads/${VERSION}/enterprise/release/grafana-enterprise-${ERSION}-1.armhfp.rpm -gs://${BUCKET}/artifacts/downloads/${VERSION}/enterprise/release/grafana-enterprise-${ERSION}-1.armhfp.rpm.sha256 -gs://${BUCKET}/artifacts/downloads/${VERSION}/enterprise/release/grafana-enterprise-${ERSION}-1.x86_64.rpm -gs://${BUCKET}/artifacts/downloads/${VERSION}/enterprise/release/grafana-enterprise-${ERSION}-1.x86_64.rpm.sha256 +gs://${BUCKET}/artifacts/downloads/${VERSION}/oss/release/grafana-rpi_${ERSION_DEB}_armhf.deb +gs://${BUCKET}/artifacts/downloads/${VERSION}/oss/release/grafana-rpi_${ERSION_DEB}_armhf.deb.sha256 +gs://${BUCKET}/artifacts/downloads/${VERSION}/oss/release/grafana_${ERSION_DEB}_amd64.deb +gs://${BUCKET}/artifacts/downloads/${VERSION}/oss/release/grafana_${ERSION_DEB}_amd64.deb.sha256 +gs://${BUCKET}/artifacts/downloads/${VERSION}/oss/release/grafana_${ERSION_DEB}_arm64.deb +gs://${BUCKET}/artifacts/downloads/${VERSION}/oss/release/grafana_${ERSION_DEB}_arm64.deb.sha256 +gs://${BUCKET}/artifacts/downloads/${VERSION}/oss/release/grafana_${ERSION_DEB}_armhf.deb +gs://${BUCKET}/artifacts/downloads/${VERSION}/oss/release/grafana_${ERSION_DEB}_armhf.deb.sha256 +gs://${BUCKET}/artifacts/downloads-enterprise2/${VERSION}/enterprise2/release/grafana-enterprise2-${ERSION}.linux-amd64.tar.gz +gs://${BUCKET}/artifacts/downloads-enterprise2/${VERSION}/enterprise2/release/grafana-enterprise2-${ERSION}.linux-amd64.tar.gz.sha256 +gs://${BUCKET}/artifacts/downloads-enterprise2/${VERSION}/enterprise2/release/grafana-enterprise2-${ERSION}.linux-amd64-musl.tar.gz +gs://${BUCKET}/artifacts/downloads-enterprise2/${VERSION}/enterprise2/release/grafana-enterprise2-${ERSION}.linux-amd64-musl.tar.gz.sha256 +gs://${BUCKET}/artifacts/downloads-enterprise2/${VERSION}/enterprise2/release/grafana-enterprise2_${ERSION_DEB}_amd64.deb +gs://${BUCKET}/artifacts/downloads-enterprise2/${VERSION}/enterprise2/release/grafana-enterprise2_${ERSION_DEB}_amd64.deb.sha256 +gs://${BUCKET}/artifacts/downloads/${VERSION}/enterprise/release/grafana-enterprise-${ERSION_DEB}-1.aarch64.rpm +gs://${BUCKET}/artifacts/downloads/${VERSION}/enterprise/release/grafana-enterprise-${ERSION_DEB}-1.aarch64.rpm.sha256 +gs://${BUCKET}/artifacts/downloads/${VERSION}/enterprise/release/grafana-enterprise-${ERSION_DEB}-1.armhfp.rpm +gs://${BUCKET}/artifacts/downloads/${VERSION}/enterprise/release/grafana-enterprise-${ERSION_DEB}-1.armhfp.rpm.sha256 +gs://${BUCKET}/artifacts/downloads/${VERSION}/enterprise/release/grafana-enterprise-${ERSION_DEB}-1.x86_64.rpm +gs://${BUCKET}/artifacts/downloads/${VERSION}/enterprise/release/grafana-enterprise-${ERSION_DEB}-1.x86_64.rpm.sha256 gs://${BUCKET}/artifacts/downloads/${VERSION}/enterprise/release/grafana-enterprise-${ERSION}.darwin-amd64.tar.gz gs://${BUCKET}/artifacts/downloads/${VERSION}/enterprise/release/grafana-enterprise-${ERSION}.darwin-amd64.tar.gz.sha256 gs://${BUCKET}/artifacts/downloads/${VERSION}/enterprise/release/grafana-enterprise-${ERSION}.linux-amd64-musl.tar.gz @@ -68,26 +75,20 @@ gs://${BUCKET}/artifacts/downloads/${VERSION}/enterprise/release/grafana-enterpr gs://${BUCKET}/artifacts/downloads/${VERSION}/enterprise/release/grafana-enterprise-${ERSION}.windows-amd64.msi.sha256 gs://${BUCKET}/artifacts/downloads/${VERSION}/enterprise/release/grafana-enterprise-${ERSION}.windows-amd64.zip gs://${BUCKET}/artifacts/downloads/${VERSION}/enterprise/release/grafana-enterprise-${ERSION}.windows-amd64.zip.sha256 -gs://${BUCKET}/artifacts/downloads/${VERSION}/enterprise/release/grafana-enterprise-rpi_${ERSION}_armhf.deb -gs://${BUCKET}/artifacts/downloads/${VERSION}/enterprise/release/grafana-enterprise-rpi_${ERSION}_armhf.deb.sha256 -gs://${BUCKET}/artifacts/downloads/${VERSION}/enterprise/release/grafana-enterprise_${ERSION}_amd64.deb -gs://${BUCKET}/artifacts/downloads/${VERSION}/enterprise/release/grafana-enterprise_${ERSION}_amd64.deb.sha256 -gs://${BUCKET}/artifacts/downloads/${VERSION}/enterprise/release/grafana-enterprise_${ERSION}_arm64.deb -gs://${BUCKET}/artifacts/downloads/${VERSION}/enterprise/release/grafana-enterprise_${ERSION}_arm64.deb.sha256 -gs://${BUCKET}/artifacts/downloads/${VERSION}/enterprise/release/grafana-enterprise_${ERSION}_armhf.deb -gs://${BUCKET}/artifacts/downloads/${VERSION}/enterprise/release/grafana-enterprise_${ERSION}_armhf.deb.sha256 +gs://${BUCKET}/artifacts/downloads/${VERSION}/enterprise/release/grafana-enterprise-rpi_${ERSION_DEB}_armhf.deb +gs://${BUCKET}/artifacts/downloads/${VERSION}/enterprise/release/grafana-enterprise-rpi_${ERSION_DEB}_armhf.deb.sha256 +gs://${BUCKET}/artifacts/downloads/${VERSION}/enterprise/release/grafana-enterprise_${ERSION_DEB}_amd64.deb +gs://${BUCKET}/artifacts/downloads/${VERSION}/enterprise/release/grafana-enterprise_${ERSION_DEB}_amd64.deb.sha256 +gs://${BUCKET}/artifacts/downloads/${VERSION}/enterprise/release/grafana-enterprise_${ERSION_DEB}_arm64.deb +gs://${BUCKET}/artifacts/downloads/${VERSION}/enterprise/release/grafana-enterprise_${ERSION_DEB}_arm64.deb.sha256 +gs://${BUCKET}/artifacts/downloads/${VERSION}/enterprise/release/grafana-enterprise_${ERSION_DEB}_armhf.deb +gs://${BUCKET}/artifacts/downloads/${VERSION}/enterprise/release/grafana-enterprise_${ERSION_DEB}_armhf.deb.sha256 gs://${BUCKET}/artifacts/docker/${ERSION}/grafana-enterprise-${ERSION}-amd64.img gs://${BUCKET}/artifacts/docker/${ERSION}/grafana-enterprise-${ERSION}-arm64.img gs://${BUCKET}/artifacts/docker/${ERSION}/grafana-enterprise-${ERSION}-armv7.img gs://${BUCKET}/artifacts/docker/${ERSION}/grafana-enterprise-${ERSION}-ubuntu-amd64.img gs://${BUCKET}/artifacts/docker/${ERSION}/grafana-enterprise-${ERSION}-ubuntu-arm64.img gs://${BUCKET}/artifacts/docker/${ERSION}/grafana-enterprise-${ERSION}-ubuntu-armv7.img -gs://${BUCKET}/artifacts/docker/${ERSION}/grafana-enterprise2-${ERSION}-amd64.img -gs://${BUCKET}/artifacts/docker/${ERSION}/grafana-enterprise2-${ERSION}-arm64.img -gs://${BUCKET}/artifacts/docker/${ERSION}/grafana-enterprise2-${ERSION}-armv7.img -gs://${BUCKET}/artifacts/docker/${ERSION}/grafana-enterprise2-${ERSION}-ubuntu-amd64.img -gs://${BUCKET}/artifacts/docker/${ERSION}/grafana-enterprise2-${ERSION}-ubuntu-arm64.img -gs://${BUCKET}/artifacts/docker/${ERSION}/grafana-enterprise2-${ERSION}-ubuntu-armv7.img gs://${BUCKET}/artifacts/docker/${ERSION}/grafana-oss-${ERSION}-amd64.img gs://${BUCKET}/artifacts/docker/${ERSION}/grafana-oss-${ERSION}-arm64.img gs://${BUCKET}/artifacts/docker/${ERSION}/grafana-oss-${ERSION}-armv7.img