Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 6 additions & 7 deletions src/main/java/io/seqera/wave/util/TemplateUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,7 @@ static protected String condaFileTemplate1(String template, PixiOpts opts) {
final Map<String,String> binding = new HashMap<>();
binding.put("base_image", opts.baseImage);
binding.put("pixi_image", opts.pixiImage);
binding.put("base_packages", pixiAddBasePackage0(opts.basePackages,singularity));
binding.put("base_packages", pixiAddBasePackage0(opts.basePackages));

final String result = renderTemplate0(template, binding, List.of("wave_context_dir"));
return addCommands(result, opts.commands, singularity);
Expand Down Expand Up @@ -192,13 +192,12 @@ private static String mambaInstallBasePackage0(String basePackages, boolean sing
: "&& " + result + " \\";
}

private static String pixiAddBasePackage0(String basePackages, boolean singularity) {
String result = !StringUtils.isEmpty(basePackages)
? String.format("pixi add %s", basePackages)
private static String pixiAddBasePackage0(String basePackages) {
// rendered inline after `pixi add conda-forge::which` so that a single
// `pixi add` command solves the whole environment
return !StringUtils.isEmpty(basePackages)
? " " + basePackages
: null;
return result==null || singularity
? result
: "&& " + result + " \\";
}

static private String addCommands(String result, List<String> commands, boolean singularity) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,13 @@ COPY conda.yml /opt/wave/conda.yml
WORKDIR /opt/wave

RUN pixi init --import /opt/wave/conda.yml \
&& pixi add conda-forge::which \
{{base_packages}}
&& { pixi add conda-forge::which{{base_packages}} > /tmp/pixi.log 2>&1 \
&& cat /tmp/pixi.log \
|| { cat /tmp/pixi.log >&2 && grep -q __cuda /tmp/pixi.log \
&& pixi workspace system-requirements add cuda 99 \
&& export CONDA_OVERRIDE_CUDA="99" \
&& pixi add conda-forge::which{{base_packages}} ; } ; } \
&& pixi install \
&& pixi shell-hook > /shell-hook.sh \
&& echo 'exec "$@"' >> /shell-hook.sh \
&& echo ">> CONDA_LOCK_START" \
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,14 @@ From: {{pixi_image}}
%post
mkdir /opt/wave && cd /opt/wave
pixi init --import /scratch/conda.yml
pixi add conda-forge::which
{{base_packages}}
pixi add conda-forge::which{{base_packages}} > /tmp/pixi.log 2>&1 \
&& cat /tmp/pixi.log \
|| { cat /tmp/pixi.log >&2 && grep -q __cuda /tmp/pixi.log \
&& pixi workspace system-requirements add cuda 99 \
&& export CONDA_OVERRIDE_CUDA="99" \
&& pixi add conda-forge::which{{base_packages}} ; } \
|| exit 1
pixi install
pixi shell-hook > /shell-hook.sh
echo ">> CONDA_LOCK_START"
cat /opt/wave/pixi.lock
Expand Down
18 changes: 14 additions & 4 deletions src/test/groovy/io/seqera/wave/util/ContainerHelperTest.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -634,8 +634,13 @@ class ContainerHelperTest extends Specification {
WORKDIR /opt/wave

RUN pixi init --import /opt/wave/conda.yml \\
&& pixi add conda-forge::which \\
&& pixi add conda-forge::procps-ng \\
&& { pixi add conda-forge::which conda-forge::procps-ng > /tmp/pixi.log 2>&1 \\
&& cat /tmp/pixi.log \\
|| { cat /tmp/pixi.log >&2 && grep -q __cuda /tmp/pixi.log \\
&& pixi workspace system-requirements add cuda 99 \\
&& export CONDA_OVERRIDE_CUDA="99" \\
&& pixi add conda-forge::which conda-forge::procps-ng ; } ; } \\
&& pixi install \\
&& pixi shell-hook > /shell-hook.sh \\
&& echo 'exec "$@"' >> /shell-hook.sh \\
&& echo ">> CONDA_LOCK_START" \\
Expand Down Expand Up @@ -687,8 +692,13 @@ class ContainerHelperTest extends Specification {
WORKDIR /opt/wave

RUN pixi init --import /opt/wave/conda.yml \\
&& pixi add conda-forge::which \\
&& pixi add foo::one bar::two \\
&& { pixi add conda-forge::which foo::one bar::two > /tmp/pixi.log 2>&1 \\
&& cat /tmp/pixi.log \\
|| { cat /tmp/pixi.log >&2 && grep -q __cuda /tmp/pixi.log \\
&& pixi workspace system-requirements add cuda 99 \\
&& export CONDA_OVERRIDE_CUDA="99" \\
&& pixi add conda-forge::which foo::one bar::two ; } ; } \\
&& pixi install \\
&& pixi shell-hook > /shell-hook.sh \\
&& echo 'exec "$@"' >> /shell-hook.sh \\
&& echo ">> CONDA_LOCK_START" \\
Expand Down
4 changes: 2 additions & 2 deletions src/test/groovy/io/seqera/wave/util/PixiHelperTest.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ class PixiHelperTest extends Specification {
result.contains('FROM public.cr.seqera.io/wave/pixi:0.61.0-noble AS build')
result.contains('COPY conda.yml /opt/wave/conda.yml')
result.contains('pixi init --import /opt/wave/conda.yml')
result.contains('pixi add conda-forge::procps-ng')
result.contains('pixi add conda-forge::which conda-forge::procps-ng')
result.contains('pixi shell-hook > /shell-hook.sh')
result.contains('FROM ubuntu:24.04 AS final')
result.contains('COPY --from=build /opt/wave/.pixi/envs/default /opt/wave/.pixi/envs/default')
Expand Down Expand Up @@ -104,7 +104,7 @@ class PixiHelperTest extends Specification {

then:
result.contains('FROM ghcr.io/prefix-dev/pixi:0.47.0-jammy-cuda-12.8.1 AS build')
result.contains('pixi add foo::one bar::two')
result.contains('pixi add conda-forge::which foo::one bar::two')
result.contains('FROM base/image AS final')
}

Expand Down
60 changes: 47 additions & 13 deletions src/test/groovy/io/seqera/wave/util/TemplateUtilsTest.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -358,8 +358,13 @@ class TemplateUtilsTest extends Specification {
WORKDIR /opt/wave

RUN pixi init --import /opt/wave/conda.yml \\
&& pixi add conda-forge::which \\
&& pixi add foo::bar \\
&& { pixi add conda-forge::which foo::bar > /tmp/pixi.log 2>&1 \\
&& cat /tmp/pixi.log \\
|| { cat /tmp/pixi.log >&2 && grep -q __cuda /tmp/pixi.log \\
&& pixi workspace system-requirements add cuda 99 \\
&& export CONDA_OVERRIDE_CUDA="99" \\
&& pixi add conda-forge::which foo::bar ; } ; } \\
&& pixi install \\
&& pixi shell-hook > /shell-hook.sh \\
&& echo 'exec "$@"' >> /shell-hook.sh \\
&& echo ">> CONDA_LOCK_START" \\
Expand Down Expand Up @@ -394,8 +399,13 @@ class TemplateUtilsTest extends Specification {
WORKDIR /opt/wave

RUN pixi init --import /opt/wave/conda.yml \\
&& pixi add conda-forge::which \\
&& pixi add conda-forge::procps-ng \\
&& { pixi add conda-forge::which conda-forge::procps-ng > /tmp/pixi.log 2>&1 \\
&& cat /tmp/pixi.log \\
|| { cat /tmp/pixi.log >&2 && grep -q __cuda /tmp/pixi.log \\
&& pixi workspace system-requirements add cuda 99 \\
&& export CONDA_OVERRIDE_CUDA="99" \\
&& pixi add conda-forge::which conda-forge::procps-ng ; } ; } \\
&& pixi install \\
&& pixi shell-hook > /shell-hook.sh \\
&& echo 'exec "$@"' >> /shell-hook.sh \\
&& echo ">> CONDA_LOCK_START" \\
Expand Down Expand Up @@ -433,8 +443,13 @@ class TemplateUtilsTest extends Specification {
WORKDIR /opt/wave

RUN pixi init --import /opt/wave/conda.yml \\
&& pixi add conda-forge::which \\
&& pixi add conda-forge::procps-ng \\
&& { pixi add conda-forge::which conda-forge::procps-ng > /tmp/pixi.log 2>&1 \\
&& cat /tmp/pixi.log \\
|| { cat /tmp/pixi.log >&2 && grep -q __cuda /tmp/pixi.log \\
&& pixi workspace system-requirements add cuda 99 \\
&& export CONDA_OVERRIDE_CUDA="99" \\
&& pixi add conda-forge::which conda-forge::procps-ng ; } ; } \\
&& pixi install \\
&& pixi shell-hook > /shell-hook.sh \\
&& echo 'exec "$@"' >> /shell-hook.sh \\
&& echo ">> CONDA_LOCK_START" \\
Expand Down Expand Up @@ -684,8 +699,14 @@ class TemplateUtilsTest extends Specification {
%post
mkdir /opt/wave && cd /opt/wave
pixi init --import /scratch/conda.yml
pixi add conda-forge::which
pixi add conda-forge::procps-ng
pixi add conda-forge::which conda-forge::procps-ng > /tmp/pixi.log 2>&1 \\
&& cat /tmp/pixi.log \\
|| { cat /tmp/pixi.log >&2 && grep -q __cuda /tmp/pixi.log \\
&& pixi workspace system-requirements add cuda 99 \\
&& export CONDA_OVERRIDE_CUDA="99" \\
&& pixi add conda-forge::which conda-forge::procps-ng ; } \\
|| exit 1
pixi install
pixi shell-hook > /shell-hook.sh
echo ">> CONDA_LOCK_START"
cat /opt/wave/pixi.lock
Expand All @@ -705,8 +726,14 @@ class TemplateUtilsTest extends Specification {
%post
mkdir /opt/wave && cd /opt/wave
pixi init --import /scratch/conda.yml
pixi add conda-forge::which
pixi add conda-forge::procps-ng
pixi add conda-forge::which conda-forge::procps-ng > /tmp/pixi.log 2>&1 \\
&& cat /tmp/pixi.log \\
|| { cat /tmp/pixi.log >&2 && grep -q __cuda /tmp/pixi.log \\
&& pixi workspace system-requirements add cuda 99 \\
&& export CONDA_OVERRIDE_CUDA="99" \\
&& pixi add conda-forge::which conda-forge::procps-ng ; } \\
|| exit 1
pixi install
pixi shell-hook > /shell-hook.sh
echo ">> CONDA_LOCK_START"
cat /opt/wave/pixi.lock
Expand All @@ -733,7 +760,14 @@ class TemplateUtilsTest extends Specification {
%post
mkdir /opt/wave && cd /opt/wave
pixi init --import /scratch/conda.yml
pixi add conda-forge::which
pixi add conda-forge::which > /tmp/pixi.log 2>&1 \\
&& cat /tmp/pixi.log \\
|| { cat /tmp/pixi.log >&2 && grep -q __cuda /tmp/pixi.log \\
&& pixi workspace system-requirements add cuda 99 \\
&& export CONDA_OVERRIDE_CUDA="99" \\
&& pixi add conda-forge::which ; } \\
|| exit 1
pixi install
pixi shell-hook > /shell-hook.sh
echo ">> CONDA_LOCK_START"
cat /opt/wave/pixi.lock
Expand All @@ -754,7 +788,7 @@ class TemplateUtilsTest extends Specification {
def result = TemplateUtils.condaFileToDockerFileUsingPixi(PIXI_OPTS)

then:
result.contains('pixi add conda-forge::procps-ng')
result.contains('pixi add conda-forge::which conda-forge::procps-ng')
result.contains('RUN apt-get update')
result.contains('RUN apt-get install -y curl')
}
Expand All @@ -770,7 +804,7 @@ class TemplateUtilsTest extends Specification {
def result = TemplateUtils.condaFileToSingularityFileUsingPixi(PIXI_OPTS)

then:
result.contains('pixi add conda-forge::bash')
result.contains('pixi add conda-forge::which conda-forge::bash')
result.contains('%post')
result.contains('apt-get update')
result.contains('apt-get install -y nano')
Expand Down