Skip to content

일괄 업데이트 안정 릴리스 전환 + WP 플러그인 골라 업데이트 + 보고서/메일 + rx-cli - #3

Draft
eondcom wants to merge 2 commits into
mainfrom
wp-bulk-update-stable
Draft

일괄 업데이트 안정 릴리스 전환 + WP 플러그인 골라 업데이트 + 보고서/메일 + rx-cli#3
eondcom wants to merge 2 commits into
mainfrom
wp-bulk-update-stable

Conversation

@eondcom

@eondcom eondcom commented Jul 24, 2026

Copy link
Copy Markdown
Owner

배경 — 일괄 업데이트가 WordPress 를 nightly 로 덮고 있었다

설정 > 일괄 업데이트 버튼이 계정별 업데이트와 다른 코드를 돌리고 있었다.

# 옛 build_bulk_git_update — CMS 를 가리지 않는다
if [ -d "$WR/.git" ]; then
  git fetch --depth=1 origin "$BR" && git reset --hard FETCH_HEAD

.git 만 있으면 origin 이 어디든 강제로 당겨서, origin 이 WordPress/WordPress 인 사이트 4곳이 개발 trunk(nightly)로 덮였다 — health.logicmaru.co.kr, dental.eond.com, dev.koreanhub24.com, koreanhub.oiii.kr.

계정별 업데이트가 쓰던 SITE_UPDATE_STEP 에는 원래 wp-load.php 를 먼저 보는 올바른 분기가 있었다. 같은 일을 하는 코드가 두 벌이라 한쪽만 고쳐져 있던 것이 원인이다.

덤으로, Rhymix·그누보드·XE 도 전부 master(개발 trunk)를 당기고 있었다.

변경

1. 안정 릴리스 기준으로 전환

  • 두 업데이트 경로를 SITE_UPDATE_STEP 하나로 통일 → WordPress 는 wp-cli 로만 처리
  • STABLE_TAG_FN 추가: ls-remote --tags 에서 x.y[.z] 형태의 최신 태그를 골라 그 태그로 reset. -rc1/-beta 는 정규식에서 제외
  • 태그가 없는 저장소만 브랜치로 폴백하고 그 사실을 로그·보고서에 남김
  • 비-git 오버레이도 clone --branch <태그>
  • 개발버전(alpha/beta/RC/-src)이 올라간 WordPress 는 api.wordpress.org 의 안정 릴리스로 --force 되돌림 (버전 번호상 알파가 더 높아 그냥은 안 내려감)
  • WordPress 인데 .git 이 남아 있으면 재발 원인이라 경고

실측: rhymix 2.1.35 · gnuboard5 v5.7.5 · xe-core 1.11.22 · WordPress 7.0.2(API 응답과 일치)

2. WordPress 플러그인 골라서 일괄 업데이트

build_wp_plugin_bulk_update — 망보드처럼 여러 사이트에 공통으로 깔린 플러그인 하나만 서버 전체/계정 단위로. dry=true 면 어디에 몇 버전이 깔렸는지 점검만 한다(읽기 전용이라 확인 모달 없이 실행).

3. 결과 보고서 + 메일

로그 수백 줄을 다 읽지 않아도 되도록 끝에 요약 표를 찍는다. "결과 메일 받기" 에 주소를 넣으면 서버가 같은 보고서를 메일로 보낸다(mailsendmail).

  사이트                           방식        결과   버전
  dental.eond.com                  wp          OK     7.1-alpha → 7.0.2  ※ 개발버전→안정 되돌림
  eond.com                         git-tag     OK     9eb6931f80 → 2.1.35
  swslr.com                        git-branch  FAIL   9ad995279 → -  ※ 릴리스 태그 없는 저장소
  pub.eond.com                     unknown     SKIP   CMS 를 판별하지 못함

4. rx-cli 배포

직접 만든 Rhymix CLI 를 서버 /usr/local/bin/rx 로 배포. 백업 → 설치 → php -l → Rhymix 사이트에서 rx version 시험 실행. 심볼릭 링크가 아니라 복사인 이유는 문서에 적었다.

5. 문서

  • docs/bulk-update.md — 안정 릴리스 원칙, 사고 기록과 뒷정리, 보고서 읽는 법
  • docs/rx-cli.md — 소스 위치, 배포, 명령 목록, 주의점

검증

  • cargo test 29개 통과, cargo build --release 경고 없음
  • 조립되는 셸 스크립트 전부 bash -n 통과
  • 태그 선택 로직을 실제 4개 저장소에 실행해 안정 버전이 나오는지 확인
  • 가짜 사이트 4개(플러그인 있음2/없음1/WP아님1)로 점검·업데이트 모드 실행 — 감지·카운터·제외 모두 의도대로
  • 보고서/메일 분기 실제 실행 확인 (mail 부재 시 안내 경로 포함)
  • rx-cli 임베드 배포: php -l 통과 + 배포본이 원본과 바이트 동일

남은 뒷정리 (이 PR 밖)

nightly 로 덮였던 4개 사이트에 .git(origin=WordPress/WordPress)이 남아 있다. 사이트 정상 확인 후 제거 권장 — 업데이트를 돌리면 보고서에 표시된다.

