@form8ion/github-workflows-core 5.7.1 → 5.7.2
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/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/index.mjs +1 -1
- package/lib/index.mjs.map +1 -1
- package/package.json +1 -1
- package/src/jobs/remover.js +1 -1
- package/src/jobs/remover.test.js +21 -6
package/lib/index.js
CHANGED
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/steps/scaffolders.js","../src/workflow-file/existence-checker.js","../src/workflow-file/loader.js","../src/workflow-file/writer.js","../src/workflow-file/renamer.js","../src/tester.js","../src/steps/remover.js","../src/jobs/remover.js"],"sourcesContent":["export function setupNode({versionDeterminedBy}) {\n return {\n name: 'Setup node',\n uses: 'actions/setup-node@v6.1.0',\n with: {\n ...'nvmrc' === versionDeterminedBy && {'node-version-file': '.nvmrc'},\n // eslint-disable-next-line no-template-curly-in-string\n ...'matrix' === versionDeterminedBy && {'node-version': '${{ matrix.node }}'},\n cache: 'npm'\n }\n };\n}\n\nexport function executeVerification() {\n return {run: 'npm test'};\n}\n\nexport function installDependencies() {\n return [\n {run: 'npm clean-install'},\n {run: 'npm install --global corepack@latest'},\n {run: 'corepack npm audit signatures'}\n ];\n}\n\nexport function checkout() {\n return {uses: 'actions/checkout@v6.0.1'};\n}\n","import {fileExists} from '@form8ion/core';\n\nexport default function ({projectRoot, name}) {\n return fileExists(`${projectRoot}/.github/workflows/${name}.yml`);\n}\n","import {fileTypes, loadConfigFile} from '@form8ion/core';\n\nexport default function ({projectRoot, name}) {\n return loadConfigFile({path: `${projectRoot}/.github/workflows`, name, format: fileTypes.YAML});\n}\n","import {fileTypes, writeConfigFile} from '@form8ion/core';\n\nexport default function ({projectRoot, name, config}) {\n return writeConfigFile({path: `${projectRoot}/.github/workflows`, name, config, format: fileTypes.YAML});\n}\n","import {promises as fs} from 'node:fs';\n\nexport default function ({projectRoot, oldName, newName}) {\n return fs.rename(\n `${projectRoot}/.github/workflows/${oldName}.yml`,\n `${projectRoot}/.github/workflows/${newName}.yml`\n );\n}\n","import {directoryExists} from '@form8ion/core';\n\nexport default function ({projectRoot}) {\n return directoryExists(`${projectRoot}/.github/workflows`);\n}\n","export function removeActionFromSteps(steps, actionName) {\n return steps.filter(step => !step.uses?.includes(actionName));\n}\n","import {removeActionFromSteps} from '../steps/remover.js';\n\nexport function removeActionFromJobs(jobs, actionName) {\n return Object.fromEntries(\n Object.entries(jobs).map(([jobName, job]) => ([\n jobName,\n {\n ...job,\n
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/steps/scaffolders.js","../src/workflow-file/existence-checker.js","../src/workflow-file/loader.js","../src/workflow-file/writer.js","../src/workflow-file/renamer.js","../src/tester.js","../src/steps/remover.js","../src/jobs/remover.js"],"sourcesContent":["export function setupNode({versionDeterminedBy}) {\n return {\n name: 'Setup node',\n uses: 'actions/setup-node@v6.1.0',\n with: {\n ...'nvmrc' === versionDeterminedBy && {'node-version-file': '.nvmrc'},\n // eslint-disable-next-line no-template-curly-in-string\n ...'matrix' === versionDeterminedBy && {'node-version': '${{ matrix.node }}'},\n cache: 'npm'\n }\n };\n}\n\nexport function executeVerification() {\n return {run: 'npm test'};\n}\n\nexport function installDependencies() {\n return [\n {run: 'npm clean-install'},\n {run: 'npm install --global corepack@latest'},\n {run: 'corepack npm audit signatures'}\n ];\n}\n\nexport function checkout() {\n return {uses: 'actions/checkout@v6.0.1'};\n}\n","import {fileExists} from '@form8ion/core';\n\nexport default function ({projectRoot, name}) {\n return fileExists(`${projectRoot}/.github/workflows/${name}.yml`);\n}\n","import {fileTypes, loadConfigFile} from '@form8ion/core';\n\nexport default function ({projectRoot, name}) {\n return loadConfigFile({path: `${projectRoot}/.github/workflows`, name, format: fileTypes.YAML});\n}\n","import {fileTypes, writeConfigFile} from '@form8ion/core';\n\nexport default function ({projectRoot, name, config}) {\n return writeConfigFile({path: `${projectRoot}/.github/workflows`, name, config, format: fileTypes.YAML});\n}\n","import {promises as fs} from 'node:fs';\n\nexport default function ({projectRoot, oldName, newName}) {\n return fs.rename(\n `${projectRoot}/.github/workflows/${oldName}.yml`,\n `${projectRoot}/.github/workflows/${newName}.yml`\n );\n}\n","import {directoryExists} from '@form8ion/core';\n\nexport default function ({projectRoot}) {\n return directoryExists(`${projectRoot}/.github/workflows`);\n}\n","export function removeActionFromSteps(steps, actionName) {\n return steps.filter(step => !step.uses?.includes(actionName));\n}\n","import {removeActionFromSteps} from '../steps/remover.js';\n\nexport function removeActionFromJobs(jobs, actionName) {\n return Object.fromEntries(\n Object.entries(jobs).map(([jobName, job]) => ([\n jobName,\n {\n ...job,\n ...job.steps && {steps: removeActionFromSteps(job.steps, actionName)}\n }\n ]))\n );\n}\n"],"names":["fileExists","loadConfigFile","fileTypes","writeConfigFile","fs","directoryExists"],"mappings":";;;;;AAAO,SAAS,SAAS,CAAC,CAAC,mBAAmB,CAAC,EAAE;AACjD,EAAE,OAAO;AACT,IAAI,IAAI,EAAE,YAAY;AACtB,IAAI,IAAI,EAAE,2BAA2B;AACrC,IAAI,IAAI,EAAE;AACV,MAAM,GAAG,OAAO,KAAK,mBAAmB,IAAI,CAAC,mBAAmB,EAAE,QAAQ,CAAC;AAC3E;AACA,MAAM,GAAG,QAAQ,KAAK,mBAAmB,IAAI,CAAC,cAAc,EAAE,oBAAoB,CAAC;AACnF,MAAM,KAAK,EAAE;AACb;AACA,GAAG;AACH;;AAEO,SAAS,mBAAmB,GAAG;AACtC,EAAE,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC;AAC1B;;AAEO,SAAS,mBAAmB,GAAG;AACtC,EAAE,OAAO;AACT,IAAI,CAAC,GAAG,EAAE,mBAAmB,CAAC;AAC9B,IAAI,CAAC,GAAG,EAAE,sCAAsC,CAAC;AACjD,IAAI,CAAC,GAAG,EAAE,+BAA+B;AACzC,GAAG;AACH;;AAEO,SAAS,QAAQ,GAAG;AAC3B,EAAE,OAAO,CAAC,IAAI,EAAE,yBAAyB,CAAC;AAC1C;;ACzBe,yBAAQ,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC,EAAE;AAC9C,EAAE,OAAOA,eAAU,CAAC,CAAC,EAAE,WAAW,CAAC,mBAAmB,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;AACnE;;ACFe,eAAQ,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC,EAAE;AAC9C,EAAE,OAAOC,mBAAc,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,WAAW,CAAC,kBAAkB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAEC,cAAS,CAAC,IAAI,CAAC,CAAC;AACjG;;ACFe,eAAQ,EAAE,CAAC,WAAW,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE;AACtD,EAAE,OAAOC,oBAAe,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,WAAW,CAAC,kBAAkB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAED,cAAS,CAAC,IAAI,CAAC,CAAC;AAC1G;;ACFe,gBAAQ,EAAE,CAAC,WAAW,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE;AAC1D,EAAE,OAAOE,gBAAE,CAAC,MAAM;AAClB,IAAI,CAAC,EAAE,WAAW,CAAC,mBAAmB,EAAE,OAAO,CAAC,IAAI,CAAC;AACrD,IAAI,CAAC,EAAE,WAAW,CAAC,mBAAmB,EAAE,OAAO,CAAC,IAAI;AACpD,GAAG;AACH;;ACLe,eAAQ,EAAE,CAAC,WAAW,CAAC,EAAE;AACxC,EAAE,OAAOC,oBAAe,CAAC,CAAC,EAAE,WAAW,CAAC,kBAAkB,CAAC,CAAC;AAC5D;;ACJO,SAAS,qBAAqB,CAAC,KAAK,EAAE,UAAU,EAAE;AACzD,EAAE,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;AAC/D;;ACAO,SAAS,oBAAoB,CAAC,IAAI,EAAE,UAAU,EAAE;AACvD,EAAE,OAAO,MAAM,CAAC,WAAW;AAC3B,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM;AAClD,MAAM,OAAO;AACb,MAAM;AACN,QAAQ,GAAG,GAAG;AACd,QAAQ,GAAG,GAAG,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE,qBAAqB,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,CAAC;AAC5E;AACA,KAAK,CAAC;AACN,GAAG;AACH;;;;;;;;;;;;;"}
|
package/lib/index.mjs
CHANGED
package/lib/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../src/steps/scaffolders.js","../src/workflow-file/existence-checker.js","../src/workflow-file/loader.js","../src/workflow-file/writer.js","../src/workflow-file/renamer.js","../src/tester.js","../src/steps/remover.js","../src/jobs/remover.js"],"sourcesContent":["export function setupNode({versionDeterminedBy}) {\n return {\n name: 'Setup node',\n uses: 'actions/setup-node@v6.1.0',\n with: {\n ...'nvmrc' === versionDeterminedBy && {'node-version-file': '.nvmrc'},\n // eslint-disable-next-line no-template-curly-in-string\n ...'matrix' === versionDeterminedBy && {'node-version': '${{ matrix.node }}'},\n cache: 'npm'\n }\n };\n}\n\nexport function executeVerification() {\n return {run: 'npm test'};\n}\n\nexport function installDependencies() {\n return [\n {run: 'npm clean-install'},\n {run: 'npm install --global corepack@latest'},\n {run: 'corepack npm audit signatures'}\n ];\n}\n\nexport function checkout() {\n return {uses: 'actions/checkout@v6.0.1'};\n}\n","import {fileExists} from '@form8ion/core';\n\nexport default function ({projectRoot, name}) {\n return fileExists(`${projectRoot}/.github/workflows/${name}.yml`);\n}\n","import {fileTypes, loadConfigFile} from '@form8ion/core';\n\nexport default function ({projectRoot, name}) {\n return loadConfigFile({path: `${projectRoot}/.github/workflows`, name, format: fileTypes.YAML});\n}\n","import {fileTypes, writeConfigFile} from '@form8ion/core';\n\nexport default function ({projectRoot, name, config}) {\n return writeConfigFile({path: `${projectRoot}/.github/workflows`, name, config, format: fileTypes.YAML});\n}\n","import {promises as fs} from 'node:fs';\n\nexport default function ({projectRoot, oldName, newName}) {\n return fs.rename(\n `${projectRoot}/.github/workflows/${oldName}.yml`,\n `${projectRoot}/.github/workflows/${newName}.yml`\n );\n}\n","import {directoryExists} from '@form8ion/core';\n\nexport default function ({projectRoot}) {\n return directoryExists(`${projectRoot}/.github/workflows`);\n}\n","export function removeActionFromSteps(steps, actionName) {\n return steps.filter(step => !step.uses?.includes(actionName));\n}\n","import {removeActionFromSteps} from '../steps/remover.js';\n\nexport function removeActionFromJobs(jobs, actionName) {\n return Object.fromEntries(\n Object.entries(jobs).map(([jobName, job]) => ([\n jobName,\n {\n ...job,\n
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../src/steps/scaffolders.js","../src/workflow-file/existence-checker.js","../src/workflow-file/loader.js","../src/workflow-file/writer.js","../src/workflow-file/renamer.js","../src/tester.js","../src/steps/remover.js","../src/jobs/remover.js"],"sourcesContent":["export function setupNode({versionDeterminedBy}) {\n return {\n name: 'Setup node',\n uses: 'actions/setup-node@v6.1.0',\n with: {\n ...'nvmrc' === versionDeterminedBy && {'node-version-file': '.nvmrc'},\n // eslint-disable-next-line no-template-curly-in-string\n ...'matrix' === versionDeterminedBy && {'node-version': '${{ matrix.node }}'},\n cache: 'npm'\n }\n };\n}\n\nexport function executeVerification() {\n return {run: 'npm test'};\n}\n\nexport function installDependencies() {\n return [\n {run: 'npm clean-install'},\n {run: 'npm install --global corepack@latest'},\n {run: 'corepack npm audit signatures'}\n ];\n}\n\nexport function checkout() {\n return {uses: 'actions/checkout@v6.0.1'};\n}\n","import {fileExists} from '@form8ion/core';\n\nexport default function ({projectRoot, name}) {\n return fileExists(`${projectRoot}/.github/workflows/${name}.yml`);\n}\n","import {fileTypes, loadConfigFile} from '@form8ion/core';\n\nexport default function ({projectRoot, name}) {\n return loadConfigFile({path: `${projectRoot}/.github/workflows`, name, format: fileTypes.YAML});\n}\n","import {fileTypes, writeConfigFile} from '@form8ion/core';\n\nexport default function ({projectRoot, name, config}) {\n return writeConfigFile({path: `${projectRoot}/.github/workflows`, name, config, format: fileTypes.YAML});\n}\n","import {promises as fs} from 'node:fs';\n\nexport default function ({projectRoot, oldName, newName}) {\n return fs.rename(\n `${projectRoot}/.github/workflows/${oldName}.yml`,\n `${projectRoot}/.github/workflows/${newName}.yml`\n );\n}\n","import {directoryExists} from '@form8ion/core';\n\nexport default function ({projectRoot}) {\n return directoryExists(`${projectRoot}/.github/workflows`);\n}\n","export function removeActionFromSteps(steps, actionName) {\n return steps.filter(step => !step.uses?.includes(actionName));\n}\n","import {removeActionFromSteps} from '../steps/remover.js';\n\nexport function removeActionFromJobs(jobs, actionName) {\n return Object.fromEntries(\n Object.entries(jobs).map(([jobName, job]) => ([\n jobName,\n {\n ...job,\n ...job.steps && {steps: removeActionFromSteps(job.steps, actionName)}\n }\n ]))\n );\n}\n"],"names":["fs"],"mappings":";;;AAAO,SAAS,SAAS,CAAC,CAAC,mBAAmB,CAAC,EAAE;AACjD,EAAE,OAAO;AACT,IAAI,IAAI,EAAE,YAAY;AACtB,IAAI,IAAI,EAAE,2BAA2B;AACrC,IAAI,IAAI,EAAE;AACV,MAAM,GAAG,OAAO,KAAK,mBAAmB,IAAI,CAAC,mBAAmB,EAAE,QAAQ,CAAC;AAC3E;AACA,MAAM,GAAG,QAAQ,KAAK,mBAAmB,IAAI,CAAC,cAAc,EAAE,oBAAoB,CAAC;AACnF,MAAM,KAAK,EAAE;AACb;AACA,GAAG;AACH;;AAEO,SAAS,mBAAmB,GAAG;AACtC,EAAE,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC;AAC1B;;AAEO,SAAS,mBAAmB,GAAG;AACtC,EAAE,OAAO;AACT,IAAI,CAAC,GAAG,EAAE,mBAAmB,CAAC;AAC9B,IAAI,CAAC,GAAG,EAAE,sCAAsC,CAAC;AACjD,IAAI,CAAC,GAAG,EAAE,+BAA+B;AACzC,GAAG;AACH;;AAEO,SAAS,QAAQ,GAAG;AAC3B,EAAE,OAAO,CAAC,IAAI,EAAE,yBAAyB,CAAC;AAC1C;;ACzBe,yBAAQ,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC,EAAE;AAC9C,EAAE,OAAO,UAAU,CAAC,CAAC,EAAE,WAAW,CAAC,mBAAmB,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;AACnE;;ACFe,eAAQ,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC,EAAE;AAC9C,EAAE,OAAO,cAAc,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,WAAW,CAAC,kBAAkB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;AACjG;;ACFe,eAAQ,EAAE,CAAC,WAAW,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE;AACtD,EAAE,OAAO,eAAe,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,WAAW,CAAC,kBAAkB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;AAC1G;;ACFe,gBAAQ,EAAE,CAAC,WAAW,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE;AAC1D,EAAE,OAAOA,QAAE,CAAC,MAAM;AAClB,IAAI,CAAC,EAAE,WAAW,CAAC,mBAAmB,EAAE,OAAO,CAAC,IAAI,CAAC;AACrD,IAAI,CAAC,EAAE,WAAW,CAAC,mBAAmB,EAAE,OAAO,CAAC,IAAI;AACpD,GAAG;AACH;;ACLe,eAAQ,EAAE,CAAC,WAAW,CAAC,EAAE;AACxC,EAAE,OAAO,eAAe,CAAC,CAAC,EAAE,WAAW,CAAC,kBAAkB,CAAC,CAAC;AAC5D;;ACJO,SAAS,qBAAqB,CAAC,KAAK,EAAE,UAAU,EAAE;AACzD,EAAE,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;AAC/D;;ACAO,SAAS,oBAAoB,CAAC,IAAI,EAAE,UAAU,EAAE;AACvD,EAAE,OAAO,MAAM,CAAC,WAAW;AAC3B,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM;AAClD,MAAM,OAAO;AACb,MAAM;AACN,QAAQ,GAAG,GAAG;AACd,QAAQ,GAAG,GAAG,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE,qBAAqB,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,CAAC;AAC5E;AACA,KAAK,CAAC;AACN,GAAG;AACH;;;;"}
|
package/package.json
CHANGED
package/src/jobs/remover.js
CHANGED
package/src/jobs/remover.test.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {describe, it, expect, vi} from 'vitest';
|
|
1
|
+
import {describe, it, expect, vi, beforeEach} from 'vitest';
|
|
2
2
|
import {when} from 'vitest-when';
|
|
3
3
|
import any from '@travi/any';
|
|
4
4
|
import zip from 'lodash.zip';
|
|
@@ -9,18 +9,33 @@ import {removeActionFromJobs} from './remover.js';
|
|
|
9
9
|
vi.mock('../steps/remover.js');
|
|
10
10
|
|
|
11
11
|
describe('jobs-level remover', () => {
|
|
12
|
+
const actionName = any.word();
|
|
12
13
|
const anySteps = () => any.listOf(any.simpleObject);
|
|
14
|
+
const jobNames = any.listOf(any.word);
|
|
15
|
+
const jobs = jobNames.map(() => ({...any.simpleObject(), steps: anySteps()}));
|
|
16
|
+
const updatedJobs = jobs.map(job => ({...job, steps: anySteps()}));
|
|
13
17
|
|
|
14
|
-
|
|
15
|
-
const actionName = any.word();
|
|
16
|
-
const jobNames = any.listOf(any.word);
|
|
17
|
-
const jobs = jobNames.map(() => ({...any.simpleObject(), steps: anySteps()}));
|
|
18
|
-
const updatedJobs = jobs.map(job => ({...job, steps: anySteps()}));
|
|
18
|
+
beforeEach(() => {
|
|
19
19
|
zip(jobs, updatedJobs).forEach(([job, updatedJob]) => {
|
|
20
20
|
when(removeActionFromSteps).calledWith(job.steps, actionName).thenReturn(updatedJob.steps);
|
|
21
21
|
});
|
|
22
|
+
when(removeActionFromSteps).calledWith(undefined, actionName).thenThrow(new Error());
|
|
23
|
+
});
|
|
22
24
|
|
|
25
|
+
it('should remove an action by name from an indexed list of jobs', async () => {
|
|
23
26
|
expect(removeActionFromJobs(Object.fromEntries(zip(jobNames, jobs)), actionName))
|
|
24
27
|
.toEqual(Object.fromEntries(zip(jobNames, updatedJobs)));
|
|
25
28
|
});
|
|
29
|
+
|
|
30
|
+
it('should not process `steps` for jobs defined as reusable workflows', async () => {
|
|
31
|
+
const reusableWorkflowJobName = 'reusable-workflow';
|
|
32
|
+
const reusableWorkflowJobDefinition = any.simpleObject();
|
|
33
|
+
|
|
34
|
+
expect(removeActionFromJobs(
|
|
35
|
+
Object.fromEntries(zip([...jobNames, reusableWorkflowJobName], [...jobs, reusableWorkflowJobDefinition])),
|
|
36
|
+
actionName
|
|
37
|
+
)).toEqual(
|
|
38
|
+
Object.fromEntries(zip([...jobNames, reusableWorkflowJobName], [...updatedJobs, reusableWorkflowJobDefinition]))
|
|
39
|
+
);
|
|
40
|
+
});
|
|
26
41
|
});
|