mirror of
https://github.com/ditkrg/todo-to-issue-action.git
synced 2026-01-24 23:06:43 +00:00
Merge pull request #79 from timmorey/master
Add option to ignore TODOs in some files Closes #80
This commit is contained in:
commit
300922ed75
@ -50,6 +50,7 @@ The workflow file takes the following optional inputs:
|
|||||||
| `TOKEN` | No | The GitHub access token to allow us to retrieve, create and update issues for your repo. Default: `${{ github.token }}`. |
|
| `TOKEN` | No | The GitHub access token to allow us to retrieve, create and update issues for your repo. Default: `${{ github.token }}`. |
|
||||||
| `CLOSE_ISSUES` | No | Optional boolean input that specifies whether to attempt to close an issue when a TODO is removed. Default: `true`. |
|
| `CLOSE_ISSUES` | No | Optional boolean input that specifies whether to attempt to close an issue when a TODO is removed. Default: `true`. |
|
||||||
| `AUTO_P` | No | Optional boolean input that specifies whether to format each line in multiline TODOs as a new paragraph. Default: `true`. |
|
| `AUTO_P` | No | Optional boolean input that specifies whether to format each line in multiline TODOs as a new paragraph. Default: `true`. |
|
||||||
|
| `IGNORE` | No | Optional string input that provides comma-delimited regular expressions that match files in the repo that we should not scan for TODOs. By default, we will scan all files. |
|
||||||
|
|
||||||
These can be specified in `with` in the workflow file.
|
These can be specified in `with` in the workflow file.
|
||||||
|
|
||||||
|
|||||||
@ -51,3 +51,6 @@ inputs:
|
|||||||
ORG_PROJECTS:
|
ORG_PROJECTS:
|
||||||
description: "Default organisation projects"
|
description: "Default organisation projects"
|
||||||
required: false
|
required: false
|
||||||
|
IGNORE:
|
||||||
|
description: "A collection of comma-delimited regular expression that matches files that should be ignored when searching for TODOs"
|
||||||
|
required: false
|
||||||
|
|||||||
10
main.py
10
main.py
@ -348,6 +348,8 @@ class TodoParser(object):
|
|||||||
if not filename_search:
|
if not filename_search:
|
||||||
continue
|
continue
|
||||||
curr_file = filename_search.group(0)
|
curr_file = filename_search.group(0)
|
||||||
|
if self._should_ignore(curr_file):
|
||||||
|
continue
|
||||||
curr_markers, curr_markdown_language = self._get_file_details(curr_file)
|
curr_markers, curr_markdown_language = self._get_file_details(curr_file)
|
||||||
if not curr_markers or not curr_markdown_language:
|
if not curr_markers or not curr_markdown_language:
|
||||||
print(f'Could not check {curr_file} for TODOs as this language is not yet supported by default.')
|
print(f'Could not check {curr_file} for TODOs as this language is not yet supported by default.')
|
||||||
@ -604,6 +606,14 @@ class TodoParser(object):
|
|||||||
projects = list(filter(None, projects.split(',')))
|
projects = list(filter(None, projects.split(',')))
|
||||||
return projects
|
return projects
|
||||||
|
|
||||||
|
def _should_ignore(self, file):
|
||||||
|
ignore_patterns = os.getenv('INPUT_IGNORE', None)
|
||||||
|
if ignore_patterns:
|
||||||
|
for pattern in filter(None, [pattern.strip() for pattern in ignore_patterns.split(',')]):
|
||||||
|
if re.match(pattern, file):
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
# Create a basic client for communicating with GitHub, automatically initialised with environment variables.
|
# Create a basic client for communicating with GitHub, automatically initialised with environment variables.
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
|
import os
|
||||||
import unittest
|
import unittest
|
||||||
from main import TodoParser
|
from main import TodoParser
|
||||||
|
|
||||||
@ -52,3 +53,27 @@ class ClosedIssueTests(unittest.TestCase):
|
|||||||
|
|
||||||
def test_ruby_issues(self):
|
def test_ruby_issues(self):
|
||||||
self.assertEqual(count_issues_for_file_type(self.raw_issues, 'ruby'), 3)
|
self.assertEqual(count_issues_for_file_type(self.raw_issues, 'ruby'), 3)
|
||||||
|
|
||||||
|
class IgnorePatternTests(unittest.TestCase):
|
||||||
|
|
||||||
|
def test_single_ignore(self):
|
||||||
|
os.environ['INPUT_IGNORE'] = '.*\.java'
|
||||||
|
diff_file = open('tests/test_new.diff', 'r')
|
||||||
|
self.raw_issues = TodoParser().parse(diff_file)
|
||||||
|
self.assertEqual(count_issues_for_file_type(self.raw_issues, 'python'), 2)
|
||||||
|
self.assertEqual(count_issues_for_file_type(self.raw_issues, 'yaml'), 2)
|
||||||
|
self.assertEqual(count_issues_for_file_type(self.raw_issues, 'php'), 4)
|
||||||
|
self.assertEqual(count_issues_for_file_type(self.raw_issues, 'java'), 0)
|
||||||
|
self.assertEqual(count_issues_for_file_type(self.raw_issues, 'ruby'), 3)
|
||||||
|
os.environ['INPUT_IGNORE'] = ''
|
||||||
|
|
||||||
|
def test_multiple_ignores(self):
|
||||||
|
os.environ['INPUT_IGNORE'] = '.*\.java, tests/example-file\.php'
|
||||||
|
diff_file = open('tests/test_new.diff', 'r')
|
||||||
|
self.raw_issues = TodoParser().parse(diff_file)
|
||||||
|
self.assertEqual(count_issues_for_file_type(self.raw_issues, 'python'), 2)
|
||||||
|
self.assertEqual(count_issues_for_file_type(self.raw_issues, 'yaml'), 2)
|
||||||
|
self.assertEqual(count_issues_for_file_type(self.raw_issues, 'php'), 0)
|
||||||
|
self.assertEqual(count_issues_for_file_type(self.raw_issues, 'java'), 0)
|
||||||
|
self.assertEqual(count_issues_for_file_type(self.raw_issues, 'ruby'), 3)
|
||||||
|
os.environ['INPUT_IGNORE'] = ''
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user