Skip to content
Closed
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.

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.

Choose a reason for hiding this comment

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

Thanks @m-jahn! I see constructor has been updated, and miniconda has been rebuilt (here). Is snakemake github actions now working as usual on your end? Ours is still failing with the same error as before.

Copy link
Member Author

Choose a reason for hiding this comment

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

as of 30 minutes ago our workflows are still failing at the test report step -- so no fix in sight...

Copy link
Member

Choose a reason for hiding this comment

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

Sorry, I was out sick, so I only find time to follow up on this now.

It also still fails for the CI runs where I first noticed this. However, with one difference to the errors that I previously saw. Namely, these kinds of warnings (on the initial installation of miniconda3, which works) are gone:

Warning: warning  libmamba Did not find a repodata record for https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2

So I think the constructor update is actually doing, what the original issue here was about:
conda/conda-libmamba-solver#798

But the re-installation error persists. So I think this might simply be a separate issue. Although I think we should not need to fix this here, but this is probably rather something where the miniforge installer should more gracefully handle existing installations -- as I guess it did before?

I'm looking into this now, hope to have some better idea where to fix this later. And if we get stuck here, I would opt for pinning to the previous working version for now (#49), so everyone can get on with their actual work, not waiting for CI.

Copy link
Member Author

Choose a reason for hiding this comment

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

sounds like a plan 👍

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