-
-
Notifications
You must be signed in to change notification settings - Fork 888
Add code coverage disable check to GitHub workflows #2701
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
palisadoes
merged 41 commits into
PalisadoesFoundation:develop-postgres
from
im-vedant:workflow
Dec 28, 2024
Merged
Changes from all commits
Commits
Show all changes
41 commits
Select commit
Hold shift + click to select a range
469a361
feat: add script to check for code coverage disable statements
cea12f1
Add code coverage disable check to GitHub workflows
70fc259
Merge branch 'develop-postgres' of https://github.com/PalisadoesFound…
6e68380
Formatted code_coverage_disable_check.py to comply with all coding an…
679fc49
add functionality in eslint_disable_check.py to run for mutliple dire…
01c430a
removed unnecessary comment
7d26173
Merge branch 'develop-postgres' into workflow
im-vedant b575036
excluded node_modules from eslint disable check
cf69d03
Merge branch 'develop-postgres' into workflow
im-vedant 3e89e1d
Merge branch 'develop-postgres' into workflow
im-vedant a460044
Merge branch 'develop-postgres' of https://github.com/PalisadoesFound…
62d4232
removed all eslint disable statements and code coverage disable state…
0c3219a
Merge branch 'workflow' of https://github.com/im-vedant/talawa-admin …
1e7ea13
Revert "excluded node_modules from eslint disable check"
e841044
Revert "removed all eslint disable statements and code coverage disab…
793b317
excluded node_modules from eslint disable check
063f1de
code-coverage check runs for only changed files
e385ba6
add tj-actions
dcce073
add tj actions in check code coverage job
b0c79d7
Merge branch 'develop-postgres' into workflow
palisadoes 1e1aa45
Merge branch 'develop-postgres' into workflow
im-vedant 50df8a3
Merge branch 'develop-postgres' of https://github.com/PalisadoesFound…
f974bbf
Fix GitHub Actions workflow to identify and pass nearest changed dire…
1dc3a93
Merge branch 'workflow' of https://github.com/im-vedant/talawa-admin …
7467034
syntax correction
9dfacc7
minor fix
57fa9a3
minor fix
17aebf5
minor fix
5b83566
added repo root
624feb9
fix error
ffe620d
fix error
9e5460c
added support for checking .ts files for eslint-disable statements
8712ed0
added support for checking .ts files for code coverage disable statem…
2c26f59
Merge branch 'develop-postgres' of https://github.com/PalisadoesFound…
5b4f689
minor change
3b22792
Merge branch 'develop-postgres' into workflow
im-vedant c2ce9ca
Merge branch 'workflow' of https://github.com/im-vedant/talawa-admin …
b88a4c1
Remove test files and ensured that python files follow coding standards
20f095e
fixes bug
7976d2e
fix error
d5afe35
removed eslint disable command from check for linting errors in modif…
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,169 @@ | ||
"""Code Coverage Disable Checker Script. | ||
|
||
Methodology: | ||
|
||
Recursively analyzes TypeScript files in the specified directories or | ||
checks specific files | ||
to ensure they do not contain code coverage disable statements. | ||
|
||
This script enforces proper code coverage practices in the project. | ||
|
||
NOTE: | ||
This script complies with our python3 coding and documentation standards. | ||
It complies with: | ||
|
||
1) Pylint | ||
2) Pydocstyle | ||
3) Pycodestyle | ||
4) Flake8 | ||
5) Python Black | ||
|
||
""" | ||
|
||
import os | ||
import re | ||
import argparse | ||
import sys | ||
|
||
|
||
def has_code_coverage_disable(file_path): | ||
""" | ||
Check if a TypeScript file contains code coverage disable statements. | ||
|
||
Args: | ||
file_path (str): Path to the TypeScript file. | ||
|
||
Returns: | ||
bool: True if code coverage disable statement is found, False | ||
otherwise. | ||
""" | ||
code_coverage_disable_pattern = re.compile( | ||
r"""//?\s*istanbul\s+ignore(?:\s+(?:next|-line))?[^\n]*| | ||
/\*\s*istanbul\s+ignore\s+(?:next|-line)\s*\*/""", | ||
re.IGNORECASE, | ||
) | ||
try: | ||
with open(file_path, "r", encoding="utf-8") as file: | ||
content = file.read() | ||
return bool(code_coverage_disable_pattern.search(content)) | ||
except FileNotFoundError: | ||
print(f"File not found: {file_path}") | ||
return False | ||
except PermissionError: | ||
print(f"Permission denied: {file_path}") | ||
return False | ||
except (IOError, OSError) as e: | ||
print(f"Error reading file {file_path}: {e}") | ||
return False | ||
|
||
|
||
def check_code_coverage(files_or_dirs): | ||
""" | ||
Check TypeScript files for code coverage disable statements. | ||
|
||
Args: | ||
files_or_dirs (list): List of files or directories to check. | ||
|
||
Returns: | ||
bool: True if code coverage disable statement is found, False | ||
otherwise. | ||
""" | ||
code_coverage_found = False | ||
|
||
for item in files_or_dirs: | ||
if os.path.isdir(item): | ||
# If it's a directory, recursively walk through the files in it | ||
for root, _, files in os.walk(item): | ||
if "node_modules" in root: | ||
continue | ||
for file_name in files: | ||
if ( | ||
file_name.endswith(".tsx") | ||
or file_name.endswith(".ts") | ||
and not file_name.endswith(".test.tsx") | ||
and not file_name.endswith(".test.ts") | ||
and not file_name.endswith(".spec.tsx") | ||
and not file_name.endswith(".spec.ts") | ||
): | ||
file_path = os.path.join(root, file_name) | ||
if has_code_coverage_disable(file_path): | ||
print( | ||
f"""File {file_path} contains code coverage | ||
disable statement.""" | ||
) | ||
code_coverage_found = True | ||
elif os.path.isfile(item): | ||
# If it's a file, check it directly | ||
if ( | ||
item.endswith(".tsx") | ||
or item.endswith(".ts") | ||
and not item.endswith(".test.tsx") | ||
and not item.endswith(".test.ts") | ||
and not item.endswith(".spec.tsx") | ||
and not item.endswith(".spec.ts") | ||
): | ||
if has_code_coverage_disable(item): | ||
print( | ||
f"""File {item} contains code coverage disable | ||
statement.""" | ||
) | ||
code_coverage_found = True | ||
|
||
return code_coverage_found | ||
|
||
|
||
def arg_parser_resolver(): | ||
"""Resolve the CLI arguments provided by the user. | ||
|
||
Returns: | ||
result: Parsed argument object | ||
""" | ||
parser = argparse.ArgumentParser() | ||
parser.add_argument( | ||
"--directory", | ||
type=str, | ||
nargs="+", | ||
default=[os.getcwd()], | ||
help="""One or more directories to check for code coverage disable | ||
statements (default: current directory).""", | ||
) | ||
parser.add_argument( | ||
"--files", | ||
type=str, | ||
nargs="+", | ||
default=[], | ||
help="""One or more files to check directly for code coverage disable | ||
statements (default: check directories).""", | ||
) | ||
return parser.parse_args() | ||
|
||
|
||
def main(): | ||
""" | ||
Execute the script's main functionality. | ||
|
||
This function serves as the entry point for the script. It performs | ||
the following tasks: | ||
1. Validates and retrieves the files or directories to check from | ||
command line arguments. | ||
2. Checks files or directories for code coverage disable statements. | ||
3. Provides informative messages based on the analysis. | ||
4. Exits with an error if code coverage disable statements are found. | ||
|
||
Raises: | ||
SystemExit: If an error occurs during execution. | ||
""" | ||
args = arg_parser_resolver() | ||
files_or_dirs = args.files if args.files else args.directory | ||
# Check code coverage in the specified files or directories | ||
code_coverage_found = check_code_coverage(files_or_dirs) | ||
|
||
if code_coverage_found: | ||
print("Code coverage disable check failed. Exiting with error.") | ||
sys.exit(1) | ||
|
||
print("Code coverage disable check completed successfully.") | ||
|
||
|
||
if __name__ == "__main__": | ||
main() |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.