// scripts/ci/lib/forgejo-generic-file-delete.mjs // Forgejo generic registry 어댑터에 파일 단위 삭제(PackageRegistry.deleteFile)를 더한다. // // 별칭(*-latest)을 패키지 버전째 지우면 인덱스가 수백 MB 업로드 내내 404가 된다. // Forgejo generic registry는 파일 하나만 지우는 엔드포인트 // DELETE /api/packages/{owner}/generic/{name}/{version}/{file} // 를 제공하므로, 바뀐 파일만 DELETE→PUT 해 404 구간을 파일 하나 교체 시간으로 줄인다. // 404는 이미 없는 것이므로 성공으로 본다. 그 밖의 오류는 예외(fail-closed). /** * @template {{ fileUrl: (versionPath: string, name: string) => string }} R * @param {R} registry * @param {{ fetchImpl: (url: string, init?: RequestInit) => Promise }} deps * @returns {R & { deleteFile: (versionPath: string, name: string) => Promise }} */ export function withFileDeletion(registry, { fetchImpl }) { return { ...registry, async deleteFile(versionPath, name) { const url = registry.fileUrl(versionPath, name); const response = await fetchImpl(url, { method: "DELETE" }); if (!response.ok && response.status !== 404) { throw new Error(`파일 삭제 실패 (HTTP ${response.status}): ${url}`); } }, }; }