mirror of
https://gitea.com/actions/setup-deno.git
synced 2025-12-12 03:16:42 +00:00
feat: add "lts" version option (#97)
(cherry picked from commit a1496dd8d9)
This commit is contained in:
3
.github/workflows/test.yml
vendored
3
.github/workflows/test.yml
vendored
@@ -23,6 +23,7 @@ jobs:
|
|||||||
- "~1.32"
|
- "~1.32"
|
||||||
- "b290fd01f3f5d32f9d010fc719ced0240759c049"
|
- "b290fd01f3f5d32f9d010fc719ced0240759c049"
|
||||||
- "rc"
|
- "rc"
|
||||||
|
- "lts"
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
@@ -111,5 +112,5 @@ jobs:
|
|||||||
- name: Build code
|
- name: Build code
|
||||||
run: deno run -A scripts/build.ts
|
run: deno run -A scripts/build.ts
|
||||||
|
|
||||||
- name: Assert no git changes
|
- name: Assert no git changes (run `deno task build` if this fails)
|
||||||
run: git diff --quiet
|
run: git diff --quiet
|
||||||
|
|||||||
@@ -70,6 +70,14 @@ Targets the latest major, minor and patch version of Deno.
|
|||||||
deno-version: 2.0.0-rc.1
|
deno-version: 2.0.0-rc.1
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Latest LTS
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
- uses: denoland/setup-deno@v2
|
||||||
|
with:
|
||||||
|
deno-version: lts
|
||||||
|
```
|
||||||
|
|
||||||
### Version from file
|
### Version from file
|
||||||
|
|
||||||
The extension can also automatically read the version file from
|
The extension can also automatically read the version file from
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ branding:
|
|||||||
color: "gray-dark"
|
color: "gray-dark"
|
||||||
inputs:
|
inputs:
|
||||||
deno-version:
|
deno-version:
|
||||||
description: The Deno version to install. Can be a semver version of a stable release, "canary" for the latest canary, or the Git hash of a specific canary release.
|
description: The Deno version to install. Can be a semver version of a stable release, "canary" for the latest canary, "lts" for the latest LTS, or the Git hash of a specific canary release.
|
||||||
default: "2.x"
|
default: "2.x"
|
||||||
deno-version-file:
|
deno-version-file:
|
||||||
description: File containing the Deno version to install such as .dvmrc or .tool-versions.
|
description: File containing the Deno version to install such as .dvmrc or .tool-versions.
|
||||||
|
|||||||
16
dist/main.mjs
vendored
16
dist/main.mjs
vendored
@@ -36389,6 +36389,10 @@ function parseVersionRange(version) {
|
|||||||
range: "latest",
|
range: "latest",
|
||||||
kind: "stable"
|
kind: "stable"
|
||||||
};
|
};
|
||||||
|
if (version === "lts") return {
|
||||||
|
range: "latest",
|
||||||
|
kind: "lts"
|
||||||
|
};
|
||||||
if (GIT_HASH_RE.test(version)) return {
|
if (GIT_HASH_RE.test(version)) return {
|
||||||
range: version,
|
range: version,
|
||||||
kind: "canary"
|
kind: "canary"
|
||||||
@@ -36410,6 +36414,7 @@ function getDenoVersionFromFile(versionFilePath) {
|
|||||||
function resolveVersion({ range, kind }) {
|
function resolveVersion({ range, kind }) {
|
||||||
if (kind === "canary") return resolveCanary(range);
|
if (kind === "canary") return resolveCanary(range);
|
||||||
else if (kind === "rc") return resolveReleaseCandidate();
|
else if (kind === "rc") return resolveReleaseCandidate();
|
||||||
|
else if (kind === "lts") return resolveLTS();
|
||||||
else return resolveRelease(range);
|
else return resolveRelease(range);
|
||||||
}
|
}
|
||||||
async function resolveCanary(range) {
|
async function resolveCanary(range) {
|
||||||
@@ -36436,6 +36441,16 @@ async function resolveReleaseCandidate() {
|
|||||||
kind: "rc"
|
kind: "rc"
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
async function resolveLTS() {
|
||||||
|
const res = await fetchWithRetries("https://dl.deno.land/release-lts-latest.txt");
|
||||||
|
if (res.status !== 200) throw new Error("Failed to fetch LTS version info from dl.deno.land. Please try again later.");
|
||||||
|
const version = import_semver.default.clean((await res.text()).trim());
|
||||||
|
if (version === null) throw new Error("Failed to parse LTS version.");
|
||||||
|
return {
|
||||||
|
version,
|
||||||
|
kind: "lts"
|
||||||
|
};
|
||||||
|
}
|
||||||
async function resolveRelease(range) {
|
async function resolveRelease(range) {
|
||||||
if (range === "latest") {
|
if (range === "latest") {
|
||||||
const res = await fetchWithRetries("https://dl.deno.land/release-latest.txt");
|
const res = await fetchWithRetries("https://dl.deno.land/release-latest.txt");
|
||||||
@@ -38230,6 +38245,7 @@ async function install(version) {
|
|||||||
url = `https://dl.deno.land/release/v${version.version}/${zip}`;
|
url = `https://dl.deno.land/release/v${version.version}/${zip}`;
|
||||||
break;
|
break;
|
||||||
case "stable":
|
case "stable":
|
||||||
|
case "lts":
|
||||||
url = `https://github.com/denoland/deno/releases/download/v${version.version}/${zip}`;
|
url = `https://github.com/denoland/deno/releases/download/v${version.version}/${zip}`;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ export async function install(version: Version) {
|
|||||||
url = `https://dl.deno.land/release/v${version.version}/${zip}`;
|
url = `https://dl.deno.land/release/v${version.version}/${zip}`;
|
||||||
break;
|
break;
|
||||||
case "stable":
|
case "stable":
|
||||||
|
case "lts":
|
||||||
url =
|
url =
|
||||||
`https://github.com/denoland/deno/releases/download/v${version.version}/${zip}`;
|
`https://github.com/denoland/deno/releases/download/v${version.version}/${zip}`;
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -9,12 +9,12 @@ const GIT_HASH_RE = /^[0-9a-fA-F]{40}$/;
|
|||||||
|
|
||||||
export interface VersionRange {
|
export interface VersionRange {
|
||||||
range: string;
|
range: string;
|
||||||
kind: "canary" | "rc" | "stable";
|
kind: "canary" | "rc" | "stable" | "lts";
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface Version {
|
export interface Version {
|
||||||
version: string;
|
version: string;
|
||||||
kind: "canary" | "rc" | "stable";
|
kind: "canary" | "rc" | "stable" | "lts";
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Parses the version from the user into a structure */
|
/** Parses the version from the user into a structure */
|
||||||
@@ -36,6 +36,10 @@ export function parseVersionRange(
|
|||||||
return { range: "latest", kind: "stable" };
|
return { range: "latest", kind: "stable" };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (version === "lts") {
|
||||||
|
return { range: "latest", kind: "lts" };
|
||||||
|
}
|
||||||
|
|
||||||
if (GIT_HASH_RE.test(version)) {
|
if (GIT_HASH_RE.test(version)) {
|
||||||
return { range: version, kind: "canary" };
|
return { range: version, kind: "canary" };
|
||||||
}
|
}
|
||||||
@@ -82,6 +86,8 @@ export function resolveVersion(
|
|||||||
} else if (kind === "rc") {
|
} else if (kind === "rc") {
|
||||||
// range is always "latest"
|
// range is always "latest"
|
||||||
return resolveReleaseCandidate();
|
return resolveReleaseCandidate();
|
||||||
|
} else if (kind === "lts") {
|
||||||
|
return resolveLTS();
|
||||||
} else {
|
} else {
|
||||||
return resolveRelease(range);
|
return resolveRelease(range);
|
||||||
}
|
}
|
||||||
@@ -120,6 +126,22 @@ async function resolveReleaseCandidate(): Promise<Version | null> {
|
|||||||
return { version, kind: "rc" };
|
return { version, kind: "rc" };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function resolveLTS(): Promise<Version | null> {
|
||||||
|
const res = await fetchWithRetries(
|
||||||
|
"https://dl.deno.land/release-lts-latest.txt",
|
||||||
|
);
|
||||||
|
if (res.status !== 200) {
|
||||||
|
throw new Error(
|
||||||
|
"Failed to fetch LTS version info from dl.deno.land. Please try again later.",
|
||||||
|
);
|
||||||
|
}
|
||||||
|
const version = semver.clean((await res.text()).trim());
|
||||||
|
if (version === null) {
|
||||||
|
throw new Error("Failed to parse LTS version.");
|
||||||
|
}
|
||||||
|
return { version, kind: "lts" };
|
||||||
|
}
|
||||||
|
|
||||||
async function resolveRelease(range: string): Promise<Version | null> {
|
async function resolveRelease(range: string): Promise<Version | null> {
|
||||||
if (range === "latest") {
|
if (range === "latest") {
|
||||||
const res = await fetchWithRetries(
|
const res = await fetchWithRetries(
|
||||||
|
|||||||
Reference in New Issue
Block a user