From c5f389374e9a226c1b9370e95332cd458d8dcb65 Mon Sep 17 00:00:00 2001 From: Tom Brouws Date: Thu, 11 Jul 2024 17:28:56 +0200 Subject: [PATCH] Fix task deletion for branch delete command --- src/create-tasks.ts | 16 ++++++++++------ src/delete-branch.ts | 30 ++++++++++++++++++++++++------ src/lib/crowdin.ts | 12 ++++++------ 3 files changed, 40 insertions(+), 18 deletions(-) diff --git a/src/create-tasks.ts b/src/create-tasks.ts index 2fd4bfe..44471e7 100644 --- a/src/create-tasks.ts +++ b/src/create-tasks.ts @@ -1,13 +1,14 @@ import { CommonErrorResponse, + TasksModel, ValidationErrorResponse, + ResponseObject, } from "@crowdin/crowdin-api-client"; import { CrowdinType, createTask, deleteTask, isCommonErrorResponse, - listBranches, listTasks, unwrapErrorResponse, } from "./lib/crowdin"; @@ -20,21 +21,24 @@ export interface CreateTasksOptions { type: "proofread" | "translate"; } +const taskLimit: number = 500; + export default async (options: CreateTasksOptions) => { log.info("Creating tasks..."); - let branches, branchId, tasks; + let tasks: ResponseObject[] = []; try { - branches = await listBranches(options.branchName); - branchId = branches.data[0].data.id; - tasks = await listTasks({ branchId }); + for (let i = 0; tasks.length >= i * taskLimit; i++) { + const moreTasks = await listTasks(i * taskLimit, taskLimit); + tasks = tasks.concat(moreTasks.data); + } } catch (error) { log.error(JSON.stringify(error)); throw error; } await Promise.allSettled( - tasks.data + tasks .filter(task => task.data.fileIds.includes(options.fileId)) .map(task => deleteTask(task.data.id)) ); diff --git a/src/delete-branch.ts b/src/delete-branch.ts index fe4ede8..d11cae0 100644 --- a/src/delete-branch.ts +++ b/src/delete-branch.ts @@ -7,18 +7,25 @@ import { } from "./lib/crowdin"; import { getCrowdinBranchName } from "./utils/get-crowdin-branch-name"; import log from "./utils/logging"; +import { TasksModel, ResponseObject } from "@crowdin/crowdin-api-client"; export interface DeleteBranchOptions { branchName: string; deleteTasks?: boolean; } +const taskLimit: number = 500; + export default async ({ branchName: gitBranchName, deleteTasks, }: DeleteBranchOptions) => { log.info("Deleting branch from Crowdin"); const branchName = getCrowdinBranchName(gitBranchName); + if (branchName === "master") { + return log.error("Cannot delete the master branch"); + } + let branches = null; try { @@ -39,17 +46,28 @@ export default async ({ try { if (deleteTasks) { + log.info("Deleting tasks"); const files = await listFiles(branchId); - const tasks = await listTasks({ branchId }); + if (files?.data.length !== 1) { + return log.error(`Expected 1 file, found ${files?.data.length}`); + } + + let tasks: ResponseObject[] = []; + for (let i = 0; tasks.length >= i * taskLimit; i++) { + const moreTasks = await listTasks(i * taskLimit, taskLimit); + tasks = tasks.concat(moreTasks.data); + } await Promise.allSettled( - tasks.data - .filter(task => { - return task.data.fileIds.some(fileId => - files.data.some(file => file.data.id === fileId) + tasks + .filter(task => task.data.fileIds.includes(files.data[0].data.id)) + .map(task => { + log.info( + `Deleting task: ${task.data.title} - ${task.data.targetLanguageId}` ); + + return deleteTask(task.data.id); }) - .map(task => deleteTask(task.data.id)) ).then(results => results.forEach(result => { if (result.status === "rejected") { diff --git a/src/lib/crowdin.ts b/src/lib/crowdin.ts index 5297513..815bc9d 100644 --- a/src/lib/crowdin.ts +++ b/src/lib/crowdin.ts @@ -193,13 +193,13 @@ export const exportFile = async ( return axios.get(translation.data.url); }; -export const listTasks = (options?: { - branchId: number; -}): Promise> => { +export const listTasks = ( + offset: number = 0, + limit: number = 500 +): Promise> => { return tasksApi.listTasks(CROWDIN_PROJECT_ID, { - limit: 500, - status: TasksModel.Status.TODO, - ...(options || {}), + limit: limit, + offset: offset, }); };