assfucked new test suite ; seperated version which is very fucking experimental

This commit is contained in:
2025-05-23 07:34:03 +02:00
parent 85ba1c6d33
commit f236b81d29
5 changed files with 411 additions and 4 deletions

View File

@@ -0,0 +1,183 @@
import os
import re
import xml.etree.ElementTree as ET
from pathlib import Path
def parse_pom_xml(pom_path):
"""Parse a Maven POM file with better error handling and namespace support"""
try:
if not os.path.exists(pom_path):
return None
# Register namespace
ET.register_namespace('', "http://maven.apache.org/POM/4.0.0")
ns = {'mvn': "http://maven.apache.org/POM/4.0.0"}
tree = ET.parse(pom_path)
root = tree.getroot()
# Helper function to safely get text
def get_text(element, path, default="unknown"):
elem = element.find(path, ns)
return elem.text if elem is not None else default
artifact_id = get_text(root, './mvn:artifactId')
group_id = get_text(root, './mvn:groupId')
version = get_text(root, './mvn:version')
name = get_text(root, './mvn:name', artifact_id)
# Get Java version with better fallback logic
java_version = "17" # Default
java_elem = root.find('./mvn:properties/mvn:java.version', ns)
if java_elem is not None and java_elem.text:
java_version = java_elem.text.strip()
# Packaging type
packaging = get_text(root, './mvn:packaging', 'jar')
# Kotlin detection
kotlin_version = None
kotlin_elem = root.find('./mvn:properties/mvn:kotlin.version', ns)
if kotlin_elem is not None:
kotlin_version = kotlin_elem.text
# Check for Kotlin plugin or dependency
is_kotlin = False
if kotlin_version:
is_kotlin = True
else:
# Check plugins
for plugin in root.findall('.//mvn:plugin', ns):
group = plugin.find('./mvn:groupId', ns)
if group is not None and group.text == 'org.jetbrains.kotlin':
is_kotlin = True
break
# Check dependencies
if not is_kotlin:
for dep in root.findall('.//mvn:dependency', ns):
group = dep.find('./mvn:groupId', ns)
artifact = dep.find('./mvn:artifactId', ns)
if (group is not None and group.text == 'org.jetbrains.kotlin' and
artifact is not None and 'kotlin' in artifact.text.lower()):
is_kotlin = True
break
return {
"artifact_id": artifact_id,
"group_id": group_id,
"version": version,
"name": name,
"java_version": java_version,
"packaging": packaging,
"is_kotlin": is_kotlin,
"kotlin_version": kotlin_version,
"pom_path": str(Path(pom_path).resolve()),
"build_system": "maven"
}
except Exception as e:
print(f"Error parsing POM file {pom_path}: {str(e)}")
return None
def parse_gradle_file(gradle_path):
"""Parse Gradle build files with improved regex and error handling"""
try:
if not os.path.exists(gradle_path):
return None
with open(gradle_path, 'r', encoding='utf-8') as f:
content = f.read()
is_kotlin_dsl = gradle_path.endswith('.kts')
# Extract basic info with more robust regex
group_match = re.search(r'group\s*[=:]\s*[\'"]([^\'"]+)[\'"]', content)
group_id = group_match.group(1) if group_match else "unknown"
version_match = re.search(r'version\s*[=:]\s*[\'"]([^\'"]+)[\'"]', content)
version = version_match.group(1) if version_match else "unknown"
# Project name detection
artifact_id = "unknown"
project_dir = os.path.dirname(gradle_path)
# Check settings.gradle[.kts]
for settings_file in ['settings.gradle', 'settings.gradle.kts']:
settings_path = os.path.join(project_dir, settings_file)
if os.path.exists(settings_path):
try:
with open(settings_path, 'r', encoding='utf-8') as f:
settings_content = f.read()
name_match = re.search(r'rootProject\.name\s*[=:]\s*[\'"]([^\'"]+)[\'"]', settings_content)
if name_match:
artifact_id = name_match.group(1)
break
except Exception:
continue
if artifact_id == "unknown":
artifact_id = os.path.basename(project_dir) if project_dir else "unknown"
# Java version detection with multiple patterns
java_version = "17" # Default
# Pattern 1: JavaVersion.VERSION_XX
version_match = re.search(r'(?:source|target)Compatibility\s*[=:]\s*JavaVersion\.VERSION_(\d+)', content)
if version_match:
java_version = version_match.group(1)
else:
# Pattern 2: sourceCompatibility = 'XX'
version_match = re.search(r'(?:source|target)Compatibility\s*[=:]\s*[\'"](\d+)[\'"]', content)
if version_match:
java_version = version_match.group(1)
else:
# Pattern 3: Toolchain
toolchain_match = re.search(
r'toolchain\s*{[^}]*languageVersion\s*[=:]\s*JavaLanguageVersion\.of\(\s*(\d+)\s*\)',
content, re.DOTALL
)
if toolchain_match:
java_version = toolchain_match.group(1)
# Kotlin detection
is_kotlin = is_kotlin_dsl
kotlin_version = None
if not is_kotlin:
# Check for Kotlin plugin
kotlin_plugin_match = re.search(
r'(?:id|kotlin)\s*[(]?\s*[\'"](?:org\.jetbrains\.kotlin\.(?:jvm|android)|kotlin)[\'"]\s*[)]?',
content
)
if kotlin_plugin_match:
is_kotlin = True
# Try to get version
version_match = re.search(
r'(?:id|kotlin)\s*[(]?\s*[\'"]org\.jetbrains\.kotlin\.\w+[\'"]\s*[)]?\s*version\s*[\'"]([^\'"]+)[\'"]',
content
)
if version_match:
kotlin_version = version_match.group(1)
# Application plugin detection
is_application = bool(re.search(r'id\s*[(]?\s*[\'"]application[\'"]\s*[)]?', content))
return {
"artifact_id": artifact_id,
"group_id": group_id,
"version": version,
"name": artifact_id, # Use artifact_id as name if not specified
"java_version": java_version,
"packaging": "application" if is_application else "jar",
"is_kotlin": is_kotlin,
"kotlin_version": kotlin_version,
"gradle_path": str(Path(gradle_path).resolve()),
"is_kotlin_dsl": is_kotlin_dsl,
"build_system": "gradle"
}
except Exception as e:
print(f"Error parsing Gradle file {gradle_path}: {str(e)}")
return None

