@fuzdev/fuz_gitops 0.78.1 → 0.79.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.
Files changed (179) hide show
  1. package/README.md +78 -24
  2. package/dist/ModulesDetail.svelte +15 -22
  3. package/dist/ModulesDetail.svelte.d.ts.map +1 -1
  4. package/dist/ModulesNav.svelte +4 -1
  5. package/dist/ModulesPage.svelte +1 -3
  6. package/dist/ModulesPage.svelte.d.ts.map +1 -1
  7. package/dist/PageHeader.svelte +2 -2
  8. package/dist/PageHeader.svelte.d.ts +0 -3
  9. package/dist/PageHeader.svelte.d.ts.map +1 -1
  10. package/dist/PullRequestsDetail.svelte +10 -9
  11. package/dist/PullRequestsDetail.svelte.d.ts.map +1 -1
  12. package/dist/PullRequestsPage.svelte +1 -3
  13. package/dist/PullRequestsPage.svelte.d.ts.map +1 -1
  14. package/dist/ReposTable.svelte +27 -48
  15. package/dist/ReposTable.svelte.d.ts.map +1 -1
  16. package/dist/ReposTree.svelte +5 -19
  17. package/dist/ReposTree.svelte.d.ts.map +1 -1
  18. package/dist/ReposTreeNav.svelte +5 -7
  19. package/dist/ReposTreeNav.svelte.d.ts.map +1 -1
  20. package/dist/TablePage.svelte +1 -3
  21. package/dist/TablePage.svelte.d.ts.map +1 -1
  22. package/dist/TreeItemPage.svelte +1 -3
  23. package/dist/TreeItemPage.svelte.d.ts.map +1 -1
  24. package/dist/TreePage.svelte +1 -3
  25. package/dist/TreePage.svelte.d.ts.map +1 -1
  26. package/dist/ci_reconcile.d.ts +6 -10
  27. package/dist/ci_reconcile.d.ts.map +1 -1
  28. package/dist/ci_reconcile.js +6 -8
  29. package/dist/dependency_graph.d.ts +26 -49
  30. package/dist/dependency_graph.d.ts.map +1 -1
  31. package/dist/dependency_graph.js +37 -80
  32. package/dist/dependency_updater.d.ts +1 -1
  33. package/dist/dependency_updater.d.ts.map +1 -1
  34. package/dist/dependency_updater.js +6 -1
  35. package/dist/fetch_repo_data.d.ts +34 -8
  36. package/dist/fetch_repo_data.d.ts.map +1 -1
  37. package/dist/fetch_repo_data.js +44 -22
  38. package/dist/fs_fetch_value_cache.d.ts +1 -1
  39. package/dist/fs_fetch_value_cache.js +1 -1
  40. package/dist/git_operations.d.ts +6 -49
  41. package/dist/git_operations.d.ts.map +1 -1
  42. package/dist/git_operations.js +13 -126
  43. package/dist/github.d.ts +17 -2
  44. package/dist/github.d.ts.map +1 -1
  45. package/dist/github.js +15 -6
  46. package/dist/github_helpers.d.ts.map +1 -1
  47. package/dist/github_helpers.js +3 -11
  48. package/dist/gitops_analyze.task.d.ts +24 -2
  49. package/dist/gitops_analyze.task.d.ts.map +1 -1
  50. package/dist/gitops_analyze.task.js +43 -30
  51. package/dist/gitops_config.d.ts +34 -79
  52. package/dist/gitops_config.d.ts.map +1 -1
  53. package/dist/gitops_config.js +76 -53
  54. package/dist/gitops_constants.d.ts +6 -4
  55. package/dist/gitops_constants.d.ts.map +1 -1
  56. package/dist/gitops_constants.js +6 -4
  57. package/dist/gitops_plan.task.d.ts +29 -3
  58. package/dist/gitops_plan.task.d.ts.map +1 -1
  59. package/dist/gitops_plan.task.js +80 -58
  60. package/dist/gitops_publish.task.d.ts +62 -2
  61. package/dist/gitops_publish.task.d.ts.map +1 -1
  62. package/dist/gitops_publish.task.js +187 -102
  63. package/dist/gitops_run.task.d.ts +74 -0
  64. package/dist/gitops_run.task.d.ts.map +1 -1
  65. package/dist/gitops_run.task.js +174 -160
  66. package/dist/gitops_sync.task.d.ts +65 -3
  67. package/dist/gitops_sync.task.d.ts.map +1 -1
  68. package/dist/gitops_sync.task.js +154 -30
  69. package/dist/gitops_task_helpers.d.ts +86 -59
  70. package/dist/gitops_task_helpers.d.ts.map +1 -1
  71. package/dist/gitops_task_helpers.js +120 -79
  72. package/dist/gitops_validate.task.d.ts +1 -2
  73. package/dist/gitops_validate.task.d.ts.map +1 -1
  74. package/dist/gitops_validate.task.js +15 -22
  75. package/dist/graph_validation.d.ts +16 -27
  76. package/dist/graph_validation.d.ts.map +1 -1
  77. package/dist/graph_validation.js +23 -64
  78. package/dist/local_repo.d.ts +50 -62
  79. package/dist/local_repo.d.ts.map +1 -1
  80. package/dist/local_repo.js +80 -193
  81. package/dist/log_helpers.d.ts +8 -8
  82. package/dist/log_helpers.d.ts.map +1 -1
  83. package/dist/multi_repo_publisher.d.ts +10 -0
  84. package/dist/multi_repo_publisher.d.ts.map +1 -1
  85. package/dist/multi_repo_publisher.js +115 -51
  86. package/dist/npm_registry.d.ts +23 -19
  87. package/dist/npm_registry.d.ts.map +1 -1
  88. package/dist/npm_registry.js +20 -47
  89. package/dist/operations.d.ts +75 -180
  90. package/dist/operations.d.ts.map +1 -1
  91. package/dist/operations.js +15 -7
  92. package/dist/operations_defaults.d.ts +17 -2
  93. package/dist/operations_defaults.d.ts.map +1 -1
  94. package/dist/operations_defaults.js +104 -121
  95. package/dist/output_helpers.d.ts +36 -0
  96. package/dist/output_helpers.d.ts.map +1 -1
  97. package/dist/output_helpers.js +37 -3
  98. package/dist/preflight_checks.d.ts +20 -27
  99. package/dist/preflight_checks.d.ts.map +1 -1
  100. package/dist/preflight_checks.js +37 -126
  101. package/dist/publish_steps.d.ts +2 -4
  102. package/dist/publish_steps.d.ts.map +1 -1
  103. package/dist/publish_steps.js +2 -6
  104. package/dist/publishing_event.d.ts +2 -8
  105. package/dist/publishing_event.d.ts.map +1 -1
  106. package/dist/publishing_event.js +5 -4
  107. package/dist/publishing_event_handler.d.ts +10 -8
  108. package/dist/publishing_event_handler.d.ts.map +1 -1
  109. package/dist/publishing_event_handler.js +14 -12
  110. package/dist/publishing_plan.d.ts +16 -1
  111. package/dist/publishing_plan.d.ts.map +1 -1
  112. package/dist/publishing_plan.js +328 -250
  113. package/dist/publishing_plan_logging.d.ts +1 -1
  114. package/dist/publishing_plan_logging.d.ts.map +1 -1
  115. package/dist/publishing_plan_logging.js +21 -14
  116. package/dist/repo.svelte.d.ts +7 -0
  117. package/dist/repo.svelte.d.ts.map +1 -1
  118. package/dist/repo.svelte.js +3 -0
  119. package/dist/repo_readiness.d.ts +210 -0
  120. package/dist/repo_readiness.d.ts.map +1 -0
  121. package/dist/repo_readiness.js +516 -0
  122. package/dist/repos_status.d.ts +3340 -0
  123. package/dist/repos_status.d.ts.map +1 -0
  124. package/dist/repos_status.js +555 -0
  125. package/dist/repos_status_load.d.ts +65 -0
  126. package/dist/repos_status_load.d.ts.map +1 -0
  127. package/dist/repos_status_load.js +131 -0
  128. package/package.json +7 -27
  129. package/src/lib/ci_reconcile.ts +7 -11
  130. package/src/lib/dependency_graph.ts +45 -97
  131. package/src/lib/dependency_updater.ts +7 -1
  132. package/src/lib/fetch_repo_data.ts +66 -29
  133. package/src/lib/fs_fetch_value_cache.ts +1 -1
  134. package/src/lib/git_operations.ts +15 -187
  135. package/src/lib/github.ts +20 -8
  136. package/src/lib/github_helpers.ts +5 -12
  137. package/src/lib/gitops_analyze.task.ts +79 -41
  138. package/src/lib/gitops_config.ts +88 -137
  139. package/src/lib/gitops_constants.ts +6 -4
  140. package/src/lib/gitops_plan.task.ts +113 -61
  141. package/src/lib/gitops_publish.task.ts +255 -122
  142. package/src/lib/gitops_run.task.ts +250 -178
  143. package/src/lib/gitops_sync.task.ts +208 -33
  144. package/src/lib/gitops_task_helpers.ts +166 -110
  145. package/src/lib/gitops_validate.task.ts +17 -27
  146. package/src/lib/graph_validation.ts +25 -86
  147. package/src/lib/local_repo.ts +109 -316
  148. package/src/lib/log_helpers.ts +8 -18
  149. package/src/lib/multi_repo_publisher.ts +138 -53
  150. package/src/lib/npm_registry.ts +37 -62
  151. package/src/lib/operations.ts +78 -150
  152. package/src/lib/operations_defaults.ts +108 -154
  153. package/src/lib/output_helpers.ts +55 -3
  154. package/src/lib/preflight_checks.ts +47 -183
  155. package/src/lib/publish_steps.ts +15 -13
  156. package/src/lib/publishing_event.ts +5 -4
  157. package/src/lib/publishing_event_handler.ts +18 -16
  158. package/src/lib/publishing_plan.ts +451 -287
  159. package/src/lib/publishing_plan_logging.ts +32 -23
  160. package/src/lib/repo.svelte.ts +8 -0
  161. package/src/lib/repo_readiness.ts +647 -0
  162. package/src/lib/repos_status.ts +671 -0
  163. package/src/lib/repos_status_load.ts +173 -0
  164. package/dist/config_reconcile.d.ts +0 -46
  165. package/dist/config_reconcile.d.ts.map +0 -1
  166. package/dist/config_reconcile.js +0 -64
  167. package/dist/paths.d.ts +0 -7
  168. package/dist/paths.d.ts.map +0 -1
  169. package/dist/paths.js +0 -6
  170. package/dist/repo_ops.d.ts +0 -59
  171. package/dist/repo_ops.d.ts.map +0 -1
  172. package/dist/repo_ops.js +0 -170
  173. package/dist/resolved_gitops_config.d.ts +0 -9
  174. package/dist/resolved_gitops_config.d.ts.map +0 -1
  175. package/dist/resolved_gitops_config.js +0 -12
  176. package/src/lib/config_reconcile.ts +0 -98
  177. package/src/lib/paths.ts +0 -6
  178. package/src/lib/repo_ops.ts +0 -216
  179. package/src/lib/resolved_gitops_config.ts +0 -27
