@kitsi/action 0.0.21 → 0.0.23
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/dist/index.js +133 -93
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -101830,6 +101830,16 @@ var service = (imageRef) => new ServiceBuilder({ image: imageRef, env: {}, ports
|
|
|
101830
101830
|
var registry = (...plansList) => ({
|
|
101831
101831
|
plans: plansList
|
|
101832
101832
|
});
|
|
101833
|
+
// ../core/dist/errors/index.js
|
|
101834
|
+
class CliError extends Error {
|
|
101835
|
+
format() {
|
|
101836
|
+
return this.message;
|
|
101837
|
+
}
|
|
101838
|
+
}
|
|
101839
|
+
class NotFoundError extends CliError {
|
|
101840
|
+
code = "NOT_FOUND";
|
|
101841
|
+
exitCode = 2;
|
|
101842
|
+
}
|
|
101833
101843
|
// ../core/dist/ops/operation.js
|
|
101834
101844
|
var isOperation = (value) => {
|
|
101835
101845
|
if (!value || typeof value !== "object")
|
|
@@ -101838,44 +101848,76 @@ var isOperation = (value) => {
|
|
|
101838
101848
|
return typeof op.kind === "string" && typeof op.toOp === "function" && typeof op.analysisPlaceholder === "function" && typeof op.extractDependencies === "function" && typeof op.extractSecrets === "function" && typeof op.extractRefs === "function" && typeof op.cacheNormalize === "function" && typeof op.cachePlaceholder === "function";
|
|
101839
101849
|
};
|
|
101840
101850
|
|
|
101851
|
+
// ../core/dist/ops/types.js
|
|
101852
|
+
var isSecretRef = (value) => value.kind === "secret";
|
|
101853
|
+
var isParamRef = (value) => value.kind === "param";
|
|
101854
|
+
var isValueRef = (value) => value.kind === "value";
|
|
101855
|
+
|
|
101856
|
+
// ../core/dist/dsl/glob.js
|
|
101857
|
+
var import_picomatch = __toESM(require_picomatch2(), 1);
|
|
101858
|
+
var GLOB_CHARS = /[*?[\]{}!]/;
|
|
101859
|
+
function isGlobPattern(pattern) {
|
|
101860
|
+
return GLOB_CHARS.test(pattern);
|
|
101861
|
+
}
|
|
101862
|
+
function expandPattern(pattern, taskNames) {
|
|
101863
|
+
if (!isGlobPattern(pattern)) {
|
|
101864
|
+
return [pattern];
|
|
101865
|
+
}
|
|
101866
|
+
const matcher = import_picomatch.default(pattern);
|
|
101867
|
+
const matches = taskNames.filter((name) => matcher(name));
|
|
101868
|
+
if (matches.length === 0) {
|
|
101869
|
+
throw new NotFoundError(`No tasks matched pattern "${pattern}"`);
|
|
101870
|
+
}
|
|
101871
|
+
return matches;
|
|
101872
|
+
}
|
|
101873
|
+
|
|
101841
101874
|
// ../core/dist/dsl/analysis.js
|
|
101842
|
-
|
|
101843
|
-
|
|
101844
|
-
};
|
|
101845
|
-
var toOperation = (value) => {
|
|
101846
|
-
if (isOperation(value))
|
|
101875
|
+
function toOperation(value) {
|
|
101876
|
+
if (isOperation(value)) {
|
|
101847
101877
|
return value;
|
|
101878
|
+
}
|
|
101848
101879
|
throw new Error("Step yielded a non-operation value");
|
|
101849
|
-
}
|
|
101850
|
-
|
|
101880
|
+
}
|
|
101881
|
+
function* iterateStepOperations(step2, task2) {
|
|
101882
|
+
const iterator = step2.run({ task: task2, workspace: "" });
|
|
101883
|
+
let cursor = iterator.next();
|
|
101884
|
+
while (!cursor.done) {
|
|
101885
|
+
const operation = toOperation(cursor.value);
|
|
101886
|
+
yield operation;
|
|
101887
|
+
cursor = iterator.next(operation.analysisPlaceholder());
|
|
101888
|
+
}
|
|
101889
|
+
}
|
|
101890
|
+
function getAllSteps(task2) {
|
|
101891
|
+
return [...task2.config.setupSteps, ...task2.config.steps];
|
|
101892
|
+
}
|
|
101893
|
+
function collectEnvSecrets(task2) {
|
|
101894
|
+
const secrets = [];
|
|
101851
101895
|
for (const value of Object.values(task2.config.env)) {
|
|
101852
|
-
if (value
|
|
101853
|
-
secrets.
|
|
101896
|
+
if (typeof value === "object" && isSecretRef(value)) {
|
|
101897
|
+
secrets.push(value.name);
|
|
101854
101898
|
}
|
|
101855
101899
|
}
|
|
101856
|
-
|
|
101857
|
-
|
|
101858
|
-
|
|
101859
|
-
|
|
101860
|
-
|
|
101861
|
-
|
|
101862
|
-
|
|
101863
|
-
const operation = toOperation(cursor.value);
|
|
101864
|
-
for (const name of operation.extractSecrets()) {
|
|
101865
|
-
secrets.add(name);
|
|
101866
|
-
}
|
|
101867
|
-
cursor = iterator.next(operation.analysisPlaceholder());
|
|
101900
|
+
return secrets;
|
|
101901
|
+
}
|
|
101902
|
+
function collectStepSecrets(task2) {
|
|
101903
|
+
const secrets = [];
|
|
101904
|
+
for (const step2 of getAllSteps(task2)) {
|
|
101905
|
+
for (const operation of iterateStepOperations(step2, task2)) {
|
|
101906
|
+
secrets.push(...operation.extractSecrets());
|
|
101868
101907
|
}
|
|
101869
101908
|
}
|
|
101870
|
-
|
|
101871
|
-
|
|
101909
|
+
return secrets;
|
|
101910
|
+
}
|
|
101911
|
+
function collectSecrets(tasks) {
|
|
101872
101912
|
const secrets = new Set;
|
|
101873
101913
|
for (const task2 of tasks) {
|
|
101874
|
-
collectEnvSecrets(task2
|
|
101875
|
-
|
|
101914
|
+
for (const name of collectEnvSecrets(task2))
|
|
101915
|
+
secrets.add(name);
|
|
101916
|
+
for (const name of collectStepSecrets(task2))
|
|
101917
|
+
secrets.add(name);
|
|
101876
101918
|
}
|
|
101877
101919
|
return secrets;
|
|
101878
|
-
}
|
|
101920
|
+
}
|
|
101879
101921
|
// ../core/dist/dsl/utils.js
|
|
101880
101922
|
import { resolve as resolvePath } from "node:path";
|
|
101881
101923
|
var resolveWorkspace = (workspace) => {
|
|
@@ -102185,11 +102227,6 @@ var http = {
|
|
|
102185
102227
|
head: (url, ...values) => buildRequest("HEAD", url, values),
|
|
102186
102228
|
options: (url, ...values) => buildRequest("OPTIONS", url, values)
|
|
102187
102229
|
};
|
|
102188
|
-
// ../core/dist/ops/types.js
|
|
102189
|
-
var isSecretRef = (value) => value.kind === "secret";
|
|
102190
|
-
var isParamRef = (value) => value.kind === "param";
|
|
102191
|
-
var isValueRef = (value) => value.kind === "value";
|
|
102192
|
-
|
|
102193
102230
|
// ../core/dist/ops/env.js
|
|
102194
102231
|
class EnvOperation {
|
|
102195
102232
|
name;
|
|
@@ -102730,7 +102767,7 @@ var bind = (serviceInstance, alias) => new BindServiceOperation(serviceInstance,
|
|
|
102730
102767
|
import { join as join4 } from "node:path";
|
|
102731
102768
|
|
|
102732
102769
|
// ../core/dist/engine/executor/file-system.js
|
|
102733
|
-
var
|
|
102770
|
+
var import_picomatch2 = __toESM(require_picomatch2(), 1);
|
|
102734
102771
|
import { mkdir, readFile as readFile3, readdir, stat, writeFile } from "node:fs/promises";
|
|
102735
102772
|
import { dirname, join, relative } from "node:path";
|
|
102736
102773
|
var walk = async (current) => {
|
|
@@ -102754,8 +102791,8 @@ var matchesGlob = (pathname, pattern) => {
|
|
|
102754
102791
|
const positives = patterns.filter((entry) => !entry.startsWith("!"));
|
|
102755
102792
|
const negatives = patterns.filter((entry) => entry.startsWith("!")).map((entry) => entry.slice(1));
|
|
102756
102793
|
const options = { dot: true };
|
|
102757
|
-
const matchesPositive = positives.length === 0 ? true :
|
|
102758
|
-
const matchesNegative = negatives.length > 0 &&
|
|
102794
|
+
const matchesPositive = positives.length === 0 ? true : import_picomatch2.default.isMatch(normalizedPath, positives, options);
|
|
102795
|
+
const matchesNegative = negatives.length > 0 && import_picomatch2.default.isMatch(normalizedPath, negatives, options);
|
|
102759
102796
|
return matchesPositive && !matchesNegative;
|
|
102760
102797
|
};
|
|
102761
102798
|
var collectFiles = async (workspace, patterns) => {
|
|
@@ -104478,7 +104515,7 @@ class ValueResolver {
|
|
|
104478
104515
|
}
|
|
104479
104516
|
|
|
104480
104517
|
// ../core/dist/engine/executor/plan-runner.js
|
|
104481
|
-
|
|
104518
|
+
function mergeEnv(...sources) {
|
|
104482
104519
|
const merged = {};
|
|
104483
104520
|
for (const source of sources) {
|
|
104484
104521
|
for (const [key, value] of Object.entries(source)) {
|
|
@@ -104488,7 +104525,7 @@ var mergeEnv = (...sources) => {
|
|
|
104488
104525
|
}
|
|
104489
104526
|
}
|
|
104490
104527
|
return merged;
|
|
104491
|
-
}
|
|
104528
|
+
}
|
|
104492
104529
|
|
|
104493
104530
|
class PlanRunner {
|
|
104494
104531
|
plan;
|
|
@@ -104645,6 +104682,21 @@ class PlanRunner {
|
|
|
104645
104682
|
}
|
|
104646
104683
|
await Promise.all(executing);
|
|
104647
104684
|
}
|
|
104685
|
+
async executeDependencies(task2, ancestry) {
|
|
104686
|
+
const allTasks = this.expandedTasks ?? this.plan.expand();
|
|
104687
|
+
const allTaskNames = allTasks.map((t) => t.config.name);
|
|
104688
|
+
for (const depPattern of task2.config.needs) {
|
|
104689
|
+
this.checkSignal("task");
|
|
104690
|
+
const matches = expandPattern(depPattern, allTaskNames);
|
|
104691
|
+
for (const match of matches) {
|
|
104692
|
+
const dependency = allTasks.find((t) => t.config.name === match);
|
|
104693
|
+
if (!dependency) {
|
|
104694
|
+
throw new NotFoundError(`Task "${match}" not found`);
|
|
104695
|
+
}
|
|
104696
|
+
await this.executeTask(dependency, ancestry);
|
|
104697
|
+
}
|
|
104698
|
+
}
|
|
104699
|
+
}
|
|
104648
104700
|
findTask(name) {
|
|
104649
104701
|
const tasks = this.expandedTasks ?? this.plan.expand();
|
|
104650
104702
|
return tasks.find((task2) => task2.config.name === name);
|
|
@@ -104674,28 +104726,21 @@ class PlanRunner {
|
|
|
104674
104726
|
this.reporter?.emit("task_start", { task: name });
|
|
104675
104727
|
const taskStart = Date.now();
|
|
104676
104728
|
const existing = this.states.get(name);
|
|
104677
|
-
const state = existing ??
|
|
104678
|
-
|
|
104679
|
-
|
|
104680
|
-
|
|
104681
|
-
|
|
104682
|
-
|
|
104683
|
-
|
|
104684
|
-
|
|
104685
|
-
this.states.set(name,
|
|
104686
|
-
|
|
104687
|
-
})();
|
|
104729
|
+
const state = existing ?? {
|
|
104730
|
+
status: "pending",
|
|
104731
|
+
outputs: new Map,
|
|
104732
|
+
bundles: new Map,
|
|
104733
|
+
summaries: [],
|
|
104734
|
+
artifactUploads: []
|
|
104735
|
+
};
|
|
104736
|
+
if (!existing) {
|
|
104737
|
+
this.states.set(name, state);
|
|
104738
|
+
}
|
|
104688
104739
|
let env2 = {};
|
|
104689
104740
|
let cacheDecision = null;
|
|
104690
104741
|
let cacheHit = false;
|
|
104691
104742
|
try {
|
|
104692
|
-
|
|
104693
|
-
this.checkSignal("task");
|
|
104694
|
-
const dependency = this.findTask(depName);
|
|
104695
|
-
if (dependency) {
|
|
104696
|
-
await this.executeTask(dependency, ancestry);
|
|
104697
|
-
}
|
|
104698
|
-
}
|
|
104743
|
+
await this.executeDependencies(task2, ancestry);
|
|
104699
104744
|
env2 = this.buildTaskEnv(task2);
|
|
104700
104745
|
cacheDecision = await this.cache.beforeTask(task2, env2, state);
|
|
104701
104746
|
if (cacheDecision?.hit) {
|
|
@@ -104788,16 +104833,8 @@ class PlanRunner {
|
|
|
104788
104833
|
if (error2 instanceof Error) {
|
|
104789
104834
|
return error2.message;
|
|
104790
104835
|
}
|
|
104791
|
-
if (error2 && typeof error2 === "object") {
|
|
104792
|
-
|
|
104793
|
-
if (typeof message === "string") {
|
|
104794
|
-
return message;
|
|
104795
|
-
}
|
|
104796
|
-
try {
|
|
104797
|
-
return JSON.stringify(error2);
|
|
104798
|
-
} catch {
|
|
104799
|
-
return String(error2);
|
|
104800
|
-
}
|
|
104836
|
+
if (error2 && typeof error2 === "object" && "message" in error2 && typeof error2.message === "string") {
|
|
104837
|
+
return error2.message;
|
|
104801
104838
|
}
|
|
104802
104839
|
return String(error2);
|
|
104803
104840
|
}
|
|
@@ -104913,23 +104950,19 @@ class PlanRunner {
|
|
|
104913
104950
|
this.logger.error?.(this.resolver.redactSecrets(message));
|
|
104914
104951
|
}
|
|
104915
104952
|
toResult(state, error2, cached = false) {
|
|
104916
|
-
const
|
|
104917
|
-
|
|
104918
|
-
|
|
104919
|
-
}
|
|
104920
|
-
const bundles = Array.from(state.bundles.keys());
|
|
104921
|
-
const base = {
|
|
104922
|
-
status: error2 ? "failed" : state.status === "failed" ? "failed" : "success",
|
|
104953
|
+
const status = error2 || state.status === "failed" ? "failed" : "success";
|
|
104954
|
+
const result = {
|
|
104955
|
+
status,
|
|
104923
104956
|
duration: state.duration ?? 0,
|
|
104924
|
-
outputs,
|
|
104925
|
-
bundles,
|
|
104957
|
+
outputs: Object.fromEntries(state.outputs),
|
|
104958
|
+
bundles: Array.from(state.bundles.keys()),
|
|
104926
104959
|
summaries: state.summaries,
|
|
104927
104960
|
cached
|
|
104928
104961
|
};
|
|
104929
104962
|
if (error2) {
|
|
104930
|
-
|
|
104963
|
+
result.error = error2;
|
|
104931
104964
|
}
|
|
104932
|
-
return
|
|
104965
|
+
return result;
|
|
104933
104966
|
}
|
|
104934
104967
|
checkSignal(scope) {
|
|
104935
104968
|
if (this.signal?.aborted) {
|
|
@@ -105155,6 +105188,19 @@ Available plans: ${available}`);
|
|
|
105155
105188
|
}
|
|
105156
105189
|
|
|
105157
105190
|
// src/index.ts
|
|
105191
|
+
function formatCause(cause) {
|
|
105192
|
+
if (typeof cause === "string") {
|
|
105193
|
+
return cause;
|
|
105194
|
+
}
|
|
105195
|
+
if (cause instanceof Error) {
|
|
105196
|
+
return cause.message;
|
|
105197
|
+
}
|
|
105198
|
+
try {
|
|
105199
|
+
return JSON.stringify(cause, null, 2);
|
|
105200
|
+
} catch {
|
|
105201
|
+
return String(cause);
|
|
105202
|
+
}
|
|
105203
|
+
}
|
|
105158
105204
|
async function run() {
|
|
105159
105205
|
const startTime = Date.now();
|
|
105160
105206
|
try {
|
|
@@ -105199,26 +105245,20 @@ async function run() {
|
|
|
105199
105245
|
for (const [name, taskResult] of Object.entries(result.tasks)) {
|
|
105200
105246
|
if (taskResult.status !== "failed")
|
|
105201
105247
|
continue;
|
|
105202
|
-
if (taskResult.error) {
|
|
105203
|
-
core7.error(`Task "${name}" failed
|
|
105204
|
-
|
|
105205
|
-
|
|
105206
|
-
|
|
105207
|
-
|
|
105208
|
-
|
|
105209
|
-
|
|
105210
|
-
|
|
105211
|
-
|
|
105212
|
-
})();
|
|
105213
|
-
for (const line of formatted.split(`
|
|
105248
|
+
if (!taskResult.error) {
|
|
105249
|
+
core7.error(`Task "${name}" failed`);
|
|
105250
|
+
continue;
|
|
105251
|
+
}
|
|
105252
|
+
core7.error(`Task "${name}" failed: ${taskResult.error.message}`);
|
|
105253
|
+
const cause = taskResult.error.cause;
|
|
105254
|
+
if (!cause)
|
|
105255
|
+
continue;
|
|
105256
|
+
const formatted = formatCause(cause);
|
|
105257
|
+
for (const line of formatted.split(`
|
|
105214
105258
|
`)) {
|
|
105215
|
-
|
|
105216
|
-
|
|
105217
|
-
}
|
|
105218
|
-
}
|
|
105259
|
+
if (line.trim()) {
|
|
105260
|
+
core7.error(line);
|
|
105219
105261
|
}
|
|
105220
|
-
} else {
|
|
105221
|
-
core7.error(`Task "${name}" failed`);
|
|
105222
105262
|
}
|
|
105223
105263
|
}
|
|
105224
105264
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,KAAK,UAAU,GAAG;IAChB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,IAAI,CAAC;QACH,eAAe;QACf,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QACvD,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,oBAAoB,CAAC;QAC3D,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC;QAChD,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC;QAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;QACnD,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC;QACvD,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;QACxD,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,GAAG,CAAC;QAC3D,MAAM,OAAO,GAAG,CAAC,YAAY,IAAI,YAAY,KAAK,GAAG,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,YAAY,CAAC;QACtF,MAAM,cAAc,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;QAC1D,IAAI,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,cAAc,GAAG,CAAC,EAAE,CAAC;YACvD,MAAM,IAAI,KAAK,CAAC,2BAA2B,aAAa,iCAAiC,CAAC,CAAC;QAC7F,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,uBAAuB,IAAI,EAAE,CAAC,CAAC;QAEzC,0BAA0B;QAC1B,MAAM,YAAY,GAAG,IAAI,kBAAkB,EAAE,CAAC;QAC9C,MAAM,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;QAElC,mBAAmB;QACnB,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC;YAC/B,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,OAAO;YACP,QAAQ;YACR,cAAc;YACd,OAAO;YACP,YAAY;YACZ,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|