nitor 1.3.0 → 1.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nitor",
3
- "version": "1.3.0",
3
+ "version": "1.3.1",
4
4
  "description": "A comprehensive CLI toolkit for automating GitLab operations, AI-powered code review, build/deploy automation, MongoDB backup/restore, and developer productivity tools",
5
5
  "main": "index.js",
6
6
  "author": "Nithin V <mails2nithin@gmail.com>",
@@ -11,7 +11,7 @@ const { merge } = require('./merge');
11
11
  const { cleanup } = require('./cleanup');
12
12
 
13
13
  // Time entry imports
14
- const { removeEmpty } = require('./time-entry/utils');
14
+ const { removeEmpty, getSprints } = require('./time-entry/utils');
15
15
  const { getStatus, getTasksByDate } = require('./time-entry/get-report');
16
16
  const { logTaskHoursAndSync } = require('./time-entry/log-task-hours-and-sync');
17
17
  const { addNewTask } = require('./time-entry/add-task');
@@ -299,27 +299,44 @@ Options:
299
299
  return;
300
300
  }
301
301
 
302
- if (!values.task) {
303
- console.log('Task number is required');
302
+ if (values.sprint) {
303
+ const sprints = await getSprints({ params: {} });
304
+ const taskDetails = await getZohoTasks({
305
+ params: { sprint: sprints.find(({ label }) => label === values.sprint)?.value },
306
+ });
304
307
 
305
- process.exit(1);
308
+ values.task = taskDetails.map(({ taskId }) => taskId);
309
+ } else {
310
+ values.task = values.task.split(' ');
306
311
  }
307
312
 
308
- const list = [];
313
+ // Process all tasks in parallel
314
+ const taskResults = await Promise.all(
315
+ values.task.map(async (task) => {
316
+ const taskDetail = await getTaskStats(task);
309
317
 
310
- for (const task of values.task.split(' ')) {
311
- const taskDetail = await getTaskStats(task);
312
- const gitIdDetails = await getGitIdStats(taskDetail.itemIds);
313
- const mrDetails = await getGitlabIssueMergeRequests(gitIdDetails);
318
+ if (!taskDetail?.itemIds) {
319
+ return [];
320
+ }
314
321
 
315
- for (const mrDetail of mrDetails) {
316
- list.push({
322
+ const gitIdDetails = await getGitIdStats(taskDetail.itemIds);
323
+
324
+ if (!gitIdDetails?.length) {
325
+ return [];
326
+ }
327
+
328
+ const mrDetails = await getGitlabIssueMergeRequests(gitIdDetails);
329
+
330
+ return mrDetails.map((mrDetail) => ({
317
331
  Task: task,
318
332
  Owner: taskDetail.owner,
319
333
  ...mrDetail,
320
- });
321
- }
322
- }
334
+ }));
335
+ }),
336
+ );
337
+
338
+ // Flatten the results
339
+ const list = taskResults.flat();
323
340
 
324
341
  console.table(list);
325
342
 
@@ -497,9 +514,11 @@ Available commands:\n
497
514
  completion : Setup shell autocomplete
498
515
  create-branch : Create git branch
499
516
  deploy : Deploy specified components
517
+ get-task : Get task details
500
518
  merge : Merge source branch into target branch
501
519
  refactor : Refactor the provided text for improved clarity, conciseness, and professional quality
502
520
  review : AI Review specified merge request
521
+ task-stats : View task statistics
503
522
  version : Show version info
504
523
  help : Show help
505
524
 
@@ -510,7 +529,7 @@ Time Entry commands:
510
529
  time-entries : View time entries by date
511
530
  time-gitlab : Get GitLab activities
512
531
  time-merge : View merge request status for tasks
513
- time-stats : View daily status of time entries
532
+ time-stats : View daily status of time entries
514
533
  time-switch : Switch between default projects
515
534
  time-update : Update existing time entry
516
535
  time-zoho : Sync time entries to Zoho
@@ -7,6 +7,7 @@ const executeMergeRequestReview = async (values) => {
7
7
  maxBodyLength: Infinity,
8
8
  url: `${mrApiUri}/${projectIdMap[values.project]}/mergeid/${values.mergeId}`,
9
9
  headers: { 'Content-Type': 'application/json' },
10
+ timeout: 10 * 60 * 1000, // 10 minutes
10
11
  data: JSON.stringify({
11
12
  language: mrLang,
12
13
  gitlabToken: gitlabConfig.token,
@@ -84,9 +84,7 @@ const getGitIdStats = async (gitIds) => {
84
84
  const response = await axios.request(config);
85
85
 
86
86
  gitIdStats.push(response.data);
87
- } catch (error) {
88
- console.log(error);
89
- }
87
+ } catch (error) {}
90
88
  }
91
89
 
92
90
  return gitIdStats;
@@ -152,6 +150,7 @@ const getGitlabIssueMergeRequests = async (gitDetails) => {
152
150
  IssueID: gitDetail.iid,
153
151
  MRID: mrData.iid,
154
152
  MRAssignedTo: mrData.assignee?.name,
153
+ MRPointedTo: mrData.target_branch,
155
154
  Repo: mr.reference?.split('!')?.[0],
156
155
  ApprovedBy:
157
156
  (approvalData.approved_by || [])
@@ -78,4 +78,4 @@ const checkSprintId = async (id, req) => {
78
78
  return sprints.some(({ value }) => value === id);
79
79
  };
80
80
 
81
- module.exports = { getZohoTasks };
81
+ module.exports = { getZohoTasks, getTasksBySprint };
package/services/utils.js CHANGED
@@ -59,6 +59,8 @@ const keyMap = {
59
59
  ta: 'target',
60
60
  docker: 'docker',
61
61
  do: 'docker',
62
+ sprint: 'sprint',
63
+ s: 'sprint',
62
64
  };
63
65
  const projectMap = {
64
66
  portal: 'medica-portal',