@@ -171,7 +171,7 @@ private File prepareReference(File genomeCsv, File genomeFasta, NimbleGenome gen
171171 genomeFasta = ensureLocalCopy (genomeFasta , output );
172172
173173 File nimbleJson = new File (getPipelineCtx ().getWorkingDirectory (), FileUtil .getBaseName (genomeFasta ) + ".json" );
174- runUsingDocker (Arrays .asList ("generate" , "/work/" + genomeFasta .getName (), "/work/" + genomeCsv .getName (), "/work/" + nimbleJson .getName ()), output );
174+ runUsingDocker (Arrays .asList ("generate" , "/work/" + genomeFasta .getName (), "/work/" + genomeCsv .getName (), "/work/" + nimbleJson .getName ()), output , "generate-" + genome . genomeId );
175175 if (!nimbleJson .exists ())
176176 {
177177 throw new PipelineJobException ("Unable to find expected file: " + nimbleJson .getPath ());
@@ -271,7 +271,7 @@ private File doAlignment(NimbleGenome genome, File refJson, File bam, PipelineSt
271271 alignArgs .add ("/work/" + resultsTsv .getName ());
272272 alignArgs .add ("/work/" + localBam .getName ());
273273
274- runUsingDocker (alignArgs , output );
274+ runUsingDocker (alignArgs , output , "align-" + genome . genomeId );
275275 if (!resultsTsv .exists ())
276276 {
277277 throw new PipelineJobException ("Expected to find file: " + resultsTsv .getPath ());
@@ -302,9 +302,14 @@ private File doAlignment(NimbleGenome genome, File refJson, File bam, PipelineSt
302302 return resultsTsv ;
303303 }
304304
305+ private File getNimbleDoneFile (File parentDir , String resumeString )
306+ {
307+ return new File (parentDir , "nimble." + resumeString + ".done" );
308+ }
309+
305310 public static String DOCKER_CONTAINER_NAME = "ghcr.io/bimberlab/nimble:latest" ;
306311
307- private void runUsingDocker (List <String > nimbleArgs , PipelineStepOutput output ) throws PipelineJobException
312+ private void runUsingDocker (List <String > nimbleArgs , PipelineStepOutput output , String resumeString ) throws PipelineJobException
308313 {
309314 File localBashScript = new File (getPipelineCtx ().getWorkingDirectory (), "docker.sh" );
310315 output .addIntermediateFile (localBashScript );
@@ -345,9 +350,28 @@ private void runUsingDocker(List<String> nimbleArgs, PipelineStepOutput output)
345350 throw new PipelineJobException (e );
346351 }
347352
348- SimpleScriptWrapper rWrapper = new SimpleScriptWrapper (getPipelineCtx ().getLogger ());
349- rWrapper .setWorkingDir (getPipelineCtx ().getWorkingDirectory ());
350- rWrapper .execute (Arrays .asList ("/bin/bash" , localBashScript .getName ()));
353+ File doneFile = getNimbleDoneFile (getPipelineCtx ().getWorkingDirectory (), resumeString );
354+ output .addIntermediateFile (doneFile );
355+
356+ if (doneFile .exists ())
357+ {
358+ getPipelineCtx ().getLogger ().info ("Nimble already completed, resuming: " + resumeString );
359+ }
360+ else
361+ {
362+ SimpleScriptWrapper rWrapper = new SimpleScriptWrapper (getPipelineCtx ().getLogger ());
363+ rWrapper .setWorkingDir (getPipelineCtx ().getWorkingDirectory ());
364+ rWrapper .execute (Arrays .asList ("/bin/bash" , localBashScript .getName ()));
365+
366+ try
367+ {
368+ FileUtils .touch (doneFile );
369+ }
370+ catch (IOException e )
371+ {
372+ throw new PipelineJobException (e );
373+ }
374+ }
351375 }
352376
353377 private File ensureLocalCopy (File input , PipelineStepOutput output ) throws PipelineJobException
0 commit comments