Skip to content
Snippets Groups Projects
Commit ff24fb8a authored by Michi Hostettler's avatar Michi Hostettler :coffee:
Browse files

add gradle BOM support

See merge request !93
parents 594b8a71 a55facd7
No related branches found
No related tags found
1 merge request!93add gradle BOM support
Pipeline #8157966 passed
......@@ -18,7 +18,7 @@ class GradleResolver(resolver.Resolver):
@classmethod
def is_available(cls):
# check if CBNG web service is reachable
# check if maven central is reachable
try:
requests.get('http://repo1.maven.org/maven2/', timeout=5.0)
return True
......@@ -36,32 +36,41 @@ class GradleResolver(resolver.Resolver):
try:
groupId = dep['groupId']
artifactId = dep['product'] if 'product' in dep else dep['artifactId']
version = dep['version'] if 'version' in dep else '+'
version = dep.get('version', '+')
if 'repository' in dep:
extra_repos.append(str(dep['repository']))
dep = groupId + ':' + artifactId + ':' + version
dtype = dep.get('type', None)
dep = f'{groupId}:{artifactId}:{version}'
if dtype:
dep = f'{dtype}({dep})'
except Exception as e:
self.log.warning('IGNORING __gradle_deps__ dependency "{0}": invalid dict {1}'.format(dep, e))
self.log.warning(f'IGNORING __gradle_deps__ dependency "{dep}": invalid dict {e}')
continue
dep_type = None
dep_type_match = re.match('(\\w+)\\([\'"]?(.*?)[\'"]?\\)', dep)
if dep_type_match:
dep_type = dep_type_match.group(1)
dep = dep_type_match.group(2)
if not re.match('[a-z0-9_.:+\\-]', dep):
self.log.warning('IGNORING __gradle_deps__ dependency "{0}": contains invalid characters.'.format(dep))
self.log.warning(f'IGNORING __gradle_deps__ dependency "{dep}": contains invalid characters.')
elif dep.count(':') != 2:
self.log.warning(('IGNORING __gradle_deps__ dependency "{0}": it is not in gradle format '
+ '-> "<group>:<product>:<version>"').format(dep))
self.log.warning(f'IGNORING __gradle_deps__ dependency "{dep}": it is not in gradle format '
+ '-> "<group>:<product>:<version>"')
else:
self.log.info('will resolve "{0}" using Gradle'.format(dep))
valid_deps.append(dep)
dep_str = f"'{dep}'"
if dep_type:
dep_str = f'{dep_type}({dep_str})'
self.log.info(f'Resolving {dep_str} using Gradle')
valid_deps.append(dep_str)
gradle_buildscript = '''
plugins {
id "com.jfrog.bintray" version "1.7.3"
id 'java'
}
apply plugin: 'maven-publish'
apply plugin: 'com.jfrog.bintray'
repositories {
mavenCentral()
jcenter()
''' + '\n'.join(extra_repos) + '''
}
......@@ -75,11 +84,11 @@ class GradleResolver(resolver.Resolver):
'''
gradle_buildscript += '\ndependencies {\n'
for dep in valid_deps:
gradle_buildscript += ' pythondeps \'{0}\'\n'.format(dep)
gradle_buildscript += f' pythondeps {dep}\n'
gradle_buildscript += '\n}\n'
self.temp_dir = tempfile.mkdtemp(prefix="cmmn-dep-manager-gradle-resolve-")
self.log.info('Running Gradle in "{0}"...'.format(self.temp_dir))
self.log.info(f'Running Gradle in "{self.temp_dir}"...')
with zipfile.ZipFile(os.path.join(os.path.dirname(__file__), 'gradle-wrapper.zip')) as gradle:
gradle.extractall(self.temp_dir)
with open(os.path.join(self.temp_dir, 'build.gradle'), 'w') as buildfile:
......@@ -92,23 +101,21 @@ class GradleResolver(resolver.Resolver):
def __del__(self):
if os.path.exists(self.temp_dir):
self.log.info('cleaning up {0}'.format(self.temp_dir))
self.log.info(f'cleaning up {self.temp_dir}')
shutil.rmtree(self.temp_dir, ignore_errors=True)
def _clean_jars_dir(self, jars_dir):
# Remove existing jars
old_jars = glob.glob(os.path.join(jars_dir, '*.jar'))
self.log.info('removing {0} jars from {1}'.format(
len(old_jars), jars_dir
))
self.log.info(f'removing {len(old_jars)} jars from {jars_dir}')
for jar in old_jars:
os.remove(jar)
def save_jars(self, dir):
self._clean_jars_dir(dir)
self.log.info('> putting jars into {0}'.format(dir))
self.log.info(f'> putting jars into {dir}')
for jar in glob.glob(os.path.join(self.gradle_dir, 'build', 'jars', '*.jar')):
self.log.info('retrieving {0}'.format(os.path.basename(jar)))
self.log.info(f'retrieving {os.path.basename(jar)}')
shutil.copy(jar, dir)
@classmethod
......
......@@ -22,6 +22,9 @@ def build_gradle_of(resolver):
('junit:junit:4.12', 'junit:junit:4.12'),
({'artifactId': 'junit', 'groupId': 'junit', 'version': '4.12'}, 'junit:junit:4.12'),
({'product': 'junit', 'groupId': 'junit'}, 'junit:junit:+'),
({'groupId': 'org.springframework', 'product': 'spring-bom', 'version': '42', 'type':'platform'}, "platform('org.springframework:spring-bom:42')"),
("enforcedPlatform('org.springframework:spring-bom:42')", "enforcedPlatform('org.springframework:spring-bom:42')"),
("enforcedPlatform(org.springframework:spring-bom:42)", "enforcedPlatform('org.springframework:spring-bom:42')"),
],
)
def test_constructor(specification, expected_spec):
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment