diff --git a/mkconcore.py b/mkconcore.py index f2fb6f7..5b0286a 100644 --- a/mkconcore.py +++ b/mkconcore.py @@ -789,8 +789,9 @@ def cleanup_script_files(): containername,sourcecode = nodes_dict[node].split(':') if len(sourcecode)!=0 and sourcecode.find(".")!=-1: #3/28/21 dockername,langext = sourcecode.rsplit(".", 1) - fbuild.write("mkdir docker-"+dockername+"\n") - fbuild.write("cd docker-"+dockername+"\n") + dockerbuilddir = "docker-"+dockername.replace("/", "__").replace("\\", "__") + fbuild.write("mkdir "+dockerbuilddir+"\n") + fbuild.write("cd "+dockerbuilddir+"\n") fbuild.write("cp ../src/Dockerfile."+dockername+" Dockerfile\n") #copy sourcefiles from ./src into corresponding directories fbuild.write("cp ../src/"+sourcecode+" .\n") diff --git a/tests/test_cli.py b/tests/test_cli.py index 4723002..33316a7 100644 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -153,6 +153,36 @@ def test_run_command_subdir_source(self): self.assertEqual(result.exit_code, 0) self.assertTrue(Path('out/src/subdir/script.py').exists()) + def test_run_command_docker_subdir_source_build_paths(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) + + subdir = Path('test-project/src/subdir') + subdir.mkdir(parents=True, exist_ok=True) + shutil.move('test-project/src/script.py', subdir / 'script.py') + + workflow_path = Path('test-project/workflow.graphml') + content = workflow_path.read_text() + content = content.replace('N1:script.py', 'N1:subdir/script.py') + workflow_path.write_text(content) + + result = self.runner.invoke(cli, [ + 'run', + 'test-project/workflow.graphml', + '--source', 'test-project/src', + '--output', 'out', + '--type', 'docker' + ]) + self.assertEqual(result.exit_code, 0) + + build_script = Path('out/build').read_text() + self.assertIn('mkdir docker-subdir__script', build_script) + self.assertIn('cp ../src/Dockerfile.subdir/script Dockerfile', build_script) + self.assertIn('cp ../src/subdir/script.py .', build_script) + self.assertIn('cp ../src/subdir/script.iport concore.iport', build_script) + self.assertIn('cd ..', build_script) + def test_run_command_shared_source_specialization_merges_edge_params(self): with self.runner.isolated_filesystem(temp_dir=self.temp_dir): Path('src').mkdir()