Skip to content

Discord 배포·승격 알림 jq 파싱 실패 수정 (전송 불능) - #660

Merged
sevineleven merged 1 commit into
devfrom
fix/discord-notify-jq-brace
Jul 3, 2026
Merged

Discord 배포·승격 알림 jq 파싱 실패 수정 (전송 불능)#660
sevineleven merged 1 commit into
devfrom
fix/discord-notify-jq-brace

Conversation

@sevineleven

@sevineleven sevineleven commented Jul 3, 2026

Copy link
Copy Markdown
Collaborator

Situation

Task

  • 왜 알림이 한 건도 안 오는지 원인을 찾고, 앞으로 모든 배포·승격 알림이 정상 전송되게 고친다.

Action

  • run 로그에서 알림 step 이 jq: parse error: Unmatched '}' at column 69(exit 5)로 curl 전에 죽는 걸 확인했다. continue-on-error: true 라 배포 job 만 계속돼 "배포 성공 + 알림 없음"이 됐다.
  • 근본 원인은 배포자 멘션용 맵을 jq 에 넘기는 ${DISCORD_USER_MAP:-{}} 다. bash 는 이 파라미터 확장의 기본값 {} 를 제대로 못 닫아, secret 이 설정돼 있으면 값 뒤에 stray } 를 덧붙인다(...}}). 그 깨진 JSON 을 jq 가 거부한다.
  • 역설적으로 secret 이 없을 때만 우연히 {} 로 동작하고, 설정돼 있으면 매번 깨진다. DISCORD_USER_MAP 이 설정돼 있어 머지 후 모든 배포·승격 알림이 조용히 실패했다.
  • Slack 도 안 온 이유: 배포·승격 알림 Slack에서 Discord 웹훅으로 이관 #659 가 dev 의 deploy.yml 에서 Slack 블록을 Discord 로 교체해, Slack 은 시도조차 안 한다.
  • 수정: 기본값을 파라미터 확장에 넣지 않고 guard 로 분리한다. DISCORD_MAP 에 값을 담고 비었을 때만 {} 로 채운 뒤 jq 에 넘긴다. deploy.yml 3블록(성공·실패·릴리즈)과 promote.yml 2블록(성공·실패) 전부 동일 적용.

Result

  • bash 재현으로 확정: 수정 후 secret 설정 시 stray } 없는 정상 JSON, 미설정 시 {}, 둘 다 유효.
  • 놓친 경위(post-mortem): PR 배포·승격 알림 Slack에서 Discord 웹훅으로 이관 #659 검증이 로컬에 jq 가 없어 python 으로 JSON 을 만들어 렌더링만 확인했고, 정작 이 echo ... | jq 라인은 실행되지 않았다. 그 사각에 정확히 걸렸다. 후속으로 알림 로직 검증에 실제 jq 실행 경로를 포함할지 검토가 필요하다.

연관 이슈

Summary by CodeRabbit

  • Bug Fixes
    • 배포 및 승격 워크플로우의 Discord 알림에서 사용자 매핑 정보가 없거나 비어 있어도 알림 전송이 안정적으로 동작하도록 개선했습니다.
    • 설정값이 있을 때도 JSON 형식이 깨지는 문제를 방지해 멘션 처리 실패 가능성을 줄였습니다.

- ${DISCORD_USER_MAP:-{}} 는 secret 이 설정돼 있으면 bash 가 뒤에 } 를 덧붙여(...}}) jq 가 파싱 실패(exit 5) → set -eo pipefail 로 curl 전에 step 이 죽어 알림이 전송되지 않음
- 역설적으로 secret 미설정일 때만 우연히 동작(빈 {})해, #659 머지 후 매 배포·승격 알림이 조용히 실패
- guard 로 분리: DISCORD_MAP 에 담고 비었으면 {} 로 채운 뒤 jq 에 넘김
- deploy.yml 3블록(성공·실패·릴리즈) + promote.yml 2블록(성공·실패) 전부 적용
- PR #659 검증이 로컬에 jq 없어 python 으로 렌더링만 확인하느라 이 라인을 실제로 안 돌린 사각
@sevineleven sevineleven self-assigned this Jul 3, 2026
@github-actions

github-actions Bot commented Jul 3, 2026

Copy link
Copy Markdown

Slack 스레드 연동용 메타데이터입니다. slack-pr-bot 워크플로가 자동 생성하며, 수정·삭제하면 PR 과 Slack 알림 연동이 끊깁니다.

@coderabbitai

coderabbitai Bot commented Jul 3, 2026

Copy link
Copy Markdown

Review Change Stack