@@ -1 +1 @@
1
- {"version":3,"file":"gitops_config.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/gitops_config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,yBAAyB,CAAC;AAGnD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAIzD,MAAM,WAAW,YAAY;IAC5B,KAAK,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,kBAAkB,GAAG,CAChC,WAAW,EAAE,YAAY,KACrB,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;AAEhD,MAAM,WAAW,eAAe;IAC/B,KAAK,CAAC,EAAE,KAAK,CAAC,GAAG,GAAG,mBAAmB,CAAC,CAAC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;GAIG;AACH,MAAM,MAAM,oBAAoB,GAAG,QAAQ,GAAG,SAAS,CAAC;AAExD,MAAM,WAAW,gBAAgB;IAChC;;;;;;OAMG;IACH,QAAQ,EAAE,GAAG,CAAC;IAEd;;;;;;;;;;;OAWG;IACH,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAExB;;OAEG;IACH,MAAM,EAAE,SAAS,CAAC;IAElB;;OAEG;IACH,UAAU,EAAE,oBAAoB,CAAC;IAEjC;;;OAGG;IACH,EAAE,EAAE,OAAO,CAAC;IAEZ;;OAEG;IACH,QAAQ,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IACnC,QAAQ,EAAE,GAAG,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,kEAAkE;IAClE,UAAU,CAAC,EAAE,oBAAoB,CAAC;IAClC,oFAAoF;IACpF,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,iFAAiF;IACjF,QAAQ,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,eAAO,MAAM,0BAA0B,QAAO,YAG5C,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,uBAAuB,GAAI,YAAY,eAAe,KAAG,YAUrE,CAAC;AAwBF,MAAM,WAAW,kBAAkB;IAClC,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,kBAAkB,CAAC;CACvD;AAED,eAAO,MAAM,kBAAkB,GAAU,aAAa,MAAM,KAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAazF,CAAC;AAEF,eAAO,MAAM,6BAA6B,EAAE,CAC3C,aAAa,EAAE,GAAG,EAClB,WAAW,EAAE,MAAM,KACf,OAAO,CAAC,aAAa,IAAI,kBAS7B,CAAC"}
1
+ {"version":3,"file":"gitops_config.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/gitops_config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE1D,iCAAiC;AACjC,eAAO,MAAM,YAAY;;kBAIvB,CAAC;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAExD,yDAAyD;AACzD,MAAM,MAAM,kBAAkB,GAAG,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;AAE5E,MAAM,WAAW,kBAAkB;IAClC,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,kBAAkB,CAAC;CACpD;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,kCAAkC,GAC9C,SAAS,aAAa,CAAC,gBAAgB,CAAC,EACxC,iBAAiB,OAAO,KACtB,KAAK,CAAC,gBAAgB,CACgD,CAAC;AAE1E;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,GAAU,aAAa,MAAM,KAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAwBzF,CAAC;AAKF;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,GAAI,KAAK,OAAO,EAAE,aAAa,MAAM,KAAG,YAwBvE,CAAC;AAEF,eAAO,MAAM,6BAA6B,EAAE,CAC3C,aAAa,EAAE,GAAG,EAClB,WAAW,EAAE,MAAM,KACf,OAAO,CAAC,aAAa,IAAI,kBAS7B,CAAC"}
@@ -1,76 +1,99 @@
1
1
  /**
2
- * Configuration types and normalization for gitops multi-repo management.
2
+ * The gitops config: which repos a project's gitops tasks work over, as a flat
3
+ * list of `repos.toml` registry keys.
3
4
  *
4
- * Two-phase configuration system:
5
- * - `RawGitopsConfig` - User-friendly format with optional fields and flexible types
6
- * - `GitopsConfig` - Internal format with required fields and strict types
7
- *
8
- * This allows users to provide minimal configs (e.g., just URLs as strings) while
9
- * the system works with normalized configs internally for type safety.
5
+ * Every other fact about a repo — its dir, URL, branch, visibility, `ci`, and
6
+ * `archived` — comes from the registry, through `repos status --json`, so the
7
+ * config declares nothing that could drift from it.
10
8
  *
11
9
  * @module
12
10
  */
