summaryrefslogtreecommitdiff
path: root/archived/projt-launcher/ci/code-quality.sh
diff options
context:
space:
mode:
Diffstat (limited to 'archived/projt-launcher/ci/code-quality.sh')
-rw-r--r--archived/projt-launcher/ci/code-quality.sh156
1 files changed, 156 insertions, 0 deletions
diff --git a/archived/projt-launcher/ci/code-quality.sh b/archived/projt-launcher/ci/code-quality.sh
new file mode 100644
index 0000000000..c37e6109f9
--- /dev/null
+++ b/archived/projt-launcher/ci/code-quality.sh
@@ -0,0 +1,156 @@
+#!/usr/bin/env bash
+# =============================================================================
+# ProjT Launcher - Code Quality Validation Script
+# =============================================================================
+# Validates code quality between branches/commits for CI purposes
+#
+# Usage:
+# ./ci/code-quality.sh <base_branch> [repository]
+#
+# Example:
+# ./ci/code-quality.sh develop
+# ./ci/code-quality.sh master https://github.com/Project-Tick/ProjT-Launcher.git
+# =============================================================================
+
+set -o pipefail -o errexit -o nounset
+
+trace() { echo >&2 "$@"; }
+
+tmp=$(mktemp -d)
+cleanup() {
+ set +o errexit
+ trace -n "Cleaning up.. "
+ [[ -e "$tmp/base" ]] && git worktree remove --force "$tmp/base"
+ [[ -e "$tmp/merged" ]] && git worktree remove --force "$tmp/merged"
+ rm -rf "$tmp"
+ trace "Done"
+}
+trap cleanup exit
+
+# Default repository
+repo=https://github.com/Project-Tick/ProjT-Launcher.git
+
+# Parse arguments
+if (( $# != 0 )); then
+ baseBranch=$1
+ shift
+else
+ trace "Usage: $0 BASE_BRANCH [REPOSITORY]"
+ trace "BASE_BRANCH: The base branch to compare against (e.g., develop, master)"
+ trace "REPOSITORY: Repository URL (defaults to $repo)"
+ exit 1
+fi
+
+if (( $# != 0 )); then
+ repo=$1
+ shift
+fi
+
+# Check for uncommitted changes
+if [[ -n "$(git status --porcelain)" ]]; then
+ trace -e "\e[33mWarning: Dirty tree, uncommitted changes won't be checked\e[0m"
+fi
+
+headSha=$(git rev-parse HEAD)
+trace -e "Using HEAD commit \e[34m$headSha\e[0m"
+
+# Create worktree for HEAD
+trace -n "Creating Git worktree for HEAD in $tmp/merged.. "
+git worktree add --detach -q "$tmp/merged" HEAD
+trace "Done"
+
+# Fetch and create worktree for base branch
+trace -n "Fetching base branch $baseBranch from $repo.. "
+git fetch -q "$repo" "refs/heads/$baseBranch"
+baseSha=$(git rev-parse FETCH_HEAD)
+trace -e "Done (\e[34m$baseSha\e[0m)"
+
+trace -n "Creating Git worktree for base in $tmp/base.. "
+git worktree add --detach -q "$tmp/base" "$baseSha"
+trace "Done"
+
+# Run code quality checks
+trace ""
+trace "=== Running Code Quality Checks ==="
+trace ""
+
+# Check for clang-format
+if command -v clang-format &> /dev/null; then
+ trace "Checking C++ code formatting..."
+
+ format_errors=0
+ while IFS= read -r -d '' file; do
+ if ! clang-format --dry-run --Werror "$file" 2>/dev/null; then
+ trace " Format issue: $file"
+ ((format_errors++)) || true
+ fi
+ done < <(find "$tmp/merged" -type f \( -name "*.cpp" -o -name "*.h" \) -print0 2>/dev/null)
+
+ if (( format_errors > 0 )); then
+ trace -e "\e[33mFound $format_errors files with formatting issues\e[0m"
+ else
+ trace -e "\e[32mAll C++ files are properly formatted\e[0m"
+ fi
+else
+ trace "clang-format not found, skipping format check"
+fi
+
+# Check for changed files
+trace ""
+trace "Changed files in this PR:"
+git diff --name-only "$baseSha" "$headSha" | while read -r file; do
+ trace " $file"
+done
+
+# Count changes by category
+trace ""
+trace "Change summary:"
+source_changes=$(git diff --name-only "$baseSha" "$headSha" | grep -E "^(launcher|libraries)/" | wc -l)
+build_changes=$(git diff --name-only "$baseSha" "$headSha" | grep -E "(CMake|\\.cmake|vcpkg)" | wc -l)
+ci_changes=$(git diff --name-only "$baseSha" "$headSha" | grep -E "^(\\.github|ci)/" | wc -l)
+doc_changes=$(git diff --name-only "$baseSha" "$headSha" | grep -E "\\.md$" | wc -l)
+
+trace " Source files: $source_changes"
+trace " Build files: $build_changes"
+trace " CI files: $ci_changes"
+trace " Documentation: $doc_changes"
+
+# Check for common issues in changed files
+trace ""
+trace "Checking for common issues..."
+
+issues=0
+
+# Check for debug statements
+if git diff "$baseSha" "$headSha" -- '*.cpp' '*.h' | grep -E "^\\+.*qDebug|^\\+.*std::cout" | grep -v "// DEBUG" > /dev/null 2>&1; then
+ trace -e "\e[33mWarning: New debug statements found\e[0m"
+ ((issues++)) || true
+fi
+
+# Check for large files
+large_files=$(git diff --name-only "$baseSha" "$headSha" | while read -r file; do
+ if [[ -f "$tmp/merged/$file" ]]; then
+ size=$(wc -c < "$tmp/merged/$file" 2>/dev/null || echo 0)
+ if (( size > 1000000 )); then
+ echo "$file ($((size/1024))KB)"
+ fi
+ fi
+done)
+
+if [[ -n "$large_files" ]]; then
+ trace -e "\e[33mWarning: Large files detected:\e[0m"
+ echo "$large_files" | while read -r line; do
+ trace " $line"
+ done
+ ((issues++)) || true
+fi
+
+trace ""
+if (( issues > 0 )); then
+ trace -e "\e[33mCode check completed with $issues warnings\e[0m"
+else
+ trace -e "\e[32mCode check completed successfully\e[0m"
+fi
+
+exit 0
+