import xml.etree.ElementTree as ET from pathlib import Path import argparse import os def analyze_pom(pom_path): """Detect required tools from pom.xml""" tree = ET.parse(pom_path) root = tree.getroot() ns = {'mvn': 'http://maven.apache.org/POM/4.0.0'} requirements = { 'java_version': root.findtext('mvn:properties/mvn:java.version', namespaces=ns, default="21"), 'kotlin_version': root.findtext('mvn:properties/mvn:kotlin.version', namespaces=ns), 'needs_docker': False } # Check for docker-maven-plugin for plugin in root.findall('.//mvn:plugin', namespaces=ns): if 'docker' in plugin.findtext('mvn:artifactId', namespaces=ns, default=""): requirements['needs_docker'] = True break return requirements def generate_gitea_actions(pom_path, requirements): """Generate Gitea Actions workflow file""" workflow_dir = Path(".gitea/workflows") workflow_dir.mkdir(parents=True, exist_ok=True) workflow_file = workflow_dir / "build.yml" java_version = requirements['java_version'] kotlin_version = requirements['kotlin_version'] needs_docker = requirements['needs_docker'] # Base Maven command with optimizations maven_cmd = "mvn -B -T 1C -Ddependency.cache=true -Dmaven.artifact.threads=8" if kotlin_version: maven_cmd += " -Dkotlin.compiler.incremental=true" content = f"""name: Java CI with Maven on: [push, pull_request] 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' - name: Install Maven run: | sudo apt-get update -qq sudo apt-get install -y maven mvn --version """ if needs_docker: content += """ - name: Set up Docker run: | sudo apt-get install -y docker.io sudo systemctl start docker """ content += f""" - name: Build with Maven run: {maven_cmd} clean package """ with open(workflow_file, "w") as f: f.write(content) print(f"✓ Generated Gitea Actions workflow at {workflow_file}") def main(): parser = argparse.ArgumentParser(description='Generate Gitea Actions workflow for Maven project') parser.add_argument('pom_path', type=str, help='Path to pom.xml') args = parser.parse_args() pom_path = Path(args.pom_path) if not pom_path.exists(): print(f"❌ Error: {pom_path} does not exist") return requirements = analyze_pom(pom_path) generate_gitea_actions(pom_path, requirements) if __name__ == "__main__": main()