mirror of
https://github.com/astral-sh/setup-uv.git
synced 2025-10-18 08:37:01 +00:00
Some checks failed
CodeQL / Analyze (TypeScript) (push) Failing after 4s
test / lint (push) Failing after 4s
test / test-default-version (ubuntu-latest) (push) Failing after 4s
test / test-uv-no-modify-path (push) Failing after 4s
test / test-specific-version (map[expected-version:0.1.0 resolution-strategy:lowest version-input:>=0.1.0,<0.2]) (push) Failing after 4s
test / test-specific-version (map[expected-version:0.3.0 version-input:0.3.0]) (push) Failing after 4s
test / test-specific-version (map[expected-version:0.1.45 resolution-strategy:highest version-input:>=0.1,<0.2]) (push) Failing after 4s
test / test-specific-version (map[expected-version:0.3.2 version-input:0.3.2]) (push) Failing after 3s
test / test-specific-version (map[expected-version:0.3.5 version-input:0.3.x]) (push) Failing after 3s
test / test-specific-version (map[expected-version:0.3.5 version-input:0.3]) (push) Failing after 3s
test / test-specific-version (map[expected-version:0.4.25 resolution-strategy:lowest version-input:>=0.4.25,<0.5]) (push) Failing after 3s
test / test-specific-version (map[expected-version:0.4.25 resolution-strategy:lowest version-input:>=0.4.25]) (push) Failing after 3s
test / test-specific-version (map[expected-version:0.4.30 version-input:>=0.4.25,<0.5]) (push) Failing after 4s
test / test-latest-version (>=0.8) (push) Failing after 3s
test / test-latest-version (latest) (push) Failing after 3s
test / test-from-working-directory-version (map[expected-version:0.5.14 working-directory:__tests__/fixtures/pyproject-toml-project]) (push) Failing after 3s
test / test-from-working-directory-version (map[expected-version:0.5.15 working-directory:__tests__/fixtures/uv-toml-project]) (push) Failing after 3s
test / test-version-file-version (map[expected-version:0.5.15 version-file:__tests__/fixtures/.tool-versions]) (push) Failing after 4s
test / test-version-file-version (map[expected-version:0.6.17 version-file:__tests__/fixtures/uv-in-requirements-txt-project/requirements.txt]) (push) Failing after 3s
test / test-version-file-version (map[expected-version:0.8.3 version-file:__tests__/fixtures/uv-in-requirements-hash-txt-project/requirements.txt]) (push) Failing after 4s
test / test-malformed-pyproject-file-fallback (push) Failing after 3s
test / test-checksum (map[checksum:4d9279ad5ca596b1e2d703901d508430eb07564dc4d8837de9e2fca9c90f8ecd os:ubuntu-latest]) (push) Failing after 3s
test / test-with-explicit-token (push) Failing after 4s
test / test-uvx (push) Failing after 4s
test / test-tool-install (ubuntu-latest) (push) Failing after 4s
test / test-python-version (ubuntu-latest) (push) Failing after 3s
test / test-activate-environment (ubuntu-latest) (push) Failing after 4s
test / test-setup-cache (auto, ubuntu-latest) (push) Failing after 3s
test / test-setup-cache (false, ubuntu-latest) (push) Failing after 3s
test / test-musl (push) Failing after 5s
test / test-setup-cache (true, ubuntu-latest) (push) Failing after 3s
test / test-restore-cache-requirements-txt (push) Has been skipped
test / test-setup-cache-requirements-txt (push) Failing after 3s
test / test-setup-cache-dependency-glob (push) Failing after 3s
test / test-restore-cache-dependency-glob (push) Has been skipped
test / test-setup-cache-save-cache-false (push) Failing after 4s
test / test-restore-cache-save-cache-false (push) Has been skipped
test / test-setup-cache-restore-cache-false (push) Failing after 4s
test / test-restore-cache-restore-cache-false (push) Has been skipped
test / test-cache-local (map[expected-cache-dir:/home/runner/work/_temp/setup-uv-cache os:ubuntu-latest]) (push) Failing after 4s
test / test-cache-local-cache-disabled (push) Failing after 5s
test / test-no-python-version (push) Failing after 5s
test / test-custom-manifest-file (push) Failing after 6s
test / test-absolute-path (push) Failing after 6s
test / test-relative-path (push) Failing after 6s
test / test-cache-prune-force (push) Failing after 6s
test / test-cache-dir-from-file (push) Failing after 6s
test / test-cache-python-installs (push) Failing after 6s
test / test-restore-python-installs (push) Has been skipped
test / test-python-install-dir (map[expected-python-dir:/home/runner/work/_temp/uv-python-dir os:ubuntu-latest]) (push) Failing after 6s
test / test-tool-install (macos-14) (push) Has been cancelled
test / test-tool-install (macos-latest) (push) Has been cancelled
test / test-tool-install (windows-latest) (push) Has been cancelled
test / test-default-version (macos-14) (push) Has been cancelled
Release Drafter / ✏️ Draft release (push) Has been cancelled
test / test-default-version (macos-latest) (push) Has been cancelled
test / test-default-version (windows-latest) (push) Has been cancelled
test / test-checksum (map[checksum:a70cbfbf3bb5c08b2f84963b4f12c94e08fbb2468ba418a3bfe1066fbe9e7218 os:macos-latest]) (push) Has been cancelled
test / test-tilde-expansion-tool-dirs (push) Has been cancelled
test / test-python-version (macos-latest) (push) Has been cancelled
test / test-python-version (windows-latest) (push) Has been cancelled
test / test-activate-environment (macos-latest) (push) Has been cancelled
test / test-setup-cache (false, selfhosted-ubuntu-arm64) (push) Has been cancelled
test / test-activate-environment (windows-latest) (push) Has been cancelled
test / test-setup-cache (auto, selfhosted-ubuntu-arm64) (push) Has been cancelled
test / test-setup-cache (auto, windows-latest) (push) Has been cancelled
test / test-setup-cache (false, windows-latest) (push) Has been cancelled
test / test-setup-cache (true, selfhosted-ubuntu-arm64) (push) Has been cancelled
test / test-setup-cache (true, windows-latest) (push) Has been cancelled
test / test-cache-local (map[expected-cache-dir:/home/ubuntu/.cache/uv os:selfhosted-ubuntu-arm64]) (push) Has been cancelled
test / test-setup-cache-local (push) Has been cancelled
test / test-restore-cache (auto, windows-latest) (push) Has been cancelled
test / test-restore-cache (false, ubuntu-latest) (push) Has been cancelled
test / test-restore-cache (auto, selfhosted-ubuntu-arm64) (push) Has been cancelled
test / test-restore-cache (true, selfhosted-ubuntu-arm64) (push) Has been cancelled
test / test-restore-cache (true, ubuntu-latest) (push) Has been cancelled
test / test-cache-local (map[expected-cache-dir:D:\a\_temp\setup-uv-cache os:windows-latest]) (push) Has been cancelled
test / test-tilde-expansion-cache-local-path (push) Has been cancelled
test / test-tilde-expansion-cache-dependency-glob (push) Has been cancelled
test / test-python-install-dir (map[expected-python-dir:/home/ubuntu/.local/share/uv/python os:selfhosted-ubuntu-arm64]) (push) Has been cancelled
test / test-python-install-dir (map[expected-python-dir:D:\a\_temp\uv-python-dir os:windows-latest]) (push) Has been cancelled
test / test-restore-cache (false, selfhosted-ubuntu-arm64) (push) Has been cancelled
test / test-restore-cache (auto, ubuntu-latest) (push) Has been cancelled
test / test-restore-cache (false, windows-latest) (push) Has been cancelled
test / test-restore-cache (true, windows-latest) (push) Has been cancelled
test / test-restore-cache-local (push) Has been cancelled
test / cleanup-tilde-expansion-tests (push) Has been cancelled
test / all-tests-passed (push) Has been cancelled
Update known versions / build (push) Has been cancelled
- towards https://github.com/astral-sh/setup-uv/issues/648 Fix the bug described there, but this doesn't add the fast-path optimisation suggested in that issue.
1002 lines
33 KiB
YAML
1002 lines
33 KiB
YAML
name: "test"
|
|
on:
|
|
workflow_dispatch:
|
|
pull_request:
|
|
branches:
|
|
- main
|
|
push:
|
|
branches:
|
|
- main
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
jobs:
|
|
lint:
|
|
runs-on: ubuntu-latest
|
|
permissions:
|
|
security-events: write # for zizmor
|
|
steps:
|
|
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
|
with:
|
|
persist-credentials: false
|
|
- name: Actionlint
|
|
uses: eifinger/actionlint-action@03ff1f78c0670b71017616a37170f327df932030 # v1.9.2
|
|
- name: Run zizmor
|
|
uses: zizmorcore/zizmor-action@e673c3917a1aef3c65c972347ed84ccd013ecda4 # v0.2.0
|
|
- uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
|
|
with:
|
|
node-version: "24"
|
|
- run: |
|
|
npm install
|
|
- run: |
|
|
npm run all
|
|
- name: Check all jobs are in all-tests-passed.needs
|
|
run: |
|
|
tsc check-all-tests-passed-needs.ts
|
|
node check-all-tests-passed-needs.js
|
|
working-directory: .github/scripts
|
|
- name: Make sure no changes from linters are detected
|
|
run: |
|
|
git diff --exit-code || (echo "::error::Please run 'npm run all' to fix the issues" && exit 1)
|
|
|
|
test-default-version:
|
|
runs-on: ${{ matrix.os }}
|
|
strategy:
|
|
matrix:
|
|
os: [ubuntu-latest, macos-latest, macos-14, windows-latest]
|
|
steps:
|
|
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
|
with:
|
|
persist-credentials: false
|
|
- name: Install latest version
|
|
id: setup-uv
|
|
uses: ./
|
|
- run: uv sync
|
|
working-directory: __tests__/fixtures/uv-project
|
|
shell: bash
|
|
- name: Check uv-path is set
|
|
run: |
|
|
"${UV_PATH}" --version
|
|
shell: bash
|
|
env:
|
|
UV_PATH: ${{ steps.setup-uv.outputs.uv-path }}
|
|
- name: Check uvx-path is set
|
|
run: |
|
|
"${UVX_PATH}" --version
|
|
shell: bash
|
|
env:
|
|
UVX_PATH: ${{ steps.setup-uv.outputs.uvx-path }}
|
|
|
|
test-uv-no-modify-path:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
|
with:
|
|
persist-credentials: false
|
|
- name: Install with UV_NO_MODIFY_PATH set
|
|
id: setup-uv
|
|
uses: ./
|
|
env:
|
|
UV_NO_MODIFY_PATH: 1
|
|
- run: |
|
|
"${UV_PATH}" sync
|
|
working-directory: __tests__/fixtures/uv-project
|
|
shell: bash
|
|
env:
|
|
UV_PATH: ${{ steps.setup-uv.outputs.uv-path }}
|
|
- name: uv is not on PATH
|
|
run: |
|
|
if command -v uv; then
|
|
echo "uv should not be on PATH"
|
|
exit 1
|
|
fi
|
|
|
|
test-specific-version:
|
|
runs-on: ubuntu-latest
|
|
strategy:
|
|
matrix:
|
|
input:
|
|
- version-input: "0.3.0"
|
|
expected-version: "0.3.0"
|
|
- version-input: "0.3.2"
|
|
expected-version: "0.3.2"
|
|
- version-input: "0.3"
|
|
expected-version: "0.3.5"
|
|
- version-input: "0.3.x"
|
|
expected-version: "0.3.5"
|
|
- version-input: ">=0.4.25,<0.5"
|
|
expected-version: "0.4.30"
|
|
- version-input: ">=0.4.25,<0.5"
|
|
expected-version: "0.4.25"
|
|
resolution-strategy: "lowest"
|
|
- version-input: ">=0.4.25"
|
|
expected-version: "0.4.25"
|
|
resolution-strategy: "lowest"
|
|
- version-input: ">=0.1,<0.2"
|
|
expected-version: "0.1.45"
|
|
resolution-strategy: "highest"
|
|
- version-input: ">=0.1.0,<0.2"
|
|
expected-version: "0.1.0"
|
|
resolution-strategy: "lowest"
|
|
steps:
|
|
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
|
with:
|
|
persist-credentials: false
|
|
- name: Install version ${{ matrix.input.version-input }} with strategy ${{ matrix.input.resolution-strategy || 'highest' }}
|
|
id: setup-uv
|
|
uses: ./
|
|
with:
|
|
version: ${{ matrix.input.version-input }}
|
|
resolution-strategy: ${{ matrix.input.resolution-strategy || 'highest' }}
|
|
- name: Correct version gets installed
|
|
run: |
|
|
if [ "$(uv --version)" != "uv ${{ matrix.input.expected-version }}" ]; then
|
|
echo "Wrong uv version: $(uv --version)"
|
|
exit 1
|
|
fi
|
|
- name: Output has correct version
|
|
run: |
|
|
if [ "$UV_VERSION" != "${{ matrix.input.expected-version }}" ]; then
|
|
exit 1
|
|
fi
|
|
env:
|
|
UV_VERSION: ${{ steps.setup-uv.outputs.uv-version }}
|
|
|
|
test-latest-version:
|
|
runs-on: ubuntu-latest
|
|
strategy:
|
|
matrix:
|
|
version-input: ["latest", ">=0.8"]
|
|
steps:
|
|
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
|
with:
|
|
persist-credentials: false
|
|
- name: Install version ${{ matrix.version-input }}
|
|
uses: ./
|
|
with:
|
|
version: ${{ matrix.version-input }}
|
|
- name: Latest version gets installed
|
|
run: |
|
|
LATEST_VERSION=$(gh api -H "Accept: application/vnd.github+json" -H "X-GitHub-Api-Version: 2022-11-28" /repos/astral-sh/uv/releases/latest | jq -r '.tag_name')
|
|
echo "Latest version is $LATEST_VERSION"
|
|
if [ "$(uv --version)" != "uv $LATEST_VERSION" ]; then
|
|
echo "Wrong uv version: $(uv --version)"
|
|
exit 1
|
|
fi
|
|
env:
|
|
GH_TOKEN: ${{ github.token }}
|
|
|
|
test-from-working-directory-version:
|
|
runs-on: ubuntu-latest
|
|
strategy:
|
|
matrix:
|
|
input:
|
|
- working-directory: "__tests__/fixtures/pyproject-toml-project"
|
|
expected-version: "0.5.14"
|
|
- working-directory: "__tests__/fixtures/uv-toml-project"
|
|
expected-version: "0.5.15"
|
|
steps:
|
|
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
|
with:
|
|
persist-credentials: false
|
|
- name: Install version from ${{ matrix.input.working-directory }}
|
|
uses: ./
|
|
with:
|
|
working-directory: ${{ matrix.input.working-directory }}
|
|
- name: Correct version gets installed
|
|
run: |
|
|
if [ "$(uv --version)" != "uv ${{ matrix.input.expected-version }}" ]; then
|
|
echo "Wrong uv version: $(uv --version)"
|
|
exit 1
|
|
fi
|
|
|
|
test-version-file-version:
|
|
runs-on: ubuntu-latest
|
|
strategy:
|
|
matrix:
|
|
input:
|
|
- version-file: "__tests__/fixtures/uv-in-requirements-txt-project/requirements.txt"
|
|
expected-version: "0.6.17"
|
|
- version-file: "__tests__/fixtures/uv-in-requirements-hash-txt-project/requirements.txt"
|
|
expected-version: "0.8.3"
|
|
- version-file: "__tests__/fixtures/.tool-versions"
|
|
expected-version: "0.5.15"
|
|
steps:
|
|
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
|
with:
|
|
persist-credentials: false
|
|
- name: Install version from ${{ matrix.input.version-file }}
|
|
uses: ./
|
|
with:
|
|
version-file: ${{ matrix.input.version-file }}
|
|
- name: Correct version gets installed
|
|
run: |
|
|
if [ "$(uv --version)" != "uv ${{ matrix.input.expected-version }}" ]; then
|
|
echo "Wrong uv version: $(uv --version)"
|
|
exit 1
|
|
fi
|
|
|
|
test-malformed-pyproject-file-fallback:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
|
with:
|
|
persist-credentials: false
|
|
- name: Install using malformed pyproject.toml
|
|
id: setup-uv
|
|
uses: ./
|
|
with:
|
|
working-directory: "__tests__/fixtures/malformed-pyproject-toml-project"
|
|
- run: uv --help
|
|
|
|
test-checksum:
|
|
runs-on: ${{ matrix.inputs.os }}
|
|
strategy:
|
|
matrix:
|
|
inputs:
|
|
- os: ubuntu-latest
|
|
checksum: "4d9279ad5ca596b1e2d703901d508430eb07564dc4d8837de9e2fca9c90f8ecd"
|
|
- os: macos-latest
|
|
checksum: "a70cbfbf3bb5c08b2f84963b4f12c94e08fbb2468ba418a3bfe1066fbe9e7218"
|
|
steps:
|
|
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
|
with:
|
|
persist-credentials: false
|
|
- name: Checksum matches expected
|
|
uses: ./
|
|
with:
|
|
version: "0.3.2"
|
|
checksum: ${{ matrix.inputs.checksum }}
|
|
- run: uv sync
|
|
working-directory: __tests__/fixtures/uv-project
|
|
|
|
test-with-explicit-token:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
|
with:
|
|
persist-credentials: false
|
|
- name: Install default version
|
|
uses: ./
|
|
with:
|
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
- run: uv sync
|
|
working-directory: __tests__/fixtures/uv-project
|
|
|
|
test-uvx:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
|
with:
|
|
persist-credentials: false
|
|
- name: Install default version
|
|
uses: ./
|
|
- run: uvx ruff --version
|
|
|
|
test-tool-install:
|
|
runs-on: ${{ matrix.os }}
|
|
strategy:
|
|
matrix:
|
|
os: [ubuntu-latest, macos-latest, macos-14, windows-latest]
|
|
steps:
|
|
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
|
with:
|
|
persist-credentials: false
|
|
- name: Install default version
|
|
uses: ./
|
|
- run: uv tool install ruff
|
|
- run: ruff --version
|
|
|
|
test-tilde-expansion-tool-dirs:
|
|
runs-on: selfhosted-ubuntu-arm64
|
|
steps:
|
|
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
|
with:
|
|
persist-credentials: false
|
|
- name: Setup with cache
|
|
uses: ./
|
|
with:
|
|
tool-bin-dir: "~/tool-bin-dir"
|
|
tool-dir: "~/tool-dir"
|
|
- name: "Check if tool dirs are expanded"
|
|
run: |
|
|
if ! echo "$PATH" | grep -q "/home/ubuntu/tool-bin-dir"; then
|
|
echo "PATH does not contain /home/ubuntu/tool-bin-dir: $PATH"
|
|
exit 1
|
|
fi
|
|
if [ "$UV_TOOL_DIR" != "/home/ubuntu/tool-dir" ]; then
|
|
echo "UV_TOOL_DIR does not contain /home/ubuntu/tool-dir: $UV_TOOL_DIR"
|
|
exit 1
|
|
fi
|
|
|
|
test-python-version:
|
|
runs-on: ${{ matrix.os }}
|
|
strategy:
|
|
matrix:
|
|
os: [ubuntu-latest, macos-latest, windows-latest]
|
|
steps:
|
|
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
|
with:
|
|
persist-credentials: false
|
|
- name: Install latest version
|
|
uses: ./
|
|
with:
|
|
python-version: 3.13.1t
|
|
- name: Verify UV_PYTHON is set to correct version
|
|
run: |
|
|
echo "$UV_PYTHON"
|
|
if [ "$UV_PYTHON" != "3.13.1t" ]; then
|
|
exit 1
|
|
fi
|
|
shell: bash
|
|
- run: uv sync
|
|
working-directory: __tests__/fixtures/uv-project
|
|
|
|
test-activate-environment:
|
|
runs-on: ${{ matrix.os }}
|
|
strategy:
|
|
matrix:
|
|
os: [ubuntu-latest, macos-latest, windows-latest]
|
|
steps:
|
|
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
|
with:
|
|
persist-credentials: false
|
|
- name: Install latest version
|
|
id: setup-uv
|
|
uses: ./
|
|
with:
|
|
python-version: 3.13.1t
|
|
activate-environment: true
|
|
- name: Verify packages can be installed
|
|
run: uv pip install pip
|
|
shell: bash
|
|
- name: Verify python version is correct
|
|
run: |
|
|
python --version
|
|
if [ "$(python --version)" != "Python 3.13.1" ]; then
|
|
exit 1
|
|
fi
|
|
shell: bash
|
|
- name: Verify output venv is set
|
|
run: |
|
|
if [ -z "$UV_VENV" ]; then
|
|
echo "output venv is not set"
|
|
exit 1
|
|
fi
|
|
if [ ! -d "$UV_VENV" ]; then
|
|
echo "output venv not point to a directory: $UV_VENV"
|
|
exit 1
|
|
fi
|
|
shell: bash
|
|
env:
|
|
UV_VENV: ${{ steps.setup-uv.outputs.venv }}
|
|
|
|
test-musl:
|
|
runs-on: ubuntu-latest
|
|
container: alpine
|
|
steps:
|
|
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
|
with:
|
|
persist-credentials: false
|
|
- name: Install latest version
|
|
uses: ./
|
|
- run: uv sync
|
|
working-directory: __tests__/fixtures/uv-project
|
|
|
|
test-setup-cache:
|
|
runs-on: ${{ matrix.os }}
|
|
strategy:
|
|
matrix:
|
|
enable-cache: ["true", "false", "auto"]
|
|
os: ["ubuntu-latest", "selfhosted-ubuntu-arm64", "windows-latest"]
|
|
steps:
|
|
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
|
with:
|
|
persist-credentials: false
|
|
- name: Setup with cache
|
|
uses: ./
|
|
with:
|
|
enable-cache: ${{ matrix.enable-cache }}
|
|
cache-suffix: ${{ github.run_id }}-${{ github.run_attempt }}-test-setup-cache-${{ matrix.os }}-${{ matrix.enable-cache }}
|
|
- run: uv sync
|
|
working-directory: __tests__/fixtures/uv-project
|
|
shell: bash
|
|
test-restore-cache:
|
|
runs-on: ${{ matrix.os }}
|
|
strategy:
|
|
matrix:
|
|
enable-cache: ["true", "false", "auto"]
|
|
os: ["ubuntu-latest", "selfhosted-ubuntu-arm64", "windows-latest"]
|
|
needs: test-setup-cache
|
|
steps:
|
|
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
|
with:
|
|
persist-credentials: false
|
|
- name: Restore with cache
|
|
id: restore
|
|
uses: ./
|
|
with:
|
|
enable-cache: ${{ matrix.enable-cache }}
|
|
cache-suffix: ${{ github.run_id }}-${{ github.run_attempt }}-test-setup-cache-${{ matrix.os }}-${{ matrix.enable-cache }}
|
|
- name: Cache was hit
|
|
if: ${{ matrix.enable-cache == 'true' || (matrix.enable-cache == 'auto' && matrix.os == 'ubuntu-latest') }}
|
|
run: |
|
|
if [ "$CACHE_HIT" != "true" ]; then
|
|
exit 1
|
|
fi
|
|
env:
|
|
CACHE_HIT: ${{ steps.restore.outputs.cache-hit }}
|
|
shell: bash
|
|
- name: Cache was not hit
|
|
if: ${{ matrix.enable-cache == 'false' || (matrix.enable-cache == 'auto' && matrix.os == 'selfhosted-ubuntu-arm64') }}
|
|
run: |
|
|
if [ "$CACHE_HIT" == "true" ]; then
|
|
exit 1
|
|
fi
|
|
env:
|
|
CACHE_HIT: ${{ steps.restore.outputs.cache-hit }}
|
|
shell: bash
|
|
- run: uv sync
|
|
working-directory: __tests__/fixtures/uv-project
|
|
shell: bash
|
|
|
|
test-setup-cache-requirements-txt:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
|
with:
|
|
persist-credentials: false
|
|
- name: Setup with cache
|
|
uses: ./
|
|
with:
|
|
enable-cache: true
|
|
cache-suffix: ${{ github.run_id }}-${{ github.run_attempt }}-test-setup-cache-requirements-txt
|
|
- run: |
|
|
uv venv
|
|
uv pip install -r requirements.txt
|
|
working-directory: __tests__/fixtures/requirements-txt-project
|
|
test-restore-cache-requirements-txt:
|
|
runs-on: ubuntu-latest
|
|
needs: test-setup-cache-requirements-txt
|
|
steps:
|
|
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
|
with:
|
|
persist-credentials: false
|
|
- name: Restore with cache
|
|
id: restore
|
|
uses: ./
|
|
with:
|
|
enable-cache: true
|
|
cache-suffix: ${{ github.run_id }}-${{ github.run_attempt }}-test-setup-cache-requirements-txt
|
|
- name: Cache was hit
|
|
run: |
|
|
if [ "$CACHE_HIT" != "true" ]; then
|
|
exit 1
|
|
fi
|
|
env:
|
|
CACHE_HIT: ${{ steps.restore.outputs.cache-hit }}
|
|
- run: |
|
|
uv venv
|
|
uv pip install -r requirements.txt
|
|
working-directory: __tests__/fixtures/requirements-txt-project
|
|
|
|
test-setup-cache-dependency-glob:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
|
with:
|
|
persist-credentials: false
|
|
- name: Setup with cache
|
|
uses: ./
|
|
with:
|
|
enable-cache: true
|
|
cache-dependency-glob: |
|
|
__tests__/fixtures/uv-project/uv.lock
|
|
**/pyproject.toml
|
|
cache-suffix: ${{ github.run_id }}-${{ github.run_attempt }}-test-setup-cache-dependency-glob
|
|
- run: uv sync
|
|
working-directory: __tests__/fixtures/uv-project
|
|
test-restore-cache-dependency-glob:
|
|
runs-on: ubuntu-latest
|
|
needs: test-setup-cache-dependency-glob
|
|
steps:
|
|
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
|
with:
|
|
persist-credentials: false
|
|
- name: Change pyproject.toml
|
|
run: |
|
|
echo '[tool.uv]' >> __tests__/fixtures/uv-project/pyproject.toml
|
|
echo 'dev-dependencies = []' >> __tests__/fixtures/uv-project/pyproject.toml
|
|
- name: Restore with cache
|
|
id: restore
|
|
uses: ./
|
|
with:
|
|
enable-cache: true
|
|
cache-dependency-glob: |
|
|
__tests__/fixtures/uv-project/uv.lock
|
|
**/pyproject.toml
|
|
cache-suffix: ${{ github.run_id }}-${{ github.run_attempt }}-test-setup-cache-dependency-glob
|
|
ignore-nothing-to-cache: true
|
|
- name: Cache was not hit
|
|
run: |
|
|
if [ "$CACHE_HIT" == "true" ]; then
|
|
exit 1
|
|
fi
|
|
env:
|
|
CACHE_HIT: ${{ steps.restore.outputs.cache-hit }}
|
|
|
|
test-setup-cache-save-cache-false:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
|
with:
|
|
persist-credentials: false
|
|
- name: Setup with cache
|
|
uses: ./
|
|
with:
|
|
enable-cache: true
|
|
save-cache: false
|
|
cache-suffix: ${{ github.run_id }}-${{ github.run_attempt }}-test-setup-cache-save-cache-false
|
|
- run: uv sync
|
|
working-directory: __tests__/fixtures/uv-project
|
|
shell: bash
|
|
test-restore-cache-save-cache-false:
|
|
runs-on: ubuntu-latest
|
|
needs: test-setup-cache-save-cache-false
|
|
steps:
|
|
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
|
with:
|
|
persist-credentials: false
|
|
- name: Restore with cache
|
|
id: restore
|
|
uses: ./
|
|
with:
|
|
enable-cache: true
|
|
cache-suffix: ${{ github.run_id }}-${{ github.run_attempt }}-test-setup-cache-save-cache-false
|
|
- name: Cache was not hit
|
|
run: |
|
|
if [ "$CACHE_HIT" == "true" ]; then
|
|
exit 1
|
|
fi
|
|
env:
|
|
CACHE_HIT: ${{ steps.restore.outputs.cache-hit }}
|
|
|
|
test-setup-cache-restore-cache-false:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
|
with:
|
|
persist-credentials: false
|
|
- name: Setup with cache
|
|
uses: ./
|
|
with:
|
|
enable-cache: true
|
|
cache-suffix: ${{ github.run_id }}-${{ github.run_attempt }}-test-setup-cache-restore-cache-false
|
|
- run: uv sync
|
|
working-directory: __tests__/fixtures/uv-project
|
|
shell: bash
|
|
test-restore-cache-restore-cache-false:
|
|
runs-on: ubuntu-latest
|
|
needs: test-setup-cache-restore-cache-false
|
|
steps:
|
|
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
|
with:
|
|
persist-credentials: false
|
|
- name: Restore with cache
|
|
id: restore
|
|
uses: ./
|
|
with:
|
|
enable-cache: true
|
|
restore-cache: false
|
|
cache-suffix: ${{ github.run_id }}-${{ github.run_attempt }}-test-setup-cache-restore-cache-false
|
|
- name: Cache was not hit
|
|
run: |
|
|
if [ "$CACHE_HIT" == "true" ]; then
|
|
exit 1
|
|
fi
|
|
env:
|
|
CACHE_HIT: ${{ steps.restore.outputs.cache-hit }}
|
|
|
|
test-cache-local:
|
|
strategy:
|
|
matrix:
|
|
inputs:
|
|
- os: ubuntu-latest
|
|
expected-cache-dir: "/home/runner/work/_temp/setup-uv-cache"
|
|
- os: windows-latest
|
|
expected-cache-dir: "D:\\a\\_temp\\setup-uv-cache"
|
|
- os: selfhosted-ubuntu-arm64
|
|
expected-cache-dir: "/home/ubuntu/.cache/uv"
|
|
runs-on: ${{ matrix.inputs.os }}
|
|
steps:
|
|
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
|
with:
|
|
persist-credentials: false
|
|
- name: Setup with cache
|
|
uses: ./
|
|
with:
|
|
enable-cache: true
|
|
cache-suffix: ${{ github.run_id }}-${{ github.run_attempt }}-test-cache-local
|
|
- run: |
|
|
if [ "$UV_CACHE_DIR" != "${{ matrix.inputs.expected-cache-dir }}" ]; then
|
|
echo "UV_CACHE_DIR is not set to the expected value: $UV_CACHE_DIR"
|
|
exit 1
|
|
fi
|
|
shell: bash
|
|
|
|
test-cache-local-cache-disabled:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
|
with:
|
|
persist-credentials: false
|
|
- name: Setup without cache
|
|
uses: ./
|
|
with:
|
|
enable-cache: false
|
|
|
|
- name: Check UV_CACHE_DIR is not set
|
|
run: |
|
|
if [ -n "$UV_CACHE_DIR" ]; then
|
|
echo "UV_CACHE_DIR should not be set when cache is disabled: $UV_CACHE_DIR"
|
|
exit 1
|
|
fi
|
|
shell: bash
|
|
|
|
test-setup-cache-local:
|
|
runs-on: selfhosted-ubuntu-arm64
|
|
steps:
|
|
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
|
with:
|
|
persist-credentials: false
|
|
- name: Setup with cache
|
|
uses: ./
|
|
with:
|
|
enable-cache: true
|
|
cache-suffix: ${{ github.run_id }}-${{ github.run_attempt }}-test-setup-cache-local
|
|
cache-local-path: /tmp/uv-cache
|
|
- run: uv sync
|
|
working-directory: __tests__/fixtures/uv-project
|
|
test-restore-cache-local:
|
|
runs-on: selfhosted-ubuntu-arm64
|
|
needs: test-setup-cache-local
|
|
steps:
|
|
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
|
with:
|
|
persist-credentials: false
|
|
- name: Restore with cache
|
|
id: restore
|
|
uses: ./
|
|
with:
|
|
enable-cache: true
|
|
cache-suffix: ${{ github.run_id }}-${{ github.run_attempt }}-test-setup-cache-local
|
|
cache-local-path: /tmp/uv-cache
|
|
- name: Cache was hit
|
|
run: |
|
|
if [ "$CACHE_HIT" != "true" ]; then
|
|
exit 1
|
|
fi
|
|
env:
|
|
CACHE_HIT: ${{ steps.restore.outputs.cache-hit }}
|
|
- run: uv sync
|
|
working-directory: __tests__/fixtures/uv-project
|
|
|
|
test-tilde-expansion-cache-local-path:
|
|
runs-on: selfhosted-ubuntu-arm64
|
|
steps:
|
|
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
|
with:
|
|
persist-credentials: false
|
|
- name: Create cache directory
|
|
run: mkdir -p ~/uv-cache
|
|
shell: bash
|
|
- name: Setup with cache
|
|
uses: ./
|
|
with:
|
|
cache-local-path: ~/uv-cache/cache-local-path
|
|
- run: uv sync
|
|
working-directory: __tests__/fixtures/uv-project
|
|
|
|
test-tilde-expansion-cache-dependency-glob:
|
|
runs-on: selfhosted-ubuntu-arm64
|
|
steps:
|
|
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
|
with:
|
|
persist-credentials: false
|
|
- name: Create cache directory
|
|
run: mkdir -p ~/uv-cache
|
|
shell: bash
|
|
- name: Create cache dependency glob file
|
|
run: touch ~/uv-cache.glob
|
|
shell: bash
|
|
- name: Setup with cache
|
|
uses: ./
|
|
with:
|
|
enable-cache: true
|
|
cache-local-path: ~/uv-cache/cache-dependency-glob
|
|
cache-dependency-glob: "~/uv-cache.glob"
|
|
- run: uv sync
|
|
working-directory: __tests__/fixtures/uv-project
|
|
|
|
cleanup-tilde-expansion-tests:
|
|
needs:
|
|
- test-tilde-expansion-cache-local-path
|
|
- test-tilde-expansion-cache-dependency-glob
|
|
if: always()
|
|
runs-on: selfhosted-ubuntu-arm64
|
|
steps:
|
|
- name: Remove cache directory
|
|
run: rm -rf ~/uv-cache
|
|
shell: bash
|
|
- name: Remove cache dependency glob file
|
|
run: rm -f ~/uv-cache.glob
|
|
shell: bash
|
|
|
|
test-no-python-version:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
|
with:
|
|
persist-credentials: false
|
|
- name: Fake pyproject.toml at root
|
|
run: cp __tests__/fixtures/old-python-constraint-project/pyproject.toml pyproject.toml
|
|
- name: Setup with cache
|
|
uses: ./
|
|
with:
|
|
enable-cache: true
|
|
- run: uv sync
|
|
working-directory: __tests__/fixtures/old-python-constraint-project
|
|
|
|
test-custom-manifest-file:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
|
with:
|
|
persist-credentials: false
|
|
- name: Install from custom manifest file
|
|
uses: ./
|
|
with:
|
|
manifest-file: "https://raw.githubusercontent.com/astral-sh/setup-uv/${{ github.ref }}/__tests__/download/custom-manifest.json"
|
|
- run: uv sync
|
|
working-directory: __tests__/fixtures/uv-project
|
|
- name: Correct version gets installed
|
|
run: |
|
|
if [ "$(uv --version)" != "uv 0.7.12-alpha.1" ]; then
|
|
echo "Wrong uv version: $(uv --version)"
|
|
exit 1
|
|
fi
|
|
|
|
test-absolute-path:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
|
with:
|
|
persist-credentials: false
|
|
- name: Create requirements.txt
|
|
run: echo "uv==0.6.17" > /tmp/setup-uv-requirements.txt
|
|
- name: Install from requirements file
|
|
id: setup-uv
|
|
uses: ./
|
|
with:
|
|
version-file: "/tmp/setup-uv-requirements.txt"
|
|
- name: Correct version gets installed
|
|
run: |
|
|
if [ "$(uv --version)" != "uv 0.6.17" ]; then
|
|
echo "Wrong uv version: $(uv --version)"
|
|
exit 1
|
|
fi
|
|
|
|
test-relative-path:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
|
with:
|
|
persist-credentials: false
|
|
- name: mkdir
|
|
run: mkdir -p /tmp/setup-uv-test-relative-path
|
|
- name: Create requirements.txt
|
|
run: echo "uv==0.6.17" > /tmp/setup-uv-test-relative-path/setup-uv-requirements.txt
|
|
- name: Install from requirements file
|
|
id: setup-uv
|
|
uses: ./
|
|
with:
|
|
version-file: "./setup-uv-requirements.txt"
|
|
working-directory: "/tmp/setup-uv-test-relative-path"
|
|
cache-dependency-glob: "./setup-uv-requirements.txt"
|
|
- name: Correct version gets installed
|
|
run: |
|
|
if [ "$(uv --version)" != "uv 0.6.17" ]; then
|
|
echo "Wrong uv version: $(uv --version)"
|
|
exit 1
|
|
fi
|
|
|
|
test-cache-prune-force:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
|
with:
|
|
persist-credentials: false
|
|
- name: Setup uv
|
|
uses: ./
|
|
with:
|
|
cache-suffix: ${{ github.run_id }}-${{ github.run_attempt }}-test-cache-prune-force
|
|
- name: Create long running python script
|
|
run: |
|
|
echo 'import time' > __tests__/fixtures/uv-project/long-running.py
|
|
echo 'time.sleep(300)' >> __tests__/fixtures/uv-project/long-running.py
|
|
- run: uv run long-running.py &
|
|
working-directory: __tests__/fixtures/uv-project
|
|
|
|
test-cache-dir-from-file:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
|
with:
|
|
persist-credentials: false
|
|
- name: Verify uv cache dir is not populated
|
|
run: |
|
|
if [ -f "/tmp/pyproject-toml-defined-cache-path/CACHEDIR.TAG" ]; then
|
|
echo "Cache dir should not exist"
|
|
exit 1
|
|
fi
|
|
- name: Setup uv
|
|
uses: ./
|
|
with:
|
|
working-directory: __tests__/fixtures/cache-dir-defined-project
|
|
- run: uv sync
|
|
working-directory: __tests__/fixtures/cache-dir-defined-project
|
|
- name: Verify uv cache dir is populated
|
|
run: |
|
|
if [ ! -f "/tmp/pyproject-toml-defined-cache-path/CACHEDIR.TAG" ]; then
|
|
echo "Cache dir should exist"
|
|
exit 1
|
|
fi
|
|
|
|
test-cache-python-installs:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
|
with:
|
|
persist-credentials: false
|
|
- name: Verify Python install dir is not populated
|
|
run: |
|
|
if [ -d /home/runner/work/_temp/uv-python-dir ]; then
|
|
echo "Python install dir should not exist"
|
|
exit 1
|
|
fi
|
|
- name: Setup uv with cache
|
|
uses: ./
|
|
with:
|
|
enable-cache: true
|
|
cache-python: true
|
|
cache-suffix: ${{ github.run_id }}-${{ github.run_attempt }}-test-cache-python-installs
|
|
- run: uv sync --managed-python
|
|
working-directory: __tests__/fixtures/uv-project
|
|
- name: Verify Python install dir exists
|
|
run: |
|
|
if [ ! -d /home/runner/work/_temp/uv-python-dir ]; then
|
|
echo "Python install dir should exist"
|
|
exit 1
|
|
fi
|
|
test-restore-python-installs:
|
|
runs-on: ubuntu-latest
|
|
needs: test-cache-python-installs
|
|
steps:
|
|
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
|
with:
|
|
persist-credentials: false
|
|
- name: Verify Python install dir does not exist
|
|
run: |
|
|
if [ -d /home/runner/work/_temp/uv-python-dir ]; then
|
|
echo "Python install dir should not exist"
|
|
exit 1
|
|
fi
|
|
- name: Restore with cache
|
|
id: restore
|
|
uses: ./
|
|
with:
|
|
enable-cache: true
|
|
cache-python: true
|
|
cache-suffix: ${{ github.run_id }}-${{ github.run_attempt }}-test-cache-python-installs
|
|
- name: Verify Python install dir exists
|
|
run: |
|
|
if [ ! -d /home/runner/work/_temp/uv-python-dir ]; then
|
|
echo "Python install dir should exist"
|
|
exit 1
|
|
fi
|
|
- name: Cache was hit
|
|
run: |
|
|
if [ "$CACHE_HIT" != "true" ]; then
|
|
exit 1
|
|
fi
|
|
env:
|
|
CACHE_HIT: ${{ steps.restore.outputs.cache-hit }}
|
|
- run: uv sync --managed-python
|
|
working-directory: __tests__/fixtures/uv-project
|
|
|
|
test-python-install-dir:
|
|
strategy:
|
|
matrix:
|
|
inputs:
|
|
- os: ubuntu-latest
|
|
expected-python-dir: "/home/runner/work/_temp/uv-python-dir"
|
|
- os: windows-latest
|
|
expected-python-dir: "D:\\a\\_temp\\uv-python-dir"
|
|
- os: selfhosted-ubuntu-arm64
|
|
expected-python-dir: "/home/ubuntu/.local/share/uv/python"
|
|
runs-on: ${{ matrix.inputs.os }}
|
|
steps:
|
|
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
|
with:
|
|
persist-credentials: false
|
|
- name: Install latest version
|
|
id: setup-uv
|
|
uses: ./
|
|
- name: Check Python dir is expected dir
|
|
run: |
|
|
if [ "$UV_PYTHON_INSTALL_DIR" != "${{ matrix.inputs.expected-python-dir }}" ]; then
|
|
echo "Wrong UV_PYTHON_INSTALL_DIR: UV_PYTHON_INSTALL_DIR"
|
|
exit 1
|
|
fi
|
|
shell: bash
|
|
- name: Install python works
|
|
run: uv python install
|
|
|
|
all-tests-passed:
|
|
runs-on: ubuntu-latest
|
|
needs:
|
|
- lint
|
|
- test-default-version
|
|
- test-uv-no-modify-path
|
|
- test-specific-version
|
|
- test-latest-version
|
|
- test-from-working-directory-version
|
|
- test-malformed-pyproject-file-fallback
|
|
- test-version-file-version
|
|
- test-checksum
|
|
- test-with-explicit-token
|
|
- test-uvx
|
|
- test-tool-install
|
|
- test-tilde-expansion-tool-dirs
|
|
- test-python-version
|
|
- test-activate-environment
|
|
- test-musl
|
|
- test-cache-local
|
|
- test-cache-local-cache-disabled
|
|
- test-setup-cache
|
|
- test-restore-cache
|
|
- test-setup-cache-requirements-txt
|
|
- test-restore-cache-requirements-txt
|
|
- test-setup-cache-dependency-glob
|
|
- test-restore-cache-dependency-glob
|
|
- test-setup-cache-save-cache-false
|
|
- test-restore-cache-save-cache-false
|
|
- test-setup-cache-restore-cache-false
|
|
- test-restore-cache-restore-cache-false
|
|
- test-setup-cache-local
|
|
- test-restore-cache-local
|
|
- test-tilde-expansion-cache-local-path
|
|
- test-tilde-expansion-cache-dependency-glob
|
|
- cleanup-tilde-expansion-tests
|
|
- test-no-python-version
|
|
- test-custom-manifest-file
|
|
- test-absolute-path
|
|
- test-relative-path
|
|
- test-cache-prune-force
|
|
- test-cache-dir-from-file
|
|
- test-cache-python-installs
|
|
- test-restore-python-installs
|
|
- test-python-install-dir
|
|
if: always()
|
|
steps:
|
|
- name: All tests passed
|
|
run: |
|
|
echo "All jobs passed: ${{ !(contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled')) }}"
|
|
# shellcheck disable=SC2242
|
|
exit ${{ (contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled')) && 1 || 0 }}
|