sf-decomposer 7.2.0 → 7.3.1

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/CHANGELOG.md CHANGED
@@ -5,6 +5,21 @@
5
5
 
6
6
  All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
7
7
 
8
+ ## [7.3.1](https://github.com/mcarvin8/sf-decomposer/compare/v7.3.0...v7.3.1) (2026-08-25)
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * **deps:** bump the dependencies group across 1 directory with 3 updates ([#570](https://github.com/mcarvin8/sf-decomposer/issues/570)) ([eb03301](https://github.com/mcarvin8/sf-decomposer/commit/eb033016f168605668f33fe14ce9904e8b2f11fb))
14
+ * **package:** exclude lib/action from npm package ([af56788](https://github.com/mcarvin8/sf-decomposer/commit/af567883d2763e7224b1f7b13ef35add1658fecf))
15
+
16
+ ## [7.3.0](https://github.com/mcarvin8/sf-decomposer/compare/v7.2.0...v7.3.0) (2026-08-24)
17
+
18
+
19
+ ### Features
20
+
21
+ * **action:** add a GitHub Action wrapping decompose/recompose/verify ([#572](https://github.com/mcarvin8/sf-decomposer/issues/572)) ([b32391d](https://github.com/mcarvin8/sf-decomposer/commit/b32391dff7dd2d77868b4a67cc70f7563dd1e55b))
22
+
8
23
  ## [7.2.0](https://github.com/mcarvin8/sf-decomposer/compare/v7.1.1...v7.2.0) (2026-08-24)
9
24
 
10
25
 
package/README.md CHANGED
@@ -2,13 +2,17 @@
2
2
 
3
3
  [![NPM](https://img.shields.io/npm/v/sf-decomposer.svg?label=sf-decomposer)](https://www.npmjs.com/package/sf-decomposer)
4
4
  [![Downloads/week](https://img.shields.io/npm/dw/sf-decomposer.svg)](https://npmjs.com/package/sf-decomposer)
5
+ [![GitHub Marketplace](https://img.shields.io/badge/marketplace-sf--decomposer-blue?logo=github)](https://github.com/marketplace/actions/sf-decomposer)
5
6
  [![License](https://img.shields.io/badge/License-MIT-yellow.svg)](https://raw.githubusercontent.com/mcarvin8/sf-decomposer/main/LICENSE.md)
6
7
  [![Maintainability](https://qlty.sh/badges/8492c1c6-0f93-4d37-bfad-32fd3b788a2d/maintainability.svg)](https://qlty.sh/gh/mcarvin8/projects/sf-decomposer)
7
8
  [![codecov](https://codecov.io/gh/mcarvin8/sf-decomposer/graph/badge.svg?token=YFU52L4XM5)](https://codecov.io/gh/mcarvin8/sf-decomposer)
8
9
  [![Mutation testing badge](https://img.shields.io/endpoint?style=flat&url=https%3A%2F%2Fbadge-api.stryker-mutator.io%2Fgithub.com%2Fmcarvin8%2Fsf-decomposer%2Fmain)](https://dashboard.stryker-mutator.io/reports/github.com/mcarvin8/sf-decomposer/main)
9
10
  [![Performance](https://img.shields.io/badge/Performance-Dashboard-58a6ff)](https://mcarvin8.github.io/sf-decomposer/dev/bench/runtime/)
10
11
 
11
- A Salesforce CLI plugin that **decomposes** large metadata XML files into smaller, version-control–friendly files (XML, JSON, YAML, JSON5), and **recomposes** them back into deployment-ready metadata.
12
+ **Decomposes** large Salesforce metadata XML files into smaller, version-control–friendly files (XML, JSON, YAML, JSON5), and **recomposes** them back into deployment-ready metadata — as a Salesforce CLI plugin, or as a GitHub Action that needs neither the CLI nor a plugin install.
13
+
14
+ - Using the Salesforce CLI? Start at [Setup](#setup).
15
+ - Running this in CI without the CLI? Skip straight to [GitHub Action](#github-action).
12
16
 
13
17
  <!-- TABLE OF CONTENTS -->
14
18
  <details>
@@ -21,6 +25,7 @@ A Salesforce CLI plugin that **decomposes** large metadata XML files into smalle
21
25
  - [4. Configure Hooks](#4-configure-hooks-recommended)
22
26
  - [Daily Workflow](#daily-workflow)
23
27
  - [Commands](#commands)
28
+ - [GitHub Action](#github-action)
24
29
  - [Reference](#reference)
25
30
  - [Decompose Strategies](#decompose-strategies)
26
31
  - [Supported Metadata](#supported-metadata)
@@ -215,7 +220,7 @@ EXAMPLES
215
220
  `sf decomposer decompose -x "manifest/package.xml" -m "flow"`
216
221
  ```
217
222
 
218
- _See code: [src/commands/decomposer/decompose.ts](https://github.com/mcarvin8/sf-decomposer/blob/v7.2.0/src/commands/decomposer/decompose.ts)_
223
+ _See code: [src/commands/decomposer/decompose.ts](https://github.com/mcarvin8/sf-decomposer/blob/v7.3.1/src/commands/decomposer/decompose.ts)_
219
224
 
220
225
  ## `sf decomposer recompose`
221
226
 
@@ -261,7 +266,7 @@ EXAMPLES
261
266
  `sf decomposer recompose -x "manifest/package.xml" -m "flow"`
262
267
  ```
263
268
 
264
- _See code: [src/commands/decomposer/recompose.ts](https://github.com/mcarvin8/sf-decomposer/blob/v7.2.0/src/commands/decomposer/recompose.ts)_
269
+ _See code: [src/commands/decomposer/recompose.ts](https://github.com/mcarvin8/sf-decomposer/blob/v7.3.1/src/commands/decomposer/recompose.ts)_
265
270
 
266
271
  ## `sf decomposer verify`
267
272
 
@@ -325,11 +330,59 @@ EXAMPLES
325
330
  `sf decomposer verify -x "manifest/package.xml" --config`
326
331
  ```
327
332
 
328
- _See code: [src/commands/decomposer/verify.ts](https://github.com/mcarvin8/sf-decomposer/blob/v7.2.0/src/commands/decomposer/verify.ts)_
333
+ _See code: [src/commands/decomposer/verify.ts](https://github.com/mcarvin8/sf-decomposer/blob/v7.3.1/src/commands/decomposer/verify.ts)_
329
334
  <!-- commandsstop -->
330
335
 
331
336
  ---
332
337
 
338
+ ## GitHub Action
339
+
340
+ `decompose`, `recompose`, and `verify` are also available as a GitHub Action — a container action, so it needs **no Salesforce CLI and no `sf-decomposer` plugin install**. One action, dispatched by a `mode` input, mirrors the three CLI commands one-for-one: same flags (as inputs), same `.sfdecomposer.config.json` support via `config: true`.
341
+
342
+ ```yaml
343
+ - uses: actions/checkout@v7
344
+
345
+ - name: Decompose retrieved metadata
346
+ uses: mcarvin8/sf-decomposer@v7
347
+ with:
348
+ mode: decompose
349
+ metadata-type: |
350
+ permissionset
351
+ flow
352
+ postpurge: 'true'
353
+
354
+ - name: Verify the round trip before merging
355
+ uses: mcarvin8/sf-decomposer@v7
356
+ with:
357
+ mode: verify
358
+ config: 'true'
359
+ ```
360
+
361
+ Or point it at an existing `.sfdecomposer.config.json` for either step instead of listing flags: `with: { mode: decompose, config: 'true' }`.
362
+
363
+ **Inputs** (all optional except `mode`; multi-value inputs are newline-separated, matching `actions/checkout`'s own multiline convention):
364
+
365
+ | Input | Used by | Description |
366
+ |--------------------------------|----------------------|-----------------------------------------------------------------------------------|
367
+ | `mode` | all | `decompose`, `recompose`, or `verify`. |
368
+ | `metadata-type` | all | Metadata suffix(es) to process, one per line. |
369
+ | `manifest` | all | Path to a package.xml manifest to scope the run to. |
370
+ | `ignore-package-directory` | all | Package director(y/ies) to skip, one per line. |
371
+ | `config` | all | Read settings from `.sfdecomposer.config.json`, same as the CLI's `--config`. |
372
+ | `format` | decompose, verify | `xml`, `json`, `json5`, or `yaml`. Default `xml`. |
373
+ | `strategy` | decompose, verify | `unique-id` or `grouped-by-tag`. Default `unique-id`. |
374
+ | `decompose-nested-permissions` | decompose, verify | With `grouped-by-tag`, further decompose permission set object/field permissions. |
375
+ | `prepurge` | decompose | Remove existing decomposed files before decomposing. |
376
+ | `postpurge` | decompose, recompose | After decompose, remove originals; after recompose, remove decomposed files. |
377
+ | `update-forceignore` | decompose | Append decomposed file patterns to `.forceignore`. |
378
+ | `update-gitattributes` | decompose | Mark decomposed files as generated in `.gitattributes`. |
379
+
380
+ **Outputs:** `metadata` (newline-separated list of processed suffixes), `types-count`; `verify` additionally sets `drift-count` and `reordered-count`, and fails the step when `drift-count` is greater than 0.
381
+
382
+ See [`action.yml`](action.yml) for the full input/output reference.
383
+
384
+ ---
385
+
333
386
  ## Reference
334
387
 
335
388
  ### Decompose Strategies
@@ -364,5 +364,5 @@
364
364
  ]
365
365
  }
366
366
  },
367
- "version": "7.2.0"
367
+ "version": "7.3.1"
368
368
  }
package/package.json CHANGED
@@ -1,15 +1,16 @@
1
1
  {
2
2
  "name": "sf-decomposer",
3
3
  "description": "Decompose Salesforce metadata into granular, VCS-friendly files; recompose for deployment.",
4
- "version": "7.2.0",
4
+ "version": "7.3.1",
5
5
  "dependencies": {
6
- "@oclif/core": "4.13.5",
7
- "@salesforce/core": "9.1.2",
8
- "@salesforce/sf-plugins-core": "13.0.0",
6
+ "@oclif/core": "4.14.0",
7
+ "@salesforce/core": "9.1.5",
8
+ "@salesforce/sf-plugins-core": "13.0.3",
9
9
  "config-disassembler": "3.3.0"
10
10
  },
11
11
  "devDependencies": {
12
- "@biomejs/biome": "2.5.9",
12
+ "@actions/core": "3.0.1",
13
+ "@biomejs/biome": "2.5.10",
13
14
  "@commitlint/cli": "21.2.2",
14
15
  "@commitlint/config-conventional": "21.2.2",
15
16
  "@salesforce/cli-plugins-testkit": "5.3.66",
@@ -17,7 +18,7 @@
17
18
  "@stryker-mutator/core": "10.0.0",
18
19
  "@stryker-mutator/vitest-runner": "10.0.0",
19
20
  "@types/node": "26.2.0",
20
- "@vitest/coverage-v8": "4.1.10",
21
+ "@vitest/coverage-v8": "4.1.11",
21
22
  "husky": "9.1.7",
22
23
  "knip": "6.32.2",
23
24
  "lint-staged": "17.3.0",
@@ -26,7 +27,7 @@
26
27
  "shx": "0.4.0",
27
28
  "tsx": "4.23.12",
28
29
  "typescript": "7.0.2",
29
- "vitest": "4.1.10",
30
+ "vitest": "4.1.11",
30
31
  "wireit": "0.14.13"
31
32
  },
32
33
  "engines": {
@@ -34,6 +35,7 @@
34
35
  },
35
36
  "files": [
36
37
  "/lib",
38
+ "!/lib/action/**",
37
39
  "/messages",
38
40
  "/oclif.manifest.json",
39
41
  "/oclif.lock",