Skip to content

chore: secrets-sync/#79 - #80

Merged
daehyeong2 merged 4 commits into
mainfrom
chore/secrets-sync/#79
Aug 5, 2026
Merged

chore: secrets-sync/#79#80
daehyeong2 merged 4 commits into
mainfrom
chore/secrets-sync/#79

Conversation

@itzjb

@itzjb itzjb commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

변경 내용

  • 앱 시크릿 정본을 GitHub Secrets(PROD_* 10종, environment production)로 옮기는 Sync Config 파이프라인을 추가했어요. 이후 시크릿 교체는 "Secret 갱신 → Sync Config 실행"으로 일원화돼요.
  • deploy/render-secrets.sh 신규: stdin 본문을 키 화이트리스트·형식 검증(필수 키 누락 시 기존 파일 무손상 중단) → 활성 세션 게이트 → 원자 교체(+.bak 백업) → 재시작 → 헬스 실패 시 백업 자동 복원.
  • deploy/receive-deploy.sh: forced command에 sync-config [--dry-run] [--no-restart] verb 추가 — 기존 deploy <sha> [--force] 동작은 그대로예요.
  • .github/workflows/sync-config.yml 신규: workflow_dispatch 전용, 시크릿 본문은 SSH stdin으로만 전달(러너 로그 미출력), Deploy와 같은 concurrency 그룹(deploy-production)으로 직렬화.
  • deploy/README.md: Secret↔env 매핑 표, 값 교체 절차, write-only 주의사항, 설치 절차(sudoers 1줄 추가)를 문서화했어요.

확인 방법

  • 렌더러 로컬 검증 11케이스 통과: 정상 렌더(600 권한·10키·백업 생성) / 필수 키 누락·허용 외 키·빈 필수값·형식 위반 → 전부 기존 파일 무손상 중단 / dry-run 키 이름 diff / 인자 검증.
  • forced command 라우팅 시뮬레이션 15케이스 통과(sudo를 PATH 심으로 대체): 기존 deploy 경로 회귀 7케이스 + sync-config 허용 4케이스 + 거부 4케이스(허용 외 플래그·중복 플래그·여분 인자·명령 주입 시도).
  • 워크플로 YAML 파싱 확인, 전체 diff에서 서버 식별 정보·시크릿 값 0건 스캔.
  • 세션 게이트·재시작·롤백 경로는 로컬 실행이 불가능해 머지 후 서버에서 dry-run → 실전환으로 검증할 예정이에요(아래 참조).

로그 출력 변화 (배포 스크립트 리뷰 항목)

  • 신규 출력 키워드: SYNC OK (n keys) / SYNC DRY-RUN changed:[키 이름…] added:[…] removed:[…] / SYNC DEFERRED / FAILED: … / MISSING SECRET: <Secret 이름>.
  • 값은 어떤 경로로도 출력되지 않아요 — 본문은 stdin 전달이라 러너 로그에 아예 나타나지 않고, dry-run 보고도 키 "이름"만 출력해요. 상세 진단은 서버 로그 디렉토리(600)에만 남아요.

머지 후 필요한 작업 (서버·설정)

  1. 서버에 render-secrets.sh와 갱신된 receive-deploy.sh 수동 복사 (README §서버 설치 절차 — "PR 머지 → 수동 복사" 관례).
  2. sudoers에 render-secrets.sh 1줄 추가.
  3. environment productionPROD_* Secrets 10종 등록 → dry_run으로 확인 후 본 실행 전환 검증.

Closes #79

@itzjb
itzjb marked this pull request as ready for review August 5, 2026 15:36
@itzjb
itzjb requested a review from a team as a code owner August 5, 2026 15:36
@daehyeong2
daehyeong2 merged commit b3d4e78 into main Aug 5, 2026
2 checks passed
@itzjb
itzjb deleted the chore/secrets-sync/#79 branch August 5, 2026 16:24
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.

chore: 프로덕션 시크릿 GitHub Secrets 정본화 및 Sync Config 동기화 파이프라인

2 participants