cache-extensions 1.14.1 → 1.15.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/README.md +29 -0
- package/lib/cache.d.ts +7 -1
- package/lib/cache.js +76 -71
- package/lib/cache.js.map +1 -1
- package/lib/utils.d.ts +7 -2
- package/lib/utils.js +14 -49
- package/lib/utils.js.map +1 -1
- package/package.json +32 -21
- package/src/cache.ts +125 -40
- package/src/lists/noble-libs +0 -2
- package/src/scripts/cache.sh +19 -5
- package/src/scripts/darwin.sh +2 -1
- package/src/scripts/linux.sh +41 -11
- package/src/utils.ts +23 -22
package/README.md
CHANGED
|
@@ -15,6 +15,7 @@ Cache PHP extensions in [GitHub Actions](https://github.com/features/actions "Gi
|
|
|
15
15
|
- [OS/Platform Support](#cloud-osplatform-support)
|
|
16
16
|
- [Usage](#memo-usage)
|
|
17
17
|
- [Inputs](#inputs)
|
|
18
|
+
- [Flags](#flags)
|
|
18
19
|
- [Workflow](#workflow)
|
|
19
20
|
- [Thread Safe Setup](#thread-safe-setup)
|
|
20
21
|
- [License](#scroll-license)
|
|
@@ -99,6 +100,34 @@ Use this GitHub Action when the extensions you are adding in [setup-php](https:/
|
|
|
99
100
|
|
|
100
101
|
See [action.yml](action.yml "Metadata for this GitHub Action") and usage below for more info.
|
|
101
102
|
|
|
103
|
+
### Flags
|
|
104
|
+
|
|
105
|
+
> Specify using the `env` keyword
|
|
106
|
+
|
|
107
|
+
#### `share-cache-across-jobs` (optional)
|
|
108
|
+
|
|
109
|
+
- Specify `true` to share the cache across jobs in the same workflow.
|
|
110
|
+
- By default, it is set to `false` and the job ID is included in the cache key.
|
|
111
|
+
|
|
112
|
+
#### `share-cache-across-workflows` (optional)
|
|
113
|
+
|
|
114
|
+
- Specify `true` to share the cache across workflows for the same job ID.
|
|
115
|
+
- By default, it is set to `false` and the workflow ID is included in the cache key.
|
|
116
|
+
- Enable both flags to share the cache across all jobs and workflows in the repository.
|
|
117
|
+
|
|
118
|
+
```yaml
|
|
119
|
+
- name: Setup cache environment
|
|
120
|
+
id: extcache
|
|
121
|
+
uses: shivammathur/cache-extensions@v1
|
|
122
|
+
with:
|
|
123
|
+
php-version: ${{ matrix.php-versions }}
|
|
124
|
+
extensions: ${{ env.extensions }}
|
|
125
|
+
key: ${{ env.key }}
|
|
126
|
+
env:
|
|
127
|
+
share-cache-across-jobs: true
|
|
128
|
+
share-cache-across-workflows: true
|
|
129
|
+
```
|
|
130
|
+
|
|
102
131
|
### Workflow
|
|
103
132
|
|
|
104
133
|
> Cache extensions in a PHP workflow
|
package/lib/cache.d.ts
CHANGED
|
@@ -1,2 +1,8 @@
|
|
|
1
|
-
export declare function
|
|
1
|
+
export declare function getErrorMessage(error: unknown): string;
|
|
2
|
+
export declare function normalizeModulePath(path: string): string;
|
|
3
|
+
export declare function shouldHandleDependencies(version: string, platform?: NodeJS.Platform): boolean;
|
|
4
|
+
export declare function handleDependencies(extensions: string, version: string, platform?: NodeJS.Platform): Promise<void>;
|
|
2
5
|
export declare function run(): Promise<void>;
|
|
6
|
+
export declare function main(runAction?: () => Promise<void>): Promise<void>;
|
|
7
|
+
export declare function isMainModule(argv1?: string | undefined, moduleUrl?: string): boolean;
|
|
8
|
+
export declare function bootstrap(argv1?: string | undefined, moduleUrl?: string, runAction?: () => Promise<void>): Promise<void>;
|
package/lib/cache.js
CHANGED
|
@@ -1,86 +1,91 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
import { exec } from '@actions/exec';
|
|
2
|
+
import * as cache from '@actions/cache';
|
|
3
|
+
import * as core from '@actions/core';
|
|
4
|
+
import * as spu from 'setup-php/lib/utils.js';
|
|
5
|
+
import { existsSync, realpathSync } from 'node:fs';
|
|
6
|
+
import { join, resolve } from 'node:path';
|
|
7
|
+
import { fileURLToPath } from 'node:url';
|
|
8
|
+
import * as utils from './utils.js';
|
|
9
|
+
const DEPENDENCY_CACHE_DIR = 'deps';
|
|
10
|
+
const DEPENDENCY_CACHE_PLATFORMS = new Set([
|
|
11
|
+
'darwin',
|
|
12
|
+
'linux'
|
|
13
|
+
]);
|
|
14
|
+
const SKIP_DEPENDENCY_CACHE_VERSIONS = /^5\.[3-5]$/;
|
|
15
|
+
export function getErrorMessage(error) {
|
|
16
|
+
return error instanceof Error ? error.message : String(error);
|
|
17
|
+
}
|
|
18
|
+
export function normalizeModulePath(path) {
|
|
19
|
+
const resolvedPath = resolve(path);
|
|
20
|
+
return existsSync(resolvedPath) ? realpathSync(resolvedPath) : resolvedPath;
|
|
21
|
+
}
|
|
22
|
+
export function shouldHandleDependencies(version, platform = process.platform) {
|
|
23
|
+
return (!SKIP_DEPENDENCY_CACHE_VERSIONS.test(version) &&
|
|
24
|
+
DEPENDENCY_CACHE_PLATFORMS.has(platform));
|
|
25
|
+
}
|
|
26
|
+
export async function handleDependencies(extensions, version, platform = process.platform) {
|
|
27
|
+
if (!shouldHandleDependencies(version, platform)) {
|
|
28
|
+
return;
|
|
7
29
|
}
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
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.handleDependencies = handleDependencies;
|
|
37
|
-
exports.run = run;
|
|
38
|
-
const exec_1 = require("@actions/exec");
|
|
39
|
-
const cache = __importStar(require("@actions/cache"));
|
|
40
|
-
const core = __importStar(require("@actions/core"));
|
|
41
|
-
const spu = __importStar(require("setup-php/lib/utils"));
|
|
42
|
-
const fs = __importStar(require("fs"));
|
|
43
|
-
const path = __importStar(require("path"));
|
|
44
|
-
const utils = __importStar(require("./utils"));
|
|
45
|
-
async function handleDependencies(extensions, version) {
|
|
46
|
-
if (!/^5.[3-5]$/.test(version) && /linux|darwin/.test(process.platform)) {
|
|
47
|
-
const cache_key = (await utils.getOutput('key')) + '-deps';
|
|
48
|
-
const cache_dir = path.join(await spu.readEnv('RUNNER_TOOL_CACHE'), 'deps');
|
|
49
|
-
const cache_hit = await cache.restoreCache([cache_dir], cache_key, [cache_key]);
|
|
50
|
-
await (0, exec_1.exec)(await utils.scriptCall('dependencies', extensions, version));
|
|
51
|
-
if (!cache_hit && fs.existsSync(cache_dir)) {
|
|
52
|
-
try {
|
|
53
|
-
await cache.saveCache([cache_dir], cache_key);
|
|
54
|
-
}
|
|
55
|
-
catch {
|
|
56
|
-
await cache.saveCache([cache_dir], cache_key + '-take-2');
|
|
57
|
-
}
|
|
58
|
-
}
|
|
30
|
+
const cacheKey = `${await utils.getOutput('key')}-deps`;
|
|
31
|
+
const cacheDir = join(await spu.readEnv('RUNNER_TOOL_CACHE'), DEPENDENCY_CACHE_DIR);
|
|
32
|
+
const cacheHit = await cache.restoreCache([cacheDir], cacheKey, [cacheKey]);
|
|
33
|
+
const dependencyScript = utils.scriptCall('dependencies', extensions, version);
|
|
34
|
+
await exec(dependencyScript.command, dependencyScript.args);
|
|
35
|
+
if (cacheHit || !existsSync(cacheDir)) {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
try {
|
|
39
|
+
await cache.saveCache([cacheDir], cacheKey);
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
await cache.saveCache([cacheDir], `${cacheKey}-take-2`);
|
|
59
43
|
}
|
|
60
44
|
}
|
|
61
|
-
async function run() {
|
|
45
|
+
export async function run() {
|
|
62
46
|
try {
|
|
63
47
|
const version = await spu.parseVersion(await spu.readPHPVersion());
|
|
64
|
-
const extensions =
|
|
48
|
+
const extensions = utils.filterExtensions(await spu.getInput('extensions', true));
|
|
65
49
|
const key = await spu.getInput('key', true);
|
|
66
|
-
|
|
50
|
+
const shareCacheAcrossJobs = (await spu.readEnv('share-cache-across-jobs')) === 'true'
|
|
51
|
+
? 'true'
|
|
52
|
+
: 'false';
|
|
53
|
+
const shareCacheAcrossWorkflows = (await spu.readEnv('share-cache-across-workflows')) === 'true'
|
|
54
|
+
? 'true'
|
|
55
|
+
: 'false';
|
|
56
|
+
const dataScript = utils.scriptCall('data', extensions, version, key, shareCacheAcrossJobs, shareCacheAcrossWorkflows);
|
|
57
|
+
await exec(dataScript.command, dataScript.args);
|
|
67
58
|
await handleDependencies(extensions, version);
|
|
68
59
|
}
|
|
69
60
|
catch (error) {
|
|
70
|
-
core.setFailed(error
|
|
61
|
+
core.setFailed(getErrorMessage(error));
|
|
71
62
|
}
|
|
72
63
|
}
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
if (error.name === cache.ValidationError.name) {
|
|
77
|
-
core.setFailed(error.message);
|
|
64
|
+
export async function main(runAction = run) {
|
|
65
|
+
try {
|
|
66
|
+
await runAction();
|
|
78
67
|
}
|
|
79
|
-
|
|
80
|
-
|
|
68
|
+
catch (error) {
|
|
69
|
+
const message = getErrorMessage(error);
|
|
70
|
+
if (error instanceof cache.ValidationError) {
|
|
71
|
+
core.setFailed(message);
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
if (error instanceof cache.ReserveCacheError) {
|
|
75
|
+
core.info(message);
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
core.warning(message);
|
|
81
79
|
}
|
|
82
|
-
|
|
83
|
-
|
|
80
|
+
}
|
|
81
|
+
export function isMainModule(argv1 = process.argv[1], moduleUrl = import.meta.url) {
|
|
82
|
+
return (!!argv1 &&
|
|
83
|
+
normalizeModulePath(argv1) === normalizeModulePath(fileURLToPath(moduleUrl)));
|
|
84
|
+
}
|
|
85
|
+
export async function bootstrap(argv1 = process.argv[1], moduleUrl = import.meta.url, runAction = main) {
|
|
86
|
+
if (isMainModule(argv1, moduleUrl)) {
|
|
87
|
+
await runAction();
|
|
84
88
|
}
|
|
85
|
-
}
|
|
89
|
+
}
|
|
90
|
+
await bootstrap();
|
|
86
91
|
//# sourceMappingURL=cache.js.map
|
package/lib/cache.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":"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"}
|
package/lib/utils.d.ts
CHANGED
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
export declare const SCRIPT_PATH: string;
|
|
2
|
+
export type ScriptCall = {
|
|
3
|
+
command: 'bash';
|
|
4
|
+
args: [string, string, ...string[]];
|
|
5
|
+
};
|
|
1
6
|
export declare function getOutput(output: string): Promise<string>;
|
|
2
|
-
export declare function filterExtensions(extension_csv: string):
|
|
3
|
-
export declare function scriptCall(fn: string, ...args: string[]):
|
|
7
|
+
export declare function filterExtensions(extension_csv: string): string;
|
|
8
|
+
export declare function scriptCall(fn: string, ...args: string[]): ScriptCall;
|
package/lib/utils.js
CHANGED
|
@@ -1,57 +1,22 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
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.getOutput = getOutput;
|
|
37
|
-
exports.filterExtensions = filterExtensions;
|
|
38
|
-
exports.scriptCall = scriptCall;
|
|
39
|
-
const fs = __importStar(require("fs"));
|
|
40
|
-
const path = __importStar(require("path"));
|
|
41
|
-
const spu = __importStar(require("setup-php/lib/utils"));
|
|
42
|
-
async function getOutput(output) {
|
|
43
|
-
return fs.readFileSync(path.join(await spu.readEnv('RUNNER_TEMP'), output), 'utf8');
|
|
1
|
+
import { readFile } from 'node:fs/promises';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import * as spu from 'setup-php/lib/utils.js';
|
|
4
|
+
export const SCRIPT_PATH = join(import.meta.dirname, '../src/scripts/cache.sh');
|
|
5
|
+
export async function getOutput(output) {
|
|
6
|
+
return readFile(join(await spu.readEnv('RUNNER_TEMP'), output), 'utf8');
|
|
44
7
|
}
|
|
45
|
-
|
|
46
|
-
return
|
|
8
|
+
export function filterExtensions(extension_csv) {
|
|
9
|
+
return extension_csv
|
|
47
10
|
.split(',')
|
|
48
11
|
.filter(extension => {
|
|
49
12
|
return extension.trim()[0] != ':';
|
|
50
13
|
})
|
|
51
|
-
.join(',')
|
|
14
|
+
.join(',');
|
|
52
15
|
}
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
16
|
+
export function scriptCall(fn, ...args) {
|
|
17
|
+
return {
|
|
18
|
+
command: 'bash',
|
|
19
|
+
args: [SCRIPT_PATH, fn, ...args]
|
|
20
|
+
};
|
|
56
21
|
}
|
|
57
22
|
//# sourceMappingURL=utils.js.map
|
package/lib/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAC,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAC,IAAI,EAAC,MAAM,WAAW,CAAC;AAC/B,OAAO,KAAK,GAAG,MAAM,wBAAwB,CAAC;AAE9C,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,EAAE,yBAAyB,CAAC,CAAC;AAUhF,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,MAAc;IAC5C,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC;AAC1E,CAAC;AAOD,MAAM,UAAU,gBAAgB,CAAC,aAAqB;IACpD,OAAO,aAAa;SACjB,KAAK,CAAC,GAAG,CAAC;SACV,MAAM,CAAC,SAAS,CAAC,EAAE;QAClB,OAAO,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;IACpC,CAAC,CAAC;SACD,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC;AAQD,MAAM,UAAU,UAAU,CAAC,EAAU,EAAE,GAAG,IAAc;IACtD,OAAO;QACL,OAAO,EAAE,MAAM;QACf,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC;KACjC,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cache-extensions",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.15.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Cache PHP extensions in GitHub Actions",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"engines": {
|
|
8
|
+
"node": ">=24"
|
|
9
|
+
},
|
|
6
10
|
"main": "lib/cache.js",
|
|
7
11
|
"types": "lib/cache.d.ts",
|
|
8
12
|
"directories": {
|
|
@@ -19,8 +23,8 @@
|
|
|
19
23
|
"lint": "eslint **/src/*.ts --cache --fix",
|
|
20
24
|
"format": "prettier --write **/src/*.ts && git add .",
|
|
21
25
|
"format-check": "prettier --check **/src/*.ts",
|
|
22
|
-
"release": "ncc build -m
|
|
23
|
-
"test": "jest"
|
|
26
|
+
"release": "ncc build src/cache.ts -m && git add -f dist/",
|
|
27
|
+
"test": "node --disable-warning=ExperimentalWarning --experimental-vm-modules node_modules/jest/bin/jest.js"
|
|
24
28
|
},
|
|
25
29
|
"repository": {
|
|
26
30
|
"type": "git",
|
|
@@ -35,30 +39,37 @@
|
|
|
35
39
|
"author": "shivammathur",
|
|
36
40
|
"license": "MIT",
|
|
37
41
|
"dependencies": {
|
|
38
|
-
"@actions/cache": "^
|
|
39
|
-
"@actions/core": "^
|
|
40
|
-
"@actions/exec": "^
|
|
41
|
-
"setup-php": "2.
|
|
42
|
+
"@actions/cache": "^6.2.0",
|
|
43
|
+
"@actions/core": "^3.0.1",
|
|
44
|
+
"@actions/exec": "^3.0.0",
|
|
45
|
+
"setup-php": "^2.37.2"
|
|
42
46
|
},
|
|
43
47
|
"devDependencies": {
|
|
44
|
-
"@eslint/compat": "^2.0
|
|
48
|
+
"@eslint/compat": "^2.1.0",
|
|
49
|
+
"@eslint/eslintrc": "^3.3.6",
|
|
50
|
+
"@eslint/js": "^10.0.1",
|
|
45
51
|
"@types/jest": "^30.0.0",
|
|
46
|
-
"@types/node": "^
|
|
47
|
-
"@typescript-eslint/eslint-plugin": "^8.
|
|
48
|
-
"@typescript-eslint/parser": "^8.
|
|
49
|
-
"@
|
|
50
|
-
"
|
|
52
|
+
"@types/node": "^26.2.0",
|
|
53
|
+
"@typescript-eslint/eslint-plugin": "^8.67.0",
|
|
54
|
+
"@typescript-eslint/parser": "^8.67.0",
|
|
55
|
+
"@typescript/native": "npm:typescript@^7.0.2",
|
|
56
|
+
"@vercel/ncc": "^0.44.1",
|
|
57
|
+
"eslint": "^10.8.1",
|
|
51
58
|
"eslint-config-prettier": "^10.1.8",
|
|
52
|
-
"eslint-
|
|
53
|
-
"eslint-plugin-
|
|
54
|
-
"eslint-plugin-
|
|
55
|
-
"
|
|
56
|
-
"
|
|
57
|
-
"
|
|
58
|
-
"
|
|
59
|
-
"
|
|
59
|
+
"eslint-import-resolver-typescript": "^4.4.5",
|
|
60
|
+
"eslint-plugin-import-x": "^4.17.1",
|
|
61
|
+
"eslint-plugin-jest": "^29.16.0",
|
|
62
|
+
"eslint-plugin-prettier": "^5.5.6",
|
|
63
|
+
"globals": "^17.9.0",
|
|
64
|
+
"jest": "^30.4.2",
|
|
65
|
+
"jest-circus": "^30.4.2",
|
|
66
|
+
"prettier": "^3.9.6",
|
|
67
|
+
"ts-jest": "^29.4.12",
|
|
68
|
+
"ts-node": "^10.9.2",
|
|
69
|
+
"typescript": "npm:@typescript/typescript6@^6.0.2"
|
|
60
70
|
},
|
|
61
71
|
"overrides": {
|
|
72
|
+
"brace-expansion@1.x": "^1.1.18",
|
|
62
73
|
"test-exclude": "^7.0.1",
|
|
63
74
|
"glob": "^13.0.6",
|
|
64
75
|
"undici": "^6.23.0"
|
package/src/cache.ts
CHANGED
|
@@ -1,40 +1,77 @@
|
|
|
1
1
|
import {exec} from '@actions/exec';
|
|
2
2
|
import * as cache from '@actions/cache';
|
|
3
3
|
import * as core from '@actions/core';
|
|
4
|
-
import * as spu from 'setup-php/lib/utils';
|
|
5
|
-
import
|
|
6
|
-
import
|
|
7
|
-
import
|
|
4
|
+
import * as spu from 'setup-php/lib/utils.js';
|
|
5
|
+
import {existsSync, realpathSync} from 'node:fs';
|
|
6
|
+
import {join, resolve} from 'node:path';
|
|
7
|
+
import {fileURLToPath} from 'node:url';
|
|
8
|
+
import * as utils from './utils.js';
|
|
9
|
+
|
|
10
|
+
const DEPENDENCY_CACHE_DIR = 'deps';
|
|
11
|
+
const DEPENDENCY_CACHE_PLATFORMS = new Set<NodeJS.Platform>([
|
|
12
|
+
'darwin',
|
|
13
|
+
'linux'
|
|
14
|
+
]);
|
|
15
|
+
const SKIP_DEPENDENCY_CACHE_VERSIONS = /^5\.[3-5]$/;
|
|
16
|
+
|
|
17
|
+
export function getErrorMessage(error: unknown): string {
|
|
18
|
+
return error instanceof Error ? error.message : String(error);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export function normalizeModulePath(path: string): string {
|
|
22
|
+
const resolvedPath = resolve(path);
|
|
23
|
+
|
|
24
|
+
return existsSync(resolvedPath) ? realpathSync(resolvedPath) : resolvedPath;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export function shouldHandleDependencies(
|
|
28
|
+
version: string,
|
|
29
|
+
platform: NodeJS.Platform = process.platform
|
|
30
|
+
): boolean {
|
|
31
|
+
return (
|
|
32
|
+
!SKIP_DEPENDENCY_CACHE_VERSIONS.test(version) &&
|
|
33
|
+
DEPENDENCY_CACHE_PLATFORMS.has(platform)
|
|
34
|
+
);
|
|
35
|
+
}
|
|
8
36
|
|
|
9
37
|
/**
|
|
10
38
|
* Handle dependencies
|
|
11
39
|
*
|
|
12
40
|
* @param extensions
|
|
13
41
|
* @param version
|
|
42
|
+
* @param platform
|
|
14
43
|
*/
|
|
15
44
|
export async function handleDependencies(
|
|
16
45
|
extensions: string,
|
|
17
|
-
version: string
|
|
46
|
+
version: string,
|
|
47
|
+
platform: NodeJS.Platform = process.platform
|
|
18
48
|
): Promise<void> {
|
|
19
|
-
if (
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
49
|
+
if (!shouldHandleDependencies(version, platform)) {
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
const cacheKey = `${await utils.getOutput('key')}-deps`;
|
|
54
|
+
const cacheDir = join(
|
|
55
|
+
await spu.readEnv('RUNNER_TOOL_CACHE'),
|
|
56
|
+
DEPENDENCY_CACHE_DIR
|
|
57
|
+
);
|
|
58
|
+
const cacheHit = await cache.restoreCache([cacheDir], cacheKey, [cacheKey]);
|
|
59
|
+
const dependencyScript = utils.scriptCall(
|
|
60
|
+
'dependencies',
|
|
61
|
+
extensions,
|
|
62
|
+
version
|
|
63
|
+
);
|
|
64
|
+
|
|
65
|
+
await exec(dependencyScript.command, dependencyScript.args);
|
|
66
|
+
|
|
67
|
+
if (cacheHit || !existsSync(cacheDir)) {
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
try {
|
|
72
|
+
await cache.saveCache([cacheDir], cacheKey);
|
|
73
|
+
} catch {
|
|
74
|
+
await cache.saveCache([cacheDir], `${cacheKey}-take-2`);
|
|
38
75
|
}
|
|
39
76
|
}
|
|
40
77
|
|
|
@@ -43,27 +80,75 @@ export async function handleDependencies(
|
|
|
43
80
|
*/
|
|
44
81
|
export async function run(): Promise<void> {
|
|
45
82
|
try {
|
|
46
|
-
const version
|
|
47
|
-
const extensions
|
|
83
|
+
const version = await spu.parseVersion(await spu.readPHPVersion());
|
|
84
|
+
const extensions = utils.filterExtensions(
|
|
48
85
|
await spu.getInput('extensions', true)
|
|
49
86
|
);
|
|
50
|
-
const key
|
|
51
|
-
|
|
87
|
+
const key = await spu.getInput('key', true);
|
|
88
|
+
const shareCacheAcrossJobs =
|
|
89
|
+
(await spu.readEnv('share-cache-across-jobs')) === 'true'
|
|
90
|
+
? 'true'
|
|
91
|
+
: 'false';
|
|
92
|
+
const shareCacheAcrossWorkflows =
|
|
93
|
+
(await spu.readEnv('share-cache-across-workflows')) === 'true'
|
|
94
|
+
? 'true'
|
|
95
|
+
: 'false';
|
|
96
|
+
const dataScript = utils.scriptCall(
|
|
97
|
+
'data',
|
|
98
|
+
extensions,
|
|
99
|
+
version,
|
|
100
|
+
key,
|
|
101
|
+
shareCacheAcrossJobs,
|
|
102
|
+
shareCacheAcrossWorkflows
|
|
103
|
+
);
|
|
104
|
+
|
|
105
|
+
await exec(dataScript.command, dataScript.args);
|
|
52
106
|
await handleDependencies(extensions, version);
|
|
53
107
|
} catch (error) {
|
|
54
|
-
core.setFailed((error
|
|
108
|
+
core.setFailed(getErrorMessage(error));
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
export async function main(
|
|
113
|
+
runAction: () => Promise<void> = run
|
|
114
|
+
): Promise<void> {
|
|
115
|
+
try {
|
|
116
|
+
await runAction();
|
|
117
|
+
} catch (error) {
|
|
118
|
+
const message = getErrorMessage(error);
|
|
119
|
+
|
|
120
|
+
if (error instanceof cache.ValidationError) {
|
|
121
|
+
core.setFailed(message);
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
if (error instanceof cache.ReserveCacheError) {
|
|
126
|
+
core.info(message);
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
core.warning(message);
|
|
55
131
|
}
|
|
56
132
|
}
|
|
57
133
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
134
|
+
export function isMainModule(
|
|
135
|
+
argv1: string | undefined = process.argv[1],
|
|
136
|
+
moduleUrl: string = import.meta.url
|
|
137
|
+
): boolean {
|
|
138
|
+
return (
|
|
139
|
+
!!argv1 &&
|
|
140
|
+
normalizeModulePath(argv1) === normalizeModulePath(fileURLToPath(moduleUrl))
|
|
141
|
+
);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
export async function bootstrap(
|
|
145
|
+
argv1: string | undefined = process.argv[1],
|
|
146
|
+
moduleUrl: string = import.meta.url,
|
|
147
|
+
runAction: () => Promise<void> = main
|
|
148
|
+
): Promise<void> {
|
|
149
|
+
if (isMainModule(argv1, moduleUrl)) {
|
|
150
|
+
await runAction();
|
|
68
151
|
}
|
|
69
|
-
}
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
await bootstrap();
|
package/src/lists/noble-libs
CHANGED
|
@@ -95,7 +95,6 @@ libdbus-1-3
|
|
|
95
95
|
libdbusmenu-glib4
|
|
96
96
|
libdbusmenu-gtk3-4
|
|
97
97
|
libdconf1
|
|
98
|
-
libde265-0
|
|
99
98
|
libdebconfclient0
|
|
100
99
|
libdeflate0
|
|
101
100
|
libdevmapper-event1.02.1
|
|
@@ -189,7 +188,6 @@ libharfbuzz0b
|
|
|
189
188
|
libhashkit2t64
|
|
190
189
|
libhavege2
|
|
191
190
|
libheif-plugin-aomdec
|
|
192
|
-
libheif-plugin-libde265
|
|
193
191
|
libheif1
|
|
194
192
|
libhogweed6t64
|
|
195
193
|
libhtml-parser-perl
|
package/src/scripts/cache.sh
CHANGED
|
@@ -88,6 +88,17 @@ linux_php_semver() {
|
|
|
88
88
|
fi
|
|
89
89
|
}
|
|
90
90
|
|
|
91
|
+
get_cache_scope() {
|
|
92
|
+
local scope="${GITHUB_REPOSITORY}"
|
|
93
|
+
if [ "${share_cache_across_workflows:-false}" != "true" ]; then
|
|
94
|
+
scope="$scope-${GITHUB_WORKFLOW}"
|
|
95
|
+
fi
|
|
96
|
+
if [ "$runner" = "github" ] && [ "${share_cache_across_jobs:-false}" != "true" ]; then
|
|
97
|
+
scope="$scope-${GITHUB_JOB}"
|
|
98
|
+
fi
|
|
99
|
+
echo "$scope"
|
|
100
|
+
}
|
|
101
|
+
|
|
91
102
|
data() {
|
|
92
103
|
old_versions="5.[3-5]"
|
|
93
104
|
date='20260314'
|
|
@@ -108,17 +119,17 @@ data() {
|
|
|
108
119
|
else
|
|
109
120
|
os="Windows-$arch"
|
|
110
121
|
dir='C:\\tools\\php\\ext'
|
|
122
|
+
[ "$version" = "8.6" ] && date='20260608'
|
|
111
123
|
fi
|
|
112
124
|
[[ ( -z "$ImageOS" && -z "$ImageVersion" ) ||
|
|
113
125
|
( -n "$RUNNER_ENVIRONMENT" && "$RUNNER_ENVIRONMENT" = "self-hosted" ) ||
|
|
114
126
|
-n "$ACT" || -n "$CONTAINER" ]] && _runner=self-hosted || _runner=github
|
|
115
127
|
runner="${runner:-${RUNNER:-$_runner}}"
|
|
116
|
-
|
|
117
|
-
[ "$runner" = "github" ] && job="$job-${GITHUB_JOB}"
|
|
128
|
+
scope="$(get_cache_scope)"
|
|
118
129
|
if command -v "sha256sum" >/dev/null; then
|
|
119
|
-
key="$(echo -n "$extensions-$key-$
|
|
130
|
+
key="$(echo -n "$extensions-$key-$scope" | sha256sum | cut -d ' ' -f 1)"
|
|
120
131
|
else
|
|
121
|
-
key="$(echo -n "$extensions-$key-$
|
|
132
|
+
key="$(echo -n "$extensions-$key-$scope" | openssl dgst -sha256 | cut -d ' ' -f 2)"
|
|
122
133
|
fi
|
|
123
134
|
key="$os"-"$version"-"$key"-"$date"
|
|
124
135
|
echo "$dir" > "${RUNNER_TEMP:?}"/dir
|
|
@@ -140,9 +151,10 @@ init() {
|
|
|
140
151
|
export tick="✓"
|
|
141
152
|
export cross="✗"
|
|
142
153
|
script_dir=$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)
|
|
154
|
+
platform_script="$script_dir/$(echo "$os" | tr '[:upper:]' '[:lower:]').sh"
|
|
143
155
|
if [[ "$os" = "Linux" || "$os" = "Darwin" ]]; then
|
|
144
156
|
# shellcheck disable=SC1090
|
|
145
|
-
. "$
|
|
157
|
+
. "$platform_script"
|
|
146
158
|
self_hosted_helper
|
|
147
159
|
fi
|
|
148
160
|
}
|
|
@@ -151,6 +163,8 @@ run=$1
|
|
|
151
163
|
extensions=$2
|
|
152
164
|
version=$3
|
|
153
165
|
key=$4
|
|
166
|
+
share_cache_across_jobs=${5:-false}
|
|
167
|
+
share_cache_across_workflows=${6:-false}
|
|
154
168
|
os="$(uname -s)"
|
|
155
169
|
init
|
|
156
170
|
$run
|
package/src/scripts/darwin.sh
CHANGED
|
@@ -21,6 +21,7 @@ add_brew_tap() {
|
|
|
21
21
|
fi
|
|
22
22
|
fi
|
|
23
23
|
fi
|
|
24
|
+
brew trust "$tap" >/dev/null 2>&1
|
|
24
25
|
}
|
|
25
26
|
|
|
26
27
|
get_lookup_extension_name() {
|
|
@@ -85,7 +86,7 @@ setup_extensions_helper() {
|
|
|
85
86
|
dependent_extension=$1
|
|
86
87
|
dependency_extension=$2
|
|
87
88
|
extension_dir=$3
|
|
88
|
-
dependency_extension_name="$(basename "$(echo $dependency_extension | cut -d'@' -f 1)")"
|
|
89
|
+
dependency_extension_name="$(basename "$(echo "$dependency_extension" | cut -d'@' -f 1)")"
|
|
89
90
|
cached_extension="${deps_cache_directory:?}/$dependency_extension_name.so"
|
|
90
91
|
if ! [ -e "$cached_extension" ]; then
|
|
91
92
|
brew install "$dependency_extension"
|
package/src/scripts/linux.sh
CHANGED
|
@@ -23,9 +23,8 @@ add_package() {
|
|
|
23
23
|
|
|
24
24
|
add_ppa_package() {
|
|
25
25
|
package=$1
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
sudo DEBIAN_FRONTEND=noninteractive dpkg -i "/tmp/$package.deb"
|
|
26
|
+
download_ppa_package "$package" "/tmp/$package.deb" &&
|
|
27
|
+
sudo DEBIAN_FRONTEND=noninteractive dpkg -i "/tmp/$package.deb"
|
|
29
28
|
}
|
|
30
29
|
|
|
31
30
|
link_apt_fast() {
|
|
@@ -35,11 +34,34 @@ link_apt_fast() {
|
|
|
35
34
|
fi
|
|
36
35
|
}
|
|
37
36
|
|
|
37
|
+
download_ppa_file() {
|
|
38
|
+
local file=$1
|
|
39
|
+
local target=$2
|
|
40
|
+
local root
|
|
41
|
+
local roots=()
|
|
42
|
+
if [[ -n "${preferred_ppa_root:-}" ]]; then
|
|
43
|
+
roots+=("$preferred_ppa_root")
|
|
44
|
+
fi
|
|
45
|
+
for root in "https://ppa.launchpadcontent.net" "https://ppa.setup-php.com"; do
|
|
46
|
+
[[ "$root" = "${preferred_ppa_root:-}" ]] && continue
|
|
47
|
+
roots+=("$root")
|
|
48
|
+
done
|
|
49
|
+
rm -f "$target"
|
|
50
|
+
for root in "${roots[@]}"; do
|
|
51
|
+
if curl -H "User-Agent: Debian APT-HTTP/GHA(ce)" --connect-timeout 5 -o "$target" -fsL "$root/$file"; then
|
|
52
|
+
preferred_ppa_root=$root
|
|
53
|
+
return 0
|
|
54
|
+
fi
|
|
55
|
+
rm -f "$target"
|
|
56
|
+
done
|
|
57
|
+
return 1
|
|
58
|
+
}
|
|
59
|
+
|
|
38
60
|
fetch_package() {
|
|
39
61
|
if ! [ -e /tmp/Packages ]; then
|
|
40
62
|
. /etc/os-release
|
|
41
63
|
arch=$(dpkg --print-architecture)
|
|
42
|
-
|
|
64
|
+
download_ppa_file "ondrej/php/ubuntu/dists/$VERSION_CODENAME/main/binary-$arch/Packages.gz" "/tmp/Packages.gz" || return 1
|
|
43
65
|
gzip -df /tmp/Packages.gz
|
|
44
66
|
fi
|
|
45
67
|
}
|
|
@@ -55,11 +77,20 @@ get_dependencies() {
|
|
|
55
77
|
echo "${deps[@]}"
|
|
56
78
|
}
|
|
57
79
|
|
|
58
|
-
|
|
80
|
+
get_package_file() {
|
|
81
|
+
package=$1
|
|
82
|
+
awk -v package="$package" '
|
|
83
|
+
$1 == "Package:" && $2 == package { found = 1 }
|
|
84
|
+
found && $1 == "Filename:" { print $2; exit }
|
|
85
|
+
found && /^$/ { found = 0 }
|
|
86
|
+
' /tmp/Packages | tr -d '\r'
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
download_ppa_package() {
|
|
59
90
|
package=$1
|
|
60
|
-
|
|
61
|
-
file=$(
|
|
62
|
-
|
|
91
|
+
target=$2
|
|
92
|
+
file=$(get_package_file "$package")
|
|
93
|
+
download_ppa_file "ondrej/php/ubuntu/$file" "$target"
|
|
63
94
|
}
|
|
64
95
|
|
|
65
96
|
setup_extensions_helper() {
|
|
@@ -68,8 +99,7 @@ setup_extensions_helper() {
|
|
|
68
99
|
cached_extension="${deps_cache_directory:?}/$dependency_extension.so"
|
|
69
100
|
if ! [ -e "$extension_dir/$dependency_extension.so" ]; then
|
|
70
101
|
if ! [ -e "$cached_extension" ]; then
|
|
71
|
-
|
|
72
|
-
sudo curl -H "User-Agent: Debian APT-HTTP/GHA(ce)" -o "/tmp/$dependency_extension".deb -sL "$extension_package_link"
|
|
102
|
+
download_ppa_package "php${version:?}-$dependency_extension" "/tmp/$dependency_extension".deb || return 1
|
|
73
103
|
sudo dpkg-deb -x "/tmp/$dependency_extension".deb /
|
|
74
104
|
sudo cp "$extension_dir/$dependency_extension.so" "$cached_extension"
|
|
75
105
|
fix_ownership "$extension_dir"
|
|
@@ -139,7 +169,7 @@ setup_dependencies() {
|
|
|
139
169
|
extension_packages=""
|
|
140
170
|
for extension_package in "${extensions_array[@]}"; do
|
|
141
171
|
[[ ! "$extension_package" =~ php[0-9]+\.[0-9]+-[a-zA-Z0-9]+$ ]] && continue
|
|
142
|
-
fetch_package
|
|
172
|
+
fetch_package || return 1
|
|
143
173
|
libraries="$libraries $(get_dependencies "$extension_package" "lib")"
|
|
144
174
|
IFS=' ' read -r -a dependency_extension_packages_array <<<"$(get_dependencies "$extension_package" "php$version-")"
|
|
145
175
|
extension_packages="$extension_packages ${dependency_extension_packages_array[*]}"
|
package/src/utils.ts
CHANGED
|
@@ -1,15 +1,19 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import * as spu from 'setup-php/lib/utils';
|
|
1
|
+
import {readFile} from 'node:fs/promises';
|
|
2
|
+
import {join} from 'node:path';
|
|
3
|
+
import * as spu from 'setup-php/lib/utils.js';
|
|
4
|
+
|
|
5
|
+
export const SCRIPT_PATH = join(import.meta.dirname, '../src/scripts/cache.sh');
|
|
6
|
+
|
|
7
|
+
export type ScriptCall = {
|
|
8
|
+
command: 'bash';
|
|
9
|
+
args: [string, string, ...string[]];
|
|
10
|
+
};
|
|
4
11
|
|
|
5
12
|
/**
|
|
6
13
|
* Function to get outputs
|
|
7
14
|
*/
|
|
8
15
|
export async function getOutput(output: string): Promise<string> {
|
|
9
|
-
return
|
|
10
|
-
path.join(await spu.readEnv('RUNNER_TEMP'), output),
|
|
11
|
-
'utf8'
|
|
12
|
-
);
|
|
16
|
+
return readFile(join(await spu.readEnv('RUNNER_TEMP'), output), 'utf8');
|
|
13
17
|
}
|
|
14
18
|
|
|
15
19
|
/**
|
|
@@ -17,15 +21,13 @@ export async function getOutput(output: string): Promise<string> {
|
|
|
17
21
|
*
|
|
18
22
|
* @param extension_csv
|
|
19
23
|
*/
|
|
20
|
-
export
|
|
21
|
-
return
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
.
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
.join(',')
|
|
28
|
-
);
|
|
24
|
+
export function filterExtensions(extension_csv: string): string {
|
|
25
|
+
return extension_csv
|
|
26
|
+
.split(',')
|
|
27
|
+
.filter(extension => {
|
|
28
|
+
return extension.trim()[0] != ':';
|
|
29
|
+
})
|
|
30
|
+
.join(',');
|
|
29
31
|
}
|
|
30
32
|
|
|
31
33
|
/**
|
|
@@ -34,10 +36,9 @@ export async function filterExtensions(extension_csv: string): Promise<string> {
|
|
|
34
36
|
* @param fn
|
|
35
37
|
* @param args
|
|
36
38
|
*/
|
|
37
|
-
export
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
return ['bash', script, fn, ...args].join(' ');
|
|
39
|
+
export function scriptCall(fn: string, ...args: string[]): ScriptCall {
|
|
40
|
+
return {
|
|
41
|
+
command: 'bash',
|
|
42
|
+
args: [SCRIPT_PATH, fn, ...args]
|
|
43
|
+
};
|
|
43
44
|
}
|