Skip to content

Commit 6bfcbbb

Browse files
New: filter sprints on export log. #65
1 parent 2fd0328 commit 6bfcbbb

File tree

3 files changed

+64
-2
lines changed

3 files changed

+64
-2
lines changed

src/Jira.js

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,10 @@ export default class JIRA extends Api {
4545
}
4646

4747
if (!sprint.includes('all') && sprint.includes('open')) jql.push('Sprint in openSprints()');
48+
const sprintIds = sprint.filter(s => ![ 'open', 'all' ].includes(s));
49+
50+
if (sprintIds.length > 0) jql.push(`Sprint IN (${sprintIds.join(', ')})`);
51+
4852
if (search) jql.push(`summary ~ "${search}"`);
4953
if (id) jql.push(`id IN (${formatJQLList(id)})`);
5054

@@ -128,11 +132,26 @@ export default class JIRA extends Api {
128132
.map(d => format ? d.format(format) : d);
129133
}
130134

135+
async getSprintsForPeriod(start, end) {
136+
const sprints = await this.getAllSprints();
137+
138+
return sprints.filter(s => {
139+
if (s.state === 'active') return true;
140+
if (s.state === 'closed') {
141+
return dayjs(s.completeDate).isBetween(start, end);
142+
}
143+
144+
return false;
145+
});
146+
}
147+
131148
async exportLog([ start, end ], file = path.join(os.tmpdir(), `${uuid()}.json`)) {
149+
const sprints = await this.getSprintsForPeriod(start, end);
132150
const allModifiedTasks = await this.list({
133151
from : start,
134152
to : end,
135-
wasMine : true
153+
wasMine : true,
154+
sprint : sprints.map(s => s.id)
136155
}, [ 'comments', 'worklogs', 'changelog' ]);
137156

138157
const tasks = allModifiedTasks.filter(issue => this.isInDevelopmentForRange(issue, [ start, end ]));

src/api/JiraApi.js

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/* eslint-disable no-param-reassign */
22

33
import { uniqueIdFilter } from 'myrmidon';
4-
import { dumpStatus, dumpTask, dumpTransition, dumpComment, dumpWorklog } from '../utils/dumpUtils';
4+
import { dumpStatus, dumpTask, dumpTransition, dumpComment, dumpWorklog, dumpSprint } from '../utils/dumpUtils';
55
import dayjs from '../date';
66
import Api from './AtlassianApi';
77

@@ -12,6 +12,34 @@ export default class JiraApi extends Api {
1212
return res.map(s => dumpStatus(s));
1313
}
1414

15+
async getAllSprints() {
16+
const boards = await this.get('/rest/agile/1.0/board');
17+
const sprints = [];
18+
19+
await Promise.all(boards.values.map(async board => {
20+
sprints.push(...await this.getSprints(board));
21+
}));
22+
23+
return sprints;
24+
}
25+
26+
async getSprints(board, { startAt = 0, maxResults = 50, ...params } = {}) {
27+
const { isLast, values } = await this.get(`/rest/agile/1.0/board/${board.id}/sprint`, { startAt, maxResults, ...params });
28+
const nextStart = startAt + values.length;
29+
30+
if (!isLast) {
31+
const next = await this.getSprints(board, {
32+
...params,
33+
startAt : nextStart
34+
});
35+
36+
return [ ...values.map(v => dumpSprint(v)), ...next ]
37+
.filter((element, index, array) => uniqueIdFilter(element, index, array));
38+
}
39+
40+
return values.map(v => dumpSprint(v));
41+
}
42+
1543
async getIssues(params, includes = []) {
1644
const extraParams = {};
1745

src/utils/dumpUtils.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,21 @@ export function dumpUser(user) {
6363
};
6464
}
6565

66+
export function dumpSprint(s) {
67+
return {
68+
id : s.id,
69+
state : s.state, // closed, future, active
70+
name : s.name,
71+
goal : s.goal,
72+
73+
startDate : s.startDate,
74+
endDate : s.endDate,
75+
completeDate : s.completeDate
76+
77+
};
78+
}
79+
80+
6681
export function dumpStatus(s) {
6782
return {
6883
id : s.id,

0 commit comments

Comments
 (0)