레시피
반복해서 쓰는 빌드 스크립트를 레시피로 저장하고 잡, 배치, 플레이그라운드에서 recipe_id로 부르기
레시피는 워크스페이스에 저장한 빌드 스크립트입니다. XenoCI가 제공하는 기본 레시피 5개는 읽기 전용이고, 워크스페이스마다 레시피를 더 만들 수 있습니다
기본 레시피
모두 작업 폴더(올린 소스 또는 받은 저장소)에서 *.xcworkspace가 있으면 그것을, 없으면 *.xcodeproj를 자동으로 고릅니다. 스킴은 환경 변수 XENOCI_SCHEME으로 받고, 시뮬레이터는 XENOCI_SIMULATOR(기본 iPhone 16)입니다
| ID | 이름 | 하는 일 | 필요한 env |
|---|---|---|---|
rcp_builtin_ios_build | iOS 빌드 | 시뮬레이터용 Debug 빌드, 서명 없음 | XENOCI_SCHEME, 선택 XENOCI_SIMULATOR |
rcp_builtin_unit_test | 단위 테스트 | xcodebuild test, 결과 TestResults.xcresult | XENOCI_SCHEME, 선택 XENOCI_SIMULATOR |
rcp_builtin_ui_test | UI 테스트 | 시뮬레이터를 부팅하고 UI 테스트, 결과 UITestResults.xcresult | XENOCI_SCHEME(UI 테스트 대상 포함 스킴), 선택 XENOCI_SIMULATOR |
rcp_builtin_archive | 아카이브 | Release 아카이브, 서명 없음, 결과 App.xcarchive.zip | XENOCI_SCHEME |
rcp_builtin_testflight_upload | TestFlight 업로드 | 작업 폴더의 서명된 .ipa를 altool로 올림 | ASC_KEY_ID, ASC_ISSUER_ID, ASC_KEY_P8 |
TestFlight 업로드는 required_env 세 개가 모두 있어야 합니다. 하나라도 없으면 VM을 띄우지 않고 400으로 거절하며 details.missing_env와 details.guide(App Store Connect에서 키 만드는 안내)를 돌려줍니다. 과금은 없습니다
참고 서명된 IPA를 만드는 레시피는 아직 없습니다. 아카이브 레시피는 서명 없는
.xcarchive를 남깁니다
콘솔에서
빌드 → 레시피(/console/workspaces/<워크스페이스>/recipes)
- 목록에서 레시피를 열면 스크립트 전문과 필요한 env가 보입니다
- 실행 아이콘은 플레이그라운드에서 그 레시피로 시작합니다
- 레시피 만들기: 이름(워크스페이스 안에서 고유, 80자까지), 설명(500자까지), 스크립트(65,536자까지), 기본 Xcode(환경 화면의 버전 중 하나)
- 기본 레시피는 고치거나 지울 수 없습니다
잡에서 부르기
POST /v1/jobs에 script 대신 recipe_id를 줍니다. 둘 다 주면 400입니다
curl -sS -X POST https://xenoci.com/api/runner/v1/jobs \
-H "Authorization: Bearer $XENOCI_API_KEY" \
-H 'XenoCI-Error-Format: 2' \
-H 'Content-Type: application/json' \
-H "Idempotency-Key: $(uuidgen)" \
-d '{
"recipe_id": "rcp_builtin_unit_test",
"source": { "git_url": "https://github.com/acme/app.git", "ref": "main" },
"env": { "XENOCI_SCHEME": "App" },
"artifacts": ["TestResults.xcresult"]
}'xcode를 비우면 레시피의default_xcode, 그다음 워크스페이스 기본 Xcode, 그다음 이미지 기본값을 씁니다env는 레시피가 요구하는 변수를 채우는 자리입니다. 이름 100개까지, 값은 문자열입니다- 배치(
POST /v1/batches)도script대신recipe_id를 받습니다. 매트릭스의xcode,simulator,scheme값이XENOCI_XCODE,XENOCI_SIMULATOR,XENOCI_SCHEME으로 들어가므로 기본 레시피와 바로 맞습니다
xenocast CLI와 MCP build는 script를 직접 받습니다. 레시피 스크립트를 CLI에서 쓰려면 GET /v1/recipes/{recipe_id}의 script를 파일로 저장해 --script에 넘깁니다
API
| 메서드와 경로 | 키 권한 | 설명 |
|---|---|---|
GET /v1/recipes | read | 기본 레시피와 이 워크스페이스의 레시피 |
POST /v1/recipes | run | 레시피 만들기(name, script, 선택 description, default_xcode) |
GET /v1/recipes/{recipe_id} | read | 레시피 하나 |
PATCH /v1/recipes/{recipe_id} | run | 고치기(기본 레시피는 403) |
DELETE /v1/recipes/{recipe_id} | run | 지우기, 204 |
레시피 객체
| 필드 | 설명 |
|---|---|
id | rcp_… |
builtin | 기본 레시피이면 true |
workspace_id | 기본 레시피는 null |
name, description, script | 이름, 설명, 스크립트 |
default_xcode | 비우면 워크스페이스 기본값 |
required_env | 잡 env에 반드시 있어야 하는 이름 |
guide | 없는 env를 채우는 안내 |