@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 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
@@ -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==
@@ -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
+ }