Releases: bluejayA/devflow-k8s-deploy
Releases · bluejayA/devflow-k8s-deploy
v0.4.0: StatefulSet/PVC + NetworkPolicy zero-trust
Compare
Sorry, something went wrong.
No results found
v0.4.0 변경사항
신규 기능
StatefulSet + PVC 지원 (#11 )
stateful: high 감지 시 statefulset.yaml 자동 생성 (volumeClaimTemplates + liveness/readinessProbe 포함)
STS-W01: volumeClaimTemplates 미설정 시 WARN
NetworkPolicy zero-trust (#13 )
default deny-all ingress/egress + CoreDNS egress 자동 허용
cluster.network_policy: false 시 생성 스킵 + NET-W01 WARN
ClusterConfig preset 구조 도입
cluster.preset: orbstack → storageClassName: local-path, NetworkPolicy 활성
storage_class, network_policy 직접 override 가능
Codex 외부 리뷰 반영 (P1/P2)
StatefulSet 컨테이너 이미지 build.image_tag 연결 (placeholder 제거)
cluster: <string> scalar 설정 AttributeError 방어
summary.json generated_files 동적 생성 (statefulset.yaml/networkpolicy.yaml 반영)
테스트
688 tests passed (베이스라인 655 → +33)
ruff / mypy strict clean
v0.2.0 — Critical runtime fixes
Compare
Sorry, something went wrong.
No results found
v0.1.0 샘플 배포 검증에서 발견된 6건의 런타임 결함 + Codex 외부 리뷰 3건의 추가 regressions 수정.
⚠️ v0.1.0 사용자는 업그레이드 필수
v0.1.0 Dockerfile은 docker build에서 groupadd: not found 즉시 실패, 설령 통과해도 deployment.yaml이 베이스 JRE 이미지 를 가리켜 100% CrashLoopBackOff . 실제 배포 가능한 최초 버전은 v0.2.0입니다.
Critical fixes (docker build + k8s apply 시점)
Dockerfile alpine 호환 — groupadd/useradd → addgroup -S / adduser -S (busybox 호환). v0.1.0은 alpine 런타임에서 빌드 즉시 실패.
Dockerfile wrapper 의존 제거 — gradle:jdk21-alpine에 내장된 시스템 gradle 사용. v0.1.0은 프로젝트에 gradlew + gradle/ 강제.
Dockerfile Gradle Version Catalog 지원 — gradle/libs.versions.toml / convention plugins 프로젝트는 gradle/ 디렉토리 조건부 COPY 필요 (Codex P1-a).
Dockerfile multi-module 지원 — COPY src ./src 하드코딩이 multi-module 루트(src 없음)에서 실패. COPY . . 원복 + Dockerfile.dockerignore 동반 생성으로 context pollution 방어 (Codex P1-b).
deployment.yaml 앱 이미지 wiring — config.build.image_tag(기본 app:0.2.0)를 deployment image:에 전달. v0.1.0은 baseline runner 이미지를 그대로 넣어 배포 확정 실패.
deployment.yaml imagePullPolicy: IfNotPresent + non-mutable tag 전제 주석 (Codex P2).
UX / 효율
resource_hint 실반영 — StackModule.defaults(resource_hint)가 tier별 값 반환: small(50m-500m, 256-512Mi) / medium(100m-1000m, 512Mi-1Gi) / large(250m-2000m, 1-2Gi). v0.1.0은 STEP 1에서 수집해도 manifest에 반영 안 됨.
gradle --no-daemon + maven -B — 컨테이너 빌드에서 daemon clean shutdown 이슈 + batch 모드.
Dockerfile.dockerignore 동반 생성 — Docker 20.10+ 규약. .git/, build/, target/, k8s-output/, .env*, 시크릿 등 제외.
Breaking changes (플러그인 API 직접 import 시)
StackModule.defaults() → defaults(resource_hint) — 호출부에 인자 필요.
ProjectAnalyzer.analyze(project_dir, config) → analyze(project_dir, config, resource_hint='medium') — 기본값 있어 기존 호출 무변경도 OK.
플러그인 최종 사용자(SKILL 호출)는 변경 불필요 — orchestrator가 자동 처리.
설치 / 업그레이드
Claude Code 플러그인 (devflow-marketplace):
/plugin marketplace update devflow-marketplace
/plugin install devflow-k8s-deploy@devflow-marketplace
직접 클론 :
git clone --branch v0.2.0 https://github.com/bluejayA/devflow-k8s-deploy.git
검증 요약
631 tests pass (v0.1.0 613 + 신규 18) · ruff / mypy strict clean
실 docker build --no-cache + docker run + curl /actuator/health/{liveness,readiness} → UP
Codex 외부 리뷰 2회 (초기 Dockerfile 4건 → 반영 후 잔여 P1/P2 3건 재지적 → 반영)
전체 변경사항
v0.1.0 — Initial release
Compare
Sorry, something went wrong.
No results found
v0.1.0 Release Notes — devflow-k8s-deploy
Release Date : 2026-04-21
PR : #2
HEAD commit (feature branch) : 608209f
Base commit (INCEPTION 종료) : 558d8e8
요약
JVM(Kotlin + Java Spring Boot) 백엔드 프로젝트를 분석하여 Dockerfile + Kubernetes manifest 를 자동 생성하는 Claude Code 플러그인 v0.1.0 초기 릴리즈. AIDLC devflow 워크플로우로 INCEPTION → CONSTRUCTION 전체 사이클을 거쳐 구축.
지표
값
개발 기간
2026-04-15 ~ 2026-04-21 (7일)
총 커밋
INCEPTION 종료 558d8e8 → PR HEAD 608209f (30+ 커밋)
Units
16개 완성 (6 phase)
Tests
613 passed , ruff/mypy strict clean
리뷰 사이클
Claude 내부 3-Stage × 16 unit + Codex 외부 1회
Critical 이슈 해결
5건 (Path Traversal, YAML injection, Redact, CLI entry, F-43 매트릭스)
기타 이슈 반영
Important 60+ 건
INCEPTION (2026-04-15 ~ 2026-04-17)
7단계 스테이지 흐름
스테이지
Depth
결과물
workspace-detection
—
Greenfield 확정 (스캐폴딩만 존재: README / plugin.json / LICENSE / .gitignore)
brainstorming (side-skill)
—
v0.1.0 scope lock: JVM 전용 , 13 design axes 결정. Codex 독립 리뷰 반영
requirements-analysis
Comprehensive
71 F-* (F-09 reserved) + 17 NFR + 13 assumptions + 8 risks
user-stories
Comprehensive
22 stories (Must 17 / Should 4 / Could 1), 4 actors, 8 tech requirements
nfr-requirements
GENERATE
17 NFR (개발자 도구/CLI + MVP 프로파일), 2건 조정 + NFR-SEC-05 신규
workflow-planning
—
3 접근법 생성 → A안 (설계 우선) 선택
application-design
Comprehensive DETAIL
12개 컴포넌트 상세 설계 + 5-STEP 시퀀스 다이어그램 + 보조 산출물 7종
외부 검토 2회 (8건 반영)
1차 LIST: 3-페르소나 + Codex 리뷰 → 컴포넌트 15→12 (NamespaceResolver/AutoFixLoop/ContainerBuildRunner 인라인 흡수)
2차 DETAIL: spec-reviewer GO-WITH-CHANGES + Codex No-Go → NFR-SEC-05 픽스처 강화, 시그니처 정합, retry.py FixOutcome 구조체, F-56 pass-through, types.py 카탈로그, 서브유닛 매핑, F-* 카운트 정정(73→71) 등 전부 반영 후 양쪽 모두 GO 상태로 해소
핵심 결정 (CONSTRUCTION에서 변경 금지)
JVM 단독 스택 (Go/Python/React는 v0.2~v0.4)
generate-only 경계, NFR-SEC-05 CI allowlist 테스트로 회귀 방지 (런타임 가드 없음)
build opt-in (기본 skip)
Jinja2 템플릿 + Atomic write (SIGINT/SIGTERM 핸들러 + 7일 고아 GC)
비개발자 친화: F-02a 한국어 의도 질문 + F-02b "? 도움말" + NFR-17 전 STEP 한국어 요약 + 원어 병기
summary.json validation.skipped[] 안전 계약 (CI degraded success 오인 방지)
Spring Boot /tmp + /var/log 자동 emptyDir (운영 503 방지)
CONSTRUCTION (2026-04-17 ~ 2026-04-21)
Phase 전환
2026-04-17 : INCEPTION → CONSTRUCTION 전환. -construction worktree 분리 유지.
units-generation (Standard depth)
16 units / 6 phases 분해 (application-design §E 권장 SkillPipeline 서브유닛 분해 포함)
각 unit의 책임 / 의존성 / 인터페이스 / 테스트 경계 정의
code-generation (SDD 모드, Standard depth, TDD)
Unit별 순차 TDD (RED-GREEN-REFACTOR) + 각 unit 3-Stage 리뷰(Spec/Quality/Security 병렬)
Critical/Important 이슈 반영 후 다음 unit 진입
Phase 1: 기반
#
Unit
Tests
커밋
Stage별 Verdict 요약
1
shared
35 → 96 cumulative (fileio/image_ref/text_safety 보강으로 후속 증가)
865ba2c
Stage 1 PASS / 2&3 CONDITIONAL → Critical 3 + Important 3 반영
Phase 2: 독립 컴포넌트 (shared만 의존)
#
Unit
Tests
커밋
Stage별 Verdict 요약
2
stack_module
96 (61 신규)
22a1215
Stage 1 CONDITIONAL / 2 CONDITIONAL / 3 CONDITIONAL → Critical 1 + Important 7 + Minor 8 + ValueError 대칭 2 반영. StackDetectResult에 build_system/actuator_enabled 필드 추가. defusedxml + fileio 헬퍼 도입
3
template_renderer
122 (26 신규)
06b9e81
Stage 1 PASS / 2&3 CONDITIONAL → Important 4 반영 (StrictUndefined + sanitization boundary docstring)
4
config_loader
156 (34 신규)
95e9b60
Stage 1 PASS / 2&3 CONDITIONAL → Important 5 반영. ResolvedConfig.layer_raws 필드 추가(shared 보강). YAML bomb 방어 + symlink escape + OSError 구분
5
atomic_writer
177 (21 신규)
868ac9c
Stage 1 PASS / 2 CONDITIONAL / 3 Critical 1 (symlink GC) → Critical 1 + Important 5 반영
6
k8s_validator
272 (95 신규)
b91b841 init → Stage 1 FAIL (F-43 매트릭스 전면 불일치 — 내 prompt 실수) → ebcb0a9 재작업 → 4676e8b Important 6
F-43 매트릭스 정합 복구. CLI(--json/--skipped CSV) + 3단계 exit code. check_yaml_refs fileio 공용화. int 예외/None-chain 방어
7
kubectl_dry_runner
298 (26 신규)
84a31dd
Stage 1 PASS(98) / 2 CONDITIONAL / 3 Issues Found → Important 5 반영. --dry-run=client allowlist + degraded skip + timeout 10s + manifest_dir 방어 + UnicodeDecodeError 방어
Phase 3: 통합 컴포넌트
#
Unit
Tests
커밋
Stage별 Verdict 요약
8
project_analyzer
348 (50 신규)
50f4b46 init + 612ec6a + 9697950 Kotlin DSL colon
Stage 3 Critical 1 (Path Traversal via multi-module include '..') → Critical 1 + Important 9 반영
9
dockerfile_generator
372 (24 신규)
7073155 init + 030933c Important 5
multi-stage(JDK builder→JRE runner) + non-root + 캐시 레이어 + OCI image regex allowlist + 개행 인젝션 방어 + build_system 토큰 분해
10
manifest_generator
421 (49 신규)
32e6e91 init + baff9b2/0bd08ab/edb6352
Stage 3 Critical 2 (Service/SA 입력 검증 누락 + exposure whitelist 부재) → Critical 2 + Important 6 반영. _validate_image_tag → scripts/_shared/image_ref.py 공용화 + TemplateRenderer trim_blocks/lstrip_blocks 추가
11
output_packager
476 (55 신규)
3c51dff init + 88d52c3/a86898c
Stage 3 Critical 1 (BailOutContext redact 미적용 — types.py:290 명세 위반) → Critical 1 + Important 6 반영. redact_sensitive(Bearer/JWT/kubeconfig/token) + _shared/text_safety.py 공용화(Unit 9/10/11 공유)
12
pipeline_build_runner
506 (30 신규)
d84896d init + ab08f73 Important 5
F-102 timeout 주입(+0=무제한) + BuildResult.stdout/stderr/exit_code 확장 + detect_engine Literal 좁힘 + fileio.is_within 재사용 + engine whitelist assert
13
pipeline_retry_loop
525 (19 신규)
b01acbc init + 76c20a4 Minor 3
Stage 1 PASS(95) / 2 Approved(9) / 3 Secure — Critical/Important 0 (최초). Minor 3: application-design drift 교정 (exit_code <=2 → != 1, F-42 정합) + _empty_report() factory
Phase 4: 오케스트레이터 (최대 unit)
#
Unit
Tests
커밋
Stage별 Verdict 요약
14
pipeline_orchestrator
559 (34 신규)
58281bf init + 4d3ce60 Important 6
5-STEP 전체 + PipelineDependencies DI + HelpCatalog 10 term + MessagePolicy + retry_loop + BailOutError 처리. _safe_section(config None-chain 방어) + prompt 응답 검증 + image_tag 검증 + _raise_bailout 공통화 + cast + _coerce_literal_or_default
Phase 5: SKILL + 문서
#
Unit
Tests
커밋
Stage별 Verdict 요약
15
skill_md_and_readme
564 (5 신규)
970308e init + 6f92ccc/6c9fd9d/eec406b
Stage 2 Requires Changes(72, Critical 2 ) → Critical 2 + Important 5 반영. orchestrator.py CLI 진입점 추가 (main + argparse + _build_default_dependencies) + F-83 summary.json 스키마 정합 + 경로 모델 통일 + CI set -uo pipefail + registry.example.com
Phase 6: CI 보안
#
Unit
Tests
커밋
Stage별 Verdict 요약
16
security_tests
597 (33 신규)
5c7b5fc init + 6ad9b90/33036e2
Stage 3 CONDITIONAL(스펙 준수도 70%) → Important 5 반영 후 100% . autouse conftest + 글로벌 subprocess.run 패치 + 인젝션 토큰 14종(+\n/\r/\x00) + kubectl 7 forbidden verbs + 픽스처 자체 검증
build-and-test (Standard depth)
pytest 597 → 602 → 607 → 613 (E2E + Codex 수정 누적)
ruff / mypy strict clean
CLI smoke test: 실제 Spring Boot 샘플 프로젝트로 파이프라인 실행 → 6 파일 생성 성공
E2E smoke test 통합 버그 3건 (2026-04-21)
unit 단위 테스트(MagicMock 기반)가 catch하지 못한 통합 이슈:
버그
증상
커밋
해결
A
ValueError: k8s DNS-1123 label 위반: namespace='None'
2cd4439
orchestrator 자동 모드가 config_loader.resolve_namespace() 미호출 → 4단계 조회(project→org→user_input→project_dir) 정식 사용. app_name None도 project_dir.name으로 DNS-1123 정규화 fallback
B
BailOut 시 troubleshoot.md 생성됐지만 AtomicWriter cleanup으로 삭제됨
49db1ed
AtomicWriter.bailout_commit() 추가 — staging_dir를 {output_dir}-failed-{timestamp}/로 atomic rename. 실패 상태의 Dockerfile + manifest + troubleshoot 전체 보존
C
kubectl apply --dry-run=client가 OpenAPI 스키마 fetch 시도 (connection refused)
34578ad/47b5145/35cd057/cb1a7ad
--validate=false 추가(6-tuple allowlist) + kubectl 1.35에서 unable to recognize 에러는 connection refused 패턴 감지로 graceful skip (F-56 degraded 확장)
Codex 외부 리뷰 (2026-04-21, /codex:review --scope branch)
Claude 내부 리뷰가 놓친 3건 추가 발견:
버그
Severity
커밋
해결
P1
Critical — Dockerfile builder image에 Maven/Gradle 없어 빌드 실패
7c2ff9e
gradle:jdk21-alpine / maven:3.9-eclipse-temurin-21-alpine 공식 이미지로 교체. runner는 eclipse-temurin:21-jre-alpine 유지
P2
Important — TimeoutExpired text-mode에서 str.decode() 크래시
abcd8ae
_maybe_decode() 헬퍼 (bytes/str/None 방어)
P3
Important — UserInputs.output_dir 무시 (prompt 모드)
f9f95cf
prompt 모드에서 inputs.output_dir 우선, 자동 모드는 method arg fallback
aidlc-finishing-a-development-branch
옵션 B 선택 : PR 생성
git push -u origin feature/v0.1.0-construction
gh pr create --base main → PR #2 생성
state: complete + Finishing Choice: B (PR pending) + PR URL 기록
주요 이슈 해결 전체 타임라인
시점
이슈
심각도
해결 위치
Unit 6 Stage 1
F-43 Rule ID 매트릭스 전면 불일치
FAIL
전면 재작업 (prompt 실수 복구)
Unit 8 Stage 3
Path Traversal via multi-module include '..'
Critical
이름 validation + is_within(project_root)
Unit 10 Stage 3
YAML 인젝션 (Service/SA/exposure)
Critical 2
공통 입력 검증 + exposure whitelist
Unit 11 Stage 3
BailOutContext redact 미적용 (Bearer/JWT/kubeconfig 누출)
Critical
redact_sensitive + text_safety 공용화
Unit 15 Stage 2
orchestrator.py CLI 진입점 부재
Critical
main() + argparse + _build_default_dependencies
E2E A
namespace='None' 문자열
통합 Critical
config_loader.resolve_namespace() 정식 호출
E2E B
BailOut troubleshoot 소실
통합 Critical
`AtomicWriter.bailout_comm...
Read more