Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

615 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

DVA (Dev Virtual Auto)

개발 환경 오케스트레이터 — dva.yml 하나로 Docker Compose, Kubernetes, Helm, 로컬 프로세스 등을 통합 관리.

제품 특성: DVA는 동작을 코드가 아니라 설정으로 정하는 개발환경 구성 도구입니다. 실행 방식은 dva.yml에서 자유롭게 선언하고, 어떤 조합을 띄울지는 named plan으로 고릅니다 — 기본 실행과 hot-reload 실행처럼 서로 다른 실행 방식은 각각 엔트리로 선언한 뒤 plan이 선택합니다. 무엇이 개발용이고 무엇이 배포용인지는 도구가 아니라 설정이 결정합니다.

Install

DVA는 Go toolchain에서 직접 설치하거나 로컬 빌드로 사용합니다.

# From source
go install github.com/ScriptonBasestar/dva/cmd/dva@latest

# Or build locally
make build
./bin/dva version

Quick Start

프로젝트 루트에 dva.yml 생성:

version: "0.1.44"

stack:
  compose:
    default_runner: compose
    runners:
      compose:
        files:
          - docker-compose.yml

interaction:
  shell:
    description: "Open shell in app container"
    service: app
    command: /bin/bash
  test:
    description: "Run tests"
    service: app
    command: bundle exec rspec
dva ls              # 사용 가능한 커맨드 목록
dva shell           # = dva run shell → docker compose run app /bin/bash
dva test            # = dva run test → docker compose run app bundle exec rspec
dva up              # stack 전체 시작 (compose up -d --wait 등)
dva down            # stack 전체 중지
dva validate        # dva.yml 스키마 검증
dva manifest        # LLM용 전체 커맨드 매니페스트 출력

Commands

# Lifecycle — 동사는 전부 plan 기준입니다
dva up local-dev           # named plan 시작
dva down local-dev         # named plan teardown
dva stop local-dev         # 컨테이너 유지한 채 정지
dva restart local-dev      # 재시작
dva build local-dev        # plan 엔트리 빌드
dva logs local-dev         # plan 엔트리 로그
dva status local-dev       # named plan 상태

dva up                     # plan 인자를 생략하면 stack 전체

# 파괴적 teardown (확인 프롬프트, --force로 생략)
dva down local-dev -v      # 볼륨까지 제거
dva down local-dev --purge # 볼륨 + 이미지 + provision 마커까지 제거

# Escape hatch
dva compose ps             # raw Docker Compose passthrough

# Interaction
dva ls                     # 사용 가능한 커맨드 목록
dva shell                  # = dva run shell (run 생략 가능)

# Utilities
dva status                 # 워크스페이스 상태 확인
dva show                   # 설정 요약
dva validate               # dva.yml 스키마 + 시맨틱 검증 (`dva config validate`도 지원)
dva provision              # 프로비저닝 실행
dva config docs            # AI 에이전트 가이드(CLAUDE.md) 생성
dva doctor                 # 환경 사전조건 진단

전체 커맨드 레퍼런스: USAGE.md

Configuration

dva.yml은 재사용 가능한 실행 대상과 사용자가 호출하는 명령을 선언합니다.

Stack (인프라 오케스트레이션)

stack: 섹션은 실행 가능한 엔트리를 선언합니다. 무엇을 어떤 순서로 실행할지는 plans:가 정합니다:

stack:
  compose:
    default_runner: compose
    runners:
      compose:
        files: [docker-compose.yml]
        project_name: myapp
  kubectl:
    namespace: myapp-dev
  my-staging:
    default_runner: compose
    runners:
      compose:
        files: [docker-compose.staging.yml]

엔트리에 order:를 직접 다는 legacy 형식은 plan 경로에서 읽히지 않습니다. 실행되는 것은 plans.*.entries[].order이며, dva config migrate가 변환합니다.

지원 플러그인: compose, kubectl, helm, kustomize, tilt, skaffold, podman-compose, process, script, docker, vagrant, sam, serverless, multipass

앱 프로세스 (native 러너)

앱 프로세스도 stack 엔트리입니다 — native 러너를 쓰는 엔트리 하나가 앱 하나입니다. 전용 섹션이나 전용 명령은 없습니다:

stack:
  api:
    description: "REST API server"
    default_runner: native
    runners:
      native:
        dir: services/api
        build: "cargo build --release -p api-server"
        run: "cargo run --release -p api-server"
        env:
          RUST_LOG: debug
    health_checks:
      api:
        type: http
        url: "http://localhost:11200/health"

엔트리는 run 명령 하나를 선언합니다. hot-reload처럼 실행 방식이 다르면 별도 엔트리(api-watch 등)로 선언하고 plan이 고릅니다 — 어느 쪽이 개발용인지는 도구가 아니라 plan이 정합니다. --dev 플래그는 없습니다.

Plans (실행 가능한 이름)

plans: 섹션이 stack 엔트리·환경·site를 묶어 이름을 붙입니다. 모든 lifecycle 동사는 이 이름을 받습니다:

plans:
  local-dev:
    environment: dev
    entries:
      - name: compose
        order: 10
      - name: api
        order: 20
dva up local-dev
dva logs local-dev api      # 엔트리 하나만
dva down local-dev --purge

기타 설정

  • Modes (--mode/-M): 런타임 전략 선택 — compose profiles + 서비스 필터 + 환경변수 + stack 엔트리 필터 (dev 전용 도구이며 stg/prd 환경 개념은 없습니다)
  • Environments (--env/-E): 환경변수 프리셋 + stack 엔트리 필터
  • Tags (--tags/-T): 태그 기반 서비스/엔트리 그룹 필터링 (--tag 별칭 지원)
  • Health Checks: 비-compose 서비스 상태 확인 및 자동 시작
  • Subprojects: 모노레포 서브프로젝트 참조 (dva api:test)
  • Modules: .sb/dva/*.yml 파일로 설정 분리
  • Override: dva.override.yml로 로컬 오버라이드 (필드 레벨 deep merge)

상세 설정 가이드: USAGE.md

LLM Integration

am run dva-discover          # 프로젝트 분석 및 옵션 탐색
am run dva-improve           # AI로 dva.yml 자동 생성/개선
am run dva-diagnose          # 에러 분석 및 설정 자동 수정
dva config docs              # AI 에이전트 가이드(CLAUDE.md) 생성
dva manifest                 # 구조화된 커맨드 매니페스트
dva config show -f yaml      # 스키마 키를 보존한 병합 최종 설정 출력 (JSON도 지원)

AI 스킬은 skills/에 단일 소스로 두고 make generate(→ tools/skillgen)로 각 플랫폼에 투영합니다.

  • claude-plugin/: Claude Code 플러그인 (claude --plugin-dir ./claude-plugin)
  • Antigravity: .agents/skills/dva/SKILL.md
  • OpenCode: .opencode/skills/dva/SKILL.md
  • Cursor: .cursor/rules/dva.mdc
  • Codex: AGENTS.md (자동 생성 skills:auto 섹션)

Documentation

  • PRODUCT.md — 제품 가치, 대상 사용자, 현재 범위
  • SOUL.md — 변하지 않는 설계 철학
  • ARCHITECTURE.md — 시스템 경계와 데이터 흐름
  • USAGE.md — 명령과 설정 레퍼런스

Development

make build      # Build → ./bin/dva
make test       # Run tests
make lint       # Run linters
make fmt        # Format code
make clean      # Clean build artifacts

License

MIT

About

dev virtual auto

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages