mirror of
https://github.com/astral-sh/setup-uv.git
synced 2025-12-21 11:01:40 +00:00
Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
445689ea25 | ||
|
|
a02a550bdd |
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
|
||||
|
||||
30
dist/setup/index.js
generated
vendored
30
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;
|
||||
@@ -124868,6 +124878,8 @@ const node_fs_1 = __nccwpck_require__(73024);
|
||||
const core = __importStar(__nccwpck_require__(37484));
|
||||
const semver = __importStar(__nccwpck_require__(39318));
|
||||
const fetch_1 = __nccwpck_require__(3385);
|
||||
const node_path_1 = __nccwpck_require__(76760);
|
||||
const localManifestFile = (0, node_path_1.join)(__dirname, "..", "..", "version-manifest.json");
|
||||
async function getLatestKnownVersion(manifestUrl) {
|
||||
const manifestEntries = await getManifestEntries(manifestUrl);
|
||||
return manifestEntries.reduce((a, b) => semver.gt(a.version, b.version) ? a : b).version;
|
||||
@@ -124891,7 +124903,7 @@ async function getManifestEntries(manifestUrl) {
|
||||
}
|
||||
else {
|
||||
core.info("manifest-file not provided, reading from local file.");
|
||||
const fileContent = await node_fs_1.promises.readFile("version-manifest.json");
|
||||
const fileContent = await node_fs_1.promises.readFile(localManifestFile);
|
||||
data = fileContent.toString();
|
||||
}
|
||||
return JSON.parse(data);
|
||||
@@ -125103,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}`);
|
||||
@@ -125125,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`);
|
||||
|
||||
12
dist/update-known-versions/index.js
generated
vendored
12
dist/update-known-versions/index.js
generated
vendored
@@ -62432,6 +62432,8 @@ const node_fs_1 = __nccwpck_require__(3024);
|
||||
const core = __importStar(__nccwpck_require__(7484));
|
||||
const semver = __importStar(__nccwpck_require__(9318));
|
||||
const fetch_1 = __nccwpck_require__(3385);
|
||||
const node_path_1 = __nccwpck_require__(6760);
|
||||
const localManifestFile = (0, node_path_1.join)(__dirname, "..", "..", "version-manifest.json");
|
||||
async function getLatestKnownVersion(manifestUrl) {
|
||||
const manifestEntries = await getManifestEntries(manifestUrl);
|
||||
return manifestEntries.reduce((a, b) => semver.gt(a.version, b.version) ? a : b).version;
|
||||
@@ -62455,7 +62457,7 @@ async function getManifestEntries(manifestUrl) {
|
||||
}
|
||||
else {
|
||||
core.info("manifest-file not provided, reading from local file.");
|
||||
const fileContent = await node_fs_1.promises.readFile("version-manifest.json");
|
||||
const fileContent = await node_fs_1.promises.readFile(localManifestFile);
|
||||
data = fileContent.toString();
|
||||
}
|
||||
return JSON.parse(data);
|
||||
@@ -62840,6 +62842,14 @@ module.exports = require("node:net");
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ 6760:
|
||||
/***/ ((module) => {
|
||||
|
||||
"use strict";
|
||||
module.exports = require("node:path");
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ 643:
|
||||
/***/ ((module) => {
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -2,6 +2,9 @@ import { promises as fs } from "node:fs";
|
||||
import * as core from "@actions/core";
|
||||
import * as semver from "semver";
|
||||
import { fetch } from "../utils/fetch";
|
||||
import { join } from "node:path";
|
||||
|
||||
const localManifestFile = join(__dirname, "..", "..", "version-manifest.json");
|
||||
|
||||
interface ManifestEntry {
|
||||
version: string;
|
||||
@@ -51,7 +54,7 @@ async function getManifestEntries(
|
||||
data = await response.text();
|
||||
} else {
|
||||
core.info("manifest-file not provided, reading from local file.");
|
||||
const fileContent = await fs.readFile("version-manifest.json");
|
||||
const fileContent = await fs.readFile(localManifestFile);
|
||||
data = fileContent.toString();
|
||||
}
|
||||
|
||||
|
||||
@@ -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