Compare commits

...
46 Commits
Author SHA1 Message Date
Pavel Zwerschke 19eac09b39 feat: Add support for windows arm runners (#197) 2025-04-16 00:39:41 +02:00
Pavel Zwerschke 5044b25024 refactor: Use smol-toml instead of js-toml (#195) 2025-04-14 14:14:22 +02:00
Pavel Zwerschke 72cc21dab3 fix: TOML parsing failing on windows (#194) 2025-04-14 14:01:01 +02:00
Pavel Zwerschke dbaed5efa0 fix: Support TOML 1.0 for pyproject.toml parsing (#191) 2025-04-08 12:47:53 +02:00
dependabot[bot]dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>Pavel Zwerschke
30d4899438 Bump the nodejs group with 6 updates (#187)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Pavel Zwerschke <pavelzw@gmail.com>
2025-04-08 11:56:29 +02:00
dependabot[bot] 00ff9955aa Bump the gh-actions group with 3 updates (#188) 2025-04-01 07:11:56 +02:00
Pavel Zwerschke 8eaba7c61d fix: Behavior if pixi is on path with spaces (#185) 2025-03-31 13:02:35 +02:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 0aa0cc06bf Bump the nodejs group with 10 updates (#181)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-31 10:08:44 +00:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 0eb8fc3d66 Bump the gh-actions group with 3 updates (#180)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-31 09:56:29 +00:00
Pavel Zwerschke 9c0726f354 Adjust pull request template (#182) 2025-03-07 10:56:27 +01:00
Pavel Zwerschke 2970de4ad9 Mention run-install in documentation (#179) 2025-02-24 09:50:24 +01:00
Pavel Zwerschke 92815284c5 Add S3 authentication (#176) 2025-02-20 09:18:19 +01:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 0f64e482e3 Bump nodejs dependencies (#172)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-11 16:52:49 +01:00
github-actions[bot] a0eec1ad27 Reference latest Pixi version in README (#169) 2025-02-11 16:20:42 +01:00
Pavel Zwerschke 87426edf79 bump pixi version in readme every three months 2025-02-11 16:14:12 +01:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> ce8f9d00d4 Bump the gh-actions group with 4 updates (#171)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-01 11:39:46 +00:00
github-actions[bot] fb4fb2a4bc Reference latest Pixi version in README (#167) 2025-01-20 09:09:06 +00:00
github-actions[bot] ab924e6d23 Reference latest Pixi version in README (#162) 2025-01-06 12:37:21 +00:00
dependabot[bot] 6bfb8b7dfb Bump the gh-actions group with 4 updates (#164) 2025-01-06 13:21:31 +01:00
github-actions[bot] 2b0dd8ca2a Reference latest Pixi version in README (#161) 2024-12-16 09:42:38 +00:00
github-actions[bot] 22fa653352 Reference latest Pixi version in README (#160) 2024-12-09 07:48:01 +00:00
dependabot[bot]dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>Pavel Zwerschke
6a44a227db Bump the dependencies group across 1 directory with 10 updates (#157)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Pavel Zwerschke <pavelzw@gmail.com>
2024-12-02 11:48:30 +00:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 7ae9fd8364 Bump the dependencies group across 1 directory with 4 updates (#158)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-02 10:39:37 +01:00
github-actions[bot] 688f47c746 Reference latest Pixi version in README (#156) 2024-11-25 07:55:29 +01:00
github-actions[bot] 18f2bb3495 Reference latest Pixi version in README (#155) 2024-11-18 07:43:02 +00:00
github-actions[bot] 1c636cc10e Reference latest Pixi version in README (#151) 2024-11-11 08:22:26 +01:00
github-actions[bot] 05fd7ec7d7 Reference latest Pixi version in README (#149) 2024-10-21 09:19:37 +02:00
github-actions[bot] 5f57a9658a Reference latest Pixi version in README (#147) 2024-10-14 07:19:34 +00:00
Pavel Zwerschke 68baa735c7 pin actions by sha (#146) 2024-10-01 09:02:10 +00:00
github-actions[bot] 41f1f69e78 Reference latest Pixi version in README (#140) 2024-09-24 14:47:19 +02:00
github-actions[bot] 6efead024a Reference latest Pixi version in README (#138) 2024-09-09 18:20:10 +02:00
Jens Ochsenmeier 45f572edb8 Update dependencies, fix config linting (#135) 2024-08-30 14:29:08 +02:00
github-actions[bot] 540c964f19 Reference latest Pixi version in README (#134) 2024-08-26 14:01:20 +02:00
github-actions[bot] 116a6623f4 Reference latest Pixi version in README (#132) 2024-08-12 09:05:53 +02:00
Pavel Zwerschke 1f8c1bbd15 Mention pixi exec in docs (#131) 2024-08-02 09:44:51 +00:00
dependabot[bot] 3d7bf9c29e Bump softprops/action-gh-release from 2.0.6 to 2.0.8 in the dependencies group (#130) 2024-08-01 07:57:12 +02:00
github-actions[bot] 58e91c2a92 Reference latest Pixi version in README (#128) 2024-07-29 06:10:24 +00:00
dependabot[bot]dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>Pavel Zwerschke
0723139b37 Bump the dependencies group across 1 directory with 6 updates (#127)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Pavel Zwerschke <pavelzw@gmail.com>
2024-07-15 13:16:38 +00:00
github-actions[bot] 5c2501535f Reference latest Pixi version in README (#125) 2024-07-08 12:09:19 +02:00
dependabot[bot] 992a3081e2 Bump the dependencies group with 2 updates (#123) 2024-07-01 08:02:16 +02:00
github-actions[bot] 67207fdc51 Reference latest Pixi version in README (#121) 2024-06-17 11:34:42 +00:00
Jens Ochsenmeier a9af4756ad ESLint: Migrate to flat config, isolate Prettier, fix errors (#120) 2024-06-14 14:54:49 +02:00
Ruben Arts ba3bb36eb2 fix: use iarna/toml instead of toml (#118) 2024-06-01 01:31:15 +02:00
Jonas Haag b68487257f Improve run-install wording (#116) 2024-05-23 20:02:37 +02:00
Bela Stoyan 2058dcd92f Fix saving cache taking too long (#113) 2024-05-23 14:33:35 +02:00
github-actions[bot] fd715b50ef Reference latest Pixi version in README (#112) 2024-05-21 12:00:39 +02:00
36 changed files with 52714 additions and 48757 deletions
-28
View File
@@ -1,28 +0,0 @@
module.exports = {
ignorePatterns: ['dist/**/*', 'build/**/*'],
extends: ['standard', 'plugin:@typescript-eslint/recommended', 'plugin:prettier/recommended'],
parser: '@typescript-eslint/parser',
parserOptions: {
ecmaVersion: '2020'
},
plugins: ['@typescript-eslint', 'prettier'],
rules: {
'import/order': 'error',
'no-use-before-define': 'off',
'no-unused-vars': 'off',
'@typescript-eslint/no-unused-vars': ['error', { argsIgnorePattern: '^_' }],
'n/no-callback-literal': 'off',
'@typescript-eslint/consistent-type-imports': ['error', { prefer: 'type-imports' }],
'@typescript-eslint/no-use-before-define': 'error',
'prettier/prettier': [
'error',
{
tabWidth: 2,
printWidth: 120,
singleQuote: true,
trailingComma: 'none',
semi: false
}
]
}
}
+1 -1
View File
@@ -1 +1 @@
dist/** -diff linguist-generated=true
dist/** merge=binary -diff linguist-generated=true
+1 -1
View File
@@ -1,3 +1,3 @@
If updating documentation:
- [ ] Updated documentation in https://github.com/prefix-dev/pixi/blob/main/docs/advanced/github_actions.md as well
- [ ] Updated documentation in https://github.com/prefix-dev/pixi/blob/main/docs/integration/ci/github_actions.md as well
+4 -4
View File
@@ -5,14 +5,14 @@ updates:
schedule:
interval: monthly
groups:
dependencies:
gh-actions:
patterns:
- "*"
- '*'
- package-ecosystem: npm
directory: /
schedule:
interval: monthly
groups:
dependencies:
nodejs:
patterns:
- "*"
- '*'
+1 -1
View File
@@ -23,4 +23,4 @@ changelog:
- dependencies
- title: 🤷🏻 Other changes
labels:
- "*"
- '*'
+18 -15
View File
@@ -7,21 +7,23 @@ on:
branches: [main]
merge_group:
schedule:
- cron: 0 6 * * MON
# every 3 months
- cron: 0 0 1 */3 *
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Install pnpm
uses: pnpm/action-setup@v4
uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.4.0
with:
version: 8
version: 9
- name: Install Node.js
uses: actions/setup-node@v4
uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4.3.0
with:
node-version: 20
cache: pnpm
@@ -39,13 +41,13 @@ jobs:
name: Reference latest version in README
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Assert latest setup-pixi version is mentioned in README
run: |
set -euo pipefail
latest_version="$(jq -r '.version' package.json)"
count_expected=15
count_expected=17
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."
@@ -54,12 +56,13 @@ jobs:
reference-latest-pixi-version-in-readme:
name: Reference latest Pixi version in README
if: github.event_name == 'schedule' || github.event_name == 'workflow_dispatch'
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Assert latest pixi version is mentioned in README
run: |
@@ -76,26 +79,26 @@ jobs:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Create pull request
uses: peter-evans/create-pull-request@6d6857d36972b65feb161a90e484f2984215f83e
uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e # v7.0.8
if: failure() && github.ref_name == 'main'
with:
token: ${{ secrets.GITHUB_TOKEN }}
commit-message: Reference latest Pixi version in README
title: Reference latest Pixi version in README
labels: documentation
labels: ignore for release
check-dist:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Install pnpm
uses: pnpm/action-setup@v4
uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.4.0
with:
version: 8
version: 9
- name: Install Node.js
uses: actions/setup-node@v4
uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4.3.0
with:
node-version: 20
cache: pnpm
@@ -116,7 +119,7 @@ jobs:
id: diff
# If index.js or post.js are different than expected, upload the expected version as an artifact
- uses: actions/upload-artifact@v4
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
if: ${{ failure() && steps.diff.conclusion == 'failure' }}
with:
name: dist
+3 -3
View File
@@ -12,8 +12,8 @@ jobs:
release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: Quantco/ui-actions/version-metadata@a0653e9fc0ee3c4be9f7cc88e509e40536e9f3c1
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- uses: Quantco/ui-actions/version-metadata@cd71d2a0e30b25569f6d723e57acca83347e58fc # v1.0.18
id: version-metadata
with:
file: ./package.json
@@ -24,7 +24,7 @@ jobs:
TAG_NAME: v${{ steps.version-metadata.outputs.newVersion }}
- name: Create release
if: steps.version-metadata.outputs.changed == 'true'
uses: softprops/action-gh-release@69320dbe05506a9a39fc8ae11030b214ec2d1f87
uses: softprops/action-gh-release@c95fe1489396fe8a9eb87c0abf8aa5b2ef267fda # v2.2.1
with:
generate_release_notes: true
tag_name: v${{ steps.version-metadata.outputs.newVersion }}
+151 -91
View File
@@ -7,16 +7,22 @@ on:
branches: [main]
merge_group:
# Automatically stop old builds on the same branch/PR
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
default:
strategy:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest, macos-13]
# 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, macos-13]
cache: [true, false]
runs-on: ${{ matrix.os }}
name: default ${{ matrix.cache == true && 'with' || 'without' }} cache (${{ matrix.os }})
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Move pixi.toml
run: mv test/default/* .
- uses: ./
@@ -47,7 +53,7 @@ jobs:
os: [ubuntu-latest, macos-latest, windows-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Move pixi.toml
run: mv test/default/* .
- uses: ./
@@ -64,7 +70,7 @@ jobs:
os: [ubuntu-latest, macos-latest, windows-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- uses: ./
with:
run-install: false
@@ -79,7 +85,7 @@ jobs:
os: [ubuntu-latest, macos-latest, windows-latest, macos-13]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Move pixi.toml
run: mv test/old-pixi-lockfiles/* .
- uses: ./
@@ -97,7 +103,7 @@ jobs:
locked: [true, false]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Move pixi.toml
run: mv test/old-pixi-lockfiles/* .
- uses: ./
@@ -116,7 +122,7 @@ jobs:
os: [ubuntu-latest, macos-latest, windows-latest, macos-13]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- uses: ./
with:
run-install: false
@@ -129,7 +135,7 @@ jobs:
os: [ubuntu-latest, macos-latest, windows-latest, macos-13]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- uses: ./
with:
run-install: false
@@ -148,7 +154,7 @@ jobs:
os: [ubuntu-latest, macos-latest, windows-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Move pixi.toml
run: mv test/default/* .
- uses: ./
@@ -163,7 +169,7 @@ jobs:
os: [ubuntu-latest, macos-latest, windows-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Move pixi.toml
run: mv test/default/* .
- uses: ./
@@ -175,7 +181,7 @@ jobs:
custom-pixi-url:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Move pixi.toml
run: mv test/old-pixi-lockfiles/* .
- uses: ./
@@ -187,14 +193,14 @@ jobs:
custom-manifest-path:
strategy:
matrix:
os: [ubuntu-latest, 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@v4
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- uses: ./
with:
cache: false
manifest-path: test/default/pixi.toml
manifest-path: test/bzip2/pixi.toml
different-log-level:
strategy:
@@ -202,7 +208,7 @@ jobs:
os: [ubuntu-latest, macos-latest, windows-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Move pixi.toml
run: mv test/default/* .
- uses: ./
@@ -216,56 +222,56 @@ jobs:
os: [ubuntu-latest, macos-latest, windows-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- name: Move pixi.toml
run: mv test/default/* .
- uses: ./
with:
cache: false
pixi-bin-path: custom-bin/pixi${{ matrix.os == 'windows-latest' && '.exe' || '' }}
- run: |
test -f custom-bin/pixi${{ matrix.os == 'windows-latest' && '.exe' || '' }}
pixi --help
which pixi | grep -q custom-bin/pixi
# which pixi should be absolute
which pixi | grep -q "^/"
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Move pixi.toml
run: mv test/default/* .
- uses: ./
with:
cache: false
pixi-bin-path: custom-bin/pixi${{ matrix.os == 'windows-latest' && '.exe' || '' }}
- run: |
test -f custom-bin/pixi${{ matrix.os == 'windows-latest' && '.exe' || '' }}
pixi --help
which pixi | grep -q custom-bin/pixi
# which pixi should be absolute
which pixi | grep -q "^/"
existing-pixi-bin:
strategy:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
ignore-reason: [ none, version, version-latest, url, bin-path]
ignore-reason: [none, version, version-latest, url, bin-path]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Move pixi.toml
run: mv test/default/* .
- name: Create pixi directory and add to PATH
run: |
mkdir -p $HOME/custom-existing-pixi
echo $HOME/custom-existing-pixi >> $GITHUB_PATH
mkdir -p "$HOME/custom existing pixi"
echo "$HOME/custom existing pixi" >> $GITHUB_PATH
if: matrix.os != 'windows-latest'
- name: Create pixi directory and add to PATH (Windows)
run: |
mkdir $env:USERPROFILE\custom-existing-pixi
echo $env:USERPROFILE\custom-existing-pixi >> $env:GITHUB_PATH
mkdir "$env:USERPROFILE\custom existing pixi"
echo "$env:USERPROFILE\custom existing pixi" >> $env:GITHUB_PATH
shell: pwsh
if: matrix.os == 'windows-latest'
- 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.14.0/pixi-x86_64-unknown-linux-musl
chmod +x $HOME/custom-existing-pixi/pixi
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
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.14.0/pixi-x86_64-apple-darwin
chmod +x $HOME/custom-existing-pixi/pixi
curl -L --output "$HOME/custom existing pixi/pixi" https://github.com/prefix-dev/pixi/releases/download/v0.43.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.14.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.43.0/pixi-x86_64-pc-windows-msvc.exe
if: matrix.os == 'windows-latest'
- run: |
echo "Path: $PATH"
@@ -273,11 +279,11 @@ jobs:
- name: Verify pixi version (before setup-pixi)
run: |
pixi --version
pixi --version | grep -q "pixi 0.14.0"
pixi --version | grep -q "pixi 0.43.0"
shell: bash
- name: Verify pixi path (before setup-pixi)
run: |
which pixi | grep -q $HOME/custom-existing-pixi/pixi
which pixi | grep -q "$HOME/custom existing pixi/pixi"
shell: bash
- name: Run Action (should use preinstalled pixi)
uses: ./
@@ -294,7 +300,7 @@ jobs:
uses: ./
with:
cache: false
pixi-version: v0.16.0
pixi-version: v0.44.0
if: matrix.ignore-reason == 'version'
- name: Run Action (url should overwrite preinstalled pixi)
uses: ./
@@ -303,10 +309,10 @@ jobs:
pixi-url: |
${{
matrix.os == 'ubuntu-latest' &&
'https://github.com/prefix-dev/pixi/releases/download/v0.16.0/pixi-x86_64-unknown-linux-musl'
'https://github.com/prefix-dev/pixi/releases/download/v0.44.0/pixi-x86_64-unknown-linux-musl'
|| matrix.os == 'macos-latest' &&
'https://github.com/prefix-dev/pixi/releases/download/v0.16.0/pixi-x86_64-apple-darwin'
|| 'https://github.com/prefix-dev/pixi/releases/download/v0.16.0/pixi-x86_64-pc-windows-msvc.exe'
'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'
}}
if: matrix.ignore-reason == 'url'
- name: Create custom bin directory
@@ -320,33 +326,33 @@ 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.14.0
- name: Verify pixi version (after setup-pixi) - still at 0.43.0
run: |
pixi --version
pixi --version | grep -q 0.14.0
pixi --version | grep -q 0.43.0
shell: bash
if: matrix.ignore-reason == 'none'
- name: Verify pixi version (after setup-pixi) - should be 0.16.0
- name: Verify pixi version (after setup-pixi) - should be 0.44.0
run: |
pixi --version
pixi --version | grep -q 0.16.0
pixi --version | grep -q 0.44.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.14.0
pixi --version | grep -vq 0.16.0
pixi --version | grep -vq 0.43.0
pixi --version | grep -vq 0.44.0
shell: bash
if: matrix.ignore-reason == 'bin-path' || matrix.ignore-reason == 'version-latest'
- name: Verify pixi path (after setup-pixi, no ignore reason)
run: |
which pixi | grep -q $HOME/custom-existing-pixi/pixi
which pixi | grep -q "$HOME/custom existing pixi/pixi"
shell: bash
if: matrix.ignore-reason == 'none'
- name: Verify pixi path (after setup-pixi, ignore reason)
run: |
which pixi | grep -vq $HOME/custom-existing-pixi/pixi
which pixi | grep -vq "$HOME/custom existing pixi/pixi"
shell: bash
if: matrix.ignore-reason != 'none'
@@ -356,7 +362,7 @@ jobs:
os: [ubuntu-latest, macos-latest, windows-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Move pixi.toml
run: mv test/default/* .
- uses: ./
@@ -377,7 +383,7 @@ jobs:
os: [ubuntu-latest, macos-latest, windows-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Move pixi.toml
run: mv test/default/* .
- uses: ./
@@ -400,7 +406,7 @@ jobs:
os: [ubuntu-latest, macos-latest, windows-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Move pixi.toml
run: mv test/default/* .
- uses: ./
@@ -421,7 +427,7 @@ jobs:
os: [ubuntu-latest, macos-latest, windows-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Move pixi.toml
run: mv test/auth/* .
- uses: ./
@@ -433,13 +439,33 @@ jobs:
run: |
test -f .pixi/envs/default/conda-meta/private-package-0.0.1-0.json
pixi-shell:
auth-s3-install:
strategy:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Move pixi.toml
run: mv test/auth-s3/* .
- uses: ./
with:
cache: false
auth-host: s3://rattler-s3-testing
auth-s3-access-key-id: ${{ secrets.PIXI_TEST_R2_ACCESS_KEY_ID }}
auth-s3-secret-access-key: ${{ secrets.PIXI_TEST_R2_SECRET_ACCESS_KEY }}
- name: Ensure private package is installed
run: |
test -f .pixi/envs/default/conda-meta/my-webserver-0.1.0-pyh4616a5c_0.json
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]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Move pixi.toml
run: mv test/default/* .
- uses: ./
@@ -456,16 +482,42 @@ jobs:
- run: |
python --version | Select-String "3.11"
shell: pixi run pwsh -Command {0}
# TODO investigate: for some reason, this errors on ubuntu-arm
if: matrix.os != 'ubuntu-24.04-arm'
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]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- uses: ./
with:
run-install: false
- run: |
python --version | grep -q "3.11"
shell: pixi exec --spec python=3.11.* -- 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}
# TODO investigate: for some reason, this errors on ubuntu-arm
if: matrix.os != 'ubuntu-24.04-arm'
post-cleanup-linux:
runs-on: ubuntu-latest
strategy:
matrix:
post-cleanup: ['true', 'false']
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Move pixi.toml
run: mv test/default/* .
- uses: lisanna-dettwyler/action-post-run@d053b9b43d788b87a409f6cdb3b6fc87c6c8a4fe
- uses: lisanna-dettwyler/action-post-run@d053b9b43d788b87a409f6cdb3b6fc87c6c8a4fe # v3.1.0
with:
run: |
set -euxo pipefail
@@ -487,10 +539,10 @@ jobs:
matrix:
post-cleanup: ['true', 'false']
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Move pixi.toml
run: mv test/default/* .
- uses: lisanna-dettwyler/action-post-run@d053b9b43d788b87a409f6cdb3b6fc87c6c8a4fe
- uses: lisanna-dettwyler/action-post-run@d053b9b43d788b87a409f6cdb3b6fc87c6c8a4fe # v3.1.0
with:
run: |
set -euxo pipefail
@@ -509,10 +561,10 @@ jobs:
matrix:
post-cleanup: ['true', 'false']
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Move pixi.toml
run: mv test/default/* .
- uses: lisanna-dettwyler/action-post-run@d053b9b43d788b87a409f6cdb3b6fc87c6c8a4fe
- uses: lisanna-dettwyler/action-post-run@d053b9b43d788b87a409f6cdb3b6fc87c6c8a4fe # v3.1.0
with:
run: |
set -euxo pipefail
@@ -530,10 +582,10 @@ jobs:
matrix:
post-cleanup: ['true', 'false']
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Move pixi.toml
run: mv test/default/* .
- uses: lisanna-dettwyler/action-post-run@d053b9b43d788b87a409f6cdb3b6fc87c6c8a4fe
- uses: lisanna-dettwyler/action-post-run@d053b9b43d788b87a409f6cdb3b6fc87c6c8a4fe # v3.1.0
with:
run: |
set -euxo pipefail
@@ -548,10 +600,10 @@ jobs:
no-lockfile:
strategy:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
os: [ubuntu-latest, ubuntu-24.04-arm, macos-latest, windows-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Move pixi.toml
run: mv test/no-lockfile/* .
- uses: ./
@@ -583,7 +635,7 @@ jobs:
cache: ['true', 'false']
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Move pixi.toml
run: mv test/multiple-environments/* .
- uses: ./
@@ -619,7 +671,7 @@ jobs:
matrix:
os: [windows-latest, ubuntu-latest, macos-latest, macos-13]
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Move pixi files
run: mv test/default/* .
- uses: ./
@@ -635,7 +687,7 @@ jobs:
matrix:
os: [windows-latest, ubuntu-latest, macos-latest, macos-13]
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Move pixi files
run: mv test/default/* .
- uses: ./
@@ -660,7 +712,7 @@ jobs:
matrix:
os: [windows-latest, ubuntu-latest, macos-latest, macos-13]
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Move pixi files
run: mv test/default/* .
- uses: ./
@@ -684,7 +736,7 @@ jobs:
matrix:
os: [windows-latest, ubuntu-latest, macos-latest, macos-13]
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Move pixi files
run: mv test/default/* .
- uses: ./
@@ -696,13 +748,21 @@ jobs:
pyproject:
timeout-minutes: 10
runs-on: ubuntu-latest
strategy:
matrix:
os: [windows-latest, ubuntu-latest, macos-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Move pixi files
run: mv test/pyproject-manifest/* .
- uses: ./
- run: test -f .pixi/envs/default/bin/python
if: matrix.os != 'windows-latest'
shell: bash
- run: test -f .pixi/envs/default/python.exe
if: matrix.os == 'windows-latest'
shell: bash
- run: pixi run test
custom-pyproject-manifest-path:
@@ -711,7 +771,7 @@ jobs:
os: [ubuntu-latest, macos-latest, windows-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- uses: ./
with:
cache: true
@@ -723,7 +783,7 @@ jobs:
os: [ubuntu-latest, macos-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Move pixi.toml
run: mv test/default/* .
- uses: ./
@@ -739,7 +799,7 @@ jobs:
run:
shell: bash
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Move pixi.toml
run: mv test/default/* .
- uses: ./
@@ -755,7 +815,7 @@ jobs:
run:
shell: pwsh
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Move pixi.toml
run: mv test/default/* .
- uses: ./
@@ -771,7 +831,7 @@ jobs:
run:
shell: cmd
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Move pixi.toml
run: mv test/default/* .
- uses: ./
@@ -789,7 +849,7 @@ jobs:
environment-activation-false:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Move pixi.toml
run: mv test/default/* .
- uses: ./
@@ -800,7 +860,7 @@ jobs:
environment-activation-explicit-env:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Move pixi.toml
run: mv test/multiple-environments/* .
- uses: ./
@@ -813,7 +873,7 @@ jobs:
environment-activation-multiple-env:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Move pixi.toml
run: mv test/multiple-environments/* .
- uses: ./
@@ -834,7 +894,7 @@ jobs:
# matrix:
# os: [windows-latest, ubuntu-latest, macos-latest]
# steps:
# - uses: actions/checkout@v4
# - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
# - name: Move pixi files
# run: mv test/no-lockfile/* .
# - uses: ./
@@ -851,7 +911,7 @@ jobs:
# matrix:
# os: [windows-latest, ubuntu-latest, macos-latest]
# steps:
# - uses: actions/checkout@v4
# - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
# - name: Move pixi files
# run: mv test/default/* .
# - uses: ./
@@ -867,7 +927,7 @@ jobs:
# matrix:
# os: [windows-latest, ubuntu-latest, macos-latest]
# steps:
# - uses: actions/checkout@v4
# - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
# - name: Move pixi files
# run: mv test/default/* .
# - uses: ./
@@ -885,7 +945,7 @@ jobs:
# matrix:
# os: [windows-latest, ubuntu-latest, macos-latest]
# steps:
# - uses: actions/checkout@v4
# - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
# - name: Move pixi files
# run: mv test/no-lockfile/* .
# - uses: ./
@@ -901,7 +961,7 @@ jobs:
# matrix:
# os: [windows-latest, ubuntu-latest, macos-latest]
# steps:
# - uses: actions/checkout@v4
# - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
# - name: Move pixi files
# run: mv test/no-lockfile/* .
# - uses: ./
@@ -917,7 +977,7 @@ jobs:
# matrix:
# os: [windows-latest, ubuntu-latest, macos-latest]
# steps:
# - uses: actions/checkout@v4
# - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
# - name: Move pixi files
# run: mv test/lockfile-not-up-to-date/* .
# - uses: ./
@@ -933,7 +993,7 @@ jobs:
# matrix:
# os: [windows-latest, ubuntu-latest, macos-latest]
# steps:
# - uses: actions/checkout@v4
# - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
# - name: Move pixi files
# run: mv test/no-lockfile/* .
# - uses: ./
+3
View File
@@ -100,3 +100,6 @@ lib/**/*
# Ignore jetbrains files
.idea
# ESBuild metafile
metafile*.json
+2
View File
@@ -0,0 +1,2 @@
dist
pnpm-lock.yaml
+3
View File
@@ -0,0 +1,3 @@
{
"editor.defaultFormatter": "esbenp.prettier-vscode"
}
+72 -23
View File
@@ -23,9 +23,10 @@ GitHub Action to set up the [pixi](https://github.com/prefix-dev/pixi) package m
## Usage
```yml
- uses: prefix-dev/setup-pixi@v0.7.0
- uses: prefix-dev/setup-pixi@v0.8.8
with:
pixi-version: v0.21.1
pixi-version: v0.44.0
cache: true
auth-host: prefix.dev
auth-token: ${{ secrets.PREFIX_DEV_TOKEN }}
@@ -34,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.7.0`) to avoid breaking changes.
> Please pin the versions of this action to a specific version (i.e., `prefix-dev/setup-pixi@v0.8.8`) 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:
@@ -49,7 +50,7 @@ GitHub Action to set up the [pixi](https://github.com/prefix-dev/pixi) package m
> groups:
> dependencies:
> patterns:
> - "*"
> - '*'
> ```
## Features
@@ -73,7 +74,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.7.0
- uses: prefix-dev/setup-pixi@v0.8.8
with:
cache: true
cache-write: ${{ github.event_name == 'push' && github.ref_name == 'main' }}
@@ -117,10 +118,10 @@ test:
matrix:
environment: [py311, py312]
steps:
- uses: actions/checkout@v4
- uses: prefix-dev/setup-pixi@v0.7.0
with:
environments: ${{ matrix.environment }}
- uses: actions/checkout@v4
- uses: prefix-dev/setup-pixi@v0.8.8
with:
environments: ${{ matrix.environment }}
```
#### Install multiple environments in one job
@@ -128,7 +129,7 @@ test:
The following example will install both the `py311` and the `py312` environment on the runner.
```yml
- uses: prefix-dev/setup-pixi@v0.7.0
- uses: prefix-dev/setup-pixi@v0.8.8
with:
# separated by spaces
environments: >-
@@ -149,6 +150,7 @@ There are currently three ways to authenticate with pixi:
- using a token
- using a username and password
- using a conda-token
- using an S3 key pair
For more information, see the [pixi documentation](https://prefix.dev/docs/pixi/authentication).
@@ -163,7 +165,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.7.0
- uses: prefix-dev/setup-pixi@v0.8.8
with:
auth-host: prefix.dev
auth-token: ${{ secrets.PREFIX_DEV_TOKEN }}
@@ -175,7 +177,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.7.0
- uses: prefix-dev/setup-pixi@v0.8.8
with:
auth-host: custom-artifactory.com
auth-username: ${{ secrets.PIXI_USERNAME }}
@@ -184,16 +186,33 @@ This form of authentication (HTTP Basic Auth) is used in some enterprise environ
#### Conda-token
Specify the conda-token using the `conda-token` input argument.
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.7.0
- uses: prefix-dev/setup-pixi@v0.8.8
with:
auth-host: anaconda.org # or my-quetz-instance.com
conda-token: ${{ secrets.CONDA_TOKEN }}
auth-conda-token: ${{ secrets.CONDA_TOKEN }}
```
#### S3
Specify the S3 key pair using the `auth-access-key-id` and `auth-secret-access-key` input arguments.
You can also specify the session token using the `auth-session-token` input argument.
```yaml
- uses: prefix-dev/setup-pixi@v0.8.8
with:
auth-host: s3://my-s3-bucket
auth-s3-access-key-id: ${{ secrets.ACCESS_KEY_ID }}
auth-s3-secret-access-key: ${{ secrets.SECRET_ACCESS_KEY }}
# only needed if your key uses a session token
auth-s3-session-token: ${{ secrets.SESSION_TOKEN }}
```
See the [pixi documentation](https://pixi.sh/latest/advanced/s3) for more information about S3 authentication.
### Custom shell wrapper
`setup-pixi` allows you to run command inside of the pixi environment by specifying a custom shell wrapper with `shell: pixi run bash -e {0}`.
@@ -216,6 +235,7 @@ You can even run Python scripts like this:
```
If you want to use PowerShell, you need to specify `-Command` as well.
```yml
- run: | # everything here will be run inside of the pixi environment
python --version | Select-String "3.11"
@@ -228,6 +248,25 @@ 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.
#### One-off shell wrapper using `pixi exec`
With `pixi exec`, you can also run a one-off command inside a temporary pixi environment.
```yml
- run: | # everything here will be run inside of the temporary pixi environment
zstd --version
shell: pixi exec --spec zstd -- bash -e {0}
```
```yml
- run: | # everything here will be run inside of the temporary pixi environment
import ruamel.yaml
# ...
shell: pixi exec --spec python=3.11.* --spec ruamel.yaml -- python {0}
```
See [here](https://pixi.sh/latest/reference/cli#exec) for more information about `pixi exec`.
### 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.
@@ -235,7 +274,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.7.0
- uses: prefix-dev/setup-pixi@v0.8.8
with:
activate-environment: true
```
@@ -243,7 +282,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.7.0
- uses: prefix-dev/setup-pixi@v0.8.8
with:
environments: >-
py311
@@ -260,7 +299,7 @@ You can specify whether `setup-pixi` should run `pixi install --frozen` or `pixi
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.7.0
- uses: prefix-dev/setup-pixi@v0.8.8
with:
locked: true
# or
@@ -279,7 +318,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.7.0
- uses: prefix-dev/setup-pixi@v0.8.8
env:
RUNNER_DEBUG: true
```
@@ -297,7 +336,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.7.0
- uses: prefix-dev/setup-pixi@v0.8.8
with:
# one of `q`, `default`, `v`, `vv`, or `vvv`.
log-level: vvv
@@ -323,7 +362,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.7.0
- uses: prefix-dev/setup-pixi@v0.8.8
with:
post-cleanup: true
# ${{ runner.temp }}\Scripts\pixi.exe on Windows
@@ -339,11 +378,21 @@ 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.7.0
- uses: prefix-dev/setup-pixi@v0.8.8
with:
manifest-path: pyproject.toml
```
### Only install pixi
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.8.8
with:
run-install: false
```
## More examples
If you want to see more examples, you can take a look at the [GitHub Workflows of this repository](.github/workflows/test.yml).
@@ -352,5 +401,5 @@ If you want to see more examples, you can take a look at the [GitHub Workflows o
1. Clone this repository.
2. Run `pnpm install` inside the repository (if you don't have [`pnpm`](https://github.com/pnpm/pnpm) installed, you can install it with `pixi global install pnpm`).
3. Run `pnpm dev` for live transpilation of the TypeScript source code.
3. Run `pnpm dev` for live transpilation of the TypeScript source code.
4. To test the action, you can run [`act`](https://github.com/nektos/act) (inside docker) or use :sparkles: CI driven development :sparkles:.
+8 -3
View File
@@ -17,7 +17,7 @@ inputs:
manifest-path:
description: Path to the manifest file (i.e., `pixi.toml`) to use for the pixi CLI. Defaults to `pixi.toml`.
run-install:
description: Whether to run `pixi install` after setting up the environment. Defaults to `true`.
description: Whether to run `pixi install` after installing pixi. Defaults to `true`.
environments:
description: |
A space-separated list of environments to install. If not specified, only the default environment is installed.
@@ -27,8 +27,7 @@ inputs:
`$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:
@@ -56,6 +55,12 @@ inputs:
description: Password to use for authentication.
auth-conda-token:
description: Conda token to use for authentication.
auth-s3-access-key-id:
description: Access key ID to use for S3 authentication.
auth-s3-secret-access-key:
description: Secret access key to use for S3 authentication.
auth-s3-session-token:
description: Session token to use for S3 authentication.
post-cleanup:
description: |
If the action should clean up after itself. Defaults to `true`.
Generated Vendored
+27363 -40724
View File
File diff suppressed because one or more lines are too long
Generated Vendored
+19602 -4422
View File
File diff suppressed because one or more lines are too long
+42
View File
@@ -0,0 +1,42 @@
// @ts-check
import eslint from '@eslint/js'
import tseslint from 'typescript-eslint'
export default tseslint.config(
eslint.configs.recommended,
...tseslint.configs.strictTypeChecked,
...tseslint.configs.stylisticTypeChecked,
{
ignores: ['dist/*']
},
{
languageOptions: {
parserOptions: {
project: true,
tsconfigRootDir: import.meta.dirname
}
}
},
{
rules: {
'@typescript-eslint/no-unused-vars': [
'error',
{
argsIgnorePattern: '^_'
}
],
'@typescript-eslint/prefer-nullish-coalescing': [
'error',
{
ignoreConditionalTests: true
}
]
}
},
// disable type checking for config files as they aren't in the TS root
{
files: ['eslint.config.mjs', 'prettier.config.mjs', 'tsup.config.js'],
...tseslint.configs.disableTypeChecked
}
)
+19 -23
View File
@@ -1,13 +1,14 @@
{
"name": "setup-pixi",
"version": "0.7.0",
"version": "0.8.8",
"private": true,
"description": "Action to set up the pixi package manager.",
"scripts": {
"build": "tsup",
"dev": "tsup --watch",
"lint": "eslint ./src --ext ts",
"lint:fix": "eslint ./src --ext ts --fix"
"eslint": "eslint .",
"lint": "pnpm eslint && prettier -c .",
"lint:fix": "eslint . --fix && prettier -w ."
},
"repository": {
"type": "git",
@@ -21,30 +22,25 @@
"author": "Pavel Zwerschke <pavelzw@gmail.com>",
"license": "BSD-3-Clause",
"dependencies": {
"@actions/cache": "^3.2.4",
"@actions/core": "^1.10.1",
"@actions/cache": "^4.0.3",
"@actions/core": "^1.11.1",
"@actions/exec": "^1.1.1",
"@actions/io": "^1.1.3",
"@actions/tool-cache": "^2.0.1",
"toml": "^3.0.0",
"@actions/tool-cache": "^2.0.2",
"smol-toml": "^1.3.1",
"untildify": "^5.0.0",
"which": "^4.0.0",
"zod": "^3.22.4"
"which": "^5.0.0",
"zod": "^3.24.2"
},
"devDependencies": {
"@types/node": "^20.12.2",
"@types/which": "^3.0.3",
"@typescript-eslint/eslint-plugin": "^7.4.0",
"@typescript-eslint/parser": "^7.4.0",
"eslint": "^8.57.0",
"eslint-config-prettier": "^9.1.0",
"eslint-config-standard": "^17.1.0",
"eslint-plugin-import": "^2.29.1",
"eslint-plugin-n": "^16.6.2",
"eslint-plugin-prettier": "^5.1.3",
"eslint-plugin-promise": "^6.1.1",
"prettier": "^3.2.5",
"tsup": "^8.0.2",
"typescript": "^5.4.3"
"@eslint/js": "^9.23.0",
"@types/eslint__js": "^9.14.0",
"@types/node": "^22.13.14",
"@types/which": "^3.0.4",
"eslint": "^9.23.0",
"prettier": "^3.5.3",
"tsup": "^8.4.0",
"typescript": "^5.8.2",
"typescript-eslint": "^8.29.0"
}
}
+1966 -2439
View File
File diff suppressed because it is too large Load Diff
+9
View File
@@ -0,0 +1,9 @@
const config = {
tabWidth: 2,
printWidth: 120,
singleQuote: true,
trailingComma: 'none',
semi: false
}
export default config
+5 -4
View File
@@ -1,9 +1,9 @@
import * as os from 'os'
import os from 'os'
import * as osPath from 'path'
import * as core from '@actions/core'
import { executeGetOutput, pixiCmd } from './util'
type ShellHook = {
interface ShellHook {
environment_variables: Record<string, string>
}
@@ -11,9 +11,10 @@ const splitEnvironment = (shellHook: ShellHook): [Record<string, string>, string
if (os.platform() === 'win32') {
// On Windows, environment variables are case-insensitive but JSON isn't...
const pathEnvs = Object.keys(shellHook.environment_variables).filter((k) => k.toUpperCase() === 'PATH')
if (pathEnvs) {
if (pathEnvs.length > 0) {
const caseSensitivePathName = pathEnvs[0]
const path = shellHook.environment_variables[caseSensitivePathName]
// eslint-disable-next-line @typescript-eslint/no-dynamic-delete
delete shellHook.environment_variables[caseSensitivePathName]
return [shellHook.environment_variables, path]
}
@@ -47,7 +48,7 @@ export const activateEnvironment = async (environment: string): Promise<void> =>
// First, obtain the environment variables that would be set by environment activation
const envOption = environment === 'default' ? '' : `-e ${environment}`
const shellHookOutput = await executeGetOutput(pixiCmd(`shell-hook ${envOption} --json`), { silent: true })
const shellHook: ShellHook = JSON.parse(shellHookOutput.stdout)
const shellHook = JSON.parse(shellHookOutput.stdout) as ShellHook
// Then, we split the environment variables into the special 'PATH' and all others
const [envVars, path] = splitEnvironment(shellHook)
+7 -5
View File
@@ -25,7 +25,8 @@ export const generateCacheKey = async (cacheKeyPrefix: string) =>
core.debug(`sha: ${sha}`)
return `${cacheKeyPrefix}${getCondaArch()}-${sha}`
})
.catch((err) => {
.catch((err: unknown) => {
// eslint-disable-next-line @typescript-eslint/restrict-template-expressions
throw new Error(`Failed to generate cache key: ${err}`)
})
@@ -58,7 +59,7 @@ export const tryRestoreCache = (): Promise<string | undefined> => {
export const saveCache = () => {
const cache_ = options.cache
if (!cache_ || !cache_.cacheWrite) {
if (!cache_?.cacheWrite) {
core.debug('Skipping pixi cache save.')
return Promise.resolve(undefined)
}
@@ -71,10 +72,11 @@ export const saveCache = () => {
cache
.saveCache([cachePath], cacheKey, undefined, false)
.then((cacheId) => {
core.info(`Saved cache with ID \`${cacheId}\``)
core.info(`Saved cache with ID "${cacheId.toString()}"`)
})
.catch((err) => {
core.error(`Error saving cache: ${err.message}`)
.catch((err: unknown) => {
// eslint-disable-next-line @typescript-eslint/restrict-template-expressions
core.error(`Error saving cache: ${err}`)
})
)
)
+26 -15
View File
@@ -19,7 +19,9 @@ const downloadPixi = (source: PixiSource) => {
.mkdir(path.dirname(options.pixiBinPath), { recursive: true })
.then(() => downloadTool(url, options.pixiBinPath))
.then((_downloadPath) => fs.chmod(options.pixiBinPath, 0o755))
.then(() => core.info(`Pixi installed to ${options.pixiBinPath}`))
.then(() => {
core.info(`Pixi installed to ${options.pixiBinPath}`)
})
})
}
@@ -29,7 +31,7 @@ const pixiLogin = () => {
core.debug('Skipping pixi login.')
return Promise.resolve(0)
}
core.debug(`auth keys: ${Object.keys(auth)}`)
core.debug(`auth keys: ${Object.keys(auth).toString()}`)
return core.group('Logging in to private channel', () => {
// tokens get censored in the logs as long as they are a github secret
if ('token' in auth) {
@@ -40,6 +42,13 @@ const pixiLogin = () => {
core.debug(`Logging in to ${auth.host} with username and password`)
return execute(pixiCmd(`auth login --username ${auth.username} --password ${auth.password} ${auth.host}`, false))
}
if ('s3AccessKeyId' in auth) {
core.debug(`Logging in to ${auth.host} with s3 credentials`)
const command = auth.s3SessionToken
? `auth login --s3-access-key-id ${auth.s3AccessKeyId} --s3-secret-access-key ${auth.s3SecretAccessKey} --s3-session-token ${auth.s3SessionToken} ${auth.host}`
: `auth login --s3-access-key-id ${auth.s3AccessKeyId} --s3-secret-access-key ${auth.s3SecretAccessKey} ${auth.host}`
return execute(pixiCmd(command, false))
}
core.debug(`Logging in to ${auth.host} with conda token`)
return execute(pixiCmd(`auth login --conda-token ${auth.condaToken} ${auth.host}`, false))
})
@@ -114,7 +123,7 @@ const generateInfo = () => core.group('pixi info', () => execute(pixiCmd('info')
const activateEnv = (environment: string) => core.group('Activate environment', () => activateEnvironment(environment))
const run = async () => {
core.debug(`process.env.HOME: ${process.env.HOME}`)
core.debug(`process.env.HOME: ${process.env.HOME ?? '-'}`)
core.debug(`os.homedir(): ${os.homedir()}`)
if (options.downloadPixi) {
await downloadPixi(options.pixiSource)
@@ -129,16 +138,18 @@ const run = async () => {
}
}
run().catch((error) => {
if (core.isDebug()) {
run()
.then(() => exit(0)) // workaround for https://github.com/actions/toolkit/issues/1578
.catch((error: unknown) => {
if (core.isDebug()) {
throw error
}
if (error instanceof Error) {
core.setFailed(error.message)
exit(1)
} else if (typeof error === 'string') {
core.setFailed(error)
exit(1)
}
throw error
}
if (error instanceof Error) {
core.setFailed(error.message)
exit(1)
} else if (typeof error === 'string') {
core.setFailed(error)
exit(1)
}
throw error
})
})
+76 -30
View File
@@ -5,7 +5,7 @@ import { existsSync, readFileSync } from 'fs'
import * as core from '@actions/core'
import * as z from 'zod'
import untildify from 'untildify'
import { parse } from 'toml'
import { parse } from 'smol-toml'
import which from 'which'
type Inputs = Readonly<{
@@ -15,7 +15,7 @@ type Inputs = Readonly<{
manifestPath?: string
runInstall?: boolean
environments?: string[]
activateEnvironment?: boolean | string
activateEnvironment?: string
frozen?: boolean
locked?: boolean
cache?: boolean
@@ -27,6 +27,9 @@ type Inputs = Readonly<{
authUsername?: string
authPassword?: string
authCondaToken?: string
authS3AccessKeyId?: string
authS3SecretAccessKey?: string
authS3SessionToken?: string
postCleanup?: boolean
}>
@@ -51,9 +54,14 @@ type Auth = {
| {
condaToken: string
}
| {
s3AccessKeyId: string
s3SecretAccessKey: string
s3SessionToken?: string
}
)
type Cache = {
interface Cache {
cacheKeyPrefix: string
cacheWrite: boolean
}
@@ -74,6 +82,8 @@ export type Options = Readonly<{
postCleanup: boolean
activatedEnvironment?: string
}>
const pixiPath = 'pixi.toml'
const pyprojectPath = 'pyproject.toml'
const logLevelSchema = z.enum(['q', 'default', 'v', 'vv', 'vvv'])
export type LogLevel = z.infer<typeof logLevelSchema>
@@ -141,20 +151,41 @@ const validateInputs = (inputs: Inputs): void => {
if ((inputs.authUsername && !inputs.authPassword) || (!inputs.authUsername && inputs.authPassword)) {
throw new Error('You need to specify both auth-username and auth-password')
}
if (
(inputs.authS3AccessKeyId && !inputs.authS3SecretAccessKey) ||
(!inputs.authS3AccessKeyId && inputs.authS3SecretAccessKey)
) {
throw new Error('You need to specify both auth-s3-access-key-id and auth-s3-secret-access-key')
}
if (inputs.authS3SessionToken && (!inputs.authS3AccessKeyId || !inputs.authS3SecretAccessKey)) {
throw new Error(
'You need to specify both auth-s3-access-key-id and auth-s3-secret-access-key when using auth-s3-session-token'
)
}
// now we can assume that authUsername is defined iff authPassword is defined
if (inputs.authHost) {
if (!inputs.authToken && !inputs.authUsername && !inputs.authCondaToken) {
if (!inputs.authToken && !inputs.authUsername && !inputs.authCondaToken && !inputs.authS3AccessKeyId) {
throw new Error('You need to specify either auth-token or auth-username and auth-password or auth-conda-token')
}
if (
(inputs.authToken && (inputs.authUsername || inputs.authCondaToken)) ||
(inputs.authUsername && inputs.authCondaToken)
) {
throw new Error('You cannot specify two auth methods')
let authCount = 0
if (inputs.authToken) {
authCount++
}
if (inputs.authUsername) {
authCount++
}
if (inputs.authCondaToken) {
authCount++
}
if (inputs.authS3AccessKeyId) {
authCount++
}
if (authCount > 1) {
throw new Error('You cannot specify multiple auth methods')
}
}
if (!inputs.authHost) {
if (inputs.authToken || inputs.authUsername || inputs.authCondaToken) {
if (inputs.authToken || inputs.authUsername || inputs.authCondaToken || inputs.authS3AccessKeyId) {
throw new Error('You need to specify auth-host')
}
}
@@ -201,29 +232,34 @@ const inferOptions = (inputs: Inputs): Options => {
)
const logLevel = inputs.logLevel ?? (core.isDebug() ? 'vv' : 'default')
// infer manifest path from inputs or default to pixi.toml or pyproject.toml depending on what is present in the repo.
let manifestPath = 'pixi.toml' // default
let manifestPath = pixiPath // default
if (inputs.manifestPath) {
manifestPath = path.resolve(untildify(inputs.manifestPath))
} else {
if (existsSync('pixi.toml')) {
manifestPath = 'pixi.toml'
} else if (existsSync('pyproject.toml')) {
const fileContent = readFileSync('pyproject.toml', 'utf-8')
const parsedContent = parse(fileContent)
// only use pyproject.toml if [tool.pixi] is present
if (parsedContent.tool && parsedContent.tool.pixi) {
core.debug('The tool.pixi table found so using pyproject.toml as manifest file.')
manifestPath = 'pyproject.toml'
}
} else {
if (runInstall) {
core.warning('Could not find any manifest file. Defaulting to pixi.toml.')
if (existsSync(pixiPath)) {
manifestPath = pixiPath
} else if (existsSync(pyprojectPath)) {
try {
const fileContent = readFileSync(pyprojectPath, 'utf-8')
const parsedContent: Record<string, unknown> = parse(fileContent)
// Test if the tool.pixi table is present in the pyproject.toml file, if so, use it as the manifest file.
if (parsedContent.tool && typeof parsedContent.tool === 'object' && 'pixi' in parsedContent.tool) {
core.debug(`The tool.pixi table found, using ${pyprojectPath} as manifest file.`)
manifestPath = pyprojectPath
}
} catch (error) {
core.error(`Error while trying to read ${pyprojectPath} file.`)
core.error(error as Error)
}
} else if (runInstall) {
core.warning(`Could not find any manifest file. Defaulting to ${pixiPath}.`)
}
}
const pixiLockFile = path.join(path.dirname(manifestPath), 'pixi.lock')
const lockFileAvailable = existsSync(pixiLockFile)
core.debug(`lockFileAvailable: ${lockFileAvailable}`)
core.debug(`lockFileAvailable: ${lockFileAvailable ? 'yes' : 'no'}`)
if (!lockFileAvailable && inputs.cacheWrite === true) {
throw new Error('You cannot specify cache-write = true without a lock file present')
}
@@ -256,11 +292,18 @@ const inferOptions = (inputs: Inputs): Options => {
host: inputs.authHost,
condaToken: inputs.authCondaToken
}
: {
host: inputs.authHost,
username: inputs.authUsername!,
password: inputs.authPassword!
}) as Auth)
: inputs.authUsername
? {
host: inputs.authHost,
username: inputs.authUsername,
password: inputs.authPassword
}
: {
host: inputs.authHost,
s3AccessKeyId: inputs.authS3AccessKeyId,
s3SecretAccessKey: inputs.authS3SecretAccessKey,
s3SessionToken: inputs.authS3SessionToken
}) as Auth)
const postCleanup = inputs.postCleanup ?? true
return {
pixiSource,
@@ -317,6 +360,9 @@ const getOptions = () => {
authUsername: parseOrUndefined('auth-username', z.string()),
authPassword: parseOrUndefined('auth-password', z.string()),
authCondaToken: parseOrUndefined('auth-conda-token', z.string()),
authS3AccessKeyId: parseOrUndefined('auth-s3-access-key-id', z.string()),
authS3SecretAccessKey: parseOrUndefined('auth-s3-secret-access-key', z.string()),
authS3SessionToken: parseOrUndefined('auth-s3-session-token', z.string()),
postCleanup: parseOrUndefinedJSON('post-cleanup', z.boolean())
}
core.debug(`Inputs: ${JSON.stringify(inputs)}`)
+17 -14
View File
@@ -1,6 +1,6 @@
import fs from 'fs/promises'
import path from 'path'
import * as os from 'os'
import os from 'os'
import { exit } from 'process'
import * as core from '@actions/core'
import { options } from './options'
@@ -37,9 +37,10 @@ const cleanupEnv = () => {
return fs.rm(envDir, { recursive: true })
}
const determineCacheDir = () => {
const determineCacheDir = (): string => {
// rattler uses dirs::cache_dir https://docs.rs/dirs/latest/dirs/fn.cache_dir.html
if (os.platform() === 'win32') {
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
return process.env.LOCALAPPDATA!
}
if (os.platform() === 'linux') {
@@ -68,16 +69,18 @@ const run = () => {
return Promise.resolve()
}
run().catch((error) => {
if (core.isDebug()) {
run()
.then(() => exit(0)) // workaround for https://github.com/actions/toolkit/issues/1578
.catch((error: unknown) => {
if (core.isDebug()) {
throw error
}
if (error instanceof Error) {
core.setFailed(error.message)
exit(1)
} else if (typeof error === 'string') {
core.setFailed(error)
exit(1)
}
throw error
}
if (error instanceof Error) {
core.setFailed(error.message)
exit(1)
} else if (typeof error === 'string') {
core.setFailed(error)
exit(1)
}
throw error
})
})
+11 -9
View File
@@ -1,6 +1,6 @@
import type { BinaryLike } from 'crypto'
import { createHash } from 'crypto'
import * as os from 'os'
import os from 'os'
import * as core from '@actions/core'
import type { ExecOptions } from '@actions/exec'
import { exec, getExecOutput } from '@actions/exec'
@@ -13,7 +13,8 @@ export const getCondaArch = () => {
'linux-x64': 'linux-64',
'linux-arm64': 'linux-aarch64',
'linux-ppc64': 'linux-ppc64le',
'win32-x64': 'win-64'
'win32-x64': 'win-64',
'win32-arm64': 'win-arm64'
}
const arch = archDict[`${os.platform()}-${os.arch()}`]
if (!arch) {
@@ -52,9 +53,6 @@ export const getPixiUrlFromVersion = (version: string) => {
const arch = getArch()
const platform = getPlatform()
const pixiFile = `pixi-${arch}-${platform}${platform === 'pc-windows-msvc' ? '.exe' : ''}`
if (arch === 'aarch64' && platform === 'pc-windows-msvc') {
throw new Error('Windows on ARM is currently not supported')
}
if (version === 'latest') {
return `https://github.com/prefix-dev/pixi/releases/latest/download/${pixiFile}`
}
@@ -70,13 +68,17 @@ export const sha256Short = (s: BinaryLike) => {
}
export const execute = (cmd: string[]) => {
core.debug(`Executing: ${cmd.join(' ')}`)
return exec(cmd[0], cmd.slice(1))
core.debug(`Executing: \`${cmd.toString()}\``)
// needs escaping if cmd[0] contains spaces
// https://github.com/prefix-dev/setup-pixi/issues/184#issuecomment-2765724843
return exec(`"${cmd[0]}"`, cmd.slice(1))
}
export const executeGetOutput = (cmd: string[], options?: ExecOptions) => {
core.debug(`Executing: ${cmd.join(' ')}`)
return getExecOutput(cmd[0], cmd.slice(1), options)
core.debug(`Executing: \`${cmd.toString()}\``)
// needs escaping if cmd[0] contains spaces
// https://github.com/prefix-dev/setup-pixi/issues/184#issuecomment-2765724843
return getExecOutput(`"${cmd[0]}"`, cmd.slice(1), options)
}
export const pixiCmd = (command: string, withManifestPath = true) => {
File diff suppressed because it is too large Load Diff
+13
View File
@@ -0,0 +1,13 @@
[project]
name = "test-auth-s3"
channels = ["s3://rattler-s3-testing/channel", "conda-forge"]
platforms = ["osx-arm64", "osx-64", "linux-64", "linux-aarch64", "win-64"]
[project.s3-options.rattler-s3-testing]
endpoint-url = "https://e1a7cde76f1780ec06bac859036dbaf7.eu.r2.cloudflarestorage.com"
force-path-style = true
region = "auto"
[dependencies]
my-webserver = "*"
python = "*"
-3
View File
@@ -1,8 +1,5 @@
[project]
name = "test-auth"
version = "0.1.0"
description = "Add a short description here"
authors = ["Pavel"]
channels = ["conda-forge", "https://repo.prefix.dev/setup-pixi-test"]
platforms = ["osx-arm64", "osx-64", "linux-64", "linux-aarch64", "win-64"]
+229
View File
@@ -0,0 +1,229 @@
version: 6
environments:
default:
channels:
- url: https://conda.anaconda.org/conda-forge/
packages:
linux-64:
- conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2
- conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2
- conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.2.0-h767d61c_2.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_2.conda
- conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.2.0-h767d61c_2.conda
linux-aarch64:
- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-2_gnu.tar.bz2
- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h68df207_7.conda
- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-14.2.0-he277a41_2.conda
- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-14.2.0-he9431aa_2.conda
- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-14.2.0-he277a41_2.conda
osx-64:
- conda: https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.8-hfdf4475_7.conda
osx-arm64:
- conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda
win-64:
- conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_1.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-h2b53caa_26.conda
- conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.42.34438-hfd919c2_26.conda
win-arm64:
- conda: https://conda.anaconda.org/conda-forge/win-arm64/bzip2-1.0.8-hfbbf558_7.conda
- conda: https://conda.anaconda.org/conda-forge/win-arm64/vc-14.3-hfe6595e_26.conda
- conda: https://conda.anaconda.org/conda-forge/win-arm64/vc14_runtime-14.42.34438-hfe4e545_26.conda
packages:
- conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2
sha256: fe51de6107f9edc7aa4f786a70f4a883943bc9d39b3bb7307c04c41410990726
md5: d7c89558ba9fa0495403155b64376d81
license: None
size: 2562
timestamp: 1578324546067
- conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2
build_number: 16
sha256: fbe2c5e56a653bebb982eda4876a9178aedfc2b545f25d0ce9c4c0b508253d22
md5: 73aaf86a425cc6e73fcf236a5a46396d
depends:
- _libgcc_mutex 0.1 conda_forge
- libgomp >=7.5.0
constrains:
- openmp_impl 9999
license: BSD-3-Clause
license_family: BSD
size: 23621
timestamp: 1650670423406
- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-2_gnu.tar.bz2
build_number: 16
sha256: 3702bef2f0a4d38bd8288bbe54aace623602a1343c2cfbefd3fa188e015bebf0
md5: 6168d71addc746e8f2b8d57dfd2edcea
depends:
- libgomp >=7.5.0
constrains:
- openmp_impl 9999
license: BSD-3-Clause
license_family: BSD
size: 23712
timestamp: 1650670790230
- conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda
sha256: 5ced96500d945fb286c9c838e54fa759aa04a7129c59800f0846b4335cee770d
md5: 62ee74e96c5ebb0af99386de58cf9553
depends:
- __glibc >=2.17,<3.0.a0
- libgcc-ng >=12
license: bzip2-1.0.6
license_family: BSD
size: 252783
timestamp: 1720974456583
- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h68df207_7.conda
sha256: 2258b0b33e1cb3a9852d47557984abb6e7ea58e3d7f92706ec1f8e879290c4cb
md5: 56398c28220513b9ea13d7b450acfb20
depends:
- libgcc-ng >=12
license: bzip2-1.0.6
license_family: BSD
size: 189884
timestamp: 1720974504976
- conda: https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.8-hfdf4475_7.conda
sha256: cad153608b81fb24fc8c509357daa9ae4e49dfc535b2cb49b91e23dbd68fc3c5
md5: 7ed4301d437b59045be7e051a0308211
depends:
- __osx >=10.13
license: bzip2-1.0.6
license_family: BSD
size: 134188
timestamp: 1720974491916
- conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda
sha256: adfa71f158cbd872a36394c56c3568e6034aa55c623634b37a4836bd036e6b91
md5: fc6948412dbbbe9a4c9ddbbcfe0a79ab
depends:
- __osx >=11.0
license: bzip2-1.0.6
license_family: BSD
size: 122909
timestamp: 1720974522888
- conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda
sha256: 35a5dad92e88fdd7fc405e864ec239486f4f31eec229e31686e61a140a8e573b
md5: 276e7ffe9ffe39688abc665ef0f45596
depends:
- ucrt >=10.0.20348.0
- vc >=14.2,<15
- vc14_runtime >=14.29.30139
license: bzip2-1.0.6
license_family: BSD
size: 54927
timestamp: 1720974860185
- conda: https://conda.anaconda.org/conda-forge/win-arm64/bzip2-1.0.8-hfbbf558_7.conda
sha256: f6b3f14c17f7aebe0ac88e74957644da17288b1b78f8776ed4f04a4e6e4a7d9c
md5: 86d73707c1a3db358fb0b42fb6e33add
depends:
- vc >=14.3,<15
- vc14_runtime >=14.40.33810
license: bzip2-1.0.6
license_family: BSD
size: 54629
timestamp: 1720974690059
- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.2.0-h767d61c_2.conda
sha256: 3a572d031cb86deb541d15c1875aaa097baefc0c580b54dc61f5edab99215792
md5: ef504d1acbd74b7cc6849ef8af47dd03
depends:
- __glibc >=2.17,<3.0.a0
- _openmp_mutex >=4.5
constrains:
- libgomp 14.2.0 h767d61c_2
- libgcc-ng ==14.2.0=*_2
license: GPL-3.0-only WITH GCC-exception-3.1
license_family: GPL
size: 847885
timestamp: 1740240653082
- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-14.2.0-he277a41_2.conda
sha256: a57f7f9ba2a12f56eafdcd25b6d75f7be10b8fc1a802a58b76a77ca8c66f4503
md5: 6b4268a60b10f29257b51b9b67ff8d76
depends:
- _openmp_mutex >=4.5
constrains:
- libgcc-ng ==14.2.0=*_2
- libgomp 14.2.0 he277a41_2
license: GPL-3.0-only WITH GCC-exception-3.1
license_family: GPL
size: 535507
timestamp: 1740241069780
- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_2.conda
sha256: fb7558c328b38b2f9d2e412c48da7890e7721ba018d733ebdfea57280df01904
md5: a2222a6ada71fb478682efe483ce0f92
depends:
- libgcc 14.2.0 h767d61c_2
license: GPL-3.0-only WITH GCC-exception-3.1
license_family: GPL
size: 53758
timestamp: 1740240660904
- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-14.2.0-he9431aa_2.conda
sha256: 9647f75cddc18b07eebe6e1f21500eed50a6af2c43c84e831b4c7a597e10d226
md5: 692c2bb75f32cfafb6799cf6d1c5d0e0
depends:
- libgcc 14.2.0 he277a41_2
license: GPL-3.0-only WITH GCC-exception-3.1
license_family: GPL
size: 53622
timestamp: 1740241074834
- conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.2.0-h767d61c_2.conda
sha256: 1a3130e0b9267e781b89399580f3163632d59fe5b0142900d63052ab1a53490e
md5: 06d02030237f4d5b3d9a7e7d348fe3c6
depends:
- __glibc >=2.17,<3.0.a0
license: GPL-3.0-only WITH GCC-exception-3.1
license_family: GPL
size: 459862
timestamp: 1740240588123
- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-14.2.0-he277a41_2.conda
sha256: 4e303711fb7413bf98995beac58e731073099d7a669a3b81e49330ca8da05174
md5: b11c09d9463daf4cae492d29806b1889
license: GPL-3.0-only WITH GCC-exception-3.1
license_family: GPL
size: 462783
timestamp: 1740241005079
- conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_1.conda
sha256: db8dead3dd30fb1a032737554ce91e2819b43496a0db09927edf01c32b577450
md5: 6797b005cd0f439c4c5c9ac565783700
constrains:
- vs2015_runtime >=14.29.30037
license: LicenseRef-MicrosoftWindowsSDK10
size: 559710
timestamp: 1728377334097
- conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-h2b53caa_26.conda
sha256: 7a685b5c37e9713fa314a0d26b8b1d7a2e6de5ab758698199b5d5b6dba2e3ce1
md5: d3f0381e38093bde620a8d85f266ae55
depends:
- vc14_runtime >=14.42.34433
track_features:
- vc14
license: BSD-3-Clause
license_family: BSD
size: 17893
timestamp: 1743195261486
- conda: https://conda.anaconda.org/conda-forge/win-arm64/vc-14.3-hfe6595e_26.conda
sha256: dc8f1cbbfd91e267a05cdf9bb0a04e983f9df6b02885446dfe0d796c99e67e0a
md5: a57c01b43b14be7d028c84bad0bc1599
depends:
- vc14_runtime >=14.42.34438
track_features:
- vc14
license: BSD-3-Clause
license_family: BSD
size: 17394
timestamp: 1743194837327
- conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.42.34438-hfd919c2_26.conda
sha256: 30dcb71bb166e351aadbdc18f1718757c32cdaa0e1e5d9368469ee44f6bf4709
md5: 91651a36d31aa20c7ba36299fb7068f4
depends:
- ucrt >=10.0.20348.0
constrains:
- vs2015_runtime 14.42.34438.* *_26
license: LicenseRef-MicrosoftVisualCpp2015-2022Runtime
license_family: Proprietary
size: 750733
timestamp: 1743195092905
- conda: https://conda.anaconda.org/conda-forge/win-arm64/vc14_runtime-14.42.34438-hfe4e545_26.conda
sha256: 37cf20eb09cf77e261d61ba40b322e010a7043b4247f01420f8241bd68a683ba
md5: 1995ed932d07efb2fe632778484f9fbb
license: LicenseRef-MicrosoftVisualCpp2015-2022Runtime
license_family: Proprietary
size: 15480436
timestamp: 1743194808631
+14
View File
@@ -0,0 +1,14 @@
[project]
name = "test-win-arm64"
channels = ["conda-forge"]
platforms = [
"linux-64",
"linux-aarch64",
"osx-64",
"osx-arm64",
"win-64",
"win-arm64",
]
[dependencies]
bzip2 = "*"
+532 -879
View File
File diff suppressed because it is too large Load Diff
+1 -4
View File
@@ -1,10 +1,7 @@
[project]
name = "test-default"
version = "0.1.0"
description = "Add a short description here"
authors = ["Pavel Zwerschke <pavelzw@gmail.com>"]
channels = ["conda-forge"]
platforms = ["linux-64", "osx-64", "osx-arm64", "win-64"]
platforms = ["linux-64", "linux-aarch64", "osx-64", "osx-arm64", "win-64"]
[tasks]
test = "python -c 'print(\"Hello world!\")'"
+1 -4
View File
@@ -1,10 +1,7 @@
[project]
name = "test-no-lockfile"
version = "0.1.0"
description = "Add a short description here"
authors = ["Pavel Zwerschke <pavelzw@gmail.com>"]
channels = ["conda-forge"]
platforms = ["linux-64", "osx-64", "osx-arm64", "win-64"]
platforms = ["linux-64", "linux-aarch64", "osx-64", "osx-arm64", "win-64"]
[tasks]
test = "python -c 'print(\"Hello world!\")'"
+27 -2
View File
@@ -10,13 +10,38 @@ dependencies = ["flask==2.*"]
requires = ["setuptools", "wheel"]
build-backend = "setuptools.build_meta"
[dependency-groups]
# inline lists with mixed types are a toml 1.0 feature
dev = [{ include-group = "lint" }, { include-group = "docs" }, "ipython"]
docs = ["mkdocs>=1.4"]
lint = ["ruff>=0.1.14"]
[tool.ruff]
target-version = "py310"
line-length = 100
exclude = [ ".pixi", "__pycache__" ]
# the TOML parser should also support comments in lists
lint.select = [
# flake8-bugbear
"B",
# flake8-comprehensions
"C4",
# pydocstyle
"D",
# Error
"E",
# pyflakes
"F",
]
[tool.pixi.project]
name = "pyproject-manifest"
channels = ["conda-forge"]
platforms = ["linux-64", "osx-arm64", "osx-64", "win-64"]
[tool.pixi.pypi-dependencies]
boltons = "*"
[tool.pixi]
# This dotted inline table fails with the `toml` parser, but works with `@iarna/toml`.
pypi-dependencies.boltons = "*"
[tool.pixi.tasks]
test = "echo 'Running tests...'"
+7 -7
View File
@@ -1,12 +1,12 @@
{
"compilerOptions": {
"target": "es6", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */
"module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */
"outDir": "./lib", /* Redirect output structure to the directory. */
"rootDir": "./src", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */
"strict": true, /* Enable all strict type-checking options. */
"noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */
"esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */
"target": "ES2020" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */,
"module": "CommonJS" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */,
"outDir": "./lib" /* Redirect output structure to the directory. */,
"rootDir": "./src" /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */,
"strict": true /* Enable all strict type-checking options. */,
"noImplicitAny": true /* Raise error on expressions and declarations with an implied 'any' type. */,
"esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */
},
"exclude": ["node_modules", "**/*.test.ts"]
}
+9 -3
View File
@@ -8,9 +8,15 @@ export default defineConfig({
dts: false,
clean: true,
target: 'es2020',
format: ['cjs'],
sourcemap: true,
format: 'cjs',
sourcemap: false,
platform: 'node',
minify: false,
outExtension() {
return {
js: '.js'
}
},
// need to bundle dependencies because they aren't available otherwise when run inside the action
noExternal: [
'@actions/core',
@@ -19,7 +25,7 @@ export default defineConfig({
'@actions/io',
'@actions/tool-cache',
'untildify',
'toml',
'smol-toml',
'which',
'zod'
]