13
11
  import { existsSync } from 'node:fs';
14
- import { strip_end } from '@fuzdev/fuz_util/string.ts';
15
- import { DEFAULT_REPOS_DIR } from './paths.js';
16
- export const create_empty_gitops_config = () => ({
17
- repos: [],
18
- repos_dir: DEFAULT_REPOS_DIR
12
+ import { z } from 'zod';
13
+ /** A project's gitops config. */
14
+ export const GitopsConfig = z.strictObject({
15
+ repos: z
16
+ .array(z.string().min(1))
17
+ .meta({ description: 'repos.toml registry keys of owned repos, in the order tasks list them' })
19
18
  });
20
19
  /**
21
- * Transforms a `RawGitopsConfig` to the more strict `GitopsConfig`.
22
- * This allows users to provide a more relaxed config.
20
+ * The private repos a public host package must not publish. `gitops_sync` writes
21
+ * every configured repo's GitHub metadata into the host project's generated
22
+ * `repos.json` — a public site's data when the host package is public — so a
23
+ * private repo in that config would leak. Empty when the host is private.
24
+ *
25
+ * @param entries - the configured repos' registry entries
26
+ * @param host_is_private - whether the host `package.json` sets `private: true`
27
+ */
28
+ export const gitops_config_leaked_private_repos = (entries, host_is_private) => host_is_private ? [] : entries.filter((e) => e.visibility === 'private');
29
+ /**
30
+ * Loads a gitops config module and validates it.
31
+ *
32
+ * @returns the config, or `null` when no file exists at `config_path`
33
+ * @throws {Error} if the module's default export isn't a valid config
23
34
  */
24
- export const normalize_gitops_config = (raw_config) => {
25
- const empty_config = create_empty_gitops_config();
26
- // All of the raw config properties are optional,
27
- // so fall back to the empty values when `undefined`.
28
- const { repos, repos_dir } = raw_config;
29
- return {
30
- repos: repos ? repos.map((r) => parse_fuz_repo_config(r)) : empty_config.repos,
31
- // Default to two dirs up from config if not specified
32
- repos_dir: repos_dir ?? DEFAULT_REPOS_DIR
33
- };
34
- };
35
- const parse_fuz_repo_config = (r) => {
36
- if (typeof r === 'string') {
37
- return {
38
- repo_url: r,
39
- repo_dir: null,
40
- branch: 'main', // TODO @zts use flavored for GitBranch
41
- visibility: 'public',
42
- ci: true,
43
- archived: false
44
- };
45
- }
46
- const visibility = r.visibility ?? 'public';
47
- return {
48
- repo_url: strip_end(r.repo_url, '.git'),
49
- repo_dir: r.repo_dir ?? null,
50
- branch: r.branch ?? 'main', // TODO @zts use flavored for GitBranch
51
- visibility,
52
- ci: r.ci ?? visibility === 'public',
53
- archived: r.archived ?? false
54
- };
55
- };
56
35
  export const load_gitops_config = async (config_path) => {
57
36
  if (!existsSync(config_path)) {
58
37
  // No user config file found.
59
38
  return null;
60
39
  }
61
- // Import the user's `gitops.config.ts`.
62
- const config_module = await import(config_path);
40
+ // Import the user's `gitops.config.ts`. An import or call failure keeps its
41
+ // stack, which carries the config's file and line; validation errors don't need one.
42
+ let config_module;
43
+ try {
44
+ config_module = await import(config_path);
45
+ }
46
+ catch (err) {
47
+ throw Error(`Failed to import the gitops config at ${config_path}:\n${error_with_stack(err)}`);
48
+ }
63
49
  validate_gitops_config_module(config_module, config_path);
64
- return normalize_gitops_config(typeof config_module.default === 'function'
65
- ? await config_module.default(create_empty_gitops_config())
66
- : config_module.default);
50
+ let raw;
51
+ try {
52
+ raw =
53
+ typeof config_module.default === 'function'
54
+ ? await config_module.default()
55
+ : config_module.default;
56
+ }
57
+ catch (err) {
58
+ throw Error(`The gitops config at ${config_path} threw:\n${error_with_stack(err)}`);
59
+ }
60
+ return parse_gitops_config(raw, config_path);
61
+ };
62
+ const error_with_stack = (err) => err instanceof Error ? (err.stack ?? err.message) : String(err);
63
+ /**
64
+ * Validates a loaded config value: registry keys, each listed once.
65
+ *
66
+ * @throws {Error} naming the config and what's wrong with it
67
+ */
68
+ export const parse_gitops_config = (raw, config_path) => {
69
+ const parsed = GitopsConfig.safeParse(raw);
70
+ if (!parsed.success) {
71
+ const hint = "\n `repos` lists repos.toml registry keys; a repo's url, dir, branch, visibility, ci, and archived come from the registry";
72
+ throw Error(`Invalid gitops config at ${config_path}:\n${z.prettifyError(parsed.error)}${hint}`);
73
+ }
74
+ const config = parsed.data;
75
+ const problems = [];
76
+ const seen = new Set();
77
+ for (const key of config.repos) {
78
+ if (key.includes('/')) {
79
+ problems.push(`\`${key}\` isn't a registry key — list repos by their repos.toml key`);
80
+ }
81
+ else if (seen.has(key)) {
82
+ problems.push(`\`${key}\` is listed more than once`);
83
+ }
84
+ seen.add(key);
85
+ }
86
+ if (problems.length) {
87
+ throw Error(`Invalid gitops config at ${config_path}:\n ${problems.join('\n ')}`);
88
+ }
89
+ return config;
67
90
  };
68
91
  export const validate_gitops_config_module = (config_module, config_path) => {
69
92
  const config = config_module.default;
70
93
  if (!config) {
71
- throw Error(`Invalid Fuz config module at ${config_path}: expected a default export`);
94
+ throw Error(`Invalid gitops config module at ${config_path}: expected a default export`);
72
95
  }
73
96
  else if (!(typeof config === 'function' || typeof config === 'object')) {
74
- throw Error(`Invalid Fuz config module at ${config_path}: the default export must be a function or object`);
97
+ throw Error(`Invalid gitops config module at ${config_path}: the default export must be a function or object`);
75
98
  }
76
99
  };
@@ -6,11 +6,13 @@
6
6
  * @module
7
7
  */
8
8
  /**
9
- * Maximum number of iterations for fixed-point iteration during publishing.
10
- * Used in both plan generation and actual publishing to resolve transitive dependency cascades.
9
+ * Maximum number of fixed-point iterations plan generation runs to resolve
10
+ * transitive dependency cascades. Publishing executes the frozen plan in a
11
+ * single pass and doesn't iterate.
11
12
  *
12
- * In practice, most repos converge in 2-3 iterations.
13
- * Deep dependency chains may require more iterations.
13
+ * Each iteration reaches at least one more level of dependents, so a deep dependency
14
+ * chain needs more; a plan that hits the limit still changing warns, naming
15
+ * the packages left.
14
16
  */
15
17
  export declare const GITOPS_MAX_ITERATIONS_DEFAULT = 10;
16
18
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"gitops_constants.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/gitops_constants.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,6BAA6B,KAAK,CAAC;AAEhD;;GAEG;AACH,eAAO,MAAM,0BAA0B,qBAAqB,CAAC;AAE7D;;GAEG;AACH,eAAO,MAAM,0BAA0B,IAAI,CAAC;AAE5C;;;GAGG;AACH,eAAO,MAAM,+BAA+B,SAAU,CAAC"}
1
+ {"version":3,"file":"gitops_constants.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/gitops_constants.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;;;;GAQG;AACH,eAAO,MAAM,6BAA6B,KAAK,CAAC;AAEhD;;GAEG;AACH,eAAO,MAAM,0BAA0B,qBAAqB,CAAC;AAE7D;;GAEG;AACH,eAAO,MAAM,0BAA0B,IAAI,CAAC;AAE5C;;;GAGG;AACH,eAAO,MAAM,+BAA+B,SAAU,CAAC"}
@@ -6,11 +6,13 @@
6
6
  * @module
7
7
  */
8
8
  /**
9
- * Maximum number of iterations for fixed-point iteration during publishing.
10
- * Used in both plan generation and actual publishing to resolve transitive dependency cascades.
9
+ * Maximum number of fixed-point iterations plan generation runs to resolve
10
+ * transitive dependency cascades. Publishing executes the frozen plan in a
11
+ * single pass and doesn't iterate.
11
12
  *
12
- * In practice, most repos converge in 2-3 iterations.
13
- * Deep dependency chains may require more iterations.
13
+ * Each iteration reaches at least one more level of dependents, so a deep dependency
14
+ * chain needs more; a plan that hits the limit still changing warns, naming
15
+ * the packages left.
14
16
  */
15
17
  export const GITOPS_MAX_ITERATIONS_DEFAULT = 10;
16
18
  /**
@@ -1,9 +1,13 @@
1
1
  import type { Task } from '@fuzdev/gro';
2
+ import type { Logger } from '@fuzdev/fuz_util/log.ts';
2
3
  import { z } from 'zod';
4
+ import { type ResolveGitopsReposOptions } from './gitops_task_helpers.js';
5
+ import type { LocalRepo } from './local_repo.js';
6
+ import type { ChangesetOperations } from './operations.js';
3
7
  /** @nodocs */
4
8
  export declare const Args: z.ZodObject<{
5
9
  config: z.ZodDefault<z.ZodString>;
6
- dir: z.ZodOptional<z.ZodString>;
10
+ registry: z.ZodOptional<z.ZodString>;
7
11
  format: z.ZodDefault<z.ZodEnum<{
8
12
  stdout: "stdout";
9
13
  json: "json";
@@ -11,7 +15,6 @@ export declare const Args: z.ZodObject<{
11
15
  }>>;
12
16
  outfile: z.ZodOptional<z.ZodString>;
13
17
  verbose: z.ZodDefault<z.ZodBoolean>;
14
- sync: z.ZodDefault<z.ZodBoolean>;
15
18
  }, z.core.$strict>;
16
19
  export type Args = z.infer<typeof Args>;
17
20
  /**
@@ -20,10 +23,33 @@ export type Args = z.infer<typeof Args>;
20
23
  *
21
24
  * Usage:
22
25
  * `gro gitops_plan`
23
- * `gro gitops_plan --dir ../repos`
26
+ * `gro gitops_plan --registry ../repos.toml`
24
27
  * `gro gitops_plan --config ./custom.config.ts`
25
28
  *
26
29
  * @nodocs
27
30
  */
28
31
  export declare const task: Task<Args>;
32
+ /**
33
+ * The side effects `run_gitops_plan` reaches through, injectable for tests.
34
+ *
35
+ * @nodocs
36
+ */
37
+ export interface GitopsPlanDeps {
38
+ /** Loads the configured repos as they sit (`get_gitops_ready`). */
39
+ load_repos: (options: ResolveGitopsReposOptions) => Promise<{
40
+ local_repos: Array<LocalRepo>;
41
+ }>;
42
+ /** Reads each repo's changesets for the plan. */
43
+ changeset_ops: ChangesetOperations;
44
+ }
45
+ /**
46
+ * Runs `gro gitops_plan`: loads the repos as they sit, logs the readiness
47
+ * block, generates the plan, and outputs it. Under `--format json` or
48
+ * `markdown` without `--outfile`, the log goes to stderr and stdout carries
49
+ * the document alone (`route_human_output`).
50
+ *
51
+ * @throws {Error} when the plan has errors that would block publishing, after outputting it
52
+ * @nodocs
53
+ */
54
+ export declare const run_gitops_plan: (args: Args, log: Logger, deps?: Partial<GitopsPlanDeps>) => Promise<void>;
29
55
  //# sourceMappingURL=gitops_plan.task.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"gitops_plan.task.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/gitops_plan.task.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAaxB,cAAc;AACd,eAAO,MAAM,IAAI;;;;;;;;;;;kBAsBf,CAAC;AACH,MAAM,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC;AAExC;;;;;;;;;;GAUG;AACH,eAAO,MAAM,IAAI,EAAE,IAAI,CAAC,IAAI,CAmC3B,CAAC"}
1
+ {"version":3,"file":"gitops_plan.task.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/gitops_plan.task.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAGN,KAAK,yBAAyB,EAC9B,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAgB3D,cAAc;AACd,eAAO,MAAM,IAAI;;;;;;;;;;kBAkBf,CAAC;AACH,MAAM,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC;AAExC;;;;;;;;;;GAUG;AACH,eAAO,MAAM,IAAI,EAAE,IAAI,CAAC,IAAI,CAM3B,CAAC;AAEF;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC9B,mEAAmE;IACnE,UAAU,EAAE,CAAC,OAAO,EAAE,yBAAyB,KAAK,OAAO,CAAC;QAAE,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,CAAA;KAAE,CAAC,CAAC;IAC/F,iDAAiD;IACjD,aAAa,EAAE,mBAAmB,CAAC;CACnC;AAOD;;;;;;;;GAQG;AACH,eAAO,MAAM,eAAe,GAC3B,MAAM,IAAI,EACV,KAAK,MAAM,EACX,OAAM,OAAO,CAAC,cAAc,CAAM,KAChC,OAAO,CAAC,IAAI,CA4Bd,CAAC"}
@@ -1,8 +1,10 @@
1
1
  import { z } from 'zod';
2
2
  import { styleText as st } from 'node:util';
3
- import { get_gitops_ready } from './gitops_task_helpers.js';
4
- import { generate_publishing_plan, log_publishing_plan } from './publishing_plan.js';
5
- import { format_and_output } from './output_helpers.js';
3
+ import { get_gitops_ready, log_readiness_block } from './gitops_task_helpers.js';
4
+ import { default_changeset_operations } from './operations_defaults.js';
5
+ import { generate_publishing_plan, version_change_kind } from './publishing_plan.js';
6
+ import { log_publishing_plan } from './publishing_plan_logging.js';
7
+ import { format_and_output, output_is_machine, route_human_output } from './output_helpers.js';
6
8
  import { GITOPS_CONFIG_PATH_DEFAULT } from './gitops_constants.js';
7
9
  /** @nodocs */
8
10
  export const Args = z.strictObject({
@@ -10,22 +12,18 @@ export const Args = z.strictObject({
10
12
  .string()
11
13
  .meta({ description: 'path to the gitops config file, absolute or relative to the cwd' })
12
14
  .default(GITOPS_CONFIG_PATH_DEFAULT),
13
- dir: z
15
+ registry: z
14
16
  .string()
15
- .meta({ description: 'path containing the repos, defaults to the parent of the config dir' })
17
+ .meta({
18
+ description: 'path to the repos.toml registry, when `repos` would not find it walking up from the cwd'
19
+ })
16
20
  .optional(),
17
21
  format: z
18
22
  .enum(['stdout', 'json', 'markdown'])
19
23
  .meta({ description: 'output format' })
20
24
  .default('stdout'),
21
25
  outfile: z.string().meta({ description: 'write output to file instead of logging' }).optional(),
22
- verbose: z.boolean().meta({ description: 'show additional details' }).default(false),
23
- sync: z
24
- .boolean()
25
- .meta({
26
- description: 'sync repos (switch branch, pull, install) before planning instead of reading the working tree as-is'
27
- })
28
- .default(false)
26
+ verbose: z.boolean().meta({ description: 'show additional details' }).default(false)
29
27
  });
30
28
  /**
31
29
  * Generate a publishing plan showing what would happen during multi-repo publishing.
@@ -33,7 +31,7 @@ export const Args = z.strictObject({
33
31
  *
34
32
  * Usage:
35
33
  * `gro gitops_plan`
36
- * `gro gitops_plan --dir ../repos`
34
+ * `gro gitops_plan --registry ../repos.toml`
37
35
  * `gro gitops_plan --config ./custom.config.ts`
38
36
  *
39
37
  * @nodocs
@@ -42,29 +40,43 @@ export const task = {
42
40
  summary: 'generate a publishing plan based on changesets',
43
41
  Args,
44
42
  run: async ({ args, log }) => {
45
- const { dir, config, format, outfile, verbose, sync } = args;
46
- log.info(st('cyan', 'Generating multi-repo publishing plan...'));
47
- // Load local repos; read the working tree as-is unless `--sync`
48
- const { local_repos } = await get_gitops_ready({
49
- config,
50
- dir,
51
- download: false, // Don't download if missing
52
- sync,
53
- log
54
- });
55
- if (local_repos.length === 0) {
56
- log.error('No local repos found');
57
- return;
58
- }
59
- log.info(` Found ${local_repos.length} local repos`);
60
- // Generate publishing plan
61
- const plan = await generate_publishing_plan(local_repos, { log, verbose });
62
- // Format and output using output_helpers
63
- await format_and_output(plan, create_plan_formatters({ verbose }), { format, outfile, log });
64
- // Exit with error if there are blocking issues
65
- if (plan.errors.length > 0) {
66
- throw new Error('Publishing plan found errors that would block publishing');
67
- }
43
+ await run_gitops_plan(args, log);
44
+ }
45
+ };
46
+ const default_gitops_plan_deps = {
47
+ load_repos: get_gitops_ready,
48
+ changeset_ops: default_changeset_operations
49
+ };
50
+ /**
51
+ * Runs `gro gitops_plan`: loads the repos as they sit, logs the readiness
52
+ * block, generates the plan, and outputs it. Under `--format json` or
53
+ * `markdown` without `--outfile`, the log goes to stderr and stdout carries
54
+ * the document alone (`route_human_output`).
55
+ *
56
+ * @throws {Error} when the plan has errors that would block publishing, after outputting it
57
+ * @nodocs
58
+ */
59
+ export const run_gitops_plan = async (args, log, deps = {}) => {
60
+ const { load_repos, changeset_ops } = { ...default_gitops_plan_deps, ...deps };
61
+ const { config, registry, format, outfile, verbose } = args;
62
+ const write_stdout = route_human_output(log, output_is_machine(format, outfile));
63
+ log.info(st('cyan', 'Generating multi-repo publishing plan...'));
64
+ // Load local repos as they sit, and say which aren't at rest
65
+ const { local_repos } = await load_repos({ config, registry, log });
66
+ log_readiness_block(local_repos, log);
67
+ log.info(` Found ${local_repos.length} local repos`);
68
+ // Generate publishing plan
69
+ const plan = await generate_publishing_plan(local_repos, { log, verbose, ops: changeset_ops });
70
+ // Format and output using output_helpers
71
+ await format_and_output(plan, create_plan_formatters({ verbose }), {
72
+ format,
73
+ outfile,
74
+ log,
75
+ write_stdout
76
+ });
77
+ // Exit with error if there are blocking issues
78
+ if (plan.errors.length > 0) {
79
+ throw new Error('Publishing plan found errors that would block publishing');
68
80
  }
69
81
  };
70
82
  const create_plan_formatters = (options = {}) => ({
@@ -76,6 +88,7 @@ const create_plan_formatters = (options = {}) => ({
76
88
  breaking_cascades: Object.fromEntries(plan.breaking_cascades),
77
89
  warnings: plan.warnings,
78
90
  info: plan.info,
91
+ no_changes: plan.no_changes,
79
92
  errors: plan.errors
80
93
  };
81
94
  return JSON.stringify(output, null, 2);
@@ -85,7 +98,7 @@ const create_plan_formatters = (options = {}) => ({
85
98
  });
86
99
  const format_plan_as_markdown = (plan) => {
87
100
  const lines = [];
88
- const { publishing_order, version_changes, dependency_updates, breaking_cascades, warnings, info, errors } = plan;
101
+ const { publishing_order, version_changes, dependency_updates, breaking_cascades, warnings, info, no_changes, errors } = plan;
89
102
  lines.push('# Publishing Plan');
90
103
  lines.push('');
91
104
  // Errors
@@ -106,28 +119,28 @@ const format_plan_as_markdown = (plan) => {
106
119
  }
107
120
  // Version changes
108
121
  if (version_changes.length > 0) {
109
- const with_changesets = version_changes.filter((vc) => vc.has_changesets && !vc.needs_bump_escalation);
110
- const with_escalation = version_changes.filter((vc) => vc.needs_bump_escalation);
111
- const with_auto_changesets = version_changes.filter((vc) => vc.will_generate_changeset);
122
+ const with_changesets = version_changes.filter((vc) => version_change_kind(vc) === 'explicit');
123
+ const with_escalation = version_changes.filter((vc) => version_change_kind(vc) === 'escalation');
124
+ const with_auto_changesets = version_changes.filter((vc) => version_change_kind(vc) === 'auto');
112
125
  if (with_changesets.length > 0) {
113
126
  lines.push('## Version Changes (from changesets)');
114
127
  lines.push('');
115
- lines.push('| Package | From | To | Bump | Major |');
116
- lines.push('|---------|------|----|------|-------|');
128
+ lines.push('| Package | From | To | Bump | Breaking |');
129
+ lines.push('|---------|------|----|------|----------|');
117
130
  for (const change of with_changesets) {
118
- const is_major = change.bump_type === 'major' ? 'đŸ’Ĩ Yes' : 'No';
119
- lines.push(`| \`${change.package_name}\` | ${change.from} | ${change.to} | ${change.bump_type} | ${is_major} |`);
131
+ const breaking = change.breaking ? 'đŸ’Ĩ Yes' : 'No';
132
+ lines.push(`| \`${change.package_name}\` | ${change.from} | ${change.to} | ${change.bump_type} | ${breaking} |`);
120
133
  }
121
134
  lines.push('');
122
135
  }
123
136
  if (with_escalation.length > 0) {
124
137
  lines.push('## Version Changes (bump escalation required)');
125
138
  lines.push('');
126
- lines.push('| Package | From | To | Changesets Bump | Required Bump | Major |');
127
- lines.push('|---------|------|-----|-----------------|---------------|-------|');
139
+ lines.push('| Package | From | To | Changesets Bump | Required Bump | Breaking |');
140
+ lines.push('|---------|------|-----|-----------------|---------------|----------|');
128
141
  for (const change of with_escalation) {
129
- const is_major = change.bump_type === 'major' ? 'đŸ’Ĩ Yes' : 'No';
130
- lines.push(`| \`${change.package_name}\` | ${change.from} | ${change.to} | ${change.existing_bump} | ${change.required_bump} | ${is_major} |`);
142
+ const breaking = change.breaking ? 'đŸ’Ĩ Yes' : 'No';
143
+ lines.push(`| \`${change.package_name}\` | ${change.from} | ${change.to} | ${change.existing_bump} | ${change.required_bump} | ${breaking} |`);
131
144
  }
132
145
  lines.push('');
133
146
  lines.push('> âŦ†ī¸ These packages have changesets, but dependencies require a larger version bump.');
@@ -136,11 +149,11 @@ const format_plan_as_markdown = (plan) => {
136
149
  if (with_auto_changesets.length > 0) {
137
150
  lines.push('## Version Changes (auto-generated for dependency updates)');
138
151
  lines.push('');
139
- lines.push('| Package | From | To | Bump | Major |');
140
- lines.push('|---------|------|-----|------|-------|');
152
+ lines.push('| Package | From | To | Bump | Breaking |');
153
+ lines.push('|---------|------|-----|------|----------|');
141
154
  for (const change of with_auto_changesets) {
142
- const is_major = change.bump_type === 'major' ? 'đŸ’Ĩ Yes' : 'No';
143
- lines.push(`| \`${change.package_name}\` | ${change.from} | ${change.to} | ${change.bump_type} | ${is_major} |`);
155
+ const breaking = change.breaking ? 'đŸ’Ĩ Yes' : 'No';
156
+ lines.push(`| \`${change.package_name}\` | ${change.from} | ${change.to} | ${change.bump_type} | ${breaking} |`);
144
157
  }
145
158
  lines.push('');
146
159
  }
@@ -201,24 +214,33 @@ const format_plan_as_markdown = (plan) => {
201
214
  }
202
215
  lines.push('');
203
216
  }
204
- // Info (packages with no changes - normal status)
217
+ // Info (normal status, not warnings)
205
218
  if (info.length > 0) {
206
- lines.push('## â„šī¸ No Changes to Publish');
219
+ lines.push('## â„šī¸ Info');
220
+ lines.push('');
221
+ for (const line of info) {
222
+ lines.push(`- ${line}`);
223
+ }
224
+ lines.push('');
225
+ }
226
+ // Packages with nothing to publish (normal status)
227
+ if (no_changes.length > 0) {
228
+ lines.push('## No Changes to Publish');
207
229
  lines.push('');
208
- lines.push('*These packages have no changesets and no dependency updates:*');
230
+ lines.push('*These packages have no changesets and nothing to publish:*');
209
231
  lines.push('');
210
- for (const pkg of info) {
232
+ for (const pkg of no_changes) {
211
233
  lines.push(`- \`${pkg}\``);
212
234
  }
213
235
  lines.push('');
214
236
  }
215
237
  // Summary
216
- const major_bump_count = version_changes.filter((vc) => vc.bump_type === 'major').length;
238
+ const breaking_count = version_changes.filter((vc) => vc.breaking).length;
217
239
  lines.push('## Summary');
218
240
  lines.push('');
219
241
  lines.push(`- **Packages to publish**: ${version_changes.length}`);
220
242
  lines.push(`- **Dependency updates**: ${dependency_updates.length}`);
221
- lines.push(`- **Major version bumps**: ${major_bump_count}`);
243
+ lines.push(`- **Breaking changes**: ${breaking_count}`);
222
244
  lines.push(`- **Warnings**: ${warnings.length}`);
223
245
  lines.push(`- **Errors**: ${errors.length}`);
224
246
  return lines;
@@ -1,13 +1,18 @@
1
1
  import type { Task } from '@fuzdev/gro';
2
+ import type { Logger } from '@fuzdev/fuz_util/log.ts';
2
3
  import { z } from 'zod';
4
+ import { type ResolveGitopsReposOptions } from './gitops_task_helpers.js';
5
+ import type { LocalRepo } from './local_repo.js';
6
+ import type { GitopsOperations, ReposOperations } from './operations.js';
3
7
  /** @nodocs */
4
8
  export declare const Args: z.ZodObject<{
5
9
  config: z.ZodDefault<z.ZodString>;
6
- dir: z.ZodOptional<z.ZodString>;
10
+ registry: z.ZodOptional<z.ZodString>;
7
11
  peer_strategy: z.ZodDefault<z.ZodEnum<{
8
12
  exact: "exact";
9
13
  caret: "caret";
10
14
  tilde: "tilde";
15
+ gte: "gte";
11
16
  }>>;
12
17
  wetrun: z.ZodDefault<z.ZodBoolean>;
13
18
  format: z.ZodDefault<z.ZodEnum<{
@@ -21,10 +26,65 @@ export declare const Args: z.ZodObject<{
21
26
  emit_json: z.ZodDefault<z.ZodBoolean>;
22
27
  outfile: z.ZodOptional<z.ZodString>;
23
28
  verbose: z.ZodDefault<z.ZodBoolean>;
24
- sync: z.ZodDefault<z.ZodBoolean>;
25
29
  preview: z.ZodDefault<z.ZodBoolean>;
26
30
  }, z.core.$strict>;
27
31
  export type Args = z.infer<typeof Args>;
28
32
  /** @nodocs */
29
33
  export declare const task: Task<Args>;
34
+ /**
35
+ * The side effects `run_gitops_publish` reaches through, injectable so the
36
+ * order of its steps is testable.
37
+ *
38
+ * @nodocs
39
+ */
40
+ export interface GitopsPublishDeps {
41
+ /** Loads the configured repos as they sit (`get_gitops_ready`). */
42
+ load_repos: (options: ResolveGitopsReposOptions) => Promise<{
43
+ local_repos: Array<LocalRepo>;
44
+ }>;
45
+ /** Runs `repos status` for the readiness gate. */
46
+ repos_ops: ReposOperations;
47
+ /** The executor's operations. */
48
+ ops: GitopsOperations;
49
+ /**
50
+ * Asks the operator to confirm the plan, on stderr, so a machine-readable
51
+ * stdout carries nothing but its document or events.
52
+ */
53
+ confirm: () => Promise<boolean>;
54
+ }
55
+ /**
56
+ * Runs `gro gitops_publish`, in order: load the repos as they sit,
57
+ * generate the plan, and — for `--wetrun` — run the readiness gate
58
+ * (`gate_publish_readiness`, read-only: `repos status --fetch`) before
59
+ * printing the plan and asking to confirm, so a refusal or a "no" changes
60
+ * nothing. Then preflight and the executor. A dry run skips the gate and
61
+ * prints the diagnostics' readiness block instead. Under `--emit_json`, or
62
+ * `--format json` or `markdown` without `--outfile`, the log goes to stderr
63
+ * and stdout carries the events or the report alone (`route_human_output`).
64
+ *
65
+ * @returns `cancelled` when the operator declines, `failed` when the run failed (its output already written), else `done`
66
+ * @throws {TaskError} when the readiness gate refuses or loading fails
67
+ * @nodocs
68
+ */
69
+ export declare const run_gitops_publish: (args: Args, log: Logger, deps?: Partial<GitopsPublishDeps>) => Promise<"done" | "cancelled" | "failed">;
70
+ /**
71
+ * Where `gro publish` and `gro deploy`, streaming live, show their stdout: on
72
+ * our stderr when our stdout carries a machine-readable stream — the
73
+ * `--emit_json` events, or a JSON or markdown report not sent to `--outfile` —
74
+ * so their output can't corrupt it, else on our stdout. The same test sends
75
+ * the task's own log and prompt to stderr.
76
+ *
77
+ * @nodocs
78
+ */
79
+ export declare const to_child_stdout: (args: Pick<Args, "emit_json" | "format" | "outfile">) => "stdout" | "stderr";
80
+ /**
81
+ * A failed package's markdown: the message's first line on the bullet, and the
82
+ * rest — the end of a command's stderr — in an indented fenced block, its fence
83
+ * longer than any backtick run inside so stderr can't close it.
84
+ *
85
+ * @param name - the package name
86
+ * @param message - the failure message
87
+ * @nodocs
88
+ */
89
+ export declare const format_failure_markdown: (name: string, message: string) => Array<string>;
30
90
  //# sourceMappingURL=gitops_publish.task.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"gitops_publish.task.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/gitops_publish.task.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAExC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAiBxB,cAAc;AACd,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;kBA+Cf,CAAC;AACH,MAAM,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC;AAExC,cAAc;AACd,eAAO,MAAM,IAAI,EAAE,IAAI,CAAC,IAAI,CAiH3B,CAAC"}
1
+ {"version":3,"file":"gitops_publish.task.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/gitops_publish.task.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,EAIN,KAAK,yBAAyB,EAC9B,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAyBzE,cAAc;AACd,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;kBAoDf,CAAC;AACH,MAAM,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC;AAExC,cAAc;AACd,eAAO,MAAM,IAAI,EAAE,IAAI,CAAC,IAAI,CAY3B,CAAC;AAEF;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IACjC,mEAAmE;IACnE,UAAU,EAAE,CAAC,OAAO,EAAE,yBAAyB,KAAK,OAAO,CAAC;QAAE,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,CAAA;KAAE,CAAC,CAAC;IAC/F,kDAAkD;IAClD,SAAS,EAAE,eAAe,CAAC;IAC3B,iCAAiC;IACjC,GAAG,EAAE,gBAAgB,CAAC;IACtB;;;OAGG;IACH,OAAO,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;CAChC;AAYD;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,kBAAkB,GAC9B,MAAM,IAAI,EACV,KAAK,MAAM,EACX,OAAM,OAAO,CAAC,iBAAiB,CAAM,KACnC,OAAO,CAAC,MAAM,GAAG,WAAW,GAAG,QAAQ,CA4HzC,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,eAAe,GAC3B,MAAM,IAAI,CAAC,IAAI,EAAE,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC,KAClD,QAAQ,GAAG,QACuE,CAAC;AAEtF;;;;;;;;GAQG;AACH,eAAO,MAAM,uBAAuB,GAAI,MAAM,MAAM,EAAE,SAAS,MAAM,KAAG,KAAK,CAAC,MAAM,CAQnF,CAAC"}