View File

@@ -0,0 +1,24 @@
import os
import glob
from pathlib import Path
def find_pom_files(base_dir="."):
"""Find all pom.xml files recursively"""
base_path = Path(base_dir).resolve()
return [
str(p) for p in
base_path.glob("**/pom.xml")
if not any(part.startswith('.') for part in p.parts)
]
def find_gradle_files(base_dir="."):
"""Find all build.gradle[.kts] files recursively"""
base_path = Path(base_dir).resolve()
gradle_files = list(base_path.glob("**/build.gradle"))
kts_files = list(base_path.glob("**/build.gradle.kts"))
# Filter out hidden directories
return [
str(p) for p in gradle_files + kts_files
if not any(part.startswith('.') for part in p.parts)
]

View File

@@ -0,0 +1,137 @@
import os
from pathlib import Path
def generate_maven_workflow(pom_infos):
"""Generate GitHub workflow for Maven projects"""
if not pom_infos:
return None
# Get highest Java version
java_versions = [int(info["java_version"]) for info in pom_infos if info["java_version"].isdigit()]
java_version = str(max(java_versions)) if java_versions else "17"
workflow = f"""name: Maven Build
on:
push:
branches: [ main, master ]
pull_request:
branches: [ main, master ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up JDK {java_version}
uses: actions/setup-java@v3
with:
java-version: '{java_version}'
distribution: 'temurin'
cache: 'maven'
"""
for info in pom_infos:
workflow += f"""
- name: Build {info['name']}
run: mvn -B package -f "{info['pom_path']}"
- name: Upload artifact
uses: actions/upload-artifact@v3
with:
name: {info['artifact_id']}
path: {os.path.dirname(info['pom_path'])}/target/*.jar
"""
return workflow
def generate_gradle_workflow(gradle_infos):
"""Generate GitHub workflow for Gradle projects"""
if not gradle_infos:
return None
# Get highest Java version
java_versions = [int(info["java_version"]) for info in gradle_infos if info["java_version"].isdigit()]
java_version = str(max(java_versions)) if java_versions else "17"
workflow = f"""name: Gradle Build
on:
push:
branches: [ main, master ]
pull_request:
branches: [ main, master ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up JDK {java_version}
uses: actions/setup-java@v3
with:
java-version: '{java_version}'
distribution: 'temurin'
cache: 'gradle'
- name: Make gradlew executable
run: chmod +x gradlew
"""
for info in gradle_infos:
workflow += f"""
- name: Build {info['name']}
run: ./gradlew build
- name: Upload artifact
uses: actions/upload-artifact@v3
with:
name: {info['artifact_id']}
path: build/libs/*.jar
"""
return workflow
def generate_build_script(project_infos):
"""Generate a universal build script"""
script = """#!/bin/bash
set -e
echo "Universal Build Script"
echo "======================"
"""
maven_projects = [p for p in project_infos if p["build_system"] == "maven"]
gradle_projects = [p for p in project_infos if p["build_system"] == "gradle"]
if maven_projects:
script += """
# Maven projects
echo "Building Maven projects..."
"""
for project in maven_projects:
script += f"""
echo "Building {project['name']}"
mvn -f "{project['pom_path']}" clean package
"""
if gradle_projects:
script += """
# Gradle projects
echo "Building Gradle projects..."
"""
for project in gradle_projects:
script += f"""
echo "Building {project['name']}"
cd "{os.path.dirname(project['gradle_path'])}"
chmod +x gradlew || true
./gradlew build || gradle build
cd -
"""
script += """
echo "Build completed successfully!"
"""
return script

