Skip to content

Commit 6971dfa

Browse files
authored
feat: Filter specific status of files in changeset (#564)
* Add filtering by status of files in changeset * Fix test * Complete docs and fix style issue
1 parent ad59e95 commit 6971dfa

File tree

4 files changed

+57
-2
lines changed

4 files changed

+57
-2
lines changed

__tests__/unit/validators/changeset.test.js

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,45 @@ test('that it validates ends_with correctly', async () => {
7171
expect(validation.status).toBe('pass')
7272
})
7373

74+
test('correct files are considered based on file status setting', async () => {
75+
const changeset = new Changeset()
76+
const settings = {
77+
do: 'changeset',
78+
files: {
79+
added: true,
80+
modified: false
81+
},
82+
must_include: {
83+
regex: 'added-file.js'
84+
},
85+
must_exclude: {
86+
regex: '(modified-file.py)|(deleted-file.ts)'
87+
}
88+
}
89+
90+
const validation = await changeset.processValidate(createMockContext([{
91+
filename: 'added-file.js',
92+
status: 'added',
93+
additions: 1,
94+
changes: 0,
95+
deletions: 0
96+
}, {
97+
filename: 'modified-file.py',
98+
status: 'modified',
99+
additions: 0,
100+
changes: 1,
101+
deletions: 0
102+
}, {
103+
filename: 'deleted-file.ts',
104+
status: 'deleted',
105+
additions: 0,
106+
changes: 0,
107+
deletions: 1
108+
}]), settings)
109+
110+
expect(validation.status).toBe('pass')
111+
})
112+
74113
const createMockContext = (files) => {
75114
return Helper.mockContext({ files: files })
76115
}

docs/changelog.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
CHANGELOG
22
=====================================
3-
3+
| July 12, 2921 : feat: Filter specific status of files in changeset `#550 <https://github.com/mergeability/mergeable/issues/550>`_
44
| June 26, 2021 : feat: Add `payload` filter `#398 <https://github.com/mergeability/mergeable/issues/398>`_
55
| March 31, 2021 : feat: add chart support to prometheus servicemonitor `#535 <https://github.com/mergeability/mergeable/pull/535>`_
66
| March 30, 2021 : fix: codeowners team

docs/validators/changeset.rst

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,11 @@ Change set
2525
max:
2626
count: 2 # max number of files in a PR
2727
message: 'Custom message...'
28+
files: # status of files to be included in changeset. If no 'files' option is provided, all files are included.
29+
added: true # default: false. If true, added files are included.
30+
modified: false # default: false. If true, modified files are included.
31+
deleted: true # default: false. If true, deleted files are included.
32+
# note that setting file status sub-options (added, modified, deleted) to false is optional.
2833
# all of the message sub-option is optional
2934

3035
you can use ``and`` and ``or`` options to create more complex validations

lib/validators/changeset.js

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,13 +37,24 @@ class Changeset extends Validator {
3737
max: {
3838
count: 'number',
3939
message: 'string'
40+
},
41+
files: {
42+
added: 'boolean',
43+
modified: 'boolean',
44+
deleted: 'boolean'
4045
}
4146
}
4247
}
4348

4449
async validate (context, validationSettings) {
4550
// fetch the file list
46-
const result = await this.githubAPI.listFiles(context, context.repo({ pull_number: this.getPayload(context).number }))
51+
let result = await this.githubAPI.listFiles(context, context.repo({ pull_number: this.getPayload(context).number }))
52+
53+
if (validationSettings.files) {
54+
const fileStatusOptions = Object.keys(validationSettings.files).filter(fileStatus => validationSettings.files[fileStatus])
55+
result = result.filter(file => fileStatusOptions.includes(file.status))
56+
delete validationSettings.files
57+
}
4758

4859
const changedFiles = result.map(file => file.filename)
4960

0 commit comments

Comments
 (0)