Files
pommer/pommer.py
rattatwinko 160c25c7cc pommer new
2025-05-09 16:56:02 +02:00

98 lines
2.7 KiB
Python

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()