diff --git a/modules/nextflow/src/main/groovy/nextflow/executor/GridTaskHandler.groovy b/modules/nextflow/src/main/groovy/nextflow/executor/GridTaskHandler.groovy index a1c5dce30c..bab5768c37 100644 --- a/modules/nextflow/src/main/groovy/nextflow/executor/GridTaskHandler.groovy +++ b/modules/nextflow/src/main/groovy/nextflow/executor/GridTaskHandler.groovy @@ -223,7 +223,7 @@ class GridTaskHandler extends TaskHandler implements FusionAwareTask { final launcher = fusionLauncher() final config = task.getContainerConfig() final containerOpts = task.config.getContainerOptions() - final cmd = FusionHelper.runWithContainer(launcher, config, task.getContainer(), containerOpts, submit) + final cmd = FusionHelper.runWithContainer(launcher, config, task.getContainer(), containerOpts, submit, task.getContainerPlatform()) // create an inline script to launch the job execution return '#!/bin/bash\n' + submitDirective(task) + cmd + '\n' } diff --git a/modules/nextflow/src/main/groovy/nextflow/executor/local/LocalTaskHandler.groovy b/modules/nextflow/src/main/groovy/nextflow/executor/local/LocalTaskHandler.groovy index e22f66aaeb..feea7c9311 100644 --- a/modules/nextflow/src/main/groovy/nextflow/executor/local/LocalTaskHandler.groovy +++ b/modules/nextflow/src/main/groovy/nextflow/executor/local/LocalTaskHandler.groovy @@ -156,7 +156,7 @@ class LocalTaskHandler extends TaskHandler implements FusionAwareTask { final launcher = fusionLauncher() final config = task.getContainerConfig() final containerOpts = task.config.getContainerOptions() - final cmd = FusionHelper.runWithContainer(launcher, config, task.getContainer(), containerOpts, submit) + final cmd = FusionHelper.runWithContainer(launcher, config, task.getContainer(), containerOpts, submit, task.getContainerPlatform()) log.debug "Launch cmd line: ${cmd}" final logPath = Files.createTempFile('nf-task','.log') diff --git a/modules/nextflow/src/main/groovy/nextflow/fusion/FusionHelper.groovy b/modules/nextflow/src/main/groovy/nextflow/fusion/FusionHelper.groovy index eb95956f45..b0adf1703f 100644 --- a/modules/nextflow/src/main/groovy/nextflow/fusion/FusionHelper.groovy +++ b/modules/nextflow/src/main/groovy/nextflow/fusion/FusionHelper.groovy @@ -43,7 +43,7 @@ class FusionHelper { return result!=null ? result.toString()=='true' : false } - static String runWithContainer(FusionScriptLauncher launcher, ContainerConfig containerConfig, String containerName, String containerOpts, List runCmd) { + static String runWithContainer(FusionScriptLauncher launcher, ContainerConfig containerConfig, String containerName, String containerOpts, List runCmd, String containerPlatform = null) { if( !containerName ) throw new IllegalArgumentException("Missing task container -- Fusion requires the task to be executed by a container process") final containerBuilder = ContainerBuilder.create(containerConfig, containerName) @@ -51,6 +51,9 @@ class FusionHelper { .addRunOptions(containerOpts) .addRunOptions(containerConfig.getFusionOptions()) + if( containerPlatform ) + containerBuilder.setPlatform(containerPlatform) + // add fusion env vars for(Map.Entry it : launcher.fusionEnv()) { containerBuilder.addEnv("$it.key=$it.value") diff --git a/modules/nextflow/src/test/groovy/nextflow/fusion/FusionHelperTest.groovy b/modules/nextflow/src/test/groovy/nextflow/fusion/FusionHelperTest.groovy index a2de582a17..75632d8eb5 100644 --- a/modules/nextflow/src/test/groovy/nextflow/fusion/FusionHelperTest.groovy +++ b/modules/nextflow/src/test/groovy/nextflow/fusion/FusionHelperTest.groovy @@ -47,6 +47,19 @@ class FusionHelperTest extends Specification { } + def 'should include container platform in fusion command' () { + given: + def launcher = Mock(FusionScriptLauncher) + def config = new DockerConfig([:]) + + when: + def result = FusionHelper.runWithContainer(launcher, config, 'image:1', null, ['echo', 'hello'], 'linux/amd64') + then: + 1 * launcher.fusionEnv() >> [:] + and: + result == "docker run -i --platform linux/amd64 --rm --privileged image:1 echo 'hello'" + } + def 'should return fusion container command' () { given: def launcher = Mock(FusionScriptLauncher) {