Skip to content

Update Discussion List in README #101

Update Discussion List in README

Update Discussion List in README #101

Workflow file for this run

name: Update Discussion List in README
on:
workflow_dispatch:
discussion:
types: [created, edited, answered, unanswered, labeled, unlabeled, category_changed] # 필요에 맞게 줄여도 됨
discussion_comment:
types: [created, edited, deleted]
permissions:
contents: write # README 수정/커밋
discussions: read # /discussions API 읽기
jobs:
update-readme:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
# schedule 트리거에서도 안전하게 owner/repo 설정 (env로 전달)
- name: Set OWNER/REPO env
shell: bash
run: |
echo "OWNER=${GITHUB_REPOSITORY%/*}" >> "$GITHUB_ENV"
echo "REPO=${GITHUB_REPOSITORY#*/}" >> "$GITHUB_ENV"
# (선택) 디버그: 현재 브랜치와 파일 확인
- name: Debug info
shell: bash
run: |
echo "Branch ref: $GITHUB_REF"
ls -al .github/workflows || true
# Discussions JSON 저장(표준출력 직접 파이프 X, 파일에 안전 저장)
- name: Save discussions JSON to file
id: save_json
uses: octokit/request-action@v2.x
with:
route: GET /repos/{owner}/{repo}/discussions
owner: ${{ env.OWNER }}
repo: ${{ env.REPO }}
per_page: 100
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Write JSON to /tmp/discussions.json
shell: bash
run: |
set -euo pipefail
run: |
set -euo pipefail
# 따옴표 붙은 heredoc: 안의 내용이 그대로 파일로 저장됨 (셸/변수/따옴표 영향 없음)
cat > /tmp/discussions.json <<'JSON_EOF'
${{ steps.save_json.outputs.data }}
JSON_EOF
# 최신 활동순( updated_at desc ) 상위 5개 표 생성
- name: Build discussions table file (latest activity + labels only)
shell: bash
run: |
set -euo pipefail
{
echo '| Title | Labels | Comments |'
echo '|-------|--------|----------|'
jq -r '
# 최신 활동(updated_at) 기준 내림차순 → 상위 5개
sort_by(.updated_at) | reverse
| .[:5]
| .[]
# 라벨 문자열 만들기 (최대 5개, 초과 시 +N)
| (
(.labels // [])
| map(.name)
| unique
| (if length > 5 then .[0:5] + ["+" + ((length-5)|tostring)] else . end)
| join(", ")
) as $labels
# 마크다운 표 한 줄 (제목의 |/개행은 공백으로 치환)
| "| [\(.title | gsub("[|\r\n]"; " "))](\(.html_url)) | \($labels) | \(.comments) |"
' /tmp/discussions.json
} > /tmp/discussions_table.md
# CRLF 방지
tr -d '\r' < /tmp/discussions_table.md > /tmp/discussions_table.unix && mv /tmp/discussions_table.unix /tmp/discussions_table.md
# (선택) 미리보기
echo "Generated table:" && cat /tmp/discussions_table.md
# README 마커 사이만 교체 — awk + getline (system/cat 사용 안 함)
- name: Replace discussions block in README.md
shell: bash
run: |
set -euo pipefail
# 마커 존재 확인
grep -q "<!-- discussions-list-start -->" README.md
grep -q "<!-- discussions-list-end -->" README.md
# 혹시 모를 CRLF 제거(줄바꿈 깨짐 방지)
tr -d '\r' < /tmp/discussions_table.md > /tmp/discussions_table_unix.md
# README를 "마커 앞부분"과 "마커 뒷부분"으로 분리
sed -n '1,/<!-- discussions-list-start -->/p' README.md > /tmp/readme_top.md
sed -n '/<!-- discussions-list-end -->/,$p' README.md > /tmp/readme_bottom.md
# 새 표로 사이를 정확히 재구성 (여분 문자/따옴표 제거 효과)
{
cat /tmp/readme_top.md
cat /tmp/discussions_table_unix.md
cat /tmp/readme_bottom.md
} > README.tmp.md
mv README.tmp.md README.md
- name: Commit and push
shell: bash
run: |
set -euo pipefail
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
git add README.md
if ! git diff --cached --quiet; then
git commit -m "Update Discussions list"
git push
else
echo "No changes to commit"
fi