From 739951991f14279a7dc05d42c29ccf57d3740a4c Mon Sep 17 00:00:00 2001
From: Egor_P <egor@parity.io>
Date: Wed, 17 Jul 2024 13:28:58 +0200
Subject: [PATCH] Adjust release flows to use those with the new branch model
 (#5015)

This PR contains adjustments of the node release pipelines so that it
will be possible to use those to trigger release actions based on the
`stable` branch.

Previously the whole pipeline of the flows from [creation of the
`rc-tag`](https://github.com/paritytech/polkadot-sdk/blob/master/.github/workflows/release-10_rc-automation.yml)
(v1.15.0-rc1, v1.15.0-rc2, etc) till [the release draft
creation](https://github.com/paritytech/polkadot-sdk/blob/master/.github/workflows/release-30_publish_release_draft.yml)
was triggered on push to the node release branch. As we had the node
release branch and the crates release branch separately, it worked fine.

From now on, as we are switching to the one branch approach, for the
first iteration I would like to keep things simple to see how the new
release process will work with both parts (crates and node) made from
one branch.

Changes made:

- The first step in the pipeline (rc-tag creation) will be triggered
manually instead of the push to the branch
- The tag version will be set manually from the input instead of to be
taken from the branch name
- Docker image will be additionally tagged as `stable`



Closes: https://github.com/paritytech/release-engineering/issues/214
---
 .github/scripts/common/lib.sh                 | 13 ++++
 .../workflows/release-10_rc-automation.yml    | 78 +++++--------------
 .../workflows/release-50_publish-docker.yml   |  2 +
 .github/workflows/release-srtool.yml          |  5 --
 4 files changed, 36 insertions(+), 62 deletions(-)

diff --git a/.github/scripts/common/lib.sh b/.github/scripts/common/lib.sh
index f844e962c41..33ef2d3e7ed 100755
--- a/.github/scripts/common/lib.sh
+++ b/.github/scripts/common/lib.sh
@@ -444,3 +444,16 @@ get_latest_release_tag() {
     latest_release_tag=$(curl -s -H "$TOKEN" $api_base/paritytech/polkadot-sdk/releases/latest | jq -r '.tag_name')
     printf $latest_release_tag
 }
+
+function get_polkadot_node_version_from_code() {
+   # list all the files with node version
+  git grep -e "\(NODE_VERSION[^=]*= \)\".*\"" |
+  # fetch only the one we need
+  grep  "primitives/src/lib.rs:" |
+  # Print only the version
+  awk '{ print $7 }' |
+  # Remove the quotes
+  sed 's/"//g' |
+  # Remove the semicolon
+  sed 's/;//g'
+}
diff --git a/.github/workflows/release-10_rc-automation.yml b/.github/workflows/release-10_rc-automation.yml
index 7231a8b7588..f5c5de8d0da 100644
--- a/.github/workflows/release-10_rc-automation.yml
+++ b/.github/workflows/release-10_rc-automation.yml
@@ -1,13 +1,18 @@
 name: Release - RC automation
 on:
-  push:
-    branches:
-      # Catches release-polkadot-v1.2.3, release-v1.2.3-rc1, etc
-      - release-v[0-9]+.[0-9]+.[0-9]+*
-      - release-cumulus-v[0-9]+*
-      - release-polkadot-v[0-9]+*
+  # TODO: Activate it and delete old branches patterns, when the release process from stable is setteled
+  #push:
+    # branches:
+    #   # Catches release-polkadot-v1.2.3, release-v1.2.3-rc1, etc
+    #   - release-v[0-9]+.[0-9]+.[0-9]+*
+    #   - release-cumulus-v[0-9]+*
+    #   - release-polkadot-v[0-9]+*
+    #   - stable
 
   workflow_dispatch:
+    inputs:
+      version:
+        description: Current release/rc version in format vX.X.X
 
 jobs:
   tag_rc:
@@ -25,28 +30,19 @@ jobs:
         with:
           fetch-depth: 0
 
-      - name: Get release product
-        id: get_rel_product
-        shell: bash
-        run: |
-          current_branch=$(git branch --show-current)
-          echo "Current branch: $current_branch"
-          if [[ "$current_branch" =~ "release-polkadot" ]]; then
-            echo "product=polkadot" >> $GITHUB_OUTPUT
-          elif [[ "$current_branch" =~ "release-cumulus" ]]; then
-            echo "product=polkadot-parachain" >> $GITHUB_OUTPUT
-          fi
-
-
-      - name: Compute next rc tag for polkadot
-        if: ${{ steps.get_rel_product.outputs.product == 'polkadot' }}
-        id: compute_tag_polkadot
+      - name: Compute next rc tag
+        # if: ${{ steps.get_rel_product.outputs.product == 'polkadot' }}
+        id: compute_tag
         shell: bash
         run: |
           . ./.github/scripts/common/lib.sh
 
           # Get last rc tag if exists, else set it to {version}-rc1
-          version=$(get_version_from_ghref ${GITHUB_REF})
+          if [[ -z "${{ inputs.version }}" ]]; then
+            version=v$(get_polkadot_node_version_from_code)
+          else
+            version=$(filter_version_from_input ${{ inputs.version }})
+          fi
           echo "$version"
           echo "version=$version" >> $GITHUB_OUTPUT
 
@@ -61,28 +57,6 @@ jobs:
             echo "first_rc=true" >> $GITHUB_OUTPUT
           fi
 
-      - name: Compute next rc tag for polkadot-parachain
-        if: ${{ steps.get_rel_product.outputs.product == 'polkadot-parachain' }}
-        id: compute_tag_cumulus
-        shell: bash
-        run: |
-          . ./.github/scripts/common/lib.sh
-
-          # Get last rc tag if exists, else set it to polkadot-parachains-{version}-rc1
-          version=$(get_version_from_ghref ${GITHUB_REF})
-          echo "$version"
-          echo "version=$version" >> $GITHUB_OUTPUT
-
-          last_rc=$(get_latest_rc_tag $version polkadot-parachain)
-          if [ -n "$last_rc" ]; then
-            suffix=$(increment_rc_tag $last_rc)
-            echo "new_tag=polkadot-parachains-$version-rc$suffix" >> $GITHUB_OUTPUT
-            echo "first_rc=false" >> $GITHUB_OUTPUT
-          else
-            echo "new_tag=polkadot-parachain-$version-rc1" >> $GITHUB_OUTPUT
-            echo "first_rc=true" >> $GITHUB_OUTPUT
-          fi
-
       - name: Apply new tag
         uses: tvdias/github-tagger@ed7350546e3e503b5e942dffd65bc8751a95e49d # v0.0.2
         with:
@@ -90,17 +64,7 @@ jobs:
           # https://docs.github.com/en/actions/reference/events-that-trigger-workflows#triggering-new-workflows-using-a-personal-access-token
           # RELEASE_BRANCH_TOKEN requires public_repo OAuth scope
           repo-token: "${{ secrets.RELEASE_BRANCH_TOKEN }}"
-          tag: ${{ steps.compute_tag_polkadot.outputs.new_tag || steps.compute_tag_cumulus.outputs.new_tag }}
-
-      # - id: create-issue
-      #   uses: JasonEtco/create-an-issue@e27dddc79c92bc6e4562f268fffa5ed752639abd # v2.9.1
-      #   # Only create the issue if it's the first release candidate
-      #   if: steps.compute_tag.outputs.first_rc == 'true'
-      #   env:
-      #     GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-      #     VERSION: ${{ steps.compute_tag.outputs.version }}
-      #   with:
-      #     filename: .github/ISSUE_TEMPLATE/release.md
+          tag: ${{ steps.compute_tag.outputs.new_tag }}
 
       - name: Send Matrix message to ${{ matrix.channel.name }}
         uses: s3krit/matrix-message-action@70ad3fb812ee0e45ff8999d6af11cafad11a6ecf # v0.0.3
@@ -110,4 +74,4 @@ jobs:
           access_token: ${{ secrets.RELEASENOTES_MATRIX_V2_ACCESS_TOKEN }}
           server: m.parity.io
           message: |
-            Release process for polkadot ${{ steps.compute_tag_polkadot.outputs.new_tag || steps.compute_tag_cumulus.outputs.new_tag }} has been started.<br/>
+            Release process for polkadot ${{ steps.compute_tag.outputs.new_tag }} has been started.<br/>
diff --git a/.github/workflows/release-50_publish-docker.yml b/.github/workflows/release-50_publish-docker.yml
index 4679f58578f..723883eaf64 100644
--- a/.github/workflows/release-50_publish-docker.yml
+++ b/.github/workflows/release-50_publish-docker.yml
@@ -179,6 +179,7 @@ jobs:
           release=$( echo $VERSION | cut -f1 -d- )
           echo "tag=latest" >> $GITHUB_OUTPUT
           echo "release=${release}" >> $GITHUB_OUTPUT
+          echo "stable=stable" >> $GITHUB_OUTPUT
 
       - name: Build Injected Container image for polkadot rc or chain-spec-builder
         if: ${{ env.BINARY == 'polkadot' || env.BINARY == 'chain-spec-builder' }}
@@ -294,6 +295,7 @@ jobs:
           # TODO: The owner should be used below but buildx does not resolve the VARs
           # TODO: It would be good to get rid of this GHA that we don't really need.
           tags: |
+            parity/polkadot:stable
             parity/polkadot:latest
             parity/polkadot:${{ needs.fetch-latest-debian-package-version.outputs.polkadot_container_tag }}
           build-args: |
diff --git a/.github/workflows/release-srtool.yml b/.github/workflows/release-srtool.yml
index 69a4bdbdda9..e98269fecab 100644
--- a/.github/workflows/release-srtool.yml
+++ b/.github/workflows/release-srtool.yml
@@ -5,11 +5,6 @@ env:
   TOML_CLI_VERSION: 0.2.4
 
 on:
-  push:
-    branches:
-      - release-v[0-9]+.[0-9]+.[0-9]+*
-      - release-cumulus-v[0-9]+*
-      - release-polkadot-v[0-9]+*
   workflow_call:
     inputs:
       excluded_runtimes:
-- 
GitLab