View File

@@ -0,0 +1,66 @@
import argparse
import json
import os
from pathlib import Path
from .parser import parse_pom_xml, parse_gradle_file
from .generator import (
generate_maven_workflow,
generate_gradle_workflow,
generate_build_script
)
from .discovery import find_pom_files, find_gradle_files
def main():
parser = argparse.ArgumentParser(description='Generate CI workflows for Java projects')
parser.add_argument('--dir', default='.', help='Base directory to scan')
parser.add_argument('--output-json', action='store_true', help='Output project info as JSON')
args = parser.parse_args()
# Find and parse projects
projects = []
for pom_path in find_pom_files(args.dir):
if project := parse_pom_xml(pom_path):
projects.append(project)
for gradle_path in find_gradle_files(args.dir):
if project := parse_gradle_file(gradle_path):
projects.append(project)
if not projects:
print("No projects found")
return
# Generate workflows
maven_projects = [p for p in projects if p["build_system"] == "maven"]
gradle_projects = [p for p in projects if p["build_system"] == "gradle"]
# Create output directory
workflows_dir = Path(".github/workflows")
workflows_dir.mkdir(parents=True, exist_ok=True)
if maven_projects:
workflow = generate_maven_workflow(maven_projects)
if workflow:
(workflows_dir / "maven.yml").write_text(workflow)
print("Generated Maven workflow")
if gradle_projects:
workflow = generate_gradle_workflow(gradle_projects)
if workflow:
(workflows_dir / "gradle.yml").write_text(workflow)
print("Generated Gradle workflow")
# Generate build script
build_script = generate_build_script(projects)
Path("build.sh").write_text(build_script)
os.chmod("build.sh", 0o755)
print("Generated build.sh")
if args.output_json:
Path("projects.json").write_text(json.dumps(projects, indent=2))
print("Generated projects.json")
print(f"Found {len(projects)} projects:")
for p in projects:
print(f"- {p['name']} ({p['build_system']})")

View File

@@ -4,10 +4,7 @@
Fix this shit! Fix this shit!
Commercial Grade Test Suite for pommer.py Fucking assfucked shit wont pass fucking 36 Failed and 31 Passed fuck you , fix this you downy black monkey.
This comprehensive test suite covers all functionality of the pommer.py script
with extensive edge case coverage, input validation, and error handling tests.
Requirements: Requirements:
- pytest - pytest