Pārlūkot izejas kodu

Restructure and simplify config file

main
Sindre Stephansen pirms 2 gadiem
vecāks
revīzija
e47277824e
Parakstījis: sindre <sindre@sindrestephansen.com> GPG atslēgas ID: B06FC67D17A46ADE
4 mainītis faili ar 91 papildinājumiem un 93 dzēšanām
  1. +21
    -31
      README.md
  2. +21
    -15
      package-list.yaml
  3. +37
    -37
      sync/src/config.py
  4. +12
    -10
      sync/src/main.py

+ 21
- 31
README.md Parādīt failu

@@ -20,39 +20,29 @@ maven:
mirrors:
- "https://repo.maven.apache.org/maven2"

# Specify which kotlin versions to fetch.
kotlin:
1.8.20:
# Plugins specific to this kotlin version. See `general` section for details.
# Specify configurations of kotlin version, plugins, and packages. For most packages the kotlin version doesn't matter.
configurations:
# A kotlin version without specific plugins and packages. This fetches the bare minimum of
# packages and plugins to be able to use that kotlin version.
- kotlin-version: "1.7.20"
- kotlin-version: "1.8.20"
# Plugins specific to this kotlin version, listed with their plugin ID, not the full package name.
# Plugin versions can be a single version as a string, or a list of strings to fetch multiple versions.
plugins:
com.expediagroup.graphql: ["7.0.0-alpha.5", "6.5.2"]
# Packages specific to this kotlin version. See `general` section for details.
org.panteleyev.jpackageplugin: "1.5.2"
# Packages specific to this kotlin version, listed either with their full name as a key, or split into group and artifact.
# Package versions can be a single version as a string, or a list of strings to fetch multiple versions.
packages:
org.slf4j:slf4j-api: "2.1.0"
# A kotlin version without specific plugins and packages.
1.8.0: {}
1.7.20:
packages:
org.slf4j:slf4j-api: "2.0.7"

