From 6e4e84d73d145a15fc35e334ddd7626a28e22cb5 Mon Sep 17 00:00:00 2001 From: Avinash Kumar Deepak Date: Sat, 25 Jul 2026 13:48:21 +0530 Subject: [PATCH 1/3] docker: add Julia mixed-language study --- concore_cli/commands/build.py | 1 + concoredocker.py | 2 +- demo/sampleJ.graphml | 137 +++++++++++++++++++++++++++++++ tests/test_compose_generation.py | 9 ++ tests/test_concoredocker.py | 28 +++++-- 5 files changed, 168 insertions(+), 9 deletions(-) create mode 100644 demo/sampleJ.graphml diff --git a/concore_cli/commands/build.py b/concore_cli/commands/build.py index 83c2056..86fe0bc 100644 --- a/concore_cli/commands/build.py +++ b/concore_cli/commands/build.py @@ -138,6 +138,7 @@ def _write_docker_compose(output_path, console, zmq_mode=False): compose_lines.append("volumes:") for v in sorted(named_volumes): compose_lines.append(f" {v}:") + compose_lines.append(f" name: {_yaml_quote(v)}") compose_lines.append("") compose_lines.append("networks:") diff --git a/concoredocker.py b/concoredocker.py index 7388f9a..47f52ca 100644 --- a/concoredocker.py +++ b/concoredocker.py @@ -36,7 +36,7 @@ simtime = 0 def _port_path(base, port_num): - return os.path.join(base, str(port_num)) + return base + str(port_num) concore_params_file = os.path.join(_port_path(inpath, 1), "concore.params") concore_maxtime_file = os.path.join(_port_path(inpath, 1), "concore.maxtime") diff --git a/demo/sampleJ.graphml b/demo/sampleJ.graphml new file mode 100644 index 0000000..0178160 --- /dev/null +++ b/demo/sampleJ.graphml @@ -0,0 +1,137 @@ + + + + + + + + + + + + CZ:controller_jl.jl + + + + + + + + + + + PZ:pm.py + + + + + + + + + + CU + + + + + + + + + + + + PYM + + + + + + + + 1638390071794 + Pradeeban + + DEL_NODE + WyIyM2ZlODE5Yi1hMTZjLTQzY2ItOWQ5NC1mM2I1M2QwNjk4NWYiXQ== + + + ADD_NODE + WyJDWjpjb250cm9sbGVyLnB5Iix7IndpZHRoIjoxMzIsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6MTAwLCJ5IjoxMDB9LHt9LCIyM2ZlODE5Yi1hMTZjLTQzY2ItOWQ5NC1mM2I1M2QwNjk4NWYiXQ== + + + + 1638390078744 + Pradeeban + + DEL_NODE + WyI5YzVlMTRjOC0xZjVjLTQyMGUtYTcyZC00NmIyZWZhMjQ0YTYiXQ== + + + ADD_NODE + WyJQWjpwbS5weSIseyJ3aWR0aCI6MTAwLCJoZWlnaHQiOjUwLCJzaGFwZSI6InJlY3RhbmdsZSIsIm9wYWNpdHkiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZmNjMDAiLCJib3JkZXJDb2xvciI6IiMwMDAiLCJib3JkZXJXaWR0aCI6MX0sIm9yZGluIix7IngiOjk5LCJ5IjoyNjJ9LHt9LCI5YzVlMTRjOC0xZjVjLTQyMGUtYTcyZC00NmIyZWZhMjQ0YTYiXQ== + + + + 1638390083602 + Pradeeban + + SET_POS + WyI5YzVlMTRjOC0xZjVjLTQyMGUtYTcyZC00NmIyZWZhMjQ0YTYiLHsieCI6MTEwLCJ5IjoxMTB9LHsieCI6OTksInkiOjI2Mn1d + + + SET_POS + WyI5YzVlMTRjOC0xZjVjLTQyMGUtYTcyZC00NmIyZWZhMjQ0YTYiLHsieCI6OTksInkiOjI2Mn0seyJ4IjoxMTAsInkiOjExMH1d + + + + 1638390087263 + Pradeeban + + DEL_EDGE + WyI0ZTY3NzY3Ny1jYmI5LTRlMGUtOGUwYS0zNDUxMDJkODIzYWYiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiIyM2ZlODE5Yi1hMTZjLTQzY2ItOWQ5NC1mM2I1M2QwNjk4NWYiLCJ0YXJnZXRJRCI6IjljNWUxNGM4LTFmNWMtNDIwZS1hNzJkLTQ2YjJlZmEyNDRhNiIsImxhYmVsIjoiQyIsInN0eWxlIjp7InRoaWNrbmVzcyI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2Y0NDMzNiIsInNoYXBlIjoic29saWQifSwiaWQiOiI0ZTY3NzY3Ny1jYmI5LTRlMGUtOGUwYS0zNDUxMDJkODIzYWYifV0= + + + + 1638390162285 + Pradeeban + + DEL_EDGE + WyI4NzRiYmZiNi02NTMwLTQxMzgtOTI4Zi1kMDI5NDEyZGQwN2UiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiI5YzVlMTRjOC0xZjVjLTQyMGUtYTcyZC00NmIyZWZhMjQ0YTYiLCJ0YXJnZXRJRCI6IjIzZmU4MTliLWExNmMtNDNjYi05ZDk0LWYzYjUzZDA2OTg1ZiIsImxhYmVsIjoiUCIsInN0eWxlIjp7InRoaWNrbmVzcyI6MSwiYmFja2dyb3VuZENvbG9yIjoiIzgyNzcxNyIsInNoYXBlIjoic29saWQifSwiaWQiOiI4NzRiYmZiNi02NTMwLTQxMzgtOTI4Zi1kMDI5NDEyZGQwN2UifV0= + + + + 1638390238818 + Pradeeban + + UPDATE_EDGE + WyI0ZTY3NzY3Ny1jYmI5LTRlMGUtOGUwYS0zNDUxMDJkODIzYWYiLHsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZjQ0MzM2Iiwic2hhcGUiOiJzb2xpZCJ9LCJDIix0cnVlXQ== + + + UPDATE_EDGE + WyI0ZTY3NzY3Ny1jYmI5LTRlMGUtOGUwYS0zNDUxMDJkODIzYWYiLHsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZjQ0MzM2Iiwic2hhcGUiOiJzb2xpZCJ9LCJDVSIsdHJ1ZV0= + + + + 1638390244629 + Pradeeban + + UPDATE_EDGE + WyI4NzRiYmZiNi02NTMwLTQxMzgtOTI4Zi1kMDI5NDEyZGQwN2UiLHsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjODI3NzE3Iiwic2hhcGUiOiJzb2xpZCJ9LCJQIix0cnVlXQ== + + + UPDATE_EDGE + WyI4NzRiYmZiNi02NTMwLTQxMzgtOTI4Zi1kMDI5NDEyZGQwN2UiLHsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjODI3NzE3Iiwic2hhcGUiOiJzb2xpZCJ9LCJQWU0iLHRydWVd + + + + diff --git a/tests/test_compose_generation.py b/tests/test_compose_generation.py index ba57ce5..4eb501f 100644 --- a/tests/test_compose_generation.py +++ b/tests/test_compose_generation.py @@ -27,6 +27,15 @@ def test_compose_has_network_section(tmp_path): assert "networks:" in content +def test_compose_preserves_named_volume(tmp_path): + (tmp_path / "run").write_text( + "docker run --name node1 -v CU:/out1 concore/py &" + ) + path = _write_docker_compose(tmp_path, Console(quiet=True)) + content = path.read_text() + assert " CU:\n name: 'CU'" in content + + def test_compose_depends_on_second_service(tmp_path): _fake_run_script( tmp_path, diff --git a/tests/test_concoredocker.py b/tests/test_concoredocker.py index 2d8d8fa..15ff939 100644 --- a/tests/test_concoredocker.py +++ b/tests/test_concoredocker.py @@ -44,6 +44,14 @@ def test_returns_default_for_bad_syntax(self, temp_dir): assert result == "fallback" +class TestDockerPaths: + def test_port_path_matches_docker_mounts(self): + from concoredocker import _port_path + + assert _port_path("/in", 1) == "/in1" + assert _port_path("/out", 2) == "/out2" + + class TestUnchanged: def test_returns_true_when_unchanged(self): import concoredocker @@ -89,9 +97,10 @@ def test_writes_list_with_simtime(self, temp_dir): import concoredocker old_outpath = concoredocker.outpath - outdir = os.path.join(temp_dir, "1") + outpath = os.path.join(temp_dir, "out") + outdir = outpath + "1" os.makedirs(outdir) - concoredocker.outpath = temp_dir + concoredocker.outpath = outpath concoredocker.simtime = 5.0 concoredocker.write(1, "testfile", [1.0, 2.0], delta=0) @@ -105,9 +114,10 @@ def test_writes_with_delta(self, temp_dir): import concoredocker old_outpath = concoredocker.outpath - outdir = os.path.join(temp_dir, "1") + outpath = os.path.join(temp_dir, "out") + outdir = outpath + "1" os.makedirs(outdir) - concoredocker.outpath = temp_dir + concoredocker.outpath = outpath concoredocker.simtime = 10.0 concoredocker.write(1, "testfile", [3.0], delta=2) @@ -126,9 +136,10 @@ def test_reads_and_parses_data(self, temp_dir): old_inpath = concoredocker.inpath old_delay = concoredocker.delay - indir = os.path.join(temp_dir, "1") + inpath = os.path.join(temp_dir, "in") + indir = inpath + "1" os.makedirs(indir) - concoredocker.inpath = temp_dir + concoredocker.inpath = inpath concoredocker.delay = 0.001 with open(os.path.join(indir, "data"), "w") as f: @@ -149,9 +160,10 @@ def test_returns_default_when_file_missing(self, temp_dir): old_inpath = concoredocker.inpath old_delay = concoredocker.delay - indir = os.path.join(temp_dir, "1") + inpath = os.path.join(temp_dir, "in") + indir = inpath + "1" os.makedirs(indir) - concoredocker.inpath = temp_dir + concoredocker.inpath = inpath concoredocker.delay = 0.001 concoredocker.s = "" From ec2a5fbb9fa735f318d7675ae84036f6c4582855 Mon Sep 17 00:00:00 2001 From: Avinash Kumar Deepak Date: Sat, 25 Jul 2026 14:01:28 +0530 Subject: [PATCH 2/3] demo: remove copied graph history --- demo/sampleJ.graphml | 84 -------------------------------------------- 1 file changed, 84 deletions(-) diff --git a/demo/sampleJ.graphml b/demo/sampleJ.graphml index 0178160..27a89ae 100644 --- a/demo/sampleJ.graphml +++ b/demo/sampleJ.graphml @@ -49,89 +49,5 @@ - - 1638390071794 - Pradeeban - - DEL_NODE - WyIyM2ZlODE5Yi1hMTZjLTQzY2ItOWQ5NC1mM2I1M2QwNjk4NWYiXQ== - - - ADD_NODE - WyJDWjpjb250cm9sbGVyLnB5Iix7IndpZHRoIjoxMzIsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6MTAwLCJ5IjoxMDB9LHt9LCIyM2ZlODE5Yi1hMTZjLTQzY2ItOWQ5NC1mM2I1M2QwNjk4NWYiXQ== - - - - 1638390078744 - Pradeeban - - DEL_NODE - WyI5YzVlMTRjOC0xZjVjLTQyMGUtYTcyZC00NmIyZWZhMjQ0YTYiXQ== - - - ADD_NODE - WyJQWjpwbS5weSIseyJ3aWR0aCI6MTAwLCJoZWlnaHQiOjUwLCJzaGFwZSI6InJlY3RhbmdsZSIsIm9wYWNpdHkiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZmNjMDAiLCJib3JkZXJDb2xvciI6IiMwMDAiLCJib3JkZXJXaWR0aCI6MX0sIm9yZGluIix7IngiOjk5LCJ5IjoyNjJ9LHt9LCI5YzVlMTRjOC0xZjVjLTQyMGUtYTcyZC00NmIyZWZhMjQ0YTYiXQ== - - - - 1638390083602 - Pradeeban - - SET_POS - WyI5YzVlMTRjOC0xZjVjLTQyMGUtYTcyZC00NmIyZWZhMjQ0YTYiLHsieCI6MTEwLCJ5IjoxMTB9LHsieCI6OTksInkiOjI2Mn1d - - - SET_POS - WyI5YzVlMTRjOC0xZjVjLTQyMGUtYTcyZC00NmIyZWZhMjQ0YTYiLHsieCI6OTksInkiOjI2Mn0seyJ4IjoxMTAsInkiOjExMH1d - - - - 1638390087263 - Pradeeban - - DEL_EDGE - WyI0ZTY3NzY3Ny1jYmI5LTRlMGUtOGUwYS0zNDUxMDJkODIzYWYiXQ== - - - ADD_EDGE - W3sic291cmNlSUQiOiIyM2ZlODE5Yi1hMTZjLTQzY2ItOWQ5NC1mM2I1M2QwNjk4NWYiLCJ0YXJnZXRJRCI6IjljNWUxNGM4LTFmNWMtNDIwZS1hNzJkLTQ2YjJlZmEyNDRhNiIsImxhYmVsIjoiQyIsInN0eWxlIjp7InRoaWNrbmVzcyI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2Y0NDMzNiIsInNoYXBlIjoic29saWQifSwiaWQiOiI0ZTY3NzY3Ny1jYmI5LTRlMGUtOGUwYS0zNDUxMDJkODIzYWYifV0= - - - - 1638390162285 - Pradeeban - - DEL_EDGE - WyI4NzRiYmZiNi02NTMwLTQxMzgtOTI4Zi1kMDI5NDEyZGQwN2UiXQ== - - - ADD_EDGE - W3sic291cmNlSUQiOiI5YzVlMTRjOC0xZjVjLTQyMGUtYTcyZC00NmIyZWZhMjQ0YTYiLCJ0YXJnZXRJRCI6IjIzZmU4MTliLWExNmMtNDNjYi05ZDk0LWYzYjUzZDA2OTg1ZiIsImxhYmVsIjoiUCIsInN0eWxlIjp7InRoaWNrbmVzcyI6MSwiYmFja2dyb3VuZENvbG9yIjoiIzgyNzcxNyIsInNoYXBlIjoic29saWQifSwiaWQiOiI4NzRiYmZiNi02NTMwLTQxMzgtOTI4Zi1kMDI5NDEyZGQwN2UifV0= - - - - 1638390238818 - Pradeeban - - UPDATE_EDGE - WyI0ZTY3NzY3Ny1jYmI5LTRlMGUtOGUwYS0zNDUxMDJkODIzYWYiLHsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZjQ0MzM2Iiwic2hhcGUiOiJzb2xpZCJ9LCJDIix0cnVlXQ== - - - UPDATE_EDGE - WyI0ZTY3NzY3Ny1jYmI5LTRlMGUtOGUwYS0zNDUxMDJkODIzYWYiLHsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZjQ0MzM2Iiwic2hhcGUiOiJzb2xpZCJ9LCJDVSIsdHJ1ZV0= - - - - 1638390244629 - Pradeeban - - UPDATE_EDGE - WyI4NzRiYmZiNi02NTMwLTQxMzgtOTI4Zi1kMDI5NDEyZGQwN2UiLHsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjODI3NzE3Iiwic2hhcGUiOiJzb2xpZCJ9LCJQIix0cnVlXQ== - - - UPDATE_EDGE - WyI4NzRiYmZiNi02NTMwLTQxMzgtOTI4Zi1kMDI5NDEyZGQwN2UiLHsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjODI3NzE3Iiwic2hhcGUiOiJzb2xpZCJ9LCJQWU0iLHRydWVd - - From 3f3a2621e0095b12199813ed92f355baf0034648 Mon Sep 17 00:00:00 2001 From: Avinash Kumar Deepak Date: Sat, 25 Jul 2026 15:20:24 +0530 Subject: [PATCH 3/3] tests: format Compose volume test --- tests/test_compose_generation.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/tests/test_compose_generation.py b/tests/test_compose_generation.py index 4eb501f..81ef087 100644 --- a/tests/test_compose_generation.py +++ b/tests/test_compose_generation.py @@ -28,9 +28,7 @@ def test_compose_has_network_section(tmp_path): def test_compose_preserves_named_volume(tmp_path): - (tmp_path / "run").write_text( - "docker run --name node1 -v CU:/out1 concore/py &" - ) + (tmp_path / "run").write_text("docker run --name node1 -v CU:/out1 concore/py &") path = _write_docker_compose(tmp_path, Console(quiet=True)) content = path.read_text() assert " CU:\n name: 'CU'" in content