98 lines
2.7 KiB
Python
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() |