Kotlin/Bazel: port custom_plugin test to use bazel

This commit is contained in:
Paolo Tranquilli
2024-04-12 08:18:53 +02:00
parent 3d1465439a
commit fc62ed5af0
3 changed files with 47 additions and 55 deletions

View File

@@ -1,53 +0,0 @@
#!/usr/bin/env python3
import subprocess
import shutil
import os
import os.path
import sys
import shlex
def run_process(cmd):
try:
print("Running command: " + shlex.join(cmd))
return subprocess.run(cmd, check=True, capture_output=True)
except subprocess.CalledProcessError as e:
print("In: " + os.getcwd(), file=sys.stderr)
print("Command failed: " + shlex.join(cmd), file=sys.stderr)
print("stdout output:\n" + e.stdout.decode(encoding='UTF-8',
errors='strict'), file=sys.stderr)
print("stderr output:\n" + e.stderr.decode(encoding='UTF-8',
errors='strict'), file=sys.stderr)
raise e
root = '../../../../../../../../..'
sys.path.append(root + '/ql/java/kotlin-extractor')
import kotlin_plugin_versions
defaultKotlinDependencyVersion = kotlin_plugin_versions.get_single_version()
builddir = 'build'
dependency_dir = root + '/resources/kotlin-dependencies/'
dependencies = ['kotlin-stdlib-' + defaultKotlinDependencyVersion +
'.jar', 'kotlin-compiler-' + defaultKotlinDependencyVersion + '.jar']
classpath = ':'.join([dependency_dir + dep for dep in dependencies])
srcs = ['plugin/Plugin.kt']
output = 'plugin.jar'
if os.path.exists(builddir):
shutil.rmtree(builddir)
os.makedirs(builddir)
run_process(['kotlinc',
'-J-Xmx2G',
'-d', builddir,
'-module-name', 'test',
'-no-reflect', '-no-stdlib',
'-jvm-target', '1.8',
'-classpath', classpath] + srcs)
run_process(['jar', '-c', '-f', output,
'-C', builddir, '.',
'-C', 'plugin/resources', 'META-INF'])
shutil.rmtree(builddir)

View File

@@ -0,0 +1,26 @@
load("@codeql_kotlin_defaults//:defaults.bzl", "kotlin_extractor_defaults")
load("@rules_kotlin//kotlin:core.bzl", "kt_kotlinc_options")
load("@rules_kotlin//kotlin:jvm.bzl", "kt_jvm_library")
load("//java/kotlin-extractor:versions.bzl", "get_language_version")
_version = kotlin_extractor_defaults.extractor_version
kt_kotlinc_options(
name = "kotlinc-options",
include_stdlibs = "none",
jvm_target = "1.8",
language_version = get_language_version(_version),
)
kt_jvm_library(
name = "plugin",
srcs = ["Plugin.kt"],
kotlinc_opts = ":kotlinc-options",
module_name = "test",
resource_strip_prefix = "%s/resources" % package_name(),
resources = glob(["resources/**"]),
deps = [
"@kotlin-compiler-%s" % _version,
"@kotlin-stdlib-%s" % _version,
],
)

View File

@@ -1,6 +1,25 @@
from create_database_utils import * from create_database_utils import *
import subprocess
subprocess.call("./build_plugin", shell=True) import pathlib
import shutil
this_dir = pathlib.Path(__file__).resolve().parent
cwd = pathlib.Path.cwd()
builddir = cwd / 'build'
builddir.mkdir(exist_ok=True)
try:
runSuccessfully(['bazel', f'--output_user_root={builddir}', '--max_idle_secs=1', 'build',
'//java/ql/integration-tests/linux-only/kotlin/custom_plugin/plugin', '--spawn_strategy=local',
'--nouse_action_cache', '--noremote_accept_cached', '--noremote_upload_local_results',
f'--symlink_prefix={cwd / "bazel-"}'], cwd=this_dir)
finally:
# rules_python creates a read-only directory in bazel's output, this allows cleanup to succeed
runSuccessfully(['chmod', '-R', '+w', builddir])
shutil.copy(
'bazel-bin/java/ql/integration-tests/linux-only/kotlin/custom_plugin/plugin/plugin.jar', 'plugin.jar')
run_codeql_database_create( run_codeql_database_create(
["kotlinc -J-Xmx2G -Xplugin=plugin.jar a.kt b.kt c.kt d.kt e.kt"], lang="java") ["kotlinc -J-Xmx2G -Xplugin=plugin.jar a.kt b.kt c.kt d.kt e.kt"], lang="java")