-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathaction.yaml
75 lines (69 loc) · 2.58 KB
/
action.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# Copyright 2025 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
name: Map run
description: Run a command on multiple paths.
inputs:
command:
description: The command to run.
required: true
paths:
description: A JSON list of paths to run the command on.
required: true
outputs-always:
description: Show command outputs whether or not it fails.
required: false
default: "false"
runs:
using: composite
steps:
- name: Run command
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7
with:
script: |
const { spawnSync } = await import("node:child_process");
const cmd = "${{ inputs.command }}";
const paths = ${{ inputs.paths }};
if (paths.length === 0) {
console.log("Nothing to do.");
}
const outputsAlways = ${{ inputs.outputs-always }};
let failed = [];
for (const path of paths) {
let stdout = "";
let stderr = "";
try {
const p = spawnSync("bash", ["-c", cmd], {cwd: path});
console.log(`✅ [${path}]: ${cmd}`);
stdout = p.stdout && p.stdout.toString("utf8");
stderr = p.stderr && p.stderr.toString("utf8");
} catch (e) {
failed.push(path);
console.log(`❌ [${path}]: ${cmd} (exit code ${e.status})`);
core.error(e.message);
stdout = e.stdout && e.stdout.toString("utf8");
stderr = e.stderr && e.stderr.toString("utf8");
}
if (outputsAlways || failed.includes(path)) {
console.log('---- stdout ----');
console.log(stdout || "");
console.log('---- stderr ----');
console.log(stderr || "");
}
}
console.log("=== Summary ===");
console.log(` Passed: ${paths.length - failed.length}`);
console.log(` Failed: ${failed.length}`);
if (failed.length > 0) {
core.setFailed(`Failed '${cmd}' on: ${failed.join(', ')}`);
}