From c6d807e0150cce61e2e94a9b65957d1399c9143f Mon Sep 17 00:00:00 2001 From: Kevin Minehart <5140827+kminehart@users.noreply.github.com> Date: Wed, 12 Jun 2024 08:48:50 -0500 Subject: [PATCH] CI: Trigger release pr workflow when a release is completed (#89062) --- .drone.yml | 61 ++++++++++++++++++++++++++++++- .github/workflows/release-pr.yml | 2 +- scripts/drone/events/release.star | 40 ++++++++++++++++++++ 3 files changed, 101 insertions(+), 2 deletions(-) diff --git a/.drone.yml b/.drone.yml index 6b412b6e277..658e2d4adde 100644 --- a/.drone.yml +++ b/.drone.yml @@ -2731,6 +2731,47 @@ volumes: clone: retries: 3 depends_on: [] +image_pull_secrets: +- gcr +- gar +kind: pipeline +name: create-release-pr +node: + type: no-parallel +platform: + arch: amd64 + os: linux +services: [] +steps: +- commands: + - 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/'` + - default_target=`if [[ -n $$LATEST ]]; then echo 'main'; else echo $$v_target; + fi` + - backport=`if [[ -n $$LATEST ]]; then echo $$v_target; fi` + - curl -L $${GH_CLI_URL} | tar -xz --strip-components=1 -C /usr + - gh workflow run -f dry_run=$${DRY_RUN} -f version=$${TAG} -f target=$${TARGET:-$default_target} + -f backport=$${BACKPORT:-$default_backport} --repo=grafana/grafana release-pr.yml + 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 +trigger: + event: + - promote + target: release-pr +type: docker +volumes: +- host: + path: /var/run/docker.sock + name: docker +--- +clone: + retries: 3 +depends_on: [] environment: EDITION: oss image_pull_secrets: @@ -2787,6 +2828,24 @@ steps: from_secret: prerelease_bucket image: grafana/grafana-ci-deploy:1.3.3 name: publish-storybook +- commands: + - 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/'` + - default_target=`if [[ -n $$LATEST ]]; then echo 'main'; else echo $$v_target; + fi` + - backport=`if [[ -n $$LATEST ]]; then echo $$v_target; fi` + - curl -L $${GH_CLI_URL} | tar -xz --strip-components=1 -C /usr + - gh workflow run -f dry_run=$${DRY_RUN} -f version=$${TAG} -f target=$${TARGET:-$default_target} + -f backport=$${BACKPORT:-$default_backport} --repo=grafana/grafana release-pr.yml + depends_on: + - publish-artifacts + - publish-static-assets + 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 trigger: event: - promote @@ -4893,6 +4952,6 @@ kind: secret name: gcr_credentials --- kind: signature -hmac: 08f38b820f97302de03a9fdfd39fb12c185bb36170704cf7591c16f33c3e4d31 +hmac: 043028c50d984e1ea98a294c6746df1388cb0b7d7976f82f3dd0004fc493bafc ... diff --git a/.github/workflows/release-pr.yml b/.github/workflows/release-pr.yml index e788e1a19dd..6373612eca6 100644 --- a/.github/workflows/release-pr.yml +++ b/.github/workflows/release-pr.yml @@ -57,6 +57,6 @@ jobs: - name: Create PR with backports if: "${{ github.event.inputs.backport != '' }}" run: > - gh pr create -l "backport-${{ inputs.backport }}" --dry-run=${{ inputs.dry_run }} -H "release/${{ inputs.version }}" -B "${{ inputs.target }}" --title "Release: ${{ inputs.version }}" --body "These code changes must be merged after a release is complete" + gh pr create -l "backport ${{ inputs.backport }}" --dry-run=${{ inputs.dry_run }} -H "release/${{ inputs.version }}" -B "${{ inputs.target }}" --title "Release: ${{ inputs.version }}" --body "These code changes must be merged after a release is complete" env: GH_TOKEN: ${{ steps.generate_token.outputs.token }} diff --git a/scripts/drone/events/release.star b/scripts/drone/events/release.star index cdf8c9883c0..404dafa79ca 100644 --- a/scripts/drone/events/release.star +++ b/scripts/drone/events/release.star @@ -42,6 +42,7 @@ load( ) ver_mode = "release" +semver_regex = r"^(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-]+)*))?$" def retrieve_npm_packages_step(): return { @@ -59,6 +60,34 @@ def retrieve_npm_packages_step(): "commands": ["./bin/build artifacts npm retrieve --tag ${DRONE_TAG}"], } +def release_pr_step(depends_on = []): + return { + "name": "create-release-pr", + "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": [ + "apk add perl", + "v_target=`echo $${{TAG}} | perl -pe 's/{}/v\\1.\\2.x/'`".format(semver_regex), + "default_target=`if [[ -n $$LATEST ]]; then echo 'main'; else echo $$v_target; fi`", + "backport=`if [[ -n $$LATEST ]]; then echo $$v_target; fi`", + # Install gh CLI + "curl -L $${GH_CLI_URL} | tar -xz --strip-components=1 -C /usr", + # Run the release-pr workflow + "gh workflow run " + + "-f dry_run=$${DRY_RUN} " + + "-f version=$${TAG} " + + # If the submitter has set a target branch, then use that, otherwise use the default + "-f target=$${TARGET:-$default_target} " + + # If the submitter has set a backport branch, then use that, otherwise use the default + "-f backport=$${BACKPORT:-$default_backport} " + + "--repo=grafana/grafana release-pr.yml", + ], + } + def release_npm_packages_step(): return { "name": "release-npm-packages", @@ -136,9 +165,20 @@ def publish_artifacts_pipelines(mode): publish_artifacts_step(), publish_static_assets_step(), publish_storybook_step(), + release_pr_step(depends_on = ["publish-artifacts", "publish-static-assets"]), ] return [ + pipeline( + name = "create-release-pr", + trigger = { + "event": ["promote"], + "target": "release-pr", + }, + steps = [ + release_pr_step(), + ], + ), pipeline( name = "publish-artifacts-{}".format(mode), trigger = trigger,