배포 결과를 Slack으로 받고 있었는데 그냥 텍스트 한 줄이었다. ✅ Deploy API \success`` 이런 식. 카드 형태로 바꾸기로 했다.
컬러바, 필드, 링크 버튼이 있는 카드 포맷으로 갈아엎었다.
PAYLOAD=$(jq -n \
--arg color "$COLOR" \
--arg title "$STATUS Deploy API — $LABEL" \
--arg branch "$REF" \
--arg sha "$SHORT_SHA" \
--arg actor "$ACTOR" \
--arg msg "${FIRST_LINE:-커밋 메시지 없음}" \
--arg run "$RUN_URL" \
--arg commit "$COMMIT_URL" \
'{attachments:[{color:$color,blocks:[
{type:"section",text:{type:"mrkdwn",text:$title}},
{type:"section",fields:[
{type:"mrkdwn",text:("*브랜치*\n`"+$branch+"`")},
{type:"mrkdwn",text:("*커밋*\n`"+$sha+"`")},
{type:"mrkdwn",text:("*작성자*\n"+$actor)},
{type:"mrkdwn",text:("*변경사항*\n"+$msg)}
]},
{type:"actions",elements:[
{type:"button",text:{type:"plain_text",text:"Actions 보기 →"},url:$run},
{type:"button",text:{type:"plain_text",text:"커밋 보기 →"},url:$commit}
]}
]}]}')
deploy-api, deploy-web, deploy-workers 세 워크플로우에 똑같이 붙였다. 성공은 초록(#2eb886), 실패는 빨강(#e01e5a) 컬러바.
붙이고 나니 자잘한 게 계속 터졌다.
첫 번째는 한글 잘림. 커밋 메시지를 cut -c1-60으로 잘랐더니 멀티바이트 문자 중간이 깨졌다.
# 이전 — 바이트 단위로 잘라서 한글 중간이 깨짐
FIRST_LINE=$(echo "$COMMIT_MSG" | head -1 | cut -c1-60)
# 수정 — python3 유니코드 슬라이싱
FIRST_LINE=$(echo "$COMMIT_MSG" | head -1 | python3 -c "import sys; s=sys.stdin.read().strip(); print(s[:60]+'…' if len(s)>60 else s)")
두 번째는 레이아웃. 변경사항 필드가 2열 grid 안에 들어가 있어서 커밋 메시지가 조금만 길어도 줄바꿈이 지저분하게 됐다. 필드에서 빼서 전체 너비 section으로 분리했다.
{type:"section",fields:[
{type:"mrkdwn",text:("*브랜치*\n`"+$branch+"`")},
{type:"mrkdwn",text:("*커밋*\n`"+$sha+"`")},
- {type:"mrkdwn",text:("*작성자*\n"+$actor)},
- {type:"mrkdwn",text:("*변경사항*\n"+$msg)}
+ {type:"mrkdwn",text:("*작성자*\n"+$actor)}
]},
+{type:"section",text:{type:"mrkdwn",text:("*변경사항* "+$msg)}},
세 번째는 작성자 표기. github.actor는 로그인 아이디라 name+email 조합으로 바꿨다.
md 파일만 바꿔도 배포가 트리거되는 게 거슬렸다. apps/api/** 이렇게 통으로 걸어놨더니 문서 수정까지 다 걸린 거다.
paths:
- - apps/api/**
- - packages/shared/**
+ - apps/api/src/**
+ - apps/api/serverless.yml
+ - apps/api/package.json
+ - packages/shared/src/**
+ - packages/shared/prisma/**
- .github/workflows/deploy-api.yml
이렇게 세분화하고 나니 이번엔 다른 문제가 보였다. workflow 파일 자기 자신을 path filter에 넣어놨으니, CI 알림 포맷 하나 고칠 때마다 그게 또 배포를 트리거했다. 지금 하고 있는 이 작업 자체가 계속 배포를 부르는 상황. 자기 참조를 뺐다.
paths:
- apps/api/src/**
- apps/api/serverless.yml
- apps/api/package.json
- packages/shared/src/**
- packages/shared/prisma/**
- - .github/workflows/deploy-api.yml
dlq-notifier용 CLAUDE.md도 이 김에 새로 써서 CI/CD 알림 규칙을 문서화해뒀다.