From 5209b67d1d70dcdac2fbc4d2e373b1b26f19dd1d Mon Sep 17 00:00:00 2001 From: Paolo Di Tommaso Date: Thu, 9 Apr 2026 12:04:30 +0200 Subject: [PATCH 1/2] Use micromamba/v2 as default build template for conda packages Co-Authored-By: Claude Opus 4.6 (1M context) --- .../groovy/io/seqera/wave/util/ContainerHelper.groovy | 8 ++++---- .../groovy/io/seqera/wave/util/ContainerHelperTest.groovy | 8 ++++---- .../src/main/java/io/seqera/wave/api/BuildTemplate.java | 3 +++ 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/main/groovy/io/seqera/wave/util/ContainerHelper.groovy b/src/main/groovy/io/seqera/wave/util/ContainerHelper.groovy index ba745e1d4..8c2185a9c 100644 --- a/src/main/groovy/io/seqera/wave/util/ContainerHelper.groovy +++ b/src/main/groovy/io/seqera/wave/util/ContainerHelper.groovy @@ -61,12 +61,12 @@ class ContainerHelper { final spec = req.packages // Default templates based on package type (when no explicit template) - if( spec.type == PackagesSpec.Type.CONDA && (!req.buildTemplate || req.buildTemplate==CONDA_MICROMAMBA_V1) ) { - return CondaHelper.containerFile(spec, singularity) - } - if( req.buildTemplate == CONDA_MICROMAMBA_V2 ) { + if( spec.type == PackagesSpec.Type.CONDA && (!req.buildTemplate || req.buildTemplate==CONDA_MICROMAMBA_V2) ) { return CondaHelper.containerFileV2(spec, req.containerImage, singularity) } + if( req.buildTemplate == CONDA_MICROMAMBA_V1 ) { + return CondaHelper.containerFile(spec, singularity) + } if( req.buildTemplate == CONDA_PIXI_V1 ) { return PixiHelper.containerFile(spec, req.containerImage, singularity) } diff --git a/src/test/groovy/io/seqera/wave/util/ContainerHelperTest.groovy b/src/test/groovy/io/seqera/wave/util/ContainerHelperTest.groovy index 9dedebe0b..f97ee79b5 100644 --- a/src/test/groovy/io/seqera/wave/util/ContainerHelperTest.groovy +++ b/src/test/groovy/io/seqera/wave/util/ContainerHelperTest.groovy @@ -52,7 +52,7 @@ class ContainerHelperTest extends Specification { def CONDA_OPTS = new CondaOpts([basePackages: 'foo::one bar::two']) def PACKAGES = ['https://foo.com/lock.yml'] def packages = new PackagesSpec(type: PackagesSpec.Type.CONDA, entries: PACKAGES, channels: CHANNELS, condaOpts: CONDA_OPTS) - def req = new SubmitContainerTokenRequest(packages: packages, format: 'sif') + def req = new SubmitContainerTokenRequest(packages: packages, format: 'sif', buildTemplate: BuildTemplate.CONDA_MICROMAMBA_V1) when: def result = ContainerHelper.containerFileFromRequest(req) @@ -81,7 +81,7 @@ class ContainerHelperTest extends Specification { def CONDA_OPTS = new CondaOpts([basePackages: 'foo::one bar::two']) def PACKAGES = ['https://foo.com/lock.yml'] def packages = new PackagesSpec(type: PackagesSpec.Type.CONDA, entries: PACKAGES, channels: CHANNELS, condaOpts: CONDA_OPTS) - def req = new SubmitContainerTokenRequest(packages: packages) + def req = new SubmitContainerTokenRequest(packages: packages, buildTemplate: BuildTemplate.CONDA_MICROMAMBA_V1) when: def result = ContainerHelper.containerFileFromRequest(req) @@ -109,7 +109,7 @@ class ContainerHelperTest extends Specification { def CONDA_OPTS = new CondaOpts([basePackages: 'foo::one bar::two']) def PACKAGES = ['bwa=0.7.15', 'salmon=1.1.1'] def packages = new PackagesSpec(type: PackagesSpec.Type.CONDA, entries: PACKAGES, channels: CHANNELS, condaOpts: CONDA_OPTS) - def req = new SubmitContainerTokenRequest(packages: packages, format: 'sif') + def req = new SubmitContainerTokenRequest(packages: packages, format: 'sif', buildTemplate: BuildTemplate.CONDA_MICROMAMBA_V1) when: def result = ContainerHelper.containerFileFromRequest(req) @@ -139,7 +139,7 @@ class ContainerHelperTest extends Specification { def CONDA_OPTS = new CondaOpts([basePackages: 'foo::one bar::two']) def PACKAGES = ['bwa=0.7.15', 'salmon=1.1.1'] def packages = new PackagesSpec(type: PackagesSpec.Type.CONDA, entries: PACKAGES, channels: CHANNELS, condaOpts: CONDA_OPTS) - def req = new SubmitContainerTokenRequest(packages: packages) + def req = new SubmitContainerTokenRequest(packages: packages, buildTemplate: BuildTemplate.CONDA_MICROMAMBA_V1) when: def result = ContainerHelper.containerFileFromRequest(req) diff --git a/wave-api/src/main/java/io/seqera/wave/api/BuildTemplate.java b/wave-api/src/main/java/io/seqera/wave/api/BuildTemplate.java index 9e954fe29..d8ad70230 100644 --- a/wave-api/src/main/java/io/seqera/wave/api/BuildTemplate.java +++ b/wave-api/src/main/java/io/seqera/wave/api/BuildTemplate.java @@ -58,6 +58,9 @@ public static String defaultTemplate(PackagesSpec packages) { if (packages == null) { return null; } + if( packages.type == PackagesSpec.Type.CONDA ) { + return CONDA_MICROMAMBA_V2; + } if( packages.type == PackagesSpec.Type.CRAN ) { return CRAN_INSTALLR_V1; } From 827895b1755f38de85ff4a06ab980601c7322bcc Mon Sep 17 00:00:00 2001 From: Paolo Di Tommaso Date: Thu, 9 Apr 2026 12:13:31 +0200 Subject: [PATCH 2/2] Fix BuildTemplateTest to expect CONDA_MICROMAMBA_V2 as default Co-Authored-By: Claude Opus 4.6 (1M context) --- .../src/test/groovy/io/seqera/wave/api/BuildTemplateTest.groovy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wave-api/src/test/groovy/io/seqera/wave/api/BuildTemplateTest.groovy b/wave-api/src/test/groovy/io/seqera/wave/api/BuildTemplateTest.groovy index 71f488f0e..d63af3f7d 100644 --- a/wave-api/src/test/groovy/io/seqera/wave/api/BuildTemplateTest.groovy +++ b/wave-api/src/test/groovy/io/seqera/wave/api/BuildTemplateTest.groovy @@ -30,7 +30,7 @@ class BuildTemplateTest extends Specification { where: PACKAGES | EXPECTED new PackagesSpec(type: PackagesSpec.Type.CRAN) | BuildTemplate.CRAN_INSTALLR_V1 - new PackagesSpec(type: PackagesSpec.Type.CONDA) | null + new PackagesSpec(type: PackagesSpec.Type.CONDA) | BuildTemplate.CONDA_MICROMAMBA_V2 null | null new PackagesSpec() | null }