Riot Services
Service Loop
riot-contributor를 먼저 사용하여 리포지토리 워크플로, 더티 작업 트리 처리, 검증 기대사항을 확인합니다.- 특정 사이트/서비스 디렉토리에서 작업합니다. 모든 서비스는 자체
package.json,bun.lock,tsconfig.json및 일반적으로wrangler.toml을 소유합니다. - 스크립트가 존재하는 경우 도구를 직접 호출하는 대신
bun run <script>를 사용합니다. - 서비스별 잠금 파일을 유지합니다. 명시적으로 요청하지 않는 한 리포지토리 루트에 JS 워크스페이스를 추가하지 마십시오.
- 배포, 원격 마이그레이션, 라이브 E2E 테스트, 토큰 변경, DNS 변경, 프로덕션 데이터 변경은 명시적 사용자 승인 작업으로 취급합니다.
- 로컬 검사와 가짜(fake) 구현을 먼저 선호합니다. 라이브 테스트는 서비스별 환경 변수를 통해 옵트인 방식입니다.
Service Map
sites/api.pkgs.ml: 패키지 레지스트리 컨트롤 플레인 Worker. 게시/인증/검색/뷰/이벤트, D1 마이그레이션, Drizzle 스키마, R2 저장소 키, 큐, Durable Object 게시 조정, D1 백업 워크플로를 담당합니다.sites/cdn.pkgs.ml: 패키지 아티팩트, 스파스 인덱스 문서, Riot/OCaml 바이너리 메타데이터, 액세스 분석에 대한 CDN Worker.../api.pkgs.ml/src의 레지스트리 타입/스토리지 헬퍼를 재사용합니다.sites/docs.pkgs.ml: 생성된 패키지 문서 서비스. R2에서 문서를 제공하고, 패키지 게시/처리 큐를 소비하며, 파이프라인 실행/이벤트를 레지스트리 D1에 기록하고, docs/build 검증을 위해 Cloudflare Sandbox 컨테이너를 사용합니다.sites/pkgs.ml: 공개 패키지 레지스트리 웹 앱, Astro + Cloudflare 어댑터 + React 섬(islands). 레지스트리 뷰 API와 스파스 인덱스 문서를 읽습니다.sites/riot.ml: 주요 정적 Riot 웹사이트, Astro + Tailwind, Pages 스타일 배포.sites/get.riot.ml: 설치 스크립트 리디렉션/프록시 Worker.
Cloudflare Tooling
- Worker/Astro 서비스 라이프사이클에 Wrangler 사용:
wrangler dev,wrangler deploy,wrangler d1 migrations apply,wrangler pages deploy,wrangler types, 및 구성 기반 로컬 개발. - 글로벌 설치에 의존하지 않고 서비스 로컬
wrangler의존성을 잠금 파일로 최신 상태로 유지하고 고정합니다. - API/리소스 검사 또는 현재 노출된 작업(특히 계정, 영역, DNS, D1 API, R2 API, 큐 API, Workers API 메타데이터, 스키마 검색)에만 통합
cfCLI를 사용합니다. - 실제 Cloudflare 변경을 위해
cf를 사용하기 전에npx cf auth whoami를 실행하고npx cf agent-context <product>또는npx cf schema <command...>로 명령 형식을 검사합니다. - 서비스별 명령이 로컬에서 검증되고 동일한 구성 기반 동작을 지원하지 않는 한 Wrangler 배포/개발/마이그레이션 스크립트를
cf로 대체하지 마십시오.
Config And Bindings
wrangler.toml, 내보낸EnvTypeScript 인터페이스, 테스트 가짜(fake) 환경을 동기화 상태로 유지합니다.- Worker 진입점과 공유 모듈에서 명시적인
Env인터페이스를 선호합니다. - 비밀 아닌 기본값은
[vars]에 넣고, 비밀은.env, Wrangler secrets 또는 Cloudflare 관리 비밀로 유지합니다. api.pkgs.ml의 D1 스키마 변경 시,sites/api.pkgs.ml/migrations/아래에 SQL 마이그레이션을 추가하고src/schema.ts/DB 헬퍼를 함께 업데이트합니다.- 런타임 D1 액세스는
api.pkgs.ml/src/db.ts,metadata-db.ts,pipeline-db.ts,access-db.ts또는 좁게 명명된 형제 파일의 Drizzle 헬퍼를 통해 이루어집니다. - R2 객체 키 계약은
api.pkgs.ml/src/storage.ts에 있습니다. 키를 변경할 때 CDN/API/웹 소비자와 테스트를 함께 업데이트합니다. - 레지스트리 이벤트 페이로드 형태는 사용자에게 보이는 서비스 기록입니다. 새 이벤트 유형을
api.pkgs.ml/src/types.ts, DB 직렬화, 뷰 및 테스트에 추가합니다.
Testing
- 작업을 마치기 전에 변경된 서비스의
bun run check를 실행합니다. - 서비스가 로컬 테스트를 정의하는 경우
bun run test를 실행합니다. - 명시적으로 요청하지 않는 한
bun run deploy,bun run migrate:remote또는 라이브test:e2e를 실행하지 마십시오. api.pkgs.ml의 경우 로컬 테스트는tests/helpers.ts의FakeR2Bucket,FakeD1Database,FakeQueue,FakeExecutionContext를 사용합니다.cdn.pkgs.ml의 경우 Cloudflare SDK 모의 객체를 발명하는 대신 레지스트리 테스트 가짜(fake)를 재사용합니다.docs.pkgs.ml의 경우 가짜 파이프라인 실행기와 큐 드레인 헬퍼를 선호합니다. 이벤트 스트림을 테스트할 때 데이터베이스 시퀀스로 내구성 있는 순서를 확인합니다.- Astro 서비스의 경우
bun run check를 실행합니다. Astro가 검사의 일부로.astro타입 파일을 재생성할 것으로 예상합니다.
Web Work
- 각 서비스의 기존 UI 스택과 일치시킵니다.
pkgs.ml은 Astro 서버 출력, React 섬(islands), Tailwind, Cloudflare 어댑터를 사용합니다.docs*.ml은 해당되는 경우 Starlight를 사용합니다.riot.ml은 정적 Astro 사이트입니다. - 첫 화면은 마케팅 플레이스홀더가 아닌 실제 제품/서비스 표면으로 유지합니다.
- 추상화를 추가하기 전에 기존 컴포넌트, 레이아웃, CSS 토큰, 글꼴, 경로 규칙을 사용합니다.
- 레지스트리 웹 변경의 경우
sites/pkgs.ml/src/lib/web-views.ts의 레지스트리 뷰 API와package-index.ts의 스파스 인덱스 헬퍼를 선호합니다.
Operational Safety
- 프로덕션 엔드포인트를 실제로 취급:
api.pkgs.ml,registry.pkgs.ml,cdn.pkgs.ml,pkgs.ml,docs.pkgs.ml,docs.riot.ml,play.riot.ml,riot.ml,get.riot.ml. - 명시적인 사용자 지시 없이 원격 D1 복원/내보내기/가져오기, DNS 쓰기, 경로/도메인 쓰기, 배포 또는 토큰 작업을 절대 실행하지 마십시오.
- 라이브 스모크 테스트가 요청되면 해당 서비스 README/env 게이트를 먼저 읽고 어떤 환경 변수가 테스트를 파괴적이거나 인증되게 만드는지 명시하십시오.