Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add activate-environment option #108

Merged
merged 23 commits into from
May 11, 2024
Merged
2 changes: 1 addition & 1 deletion .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ jobs:
run: |
set -euo pipefail
latest_version="$(jq -r '.version' package.json)"
count_expected=13
count_expected=15
count_actual="$(grep -c "setup-pixi@v$latest_version" README.md || true)"
if [ "$count_actual" -ne "$count_expected" ]; then
echo "::error file=README.md::Expected $count_expected mentions of \`setup-pixi@v$latest_version\` in README.md, but found $count_actual."
Expand Down
109 changes: 108 additions & 1 deletion .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -693,7 +693,7 @@ jobs:
cache-write: false
cache-key: test-cache-${{ github.sha }}-${{ github.run_attempt }}-
# check the action logs to see if the cache write was skipped

pyproject:
timeout-minutes: 10
runs-on: ubuntu-latest
Expand All @@ -717,6 +717,113 @@ jobs:
cache: true
manifest-path: test/pyproject-manifest/pyproject.toml

environment-activation-unix:
strategy:
matrix:
os: [ubuntu-latest, macos-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- name: Move pixi.toml
run: mv test/default/* .
- uses: ./
with:
activate-environment: true
borchero marked this conversation as resolved.
Show resolved Hide resolved
- run: which python | grep '.pixi/envs/default/bin/python'
borchero marked this conversation as resolved.
Show resolved Hide resolved
- run: env | grep CONDA_PREFIX
- run: '[[ $PIXI_ENVIRONMENT_NAME = "default" ]]'

environment-activation-windows-bash:
borchero marked this conversation as resolved.
Show resolved Hide resolved
runs-on: windows-latest
defaults:
run:
shell: bash
steps:
- uses: actions/checkout@v4
- name: Move pixi.toml
run: mv test/default/* .
- uses: ./
with:
activate-environment: true
- run: which python | grep '.pixi/envs/default/python'
- run: env | grep CONDA_PREFIX
- run: '[[ $PIXI_ENVIRONMENT_NAME = "default" ]]'

environment-activation-windows-pwsh:
runs-on: windows-latest
defaults:
run:
shell: pwsh
steps:
- uses: actions/checkout@v4
- name: Move pixi.toml
run: mv test/default/* .
- uses: ./
with:
activate-environment: true
- run: if (-Not (Get-Command python).Path -like '*\.pixi\envs\default\python') { exit 1 }
- run: if (!$env:CONDA_PREFIX) { exit 1 }
- run: if ($env:PIXI_ENVIRONMENT_NAME -ne "default") { exit 1 }

environment-activation-windows-cmd:
runs-on: windows-latest
defaults:
run:
shell: cmd
steps:
- uses: actions/checkout@v4
- name: Move pixi.toml
run: mv test/default/* .
- uses: ./
with:
activate-environment: true
- run: where python | findstr "\.pixi\\envs\\default\\python.exe"
- run: set | findstr CONDA_PREFIX
- run: |
if defined PIXI_ENVIRONMENT_NAME (
if "%PIXI_ENVIRONMENT_NAME%" NEQ "default" (
exit 1
)
)
environment-activation-false:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Move pixi.toml
run: mv test/default/* .
- uses: ./
with:
activate-environment: false
- run: '[[ $PIXI_ENVIRONMENT_NAME = "" ]]'

environment-activation-explicit-env:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Move pixi.toml
run: mv test/multiple-environments/* .
- uses: ./
with:
environments: py311
activate-environment: true
- run: which python | grep '.pixi/envs/py311/bin/python'
- run: '[[ $PIXI_ENVIRONMENT_NAME = "py311" ]]'

environment-activation-multiple-env:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Move pixi.toml
run: mv test/multiple-environments/* .
- uses: ./
with:
environments: >-
py311 py312
activate-environment: py311
- run: which python | grep '.pixi/envs/py311/bin/python'
- run: '[[ $PIXI_ENVIRONMENT_NAME = "py311" ]]'

# not properly testable
# https://github.com/actions/runner/issues/2347
# https://github.com/orgs/community/discussions/15452
Expand Down
52 changes: 39 additions & 13 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ GitHub Action to set up the [pixi](https://github.com/prefix-dev/pixi) package m
## Usage

```yml
- uses: prefix-dev/setup-pixi@v0.6.0
- uses: prefix-dev/setup-pixi@v0.7.0
with:
pixi-version: v0.21.1
cache: true
Expand All @@ -34,7 +34,7 @@ GitHub Action to set up the [pixi](https://github.com/prefix-dev/pixi) package m
> [!WARNING]
> Since pixi is not yet stable, the API of this action may change between minor versions.
> Please pin the versions of this action to a specific version (i.e., `prefix-dev/setup-pixi@v0.6.0`) to avoid breaking changes.
> Please pin the versions of this action to a specific version (i.e., `prefix-dev/setup-pixi@v0.7.0`) to avoid breaking changes.
> You can automatically update the version of this action by using [Dependabot](https://docs.github.com/en/code-security/dependabot/working-with-dependabot/keeping-your-actions-up-to-date-with-dependabot).
>
> Put the following in your `.github/dependabot.yml` file to enable Dependabot for your GitHub Actions:
Expand Down Expand Up @@ -73,7 +73,7 @@ In order to not exceed the [10 GB cache size limit](https://docs.github.com/en/a
This can be done by setting the `cache-write` argument.

```yml
- uses: prefix-dev/setup-pixi@v0.6.0
- uses: prefix-dev/setup-pixi@v0.7.0
with:
cache: true
cache-write: ${{ github.event_name == 'push' && github.ref_name == 'main' }}
Expand Down Expand Up @@ -118,7 +118,7 @@ test:
environment: [py311, py312]
steps:
- uses: actions/checkout@v4
- uses: prefix-dev/setup-pixi@v0.6.0
- uses: prefix-dev/setup-pixi@v0.7.0
with:
environments: ${{ matrix.environment }}
```
Expand All @@ -128,7 +128,7 @@ test:
The following example will install both the `py311` and the `py312` environment on the runner.

```yml
- uses: prefix-dev/setup-pixi@v0.6.0
- uses: prefix-dev/setup-pixi@v0.7.0
with:
# separated by spaces
environments: >-
Expand Down Expand Up @@ -163,7 +163,7 @@ Specify the token using the `auth-token` input argument.
This form of authentication (bearer token in the request headers) is mainly used at [prefix.dev](https://prefix.dev).

```yml
- uses: prefix-dev/setup-pixi@v0.6.0
- uses: prefix-dev/setup-pixi@v0.7.0
with:
auth-host: prefix.dev
auth-token: ${{ secrets.PREFIX_DEV_TOKEN }}
Expand All @@ -175,7 +175,7 @@ Specify the username and password using the `auth-username` and `auth-password`
This form of authentication (HTTP Basic Auth) is used in some enterprise environments with [artifactory](https://jfrog.com/artifactory) for example.

```yml
- uses: prefix-dev/setup-pixi@v0.6.0
- uses: prefix-dev/setup-pixi@v0.7.0
with:
auth-host: custom-artifactory.com
auth-username: ${{ secrets.PIXI_USERNAME }}
Expand All @@ -188,7 +188,7 @@ Specify the conda-token using the `conda-token` input argument.
This form of authentication (token is encoded in URL: `https://my-quetz-instance.com/t/<token>/get/custom-channel`) is used at [anaconda.org](https://anaconda.org) or with [quetz instances](https://github.com/mamba-org/quetz).

```yml
- uses: prefix-dev/setup-pixi@v0.6.0
- uses: prefix-dev/setup-pixi@v0.7.0
with:
auth-host: anaconda.org # or my-quetz-instance.com
conda-token: ${{ secrets.CONDA_TOKEN }}
Expand Down Expand Up @@ -228,13 +228,39 @@ If you want to use PowerShell, you need to specify `-Command` as well.
> There are some custom shells provided by GitHub that have slightly different behavior, see [`jobs.<job_id>.steps[*].shell`](https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsshell) in the documentation.
> See the [official documentation](https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#custom-shell) and [ADR 0277](https://github.com/actions/runner/blob/main/docs/adrs/0277-run-action-shell-options.md) for more information about how the `shell:` input works in GitHub Actions.

### Environment activation

Instead of using a custom shell wrapper, you can also make all pixi-installed binaries available to subsequent steps by "activating" the installed environment in the currently running job.
To this end, `setup-pixi` adds all environment variables set when executing `pixi run` to `$GITHUB_ENV` and, similarly, adds all path modifications to `$GITHUB_PATH`.
As a result, all installed binaries can be accessed without having to call `pixi run`.

```yml
- uses: prefix-dev/[email protected]
with:
activate-environment: true
```

If you are installing multiple environments, you will need to specify the name of the environment that you want to be activated.

```yml
- uses: prefix-dev/[email protected]
with:
environments: >-
py311
py312
activate-environment: py311
```

Activating an environment may be more useful than using a custom shell wrapper as it allows non-shell based steps to access binaries on the path.
However, be aware that this option augments the environment of your job.

### `--frozen` and `--locked`

You can specify whether `setup-pixi` should run `pixi install --frozen` or `pixi install --locked` depending on the `frozen` or the `locked` input argument.
See the [official documentation](https://prefix.dev/docs/pixi/cli#install) for more information about the `--frozen` and `--locked` flags.

```yml
- uses: prefix-dev/setup-pixi@v0.6.0
- uses: prefix-dev/setup-pixi@v0.7.0
with:
locked: true
# or
Expand All @@ -253,7 +279,7 @@ The first one is the debug logging of the action itself.
This can be enabled by running the action with the `RUNNER_DEBUG` environment variable set to `true`.

```yml
- uses: prefix-dev/setup-pixi@v0.6.0
- uses: prefix-dev/setup-pixi@v0.7.0
env:
RUNNER_DEBUG: true
```
Expand All @@ -271,7 +297,7 @@ The second type is the debug logging of the pixi executable.
This can be specified by setting the `log-level` input.

```yml
- uses: prefix-dev/setup-pixi@v0.6.0
- uses: prefix-dev/setup-pixi@v0.7.0
with:
# one of `q`, `default`, `v`, `vv`, or `vvv`.
log-level: vvv
Expand All @@ -297,7 +323,7 @@ If nothing is specified, `post-cleanup` will default to `true`.
On self-hosted runners, you also might want to alter the default pixi install location to a temporary location. You can use `pixi-bin-path: ${{ runner.temp }}/bin/pixi` to do this.

```yml
- uses: prefix-dev/setup-pixi@v0.6.0
- uses: prefix-dev/setup-pixi@v0.7.0
with:
post-cleanup: true
# ${{ runner.temp }}\Scripts\pixi.exe on Windows
Expand All @@ -313,7 +339,7 @@ You can also use a preinstalled local version of pixi on the runner by not setti
This can be overwritten by setting the `manifest-path` input argument.

```yml
- uses: prefix-dev/setup-pixi@v0.6.0
- uses: prefix-dev/setup-pixi@v0.7.0
with:
manifest-path: pyproject.toml
```
Expand Down
8 changes: 7 additions & 1 deletion action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,14 @@ inputs:
environments:
description: |
A space-separated list of environments to install. If not specified, only the default environment is installed.
activate-environment:
description: |
If the installed environment should be "activated" for the current job, modifying `$GITHUB_ENV` and
`$GITHUB_PATH`. If more than one environment is specified in `environments`, this must be the name of the
environment. Defaults to `false`. Requires at least pixi v0.21.0.
locked:
description: Whether to use `pixi install --locked`. Defaults to `true` when the lockfile is present, otherwise `false`.
description:
Whether to use `pixi install --locked`. Defaults to `true` when the lockfile is present, otherwise `false`.
frozen:
description: Whether to use `pixi install --frozen`. Defaults to `false`.
cache:
Expand Down
Loading
Loading