From 340d053a487305b52e11b3537e3fb7ff3d942318 Mon Sep 17 00:00:00 2001 From: dgelessus <dgelessus@users.noreply.github.com> Date: Thu, 10 May 2018 12:53:53 +0200 Subject: [PATCH] Add Gradle tasks to create and install the Jupyter kernel spec --- .gitignore | 3 +++ build.gradle | 35 ++++++++++++++++++++++++++++++++ kernelspec/prob2/logo-32x32.png | Bin 0 -> 3004 bytes kernelspec/prob2/logo-64x64.png | Bin 0 -> 7077 bytes 4 files changed, 38 insertions(+) create mode 100644 kernelspec/prob2/logo-32x32.png create mode 100644 kernelspec/prob2/logo-64x64.png diff --git a/.gitignore b/.gitignore index a98bc7b..71c6a89 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ # Gradle .gradle/ /build/ + +# Generated +/kernelspec/prob2/kernel.json diff --git a/build.gradle b/build.gradle index b1843d2..a725fcd 100644 --- a/build.gradle +++ b/build.gradle @@ -1,3 +1,6 @@ +import java.nio.charset.StandardCharsets +import java.nio.file.Files +import java.nio.file.Paths import java.util.concurrent.TimeUnit plugins { @@ -47,3 +50,35 @@ tasks.withType(JavaCompile) { } mainClassName = "de.prob2.jupyter.Main" + +final KERNEL_SPEC_PATH = project.projectDir.toPath().resolve(Paths.get("kernelspec", "prob2")) +final KERNEL_JSON_PATH = KERNEL_SPEC_PATH.resolve("kernel.json") +task createKernelSpec { + dependsOn = [shadowJar] + outputs.files(KERNEL_JSON_PATH.toFile()) + + doFirst { + final jarPath = shadowJar.archivePath + final jsonText = """{ +\t"argv": [ +\t\t"java", +\t\t"-jar", +\t\t"$jarPath", +\t\t"{connection_file}" +\t], +\t"display_name": "ProB 2", +\t"language": "prob" +} +""" + Files.write(KERNEL_JSON_PATH, jsonText.getBytes(StandardCharsets.UTF_8)) + } +} + +task installKernelSpec(type: Exec) { + dependsOn = [createKernelSpec] + executable = "python3" + args = ["-m", "jupyter", "kernelspec", "install", "--sys-prefix", KERNEL_SPEC_PATH.toString()] +} +if (hasProperty("pythonInterpreter")) { + installKernelSpec.executable = pythonInterpreter +} diff --git a/kernelspec/prob2/logo-32x32.png b/kernelspec/prob2/logo-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..2331b0da00935831167950296364775dfe203027 GIT binary patch literal 3004 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 R&8k6dWKUN=mvv4FO#qouV^078 literal 0 HcmV?d00001 diff --git a/kernelspec/prob2/logo-64x64.png b/kernelspec/prob2/logo-64x64.png new file mode 100644 index 0000000000000000000000000000000000000000..44728e831a7df9e5492db14b45e127537e89e55b GIT binary patch literal 7077 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 AasU7T literal 0 HcmV?d00001 -- GitLab