Files
eapim-portal/script/djb-custom-export
Rinjae 0ad5bffa4f
eapim-portal CI / build (push) Has been cancelled
eapim-portal Test / test (push) Has been cancelled
DJB 커스텀 소스 납품 스크립트 추가:
- Windows, Linux/macOS 지원 배치/셸 스크립트 구현
- 소스 필터 규칙 및 수집 파일/모듈 매니페스트 작성
2026-08-11 11:47:31 +09:00
..

DJB 커스텀 소스 납품본 수집

발주사 납품용으로, 기준 시점 이후 신규로 추가된 커스텀 소스 파일만 모아 디렉터리 구조를 유지한 채 한곳에 복사하고 MANIFEST.csv / SUMMARY.md / zip 을 만든다.

파일

파일 용도
export-custom.sh macOS / Linux 실행 스크립트
export-custom.ps1 Windows PowerShell 실행 스크립트 (실제 로직)
export-custom.bat Windows cmd 래퍼 — 인자를 .ps1 로 그대로 전달
modules.conf 대상 모듈 / 소스 경로 / 수집 확장자
export-filter.rules 포함·제외 규칙 (.gitignore 유사 문법)
filelist.txt 마지막으로 뽑은 수집 대상 목록 (검토용, 재생성 가능)
filelist-no-djb-marker.txt 그중 djb / custom 마커가 없는 파일 — 업그레이드 유입분 검토 대상

수집 방식

  1. 모듈별로 컷오프 날짜 직전의 마지막 커밋을 base 로 잡는다. git rev-list -1 --before=<CUTOFF> HEAD 컷오프 이전 커밋이 아예 없으면 저장소 전체를 신규로 본다.
  2. git diff --name-only --diff-filter=A -M <base> HEAD -- <소스경로>신규 추가(A) 파일만 뽑는다. -M 이라 단순 rename 은 신규로 잡히지 않는다.
  3. modules.conf 의 확장자 allowlist 로 거른다. (확장자 없는 파일은 제외)
  4. export-filter.rules 로 포함·제외를 최종 결정한다.
  5. 남은 파일을 <out>/src/<모듈>/<원래 경로> 로 복사한다.

사용법

# macOS / Linux
./export-custom.sh --dry-run > filelist.txt   # 목록만 뽑기 (로그는 stderr)
./export-custom.sh --show-excluded            # 규칙에 걸려 빠진 목록 + 걸린 규칙
./export-custom.sh                            # 실제 수집
./export-custom.sh --zip                      # 수집 + zip
./export-custom.sh -c 2026-05-01 -m eapim-portal
# Windows
.\export-custom.ps1 -DryRun > filelist.txt
.\export-custom.ps1 -ShowExcluded
.\export-custom.ps1 -Zip
.\export-custom.ps1 -Cutoff 2026-05-01 -Module eapim-portal,eapim-admin

# cmd 에서
export-custom.bat -DryRun > filelist.txt

주요 옵션

sh ps1 설명
-c, --cutoff -Cutoff 기준 날짜 (기본 2026-05-01)
-r, --root -Root 저장소 루트. 미지정 시 스크립트 위치 기준 자동 탐지
-o, --out -Out 출력 디렉터리 (기본 <root>/build/djb-custom-export)
-m, --module -Module 특정 모듈만
--zip -Zip zip 생성
--include-untracked -IncludeUntracked 미커밋 신규 파일도 포함
--dry-run -DryRun 복사 없이 목록만
--show-excluded -ShowExcluded 규칙에 걸려 빠진 목록

export-filter.rules 문법

.gitignore 와 비슷하되 더 단순하다.

  • 한 줄에 패턴 하나. # 주석, 빈 줄 무시
  • 기본은 모두 포함. 패턴에 걸리면 제외
  • ! 로 시작하면 예외(다시 포함)
  • 뒤에 오는 규칙이 앞 규칙을 덮는다 — 순서가 중요하다
  • 패턴에 / 가 있으면 <모듈>/<경로> 전체와 매칭, 없으면 파일명만 매칭
  • / 로 끝나면 그 디렉터리 하위 전체
  • */ 도 포함해 매칭한다 (단순 glob, ** 없음)

매칭 대상 경로 예:

eapim-portal/src/main/java/com/eactive/apim/portal/djb/webhook/WebhookService.java
eapim-admin/WebContent/jsp/onl/apim/webhook/webhookList.jsp

규칙 파일은 세 구역으로 나뉜다.

  1. 업그레이드 유입분 제외filelist-no-djb-marker.txt 를 검토하며 채운다
  2. !*djb* 예외 — djb 마커가 붙은 파일은 커스텀이므로 되살린다
  3. 무조건 제외 — 빌드 산출물·서드파티. 2)보다 뒤에 있어 최종 승리한다

신규지만 커스텀이 아닌 파일 걸러내기

신규 파일이라도 제품 업그레이드로 딸려 온 것일 수 있다. 판별 순서:

# 1) 전체 목록
./export-custom.sh --dry-run > filelist.txt

# 2) djb / custom 마커가 없는 것 = 검토 대상
grep -vi djb filelist.txt | grep -v '/custom/' > filelist-no-djb-marker.txt

# 3) 검토 후 업그레이드 유입분을 export-filter.rules 의 1) 구역에 추가

# 4) 반영 확인
./export-custom.sh --show-excluded

주의

  • 컷오프 이전 커밋이 없으면 base 가 빈 트리가 되어 저장소 전체가 신규로 잡힌다. SUMMARY.md 의 base 컬럼에 (컷오프 이전 커밋 없음 …) 으로 표시된다.
  • 모듈에 컷오프 직전 커밋이 드문드문 있으면 base 가 컷오프보다 훨씬 이전으로 잡힐 수 있다. 실행 로그의 base: 날짜를 항상 확인할 것.
  • 추가된 뒤 삭제·이동된 파일은 현재 트리에 없으므로 건너뛰고, 건수를 SUMMARY.md 에 남긴다.