This action sets up a Miniconda installation to use the Conda package and environment manager by either locating the Miniconda installation bundled with the available runners or by installing a specific Miniconda3 version. By default this action will also create a test environment.
Miniconda condabin/ folder is added to PATH and conda is correctly initialized across all platforms.
This action correctly handles activation of conda environments and offers the possibility of automatically activating the test environment on all shells.
See the IMPORTANT notes on additional information on environment activation.
For a full list of available inputs for this action see action.yml.
This example shows how to set a basic python workflow with conda using the crossplatform available shells: bash and pwsh. On this example an environment named test will be created with the specific python-version installed for each opearating system, resulting on 6 build workers.
jobs:
example-1:
name: Ex1 (${{ matrix.python-version }}, ${{ matrix.os }})
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: ["ubuntu-latest", "macos-latest", "windows-latest"]
python-version: ["3.7", "2.7"]
steps:
- uses: goanpeca/setup-miniconda@v1
with:
auto-update-conda: true
python-version: ${{ matrix.python-version }}
- name: Conda info
shell: bash -l {0}
run: conda info
- name: Conda list
shell: pwsh
run: conda listThis example shows how to use all other available shells for specific operating systems. On this example we select to download the latest anaconda version available and create and activate by default an environment named foo.
jobs:
example-2-linux:
name: Ex2 Linux
runs-on: "ubuntu-latest"
steps:
- uses: goanpeca/setup-miniconda@v1
with:
miniconda-version: "latest"
activate-environment: foo
- name: Bash
shell: bash -l {0}
run: |
conda info
conda list
- name: PowerShell Core
shell: pwsh
run: |
conda info
conda list
example-2-mac:
name: Ex2 Mac
runs-on: "macos-latest"
steps:
- uses: goanpeca/setup-miniconda@v1
with:
miniconda-version: "latest"
activate-environment: foo
- name: Sh
shell: sh -l {0}
run: |
conda info
conda list
- name: Bash
shell: bash -l {0}
run: |
conda info
conda list
- name: PowerShell Core
shell: pwsh
run: |
conda info
conda list
example-2-win:
name: Ex2 Windows
runs-on: "windows-latest"
steps:
- uses: goanpeca/setup-miniconda@v1
with:
miniconda-version: "latest"
activate-environment: foo
- name: Bash
shell: bash -l {0}
run: |
conda info
conda list
- name: PowerShell
shell: powershell
run: |
conda info
conda list
- name: PowerShell Core
shell: pwsh
run: |
conda info
conda list
- name: Cmd.exe
shell: cmd /C CALL {0}
run: >-
conda info &&
conda listThis example shows how to use environment.yml for easier creation of test/build environments and .condarc files for fine grained configuration management. On this example we use a custom configuration file, install an environment from a yaml file and disable autoactivating the base environment before activating the anaconda-client-env.
jobs:
example-3:
name: Ex3 Linux
runs-on: "ubuntu-latest"
steps:
- uses: actions/checkout@v2
- uses: goanpeca/setup-miniconda@v1
with:
activate-environment: anaconda-client-env
environment-file: etc/example-environment.yml
python-version: 3.5
condarc-file: etc/example-condarc.yml
auto-activate-base: false
- shell: bash -l {0}
run: |
conda info
conda listThis example shows how to use channels option and other extra options. The priority will be set by the order of the channels.
In this example it will result in:
- conda-forge
- spyder-ide
- defaults
jobs:
example-4:
name: Ex4 Linux
runs-on: "ubuntu-latest"
steps:
- uses: actions/checkout@v2
- uses: goanpeca/setup-miniconda@v1
with:
activate-environment: foo
python-version: 3.6
channels: conda-forge,spyder-ide
allow-softlinks: true
channel-priority: flexible
show-channel-urls: true
use-only-tar-bz2: true
- shell: bash -l {0}
run: |
conda info
conda list
conda config --show-sources
conda config --showAny installer created with constructor
which includes conda can be used in place of Miniconda.
For example, conda-forge maintains additional builds
of miniforge for platforms
not yet supported by Miniconda.
jobs:
example-5:
name: Ex5 Miniforge for PyPy
runs-on: "ubuntu-latest"
steps:
- uses: actions/checkout@v2
- uses: goanpeca/setup-miniconda@v1
with:
installer-url: https://github.com/conda-forge/miniforge/releases/download/4.8.3-2/Miniforge-pypy3-4.8.3-2-Linux-x86_64.sh
allow-softlinks: true
show-channel-urls: true
use-only-tar-bz2: true
- shell: bash -l {0}
run: |
conda info
conda list
conda config --show-sources
conda config --showExperimental! Use mamba to handle conda installs in a faster way. mamba-version accepts a version string x.y (including "*"). It requires you specify conda-forge as part of the channels, ideally with the highest priority.
jobs:
example-6:
name: Ex6 Mamba
runs-on: "ubuntu-latest"
steps:
- uses: actions/checkout@v2
- uses: ./
with:
python-version: 3.6
mamba-version: "*"
channels: conda-forge,defaults
channel-priority: true
activate-environment: anaconda-client-env
environment-file: etc/example-environment.yml
- shell: bash -l {0}
run: |
conda info
conda list
conda config --show-sources
conda config --show
printenv | sort
- shell: bash -l {0}
run: mamba install jupyterlabIf you want to enable package caching for conda you can use the cache action using ~/conda_pkgs_dir as path for conda packages.
The cache will use a explicit key for restoring and saving the cache.
This can be based in the contents of files like:
setup.pyrequirements.txtenvironment.yml
jobs:
caching-example:
name: Caching
runs-on: "ubuntu-latest"
steps:
- uses: actions/checkout@v2
- name: Cache conda
uses: actions/cache@v1
env:
# Increase this value to reset cache if etc/example-environment.yml has not changed
CACHE_NUMBER: 0
with:
path: ~/conda_pkgs_dir
key: ${{ runner.os }}-conda-${{ env.CACHE_NUMBER }}-${{ hashFiles('etc/example-environment.yml') }}
- uses: goanpeca/setup-miniconda@v1
with:
activate-environment: anaconda-client-env
python-version: 3.8
channel-priority: strict
environment-file: etc/example-environment.yml
use-only-tar-bz2: true # IMPORTANT: This needs to be set for caching to work properly!- Bash shells do not use
~/.profileor~/.bashrcso these shells need to be explicitely declared asshell: bash -l {0}on steps that need to be properly activated. This is because bash shells are executed withbash --noprofile --norc -eo pipefail {0}thus ignoring updated on bash profile files made byconda init bash. See Github Actions Documentation and thread. - Sh shells do not use
~/.profileor~/.bashrcso these shells need to be explicitely declared asshell: sh -l {0}on steps that need to be properly activated. This is because sh shells are executed withsh -e {0}thus ignoring updated on bash profile files made byconda init bash. See Github Actions Documentation. - Cmd shells do not run
Autoruncommands so these shells need to be explicitely declared asshell: cmd /C call {0}on steps that need to be properly activated. This is because cmd shells are executed with%ComSpec% /D /E:ON /V:OFF /S /C "CALL "{0}""and the/Dflag disabled execution ofCommand Processor/Autorunwindows registry keys, which is whatconda init cmd.exesets. See Github Actions Documentation. - For caching to work properly, you will need to set the
use-only-tar-bz2option totrue. - Some options (e.g.
use-only-tar-bz2) are not available on the default conda installed on Windows VMs, be sure to useauto-update-condaor provide a version of conda compatible with the option. - If you plan to use a
environment.yamlfile to set up the environment, the action will read thechannelslisted in the key (if found). If you provide thechannelsinput in the action they must not conflict with what was defined inenvironment.yaml, otherwise the conda solver might find conflicts and result in very long install times. - Conda activation does not correctly work on
sh. Please use `bash.
The scripts and documentation in this project are released under the MIT License