feat: Add support for linux-riscv64 (#282)

This commit is contained in:
Pavel Zwerschke
2026-08-28 10:55:29 +02:00
committed by GitHub
parent f00437f565
commit d3f436a425
7 changed files with 2192 additions and 785 deletions
+43 -40
View File
@@ -16,8 +16,13 @@ jobs:
default:
strategy:
matrix:
# TODO: add windows-11-arm: https://github.com/conda-forge/conda-forge.github.io/issues/1940
os: [ubuntu-latest, ubuntu-24.04-arm, macos-latest, windows-latest]
os:
- ubuntu-latest
- ubuntu-24.04-arm
- ubuntu-24.04-riscv
- macos-latest
- windows-latest
- windows-11-arm
cache: [true, false]
runs-on: ${{ matrix.os }}
name: default ${{ matrix.cache == true && 'with' || 'without' }} cache (${{ matrix.os }})
@@ -33,18 +38,18 @@ jobs:
set -o pipefail
pixi info
test -f .pixi/envs/default/bin/python
./.pixi/envs/default/bin/python --version | grep -q 3.11
./.pixi/envs/default/bin/python --version | grep -q 3.14
shell: bash
if: matrix.os != 'windows-latest'
if: "!startsWith(matrix.os, 'windows')"
- run: |
set -o pipefail
pixi info
test -f .pixi/envs/default/python.exe
./.pixi/envs/default/python.exe --version | grep -q 3.11
./.pixi/envs/default/python.exe --version | grep -q 3.14
shell: bash
if: matrix.os == 'windows-latest'
if: startsWith(matrix.os, 'windows')
- run: |
pixi run python --version | grep -q 3.11
pixi run python --version | grep -q 3.14
pixi run test | grep -q "Hello world"
global-environments:
@@ -66,10 +71,10 @@ jobs:
set -o pipefail
pixi info
test -f ${{ matrix.os == 'windows-latest' && './.pixi/envs/default/python.exe' || './.pixi/envs/default/bin/python' }}
${{ matrix.os == 'windows-latest' && './.pixi/envs/default/python.exe' || './.pixi/envs/default/bin/python' }} --version | grep -q 3.11
${{ matrix.os == 'windows-latest' && './.pixi/envs/default/python.exe' || './.pixi/envs/default/bin/python' }} --version | grep -q 3.14
shell: bash
- run: |
pixi run python --version | grep -q 3.11
pixi run python --version | grep -q 3.14
pixi run test | grep -q "Hello world"
global-environments-with-project-install:
@@ -210,7 +215,7 @@ jobs:
with:
cache: false
frozen: true
- run: pixi run python --version | grep -q 3.11
- run: pixi run python --version | grep -q 3.14
locked:
strategy:
@@ -225,7 +230,7 @@ jobs:
with:
cache: false
locked: true
- run: pixi run python --version | grep -q 3.11
- run: pixi run python --version | grep -q 3.14
custom-pixi-url:
runs-on: ubuntu-latest
@@ -342,7 +347,7 @@ jobs:
set -o pipefail
pixi info
test -f .pixi/envs/default/bin/python
.pixi/envs/default/bin/python --version | grep -q 3.11
.pixi/envs/default/bin/python --version | grep -q 3.14
shell: bash
working-directory: test/default
if: matrix.os != 'windows-latest'
@@ -350,11 +355,11 @@ jobs:
set -o pipefail
pixi info
test -f .pixi/envs/default/python.exe
.pixi/envs/default/python.exe --version | grep -q 3.11
.pixi/envs/default/python.exe --version | grep -q 3.14
shell: bash
working-directory: test/default
if: matrix.os == 'windows-latest'
- run: pixi run python --version | grep -q 3.11
- run: pixi run python --version | grep -q 3.14
working-directory: test/default
working-directory-with-manifest-path:
@@ -383,7 +388,7 @@ jobs:
shell: bash
working-directory: test/default
if: matrix.os == 'windows-latest'
- run: pixi run python --version | grep -q 3.11
- run: pixi run python --version | grep -q 3.14
working-directory: test/default
working-directory-with-absolute-manifest-path:
@@ -412,7 +417,7 @@ jobs:
shell: bash
working-directory: test/default
if: matrix.os == 'windows-latest'
- run: pixi run python --version | grep -q 3.11
- run: pixi run python --version | grep -q 3.14
working-directory: test/default
custom-manifest-path:
@@ -485,18 +490,18 @@ jobs:
- name: Download pixi binary (Ubuntu)
run: |
set -o pipefail
curl -L --output "$HOME/custom existing pixi/pixi" https://github.com/prefix-dev/pixi/releases/download/v0.43.0/pixi-x86_64-unknown-linux-musl
curl -L --output "$HOME/custom existing pixi/pixi" https://github.com/prefix-dev/pixi/releases/download/v0.76.0/pixi-x86_64-unknown-linux-musl
chmod +x "$HOME/custom existing pixi/pixi"
if: matrix.os == 'ubuntu-latest'
- name: Download pixi binary (macOS)
run: |
set -o pipefail
curl -L --output "$HOME/custom existing pixi/pixi" https://github.com/prefix-dev/pixi/releases/download/v0.43.0/pixi-x86_64-apple-darwin
curl -L --output "$HOME/custom existing pixi/pixi" https://github.com/prefix-dev/pixi/releases/download/v0.76.0/pixi-x86_64-apple-darwin
chmod +x "$HOME/custom existing pixi/pixi"
if: matrix.os == 'macos-latest'
- name: Download pixi binary (Windows)
run: |
curl -L --output "$HOME/custom existing pixi/pixi.exe" https://github.com/prefix-dev/pixi/releases/download/v0.43.0/pixi-x86_64-pc-windows-msvc.exe
curl -L --output "$HOME/custom existing pixi/pixi.exe" https://github.com/prefix-dev/pixi/releases/download/v0.76.0/pixi-x86_64-pc-windows-msvc.exe
if: matrix.os == 'windows-latest'
- run: |
echo "Path: $PATH"
@@ -504,7 +509,7 @@ jobs:
- name: Verify pixi version (before setup-pixi)
run: |
pixi --version
pixi --version | grep -q "pixi 0.43.0"
pixi --version | grep -q "pixi 0.76.0"
shell: bash
- name: Verify pixi path (before setup-pixi)
run: |
@@ -525,7 +530,7 @@ jobs:
uses: ./
with:
cache: false
pixi-version: v0.44.0
pixi-version: v0.77.0
if: matrix.ignore-reason == 'version'
- name: Run Action (url should overwrite preinstalled pixi)
uses: ./
@@ -534,10 +539,10 @@ jobs:
pixi-url: |
${{
matrix.os == 'ubuntu-latest' &&
'https://github.com/prefix-dev/pixi/releases/download/v0.44.0/pixi-x86_64-unknown-linux-musl'
'https://github.com/prefix-dev/pixi/releases/download/v0.77.0/pixi-x86_64-unknown-linux-musl'
|| matrix.os == 'macos-latest' &&
'https://github.com/prefix-dev/pixi/releases/download/v0.44.0/pixi-x86_64-apple-darwin'
|| 'https://github.com/prefix-dev/pixi/releases/download/v0.44.0/pixi-x86_64-pc-windows-msvc.exe'
'https://github.com/prefix-dev/pixi/releases/download/v0.77.0/pixi-x86_64-apple-darwin'
|| 'https://github.com/prefix-dev/pixi/releases/download/v0.77.0/pixi-x86_64-pc-windows-msvc.exe'
}}
if: matrix.ignore-reason == 'url'
- name: Create custom bin directory
@@ -551,23 +556,23 @@ jobs:
# this will implicitly set pixi-version to latest
pixi-bin-path: custom-bin/pixi${{ matrix.os == 'windows-latest' && '.exe' || '' }}
if: matrix.ignore-reason == 'bin-path'
- name: Verify pixi version (after setup-pixi) - still at 0.43.0
- name: Verify pixi version (after setup-pixi) - still at 0.76.0
run: |
pixi --version
pixi --version | grep -q 0.43.0
pixi --version | grep -q 0.76.0
shell: bash
if: matrix.ignore-reason == 'none'
- name: Verify pixi version (after setup-pixi) - should be 0.44.0
- name: Verify pixi version (after setup-pixi) - should be 0.77.0
run: |
pixi --version
pixi --version | grep -q 0.44.0
pixi --version | grep -q 0.77.0
shell: bash
if: matrix.ignore-reason != 'none' && matrix.ignore-reason != 'bin-path' && matrix.ignore-reason != 'version-latest'
- name: Verify pixi version (after setup-pixi) - should be latest
run: |
pixi --version
pixi --version | grep -vq 0.43.0
pixi --version | grep -vq 0.44.0
pixi --version | grep -vq 0.76.0
pixi --version | grep -vq 0.77.0
shell: bash
if: matrix.ignore-reason == 'bin-path' || matrix.ignore-reason == 'version-latest'
- name: Verify pixi path (after setup-pixi, no ignore reason)
@@ -734,8 +739,7 @@ jobs:
pixi-shell:
strategy:
matrix:
# TODO: add windows-11-arm: https://github.com/conda-forge/conda-forge.github.io/issues/1940
os: [ubuntu-latest, ubuntu-24.04-arm, macos-latest, windows-latest]
os: [ubuntu-latest, ubuntu-24.04-arm, macos-latest, windows-latest, windows-11-arm]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
@@ -745,7 +749,7 @@ jobs:
with:
cache: false
- run: |
python --version | grep -q "3.11"
python --version | grep -q "3.14"
shell: pixi run bash -e {0}
- run: |
import sys
@@ -753,7 +757,7 @@ jobs:
print("Hello world")
shell: pixi run python {0}
- run: |
python --version | Select-String "3.11"
python --version | Select-String "3.14"
shell: pixi run pwsh -Command {0}
# TODO investigate: for some reason, this errors on ubuntu-arm
if: matrix.os != 'ubuntu-24.04-arm'
@@ -761,8 +765,7 @@ jobs:
pixi-shell-exec:
strategy:
matrix:
# TODO: add windows-11-arm: https://github.com/conda-forge/conda-forge.github.io/issues/1940
os: [ubuntu-latest, ubuntu-24.04-arm, macos-latest, windows-latest]
os: [ubuntu-latest, ubuntu-24.04-arm, macos-latest, windows-latest, windows-11-arm]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
@@ -770,14 +773,14 @@ jobs:
with:
run-install: false
- run: |
python --version | grep -q "3.11"
shell: pixi exec --spec python=3.11.* -- bash -e {0}
python --version | grep -q "3.14"
shell: pixi exec --spec python=3.14.* -- bash -e {0}
- run: |
import ruamel.yaml
shell: pixi exec --spec python --spec ruamel.yaml -- python {0}
- run: |
python --version | Select-String "3.11"
shell: pixi exec --spec python=3.11.* -- pwsh -Command {0}
python --version | Select-String "3.14"
shell: pixi exec --spec python=3.14.* -- pwsh -Command {0}
# TODO investigate: for some reason, this errors on ubuntu-arm
if: matrix.os != 'ubuntu-24.04-arm'
+24 -24
View File
@@ -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.10.1
- uses: prefix-dev/setup-pixi@v0.10.2
with:
pixi-version: v0.66.0
@@ -35,7 +35,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.10.1`) to avoid breaking changes.
> Please pin the versions of this action to a specific version (i.e., `prefix-dev/setup-pixi@v0.10.2`) 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:
@@ -79,7 +79,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.10.1
- uses: prefix-dev/setup-pixi@v0.10.2
with:
cache: true
cache-write: ${{ github.event_name == 'push' && github.ref_name == 'main' }}
@@ -124,7 +124,7 @@ test:
environment: [py311, py312]
steps:
- uses: actions/checkout@v4
- uses: prefix-dev/setup-pixi@v0.10.1
- uses: prefix-dev/setup-pixi@v0.10.2
with:
environments: ${{ matrix.environment }}
```
@@ -134,7 +134,7 @@ test:
The following example will install both the `py311` and the `py312` environment on the runner.
```yml
- uses: prefix-dev/setup-pixi@v0.10.1
- uses: prefix-dev/setup-pixi@v0.10.2
with:
# separated by spaces
environments: >-
@@ -157,7 +157,7 @@ For instance, the `keyring`, or `gcloud` executables. The following example show
By default, global environments are not cached. You can enable caching by setting the `global-cache` input to `true`.
```yml
- uses: prefix-dev/setup-pixi@v0.10.1
- uses: prefix-dev/setup-pixi@v0.10.2
with:
global-environments: |
google-cloud-sdk
@@ -190,7 +190,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.10.1
- uses: prefix-dev/setup-pixi@v0.10.2
with:
auth-host: prefix.dev
auth-token: ${{ secrets.PREFIX_DEV_TOKEN }}
@@ -202,7 +202,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.10.1
- uses: prefix-dev/setup-pixi@v0.10.2
with:
auth-host: custom-artifactory.com
auth-username: ${{ secrets.PIXI_USERNAME }}
@@ -215,7 +215,7 @@ Specify the conda-token using the `auth-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.10.1
- uses: prefix-dev/setup-pixi@v0.10.2
with:
auth-host: anaconda.org # or my-quetz-instance.com
auth-conda-token: ${{ secrets.CONDA_TOKEN }}
@@ -227,7 +227,7 @@ Specify the S3 key pair using the `auth-access-key-id` and `auth-secret-access-k
You can also specify the session token using the `auth-session-token` input argument.
```yaml
- uses: prefix-dev/setup-pixi@v0.10.1
- uses: prefix-dev/setup-pixi@v0.10.2
with:
auth-host: s3://my-s3-bucket
auth-s3-access-key-id: ${{ secrets.ACCESS_KEY_ID }}
@@ -246,7 +246,7 @@ then run `pixi auth logout <auth-host>` after `pixi install` has completed but b
returns, so that later steps cannot reach the private channel anymore.
```yml
- uses: prefix-dev/setup-pixi@v0.10.1
- uses: prefix-dev/setup-pixi@v0.10.2
with:
auth-host: prefix.dev
auth-token: ${{ secrets.PREFIX_DEV_TOKEN }}
@@ -258,7 +258,7 @@ returns, so that later steps cannot reach the private channel anymore.
You can specify whether to use keyring to look up credentials for PyPI.
```yml
- uses: prefix-dev/setup-pixi@v0.10.1
- uses: prefix-dev/setup-pixi@v0.10.2
with:
pypi-keyring-provider: subprocess # one of 'subprocess', 'disabled'
```
@@ -326,7 +326,7 @@ To this end, `setup-pixi` adds all environment variables set when executing `pix
As a result, all installed binaries can be accessed without having to call `pixi run`.
```yml
- uses: prefix-dev/setup-pixi@v0.10.1
- uses: prefix-dev/setup-pixi@v0.10.2
with:
activate-environment: true
```
@@ -334,7 +334,7 @@ As a result, all installed binaries can be accessed without having to call `pixi
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/setup-pixi@v0.10.1
- uses: prefix-dev/setup-pixi@v0.10.2
with:
environments: >-
py311
@@ -351,7 +351,7 @@ You can specify whether `setup-pixi` should run `pixi install --frozen` or `pixi
See the [official documentation](https://pixi.sh/latest/reference/cli/pixi/install/#update-options) for more information about the `--frozen` and `--locked` flags.
```yml
- uses: prefix-dev/setup-pixi@v0.10.1
- uses: prefix-dev/setup-pixi@v0.10.2
with:
locked: true
# or
@@ -370,7 +370,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.10.1
- uses: prefix-dev/setup-pixi@v0.10.2
env:
RUNNER_DEBUG: true
```
@@ -388,7 +388,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.10.1
- uses: prefix-dev/setup-pixi@v0.10.2
with:
# one of `q`, `default`, `v`, `vv`, or `vvv`.
log-level: vvv
@@ -414,7 +414,7 @@ If nothing is specified, `post-cleanup` will default to `false`.
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.10.1
- uses: prefix-dev/setup-pixi@v0.10.2
with:
post-cleanup: true
# ${{ runner.temp }}\Scripts\pixi.exe on Windows
@@ -430,7 +430,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.10.1
- uses: prefix-dev/setup-pixi@v0.10.2
with:
manifest-path: pyproject.toml
```
@@ -440,7 +440,7 @@ This can be overwritten by setting the `manifest-path` input argument.
If you're working with a monorepo where your pixi project is in a subdirectory, you can use the `working-directory` input to specify where pixi should look for manifest files (`pixi.toml` or `pyproject.toml`).
```yml
- uses: prefix-dev/setup-pixi@v0.10.1
- uses: prefix-dev/setup-pixi@v0.10.2
with:
working-directory: ./packages/my-project
```
@@ -459,7 +459,7 @@ This will make pixi look for `pixi.toml` or `pyproject.toml` in the `./packages/
You can combine `working-directory` with `manifest-path` if needed:
```yml
- uses: prefix-dev/setup-pixi@v0.10.1
- uses: prefix-dev/setup-pixi@v0.10.2
with:
working-directory: ./packages/my-project
manifest-path: custom-pixi.toml
@@ -470,7 +470,7 @@ You can combine `working-directory` with `manifest-path` if needed:
If you only want to install pixi and not install the current project, you can use the `run-install` option.
```yml
- uses: prefix-dev/setup-pixi@v0.10.1
- uses: prefix-dev/setup-pixi@v0.10.2
with:
run-install: false
```
@@ -481,7 +481,7 @@ You can also download pixi from a custom URL by setting the `pixi-url` input arg
Optionally, you can combine this with the `pixi-url-headers` input argument to supply additional headers for the download request, such as a bearer token.
```yml
- uses: prefix-dev/setup-pixi@v0.10.1
- uses: prefix-dev/setup-pixi@v0.10.2
with:
pixi-url: https://pixi-mirror.example.com/releases/download/v0.48.0/pixi-x86_64-unknown-linux-musl
pixi-url-headers: '{"Authorization": "Bearer ${{ secrets.PIXI_MIRROR_BEARER_TOKEN }}"}'
@@ -497,7 +497,7 @@ It will be rendered with the following variables:
By default, `pixi-url` is equivalent to the following template:
```yml
- uses: prefix-dev/setup-pixi@v0.10.1
- uses: prefix-dev/setup-pixi@v0.10.2
with:
pixi-url: |
{{#if latest~}}
Generated Vendored
+8 -1
View File
@@ -36835,6 +36835,7 @@ var getCondaArch = () => {
"linux-x64": "linux-64",
"linux-arm64": "linux-aarch64",
"linux-ppc64": "linux-ppc64le",
"linux-riscv64": "linux-riscv64",
"win32-x64": "win-64",
"win32-arm64": "win-arm64"
};
@@ -36846,15 +36847,19 @@ var getCondaArch = () => {
};
var getPlatform = () => {
const platform2 = import_os3.default.platform();
const arch2 = import_os3.default.arch();
switch (platform2) {
case "darwin":
return "apple-darwin";
case "linux":
if (arch2 == "riscv64") {
return "unknown-linux-gnu";
}
return "unknown-linux-musl";
case "win32":
return "pc-windows-msvc";
default:
throw new Error(`Unsupported architecture: ${platform2}`);
throw new Error(`Unsupported platform: ${platform2}`);
}
};
var getArch = () => {
@@ -36864,6 +36869,8 @@ var getArch = () => {
return "x86_64";
case "arm64":
return "aarch64";
case "riscv64":
return "riscv64gc";
default:
throw new Error(`Unsupported architecture: ${arch2}`);
}
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "setup-pixi",
"version": "0.10.1",
"version": "0.10.2",
"private": true,
"description": "Action to set up the pixi package manager.",
"scripts": {
+10 -1
View File
@@ -21,6 +21,7 @@ export const getCondaArch = () => {
'linux-x64': 'linux-64',
'linux-arm64': 'linux-aarch64',
'linux-ppc64': 'linux-ppc64le',
'linux-riscv64': 'linux-riscv64',
'win32-x64': 'win-64',
'win32-arm64': 'win-arm64'
}
@@ -33,15 +34,21 @@ export const getCondaArch = () => {
const getPlatform = () => {
const platform = os.platform()
const arch = os.arch()
switch (platform) {
case 'darwin':
return 'apple-darwin'
case 'linux':
if (arch == 'riscv64') {
// https://github.com/prefix-dev/pixi/issues/6903
return 'unknown-linux-gnu'
}
return 'unknown-linux-musl'
case 'win32':
return 'pc-windows-msvc'
default:
throw new Error(`Unsupported architecture: ${platform}`)
throw new Error(`Unsupported platform: ${platform}`)
}
}
@@ -52,6 +59,8 @@ const getArch = () => {
return 'x86_64'
case 'arm64':
return 'aarch64'
case 'riscv64':
return 'riscv64gc'
default:
throw new Error(`Unsupported architecture: ${arch}`)
}
+2094 -716
View File
File diff suppressed because it is too large Load Diff
+12 -2
View File
@@ -1,10 +1,20 @@
[workspace]
name = "test-default"
channels = ["conda-forge"]
platforms = ["linux-64", "linux-aarch64", "osx-64", "osx-arm64", "win-64"]
platforms = [
"linux-64",
"linux-aarch64",
# remove override when https://github.com/prefix-dev/pixi/pull/6914 is released
{ platform = "linux-riscv64", glibc = "2.39" },
"linux-ppc64le",
"osx-64",
"osx-arm64",
"win-64",
"win-arm64",
]
[tasks]
test = "python -c 'print(\"Hello world!\")'"
[dependencies]
python = "3.11.*"
python = "3.14.*"