Skip to content

Commit

Permalink
Auto activate venv when python-version is set (#194)
Browse files Browse the repository at this point in the history
Closes: #124
  • Loading branch information
eifinger authored Dec 20, 2024
1 parent 85aa0bf commit dd57877
Show file tree
Hide file tree
Showing 5 changed files with 62 additions and 18 deletions.
20 changes: 15 additions & 5 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -143,17 +143,27 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ["3.12", "3.13t"]
os: [ubuntu-latest, macos-latest, windows-latest]
steps:
- uses: actions/checkout@v4
- name: Install latest version
uses: ./
with:
python-version: ${{ matrix.python-version }}
python-version: 3.13.1t
- name: Verify UV_PYTHON is set to correct version
run: |
if [ "$UV_PYTHON" != "${{ matrix.python-version }}" ]; then
echo "$UV_PYTHON"
if [ "$UV_PYTHON" != "3.13.1t" ]; then
exit 1
fi
- run: uv sync
working-directory: __tests__/fixtures/uv-project
shell: bash
- name: Verify packages can be installed
run: uv pip install --python=3.13.1t 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
13 changes: 9 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -72,15 +72,20 @@ to install the latest version that satisfies the range.
### Python version
You can use the input `python-version` to set the environment variable `UV_PYTHON` for the rest
of your workflow.
You can use the input `python-version` to

- set the environment variable `UV_PYTHON` for the rest of your workflow
- create a new virtual environment with the specified python version
- activate the virtual environment for the rest of your workflow

This will override any python version specifications in `pyproject.toml` and `.python-version`

```yaml
- name: Install the latest version of uv and set the python version to 3.12
- name: Install the latest version of uv and set the python version to 3.13t
uses: astral-sh/setup-uv@v4
with:
python-version: "3.12"
python-version: 3.13t
- run: uv pip install --python=3.13t pip
```

You can combine this with a matrix to test multiple python versions:
Expand Down
3 changes: 1 addition & 2 deletions action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,7 @@ inputs:
required: false
github-token:
description:
"Used to increase the rate limit when retrieving versions and downloading
uv."
"Used to increase the rate limit when retrieving versions and downloading uv."
required: false
default: ${{ github.token }}
enable-cache:
Expand Down
25 changes: 20 additions & 5 deletions dist/setup/index.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

19 changes: 17 additions & 2 deletions src/setup-uv.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import {
toolDir,
version,
} from "./utils/inputs";
import * as exec from "@actions/exec";

async function run(): Promise<void> {
const platform = getPlatform();
Expand All @@ -46,7 +47,7 @@ async function run(): Promise<void> {
addUvToPath(setupResult.uvDir);
addToolBinToPath();
setToolDir();
setupPython();
await setupPython();
addMatchers();
setCacheDir(cacheLocalPath);

Expand Down Expand Up @@ -125,10 +126,24 @@ function setToolDir(): void {
}
}

function setupPython(): void {
async function setupPython(): Promise<void> {
if (pythonVersion !== "") {
core.exportVariable("UV_PYTHON", pythonVersion);
core.info(`Set UV_PYTHON to ${pythonVersion}`);
const options: exec.ExecOptions = {
silent: !core.isDebug(),
};
const execArgs = ["venv", "--python", pythonVersion];

core.info("Activating python venv...");
await exec.exec("uv", execArgs, options);

let venvBinPath = ".venv/bin";
if (process.platform === "win32") {
venvBinPath = ".venv/Scripts";
}
core.addPath(venvBinPath);
core.exportVariable("VIRTUAL_ENV", venvBinPath);
}
}

Expand Down

0 comments on commit dd57877

Please sign in to comment.