Skip to content
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

[CI] Adding CodeQL Configuration, File Change Limitation Script, Linting, Formatting, and Type-Checking #45

Closed
wants to merge 9 commits into from
Closed
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
25 changes: 25 additions & 0 deletions .github/workflows/authorized-changes-detection.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
name: Checking workflow files
on:
pull_request:
paths:
- '.github/**'
- 'env.example'
- '.node-version'
- '.husky/**'
- 'scripts/**'
- 'package.json'
- 'tsconfig.json'
- '.gitignore'
- '.eslintrc.json'
- '.eslintignore '
- 'vite.config.ts'
- 'CODEOWNERS'
- 'LICENSE'

jobs:
Checking-for-unauthorized-file-changes:
name: Checking for unauthorized file changes
runs-on: ubuntu-latest
steps:
- name: Unauthorized file modification in PR
run: exit 1
84 changes: 84 additions & 0 deletions .github/workflows/codeql.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
# For most projects, this workflow file will not need changing; you simply need
# to commit it to your repository.
#
# You may wish to alter this file to override the set of languages analyzed,
# or to provide custom queries or build logic.
#
# ******** NOTE ********
# We have attempted to detect the languages in your repository. Please check
# the `language` matrix defined below to confirm you have the correct set of
# supported CodeQL languages.
#
name: "CodeQL"

on:
push:
branches: [ '**' ]
pull_request:
branches: [ '**' ]


jobs:
analyze:
name: Analyze
# Runner size impacts CodeQL analysis time. To learn more, please see:
# - https://gh.io/recommended-hardware-resources-for-running-codeql
# - https://gh.io/supported-runners-and-hardware-resources
# - https://gh.io/using-larger-runners
# Consider using larger runners for possible analysis time improvements.
runs-on: ${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-latest' }}
timeout-minutes: ${{ (matrix.language == 'swift' && 120) || 360 }}
permissions:
# required for all workflows
security-events: write

# only required for workflows in private repositories
actions: read
contents: read

strategy:
fail-fast: false
matrix:
language: [ 'javascript-typescript' ]
# CodeQL supports [ 'c-cpp', 'csharp', 'go', 'java-kotlin', 'javascript-typescript', 'python', 'ruby', 'swift' ]
# Use only 'java-kotlin' to analyze code written in Java, Kotlin or both
# Use only 'javascript-typescript' to analyze code written in JavaScript, TypeScript or both
# Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support

steps:
- name: Checkout repository
uses: actions/checkout@v4

# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v3
with:
languages: ${{ matrix.language }}
debug: true
# If you wish to specify custom queries, you can do so here or in a config file.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.

# For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
# queries: security-extended,security-and-quality


# Autobuild attempts to build any compiled languages (C/C++, C#, Go, Java, or Swift).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
uses: github/codeql-action/autobuild@v3

# ℹ️ Command-line programs to run using the OS shell.
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun

# If the Autobuild fails above, remove it and uncomment the following three lines.
# modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance.

# - run: |
# echo "Run, Build Application using script"
# ./location_of_script_within_repo/buildscript.sh

- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3
with:
category: "/language:${{matrix.language}}"
132 changes: 132 additions & 0 deletions .github/workflows/count_changed_files.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,132 @@
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
"""Script to limit number of file changes in single PR.

Methodology:

Analyses the Pull request to find if the count of file changed in a pr
exceeds a pre-defined nummber 20

This scripts encourages contributors to align with project practices,
reducing the likelihood of unintentional merges into incorrect branches.

NOTE:

This script complies with our python3 coding and documentation standards.
It complies with:

1) Pylint
2) Pydocstyle
3) Pycodestyle
4) Flake8

"""

import sys
import argparse
import subprocess


def _count_changed_files(base_branch, pr_branch):
"""
Count the number of changed files between two branches.

Args:
base_branch (str): The base branch.
pr_branch (str): The PR branch.

Returns:
int: The number of changed files.

Raises:
SystemExit: If an error occurs during execution.
"""
base_branch = f"origin/{base_branch}"
pr_branch = f"origin/{pr_branch}"

command = f"git diff --name-only {base_branch}...{pr_branch} | wc -l"

try:
# Run git command to get the list of changed files
process = subprocess.Popen(
command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE
)
output, error = process.communicate()
except Exception as e:
print(f"Error: {e}")
sys.exit(1)

file_count = int(output.strip())
return file_count

def _arg_parser_resolver():
"""Resolve the CLI arguments provided by the user.

Args:
None

Returns:
result: Parsed argument object

"""
parser = argparse.ArgumentParser()
parser.add_argument(
"--base_branch",
type=str,
required=True,
help="Base branch where pull request should be made."
),
parser.add_argument(
"--pr_branch",
type=str,
required=True,
help="PR branch from where the pull request is made.",
),
parser.add_argument(
"--file_count",
type=int,
default=20,
help="Number of files changes allowed in a single commit")
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 base branch and PR commit from
command line arguments.
2. Counts the number of changed files between the specified branches.
3. Checks if the count of changed files exceeds the acceptable
limit (20).
4. Provides informative messages based on the analysis.

Raises:
SystemExit: If an error occurs during execution.
"""

args = _arg_parser_resolver()

base_branch = args.base_branch
pr_branch = args.pr_branch

print(f"You are trying to merge on branch: {base_branch}")
print(f"You are making commit from your branch: {pr_branch}")

# Count changed files
file_count = _count_changed_files(base_branch, pr_branch)
print(f"Number of changed files: {file_count}")

# Check if the count exceeds 20
if file_count > args.file_count:
print("Error: Too many files (greater than 20) changed in the pull request.")
print("Possible issues:")
print("- Contributor may be merging into an incorrect branch.")
print("- Source branch may be incorrect please use develop as source branch.")
sys.exit(1)


if __name__ == "__main__":
main()
Loading
Loading