mirror of
https://github.com/oven-sh/setup-bun.git
synced 2025-02-23 02:30:26 +08:00
release: v2.0 🎉 (#80)
* feat: add input bun-version-file (#76) * feat: add input for bun-version-file * docs: update example bun version file * [autofix.ci] apply automated fixes --------- Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> * refactor: reduce read from file code * [autofix.ci] apply automated fixes * feat: read from all known files if not specified * [autofix.ci] apply automated fixes * fix: just continue if file doesnt exist * [autofix.ci] apply automated fixes * fix: return output if found version * [autofix.ci] apply automated fixes * fix: make whitespace in .tool-versions optional * [autofix.ci] apply automated fixes * log loglog * [autofix.ci] apply automated fixes * log log log * [autofix.ci] apply automated fixes * better warnings, fix ci failing * [autofix.ci] apply automated fixes * feat: log obtained version * [autofix.ci] apply automated fixes * build: bump version * [autofix.ci] apply automated fixes * fix: add .zip extension if it's not present Workaround for https://github.com/actions/toolkit/issues/1179 Fixes https://github.com/oven-sh/setup-bun/issues/79 * [autofix.ci] apply automated fixes * docs: add comment for easier understanding * ci: more readable version * ci: match name * docs: add package.json and .tool-versions to bun-version-file examples * ci: add cache test * ci: install another pkg for cache test * ci: install more pkgs for cache test * ci: block all trusted deps in cache test * ci: more deps for cache test * ci: cache test should cache * refactor: dont try all files if not defined * [autofix.ci] apply automated fixes * ci: remove cache test * feat: support .bunrc * [autofix.ci] apply automated fixes * refactor: .bun-version instead .bunrc * [autofix.ci] apply automated fixes * feat: add bun paths and url to output Fixes https://github.com/oven-sh/setup-bun/issues/81 * [autofix.ci] apply automated fixes * ci: test for .bun-version * feat: make .bun-version as default in bun-version-file * ci: remove cache before test * ci: remove cache before test * ci: remove cache before test * ci: remove cache before test --------- Co-authored-by: Ade Hery Shopyan <51158020+adeherysh@users.noreply.github.com> Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
This commit is contained in:
parent
43b2dc9ae8
commit
ef00e4ac8e
28
.github/actions/compare-bun-version/action.yml
vendored
Normal file
28
.github/actions/compare-bun-version/action.yml
vendored
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
name: Compare Bun Version
|
||||||
|
description: Compare the version of Bun to a specified version
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
bun-version:
|
||||||
|
description: "The version of Bun to compare against"
|
||||||
|
required: true
|
||||||
|
default: "1.1.0"
|
||||||
|
|
||||||
|
runs:
|
||||||
|
using: "composite"
|
||||||
|
steps:
|
||||||
|
- name: Get installed Bun version
|
||||||
|
id: bun
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
bun --version
|
||||||
|
echo "version=$(bun --version)" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Compare versions
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
if [[ "${{ steps.bun.outputs.version }}" == "${{ inputs.bun-version }}" ]]; then
|
||||||
|
echo "Version is ${{ inputs.bun-version }}"
|
||||||
|
else
|
||||||
|
echo "Expected version to be ${{ inputs.bun-version }}, got ${{ steps.bun.outputs.version }}"
|
||||||
|
exit 1
|
||||||
|
fi
|
124
.github/workflows/test.yml
vendored
124
.github/workflows/test.yml
vendored
@ -8,12 +8,35 @@ on:
|
|||||||
- main
|
- main
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: write
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
|
remove-cache:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions: write-all
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Install github cli
|
||||||
|
run: |
|
||||||
|
(type -p wget >/dev/null || (sudo apt update && sudo apt-get install wget -y)) \
|
||||||
|
&& sudo mkdir -p -m 755 /etc/apt/keyrings \
|
||||||
|
&& wget -qO- https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo tee /etc/apt/keyrings/githubcli-archive-keyring.gpg > /dev/null \
|
||||||
|
&& sudo chmod go+r /etc/apt/keyrings/githubcli-archive-keyring.gpg \
|
||||||
|
&& echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null \
|
||||||
|
&& sudo apt update \
|
||||||
|
&& sudo apt install gh -y
|
||||||
|
|
||||||
|
- run: |
|
||||||
|
gh cache delete --all || true
|
||||||
|
env:
|
||||||
|
GH_TOKEN: ${{ github.token }}
|
||||||
|
|
||||||
setup-bun:
|
setup-bun:
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
continue-on-error: true
|
continue-on-error: true
|
||||||
|
needs: [remove-cache]
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
os:
|
os:
|
||||||
@ -46,80 +69,55 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
bun --version
|
bun --version
|
||||||
|
|
||||||
setup-bun-from-package-json-version:
|
setup-bun-from-file:
|
||||||
|
name: setup-bun from (${{ matrix.os }}, ${{ matrix.file.name }})
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
|
continue-on-error: true
|
||||||
|
needs: [remove-cache]
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
os:
|
os:
|
||||||
- ubuntu-latest
|
- ubuntu-latest
|
||||||
- macos-latest
|
- macos-latest
|
||||||
- windows-latest
|
- windows-latest
|
||||||
packageManager:
|
file:
|
||||||
- bun@1.1.0
|
- name: package.json (bun@1.1.0)
|
||||||
- yarn@bun@1.1.0
|
file: package.json
|
||||||
|
run: |
|
||||||
|
echo "$(jq '. += {"packageManager": "bun@1.1.0"}' package.json)" > package.json
|
||||||
|
- name: package.json (yarn@bun@1.1.0)
|
||||||
|
file: package.json
|
||||||
|
run: |
|
||||||
|
echo "$(jq '. += {"packageManager": "yarn@bun@1.1.0"}' package.json)" > package.json
|
||||||
|
- name: .tool-versions (bun 1.1.0)
|
||||||
|
file: .tool-versions
|
||||||
|
run: |
|
||||||
|
echo "bun 1.1.0" > .tool-versions
|
||||||
|
- name: .tool-versions (bun1.1.0)
|
||||||
|
file: .tool-versions
|
||||||
|
run: |
|
||||||
|
echo "bun1.1.0" > .tool-versions
|
||||||
|
- name: .bumrc (1.1.0)
|
||||||
|
file: .bumrc
|
||||||
|
run: |
|
||||||
|
echo "1.1.0" > .bumrc
|
||||||
|
- name: .bun-version (1.1.0)
|
||||||
|
file: .bun-version
|
||||||
|
run: |
|
||||||
|
echo "1.1.0" > .bun-version
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Setup package.json
|
- name: Setup file
|
||||||
shell: bash
|
run: ${{ matrix.file.run }}
|
||||||
run: |
|
|
||||||
echo "$(jq '. += {"packageManager": "${{ matrix.packageManager }}"}' package.json)" > package.json
|
|
||||||
|
|
||||||
- name: Setup Bun
|
- name: Setup Bun
|
||||||
uses: ./
|
uses: ./
|
||||||
|
with:
|
||||||
|
bun-version-file: ${{ matrix.file.file }}
|
||||||
|
|
||||||
- name: Run Bun
|
- name: Compare versions
|
||||||
id: bun
|
uses: ./.github/actions/compare-bun-version
|
||||||
shell: bash
|
with:
|
||||||
run: |
|
bun-version: "1.1.0"
|
||||||
bun --version
|
|
||||||
echo "version=$(bun --version)" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- name: Check version
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
if [[ "${{ steps.bun.outputs.version }}" == "1.1.0" ]]; then
|
|
||||||
echo "Version is 1.1.0"
|
|
||||||
else
|
|
||||||
echo "Expected version to be 1.1.0, got ${{ steps.bun.outputs.version }}"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
setup-bun-from-tool-versions:
|
|
||||||
runs-on: ${{ matrix.os }}
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
os:
|
|
||||||
- ubuntu-latest
|
|
||||||
- macos-latest
|
|
||||||
- windows-latest
|
|
||||||
content:
|
|
||||||
- "bun 1.1.0"
|
|
||||||
- "bun1.1.0"
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
- name: Setup package.json
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
echo "bun ${{ matrix.content }}" > .tool-versions
|
|
||||||
|
|
||||||
- name: Setup Bun
|
|
||||||
uses: ./
|
|
||||||
|
|
||||||
- name: Run Bun
|
|
||||||
id: bun
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
bun --version
|
|
||||||
echo "version=$(bun --version)" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- name: Check version
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
if [[ "${{ steps.bun.outputs.version }}" == "1.1.0" ]]; then
|
|
||||||
echo "Version is 1.1.0"
|
|
||||||
else
|
|
||||||
echo "Expected version to be 1.1.0, got ${{ steps.bun.outputs.version }}"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
22
README.md
22
README.md
@ -10,6 +10,14 @@ Download, install, and setup [Bun](https://bun.sh) in GitHub Actions.
|
|||||||
bun-version: latest
|
bun-version: latest
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Using version file
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
- uses: oven-sh/setup-bun@v1
|
||||||
|
with:
|
||||||
|
bun-version-file: ".bumrc"
|
||||||
|
```
|
||||||
|
|
||||||
### Using a custom NPM registry
|
### Using a custom NPM registry
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
@ -44,13 +52,13 @@ In most cases, you shouldn't need to use the [setup-node](https://github.com/act
|
|||||||
|
|
||||||
## Inputs
|
## Inputs
|
||||||
|
|
||||||
| Name | Description | Default | Examples |
|
| Name | Description | Default | Examples |
|
||||||
| ------------------ | -------------------------------------------------- | ----------- | ------------------------------- |
|
| ------------------ | ----------------------------------------------------- | ----------- | ------------------------------- |
|
||||||
| `bun-version` | The version of Bun to download and install. | `latest` | `canary`, `1.0.0`, `1.0.x` |
|
| `bun-version` | The version of Bun to download and install. | `latest` | `canary`, `1.0.0`, `1.0.x` |
|
||||||
| `bun-download-url` | URL to download .zip file for Bun release | | |
|
| `bun-version-file` | The version of Bun to download and install from file. | `undefined` | `.bumrc` |
|
||||||
| `registry-url` | Registry URL where some private package is stored. | `undefined` | `"https://npm.pkg.github.com/"` |
|
| `bun-download-url` | URL to download .zip file for Bun release | | |
|
||||||
| `scope` | Scope for private packages. | `undefined` | `"@foo"`, `"@orgname"` |
|
| `registry-url` | Registry URL where some private package is stored. | `undefined` | `"https://npm.pkg.github.com/"` |
|
||||||
| `no-cache` | Disable caching of the downloaded executable. | `false` | `true`, `false` |
|
| `scope` | Scope for private packages. | `undefined` | `"@foo"`, `"@orgname"` |
|
||||||
|
|
||||||
## Outputs
|
## Outputs
|
||||||
|
|
||||||
|
15
action.yml
15
action.yml
@ -5,12 +5,16 @@ branding:
|
|||||||
icon: play-circle
|
icon: play-circle
|
||||||
color: white
|
color: white
|
||||||
inputs:
|
inputs:
|
||||||
bun-download-url:
|
|
||||||
description: "Override the URL to download Bun from. This skips version resolution and verifying AVX2 support."
|
|
||||||
required: false
|
|
||||||
bun-version:
|
bun-version:
|
||||||
description: 'The version of Bun to install. (e.g. "latest", "canary", "1.0.0", "1.0.x", <sha>)'
|
description: 'The version of Bun to install. (e.g. "latest", "canary", "1.0.0", "1.0.x", <sha>)'
|
||||||
required: false
|
required: false
|
||||||
|
bun-version-file:
|
||||||
|
description: 'The version of Bun to install from file. (e.g. "package.json", ".bumrc", ".tool-versions")'
|
||||||
|
default: ".bun-version"
|
||||||
|
required: false
|
||||||
|
bun-download-url:
|
||||||
|
description: "Override the URL to download Bun from. This skips version resolution and verifying AVX2 support."
|
||||||
|
required: false
|
||||||
registry-url:
|
registry-url:
|
||||||
required: false
|
required: false
|
||||||
description: "The URL of the package registry to use for installing Bun. Set the $BUN_AUTH_TOKEN environment variable to authenticate with the registry."
|
description: "The URL of the package registry to use for installing Bun. Set the $BUN_AUTH_TOKEN environment variable to authenticate with the registry."
|
||||||
@ -27,8 +31,13 @@ outputs:
|
|||||||
description: The version of Bun that was installed.
|
description: The version of Bun that was installed.
|
||||||
bun-revision:
|
bun-revision:
|
||||||
description: The revision of Bun that was installed.
|
description: The revision of Bun that was installed.
|
||||||
|
bun-path:
|
||||||
|
description: The path to the Bun executable.
|
||||||
|
bun-download-url:
|
||||||
|
description: The URL from which Bun was downloaded.
|
||||||
cache-hit:
|
cache-hit:
|
||||||
description: If the version of Bun was cached.
|
description: If the version of Bun was cached.
|
||||||
|
|
||||||
runs:
|
runs:
|
||||||
using: "node20"
|
using: "node20"
|
||||||
main: "dist/setup/index.js"
|
main: "dist/setup/index.js"
|
||||||
|
64
dist/setup/index.js
generated
vendored
64
dist/setup/index.js
generated
vendored
File diff suppressed because one or more lines are too long
4
package-lock.json
generated
4
package-lock.json
generated
@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "setup-bun",
|
"name": "setup-bun",
|
||||||
"version": "1.2.1",
|
"version": "2.0.0",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "setup-bun",
|
"name": "setup-bun",
|
||||||
"version": "1.2.1",
|
"version": "2.0.0",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@actions/cache": "^3.1.4",
|
"@actions/cache": "^3.1.4",
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"private": true,
|
"private": true,
|
||||||
"name": "setup-bun",
|
"name": "setup-bun",
|
||||||
"version": "1.2.1",
|
"version": "2.0.0",
|
||||||
"description": "Setup Bun on GitHub Actions.",
|
"description": "Setup Bun on GitHub Actions.",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"bun",
|
"bun",
|
||||||
|
@ -13,7 +13,7 @@ import { downloadTool, extractZip } from "@actions/tool-cache";
|
|||||||
import { getExecOutput } from "@actions/exec";
|
import { getExecOutput } from "@actions/exec";
|
||||||
import { writeBunfig } from "./bunfig";
|
import { writeBunfig } from "./bunfig";
|
||||||
import { saveState } from "@actions/core";
|
import { saveState } from "@actions/core";
|
||||||
import { retry } from "./utils";
|
import { addExtension, retry } from "./utils";
|
||||||
|
|
||||||
export type Input = {
|
export type Input = {
|
||||||
customUrl?: string;
|
customUrl?: string;
|
||||||
@ -30,6 +30,8 @@ export type Input = {
|
|||||||
export type Output = {
|
export type Output = {
|
||||||
version: string;
|
version: string;
|
||||||
revision: string;
|
revision: string;
|
||||||
|
bunPath: string;
|
||||||
|
url: string;
|
||||||
cacheHit: boolean;
|
cacheHit: boolean;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -111,6 +113,8 @@ export default async (options: Input): Promise<Output> => {
|
|||||||
return {
|
return {
|
||||||
version,
|
version,
|
||||||
revision,
|
revision,
|
||||||
|
bunPath,
|
||||||
|
url,
|
||||||
cacheHit,
|
cacheHit,
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@ -119,7 +123,8 @@ async function downloadBun(
|
|||||||
url: string,
|
url: string,
|
||||||
bunPath: string
|
bunPath: string
|
||||||
): Promise<string | undefined> {
|
): Promise<string | undefined> {
|
||||||
const zipPath = await downloadTool(url);
|
// Workaround for https://github.com/oven-sh/setup-bun/issues/79 and https://github.com/actions/toolkit/issues/1179
|
||||||
|
const zipPath = addExtension(await downloadTool(url), ".zip");
|
||||||
const extractedZipPath = await extractZip(zipPath);
|
const extractedZipPath = await extractZip(zipPath);
|
||||||
const extractedBunPath = await extractBun(extractedZipPath);
|
const extractedBunPath = await extractBun(extractedZipPath);
|
||||||
try {
|
try {
|
||||||
|
60
src/index.ts
60
src/index.ts
@ -1,75 +1,27 @@
|
|||||||
import { tmpdir } from "node:os";
|
import { tmpdir } from "node:os";
|
||||||
import { join } from "node:path";
|
import { getInput, setOutput, setFailed, getBooleanInput } from "@actions/core";
|
||||||
import { existsSync, readFileSync } from "node:fs";
|
|
||||||
import {
|
|
||||||
getInput,
|
|
||||||
setOutput,
|
|
||||||
setFailed,
|
|
||||||
warning,
|
|
||||||
getBooleanInput,
|
|
||||||
} from "@actions/core";
|
|
||||||
import runAction from "./action.js";
|
import runAction from "./action.js";
|
||||||
|
import { readVersionFromFile } from "./utils.js";
|
||||||
|
|
||||||
if (!process.env.RUNNER_TEMP) {
|
if (!process.env.RUNNER_TEMP) {
|
||||||
process.env.RUNNER_TEMP = tmpdir();
|
process.env.RUNNER_TEMP = tmpdir();
|
||||||
}
|
}
|
||||||
|
|
||||||
function readVersionFromPackageJson(): string | undefined {
|
|
||||||
const cwd = process.env.GITHUB_WORKSPACE;
|
|
||||||
if (!cwd) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const path = join(cwd, "package.json");
|
|
||||||
try {
|
|
||||||
if (!existsSync(path)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const { packageManager } = JSON.parse(readFileSync(path, "utf8"));
|
|
||||||
if (!packageManager?.includes("bun@")) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const [_, version] = packageManager.split("bun@");
|
|
||||||
return version;
|
|
||||||
} catch (error) {
|
|
||||||
const { message } = error as Error;
|
|
||||||
warning(`Failed to read package.json: ${message}`);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function readVersionFromToolVersions(): string | undefined {
|
|
||||||
const cwd = process.env.GITHUB_WORKSPACE;
|
|
||||||
if (!cwd) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const path = join(cwd, ".tool-versions");
|
|
||||||
try {
|
|
||||||
if (!existsSync(path)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const match = readFileSync(path, "utf8").match(/^bun\s(?<version>.*?)$/m);
|
|
||||||
|
|
||||||
return match?.groups?.version;
|
|
||||||
} catch (error) {
|
|
||||||
const { message } = error as Error;
|
|
||||||
warning(`Failed to read .tool-versions: ${message}`);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
runAction({
|
runAction({
|
||||||
version:
|
version:
|
||||||
getInput("bun-version") ||
|
getInput("bun-version") ||
|
||||||
readVersionFromPackageJson() ||
|
readVersionFromFile(getInput("bun-version-file")) ||
|
||||||
readVersionFromToolVersions() ||
|
|
||||||
undefined,
|
undefined,
|
||||||
customUrl: getInput("bun-download-url") || undefined,
|
customUrl: getInput("bun-download-url") || undefined,
|
||||||
registryUrl: getInput("registry-url") || undefined,
|
registryUrl: getInput("registry-url") || undefined,
|
||||||
scope: getInput("scope") || undefined,
|
scope: getInput("scope") || undefined,
|
||||||
noCache: getBooleanInput("no-cache") || false,
|
noCache: getBooleanInput("no-cache") || false,
|
||||||
})
|
})
|
||||||
.then(({ version, revision, cacheHit }) => {
|
.then(({ version, revision, bunPath, url, cacheHit }) => {
|
||||||
setOutput("bun-version", version);
|
setOutput("bun-version", version);
|
||||||
setOutput("bun-revision", revision);
|
setOutput("bun-revision", revision);
|
||||||
|
setOutput("bun-path", bunPath);
|
||||||
|
setOutput("bun-download-url", url);
|
||||||
setOutput("cache-hit", cacheHit);
|
setOutput("cache-hit", cacheHit);
|
||||||
process.exit(0);
|
process.exit(0);
|
||||||
})
|
})
|
||||||
|
64
src/utils.ts
64
src/utils.ts
@ -1,3 +1,8 @@
|
|||||||
|
import { debug, warning } from "@actions/core";
|
||||||
|
import { info } from "node:console";
|
||||||
|
import { existsSync, readFileSync, renameSync } from "node:fs";
|
||||||
|
import { join, basename } from "node:path";
|
||||||
|
|
||||||
export function retry<T>(
|
export function retry<T>(
|
||||||
fn: () => Promise<T>,
|
fn: () => Promise<T>,
|
||||||
retries: number,
|
retries: number,
|
||||||
@ -12,3 +17,62 @@ export function retry<T>(
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function addExtension(path: string, ext: string): string {
|
||||||
|
if (!path.endsWith(ext)) {
|
||||||
|
renameSync(path, path + ext);
|
||||||
|
return path + ext;
|
||||||
|
}
|
||||||
|
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
|
||||||
|
const FILE_VERSION_READERS = {
|
||||||
|
"package.json": (content: string) =>
|
||||||
|
JSON.parse(content).packageManager?.split("bun@")?.[1],
|
||||||
|
".tool-versions": (content: string) =>
|
||||||
|
content.match(/^bun\s?(?<version>.*?)$/m)?.groups?.version,
|
||||||
|
".bumrc": (content: string) => content, // https://github.com/owenizedd/bum
|
||||||
|
".bun-version": (content: string) => content,
|
||||||
|
};
|
||||||
|
|
||||||
|
export function readVersionFromFile(file: string): string | undefined {
|
||||||
|
const cwd = process.env.GITHUB_WORKSPACE;
|
||||||
|
if (!cwd) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!file) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
debug(`Reading version from ${file}`);
|
||||||
|
|
||||||
|
const path = join(cwd, file);
|
||||||
|
const base = basename(file);
|
||||||
|
|
||||||
|
if (!existsSync(path)) {
|
||||||
|
warning(`File ${path} not found`);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const reader = FILE_VERSION_READERS[base] ?? (() => undefined);
|
||||||
|
|
||||||
|
let output: string | undefined;
|
||||||
|
try {
|
||||||
|
output = reader(readFileSync(path, "utf8"))?.trim();
|
||||||
|
|
||||||
|
if (!output) {
|
||||||
|
warning(`Failed to read version from ${file}`);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
const { message } = error as Error;
|
||||||
|
warning(`Failed to read ${file}: ${message}`);
|
||||||
|
} finally {
|
||||||
|
if (output) {
|
||||||
|
info(`Obtained version ${output} from ${file}`);
|
||||||
|
return output;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user