Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@
![Stryker-JS](https://img.shields.io/endpoint?url=https://gist.githubusercontent.com/stenjo/9ce1ad7d8e9db99796e782b244eefa4a/raw/dora-stryker.json)

This GitHub Action will calculate a set of DevOps Research and Assessment (DORA)
metrics based on status and dates from commits and issues.
metrics based on status and dates from commits and issues. Requires GitHub projects
and that GitHub issues are used as virtual cards for features and bugs.

![badge](https://img.shields.io/endpoint?url=https://gist.githubusercontent.com/stenjo/ebb0efc5ab5afb32eae4d0cdc60d563a/raw/deploy-rate.json)
![badge](https://img.shields.io/endpoint?url=https://gist.githubusercontent.com/stenjo/ebb0efc5ab5afb32eae4d0cdc60d563a/raw/lead-time.json)
Expand Down Expand Up @@ -47,7 +48,7 @@ Access token for the repository.

### `logging`

Set to true to make event logs of metrics source avaiable.
Set to true to make event logs of metrics source available.

### `filtered`

Expand All @@ -66,7 +67,7 @@ teams has 7 as target (daily- or on-demand release)

### `lead-time`

Time from issue is set to status doing until linked pull-requestis merged to
Time from issue is set to status doing until linked pull-requests merged to
main branch. Number in days (Integer)

`lead-time-log` - a list of pull requests with matching first commit and re
Expand Down
25 changes: 13 additions & 12 deletions __tests__/DeployFrequency.test.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
//
import {DeployFrequency} from '../src/DeployFrequency'
import fs from 'fs'
import {Release} from '../src/types/Release'
import fs from 'node:fs'
import type {Release} from '../src/types/Release'

describe('Deploy frequency should', () => {
// Release v0.0.1:2023-04-14, v0.0.2:2023-04-22
Expand Down Expand Up @@ -86,23 +86,24 @@ describe('Deploy frequency should', () => {

df.weekly()

expect(
df.getLog().map(l => {
return l.includes('release')
}).length
).toBe(5)
const logItems = df.getLog().map(l => {
return l.includes('release') ? l : undefined
})

expect(logItems.length).toBe(5)
expect(logItems.pop()).toBe('release-> v0.1.0:2023-04-29T06:18:36Z')
})

it('get release log list monthly when rate calculated', () => {
const df = new DeployFrequency(releaseList7, '2023-05-14T22:33:11Z')

df.monthly()

expect(
df.getLog().map(l => {
return l.includes('release')
}).length
).toBe(6)
const logItems = df.getLog().map(l => {
return l.includes('release') ? l : undefined
})
expect(logItems.length).toBe(6)
expect(logItems.pop()).toBe('release-> v0.0.2:2023-04-22T20:28:29Z')
})

it('get release log list when rate calculated', () => {
Expand Down
63 changes: 45 additions & 18 deletions __tests__/LeadTime.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -505,13 +505,26 @@ describe('LeadTime should', () => {
] as Release[]

const lt = new LeadTime(pulls, rels, commitsAdapter, new Date('2023-05-01'))
await lt.getLeadTime()
const leadTime = await lt.getLeadTime()

expect(
lt.getLog().filter(l => {
return l.includes('release')
}).length
).toBe(2)
const releaseLogItems = lt.getLog().filter(l => {
return l.includes('release')
})
expect(releaseLogItems.length).toBe(2)
expect(releaseLogItems[0]).toBe(' release-> 2023-04-29T17:50:53Z : v0.1.0')

const commitLogItems = lt.getLog().filter(l => {
return l.includes('commit')
})
expect(commitLogItems.length).toBe(2)
expect(commitLogItems[0]).toBe(
' commit-> 2023-04-19T17:50:53Z : all passing'
)

expect(lt.getLog()).toContain(' 10.00 days')
expect(lt.getLog()).toContain(' 6.00 days')

expect(leadTime).toBe(8)
})
it('get event log list when lead time calculated', async () => {
commitsAdapter.getCommitsFromUrl = jest.fn(
Expand Down Expand Up @@ -568,11 +581,13 @@ describe('LeadTime should', () => {

// console.log(log)

expect(
log.filter(l => {
return l.includes('pull')
}).length
).toBe(2)
const logItems = log.filter(l => {
return l.includes('pull')
})
expect(logItems.length).toBe(2)
expect(logItems.pop()).toBe(
'pull-> 2023-04-27T17:50:53Z : fix: removed error message'
)
})

it('get event log list when lead time calculated and filtered', async () => {
Expand All @@ -585,6 +600,12 @@ describe('LeadTime should', () => {
// Returning commits from (10)=>22/4, (15)=>27/4 and (47)=>19/4

const pulls = [
{
merged_at: '2023-04-26T17:50:53Z', // Filtered out
commits_url: '10',
base: {ref: 'main', repo: {name: 'other-repo'}},
title: 'fix: extra filtered out'
},
{
merged_at: '2023-04-27T17:50:53Z', // Has a commit 19/4, first release is 29/4 -> Lead time 10 days
commits_url: '47',
Expand Down Expand Up @@ -623,16 +644,22 @@ describe('LeadTime should', () => {
}
] as Release[]

const lt = new LeadTime(pulls, rels, commitsAdapter, new Date('2023-05-01'))
const lt = new LeadTime(
pulls,
rels,
commitsAdapter,
new Date('2023-05-27T17:50:53Z')
)
const leadTime = await lt.getLeadTime(true)

const log = lt.getLog()
const log = lt.getLog().filter(l => {
return l.includes('pull')
})

expect(
log.filter(l => {
return l.includes('pull')
}).length
).toBe(1)
expect(log.length).toBe(1)
expect(log[0]).toBe(
'pull-> 2023-04-27T17:50:53Z : feat(docs): better description'
)

expect(leadTime).toBe(10)
})
Expand Down
2 changes: 1 addition & 1 deletion dist/index.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion dist/index.js.map

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion src/DeployFrequency.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
//

import {Release} from './types/Release'
import type {Release} from './types/Release'

// The number of milliseconds in one day
const ONE_DAY = 1000 * 60 * 60 * 24
Expand Down
10 changes: 5 additions & 5 deletions src/LeadTime.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import {PullRequest} from './types/PullRequest'
import {Release} from './types/Release'
import {ICommitsAdapter} from './interfaces/ICommitsAdapter'
import {Commit} from './types/Commit'
import type {PullRequest} from './types/PullRequest'
import type {Release} from './types/Release'
import type {ICommitsAdapter} from './interfaces/ICommitsAdapter'
import type {Commit} from './types/Commit'

const ONE_DAY = 24 * 60 * 60 * 1000
export class LeadTime {
Expand Down Expand Up @@ -51,7 +51,7 @@ export class LeadTime {
}

if (filtered) {
this.log.push(`\nLog is filtered - only feat and fix.`)
this.log.push('\nLog is filtered - only feat and fix.')
}

const leadTimes: number[] = []
Expand Down