Преглед изворни кода

Change update-poms.py to generate gradle build files instead of poms

wip/gradle-reposilite
Sindre Stephansen пре 2 година
родитељ
комит
da090e5b79
Signed by: sindre <sindre@sindrestephansen.com> GPG Key ID: B06FC67D17A46ADE
1 измењених фајлова са 56 додато и 72 уклоњено
  1. +56
    -72
      update-poms.py

+ 56
- 72
update-poms.py Прегледај датотеку

@@ -31,6 +31,8 @@ done: set[str] = set()
done_lock = asyncio.Lock()
in_progress: set[str] = set()
in_progress_lock = asyncio.Lock()
gradle_packages: set[str] = set()
gradle_packages_lock = asyncio.Lock()
num_workers = 50

global_properties: dict[str, dict[str, str]] = {}
@@ -94,78 +96,21 @@ class PackagePOM:

self.is_bom = self.packaging == 'pom'

self.gradle_packages = [str(package)]

if self.packaging == 'pom':
root_copy = copy.deepcopy(self.raw_root)
dependencies = root_copy.find('dependencies', ns) or ET.SubElement(root_copy, 'dependencies')

depman = root_copy.find('dependencyManagement', ns)
if depman is not None:
tmp_deps = depman.findall('dependencies/*', ns)
dependencies.extend(tmp_deps)
root_copy.remove(depman)

tmpGroupId = f'tmp.{package.groupId}'
tmpArtifactId = f'placeholder.{package.artifactId}'
tmpVersion = package.version

if (groupId := root_copy.find('groupId', ns)) is not None:
groupId.text = tmpGroupId
else:
logger.info(f"{package}: Inserting new groupId tag in pom")
ET.SubElement(root_copy, 'groupId').text = tmpGroupId

if (artifactId := root_copy.find('artifactId', ns)) is not None:
artifactId.text = tmpArtifactId
else:
logger.info(f"{package}: Inserting new artifactId tag in pom")
ET.SubElement(root_copy, 'artifactId').text = tmpArtifactId

if (version := root_copy.find('version', ns)) is not None:
version.text = tmpVersion
else:
logger.info(f"{package}: Inserting new version tag in pom")
ET.SubElement(root_copy, 'version').text = tmpVersion

# Add a dependency for the pom itself
self_dep = ET.SubElement(dependencies, 'dependency')
ET.SubElement(self_dep, 'groupId').text = package.groupId
ET.SubElement(self_dep, 'artifactId').text = package.artifactId
ET.SubElement(self_dep, 'version').text = package.version

self.generated_root = root_copy
else:
self.generated_root = ET.fromstring(
f"""
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
https://maven.apache.org/xsd/maven-4.0.0.xsd"
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<modelVersion>4.0.0</modelVersion>
<groupId>tmp.{package.groupId}</groupId>
<artifactId>placeholder-{package.artifactId}</artifactId>
<version>{package.version}</version>
<name>Package {package.artifactId}</name>

<dependencies>
<dependency>
<groupId>{package.groupId}</groupId>
<artifactId>{package.artifactId}</artifactId>
<version>{package.version}</version>
</dependency>
</dependencies>
</project>
"""
self.gradle_packages.extend(
[
f'{dep.find("groupId").text}:{dep.find("artifactId").text}:{dep.find("version").text}'
for dep in dependencies.findall('dependency')
]
)

logger.debug(f'{package}: POM parsed')

def write(self, f):
tree = ET.ElementTree(self.generated_root)
ET.indent(tree)
tree.write(f)


def resolve_props(self, initial: dict[str, str]):
props = initial

@@ -388,6 +333,7 @@ def load_package_list(list_path: Path, queue: asyncio.Queue) -> None:

queue.put_nowait(package)

continue
if not package.artifactId.endswith('-jvm'):
queue.put_nowait(
Package(
@@ -398,6 +344,47 @@ def load_package_list(list_path: Path, queue: asyncio.Queue) -> None:
)
)

async def create_gradle_script() -> str:
async with gradle_packages_lock:
return """// Generated, do not edit
plugins {
kotlin("jvm") version "1.7.20"
}

repositories {
maven {
url=uri("http://localhost:9001/releases")
isAllowInsecureProtocol=true
}
}

val deps = listOf(
""" + ',\n '.join(f'"{dep}"' for dep in sorted(gradle_packages)) + """
).map {
configurations.create(it.replace(':', '_')) to it
}


dependencies {
deps.forEach { (conf, dep) ->
conf(dep)
}
}

tasks.register("downloadDependencies") {
doLast {
deps.forEach { (conf, dep) ->
conf.files.forEach { file ->
copy {
from(file)
into("data/")
}
}
}
}
}
"""

async def download(package: Package, queue: asyncio.Queue) -> None:
async with done_lock:
is_done = str(package) in done
@@ -453,12 +440,8 @@ async def download(package: Package, queue: asyncio.Queue) -> None:
logger.warn(f'{package}: No pom')
return

pom_dir = base_pom_path / f'{package.groupId}-{package.artifactId}-{package.version}'
pom_path = pom_dir / 'pom.xml'

pom_dir.mkdir(exist_ok=True)
pom.write(pom_path)
logger.info(f'{package}: Downloaded')
async with gradle_packages_lock:
gradle_packages.update(pom.gradle_packages)

if not pom.is_bom:
for dep in pom.dependency_management:
@@ -524,9 +507,10 @@ async def main() -> None:

await asyncio.gather(*tasks, return_exceptions=True)

logger.info('Generating master POM')
subprocess.call(['sh', 'generate_master_pom.sh'])
logger.info('Generating build.gradle.kts')
gradle_script = await create_gradle_script()

Path("test/build.gradle.kts").write_text(gradle_script)

logger = logging.getLogger(__name__)



Loading…
Откажи
Сачувај