🤖 Generated with Claude Code

https://claude.ai/code/session_01WxEiSzFMdeAzvohAQ39nyJ

eondcom and others added 2 commits July 25, 2026 07:58
■ 전체 일괄 업데이트가 WordPress 를 nightly 로 덮던 버그 (2026-07-25 실사고)

build_bulk_git_update 는 계정별 업데이트가 쓰는 SITE_UPDATE_STEP 을 쓰지 않고,
.git 존재만 보고 무조건 fetch+reset --hard 하는 별도 코드였다. 그래서 origin 이
WordPress/WordPress 인 사이트 4곳(health.logicmaru.co.kr, dental.eond.com,
dev.koreanhub24.com, koreanhub.oiii.kr)이 개발 trunk 로 덮였다.
→ 두 경로를 SITE_UPDATE_STEP 하나로 통일. WordPress 는 wp-load.php 로 먼저
  걸러져 wp-cli 로만 처리된다.

■ master(개발 trunk) → 릴리스 태그

Rhymix·그누보드·XE 도 전부 master 를 당기고 있었다. STABLE_TAG_FN 을 추가해
ls-remote --tags 에서 x.y[.z] 형태의 최신 태그를 골라 그 태그로 reset 한다.
태그가 없는 저장소만 기존 브랜치 방식으로 폴백(로그에 명시).
비-git 오버레이도 --branch <태그> 로 클론.
실측: rhymix 2.1.35 · gnuboard5 v5.7.5 · xe-core 1.11.22 · WordPress 7.0.2

개발버전(alpha/beta/RC/-src)이 올라간 WordPress 는 api.wordpress.org 가 알려주는
안정 릴리스로 --force 되돌린다. WordPress 인데 .git 이 남아 있으면 재발 원인이라
경고한다.

■ WordPress 플러그인 골라서 일괄 업데이트 (신규)

build_wp_plugin_bulk_update — 망보드처럼 여러 사이트에 공통으로 깔린 플러그인
하나만 서버 전체/계정 단위로 처리. dry=true 면 어디에 몇 버전이 깔렸는지 점검만
한다(읽기 전용이라 확인 모달 없이 실행). 설정 > 일괄 업데이트 탭에 카드 추가.

검증: 조립된 스크립트 bash -n 통과, 가짜 사이트 4개(플러그인 있음2/없음1/WP아님1)로
점검·업데이트 모드 실행 — 감지·카운터·제외 모두 의도대로.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WxEiSzFMdeAzvohAQ39nyJ
■ 결과 보고서 (REPORT_FOOTER)

일괄 업데이트 로그가 수백 줄이라 무엇이 바뀌고 무엇이 실패했는지 안 보였다.
사이트마다 결과를 한 줄로 모아(RES/CMSN/VFROM/VTO/NOTE) 끝에 요약 표를 찍는다.

  사이트                           방식        결과   버전
  dental.eond.com                  wp          OK     7.1-alpha → 7.0.2  ※ 개발버전→안정 되돌림
  eond.com                         git-tag     OK     9eb6931f80 → 2.1.35
  pub.eond.com                     unknown     SKIP   CMS 를 판별하지 못함

방식 표기는 컬럼이 밀리지 않도록 ASCII 로 통일(wp/git-tag/git-branch/overlay/unknown).
전체 일괄 업데이트와 계정별 업데이트 양쪽에 적용.

■ 메일 발송

카드의 "결과 메일 받기" 에 주소를 넣으면 서버가 같은 보고서를 메일로 보낸다
(mail → sendmail 순, 둘 다 없으면 그 사실을 로그에 남기고 보고서는 그대로 출력).
비우면 발송하지 않는다.

■ rx-cli 배포 (build_rx_cli_install)

직접 만든 Rhymix CLI 를 서버 /usr/local/bin/rx 로 배포. 소스는 설정의 Rhymix 소스 경로
하위 modules/rxdashboard/bin/rx. 기존 파일 백업 → 설치 → php -l 문법검사 →
서버의 Rhymix 사이트에서 rx version 시험 실행까지 한다.
심볼릭 링크가 아니라 복사인 이유: 링크 대상 사이트를 지우면 rx 가 깨지고, rx 는 cwd 에서
위로 올라가며 루트를 찾으므로 복사본이어도 아무 사이트에서나 동작한다.

■ 문서

- docs/bulk-update.md — master 가 아닌 릴리스 태그를 쓰는 이유, 2026-07-25 사고 기록과
  뒷정리(.git 잔존), 보고서 읽는 법, 플러그인 골라 업데이트 사용법
- docs/rx-cli.md — 소스 위치, 배포/수동설치, 명령 목록, --path 없음 등 주의점
- README 에서 세 문서 링크

검증: cargo test 29개 통과, 조립 스크립트 bash -n 통과, 보고서/메일 분기 실제 실행 확인,
rx-cli 임베드 배포는 php -l 통과 + 원본과 바이트 동일 확인.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WxEiSzFMdeAzvohAQ39nyJ
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