master
 1import { Commit, define } from '#src'
 2
 3export default define({
 4  url: import.meta.url,
 5  tiers: true,
 6  badges: [
 7    'fix-2',
 8    'fix-3',
 9    'fix-4',
10    'fix-5',
11    'fix-6',
12    'fix-6+', // For more than 6
13  ] as const,
14  present(data, grant) {
15    for (const repo of data.repos) {
16      const sequences: Commit[][] = []
17      let previousCommitDate = null
18      let evidence: Commit[] = []
19
20      for (const commit of repo.commits) {
21        const currentCommitDate = new Date(commit.committedDate)
22
23        const isFix = /^fix/i.test(commit.message)
24        const isSequential =
25          previousCommitDate === null ||
26          currentCommitDate.getTime() - previousCommitDate.getTime() <=
27            15 * 60 * 1000
28
29        if (isFix && isSequential) {
30          evidence.push(commit)
31        } else {
32          sequences.push(evidence)
33          evidence = isFix ? [commit] : []
34        }
35
36        previousCommitDate = currentCommitDate
37      }
38
39      if (evidence.length > 0) {
40        sequences.push(evidence)
41      }
42
43      sequences.sort((a, b) => a.length - b.length)
44
45      for (const sec of sequences) {
46        const count = sec.length
47        const description = `I did ${count} sequential fixes.`
48
49        if (count === 2)
50          grant('fix-2', description)
51            .evidenceCommitsWithMessage(...sec)
52            .tier(1)
53        else if (count === 3)
54          grant('fix-3', description)
55            .evidenceCommitsWithMessage(...sec)
56            .tier(2)
57        else if (count === 4)
58          grant('fix-4', description)
59            .evidenceCommitsWithMessage(...sec)
60            .tier(3)
61        else if (count === 5)
62          grant('fix-5', description)
63            .evidenceCommitsWithMessage(...sec)
64            .tier(4)
65        else if (count === 6)
66          grant('fix-6', description)
67            .evidenceCommitsWithMessage(...sec)
68            .tier(5)
69        else if (count > 6)
70          grant('fix-6+', description)
71            .evidenceCommitsWithMessage(...sec)
72            .tier(6)
73      }
74    }
75  },
76})