klip-sdk
Version:
JavaScript SDK to interact with klip App2App requests
150 lines (144 loc) • 5.66 kB
YAML
name: Deploy request slack alarm
author: Kyle
description: 'deploy reqeust message'
inputs:
TYPE:
description: 'ex) FE, BE'
required: false
default: 'BE'
CHANNEL_ID:
description: 'ex) prod_approve slack channel id'
required: true
default: 'C068PP9AYJY'
ENVIRONMENT:
description: 'ex) prod'
required: true
default: 'prod'
CATEGORY:
description: 'ex) klip or devops or kas'
required: true
default: ''
SERVICE:
description: 'ex) klip-pass, klip etc..'
required: true
default: ''
VERSION:
description: 'ex) v1.0.0'
required: true
default: ''
REPOSITORY:
description: 'ex) klip-pass-be'
required: false
default: ''
PR_NUMBER:
description: 'ex) 1345'
required: false
default: ''
ENVIRONMENT_ID:
description: 'ex) 2476771098'
required: false
default: ''
WORKFLOW_ID:
description: 'ex) 8262151233'
required: false
default: ''
SLACK_APPROVE_TOKEN:
description: 'ex) xoxb-xxxx-xxxx-xxxx'
required: true
default: ''
runs:
using: "composite"
steps:
- name: set outputs
id: set-outputs
shell: bash
run: |
echo "TYPE=${{ inputs.TYPE }}" >> $GITHUB_OUTPUT
GIT_REPO=${{ inputs.REPOSITORY }}
REPO=$(echo $GIT_REPO | awk -F "/" '{print $2}')
echo "REPO=$(echo $REPO)" >> $GITHUB_OUTPUT
- name: Send prod BE deploy approve message on slack
if: steps.set-outputs.outputs.TYPE == 'BE'
uses: slackapi/slack-github-action.26.0
with:
channel-id: ${{ inputs.CHANNEL_ID }}
payload: |
{
"blocks": [
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": ":rocket: *[${{ inputs.TYPE }}] ${{ inputs.SERVICE }}-${{ inputs.VERSION }} ${{ inputs.ENVIRONMENT }} 배포 요청이 있습니다.*\n\n배포 승인은 *반드시 Staging 테스트 이후* Approve 하시기 바랍니다.:red_siren:\n배포 승인을 하시려면 아래의 *Approve* 버튼을 눌러주시기 바랍니다.:thumbsup:"
}
},
{
"type": "actions",
"elements": [
{
"type": "button",
"text": {
"type": "plain_text",
"text": "Approve :white_check_mark:"
},
"value": "{\"action\": \"approve\",\"type\": \"${{ inputs.TYPE }}\",\"application\": \"${{ inputs.ENVIRONMENT }}-${{ inputs.SERVICE }}\",\"category\": \"${{ inputs.CATEGORY }}\",\"repo\": \"${{ steps.set-outputs.outputs.REPO }}\", \"prnumber\": \"${{ inputs.PR_NUMBER }}\"}",
"action_id": "action_approve"
}
]
}
]
}
env:
SLACK_BOT_TOKEN: ${{ inputs.SLACK_APPROVE_TOKEN }}
- name: Send prod FE deploy approve message on slack
if: steps.set-outputs.outputs.TYPE == 'FE'
uses: slackapi/slack-github-action.26.0
with:
channel-id: ${{ inputs.CHANNEL_ID }}
payload: |
{
"blocks": [
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": ":rocket: *[${{ inputs.TYPE }}] ${{ inputs.SERVICE }}-${{ inputs.VERSION }} ${{ inputs.ENVIRONMENT }} 배포 요청이 있습니다.*\n\n배포 승인은 *반드시 Staging 테스트 이후* Approve 하시기 바랍니다.:red_siren:\n배포 승인을 하시려면 아래의 *Approve* 버튼을 눌러주시기 바랍니다.:thumbsup:"
}
},
{
"type": "actions",
"elements": [
{
"type": "button",
"text": {
"type": "plain_text",
"text": "Approve :white_check_mark:"
},
"value": "{\"action\": \"approve\",\"type\": \"${{ inputs.TYPE }}\",\"category\": \"${{ inputs.CATEGORY }}\",\"application\": \"${{ steps.set-outputs.outputs.REPO }}\",\"repo\": \"${{ steps.set-outputs.outputs.REPO }}\",\"environmentid\": \"${{ inputs.ENVIRONMENT_ID }}\", \"workflowid\": \"${{ inputs.WORKFLOW_ID }}\"}",
"action_id": "action_approve"
}
]
}
]
}
env:
SLACK_BOT_TOKEN: ${{ inputs.SLACK_APPROVE_TOKEN }}
# Approve 채널로 배포 시작 스레드 댓글을 추가하기 위해 스레드 값 확인
- name: Get Slack message ts
id: check-github-ts
shell: bash
run: |
sleep 3s
CHANNERTS=$(curl -X POST https://slack.com/api/conversations.history \
-H "Authorization: Bearer ${{ inputs.SLACK_APPROVE_TOKEN }}" \
-H "Content-type: application/json" \
--data '{
"channel": "${{ inputs.CHANNEL_ID }}"}' | jq '.messages[] | select(.text | contains("${{ inputs.TYPE }}] ${{ inputs.SERVICE }}-${{ inputs.VERSION }} ${{ inputs.ENVIRONMENT }} 배포 요청이 있습니다.")) | .ts'|head -n 1)
echo "CHANNERTS=$(echo $CHANNERTS)" >> $GITHUB_OUTPUT
echo $CHANNERTS
# Approve 채널로 각 서비스별 배포 담당자 멘션을 위한 blossomops 호출
# 테스트는 blossomops.dev로 진행하며 실제로는 blossomops.sandbox URL를 사용해야함
- name: Request blossomops deploy approver
shell: bash
run: |
curl -X GET --location "https://blossomops.sandbox.groundxdev.com/v1/operator/service/approver?category=${{ inputs.CATEGORY }}&ts=${{ steps.check-github-ts.outputs.CHANNERTS }}"