cache-extensions 1.13.0 → 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 +56 -25
- 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 +35 -22
- package/src/cache.ts +125 -40
- package/src/lists/darwin-extensions +65 -0
- package/src/lists/jammy-libs +4 -3
- package/src/lists/noble-libs +2 -5
- package/src/scripts/cache.sh +26 -5
- package/src/scripts/darwin.sh +42 -9
- package/src/scripts/linux.sh +41 -11
- package/src/utils.ts +23 -22
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
<a href="https://github.com/shivammathur/cache-extensions" title="Cache PHP extensions in GitHub Actions"><img alt="GitHub Actions status" src="https://github.com/shivammathur/cache-extensions/workflows/Node%20test%20workflow/badge.svg"></a>
|
|
5
5
|
<a href="https://codecov.io/gh/shivammathur/cache-extensions" title="Code coverage"><img alt="Codecov Code Coverage" src="https://codecov.io/gh/shivammathur/cache-extensions/branch/master/graph/badge.svg"></a>
|
|
6
6
|
<a href="https://github.com/shivammathur/cache-extensions/blob/master/LICENSE" title="license"><img alt="LICENSE" src="https://img.shields.io/badge/license-MIT-428f7e.svg?logo=open%20source%20initiative&logoColor=white&labelColor=555555"></a>
|
|
7
|
-
<a href="#tada-php-support" title="PHP Versions Supported"><img alt="PHP Versions Supported" src="https://img.shields.io/badge/php-5.3%20to%208.
|
|
7
|
+
<a href="#tada-php-support" title="PHP Versions Supported"><img alt="PHP Versions Supported" src="https://img.shields.io/badge/php-5.3%20to%208.6-777bb3.svg?logo=php&logoColor=white&labelColor=555555"></a>
|
|
8
8
|
</p>
|
|
9
9
|
|
|
10
10
|
Cache PHP extensions in [GitHub Actions](https://github.com/features/actions "GitHub Actions"). This action has to be used along with [shivammathur/setup-php](https://github.com/shivammathur/setup-php "Setup PHP") and [actions/cache](https://github.com/actions/cache "Cache in GitHub Actions") GitHub Actions. It configures the environment required to cache PHP extensions. Refer to [Usage](#memo-usage "How to use this") section for details and example workflow.
|
|
@@ -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)
|
|
@@ -24,23 +25,24 @@ Cache PHP extensions in [GitHub Actions](https://github.com/features/actions "Gi
|
|
|
24
25
|
|
|
25
26
|
## :tada: PHP Support
|
|
26
27
|
|
|
27
|
-
|PHP Version|Stability|Release Support|
|
|
28
|
-
|
|
29
|
-
|5.3|`Stable`|`End of life`|
|
|
30
|
-
|5.4|`Stable`|`End of life`|
|
|
31
|
-
|5.5|`Stable`|`End of life`|
|
|
32
|
-
|5.6|`Stable`|`End of life`|
|
|
33
|
-
|7.0|`Stable`|`End of life`|
|
|
34
|
-
|7.1|`Stable`|`End of life`|
|
|
35
|
-
|7.2|`Stable`|`End of life`|
|
|
36
|
-
|7.3|`Stable`|`End of life`|
|
|
37
|
-
|7.4|`Stable`|`End of life`|
|
|
38
|
-
|8.0|`Stable`|`End of life`|
|
|
39
|
-
|8.1|`Stable`|`Security fixes only`|
|
|
40
|
-
|8.2|`Stable`|`Security fixes only`|
|
|
41
|
-
|8.3|`Stable`|`Active`|
|
|
42
|
-
|8.4|`Stable`|`Active`|
|
|
43
|
-
|8.5|`
|
|
28
|
+
| PHP Version |Stability|Release Support|
|
|
29
|
+
|-------------|--- |--- |
|
|
30
|
+
| 5.3 |`Stable`|`End of life`|
|
|
31
|
+
| 5.4 |`Stable`|`End of life`|
|
|
32
|
+
| 5.5 |`Stable`|`End of life`|
|
|
33
|
+
| 5.6 |`Stable`|`End of life`|
|
|
34
|
+
| 7.0 |`Stable`|`End of life`|
|
|
35
|
+
| 7.1 |`Stable`|`End of life`|
|
|
36
|
+
| 7.2 |`Stable`|`End of life`|
|
|
37
|
+
| 7.3 |`Stable`|`End of life`|
|
|
38
|
+
| 7.4 |`Stable`|`End of life`|
|
|
39
|
+
| 8.0 |`Stable`|`End of life`|
|
|
40
|
+
| 8.1 |`Stable`|`Security fixes only`|
|
|
41
|
+
| 8.2 |`Stable`|`Security fixes only`|
|
|
42
|
+
| 8.3 |`Stable`|`Active`|
|
|
43
|
+
| 8.4 |`Stable`|`Active`|
|
|
44
|
+
| 8.5 |`Stable`|`Active`|
|
|
45
|
+
| 8.6 |`Nightly`|`In development`|
|
|
44
46
|
|
|
45
47
|
## :cloud: OS/Platform Support
|
|
46
48
|
|
|
@@ -52,10 +54,11 @@ Cache PHP extensions in [GitHub Actions](https://github.com/features/actions "Gi
|
|
|
52
54
|
| Ubuntu 22.04 | aarch64 | `ubuntu-22.04-arm` |
|
|
53
55
|
| Windows Server 2025 | x64 | `windows-2025` |
|
|
54
56
|
| Windows Server 2022 | x64 | `windows-latest` or `windows-2022` |
|
|
55
|
-
|
|
|
56
|
-
| macOS Sequoia 15.x | arm64 | `macos-15`
|
|
57
|
-
| macOS Sonoma 14.x | arm64 | `macos-
|
|
58
|
-
| macOS
|
|
57
|
+
| macOS Tahoe 26.x | arm64 | `macos-26` |
|
|
58
|
+
| macOS Sequoia 15.x | arm64 | `macos-latest` or `macos-15` |
|
|
59
|
+
| macOS Sonoma 14.x | arm64 | `macos-14` |
|
|
60
|
+
| macOS Tahoe 26.x | x86_64 | `macos-26-intel` |
|
|
61
|
+
| macOS Sequoia 15.x | x86_64 | `macos-15-intel` |
|
|
59
62
|
|
|
60
63
|
**Note**: Support for self-hosted runners for the above operating systems is in beta. If you use this action on a self-hosted runner, please report any issues you find.
|
|
61
64
|
|
|
@@ -68,7 +71,7 @@ Use this GitHub Action when the extensions you are adding in [setup-php](https:/
|
|
|
68
71
|
#### `php-version` (optional)
|
|
69
72
|
|
|
70
73
|
- Specify the PHP version you want to set up.
|
|
71
|
-
- Accepts a `string`. For example `'8.
|
|
74
|
+
- Accepts a `string`. For example `'8.5'`.
|
|
72
75
|
- Accepts `latest` to set up the latest stable PHP version.
|
|
73
76
|
- Accepts `nightly` to set up a nightly build from the master branch of PHP.
|
|
74
77
|
- Accepts the format `d.x`, where `d` is the major version. For example `5.x`, `7.x` and `8.x`.
|
|
@@ -97,6 +100,34 @@ Use this GitHub Action when the extensions you are adding in [setup-php](https:/
|
|
|
97
100
|
|
|
98
101
|
See [action.yml](action.yml "Metadata for this GitHub Action") and usage below for more info.
|
|
99
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
|
+
|
|
100
131
|
### Workflow
|
|
101
132
|
|
|
102
133
|
> Cache extensions in a PHP workflow
|
|
@@ -108,14 +139,14 @@ jobs:
|
|
|
108
139
|
strategy:
|
|
109
140
|
matrix:
|
|
110
141
|
operating-system: [ubuntu-latest, windows-latest, macos-latest]
|
|
111
|
-
php-versions: ['8.
|
|
142
|
+
php-versions: ['8.3', '8.4', '8.5']
|
|
112
143
|
name: PHP ${{ matrix.php-versions }} Test on ${{ matrix.operating-system }}
|
|
113
144
|
env:
|
|
114
145
|
extensions: intl, pcov
|
|
115
146
|
key: cache-v1 # can be any string, change to clear the extension cache.
|
|
116
147
|
steps:
|
|
117
148
|
- name: Checkout
|
|
118
|
-
uses: actions/checkout@
|
|
149
|
+
uses: actions/checkout@v5
|
|
119
150
|
|
|
120
151
|
- name: Setup cache environment
|
|
121
152
|
id: extcache
|
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,31 +39,40 @@
|
|
|
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": "^1.
|
|
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": {
|
|
62
|
-
"
|
|
72
|
+
"brace-expansion@1.x": "^1.1.18",
|
|
73
|
+
"test-exclude": "^7.0.1",
|
|
74
|
+
"glob": "^13.0.6",
|
|
75
|
+
"undici": "^6.23.0"
|
|
63
76
|
},
|
|
64
77
|
"bugs": {
|
|
65
78
|
"url": "https://github.com/shivammathur/cache-extensions/issues"
|
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();
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
amqp
|
|
2
|
+
apcu
|
|
3
|
+
ast
|
|
4
|
+
brotli
|
|
5
|
+
couchbase
|
|
6
|
+
decimal
|
|
7
|
+
ds
|
|
8
|
+
event
|
|
9
|
+
excimer
|
|
10
|
+
expect
|
|
11
|
+
gearman
|
|
12
|
+
gmagick
|
|
13
|
+
gnupg
|
|
14
|
+
grpc
|
|
15
|
+
igbinary
|
|
16
|
+
imagick
|
|
17
|
+
imap
|
|
18
|
+
interbase
|
|
19
|
+
lua
|
|
20
|
+
mailparse
|
|
21
|
+
maxminddb
|
|
22
|
+
mcrypt
|
|
23
|
+
memcache
|
|
24
|
+
memcached
|
|
25
|
+
mongodb
|
|
26
|
+
mongodb1
|
|
27
|
+
msgpack
|
|
28
|
+
newrelic
|
|
29
|
+
oauth
|
|
30
|
+
opentelemetry
|
|
31
|
+
pcov
|
|
32
|
+
pdo_firebird
|
|
33
|
+
pdo_sqlsrv
|
|
34
|
+
pecl_http
|
|
35
|
+
phalcon3
|
|
36
|
+
phalcon4
|
|
37
|
+
phalcon5
|
|
38
|
+
pinba
|
|
39
|
+
propro
|
|
40
|
+
protobuf
|
|
41
|
+
psr
|
|
42
|
+
raphf
|
|
43
|
+
rdkafka
|
|
44
|
+
redis
|
|
45
|
+
scalar_objects
|
|
46
|
+
seaslog
|
|
47
|
+
snmp
|
|
48
|
+
spx
|
|
49
|
+
sqlsrv
|
|
50
|
+
ssh2
|
|
51
|
+
swoole
|
|
52
|
+
swow
|
|
53
|
+
uopz
|
|
54
|
+
uploadprogress
|
|
55
|
+
uuid
|
|
56
|
+
v8js
|
|
57
|
+
vips
|
|
58
|
+
vld
|
|
59
|
+
xdebug
|
|
60
|
+
xdebug2
|
|
61
|
+
xhprof
|
|
62
|
+
xlswriter
|
|
63
|
+
yaml
|
|
64
|
+
zmq
|
|
65
|
+
zstd
|
package/src/lists/jammy-libs
CHANGED
|
@@ -247,10 +247,8 @@ libinih1
|
|
|
247
247
|
libintl-perl
|
|
248
248
|
libintl-xs-perl
|
|
249
249
|
libio-html-perl
|
|
250
|
-
libio-pty-perl
|
|
251
250
|
libip4tc2
|
|
252
251
|
libip6tc2
|
|
253
|
-
libipc-run-perl
|
|
254
252
|
libisc-export1105
|
|
255
253
|
libisl23
|
|
256
254
|
libisns0
|
|
@@ -303,6 +301,9 @@ liblqr-1-0-dev
|
|
|
303
301
|
liblsan0
|
|
304
302
|
libltdl-dev
|
|
305
303
|
libltdl7
|
|
304
|
+
liblttng-ust-common1
|
|
305
|
+
liblttng-ust-ctl5
|
|
306
|
+
liblttng-ust1
|
|
306
307
|
liblua5.3-0
|
|
307
308
|
liblvm2cmd2.03
|
|
308
309
|
liblwp-mediatypes-perl
|
|
@@ -514,6 +515,7 @@ libnsl2
|
|
|
514
515
|
libnspr4
|
|
515
516
|
libnss-systemd
|
|
516
517
|
libnss3
|
|
518
|
+
libnss3-tools
|
|
517
519
|
libntfs-3g89
|
|
518
520
|
libnuma1
|
|
519
521
|
libobjc-11-dev
|
|
@@ -643,7 +645,6 @@ libssl3
|
|
|
643
645
|
libstdc++-10-dev
|
|
644
646
|
libstdc++-11-dev
|
|
645
647
|
libstdc++-12-dev
|
|
646
|
-
libstdc++-9-dev
|
|
647
648
|
libstdc++6
|
|
648
649
|
libstemmer0d
|
|
649
650
|
libsvn1
|
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
|
|
@@ -209,10 +207,8 @@ libinih1
|
|
|
209
207
|
libintl-perl
|
|
210
208
|
libintl-xs-perl
|
|
211
209
|
libio-html-perl
|
|
212
|
-
libio-pty-perl
|
|
213
210
|
libip4tc2
|
|
214
211
|
libip6tc2
|
|
215
|
-
libipc-run-perl
|
|
216
212
|
libisl23
|
|
217
213
|
libisns0t64
|
|
218
214
|
libitm1
|
|
@@ -248,6 +244,7 @@ libllvm16t64
|
|
|
248
244
|
libllvm17t64
|
|
249
245
|
libllvm18
|
|
250
246
|
libllvm19
|
|
247
|
+
libllvm20
|
|
251
248
|
liblmdb0
|
|
252
249
|
liblocale-gettext-perl
|
|
253
250
|
liblqr-1-0
|
|
@@ -306,6 +303,7 @@ libnpth0t64
|
|
|
306
303
|
libnspr4
|
|
307
304
|
libnss-systemd
|
|
308
305
|
libnss3
|
|
306
|
+
libnss3-tools
|
|
309
307
|
libntfs-3g89t64
|
|
310
308
|
libnuma1
|
|
311
309
|
libnvme1t64
|
|
@@ -470,7 +468,6 @@ libvulkan1
|
|
|
470
468
|
libwayland-client0
|
|
471
469
|
libwayland-cursor0
|
|
472
470
|
libwayland-egl1
|
|
473
|
-
libwayland-server0
|
|
474
471
|
libwbclient0
|
|
475
472
|
libwebp7
|
|
476
473
|
libwebpdemux2
|
package/src/scripts/cache.sh
CHANGED
|
@@ -42,6 +42,8 @@ get_api_version() {
|
|
|
42
42
|
8.1) echo "20210902" ;;
|
|
43
43
|
8.2) echo "20220829" ;;
|
|
44
44
|
8.3) echo "20230831" ;;
|
|
45
|
+
8.4) echo "20240924" ;;
|
|
46
|
+
8.5) echo "20250925" ;;
|
|
45
47
|
*) get_api_version_from_repo ;;
|
|
46
48
|
esac
|
|
47
49
|
}
|
|
@@ -86,9 +88,20 @@ linux_php_semver() {
|
|
|
86
88
|
fi
|
|
87
89
|
}
|
|
88
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
|
+
|
|
89
102
|
data() {
|
|
90
103
|
old_versions="5.[3-5]"
|
|
91
|
-
date='
|
|
104
|
+
date='20260314'
|
|
92
105
|
arch=$(uname -m)
|
|
93
106
|
if [ "$os" = "Linux" ]; then
|
|
94
107
|
. /etc/os-release
|
|
@@ -106,12 +119,17 @@ data() {
|
|
|
106
119
|
else
|
|
107
120
|
os="Windows-$arch"
|
|
108
121
|
dir='C:\\tools\\php\\ext'
|
|
122
|
+
[ "$version" = "8.6" ] && date='20260608'
|
|
109
123
|
fi
|
|
110
|
-
|
|
124
|
+
[[ ( -z "$ImageOS" && -z "$ImageVersion" ) ||
|
|
125
|
+
( -n "$RUNNER_ENVIRONMENT" && "$RUNNER_ENVIRONMENT" = "self-hosted" ) ||
|
|
126
|
+
-n "$ACT" || -n "$CONTAINER" ]] && _runner=self-hosted || _runner=github
|
|
127
|
+
runner="${runner:-${RUNNER:-$_runner}}"
|
|
128
|
+
scope="$(get_cache_scope)"
|
|
111
129
|
if command -v "sha256sum" >/dev/null; then
|
|
112
|
-
key="$(echo -n "$extensions-$key-$
|
|
130
|
+
key="$(echo -n "$extensions-$key-$scope" | sha256sum | cut -d ' ' -f 1)"
|
|
113
131
|
else
|
|
114
|
-
key="$(echo -n "$extensions-$key-$
|
|
132
|
+
key="$(echo -n "$extensions-$key-$scope" | openssl dgst -sha256 | cut -d ' ' -f 2)"
|
|
115
133
|
fi
|
|
116
134
|
key="$os"-"$version"-"$key"-"$date"
|
|
117
135
|
echo "$dir" > "${RUNNER_TEMP:?}"/dir
|
|
@@ -133,9 +151,10 @@ init() {
|
|
|
133
151
|
export tick="✓"
|
|
134
152
|
export cross="✗"
|
|
135
153
|
script_dir=$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)
|
|
154
|
+
platform_script="$script_dir/$(echo "$os" | tr '[:upper:]' '[:lower:]').sh"
|
|
136
155
|
if [[ "$os" = "Linux" || "$os" = "Darwin" ]]; then
|
|
137
156
|
# shellcheck disable=SC1090
|
|
138
|
-
. "$
|
|
157
|
+
. "$platform_script"
|
|
139
158
|
self_hosted_helper
|
|
140
159
|
fi
|
|
141
160
|
}
|
|
@@ -144,6 +163,8 @@ run=$1
|
|
|
144
163
|
extensions=$2
|
|
145
164
|
version=$3
|
|
146
165
|
key=$4
|
|
166
|
+
share_cache_across_jobs=${5:-false}
|
|
167
|
+
share_cache_across_workflows=${6:-false}
|
|
147
168
|
os="$(uname -s)"
|
|
148
169
|
init
|
|
149
170
|
$run
|
package/src/scripts/darwin.sh
CHANGED
|
@@ -21,12 +21,43 @@ add_brew_tap() {
|
|
|
21
21
|
fi
|
|
22
22
|
fi
|
|
23
23
|
fi
|
|
24
|
+
brew trust "$tap" >/dev/null 2>&1
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
get_lookup_extension_name() {
|
|
28
|
+
extension=$1
|
|
29
|
+
case "$extension" in
|
|
30
|
+
http) echo "pecl_http" ;;
|
|
31
|
+
*) echo "$extension" ;;
|
|
32
|
+
esac
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
get_config_extension_name() {
|
|
36
|
+
extension=$1
|
|
37
|
+
case "$extension" in
|
|
38
|
+
http | pecl_http) echo "http" ;;
|
|
39
|
+
phalcon | phalcon3 | phalcon4 | phalcon5) echo "phalcon" ;;
|
|
40
|
+
redis | phpredis) echo "redis" ;;
|
|
41
|
+
xdebug | xdebug2) echo "xdebug" ;;
|
|
42
|
+
*) echo "$extension" ;;
|
|
43
|
+
esac
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
get_formula_name() {
|
|
47
|
+
extension="$(get_lookup_extension_name "$1")"
|
|
48
|
+
case "$extension" in
|
|
49
|
+
redis) echo "phpredis" ;;
|
|
50
|
+
firebird) echo "interbase" ;;
|
|
51
|
+
*) echo "$extension" ;;
|
|
52
|
+
esac
|
|
24
53
|
}
|
|
25
54
|
|
|
26
55
|
get_dependencies() {
|
|
27
56
|
extension=$1
|
|
28
|
-
|
|
29
|
-
|
|
57
|
+
extension_name="$(get_lookup_extension_name "$extension")"
|
|
58
|
+
list_deps="$(grep "^$extension_name=" "${script_dir:?}"/../lists/darwin-deps | cut -d '=' -f 2)"
|
|
59
|
+
formula_name="$(get_formula_name "$extension")"
|
|
60
|
+
formula_file="$tap_dir/$ext_tap/Formula/$formula_name@${version:?}.rb"
|
|
30
61
|
if [ -e "$formula_file" ]; then
|
|
31
62
|
formula_deps="$(grep "depends_on" "$formula_file" | cut -d '"' -f 2 | tr '\n' ' ')"
|
|
32
63
|
formula_deps_from_macos="$(grep "uses_from_macos \"lib" "$formula_file" | cut -d '"' -f 2 | tr '\n' ' ')"
|
|
@@ -42,8 +73,9 @@ filter_extensions() {
|
|
|
42
73
|
extensions_array=("$@")
|
|
43
74
|
filtered_extensions=()
|
|
44
75
|
for ext in "${extensions_array[@]}"; do
|
|
45
|
-
|
|
46
|
-
|
|
76
|
+
extension_name="$(get_lookup_extension_name "$ext")"
|
|
77
|
+
if grep -i -q -w "$extension_name" "${script_dir:?}"/../lists/darwin-extensions ||
|
|
78
|
+
grep -q "^$extension_name=" "${script_dir:?}"/../lists/darwin-deps; then
|
|
47
79
|
filtered_extensions+=("$ext")
|
|
48
80
|
fi
|
|
49
81
|
done
|
|
@@ -54,7 +86,7 @@ setup_extensions_helper() {
|
|
|
54
86
|
dependent_extension=$1
|
|
55
87
|
dependency_extension=$2
|
|
56
88
|
extension_dir=$3
|
|
57
|
-
dependency_extension_name="$(basename "$(echo $dependency_extension | cut -d'@' -f 1)")"
|
|
89
|
+
dependency_extension_name="$(basename "$(echo "$dependency_extension" | cut -d'@' -f 1)")"
|
|
58
90
|
cached_extension="${deps_cache_directory:?}/$dependency_extension_name.so"
|
|
59
91
|
if ! [ -e "$cached_extension" ]; then
|
|
60
92
|
brew install "$dependency_extension"
|
|
@@ -67,12 +99,13 @@ setup_extensions_helper() {
|
|
|
67
99
|
}
|
|
68
100
|
|
|
69
101
|
setup_extensions() {
|
|
70
|
-
|
|
102
|
+
requested_extension=$1
|
|
103
|
+
dependent_extension="$(get_config_extension_name "$requested_extension")"
|
|
71
104
|
extension_dir=$2
|
|
72
105
|
shift 2
|
|
73
106
|
dependency_extensions_array=("$@")
|
|
74
|
-
sudo mkdir -p "$cache_directory"/"$
|
|
75
|
-
echo "::group::Logs to set up extensions required for $
|
|
107
|
+
sudo mkdir -p "$cache_directory"/"$dependent_extension"
|
|
108
|
+
echo "::group::Logs to set up extensions required for $requested_extension"
|
|
76
109
|
for dependency_extension in "${dependency_extensions_array[@]}"; do
|
|
77
110
|
setup_extensions_helper "$dependent_extension" "$dependency_extension" "$extension_dir"
|
|
78
111
|
done
|
|
@@ -161,7 +194,7 @@ setup_dependencies() {
|
|
|
161
194
|
extension_dir=$2
|
|
162
195
|
cache_directory=/tmp/extcache
|
|
163
196
|
[[ -z "${extensions// /}" ]] && return
|
|
164
|
-
IFS=' ' read -r -a extensions_array <<<"$(echo "$extensions" | sed -
|
|
197
|
+
IFS=' ' read -r -a extensions_array <<<"$(echo "$extensions" | sed -Ee "s/^|,\s*/ /g")"
|
|
165
198
|
IFS=' ' read -r -a extensions_array <<<"$(filter_extensions "${extensions_array[@]}")"
|
|
166
199
|
if [[ -n "${extensions_array[*]// /}" ]]; then
|
|
167
200
|
add_brew_tap "$php_tap"
|
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
|
}
|