Skip to content
Draft
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
11 changes: 11 additions & 0 deletions action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,18 @@ runs:
- snakemake ==${{ inputs.snakemake-version }}
EOF

- name: Check if miniconda is already installed
id: check-miniconda
shell: bash -el {0}
run: |
if [ -d "$HOME/miniconda3" ]; then
echo "installed=true" >> $GITHUB_OUTPUT
else
echo "installed=false" >> $GITHUB_OUTPUT
fi

- name: Setup conda
if: steps.check-miniconda.outputs.installed == 'false'
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If the setup step is skipped, conda won't be set up with .snakemake.environment.yaml as the default environment. Will snakemake then not be available as a consequence? If so, I imagine we need an additional step that installs snakemake into the base environment, or creates a snakemake conda environment, if conda is already available.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

the idea is that this check is specific for the miniconda setup step. when you run this step twice, as we do in the standard snakemake testing workflow, the env is already present and checked out from the first step, including snakemake. the test in this repo succeeded, meaning it works as expected. that's why I would also not test for any conda installation, as this could be the wrong one, only for the specific miniconda3 one.

Copy link

@ezherman ezherman Dec 4, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Gotcha yes, I see the containerize step would trigger a second setup miniconda step so there isn't a need for a second run step.

Regarding testing for miniconda3: if the workflow includes setup-miniconda upstream, then I believe the current implementation would not install snakemake. Or am I missing something? For example, if setup-miniconda is used to enable pytest:

  Testing:
    runs-on: ubuntu-latest
    needs:
      - Linting
      - Formatting
    steps:
      - uses: actions/checkout@v4

      - uses: conda-incubator/setup-miniconda@v3
        with:
          miniforge-version: latest
          use-mamba: true
          environment-file: .test/envs/test.yaml

      - name: Test workflow python functions with pytest
        shell: bash -el {0}
        run: |
          pytest workflow/tests/*.py

      - name: Test workflow
        uses: snakemake/[email protected]
        with:
          directory: .test
          snakefile: workflow/Snakefile
          args: "--use-conda --show-failed-logs --cores 2 --conda-cleanup-pkgs cache"

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Right. This is an edge case. A custom workflow with another setup-miniconda@v3 step would skip installing snakemake and fail. Is this a risk we can take (honest question)? In the end, the github action needs to work mainly for the test workflows, and it does so by wrapping several steps into a single one. In the example you posted, one would need to work around this by replacing the snakemake action with some selected steps.

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's actually an important use-case, in my opinion. An extension is of this is to follow the snakemake-github-action with integration tests, which would not be possible if the action needs to be run in a separate job. Why limit the action to only operate in jobs that only use the snakemake github action?

What could go wrong by checking for a conda installation more generally, and updating/installing the snakemake environment if i conda exists?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

An extension of this is to follow the snakemake-github-action with integration tests, which would not be possible if the action needs to be run in a separate job

You can do this if you first run the snakemake action that installs miniconda, then the tests. The other way around as the example above won't work.

What could go wrong by checking for a conda installation more generally, and updating/installing the snakemake environment if i conda exists?

Possible, but then the action steps will change quite a lot. One would need different checks, like A) is any conda available? If not install miniconda + snakemake env as before. If yes, is snakemake available? If not create only env and activate, not using the setup-miniconda action. And checking for conda does not make sure that mamba is available (don't know what consequences that would have). At least current conda should also use the libmamba solver so should be equally fast.
If you have a good solution in mind don't hesitate to make a commit!

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Perhaps I'm biased as I believe the current implementation would require us to change a few of our github actions workflows, in which we run the snakemake github action as part of a collection of tests in the same job.

I'm heading into a busy week ahead of a few weeks off - I'll do my best to give this some thought and get back to you regarding the checks! Are you aware of anyone else who's opinion we could ask for?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi Ezra, no rush I think this is probably going to be fixed upstream in miniconda, see David's other PR here. I've converted this PR to draft and we might close it without merging.

uses: conda-incubator/setup-miniconda@v3
with:
channels: conda-forge,bioconda
Expand Down
Loading