mirror of
https://github.com/astral-sh/setup-uv.git
synced 2025-12-17 11:05:59 +00:00
Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
445689ea25 |
1
.github/workflows/test.yml
vendored
1
.github/workflows/test.yml
vendored
@@ -540,7 +540,6 @@ jobs:
|
||||
- name: Install from custom manifest file
|
||||
uses: ./
|
||||
with:
|
||||
version: 0.7.12-alpha.1
|
||||
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
|
||||
|
||||
@@ -430,6 +430,11 @@ This is useful if you maintain your own uv builds or want to override the defaul
|
||||
manifest-file: "https://example.com/my-custom-manifest.json"
|
||||
```
|
||||
|
||||
> [!NOTE]
|
||||
> When you use a custom manifest file and do not set the `version` input, its default value is `latest`.
|
||||
> This means the action will install the latest version available in the custom manifest file.
|
||||
> This is different from the default behavior of installing the latest version from the official uv releases.
|
||||
|
||||
## How it works
|
||||
|
||||
This action downloads uv from the uv repo's official
|
||||
|
||||
26
dist/setup/index.js
generated
vendored
26
dist/setup/index.js
generated
vendored
@@ -124735,11 +124735,21 @@ async function downloadVersion(downloadUrl, artifactName, platform, arch, versio
|
||||
function getExtension(platform) {
|
||||
return platform === "pc-windows-msvc" ? ".zip" : ".tar.gz";
|
||||
}
|
||||
async function resolveVersion(versionInput, githubToken) {
|
||||
async function resolveVersion(versionInput, manifestFile, githubToken) {
|
||||
core.debug(`Resolving version: ${versionInput}`);
|
||||
const version = versionInput === "latest"
|
||||
? await getLatestVersion(githubToken)
|
||||
: versionInput;
|
||||
let version;
|
||||
if (manifestFile) {
|
||||
version =
|
||||
versionInput === "latest"
|
||||
? await (0, version_manifest_1.getLatestKnownVersion)(manifestFile)
|
||||
: versionInput;
|
||||
}
|
||||
else {
|
||||
version =
|
||||
versionInput === "latest"
|
||||
? await getLatestVersion(githubToken)
|
||||
: versionInput;
|
||||
}
|
||||
if (tc.isExplicitVersion(version)) {
|
||||
core.debug(`Version ${version} is an explicit version.`);
|
||||
return version;
|
||||
@@ -125105,7 +125115,7 @@ function detectEmptyWorkdir() {
|
||||
}
|
||||
}
|
||||
async function setupUv(platform, arch, checkSum, githubToken) {
|
||||
const resolvedVersion = await determineVersion();
|
||||
const resolvedVersion = await determineVersion(inputs_1.manifestFile);
|
||||
const toolCacheResult = (0, download_version_1.tryGetFromToolCache)(arch, resolvedVersion);
|
||||
if (toolCacheResult.installedPath) {
|
||||
core.info(`Found uv in tool-cache for ${toolCacheResult.version}`);
|
||||
@@ -125127,16 +125137,16 @@ async function setupUv(platform, arch, checkSum, githubToken) {
|
||||
version: downloadVersionResult.version,
|
||||
};
|
||||
}
|
||||
async function determineVersion() {
|
||||
async function determineVersion(manifestFile) {
|
||||
if (inputs_1.version !== "") {
|
||||
return await (0, download_version_1.resolveVersion)(inputs_1.version, inputs_1.githubToken);
|
||||
return await (0, download_version_1.resolveVersion)(inputs_1.version, manifestFile, inputs_1.githubToken);
|
||||
}
|
||||
const versionFromUvToml = (0, config_file_1.getUvVersionFromConfigFile)(`${inputs_1.workingDirectory}${path.sep}uv.toml`);
|
||||
const versionFromPyproject = (0, config_file_1.getUvVersionFromConfigFile)(`${inputs_1.workingDirectory}${path.sep}pyproject.toml`);
|
||||
if (versionFromUvToml === undefined && versionFromPyproject === undefined) {
|
||||
core.info("Could not determine uv version from uv.toml or pyproject.toml. Falling back to latest.");
|
||||
}
|
||||
return await (0, download_version_1.resolveVersion)(versionFromUvToml || versionFromPyproject || "latest", inputs_1.githubToken);
|
||||
return await (0, download_version_1.resolveVersion)(versionFromUvToml || versionFromPyproject || "latest", manifestFile, inputs_1.githubToken);
|
||||
}
|
||||
function addUvToPathAndOutput(cachedPath) {
|
||||
core.setOutput("uv-path", `${cachedPath}${path.sep}uv`);
|
||||
|
||||
@@ -7,7 +7,10 @@ import { OWNER, REPO, TOOL_CACHE_NAME } from "../utils/constants";
|
||||
import type { Architecture, Platform } from "../utils/platforms";
|
||||
import { validateChecksum } from "./checksum/checksum";
|
||||
import { Octokit } from "../utils/octokit";
|
||||
import { getDownloadUrl } from "./version-manifest";
|
||||
import {
|
||||
getDownloadUrl,
|
||||
getLatestKnownVersion as getLatestVersionInManifest,
|
||||
} from "./version-manifest";
|
||||
|
||||
export function tryGetFromToolCache(
|
||||
arch: Architecture,
|
||||
@@ -127,13 +130,22 @@ function getExtension(platform: Platform): string {
|
||||
|
||||
export async function resolveVersion(
|
||||
versionInput: string,
|
||||
manifestFile: string | undefined,
|
||||
githubToken: string,
|
||||
): Promise<string> {
|
||||
core.debug(`Resolving version: ${versionInput}`);
|
||||
const version =
|
||||
versionInput === "latest"
|
||||
? await getLatestVersion(githubToken)
|
||||
: versionInput;
|
||||
let version: string;
|
||||
if (manifestFile) {
|
||||
version =
|
||||
versionInput === "latest"
|
||||
? await getLatestVersionInManifest(manifestFile)
|
||||
: versionInput;
|
||||
} else {
|
||||
version =
|
||||
versionInput === "latest"
|
||||
? await getLatestVersion(githubToken)
|
||||
: versionInput;
|
||||
}
|
||||
if (tc.isExplicitVersion(version)) {
|
||||
core.debug(`Version ${version} is an explicit version.`);
|
||||
return version;
|
||||
|
||||
@@ -87,7 +87,7 @@ async function setupUv(
|
||||
checkSum: string | undefined,
|
||||
githubToken: string,
|
||||
): Promise<{ uvDir: string; version: string }> {
|
||||
const resolvedVersion = await determineVersion();
|
||||
const resolvedVersion = await determineVersion(manifestFile);
|
||||
const toolCacheResult = tryGetFromToolCache(arch, resolvedVersion);
|
||||
if (toolCacheResult.installedPath) {
|
||||
core.info(`Found uv in tool-cache for ${toolCacheResult.version}`);
|
||||
@@ -127,9 +127,11 @@ async function setupUv(
|
||||
};
|
||||
}
|
||||
|
||||
async function determineVersion(): Promise<string> {
|
||||
async function determineVersion(
|
||||
manifestFile: string | undefined,
|
||||
): Promise<string> {
|
||||
if (versionInput !== "") {
|
||||
return await resolveVersion(versionInput, githubToken);
|
||||
return await resolveVersion(versionInput, manifestFile, githubToken);
|
||||
}
|
||||
const versionFromUvToml = getUvVersionFromConfigFile(
|
||||
`${workingDirectory}${path.sep}uv.toml`,
|
||||
@@ -144,6 +146,7 @@ async function determineVersion(): Promise<string> {
|
||||
}
|
||||
return await resolveVersion(
|
||||
versionFromUvToml || versionFromPyproject || "latest",
|
||||
manifestFile,
|
||||
githubToken,
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user