gagen 0.2.15 → 0.2.17

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.
@@ -20,6 +20,8 @@ export declare class ExpressionValue {
20
20
  startsWith(prefix: string): Condition;
21
21
  contains(substring: string): Condition;
22
22
  not(): Condition;
23
+ /** concatenate this value with additional strings, numbers, or expressions */
24
+ concat(...parts: ConcatPart[]): ExpressionValue;
23
25
  /** wrap in `${{ }}` for use in YAML */
24
26
  toString(): string;
25
27
  }
@@ -225,6 +227,23 @@ export declare class ElseIfBuilder {
225
227
  /** Provide the value for this branch. */
226
228
  then(value: TernaryValue): ThenBuilder;
227
229
  }
230
+ /** a part of a concatenation: plain string, number, or expression */
231
+ export type ConcatPart = string | number | ExpressionValue;
232
+ /**
233
+ * Concatenates strings, numbers, and expressions into a single value.
234
+ * Expression parts are wrapped in `${{ }}` when serialized for YAML,
235
+ * and use the `format()` function when used inside expression contexts.
236
+ *
237
+ * ```ts
238
+ * const name = concat("build-", expr("matrix.os"));
239
+ * name.toString() // => "build-${{ matrix.os }}"
240
+ * name.expression // => "format('build-{0}', matrix.os)"
241
+ *
242
+ * const full = concat("build-", expr("matrix.os"), "-", expr("matrix.arch"));
243
+ * full.toString() // => "build-${{ matrix.os }}-${{ matrix.arch }}"
244
+ * ```
245
+ */
246
+ export declare function concat(...parts: ConcatPart[]): ExpressionValue;
228
247
  /** Creates an ExpressionValue or Condition from a literal value. */
229
248
  export declare function literal(value: boolean): Condition;
230
249
  export declare function literal(value: string | number): ExpressionValue;