Walkthrough

deploy.yml과 promote.yml의 Discord 알림 스텝(성공/실패/릴리즈)에서 DISCORD_USER_MAP 값을 jq에 전달하는 방식을 변경. 인라인 기본값 ${DISCORD_USER_MAP:-{}} 대신 DISCORD_MAP 변수에 먼저 대입 후 비어있으면 '{}'로 보정하는 방식으로 총 5개 알림 단계에서 동일하게 적용.

Changes

Discord 알림 DISCORD_MAP 보정

Layer / File(s) Summary
deploy.yml 알림 단계 처리
.github/workflows/deploy.yml
배포 성공/실패/릴리즈 알림 3개 단계 모두에서 DISCORD_USER_MAP을 DISCORD_MAP 변수로 분리하고 비어있으면 '{}'로 보정한 뒤 jq로 DISCORD_ID 조회.
promote.yml 알림 단계 처리
.github/workflows/promote.yml
승격 성공/실패 알림 2개 단계에서 동일한 DISCORD_MAP 변수 분리 및 기본값 보정 로직 적용.

Estimated code review effort: 1 (Trivial) | ~5 minutes

관련 이슈: 없음
관련 PR: 없음
제안 라벨: ci, workflow, bugfix
제안 리뷰어: 워크플로우 담당자

한 줄 코멘트: ${VAR:-{}} 인라인 기본값은 bash 파라미터 확장 파싱 시 중괄호 뒤에 stray }가 남아 jq JSON을 깨뜨릴 수 있는 전형적인 함정인데, 변수 분리로 깔끔하게 회피했네요. Bash 파라미터 확장과 중괄호 이스케이프 규칙은 Bash Manual - Parameter Expansion을 참고하면 비슷한 실수를 미리 예방할 수 있습니다. 다만 5곳에 동일 로직이 중복되어 있으니, composite action이나 재사용 가능한 workflow step으로 추출하면 다음 수정 때 한 곳만 고치면 되어 유지보수가 훨씬 편해질 것 같아요.

🐹: "중괄호 하나 잘못 놓으면 jq가 삐치는 법이지, 이제 안심하고 배포하자!"

🚥 Pre-merge checks | ✅ 2
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/discord-notify-jq-brace

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
.github/workflows/deploy.yml (1)

633-635: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚖️ Poor tradeoff

중복 로직, composite action으로 뽑아내면 이런 버그 재발도 막을 수 있어요.

동일한 DISCORD_MAP 보정 + jq 조회 + curl POST 블록이 deploy.yml 3곳, promote.yml 2곳에 그대로 복붙되어 있습니다. 이번처럼 로직에 버그가 있으면 5곳을 전부 찾아 고쳐야 하니, 다음에 또 하나만 고치고 넘어가는 실수가 나올 수 있어요.

.github/actions/discord-notify 같은 composite action으로 분리해 webhook_url, user_map, text 정도를 입력받게 하면 한 곳만 고치면 되고 테스트도 쉬워집니다. 참고: GitHub Docs - Creating a composite action

당장 급한 건 아니니 여유 있을 때 리팩토링해보시는 걸 추천드려요.

Also applies to: 676-678, 782-784

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/deploy.yml around lines 633 - 635, The Discord
notification logic is duplicated across multiple workflow steps, so the same fix
has to be repeated in several places. Extract the repeated DISCORD_MAP
normalization, jq lookup, and curl POST behavior into a reusable composite
action such as discord-notify, and have the deploy and promote workflows call it
with webhook_url, user_map, and text inputs to centralize the logic.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In @.github/workflows/deploy.yml:
- Around line 633-635: The Discord notification logic is duplicated across
multiple workflow steps, so the same fix has to be repeated in several places.
Extract the repeated DISCORD_MAP normalization, jq lookup, and curl POST
behavior into a reusable composite action such as discord-notify, and have the
deploy and promote workflows call it with webhook_url, user_map, and text inputs
to centralize the logic.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yml

Review profile: CHILL

Plan: Pro

Run ID: dd075730-aa08-4145-b39f-1a93f2c5780d

📥 Commits

Reviewing files that changed from the base of the PR and between 161a6dc and 1abc9c7.

📒 Files selected for processing (2)
  • .github/workflows/deploy.yml
  • .github/workflows/promote.yml

@github-actions
github-actions Bot requested a review from m-a-king July 3, 2026 02:11
@sevineleven
sevineleven merged commit 4cb0aae into dev Jul 3, 2026
10 checks passed
@sevineleven
sevineleven deleted the fix/discord-notify-jq-brace branch July 3, 2026 02:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant