Skip to content

Commit 29fba51

Browse files
committed
require that the initial path point at a Snakefile
1 parent 8c9a56c commit 29fba51

File tree

2 files changed

+30
-1
lines changed

2 files changed

+30
-1
lines changed

src/main/java/io/dockstore/language/SnakemakeWorkflowPlugin.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ public class SnakemakeWorkflowPlugin extends Plugin {
4040

4141
public static final Logger LOG = LoggerFactory.getLogger(SnakemakeWorkflowPlugin.class);
4242
public static final String SNAKEMAKE_WORKFLOW_CATALOG_YML = "/.snakemake-workflow-catalog.yml";
43+
public static final String INVALID_INITIAL_PATH_MESSAGE = "the primary descriptor path must be the Snakefile";
4344

4445

4546
/**
@@ -63,6 +64,10 @@ public String launchInstructions(String trsID) {
6364

6465
@Override
6566
public VersionTypeValidation validateWorkflowSet(String initialPath, String contents, Map<String, FileMetadata> indexedFiles) {
67+
// if the initial path doesn't point at the Snakefile, the version is invalid
68+
if (!initialPathPattern().matcher(initialPath).matches()) {
69+
return new VersionTypeValidation(false, Map.of(initialPath, INVALID_INITIAL_PATH_MESSAGE));
70+
}
6671
VersionTypeValidation validation = new VersionTypeValidation(indexedFiles.containsKey(SNAKEMAKE_WORKFLOW_CATALOG_YML), new HashMap<>());
6772
// TODO hook up some real validation
6873
return validation;
@@ -86,7 +91,7 @@ public DescriptorLanguage getDescriptorLanguage() {
8691
*/
8792
@Override
8893
public Pattern initialPathPattern() {
89-
return Pattern.compile("workflow/Snakefile");
94+
return Pattern.compile("(/.*)?/[Ss]nakefile");
9095
}
9196

9297
@Override

src/test/java/io/dockstore/language/SnakemakeWorkflowPluginTest.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77

88
import com.google.common.io.Resources;
99
import io.dockstore.common.VersionTypeValidation;
10+
import io.dockstore.language.MinimalLanguageInterface.FileMetadata;
11+
import io.dockstore.language.MinimalLanguageInterface.GenericFileType;
1012
import java.io.File;
1113
import java.io.IOException;
1214
import java.net.URL;
@@ -70,6 +72,28 @@ public void testWorkflowParsingComplex() {
7072
assertTrue(plugin.validateWorkflowSet(initialPath, contents,fileMap).isValid());
7173
}
7274

75+
private static Map<String, FileMetadata> createDummyFileMap(String initialPath) {
76+
return Map.of(
77+
initialPath, new FileMetadata("dummy snakefile content", GenericFileType.IMPORTED_DESCRIPTOR, "1.0"),
78+
SnakemakeWorkflowPlugin.SNAKEMAKE_WORKFLOW_CATALOG_YML, new FileMetadata("dummy workflow catalog content", GenericFileType.IMPORTED_DESCRIPTOR, "1.0")
79+
);
80+
}
81+
82+
@Test
83+
public void testWorkflowPrimaryDescriptorMustBeSnakefile() {
84+
final SnakemakeWorkflowPlugin.SnakemakeWorkflowPluginImpl plugin =
85+
new SnakemakeWorkflowPlugin.SnakemakeWorkflowPluginImpl();
86+
for (String validPath: List.of("/Snakefile", "/workflow/Snakefile", "/snakefile", "/workflow/snakefile")) {
87+
VersionTypeValidation validation = plugin.validateWorkflowSet(validPath, "", createDummyFileMap(validPath));
88+
assertTrue(validation.isValid());
89+
}
90+
for (String invalidPath: List.of("/workflow.wdl", "/data.txt")) {
91+
VersionTypeValidation validation = plugin.validateWorkflowSet(invalidPath, "", createDummyFileMap(invalidPath));
92+
assertFalse(validation.isValid());
93+
assertEquals(validation.getMessage().get(invalidPath), SnakemakeWorkflowPlugin.INVALID_INITIAL_PATH_MESSAGE);
94+
}
95+
}
96+
7397
abstract static class URLFileReader implements MinimalLanguageInterface.FileReader {
7498
// URL to repo
7599
protected final String repo;

0 commit comments

Comments
 (0)