# Packages and plugins that doesn't require a specific kotlin version.
general:
# The kotlin version to use (doesn't matter much, use the newest stable version).
_kotlin-version: "1.8.20"
plugins:
# Plugins are listed with their plugin ID, not the full package name.
# Plugin versions can be a single version as a string, or a list of strings to fetch multiple versions.
org.panteleyev.jpackageplugin: "1.5.2"
packages:
# Packages are listed either with their full name as a key, or split into group and artifact.
# Package versions can be a single version as a string, or a list of strings to fetch multiple versions.
org.jetbrains.kotlinx:kotlinx-datetime: "0.4.0"
com.expediagroup:
# When splitting into group and artifact, the default versions for the group can be specified.
# Using an empty list as the version for an artifact implies that the default versions should be used.
_versions: ["7.0.0-alpha.6", "6.5.2"]
graphql-kotlin-ktor-server: ["7.0.0-alpha.6"] # Uses only the specified version
graphql-kotlin-client: [] # Uses the default versions
graphql-kotlin-client-generator: [] # Uses the default versions
org.jetbrains.kotlinx:kotlinx-datetime: "0.4.0"
com.expediagroup:
# When splitting into group and artifact, the default versions for the group can be specified.
# Using an empty list as the version for an artifact implies that the default versions should be used.
_versions: ["7.0.0-alpha.6", "6.5.2"]
graphql-kotlin-ktor-server: ["7.0.0-alpha.6"] # Uses only the specified version
graphql-kotlin-client: [] # Uses the default versions
graphql-kotlin-client-generator: [] # Uses the default versions
```

+ 21
- 15
package-list.yaml Parādīt failu

@@ -7,23 +7,29 @@ maven:
- "https://registry.quarkus.io/maven"
- "https://plugins.gradle.org/m2"

kotlin:
1.8.20:
configurations:
# Specify configurations where the packages/plugins depend on a specific kotlin version.
- kotlin-version: "1.8.20"
plugins:
com.expediagroup.graphql: ["7.0.0-alpha.5", "6.5.2"]
1.8.0: {}
1.7.20:

- kotlin-version: "1.8.0"

- kotlin-version: "1.7.20"
packages:
org.slf4j:slf4j-api: "2.0.7"

general:
_kotlin-version: "1.8.20"
plugins:
org.panteleyev.jpackageplugin: "1.5.2"
packages:
org.jetbrains.kotlinx:kotlinx-datetime: "0.4.0"
com.expediagroup:
_versions: ["7.0.0-alpha.6", "6.5.2"]
graphql-kotlin-ktor-server: ["7.0.0-alpha.6"]
graphql-kotlin-client: []
graphql-kotlin-client-generator: []
# The default configuration, where the kotlin version doesn't matter.
# This is kept as a separate configuration to make the ones above more obvious and easier to maintain.
#
# Most packages should be placed here.
- kotlin-version: "1.8.20"
plugins:
org.panteleyev.jpackageplugin: "1.5.2"
packages:
org.jetbrains.kotlinx:kotlinx-datetime: "0.4.0"
com.expediagroup:
_versions: ["7.0.0-alpha.6", "6.5.2"]
graphql-kotlin-ktor-server: ["7.0.0-alpha.6"]
graphql-kotlin-client: []
graphql-kotlin-client-generator: []

+ 37
- 37
sync/src/config.py Parādīt failu

@@ -1,3 +1,5 @@
from typing import Optional

import yaml
import logging
from dataclasses import dataclass
@@ -7,21 +9,21 @@ logger = logging.getLogger(__name__)


@dataclass
class KotlinVersion:
version: str
class Configuration:
name: str
kotlin_version: str
plugins: dict[str, str]
packages: list[str]


@dataclass
class Config:
kotlin_versions: list[KotlinVersion]
configurations: list[Configuration]
mirrors: list[str]


def handle_packages(section) -> list[str]:
ignore = ["_kotlin-version", '_versions']
ignore = ['_versions']
result = []

for entry in section:
@@ -75,45 +77,43 @@ def handle_plugins(section) -> dict[str, list[str]]:
return result


def parse_config(path: Path) -> Config:
def parse_config(path: Path) -> Optional[Config]:
with path.open('r') as f:
data = yaml.safe_load(f)

parsed = {}
error: list[str] = []
configurations: list[Configuration] = []

for i, section in enumerate(data.get('configurations')):
if (version := section.get('kotlin-version')) is None:
error.append(f"Configuration {i} is missing 'kotlin-version'")

for version, section in data['kotlin'].items():
plugins = handle_plugins(section.get('plugins', {}))
packages = handle_packages(section.get('packages', {}))
parsed[version] = {
'plugins': plugins,
'packages': packages,
}

# Merge the general plugins and packages with that of the default version
if general := data.get('general'):
if default_version := general.get('_kotlin-version'):
parsed.setdefault(default_version, {})

parsed[default_version]['plugins'].update(
handle_plugins(general.get('plugins', {}))
)

parsed[default_version]['packages'].extend(
handle_packages(general.get('packages', {}))
)
else:
logger.warning(f'"general" section exists, but "_kotlin-version" is not defined. Skipping.')

kotlin_versions = []
configurations.append(Configuration(
name=f'{version}-packages',
kotlin_version=version,
plugins={},
packages=packages
))

for version, section in parsed.items():
kotlin_versions.append(KotlinVersion(version, f'version-packages', {}, section['packages']))

for plugin, plugin_versions in section['plugins'].items():
for plugin, plugin_versions in plugins.items():
for plugin_version in plugin_versions:
kotlin_versions.append(KotlinVersion(version, f'version-plugins-{plugin}', {plugin: plugin_version}, []))

return Config(
kotlin_versions,
data.get('maven', {}).get('mirrors', []),
)
configurations.append(Configuration(
name=f'version-plugins-{plugin}',
kotlin_version=version,
plugins={plugin: plugin_version},
packages=[]
))

if error:
for msg in error:
logger.error(msg)

return None
else:
return Config(
configurations,
data.get('maven', {}).get('mirrors', []),
)

+ 12
- 10
sync/src/main.py Parādīt failu

@@ -4,25 +4,25 @@ import logging
from pathlib import Path

from maven import get_effective_packages
from config import parse_config, KotlinVersion
from config import parse_config, Configuration
from gradle import create_gradle_build, create_gradle_settings

logger = logging.getLogger(__name__)


async def resolve_kotlin(ident: str, kotlin: KotlinVersion, output_dir: Path, mirrors: list[str], gradle_repo: str):
async def resolve_kotlin(ident: str, kotlin: Configuration, output_dir: Path, mirrors: list[str], gradle_repo: str):
resolved_packages = [
resolved
for package in kotlin.packages
for resolved in await get_effective_packages(package, mirrors)
]

path = output_dir / f"{ident}-kotlin-{kotlin.version}"
path = output_dir / f"{ident}-kotlin-{kotlin.kotlin_version}"
path.mkdir()
logger.debug(f'Creating {path}')

logger.debug('Generating build.gradle.kts')
gradle_build = create_gradle_build(kotlin.version, kotlin.plugins, resolved_packages, gradle_repo)
gradle_build = create_gradle_build(kotlin.kotlin_version, kotlin.plugins, resolved_packages, gradle_repo)
(path / 'build.gradle.kts').write_text(gradle_build)

logger.debug('Generating settings.gradle.kts')
@@ -33,17 +33,19 @@ async def resolve_kotlin(ident: str, kotlin: KotlinVersion, output_dir: Path, mi
async def main(package_list: Path, output_dir: Path, gradle_repo: str) -> None:
config = parse_config(package_list)

if not config.kotlin_versions:
print('No packages defined, nothing to do.')
if not config:
print('Error in configuration')
if not config.configurations:
print('No configurations defined, nothing to do.')
elif not config.mirrors:
print('No mirrors defined. Add maven.mirrors in the config file.')
else:
for i, kotlin in enumerate(config.kotlin_versions):
logger.info(f'Resolving kotlin {kotlin.version}')
for i, configuration in enumerate(config.configurations):
logger.info(f'Resolving kotlin {configuration.kotlin_version}')
try:
await resolve_kotlin(str(i), kotlin, output_dir, config.mirrors, gradle_repo)
await resolve_kotlin(str(i), configuration, output_dir, config.mirrors, gradle_repo)
except:
logger.exception(f'Error resolving kotlin version {kotlin.version}')
logger.exception(f'Error resolving kotlin version {configuration.kotlin_version}')


if __name__ == '__main__':


Notiek ielāde…
Atcelt
Saglabāt