├── dist └── .gitignore ├── .github ├── CODEOWNERS ├── assets │ ├── enable-debug-logging-dark.png │ ├── enable-debug-logging-light.png │ └── pixi-url-auth-test │ │ └── Caddyfile ├── PULL_REQUEST_TEMPLATE.md ├── dependabot.yml ├── release.yml ├── workflows │ ├── release.yml │ └── build.yml └── scripts │ └── release.sh ├── test ├── .gitignore ├── bzip2 │ ├── pixi.toml │ └── pixi.lock ├── default │ ├── pixi.toml │ └── pixi.lock ├── no-lockfile │ └── pixi.toml ├── auth │ └── pixi.toml ├── old-pixi-lockfiles │ ├── pixi.toml │ └── pixi.lock ├── lockfile-not-up-to-date │ ├── pixi.toml │ └── pixi.lock ├── multiple-environments │ └── pixi.toml ├── auth-s3 │ └── pixi.toml ├── private-package │ ├── meta.yaml │ └── LICENSE └── pyproject-manifest │ └── pyproject.toml ├── .prettierignore ├── .gitattributes ├── .vscode └── settings.json ├── prettier.config.mjs ├── SECURITY.md ├── tsup.config.js ├── tsconfig.json ├── eslint.config.mjs ├── package.json ├── LICENSE ├── .gitignore ├── src ├── activate.ts ├── post.ts ├── util.ts ├── cache.ts ├── main.ts └── options.ts ├── action.yml └── README.md /dist/.gitignore: -------------------------------------------------------------------------------- 1 | *.js.map 2 | -------------------------------------------------------------------------------- /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | * @pavelzw 2 | -------------------------------------------------------------------------------- /test/.gitignore: -------------------------------------------------------------------------------- 1 | # pixi environments 2 | .pixi 3 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | dist 2 | pnpm-lock.yaml 3 | pixi.lock 4 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | dist/** merge=binary -diff linguist-generated=true 2 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "editor.defaultFormatter": "esbenp.prettier-vscode" 3 | } 4 | -------------------------------------------------------------------------------- /.github/assets/enable-debug-logging-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prefix-dev/setup-pixi/HEAD/.github/assets/enable-debug-logging-dark.png -------------------------------------------------------------------------------- /.github/assets/enable-debug-logging-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prefix-dev/setup-pixi/HEAD/.github/assets/enable-debug-logging-light.png -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | If updating documentation: 2 | 3 | - [ ] Updated documentation in https://github.com/prefix-dev/pixi/blob/main/docs/integration/ci/github_actions.md as well 4 | -------------------------------------------------------------------------------- /prettier.config.mjs: -------------------------------------------------------------------------------- 1 | const config = { 2 | tabWidth: 2, 3 | printWidth: 120, 4 | singleQuote: true, 5 | trailingComma: 'none', 6 | semi: false 7 | } 8 | 9 | export default config 10 | -------------------------------------------------------------------------------- /.github/assets/pixi-url-auth-test/Caddyfile: -------------------------------------------------------------------------------- 1 | :8080 { 2 | @unauthorized not header Authorization "Bearer s3cr3tT0k3nABC123" 3 | respond @unauthorized "Unauthorized: Invalid token" 401 4 | 5 | root * ./assets 6 | file_server 7 | } 8 | -------------------------------------------------------------------------------- /test/bzip2/pixi.toml: -------------------------------------------------------------------------------- 1 | [workspace] 2 | name = "test-win-arm64" 3 | channels = ["conda-forge"] 4 | platforms = [ 5 | "linux-64", 6 | "linux-aarch64", 7 | "osx-64", 8 | "osx-arm64", 9 | "win-64", 10 | "win-arm64", 11 | ] 12 | 13 | [dependencies] 14 | bzip2 = "*" 15 | -------------------------------------------------------------------------------- /test/default/pixi.toml: -------------------------------------------------------------------------------- 1 | [workspace] 2 | name = "test-default" 3 | channels = ["conda-forge"] 4 | platforms = ["linux-64", "linux-aarch64", "osx-64", "osx-arm64", "win-64"] 5 | 6 | [tasks] 7 | test = "python -c 'print(\"Hello world!\")'" 8 | 9 | [dependencies] 10 | python = "3.11.*" 11 | -------------------------------------------------------------------------------- /test/no-lockfile/pixi.toml: -------------------------------------------------------------------------------- 1 | [workspace] 2 | name = "test-no-lockfile" 3 | channels = ["conda-forge"] 4 | platforms = ["linux-64", "linux-aarch64", "osx-64", "osx-arm64", "win-64"] 5 | 6 | [tasks] 7 | test = "python -c 'print(\"Hello world!\")'" 8 | 9 | [dependencies] 10 | python = "3.11.*" 11 | -------------------------------------------------------------------------------- /test/auth/pixi.toml: -------------------------------------------------------------------------------- 1 | [workspace] 2 | name = "test-auth" 3 | channels = ["conda-forge", "https://repo.prefix.dev/setup-pixi-test"] 4 | platforms = ["osx-arm64", "osx-64", "linux-64", "linux-aarch64", "win-64"] 5 | 6 | [tasks] 7 | test = "python -c 'print(\"Hello world!\")'" 8 | 9 | [dependencies] 10 | python = "3.9.*" 11 | private-package = "*" 12 | -------------------------------------------------------------------------------- /test/old-pixi-lockfiles/pixi.toml: -------------------------------------------------------------------------------- 1 | [project] 2 | name = "test-default" 3 | version = "0.1.0" 4 | description = "Add a short description here" 5 | authors = ["Pavel Zwerschke "] 6 | channels = ["conda-forge"] 7 | platforms = ["linux-64", "osx-64", "osx-arm64", "win-64"] 8 | 9 | [tasks] 10 | test = "python -c 'print(\"Hello world!\")'" 11 | 12 | [dependencies] 13 | python = "3.11.*" 14 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: github-actions 4 | directory: / 5 | schedule: 6 | interval: monthly 7 | groups: 8 | gh-actions: 9 | patterns: 10 | - '*' 11 | - package-ecosystem: npm 12 | directory: / 13 | schedule: 14 | interval: monthly 15 | groups: 16 | nodejs: 17 | patterns: 18 | - '*' 19 | -------------------------------------------------------------------------------- /test/lockfile-not-up-to-date/pixi.toml: -------------------------------------------------------------------------------- 1 | [workspace] 2 | name = "test-default" 3 | version = "0.1.0" 4 | description = "Add a short description here" 5 | authors = ["Pavel Zwerschke "] 6 | channels = ["conda-forge"] 7 | platforms = ["linux-64", "osx-64", "osx-arm64", "win-64"] 8 | 9 | [tasks] 10 | test = "python -c 'print(\"Hello world!\")'" 11 | 12 | [dependencies] 13 | # the lockfile still has python 3.10.* 14 | python = "3.11.*" 15 | -------------------------------------------------------------------------------- /test/multiple-environments/pixi.toml: -------------------------------------------------------------------------------- 1 | [workspace] 2 | name = "test-package" 3 | channels = ["conda-forge"] 4 | platforms = ["linux-64", "osx-arm64", "osx-64", "win-64"] 5 | 6 | [dependencies] 7 | python = ">=3.11" 8 | pip = "*" 9 | polars = ">=0.14.24,<0.21" 10 | 11 | [feature.py311.dependencies] 12 | python = "3.11.*" 13 | [feature.py312.dependencies] 14 | python = "3.12.*" 15 | 16 | [environments] 17 | py311 = ["py311"] 18 | py312 = ["py312"] 19 | -------------------------------------------------------------------------------- /test/auth-s3/pixi.toml: -------------------------------------------------------------------------------- 1 | [workspace] 2 | name = "test-auth-s3" 3 | channels = ["s3://rattler-s3-testing/channel", "conda-forge"] 4 | platforms = ["osx-arm64", "osx-64", "linux-64", "linux-aarch64", "win-64"] 5 | 6 | [workspace.s3-options.rattler-s3-testing] 7 | endpoint-url = "https://e1a7cde76f1780ec06bac859036dbaf7.eu.r2.cloudflarestorage.com" 8 | force-path-style = true 9 | region = "auto" 10 | 11 | [dependencies] 12 | my-webserver = "*" 13 | python = "*" 14 | -------------------------------------------------------------------------------- /test/private-package/meta.yaml: -------------------------------------------------------------------------------- 1 | package: 2 | name: private-package 3 | version: 0.0.1 4 | 5 | build: 6 | noarch: python 7 | script: echo this is a noop 8 | number: 0 9 | 10 | requirements: 11 | run: 12 | - python >=3.9 13 | 14 | test: 15 | commands: 16 | - echo this is a noop 17 | 18 | about: 19 | home: http://github.com/prefix-dev/setup-pixi 20 | license: BSD-3-Clause 21 | license_file: LICENSE 22 | description: | 23 | This is a test package for setup-pixi. 24 | dev_url: http://github.com/prefix-dev/setup-pixi 25 | 26 | extra: 27 | recipe-maintainers: 28 | - pavelzw 29 | -------------------------------------------------------------------------------- /.github/release.yml: -------------------------------------------------------------------------------- 1 | changelog: 2 | exclude: 3 | labels: 4 | - ignore for release 5 | categories: 6 | - title: 💥 Breaking changes 7 | labels: 8 | - breaking 9 | - title: ✨ New features 10 | labels: 11 | - enhancement 12 | - title: 👷🏻 CI 13 | labels: 14 | - ci 15 | - title: 🐛 Bug fixes 16 | labels: 17 | - bug 18 | - title: 📝 Documentation 19 | labels: 20 | - documentation 21 | - title: ⬆️ Dependency updates 22 | labels: 23 | - dependencies 24 | - title: 🤷🏻 Other changes 25 | labels: 26 | - '*' 27 | -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | # Reporting Security Issues 2 | 3 | We take security bugs in our projects seriously. We appreciate your efforts to responsibly disclose your findings, and will make every effort to acknowledge your contributions. 4 | 5 | To report a security issue, please use the GitHub Security Advisory ["Report a Vulnerability"](https://github.com/prefix-dev/setup-pixi/security/advisories/new) tab. 6 | 7 | We will send a response indicating the next steps in handling your report. After the initial reply to your report, the security team will keep you informed of the progress towards a fix and full announcement, and may ask for additional information or guidance. 8 | -------------------------------------------------------------------------------- /tsup.config.js: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'tsup' 2 | 3 | export default defineConfig({ 4 | entry: { 5 | index: 'src/main.ts', 6 | post: 'src/post.ts' 7 | }, 8 | dts: false, 9 | clean: true, 10 | target: 'es2020', 11 | format: 'cjs', 12 | sourcemap: false, 13 | platform: 'node', 14 | minify: false, 15 | outExtension() { 16 | return { 17 | js: '.js' 18 | } 19 | }, 20 | // need to bundle dependencies because they aren't available otherwise when run inside the action 21 | noExternal: [ 22 | '@actions/core', 23 | '@actions/exec', 24 | '@actions/cache', 25 | '@actions/io', 26 | '@actions/tool-cache', 27 | 'handlebars', 28 | 'untildify', 29 | 'smol-toml', 30 | 'which', 31 | 'zod' 32 | ] 33 | }) 34 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES2020" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */, 4 | "module": "CommonJS" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */, 5 | "outDir": "./lib" /* Redirect output structure to the directory. */, 6 | "rootDir": "./src" /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */, 7 | "strict": true /* Enable all strict type-checking options. */, 8 | "noImplicitAny": true /* Raise error on expressions and declarations with an implied 'any' type. */, 9 | "esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ 10 | }, 11 | "exclude": ["node_modules", "**/*.test.ts"] 12 | } 13 | -------------------------------------------------------------------------------- /eslint.config.mjs: -------------------------------------------------------------------------------- 1 | // @ts-check 2 | 3 | import eslint from '@eslint/js' 4 | import tseslint from 'typescript-eslint' 5 | 6 | export default tseslint.config( 7 | eslint.configs.recommended, 8 | ...tseslint.configs.strictTypeChecked, 9 | ...tseslint.configs.stylisticTypeChecked, 10 | { 11 | ignores: ['dist/*'] 12 | }, 13 | { 14 | languageOptions: { 15 | parserOptions: { 16 | project: true, 17 | tsconfigRootDir: import.meta.dirname 18 | } 19 | } 20 | }, 21 | { 22 | rules: { 23 | '@typescript-eslint/no-unused-vars': [ 24 | 'error', 25 | { 26 | argsIgnorePattern: '^_' 27 | } 28 | ], 29 | '@typescript-eslint/prefer-nullish-coalescing': [ 30 | 'error', 31 | { 32 | ignoreConditionalTests: true 33 | } 34 | ] 35 | } 36 | }, 37 | // disable type checking for config files as they aren't in the TS root 38 | { 39 | files: ['eslint.config.mjs', 'prettier.config.mjs', 'tsup.config.js'], 40 | ...tseslint.configs.disableTypeChecked 41 | } 42 | ) 43 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: Release if version changed 2 | 3 | on: 4 | push: 5 | branches: main 6 | permissions: 7 | contents: write 8 | 9 | # To release a new version, update the version in package.json. 10 | # This will create a draft release with the changelog and push a 'vx' tag that points to the new release as well as 'vx.y.z'. 11 | jobs: 12 | release: 13 | runs-on: ubuntu-latest 14 | steps: 15 | - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 16 | - uses: Quantco/ui-actions/version-metadata@cd71d2a0e30b25569f6d723e57acca83347e58fc # v1.0.18 17 | id: version-metadata 18 | with: 19 | file: ./package.json 20 | token: ${{ secrets.GITHUB_TOKEN }} 21 | - run: .github/scripts/release.sh 22 | if: steps.version-metadata.outputs.changed == 'true' 23 | env: 24 | TAG_NAME: v${{ steps.version-metadata.outputs.newVersion }} 25 | - name: Create release 26 | if: steps.version-metadata.outputs.changed == 'true' 27 | uses: softprops/action-gh-release@5be0e66d93ac7ed76da52eca8bb058f665c3a5fe # v2.4.2 28 | with: 29 | generate_release_notes: true 30 | tag_name: v${{ steps.version-metadata.outputs.newVersion }} 31 | draft: true 32 | -------------------------------------------------------------------------------- /test/pyproject-manifest/pyproject.toml: -------------------------------------------------------------------------------- 1 | [project] 2 | name = "pyproject-manifest" 3 | version = "0.1.0" 4 | description = "Testing pyproject-manifest." 5 | readme = "README.md" 6 | requires-python = ">=3.11" 7 | dependencies = ["flask==2.*"] 8 | 9 | [build-system] 10 | requires = ["setuptools", "wheel"] 11 | build-backend = "setuptools.build_meta" 12 | 13 | [dependency-groups] 14 | # inline lists with mixed types are a toml 1.0 feature 15 | dev = [{ include-group = "lint" }, { include-group = "docs" }, "ipython"] 16 | docs = ["mkdocs>=1.4"] 17 | lint = ["ruff>=0.1.14"] 18 | 19 | [tool.ruff] 20 | target-version = "py310" 21 | line-length = 100 22 | exclude = [".pixi", "__pycache__"] 23 | # the TOML parser should also support comments in lists 24 | lint.select = [ 25 | # flake8-bugbear 26 | "B", 27 | # flake8-comprehensions 28 | "C4", 29 | # pydocstyle 30 | "D", 31 | # Error 32 | "E", 33 | # pyflakes 34 | "F", 35 | ] 36 | 37 | [tool.pixi.workspace] 38 | name = "pyproject-manifest" 39 | channels = ["conda-forge"] 40 | platforms = ["linux-64", "osx-arm64", "osx-64", "win-64"] 41 | 42 | [tool.pixi] 43 | # This dotted inline table fails with the `toml` parser, but works with `@iarna/toml`. 44 | pypi-dependencies.boltons = "*" 45 | 46 | [tool.pixi.tasks] 47 | test = "echo 'Running tests...'" 48 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "setup-pixi", 3 | "version": "0.9.3", 4 | "private": true, 5 | "description": "Action to set up the pixi package manager.", 6 | "scripts": { 7 | "build": "tsup", 8 | "dev": "tsup --watch", 9 | "eslint": "eslint .", 10 | "lint": "pnpm eslint && prettier -c .", 11 | "lint:fix": "eslint . --fix && prettier -w ." 12 | }, 13 | "repository": { 14 | "type": "git", 15 | "url": "git+https://github.com/prefix-dev/setup-pixi.git" 16 | }, 17 | "keywords": [ 18 | "setup", 19 | "pixi", 20 | "conda" 21 | ], 22 | "author": "Pavel Zwerschke ", 23 | "license": "BSD-3-Clause", 24 | "dependencies": { 25 | "@actions/cache": "^4.1.0", 26 | "@actions/core": "^1.11.1", 27 | "@actions/exec": "^1.1.1", 28 | "@actions/io": "^2.0.0", 29 | "@actions/tool-cache": "^2.0.2", 30 | "handlebars": "^4.7.8", 31 | "smol-toml": "^1.5.2", 32 | "untildify": "^6.0.0", 33 | "which": "^6.0.0", 34 | "zod": "^4.1.13" 35 | }, 36 | "devDependencies": { 37 | "@eslint/js": "^9.39.1", 38 | "@types/node": "^24.10.1", 39 | "@types/which": "^3.0.4", 40 | "eslint": "^9.39.1", 41 | "prettier": "^3.7.3", 42 | "tsup": "^8.5.1", 43 | "typescript": "^5.9.3", 44 | "typescript-eslint": "^8.48.0" 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | BSD 3-Clause License 2 | 3 | Copyright (c) 2023, Pavel Zwerschke 4 | 5 | Redistribution and use in source and binary forms, with or without 6 | modification, are permitted provided that the following conditions are met: 7 | 8 | 1. Redistributions of source code must retain the above copyright notice, this 9 | list of conditions and the following disclaimer. 10 | 11 | 2. Redistributions in binary form must reproduce the above copyright notice, 12 | this list of conditions and the following disclaimer in the documentation 13 | and/or other materials provided with the distribution. 14 | 15 | 3. Neither the name of the copyright holder nor the names of its 16 | contributors may be used to endorse or promote products derived from 17 | this software without specific prior written permission. 18 | 19 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 20 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 21 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 22 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 23 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 24 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 25 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 26 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 27 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 | -------------------------------------------------------------------------------- /test/private-package/LICENSE: -------------------------------------------------------------------------------- 1 | BSD 3-Clause License 2 | 3 | Copyright (c) 2023, Pavel Zwerschke 4 | 5 | Redistribution and use in source and binary forms, with or without 6 | modification, are permitted provided that the following conditions are met: 7 | 8 | 1. Redistributions of source code must retain the above copyright notice, this 9 | list of conditions and the following disclaimer. 10 | 11 | 2. Redistributions in binary form must reproduce the above copyright notice, 12 | this list of conditions and the following disclaimer in the documentation 13 | and/or other materials provided with the distribution. 14 | 15 | 3. Neither the name of the copyright holder nor the names of its 16 | contributors may be used to endorse or promote products derived from 17 | this software without specific prior written permission. 18 | 19 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 20 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 21 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 22 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 23 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 24 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 25 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 26 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 27 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 | -------------------------------------------------------------------------------- /.github/scripts/release.sh: -------------------------------------------------------------------------------- 1 | #!/bin/env bash 2 | 3 | version="${TAG_NAME}" 4 | major="${version%%.*}" # see https://linuxjournal.com/article/8919 for an explanation of this bash magic 5 | 6 | git tag "${version}" 7 | git push origin "${version}" 8 | push_worked=$? 9 | if [ $push_worked -eq 0 ]; then 10 | echo "Created ${version} tag on remote." 11 | echo "Created \`${version}\` tag on remote." >> "$GITHUB_STEP_SUMMARY" 12 | else 13 | echo "Failed to push ${version} tag to remote." 14 | echo "Failed to push \`${version}\` tag to remote." >> "$GITHUB_STEP_SUMMARY" 15 | exit 1 16 | fi 17 | 18 | git tag -d "${major}" 19 | local_delete=$? 20 | if [ $local_delete -eq 0 ]; then 21 | echo "Deleted local tag ${major}." 22 | echo "Deleted local tag \`${major}\`." >> "$GITHUB_STEP_SUMMARY" 23 | else 24 | echo "No local tag ${major} to delete." 25 | echo "No local tag \`${major}\` to delete." >> "$GITHUB_STEP_SUMMARY" 26 | fi 27 | git tag "${major}" 28 | 29 | git push -d origin "${major}" 30 | remote_delete=$? 31 | if [ $remote_delete -eq 0 ]; then 32 | echo "Deleted remote tag ${major}." 33 | echo "Deleted remote tag \`${major}\`." >> "$GITHUB_STEP_SUMMARY" 34 | else 35 | echo "No remote tag ${major} to delete." 36 | echo "No remote tag \`${major}\` to delete." >> "$GITHUB_STEP_SUMMARY" 37 | fi 38 | git push origin "${major}" 39 | push_worked=$? 40 | if [ $push_worked -ne 0 ]; then 41 | echo "Failed to push ${major} tag to remote." 42 | echo "Failed to push \`${major}\` tag to remote." >> "$GITHUB_STEP_SUMMARY" 43 | exit 1 44 | fi 45 | 46 | if [ $remote_delete -eq 0 ]; then 47 | echo "Result: moved ${major} -> ${version} tag on remote." 48 | echo "Result: moved \`${major}\` -> \`${version}\` tag on remote." >> "$GITHUB_STEP_SUMMARY" 49 | else 50 | echo "Result: created ${major} -> ${version} tag on remote." 51 | echo "Result: created \`${major}\` -> \`${version}\` tag on remote." >> "$GITHUB_STEP_SUMMARY" 52 | fi 53 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Dependency directory 2 | node_modules 3 | 4 | # Rest pulled from https://github.com/github/gitignore/blob/master/Node.gitignore 5 | # Logs 6 | logs 7 | *.log 8 | npm-debug.log* 9 | yarn-debug.log* 10 | yarn-error.log* 11 | lerna-debug.log* 12 | 13 | # Diagnostic reports (https://nodejs.org/api/report.html) 14 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 15 | 16 | # Runtime data 17 | pids 18 | *.pid 19 | *.seed 20 | *.pid.lock 21 | 22 | # Directory for instrumented libs generated by jscoverage/JSCover 23 | lib-cov 24 | 25 | # Coverage directory used by tools like istanbul 26 | coverage 27 | *.lcov 28 | 29 | # nyc test coverage 30 | .nyc_output 31 | 32 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 33 | .grunt 34 | 35 | # Bower dependency directory (https://bower.io/) 36 | bower_components 37 | 38 | # node-waf configuration 39 | .lock-wscript 40 | 41 | # Compiled binary addons (https://nodejs.org/api/addons.html) 42 | build/Release 43 | 44 | # Dependency directories 45 | jspm_packages/ 46 | 47 | # TypeScript v1 declaration files 48 | typings/ 49 | 50 | # TypeScript cache 51 | *.tsbuildinfo 52 | 53 | # Optional npm cache directory 54 | .npm 55 | 56 | # Optional eslint cache 57 | .eslintcache 58 | 59 | # Optional REPL history 60 | .node_repl_history 61 | 62 | # Output of 'npm pack' 63 | *.tgz 64 | 65 | # Yarn Integrity file 66 | .yarn-integrity 67 | 68 | # dotenv environment variables file 69 | .env 70 | .env.test 71 | 72 | # parcel-bundler cache (https://parceljs.org/) 73 | .cache 74 | 75 | # next.js build output 76 | .next 77 | 78 | # nuxt.js build output 79 | .nuxt 80 | 81 | # vuepress build output 82 | .vuepress/dist 83 | 84 | # Serverless directories 85 | .serverless/ 86 | 87 | # FuseBox cache 88 | .fusebox/ 89 | 90 | # DynamoDB Local files 91 | .dynamodb/ 92 | 93 | # OS metadata 94 | .DS_Store 95 | Thumbs.db 96 | 97 | # Ignore built ts files 98 | __tests__/runner/* 99 | lib/**/* 100 | 101 | # Ignore jetbrains files 102 | .idea 103 | 104 | # ESBuild metafile 105 | metafile*.json 106 | -------------------------------------------------------------------------------- /src/activate.ts: -------------------------------------------------------------------------------- 1 | import os from 'os' 2 | import * as osPath from 'path' 3 | import * as core from '@actions/core' 4 | import { executeGetOutput, pixiCmd } from './util' 5 | 6 | interface ShellHook { 7 | environment_variables: Record 8 | } 9 | 10 | const splitEnvironment = (shellHook: ShellHook): [Record, string?] => { 11 | if (os.platform() === 'win32') { 12 | // On Windows, environment variables are case-insensitive but JSON isn't... 13 | const pathEnvs = Object.keys(shellHook.environment_variables).filter((k) => k.toUpperCase() === 'PATH') 14 | if (pathEnvs.length > 0) { 15 | const caseSensitivePathName = pathEnvs[0] 16 | const path = shellHook.environment_variables[caseSensitivePathName] 17 | // eslint-disable-next-line @typescript-eslint/no-dynamic-delete 18 | delete shellHook.environment_variables[caseSensitivePathName] 19 | return [shellHook.environment_variables, path] 20 | } 21 | } else { 22 | if ('PATH' in shellHook.environment_variables) { 23 | const path = shellHook.environment_variables.PATH 24 | delete shellHook.environment_variables.PATH 25 | return [shellHook.environment_variables, path] 26 | } 27 | } 28 | 29 | // If the path cannot be found, return all other environment variables 30 | return [shellHook.environment_variables] 31 | } 32 | 33 | const getNewPathComponents = (path: string): string[] => { 34 | const currentPath = process.env.PATH 35 | if (!currentPath) { 36 | throw new Error('Unable to obtain current PATH from environment') 37 | } 38 | if (!path.endsWith(currentPath)) { 39 | throw new Error('Unable to handle environment activation which does not only append to PATH') 40 | } 41 | core.debug(`Found current path '${currentPath}'`) 42 | core.debug(`Got new path '${path}'`) 43 | const newPath = path.slice(0, path.length - currentPath.length) 44 | return newPath.split(osPath.delimiter).filter((p) => p.length > 0) 45 | } 46 | 47 | export const activateEnvironment = async (environment: string): Promise => { 48 | // First, obtain the environment variables that would be set by environment activation 49 | const envOption = environment === 'default' ? '' : `-e ${environment}` 50 | const shellHookOutput = await executeGetOutput(pixiCmd(`shell-hook ${envOption} --json`), { silent: true }) 51 | const shellHook = JSON.parse(shellHookOutput.stdout) as ShellHook 52 | 53 | // Then, we split the environment variables into the special 'PATH' and all others 54 | const [envVars, path] = splitEnvironment(shellHook) 55 | 56 | // Finally, new path components are added... 57 | if (path) { 58 | const newComponents = getNewPathComponents(path) 59 | for (const component of newComponents) { 60 | core.info(`Adding path component '${component}'`) 61 | core.addPath(component) 62 | } 63 | } 64 | 65 | // ... as well as all remaining environment variables 66 | for (const key of Object.keys(envVars)) { 67 | core.info(`Exporting environment variable '${key}=${envVars[key]}'`) 68 | core.exportVariable(key, envVars[key]) 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /src/post.ts: -------------------------------------------------------------------------------- 1 | import fs from 'fs/promises' 2 | import { existsSync } from 'fs' 3 | import path from 'path' 4 | import os from 'os' 5 | import { exit } from 'process' 6 | import * as core from '@actions/core' 7 | import { options } from './options' 8 | 9 | const removeEmptyParentDirs = (dirPath: string): Promise => { 10 | if (existsSync(dirPath)) { 11 | return fs.readdir(dirPath).then((files) => { 12 | if (files.length === 0) { 13 | core.debug(`Removing empty directory ${dirPath}.`) 14 | return fs.rm(dirPath, { recursive: true, force: true }).then(() => { 15 | const parentDir = path.dirname(dirPath) 16 | if (parentDir !== dirPath) { 17 | return removeEmptyParentDirs(parentDir) 18 | } 19 | }) 20 | } 21 | }) 22 | } 23 | return Promise.resolve() 24 | } 25 | 26 | const cleanupPixiBin = () => { 27 | const pixiBinPath = options.pixiBinPath 28 | const pixiBinDir = path.dirname(pixiBinPath) 29 | core.debug(`Cleaning up pixi binary ${pixiBinPath}.`) 30 | if (existsSync(pixiBinPath)) { 31 | return fs.rm(pixiBinPath).then(() => removeEmptyParentDirs(pixiBinDir)) 32 | } else { 33 | return removeEmptyParentDirs(pixiBinDir) 34 | } 35 | } 36 | 37 | const cleanupEnv = () => { 38 | if (!options.runInstall) { 39 | core.debug('Skipping cleanup of .pixi directory.') 40 | return Promise.resolve() 41 | } 42 | const envDir = path.join(path.dirname(options.manifestPath), '.pixi') 43 | core.debug(`Cleaning up .pixi directory ${envDir}.`) 44 | return fs.rm(envDir, { 45 | recursive: true, 46 | // Ignore exceptions if environment does not exist anymore, 47 | // to avoid errors if setup-pixi is used multiple times within the same workflow. 48 | force: true 49 | }) 50 | } 51 | 52 | const determineCacheDir = (): string => { 53 | // rattler uses dirs::cache_dir https://docs.rs/dirs/latest/dirs/fn.cache_dir.html 54 | if (os.platform() === 'win32') { 55 | // eslint-disable-next-line @typescript-eslint/no-non-null-assertion 56 | return process.env.LOCALAPPDATA! 57 | } 58 | if (os.platform() === 'linux') { 59 | return process.env.XDG_CACHE_HOME ?? path.join(os.homedir(), '.cache') 60 | } 61 | return path.join(os.homedir(), 'Library', 'Caches') 62 | } 63 | 64 | const cleanupRattler = () => { 65 | const rattlerPath = path.join(os.homedir(), '.rattler') 66 | const cacheDir = determineCacheDir() 67 | const rattlerCachePath = path.join(cacheDir, 'rattler') 68 | core.debug(`Cleaning up rattler directories ${rattlerPath} and ${rattlerCachePath}.`) 69 | return Promise.all([ 70 | fs.rm(rattlerPath, { recursive: true, force: true }), 71 | fs.rm(rattlerCachePath, { recursive: true, force: true }) 72 | ]) 73 | } 74 | 75 | const run = () => { 76 | const postCleanup = options.postCleanup 77 | if (postCleanup) { 78 | return Promise.all([cleanupPixiBin(), cleanupEnv(), cleanupRattler()]) 79 | } 80 | core.debug('Skipping post-cleanup.') 81 | return Promise.resolve() 82 | } 83 | 84 | run() 85 | .then(() => exit(0)) // workaround for https://github.com/actions/toolkit/issues/1578 86 | .catch((error: unknown) => { 87 | if (core.isDebug()) { 88 | throw error 89 | } 90 | if (error instanceof Error) { 91 | core.setFailed(error.message) 92 | exit(1) 93 | } else if (typeof error === 'string') { 94 | core.setFailed(error) 95 | exit(1) 96 | } 97 | throw error 98 | }) 99 | -------------------------------------------------------------------------------- /src/util.ts: -------------------------------------------------------------------------------- 1 | import type { BinaryLike } from 'crypto' 2 | import { createHash } from 'crypto' 3 | import os from 'os' 4 | import * as core from '@actions/core' 5 | import type { ExecOptions } from '@actions/exec' 6 | import { exec, getExecOutput } from '@actions/exec' 7 | import { options } from './options' 8 | import Handlebars from 'handlebars' 9 | 10 | export const DEFAULT_PIXI_URL_TEMPLATE = `\ 11 | {{#if latest~}} 12 | https://github.com/prefix-dev/pixi/releases/latest/download/{{pixiFile}} 13 | {{~else~}} 14 | https://github.com/prefix-dev/pixi/releases/download/{{version}}/{{pixiFile}} 15 | {{~/if}}` 16 | 17 | export const getCondaArch = () => { 18 | const archDict: Record = { 19 | 'darwin-x64': 'osx-64', 20 | 'darwin-arm64': 'osx-arm64', 21 | 'linux-x64': 'linux-64', 22 | 'linux-arm64': 'linux-aarch64', 23 | 'linux-ppc64': 'linux-ppc64le', 24 | 'win32-x64': 'win-64', 25 | 'win32-arm64': 'win-arm64' 26 | } 27 | const arch = archDict[`${os.platform()}-${os.arch()}`] 28 | if (!arch) { 29 | throw new Error(`Unsupported platform: ${os.platform()}-${os.arch()}`) 30 | } 31 | return arch 32 | } 33 | 34 | const getPlatform = () => { 35 | const platform = os.platform() 36 | switch (platform) { 37 | case 'darwin': 38 | return 'apple-darwin' 39 | case 'linux': 40 | return 'unknown-linux-musl' 41 | case 'win32': 42 | return 'pc-windows-msvc' 43 | default: 44 | throw new Error(`Unsupported architecture: ${platform}`) 45 | } 46 | } 47 | 48 | const getArch = () => { 49 | const arch = os.arch() 50 | switch (arch) { 51 | case 'x64': 52 | return 'x86_64' 53 | case 'arm64': 54 | return 'aarch64' 55 | default: 56 | throw new Error(`Unsupported architecture: ${arch}`) 57 | } 58 | } 59 | 60 | export const renderPixiUrl = (urlTemplate: string, version: string) => { 61 | const latest = version == 'latest' 62 | const arch = getArch() 63 | const platform = getPlatform() 64 | const pixiFile = `pixi-${arch}-${platform}${platform === 'pc-windows-msvc' ? '.exe' : ''}` 65 | const template = Handlebars.compile(urlTemplate) 66 | return template({ 67 | version, 68 | latest, 69 | pixiFile 70 | }) 71 | } 72 | 73 | export const sha256 = (s: BinaryLike) => { 74 | return createHash('sha256').update(s).digest('hex') 75 | } 76 | 77 | export const sha256Short = (s: BinaryLike) => { 78 | return sha256(s).slice(0, 7) 79 | } 80 | 81 | export const execute = (cmd: string[]) => { 82 | core.debug(`Executing: \`${cmd.toString()}\``) 83 | // needs escaping if cmd[0] contains spaces 84 | // https://github.com/prefix-dev/setup-pixi/issues/184#issuecomment-2765724843 85 | return exec(`"${cmd[0]}"`, cmd.slice(1)) 86 | } 87 | 88 | export const executeGetOutput = (cmd: string[], options?: ExecOptions) => { 89 | core.debug(`Executing: \`${cmd.toString()}\``) 90 | // needs escaping if cmd[0] contains spaces 91 | // https://github.com/prefix-dev/setup-pixi/issues/184#issuecomment-2765724843 92 | return getExecOutput(`"${cmd[0]}"`, cmd.slice(1), options) 93 | } 94 | 95 | export const pixiCmd = (command: string, withManifestPath = true) => { 96 | let commandArray = [options.pixiBinPath].concat(command.split(' ').filter((x) => x !== '')) 97 | if (withManifestPath) { 98 | commandArray = commandArray.concat(['--manifest-path', options.manifestPath]) 99 | } 100 | commandArray = commandArray.concat(['--color', 'always']) 101 | switch (options.logLevel) { 102 | case 'vvv': 103 | commandArray = commandArray.concat(['-vvv']) 104 | break 105 | case 'vv': 106 | commandArray = commandArray.concat(['-vv']) 107 | break 108 | case 'v': 109 | commandArray = commandArray.concat(['-v']) 110 | break 111 | case 'default': 112 | break 113 | case 'q': 114 | commandArray = commandArray.concat(['-q']) 115 | break 116 | } 117 | return commandArray 118 | } 119 | -------------------------------------------------------------------------------- /action.yml: -------------------------------------------------------------------------------- 1 | name: setup-pixi 2 | description: Install the pixi package manager 3 | author: Pavel Zwerschke 4 | branding: 5 | icon: package 6 | color: yellow 7 | 8 | inputs: 9 | pixi-version: 10 | description: Version of pixi to install 11 | pixi-url: 12 | description: URL of pixi to install. Can be a Handlebars template receiving `version`, `latest`, and `pixiFile` as variables. 13 | pixi-url-headers: 14 | description: Headers to use when fetching the pixi binary from `pixi-url`. Should be a JSON string. 15 | log-level: 16 | description: | 17 | Log level for the pixi CLI. 18 | One of `q`, `default`, `v`, `vv`, or `vvv`. 19 | manifest-path: 20 | description: Path to the manifest file (i.e., `pixi.toml`) to use for the pixi CLI. Defaults to `pixi.toml`. 21 | run-install: 22 | description: Whether to run `pixi install` after installing pixi. Defaults to `true`. 23 | environments: 24 | description: | 25 | A space-separated list of environments to install. If not specified, only the default environment is installed. 26 | global-environments: 27 | description: | 28 | A newline-separated list of packages to install globally with `pixi global install`. 29 | activate-environment: 30 | description: | 31 | If the installed environment should be "activated" for the current job, modifying `$GITHUB_ENV` and 32 | `$GITHUB_PATH`. If more than one environment is specified in `environments`, this must be the name of the 33 | environment. Defaults to `false`. Requires at least pixi v0.21.0. 34 | locked: 35 | description: Whether to use `pixi install --locked`. Defaults to `true` when the lockfile is present, otherwise `false`. 36 | frozen: 37 | description: Whether to use `pixi install --frozen`. Defaults to `false`. 38 | cache: 39 | description: Whether to cache the pixi environment. Defaults to `true`. Only works if `pixi.lock` is present. 40 | global-cache: 41 | description: | 42 | Whether to cache the global environment(s). Defaults to `false`. As there is no lockfile for global environment, 43 | the global cache will expire at the end of every month, to ensure it does not go stale. 44 | cache-key: 45 | description: | 46 | Cache key prefix to use for caching the pixi environment. 47 | Defaults to `pixi-`. The full cache key is `-`. 48 | global-cache-key: 49 | description: | 50 | Cache key prefix to use for caching the global environments. 51 | Defaults to `pixi-global-`. The full cache key is `-`. 52 | cache-write: 53 | description: | 54 | Whether to write to the cache or only read from it. Defaults to `true`. Applies to both project and global caches as the case may be. 55 | pixi-bin-path: 56 | description: | 57 | Path to the pixi binary to use. Defaults to `~/.pixi/bin/pixi`. 58 | auth-host: 59 | description: | 60 | Host to use for authentication. If not set, pixi is not authenticating. 61 | Requires `auth-token` or `auth-conda-token` or `auth-username` and `auth-password` to be set. 62 | See https://prefix.dev/docs/pixi/authentication 63 | auth-token: 64 | description: Token to use for authentication. 65 | auth-username: 66 | description: Username to use for authentication. 67 | auth-password: 68 | description: Password to use for authentication. 69 | auth-conda-token: 70 | description: Conda token to use for authentication. 71 | auth-s3-access-key-id: 72 | description: Access key ID to use for S3 authentication. 73 | auth-s3-secret-access-key: 74 | description: Secret access key to use for S3 authentication. 75 | auth-s3-session-token: 76 | description: Session token to use for S3 authentication. 77 | pypi-keyring-provider: 78 | description: | 79 | Specifies whether to use keyring to look up credentials for PyPI. 80 | options: disabled, subprocess 81 | post-cleanup: 82 | description: | 83 | If the action should clean up after itself. Defaults to `true`. 84 | If `true`, the pixi environment, the pixi binary and the rattler files in ~/.rattler and ~/.cache/rattler are removed. 85 | 86 | runs: 87 | using: node24 88 | main: dist/index.js 89 | post: dist/post.js 90 | -------------------------------------------------------------------------------- /.github/workflows/build.yml: -------------------------------------------------------------------------------- 1 | name: Build 2 | 3 | on: 4 | push: 5 | branches: [main] 6 | pull_request: 7 | branches: [main] 8 | merge_group: 9 | schedule: 10 | # every 3 months 11 | - cron: 0 0 1 */3 * 12 | workflow_dispatch: 13 | 14 | jobs: 15 | build: 16 | runs-on: ubuntu-latest 17 | steps: 18 | - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 19 | 20 | - name: Install pnpm 21 | uses: pnpm/action-setup@41ff72655975bd51cab0327fa583b6e92b6d3061 # v4.4.0 22 | with: 23 | version: 9 24 | 25 | - name: Install Node.js 26 | uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0 27 | with: 28 | node-version: 20 29 | cache: pnpm 30 | 31 | - name: Install dependencies 32 | run: pnpm install --frozen-lockfile 33 | 34 | - name: Rebuild the dist/ directory 35 | run: pnpm build 36 | 37 | - name: Lint 38 | run: pnpm lint 39 | 40 | reference-latest-version-in-readme: 41 | name: Reference latest version in README 42 | runs-on: ubuntu-latest 43 | steps: 44 | - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 45 | 46 | - name: Assert latest setup-pixi version is mentioned in README 47 | run: | 48 | set -euo pipefail 49 | latest_version="$(jq -r '.version' package.json)" 50 | count_expected=21 51 | count_actual="$(grep -c "setup-pixi@v$latest_version" README.md || true)" 52 | if [ "$count_actual" -ne "$count_expected" ]; then 53 | echo "::error file=README.md::Expected $count_expected mentions of \`setup-pixi@v$latest_version\` in README.md, but found $count_actual." 54 | exit 1 55 | fi 56 | 57 | reference-latest-pixi-version-in-readme: 58 | name: Reference latest Pixi version in README 59 | if: github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' 60 | runs-on: ubuntu-latest 61 | permissions: 62 | contents: write 63 | pull-requests: write 64 | steps: 65 | - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 66 | 67 | - name: Assert latest pixi version is mentioned in README 68 | run: | 69 | set -euo pipefail 70 | latest_version="$(gh repo view --json latestRelease prefix-dev/pixi | jq -r '.latestRelease.tagName')" 71 | count_expected=1 72 | count_actual="$(grep -c "pixi-version: $latest_version" README.md || true)" 73 | if [ "$count_actual" -ne "$count_expected" ]; then 74 | echo "::error file=README.md::Expected $count_expected mentions of \`pixi-version: $latest_version\` in README.md, but found $count_actual." 75 | sed -i "s/pixi-version: .*/pixi-version: $latest_version/" README.md 76 | exit 1 77 | fi 78 | env: 79 | GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} 80 | 81 | - name: Create pull request 82 | uses: peter-evans/create-pull-request@84ae59a2cdc2258d6fa0732dd66352dddae2a412 # v7.0.9 83 | if: failure() && github.ref_name == 'main' 84 | with: 85 | token: ${{ secrets.GITHUB_TOKEN }} 86 | commit-message: Reference latest Pixi version in README 87 | title: Reference latest Pixi version in README 88 | labels: ignore for release 89 | 90 | check-dist: 91 | runs-on: ubuntu-latest 92 | steps: 93 | - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 94 | 95 | - name: Install pnpm 96 | uses: pnpm/action-setup@41ff72655975bd51cab0327fa583b6e92b6d3061 # v4.4.0 97 | with: 98 | version: 9 99 | 100 | - name: Install Node.js 101 | uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0 102 | with: 103 | node-version: 20 104 | cache: pnpm 105 | 106 | - name: Install dependencies 107 | run: pnpm install --frozen-lockfile 108 | 109 | - name: Rebuild the dist/ directory 110 | run: pnpm build 111 | 112 | - name: Compare the expected and actual dist/ directories 113 | run: | 114 | if [ "$(git diff --ignore-space-at-eol dist/* | wc -l)" -gt "0" ]; then 115 | echo "Detected uncommitted changes after build. See status below:" 116 | git diff 117 | exit 1 118 | fi 119 | id: diff 120 | 121 | # If index.js or post.js are different than expected, upload the expected version as an artifact 122 | - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 123 | if: ${{ failure() && steps.diff.conclusion == 'failure' }} 124 | with: 125 | name: dist 126 | path: dist/ 127 | -------------------------------------------------------------------------------- /src/cache.ts: -------------------------------------------------------------------------------- 1 | import fs from 'fs/promises' 2 | import path from 'path' 3 | import * as core from '@actions/core' 4 | import * as cache from '@actions/cache' 5 | import { options } from './options' 6 | import { getCondaArch, sha256 } from './util' 7 | 8 | const getYearMonth = () => { 9 | // this gets us the current month formatted as YYYY-MM 10 | return new Date().toLocaleDateString('en-CA', { year: 'numeric', month: '2-digit' }) 11 | } 12 | 13 | let pixiSha: string | undefined 14 | const getPixiSha = async () => { 15 | if (pixiSha) { 16 | return pixiSha 17 | } 18 | const pixiBinary = await fs.readFile(options.pixiBinPath) 19 | pixiSha = sha256(pixiBinary) 20 | return pixiSha 21 | } 22 | 23 | export const generateProjectCacheKey = async (cacheKeyPrefix: string) => { 24 | try { 25 | const [lockfileContent, pixiSha] = await Promise.all([fs.readFile(options.pixiLockFile), getPixiSha()]) 26 | const lockfileSha = sha256(lockfileContent) 27 | core.debug(`lockfileSha: ${lockfileSha}`) 28 | core.debug(`pixiSha: ${pixiSha}`) 29 | // the path to the lock file decides where the pixi env is created (../.pixi/env) 30 | // since conda envs are not relocatable, we need to include the path in the cache key 31 | const lockfilePathSha = sha256(options.pixiLockFile) 32 | core.debug(`lockfilePathSha: ${lockfilePathSha}`) 33 | const environments = sha256(options.environments?.join(' ') ?? '') 34 | core.debug(`environments: ${environments}`) 35 | // since the lockfile path is not necessarily absolute, we need to include the cwd in the cache key 36 | const cwdSha = sha256(process.cwd()) 37 | core.debug(`cwdSha: ${cwdSha}`) 38 | const sha = sha256(lockfileSha + environments + pixiSha + lockfilePathSha + cwdSha) 39 | core.debug(`sha: ${sha}`) 40 | return `${cacheKeyPrefix}${getCondaArch()}-${sha}` 41 | } catch (err: unknown) { 42 | // eslint-disable-next-line @typescript-eslint/restrict-template-expressions 43 | throw new Error(`Failed to generate cache key: ${err}`) 44 | } 45 | } 46 | 47 | export const generateGlobalCacheKey = async (cacheKeyPrefix: string) => { 48 | try { 49 | const pixiSha = await getPixiSha() 50 | core.debug(`pixiSha: ${pixiSha}`) 51 | const globalEnvironments = sha256(options.globalEnvironments?.join(' ') ?? '') 52 | core.debug(`globalEnvironments: ${globalEnvironments}`) 53 | const sha = sha256(globalEnvironments + pixiSha + getGlobalCachePath()) 54 | core.debug(`sha: ${sha}`) 55 | return `${cacheKeyPrefix}${getCondaArch()}-${getYearMonth()}-${sha}` 56 | } catch (err: unknown) { 57 | // eslint-disable-next-line @typescript-eslint/restrict-template-expressions 58 | throw new Error(`Failed to generate cache key: ${err}`) 59 | } 60 | } 61 | 62 | const projectCachePath = path.join(path.dirname(options.pixiLockFile), '.pixi') 63 | 64 | const getGlobalCachePath = () => { 65 | const pixiHome = process.env.PIXI_HOME 66 | if (pixiHome) { 67 | return path.join(pixiHome, 'envs') 68 | } 69 | 70 | const home = process.env.HOME 71 | if (home) { 72 | return path.join(home, '.pixi', 'envs') 73 | } 74 | 75 | throw new Error('Neither PIXI_HOME nor HOME environment variables are set.') 76 | } 77 | 78 | let projectCacheHit = false 79 | let globalCacheHit = false 80 | 81 | async function _tryRestoreCache( 82 | type: 'project' | 'global', 83 | keyPrefix: string, 84 | generateKey: (prefix: string) => Promise, 85 | cachePath: string, 86 | onHit: () => void 87 | ): Promise { 88 | return core.group(`Restoring ${type} cache`, async () => { 89 | const cacheKey = await generateKey(keyPrefix) 90 | core.debug(`Cache key: ${cacheKey}`) 91 | core.debug(`Cache path: ${cachePath}`) 92 | const key = await cache.restoreCache([cachePath], cacheKey, undefined, undefined, false) 93 | if (key) { 94 | core.info(`Restored cache with key \`${key}\``) 95 | onHit() 96 | } else { 97 | core.info(`Cache miss`) 98 | } 99 | return key 100 | }) 101 | } 102 | 103 | async function _saveCache( 104 | type: 'project' | 'global', 105 | wasHit: boolean, 106 | keyPrefix: string, 107 | generateKey: (prefix: string) => Promise, 108 | cachePath: string 109 | ) { 110 | if (wasHit) { 111 | core.debug(`Skipping ${type} cache save because cache was restored.`) 112 | return 113 | } 114 | 115 | await core.group(`Saving ${type.toLowerCase()} cache`, async () => { 116 | const cacheKey = await generateKey(keyPrefix) 117 | try { 118 | const cacheId = await cache.saveCache([cachePath], cacheKey, undefined, false) 119 | core.info(`Saved cache with ID "${cacheId.toString()}"`) 120 | } catch (err: unknown) { 121 | // eslint-disable-next-line @typescript-eslint/restrict-template-expressions 122 | core.error(`Error saving ${type} cache: ${err}`) 123 | } 124 | }) 125 | } 126 | 127 | export const tryRestoreProjectCache = async (): Promise => { 128 | const cache_ = options.cache 129 | if (!cache_) { 130 | core.debug('Skipping project cache restore.') 131 | return undefined 132 | } 133 | return _tryRestoreCache('project', cache_.cacheKeyPrefix, generateProjectCacheKey, projectCachePath, () => { 134 | projectCacheHit = true 135 | }) 136 | } 137 | 138 | export const tryRestoreGlobalCache = async (): Promise => { 139 | const cache_ = options.globalCache 140 | if (!cache_ || !options.globalEnvironments || options.globalEnvironments.length === 0) { 141 | core.debug('Skipping global cache restore.') 142 | return undefined 143 | } 144 | return _tryRestoreCache('global', cache_.cacheKeyPrefix, generateGlobalCacheKey, getGlobalCachePath(), () => { 145 | globalCacheHit = true 146 | }) 147 | } 148 | 149 | export const saveProjectCache = async () => { 150 | const cache_ = options.cache 151 | if (!cache_?.cacheWrite || !options.runInstall) { 152 | core.debug('Skipping project cache save.') 153 | return 154 | } 155 | await _saveCache('project', projectCacheHit, cache_.cacheKeyPrefix, generateProjectCacheKey, projectCachePath) 156 | } 157 | 158 | export const saveGlobalCache = async () => { 159 | const cache_ = options.globalCache 160 | if (!cache_?.cacheWrite || !options.globalEnvironments || options.globalEnvironments.length === 0) { 161 | core.debug('Skipping global cache save.') 162 | return 163 | } 164 | await _saveCache('global', globalCacheHit, cache_.cacheKeyPrefix, generateGlobalCacheKey, getGlobalCachePath()) 165 | } 166 | -------------------------------------------------------------------------------- /src/main.ts: -------------------------------------------------------------------------------- 1 | import fs from 'fs/promises' 2 | import os from 'os' 3 | import path from 'path' 4 | import { exit } from 'process' 5 | import * as core from '@actions/core' 6 | import { downloadTool } from '@actions/tool-cache' 7 | import type { PixiSource } from './options' 8 | import { options } from './options' 9 | import { execute, pixiCmd, renderPixiUrl } from './util' 10 | import { tryRestoreGlobalCache, tryRestoreProjectCache, saveGlobalCache, saveProjectCache } from './cache' 11 | import { activateEnvironment } from './activate' 12 | 13 | const downloadPixi = async (source: PixiSource) => { 14 | const url = renderPixiUrl(source.urlTemplate, source.version) 15 | await core.group('Downloading Pixi', async () => { 16 | core.debug('Installing pixi') 17 | core.debug(`Downloading pixi from ${url}`) 18 | core.debug(`Using headers: ${JSON.stringify(source.headers)}`) 19 | await fs.mkdir(path.dirname(options.pixiBinPath), { recursive: true }) 20 | await downloadTool(url, options.pixiBinPath, undefined, source.headers) 21 | await fs.chmod(options.pixiBinPath, 0o755) 22 | core.info(`Pixi installed to ${options.pixiBinPath}`) 23 | }) 24 | } 25 | 26 | const pixiLogin = async () => { 27 | const auth = options.auth 28 | if (!auth) { 29 | core.debug('Skipping pixi login.') 30 | return 31 | } 32 | core.debug(`auth keys: ${Object.keys(auth).toString()}`) 33 | await core.group('Logging in to private channel', async () => { 34 | // tokens get censored in the logs as long as they are a github secret 35 | if ('token' in auth) { 36 | core.debug(`Logging in to ${auth.host} with token`) 37 | await execute(pixiCmd(`auth login --token ${auth.token} ${auth.host}`, false)) 38 | } else if ('username' in auth) { 39 | core.debug(`Logging in to ${auth.host} with username and password`) 40 | await execute(pixiCmd(`auth login --username ${auth.username} --password ${auth.password} ${auth.host}`, false)) 41 | } else if ('s3AccessKeyId' in auth) { 42 | core.debug(`Logging in to ${auth.host} with s3 credentials`) 43 | const command = auth.s3SessionToken 44 | ? `auth login --s3-access-key-id ${auth.s3AccessKeyId} --s3-secret-access-key ${auth.s3SecretAccessKey} --s3-session-token ${auth.s3SessionToken} ${auth.host}` 45 | : `auth login --s3-access-key-id ${auth.s3AccessKeyId} --s3-secret-access-key ${auth.s3SecretAccessKey} ${auth.host}` 46 | await execute(pixiCmd(command, false)) 47 | } else if ('condaToken' in auth) { 48 | core.debug(`Logging in to ${auth.host} with conda token`) 49 | await execute(pixiCmd(`auth login --conda-token ${auth.condaToken} ${auth.host}`, false)) 50 | } 51 | }) 52 | } 53 | 54 | const addPixiToPath = () => { 55 | core.addPath(path.dirname(options.pixiBinPath)) 56 | } 57 | 58 | const pixiGlobalInstall = async () => { 59 | const { globalEnvironments } = options 60 | if (!globalEnvironments) { 61 | core.debug('Skipping pixi global install.') 62 | return 63 | } 64 | 65 | await tryRestoreGlobalCache() 66 | 67 | core.debug('Installing global environments') 68 | for (const env of globalEnvironments) { 69 | const command = `global install ${env}` 70 | await core.group(`pixi ${command}`, () => execute(pixiCmd(command, false))) 71 | } 72 | 73 | await saveGlobalCache() 74 | } 75 | 76 | const pixiInstall = async () => { 77 | if (!options.runInstall) { 78 | core.debug('Skipping pixi install.') 79 | return 80 | } 81 | 82 | await tryRestoreProjectCache() 83 | 84 | const environments = options.environments ?? [undefined] 85 | for (const environment of environments) { 86 | core.debug(`Installing environment ${environment ?? 'default'}`) 87 | let command = `install` 88 | if (environment) { 89 | command += ` -e ${environment}` 90 | } 91 | if (options.frozen) { 92 | command += ' --frozen' 93 | } 94 | if (options.locked) { 95 | command += ' --locked' 96 | } 97 | if (options.pypiKeyringProvider) { 98 | command += ` --pypi-keyring-provider ${options.pypiKeyringProvider}` 99 | } 100 | await core.group(`pixi ${command}`, () => execute(pixiCmd(command))) 101 | } 102 | 103 | await saveProjectCache() 104 | } 105 | 106 | const generateList = async () => { 107 | if (!options.runInstall) { 108 | core.debug('Skipping pixi list.') 109 | return 110 | } 111 | if ( 112 | 'version' in options.pixiSource && 113 | options.pixiSource.version !== 'latest' && 114 | options.pixiSource.version < 'v0.13.0' 115 | ) { 116 | core.warning( 117 | 'pixi list is not supported for pixi versions < `v0.13.0`. Please set `pixi-version` to `v0.13.0` or later.' 118 | ) 119 | return 120 | } 121 | let command = 'list' 122 | if ( 123 | 'version' in options.pixiSource && 124 | options.pixiSource.version !== 'latest' && 125 | options.pixiSource.version < 'v0.14.0' 126 | ) { 127 | if (options.frozen) core.warning('pixi versions < `v0.14.0` do not support the --frozen option for pixi list.') 128 | if (options.locked) core.warning('pixi versions < `v0.14.0` do not support the --locked option for pixi list.') 129 | } else { 130 | command = `${command}${options.frozen ? ' --frozen' : ''}${options.locked ? ' --locked' : ''}` 131 | } 132 | if (options.environments) { 133 | for (const environment of options.environments) { 134 | core.debug(`Listing environment ${environment}`) 135 | const cmd = `${command} -e ${environment}` 136 | await core.group(`pixi ${cmd}`, () => execute(pixiCmd(cmd))) 137 | } 138 | } else { 139 | await core.group(`pixi ${command}`, () => execute(pixiCmd(command))) 140 | } 141 | } 142 | 143 | const generateInfo = async () => { 144 | await core.group('pixi info', () => execute(pixiCmd('info'))) 145 | } 146 | 147 | const activateEnv = async (environment: string) => { 148 | await core.group('Activate environment', () => activateEnvironment(environment)) 149 | } 150 | 151 | const run = async () => { 152 | core.debug(`process.env.HOME: ${process.env.HOME ?? '-'}`) 153 | core.debug(`os.homedir(): ${os.homedir()}`) 154 | if (options.downloadPixi) { 155 | await downloadPixi(options.pixiSource) 156 | } 157 | addPixiToPath() 158 | await pixiLogin() 159 | await pixiGlobalInstall() 160 | await generateInfo() 161 | await pixiInstall() 162 | await generateList() 163 | if (options.activatedEnvironment) { 164 | await activateEnv(options.activatedEnvironment) 165 | } 166 | } 167 | 168 | const main = async () => { 169 | try { 170 | await run() 171 | // workaround for https://github.com/actions/toolkit/issues/1578 172 | exit(0) 173 | } catch (error: unknown) { 174 | if (core.isDebug()) { 175 | throw error 176 | } 177 | if (error instanceof Error) { 178 | core.setFailed(error.message) 179 | exit(1) 180 | } else if (typeof error === 'string') { 181 | core.setFailed(error) 182 | exit(1) 183 | } else { 184 | throw error 185 | } 186 | } 187 | } 188 | 189 | void main() 190 | -------------------------------------------------------------------------------- /test/bzip2/pixi.lock: -------------------------------------------------------------------------------- 1 | version: 6 2 | environments: 3 | default: 4 | channels: 5 | - url: https://conda.anaconda.org/conda-forge/ 6 | packages: 7 | linux-64: 8 | - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 9 | - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 10 | - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda 11 | - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.2.0-h767d61c_2.conda 12 | - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_2.conda 13 | - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.2.0-h767d61c_2.conda 14 | linux-aarch64: 15 | - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-2_gnu.tar.bz2 16 | - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h68df207_7.conda 17 | - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-14.2.0-he277a41_2.conda 18 | - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-14.2.0-he9431aa_2.conda 19 | - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-14.2.0-he277a41_2.conda 20 | osx-64: 21 | - conda: https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.8-hfdf4475_7.conda 22 | osx-arm64: 23 | - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda 24 | win-64: 25 | - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda 26 | - conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_1.conda 27 | - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-h2b53caa_26.conda 28 | - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.42.34438-hfd919c2_26.conda 29 | win-arm64: 30 | - conda: https://conda.anaconda.org/conda-forge/win-arm64/bzip2-1.0.8-hfbbf558_7.conda 31 | - conda: https://conda.anaconda.org/conda-forge/win-arm64/vc-14.3-hfe6595e_26.conda 32 | - conda: https://conda.anaconda.org/conda-forge/win-arm64/vc14_runtime-14.42.34438-hfe4e545_26.conda 33 | packages: 34 | - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 35 | sha256: fe51de6107f9edc7aa4f786a70f4a883943bc9d39b3bb7307c04c41410990726 36 | md5: d7c89558ba9fa0495403155b64376d81 37 | license: None 38 | size: 2562 39 | timestamp: 1578324546067 40 | - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 41 | build_number: 16 42 | sha256: fbe2c5e56a653bebb982eda4876a9178aedfc2b545f25d0ce9c4c0b508253d22 43 | md5: 73aaf86a425cc6e73fcf236a5a46396d 44 | depends: 45 | - _libgcc_mutex 0.1 conda_forge 46 | - libgomp >=7.5.0 47 | constrains: 48 | - openmp_impl 9999 49 | license: BSD-3-Clause 50 | license_family: BSD 51 | size: 23621 52 | timestamp: 1650670423406 53 | - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-2_gnu.tar.bz2 54 | build_number: 16 55 | sha256: 3702bef2f0a4d38bd8288bbe54aace623602a1343c2cfbefd3fa188e015bebf0 56 | md5: 6168d71addc746e8f2b8d57dfd2edcea 57 | depends: 58 | - libgomp >=7.5.0 59 | constrains: 60 | - openmp_impl 9999 61 | license: BSD-3-Clause 62 | license_family: BSD 63 | size: 23712 64 | timestamp: 1650670790230 65 | - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda 66 | sha256: 5ced96500d945fb286c9c838e54fa759aa04a7129c59800f0846b4335cee770d 67 | md5: 62ee74e96c5ebb0af99386de58cf9553 68 | depends: 69 | - __glibc >=2.17,<3.0.a0 70 | - libgcc-ng >=12 71 | license: bzip2-1.0.6 72 | license_family: BSD 73 | size: 252783 74 | timestamp: 1720974456583 75 | - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h68df207_7.conda 76 | sha256: 2258b0b33e1cb3a9852d47557984abb6e7ea58e3d7f92706ec1f8e879290c4cb 77 | md5: 56398c28220513b9ea13d7b450acfb20 78 | depends: 79 | - libgcc-ng >=12 80 | license: bzip2-1.0.6 81 | license_family: BSD 82 | size: 189884 83 | timestamp: 1720974504976 84 | - conda: https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.8-hfdf4475_7.conda 85 | sha256: cad153608b81fb24fc8c509357daa9ae4e49dfc535b2cb49b91e23dbd68fc3c5 86 | md5: 7ed4301d437b59045be7e051a0308211 87 | depends: 88 | - __osx >=10.13 89 | license: bzip2-1.0.6 90 | license_family: BSD 91 | size: 134188 92 | timestamp: 1720974491916 93 | - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda 94 | sha256: adfa71f158cbd872a36394c56c3568e6034aa55c623634b37a4836bd036e6b91 95 | md5: fc6948412dbbbe9a4c9ddbbcfe0a79ab 96 | depends: 97 | - __osx >=11.0 98 | license: bzip2-1.0.6 99 | license_family: BSD 100 | size: 122909 101 | timestamp: 1720974522888 102 | - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda 103 | sha256: 35a5dad92e88fdd7fc405e864ec239486f4f31eec229e31686e61a140a8e573b 104 | md5: 276e7ffe9ffe39688abc665ef0f45596 105 | depends: 106 | - ucrt >=10.0.20348.0 107 | - vc >=14.2,<15 108 | - vc14_runtime >=14.29.30139 109 | license: bzip2-1.0.6 110 | license_family: BSD 111 | size: 54927 112 | timestamp: 1720974860185 113 | - conda: https://conda.anaconda.org/conda-forge/win-arm64/bzip2-1.0.8-hfbbf558_7.conda 114 | sha256: f6b3f14c17f7aebe0ac88e74957644da17288b1b78f8776ed4f04a4e6e4a7d9c 115 | md5: 86d73707c1a3db358fb0b42fb6e33add 116 | depends: 117 | - vc >=14.3,<15 118 | - vc14_runtime >=14.40.33810 119 | license: bzip2-1.0.6 120 | license_family: BSD 121 | size: 54629 122 | timestamp: 1720974690059 123 | - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.2.0-h767d61c_2.conda 124 | sha256: 3a572d031cb86deb541d15c1875aaa097baefc0c580b54dc61f5edab99215792 125 | md5: ef504d1acbd74b7cc6849ef8af47dd03 126 | depends: 127 | - __glibc >=2.17,<3.0.a0 128 | - _openmp_mutex >=4.5 129 | constrains: 130 | - libgomp 14.2.0 h767d61c_2 131 | - libgcc-ng ==14.2.0=*_2 132 | license: GPL-3.0-only WITH GCC-exception-3.1 133 | license_family: GPL 134 | size: 847885 135 | timestamp: 1740240653082 136 | - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-14.2.0-he277a41_2.conda 137 | sha256: a57f7f9ba2a12f56eafdcd25b6d75f7be10b8fc1a802a58b76a77ca8c66f4503 138 | md5: 6b4268a60b10f29257b51b9b67ff8d76 139 | depends: 140 | - _openmp_mutex >=4.5 141 | constrains: 142 | - libgcc-ng ==14.2.0=*_2 143 | - libgomp 14.2.0 he277a41_2 144 | license: GPL-3.0-only WITH GCC-exception-3.1 145 | license_family: GPL 146 | size: 535507 147 | timestamp: 1740241069780 148 | - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_2.conda 149 | sha256: fb7558c328b38b2f9d2e412c48da7890e7721ba018d733ebdfea57280df01904 150 | md5: a2222a6ada71fb478682efe483ce0f92 151 | depends: 152 | - libgcc 14.2.0 h767d61c_2 153 | license: GPL-3.0-only WITH GCC-exception-3.1 154 | license_family: GPL 155 | size: 53758 156 | timestamp: 1740240660904 157 | - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-14.2.0-he9431aa_2.conda 158 | sha256: 9647f75cddc18b07eebe6e1f21500eed50a6af2c43c84e831b4c7a597e10d226 159 | md5: 692c2bb75f32cfafb6799cf6d1c5d0e0 160 | depends: 161 | - libgcc 14.2.0 he277a41_2 162 | license: GPL-3.0-only WITH GCC-exception-3.1 163 | license_family: GPL 164 | size: 53622 165 | timestamp: 1740241074834 166 | - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.2.0-h767d61c_2.conda 167 | sha256: 1a3130e0b9267e781b89399580f3163632d59fe5b0142900d63052ab1a53490e 168 | md5: 06d02030237f4d5b3d9a7e7d348fe3c6 169 | depends: 170 | - __glibc >=2.17,<3.0.a0 171 | license: GPL-3.0-only WITH GCC-exception-3.1 172 | license_family: GPL 173 | size: 459862 174 | timestamp: 1740240588123 175 | - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-14.2.0-he277a41_2.conda 176 | sha256: 4e303711fb7413bf98995beac58e731073099d7a669a3b81e49330ca8da05174 177 | md5: b11c09d9463daf4cae492d29806b1889 178 | license: GPL-3.0-only WITH GCC-exception-3.1 179 | license_family: GPL 180 | size: 462783 181 | timestamp: 1740241005079 182 | - conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_1.conda 183 | sha256: db8dead3dd30fb1a032737554ce91e2819b43496a0db09927edf01c32b577450 184 | md5: 6797b005cd0f439c4c5c9ac565783700 185 | constrains: 186 | - vs2015_runtime >=14.29.30037 187 | license: LicenseRef-MicrosoftWindowsSDK10 188 | size: 559710 189 | timestamp: 1728377334097 190 | - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-h2b53caa_26.conda 191 | sha256: 7a685b5c37e9713fa314a0d26b8b1d7a2e6de5ab758698199b5d5b6dba2e3ce1 192 | md5: d3f0381e38093bde620a8d85f266ae55 193 | depends: 194 | - vc14_runtime >=14.42.34433 195 | track_features: 196 | - vc14 197 | license: BSD-3-Clause 198 | license_family: BSD 199 | size: 17893 200 | timestamp: 1743195261486 201 | - conda: https://conda.anaconda.org/conda-forge/win-arm64/vc-14.3-hfe6595e_26.conda 202 | sha256: dc8f1cbbfd91e267a05cdf9bb0a04e983f9df6b02885446dfe0d796c99e67e0a 203 | md5: a57c01b43b14be7d028c84bad0bc1599 204 | depends: 205 | - vc14_runtime >=14.42.34438 206 | track_features: 207 | - vc14 208 | license: BSD-3-Clause 209 | license_family: BSD 210 | size: 17394 211 | timestamp: 1743194837327 212 | - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.42.34438-hfd919c2_26.conda 213 | sha256: 30dcb71bb166e351aadbdc18f1718757c32cdaa0e1e5d9368469ee44f6bf4709 214 | md5: 91651a36d31aa20c7ba36299fb7068f4 215 | depends: 216 | - ucrt >=10.0.20348.0 217 | constrains: 218 | - vs2015_runtime 14.42.34438.* *_26 219 | license: LicenseRef-MicrosoftVisualCpp2015-2022Runtime 220 | license_family: Proprietary 221 | size: 750733 222 | timestamp: 1743195092905 223 | - conda: https://conda.anaconda.org/conda-forge/win-arm64/vc14_runtime-14.42.34438-hfe4e545_26.conda 224 | sha256: 37cf20eb09cf77e261d61ba40b322e010a7043b4247f01420f8241bd68a683ba 225 | md5: 1995ed932d07efb2fe632778484f9fbb 226 | license: LicenseRef-MicrosoftVisualCpp2015-2022Runtime 227 | license_family: Proprietary 228 | size: 15480436 229 | timestamp: 1743194808631 230 | -------------------------------------------------------------------------------- /src/options.ts: -------------------------------------------------------------------------------- 1 | import path from 'path' 2 | import os from 'os' 3 | import { exit } from 'process' 4 | import { existsSync, readFileSync } from 'fs' 5 | import * as core from '@actions/core' 6 | import * as z from 'zod' 7 | import untildify from 'untildify' 8 | import { parse } from 'smol-toml' 9 | import which from 'which' 10 | import { DEFAULT_PIXI_URL_TEMPLATE } from './util' 11 | 12 | type Inputs = Readonly<{ 13 | pixiVersion?: string 14 | pixiUrl?: string 15 | pixiUrlHeaders?: NodeJS.Dict 16 | logLevel?: LogLevel 17 | manifestPath?: string 18 | runInstall?: boolean 19 | environments?: string[] 20 | activateEnvironment?: string 21 | frozen?: boolean 22 | locked?: boolean 23 | cache?: boolean 24 | globalCache?: boolean 25 | cacheKey?: string 26 | globalCacheKey?: string 27 | cacheWrite?: boolean 28 | pixiBinPath?: string 29 | authHost?: string 30 | authToken?: string 31 | authUsername?: string 32 | authPassword?: string 33 | authCondaToken?: string 34 | authS3AccessKeyId?: string 35 | authS3SecretAccessKey?: string 36 | authS3SessionToken?: string 37 | pypiKeyringProvider?: 'disabled' | 'subprocess' 38 | postCleanup?: boolean 39 | globalEnvironments?: string[] 40 | }> 41 | 42 | export interface PixiSource { 43 | urlTemplate: string 44 | headers?: NodeJS.Dict 45 | version: string 46 | } 47 | 48 | type Auth = { 49 | host: string 50 | } & ( 51 | | { 52 | token: string 53 | } 54 | | { 55 | username: string 56 | password: string 57 | } 58 | | { 59 | condaToken: string 60 | } 61 | | { 62 | s3AccessKeyId: string 63 | s3SecretAccessKey: string 64 | s3SessionToken?: string 65 | } 66 | ) 67 | 68 | interface Cache { 69 | cacheKeyPrefix: string 70 | cacheWrite: boolean 71 | } 72 | 73 | interface GlobalCache { 74 | cacheKeyPrefix: string 75 | cacheWrite: boolean 76 | } 77 | 78 | export type Options = Readonly<{ 79 | pixiSource: PixiSource 80 | downloadPixi: boolean 81 | logLevel: LogLevel 82 | manifestPath: string 83 | pixiLockFile: string 84 | runInstall: boolean 85 | environments?: string[] 86 | frozen: boolean 87 | locked: boolean 88 | cache?: Cache 89 | globalCache?: GlobalCache 90 | pixiBinPath: string 91 | auth?: Auth 92 | pypiKeyringProvider?: 'disabled' | 'subprocess' 93 | postCleanup: boolean 94 | activatedEnvironment?: string 95 | globalEnvironments?: string[] 96 | }> 97 | const pixiPath = 'pixi.toml' 98 | const pyprojectPath = 'pyproject.toml' 99 | 100 | const logLevelSchema = z.enum(['q', 'default', 'v', 'vv', 'vvv']) 101 | export type LogLevel = z.infer 102 | 103 | const pypiKeyringProviderSchema = z.enum(['disabled', 'subprocess']) 104 | export type PypiKeyringProvider = z.infer 105 | 106 | export const PATHS = { 107 | pixiBin: path.join(os.homedir(), '.pixi', 'bin', `pixi${os.platform() === 'win32' ? '.exe' : ''}`) 108 | } 109 | 110 | const getEnvironmentVariableName = (key: string): string => { 111 | return `SETUP_PIXI_${key.toUpperCase().replace(/-/g, '_')}` 112 | } 113 | 114 | const inputOrEnvironmentVariable = (key: string): string | undefined => { 115 | const inputValue = core.getInput(key) 116 | // GitHub actions sets empty inputs to the empty string 117 | if (inputValue !== '') { 118 | return inputValue 119 | } 120 | 121 | const envVarName = getEnvironmentVariableName(key) 122 | const envVarValue = process.env[envVarName] 123 | // Empty environment variables are treated as undefined 124 | if (envVarValue !== undefined && envVarValue !== '') { 125 | core.debug(`Using environment variable ${envVarName} with value: ${envVarValue}`) 126 | return envVarValue 127 | } 128 | return undefined 129 | } 130 | 131 | const parseOrUndefined = (key: string, schema: z.ZodType, errorMessage?: string): T | undefined => { 132 | const input = inputOrEnvironmentVariable(key) 133 | if (input === undefined) { 134 | return undefined 135 | } 136 | const maybeResult = schema.safeParse(input) 137 | if (!maybeResult.success) { 138 | if (!errorMessage) { 139 | throw new Error(`${key} is not valid: ${maybeResult.error.message}`) 140 | } 141 | throw new Error(errorMessage) 142 | } 143 | return maybeResult.data 144 | } 145 | 146 | const parseOrUndefinedJSON = (key: string, schema: z.ZodType): T | undefined => { 147 | const input = inputOrEnvironmentVariable(key) 148 | if (input === undefined) { 149 | return undefined 150 | } 151 | return schema.parse(JSON.parse(input)) 152 | } 153 | 154 | const parseOrUndefinedList = (key: string, schema: z.ZodType): T[] | undefined => { 155 | const input = inputOrEnvironmentVariable(key) 156 | if (input === undefined) { 157 | return undefined 158 | } 159 | return input 160 | .split(' ') 161 | .map((s) => schema.parse(s)) 162 | .filter((s) => s !== '') 163 | } 164 | 165 | const parseOrUndefinedMultilineList = (key: string, schema: z.ZodType): T[] | undefined => { 166 | const input = inputOrEnvironmentVariable(key) 167 | if (input === undefined) { 168 | return undefined 169 | } 170 | return input 171 | .split('\n') 172 | .map((s) => schema.parse(s.trim())) 173 | .filter((s) => s !== '') 174 | } 175 | 176 | const validateInputs = (inputs: Inputs): void => { 177 | if (inputs.pixiUrlHeaders && !inputs.pixiUrl) { 178 | throw new Error('You need to specify pixi-url when using pixi-url-headers') 179 | } 180 | if (inputs.cacheKey !== undefined && inputs.cache === false) { 181 | throw new Error('Cannot specify project cache key without project caching') 182 | } 183 | if (inputs.globalCacheKey !== undefined && inputs.globalCache === false) { 184 | throw new Error('Cannot specify global cache key without global caching') 185 | } 186 | if (inputs.runInstall === false && inputs.cache === true) { 187 | throw new Error('Cannot cache without running install') 188 | } 189 | if (inputs.globalCache === true && (!inputs.globalEnvironments || inputs.globalEnvironments.length === 0)) { 190 | throw new Error('Cannot use global-cache without specifying global-environments') 191 | } 192 | if (inputs.runInstall === false && inputs.frozen === true) { 193 | throw new Error('Cannot use `frozen: true` when not running install') 194 | } 195 | if (inputs.runInstall === false && inputs.locked === true) { 196 | throw new Error('Cannot use `locked: true` when not running install') 197 | } 198 | if (inputs.locked === true && inputs.frozen === true) { 199 | throw new Error('Cannot use `locked: true` and `frozen: true` at the same time') 200 | } 201 | if ((inputs.authUsername && !inputs.authPassword) || (!inputs.authUsername && inputs.authPassword)) { 202 | throw new Error('You need to specify both auth-username and auth-password') 203 | } 204 | if ( 205 | (inputs.authS3AccessKeyId && !inputs.authS3SecretAccessKey) || 206 | (!inputs.authS3AccessKeyId && inputs.authS3SecretAccessKey) 207 | ) { 208 | throw new Error('You need to specify both auth-s3-access-key-id and auth-s3-secret-access-key') 209 | } 210 | if (inputs.authS3SessionToken && (!inputs.authS3AccessKeyId || !inputs.authS3SecretAccessKey)) { 211 | throw new Error( 212 | 'You need to specify both auth-s3-access-key-id and auth-s3-secret-access-key when using auth-s3-session-token' 213 | ) 214 | } 215 | // now we can assume that authUsername is defined iff authPassword is defined 216 | if (inputs.authHost) { 217 | if (!inputs.authToken && !inputs.authUsername && !inputs.authCondaToken && !inputs.authS3AccessKeyId) { 218 | throw new Error('You need to specify either auth-token or auth-username and auth-password or auth-conda-token') 219 | } 220 | let authCount = 0 221 | if (inputs.authToken) { 222 | authCount++ 223 | } 224 | if (inputs.authUsername) { 225 | authCount++ 226 | } 227 | if (inputs.authCondaToken) { 228 | authCount++ 229 | } 230 | if (inputs.authS3AccessKeyId) { 231 | authCount++ 232 | } 233 | if (authCount > 1) { 234 | throw new Error('You cannot specify multiple auth methods') 235 | } 236 | } 237 | if (!inputs.authHost) { 238 | if (inputs.authToken || inputs.authUsername || inputs.authCondaToken || inputs.authS3AccessKeyId) { 239 | throw new Error('You need to specify auth-host') 240 | } 241 | } 242 | if (inputs.runInstall === false && inputs.environments) { 243 | throw new Error('Cannot specify environments without running install') 244 | } 245 | if (inputs.activateEnvironment === 'true' && inputs.environments && inputs.environments.length > 1) { 246 | throw new Error('When installing multiple environments, `activate-environment` must specify the environment name') 247 | } 248 | } 249 | 250 | const determinePixiInstallation = (pixiUrlOrVersionSet: boolean, pixiBinPath: string | undefined) => { 251 | const preinstalledPixi = which.sync('pixi', { nothrow: true }) 252 | 253 | if (pixiUrlOrVersionSet || pixiBinPath) { 254 | if (preinstalledPixi) { 255 | core.debug(`Local pixi found at ${preinstalledPixi} is being ignored.`) 256 | } 257 | return { 258 | downloadPixi: true, 259 | pixiBinPath: pixiBinPath ? path.resolve(untildify(pixiBinPath)) : PATHS.pixiBin 260 | } 261 | } 262 | 263 | if (preinstalledPixi) { 264 | core.info(`Using pre-installed pixi at ${preinstalledPixi}`) 265 | return { downloadPixi: false, pixiBinPath: preinstalledPixi } 266 | } 267 | 268 | return { downloadPixi: true, pixiBinPath: PATHS.pixiBin } 269 | } 270 | 271 | const inferOptions = (inputs: Inputs): Options => { 272 | const runInstall = inputs.runInstall ?? true 273 | const pixiSource: PixiSource = { 274 | urlTemplate: inputs.pixiUrl ?? DEFAULT_PIXI_URL_TEMPLATE, 275 | headers: inputs.pixiUrlHeaders, 276 | version: inputs.pixiVersion ?? 'latest' 277 | } 278 | 279 | const { downloadPixi, pixiBinPath } = determinePixiInstallation( 280 | !!inputs.pixiVersion || !!inputs.pixiUrl, 281 | inputs.pixiBinPath 282 | ) 283 | const logLevel = inputs.logLevel ?? (core.isDebug() ? 'vv' : 'default') 284 | // infer manifest path from inputs or default to pixi.toml or pyproject.toml depending on what is present in the repo. 285 | let manifestPath = pixiPath // default 286 | if (inputs.manifestPath) { 287 | manifestPath = path.resolve(untildify(inputs.manifestPath)) 288 | } else { 289 | if (existsSync(pixiPath)) { 290 | manifestPath = pixiPath 291 | } else if (existsSync(pyprojectPath)) { 292 | try { 293 | const fileContent = readFileSync(pyprojectPath, 'utf-8') 294 | const parsedContent: Record = parse(fileContent) 295 | 296 | // Test if the tool.pixi table is present in the pyproject.toml file, if so, use it as the manifest file. 297 | if (parsedContent.tool && typeof parsedContent.tool === 'object' && 'pixi' in parsedContent.tool) { 298 | core.debug(`The tool.pixi table found, using ${pyprojectPath} as manifest file.`) 299 | manifestPath = pyprojectPath 300 | } 301 | } catch (error) { 302 | core.error(`Error while trying to read ${pyprojectPath} file.`) 303 | core.error(error as Error) 304 | } 305 | } else if (runInstall) { 306 | core.warning(`Could not find any manifest file. Defaulting to ${pixiPath}.`) 307 | } 308 | } 309 | 310 | const pixiLockFile = path.join(path.dirname(manifestPath), 'pixi.lock') 311 | const lockFileAvailable = existsSync(pixiLockFile) 312 | core.debug(`lockFileAvailable: ${lockFileAvailable ? 'yes' : 'no'}`) 313 | if (!lockFileAvailable && inputs.cacheWrite === true) { 314 | throw new Error('You cannot specify cache-write = true without a lock file present') 315 | } 316 | let activatedEnvironment // default is undefined 317 | if (inputs.activateEnvironment === 'true') { 318 | if (inputs.environments) { 319 | activatedEnvironment = inputs.environments[0] 320 | } else { 321 | activatedEnvironment = 'default' 322 | } 323 | } else if (inputs.activateEnvironment && inputs.activateEnvironment !== 'false') { 324 | activatedEnvironment = inputs.activateEnvironment 325 | } 326 | const cache = 327 | inputs.cache === true || (lockFileAvailable && inputs.cache !== false) 328 | ? { 329 | cacheKeyPrefix: inputs.cacheKey ?? 'pixi-', 330 | cacheWrite: inputs.cacheWrite ?? true 331 | } 332 | : undefined 333 | const globalCache = 334 | inputs.globalCache === true && inputs.globalEnvironments && inputs.globalEnvironments.length > 0 335 | ? { 336 | cacheKeyPrefix: inputs.globalCacheKey ?? 'pixi-global-', 337 | cacheWrite: inputs.cacheWrite ?? true 338 | } 339 | : undefined 340 | const frozen = inputs.frozen ?? false 341 | const locked = inputs.locked ?? (lockFileAvailable && !frozen) 342 | const auth = !inputs.authHost 343 | ? undefined 344 | : ((inputs.authToken 345 | ? { 346 | host: inputs.authHost, 347 | token: inputs.authToken 348 | } 349 | : inputs.authCondaToken 350 | ? { 351 | host: inputs.authHost, 352 | condaToken: inputs.authCondaToken 353 | } 354 | : inputs.authUsername 355 | ? { 356 | host: inputs.authHost, 357 | username: inputs.authUsername, 358 | password: inputs.authPassword 359 | } 360 | : { 361 | host: inputs.authHost, 362 | s3AccessKeyId: inputs.authS3AccessKeyId, 363 | s3SecretAccessKey: inputs.authS3SecretAccessKey, 364 | s3SessionToken: inputs.authS3SessionToken 365 | }) as Auth) 366 | const postCleanup = inputs.postCleanup ?? true 367 | const pypiKeyringProvider = inputs.pypiKeyringProvider 368 | return { 369 | globalEnvironments: inputs.globalEnvironments, 370 | pixiSource, 371 | pypiKeyringProvider, 372 | downloadPixi, 373 | logLevel, 374 | manifestPath, 375 | pixiLockFile, 376 | runInstall, 377 | environments: inputs.environments, 378 | activatedEnvironment, 379 | frozen, 380 | locked, 381 | cache, 382 | globalCache, 383 | pixiBinPath, 384 | auth, 385 | postCleanup 386 | } 387 | } 388 | 389 | const assertOptions = (_options: Options) => { 390 | // const assert = (condition: boolean, message?: string) => { 391 | // if (!condition) { 392 | // throw new Error(message) 393 | // } 394 | // } 395 | // TODO 396 | } 397 | 398 | const getOptions = () => { 399 | const inputs: Inputs = { 400 | pixiVersion: parseOrUndefined( 401 | 'pixi-version', 402 | z.union([z.literal('latest'), z.string().regex(/^v\d+\.\d+\.\d+$/)]), 403 | 'pixi-version must either be `latest` or a version string matching `vX.Y.Z`.' 404 | ), 405 | pixiUrl: parseOrUndefined('pixi-url', z.string()), 406 | pixiUrlHeaders: parseOrUndefinedJSON('pixi-url-headers', z.record(z.string(), z.string())), 407 | logLevel: parseOrUndefined( 408 | 'log-level', 409 | logLevelSchema, 410 | 'log-level must be one of `q`, `default`, `v`, `vv`, `vvv`.' 411 | ), 412 | manifestPath: parseOrUndefined('manifest-path', z.string()), 413 | runInstall: parseOrUndefinedJSON('run-install', z.boolean()), 414 | environments: parseOrUndefinedList('environments', z.string()), 415 | activateEnvironment: parseOrUndefined('activate-environment', z.string()), 416 | locked: parseOrUndefinedJSON('locked', z.boolean()), 417 | frozen: parseOrUndefinedJSON('frozen', z.boolean()), 418 | cache: parseOrUndefinedJSON('cache', z.boolean()), 419 | globalCache: parseOrUndefinedJSON('global-cache', z.boolean()), 420 | cacheKey: parseOrUndefined('cache-key', z.string()), 421 | globalCacheKey: parseOrUndefined('global-cache-key', z.string()), 422 | cacheWrite: parseOrUndefinedJSON('cache-write', z.boolean()), 423 | pixiBinPath: parseOrUndefined('pixi-bin-path', z.string()), 424 | authHost: parseOrUndefined('auth-host', z.string()), 425 | authToken: parseOrUndefined('auth-token', z.string()), 426 | authUsername: parseOrUndefined('auth-username', z.string()), 427 | authPassword: parseOrUndefined('auth-password', z.string()), 428 | authCondaToken: parseOrUndefined('auth-conda-token', z.string()), 429 | authS3AccessKeyId: parseOrUndefined('auth-s3-access-key-id', z.string()), 430 | authS3SecretAccessKey: parseOrUndefined('auth-s3-secret-access-key', z.string()), 431 | authS3SessionToken: parseOrUndefined('auth-s3-session-token', z.string()), 432 | pypiKeyringProvider: parseOrUndefined('pypi-keyring-provider', pypiKeyringProviderSchema), 433 | globalEnvironments: parseOrUndefinedMultilineList('global-environments', z.string()), 434 | postCleanup: parseOrUndefinedJSON('post-cleanup', z.boolean()) 435 | } 436 | core.debug(`Inputs: ${JSON.stringify(inputs)}`) 437 | validateInputs(inputs) 438 | const options = inferOptions(inputs) 439 | core.debug(`Inferred options: ${JSON.stringify(options)}`) 440 | assertOptions(options) 441 | return options 442 | } 443 | 444 | let _options: Options 445 | try { 446 | _options = getOptions() 447 | } catch (error) { 448 | if (core.isDebug()) { 449 | throw error 450 | } 451 | if (error instanceof Error) { 452 | core.setFailed(error.message) 453 | exit(1) 454 | } else if (typeof error === 'string') { 455 | core.setFailed(error) 456 | exit(1) 457 | } 458 | throw error 459 | } 460 | 461 | export const options = _options 462 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | 3 | [![License][license-badge]][license] 4 | [![CI][build-badge]][build] 5 | [![Latest release][latest-release-badge]][releases] 6 | [![Project Chat][chat-badge]][chat-url] 7 | 8 | [license-badge]: https://img.shields.io/github/license/prefix-dev/setup-pixi?style=flat-square 9 | [license]: ./LICENSE 10 | [build-badge]: https://img.shields.io/github/actions/workflow/status/prefix-dev/setup-pixi/test.yml?style=flat-square 11 | [build]: https://github.com/prefix-dev/setup-pixi/actions/ 12 | [latest-release-badge]: https://img.shields.io/github/v/tag/prefix-dev/setup-pixi?style=flat-square&label=latest&sort=semver 13 | [releases]: https://github.com/prefix-dev/setup-pixi/releases 14 | [chat-badge]: https://img.shields.io/discord/1082332781146800168.svg?label=&logo=discord&logoColor=ffffff&color=7389D8&labelColor=6A7EC2&style=flat-square 15 | [chat-url]: https://discord.gg/kKV8ZxyzY4 16 | 17 |

