@hanseltime/template-repo-sync 2.2.1 → 2.4.0-alpha.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.
- package/CHANGELOG.md +43 -45
- package/dist/cjs/checkout-drivers/git-checkout.js +37 -0
- package/dist/cjs/checkout-drivers/git-checkout.spec.js +60 -0
- package/dist/cjs/checkout-drivers/index.js +21 -0
- package/dist/cjs/checkout-drivers/types.js +11 -0
- package/dist/cjs/clone-drivers/git-clone.js +25 -0
- package/dist/cjs/clone-drivers/index.js +21 -0
- package/dist/cjs/clone-drivers/types.js +8 -0
- package/dist/cjs/diff-drivers/git-diff.js +30 -0
- package/dist/cjs/diff-drivers/git-diff.spec.js +138 -0
- package/dist/cjs/diff-drivers/index.js +21 -0
- package/dist/cjs/diff-drivers/types.js +6 -0
- package/dist/cjs/formatting/index.js +21 -0
- package/dist/cjs/formatting/infer-json-indent.js +26 -0
- package/dist/cjs/formatting/infer-json-indent.spec.js +50 -0
- package/dist/cjs/formatting/sync-results-to-md.js +62 -0
- package/dist/cjs/formatting/sync-results-to-md.spec.js +45 -0
- package/dist/cjs/index.js +22 -0
- package/dist/cjs/load-plugin.js +44 -0
- package/dist/cjs/match.js +51 -0
- package/dist/cjs/match.spec.js +75 -0
- package/dist/cjs/merge-file.js +91 -0
- package/dist/cjs/merge-file.spec.js +508 -0
- package/dist/cjs/plugins/index.js +20 -0
- package/dist/cjs/plugins/json-merge.js +228 -0
- package/dist/cjs/plugins/json-merge.spec.js +514 -0
- package/dist/cjs/ref-drivers/git-current-ref.js +18 -0
- package/dist/cjs/ref-drivers/git-current-ref.spec.js +15 -0
- package/dist/cjs/ref-drivers/index.js +20 -0
- package/dist/cjs/ref-drivers/types.js +11 -0
- package/dist/cjs/template-sync.js +236 -0
- package/dist/cjs/template-sync.spec.js +521 -0
- package/dist/cjs/test-utils/index.js +26 -0
- package/dist/cjs/types.js +12 -0
- package/dist/esm/checkout-drivers/git-checkout.mjs +27 -0
- package/dist/esm/checkout-drivers/git-checkout.spec.mjs +56 -0
- package/dist/esm/checkout-drivers/index.mjs +4 -0
- package/dist/esm/checkout-drivers/types.mjs +8 -0
- package/dist/esm/clone-drivers/git-clone.mjs +15 -0
- package/dist/esm/clone-drivers/index.mjs +4 -0
- package/dist/esm/clone-drivers/types.mjs +8 -0
- package/dist/esm/diff-drivers/git-diff.mjs +26 -0
- package/dist/esm/diff-drivers/git-diff.spec.mjs +93 -0
- package/dist/esm/diff-drivers/index.mjs +4 -0
- package/dist/esm/diff-drivers/types.mjs +6 -0
- package/dist/esm/formatting/index.mjs +4 -0
- package/dist/esm/formatting/infer-json-indent.mjs +16 -0
- package/dist/esm/formatting/infer-json-indent.spec.mjs +46 -0
- package/dist/esm/formatting/sync-results-to-md.mjs +52 -0
- package/dist/esm/formatting/sync-results-to-md.spec.mjs +41 -0
- package/dist/esm/index.mjs +5 -0
- package/dist/esm/load-plugin.mjs +40 -0
- package/dist/esm/match.mjs +40 -0
- package/dist/esm/match.spec.mjs +71 -0
- package/dist/esm/merge-file.mjs +88 -0
- package/dist/esm/merge-file.spec.mjs +504 -0
- package/dist/esm/plugins/index.mjs +10 -0
- package/dist/esm/plugins/json-merge.mjs +164 -0
- package/dist/esm/plugins/json-merge.spec.mjs +469 -0
- package/dist/esm/ref-drivers/git-current-ref.mjs +8 -0
- package/dist/esm/ref-drivers/git-current-ref.spec.mjs +11 -0
- package/dist/esm/ref-drivers/index.mjs +3 -0
- package/dist/esm/ref-drivers/types.mjs +8 -0
- package/dist/esm/template-sync.mjs +174 -0
- package/dist/esm/template-sync.spec.mjs +517 -0
- package/dist/esm/test-utils/index.mjs +10 -0
- package/dist/esm/types.mjs +9 -0
- package/{lib/cjs → dist/types}/checkout-drivers/git-checkout.d.ts +1 -0
- package/dist/types/checkout-drivers/git-checkout.d.ts.map +1 -0
- package/dist/types/checkout-drivers/git-checkout.spec.d.ts +2 -0
- package/dist/types/checkout-drivers/git-checkout.spec.d.ts.map +1 -0
- package/{lib/cjs → dist/types}/checkout-drivers/index.d.ts +1 -0
- package/dist/types/checkout-drivers/index.d.ts.map +1 -0
- package/{lib/cjs → dist/types}/checkout-drivers/types.d.ts +1 -0
- package/dist/types/checkout-drivers/types.d.ts.map +1 -0
- package/{lib/cjs → dist/types}/clone-drivers/git-clone.d.ts +2 -1
- package/dist/types/clone-drivers/git-clone.d.ts.map +1 -0
- package/{lib/cjs → dist/types}/clone-drivers/index.d.ts +2 -1
- package/dist/types/clone-drivers/index.d.ts.map +1 -0
- package/{lib/cjs → dist/types}/clone-drivers/types.d.ts +1 -0
- package/dist/types/clone-drivers/types.d.ts.map +1 -0
- package/{lib/cjs → dist/types}/diff-drivers/git-diff.d.ts +1 -0
- package/dist/types/diff-drivers/git-diff.d.ts.map +1 -0
- package/dist/types/diff-drivers/git-diff.spec.d.ts +2 -0
- package/dist/types/diff-drivers/git-diff.spec.d.ts.map +1 -0
- package/{lib/cjs → dist/types}/diff-drivers/index.d.ts +2 -1
- package/dist/types/diff-drivers/index.d.ts.map +1 -0
- package/{lib/cjs → dist/types}/diff-drivers/types.d.ts +1 -0
- package/dist/types/diff-drivers/types.d.ts.map +1 -0
- package/{lib/cjs → dist/types}/formatting/index.d.ts +2 -1
- package/dist/types/formatting/index.d.ts.map +1 -0
- package/{lib/cjs → dist/types}/formatting/infer-json-indent.d.ts +1 -0
- package/dist/types/formatting/infer-json-indent.d.ts.map +1 -0
- package/dist/types/formatting/infer-json-indent.spec.d.ts +2 -0
- package/dist/types/formatting/infer-json-indent.spec.d.ts.map +1 -0
- package/dist/types/formatting/sync-results-to-md.d.ts +3 -0
- package/dist/types/formatting/sync-results-to-md.d.ts.map +1 -0
- package/dist/types/formatting/sync-results-to-md.spec.d.ts +2 -0
- package/dist/types/formatting/sync-results-to-md.spec.d.ts.map +1 -0
- package/{lib/cjs → dist/types}/index.d.ts +3 -2
- package/dist/types/index.d.ts.map +1 -0
- package/{lib/cjs → dist/types}/load-plugin.d.ts +2 -1
- package/dist/types/load-plugin.d.ts.map +1 -0
- package/{lib/cjs → dist/types}/match.d.ts +1 -0
- package/dist/types/match.d.ts.map +1 -0
- package/dist/types/match.spec.d.ts +2 -0
- package/dist/types/match.spec.d.ts.map +1 -0
- package/{lib/cjs → dist/types}/merge-file.d.ts +3 -2
- package/dist/types/merge-file.d.ts.map +1 -0
- package/dist/types/merge-file.spec.d.ts +2 -0
- package/dist/types/merge-file.spec.d.ts.map +1 -0
- package/{lib/cjs → dist/types}/plugins/index.d.ts +2 -1
- package/dist/types/plugins/index.d.ts.map +1 -0
- package/{lib/cjs → dist/types}/plugins/json-merge.d.ts +2 -1
- package/dist/types/plugins/json-merge.d.ts.map +1 -0
- package/dist/types/plugins/json-merge.spec.d.ts +2 -0
- package/dist/types/plugins/json-merge.spec.d.ts.map +1 -0
- package/{lib/cjs → dist/types}/ref-drivers/git-current-ref.d.ts +1 -0
- package/dist/types/ref-drivers/git-current-ref.d.ts.map +1 -0
- package/dist/types/ref-drivers/git-current-ref.spec.d.ts +2 -0
- package/dist/types/ref-drivers/git-current-ref.spec.d.ts.map +1 -0
- package/{lib/cjs → dist/types}/ref-drivers/index.d.ts +1 -0
- package/dist/types/ref-drivers/index.d.ts.map +1 -0
- package/{lib/cjs → dist/types}/ref-drivers/types.d.ts +1 -0
- package/dist/types/ref-drivers/types.d.ts.map +1 -0
- package/{lib/cjs → dist/types}/template-sync.d.ts +6 -5
- package/dist/types/template-sync.d.ts.map +1 -0
- package/dist/types/template-sync.spec.d.ts +2 -0
- package/dist/types/template-sync.spec.d.ts.map +1 -0
- package/{lib/cjs → dist/types}/test-utils/index.d.ts +1 -0
- package/dist/types/test-utils/index.d.ts.map +1 -0
- package/{lib/cjs → dist/types}/types.d.ts +1 -0
- package/dist/types/types.d.ts.map +1 -0
- package/package.json +26 -23
- package/.eslintrc.js +0 -10
- package/.github/CODEOWNERS +0 -6
- package/.github/workflows/pr-checks.yaml +0 -12
- package/.github/workflows/release.yaml +0 -47
- package/.github/workflows/test-flow.yaml +0 -63
- package/.husky/commit-msg +0 -4
- package/.prettierignore +0 -1
- package/.prettierrc +0 -1
- package/action.yml +0 -13
- package/commitlint.config.js +0 -3
- package/docs/merge-plugins/CURRENT_PLUGINS.md +0 -168
- package/docs/merge-plugins/PLUGIN_DEVELOPMENT.md +0 -122
- package/docs/merge-plugins/README.md +0 -75
- package/jest.config.js +0 -19
- package/lib/cjs/checkout-drivers/git-checkout.js +0 -29
- package/lib/cjs/checkout-drivers/index.js +0 -18
- package/lib/cjs/checkout-drivers/types.js +0 -2
- package/lib/cjs/clone-drivers/git-clone.js +0 -17
- package/lib/cjs/clone-drivers/index.js +0 -18
- package/lib/cjs/clone-drivers/types.js +0 -2
- package/lib/cjs/diff-drivers/git-diff.js +0 -41
- package/lib/cjs/diff-drivers/index.js +0 -18
- package/lib/cjs/diff-drivers/types.js +0 -2
- package/lib/cjs/formatting/index.js +0 -18
- package/lib/cjs/formatting/infer-json-indent.js +0 -18
- package/lib/cjs/formatting/sync-results-to-md.d.ts +0 -2
- package/lib/cjs/formatting/sync-results-to-md.js +0 -57
- package/lib/cjs/index.js +0 -19
- package/lib/cjs/load-plugin.js +0 -69
- package/lib/cjs/match.js +0 -45
- package/lib/cjs/merge-file.js +0 -98
- package/lib/cjs/plugins/index.js +0 -11
- package/lib/cjs/plugins/json-merge.js +0 -208
- package/lib/cjs/ref-drivers/git-current-ref.js +0 -12
- package/lib/cjs/ref-drivers/index.js +0 -17
- package/lib/cjs/ref-drivers/types.js +0 -2
- package/lib/cjs/template-sync.js +0 -163
- package/lib/cjs/test-utils/index.js +0 -10
- package/lib/cjs/types.js +0 -2
- package/lib/esm/checkout-drivers/git-checkout.js +0 -29
- package/lib/esm/checkout-drivers/index.js +0 -18
- package/lib/esm/checkout-drivers/types.js +0 -2
- package/lib/esm/clone-drivers/git-clone.js +0 -17
- package/lib/esm/clone-drivers/index.js +0 -18
- package/lib/esm/clone-drivers/types.js +0 -2
- package/lib/esm/diff-drivers/git-diff.js +0 -41
- package/lib/esm/diff-drivers/index.js +0 -18
- package/lib/esm/diff-drivers/types.js +0 -2
- package/lib/esm/formatting/index.js +0 -18
- package/lib/esm/formatting/infer-json-indent.js +0 -18
- package/lib/esm/formatting/sync-results-to-md.js +0 -57
- package/lib/esm/index.js +0 -19
- package/lib/esm/load-plugin.js +0 -46
- package/lib/esm/match.js +0 -45
- package/lib/esm/merge-file.js +0 -98
- package/lib/esm/plugins/index.js +0 -11
- package/lib/esm/plugins/json-merge.js +0 -208
- package/lib/esm/ref-drivers/git-current-ref.js +0 -12
- package/lib/esm/ref-drivers/index.js +0 -17
- package/lib/esm/ref-drivers/types.js +0 -2
- package/lib/esm/template-sync.js +0 -163
- package/lib/esm/test-utils/index.js +0 -10
- package/lib/esm/types.js +0 -2
- package/release.config.js +0 -40
- package/src/checkout-drivers/git-checkout.spec.ts +0 -69
- package/src/checkout-drivers/git-checkout.ts +0 -38
- package/src/checkout-drivers/index.ts +0 -2
- package/src/checkout-drivers/types.ts +0 -14
- package/src/clone-drivers/git-clone.ts +0 -20
- package/src/clone-drivers/index.ts +0 -2
- package/src/clone-drivers/types.ts +0 -20
- package/src/diff-drivers/git-diff.spec.ts +0 -73
- package/src/diff-drivers/git-diff.ts +0 -39
- package/src/diff-drivers/index.ts +0 -2
- package/src/diff-drivers/types.ts +0 -14
- package/src/formatting/__snapshots__/sync-results-to-md.spec.ts.snap +0 -39
- package/src/formatting/index.ts +0 -2
- package/src/formatting/infer-json-indent.spec.ts +0 -49
- package/src/formatting/infer-json-indent.ts +0 -16
- package/src/formatting/sync-results-to-md.spec.ts +0 -31
- package/src/formatting/sync-results-to-md.ts +0 -63
- package/src/index.ts +0 -3
- package/src/load-plugin.ts +0 -51
- package/src/match.spec.ts +0 -68
- package/src/match.ts +0 -52
- package/src/merge-file.spec.ts +0 -506
- package/src/merge-file.ts +0 -154
- package/src/plugins/index.ts +0 -12
- package/src/plugins/json-merge.spec.ts +0 -436
- package/src/plugins/json-merge.ts +0 -215
- package/src/ref-drivers/git-current-ref.spec.ts +0 -12
- package/src/ref-drivers/git-current-ref.ts +0 -9
- package/src/ref-drivers/index.ts +0 -1
- package/src/ref-drivers/types.ts +0 -10
- package/src/template-sync.spec.ts +0 -509
- package/src/template-sync.ts +0 -256
- package/src/test-utils/index.ts +0 -13
- package/src/types.ts +0 -129
- package/templatesync.local.json +0 -15
- package/test-fixtures/downstream/README.md +0 -3
- package/test-fixtures/downstream/package.json +0 -18
- package/test-fixtures/downstream/plugins/custom-plugin.js +0 -11
- package/test-fixtures/downstream/src/index.js +0 -2
- package/test-fixtures/downstream/src/index.ts +0 -1
- package/test-fixtures/downstream/src/templated.js +0 -2
- package/test-fixtures/downstream/src/templated.ts +0 -1
- package/test-fixtures/downstream/templatesync.json +0 -16
- package/test-fixtures/downstream/templatesync.local.json +0 -10
- package/test-fixtures/dummy-plugin.js +0 -8
- package/test-fixtures/glob-test/folder1/something.js +0 -1
- package/test-fixtures/glob-test/folder1/something.ts +0 -0
- package/test-fixtures/glob-test/toplevel.js +0 -0
- package/test-fixtures/glob-test/toplevel.txt +0 -0
- package/test-fixtures/template/custom-bin/something.txt +0 -1
- package/test-fixtures/template/package.json +0 -17
- package/test-fixtures/template/src/index.js +0 -2
- package/test-fixtures/template/src/index.ts +0 -1
- package/test-fixtures/template/src/templated.js +0 -2
- package/test-fixtures/template/src/templated.ts +0 -1
- package/test-fixtures/template/templatesync.json +0 -16
- package/test-fixtures/testGitRepo/README.md +0 -17
- package/test-fixtures/testGitRepo/gitDir/COMMIT_EDITMSG +0 -14
- package/test-fixtures/testGitRepo/gitDir/HEAD +0 -1
- package/test-fixtures/testGitRepo/gitDir/config +0 -7
- package/test-fixtures/testGitRepo/gitDir/description +0 -1
- package/test-fixtures/testGitRepo/gitDir/hooks/applypatch-msg.sample +0 -15
- package/test-fixtures/testGitRepo/gitDir/hooks/commit-msg.sample +0 -24
- package/test-fixtures/testGitRepo/gitDir/hooks/fsmonitor-watchman.sample +0 -174
- package/test-fixtures/testGitRepo/gitDir/hooks/post-update.sample +0 -8
- package/test-fixtures/testGitRepo/gitDir/hooks/pre-applypatch.sample +0 -14
- package/test-fixtures/testGitRepo/gitDir/hooks/pre-commit.sample +0 -49
- package/test-fixtures/testGitRepo/gitDir/hooks/pre-merge-commit.sample +0 -13
- package/test-fixtures/testGitRepo/gitDir/hooks/pre-push.sample +0 -53
- package/test-fixtures/testGitRepo/gitDir/hooks/pre-rebase.sample +0 -169
- package/test-fixtures/testGitRepo/gitDir/hooks/pre-receive.sample +0 -24
- package/test-fixtures/testGitRepo/gitDir/hooks/prepare-commit-msg.sample +0 -42
- package/test-fixtures/testGitRepo/gitDir/hooks/push-to-checkout.sample +0 -78
- package/test-fixtures/testGitRepo/gitDir/hooks/sendemail-validate.sample +0 -77
- package/test-fixtures/testGitRepo/gitDir/hooks/update.sample +0 -128
- package/test-fixtures/testGitRepo/gitDir/index +0 -0
- package/test-fixtures/testGitRepo/gitDir/info/exclude +0 -6
- package/test-fixtures/testGitRepo/gitDir/logs/HEAD +0 -5
- package/test-fixtures/testGitRepo/gitDir/logs/refs/heads/master +0 -2
- package/test-fixtures/testGitRepo/gitDir/logs/refs/heads/test-branch +0 -2
- package/test-fixtures/testGitRepo/gitDir/objects/4b/825dc642cb6eb9a060e54bf8d69288fbee4904 +0 -0
- package/test-fixtures/testGitRepo/gitDir/objects/6e/187bee8d02f39d0a1be8331dd8fe6a00c9b613 +0 -0
- package/test-fixtures/testGitRepo/gitDir/objects/73/185f1f3f5a6345e087d9f46dc4af77cc59449f +0 -2
- package/test-fixtures/testGitRepo/gitDir/objects/90/e7ea1089f939840e9649fd617584c1ad117159 +0 -3
- package/test-fixtures/testGitRepo/gitDir/objects/ba/99a452b9097047e9bfa8d5a08b3e452fcb364a +0 -0
- package/test-fixtures/testGitRepo/gitDir/objects/c5/8d400177cd5180b8566f82a127fafc5bf394b7 +0 -0
- package/test-fixtures/testGitRepo/gitDir/objects/e2/e668265db019249a7e8296d85f79000e3d71cf +0 -0
- package/test-fixtures/testGitRepo/gitDir/objects/e4/243e430c1ab69f3e344249f5b1859e90abc883 +0 -1
- package/test-fixtures/testGitRepo/gitDir/objects/ec/6c1cb72312605282ac61858cf1eaf1ea9f1d02 +0 -0
- package/test-fixtures/testGitRepo/gitDir/objects/fc/89cecc4ac0b5b075bd7d0ce9e09b2f50598b82 +0 -0
- package/test-fixtures/testGitRepo/gitDir/refs/heads/master +0 -1
- package/test-fixtures/testGitRepo/gitDir/refs/heads/test-branch +0 -1
- package/tsconfig.cjs.json +0 -12
- package/tsconfig.esm.json +0 -10
- package/tsconfig.json +0 -22
|
@@ -1,509 +0,0 @@
|
|
|
1
|
-
import { copy } from "fs-extra";
|
|
2
|
-
import { mkdtemp, readFile, rm } from "fs/promises";
|
|
3
|
-
import { templateSync } from "./template-sync";
|
|
4
|
-
import { tempDir, TEST_FIXTURES_DIR } from "./test-utils";
|
|
5
|
-
import { join, resolve } from "path";
|
|
6
|
-
import { existsSync, readFileSync, writeFileSync } from "fs";
|
|
7
|
-
|
|
8
|
-
// Just return the test-fixture directory
|
|
9
|
-
const dummyCloneDriver = async () => {
|
|
10
|
-
return {
|
|
11
|
-
dir: resolve(TEST_FIXTURES_DIR, "template"),
|
|
12
|
-
remoteName: "ourRemote",
|
|
13
|
-
};
|
|
14
|
-
};
|
|
15
|
-
|
|
16
|
-
const dummyCheckoutDriver = jest.fn();
|
|
17
|
-
|
|
18
|
-
const downstreamDir = resolve(TEST_FIXTURES_DIR, "downstream");
|
|
19
|
-
|
|
20
|
-
describe("templateSync", () => {
|
|
21
|
-
let tmpDir: string;
|
|
22
|
-
beforeEach(async () => {
|
|
23
|
-
jest.resetAllMocks();
|
|
24
|
-
tmpDir = await mkdtemp(tempDir());
|
|
25
|
-
await copy(downstreamDir, tmpDir);
|
|
26
|
-
});
|
|
27
|
-
afterEach(async () => {
|
|
28
|
-
await rm(tmpDir, {
|
|
29
|
-
force: true,
|
|
30
|
-
recursive: true,
|
|
31
|
-
});
|
|
32
|
-
});
|
|
33
|
-
it("appropriately merges according to just the templatesync config file into an empty dir", async () => {
|
|
34
|
-
const emptyTmpDir = await mkdtemp(tempDir());
|
|
35
|
-
expect(
|
|
36
|
-
await templateSync({
|
|
37
|
-
tmpCloneDir: "stubbed-by-driver",
|
|
38
|
-
cloneDriver: dummyCloneDriver,
|
|
39
|
-
repoUrl: "not-important",
|
|
40
|
-
repoDir: emptyTmpDir,
|
|
41
|
-
checkoutDriver: dummyCheckoutDriver,
|
|
42
|
-
}),
|
|
43
|
-
).toEqual({
|
|
44
|
-
// Expect no changes since there was no local sync file
|
|
45
|
-
localSkipFiles: [],
|
|
46
|
-
localFileChanges: {},
|
|
47
|
-
modifiedFiles: {
|
|
48
|
-
added: [
|
|
49
|
-
"package.json",
|
|
50
|
-
"src/index.js",
|
|
51
|
-
"src/templated.js",
|
|
52
|
-
"src/templated.ts",
|
|
53
|
-
"templatesync.json",
|
|
54
|
-
],
|
|
55
|
-
deleted: [],
|
|
56
|
-
modified: [],
|
|
57
|
-
total: 5,
|
|
58
|
-
},
|
|
59
|
-
});
|
|
60
|
-
|
|
61
|
-
// Verify the files
|
|
62
|
-
await fileMatchTemplate(emptyTmpDir, "templatesync.json");
|
|
63
|
-
await fileMatchTemplate(emptyTmpDir, "package.json");
|
|
64
|
-
await fileMatchTemplate(emptyTmpDir, "src/templated.ts");
|
|
65
|
-
|
|
66
|
-
// Expect the ignores to not be a problem
|
|
67
|
-
expect(existsSync(resolve(emptyTmpDir, "src/index.ts"))).toBeFalsy();
|
|
68
|
-
expect(existsSync(resolve(emptyTmpDir, "src/custom-bin"))).toBeFalsy();
|
|
69
|
-
|
|
70
|
-
expect(dummyCheckoutDriver).not.toHaveBeenCalled();
|
|
71
|
-
});
|
|
72
|
-
it("Checks out the branch and then appropriately merges", async () => {
|
|
73
|
-
const emptyTmpDir = await mkdtemp(tempDir());
|
|
74
|
-
expect(
|
|
75
|
-
await templateSync({
|
|
76
|
-
tmpCloneDir: "stubbed-by-driver",
|
|
77
|
-
cloneDriver: dummyCloneDriver,
|
|
78
|
-
repoUrl: "not-important",
|
|
79
|
-
repoDir: emptyTmpDir,
|
|
80
|
-
branch: "new-template-test",
|
|
81
|
-
checkoutDriver: dummyCheckoutDriver,
|
|
82
|
-
}),
|
|
83
|
-
).toEqual({
|
|
84
|
-
// Expect no changes since there was no local sync file
|
|
85
|
-
localSkipFiles: [],
|
|
86
|
-
localFileChanges: {},
|
|
87
|
-
modifiedFiles: {
|
|
88
|
-
added: [
|
|
89
|
-
"package.json",
|
|
90
|
-
"src/index.js",
|
|
91
|
-
"src/templated.js",
|
|
92
|
-
"src/templated.ts",
|
|
93
|
-
"templatesync.json",
|
|
94
|
-
],
|
|
95
|
-
deleted: [],
|
|
96
|
-
modified: [],
|
|
97
|
-
total: 5,
|
|
98
|
-
},
|
|
99
|
-
});
|
|
100
|
-
|
|
101
|
-
// Verify the files
|
|
102
|
-
await fileMatchTemplate(emptyTmpDir, "templatesync.json");
|
|
103
|
-
await fileMatchTemplate(emptyTmpDir, "package.json");
|
|
104
|
-
await fileMatchTemplate(emptyTmpDir, "src/templated.ts");
|
|
105
|
-
|
|
106
|
-
// Expect the ignores to not be a problem
|
|
107
|
-
expect(existsSync(resolve(emptyTmpDir, "src/index.ts"))).toBeFalsy();
|
|
108
|
-
expect(existsSync(resolve(emptyTmpDir, "src/custom-bin"))).toBeFalsy();
|
|
109
|
-
const cloneInfo = await dummyCloneDriver();
|
|
110
|
-
expect(dummyCheckoutDriver).toHaveBeenCalledWith({
|
|
111
|
-
tmpDir: cloneInfo.dir,
|
|
112
|
-
remoteName: cloneInfo.remoteName,
|
|
113
|
-
branch: "new-template-test",
|
|
114
|
-
});
|
|
115
|
-
});
|
|
116
|
-
it("appropriately merges according to just the templatesync config file in an existing repo", async () => {
|
|
117
|
-
// Remove the local sync overrides
|
|
118
|
-
await rm(join(tmpDir, "templatesync.local.json"));
|
|
119
|
-
|
|
120
|
-
const result = await templateSync({
|
|
121
|
-
tmpCloneDir: "stubbed-by-driver",
|
|
122
|
-
cloneDriver: dummyCloneDriver,
|
|
123
|
-
repoUrl: "not-important",
|
|
124
|
-
repoDir: tmpDir,
|
|
125
|
-
checkoutDriver: dummyCheckoutDriver,
|
|
126
|
-
});
|
|
127
|
-
|
|
128
|
-
expect(result.localSkipFiles).toEqual([]);
|
|
129
|
-
expect(result.localFileChanges).toEqual({});
|
|
130
|
-
|
|
131
|
-
// Verify the files
|
|
132
|
-
await fileMatchTemplate(tmpDir, "templatesync.json");
|
|
133
|
-
await fileMatchTemplate(tmpDir, "src/templated.ts");
|
|
134
|
-
const packageJson = JSON.parse(
|
|
135
|
-
readFileSync(resolve(tmpDir, "package.json")).toString(),
|
|
136
|
-
);
|
|
137
|
-
|
|
138
|
-
expect(packageJson).toEqual({
|
|
139
|
-
name: "mypkg",
|
|
140
|
-
description: "my description",
|
|
141
|
-
dependencies: {
|
|
142
|
-
mypackage: "^1.2.0",
|
|
143
|
-
newpacakge: "^22.2.2",
|
|
144
|
-
package2: "3.22.1",
|
|
145
|
-
huh: "~1.0.0",
|
|
146
|
-
},
|
|
147
|
-
engines: {
|
|
148
|
-
node: ">=15",
|
|
149
|
-
},
|
|
150
|
-
scripts: {
|
|
151
|
-
build: "build",
|
|
152
|
-
test: "jest",
|
|
153
|
-
myscript: "somescript",
|
|
154
|
-
},
|
|
155
|
-
// By default we add new top-level fields
|
|
156
|
-
version: "new-version",
|
|
157
|
-
});
|
|
158
|
-
|
|
159
|
-
// Expect the ignores to not be a problem
|
|
160
|
-
await fileMatchDownstream(tmpDir, "src/index.ts");
|
|
161
|
-
await fileMatchDownstream(tmpDir, "plugins/custom-plugin.js");
|
|
162
|
-
expect(dummyCheckoutDriver).not.toHaveBeenCalled();
|
|
163
|
-
});
|
|
164
|
-
it("appropriately merges according to the templatesync config file and the local config in an existing repo", async () => {
|
|
165
|
-
// Remove the local sync overrides
|
|
166
|
-
await rm(join(tmpDir, "templatesync.local.json"));
|
|
167
|
-
|
|
168
|
-
writeFileSync(
|
|
169
|
-
join(tmpDir, "templatesync.local.json"),
|
|
170
|
-
JSON.stringify({
|
|
171
|
-
ignore: [
|
|
172
|
-
// Ignores the templated.ts
|
|
173
|
-
"**/*.ts",
|
|
174
|
-
// We don't have a need for this in here, but it's an example of keeping things cleaner for our custom plugins
|
|
175
|
-
"plugins/**",
|
|
176
|
-
],
|
|
177
|
-
merge: [
|
|
178
|
-
{
|
|
179
|
-
glob: "package.json",
|
|
180
|
-
plugin: "plugins/custom-plugin.js",
|
|
181
|
-
options: {},
|
|
182
|
-
},
|
|
183
|
-
],
|
|
184
|
-
}),
|
|
185
|
-
);
|
|
186
|
-
|
|
187
|
-
const result = await templateSync({
|
|
188
|
-
tmpCloneDir: "stubbed-by-driver",
|
|
189
|
-
cloneDriver: dummyCloneDriver,
|
|
190
|
-
repoUrl: "not-important",
|
|
191
|
-
repoDir: tmpDir,
|
|
192
|
-
checkoutDriver: dummyCheckoutDriver,
|
|
193
|
-
});
|
|
194
|
-
|
|
195
|
-
expect(result.localSkipFiles).toEqual(["src/templated.ts"]);
|
|
196
|
-
// TODO: more rigorous testing around diff changes
|
|
197
|
-
expect(result.localFileChanges).toEqual(
|
|
198
|
-
expect.objectContaining({
|
|
199
|
-
"package.json": expect.arrayContaining([]),
|
|
200
|
-
}),
|
|
201
|
-
);
|
|
202
|
-
// Make sure the result captures the changes
|
|
203
|
-
expect(result.modifiedFiles).toEqual({
|
|
204
|
-
added: [
|
|
205
|
-
"package.json",
|
|
206
|
-
"src/index.js",
|
|
207
|
-
"src/templated.js",
|
|
208
|
-
"templatesync.json",
|
|
209
|
-
],
|
|
210
|
-
deleted: [],
|
|
211
|
-
modified: [],
|
|
212
|
-
total: 4,
|
|
213
|
-
});
|
|
214
|
-
|
|
215
|
-
// Verify the files
|
|
216
|
-
await fileMatchTemplate(tmpDir, "templatesync.json");
|
|
217
|
-
await fileMatchDownstream(tmpDir, "src/templated.ts");
|
|
218
|
-
const packageJson = JSON.parse(
|
|
219
|
-
readFileSync(resolve(tmpDir, "package.json")).toString(),
|
|
220
|
-
);
|
|
221
|
-
|
|
222
|
-
// The plugin nuked this
|
|
223
|
-
expect(packageJson).toEqual({
|
|
224
|
-
downstream: true,
|
|
225
|
-
});
|
|
226
|
-
|
|
227
|
-
// Expect the ignores to not be a problem
|
|
228
|
-
await fileMatchDownstream(tmpDir, "src/index.ts");
|
|
229
|
-
await fileMatchDownstream(tmpDir, "plugins/custom-plugin.js");
|
|
230
|
-
expect(dummyCheckoutDriver).not.toHaveBeenCalled();
|
|
231
|
-
});
|
|
232
|
-
it("appropriately merges according to the templatesync config file and the local config in an existing repo with afterRef", async () => {
|
|
233
|
-
// Remove the local sync overrides
|
|
234
|
-
await rm(join(tmpDir, "templatesync.local.json"));
|
|
235
|
-
|
|
236
|
-
writeFileSync(
|
|
237
|
-
join(tmpDir, "templatesync.local.json"),
|
|
238
|
-
JSON.stringify({
|
|
239
|
-
afterRef: "dummySha",
|
|
240
|
-
ignore: [
|
|
241
|
-
// We don't have a need for this in here, but it's an example of keeping things cleaner for our custom plugins
|
|
242
|
-
"plugins/**",
|
|
243
|
-
],
|
|
244
|
-
}),
|
|
245
|
-
);
|
|
246
|
-
|
|
247
|
-
// We will only update the templated.ts
|
|
248
|
-
const mockDiffDriver = jest.fn().mockImplementation(async () => ({
|
|
249
|
-
added: ["src/templated.ts"],
|
|
250
|
-
modified: [],
|
|
251
|
-
deleted: [],
|
|
252
|
-
}));
|
|
253
|
-
const result = await templateSync({
|
|
254
|
-
tmpCloneDir: "stubbed-by-driver",
|
|
255
|
-
cloneDriver: dummyCloneDriver,
|
|
256
|
-
repoUrl: "not-important",
|
|
257
|
-
repoDir: tmpDir,
|
|
258
|
-
diffDriver: mockDiffDriver,
|
|
259
|
-
checkoutDriver: dummyCheckoutDriver,
|
|
260
|
-
});
|
|
261
|
-
|
|
262
|
-
// since there was no override for this file, not changes from the local file
|
|
263
|
-
expect(result.localFileChanges).toEqual(expect.objectContaining({}));
|
|
264
|
-
|
|
265
|
-
// Verify the files
|
|
266
|
-
await fileMatchTemplate(tmpDir, "templatesync.json");
|
|
267
|
-
await fileMatchTemplate(tmpDir, "src/templated.ts");
|
|
268
|
-
|
|
269
|
-
// Expect the none of the diff files to work
|
|
270
|
-
await fileMatchDownstream(tmpDir, "src/index.ts");
|
|
271
|
-
await fileMatchDownstream(tmpDir, "plugins/custom-plugin.js");
|
|
272
|
-
await fileMatchDownstream(tmpDir, "package.json");
|
|
273
|
-
expect(dummyCheckoutDriver).not.toHaveBeenCalled();
|
|
274
|
-
});
|
|
275
|
-
it("updates the local templatesync with the current ref if updateAfterRef is true", async () => {
|
|
276
|
-
// Remove the local sync overrides
|
|
277
|
-
await rm(join(tmpDir, "templatesync.local.json"));
|
|
278
|
-
|
|
279
|
-
const mockLocalConfig = {
|
|
280
|
-
afterRef: "dummySha",
|
|
281
|
-
ignore: [
|
|
282
|
-
// We don't have a need for this in here, but it's an example of keeping things cleaner for our custom plugins
|
|
283
|
-
"plugins/**",
|
|
284
|
-
],
|
|
285
|
-
};
|
|
286
|
-
|
|
287
|
-
writeFileSync(
|
|
288
|
-
join(tmpDir, "templatesync.local.json"),
|
|
289
|
-
JSON.stringify(mockLocalConfig),
|
|
290
|
-
);
|
|
291
|
-
|
|
292
|
-
// We will only update the templated.ts
|
|
293
|
-
const mockDiffDriver = jest.fn().mockImplementation(async () => ({
|
|
294
|
-
added: ["src/templated.ts"],
|
|
295
|
-
modified: ["src/index.ts"], // Add index.ts so we make sure it is still ignored - see test-fixtures/template/templatesync.json ignores
|
|
296
|
-
deleted: [],
|
|
297
|
-
}));
|
|
298
|
-
const mockCurrentRefDriver = jest
|
|
299
|
-
.fn()
|
|
300
|
-
.mockImplementation(async () => "newestSha");
|
|
301
|
-
const result = await templateSync({
|
|
302
|
-
tmpCloneDir: "stubbed-by-driver",
|
|
303
|
-
cloneDriver: dummyCloneDriver,
|
|
304
|
-
repoUrl: "not-important",
|
|
305
|
-
repoDir: tmpDir,
|
|
306
|
-
updateAfterRef: true,
|
|
307
|
-
diffDriver: mockDiffDriver,
|
|
308
|
-
currentRefDriver: mockCurrentRefDriver,
|
|
309
|
-
checkoutDriver: dummyCheckoutDriver,
|
|
310
|
-
});
|
|
311
|
-
|
|
312
|
-
// since there was no override for this file, no changes from the local file
|
|
313
|
-
expect(result.localFileChanges).toEqual(expect.objectContaining({}));
|
|
314
|
-
expect(result.modifiedFiles).toEqual({
|
|
315
|
-
added: ["src/templated.ts"],
|
|
316
|
-
modified: ["templatesync.local.json"], // Add index.ts so we make sure it is still ignored - due to a bug
|
|
317
|
-
deleted: [],
|
|
318
|
-
total: 2,
|
|
319
|
-
});
|
|
320
|
-
|
|
321
|
-
// Verify the files
|
|
322
|
-
await fileMatchTemplate(tmpDir, "templatesync.json");
|
|
323
|
-
await fileMatchTemplate(tmpDir, "src/templated.ts");
|
|
324
|
-
|
|
325
|
-
// Expect the none of the diff files to work
|
|
326
|
-
await fileMatchDownstream(tmpDir, "src/index.ts");
|
|
327
|
-
await fileMatchDownstream(tmpDir, "plugins/custom-plugin.js");
|
|
328
|
-
await fileMatchDownstream(tmpDir, "package.json");
|
|
329
|
-
|
|
330
|
-
// Ensure we have updated the local template field
|
|
331
|
-
expect(
|
|
332
|
-
JSON.parse(
|
|
333
|
-
(await readFile(join(tmpDir, "templatesync.local.json"))).toString(),
|
|
334
|
-
),
|
|
335
|
-
).toEqual({
|
|
336
|
-
...mockLocalConfig,
|
|
337
|
-
afterRef: "newestSha",
|
|
338
|
-
});
|
|
339
|
-
expect(dummyCheckoutDriver).not.toHaveBeenCalled();
|
|
340
|
-
});
|
|
341
|
-
it("Does not update the local templatesync if updateAfterRef is true and the ref is the same", async () => {
|
|
342
|
-
// Remove the local sync overrides
|
|
343
|
-
await rm(join(tmpDir, "templatesync.local.json"));
|
|
344
|
-
|
|
345
|
-
const mockLocalConfig = {
|
|
346
|
-
afterRef: "dummySha",
|
|
347
|
-
ignore: [
|
|
348
|
-
// We don't have a need for this in here, but it's an example of keeping things cleaner for our custom plugins
|
|
349
|
-
"plugins/**",
|
|
350
|
-
],
|
|
351
|
-
};
|
|
352
|
-
|
|
353
|
-
writeFileSync(
|
|
354
|
-
join(tmpDir, "templatesync.local.json"),
|
|
355
|
-
JSON.stringify(mockLocalConfig),
|
|
356
|
-
);
|
|
357
|
-
|
|
358
|
-
// We will only update the templated.ts
|
|
359
|
-
const mockDiffDriver = jest.fn().mockImplementation(async () => ({
|
|
360
|
-
added: ["src/templated.ts"],
|
|
361
|
-
modified: ["src/index.ts"], // Add index.ts so we make sure it is still ignored - see test-fixtures/template/templatesync.json ignores
|
|
362
|
-
deleted: [],
|
|
363
|
-
}));
|
|
364
|
-
const mockCurrentRefDriver = jest
|
|
365
|
-
.fn()
|
|
366
|
-
.mockImplementation(async () => "dummySha");
|
|
367
|
-
const result = await templateSync({
|
|
368
|
-
tmpCloneDir: "stubbed-by-driver",
|
|
369
|
-
cloneDriver: dummyCloneDriver,
|
|
370
|
-
repoUrl: "not-important",
|
|
371
|
-
repoDir: tmpDir,
|
|
372
|
-
updateAfterRef: true,
|
|
373
|
-
diffDriver: mockDiffDriver,
|
|
374
|
-
currentRefDriver: mockCurrentRefDriver,
|
|
375
|
-
checkoutDriver: dummyCheckoutDriver,
|
|
376
|
-
});
|
|
377
|
-
|
|
378
|
-
// Nothing shoudl be reported as changing
|
|
379
|
-
expect(result).toEqual({
|
|
380
|
-
localFileChanges: {},
|
|
381
|
-
localSkipFiles: [],
|
|
382
|
-
modifiedFiles: {
|
|
383
|
-
added: [],
|
|
384
|
-
modified: [],
|
|
385
|
-
deleted: [],
|
|
386
|
-
total: 0,
|
|
387
|
-
},
|
|
388
|
-
});
|
|
389
|
-
// Verify the files
|
|
390
|
-
await fileMatchDownstream(tmpDir, "templatesync.json");
|
|
391
|
-
await fileMatchDownstream(tmpDir, "src/templated.ts");
|
|
392
|
-
|
|
393
|
-
// Expect the none of the diff files to work
|
|
394
|
-
await fileMatchDownstream(tmpDir, "src/index.ts");
|
|
395
|
-
await fileMatchDownstream(tmpDir, "plugins/custom-plugin.js");
|
|
396
|
-
await fileMatchDownstream(tmpDir, "package.json");
|
|
397
|
-
|
|
398
|
-
// Ensure we have updated the local template field
|
|
399
|
-
expect(
|
|
400
|
-
JSON.parse(
|
|
401
|
-
(await readFile(join(tmpDir, "templatesync.local.json"))).toString(),
|
|
402
|
-
),
|
|
403
|
-
).toEqual({
|
|
404
|
-
...mockLocalConfig,
|
|
405
|
-
});
|
|
406
|
-
expect(dummyCheckoutDriver).not.toHaveBeenCalled();
|
|
407
|
-
});
|
|
408
|
-
it("creates the local templatesync with the current ref if updateAfterRef is true and no local template exists", async () => {
|
|
409
|
-
// Remove the local sync overrides
|
|
410
|
-
await rm(join(tmpDir, "templatesync.local.json"));
|
|
411
|
-
|
|
412
|
-
// We will only update the templated.ts
|
|
413
|
-
const mockDiffDriver = jest.fn().mockImplementation(async () => ({
|
|
414
|
-
added: ["src/templated.ts"],
|
|
415
|
-
}));
|
|
416
|
-
const mockCurrentRefDriver = jest
|
|
417
|
-
.fn()
|
|
418
|
-
.mockImplementation(async () => "newestSha");
|
|
419
|
-
const result = await templateSync({
|
|
420
|
-
tmpCloneDir: "stubbed-by-driver",
|
|
421
|
-
cloneDriver: dummyCloneDriver,
|
|
422
|
-
repoUrl: "not-important",
|
|
423
|
-
repoDir: tmpDir,
|
|
424
|
-
updateAfterRef: true,
|
|
425
|
-
diffDriver: mockDiffDriver,
|
|
426
|
-
currentRefDriver: mockCurrentRefDriver,
|
|
427
|
-
checkoutDriver: dummyCheckoutDriver,
|
|
428
|
-
});
|
|
429
|
-
|
|
430
|
-
// since there was no override for this file, no changes from the local file
|
|
431
|
-
expect(result.localFileChanges).toEqual(expect.objectContaining({}));
|
|
432
|
-
expect(result.modifiedFiles).toEqual({
|
|
433
|
-
added: [
|
|
434
|
-
"package.json",
|
|
435
|
-
"src/index.js",
|
|
436
|
-
"src/templated.js",
|
|
437
|
-
"src/templated.ts",
|
|
438
|
-
"templatesync.json",
|
|
439
|
-
"templatesync.local.json",
|
|
440
|
-
],
|
|
441
|
-
deleted: [],
|
|
442
|
-
modified: [],
|
|
443
|
-
total: 6,
|
|
444
|
-
});
|
|
445
|
-
|
|
446
|
-
// Verify the files
|
|
447
|
-
await fileMatchTemplate(tmpDir, "templatesync.json");
|
|
448
|
-
await fileMatchTemplate(tmpDir, "src/templated.ts");
|
|
449
|
-
const packageJson = JSON.parse(
|
|
450
|
-
readFileSync(resolve(tmpDir, "package.json")).toString(),
|
|
451
|
-
);
|
|
452
|
-
|
|
453
|
-
expect(packageJson).toEqual({
|
|
454
|
-
name: "mypkg",
|
|
455
|
-
description: "my description",
|
|
456
|
-
dependencies: {
|
|
457
|
-
mypackage: "^1.2.0",
|
|
458
|
-
newpacakge: "^22.2.2",
|
|
459
|
-
package2: "3.22.1",
|
|
460
|
-
huh: "~1.0.0",
|
|
461
|
-
},
|
|
462
|
-
engines: {
|
|
463
|
-
node: ">=15",
|
|
464
|
-
},
|
|
465
|
-
scripts: {
|
|
466
|
-
build: "build",
|
|
467
|
-
test: "jest",
|
|
468
|
-
myscript: "somescript",
|
|
469
|
-
},
|
|
470
|
-
// By default we add new top-level fields
|
|
471
|
-
version: "new-version",
|
|
472
|
-
});
|
|
473
|
-
|
|
474
|
-
// Expect the none of the diff files to work
|
|
475
|
-
await fileMatchDownstream(tmpDir, "src/index.ts");
|
|
476
|
-
await fileMatchDownstream(tmpDir, "plugins/custom-plugin.js");
|
|
477
|
-
|
|
478
|
-
// Ensure we have updated the local template field
|
|
479
|
-
expect(
|
|
480
|
-
JSON.parse(
|
|
481
|
-
(await readFile(join(tmpDir, "templatesync.local.json"))).toString(),
|
|
482
|
-
),
|
|
483
|
-
).toEqual({
|
|
484
|
-
afterRef: "newestSha",
|
|
485
|
-
});
|
|
486
|
-
});
|
|
487
|
-
expect(dummyCheckoutDriver).not.toHaveBeenCalled();
|
|
488
|
-
});
|
|
489
|
-
|
|
490
|
-
// helper
|
|
491
|
-
async function fileMatchTemplate(tmpDir: string, relPath: string) {
|
|
492
|
-
return fileMatch(tmpDir, relPath, "template");
|
|
493
|
-
}
|
|
494
|
-
|
|
495
|
-
async function fileMatchDownstream(tmpDir: string, relPath: string) {
|
|
496
|
-
return fileMatch(tmpDir, relPath, "downstream");
|
|
497
|
-
}
|
|
498
|
-
|
|
499
|
-
async function fileMatch(
|
|
500
|
-
tmpDir: string,
|
|
501
|
-
relPath: string,
|
|
502
|
-
source: "downstream" | "template",
|
|
503
|
-
) {
|
|
504
|
-
const dir =
|
|
505
|
-
source === "downstream" ? downstreamDir : (await dummyCloneDriver()).dir;
|
|
506
|
-
expect((await readFile(resolve(tmpDir, relPath))).toString()).toEqual(
|
|
507
|
-
(await readFile(resolve(dir, relPath))).toString(),
|
|
508
|
-
);
|
|
509
|
-
}
|