환경 사용하기
- 에이전트 추가에서 로컬 Git 프로젝트를 선택하고 VM 사용 · Beta를 선택합니다.
- 레시피를 고르고 환경 이름을 정한 뒤 환경 준비를 선택합니다. 먼저 스크립트를 검토하세요. 스크립트는 로컬 자격 증명으로 실행되며, 제공자에서 비용이 청구되는 리소스를 만들 수 있습니다.
- 환경이 실행 중이 되면 이 환경에서 계속을 선택합니다. SSH 호스트 키를 확인한 다음 평소처럼 브랜치를 고르고 원격 worktree를 만듭니다.
- 설정 → VM 환경에서 일시 중지, 재개, 삭제를 관리합니다.
Lima로 로컬 VM 사용해 보기
Lima 1.2 이상, Git, Python 3를 설치하세요. Lima 레시피는 프로젝트의.dure/lima.sh로, 그 매니페스트는 프로젝트 루트의 dure.environments.json으로 저장합니다. 프로젝트 루트에서 다음을 실행하세요.
dure.environments.json이 있다면 파일을 덮어쓰지 말고 environments 목록에 lima 레시피를 추가하세요.
이 예제는 CPU 2개, 메모리 2 GiB, 디스크 12 GiB의 Ubuntu 24.04 VM을 사용합니다. 현재 커밋된 HEAD를 /home/dure/project에 복사하며, 커밋하지 않은 변경, 무시된 파일, 자격 증명은 포함하지 않습니다. 호스트 디렉터리는 하나도 마운트하지 않습니다. 에이전트 작업을 시작하기 전에 VM 안에서 에이전트 CLI를 설치하고 로그인하세요.
Lima가 SSH 엔드포인트와 키를 제공합니다. 레시피가 루프백 포트를 고정하므로 다시 시작해도 같은 연결이 유지됩니다. 지원되는 Mac에서는 Lima가 Apple 가상화를 사용합니다. 비공개 준비 로그는 LIMA_HOME과 같은 위치에 있는 <LIMA_HOME directory name>-dure-logs 디렉터리에 기록됩니다. 기본값: ~/.lima-dure-logs.
레시피 계약
프로젝트 루트에dure.environments.json을 만드세요.
create와 destroy는 필수입니다. suspend와 resume은 둘 다 지정하거나 둘 다 생략해야 합니다. 경로는 프로젝트 안의 파일로 해석되어야 합니다. 각 스크립트는 UTF-8이고 64 KiB 이하여야 하며, 매니페스트 하나에 레시피를 최대 32개까지 넣을 수 있습니다. 레시피 하나에서 캡처한 스크립트를 JSON으로 인코딩한 크기는 256 KiB 이하여야 합니다.
스크립트는 해당 환경 전용의 비공개 영구 작업 디렉터리에서 Bash로 실행됩니다. 원본 저장소는 DURE_PROJECT_PATH로 읽으세요. Dure는 생성 전에 선택한 스크립트 내용과 다이제스트를 캡처합니다. 선택한 뒤 스크립트를 바꾸면 레시피를 다시 불러와야 합니다. 이후 생명주기 작업은 프로젝트가 삭제된 뒤에도 캡처된 스크립트를 사용합니다. 정리 로직은 그 자체로 완결되게 만드세요. 원본 프로젝트의 보조 파일은 스냅샷에 포함되지 않습니다.
각 호출은 다음 환경 변수를 받습니다.
Stdin으로는
schemaVersion, action, instanceId, name, projectPath, recipeResult(마지막 성공 결과 또는 null)가 담긴 JSON 객체 하나가 들어옵니다. Dure는 이름이 DURE_, HMUX_, GIT_로 시작하는 상속 변수를 모두 제거한 뒤 위 변수를 설정합니다. 그 밖의 상속된 환경 변수는 제공자 CLI에서 사용할 수 있습니다. 준비 작업은 포그라운드에서 끝까지 실행하세요. 제한된 자식 프로세스는 작업 잠금을 상속합니다. 데몬이 그 디스크립터를 열어 두면 해제할 때까지 이후 생명주기 작업을 진행할 수 없습니다.
성공한 create와 resume은 stdout에 JSON 결과를 정확히 하나 출력해야 합니다.
keyPath는 선택 사항이며, 생략하면 일반적인 SSH 에이전트/설정 해석을 사용합니다. 게스트의 프로젝트 루트는 미리 존재해야 합니다. userData는 선택적 객체로, 이후 명령을 위해 비공개로 보관되며 클라이언트에는 반환되지 않습니다. 재개할 때는 같은 리소스 ID와 연결 필드를 반환해야 합니다. 클라우드 VM에는 고정 주소/포트나 DNS 이름을 사용하세요.
성공한 suspend와 destroy는 상태 코드 0으로 종료합니다. 모든 명령에는 30분 제한이 있고 출력은 64 KiB로 제한됩니다. 자세한 로그는 비공개 파일에 남기세요. Dure는 제공자 출력 없이 오류 코드만 표시합니다.
복구와 소유권
레코드는 준비 전에 저장됩니다. 생성이 실패하거나 잘못된 형식의 결과를 내면 캡처된 destroy 스크립트가 자동으로 실행됩니다. 제공자 리소스에는DURE_ENVIRONMENT_ID로 레이블이나 이름을 붙여야 하며, destroy는 recipeResult가 null이거나 리소스가 이미 없어도 멱등이어야 합니다.
백엔드가 중단되면 실패한 레코드가 남습니다. 설정을 새로 고친 뒤 이를 삭제해 제공자 리소스를 정리하세요. Dure는 생성을 다시 실행하지 않습니다. 정리 실패는 재시도할 수 있도록 계속 표시됩니다. 같은 생성 키로 요청을 반복해도 환경이 추가로 만들어지지 않습니다. 로컬 백엔드당 최대 512개 레코드를 보관하며, 삭제된 레코드도 재시도 식별 정보를 유지합니다.
CLI
list로 완료를 확인하세요. 응답을 받지 못해 재시도할 때는 반환된 requestId를 그대로 사용하세요. 생명주기를 변경하기 전에 최신 revision을 읽으세요.