18 | 19 | # setup-pixi 📦 20 | 21 | GitHub Action to set up the [pixi](https://github.com/prefix-dev/pixi) package manager. 22 | 23 | ## Usage 24 | 25 | ```yml 26 | - uses: prefix-dev/setup-pixi@v0.9.3 27 | with: 28 | pixi-version: v0.59.0 29 | 30 | cache: true 31 | auth-host: prefix.dev 32 | auth-token: ${{ secrets.PREFIX_DEV_TOKEN }} 33 | - run: pixi run test 34 | ``` 35 | 36 | > [!WARNING] 37 | > Since pixi is not yet stable, the API of this action may change between minor versions. 38 | > Please pin the versions of this action to a specific version (i.e., `prefix-dev/setup-pixi@v0.9.3`) to avoid breaking changes. 39 | > 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). 40 | > 41 | > Put the following in your `.github/dependabot.yml` file to enable Dependabot for your GitHub Actions: 42 | > 43 | > ```yml 44 | > version: 2 45 | > updates: 46 | > - package-ecosystem: github-actions 47 | > directory: / 48 | > schedule: 49 | > interval: monthly # or daily, weekly 50 | > groups: 51 | > dependencies: 52 | > patterns: 53 | > - '*' 54 | > ``` 55 | 56 | ## Features 57 | 58 | To see all available input arguments, see the [`action.yml`](action.yml) file. 59 | 60 | ### Caching 61 | 62 | The action supports caching of the project and global pixi environments. 63 | By default, project environment caching is enabled if a `pixi.lock` file is present. 64 | It will then use the `pixi.lock` file to generate a hash of the environment and cache it. 65 | If the cache is hit, the action will skip the installation and use the cached environment. 66 | You can specify the behavior by setting the `cache` input argument. 67 | 68 | Global environment caching is disabled by default and can be enabled by setting the `global-cache` input to `true`. 69 | As there is no lockfile for global environments, the cache will expire at the end of every month to ensure it does not go stale. 70 | 71 | If you need to customize your cache-key, you can use the `cache-key` and `global-cache-key` input arguments. 72 | These will be the prefixes of the cache keys. The full cache keys will be `-` and `--` respectively. 73 | 74 | #### Only save caches on `main` 75 | 76 | In order to not exceed the [10 GB cache size limit](https://docs.github.com/en/actions/using-workflows/caching-dependencies-to-speed-up-workflows#usage-limits-and-eviction-policy) as fast, you might want to restrict when the cache is saved. 77 | This can be done by setting the `cache-write` argument. 78 | 79 | ```yml 80 | - uses: prefix-dev/setup-pixi@v0.9.3 81 | with: 82 | cache: true 83 | cache-write: ${{ github.event_name == 'push' && github.ref_name == 'main' }} 84 | ``` 85 | 86 | ### Multiple environments 87 | 88 | With pixi, you can create multiple environments for different requirements. 89 | You can also specify which environment(s) you want to install by setting the `environments` input argument. 90 | This will install all environments that are specified and cache them. 91 | 92 | ```toml 93 | [project] 94 | name = "my-package" 95 | channels = ["conda-forge"] 96 | platforms = ["linux-64"] 97 | 98 | [dependencies] 99 | python = ">=3.11" 100 | pip = "*" 101 | polars = ">=0.14.24,<0.21" 102 | 103 | [feature.py311.dependencies] 104 | python = "3.11.*" 105 | [feature.py312.dependencies] 106 | python = "3.12.*" 107 | 108 | [environments] 109 | py311 = ["py311"] 110 | py312 = ["py312"] 111 | ``` 112 | 113 | #### Multiple environments using a matrix 114 | 115 | The following example will install the `py311` and `py312` environments in different jobs. 116 | 117 | ```yml 118 | test: 119 | runs-on: ubuntu-latest 120 | strategy: 121 | matrix: 122 | environment: [py311, py312] 123 | steps: 124 | - uses: actions/checkout@v4 125 | - uses: prefix-dev/setup-pixi@v0.9.3 126 | with: 127 | environments: ${{ matrix.environment }} 128 | ``` 129 | 130 | #### Install multiple environments in one job 131 | 132 | The following example will install both the `py311` and the `py312` environment on the runner. 133 | 134 | ```yml 135 | - uses: prefix-dev/setup-pixi@v0.9.3 136 | with: 137 | # separated by spaces 138 | environments: >- 139 | py311 140 | py312 141 | - run: | 142 | pixi run -e py311 test 143 | pixi run -e py312 test 144 | ``` 145 | 146 | > [!WARNING] 147 | > If you don't specify any environment, the `default` environment will be installed and cached, even if you use other environments. 148 | 149 | ### Global Environments 150 | 151 | You can specify `pixi global install` commands by setting the `global-environments` input argument. 152 | This will create one environment per line, and install them. 153 | This is useful in particular to install executables that are needed for `pixi install` to work properly. 154 | For instance, the `keyring`, or `gcloud` executables. The following example shows how to install both in separate global environments. 155 | By default, global environments are not cached. You can enable caching by setting the `global-cache` input to `true`. 156 | 157 | ```yml 158 | - uses: prefix-dev/setup-pixi@v0.9.3 159 | with: 160 | global-environments: | 161 | google-cloud-sdk 162 | keyring --with keyrings.google-artifactregistry-auth 163 | - run: | 164 | gcloud --version 165 | keyring --list-backends 166 | ``` 167 | 168 | ### Authentication 169 | 170 | There are currently five ways to authenticate with pixi: 171 | 172 | - using a token 173 | - using a username and password 174 | - using a conda-token 175 | - using an S3 key pair 176 | - using keyring for PyPI registries 177 | 178 | For more information, see the [pixi documentation](https://pixi.sh/latest/deployment/authentication/). 179 | 180 | > [!WARNING] 181 | > Please only store sensitive information using [GitHub secrets](https://docs.github.com/en/actions/security-guides/using-secrets-in-github-actions). Do not store them in your repository. 182 | > When your sensitive information is stored in a GitHub secret, you can access it using the `${{ secrets.SECRET_NAME }}` syntax. 183 | > These secrets will always be masked in the logs. 184 | 185 | #### Token 186 | 187 | Specify the token using the `auth-token` input argument. 188 | This form of authentication (bearer token in the request headers) is mainly used at [prefix.dev](https://prefix.dev). 189 | 190 | ```yml 191 | - uses: prefix-dev/setup-pixi@v0.9.3 192 | with: 193 | auth-host: prefix.dev 194 | auth-token: ${{ secrets.PREFIX_DEV_TOKEN }} 195 | ``` 196 | 197 | #### Username and password 198 | 199 | Specify the username and password using the `auth-username` and `auth-password` input arguments. 200 | This form of authentication (HTTP Basic Auth) is used in some enterprise environments with [artifactory](https://jfrog.com/artifactory) for example. 201 | 202 | ```yml 203 | - uses: prefix-dev/setup-pixi@v0.9.3 204 | with: 205 | auth-host: custom-artifactory.com 206 | auth-username: ${{ secrets.PIXI_USERNAME }} 207 | auth-password: ${{ secrets.PIXI_PASSWORD }} 208 | ``` 209 | 210 | #### Conda-token 211 | 212 | Specify the conda-token using the `auth-conda-token` input argument. 213 | This form of authentication (token is encoded in URL: `https://my-quetz-instance.com/t//get/custom-channel`) is used at [anaconda.org](https://anaconda.org) or with [quetz instances](https://github.com/mamba-org/quetz). 214 | 215 | ```yml 216 | - uses: prefix-dev/setup-pixi@v0.9.3 217 | with: 218 | auth-host: anaconda.org # or my-quetz-instance.com 219 | auth-conda-token: ${{ secrets.CONDA_TOKEN }} 220 | ``` 221 | 222 | #### S3 223 | 224 | Specify the S3 key pair using the `auth-access-key-id` and `auth-secret-access-key` input arguments. 225 | You can also specify the session token using the `auth-session-token` input argument. 226 | 227 | ```yaml 228 | - uses: prefix-dev/setup-pixi@v0.9.3 229 | with: 230 | auth-host: s3://my-s3-bucket 231 | auth-s3-access-key-id: ${{ secrets.ACCESS_KEY_ID }} 232 | auth-s3-secret-access-key: ${{ secrets.SECRET_ACCESS_KEY }} 233 | # only needed if your key uses a session token 234 | auth-s3-session-token: ${{ secrets.SESSION_TOKEN }} 235 | ``` 236 | 237 | See the [pixi documentation](https://pixi.sh/latest/advanced/s3) for more information about S3 authentication. 238 | 239 | #### PyPI keyring provider 240 | 241 | You can specify whether to use keyring to look up credentials for PyPI. 242 | 243 | ```yml 244 | - uses: prefix-dev/setup-pixi@v0.9.3 245 | with: 246 | pypi-keyring-provider: subprocess # one of 'subprocess', 'disabled' 247 | ``` 248 | 249 | You can use the [`global-environments`](#global-environments) input to install `keyring` and its backends. 250 | 251 | ### Custom shell wrapper 252 | 253 | `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}`. 254 | This can be useful if you want to run commands inside of the pixi environment, but don't want to use the `pixi run` command for each command. 255 | 256 | ```yml 257 | - run: | # everything here will be run inside of the pixi environment 258 | python --version 259 | pip install --no-deps -e . 260 | shell: pixi run bash -e {0} 261 | ``` 262 | 263 | You can even run Python scripts like this: 264 | 265 | ```yml 266 | - run: | # everything here will be run inside of the pixi environment 267 | import my_package 268 | print("Hello world!") 269 | shell: pixi run python {0} 270 | ``` 271 | 272 | If you want to use PowerShell, you need to specify `-Command` as well. 273 | 274 | ```yml 275 | - run: | # everything here will be run inside of the pixi environment 276 | python --version | Select-String "3.11" 277 | shell: pixi run pwsh -Command {0} # pwsh works on all platforms 278 | ``` 279 | 280 | > [!NOTE] 281 | > Under the hood, the `shell: xyz {0}` option is implemented by creating a temporary script file and calling `xyz` with that script file as an argument. 282 | > This file does not have the executable bit set, so you cannot use `shell: pixi run {0}` directly but instead have to use `shell: pixi run bash {0}`. 283 | > There are some custom shells provided by GitHub that have slightly different behavior, see [`jobs..steps[*].shell`](https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsshell) in the documentation. 284 | > 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. 285 | 286 | #### One-off shell wrapper using `pixi exec` 287 | 288 | With `pixi exec`, you can also run a one-off command inside a temporary pixi environment. 289 | 290 | ```yml 291 | - run: | # everything here will be run inside of the temporary pixi environment 292 | zstd --version 293 | shell: pixi exec --spec zstd -- bash -e {0} 294 | ``` 295 | 296 | ```yml 297 | - run: | # everything here will be run inside of the temporary pixi environment 298 | import ruamel.yaml 299 | # ... 300 | shell: pixi exec --spec python=3.11.* --spec ruamel.yaml -- python {0} 301 | ``` 302 | 303 | See [here](https://pixi.sh/latest/reference/cli#exec) for more information about `pixi exec`. 304 | 305 | ### Environment activation 306 | 307 | 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. 308 | To this end, `setup-pixi` adds all environment variables set when executing `pixi run` to `$GITHUB_ENV` and, similarly, adds all path modifications to `$GITHUB_PATH`. 309 | As a result, all installed binaries can be accessed without having to call `pixi run`. 310 | 311 | ```yml 312 | - uses: prefix-dev/setup-pixi@v0.9.3 313 | with: 314 | activate-environment: true 315 | ``` 316 | 317 | If you are installing multiple environments, you will need to specify the name of the environment that you want to be activated. 318 | 319 | ```yml 320 | - uses: prefix-dev/setup-pixi@v0.9.3 321 | with: 322 | environments: >- 323 | py311 324 | py312 325 | activate-environment: py311 326 | ``` 327 | 328 | Activating an environment may be more useful than using a custom shell wrapper as it allows non-shell based steps to access binaries on the path. 329 | However, be aware that this option augments the environment of your job. 330 | 331 | ### `--frozen` and `--locked` 332 | 333 | You can specify whether `setup-pixi` should run `pixi install --frozen` or `pixi install --locked` depending on the `frozen` or the `locked` input argument. 334 | See the [official documentation](https://pixi.sh/latest/reference/cli/pixi/install/#update-options) for more information about the `--frozen` and `--locked` flags. 335 | 336 | ```yml 337 | - uses: prefix-dev/setup-pixi@v0.9.3 338 | with: 339 | locked: true 340 | # or 341 | frozen: true 342 | ``` 343 | 344 | If you don't specify anything, the default behavior is to run `pixi install --locked` if a `pixi.lock` file is present and `pixi install` otherwise. 345 | 346 | ### Debugging 347 | 348 | There are two types of debug logging that you can enable. 349 | 350 | #### Debug logging of the action 351 | 352 | The first one is the debug logging of the action itself. 353 | This can be enabled by running the action with the `RUNNER_DEBUG` environment variable set to `true`. 354 | 355 | ```yml 356 | - uses: prefix-dev/setup-pixi@v0.9.3 357 | env: 358 | RUNNER_DEBUG: true 359 | ``` 360 | 361 | Alternatively, you can enable debug logging for the action by re-running the action in debug mode: 362 | 363 | ![Re-run in debug mode](.github/assets/enable-debug-logging-light.png#gh-light-mode-only) 364 | ![Re-run in debug mode](.github/assets/enable-debug-logging-dark.png#gh-dark-mode-only) 365 | 366 | > For more information about debug logging in GitHub Actions, see [the official documentation](https://docs.github.com/en/actions/monitoring-and-troubleshooting-workflows/enabling-debug-logging). 367 | 368 | #### Debug logging of pixi 369 | 370 | The second type is the debug logging of the pixi executable. 371 | This can be specified by setting the `log-level` input. 372 | 373 | ```yml 374 | - uses: prefix-dev/setup-pixi@v0.9.3 375 | with: 376 | # one of `q`, `default`, `v`, `vv`, or `vvv`. 377 | log-level: vvv 378 | ``` 379 | 380 | If nothing is specified, `log-level` will default to `default` or `vv` depending on if [debug logging is enabled for the action](#debug-logging-of-the-action). 381 | 382 | ### Self-hosted runners 383 | 384 | On self-hosted runners, it may happen that some files are persisted between jobs. 385 | This can lead to problems or secrets getting leaked between job runs. 386 | To avoid this, you can use the `post-cleanup` input to specify the post cleanup behavior of the action (i.e., what happens _after_ all your commands have been executed). 387 | 388 | If you set `post-cleanup` to `true`, the action will delete the following files: 389 | 390 | - `.pixi` environment 391 | - the pixi binary 392 | - the rattler cache 393 | - other rattler files in `~/.rattler` 394 | 395 | If nothing is specified, `post-cleanup` will default to `true`. 396 | 397 | 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. 398 | 399 | ```yml 400 | - uses: prefix-dev/setup-pixi@v0.9.3 401 | with: 402 | post-cleanup: true 403 | # ${{ runner.temp }}\Scripts\pixi.exe on Windows 404 | pixi-bin-path: ${{ runner.temp }}/bin/pixi 405 | ``` 406 | 407 | You can also use a preinstalled local version of pixi on the runner by not setting any of the `pixi-version`, 408 | `pixi-url` or `pixi-bin-path` inputs. This action will then try to find a local version of pixi in the runner's PATH. 409 | 410 | ### Using the `pyproject.toml` as a manifest file for pixi 411 | 412 | `setup-pixi` will automatically pick up the `pyproject.toml` if it contains a `[tool.pixi.project]` section and no `pixi.toml`. 413 | This can be overwritten by setting the `manifest-path` input argument. 414 | 415 | ```yml 416 | - uses: prefix-dev/setup-pixi@v0.9.3 417 | with: 418 | manifest-path: pyproject.toml 419 | ``` 420 | 421 | ### Only install pixi 422 | 423 | If you only want to install pixi and not install the current project, you can use the `run-install` option. 424 | 425 | ```yml 426 | - uses: prefix-dev/setup-pixi@v0.9.3 427 | with: 428 | run-install: false 429 | ``` 430 | 431 | ### Download pixi from a custom URL 432 | 433 | You can also download pixi from a custom URL by setting the `pixi-url` input argument. 434 | 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. 435 | 436 | ```yml 437 | - uses: prefix-dev/setup-pixi@v0.9.3 438 | with: 439 | pixi-url: https://pixi-mirror.example.com/releases/download/v0.48.0/pixi-x86_64-unknown-linux-musl 440 | pixi-url-headers: '{"Authorization": "Bearer ${{ secrets.PIXI_MIRROR_BEARER_TOKEN }}"}' 441 | ``` 442 | 443 | The `pixi-url` input argument can also be a [Handlebars](https://handlebarsjs.com/) template string. 444 | It will be rendered with the following variables: 445 | 446 | - `version`: The version of pixi that is being installed (`latest` or a version like `v0.48.0`). 447 | - `latest`: A boolean indicating if the version is `latest`. 448 | - `pixiFile`: The name of the pixi binary to download, as determined by the system of the runner (e.g., `pixi-x86_64-unknown-linux-musl`). 449 | 450 | By default, `pixi-url` is equivalent to the following template: 451 | 452 | ```yml 453 | - uses: prefix-dev/setup-pixi@v0.9.3 454 | with: 455 | pixi-url: | 456 | {{#if latest~}} 457 | https://github.com/prefix-dev/pixi/releases/latest/download/{{pixiFile}} 458 | {{~else~}} 459 | https://github.com/prefix-dev/pixi/releases/download/{{version}}/{{pixiFile}} 460 | {{~/if}} 461 | ``` 462 | 463 | ### Setting inputs from environment variables 464 | 465 | Alternatively to setting the inputs in the `with` section, you can also set each of them using environment variables. 466 | The corresponding environment variable names are derived from the input names by converting them to uppercase, replacing hyphens with underscores, and prefixing them with `SETUP_PIXI_`. 467 | 468 | For example, the `pixi-bin-path` input can be set using the `SETUP_PIXI_PIXI_BIN_PATH` environment variable. 469 | 470 | This is particularly useful if executing the action on a self-hosted runner. 471 | 472 | Inputs always take precedence over environment variables. 473 | 474 | ## More examples 475 | 476 | If you want to see more examples, you can take a look at the [GitHub Workflows of this repository](.github/workflows/test.yml). 477 | 478 | ## Local Development 479 | 480 | 1. Clone this repository. 481 | 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`). 482 | 3. Run `pnpm dev` for live transpilation of the TypeScript source code. 483 | 4. To test the action, you can run [`act`](https://github.com/nektos/act) (inside docker) or use :sparkles: CI driven development :sparkles:. 484 | -------------------------------------------------------------------------------- /test/lockfile-not-up-to-date/pixi.lock: -------------------------------------------------------------------------------- 1 | metadata: 2 | content_hash: 3 | linux-64: e90c2ee71ad70fc0a1c8302029533a7d1498f2bffcd0eaa8d2934700e775dc1d 4 | osx-64: e90c2ee71ad70fc0a1c8302029533a7d1498f2bffcd0eaa8d2934700e775dc1d 5 | osx-arm64: e90c2ee71ad70fc0a1c8302029533a7d1498f2bffcd0eaa8d2934700e775dc1d 6 | win-64: e90c2ee71ad70fc0a1c8302029533a7d1498f2bffcd0eaa8d2934700e775dc1d 7 | channels: 8 | - url: https://conda.anaconda.org/conda-forge/ 9 | used_env_vars: [] 10 | platforms: 11 | - linux-64 12 | - osx-64 13 | - osx-arm64 14 | - win-64 15 | sources: [] 16 | time_metadata: null 17 | git_metadata: null 18 | inputs_metadata: null 19 | custom_metadata: null 20 | package: 21 | - name: _libgcc_mutex 22 | version: '0.1' 23 | manager: conda 24 | platform: linux-64 25 | dependencies: {} 26 | url: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 27 | hash: 28 | md5: d7c89558ba9fa0495403155b64376d81 29 | sha256: fe51de6107f9edc7aa4f786a70f4a883943bc9d39b3bb7307c04c41410990726 30 | optional: false 31 | category: main 32 | build: conda_forge 33 | arch: x86_64 34 | subdir: linux-64 35 | build_number: 0 36 | license: None 37 | size: 2562 38 | timestamp: 1578324546067 39 | - name: _openmp_mutex 40 | version: '4.5' 41 | manager: conda 42 | platform: linux-64 43 | dependencies: 44 | _libgcc_mutex: ==0.1 conda_forge 45 | libgomp: '>=7.5.0' 46 | url: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 47 | hash: 48 | md5: 73aaf86a425cc6e73fcf236a5a46396d 49 | sha256: fbe2c5e56a653bebb982eda4876a9178aedfc2b545f25d0ce9c4c0b508253d22 50 | optional: false 51 | category: main 52 | build: 2_gnu 53 | arch: x86_64 54 | subdir: linux-64 55 | build_number: 16 56 | constrains: 57 | - openmp_impl 9999 58 | license: BSD-3-Clause 59 | license_family: BSD 60 | size: 23621 61 | timestamp: 1650670423406 62 | - name: bzip2 63 | version: 1.0.8 64 | manager: conda 65 | platform: linux-64 66 | dependencies: 67 | libgcc-ng: '>=9.3.0' 68 | url: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h7f98852_4.tar.bz2 69 | hash: 70 | md5: a1fd65c7ccbf10880423d82bca54eb54 71 | sha256: cb521319804640ff2ad6a9f118d972ed76d86bea44e5626c09a13d38f562e1fa 72 | optional: false 73 | category: main 74 | build: h7f98852_4 75 | arch: x86_64 76 | subdir: linux-64 77 | build_number: 4 78 | license: bzip2-1.0.6 79 | license_family: BSD 80 | size: 495686 81 | timestamp: 1606604745109 82 | - name: bzip2 83 | version: 1.0.8 84 | manager: conda 85 | platform: osx-64 86 | dependencies: {} 87 | url: https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.8-h0d85af4_4.tar.bz2 88 | hash: 89 | md5: 37edc4e6304ca87316e160f5ca0bd1b5 90 | sha256: 60ba4c64f5d0afca0d283c7addba577d3e2efc0db86002808dadb0498661b2f2 91 | optional: false 92 | category: main 93 | build: h0d85af4_4 94 | arch: x86_64 95 | subdir: osx-64 96 | build_number: 4 97 | license: bzip2-1.0.6 98 | license_family: BSD 99 | size: 158829 100 | timestamp: 1618862580095 101 | - name: bzip2 102 | version: 1.0.8 103 | manager: conda 104 | platform: osx-arm64 105 | dependencies: {} 106 | url: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h3422bc3_4.tar.bz2 107 | hash: 108 | md5: fc76ace7b94fb1f694988ab1b14dd248 109 | sha256: a3efbd06ad1432edb0163c48225421f34c2660f5cc002283a8d27e791320b549 110 | optional: false 111 | category: main 112 | build: h3422bc3_4 113 | arch: aarch64 114 | subdir: osx-arm64 115 | build_number: 4 116 | license: bzip2-1.0.6 117 | license_family: BSD 118 | size: 151850 119 | timestamp: 1618862645215 120 | - name: bzip2 121 | version: 1.0.8 122 | manager: conda 123 | platform: win-64 124 | dependencies: 125 | vc: '>=14.1,<15.0a0' 126 | vs2015_runtime: '>=14.16.27012' 127 | url: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h8ffe710_4.tar.bz2 128 | hash: 129 | md5: 7c03c66026944073040cb19a4f3ec3c9 130 | sha256: 5389dad4e73e4865bb485f460fc60b120bae74404003d457ecb1a62eb7abf0c1 131 | optional: false 132 | category: main 133 | build: h8ffe710_4 134 | arch: x86_64 135 | subdir: win-64 136 | build_number: 4 137 | license: bzip2-1.0.6 138 | license_family: BSD 139 | size: 152247 140 | timestamp: 1606605223049 141 | - name: ca-certificates 142 | version: 2023.7.22 143 | manager: conda 144 | platform: linux-64 145 | dependencies: {} 146 | url: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2023.7.22-hbcca054_0.conda 147 | hash: 148 | md5: a73ecd2988327ad4c8f2c331482917f2 149 | sha256: 525b7b6b5135b952ec1808de84e5eca57c7c7ff144e29ef3e96ae4040ff432c1 150 | optional: false 151 | category: main 152 | build: hbcca054_0 153 | arch: x86_64 154 | subdir: linux-64 155 | build_number: 0 156 | license: ISC 157 | size: 149515 158 | timestamp: 1690026108541 159 | - name: ca-certificates 160 | version: 2023.7.22 161 | manager: conda 162 | platform: osx-64 163 | dependencies: {} 164 | url: https://conda.anaconda.org/conda-forge/osx-64/ca-certificates-2023.7.22-h8857fd0_0.conda 165 | hash: 166 | md5: bf2c54c18997bf3542af074c10191771 167 | sha256: 27de15e18a12117e83ac1eb8a8e52eb65731cc7f0b607a7922206a15e2460c7b 168 | optional: false 169 | category: main 170 | build: h8857fd0_0 171 | arch: x86_64 172 | subdir: osx-64 173 | build_number: 0 174 | license: ISC 175 | size: 149911 176 | timestamp: 1690026363769 177 | - name: ca-certificates 178 | version: 2023.7.22 179 | manager: conda 180 | platform: osx-arm64 181 | dependencies: {} 182 | url: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2023.7.22-hf0a4a13_0.conda 183 | hash: 184 | md5: e1b99ac4dbcee71a71682996f67f7965 185 | sha256: b220c001b0c1448a47cc49b42a622e06a540ec60b3f7a1e057fca1f37ce515e4 186 | optional: false 187 | category: main 188 | build: hf0a4a13_0 189 | arch: aarch64 190 | subdir: osx-arm64 191 | build_number: 0 192 | license: ISC 193 | size: 149918 194 | timestamp: 1690026385821 195 | - name: ca-certificates 196 | version: 2023.7.22 197 | manager: conda 198 | platform: win-64 199 | dependencies: {} 200 | url: https://conda.anaconda.org/conda-forge/win-64/ca-certificates-2023.7.22-h56e8100_0.conda 201 | hash: 202 | md5: b1c2327b36f1a25d96f2039b0d3e3739 203 | sha256: b85a6f307f8e1c803cb570bdfb9e4d811a361417873ecd2ecf687587405a72e0 204 | optional: false 205 | category: main 206 | build: h56e8100_0 207 | arch: x86_64 208 | subdir: win-64 209 | build_number: 0 210 | license: ISC 211 | size: 150013 212 | timestamp: 1690026269050 213 | - name: ld_impl_linux-64 214 | version: '2.40' 215 | manager: conda 216 | platform: linux-64 217 | dependencies: {} 218 | url: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.40-h41732ed_0.conda 219 | hash: 220 | md5: 7aca3059a1729aa76c597603f10b0dd3 221 | sha256: f6cc89d887555912d6c61b295d398cff9ec982a3417d38025c45d5dd9b9e79cd 222 | optional: false 223 | category: main 224 | build: h41732ed_0 225 | arch: x86_64 226 | subdir: linux-64 227 | build_number: 0 228 | constrains: 229 | - binutils_impl_linux-64 2.40 230 | license: GPL-3.0-only 231 | license_family: GPL 232 | size: 704696 233 | timestamp: 1674833944779 234 | - name: libffi 235 | version: 3.4.2 236 | manager: conda 237 | platform: linux-64 238 | dependencies: 239 | libgcc-ng: '>=9.4.0' 240 | url: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2 241 | hash: 242 | md5: d645c6d2ac96843a2bfaccd2d62b3ac3 243 | sha256: ab6e9856c21709b7b517e940ae7028ae0737546122f83c2aa5d692860c3b149e 244 | optional: false 245 | category: main 246 | build: h7f98852_5 247 | arch: x86_64 248 | subdir: linux-64 249 | build_number: 5 250 | license: MIT 251 | license_family: MIT 252 | size: 58292 253 | timestamp: 1636488182923 254 | - name: libffi 255 | version: 3.4.2 256 | manager: conda 257 | platform: osx-64 258 | dependencies: {} 259 | url: https://conda.anaconda.org/conda-forge/osx-64/libffi-3.4.2-h0d85af4_5.tar.bz2 260 | hash: 261 | md5: ccb34fb14960ad8b125962d3d79b31a9 262 | sha256: 7a2d27a936ceee6942ea4d397f9c7d136f12549d86f7617e8b6bad51e01a941f 263 | optional: false 264 | category: main 265 | build: h0d85af4_5 266 | arch: x86_64 267 | subdir: osx-64 268 | build_number: 5 269 | license: MIT 270 | license_family: MIT 271 | size: 51348 272 | timestamp: 1636488394370 273 | - name: libffi 274 | version: 3.4.2 275 | manager: conda 276 | platform: osx-arm64 277 | dependencies: {} 278 | url: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 279 | hash: 280 | md5: 086914b672be056eb70fd4285b6783b6 281 | sha256: 41b3d13efb775e340e4dba549ab5c029611ea6918703096b2eaa9c015c0750ca 282 | optional: false 283 | category: main 284 | build: h3422bc3_5 285 | arch: aarch64 286 | subdir: osx-arm64 287 | build_number: 5 288 | license: MIT 289 | license_family: MIT 290 | size: 39020 291 | timestamp: 1636488587153 292 | - name: libffi 293 | version: 3.4.2 294 | manager: conda 295 | platform: win-64 296 | dependencies: 297 | vc: '>=14.1,<15.0a0' 298 | vs2015_runtime: '>=14.16.27012' 299 | url: https://conda.anaconda.org/conda-forge/win-64/libffi-3.4.2-h8ffe710_5.tar.bz2 300 | hash: 301 | md5: 2c96d1b6915b408893f9472569dee135 302 | sha256: 1951ab740f80660e9bc07d2ed3aefb874d78c107264fd810f24a1a6211d4b1a5 303 | optional: false 304 | category: main 305 | build: h8ffe710_5 306 | arch: x86_64 307 | subdir: win-64 308 | build_number: 5 309 | license: MIT 310 | license_family: MIT 311 | size: 42063 312 | timestamp: 1636489106777 313 | - name: libgcc-ng 314 | version: 13.2.0 315 | manager: conda 316 | platform: linux-64 317 | dependencies: 318 | _libgcc_mutex: ==0.1 conda_forge 319 | _openmp_mutex: '>=4.5' 320 | url: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-13.2.0-h807b86a_2.conda 321 | hash: 322 | md5: c28003b0be0494f9a7664389146716ff 323 | sha256: d361d3c87c376642b99c1fc25cddec4b9905d3d9b9203c1c545b8c8c1b04539a 324 | optional: false 325 | category: main 326 | build: h807b86a_2 327 | arch: x86_64 328 | subdir: linux-64 329 | build_number: 2 330 | constrains: 331 | - libgomp 13.2.0 h807b86a_2 332 | license: GPL-3.0-only WITH GCC-exception-3.1 333 | license_family: GPL 334 | size: 771133 335 | timestamp: 1695219384393 336 | - name: libgomp 337 | version: 13.2.0 338 | manager: conda 339 | platform: linux-64 340 | dependencies: 341 | _libgcc_mutex: ==0.1 conda_forge 342 | url: https://conda.anaconda.org/conda-forge/linux-64/libgomp-13.2.0-h807b86a_2.conda 343 | hash: 344 | md5: e2042154faafe61969556f28bade94b9 345 | sha256: e1e82348f8296abfe344162b3b5f0ddc2f504759ebeb8b337ba99beaae583b15 346 | optional: false 347 | category: main 348 | build: h807b86a_2 349 | arch: x86_64 350 | subdir: linux-64 351 | build_number: 2 352 | license: GPL-3.0-only WITH GCC-exception-3.1 353 | license_family: GPL 354 | size: 421133 355 | timestamp: 1695219303065 356 | - name: libnsl 357 | version: 2.0.0 358 | manager: conda 359 | platform: linux-64 360 | dependencies: 361 | libgcc-ng: '>=12' 362 | url: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.0-hd590300_1.conda 363 | hash: 364 | md5: 854e3e1623b39777140f199c5f9ab952 365 | sha256: c0a0c0abc1c17983168c3239d79a62d53c424bc5dd1764dbcd0fa953d6fce5e0 366 | optional: false 367 | category: main 368 | build: hd590300_1 369 | arch: x86_64 370 | subdir: linux-64 371 | build_number: 1 372 | license: LGPL-2.1-only 373 | license_family: GPL 374 | size: 33210 375 | timestamp: 1695799598317 376 | - name: libsqlite 377 | version: 3.43.0 378 | manager: conda 379 | platform: linux-64 380 | dependencies: 381 | libgcc-ng: '>=12' 382 | libzlib: '>=1.2.13,<1.3.0a0' 383 | url: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.43.0-h2797004_0.conda 384 | hash: 385 | md5: 903fa782a9067d5934210df6d79220f6 386 | sha256: e715fab7ec6b3f3df2a5962ef372ff0f871d215fe819482dcd80357999513652 387 | optional: false 388 | category: main 389 | build: h2797004_0 390 | arch: x86_64 391 | subdir: linux-64 392 | build_number: 0 393 | license: Unlicense 394 | size: 840871 395 | timestamp: 1692911324643 396 | - name: libsqlite 397 | version: 3.43.0 398 | manager: conda 399 | platform: osx-64 400 | dependencies: 401 | libzlib: '>=1.2.13,<1.3.0a0' 402 | url: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.43.0-h58db7d2_0.conda 403 | hash: 404 | md5: e2195038e85e49e26fbeb7efc0ad38c4 405 | sha256: 3c3e06284c3426126901891675d09e181c651b2db01df9884da2613015e3fbac 406 | optional: false 407 | category: main 408 | build: h58db7d2_0 409 | arch: x86_64 410 | subdir: osx-64 411 | build_number: 0 412 | license: Unlicense 413 | size: 891003 414 | timestamp: 1692911591798 415 | - name: libsqlite 416 | version: 3.43.0 417 | manager: conda 418 | platform: osx-arm64 419 | dependencies: 420 | libzlib: '>=1.2.13,<1.3.0a0' 421 | url: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.43.0-hb31c410_0.conda 422 | hash: 423 | md5: 060a9948665e56a38060a1ed3ebc553a 424 | sha256: ddc90cc7a33563cd1f2b179a4964d144c221f9148634c006fd83ec9e1c667907 425 | optional: false 426 | category: main 427 | build: hb31c410_0 428 | arch: aarch64 429 | subdir: osx-arm64 430 | build_number: 0 431 | license: Unlicense 432 | size: 834286 433 | timestamp: 1692911796861 434 | - name: libsqlite 435 | version: 3.43.0 436 | manager: conda 437 | platform: win-64 438 | dependencies: 439 | ucrt: '>=10.0.20348.0' 440 | vc: '>=14.2,<15' 441 | vc14_runtime: '>=14.29.30139' 442 | url: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.43.0-hcfcfb64_0.conda 443 | hash: 444 | md5: 16c6f482e70cb3da41d0bee5d49c6bf3 445 | sha256: d79128a279c8e8b4afeef5cfe9d4302a2fd65b1af3973732d92a7cc396d5332f 446 | optional: false 447 | category: main 448 | build: hcfcfb64_0 449 | arch: x86_64 450 | subdir: win-64 451 | build_number: 0 452 | license: Unlicense 453 | size: 846526 454 | timestamp: 1692911612959 455 | - name: libuuid 456 | version: 2.38.1 457 | manager: conda 458 | platform: linux-64 459 | dependencies: 460 | libgcc-ng: '>=12' 461 | url: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda 462 | hash: 463 | md5: 40b61aab5c7ba9ff276c41cfffe6b80b 464 | sha256: 787eb542f055a2b3de553614b25f09eefb0a0931b0c87dbcce6efdfd92f04f18 465 | optional: false 466 | category: main 467 | build: h0b41bf4_0 468 | arch: x86_64 469 | subdir: linux-64 470 | build_number: 0 471 | license: BSD-3-Clause 472 | license_family: BSD 473 | size: 33601 474 | timestamp: 1680112270483 475 | - name: libzlib 476 | version: 1.2.13 477 | manager: conda 478 | platform: linux-64 479 | dependencies: 480 | libgcc-ng: '>=12' 481 | url: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.2.13-hd590300_5.conda 482 | hash: 483 | md5: f36c115f1ee199da648e0597ec2047ad 484 | sha256: 370c7c5893b737596fd6ca0d9190c9715d89d888b8c88537ae1ef168c25e82e4 485 | optional: false 486 | category: main 487 | build: hd590300_5 488 | arch: x86_64 489 | subdir: linux-64 490 | build_number: 5 491 | constrains: 492 | - zlib 1.2.13 *_5 493 | license: Zlib 494 | license_family: Other 495 | size: 61588 496 | timestamp: 1686575217516 497 | - name: libzlib 498 | version: 1.2.13 499 | manager: conda 500 | platform: osx-64 501 | dependencies: {} 502 | url: https://conda.anaconda.org/conda-forge/osx-64/libzlib-1.2.13-h8a1eda9_5.conda 503 | hash: 504 | md5: 4a3ad23f6e16f99c04e166767193d700 505 | sha256: fc58ad7f47ffea10df1f2165369978fba0a1cc32594aad778f5eec725f334867 506 | optional: false 507 | category: main 508 | build: h8a1eda9_5 509 | arch: x86_64 510 | subdir: osx-64 511 | build_number: 5 512 | constrains: 513 | - zlib 1.2.13 *_5 514 | license: Zlib 515 | license_family: Other 516 | size: 59404 517 | timestamp: 1686575566695 518 | - name: libzlib 519 | version: 1.2.13 520 | manager: conda 521 | platform: osx-arm64 522 | dependencies: {} 523 | url: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.2.13-h53f4e23_5.conda 524 | hash: 525 | md5: 1a47f5236db2e06a320ffa0392f81bd8 526 | sha256: ab1c8aefa2d54322a63aaeeefe9cf877411851738616c4068e0dccc66b9c758a 527 | optional: false 528 | category: main 529 | build: h53f4e23_5 530 | arch: aarch64 531 | subdir: osx-arm64 532 | build_number: 5 533 | constrains: 534 | - zlib 1.2.13 *_5 535 | license: Zlib 536 | license_family: Other 537 | size: 48102 538 | timestamp: 1686575426584 539 | - name: libzlib 540 | version: 1.2.13 541 | manager: conda 542 | platform: win-64 543 | dependencies: 544 | ucrt: '>=10.0.20348.0' 545 | vc: '>=14.2,<15' 546 | vc14_runtime: '>=14.29.30139' 547 | url: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.2.13-hcfcfb64_5.conda 548 | hash: 549 | md5: 5fdb9c6a113b6b6cb5e517fd972d5f41 550 | sha256: c161822ee8130b71e08b6d282b9919c1de2c5274b29921a867bca0f7d30cad26 551 | optional: false 552 | category: main 553 | build: hcfcfb64_5 554 | arch: x86_64 555 | subdir: win-64 556 | build_number: 5 557 | constrains: 558 | - zlib 1.2.13 *_5 559 | license: Zlib 560 | license_family: Other 561 | size: 55800 562 | timestamp: 1686575452215 563 | - name: ncurses 564 | version: '6.4' 565 | manager: conda 566 | platform: linux-64 567 | dependencies: 568 | libgcc-ng: '>=12' 569 | url: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.4-hcb278e6_0.conda 570 | hash: 571 | md5: 681105bccc2a3f7f1a837d47d39c9179 572 | sha256: ccf61e61d58a8a7b2d66822d5568e2dc9387883dd9b2da61e1d787ece4c4979a 573 | optional: false 574 | category: main 575 | build: hcb278e6_0 576 | arch: x86_64 577 | subdir: linux-64 578 | build_number: 0 579 | license: X11 AND BSD-3-Clause 580 | size: 880967 581 | timestamp: 1686076725450 582 | - name: ncurses 583 | version: '6.4' 584 | manager: conda 585 | platform: osx-64 586 | dependencies: {} 587 | url: https://conda.anaconda.org/conda-forge/osx-64/ncurses-6.4-hf0c8a7f_0.conda 588 | hash: 589 | md5: c3dbae2411164d9b02c69090a9a91857 590 | sha256: 7841b1fce1ffb0bfb038f9687b92f04d64acab1f7cb96431972386ea98c7b2fd 591 | optional: false 592 | category: main 593 | build: hf0c8a7f_0 594 | arch: x86_64 595 | subdir: osx-64 596 | build_number: 0 597 | license: X11 AND BSD-3-Clause 598 | size: 828118 599 | timestamp: 1686077056765 600 | - name: ncurses 601 | version: '6.4' 602 | manager: conda 603 | platform: osx-arm64 604 | dependencies: {} 605 | url: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.4-h7ea286d_0.conda 606 | hash: 607 | md5: 318337fb9d0c53ba635efb7888242373 608 | sha256: 017e230a1f912e15005d4c4f3d387119190b53240f9ae0ba8a319dd958901780 609 | optional: false 610 | category: main 611 | build: h7ea286d_0 612 | arch: aarch64 613 | subdir: osx-arm64 614 | build_number: 0 615 | license: X11 AND BSD-3-Clause 616 | size: 799196 617 | timestamp: 1686077139703 618 | - name: openssl 619 | version: 3.1.3 620 | manager: conda 621 | platform: linux-64 622 | dependencies: 623 | ca-certificates: '*' 624 | libgcc-ng: '>=12' 625 | url: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.1.3-hd590300_0.conda 626 | hash: 627 | md5: 7bb88ce04c8deb9f7d763ae04a1da72f 628 | sha256: f4e35f506c7e8ab7dfdc47255b0d5aa8ce0c99028ae0affafd274333042c4f70 629 | optional: false 630 | category: main 631 | build: hd590300_0 632 | arch: x86_64 633 | subdir: linux-64 634 | build_number: 0 635 | constrains: 636 | - pyopenssl >=22.1 637 | license: Apache-2.0 638 | license_family: Apache 639 | size: 2642850 640 | timestamp: 1695158025027 641 | - name: openssl 642 | version: 3.1.3 643 | manager: conda 644 | platform: osx-64 645 | dependencies: 646 | ca-certificates: '*' 647 | url: https://conda.anaconda.org/conda-forge/osx-64/openssl-3.1.3-h8a1eda9_0.conda 648 | hash: 649 | md5: 26f9b58f905547e658e9587f8e8cfe43 650 | sha256: 69731ce62d4b68e538af559747da53f837ae0bbca519b38f2eea28680eb9e8d1 651 | optional: false 652 | category: main 653 | build: h8a1eda9_0 654 | arch: x86_64 655 | subdir: osx-64 656 | build_number: 0 657 | constrains: 658 | - pyopenssl >=22.1 659 | license: Apache-2.0 660 | license_family: Apache 661 | size: 2329752 662 | timestamp: 1695158667922 663 | - name: openssl 664 | version: 3.1.3 665 | manager: conda 666 | platform: osx-arm64 667 | dependencies: 668 | ca-certificates: '*' 669 | url: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.1.3-h53f4e23_0.conda 670 | hash: 671 | md5: 40d01d3f39589f54b618ddd28a5a48cb 672 | sha256: d9af6208610d4985322b8eade79215f1ded6e2a2b41b0a885714b971a36a5bae 673 | optional: false 674 | category: main 675 | build: h53f4e23_0 676 | arch: aarch64 677 | subdir: osx-arm64 678 | build_number: 0 679 | constrains: 680 | - pyopenssl >=22.1 681 | license: Apache-2.0 682 | license_family: Apache 683 | size: 2225422 684 | timestamp: 1695158154709 685 | - name: openssl 686 | version: 3.1.3 687 | manager: conda 688 | platform: win-64 689 | dependencies: 690 | ca-certificates: '*' 691 | ucrt: '>=10.0.20348.0' 692 | vc: '>=14.2,<15' 693 | vc14_runtime: '>=14.29.30139' 694 | url: https://conda.anaconda.org/conda-forge/win-64/openssl-3.1.3-hcfcfb64_0.conda 695 | hash: 696 | md5: 16b2c80ad196f18acd31b588ef28cb9a 697 | sha256: 6a6b20aa2b9f32d94f8d2c352b7635b5e8b9fb7ffad823bf2ce88dc8ef61ffc8 698 | optional: false 699 | category: main 700 | build: hcfcfb64_0 701 | arch: x86_64 702 | subdir: win-64 703 | build_number: 0 704 | constrains: 705 | - pyopenssl >=22.1 706 | license: Apache-2.0 707 | license_family: Apache 708 | size: 7427366 709 | timestamp: 1695218580613 710 | - name: python 711 | version: 3.10.12 712 | manager: conda 713 | platform: linux-64 714 | dependencies: 715 | bzip2: '>=1.0.8,<2.0a0' 716 | ld_impl_linux-64: '>=2.36.1' 717 | libffi: '>=3.4,<4.0a0' 718 | libgcc-ng: '>=12' 719 | libnsl: '>=2.0.0,<2.1.0a0' 720 | libsqlite: '>=3.42.0,<4.0a0' 721 | libuuid: '>=2.38.1,<3.0a0' 722 | libzlib: '>=1.2.13,<1.3.0a0' 723 | ncurses: '>=6.4,<7.0a0' 724 | openssl: '>=3.1.1,<4.0a0' 725 | readline: '>=8.2,<9.0a0' 726 | tk: '>=8.6.12,<8.7.0a0' 727 | tzdata: '*' 728 | xz: '>=5.2.6,<6.0a0' 729 | url: https://conda.anaconda.org/conda-forge/linux-64/python-3.10.12-hd12c33a_0_cpython.conda 730 | hash: 731 | md5: eb6f1df105f37daedd6dca78523baa75 732 | sha256: 05e2a7ce916d259f11979634f770f31027d0a5d18463b094e64a30500f900699 733 | optional: false 734 | category: main 735 | build: hd12c33a_0_cpython 736 | arch: x86_64 737 | subdir: linux-64 738 | build_number: 0 739 | constrains: 740 | - python_abi 3.10.* *_cp310 741 | license: Python-2.0 742 | size: 25543395 743 | timestamp: 1687561173886 744 | - name: python 745 | version: 3.10.12 746 | manager: conda 747 | platform: osx-64 748 | dependencies: 749 | bzip2: '>=1.0.8,<2.0a0' 750 | libffi: '>=3.4,<4.0a0' 751 | libsqlite: '>=3.42.0,<4.0a0' 752 | libzlib: '>=1.2.13,<1.3.0a0' 753 | ncurses: '>=6.4,<7.0a0' 754 | openssl: '>=3.1.1,<4.0a0' 755 | readline: '>=8.2,<9.0a0' 756 | tk: '>=8.6.12,<8.7.0a0' 757 | tzdata: '*' 758 | xz: '>=5.2.6,<6.0a0' 759 | url: https://conda.anaconda.org/conda-forge/osx-64/python-3.10.12-had23ca6_0_cpython.conda 760 | hash: 761 | md5: 351b8aa0687f3510620cf06ad11229f4 762 | sha256: cbf1b9cf9bdba639675a1431a053f3f2babb73ca6b4329cf72dcf9cd45a29cc8 763 | optional: false 764 | category: main 765 | build: had23ca6_0_cpython 766 | arch: x86_64 767 | subdir: osx-64 768 | build_number: 0 769 | constrains: 770 | - python_abi 3.10.* *_cp310 771 | license: Python-2.0 772 | size: 13065974 773 | timestamp: 1687560536470 774 | - name: python 775 | version: 3.10.12 776 | manager: conda 777 | platform: osx-arm64 778 | dependencies: 779 | bzip2: '>=1.0.8,<2.0a0' 780 | libffi: '>=3.4,<4.0a0' 781 | libsqlite: '>=3.42.0,<4.0a0' 782 | libzlib: '>=1.2.13,<1.3.0a0' 783 | ncurses: '>=6.4,<7.0a0' 784 | openssl: '>=3.1.1,<4.0a0' 785 | readline: '>=8.2,<9.0a0' 786 | tk: '>=8.6.12,<8.7.0a0' 787 | tzdata: '*' 788 | xz: '>=5.2.6,<6.0a0' 789 | url: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.10.12-h01493a6_0_cpython.conda 790 | hash: 791 | md5: a36e753b6c8875be1242229b3eabe907 792 | sha256: 318355582595373ee7962383b67b0386541ad13e3734c3ee11331db025613b57 793 | optional: false 794 | category: main 795 | build: h01493a6_0_cpython 796 | arch: aarch64 797 | subdir: osx-arm64 798 | build_number: 0 799 | constrains: 800 | - python_abi 3.10.* *_cp310 801 | license: Python-2.0 802 | size: 12503692 803 | timestamp: 1687560425496 804 | - name: python 805 | version: 3.10.12 806 | manager: conda 807 | platform: win-64 808 | dependencies: 809 | bzip2: '>=1.0.8,<2.0a0' 810 | libffi: '>=3.4,<4.0a0' 811 | libsqlite: '>=3.42.0,<4.0a0' 812 | libzlib: '>=1.2.13,<1.3.0a0' 813 | openssl: '>=3.1.1,<4.0a0' 814 | tk: '>=8.6.12,<8.7.0a0' 815 | tzdata: '*' 816 | vc: '>=14.1,<15' 817 | vc14_runtime: '>=14.16.27033' 818 | xz: '>=5.2.6,<6.0a0' 819 | url: https://conda.anaconda.org/conda-forge/win-64/python-3.10.12-h4de0772_0_cpython.conda 820 | hash: 821 | md5: 14273454ca348a123ce09ab9d39c1a6e 822 | sha256: 02ee08f3f27488b76155535e43fc99ef491ccc21f28001c3cde9b134e8aa0b94 823 | optional: false 824 | category: main 825 | build: h4de0772_0_cpython 826 | arch: x86_64 827 | subdir: win-64 828 | build_number: 0 829 | constrains: 830 | - python_abi 3.10.* *_cp310 831 | license: Python-2.0 832 | size: 16002560 833 | timestamp: 1687560007019 834 | - name: readline 835 | version: '8.2' 836 | manager: conda 837 | platform: linux-64 838 | dependencies: 839 | libgcc-ng: '>=12' 840 | ncurses: '>=6.3,<7.0a0' 841 | url: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda 842 | hash: 843 | md5: 47d31b792659ce70f470b5c82fdfb7a4 844 | sha256: 5435cf39d039387fbdc977b0a762357ea909a7694d9528ab40f005e9208744d7 845 | optional: false 846 | category: main 847 | build: h8228510_1 848 | arch: x86_64 849 | subdir: linux-64 850 | build_number: 1 851 | license: GPL-3.0-only 852 | license_family: GPL 853 | size: 281456 854 | timestamp: 1679532220005 855 | - name: readline 856 | version: '8.2' 857 | manager: conda 858 | platform: osx-64 859 | dependencies: 860 | ncurses: '>=6.3,<7.0a0' 861 | url: https://conda.anaconda.org/conda-forge/osx-64/readline-8.2-h9e318b2_1.conda 862 | hash: 863 | md5: f17f77f2acf4d344734bda76829ce14e 864 | sha256: 41e7d30a097d9b060037f0c6a2b1d4c4ae7e942c06c943d23f9d481548478568 865 | optional: false 866 | category: main 867 | build: h9e318b2_1 868 | arch: x86_64 869 | subdir: osx-64 870 | build_number: 1 871 | license: GPL-3.0-only 872 | license_family: GPL 873 | size: 255870 874 | timestamp: 1679532707590 875 | - name: readline 876 | version: '8.2' 877 | manager: conda 878 | platform: osx-arm64 879 | dependencies: 880 | ncurses: '>=6.3,<7.0a0' 881 | url: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda 882 | hash: 883 | md5: 8cbb776a2f641b943d413b3e19df71f4 884 | sha256: a1dfa679ac3f6007362386576a704ad2d0d7a02e98f5d0b115f207a2da63e884 885 | optional: false 886 | category: main 887 | build: h92ec313_1 888 | arch: aarch64 889 | subdir: osx-arm64 890 | build_number: 1 891 | license: GPL-3.0-only 892 | license_family: GPL 893 | size: 250351 894 | timestamp: 1679532511311 895 | - name: tk 896 | version: 8.6.13 897 | manager: conda 898 | platform: linux-64 899 | dependencies: 900 | libgcc-ng: '>=12' 901 | libzlib: '>=1.2.13,<1.3.0a0' 902 | url: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-h2797004_0.conda 903 | hash: 904 | md5: 513336054f884f95d9fd925748f41ef3 905 | sha256: 679e944eb93fde45d0963a22598fafacbb429bb9e7ee26009ba81c4e0c435055 906 | optional: false 907 | category: main 908 | build: h2797004_0 909 | arch: x86_64 910 | subdir: linux-64 911 | build_number: 0 912 | license: TCL 913 | license_family: BSD 914 | size: 3290187 915 | timestamp: 1695506262576 916 | - name: tk 917 | version: 8.6.13 918 | manager: conda 919 | platform: osx-64 920 | dependencies: 921 | libzlib: '>=1.2.13,<1.3.0a0' 922 | url: https://conda.anaconda.org/conda-forge/osx-64/tk-8.6.13-hef22860_0.conda 923 | hash: 924 | md5: 0c25eedcc888b6d765948ab62a18c03e 925 | sha256: 573e5d7dde0a63b06ceef2c574295cbc2ec8668ec08e35d2f2c6220f4aa7fb98 926 | optional: false 927 | category: main 928 | build: hef22860_0 929 | arch: x86_64 930 | subdir: osx-64 931 | build_number: 0 932 | license: TCL 933 | license_family: BSD 934 | size: 3273909 935 | timestamp: 1695506576288 936 | - name: tk 937 | version: 8.6.13 938 | manager: conda 939 | platform: osx-arm64 940 | dependencies: 941 | libzlib: '>=1.2.13,<1.3.0a0' 942 | url: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-hb31c410_0.conda 943 | hash: 944 | md5: aa913a828b65f30ee3aba9c59bb0b514 945 | sha256: 6df6ff49dba487eb891ddc0099642a36af2fe3929ed8023f76b745f0485c54a6 946 | optional: false 947 | category: main 948 | build: hb31c410_0 949 | arch: aarch64 950 | subdir: osx-arm64 951 | build_number: 0 952 | license: TCL 953 | license_family: BSD 954 | size: 3223549 955 | timestamp: 1695506653047 956 | - name: tk 957 | version: 8.6.13 958 | manager: conda 959 | platform: win-64 960 | dependencies: 961 | ucrt: '>=10.0.20348.0' 962 | vc: '>=14.2,<15' 963 | vc14_runtime: '>=14.29.30139' 964 | url: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-hcfcfb64_0.conda 965 | hash: 966 | md5: 74405f2ccbb40af409fee1a71ce70dc6 967 | sha256: 7e42db6b5f1c5ef8d4660e6ce41b52802b6c2fdc270d5e1eccc0048d0a3f03a8 968 | optional: false 969 | category: main 970 | build: hcfcfb64_0 971 | arch: x86_64 972 | subdir: win-64 973 | build_number: 0 974 | license: TCL 975 | license_family: BSD 976 | size: 3478482 977 | timestamp: 1695506766462 978 | - name: tzdata 979 | version: 2023c 980 | manager: conda 981 | platform: linux-64 982 | dependencies: {} 983 | url: https://conda.anaconda.org/conda-forge/noarch/tzdata-2023c-h71feb2d_0.conda 984 | hash: 985 | md5: 939e3e74d8be4dac89ce83b20de2492a 986 | sha256: 0449138224adfa125b220154408419ec37c06b0b49f63c5954724325903ecf55 987 | optional: false 988 | category: main 989 | build: h71feb2d_0 990 | arch: x86_64 991 | subdir: linux-64 992 | build_number: 0 993 | license: LicenseRef-Public-Domain 994 | noarch: generic 995 | size: 117580 996 | timestamp: 1680041306008 997 | - name: tzdata 998 | version: 2023c 999 | manager: conda 1000 | platform: osx-64 1001 | dependencies: {} 1002 | url: https://conda.anaconda.org/conda-forge/noarch/tzdata-2023c-h71feb2d_0.conda 1003 | hash: 1004 | md5: 939e3e74d8be4dac89ce83b20de2492a 1005 | sha256: 0449138224adfa125b220154408419ec37c06b0b49f63c5954724325903ecf55 1006 | optional: false 1007 | category: main 1008 | build: h71feb2d_0 1009 | arch: x86_64 1010 | subdir: osx-64 1011 | build_number: 0 1012 | license: LicenseRef-Public-Domain 1013 | noarch: generic 1014 | size: 117580 1015 | timestamp: 1680041306008 1016 | - name: tzdata 1017 | version: 2023c 1018 | manager: conda 1019 | platform: osx-arm64 1020 | dependencies: {} 1021 | url: https://conda.anaconda.org/conda-forge/noarch/tzdata-2023c-h71feb2d_0.conda 1022 | hash: 1023 | md5: 939e3e74d8be4dac89ce83b20de2492a 1024 | sha256: 0449138224adfa125b220154408419ec37c06b0b49f63c5954724325903ecf55 1025 | optional: false 1026 | category: main 1027 | build: h71feb2d_0 1028 | arch: aarch64 1029 | subdir: osx-arm64 1030 | build_number: 0 1031 | license: LicenseRef-Public-Domain 1032 | noarch: generic 1033 | size: 117580 1034 | timestamp: 1680041306008 1035 | - name: tzdata 1036 | version: 2023c 1037 | manager: conda 1038 | platform: win-64 1039 | dependencies: {} 1040 | url: https://conda.anaconda.org/conda-forge/noarch/tzdata-2023c-h71feb2d_0.conda 1041 | hash: 1042 | md5: 939e3e74d8be4dac89ce83b20de2492a 1043 | sha256: 0449138224adfa125b220154408419ec37c06b0b49f63c5954724325903ecf55 1044 | optional: false 1045 | category: main 1046 | build: h71feb2d_0 1047 | arch: x86_64 1048 | subdir: win-64 1049 | build_number: 0 1050 | license: LicenseRef-Public-Domain 1051 | noarch: generic 1052 | size: 117580 1053 | timestamp: 1680041306008 1054 | - name: ucrt 1055 | version: 10.0.22621.0 1056 | manager: conda 1057 | platform: win-64 1058 | dependencies: {} 1059 | url: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_0.tar.bz2 1060 | hash: 1061 | md5: 72608f6cd3e5898229c3ea16deb1ac43 1062 | sha256: f29cdaf8712008f6b419b8b1a403923b00ab2504bfe0fb2ba8eb60e72d4f14c6 1063 | optional: false 1064 | category: main 1065 | build: h57928b3_0 1066 | arch: x86_64 1067 | subdir: win-64 1068 | build_number: 0 1069 | constrains: 1070 | - vs2015_runtime >=14.29.30037 1071 | license: LicenseRef-Proprietary 1072 | license_family: PROPRIETARY 1073 | size: 1283972 1074 | timestamp: 1666630199266 1075 | - name: vc 1076 | version: '14.3' 1077 | manager: conda 1078 | platform: win-64 1079 | dependencies: 1080 | vc14_runtime: '>=14.36.32532' 1081 | url: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-h64f974e_17.conda 1082 | hash: 1083 | md5: 67ff6791f235bb606659bf2a5c169191 1084 | sha256: 86ae94bf680980776aa761c2b0909a0ddbe1f817e7eeb8b16a1730f10f8891b6 1085 | optional: false 1086 | category: main 1087 | build: h64f974e_17 1088 | arch: x86_64 1089 | subdir: win-64 1090 | build_number: 17 1091 | track_features: 1092 | - vc14 1093 | license: BSD-3-Clause 1094 | license_family: BSD 1095 | size: 17176 1096 | timestamp: 1688020629925 1097 | - name: vc14_runtime 1098 | version: 14.36.32532 1099 | manager: conda 1100 | platform: win-64 1101 | dependencies: 1102 | ucrt: '>=10.0.20348.0' 1103 | url: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.36.32532-hdcecf7f_17.conda 1104 | hash: 1105 | md5: d0de20f2f3fc806a81b44fcdd941aaf7 1106 | sha256: b317d49af32d5c031828e62c08d56f01d9a64cd3f40d4cccb052bc38c7a9e62e 1107 | optional: false 1108 | category: main 1109 | build: hdcecf7f_17 1110 | arch: x86_64 1111 | subdir: win-64 1112 | build_number: 17 1113 | constrains: 1114 | - vs2015_runtime 14.36.32532.* *_17 1115 | license: LicenseRef-ProprietaryMicrosoft 1116 | license_family: Proprietary 1117 | size: 739437 1118 | timestamp: 1694292382336 1119 | - name: vs2015_runtime 1120 | version: 14.36.32532 1121 | manager: conda 1122 | platform: win-64 1123 | dependencies: 1124 | vc14_runtime: '>=14.36.32532' 1125 | url: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.36.32532-h05e6639_17.conda 1126 | hash: 1127 | md5: 4618046c39f7c81861e53ded842e738a 1128 | sha256: 5ecbd731dc7f13762d67be0eadc47eb7f14713005e430d9b5fc680e965ac0f81 1129 | optional: false 1130 | category: main 1131 | build: h05e6639_17 1132 | arch: x86_64 1133 | subdir: win-64 1134 | build_number: 17 1135 | license: BSD-3-Clause 1136 | license_family: BSD 1137 | size: 17207 1138 | timestamp: 1688020635322 1139 | - name: xz 1140 | version: 5.2.6 1141 | manager: conda 1142 | platform: linux-64 1143 | dependencies: 1144 | libgcc-ng: '>=12' 1145 | url: https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2 1146 | hash: 1147 | md5: 2161070d867d1b1204ea749c8eec4ef0 1148 | sha256: 03a6d28ded42af8a347345f82f3eebdd6807a08526d47899a42d62d319609162 1149 | optional: false 1150 | category: main 1151 | build: h166bdaf_0 1152 | arch: x86_64 1153 | subdir: linux-64 1154 | build_number: 0 1155 | license: LGPL-2.1 and GPL-2.0 1156 | size: 418368 1157 | timestamp: 1660346797927 1158 | - name: xz 1159 | version: 5.2.6 1160 | manager: conda 1161 | platform: osx-64 1162 | dependencies: {} 1163 | url: https://conda.anaconda.org/conda-forge/osx-64/xz-5.2.6-h775f41a_0.tar.bz2 1164 | hash: 1165 | md5: a72f9d4ea13d55d745ff1ed594747f10 1166 | sha256: eb09823f34cc2dd663c0ec4ab13f246f45dcd52e5b8c47b9864361de5204a1c8 1167 | optional: false 1168 | category: main 1169 | build: h775f41a_0 1170 | arch: x86_64 1171 | subdir: osx-64 1172 | build_number: 0 1173 | license: LGPL-2.1 and GPL-2.0 1174 | size: 238119 1175 | timestamp: 1660346964847 1176 | - name: xz 1177 | version: 5.2.6 1178 | manager: conda 1179 | platform: osx-arm64 1180 | dependencies: {} 1181 | url: https://conda.anaconda.org/conda-forge/osx-arm64/xz-5.2.6-h57fd34a_0.tar.bz2 1182 | hash: 1183 | md5: 39c6b54e94014701dd157f4f576ed211 1184 | sha256: 59d78af0c3e071021cfe82dc40134c19dab8cdf804324b62940f5c8cd71803ec 1185 | optional: false 1186 | category: main 1187 | build: h57fd34a_0 1188 | arch: aarch64 1189 | subdir: osx-arm64 1190 | build_number: 0 1191 | license: LGPL-2.1 and GPL-2.0 1192 | size: 235693 1193 | timestamp: 1660346961024 1194 | - name: xz 1195 | version: 5.2.6 1196 | manager: conda 1197 | platform: win-64 1198 | dependencies: 1199 | vc: '>=14.1,<15' 1200 | vs2015_runtime: '>=14.16.27033' 1201 | url: https://conda.anaconda.org/conda-forge/win-64/xz-5.2.6-h8d14728_0.tar.bz2 1202 | hash: 1203 | md5: 515d77642eaa3639413c6b1bc3f94219 1204 | sha256: 54d9778f75a02723784dc63aff4126ff6e6749ba21d11a6d03c1f4775f269fe0 1205 | optional: false 1206 | category: main 1207 | build: h8d14728_0 1208 | arch: x86_64 1209 | subdir: win-64 1210 | build_number: 0 1211 | license: LGPL-2.1 and GPL-2.0 1212 | size: 217804 1213 | timestamp: 1660346976440 1214 | version: 1 1215 | -------------------------------------------------------------------------------- /test/default/pixi.lock: -------------------------------------------------------------------------------- 1 | version: 6 2 | environments: 3 | default: 4 | channels: 5 | - url: https://conda.anaconda.org/conda-forge/ 6 | packages: 7 | linux-64: 8 | - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 9 | - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 10 | - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h7f98852_4.tar.bz2 11 | - conda: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2023.7.22-hbcca054_0.conda 12 | - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.40-h41732ed_0.conda 13 | - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.5.0-hcb278e6_1.conda 14 | - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2 15 | - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-13.1.0-he5830b7_0.conda 16 | - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-13.1.0-he5830b7_0.conda 17 | - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.0-h7f98852_0.tar.bz2 18 | - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.43.0-h2797004_0.conda 19 | - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda 20 | - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.2.13-hd590300_5.conda 21 | - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.4-hcb278e6_0.conda 22 | - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.1.2-hd590300_0.conda 23 | - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.11.5-hab00c5b_0_cpython.conda 24 | - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda 25 | - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.12-h27826a3_0.tar.bz2 26 | - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2023c-h71feb2d_0.conda 27 | subdir: linux-64 28 | - conda: https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2 29 | linux-aarch64: 30 | - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-2_gnu.tar.bz2 31 | - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h68df207_7.conda 32 | - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ca-certificates-2025.1.31-hcefe29a_0.conda 33 | - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.43-h80caac9_4.conda 34 | - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.7.0-h5ad3122_0.conda 35 | - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.4.6-he21f813_1.conda 36 | - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-14.2.0-he277a41_2.conda 37 | - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-14.2.0-he9431aa_2.conda 38 | - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-14.2.0-he277a41_2.conda 39 | - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblzma-5.8.1-h86ecc28_0.conda 40 | - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnsl-2.0.1-h31becfc_0.conda 41 | - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.49.1-h5eb1b54_2.conda 42 | - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.38.1-hb4cce97_0.conda 43 | - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcrypt-4.4.36-h31becfc_1.conda 44 | - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda 45 | - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-ha32ae93_3.conda 46 | - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.5.0-hd08dc88_0.conda 47 | - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.11.12-h1683364_0_cpython.conda 48 | - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.2-h8382b9d_2.conda 49 | - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-h194ca79_0.conda 50 | - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda 51 | osx-64: 52 | - conda: https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.8-h0d85af4_4.tar.bz2 53 | - conda: https://conda.anaconda.org/conda-forge/osx-64/ca-certificates-2023.7.22-h8857fd0_0.conda 54 | - conda: https://conda.anaconda.org/conda-forge/osx-64/libexpat-2.5.0-hf0c8a7f_1.conda 55 | - conda: https://conda.anaconda.org/conda-forge/osx-64/libffi-3.4.2-h0d85af4_5.tar.bz2 56 | - conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.43.0-h58db7d2_0.conda 57 | - conda: https://conda.anaconda.org/conda-forge/osx-64/libzlib-1.2.13-h8a1eda9_5.conda 58 | - conda: https://conda.anaconda.org/conda-forge/osx-64/ncurses-6.4-hf0c8a7f_0.conda 59 | - conda: https://conda.anaconda.org/conda-forge/osx-64/openssl-3.1.2-h8a1eda9_0.conda 60 | - conda: https://conda.anaconda.org/conda-forge/osx-64/python-3.11.5-h30d4d87_0_cpython.conda 61 | - conda: https://conda.anaconda.org/conda-forge/osx-64/readline-8.2-h9e318b2_1.conda 62 | - conda: https://conda.anaconda.org/conda-forge/osx-64/tk-8.6.12-h5dbffcc_0.tar.bz2 63 | - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2023c-h71feb2d_0.conda 64 | subdir: osx-64 65 | - conda: https://conda.anaconda.org/conda-forge/osx-64/xz-5.2.6-h775f41a_0.tar.bz2 66 | osx-arm64: 67 | - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h93a5062_5.conda 68 | - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2023.11.17-hf0a4a13_0.conda 69 | - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.5.0-hb7217d7_1.conda 70 | - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 71 | - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.44.2-h091b4b1_0.conda 72 | - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.2.13-h53f4e23_5.conda 73 | - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.4-h463b476_2.conda 74 | - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.2.1-h0d3ecfb_0.conda 75 | - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.11.7-hdf0ec26_1_cpython.conda 76 | - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda 77 | - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda 78 | - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2023d-h0c530f3_0.conda 79 | - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xz-5.2.6-h57fd34a_0.tar.bz2 80 | win-64: 81 | - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h8ffe710_4.tar.bz2 82 | - conda: https://conda.anaconda.org/conda-forge/win-64/ca-certificates-2023.7.22-h56e8100_0.conda 83 | - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.5.0-h63175ca_1.conda 84 | - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.4.2-h8ffe710_5.tar.bz2 85 | - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.43.0-hcfcfb64_0.conda 86 | - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.2.13-hcfcfb64_5.conda 87 | - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.1.2-hcfcfb64_0.conda 88 | - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.11.5-h2628c8c_0_cpython.conda 89 | - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.12-h8ffe710_0.tar.bz2 90 | - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2023c-h71feb2d_0.conda 91 | subdir: win-64 92 | - conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_0.tar.bz2 93 | - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-h64f974e_17.conda 94 | - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.36.32532-hfdfe4a8_17.conda 95 | - conda: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.36.32532-h05e6639_17.conda 96 | - conda: https://conda.anaconda.org/conda-forge/win-64/xz-5.2.6-h8d14728_0.tar.bz2 97 | packages: 98 | - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 99 | sha256: fe51de6107f9edc7aa4f786a70f4a883943bc9d39b3bb7307c04c41410990726 100 | md5: d7c89558ba9fa0495403155b64376d81 101 | license: None 102 | size: 2562 103 | timestamp: 1578324546067 104 | - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 105 | build_number: 16 106 | sha256: fbe2c5e56a653bebb982eda4876a9178aedfc2b545f25d0ce9c4c0b508253d22 107 | md5: 73aaf86a425cc6e73fcf236a5a46396d 108 | depends: 109 | - libgomp >=7.5.0 110 | - _libgcc_mutex ==0.1 conda_forge 111 | constrains: 112 | - openmp_impl 9999 113 | license: BSD-3-Clause 114 | license_family: BSD 115 | size: 23621 116 | timestamp: 1650670423406 117 | - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-2_gnu.tar.bz2 118 | build_number: 16 119 | sha256: 3702bef2f0a4d38bd8288bbe54aace623602a1343c2cfbefd3fa188e015bebf0 120 | md5: 6168d71addc746e8f2b8d57dfd2edcea 121 | depends: 122 | - libgomp >=7.5.0 123 | constrains: 124 | - openmp_impl 9999 125 | license: BSD-3-Clause 126 | license_family: BSD 127 | size: 23712 128 | timestamp: 1650670790230 129 | - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h7f98852_4.tar.bz2 130 | sha256: cb521319804640ff2ad6a9f118d972ed76d86bea44e5626c09a13d38f562e1fa 131 | md5: a1fd65c7ccbf10880423d82bca54eb54 132 | depends: 133 | - libgcc-ng >=9.3.0 134 | license: bzip2-1.0.6 135 | license_family: BSD 136 | size: 495686 137 | timestamp: 1606604745109 138 | - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h68df207_7.conda 139 | sha256: 2258b0b33e1cb3a9852d47557984abb6e7ea58e3d7f92706ec1f8e879290c4cb 140 | md5: 56398c28220513b9ea13d7b450acfb20 141 | depends: 142 | - libgcc-ng >=12 143 | license: bzip2-1.0.6 144 | license_family: BSD 145 | size: 189884 146 | timestamp: 1720974504976 147 | - conda: https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.8-h0d85af4_4.tar.bz2 148 | sha256: 60ba4c64f5d0afca0d283c7addba577d3e2efc0db86002808dadb0498661b2f2 149 | md5: 37edc4e6304ca87316e160f5ca0bd1b5 150 | license: bzip2-1.0.6 151 | license_family: BSD 152 | size: 158829 153 | timestamp: 1618862580095 154 | - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h93a5062_5.conda 155 | sha256: bfa84296a638bea78a8bb29abc493ee95f2a0218775642474a840411b950fe5f 156 | md5: 1bbc659ca658bfd49a481b5ef7a0f40f 157 | license: bzip2-1.0.6 158 | license_family: BSD 159 | size: 122325 160 | timestamp: 1699280294368 161 | - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h8ffe710_4.tar.bz2 162 | sha256: 5389dad4e73e4865bb485f460fc60b120bae74404003d457ecb1a62eb7abf0c1 163 | md5: 7c03c66026944073040cb19a4f3ec3c9 164 | depends: 165 | - vc >=14.1,<15.0a0 166 | - vs2015_runtime >=14.16.27012 167 | license: bzip2-1.0.6 168 | license_family: BSD 169 | size: 152247 170 | timestamp: 1606605223049 171 | - conda: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2023.7.22-hbcca054_0.conda 172 | sha256: 525b7b6b5135b952ec1808de84e5eca57c7c7ff144e29ef3e96ae4040ff432c1 173 | md5: a73ecd2988327ad4c8f2c331482917f2 174 | license: ISC 175 | size: 149515 176 | timestamp: 1690026108541 177 | - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ca-certificates-2025.1.31-hcefe29a_0.conda 178 | sha256: 66c6408ee461593cfdb2d78d82e6ed74d04a04ccb51df3ef8a5f35148c9c6eec 179 | md5: 462cb166cd2e26a396f856510a3aff67 180 | license: ISC 181 | size: 158290 182 | timestamp: 1738299057652 183 | - conda: https://conda.anaconda.org/conda-forge/osx-64/ca-certificates-2023.7.22-h8857fd0_0.conda 184 | sha256: 27de15e18a12117e83ac1eb8a8e52eb65731cc7f0b607a7922206a15e2460c7b 185 | md5: bf2c54c18997bf3542af074c10191771 186 | license: ISC 187 | size: 149911 188 | timestamp: 1690026363769 189 | - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2023.11.17-hf0a4a13_0.conda 190 | sha256: 75f4762a55f7e9453a603c967d549bfa0a7a9669d502d103cb6fbf8c86d993c6 191 | md5: c01da7c77cfcba2107174e25c1d47384 192 | license: ISC 193 | size: 154444 194 | timestamp: 1700280972188 195 | - conda: https://conda.anaconda.org/conda-forge/win-64/ca-certificates-2023.7.22-h56e8100_0.conda 196 | sha256: b85a6f307f8e1c803cb570bdfb9e4d811a361417873ecd2ecf687587405a72e0 197 | md5: b1c2327b36f1a25d96f2039b0d3e3739 198 | license: ISC 199 | size: 150013 200 | timestamp: 1690026269050 201 | - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.40-h41732ed_0.conda 202 | sha256: f6cc89d887555912d6c61b295d398cff9ec982a3417d38025c45d5dd9b9e79cd 203 | md5: 7aca3059a1729aa76c597603f10b0dd3 204 | constrains: 205 | - binutils_impl_linux-64 2.40 206 | license: GPL-3.0-only 207 | license_family: GPL 208 | size: 704696 209 | timestamp: 1674833944779 210 | - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.43-h80caac9_4.conda 211 | sha256: 016832a70b0aa97e1c4e47e23c00b0c34def679de25146736df353199f684f0d 212 | md5: 80c9ad5e05e91bb6c0967af3880c9742 213 | constrains: 214 | - binutils_impl_linux-aarch64 2.43 215 | license: GPL-3.0-only 216 | license_family: GPL 217 | size: 699058 218 | timestamp: 1740155620594 219 | - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.5.0-hcb278e6_1.conda 220 | sha256: 74c98a563777ae2ad71f1f74d458a8ab043cee4a513467c159ccf159d0e461f3 221 | md5: 6305a3dd2752c76335295da4e581f2fd 222 | depends: 223 | - libgcc-ng >=12 224 | constrains: 225 | - expat 2.5.0.* 226 | license: MIT 227 | license_family: MIT 228 | size: 77980 229 | timestamp: 1680190528313 230 | - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.7.0-h5ad3122_0.conda 231 | sha256: e3a0d95fe787cccf286f5dced9fa9586465d3cd5ec8e04f7ad7f0e72c4afd089 232 | md5: d41a057e7968705dae8dcb7c8ba2c8dd 233 | depends: 234 | - libgcc >=13 235 | constrains: 236 | - expat 2.7.0.* 237 | license: MIT 238 | license_family: MIT 239 | size: 73155 240 | timestamp: 1743432002397 241 | - conda: https://conda.anaconda.org/conda-forge/osx-64/libexpat-2.5.0-hf0c8a7f_1.conda 242 | sha256: 80024bd9f44d096c4cc07fb2bac76b5f1f7553390112dab3ad6acb16a05f0b96 243 | md5: 6c81cb022780ee33435cca0127dd43c9 244 | constrains: 245 | - expat 2.5.0.* 246 | license: MIT 247 | license_family: MIT 248 | size: 69602 249 | timestamp: 1680191040160 250 | - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.5.0-hb7217d7_1.conda 251 | sha256: 7d143a9c991579ad4207f84c632650a571c66329090daa32b3c87cf7311c3381 252 | md5: 5a097ad3d17e42c148c9566280481317 253 | constrains: 254 | - expat 2.5.0.* 255 | license: MIT 256 | license_family: MIT 257 | size: 63442 258 | timestamp: 1680190916539 259 | - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.5.0-h63175ca_1.conda 260 | sha256: 794b2a9be72f176a2767c299574d330ffb76b2ed75d7fd20bee3bbadce5886cf 261 | md5: 636cc3cbbd2e28bcfd2f73b2044aac2c 262 | constrains: 263 | - expat 2.5.0.* 264 | license: MIT 265 | license_family: MIT 266 | size: 138689 267 | timestamp: 1680190844101 268 | - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2 269 | sha256: ab6e9856c21709b7b517e940ae7028ae0737546122f83c2aa5d692860c3b149e 270 | md5: d645c6d2ac96843a2bfaccd2d62b3ac3 271 | depends: 272 | - libgcc-ng >=9.4.0 273 | license: MIT 274 | license_family: MIT 275 | size: 58292 276 | timestamp: 1636488182923 277 | - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.4.6-he21f813_1.conda 278 | sha256: 608b8c8b0315423e524b48733d91edd43f95cb3354a765322ac306a858c2cd2e 279 | md5: 15a131f30cae36e9a655ca81fee9a285 280 | depends: 281 | - libgcc >=13 282 | license: MIT 283 | license_family: MIT 284 | size: 55847 285 | timestamp: 1743434586764 286 | - conda: https://conda.anaconda.org/conda-forge/osx-64/libffi-3.4.2-h0d85af4_5.tar.bz2 287 | sha256: 7a2d27a936ceee6942ea4d397f9c7d136f12549d86f7617e8b6bad51e01a941f 288 | md5: ccb34fb14960ad8b125962d3d79b31a9 289 | license: MIT 290 | license_family: MIT 291 | size: 51348 292 | timestamp: 1636488394370 293 | - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 294 | sha256: 41b3d13efb775e340e4dba549ab5c029611ea6918703096b2eaa9c015c0750ca 295 | md5: 086914b672be056eb70fd4285b6783b6 296 | license: MIT 297 | license_family: MIT 298 | size: 39020 299 | timestamp: 1636488587153 300 | - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.4.2-h8ffe710_5.tar.bz2 301 | sha256: 1951ab740f80660e9bc07d2ed3aefb874d78c107264fd810f24a1a6211d4b1a5 302 | md5: 2c96d1b6915b408893f9472569dee135 303 | depends: 304 | - vc >=14.1,<15.0a0 305 | - vs2015_runtime >=14.16.27012 306 | license: MIT 307 | license_family: MIT 308 | size: 42063 309 | timestamp: 1636489106777 310 | - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-14.2.0-he277a41_2.conda 311 | sha256: a57f7f9ba2a12f56eafdcd25b6d75f7be10b8fc1a802a58b76a77ca8c66f4503 312 | md5: 6b4268a60b10f29257b51b9b67ff8d76 313 | depends: 314 | - _openmp_mutex >=4.5 315 | constrains: 316 | - libgcc-ng ==14.2.0=*_2 317 | - libgomp 14.2.0 he277a41_2 318 | license: GPL-3.0-only WITH GCC-exception-3.1 319 | license_family: GPL 320 | size: 535507 321 | timestamp: 1740241069780 322 | - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-13.1.0-he5830b7_0.conda 323 | sha256: fba897a02f35b2b5e6edc43a746d1fa6970a77b422f258246316110af8966911 324 | md5: cd93f779ff018dd85c7544c015c9db3c 325 | depends: 326 | - _libgcc_mutex ==0.1 conda_forge 327 | - _openmp_mutex >=4.5 328 | constrains: 329 | - libgomp 13.1.0 he5830b7_0 330 | license: GPL-3.0-only WITH GCC-exception-3.1 331 | license_family: GPL 332 | size: 776294 333 | timestamp: 1685816209343 334 | - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-14.2.0-he9431aa_2.conda 335 | sha256: 9647f75cddc18b07eebe6e1f21500eed50a6af2c43c84e831b4c7a597e10d226 336 | md5: 692c2bb75f32cfafb6799cf6d1c5d0e0 337 | depends: 338 | - libgcc 14.2.0 he277a41_2 339 | license: GPL-3.0-only WITH GCC-exception-3.1 340 | license_family: GPL 341 | size: 53622 342 | timestamp: 1740241074834 343 | - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-13.1.0-he5830b7_0.conda 344 | sha256: 5d441d80b57f857ad305a65169a6b915d4fd6735cdc9e9bded35d493c91ef16d 345 | md5: 56ca14d57ac29a75d23a39eb3ee0ddeb 346 | depends: 347 | - _libgcc_mutex ==0.1 conda_forge 348 | license: GPL-3.0-only WITH GCC-exception-3.1 349 | license_family: GPL 350 | size: 419184 351 | timestamp: 1685816132543 352 | - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-14.2.0-he277a41_2.conda 353 | sha256: 4e303711fb7413bf98995beac58e731073099d7a669a3b81e49330ca8da05174 354 | md5: b11c09d9463daf4cae492d29806b1889 355 | license: GPL-3.0-only WITH GCC-exception-3.1 356 | license_family: GPL 357 | size: 462783 358 | timestamp: 1740241005079 359 | - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblzma-5.8.1-h86ecc28_0.conda 360 | sha256: fee534c3fe3911a5164c438b40c7d3458d93086decd359ef72f0d04a7a5d82f4 361 | md5: 775d36ea4e469b0c049a6f2cd6253d82 362 | depends: 363 | - libgcc >=13 364 | license: 0BSD 365 | size: 124919 366 | timestamp: 1743773576913 367 | - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.0-h7f98852_0.tar.bz2 368 | sha256: 32f4fb94d99946b0dabfbbfd442b25852baf909637f2eed1ffe3baea15d02aad 369 | md5: 39b1328babf85c7c3a61636d9cd50206 370 | depends: 371 | - libgcc-ng >=9.4.0 372 | license: GPL-2.0-only 373 | license_family: GPL 374 | size: 31236 375 | timestamp: 1633040059627 376 | - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnsl-2.0.1-h31becfc_0.conda 377 | sha256: fd18c2b75d7411096428d36a70b36b1a17e31f7b8956b6905d145792d49e97f8 378 | md5: c14f32510f694e3185704d89967ec422 379 | depends: 380 | - libgcc-ng >=12 381 | license: LGPL-2.1-only 382 | license_family: GPL 383 | size: 34501 384 | timestamp: 1697358973269 385 | - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.43.0-h2797004_0.conda 386 | sha256: e715fab7ec6b3f3df2a5962ef372ff0f871d215fe819482dcd80357999513652 387 | md5: 903fa782a9067d5934210df6d79220f6 388 | depends: 389 | - libzlib >=1.2.13,<1.3.0a0 390 | - libgcc-ng >=12 391 | license: Unlicense 392 | size: 840871 393 | timestamp: 1692911324643 394 | - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.49.1-h5eb1b54_2.conda 395 | sha256: c0eb05c6db32b52cc80e06a2badfa11fbaa66b49f1e7cff77aa691b74a294dcc 396 | md5: 7c45959e187fd3313f9f1734464baecc 397 | depends: 398 | - libgcc >=13 399 | - libzlib >=1.3.1,<2.0a0 400 | license: Unlicense 401 | size: 916419 402 | timestamp: 1742083699438 403 | - conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.43.0-h58db7d2_0.conda 404 | sha256: 3c3e06284c3426126901891675d09e181c651b2db01df9884da2613015e3fbac 405 | md5: e2195038e85e49e26fbeb7efc0ad38c4 406 | depends: 407 | - libzlib >=1.2.13,<1.3.0a0 408 | license: Unlicense 409 | size: 891003 410 | timestamp: 1692911591798 411 | - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.44.2-h091b4b1_0.conda 412 | sha256: f0dc2fe69eddb4bab72ff6bb0da51d689294f466ee1b01e80ced1e7878a21aa5 413 | md5: d7e1af696cfadec251a0abdd7b79ed77 414 | depends: 415 | - libzlib >=1.2.13,<1.3.0a0 416 | license: Unlicense 417 | size: 815254 418 | timestamp: 1700863572318 419 | - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.43.0-hcfcfb64_0.conda 420 | sha256: d79128a279c8e8b4afeef5cfe9d4302a2fd65b1af3973732d92a7cc396d5332f 421 | md5: 16c6f482e70cb3da41d0bee5d49c6bf3 422 | depends: 423 | - ucrt >=10.0.20348.0 424 | - vc >=14.2,<15 425 | - vc14_runtime >=14.29.30139 426 | license: Unlicense 427 | size: 846526 428 | timestamp: 1692911612959 429 | - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda 430 | sha256: 787eb542f055a2b3de553614b25f09eefb0a0931b0c87dbcce6efdfd92f04f18 431 | md5: 40b61aab5c7ba9ff276c41cfffe6b80b 432 | depends: 433 | - libgcc-ng >=12 434 | license: BSD-3-Clause 435 | license_family: BSD 436 | size: 33601 437 | timestamp: 1680112270483 438 | - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.38.1-hb4cce97_0.conda 439 | sha256: 616277b0c5f7616c2cdf36f6c316ea3f9aa5bb35f2d4476a349ab58b9b91675f 440 | md5: 000e30b09db0b7c775b21695dff30969 441 | depends: 442 | - libgcc-ng >=12 443 | license: BSD-3-Clause 444 | license_family: BSD 445 | size: 35720 446 | timestamp: 1680113474501 447 | - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcrypt-4.4.36-h31becfc_1.conda 448 | sha256: 6b46c397644091b8a26a3048636d10b989b1bf266d4be5e9474bf763f828f41f 449 | md5: b4df5d7d4b63579d081fd3a4cf99740e 450 | depends: 451 | - libgcc-ng >=12 452 | license: LGPL-2.1-or-later 453 | size: 114269 454 | timestamp: 1702724369203 455 | - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.2.13-hd590300_5.conda 456 | sha256: 370c7c5893b737596fd6ca0d9190c9715d89d888b8c88537ae1ef168c25e82e4 457 | md5: f36c115f1ee199da648e0597ec2047ad 458 | depends: 459 | - libgcc-ng >=12 460 | constrains: 461 | - zlib 1.2.13 *_5 462 | license: Zlib 463 | license_family: Other 464 | size: 61588 465 | timestamp: 1686575217516 466 | - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda 467 | sha256: 5a2c1eeef69342e88a98d1d95bff1603727ab1ff4ee0e421522acd8813439b84 468 | md5: 08aad7cbe9f5a6b460d0976076b6ae64 469 | depends: 470 | - libgcc >=13 471 | constrains: 472 | - zlib 1.3.1 *_2 473 | license: Zlib 474 | license_family: Other 475 | size: 66657 476 | timestamp: 1727963199518 477 | - conda: https://conda.anaconda.org/conda-forge/osx-64/libzlib-1.2.13-h8a1eda9_5.conda 478 | sha256: fc58ad7f47ffea10df1f2165369978fba0a1cc32594aad778f5eec725f334867 479 | md5: 4a3ad23f6e16f99c04e166767193d700 480 | constrains: 481 | - zlib 1.2.13 *_5 482 | license: Zlib 483 | license_family: Other 484 | size: 59404 485 | timestamp: 1686575566695 486 | - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.2.13-h53f4e23_5.conda 487 | sha256: ab1c8aefa2d54322a63aaeeefe9cf877411851738616c4068e0dccc66b9c758a 488 | md5: 1a47f5236db2e06a320ffa0392f81bd8 489 | constrains: 490 | - zlib 1.2.13 *_5 491 | license: Zlib 492 | license_family: Other 493 | size: 48102 494 | timestamp: 1686575426584 495 | - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.2.13-hcfcfb64_5.conda 496 | sha256: c161822ee8130b71e08b6d282b9919c1de2c5274b29921a867bca0f7d30cad26 497 | md5: 5fdb9c6a113b6b6cb5e517fd972d5f41 498 | depends: 499 | - ucrt >=10.0.20348.0 500 | - vc >=14.2,<15 501 | - vc14_runtime >=14.29.30139 502 | constrains: 503 | - zlib 1.2.13 *_5 504 | license: Zlib 505 | license_family: Other 506 | size: 55800 507 | timestamp: 1686575452215 508 | - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.4-hcb278e6_0.conda 509 | sha256: ccf61e61d58a8a7b2d66822d5568e2dc9387883dd9b2da61e1d787ece4c4979a 510 | md5: 681105bccc2a3f7f1a837d47d39c9179 511 | depends: 512 | - libgcc-ng >=12 513 | license: X11 AND BSD-3-Clause 514 | size: 880967 515 | timestamp: 1686076725450 516 | - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-ha32ae93_3.conda 517 | sha256: 91cfb655a68b0353b2833521dc919188db3d8a7f4c64bea2c6a7557b24747468 518 | md5: 182afabe009dc78d8b73100255ee6868 519 | depends: 520 | - libgcc >=13 521 | license: X11 AND BSD-3-Clause 522 | size: 926034 523 | timestamp: 1738196018799 524 | - conda: https://conda.anaconda.org/conda-forge/osx-64/ncurses-6.4-hf0c8a7f_0.conda 525 | sha256: 7841b1fce1ffb0bfb038f9687b92f04d64acab1f7cb96431972386ea98c7b2fd 526 | md5: c3dbae2411164d9b02c69090a9a91857 527 | license: X11 AND BSD-3-Clause 528 | size: 828118 529 | timestamp: 1686077056765 530 | - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.4-h463b476_2.conda 531 | sha256: f6890634f815e8408d08f36503353f8dfd7b055e4c3b9ea2ee52180255cf4b0a 532 | md5: 52b6f254a7b9663e854f44b6570ed982 533 | depends: 534 | - __osx >=10.9 535 | license: X11 AND BSD-3-Clause 536 | size: 794741 537 | timestamp: 1698751574074 538 | - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.1.2-hd590300_0.conda 539 | sha256: b113fbac327c90cdc29c2fac0f2a2e5cc0d1918b2a5ffa7abd49b695b9b3c6e9 540 | md5: e5ac5227582d6c83ccf247288c0eb095 541 | depends: 542 | - ca-certificates * 543 | - libgcc-ng >=12 544 | constrains: 545 | - pyopenssl >=22.1 546 | license: Apache-2.0 547 | license_family: Apache 548 | size: 2646546 549 | timestamp: 1690948722548 550 | - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.5.0-hd08dc88_0.conda 551 | sha256: 07854dcfcddc13b5614202c47c825f57e93e826ffee194ee435b3cf75cfe5853 552 | md5: 26af4dcecaf373c31ae91f403ae98259 553 | depends: 554 | - ca-certificates 555 | - libgcc >=13 556 | license: Apache-2.0 557 | license_family: Apache 558 | size: 3641486 559 | timestamp: 1744134183977 560 | - conda: https://conda.anaconda.org/conda-forge/osx-64/openssl-3.1.2-h8a1eda9_0.conda 561 | sha256: 5d28695e086e69150e0b674f11ad87df603870fb3256bd590e305b708fc1faf7 562 | md5: 85d5377436d19183c8ac5afbb8e713a1 563 | depends: 564 | - ca-certificates * 565 | constrains: 566 | - pyopenssl >=22.1 567 | license: Apache-2.0 568 | license_family: Apache 569 | size: 2326918 570 | timestamp: 1690949380796 571 | - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.2.1-h0d3ecfb_0.conda 572 | sha256: 13663fcd4abc8681b31ccbad39800fee2127cb6159b51a989ed48a816af36cf5 573 | md5: 421cc6e8715447b73c2c57dcf78cb9d2 574 | depends: 575 | - ca-certificates 576 | constrains: 577 | - pyopenssl >=22.1 578 | license: Apache-2.0 579 | license_family: Apache 580 | size: 2862719 581 | timestamp: 1706635779319 582 | - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.1.2-hcfcfb64_0.conda 583 | sha256: 676b78a786bf845cdca96fa830459f1ffa6603954a88ad86f476456d0a909f4e 584 | md5: 79b3f40f27cd80a265c276cea6714507 585 | depends: 586 | - ucrt >=10.0.20348.0 587 | - ca-certificates * 588 | - vc >=14.2,<15 589 | - vc14_runtime >=14.29.30139 590 | constrains: 591 | - pyopenssl >=22.1 592 | license: Apache-2.0 593 | license_family: Apache 594 | size: 7408520 595 | timestamp: 1690950343576 596 | - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.11.5-hab00c5b_0_cpython.conda 597 | sha256: 920fe89dbc4aaf910e7a37cb4d865eaabe7ff1e5e6c3888d56fe7742ab181448 598 | md5: f0288cb82594b1cbc71111d1cd3c5422 599 | depends: 600 | - openssl >=3.1.2,<4.0a0 601 | - readline >=8.2,<9.0a0 602 | - libzlib >=1.2.13,<1.3.0a0 603 | - libnsl >=2.0.0,<2.1.0a0 604 | - libsqlite >=3.43.0,<4.0a0 605 | - libexpat >=2.5.0,<3.0a0 606 | - libgcc-ng >=12 607 | - libuuid >=2.38.1,<3.0a0 608 | - xz >=5.2.6,<6.0a0 609 | - ncurses >=6.4,<7.0a0 610 | - ld_impl_linux-64 >=2.36.1 611 | - tzdata * 612 | - libffi >=3.4,<4.0a0 613 | - tk >=8.6.12,<8.7.0a0 614 | - bzip2 >=1.0.8,<2.0a0 615 | constrains: 616 | - python_abi 3.11.* *_cp311 617 | license: Python-2.0 618 | size: 30813149 619 | timestamp: 1693108705832 620 | - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.11.12-h1683364_0_cpython.conda 621 | sha256: bcca2ab3ca625a643f5b15a31d75d05399b49800cfb2e53fad69521ececef759 622 | md5: 0ad49c28cc086b3618d96fca13e6711b 623 | depends: 624 | - bzip2 >=1.0.8,<2.0a0 625 | - ld_impl_linux-aarch64 >=2.36.1 626 | - libexpat >=2.7.0,<3.0a0 627 | - libffi >=3.4.6,<3.5.0a0 628 | - libgcc >=13 629 | - liblzma >=5.8.1,<6.0a0 630 | - libnsl >=2.0.1,<2.1.0a0 631 | - libsqlite >=3.49.1,<4.0a0 632 | - libuuid >=2.38.1,<3.0a0 633 | - libxcrypt >=4.4.36 634 | - libzlib >=1.3.1,<2.0a0 635 | - ncurses >=6.5,<7.0a0 636 | - openssl >=3.5.0,<4.0a0 637 | - readline >=8.2,<9.0a0 638 | - tk >=8.6.13,<8.7.0a0 639 | - tzdata 640 | constrains: 641 | - python_abi 3.11.* *_cp311 642 | license: Python-2.0 643 | size: 15353712 644 | timestamp: 1744323091686 645 | - conda: https://conda.anaconda.org/conda-forge/osx-64/python-3.11.5-h30d4d87_0_cpython.conda 646 | sha256: b836e2a96526fca7f4686fc5297fecd05f90992902eb9612f50da577932cf48c 647 | md5: ef2b263b5b02d2acf00908bb07c14b12 648 | depends: 649 | - tzdata * 650 | - openssl >=3.1.2,<4.0a0 651 | - readline >=8.2,<9.0a0 652 | - libffi >=3.4,<4.0a0 653 | - libsqlite >=3.43.0,<4.0a0 654 | - libzlib >=1.2.13,<1.3.0a0 655 | - libexpat >=2.5.0,<3.0a0 656 | - tk >=8.6.12,<8.7.0a0 657 | - bzip2 >=1.0.8,<2.0a0 658 | - xz >=5.2.6,<6.0a0 659 | - ncurses >=6.4,<7.0a0 660 | constrains: 661 | - python_abi 3.11.* *_cp311 662 | license: Python-2.0 663 | size: 15475266 664 | timestamp: 1693108451698 665 | - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.11.7-hdf0ec26_1_cpython.conda 666 | build_number: 1 667 | sha256: 92ac26592b53ddb646237c0dd83fd073d2f181dd1553e7ac8428b4475ff5560b 668 | md5: f0f1fcde592e067a5ca2187d6f232bd3 669 | depends: 670 | - bzip2 >=1.0.8,<2.0a0 671 | - libexpat >=2.5.0,<3.0a0 672 | - libffi >=3.4,<4.0a0 673 | - libsqlite >=3.44.2,<4.0a0 674 | - libzlib >=1.2.13,<1.3.0a0 675 | - ncurses >=6.4,<7.0a0 676 | - openssl >=3.2.0,<4.0a0 677 | - readline >=8.2,<9.0a0 678 | - tk >=8.6.13,<8.7.0a0 679 | - tzdata 680 | - xz >=5.2.6,<6.0a0 681 | constrains: 682 | - python_abi 3.11.* *_cp311 683 | license: Python-2.0 684 | size: 14567667 685 | timestamp: 1703342625860 686 | - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.11.5-h2628c8c_0_cpython.conda 687 | sha256: 0a44437eaf81055b91c1ae27a4be58609c31b3e7b94bd4d3e10204795c51bf04 688 | md5: 28e01783b6a42f295fe07c7790aa75a1 689 | depends: 690 | - tzdata * 691 | - openssl >=3.1.2,<4.0a0 692 | - libffi >=3.4,<4.0a0 693 | - libsqlite >=3.43.0,<4.0a0 694 | - libzlib >=1.2.13,<1.3.0a0 695 | - libexpat >=2.5.0,<3.0a0 696 | - tk >=8.6.12,<8.7.0a0 697 | - bzip2 >=1.0.8,<2.0a0 698 | - ucrt >=10.0.20348.0 699 | - vc >=14.2,<15 700 | - vc14_runtime >=14.29.30139 701 | - xz >=5.2.6,<6.0a0 702 | constrains: 703 | - python_abi 3.11.* *_cp311 704 | license: Python-2.0 705 | size: 18153848 706 | timestamp: 1693106905439 707 | - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda 708 | sha256: 5435cf39d039387fbdc977b0a762357ea909a7694d9528ab40f005e9208744d7 709 | md5: 47d31b792659ce70f470b5c82fdfb7a4 710 | depends: 711 | - ncurses >=6.3,<7.0a0 712 | - libgcc-ng >=12 713 | license: GPL-3.0-only 714 | license_family: GPL 715 | size: 281456 716 | timestamp: 1679532220005 717 | - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.2-h8382b9d_2.conda 718 | sha256: 54bed3a3041befaa9f5acde4a37b1a02f44705b7796689574bcf9d7beaad2959 719 | md5: c0f08fc2737967edde1a272d4bf41ed9 720 | depends: 721 | - libgcc >=13 722 | - ncurses >=6.5,<7.0a0 723 | license: GPL-3.0-only 724 | license_family: GPL 725 | size: 291806 726 | timestamp: 1740380591358 727 | - conda: https://conda.anaconda.org/conda-forge/osx-64/readline-8.2-h9e318b2_1.conda 728 | sha256: 41e7d30a097d9b060037f0c6a2b1d4c4ae7e942c06c943d23f9d481548478568 729 | md5: f17f77f2acf4d344734bda76829ce14e 730 | depends: 731 | - ncurses >=6.3,<7.0a0 732 | license: GPL-3.0-only 733 | license_family: GPL 734 | size: 255870 735 | timestamp: 1679532707590 736 | - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda 737 | sha256: a1dfa679ac3f6007362386576a704ad2d0d7a02e98f5d0b115f207a2da63e884 738 | md5: 8cbb776a2f641b943d413b3e19df71f4 739 | depends: 740 | - ncurses >=6.3,<7.0a0 741 | license: GPL-3.0-only 742 | license_family: GPL 743 | size: 250351 744 | timestamp: 1679532511311 745 | - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.12-h27826a3_0.tar.bz2 746 | sha256: 032fd769aad9d4cad40ba261ab222675acb7ec951a8832455fce18ef33fa8df0 747 | md5: 5b8c42eb62e9fc961af70bdd6a26e168 748 | depends: 749 | - libzlib >=1.2.11,<1.3.0a0 750 | - libgcc-ng >=9.4.0 751 | license: TCL 752 | license_family: BSD 753 | size: 3456292 754 | timestamp: 1645033615058 755 | - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-h194ca79_0.conda 756 | sha256: 7fa27cc512d3a783f38bd16bbbffc008807372499d5b65d089a8e43bde9db267 757 | md5: f75105e0585851f818e0009dd1dde4dc 758 | depends: 759 | - libgcc-ng >=12 760 | - libzlib >=1.2.13,<2.0.0a0 761 | license: TCL 762 | license_family: BSD 763 | size: 3351802 764 | timestamp: 1695506242997 765 | - conda: https://conda.anaconda.org/conda-forge/osx-64/tk-8.6.12-h5dbffcc_0.tar.bz2 766 | sha256: 331aa1137a264fd9cc905f04f09a161c801fe504b93da08b4e6697bd7c9ae6a6 767 | md5: 8e9480d9c47061db2ed1b4ecce519a7f 768 | depends: 769 | - libzlib >=1.2.11,<1.3.0a0 770 | license: TCL 771 | license_family: BSD 772 | size: 3531016 773 | timestamp: 1645032719565 774 | - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda 775 | sha256: 72457ad031b4c048e5891f3f6cb27a53cb479db68a52d965f796910e71a403a8 776 | md5: b50a57ba89c32b62428b71a875291c9b 777 | depends: 778 | - libzlib >=1.2.13,<1.3.0a0 779 | license: TCL 780 | license_family: BSD 781 | size: 3145523 782 | timestamp: 1699202432999 783 | - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.12-h8ffe710_0.tar.bz2 784 | sha256: 087795090a99a1d397ef1ed80b4a01fabfb0122efb141562c168e3c0a76edba6 785 | md5: c69a5047cc9291ae40afd4a1ad6f0c0f 786 | depends: 787 | - vc >=14.1,<15 788 | - vs2015_runtime >=14.16.27033 789 | license: TCL 790 | license_family: BSD 791 | size: 3681762 792 | timestamp: 1645033031535 793 | - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2023c-h71feb2d_0.conda 794 | subdir: linux-64 795 | sha256: 0449138224adfa125b220154408419ec37c06b0b49f63c5954724325903ecf55 796 | md5: 939e3e74d8be4dac89ce83b20de2492a 797 | license: LicenseRef-Public-Domain 798 | size: 117580 799 | timestamp: 1680041306008 800 | - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2023c-h71feb2d_0.conda 801 | subdir: osx-64 802 | sha256: 0449138224adfa125b220154408419ec37c06b0b49f63c5954724325903ecf55 803 | md5: 939e3e74d8be4dac89ce83b20de2492a 804 | license: LicenseRef-Public-Domain 805 | size: 117580 806 | timestamp: 1680041306008 807 | - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2023c-h71feb2d_0.conda 808 | subdir: win-64 809 | sha256: 0449138224adfa125b220154408419ec37c06b0b49f63c5954724325903ecf55 810 | md5: 939e3e74d8be4dac89ce83b20de2492a 811 | license: LicenseRef-Public-Domain 812 | size: 117580 813 | timestamp: 1680041306008 814 | - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2023d-h0c530f3_0.conda 815 | subdir: osx-arm64 816 | sha256: 04f2ab3e36f2015841551415bf16bf62933bd94b7085d4be5493b388e95a9c3d 817 | md5: 8dee24b8be2d9ff81e7bd4d7d97ff1b0 818 | license: LicenseRef-Public-Domain 819 | size: 119639 820 | timestamp: 1703250910370 821 | - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda 822 | sha256: 5aaa366385d716557e365f0a4e9c3fca43ba196872abbbe3d56bb610d131e192 823 | md5: 4222072737ccff51314b5ece9c7d6f5a 824 | license: LicenseRef-Public-Domain 825 | size: 122968 826 | timestamp: 1742727099393 827 | - conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_0.tar.bz2 828 | sha256: f29cdaf8712008f6b419b8b1a403923b00ab2504bfe0fb2ba8eb60e72d4f14c6 829 | md5: 72608f6cd3e5898229c3ea16deb1ac43 830 | constrains: 831 | - vs2015_runtime >=14.29.30037 832 | license: LicenseRef-Proprietary 833 | license_family: PROPRIETARY 834 | size: 1283972 835 | timestamp: 1666630199266 836 | - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-h64f974e_17.conda 837 | sha256: 86ae94bf680980776aa761c2b0909a0ddbe1f817e7eeb8b16a1730f10f8891b6 838 | md5: 67ff6791f235bb606659bf2a5c169191 839 | depends: 840 | - vc14_runtime >=14.36.32532 841 | track_features: 842 | - vc14 843 | license: BSD-3-Clause 844 | license_family: BSD 845 | size: 17176 846 | timestamp: 1688020629925 847 | - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.36.32532-hfdfe4a8_17.conda 848 | sha256: e76986c555647347a0185e646ef65625dabed60da255f6b30367df8bd6dc6cd8 849 | md5: 91c1ecaf3996889532fc0456178b1058 850 | depends: 851 | - ucrt >=10.0.20348.0 852 | constrains: 853 | - vs2015_runtime 14.36.32532.* *_17 854 | license: LicenseRef-ProprietaryMicrosoft 855 | license_family: Proprietary 856 | size: 740599 857 | timestamp: 1688020615962 858 | - conda: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.36.32532-h05e6639_17.conda 859 | sha256: 5ecbd731dc7f13762d67be0eadc47eb7f14713005e430d9b5fc680e965ac0f81 860 | md5: 4618046c39f7c81861e53ded842e738a 861 | depends: 862 | - vc14_runtime >=14.36.32532 863 | license: BSD-3-Clause 864 | license_family: BSD 865 | size: 17207 866 | timestamp: 1688020635322 867 | - conda: https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2 868 | sha256: 03a6d28ded42af8a347345f82f3eebdd6807a08526d47899a42d62d319609162 869 | md5: 2161070d867d1b1204ea749c8eec4ef0 870 | depends: 871 | - libgcc-ng >=12 872 | license: LGPL-2.1 and GPL-2.0 873 | size: 418368 874 | timestamp: 1660346797927 875 | - conda: https://conda.anaconda.org/conda-forge/osx-64/xz-5.2.6-h775f41a_0.tar.bz2 876 | sha256: eb09823f34cc2dd663c0ec4ab13f246f45dcd52e5b8c47b9864361de5204a1c8 877 | md5: a72f9d4ea13d55d745ff1ed594747f10 878 | license: LGPL-2.1 and GPL-2.0 879 | size: 238119 880 | timestamp: 1660346964847 881 | - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xz-5.2.6-h57fd34a_0.tar.bz2 882 | sha256: 59d78af0c3e071021cfe82dc40134c19dab8cdf804324b62940f5c8cd71803ec 883 | md5: 39c6b54e94014701dd157f4f576ed211 884 | license: LGPL-2.1 and GPL-2.0 885 | size: 235693 886 | timestamp: 1660346961024 887 | - conda: https://conda.anaconda.org/conda-forge/win-64/xz-5.2.6-h8d14728_0.tar.bz2 888 | sha256: 54d9778f75a02723784dc63aff4126ff6e6749ba21d11a6d03c1f4775f269fe0 889 | md5: 515d77642eaa3639413c6b1bc3f94219 890 | depends: 891 | - vc >=14.1,<15 892 | - vs2015_runtime >=14.16.27033 893 | license: LGPL-2.1 and GPL-2.0 894 | size: 217804 895 | timestamp: 1660346976440 896 | -------------------------------------------------------------------------------- /test/old-pixi-lockfiles/pixi.lock: -------------------------------------------------------------------------------- 1 | metadata: 2 | content_hash: 3 | linux-64: e90c2ee71ad70fc0a1c8302029533a7d1498f2bffcd0eaa8d2934700e775dc1d 4 | osx-arm64: e90c2ee71ad70fc0a1c8302029533a7d1498f2bffcd0eaa8d2934700e775dc1d 5 | win-64: e90c2ee71ad70fc0a1c8302029533a7d1498f2bffcd0eaa8d2934700e775dc1d 6 | osx-64: e90c2ee71ad70fc0a1c8302029533a7d1498f2bffcd0eaa8d2934700e775dc1d 7 | channels: 8 | - url: https://conda.anaconda.org/conda-forge/ 9 | used_env_vars: [] 10 | platforms: 11 | - linux-64 12 | - osx-64 13 | - osx-arm64 14 | - win-64 15 | sources: [] 16 | time_metadata: null 17 | git_metadata: null 18 | inputs_metadata: null 19 | custom_metadata: null 20 | package: 21 | - name: python 22 | version: 3.11.7 23 | manager: conda 24 | platform: linux-64 25 | dependencies: 26 | openssl: '>=3.2.0,<4.0a0' 27 | readline: '>=8.2,<9.0a0' 28 | libzlib: '>=1.2.13,<1.3.0a0' 29 | libnsl: '>=2.0.1,<2.1.0a0' 30 | libsqlite: '>=3.44.2,<4.0a0' 31 | libexpat: '>=2.5.0,<3.0a0' 32 | libgcc-ng: '>=12' 33 | libuuid: '>=2.38.1,<3.0a0' 34 | xz: '>=5.2.6,<6.0a0' 35 | ncurses: '>=6.4,<7.0a0' 36 | ld_impl_linux-64: '>=2.36.1' 37 | tzdata: '*' 38 | libffi: '>=3.4,<4.0a0' 39 | tk: '>=8.6.13,<8.7.0a0' 40 | bzip2: '>=1.0.8,<2.0a0' 41 | libxcrypt: '>=4.4.36' 42 | url: https://conda.anaconda.org/conda-forge/linux-64/python-3.11.7-hab00c5b_1_cpython.conda 43 | hash: 44 | md5: 27cf681282c11dba7b0b1fd266e8f289 45 | sha256: 8266801d3f21ae3018b997dcd05503b034016a3335aa3ab5b8c3f482af1e6580 46 | optional: false 47 | category: main 48 | build: hab00c5b_1_cpython 49 | arch: x86_64 50 | subdir: linux-64 51 | build_number: 1 52 | constrains: 53 | - python_abi 3.11.* *_cp311 54 | license: Python-2.0 55 | size: 30830615 56 | timestamp: 1703344491543 57 | - name: xz 58 | version: 5.2.6 59 | manager: conda 60 | platform: linux-64 61 | dependencies: 62 | libgcc-ng: '>=12' 63 | url: https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2 64 | hash: 65 | md5: 2161070d867d1b1204ea749c8eec4ef0 66 | sha256: 03a6d28ded42af8a347345f82f3eebdd6807a08526d47899a42d62d319609162 67 | optional: false 68 | category: main 69 | build: h166bdaf_0 70 | arch: x86_64 71 | subdir: linux-64 72 | build_number: 0 73 | license: LGPL-2.1 and GPL-2.0 74 | size: 418368 75 | timestamp: 1660346797927 76 | - name: readline 77 | version: '8.2' 78 | manager: conda 79 | platform: linux-64 80 | dependencies: 81 | ncurses: '>=6.3,<7.0a0' 82 | libgcc-ng: '>=12' 83 | url: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda 84 | hash: 85 | md5: 47d31b792659ce70f470b5c82fdfb7a4 86 | sha256: 5435cf39d039387fbdc977b0a762357ea909a7694d9528ab40f005e9208744d7 87 | optional: false 88 | category: main 89 | build: h8228510_1 90 | arch: x86_64 91 | subdir: linux-64 92 | build_number: 1 93 | license: GPL-3.0-only 94 | license_family: GPL 95 | size: 281456 96 | timestamp: 1679532220005 97 | - name: libuuid 98 | version: 2.38.1 99 | manager: conda 100 | platform: linux-64 101 | dependencies: 102 | libgcc-ng: '>=12' 103 | url: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda 104 | hash: 105 | md5: 40b61aab5c7ba9ff276c41cfffe6b80b 106 | sha256: 787eb542f055a2b3de553614b25f09eefb0a0931b0c87dbcce6efdfd92f04f18 107 | optional: false 108 | category: main 109 | build: h0b41bf4_0 110 | arch: x86_64 111 | subdir: linux-64 112 | build_number: 0 113 | license: BSD-3-Clause 114 | license_family: BSD 115 | size: 33601 116 | timestamp: 1680112270483 117 | - name: libsqlite 118 | version: 3.44.2 119 | manager: conda 120 | platform: linux-64 121 | dependencies: 122 | libzlib: '>=1.2.13,<1.3.0a0' 123 | libgcc-ng: '>=12' 124 | url: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.44.2-h2797004_0.conda 125 | hash: 126 | md5: 3b6a9f225c3dbe0d24f4fedd4625c5bf 127 | sha256: ee2c4d724a3ed60d5b458864d66122fb84c6ce1df62f735f90d8db17b66cd88a 128 | optional: false 129 | category: main 130 | build: h2797004_0 131 | arch: x86_64 132 | subdir: linux-64 133 | build_number: 0 134 | license: Unlicense 135 | size: 845830 136 | timestamp: 1700863204572 137 | - name: libnsl 138 | version: 2.0.1 139 | manager: conda 140 | platform: linux-64 141 | dependencies: 142 | libgcc-ng: '>=12' 143 | url: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda 144 | hash: 145 | md5: 30fd6e37fe21f86f4bd26d6ee73eeec7 146 | sha256: 26d77a3bb4dceeedc2a41bd688564fe71bf2d149fdcf117049970bc02ff1add6 147 | optional: false 148 | category: main 149 | build: hd590300_0 150 | arch: x86_64 151 | subdir: linux-64 152 | build_number: 0 153 | license: LGPL-2.1-only 154 | license_family: GPL 155 | size: 33408 156 | timestamp: 1697359010159 157 | - name: libexpat 158 | version: 2.5.0 159 | manager: conda 160 | platform: linux-64 161 | dependencies: 162 | libgcc-ng: '>=12' 163 | url: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.5.0-hcb278e6_1.conda 164 | hash: 165 | md5: 6305a3dd2752c76335295da4e581f2fd 166 | sha256: 74c98a563777ae2ad71f1f74d458a8ab043cee4a513467c159ccf159d0e461f3 167 | optional: false 168 | category: main 169 | build: hcb278e6_1 170 | arch: x86_64 171 | subdir: linux-64 172 | build_number: 1 173 | constrains: 174 | - expat 2.5.0.* 175 | license: MIT 176 | license_family: MIT 177 | size: 77980 178 | timestamp: 1680190528313 179 | - name: libgcc-ng 180 | version: 13.2.0 181 | manager: conda 182 | platform: linux-64 183 | dependencies: 184 | _libgcc_mutex: ==0.1 conda_forge 185 | _openmp_mutex: '>=4.5' 186 | url: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-13.2.0-h807b86a_4.conda 187 | hash: 188 | md5: e0dee4121cc9d961b3740e3759b02d13 189 | sha256: 827c0326a88a042a4b50399c60971a882663c769afcbdfcf64850a9d3f48aaff 190 | optional: false 191 | category: main 192 | build: h807b86a_4 193 | arch: x86_64 194 | subdir: linux-64 195 | build_number: 4 196 | constrains: 197 | - libgomp 13.2.0 h807b86a_4 198 | license: GPL-3.0-only WITH GCC-exception-3.1 199 | license_family: GPL 200 | size: 773838 201 | timestamp: 1706339399229 202 | - name: _libgcc_mutex 203 | version: '0.1' 204 | manager: conda 205 | platform: linux-64 206 | dependencies: {} 207 | url: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 208 | hash: 209 | md5: d7c89558ba9fa0495403155b64376d81 210 | sha256: fe51de6107f9edc7aa4f786a70f4a883943bc9d39b3bb7307c04c41410990726 211 | optional: false 212 | category: main 213 | build: conda_forge 214 | arch: x86_64 215 | subdir: linux-64 216 | build_number: 0 217 | license: None 218 | size: 2562 219 | timestamp: 1578324546067 220 | - name: ncurses 221 | version: '6.4' 222 | manager: conda 223 | platform: linux-64 224 | dependencies: 225 | libgcc-ng: '>=12' 226 | url: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.4-h59595ed_2.conda 227 | hash: 228 | md5: 7dbaa197d7ba6032caf7ae7f32c1efa0 229 | sha256: 91cc03f14caf96243cead96c76fe91ab5925a695d892e83285461fb927dece5e 230 | optional: false 231 | category: main 232 | build: h59595ed_2 233 | arch: x86_64 234 | subdir: linux-64 235 | build_number: 2 236 | license: X11 AND BSD-3-Clause 237 | size: 884434 238 | timestamp: 1698751260967 239 | - name: libzlib 240 | version: 1.2.13 241 | manager: conda 242 | platform: linux-64 243 | dependencies: 244 | libgcc-ng: '>=12' 245 | url: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.2.13-hd590300_5.conda 246 | hash: 247 | md5: f36c115f1ee199da648e0597ec2047ad 248 | sha256: 370c7c5893b737596fd6ca0d9190c9715d89d888b8c88537ae1ef168c25e82e4 249 | optional: false 250 | category: main 251 | build: hd590300_5 252 | arch: x86_64 253 | subdir: linux-64 254 | build_number: 5 255 | constrains: 256 | - zlib 1.2.13 *_5 257 | license: Zlib 258 | license_family: Other 259 | size: 61588 260 | timestamp: 1686575217516 261 | - name: _openmp_mutex 262 | version: '4.5' 263 | manager: conda 264 | platform: linux-64 265 | dependencies: 266 | libgomp: '>=7.5.0' 267 | _libgcc_mutex: ==0.1 conda_forge 268 | url: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 269 | hash: 270 | md5: 73aaf86a425cc6e73fcf236a5a46396d 271 | sha256: fbe2c5e56a653bebb982eda4876a9178aedfc2b545f25d0ce9c4c0b508253d22 272 | optional: false 273 | category: main 274 | build: 2_gnu 275 | arch: x86_64 276 | subdir: linux-64 277 | build_number: 16 278 | constrains: 279 | - openmp_impl 9999 280 | license: BSD-3-Clause 281 | license_family: BSD 282 | size: 23621 283 | timestamp: 1650670423406 284 | - name: libgomp 285 | version: 13.2.0 286 | manager: conda 287 | platform: linux-64 288 | dependencies: 289 | _libgcc_mutex: ==0.1 conda_forge 290 | url: https://conda.anaconda.org/conda-forge/linux-64/libgomp-13.2.0-h807b86a_4.conda 291 | hash: 292 | md5: cd6ae9659d3cd53207efa8e0ed3ab15d 293 | sha256: f0c29623b471dfe97f7d77addad6bcbfcd6407e2e0041a5f474c5b3891ef04d5 294 | optional: false 295 | category: main 296 | build: h807b86a_4 297 | arch: x86_64 298 | subdir: linux-64 299 | build_number: 4 300 | license: GPL-3.0-only WITH GCC-exception-3.1 301 | license_family: GPL 302 | size: 422115 303 | timestamp: 1706339311614 304 | - name: bzip2 305 | version: 1.0.8 306 | manager: conda 307 | platform: linux-64 308 | dependencies: 309 | libgcc-ng: '>=12' 310 | url: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hd590300_5.conda 311 | hash: 312 | md5: 69b8b6202a07720f448be700e300ccf4 313 | sha256: 242c0c324507ee172c0e0dd2045814e746bb303d1eb78870d182ceb0abc726a8 314 | optional: false 315 | category: main 316 | build: hd590300_5 317 | arch: x86_64 318 | subdir: linux-64 319 | build_number: 5 320 | license: bzip2-1.0.6 321 | license_family: BSD 322 | size: 254228 323 | timestamp: 1699279927352 324 | - name: ld_impl_linux-64 325 | version: '2.40' 326 | manager: conda 327 | platform: linux-64 328 | dependencies: {} 329 | url: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.40-h41732ed_0.conda 330 | hash: 331 | md5: 7aca3059a1729aa76c597603f10b0dd3 332 | sha256: f6cc89d887555912d6c61b295d398cff9ec982a3417d38025c45d5dd9b9e79cd 333 | optional: false 334 | category: main 335 | build: h41732ed_0 336 | arch: x86_64 337 | subdir: linux-64 338 | build_number: 0 339 | constrains: 340 | - binutils_impl_linux-64 2.40 341 | license: GPL-3.0-only 342 | license_family: GPL 343 | size: 704696 344 | timestamp: 1674833944779 345 | - name: libffi 346 | version: 3.4.2 347 | manager: conda 348 | platform: linux-64 349 | dependencies: 350 | libgcc-ng: '>=9.4.0' 351 | url: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2 352 | hash: 353 | md5: d645c6d2ac96843a2bfaccd2d62b3ac3 354 | sha256: ab6e9856c21709b7b517e940ae7028ae0737546122f83c2aa5d692860c3b149e 355 | optional: false 356 | category: main 357 | build: h7f98852_5 358 | arch: x86_64 359 | subdir: linux-64 360 | build_number: 5 361 | license: MIT 362 | license_family: MIT 363 | size: 58292 364 | timestamp: 1636488182923 365 | - name: libxcrypt 366 | version: 4.4.36 367 | manager: conda 368 | platform: linux-64 369 | dependencies: 370 | libgcc-ng: '>=12' 371 | url: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda 372 | hash: 373 | md5: 5aa797f8787fe7a17d1b0821485b5adc 374 | sha256: 6ae68e0b86423ef188196fff6207ed0c8195dd84273cb5623b85aa08033a410c 375 | optional: false 376 | category: main 377 | build: hd590300_1 378 | arch: x86_64 379 | subdir: linux-64 380 | build_number: 1 381 | license: LGPL-2.1-or-later 382 | size: 100393 383 | timestamp: 1702724383534 384 | - name: openssl 385 | version: 3.2.1 386 | manager: conda 387 | platform: linux-64 388 | dependencies: 389 | ca-certificates: '*' 390 | libgcc-ng: '>=12' 391 | url: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.2.1-hd590300_0.conda 392 | hash: 393 | md5: 51a753e64a3027bd7e23a189b1f6e91e 394 | sha256: c02c12bdb898daacf7eb3d09859f93ea8f285fd1a6132ff6ff0493ab52c7fe57 395 | optional: false 396 | category: main 397 | build: hd590300_0 398 | arch: x86_64 399 | subdir: linux-64 400 | build_number: 0 401 | constrains: 402 | - pyopenssl >=22.1 403 | license: Apache-2.0 404 | license_family: Apache 405 | size: 2863069 406 | timestamp: 1706635653339 407 | - name: ca-certificates 408 | version: 2023.11.17 409 | manager: conda 410 | platform: linux-64 411 | dependencies: {} 412 | url: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2023.11.17-hbcca054_0.conda 413 | hash: 414 | md5: 01ffc8d36f9eba0ce0b3c1955fa780ee 415 | sha256: fb4b9f4b7d885002db0b93e22f44b5b03791ef3d4efdc9d0662185a0faafd6b6 416 | optional: false 417 | category: main 418 | build: hbcca054_0 419 | arch: x86_64 420 | subdir: linux-64 421 | build_number: 0 422 | license: ISC 423 | size: 154117 424 | timestamp: 1700280881924 425 | - name: tk 426 | version: 8.6.13 427 | manager: conda 428 | platform: linux-64 429 | dependencies: 430 | libzlib: '>=1.2.13,<1.3.0a0' 431 | libgcc-ng: '>=12' 432 | url: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda 433 | hash: 434 | md5: d453b98d9c83e71da0741bb0ff4d76bc 435 | sha256: e0569c9caa68bf476bead1bed3d79650bb080b532c64a4af7d8ca286c08dea4e 436 | optional: false 437 | category: main 438 | build: noxft_h4845f30_101 439 | arch: x86_64 440 | subdir: linux-64 441 | build_number: 101 442 | license: TCL 443 | license_family: BSD 444 | size: 3318875 445 | timestamp: 1699202167581 446 | - name: tzdata 447 | version: 2023d 448 | manager: conda 449 | platform: linux-64 450 | dependencies: {} 451 | url: https://conda.anaconda.org/conda-forge/noarch/tzdata-2023d-h0c530f3_0.conda 452 | hash: 453 | md5: 8dee24b8be2d9ff81e7bd4d7d97ff1b0 454 | sha256: 04f2ab3e36f2015841551415bf16bf62933bd94b7085d4be5493b388e95a9c3d 455 | optional: false 456 | category: main 457 | build: h0c530f3_0 458 | arch: x86_64 459 | subdir: linux-64 460 | build_number: 0 461 | license: LicenseRef-Public-Domain 462 | noarch: generic 463 | size: 119639 464 | timestamp: 1703250910370 465 | - name: python 466 | version: 3.11.7 467 | manager: conda 468 | platform: osx-arm64 469 | dependencies: 470 | tzdata: '*' 471 | openssl: '>=3.2.0,<4.0a0' 472 | readline: '>=8.2,<9.0a0' 473 | libffi: '>=3.4,<4.0a0' 474 | libsqlite: '>=3.44.2,<4.0a0' 475 | libzlib: '>=1.2.13,<1.3.0a0' 476 | libexpat: '>=2.5.0,<3.0a0' 477 | tk: '>=8.6.13,<8.7.0a0' 478 | bzip2: '>=1.0.8,<2.0a0' 479 | xz: '>=5.2.6,<6.0a0' 480 | ncurses: '>=6.4,<7.0a0' 481 | url: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.11.7-hdf0ec26_1_cpython.conda 482 | hash: 483 | md5: f0f1fcde592e067a5ca2187d6f232bd3 484 | sha256: 92ac26592b53ddb646237c0dd83fd073d2f181dd1553e7ac8428b4475ff5560b 485 | optional: false 486 | category: main 487 | build: hdf0ec26_1_cpython 488 | arch: aarch64 489 | subdir: osx-arm64 490 | build_number: 1 491 | constrains: 492 | - python_abi 3.11.* *_cp311 493 | license: Python-2.0 494 | size: 14567667 495 | timestamp: 1703342625860 496 | - name: xz 497 | version: 5.2.6 498 | manager: conda 499 | platform: osx-arm64 500 | dependencies: {} 501 | url: https://conda.anaconda.org/conda-forge/osx-arm64/xz-5.2.6-h57fd34a_0.tar.bz2 502 | hash: 503 | md5: 39c6b54e94014701dd157f4f576ed211 504 | sha256: 59d78af0c3e071021cfe82dc40134c19dab8cdf804324b62940f5c8cd71803ec 505 | optional: false 506 | category: main 507 | build: h57fd34a_0 508 | arch: aarch64 509 | subdir: osx-arm64 510 | build_number: 0 511 | license: LGPL-2.1 and GPL-2.0 512 | size: 235693 513 | timestamp: 1660346961024 514 | - name: readline 515 | version: '8.2' 516 | manager: conda 517 | platform: osx-arm64 518 | dependencies: 519 | ncurses: '>=6.3,<7.0a0' 520 | url: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda 521 | hash: 522 | md5: 8cbb776a2f641b943d413b3e19df71f4 523 | sha256: a1dfa679ac3f6007362386576a704ad2d0d7a02e98f5d0b115f207a2da63e884 524 | optional: false 525 | category: main 526 | build: h92ec313_1 527 | arch: aarch64 528 | subdir: osx-arm64 529 | build_number: 1 530 | license: GPL-3.0-only 531 | license_family: GPL 532 | size: 250351 533 | timestamp: 1679532511311 534 | - name: libsqlite 535 | version: 3.44.2 536 | manager: conda 537 | platform: osx-arm64 538 | dependencies: 539 | libzlib: '>=1.2.13,<1.3.0a0' 540 | url: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.44.2-h091b4b1_0.conda 541 | hash: 542 | md5: d7e1af696cfadec251a0abdd7b79ed77 543 | sha256: f0dc2fe69eddb4bab72ff6bb0da51d689294f466ee1b01e80ced1e7878a21aa5 544 | optional: false 545 | category: main 546 | build: h091b4b1_0 547 | arch: aarch64 548 | subdir: osx-arm64 549 | build_number: 0 550 | license: Unlicense 551 | size: 815254 552 | timestamp: 1700863572318 553 | - name: libexpat 554 | version: 2.5.0 555 | manager: conda 556 | platform: osx-arm64 557 | dependencies: {} 558 | url: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.5.0-hb7217d7_1.conda 559 | hash: 560 | md5: 5a097ad3d17e42c148c9566280481317 561 | sha256: 7d143a9c991579ad4207f84c632650a571c66329090daa32b3c87cf7311c3381 562 | optional: false 563 | category: main 564 | build: hb7217d7_1 565 | arch: aarch64 566 | subdir: osx-arm64 567 | build_number: 1 568 | constrains: 569 | - expat 2.5.0.* 570 | license: MIT 571 | license_family: MIT 572 | size: 63442 573 | timestamp: 1680190916539 574 | - name: ncurses 575 | version: '6.4' 576 | manager: conda 577 | platform: osx-arm64 578 | dependencies: 579 | __osx: '>=10.9' 580 | url: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.4-h463b476_2.conda 581 | hash: 582 | md5: 52b6f254a7b9663e854f44b6570ed982 583 | sha256: f6890634f815e8408d08f36503353f8dfd7b055e4c3b9ea2ee52180255cf4b0a 584 | optional: false 585 | category: main 586 | build: h463b476_2 587 | arch: aarch64 588 | subdir: osx-arm64 589 | build_number: 2 590 | license: X11 AND BSD-3-Clause 591 | size: 794741 592 | timestamp: 1698751574074 593 | - name: libzlib 594 | version: 1.2.13 595 | manager: conda 596 | platform: osx-arm64 597 | dependencies: {} 598 | url: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.2.13-h53f4e23_5.conda 599 | hash: 600 | md5: 1a47f5236db2e06a320ffa0392f81bd8 601 | sha256: ab1c8aefa2d54322a63aaeeefe9cf877411851738616c4068e0dccc66b9c758a 602 | optional: false 603 | category: main 604 | build: h53f4e23_5 605 | arch: aarch64 606 | subdir: osx-arm64 607 | build_number: 5 608 | constrains: 609 | - zlib 1.2.13 *_5 610 | license: Zlib 611 | license_family: Other 612 | size: 48102 613 | timestamp: 1686575426584 614 | - name: bzip2 615 | version: 1.0.8 616 | manager: conda 617 | platform: osx-arm64 618 | dependencies: {} 619 | url: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h93a5062_5.conda 620 | hash: 621 | md5: 1bbc659ca658bfd49a481b5ef7a0f40f 622 | sha256: bfa84296a638bea78a8bb29abc493ee95f2a0218775642474a840411b950fe5f 623 | optional: false 624 | category: main 625 | build: h93a5062_5 626 | arch: aarch64 627 | subdir: osx-arm64 628 | build_number: 5 629 | license: bzip2-1.0.6 630 | license_family: BSD 631 | size: 122325 632 | timestamp: 1699280294368 633 | - name: libffi 634 | version: 3.4.2 635 | manager: conda 636 | platform: osx-arm64 637 | dependencies: {} 638 | url: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 639 | hash: 640 | md5: 086914b672be056eb70fd4285b6783b6 641 | sha256: 41b3d13efb775e340e4dba549ab5c029611ea6918703096b2eaa9c015c0750ca 642 | optional: false 643 | category: main 644 | build: h3422bc3_5 645 | arch: aarch64 646 | subdir: osx-arm64 647 | build_number: 5 648 | license: MIT 649 | license_family: MIT 650 | size: 39020 651 | timestamp: 1636488587153 652 | - name: openssl 653 | version: 3.2.1 654 | manager: conda 655 | platform: osx-arm64 656 | dependencies: 657 | ca-certificates: '*' 658 | url: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.2.1-h0d3ecfb_0.conda 659 | hash: 660 | md5: 421cc6e8715447b73c2c57dcf78cb9d2 661 | sha256: 13663fcd4abc8681b31ccbad39800fee2127cb6159b51a989ed48a816af36cf5 662 | optional: false 663 | category: main 664 | build: h0d3ecfb_0 665 | arch: aarch64 666 | subdir: osx-arm64 667 | build_number: 0 668 | constrains: 669 | - pyopenssl >=22.1 670 | license: Apache-2.0 671 | license_family: Apache 672 | size: 2862719 673 | timestamp: 1706635779319 674 | - name: ca-certificates 675 | version: 2023.11.17 676 | manager: conda 677 | platform: osx-arm64 678 | dependencies: {} 679 | url: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2023.11.17-hf0a4a13_0.conda 680 | hash: 681 | md5: c01da7c77cfcba2107174e25c1d47384 682 | sha256: 75f4762a55f7e9453a603c967d549bfa0a7a9669d502d103cb6fbf8c86d993c6 683 | optional: false 684 | category: main 685 | build: hf0a4a13_0 686 | arch: aarch64 687 | subdir: osx-arm64 688 | build_number: 0 689 | license: ISC 690 | size: 154444 691 | timestamp: 1700280972188 692 | - name: tk 693 | version: 8.6.13 694 | manager: conda 695 | platform: osx-arm64 696 | dependencies: 697 | libzlib: '>=1.2.13,<1.3.0a0' 698 | url: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda 699 | hash: 700 | md5: b50a57ba89c32b62428b71a875291c9b 701 | sha256: 72457ad031b4c048e5891f3f6cb27a53cb479db68a52d965f796910e71a403a8 702 | optional: false 703 | category: main 704 | build: h5083fa2_1 705 | arch: aarch64 706 | subdir: osx-arm64 707 | build_number: 1 708 | license: TCL 709 | license_family: BSD 710 | size: 3145523 711 | timestamp: 1699202432999 712 | - name: tzdata 713 | version: 2023d 714 | manager: conda 715 | platform: osx-arm64 716 | dependencies: {} 717 | url: https://conda.anaconda.org/conda-forge/noarch/tzdata-2023d-h0c530f3_0.conda 718 | hash: 719 | md5: 8dee24b8be2d9ff81e7bd4d7d97ff1b0 720 | sha256: 04f2ab3e36f2015841551415bf16bf62933bd94b7085d4be5493b388e95a9c3d 721 | optional: false 722 | category: main 723 | build: h0c530f3_0 724 | arch: aarch64 725 | subdir: osx-arm64 726 | build_number: 0 727 | license: LicenseRef-Public-Domain 728 | noarch: generic 729 | size: 119639 730 | timestamp: 1703250910370 731 | - name: python 732 | version: 3.11.7 733 | manager: conda 734 | platform: win-64 735 | dependencies: 736 | tzdata: '*' 737 | openssl: '>=3.2.0,<4.0a0' 738 | libffi: '>=3.4,<4.0a0' 739 | libsqlite: '>=3.44.2,<4.0a0' 740 | libzlib: '>=1.2.13,<1.3.0a0' 741 | libexpat: '>=2.5.0,<3.0a0' 742 | tk: '>=8.6.13,<8.7.0a0' 743 | bzip2: '>=1.0.8,<2.0a0' 744 | ucrt: '>=10.0.20348.0' 745 | vc: '>=14.2,<15' 746 | vc14_runtime: '>=14.29.30139' 747 | xz: '>=5.2.6,<6.0a0' 748 | url: https://conda.anaconda.org/conda-forge/win-64/python-3.11.7-h2628c8c_1_cpython.conda 749 | hash: 750 | md5: c2f9a938fca6aa621b44afc8f5db79ab 751 | sha256: 668e9fd58e627c823e6e9d791e1fb8b372c76b5704a0c3b0cc94b3a34f5be582 752 | optional: false 753 | category: main 754 | build: h2628c8c_1_cpython 755 | arch: x86_64 756 | subdir: win-64 757 | build_number: 1 758 | constrains: 759 | - python_abi 3.11.* *_cp311 760 | license: Python-2.0 761 | size: 18191531 762 | timestamp: 1703342117253 763 | - name: xz 764 | version: 5.2.6 765 | manager: conda 766 | platform: win-64 767 | dependencies: 768 | vc: '>=14.1,<15' 769 | vs2015_runtime: '>=14.16.27033' 770 | url: https://conda.anaconda.org/conda-forge/win-64/xz-5.2.6-h8d14728_0.tar.bz2 771 | hash: 772 | md5: 515d77642eaa3639413c6b1bc3f94219 773 | sha256: 54d9778f75a02723784dc63aff4126ff6e6749ba21d11a6d03c1f4775f269fe0 774 | optional: false 775 | category: main 776 | build: h8d14728_0 777 | arch: x86_64 778 | subdir: win-64 779 | build_number: 0 780 | license: LGPL-2.1 and GPL-2.0 781 | size: 217804 782 | timestamp: 1660346976440 783 | - name: libsqlite 784 | version: 3.44.2 785 | manager: conda 786 | platform: win-64 787 | dependencies: 788 | ucrt: '>=10.0.20348.0' 789 | vc: '>=14.2,<15' 790 | vc14_runtime: '>=14.29.30139' 791 | url: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.44.2-hcfcfb64_0.conda 792 | hash: 793 | md5: 4a5f5ab56cbf3ccd08d71a1168061213 794 | sha256: 25bfcf79ec863c2c0f0b3599981e2eac57efc5302faf2bb84f68c3f0faa55d1c 795 | optional: false 796 | category: main 797 | build: hcfcfb64_0 798 | arch: x86_64 799 | subdir: win-64 800 | build_number: 0 801 | license: Unlicense 802 | size: 853171 803 | timestamp: 1700863704859 804 | - name: libexpat 805 | version: 2.5.0 806 | manager: conda 807 | platform: win-64 808 | dependencies: {} 809 | url: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.5.0-h63175ca_1.conda 810 | hash: 811 | md5: 636cc3cbbd2e28bcfd2f73b2044aac2c 812 | sha256: 794b2a9be72f176a2767c299574d330ffb76b2ed75d7fd20bee3bbadce5886cf 813 | optional: false 814 | category: main 815 | build: h63175ca_1 816 | arch: x86_64 817 | subdir: win-64 818 | build_number: 1 819 | constrains: 820 | - expat 2.5.0.* 821 | license: MIT 822 | license_family: MIT 823 | size: 138689 824 | timestamp: 1680190844101 825 | - name: vc 826 | version: '14.3' 827 | manager: conda 828 | platform: win-64 829 | dependencies: 830 | vc14_runtime: '>=14.38.33130' 831 | url: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-hcf57466_18.conda 832 | hash: 833 | md5: 20e1e652a4c740fa719002a8449994a2 834 | sha256: 447a8d8292a7b2107dcc18afb67f046824711a652725fc0f522c368e7a7b8318 835 | optional: false 836 | category: main 837 | build: hcf57466_18 838 | arch: x86_64 839 | subdir: win-64 840 | build_number: 18 841 | track_features: 842 | - vc14 843 | license: BSD-3-Clause 844 | license_family: BSD 845 | size: 16977 846 | timestamp: 1702511255313 847 | - name: vc14_runtime 848 | version: 14.38.33130 849 | manager: conda 850 | platform: win-64 851 | dependencies: 852 | ucrt: '>=10.0.20348.0' 853 | url: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.38.33130-h82b7239_18.conda 854 | hash: 855 | md5: 8be79fdd2725ddf7bbf8a27a4c1f79ba 856 | sha256: bf94c9af4b2e9cba88207001197e695934eadc96a5c5e4cd7597e950aae3d8ff 857 | optional: false 858 | category: main 859 | build: h82b7239_18 860 | arch: x86_64 861 | subdir: win-64 862 | build_number: 18 863 | constrains: 864 | - vs2015_runtime 14.38.33130.* *_18 865 | license: LicenseRef-ProprietaryMicrosoft 866 | license_family: Proprietary 867 | size: 749868 868 | timestamp: 1702511239004 869 | - name: vs2015_runtime 870 | version: 14.38.33130 871 | manager: conda 872 | platform: win-64 873 | dependencies: 874 | vc14_runtime: '>=14.38.33130' 875 | url: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.38.33130-hcb4865c_18.conda 876 | hash: 877 | md5: 10d42885e3ed84e575b454db30f1aa93 878 | sha256: a2fec221f361d6263c117f4ea6d772b21c90a2f8edc6f3eb0eadec6bfe8843db 879 | optional: false 880 | category: main 881 | build: hcb4865c_18 882 | arch: x86_64 883 | subdir: win-64 884 | build_number: 18 885 | license: BSD-3-Clause 886 | license_family: BSD 887 | size: 16988 888 | timestamp: 1702511261442 889 | - name: ucrt 890 | version: 10.0.22621.0 891 | manager: conda 892 | platform: win-64 893 | dependencies: {} 894 | url: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_0.tar.bz2 895 | hash: 896 | md5: 72608f6cd3e5898229c3ea16deb1ac43 897 | sha256: f29cdaf8712008f6b419b8b1a403923b00ab2504bfe0fb2ba8eb60e72d4f14c6 898 | optional: false 899 | category: main 900 | build: h57928b3_0 901 | arch: x86_64 902 | subdir: win-64 903 | build_number: 0 904 | constrains: 905 | - vs2015_runtime >=14.29.30037 906 | license: LicenseRef-Proprietary 907 | license_family: PROPRIETARY 908 | size: 1283972 909 | timestamp: 1666630199266 910 | - name: bzip2 911 | version: 1.0.8 912 | manager: conda 913 | platform: win-64 914 | dependencies: 915 | ucrt: '>=10.0.20348.0' 916 | vc: '>=14.2,<15' 917 | vc14_runtime: '>=14.29.30139' 918 | url: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-hcfcfb64_5.conda 919 | hash: 920 | md5: 26eb8ca6ea332b675e11704cce84a3be 921 | sha256: ae5f47a5c86fd6db822931255dcf017eb12f60c77f07dc782ccb477f7808aab2 922 | optional: false 923 | category: main 924 | build: hcfcfb64_5 925 | arch: x86_64 926 | subdir: win-64 927 | build_number: 5 928 | license: bzip2-1.0.6 929 | license_family: BSD 930 | size: 124580 931 | timestamp: 1699280668742 932 | - name: libffi 933 | version: 3.4.2 934 | manager: conda 935 | platform: win-64 936 | dependencies: 937 | vc: '>=14.1,<15.0a0' 938 | vs2015_runtime: '>=14.16.27012' 939 | url: https://conda.anaconda.org/conda-forge/win-64/libffi-3.4.2-h8ffe710_5.tar.bz2 940 | hash: 941 | md5: 2c96d1b6915b408893f9472569dee135 942 | sha256: 1951ab740f80660e9bc07d2ed3aefb874d78c107264fd810f24a1a6211d4b1a5 943 | optional: false 944 | category: main 945 | build: h8ffe710_5 946 | arch: x86_64 947 | subdir: win-64 948 | build_number: 5 949 | license: MIT 950 | license_family: MIT 951 | size: 42063 952 | timestamp: 1636489106777 953 | - name: libzlib 954 | version: 1.2.13 955 | manager: conda 956 | platform: win-64 957 | dependencies: 958 | ucrt: '>=10.0.20348.0' 959 | vc: '>=14.2,<15' 960 | vc14_runtime: '>=14.29.30139' 961 | url: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.2.13-hcfcfb64_5.conda 962 | hash: 963 | md5: 5fdb9c6a113b6b6cb5e517fd972d5f41 964 | sha256: c161822ee8130b71e08b6d282b9919c1de2c5274b29921a867bca0f7d30cad26 965 | optional: false 966 | category: main 967 | build: hcfcfb64_5 968 | arch: x86_64 969 | subdir: win-64 970 | build_number: 5 971 | constrains: 972 | - zlib 1.2.13 *_5 973 | license: Zlib 974 | license_family: Other 975 | size: 55800 976 | timestamp: 1686575452215 977 | - name: openssl 978 | version: 3.2.1 979 | manager: conda 980 | platform: win-64 981 | dependencies: 982 | ucrt: '>=10.0.20348.0' 983 | ca-certificates: '*' 984 | vc: '>=14.2,<15' 985 | vc14_runtime: '>=14.29.30139' 986 | url: https://conda.anaconda.org/conda-forge/win-64/openssl-3.2.1-hcfcfb64_0.conda 987 | hash: 988 | md5: 158df8eead8092cf0e27167c8761a8dd 989 | sha256: 1df1c43136f863d5e9ba20b703001caf9a4d0ea56bdc3eeb948c977e3d4f91d3 990 | optional: false 991 | category: main 992 | build: hcfcfb64_0 993 | arch: x86_64 994 | subdir: win-64 995 | build_number: 0 996 | constrains: 997 | - pyopenssl >=22.1 998 | license: Apache-2.0 999 | license_family: Apache 1000 | size: 8229619 1001 | timestamp: 1706638014697 1002 | - name: ca-certificates 1003 | version: 2023.11.17 1004 | manager: conda 1005 | platform: win-64 1006 | dependencies: {} 1007 | url: https://conda.anaconda.org/conda-forge/win-64/ca-certificates-2023.11.17-h56e8100_0.conda 1008 | hash: 1009 | md5: 1163114b483f26761f993c709e65271f 1010 | sha256: c6177e2a4967db7a4e929c6ecd2fafde36e489dbeda23ceda640f4915cb0e877 1011 | optional: false 1012 | category: main 1013 | build: h56e8100_0 1014 | arch: x86_64 1015 | subdir: win-64 1016 | build_number: 0 1017 | license: ISC 1018 | size: 154700 1019 | timestamp: 1700281021312 1020 | - name: tk 1021 | version: 8.6.13 1022 | manager: conda 1023 | platform: win-64 1024 | dependencies: 1025 | ucrt: '>=10.0.20348.0' 1026 | vc: '>=14.2,<15' 1027 | vc14_runtime: '>=14.29.30139' 1028 | url: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h5226925_1.conda 1029 | hash: 1030 | md5: fc048363eb8f03cd1737600a5d08aafe 1031 | sha256: 2c4e914f521ccb2718946645108c9bd3fc3216ba69aea20c2c3cedbd8db32bb1 1032 | optional: false 1033 | category: main 1034 | build: h5226925_1 1035 | arch: x86_64 1036 | subdir: win-64 1037 | build_number: 1 1038 | license: TCL 1039 | license_family: BSD 1040 | size: 3503410 1041 | timestamp: 1699202577803 1042 | - name: tzdata 1043 | version: 2023d 1044 | manager: conda 1045 | platform: win-64 1046 | dependencies: {} 1047 | url: https://conda.anaconda.org/conda-forge/noarch/tzdata-2023d-h0c530f3_0.conda 1048 | hash: 1049 | md5: 8dee24b8be2d9ff81e7bd4d7d97ff1b0 1050 | sha256: 04f2ab3e36f2015841551415bf16bf62933bd94b7085d4be5493b388e95a9c3d 1051 | optional: false 1052 | category: main 1053 | build: h0c530f3_0 1054 | arch: x86_64 1055 | subdir: win-64 1056 | build_number: 0 1057 | license: LicenseRef-Public-Domain 1058 | noarch: generic 1059 | size: 119639 1060 | timestamp: 1703250910370 1061 | - name: python 1062 | version: 3.11.7 1063 | manager: conda 1064 | platform: osx-64 1065 | dependencies: 1066 | tzdata: '*' 1067 | openssl: '>=3.2.0,<4.0a0' 1068 | readline: '>=8.2,<9.0a0' 1069 | libffi: '>=3.4,<4.0a0' 1070 | libsqlite: '>=3.44.2,<4.0a0' 1071 | libzlib: '>=1.2.13,<1.3.0a0' 1072 | libexpat: '>=2.5.0,<3.0a0' 1073 | tk: '>=8.6.13,<8.7.0a0' 1074 | bzip2: '>=1.0.8,<2.0a0' 1075 | xz: '>=5.2.6,<6.0a0' 1076 | ncurses: '>=6.4,<7.0a0' 1077 | url: https://conda.anaconda.org/conda-forge/osx-64/python-3.11.7-h9f0c242_1_cpython.conda 1078 | hash: 1079 | md5: 686f211dcfbb8d27c6fe1ca905870189 1080 | sha256: d234064dffa64715cf0a3f6c6a3665ead193f5a898614691b08d9c5afcdf11cc 1081 | optional: false 1082 | category: main 1083 | build: h9f0c242_1_cpython 1084 | arch: x86_64 1085 | subdir: osx-64 1086 | build_number: 1 1087 | constrains: 1088 | - python_abi 3.11.* *_cp311 1089 | license: Python-2.0 1090 | size: 15452269 1091 | timestamp: 1703343492323 1092 | - name: xz 1093 | version: 5.2.6 1094 | manager: conda 1095 | platform: osx-64 1096 | dependencies: {} 1097 | url: https://conda.anaconda.org/conda-forge/osx-64/xz-5.2.6-h775f41a_0.tar.bz2 1098 | hash: 1099 | md5: a72f9d4ea13d55d745ff1ed594747f10 1100 | sha256: eb09823f34cc2dd663c0ec4ab13f246f45dcd52e5b8c47b9864361de5204a1c8 1101 | optional: false 1102 | category: main 1103 | build: h775f41a_0 1104 | arch: x86_64 1105 | subdir: osx-64 1106 | build_number: 0 1107 | license: LGPL-2.1 and GPL-2.0 1108 | size: 238119 1109 | timestamp: 1660346964847 1110 | - name: readline 1111 | version: '8.2' 1112 | manager: conda 1113 | platform: osx-64 1114 | dependencies: 1115 | ncurses: '>=6.3,<7.0a0' 1116 | url: https://conda.anaconda.org/conda-forge/osx-64/readline-8.2-h9e318b2_1.conda 1117 | hash: 1118 | md5: f17f77f2acf4d344734bda76829ce14e 1119 | sha256: 41e7d30a097d9b060037f0c6a2b1d4c4ae7e942c06c943d23f9d481548478568 1120 | optional: false 1121 | category: main 1122 | build: h9e318b2_1 1123 | arch: x86_64 1124 | subdir: osx-64 1125 | build_number: 1 1126 | license: GPL-3.0-only 1127 | license_family: GPL 1128 | size: 255870 1129 | timestamp: 1679532707590 1130 | - name: libsqlite 1131 | version: 3.44.2 1132 | manager: conda 1133 | platform: osx-64 1134 | dependencies: 1135 | libzlib: '>=1.2.13,<1.3.0a0' 1136 | url: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.44.2-h92b6c6a_0.conda 1137 | hash: 1138 | md5: d4419f90019e6a2b152cd4d32f73a82f 1139 | sha256: 8a317d2aa6352feba951ca09d5bf34f565f9dd10bb14ff842b8650baa321d781 1140 | optional: false 1141 | category: main 1142 | build: h92b6c6a_0 1143 | arch: x86_64 1144 | subdir: osx-64 1145 | build_number: 0 1146 | license: Unlicense 1147 | size: 891089 1148 | timestamp: 1700863475542 1149 | - name: libexpat 1150 | version: 2.5.0 1151 | manager: conda 1152 | platform: osx-64 1153 | dependencies: {} 1154 | url: https://conda.anaconda.org/conda-forge/osx-64/libexpat-2.5.0-hf0c8a7f_1.conda 1155 | hash: 1156 | md5: 6c81cb022780ee33435cca0127dd43c9 1157 | sha256: 80024bd9f44d096c4cc07fb2bac76b5f1f7553390112dab3ad6acb16a05f0b96 1158 | optional: false 1159 | category: main 1160 | build: hf0c8a7f_1 1161 | arch: x86_64 1162 | subdir: osx-64 1163 | build_number: 1 1164 | constrains: 1165 | - expat 2.5.0.* 1166 | license: MIT 1167 | license_family: MIT 1168 | size: 69602 1169 | timestamp: 1680191040160 1170 | - name: ncurses 1171 | version: '6.4' 1172 | manager: conda 1173 | platform: osx-64 1174 | dependencies: 1175 | __osx: '>=10.9' 1176 | url: https://conda.anaconda.org/conda-forge/osx-64/ncurses-6.4-h93d8f39_2.conda 1177 | hash: 1178 | md5: e58f366bd4d767e9ab97ab8b272e7670 1179 | sha256: ea0fca66bbb52a1ef0687d466518fe120b5f279684effd6fd336a7b0dddc423a 1180 | optional: false 1181 | category: main 1182 | build: h93d8f39_2 1183 | arch: x86_64 1184 | subdir: osx-64 1185 | build_number: 2 1186 | license: X11 AND BSD-3-Clause 1187 | size: 822031 1188 | timestamp: 1698751567986 1189 | - name: libzlib 1190 | version: 1.2.13 1191 | manager: conda 1192 | platform: osx-64 1193 | dependencies: {} 1194 | url: https://conda.anaconda.org/conda-forge/osx-64/libzlib-1.2.13-h8a1eda9_5.conda 1195 | hash: 1196 | md5: 4a3ad23f6e16f99c04e166767193d700 1197 | sha256: fc58ad7f47ffea10df1f2165369978fba0a1cc32594aad778f5eec725f334867 1198 | optional: false 1199 | category: main 1200 | build: h8a1eda9_5 1201 | arch: x86_64 1202 | subdir: osx-64 1203 | build_number: 5 1204 | constrains: 1205 | - zlib 1.2.13 *_5 1206 | license: Zlib 1207 | license_family: Other 1208 | size: 59404 1209 | timestamp: 1686575566695 1210 | - name: bzip2 1211 | version: 1.0.8 1212 | manager: conda 1213 | platform: osx-64 1214 | dependencies: {} 1215 | url: https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.8-h10d778d_5.conda 1216 | hash: 1217 | md5: 6097a6ca9ada32699b5fc4312dd6ef18 1218 | sha256: 61fb2b488928a54d9472113e1280b468a309561caa54f33825a3593da390b242 1219 | optional: false 1220 | category: main 1221 | build: h10d778d_5 1222 | arch: x86_64 1223 | subdir: osx-64 1224 | build_number: 5 1225 | license: bzip2-1.0.6 1226 | license_family: BSD 1227 | size: 127885 1228 | timestamp: 1699280178474 1229 | - name: libffi 1230 | version: 3.4.2 1231 | manager: conda 1232 | platform: osx-64 1233 | dependencies: {} 1234 | url: https://conda.anaconda.org/conda-forge/osx-64/libffi-3.4.2-h0d85af4_5.tar.bz2 1235 | hash: 1236 | md5: ccb34fb14960ad8b125962d3d79b31a9 1237 | sha256: 7a2d27a936ceee6942ea4d397f9c7d136f12549d86f7617e8b6bad51e01a941f 1238 | optional: false 1239 | category: main 1240 | build: h0d85af4_5 1241 | arch: x86_64 1242 | subdir: osx-64 1243 | build_number: 5 1244 | license: MIT 1245 | license_family: MIT 1246 | size: 51348 1247 | timestamp: 1636488394370 1248 | - name: openssl 1249 | version: 3.2.1 1250 | manager: conda 1251 | platform: osx-64 1252 | dependencies: 1253 | ca-certificates: '*' 1254 | url: https://conda.anaconda.org/conda-forge/osx-64/openssl-3.2.1-hd75f5a5_0.conda 1255 | hash: 1256 | md5: 3033be9a59fd744172b03971b9ccd081 1257 | sha256: 20c1b1a34a1831c24d37ed1500ca07300171184af0c66598f3c5ca901634d713 1258 | optional: false 1259 | category: main 1260 | build: hd75f5a5_0 1261 | arch: x86_64 1262 | subdir: osx-64 1263 | build_number: 0 1264 | constrains: 1265 | - pyopenssl >=22.1 1266 | license: Apache-2.0 1267 | license_family: Apache 1268 | size: 2509168 1269 | timestamp: 1706636810736 1270 | - name: ca-certificates 1271 | version: 2023.11.17 1272 | manager: conda 1273 | platform: osx-64 1274 | dependencies: {} 1275 | url: https://conda.anaconda.org/conda-forge/osx-64/ca-certificates-2023.11.17-h8857fd0_0.conda 1276 | hash: 1277 | md5: c687e9d14c49e3d3946d50a413cdbf16 1278 | sha256: 7e05d80a97beb7cb7492fae38584a68d51f338a5eddf73a14b5bd266597db90e 1279 | optional: false 1280 | category: main 1281 | build: h8857fd0_0 1282 | arch: x86_64 1283 | subdir: osx-64 1284 | build_number: 0 1285 | license: ISC 1286 | size: 154404 1287 | timestamp: 1700280995538 1288 | - name: tk 1289 | version: 8.6.13 1290 | manager: conda 1291 | platform: osx-64 1292 | dependencies: 1293 | libzlib: '>=1.2.13,<1.3.0a0' 1294 | url: https://conda.anaconda.org/conda-forge/osx-64/tk-8.6.13-h1abcd95_1.conda 1295 | hash: 1296 | md5: bf830ba5afc507c6232d4ef0fb1a882d 1297 | sha256: 30412b2e9de4ff82d8c2a7e5d06a15f4f4fef1809a72138b6ccb53a33b26faf5 1298 | optional: false 1299 | category: main 1300 | build: h1abcd95_1 1301 | arch: x86_64 1302 | subdir: osx-64 1303 | build_number: 1 1304 | license: TCL 1305 | license_family: BSD 1306 | size: 3270220 1307 | timestamp: 1699202389792 1308 | - name: tzdata 1309 | version: 2023d 1310 | manager: conda 1311 | platform: osx-64 1312 | dependencies: {} 1313 | url: https://conda.anaconda.org/conda-forge/noarch/tzdata-2023d-h0c530f3_0.conda 1314 | hash: 1315 | md5: 8dee24b8be2d9ff81e7bd4d7d97ff1b0 1316 | sha256: 04f2ab3e36f2015841551415bf16bf62933bd94b7085d4be5493b388e95a9c3d 1317 | optional: false 1318 | category: main 1319 | build: h0c530f3_0 1320 | arch: x86_64 1321 | subdir: osx-64 1322 | build_number: 0 1323 | license: LicenseRef-Public-Domain 1324 | noarch: generic 1325 | size: 119639 1326 | timestamp: 1703250910370 1327 | version: 1 1328 | --------------------------------------------------------------------------------