Skip to content
guesungPublic

About

웹 페이지를 읽으며 간편하게 기록하세요.

Resources

Stars

9 stars

Watchers

1 watching

Forks

Repository files navigation

.github

GitHub Actions 워크플로와, 워크플로가 부르는 스크립트가 있는 폴더입니다. 이 문서는 어느 워크플로가 어느 스크립트를 부르는지를 한곳에 모은 대응표입니다. 워크플로나 스크립트를 추가·이동·삭제하면 이 표도 같은 PR에서 고칩니다.

워크플로

GitHub Actions는 .github/workflows/ 아래 하위 폴더를 인식하지 않습니다. 그래서 폴더 대신 파일명 앞의 계열 접두사로 묶습니다.

접두사 계열
ci·e2e PR·push마다 도는 검증
cd- 앱별 빌드·배포 (재사용 워크플로)
release·versions 릴리스와 스토어 버전 조회. 웹의 Slack 버튼이 파일명으로 dispatch하므로 이름을 바꾸지 않습니다
audit- 상태를 선언과 대조하는 감사
report- 정기 리포트
chore- 레포 유지보수 자동화
워크플로 트리거 실행 주기·시각 부르는 스크립트 (.github/scripts/ 기준)
ci.yml push(develop·master), pull_request 해당 push·PR 이벤트마다 deploy/resolve-affected-base.sh · deploy/detect-affected-apps.sh · deploy/notify-thread-root.mjs · deploy/notify-thread-reply.mjs · deploy/notify-build-ready.mjs · deploy/notify-staging-deploy.mjs · deploy/comment-pr-extension.mjs · conventions/check-code-conventions.mjs, 그리고 cd-app·cd-extension·cd-web 호출
e2e.yml push(develop·master), pull_request 해당 push·PR 이벤트마다 없음 (Playwright)
cd-app.yml workflow_call 검증된 develop 후보를 큐에서 재판정해 Android APK 빌드·Firebase App Distribution 배포, master·PR은 빌드만, release는 새 빌드·Play 내부 테스트 제출 deploy/prepareStagingApp.mjs · deploy/appDeploymentState.mjs · deploy/detect-affected-apps.sh (EAS CLI·firebase-tools)
cd-extension.yml workflow_call, workflow_dispatch 다른 워크플로에서 호출하거나 수동 실행할 때마다 deploy/find-reusable-artifact.sh · deploy/upload-extension-to-store.mjs
cd-web.yml workflow_call, workflow_dispatch 다른 워크플로에서 호출하거나 수동 실행할 때마다 deploy/find-staged-deployment.mjs · deploy/staged-deployment.mjs · deploy/notify-staging-deploy.mjs
release.yml workflow_dispatch 수동 실행할 때마다 없음. cd-app·cd-extension·cd-web·release-notify 호출
release-notify.yml workflow_call release.yml에서 호출할 때마다 deploy/notify-release-result.mjs
release-github.yml push(tag v*) v* 태그 push마다 없음
versions.yml workflow_dispatch 수동 실행할 때마다 deploy/report-store-versions.mjs
notify-extension-published.yml schedule, workflow_dispatch 매시 07·37분 또는 수동 실행마다 deploy/notify-extension-published.mjs
audit-env-manifest.yml pull_request, workflow_dispatch PR 이벤트 또는 수동 실행마다 env/check-env-manifest.mjs
audit-env-registry.yml pull_request, schedule, workflow_dispatch 매일 07:30 KST, PR 이벤트 또는 수동 실행마다 env/audit-env-registry.mjs
audit-ga-cid-adoption.yml schedule, workflow_dispatch 매주 월요일 09:13 KST 또는 수동 실행마다 없음 (Playwright, e2e/probes/)
audit-refactor.yml schedule, workflow_dispatch 매주 토요일 10:17 KST 또는 수동 실행마다 refactor/report-refactor-audit.mjs
report-ga-daily.yml schedule, workflow_dispatch 매일 07:00 KST 또는 수동 실행마다 ga/report-daily-ga.mjs
report-ga-weekly.yml schedule, workflow_dispatch 매주 월요일 08:00 KST 또는 수동 실행마다 ga/report-weekly-ga.mjs
report-seo.yml schedule, workflow_dispatch 매일 09:17 KST 또는 수동 실행마다 pnpm seo:check·seo:gsc·seo:sheets · seo/find-previous-seo-report.mjs · seo/build-seo-ai-context.mjs · seo/send-seo-ai-report.mjs · seo/seo-fix.mjs · seo/notify-seo-slack.mjs
report-gsc-demand.yml workflow_dispatch 수동 실행할 때마다 pnpm seo:gsc-demand → seo/export-gsc-demand.mjs (조합 페이지 축 판단용 GSC 수요·사이트맵 리포트, 아티팩트만 남김)
chore-cleanup-unused.yml schedule, workflow_dispatch 매주 토요일 10:00 KST 또는 수동 실행마다 cleanup/cleanup-unused-files.mjs
chore-e2e-coverage.yml schedule, workflow_dispatch 매주 일요일 10:23 KST 또는 수동 실행마다 e2e-coverage/maintain.mjs
chore-ga-events.yml schedule, workflow_dispatch 매주 수요일 09:41 KST 또는 수동 실행마다 ga-events/maintain.mjs
chore-supabase-inventory.yml schedule, workflow_dispatch 매일 08:00 KST 또는 수동 실행마다 supabase/generate-supabase-inventory.mjs · supabase/sync-supabase-inventory-pr.mjs
chore-sentry-triage.yml workflow_dispatch Sentry 웹훅 수신기가 SENTRY_AI_TRIAGE_ENABLED=true일 때 새 이슈·재발마다 디스패치하거나 수동 실행할 때마다 sentry/triage-inputs.mjs · sentry/triage-guard.mjs · sentry/fetch-sentry-context.mjs · sentry/check-triage-patch.mjs · sentry/build-pr-body.mjs · sentry/report-sentry-triage.mjs
chore-blog-catalog.yml schedule, workflow_dispatch 매일 03:17 KST 토스·당근 전체 재순회, 15분마다 재개 요청 확인, 3시간마다(:37) 긱뉴스 피드 수집 또는 수동 실행(소스 선택·당근 smoke·dry-run)마다 blog-reading/collect.mjs

정기 실행 시각은 워크플로의 UTC cron을 한국 시간(KST)으로 환산한 예정 시각입니다. GitHub Actions 사정에 따라 실제 시작은 늦어질 수 있습니다.

chore-cleanup-unused.yml·chore-supabase-inventory.yml·audit-refactor.yml·chore-sentry-triage.yml은 ref: master로 체크아웃합니다. 작업 브랜치에서 dispatch해도 스크립트는 master의 것이 돕니다. chore-e2e-coverage.yml과 chore-ga-events.yml은 주간 실행에서 master를, 수동 실행에서 선택한 ref를 체크아웃합니다. master 외 ref의 수동 실행은 검증 결과만 남기고 PR을 게시하지 않습니다.

detect-affected-apps.sh는 Turbo 패키지 영향 판정에 더해 CI·앱·릴리스 워크플로와 앱 판정 스크립트 변경을 앱 변경으로 처리합니다. push 실행 전체는 취소하지 않고 develop의 검증·웹·확장 잡만 각각 이전 잡을 취소합니다. 앱의 실제 빌드 잡이 release-app 그룹(cancel-in-progress: false, queue: max)을 단독으로 소유해 운영 요청을 최대 100개까지 대기시킵니다. develop 후보는 실행권을 얻은 뒤 최신 검증 성공 후보와 플랫폼별 마지막 배포 성공 SHA를 확인하고, 오래되었거나 앱 변경이 없는 후보를 EAS 전에 생략합니다. 성공 SHA는 Firebase 배포가 끝난 뒤 staging-app-success-<platform>-<sha>-<run>-<attempt> 아티팩트로 90일간 보관합니다. 기준이 없거나 만료됐으면 전체 앱 빌드하며, 조회 실패는 실패로 처리합니다. Android 운영 릴리스의 master CI 산출물 재사용은 유지합니다.

ci.yml의 notify-staging-app은 deploy/notify-thread-reply.mjs를 REPLY_PHASE=store-submit으로 호출해 develop 앱 App Tester 배포 결과를 머지 스레드에 알립니다. 웹 결과 알림과 독립적으로 실행하며, 앱 댓글에는 배포 버튼 없이 Actions 로그 링크만 붙입니다. 큐에서 생략한 후보는 attempted=false로 결과 댓글을 억제합니다.

릴리스·배포 흐름 전체는 docs/release-flow.md를 봅니다.

스크립트

.github/scripts/는 도메인 폴더로 나뉩니다. 폴더 안에는 실행 스크립트(위 표에 나오는 파일)와 그 스크립트가 쓰는 모듈, 테스트(*.test.ts)가 함께 있습니다.

폴더 담당
shared/ 두 도메인 이상이 쓰는 모듈 (run-context·slack-api·slack-blocks·http·jwt·google-auth·repo-versions)
deploy/ CI 빌드 판정, Slack 빌드·배포·릴리스 알림, PR 확장 다운로드 댓글, 확장 웹스토어 업로드, 스토어 버전
seo/ SEO 점검·GSC·Sheets 적재·AI 리포트·P0·P1 자동 수정 PR
ga/ GA4 일간·주간 리포트, 기능 사용량 측정
env/ 환경 변수 매니페스트 검사와 등록 현황 감사
conventions/ 코드 컨벤션 원장(docs/code-conventions.yaml) 형식 검사
supabase/ 운영 Supabase 인벤토리 문서(docs/supabase-inventory.md) 생성과 갱신 PR
refactor/ 주간 리팩토링 점검
cleanup/ 미사용 파일 정리
e2e-coverage/ 핵심 사용자 흐름의 E2E 누락 점검, 새 테스트 검증, 자동 보완 PR 게시
blog-reading/ 블로그 정주행(토스·당근·긱뉴스) 공개 글 카탈로그 수집기. 원본 순회(tossSource·daangnSource), 긱뉴스 Atom 피드 수집(geeknewsSource), 수집 엔드포인트 클라이언트(ingestClient), 실행 진입점(collect)
ga-events/ GA 이벤트 누락 점검, 이벤트 추가 패치 검증, 자동 보완 PR 게시

shared/ 규칙: 두 도메인 이상이 쓰는 모듈만 shared/에 둡니다. 한 도메인만 쓰면 이름이 범용이어도 그 도메인 폴더에 둡니다(예: seo/google-sheets.mjs). shared/는 다른 도메인 폴더를 import하지 않습니다.

워크플로 밖에서 부르는 것

진입점 경로 용도
pnpm seo:check seo/check-seo.mjs SEO 점검 (report-seo.yml도 사용)
pnpm seo:gsc seo/check-gsc.mjs Search Console 색인·성과 조회
pnpm seo:gsc-demand seo/export-gsc-demand.mjs 도메인 이전일 이후 GSC 수요·사이트맵 상태 리포트 (report-gsc-demand.yml도 사용)
pnpm seo:sheets seo/persist-seo-sheets.mjs SEO 결과를 Google Sheets에 적재
수동 CLI ga/measure-feature-usage.mjs 기간별 기능 사용량 측정 (docs/analytics.md)
수동 CLI blog-reading/collect.mjs --dry-run으로 서버 저장 없이 원본 순회만 확인, --smoke로 당근 접근 확인 (종료 코드 3은 원본 사이트의 접근 차단)

테스트는 pnpm exec vitest run .github/scripts로 돌립니다.

About

웹 페이지를 읽으며 간편하게 기록하세요.

Resources

Stars

9 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages