diff --git a/Dockerfile.java b/Dockerfile.java index b78f1e6..f8b0512 100644 --- a/Dockerfile.java +++ b/Dockerfile.java @@ -11,4 +11,4 @@ WORKDIR /app COPY --from=builder /build/*.class /app/ -COPY --from=builder /opt/jeromq.jar /app/jeromq.jar \ No newline at end of file +COPY --from=builder /opt/jeromq.jar /app/jeromq.jar diff --git a/mkconcore.py b/mkconcore.py index 514e384..78c8707 100644 --- a/mkconcore.py +++ b/mkconcore.py @@ -616,7 +616,7 @@ def cleanup_script_files(): fcopy.write(fsource.read()) fsource.close() -if 'java' in required_langs and concoretype != "docker": +if 'java' in required_langs: try: fsource = open(CONCOREPATH+"/concore.java") except (FileNotFoundError, IOError): @@ -625,6 +625,10 @@ def cleanup_script_files(): with open(outdir+"/src/concore.java","w") as fcopy: fcopy.write(fsource.read()) fsource.close() + if os.path.exists(CONCOREPATH+"/concoredocker.java"): + with open(CONCOREPATH+"/concoredocker.java") as fdocker: + with open(outdir+"/src/concoredocker.java","w") as fcopy: + fcopy.write(fdocker.read()) if 'm' in required_langs: try: @@ -755,6 +759,9 @@ def cleanup_script_files(): elif langext == "sh": # 5/19/21 src_path = CONCOREPATH+"/Dockerfile.sh" logging.info("assuming .sh extension for Dockerfile") + elif langext == "java": + src_path = CONCOREPATH+"/Dockerfile.java" + logging.info("assuming .java extension for Dockerfile") else: src_path = CONCOREPATH+"/Dockerfile.m" logging.info("assuming .m extension for Dockerfile") @@ -778,6 +785,9 @@ def cleanup_script_files(): if langext=="v": fcopy.write('RUN iverilog ./'+sourcecode+'\n') # 7/02/21 fcopy.write('CMD ["./a.out"]\n') # 7/02/21 + if langext=="java": + javaclass = os.path.splitext(os.path.basename(sourcecode))[0] + fcopy.write('CMD ["java", "-cp", ".:/app/jeromq.jar", "'+javaclass+'"]\n') fbuild.write('#!/bin/bash' + "\n") for node in nodes_dict: @@ -797,6 +807,10 @@ def cleanup_script_files(): fbuild.write("cp ../src/concore.hpp .\n") elif langext == "v": #6/25/21 fbuild.write("cp ../src/concore.v .\n") + elif langext == "java": + fbuild.write("cp ../src/concore.java .\n") + if os.path.exists(os.path.join(CONCOREPATH, "concoredocker.java")): + fbuild.write("cp ../src/concoredocker.java .\n") if langext == "m": fbuild.write("cp ../src/concore_*.m .\n") fbuild.write("cp ../src/import_concore.m .\n") @@ -1040,6 +1054,8 @@ def cleanup_script_files(): fbuild.write("copy .\\src\\concore.v .\\" + containername + "\\concore.v\n") elif langext == "java": fbuild.write("copy .\\src\\concore.java .\\" + containername + "\\concore.java\n") + if os.path.exists(os.path.join(CONCOREPATH, "concoredocker.java")): + fbuild.write("copy .\\src\\concoredocker.java .\\" + containername + "\\concoredocker.java\n") elif langext == "m": # 4/2/21 fbuild.write("copy .\\src\\concore_*.m .\\" + containername + "\\\n") fbuild.write("copy .\\src\\import_concore.m .\\" + containername + "\\\n") @@ -1059,6 +1075,8 @@ def cleanup_script_files(): fbuild.write("cp ./src/concore.v ./"+containername+"/concore.v\n") elif langext == "java": fbuild.write("cp ./src/concore.java ./"+containername+"/concore.java\n") + if os.path.exists(os.path.join(CONCOREPATH, "concoredocker.java")): + fbuild.write("cp ./src/concoredocker.java ./"+containername+"/concoredocker.java\n") elif langext == "m": # 4/2/21 fbuild.write("cp ./src/concore_*.m ./"+containername+"/\n") fbuild.write("cp ./src/import_concore.m ./"+containername+"/\n") diff --git a/tests/test_cli.py b/tests/test_cli.py index 63d3cb4..6c5e4fe 100644 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -272,6 +272,61 @@ def test_build_command_docker_subdir_source_build_paths(self): self.assertIn("cp ../src/subdir/script.iport concore.iport", build_script) self.assertIn("cd ..", build_script) + def test_build_command_docker_java_node(self): + with self.runner.isolated_filesystem(temp_dir=self.temp_dir): + result = self.runner.invoke(cli, ["init", "test-project"]) + self.assertEqual(result.exit_code, 0) + + src_dir = Path("test-project/src") + script_py = src_dir / "script.py" + if script_py.exists(): + script_py.unlink() + + java_file = src_dir / "Script.java" + java_file.write_text( + "public class Script { public static void main(String[] args) {} }\n" + ) + + workflow_path = Path("test-project/workflow.graphml") + content = workflow_path.read_text() + content = content.replace("N1:script.py", "N1:Script.java") + workflow_path.write_text(content) + + result = self.runner.invoke( + cli, + [ + "build", + "test-project/workflow.graphml", + "--source", + "test-project/src", + "--output", + "out", + "--type", + "docker", + ], + ) + self.assertEqual(result.exit_code, 0) + + dockerfile_path = Path("out/src/Dockerfile.Script") + self.assertTrue(dockerfile_path.exists()) + dockerfile_content = dockerfile_path.read_text() + self.assertIn("eclipse-temurin:17-jdk-alpine", dockerfile_content) + self.assertNotIn("octave", dockerfile_content.lower()) + self.assertIn( + 'CMD ["java", "-cp", ".:/app/jeromq.jar", "Script"]', + dockerfile_content, + ) + + self.assertTrue(Path("out/src/concore.java").exists()) + self.assertTrue(Path("out/src/concoredocker.java").exists()) + + build_script = Path("out/build").read_text() + self.assertIn("mkdir docker-Script", build_script) + self.assertIn("cp ../src/Dockerfile.Script Dockerfile", build_script) + self.assertIn("cp ../src/Script.java .", build_script) + self.assertIn("cp ../src/concore.java .", build_script) + self.assertIn("cp ../src/concoredocker.java .", build_script) + def test_build_command_compose_requires_docker_type(self): with self.runner.isolated_filesystem(temp_dir=self.temp_dir): result = self.runner.invoke(cli, ["init", "test-project"])