Skip to content

251210 : [BOJ 9470] Strahler μˆœμ„œ #1040

251210 : [BOJ 9470] Strahler μˆœμ„œ

251210 : [BOJ 9470] Strahler μˆœμ„œ #1040

Workflow file for this run

name: PR Emoji & Notion Update by Author
on:
pull_request:
types: [opened, edited, reopened]
jobs:
update-notion-checkbox:
runs-on: ubuntu-latest
steps:
- name: Check PR title and body, then update author-specific checkbox
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
NOTION_API_KEY: ${{ secrets.NOTION_API_KEY }}
NOTION_DATABASE_ID: ${{ secrets.NOTION_DATABASE_ID }}
run: |
echo "πŸ” μ‹œμž‘: PR 제λͺ©κ³Ό λ³Έλ¬Έ 확인"
PR_TITLE=$(jq -r .pull_request.title "$GITHUB_EVENT_PATH")
PR_BODY=$(jq -r .pull_request.body "$GITHUB_EVENT_PATH")
PR_AUTHOR=$(jq -r .pull_request.user.login "$GITHUB_EVENT_PATH")
echo "πŸ“Œ PR Title: $PR_TITLE"
echo "πŸ‘€ μž‘μ„±μž: $PR_AUTHOR"
# βœ… 및 ❌ 이λͺ¨μ§€ 감지
HAS_CHECK=$(echo "$PR_BODY" | grep -q "βœ…" && echo "yes" || echo "no")
HAS_CROSS=$(echo "$PR_BODY" | grep -q "❌" && echo "yes" || echo "no")
if [[ "$HAS_CHECK" == "yes" && "$HAS_CROSS" == "yes" ]]; then
CHECKBOX_VALUE=false
echo "⚠️ λ‘˜ λ‹€ 포함 β†’ false"
elif [[ "$HAS_CROSS" == "yes" ]]; then
CHECKBOX_VALUE=false
echo "❌ 포함 β†’ false"
elif [[ "$HAS_CHECK" == "yes" ]]; then
CHECKBOX_VALUE=true
echo "βœ… 포함 β†’ true"
else
echo "⚠️ 이λͺ¨μ§€κ°€ μ—†μ–΄ μŠ€ν‚΅ν•©λ‹ˆλ‹€."
exit 0
fi
# μž‘μ„±μž β†’ μ²΄ν¬λ°•μŠ€ ν•„λ“œ λ§€ν•‘
case "$PR_AUTHOR" in
"Eunjin3395") FIELD_NAME="은진" ;;
"KII1ua") FIELD_NAME="μ„±μœ€" ;;
"dlchdaud123") FIELD_NAME="총λͺ…" ;;
"sksn12") FIELD_NAME="영만" ;;
"3veryDay") FIELD_NAME="ν˜„μ„œ" ;;
"alirz-pixel") FIELD_NAME="λ¬Έν˜•" ;;
"esc10946") FIELD_NAME="ν˜Έμ€€" ;;
"pinkkj") FIELD_NAME="제희" ;;
"sunha20") FIELD_NAME="μ„ ν•˜" ;;
*)
echo "❌ μ•Œ 수 μ—†λŠ” μž‘μ„±μž: $PR_AUTHOR"
exit 1
;;
esac
echo "🧩 적용 λŒ€μƒ ν•„λ“œ: $FIELD_NAME"
# PR 제λͺ©μ—μ„œ BOJ 문제 번호 μΆ”μΆœ
PROBLEM_NO=$(echo "$PR_TITLE" | grep -oE '\[BOJ [0-9]+\]' | grep -oE '[0-9]+')
if [ -z "$PROBLEM_NO" ]; then
echo "❌ PR 제λͺ©μ—μ„œ 문제 번호λ₯Ό 찾을 수 μ—†μŠ΅λ‹ˆλ‹€."
exit 1
fi
echo "πŸ”’ μΆ”μΆœλœ 문제 번호: $PROBLEM_NO"
# Notion DBμ—μ„œ 문제 번호 ν•„λ“œ == 문제 번호인 νŽ˜μ΄μ§€ 검색
PAGE_ID=$(curl -s -X POST "https://api.notion.com/v1/databases/$NOTION_DATABASE_ID/query" \
-H "Authorization: Bearer $NOTION_API_KEY" \
-H "Notion-Version: 2022-06-28" \
-H "Content-Type: application/json" \
--data '{
"filter": {
"property": "문제 번호",
"title": {
"equals": "'"$PROBLEM_NO"'"
}
}
}' | jq -r '.results[0].id')
if [ "$PAGE_ID" = "null" ] || [ -z "$PAGE_ID" ]; then
echo "❌ Notionμ—μ„œ 문제 번호 $PROBLEM_NO에 ν•΄λ‹Ήν•˜λŠ” νŽ˜μ΄μ§€λ₯Ό 찾을 수 μ—†μŠ΅λ‹ˆλ‹€."
exit 1
fi
echo "βœ… λŒ€μƒ Notion νŽ˜μ΄μ§€ ID 확인됨"
# ν•΄λ‹Ή μ²΄ν¬λ°•μŠ€μ™€ 제좜 μ²΄ν¬λ°•μŠ€ λͺ¨λ‘ μ—…λ°μ΄νŠΈ
SUBMIT_FIELD="제좜$FIELD_NAME"
echo "πŸ“¦ λŒ€μƒ 제좜 ν•„λ“œ: $SUBMIT_FIELD"
JSON_BODY=$(cat <<EOF
{
"properties": {
"$FIELD_NAME": {
"checkbox": $CHECKBOX_VALUE
},
"$SUBMIT_FIELD": {
"checkbox": true
}
}
}
EOF
)
# πŸ‘ JSON λ³Έλ¬Έ 좜λ ₯
echo "πŸ“€ Notion PATCH μš”μ²­ λ³Έλ¬Έ:"
echo "$JSON_BODY"
# πŸ” PATCH μš”μ²­ 전솑
curl -s -o /dev/null -w "%{http_code}" -X PATCH "https://api.notion.com/v1/pages/$PAGE_ID" \
-H "Authorization: Bearer $NOTION_API_KEY" \
-H "Notion-Version: 2022-06-28" \
-H "Content-Type: application/json" \
--data "$JSON_BODY"
echo "πŸŽ‰ Notion μ—…λ°μ΄νŠΈ μ™„λ£Œ!!: $FIELD_NAME β†’ $CHECKBOX_VALUE"
echo "🎯 Lambda API 호좜 μ‹œμž‘"
curl -s -o lambda_response.json -w "%{http_code}" -X POST https://p7vk9p47d0.execute-api.ap-northeast-2.amazonaws.com/api/save \
-H "Content-Type: application/json" \
-d "{\"prAuthor\": \"$PR_AUTHOR\", \"problemId\": \"$PROBLEM_NO\"}"
echo "πŸ“¬ Lambda 응닡:"
cat lambda_response.json
echo "πŸŽ‰ Lambda API 호좜 μ™„λ£Œ!!: $PR_AUTHOR, $PROBLEM_NO"