@@ -1 +1 @@
1
- {"version":3,"file":"expression.d.ts","sourceRoot":"","sources":["../src/expression.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"expression.d.ts","sourceRoot":"","sources":["../src/expression.ts"],"names":[],"mappings":"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"}
package/esm/expression.js CHANGED
@@ -9,7 +9,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
9
9
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
10
10
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
11
11
  };
12
- var _ExpressionValue_expression, _ExpressionValue_allSources, _ComparisonCondition_left, _ComparisonCondition_op, _ComparisonCondition_right, _FunctionCallCondition_fn, _FunctionCallCondition_args, _LogicalCondition_instances, _a, _LogicalCondition_left, _LogicalCondition_right, _LogicalCondition_needsParens, _NotCondition_inner, _RawCondition_expression, _ThenBuilder_branches, _ThenBuilder_sources, _ElseIfBuilder_branches, _ElseIfBuilder_sources, _ElseIfBuilder_condition, _InlineValue_plainValue;
12
+ var _ExpressionValue_expression, _ExpressionValue_allSources, _ComparisonCondition_left, _ComparisonCondition_op, _ComparisonCondition_right, _FunctionCallCondition_fn, _FunctionCallCondition_args, _LogicalCondition_instances, _a, _LogicalCondition_left, _LogicalCondition_right, _LogicalCondition_needsParens, _NotCondition_inner, _RawCondition_expression, _ThenBuilder_branches, _ThenBuilder_sources, _ElseIfBuilder_branches, _ElseIfBuilder_sources, _ElseIfBuilder_condition, _ConcatValue_parts, _InlineValue_plainValue;
13
13
  const EMPTY_SOURCES = new Set();
14
14
  /**
15
15
  * An expression that resolves to a value inside a GitHub Actions workflow.
@@ -69,6 +69,10 @@ export class ExpressionValue {
69
69
  not() {
70
70
  return new RawCondition(`!(${__classPrivateFieldGet(this, _ExpressionValue_expression, "f")})`, sourcesFrom(this));
71
71
  }
72
+ /** concatenate this value with additional strings, numbers, or expressions */
73
+ concat(...parts) {
74
+ return concat(this, ...parts);
75
+ }
72
76
  /** wrap in `${{ }}` for use in YAML */
73
77
  toString() {
74
78
  return `\${{ ${__classPrivateFieldGet(this, _ExpressionValue_expression, "f")} }}`;
@@ -471,8 +475,18 @@ function deduplicatedLogical(op, left, right) {
471
475
  if (unique.length === 0)
472
476
  return left;
473
477
  const allTerms = [...leftTerms, ...unique];
478
+ // absorption: for &&, drop any OR compound whose child appears as a sibling
479
+ // term (e.g. (A || B) && B → B). Symmetrically for ||.
480
+ const termExprs = new Set(allTerms.map((t) => t.toExpression()));
481
+ const absorbed = allTerms.filter((term) => {
482
+ const children = op === "&&" ? term.flattenOr() : term.flattenAnd();
483
+ if (children.length <= 1)
484
+ return true;
485
+ return !children.some((c) => termExprs.has(c.toExpression()));
486
+ });
487
+ const terms = absorbed.length > 0 ? absorbed : allTerms;
474
488
  const sources = unionSources(...allTerms);
475
- return allTerms.reduce((acc, term) => new LogicalCondition(op, acc, term, sources));
489
+ return terms.reduce((acc, term) => new LogicalCondition(op, acc, term, sources));
476
490
  }
477
491
  function collectTernarySources(branches) {
478
492
  const set = new Set();
@@ -565,6 +579,106 @@ export class ElseIfBuilder {
565
579
  }
566
580
  }
567
581
  _ElseIfBuilder_branches = new WeakMap(), _ElseIfBuilder_sources = new WeakMap(), _ElseIfBuilder_condition = new WeakMap();
582
+ /**
583
+ * Concatenates strings, numbers, and expressions into a single value.
584
+ * Expression parts are wrapped in `${{ }}` when serialized for YAML,
585
+ * and use the `format()` function when used inside expression contexts.
586
+ *
587
+ * ```ts
588
+ * const name = concat("build-", expr("matrix.os"));
589
+ * name.toString() // => "build-${{ matrix.os }}"
590
+ * name.expression // => "format('build-{0}', matrix.os)"
591
+ *
592
+ * const full = concat("build-", expr("matrix.os"), "-", expr("matrix.arch"));
593
+ * full.toString() // => "build-${{ matrix.os }}-${{ matrix.arch }}"
594
+ * ```
595
+ */
596
+ export function concat(...parts) {
597
+ if (parts.length === 0) {
598
+ return new InlineValue("");
599
+ }
600
+ if (parts.length === 1) {
601
+ const p = parts[0];
602
+ if (p instanceof ExpressionValue)
603
+ return p;
604
+ return new InlineValue(String(p));
605
+ }
606
+ // flatten nested ConcatValues, inline literals, and convert numbers to strings
607
+ const flat = [];
608
+ for (const part of parts) {
609
+ if (part instanceof ConcatValue) {
610
+ flat.push(...part.concatParts);
611
+ }
612
+ else if (part instanceof InlineValue) {
613
+ flat.push(part.toString());
614
+ }
615
+ else if (typeof part === "number") {
616
+ flat.push(String(part));
617
+ }
618
+ else {
619
+ flat.push(part);
620
+ }
621
+ }
622
+ // merge adjacent string parts
623
+ const merged = [];
624
+ for (const part of flat) {
625
+ const last = merged.length > 0 ? merged[merged.length - 1] : undefined;
626
+ if (typeof part === "string" && typeof last === "string") {
627
+ merged[merged.length - 1] = last + part;
628
+ }
629
+ else {
630
+ merged.push(part);
631
+ }
632
+ }
633
+ // degenerate cases after merging
634
+ if (merged.length === 1) {
635
+ const p = merged[0];
636
+ if (typeof p === "string")
637
+ return new InlineValue(p);
638
+ return p;
639
+ }
640
+ // collect sources from all expression parts
641
+ const sources = new Set();
642
+ for (const part of merged) {
643
+ if (part instanceof ExpressionValue) {
644
+ for (const s of part.allSources)
645
+ sources.add(s);
646
+ }
647
+ }
648
+ // build format() expression for use inside ${{ }} contexts
649
+ const templateParts = [];
650
+ const args = [];
651
+ let argIndex = 0;
652
+ for (const part of merged) {
653
+ if (part instanceof ExpressionValue) {
654
+ templateParts.push(`{${argIndex++}}`);
655
+ args.push(part.expression);
656
+ }
657
+ else {
658
+ // escape single quotes and braces for GitHub Actions format()
659
+ templateParts.push(part.replace(/'/g, "''").replace(/\{/g, "{{").replace(/\}/g, "}}"));
660
+ }
661
+ }
662
+ const formatExpr = `format('${templateParts.join("")}', ${args.join(", ")})`;
663
+ return new ConcatValue(formatExpr, merged, sources);
664
+ }
665
+ class ConcatValue extends ExpressionValue {
666
+ constructor(formatExpr, parts, sources) {
667
+ super(formatExpr, sources);
668
+ _ConcatValue_parts.set(this, void 0);
669
+ __classPrivateFieldSet(this, _ConcatValue_parts, Object.freeze([...parts]), "f");
670
+ }
671
+ /** the individual parts of this concatenation (for flattening nested concats) */
672
+ get concatParts() {
673
+ return __classPrivateFieldGet(this, _ConcatValue_parts, "f");
674
+ }
675
+ toString() {
676
+ return __classPrivateFieldGet(this, _ConcatValue_parts, "f")
677
+ .map((p) => (p instanceof ExpressionValue ? p.toString() : p))
678
+ .join("");
679
+ }
680
+ }
681
+ _ConcatValue_parts = new WeakMap();
568
682
  export function literal(value) {
569
683
  if (typeof value === "boolean") {
570
684
  return new RawCondition(String(value), EMPTY_SOURCES);
package/esm/job.d.ts CHANGED
@@ -10,6 +10,7 @@ interface CommonJobFields {
10
10
  group: string;
11
11
  cancelInProgress?: boolean | string;
12
12
  };
13
+ continueOnError?: boolean | string;
13
14
  }
14
15
  export interface ServiceContainer {
15
16
  image: string;
@@ -42,6 +43,7 @@ export interface StepsJobConfig extends CommonJobFields {
42
43
  url?: string;
43
44
  } | string | ExpressionValue;
44
45
  services?: Record<string, ServiceContainer>;
46
+ container?: ServiceContainer | string;
45
47
  }
46
48
  export interface ReusableJobConfig extends CommonJobFields {
47
49
  uses: string;
package/esm/job.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"job.d.ts","sourceRoot":"","sources":["../src/job.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"job.d.ts","sourceRoot":"","sources":["../src/job.ts"],"names":[],"mappings":"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"}
package/esm/job.js CHANGED
@@ -348,12 +348,20 @@ export class Job {
348
348
  ? "inherit"
349
349
  : serializeConfigValues(config.secrets);
350
350
  }
351
+ if (config.continueOnError != null) {
352
+ result["continue-on-error"] = config.continueOnError;
353
+ }
351
354
  return result;
352
355
  }
353
356
  // steps-based job
354
357
  result["runs-on"] = config.runsOn instanceof ExpressionValue
355
358
  ? config.runsOn.toString()
356
359
  : config.runsOn;
360
+ if (config.container != null) {
361
+ result.container = typeof config.container === "string"
362
+ ? config.container
363
+ : serializeService(config.container);
364
+ }
357
365
  if (config.permissions != null) {
358
366
  result.permissions = config.permissions;
359
367
  }
@@ -372,6 +380,9 @@ export class Job {
372
380
  if (config.timeoutMinutes != null) {
373
381
  result["timeout-minutes"] = config.timeoutMinutes;
374
382
  }
383
+ if (config.continueOnError != null) {
384
+ result["continue-on-error"] = config.continueOnError;
385
+ }
375
386
  if (config.defaults != null) {
376
387
  const d = {};
377
388
  if (config.defaults.run) {
package/esm/mod.d.ts CHANGED
@@ -5,8 +5,8 @@ export { Job, job } from "./job.js";
5
5
  export type { JobConfig, JobDef, ReusableJobConfig, ReusableJobDef, ServiceContainer, StepsJobConfig, StepsJobDef, } from "./job.js";
6
6
  export { createWorkflow, isLinting, Workflow } from "./workflow.js";
7
7
  export type { WorkflowCallInput, WorkflowCallOutput, WorkflowCallSecret, WorkflowCallTrigger, WorkflowConfig, WorkflowTriggers, } from "./workflow.js";
8
- export { Condition, conditions, defineExprObj, ElseIfBuilder, expr, ExpressionValue, literal, ThenBuilder, } from "./expression.js";
9
- export type { ExpressionSource, ExprMap, ExprOf, TernaryValue, } from "./expression.js";
8
+ export { concat, Condition, conditions, defineExprObj, ElseIfBuilder, expr, ExpressionValue, literal, ThenBuilder, } from "./expression.js";
9
+ export type { ConcatPart, ExpressionSource, ExprMap, ExprOf, TernaryValue, } from "./expression.js";
10
10
  export { defineMatrix, Matrix } from "./matrix.js";
11
11
  export type { PermissionLevel, Permissions, PermissionScope, } from "./permissions.js";
12
12
  export { Artifact, defineArtifact } from "./artifact.js";
package/esm/mod.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../src/mod.ts"],"names":[],"mappings":"AAAA,OAAO,qBAAqB,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAChD,YAAY,EACV,aAAa,EACb,WAAW,EACX,WAAW,EACX,UAAU,EACV,YAAY,EACZ,QAAQ,GACT,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AACpC,YAAY,EACV,SAAS,EACT,MAAM,EACN,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,WAAW,GACZ,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACpE,YAAY,EACV,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,cAAc,EACd,gBAAgB,GACjB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,SAAS,EACT,UAAU,EACV,aAAa,EACb,aAAa,EACb,IAAI,EACJ,eAAe,EACf,OAAO,EACP,WAAW,GACZ,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,gBAAgB,EAChB,OAAO,EACP,MAAM,EACN,YAAY,GACb,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACnD,YAAY,EACV,eAAe,EACf,WAAW,EACX,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACzD,YAAY,EACV,eAAe,EACf,cAAc,EACd,YAAY,GACb,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../src/mod.ts"],"names":[],"mappings":"AAAA,OAAO,qBAAqB,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAChD,YAAY,EACV,aAAa,EACb,WAAW,EACX,WAAW,EACX,UAAU,EACV,YAAY,EACZ,QAAQ,GACT,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AACpC,YAAY,EACV,SAAS,EACT,MAAM,EACN,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,WAAW,GACZ,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACpE,YAAY,EACV,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,cAAc,EACd,gBAAgB,GACjB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,MAAM,EACN,SAAS,EACT,UAAU,EACV,aAAa,EACb,aAAa,EACb,IAAI,EACJ,eAAe,EACf,OAAO,EACP,WAAW,GACZ,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,UAAU,EACV,gBAAgB,EAChB,OAAO,EACP,MAAM,EACN,YAAY,GACb,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACnD,YAAY,EACV,eAAe,EACf,WAAW,EACX,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACzD,YAAY,EACV,eAAe,EACf,cAAc,EACd,YAAY,GACb,MAAM,eAAe,CAAC"}
package/esm/mod.js CHANGED
@@ -2,6 +2,6 @@ import "./_dnt.polyfills.js";
2
2
  export { Step, step, StepRef } from "./step.js";
3
3
  export { Job, job } from "./job.js";
4
4
  export { createWorkflow, isLinting, Workflow } from "./workflow.js";
5
- export { Condition, conditions, defineExprObj, ElseIfBuilder, expr, ExpressionValue, literal, ThenBuilder, } from "./expression.js";
5
+ export { concat, Condition, conditions, defineExprObj, ElseIfBuilder, expr, ExpressionValue, literal, ThenBuilder, } from "./expression.js";
6
6
  export { defineMatrix, Matrix } from "./matrix.js";
7
7
  export { Artifact, defineArtifact } from "./artifact.js";
package/esm/workflow.d.ts CHANGED
@@ -42,6 +42,7 @@ export interface WorkflowTriggers {
42
42
  }
43
43
  export interface WorkflowConfig {
44
44
  name: string;
45
+ runName?: string;
45
46
  on: WorkflowTriggers;
46
47
  permissions?: Permissions;
47
48
  concurrency?: {
@@ -49,6 +50,12 @@ export interface WorkflowConfig {
49
50
  cancelInProgress?: boolean | string;
50
51
  };
51
52
  env?: Record<string, ConfigValue>;
53
+ defaults?: {
54
+ run?: {
55
+ shell?: string;
56
+ workingDirectory?: string;
57
+ };
58
+ };
52
59
  jobs?: (JobDef | Job)[];
53
60
  }
54
61
  export declare class Workflow {
@@ -1 +1 @@
1
- {"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../src/workflow.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../src/workflow.ts"],"names":[],"mappings":"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"}
package/esm/workflow.js CHANGED
@@ -43,6 +43,9 @@ export class Workflow {
43
43
  toYamlString(options) {
44
44
  const obj = {};
45
45
  obj.name = __classPrivateFieldGet(this, _Workflow_config, "f").name;
46
+ if (__classPrivateFieldGet(this, _Workflow_config, "f").runName != null) {
47
+ obj["run-name"] = __classPrivateFieldGet(this, _Workflow_config, "f").runName;
48
+ }
46
49
  obj.on = serializeTriggers(__classPrivateFieldGet(this, _Workflow_config, "f").on);
47
50
  if (__classPrivateFieldGet(this, _Workflow_config, "f").permissions != null) {
48
51
  obj.permissions = __classPrivateFieldGet(this, _Workflow_config, "f").permissions;
@@ -63,6 +66,20 @@ export class Workflow {
63
66
  }
64
67
  obj.env = env;
65
68
  }
69
+ if (__classPrivateFieldGet(this, _Workflow_config, "f").defaults != null) {
70
+ const d = {};
71
+ if (__classPrivateFieldGet(this, _Workflow_config, "f").defaults.run) {
72
+ const run = {};
73
+ if (__classPrivateFieldGet(this, _Workflow_config, "f").defaults.run.shell != null) {
74
+ run.shell = __classPrivateFieldGet(this, _Workflow_config, "f").defaults.run.shell;
75
+ }
76
+ if (__classPrivateFieldGet(this, _Workflow_config, "f").defaults.run.workingDirectory != null) {
77
+ run["working-directory"] = __classPrivateFieldGet(this, _Workflow_config, "f").defaults.run.workingDirectory;
78
+ }
79
+ d.run = run;
80
+ }
81
+ obj.defaults = d;
82
+ }
66
83
  // pre-resolve all jobs and build step→job mapping for cross-job deps
67
84
  const stepOwners = new Map();
68
85
  for (const job of __classPrivateFieldGet(this, _Workflow_jobs, "f").values()) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gagen",
3
- "version": "0.2.15",
3
+ "version": "0.2.17",
4
4
  "description": "Generate complex GitHub Actions YAML files using a declarative API.",
5
5
  "repository": {
6
6
  "type": "git",