| 
									
										
										
										
											2023-05-04 02:56:02 +08:00
										 |  |  | """ | 
					
						
							|  |  |  | 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' | 
					
						
							|  |  |  | """ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-23 16:01:09 +08:00
										 |  |  | load( | 
					
						
							|  |  |  |     "scripts/drone/events/release.star", | 
					
						
							|  |  |  |     "verify_release_pipeline", | 
					
						
							|  |  |  | ) | 
					
						
							| 
									
										
										
										
											2023-07-28 22:58:22 +08:00
										 |  |  | load( | 
					
						
							|  |  |  |     "scripts/drone/pipelines/test_backend.star", | 
					
						
							|  |  |  |     "test_backend", | 
					
						
							|  |  |  | ) | 
					
						
							| 
									
										
										
										
											2023-09-12 23:19:06 +08:00
										 |  |  | load( | 
					
						
							|  |  |  |     "scripts/drone/pipelines/test_frontend.star", | 
					
						
							|  |  |  |     "test_frontend", | 
					
						
							|  |  |  | ) | 
					
						
							| 
									
										
										
										
											2023-07-28 22:58:22 +08:00
										 |  |  | load( | 
					
						
							|  |  |  |     "scripts/drone/pipelines/whats_new_checker.star", | 
					
						
							|  |  |  |     "whats_new_checker_pipeline", | 
					
						
							|  |  |  | ) | 
					
						
							| 
									
										
										
										
											2023-10-05 00:55:43 +08:00
										 |  |  | load( | 
					
						
							|  |  |  |     "scripts/drone/utils/images.star", | 
					
						
							|  |  |  |     "images", | 
					
						
							|  |  |  | ) | 
					
						
							| 
									
										
										
										
											2023-09-12 23:19:06 +08:00
										 |  |  | load( | 
					
						
							|  |  |  |     "scripts/drone/utils/utils.star", | 
					
						
							|  |  |  |     "pipeline", | 
					
						
							| 
									
										
										
										
											2023-10-05 00:55:43 +08:00
										 |  |  |     "with_deps", | 
					
						
							| 
									
										
										
										
											2023-09-12 23:19:06 +08:00
										 |  |  | ) | 
					
						
							|  |  |  | load( | 
					
						
							|  |  |  |     "scripts/drone/variables.star", | 
					
						
							|  |  |  |     "golang_version", | 
					
						
							|  |  |  | ) | 
					
						
							| 
									
										
										
										
											2023-05-04 02:56:02 +08:00
										 |  |  | load( | 
					
						
							|  |  |  |     "scripts/drone/vault.star", | 
					
						
							|  |  |  |     "from_secret", | 
					
						
							| 
									
										
										
										
											2023-10-05 00:55:43 +08:00
										 |  |  |     "npm_token", | 
					
						
							|  |  |  |     "rgm_cdn_destination", | 
					
						
							| 
									
										
										
										
											2023-05-18 01:19:53 +08:00
										 |  |  |     "rgm_dagger_token", | 
					
						
							| 
									
										
										
										
											2023-05-04 02:56:02 +08:00
										 |  |  |     "rgm_destination", | 
					
						
							| 
									
										
										
										
											2023-10-05 00:55:43 +08:00
										 |  |  |     "rgm_downloads_destination", | 
					
						
							| 
									
										
										
										
											2023-05-04 02:56:02 +08:00
										 |  |  |     "rgm_gcp_key_base64", | 
					
						
							|  |  |  |     "rgm_github_token", | 
					
						
							| 
									
										
										
										
											2023-10-05 00:55:43 +08:00
										 |  |  |     "rgm_storybook_destination", | 
					
						
							| 
									
										
										
										
											2023-05-04 02:56:02 +08:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-07-28 22:58:22 +08:00
										 |  |  | docs_paths = { | 
					
						
							|  |  |  |     "exclude": [ | 
					
						
							|  |  |  |         "*.md", | 
					
						
							|  |  |  |         "docs/**", | 
					
						
							|  |  |  |         "packages/**/*.md", | 
					
						
							|  |  |  |         "latest.json", | 
					
						
							|  |  |  |     ], | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | tag_trigger = { | 
					
						
							|  |  |  |     "event": { | 
					
						
							|  |  |  |         "exclude": [ | 
					
						
							|  |  |  |             "promote", | 
					
						
							|  |  |  |         ], | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     "ref": { | 
					
						
							|  |  |  |         "include": [ | 
					
						
							|  |  |  |             "refs/tags/v*", | 
					
						
							|  |  |  |         ], | 
					
						
							|  |  |  |         "exclude": [ | 
					
						
							|  |  |  |             "refs/tags/*-cloud*", | 
					
						
							|  |  |  |         ], | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-10-17 22:13:14 +08:00
										 |  |  | main_trigger = { | 
					
						
							|  |  |  |     "event": [ | 
					
						
							|  |  |  |         "push", | 
					
						
							|  |  |  |     ], | 
					
						
							|  |  |  |     "branch": "main", | 
					
						
							|  |  |  |     "paths": docs_paths, | 
					
						
							|  |  |  |     "repo": [ | 
					
						
							|  |  |  |         "grafana/grafana", | 
					
						
							|  |  |  |     ], | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-10-05 00:55:43 +08:00
										 |  |  | nightly_trigger = { | 
					
						
							|  |  |  |     "event": { | 
					
						
							|  |  |  |         "include": [ | 
					
						
							|  |  |  |             "cron", | 
					
						
							|  |  |  |         ], | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     "cron": { | 
					
						
							|  |  |  |         "include": [ | 
					
						
							| 
									
										
										
										
											2023-10-05 13:44:24 +08:00
										 |  |  |             "nightly-release", | 
					
						
							| 
									
										
										
										
											2023-10-05 00:55:43 +08:00
										 |  |  |         ], | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-09-12 23:19:06 +08:00
										 |  |  | version_branch_trigger = {"ref": ["refs/heads/v[0-9]*"]} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-10-05 00:55:43 +08:00
										 |  |  | def rgm_env_secrets(env): | 
					
						
							|  |  |  |     """Adds the rgm secret ENV variables to the given env arg | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Args: | 
					
						
							|  |  |  |       env: A map of environment varables. This function will adds the necessary secrets to it (and potentially overwrite them). | 
					
						
							|  |  |  |     Returns: | 
					
						
							|  |  |  |         Drone step. | 
					
						
							|  |  |  |     """ | 
					
						
							|  |  |  |     env["DESTINATION"] = from_secret(rgm_destination) | 
					
						
							|  |  |  |     env["STORYBOOK_DESTINATION"] = from_secret(rgm_storybook_destination) | 
					
						
							|  |  |  |     env["CDN_DESTINATION"] = from_secret(rgm_cdn_destination) | 
					
						
							|  |  |  |     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") | 
					
						
							|  |  |  |     env["GPG_PASSPHRASE"] = from_secret("packages_gpg_passphrase") | 
					
						
							|  |  |  |     env["DOCKER_USERNAME"] = from_secret("docker_username") | 
					
						
							|  |  |  |     env["DOCKER_PASSWORD"] = from_secret("docker_password") | 
					
						
							|  |  |  |     env["NPM_TOKEN"] = from_secret(npm_token) | 
					
						
							| 
									
										
										
										
											2023-10-09 23:55:15 +08:00
										 |  |  |     env["GCOM_API_KEY"] = from_secret("grafana_api_key") | 
					
						
							| 
									
										
										
										
											2023-10-05 00:55:43 +08:00
										 |  |  |     return env | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def rgm_run(name, script): | 
					
						
							| 
									
										
										
										
											2023-09-12 23:19:06 +08:00
										 |  |  |     """Returns a pipeline that does a full build & package of Grafana. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Args: | 
					
						
							| 
									
										
										
										
											2023-10-05 00:55:43 +08:00
										 |  |  |       name: The name of the pipeline step. | 
					
						
							| 
									
										
										
										
											2023-09-12 23:19:06 +08:00
										 |  |  |       script: The script in the container to run. | 
					
						
							|  |  |  |     Returns: | 
					
						
							|  |  |  |         Drone step. | 
					
						
							|  |  |  |     """ | 
					
						
							|  |  |  |     env = { | 
					
						
							|  |  |  |         "GO_VERSION": golang_version, | 
					
						
							| 
									
										
										
										
											2023-11-01 04:52:09 +08:00
										 |  |  |         "ALPINE_BASE": images["alpine"], | 
					
						
							|  |  |  |         "UBUNTU_BASE": images["ubuntu"], | 
					
						
							| 
									
										
										
										
											2023-09-12 23:19:06 +08:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2023-10-05 00:55:43 +08:00
										 |  |  |     rgm_run_step = { | 
					
						
							|  |  |  |         "name": name, | 
					
						
							| 
									
										
										
										
											2023-07-07 21:42:40 +08:00
										 |  |  |         "image": "grafana/grafana-build:main", | 
					
						
							| 
									
										
										
										
											2023-09-13 01:59:02 +08:00
										 |  |  |         "pull": "always", | 
					
						
							| 
									
										
										
										
											2023-05-04 02:56:02 +08:00
										 |  |  |         "commands": [ | 
					
						
							|  |  |  |             "export GRAFANA_DIR=$$(pwd)", | 
					
						
							| 
									
										
										
										
											2023-07-07 21:42:40 +08:00
										 |  |  |             "cd /src && ./scripts/{}".format(script), | 
					
						
							| 
									
										
										
										
											2023-05-04 02:56:02 +08:00
										 |  |  |         ], | 
					
						
							| 
									
										
										
										
											2023-09-12 23:19:06 +08:00
										 |  |  |         "environment": rgm_env_secrets(env), | 
					
						
							| 
									
										
										
										
											2023-05-04 02:56:02 +08:00
										 |  |  |         # 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"}], | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2023-09-12 23:19:06 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-10-05 00:55:43 +08:00
										 |  |  |     return [ | 
					
						
							|  |  |  |         rgm_run_step, | 
					
						
							|  |  |  |     ] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def rgm_copy(src, dst): | 
					
						
							|  |  |  |     """Copies file from/to GCS. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Args: | 
					
						
							|  |  |  |       src: source of the files. | 
					
						
							|  |  |  |       dst: destination of the files. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Returns: | 
					
						
							| 
									
										
										
										
											2024-01-11 23:22:14 +08:00
										 |  |  |       Drone step. | 
					
						
							| 
									
										
										
										
											2023-10-05 00:55:43 +08:00
										 |  |  |     """ | 
					
						
							|  |  |  |     commands = [ | 
					
						
							|  |  |  |         "printenv GCP_KEY_BASE64 | base64 -d > /tmp/key.json", | 
					
						
							|  |  |  |         "gcloud auth activate-service-account --key-file=/tmp/key.json", | 
					
						
							|  |  |  |         "gcloud storage cp -r {} {}".format(src, dst), | 
					
						
							|  |  |  |     ] | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-01-11 23:22:14 +08:00
										 |  |  |     return { | 
					
						
							| 
									
										
										
										
											2023-10-05 00:55:43 +08:00
										 |  |  |         "name": "rgm-copy", | 
					
						
							|  |  |  |         "image": "google/cloud-sdk:alpine", | 
					
						
							|  |  |  |         "commands": commands, | 
					
						
							|  |  |  |         "environment": rgm_env_secrets({}), | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2023-05-04 02:56:02 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-10-05 00:55:43 +08:00
										 |  |  | def rgm_publish_packages(bucket = "grafana-packages"): | 
					
						
							|  |  |  |     """Publish deb and rpm packages. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Args: | 
					
						
							|  |  |  |       bucket: target bucket to publish the packages. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Returns: | 
					
						
							|  |  |  |       Drone steps. | 
					
						
							|  |  |  |     """ | 
					
						
							|  |  |  |     steps = [] | 
					
						
							|  |  |  |     for package_manager in ["deb", "rpm"]: | 
					
						
							|  |  |  |         steps.append({ | 
					
						
							|  |  |  |             "name": "publish-{}".format(package_manager), | 
					
						
							|  |  |  |             # See https://github.com/grafana/deployment_tools/blob/master/docker/package-publish/README.md for docs on that image | 
					
						
							|  |  |  |             "image": images["package_publish"], | 
					
						
							|  |  |  |             "privileged": True, | 
					
						
							|  |  |  |             "settings": { | 
					
						
							|  |  |  |                 "access_key_id": from_secret("packages_access_key_id"), | 
					
						
							|  |  |  |                 "secret_access_key": from_secret("packages_secret_access_key"), | 
					
						
							|  |  |  |                 "service_account_json": from_secret("packages_service_account"), | 
					
						
							|  |  |  |                 "target_bucket": bucket, | 
					
						
							|  |  |  |                 "gpg_passphrase": from_secret("packages_gpg_passphrase"), | 
					
						
							|  |  |  |                 "gpg_public_key": from_secret("packages_gpg_public_key"), | 
					
						
							|  |  |  |                 "gpg_private_key": from_secret("packages_gpg_private_key"), | 
					
						
							|  |  |  |                 "package_path": "file:///drone/src/dist/*.{}".format(package_manager), | 
					
						
							|  |  |  |             }, | 
					
						
							|  |  |  |         }) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return steps | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-04 02:56:02 +08:00
										 |  |  | def rgm_main(): | 
					
						
							| 
									
										
										
										
											2023-10-05 00:55:43 +08:00
										 |  |  |     # Runs a package / build process (with some distros) when commits are merged to main | 
					
						
							| 
									
										
										
										
											2023-05-04 02:56:02 +08:00
										 |  |  |     return pipeline( | 
					
						
							| 
									
										
										
										
											2023-05-23 16:01:09 +08:00
										 |  |  |         name = "rgm-main-prerelease", | 
					
						
							| 
									
										
										
										
											2023-10-17 22:13:14 +08:00
										 |  |  |         trigger = main_trigger, | 
					
						
							| 
									
										
										
										
											2023-10-24 07:14:12 +08:00
										 |  |  |         steps = rgm_run("rgm-build", "drone_build_main.sh"), | 
					
						
							| 
									
										
										
										
											2023-05-04 03:08:01 +08:00
										 |  |  |         depends_on = ["main-test-backend", "main-test-frontend"], | 
					
						
							| 
									
										
										
										
											2023-05-04 02:56:02 +08:00
										 |  |  |     ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-23 16:01:09 +08:00
										 |  |  | def rgm_tag(): | 
					
						
							| 
									
										
										
										
											2023-10-05 00:55:43 +08:00
										 |  |  |     # Runs a package / build process (with all distros) when a tag is made | 
					
						
							| 
									
										
										
										
											2023-05-04 02:56:02 +08:00
										 |  |  |     return pipeline( | 
					
						
							| 
									
										
										
										
											2023-05-23 16:01:09 +08:00
										 |  |  |         name = "rgm-tag-prerelease", | 
					
						
							|  |  |  |         trigger = tag_trigger, | 
					
						
							| 
									
										
										
										
											2023-10-24 07:14:12 +08:00
										 |  |  |         steps = rgm_run("rgm-build", "drone_build_tag_grafana.sh"), | 
					
						
							| 
									
										
										
										
											2023-05-04 02:56:02 +08:00
										 |  |  |     ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-09-12 23:19:06 +08:00
										 |  |  | def rgm_version_branch(): | 
					
						
							| 
									
										
										
										
											2023-10-05 00:55:43 +08:00
										 |  |  |     # Runs a package / build proces (with all distros) when a commit lands on a version branch | 
					
						
							| 
									
										
										
										
											2023-09-12 23:19:06 +08:00
										 |  |  |     return pipeline( | 
					
						
							|  |  |  |         name = "rgm-version-branch-prerelease", | 
					
						
							|  |  |  |         trigger = version_branch_trigger, | 
					
						
							| 
									
										
										
										
											2023-10-24 07:14:12 +08:00
										 |  |  |         steps = rgm_run("rgm-build", "drone_build_tag_grafana.sh"), | 
					
						
							| 
									
										
										
										
											2023-09-12 23:19:06 +08:00
										 |  |  |     ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-10-05 00:55:43 +08:00
										 |  |  | def rgm_nightly_build(): | 
					
						
							| 
									
										
										
										
											2024-01-11 23:22:14 +08:00
										 |  |  |     """Nightly build pipeline. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Returns: | 
					
						
							|  |  |  |       Drone pipeline. | 
					
						
							|  |  |  |     """ | 
					
						
							| 
									
										
										
										
											2023-10-05 00:55:43 +08:00
										 |  |  |     src = "$${DRONE_WORKSPACE}/dist/*" | 
					
						
							|  |  |  |     dst = "$${DESTINATION}/$${DRONE_BUILD_EVENT}" | 
					
						
							| 
									
										
										
										
											2024-01-11 23:22:14 +08:00
										 |  |  |     copy_step = rgm_copy(src, dst) | 
					
						
							|  |  |  |     if not dst.startswith("gs://"): | 
					
						
							|  |  |  |         copy_step["commands"].insert(0, "mkdir -p {}".format(dst)) | 
					
						
							| 
									
										
										
										
											2023-10-05 00:55:43 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-01-11 23:22:14 +08:00
										 |  |  |     copy_steps = with_deps([copy_step], ["rgm-build"]) | 
					
						
							| 
									
										
										
										
											2023-10-05 00:55:43 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     return pipeline( | 
					
						
							|  |  |  |         name = "rgm-nightly-build", | 
					
						
							|  |  |  |         trigger = nightly_trigger, | 
					
						
							|  |  |  |         steps = rgm_run("rgm-build", "drone_build_nightly_grafana.sh") + copy_steps, | 
					
						
							|  |  |  |         depends_on = ["nightly-test-backend", "nightly-test-frontend"], | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def rgm_nightly_publish(): | 
					
						
							|  |  |  |     """Nightly publish pipeline. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Returns: | 
					
						
							|  |  |  |       Drone pipeline. | 
					
						
							|  |  |  |     """ | 
					
						
							|  |  |  |     src = "$${DESTINATION}/$${DRONE_BUILD_EVENT}/*_$${DRONE_BUILD_NUMBER}_*" | 
					
						
							|  |  |  |     dst = "$${DRONE_WORKSPACE}/dist" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     publish_steps = with_deps(rgm_run("rgm-publish", "drone_publish_nightly_grafana.sh"), ["rgm-copy"]) | 
					
						
							| 
									
										
										
										
											2023-10-09 23:55:15 +08:00
										 |  |  |     package_steps = with_deps(rgm_publish_packages(), ["rgm-publish"]) | 
					
						
							| 
									
										
										
										
											2024-01-11 23:22:14 +08:00
										 |  |  |     copy_step = rgm_copy(src, dst) | 
					
						
							|  |  |  |     if not dst.startswith("gs://"): | 
					
						
							|  |  |  |         copy_step["commands"].insert(0, "mkdir -p {}".format(dst)) | 
					
						
							| 
									
										
										
										
											2023-10-05 00:55:43 +08:00
										 |  |  |     return pipeline( | 
					
						
							|  |  |  |         name = "rgm-nightly-publish", | 
					
						
							|  |  |  |         trigger = nightly_trigger, | 
					
						
							| 
									
										
										
										
											2024-01-11 23:22:14 +08:00
										 |  |  |         steps = [copy_step] + publish_steps + package_steps, | 
					
						
							| 
									
										
										
										
											2023-10-05 00:55:43 +08:00
										 |  |  |         depends_on = ["rgm-nightly-build"], | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def rgm_nightly_pipeline(): | 
					
						
							|  |  |  |     return [ | 
					
						
							|  |  |  |         test_frontend(nightly_trigger, "nightly"), | 
					
						
							|  |  |  |         test_backend(nightly_trigger, "nightly"), | 
					
						
							|  |  |  |         rgm_nightly_build(), | 
					
						
							|  |  |  |         rgm_nightly_publish(), | 
					
						
							|  |  |  |     ] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def rgm_tag_pipeline(): | 
					
						
							| 
									
										
										
										
											2024-10-24 03:26:52 +08:00
										 |  |  |     build = rgm_tag() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-04 02:56:02 +08:00
										 |  |  |     return [ | 
					
						
							| 
									
										
										
										
											2024-10-24 03:26:52 +08:00
										 |  |  |         build, | 
					
						
							| 
									
										
										
										
											2023-07-28 22:58:22 +08:00
										 |  |  |         whats_new_checker_pipeline(tag_trigger), | 
					
						
							| 
									
										
										
										
											2023-05-23 16:01:09 +08:00
										 |  |  |         verify_release_pipeline( | 
					
						
							|  |  |  |             trigger = tag_trigger, | 
					
						
							| 
									
										
										
										
											2023-07-19 04:09:08 +08:00
										 |  |  |             name = "rgm-tag-verify-prerelease-assets", | 
					
						
							| 
									
										
										
										
											2023-07-28 22:58:22 +08:00
										 |  |  |             bucket = "grafana-prerelease", | 
					
						
							| 
									
										
										
										
											2023-07-19 04:09:08 +08:00
										 |  |  |             depends_on = [ | 
					
						
							| 
									
										
										
										
											2024-10-24 03:26:52 +08:00
										 |  |  |                 build["name"], | 
					
						
							| 
									
										
										
										
											2023-07-19 04:09:08 +08:00
										 |  |  |             ], | 
					
						
							| 
									
										
										
										
											2023-05-23 16:01:09 +08:00
										 |  |  |         ), | 
					
						
							| 
									
										
										
										
											2023-10-05 00:55:43 +08:00
										 |  |  |     ] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def rgm_version_branch_pipeline(): | 
					
						
							|  |  |  |     return [ | 
					
						
							|  |  |  |         rgm_version_branch(), | 
					
						
							| 
									
										
										
										
											2023-09-12 23:19:06 +08:00
										 |  |  |         verify_release_pipeline( | 
					
						
							|  |  |  |             trigger = version_branch_trigger, | 
					
						
							|  |  |  |             name = "rgm-prerelease-verify-prerelease-assets", | 
					
						
							|  |  |  |             bucket = "grafana-prerelease", | 
					
						
							|  |  |  |             depends_on = [ | 
					
						
							|  |  |  |                 "rgm-version-branch-prerelease", | 
					
						
							|  |  |  |             ], | 
					
						
							|  |  |  |         ), | 
					
						
							| 
									
										
										
										
											2023-05-04 02:56:02 +08:00
										 |  |  |     ] | 
					
						
							| 
									
										
										
										
											2023-10-05 00:55:43 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | def rgm_main_pipeline(): | 
					
						
							|  |  |  |     return [ | 
					
						
							|  |  |  |         rgm_main(), | 
					
						
							|  |  |  |     ] | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-01-11 23:22:14 +08:00
										 |  |  | def rgm_promotion_pipeline(): | 
					
						
							|  |  |  |     """Promotion build pipeline. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Returns: | 
					
						
							|  |  |  |       Drone pipeline. | 
					
						
							|  |  |  |     """ | 
					
						
							|  |  |  |     promotion_trigger = { | 
					
						
							|  |  |  |         "event": ["promote"], | 
					
						
							|  |  |  |         "target": "upload-packages", | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     env = { | 
					
						
							|  |  |  |         "GO_VERSION": golang_version, | 
					
						
							|  |  |  |         "ALPINE_BASE": images["alpine"], | 
					
						
							|  |  |  |         "UBUNTU_BASE": images["ubuntu"], | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # Expected promotion args: | 
					
						
							|  |  |  |     # * GRAFANA_REF = commit hash, branch name, or tag name | 
					
						
							|  |  |  |     # * ENTERPRISE_REF = commit hash, branch name, or tag name. If not building an enterprise artifact, then this can be | 
					
						
							|  |  |  |     #   left empty. | 
					
						
							|  |  |  |     # * ARTIFACTS = comma delimited list of artifacts (ex: "targz:grafana:linux/amd64,rpm:grafana:linux/amd64") | 
					
						
							|  |  |  |     # * VERSION = version string of Grafana that is being built (ex: v10.0.0) | 
					
						
							|  |  |  |     # * UPLOAD_TO = Google Cloud Storage URL to upload the built artifacts to. (ex: gs://some-bucket/path) | 
					
						
							|  |  |  |     build_step = { | 
					
						
							|  |  |  |         "name": "rgm-build", | 
					
						
							|  |  |  |         "image": "grafana/grafana-build:main", | 
					
						
							|  |  |  |         "pull": "always", | 
					
						
							|  |  |  |         "commands": [ | 
					
						
							|  |  |  |             "dagger run --silent /src/grafana-build artifacts " + | 
					
						
							|  |  |  |             "-a $${ARTIFACTS} " + | 
					
						
							|  |  |  |             "--grafana-ref=$${GRAFANA_REF} " + | 
					
						
							|  |  |  |             "--enterprise-ref=$${ENTERPRISE_REF} " + | 
					
						
							| 
									
										
										
										
											2024-01-11 23:53:02 +08:00
										 |  |  |             "--grafana-repo=$${GRAFANA_REPO} " + | 
					
						
							| 
									
										
										
										
											2024-01-11 23:22:14 +08:00
										 |  |  |             "--version=$${VERSION} ", | 
					
						
							| 
									
										
										
										
											2024-05-15 21:10:06 +08:00
										 |  |  |             "--go-version={}".format(golang_version), | 
					
						
							| 
									
										
										
										
											2024-01-11 23:22:14 +08:00
										 |  |  |         ], | 
					
						
							|  |  |  |         "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"}], | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     publish_step = rgm_copy("dist/*", "$${UPLOAD_TO}") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     steps = [ | 
					
						
							|  |  |  |         build_step, | 
					
						
							|  |  |  |         publish_step, | 
					
						
							|  |  |  |     ] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return [ | 
					
						
							|  |  |  |         pipeline( | 
					
						
							|  |  |  |             name = "rgm-promotion", | 
					
						
							|  |  |  |             trigger = promotion_trigger, | 
					
						
							|  |  |  |             steps = steps, | 
					
						
							|  |  |  |         ), | 
					
						
							|  |  |  |     ] | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-10-05 00:55:43 +08:00
										 |  |  | def rgm(): | 
					
						
							|  |  |  |     return ( | 
					
						
							|  |  |  |         rgm_main_pipeline() + | 
					
						
							|  |  |  |         rgm_tag_pipeline() + | 
					
						
							|  |  |  |         rgm_version_branch_pipeline() + | 
					
						
							| 
									
										
										
										
											2024-01-11 23:22:14 +08:00
										 |  |  |         rgm_nightly_pipeline() + | 
					
						
							|  |  |  |         rgm_promotion_pipeline() | 
					
						
							| 
									
										
										
										
											2023-10-05 00:55:43 +08:00
										 |  |  |     ) |