From 6374d905f110e10e8fe970a9742653a9805e521e Mon Sep 17 00:00:00 2001 From: Mohamed Kamal Date: Thu, 6 Mar 2025 23:11:13 +0200 Subject: [PATCH 1/9] ci: add slack job to workflow for sending automatic release notes messages to slack --- .circleci/config.yml | 40 +++++++++++++++++++ .../releases/changelog_to_slack_formatter.sh | 9 +++++ scripts/releases/get_job_approver.sh | 20 ++++++++++ scripts/releases/get_release_notes.sh | 22 ++++++++++ scripts/releases/get_sdk_version.sh | 5 +++ .../releases/get_slack_id_from_username.sh | 24 +++++++++++ 6 files changed, 120 insertions(+) create mode 100755 scripts/releases/changelog_to_slack_formatter.sh create mode 100755 scripts/releases/get_job_approver.sh create mode 100755 scripts/releases/get_release_notes.sh create mode 100755 scripts/releases/get_sdk_version.sh create mode 100755 scripts/releases/get_slack_id_from_username.sh diff --git a/.circleci/config.yml b/.circleci/config.yml index 3293c65d16..13155cc881 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -4,6 +4,7 @@ orbs: android: circleci/android@2.5.0 advanced-checkout: vsco/advanced-checkout@1.1.0 node: circleci/node@5.2.0 + slack: circleci/slack@5.1.1 references: release_dependencies: &release_dependencies @@ -160,6 +161,32 @@ commands: - run: name: Post comment on GitHub command: ./scripts/notify-github.sh "<< parameters.data >>" + + notify_slack_with_release: + steps: + - slack/notify: + channel: C08F3Q30U7Q + event: pass + custom: | + { + "blocks": [ + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": ":flutter: Flutter `v$(./scripts/releases/get_sdk_version.sh)` is released by <@$(./scripts/releases/get_job_approver.sh)> 🚀" + } + }, + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "$(./scripts/releases/get_release_notes.sh)" + } + } + ] + } + debug: true jobs: danger: @@ -494,6 +521,13 @@ jobs: - notify_github: data: "$(jq -Rcs '{ body: . }' scripts/snapshot-comment.md)" + release_slack_notification: + docker: + - image: cimg/base:current + steps: + - advanced-checkout/shallow-checkout + - notify_slack_with_release + workflows: publish: jobs: @@ -622,3 +656,9 @@ workflows: only: dream11 prepare_steps: - prepare_dream11 + - hold_release_slack_notification: + type: approval + - release_slack_notification: + requires: + - hold_release_slack_notification + context: slack-app \ No newline at end of file diff --git a/scripts/releases/changelog_to_slack_formatter.sh b/scripts/releases/changelog_to_slack_formatter.sh new file mode 100755 index 0000000000..ef34843e0f --- /dev/null +++ b/scripts/releases/changelog_to_slack_formatter.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env bash +input=$(cat) + +input=$(sed -E \ + -e 's/\[([^]]+)\]\(([^)]+)\)/<\2|\1>/g' \ + -e 's/^#{1,6}[[:space:]]*([^[:space:]].*)$/\*\1\*/' \ + -e 's/^- /• /' <<< "$input") + +echo "$input" \ No newline at end of file diff --git a/scripts/releases/get_job_approver.sh b/scripts/releases/get_job_approver.sh new file mode 100755 index 0000000000..c7dd762f4e --- /dev/null +++ b/scripts/releases/get_job_approver.sh @@ -0,0 +1,20 @@ +jobsJson=$(curl -s -X GET "https://circleci.com/api/v2/workflow/$CIRCLE_WORKFLOW_ID/job" --header "Circle-Token: $CIRCLE_TOKEN") + +#jobsJson=$(echo "$jobsJson" | jq -R '.' | jq -s '.' | jq -r 'join("")') +job=$(jq '.items[] | select(.name == "hold_release_slack_notification")' <<< "$jobsJson") + +#job=$(echo "$job" | jq -R '.' | jq -s '.' | jq -r 'join("")') +approver_id=$(jq '.approved_by' <<< "$job") + +approver_id=$(tr -d '"' <<< "$approver_id") + +user=$(curl -s -X GET "https://circleci.com/api/v2/user/$approver_id" --header "Circle-Token: $CIRCLE_TOKEN") + +#user=$(echo "$user" | jq -R '.' | jq -s '.' | jq -r 'join("")') +username=$(jq '.login' <<< "$user") + +username=$(tr -d '"' <<< "$username") + +slack_id=$(./scripts/releases/get_slack_id_from_username.sh "$username") + +echo "$slack_id" \ No newline at end of file diff --git a/scripts/releases/get_release_notes.sh b/scripts/releases/get_release_notes.sh new file mode 100755 index 0000000000..d81a0b8df6 --- /dev/null +++ b/scripts/releases/get_release_notes.sh @@ -0,0 +1,22 @@ +#!/usr/bin/env bash +latest_release="" +capturing=false + +while IFS= read -r line; do + if [[ "$line" == "## ["* ]]; then + if $capturing; then + break + fi + fi + + if [[ "$line" == "### "* ]]; then + capturing=true + fi + + if $capturing; then + line=$(./scripts/releases/changelog_to_slack_formatter.sh <<< "$line") + latest_release+="$line\n" + fi +done < CHANGELOG.md + +echo "$latest_release" \ No newline at end of file diff --git a/scripts/releases/get_sdk_version.sh b/scripts/releases/get_sdk_version.sh new file mode 100755 index 0000000000..e8a1e9d3c2 --- /dev/null +++ b/scripts/releases/get_sdk_version.sh @@ -0,0 +1,5 @@ +sdk_version=$(grep -i 'version' pubspec.yaml) #version: xx.x.x+x +sdk_version=$(cut -f2 -d' ' <<< "$sdk_version") #xx.x.x+x +sdk_version=$(cut -f1 -d'+' <<< "$sdk_version") #xx.x.x + +echo "$sdk_version" \ No newline at end of file diff --git a/scripts/releases/get_slack_id_from_username.sh b/scripts/releases/get_slack_id_from_username.sh new file mode 100755 index 0000000000..e1eafaee7a --- /dev/null +++ b/scripts/releases/get_slack_id_from_username.sh @@ -0,0 +1,24 @@ +github_username=$1 + +case $github_username in + 'mzelzoghbi') + sid='U5697F4EL' + ;; + 'AndrewAminInstabug') + sid='U06JVRNMKE1' + ;; + 'ahmedAlaaInstabug') + sid='U06AE2G1161' + ;; + 'kholood-ea') + sid='U06SU2QR280' + ;; + 'AyaMahmoud148') + sid='U07GZSURC8K' + ;; + 'MoKamall') + sid='U06JHDS3JJK' + ;; + *) +esac +echo "$sid" \ No newline at end of file From 74f81ed533183c10bbca5b1297122edece83d8a2 Mon Sep 17 00:00:00 2001 From: Mohamed Kamal Date: Fri, 7 Mar 2025 00:31:16 +0200 Subject: [PATCH 2/9] fix: version code to use package.json --- .circleci/config.yml | 45 +++++++++++++++++------------ scripts/releases/get_sdk_version.sh | 4 +-- 2 files changed, 29 insertions(+), 20 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 13155cc881..b88b423a1d 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -170,19 +170,26 @@ commands: custom: | { "blocks": [ - { + { "type": "section", "text": { "type": "mrkdwn", - "text": ":flutter: Flutter `v$(./scripts/releases/get_sdk_version.sh)` is released by <@$(./scripts/releases/get_job_approver.sh)> 🚀" + "text": ":react: React Native `v$(./scripts/releases/get_sdk_version.sh)` is released by <@$(./scripts/releases/get_job_approver.sh)> 🚀" } }, - { + { "type": "section", "text": { "type": "mrkdwn", "text": "$(./scripts/releases/get_release_notes.sh)" } + }, + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "cc: <@U5697F4EL> <@support_team> <@ULDFCC09J>" + } } ] } @@ -616,6 +623,22 @@ workflows: android_package: injazat api_endpoint: st001013mec1.instabug.com + name: release_dream11 + requires: + - hold_release_dream11 + filters: + branches: + only: dream11 + prepare_steps: + - prepare_dream11 + + - hold_release_slack_notification: + type: approval + - release_slack_notification: + requires: + - hold_release_slack_notification + context: slack-app + # Dream11 tests - hold_test_dream11: type: approval @@ -647,18 +670,4 @@ workflows: filters: branches: only: dream11 - - release_custom_package: - name: release_dream11 - requires: - - hold_release_dream11 - filters: - branches: - only: dream11 - prepare_steps: - - prepare_dream11 - - hold_release_slack_notification: - type: approval - - release_slack_notification: - requires: - - hold_release_slack_notification - context: slack-app \ No newline at end of file + - release_custom_package: \ No newline at end of file diff --git a/scripts/releases/get_sdk_version.sh b/scripts/releases/get_sdk_version.sh index e8a1e9d3c2..7b102f05a4 100755 --- a/scripts/releases/get_sdk_version.sh +++ b/scripts/releases/get_sdk_version.sh @@ -1,5 +1,5 @@ -sdk_version=$(grep -i 'version' pubspec.yaml) #version: xx.x.x+x -sdk_version=$(cut -f2 -d' ' <<< "$sdk_version") #xx.x.x+x +sdk_version=$(grep -i 'version' package.json) #"version": "xx.x.x+x", +sdk_version=$(cut -f2 -d':' <<< "$sdk_version" | tr -d '"' | tr -d ",") #xx.x.x+x, sdk_version=$(cut -f1 -d'+' <<< "$sdk_version") #xx.x.x echo "$sdk_version" \ No newline at end of file From 4be4876d74d8d82a9c7e14c5771c7759c1af1f85 Mon Sep 17 00:00:00 2001 From: Mohamed Kamal Date: Fri, 7 Mar 2025 00:56:34 +0200 Subject: [PATCH 3/9] fix: workflow job misplacement --- .circleci/config.yml | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index b88b423a1d..557c71ace6 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -622,15 +622,6 @@ workflows: npm_package: '@instabug/react-native-injazat' android_package: injazat api_endpoint: st001013mec1.instabug.com - - name: release_dream11 - requires: - - hold_release_dream11 - filters: - branches: - only: dream11 - prepare_steps: - - prepare_dream11 - hold_release_slack_notification: type: approval @@ -670,4 +661,12 @@ workflows: filters: branches: only: dream11 - - release_custom_package: \ No newline at end of file + - release_custom_package: + name: release_dream11 + requires: + - hold_release_dream11 + filters: + branches: + only: dream11 + prepare_steps: + - prepare_dream11 \ No newline at end of file From 9ed263545e6aa6745444e9344991a1fb056e4389 Mon Sep 17 00:00:00 2001 From: Mohamed Kamal Date: Sat, 8 Mar 2025 17:43:33 +0200 Subject: [PATCH 4/9] fix: correct mention for support team --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 557c71ace6..d5a27bfdaf 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -188,7 +188,7 @@ commands: "type": "section", "text": { "type": "mrkdwn", - "text": "cc: <@U5697F4EL> <@support_team> <@ULDFCC09J>" + "text": "cc: <@U5697F4EL> @support_team <@ULDFCC09J>" } } ] From 40ea7e35c0178501322951ba2d4b1354b6f5901d Mon Sep 17 00:00:00 2001 From: Mohamed Kamal Date: Sun, 9 Mar 2025 04:05:45 +0200 Subject: [PATCH 5/9] fix: remove extra space between 'v' and sdk version number --- scripts/releases/get_sdk_version.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/releases/get_sdk_version.sh b/scripts/releases/get_sdk_version.sh index 7b102f05a4..d396018a4a 100755 --- a/scripts/releases/get_sdk_version.sh +++ b/scripts/releases/get_sdk_version.sh @@ -1,5 +1,5 @@ sdk_version=$(grep -i 'version' package.json) #"version": "xx.x.x+x", -sdk_version=$(cut -f2 -d':' <<< "$sdk_version" | tr -d '"' | tr -d ",") #xx.x.x+x, -sdk_version=$(cut -f1 -d'+' <<< "$sdk_version") #xx.x.x +sdk_version=$(cut -f2 -d' ' <<< $sdk_version | tr -d '" ,') #xx.x.x+x, +sdk_version=$(cut -f1 -d'+' <<< $sdk_version) #xx.x.x echo "$sdk_version" \ No newline at end of file From ec5e3753c8d0255438d8f7f0abd07ee920787a7f Mon Sep 17 00:00:00 2001 From: Mohamed Kamal Date: Sun, 9 Mar 2025 04:19:34 +0200 Subject: [PATCH 6/9] ci: change channel id to planning_releases, send message on sucessful releases now --- .circleci/config.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index d5a27bfdaf..e3a9e0ae2d 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -165,7 +165,7 @@ commands: notify_slack_with_release: steps: - slack/notify: - channel: C08F3Q30U7Q + channel: C8PDY2Q8H event: pass custom: | { @@ -623,11 +623,11 @@ workflows: android_package: injazat api_endpoint: st001013mec1.instabug.com - - hold_release_slack_notification: - type: approval + - release_slack_notification: requires: - - hold_release_slack_notification + - publish + - publish_new_namespace context: slack-app # Dream11 tests From 75792f9b51bf7359fb6e0d35c6ed27363366a5fa Mon Sep 17 00:00:00 2001 From: Mohamed Kamal Date: Sun, 9 Mar 2025 04:23:54 +0200 Subject: [PATCH 7/9] chore: remove debug flag from slack job --- .circleci/config.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index e3a9e0ae2d..6947a3101b 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -193,7 +193,6 @@ commands: } ] } - debug: true jobs: danger: From 139e6ab316eea256ac086b4e5779943f73007736 Mon Sep 17 00:00:00 2001 From: Mohamed Kamal Date: Mon, 10 Mar 2025 16:42:12 +0200 Subject: [PATCH 8/9] chore: remove commented code from shell scripts --- scripts/releases/get_job_approver.sh | 3 --- 1 file changed, 3 deletions(-) diff --git a/scripts/releases/get_job_approver.sh b/scripts/releases/get_job_approver.sh index c7dd762f4e..8b479d385b 100755 --- a/scripts/releases/get_job_approver.sh +++ b/scripts/releases/get_job_approver.sh @@ -1,16 +1,13 @@ jobsJson=$(curl -s -X GET "https://circleci.com/api/v2/workflow/$CIRCLE_WORKFLOW_ID/job" --header "Circle-Token: $CIRCLE_TOKEN") -#jobsJson=$(echo "$jobsJson" | jq -R '.' | jq -s '.' | jq -r 'join("")') job=$(jq '.items[] | select(.name == "hold_release_slack_notification")' <<< "$jobsJson") -#job=$(echo "$job" | jq -R '.' | jq -s '.' | jq -r 'join("")') approver_id=$(jq '.approved_by' <<< "$job") approver_id=$(tr -d '"' <<< "$approver_id") user=$(curl -s -X GET "https://circleci.com/api/v2/user/$approver_id" --header "Circle-Token: $CIRCLE_TOKEN") -#user=$(echo "$user" | jq -R '.' | jq -s '.' | jq -r 'join("")') username=$(jq '.login' <<< "$user") username=$(tr -d '"' <<< "$username") From 90ad56b5c2b2bf21d2ad27a2d3056050c040fb82 Mon Sep 17 00:00:00 2001 From: Mohamed Kamal Date: Tue, 11 Mar 2025 04:14:31 +0200 Subject: [PATCH 9/9] chore: run yarn format:fix --- .circleci/config.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 6947a3101b..1989386499 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -161,7 +161,7 @@ commands: - run: name: Post comment on GitHub command: ./scripts/notify-github.sh "<< parameters.data >>" - + notify_slack_with_release: steps: - slack/notify: @@ -621,7 +621,6 @@ workflows: npm_package: '@instabug/react-native-injazat' android_package: injazat api_endpoint: st001013mec1.instabug.com - - release_slack_notification: requires: @@ -668,4 +667,4 @@ workflows: branches: only: dream11 prepare_steps: - - prepare_dream11 \ No newline at end of file + - prepare_dream11