diff --git a/.circleci/config.yml b/.circleci/config.yml index 67e56d8fa..ed837207b 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -5,6 +5,7 @@ orbs: flutter: circleci/flutter@2.0.2 node: circleci/node@5.2.0 advanced-checkout: vsco/advanced-checkout@1.1.0 + slack: circleci/slack@5.1.1 commands: setup_flutter: @@ -103,6 +104,37 @@ commands: - run: name: Build Pigeons command: dart run build_runner build --delete-conflicting-outputs + notify_slack_with_release: + steps: + - slack/notify: + channel: C8PDY2Q8H + 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)" + } + }, + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "cc: <@U5697F4EL> @support_team <@ULDFCC09J>" + } + } + ] + } jobs: danger: @@ -278,6 +310,13 @@ jobs: working_directory: project command: Escape flutter publish + release_slack_notification: + docker: + - image: cimg/base:current + steps: + - advanced-checkout/shallow-checkout + - notify_slack_with_release + workflows: version: 2 build-test-and-approval-deploy: @@ -324,4 +363,8 @@ workflows: - hold_release filters: branches: - only: master \ No newline at end of file + only: master + - release_slack_notification: + requires: + - release + context: slack-app \ No newline at end of file diff --git a/scripts/pigeon.sh b/scripts/pigeon.sh old mode 100644 new mode 100755 diff --git a/scripts/releases/changelog_to_slack_formatter.sh b/scripts/releases/changelog_to_slack_formatter.sh new file mode 100755 index 000000000..ef34843e0 --- /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 000000000..8b479d385 --- /dev/null +++ b/scripts/releases/get_job_approver.sh @@ -0,0 +1,17 @@ +jobsJson=$(curl -s -X GET "https://circleci.com/api/v2/workflow/$CIRCLE_WORKFLOW_ID/job" --header "Circle-Token: $CIRCLE_TOKEN") + +job=$(jq '.items[] | select(.name == "hold_release_slack_notification")' <<< "$jobsJson") + +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") + +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 000000000..d81a0b8df --- /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 000000000..5b1a4533b --- /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 000000000..e1eafaee7 --- /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