@boringcache/action-core 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +151 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +9 -0
- package/dist/setup.d.ts +27 -0
- package/dist/setup.js +222 -0
- package/package.json +58 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2024 BoringCache
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
# @boringcache/action-core
|
|
2
|
+
|
|
3
|
+
**Cache once. Reuse everywhere.**
|
|
4
|
+
|
|
5
|
+
Shared core library for BoringCache GitHub Actions. This package provides the common functionality used by all BoringCache actions to download, install, and execute the BoringCache CLI.
|
|
6
|
+
|
|
7
|
+
## Installation
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm install @boringcache/action-core
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Usage
|
|
14
|
+
|
|
15
|
+
```typescript
|
|
16
|
+
import { ensureBoringCache, execBoringCache } from '@boringcache/action-core';
|
|
17
|
+
|
|
18
|
+
// Ensure the CLI is installed
|
|
19
|
+
await ensureBoringCache({ version: 'v1.0.0' });
|
|
20
|
+
|
|
21
|
+
// Execute CLI commands
|
|
22
|
+
const exitCode = await execBoringCache(['restore', 'workspace', 'tag:path']);
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## API
|
|
26
|
+
|
|
27
|
+
### `ensureBoringCache(options: SetupOptions): Promise<void>`
|
|
28
|
+
|
|
29
|
+
Downloads and installs the BoringCache CLI if not already available.
|
|
30
|
+
|
|
31
|
+
**Options:**
|
|
32
|
+
- `version` (required): Version to install (e.g., `'v1.0.0'`). Set to `'skip'` to skip installation.
|
|
33
|
+
- `token` (optional): API token (defaults to `BORINGCACHE_API_TOKEN` env var)
|
|
34
|
+
- `cache` (optional): Enable automatic caching across workflow runs (default: `true`)
|
|
35
|
+
|
|
36
|
+
**Features:**
|
|
37
|
+
- Automatic platform detection (Linux, macOS, Windows)
|
|
38
|
+
- **Automatic caching** - CLI is cached across workflow runs using `@actions/cache`
|
|
39
|
+
- Uses GitHub Actions tool cache for fast subsequent jobs
|
|
40
|
+
- Handles Windows bash fallback
|
|
41
|
+
- Masks API token in logs
|
|
42
|
+
|
|
43
|
+
### `execBoringCache(args: string[], options?: ExecOptions): Promise<number>`
|
|
44
|
+
|
|
45
|
+
Executes the BoringCache CLI with the given arguments.
|
|
46
|
+
|
|
47
|
+
**Parameters:**
|
|
48
|
+
- `args`: Command line arguments to pass to the CLI
|
|
49
|
+
- `options`: Optional exec options (from `@actions/exec`)
|
|
50
|
+
|
|
51
|
+
**Returns:** Exit code from the command
|
|
52
|
+
|
|
53
|
+
### `isCliAvailable(): Promise<boolean>`
|
|
54
|
+
|
|
55
|
+
Checks if the BoringCache CLI is available on the PATH.
|
|
56
|
+
|
|
57
|
+
### `getToolCacheInfo(version: string): ToolCacheInfo`
|
|
58
|
+
|
|
59
|
+
Get tool cache information for persisting the CLI across workflow runs.
|
|
60
|
+
|
|
61
|
+
**Returns:**
|
|
62
|
+
```typescript
|
|
63
|
+
interface ToolCacheInfo {
|
|
64
|
+
toolName: string; // 'boringcache'
|
|
65
|
+
version: string; // Normalized version (e.g., '1.0.0')
|
|
66
|
+
cachePath: string | null; // Path if cached, null otherwise
|
|
67
|
+
cachePattern: string; // Glob pattern for actions/cache
|
|
68
|
+
cacheKey: string; // Cache key for actions/cache
|
|
69
|
+
}
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## Automatic Caching
|
|
73
|
+
|
|
74
|
+
The CLI is **automatically cached** across workflow runs using `@actions/cache`. No extra configuration needed!
|
|
75
|
+
|
|
76
|
+
```typescript
|
|
77
|
+
// First workflow run: downloads CLI and saves to cache
|
|
78
|
+
await ensureBoringCache({ version: 'v1.0.0' });
|
|
79
|
+
|
|
80
|
+
// Subsequent runs: restores from cache instantly
|
|
81
|
+
await ensureBoringCache({ version: 'v1.0.0' });
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
To disable automatic caching:
|
|
85
|
+
|
|
86
|
+
```typescript
|
|
87
|
+
await ensureBoringCache({ version: 'v1.0.0', cache: false });
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### Manual Cache Control
|
|
91
|
+
|
|
92
|
+
For advanced use cases, you can use `getToolCacheInfo()` to manage caching yourself:
|
|
93
|
+
|
|
94
|
+
```typescript
|
|
95
|
+
import * as cache from '@actions/cache';
|
|
96
|
+
import { ensureBoringCache, getToolCacheInfo } from '@boringcache/action-core';
|
|
97
|
+
|
|
98
|
+
const info = getToolCacheInfo('v1.0.0');
|
|
99
|
+
console.log(info.cacheKey); // 'boringcache-1.0.0-linux-x64'
|
|
100
|
+
console.log(info.cachePattern); // '/opt/hostedtoolcache/boringcache/1.0.0*'
|
|
101
|
+
console.log(info.cachePath); // Path if cached, null otherwise
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
## How Tool Cache Works
|
|
105
|
+
|
|
106
|
+
```
|
|
107
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
108
|
+
│ First Run (no cache) │
|
|
109
|
+
├─────────────────────────────────────────────────────────────────┤
|
|
110
|
+
│ 1. tc.find('boringcache', '1.0.0') → null │
|
|
111
|
+
│ 2. tc.downloadTool(url) → /tmp/downloaded-binary │
|
|
112
|
+
│ 3. tc.cacheDir(dir, 'boringcache', '1.0.0') │
|
|
113
|
+
│ → $RUNNER_TOOL_CACHE/boringcache/1.0.0/x64/ │
|
|
114
|
+
│ 4. core.addPath(cachedPath) │
|
|
115
|
+
└─────────────────────────────────────────────────────────────────┘
|
|
116
|
+
|
|
117
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
118
|
+
│ Subsequent Run (same job/workflow) │
|
|
119
|
+
├─────────────────────────────────────────────────────────────────┤
|
|
120
|
+
│ 1. tc.find('boringcache', '1.0.0') │
|
|
121
|
+
│ → $RUNNER_TOOL_CACHE/boringcache/1.0.0/x64/ │
|
|
122
|
+
│ 2. core.addPath(cachedPath) ✓ (no download needed) │
|
|
123
|
+
└─────────────────────────────────────────────────────────────────┘
|
|
124
|
+
|
|
125
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
126
|
+
│ With actions/cache (persists across workflow runs) │
|
|
127
|
+
├─────────────────────────────────────────────────────────────────┤
|
|
128
|
+
│ 1. actions/cache restores $RUNNER_TOOL_CACHE/boringcache │
|
|
129
|
+
│ 2. tc.find('boringcache', '1.0.0') → cached path ✓ │
|
|
130
|
+
│ 3. No download needed on any run! │
|
|
131
|
+
└─────────────────────────────────────────────────────────────────┘
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
## Environment Variables
|
|
135
|
+
|
|
136
|
+
- `BORINGCACHE_API_TOKEN`: API token for authentication
|
|
137
|
+
- `RUNNER_OS`: GitHub Actions runner OS (auto-detected)
|
|
138
|
+
- `RUNNER_ARCH`: GitHub Actions runner architecture (auto-detected)
|
|
139
|
+
- `RUNNER_TOOL_CACHE`: Tool cache directory (auto-detected)
|
|
140
|
+
|
|
141
|
+
## Supported Platforms
|
|
142
|
+
|
|
143
|
+
| OS | Architecture |
|
|
144
|
+
|---------|-------------|
|
|
145
|
+
| Linux | x64, ARM64 |
|
|
146
|
+
| macOS | ARM64 |
|
|
147
|
+
| Windows | x64 |
|
|
148
|
+
|
|
149
|
+
## License
|
|
150
|
+
|
|
151
|
+
MIT
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { ensureBoringCache, execBoringCache, isCliAvailable, getToolCacheInfo, SetupOptions, ToolCacheInfo, } from './setup';
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getToolCacheInfo = exports.isCliAvailable = exports.execBoringCache = exports.ensureBoringCache = void 0;
|
|
4
|
+
var setup_1 = require("./setup");
|
|
5
|
+
Object.defineProperty(exports, "ensureBoringCache", { enumerable: true, get: function () { return setup_1.ensureBoringCache; } });
|
|
6
|
+
Object.defineProperty(exports, "execBoringCache", { enumerable: true, get: function () { return setup_1.execBoringCache; } });
|
|
7
|
+
Object.defineProperty(exports, "isCliAvailable", { enumerable: true, get: function () { return setup_1.isCliAvailable; } });
|
|
8
|
+
Object.defineProperty(exports, "getToolCacheInfo", { enumerable: true, get: function () { return setup_1.getToolCacheInfo; } });
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9saWIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsaUNBT2lCO0FBTmYsMEdBQUEsaUJBQWlCLE9BQUE7QUFDakIsd0dBQUEsZUFBZSxPQUFBO0FBQ2YsdUdBQUEsY0FBYyxPQUFBO0FBQ2QseUdBQUEsZ0JBQWdCLE9BQUEifQ==
|
package/dist/setup.d.ts
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import * as exec from '@actions/exec';
|
|
2
|
+
export interface SetupOptions {
|
|
3
|
+
version: string;
|
|
4
|
+
token?: string;
|
|
5
|
+
/** Enable automatic caching across workflow runs (default: true) */
|
|
6
|
+
cache?: boolean;
|
|
7
|
+
}
|
|
8
|
+
export interface ToolCacheInfo {
|
|
9
|
+
/** Tool name used in cache */
|
|
10
|
+
toolName: string;
|
|
11
|
+
/** Normalized version (without 'v' prefix) */
|
|
12
|
+
version: string;
|
|
13
|
+
/** Full path to tool cache directory (or null if not cached) */
|
|
14
|
+
cachePath: string | null;
|
|
15
|
+
/** Path pattern for use with actions/cache */
|
|
16
|
+
cachePattern: string;
|
|
17
|
+
/** Cache key for use with actions/cache */
|
|
18
|
+
cacheKey: string;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Get tool cache information for a specific version.
|
|
22
|
+
* Use this to persist the tool cache across workflow runs with actions/cache.
|
|
23
|
+
*/
|
|
24
|
+
export declare function getToolCacheInfo(version: string): ToolCacheInfo;
|
|
25
|
+
export declare function isCliAvailable(): Promise<boolean>;
|
|
26
|
+
export declare function ensureBoringCache(options: SetupOptions): Promise<void>;
|
|
27
|
+
export declare function execBoringCache(args: string[], options?: exec.ExecOptions): Promise<number>;
|
package/dist/setup.js
ADDED
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.getToolCacheInfo = getToolCacheInfo;
|
|
37
|
+
exports.isCliAvailable = isCliAvailable;
|
|
38
|
+
exports.ensureBoringCache = ensureBoringCache;
|
|
39
|
+
exports.execBoringCache = execBoringCache;
|
|
40
|
+
const core = __importStar(require("@actions/core"));
|
|
41
|
+
const exec = __importStar(require("@actions/exec"));
|
|
42
|
+
const tc = __importStar(require("@actions/tool-cache"));
|
|
43
|
+
const cache = __importStar(require("@actions/cache"));
|
|
44
|
+
const fs = __importStar(require("fs"));
|
|
45
|
+
const os = __importStar(require("os"));
|
|
46
|
+
const path = __importStar(require("path"));
|
|
47
|
+
const TOOL_NAME = 'boringcache';
|
|
48
|
+
const GITHUB_RELEASES_BASE = 'https://github.com/boringcache/cli/releases/download';
|
|
49
|
+
/**
|
|
50
|
+
* Get tool cache information for a specific version.
|
|
51
|
+
* Use this to persist the tool cache across workflow runs with actions/cache.
|
|
52
|
+
*/
|
|
53
|
+
function getToolCacheInfo(version) {
|
|
54
|
+
const normalizedVersion = version.replace(/^v/, '');
|
|
55
|
+
const platform = getPlatformInfo();
|
|
56
|
+
const cachePath = tc.find(TOOL_NAME, normalizedVersion);
|
|
57
|
+
const toolCacheRoot = process.env.RUNNER_TOOL_CACHE || '/opt/hostedtoolcache';
|
|
58
|
+
return {
|
|
59
|
+
toolName: TOOL_NAME,
|
|
60
|
+
version: normalizedVersion,
|
|
61
|
+
cachePath: cachePath || null,
|
|
62
|
+
cachePattern: `${toolCacheRoot}/${TOOL_NAME}/${normalizedVersion}*`,
|
|
63
|
+
cacheKey: `${TOOL_NAME}-${normalizedVersion}-${platform.os}-${platform.arch}`,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
function getPlatformInfo() {
|
|
67
|
+
const runnerOS = process.env.RUNNER_OS || os.platform();
|
|
68
|
+
const runnerArch = process.env.RUNNER_ARCH || os.arch();
|
|
69
|
+
let normalizedOS = runnerOS;
|
|
70
|
+
let normalizedArch = runnerArch;
|
|
71
|
+
if (runnerOS === 'darwin' || runnerOS === 'Darwin') {
|
|
72
|
+
normalizedOS = 'macOS';
|
|
73
|
+
}
|
|
74
|
+
else if (runnerOS === 'win32' || runnerOS === 'Windows') {
|
|
75
|
+
normalizedOS = 'Windows';
|
|
76
|
+
}
|
|
77
|
+
else if (runnerOS === 'linux' || runnerOS === 'Linux') {
|
|
78
|
+
normalizedOS = 'Linux';
|
|
79
|
+
}
|
|
80
|
+
if (runnerArch === 'x64' || runnerArch === 'X64' || runnerArch === 'amd64') {
|
|
81
|
+
normalizedArch = 'X64';
|
|
82
|
+
}
|
|
83
|
+
else if (runnerArch === 'arm64' || runnerArch === 'ARM64' || runnerArch === 'aarch64') {
|
|
84
|
+
normalizedArch = 'ARM64';
|
|
85
|
+
}
|
|
86
|
+
const isWindows = normalizedOS === 'Windows';
|
|
87
|
+
let assetName;
|
|
88
|
+
switch (normalizedOS) {
|
|
89
|
+
case 'Linux':
|
|
90
|
+
assetName = normalizedArch === 'ARM64' ? 'boringcache-linux-arm64' : 'boringcache-linux-amd64';
|
|
91
|
+
break;
|
|
92
|
+
case 'macOS':
|
|
93
|
+
assetName = 'boringcache-macos-14-arm64';
|
|
94
|
+
break;
|
|
95
|
+
case 'Windows':
|
|
96
|
+
assetName = 'boringcache-windows-2022-amd64.exe';
|
|
97
|
+
break;
|
|
98
|
+
default:
|
|
99
|
+
throw new Error(`Unsupported platform: OS=${runnerOS}, ARCH=${runnerArch}`);
|
|
100
|
+
}
|
|
101
|
+
return {
|
|
102
|
+
os: normalizedOS.toLowerCase(),
|
|
103
|
+
arch: normalizedArch.toLowerCase(),
|
|
104
|
+
assetName,
|
|
105
|
+
isWindows,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
function getDownloadUrl(version, assetName) {
|
|
109
|
+
return `${GITHUB_RELEASES_BASE}/${version}/${assetName}`;
|
|
110
|
+
}
|
|
111
|
+
async function downloadAndInstall(version, platform) {
|
|
112
|
+
const downloadUrl = getDownloadUrl(version, platform.assetName);
|
|
113
|
+
core.info(`Downloading BoringCache CLI from: ${downloadUrl}`);
|
|
114
|
+
const downloadedPath = await tc.downloadTool(downloadUrl);
|
|
115
|
+
const binaryName = platform.isWindows ? 'boringcache.exe' : 'boringcache';
|
|
116
|
+
const installDir = path.join(os.tmpdir(), 'boringcache-install', version);
|
|
117
|
+
await fs.promises.mkdir(installDir, { recursive: true });
|
|
118
|
+
const binaryPath = path.join(installDir, binaryName);
|
|
119
|
+
await fs.promises.copyFile(downloadedPath, binaryPath);
|
|
120
|
+
if (!platform.isWindows) {
|
|
121
|
+
await fs.promises.chmod(binaryPath, 0o755);
|
|
122
|
+
}
|
|
123
|
+
const cachedPath = await tc.cacheDir(installDir, TOOL_NAME, version.replace(/^v/, ''));
|
|
124
|
+
return cachedPath;
|
|
125
|
+
}
|
|
126
|
+
async function isCliAvailable() {
|
|
127
|
+
try {
|
|
128
|
+
let output = '';
|
|
129
|
+
const result = await exec.exec('boringcache', ['--version'], {
|
|
130
|
+
ignoreReturnCode: true,
|
|
131
|
+
silent: true,
|
|
132
|
+
listeners: {
|
|
133
|
+
stdout: (data) => { output += data.toString(); },
|
|
134
|
+
stderr: (data) => { output += data.toString(); }
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
return result === 0 && output.includes('boringcache');
|
|
138
|
+
}
|
|
139
|
+
catch {
|
|
140
|
+
return false;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
async function ensureBoringCache(options) {
|
|
144
|
+
const token = options.token || process.env.BORINGCACHE_API_TOKEN;
|
|
145
|
+
if (token) {
|
|
146
|
+
core.setSecret(token);
|
|
147
|
+
}
|
|
148
|
+
if (options.version === 'skip') {
|
|
149
|
+
core.debug('CLI setup skipped (version: skip)');
|
|
150
|
+
if (await isCliAvailable()) {
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
throw new Error('BoringCache CLI not found and cli-version is set to "skip"');
|
|
154
|
+
}
|
|
155
|
+
if (await isCliAvailable()) {
|
|
156
|
+
core.debug('BoringCache CLI already available');
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
const version = options.version;
|
|
160
|
+
const normalizedVersion = version.startsWith('v') ? version : `v${version}`;
|
|
161
|
+
const platform = getPlatformInfo();
|
|
162
|
+
const enableCache = options.cache !== false;
|
|
163
|
+
core.info(`Installing BoringCache CLI ${normalizedVersion}...`);
|
|
164
|
+
// Get cache info for this version
|
|
165
|
+
const cacheInfo = getToolCacheInfo(normalizedVersion);
|
|
166
|
+
const toolCacheRoot = process.env.RUNNER_TOOL_CACHE || '/opt/hostedtoolcache';
|
|
167
|
+
const cachePaths = [`${toolCacheRoot}/${TOOL_NAME}`];
|
|
168
|
+
// Try to restore from actions/cache first
|
|
169
|
+
let restoredFromCache = false;
|
|
170
|
+
if (enableCache) {
|
|
171
|
+
try {
|
|
172
|
+
const cacheKey = await cache.restoreCache(cachePaths, cacheInfo.cacheKey);
|
|
173
|
+
if (cacheKey) {
|
|
174
|
+
core.info(`Restored CLI from cache (key: ${cacheKey})`);
|
|
175
|
+
restoredFromCache = true;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
catch (error) {
|
|
179
|
+
core.debug(`Cache restore failed: ${error instanceof Error ? error.message : error}`);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
let toolPath;
|
|
183
|
+
const cachedPath = tc.find(TOOL_NAME, normalizedVersion.replace(/^v/, ''));
|
|
184
|
+
if (cachedPath) {
|
|
185
|
+
core.info(`Using cached BoringCache CLI`);
|
|
186
|
+
toolPath = cachedPath;
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
toolPath = await downloadAndInstall(normalizedVersion, platform);
|
|
190
|
+
// Save to actions/cache for future workflow runs
|
|
191
|
+
if (enableCache && !restoredFromCache) {
|
|
192
|
+
try {
|
|
193
|
+
await cache.saveCache(cachePaths, cacheInfo.cacheKey);
|
|
194
|
+
core.info(`Saved CLI to cache (key: ${cacheInfo.cacheKey})`);
|
|
195
|
+
}
|
|
196
|
+
catch (error) {
|
|
197
|
+
// Cache save can fail if key already exists (race condition) - that's ok
|
|
198
|
+
core.debug(`Cache save failed: ${error instanceof Error ? error.message : error}`);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
core.addPath(toolPath);
|
|
203
|
+
core.info(`BoringCache CLI ${normalizedVersion} ready`);
|
|
204
|
+
}
|
|
205
|
+
async function execBoringCache(args, options = {}) {
|
|
206
|
+
const isWindows = os.platform() === 'win32';
|
|
207
|
+
try {
|
|
208
|
+
return await exec.exec('boringcache', args, options);
|
|
209
|
+
}
|
|
210
|
+
catch (error) {
|
|
211
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
212
|
+
if (isWindows && msg.includes('Unable to locate executable file')) {
|
|
213
|
+
const quoted = ['boringcache', ...args.map(a => {
|
|
214
|
+
const escaped = a.replace(/"/g, '\\"');
|
|
215
|
+
return /\s/.test(escaped) ? `"${escaped}"` : escaped;
|
|
216
|
+
})].join(' ');
|
|
217
|
+
return await exec.exec('bash', ['-lc', quoted], options);
|
|
218
|
+
}
|
|
219
|
+
throw error;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9saWIvc2V0dXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFtQ0EsNENBYUM7QUFnRkQsd0NBZUM7QUFFRCw4Q0FtRUM7QUFFRCwwQ0FxQkM7QUEzT0Qsb0RBQXNDO0FBQ3RDLG9EQUFzQztBQUN0Qyx3REFBMEM7QUFDMUMsc0RBQXdDO0FBQ3hDLHVDQUF5QjtBQUN6Qix1Q0FBeUI7QUFDekIsMkNBQTZCO0FBRTdCLE1BQU0sU0FBUyxHQUFHLGFBQWEsQ0FBQztBQUNoQyxNQUFNLG9CQUFvQixHQUFHLHNEQUFzRCxDQUFDO0FBc0JwRjs7O0dBR0c7QUFDSCxTQUFnQixnQkFBZ0IsQ0FBQyxPQUFlO0lBQzlDLE1BQU0saUJBQWlCLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDcEQsTUFBTSxRQUFRLEdBQUcsZUFBZSxFQUFFLENBQUM7SUFDbkMsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztJQUN4RCxNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFpQixJQUFJLHNCQUFzQixDQUFDO0lBRTlFLE9BQU87UUFDTCxRQUFRLEVBQUUsU0FBUztRQUNuQixPQUFPLEVBQUUsaUJBQWlCO1FBQzFCLFNBQVMsRUFBRSxTQUFTLElBQUksSUFBSTtRQUM1QixZQUFZLEVBQUUsR0FBRyxhQUFhLElBQUksU0FBUyxJQUFJLGlCQUFpQixHQUFHO1FBQ25FLFFBQVEsRUFBRSxHQUFHLFNBQVMsSUFBSSxpQkFBaUIsSUFBSSxRQUFRLENBQUMsRUFBRSxJQUFJLFFBQVEsQ0FBQyxJQUFJLEVBQUU7S0FDOUUsQ0FBQztBQUNKLENBQUM7QUFTRCxTQUFTLGVBQWU7SUFDdEIsTUFBTSxRQUFRLEdBQUcsT0FB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
|
package/package.json
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@boringcache/action-core",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Shared core library for BoringCache GitHub Actions",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"scripts": {
|
|
8
|
+
"build": "tsc",
|
|
9
|
+
"test": "jest",
|
|
10
|
+
"test:coverage": "jest --coverage",
|
|
11
|
+
"lint": "eslint lib/**/*.ts",
|
|
12
|
+
"clean": "rm -rf dist coverage",
|
|
13
|
+
"prepublishOnly": "npm run build"
|
|
14
|
+
},
|
|
15
|
+
"repository": {
|
|
16
|
+
"type": "git",
|
|
17
|
+
"url": "git+https://github.com/boringcache/actions.git",
|
|
18
|
+
"directory": "action-core"
|
|
19
|
+
},
|
|
20
|
+
"homepage": "https://github.com/boringcache/actions/tree/main/action-core#readme",
|
|
21
|
+
"bugs": {
|
|
22
|
+
"url": "https://github.com/boringcache/actions/issues"
|
|
23
|
+
},
|
|
24
|
+
"keywords": [
|
|
25
|
+
"boringcache",
|
|
26
|
+
"github-actions",
|
|
27
|
+
"cache",
|
|
28
|
+
"ci",
|
|
29
|
+
"cd"
|
|
30
|
+
],
|
|
31
|
+
"author": "BoringCache",
|
|
32
|
+
"license": "MIT",
|
|
33
|
+
"publishConfig": {
|
|
34
|
+
"access": "public",
|
|
35
|
+
"registry": "https://registry.npmjs.org/"
|
|
36
|
+
},
|
|
37
|
+
"engines": {
|
|
38
|
+
"node": ">=20"
|
|
39
|
+
},
|
|
40
|
+
"dependencies": {
|
|
41
|
+
"@actions/cache": "^5.0.3",
|
|
42
|
+
"@actions/core": "^1.10.1",
|
|
43
|
+
"@actions/exec": "^1.1.1",
|
|
44
|
+
"@actions/tool-cache": "^2.0.1"
|
|
45
|
+
},
|
|
46
|
+
"devDependencies": {
|
|
47
|
+
"@types/jest": "^29.5.14",
|
|
48
|
+
"@types/node": "^20.19.10",
|
|
49
|
+
"jest": "^29.7.0",
|
|
50
|
+
"ts-jest": "^29.2.6",
|
|
51
|
+
"typescript": "^5.0.0"
|
|
52
|
+
},
|
|
53
|
+
"files": [
|
|
54
|
+
"dist",
|
|
55
|
+
"README.md",
|
|
56
|
+
"LICENSE"
|
|
57
|
+
]
|
|
58
|
+
}
|