@ankhorage/renovate 0.1.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 +26 -0
- package/LICENSE +21 -0
- package/README.md +54 -0
- package/default.json +53 -0
- package/devtools-owner.json +25 -0
- package/dist/changeset-workflow.test.d.ts +2 -0
- package/dist/changeset-workflow.test.d.ts.map +1 -0
- package/dist/changeset-workflow.test.js +135 -0
- package/dist/changeset-workflow.test.js.map +1 -0
- package/dist/default.test.d.ts +2 -0
- package/dist/default.test.d.ts.map +1 -0
- package/dist/default.test.js +139 -0
- package/dist/default.test.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/index.test.d.ts +2 -0
- package/dist/index.test.d.ts.map +1 -0
- package/dist/index.test.js +6 -0
- package/dist/index.test.js.map +1 -0
- package/examples/devtools-renovate.json5 +14 -0
- package/examples/renovate.json5 +17 -0
- package/package.json +72 -0
- package/paradox/badges/build.svg +7 -0
- package/paradox/badges/docs.svg +7 -0
- package/paradox/badges/eslint.svg +7 -0
- package/paradox/badges/license.svg +7 -0
- package/paradox/badges/npm.svg +7 -0
- package/paradox/badges/prettier.svg +7 -0
- package/paradox/badges/runtime.svg +7 -0
- package/paradox/badges/tests.svg +7 -0
- package/paradox/badges/typescript.svg +7 -0
- package/paradox/components.md +1 -0
- package/paradox/diagrams/architecture-overview.mmd +12 -0
- package/paradox/diagrams/export-graph.mmd +5 -0
- package/paradox/diagrams/module-relationships.mmd +6 -0
- package/paradox/exports.json +1 -0
- package/paradox/exports.md +1 -0
- package/paradox/index.html +348 -0
- package/paradox/paradox.json +283 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# @ankhorage/renovate
|
|
2
|
+
|
|
3
|
+
## 0.1.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 8f1fd6a: Restrict automated dependency updates to packages in the `@ankhorage` scope.
|
|
8
|
+
- c9ee948: Publish separate Renovate policies for normal consumers and the Devtools owner repository, and
|
|
9
|
+
automatically synchronize consumer Renovate branches with their exact selected Ankh and Devtools
|
|
10
|
+
releases through the least-privileged reusable workflow, using the workflow's exact canonical Ankh
|
|
11
|
+
CLI pin when a Devtools-only consumer does not declare the CLI itself.
|
|
12
|
+
|
|
13
|
+
## 0.1.0
|
|
14
|
+
|
|
15
|
+
### Minor Changes
|
|
16
|
+
|
|
17
|
+
- b7305e8: Add safe automatic Changeset creation and green-CI automerge for Ankhorage dependency updates.
|
|
18
|
+
- f4526fd: Establish the standalone Renovate policy package and canonical Ankhorage preset.
|
|
19
|
+
|
|
20
|
+
### Patch Changes
|
|
21
|
+
|
|
22
|
+
- 38e46ee: Bump Ankhorage dependency ranges so every package release can propagate to downstream repositories.
|
|
23
|
+
|
|
24
|
+
## 0.0.0
|
|
25
|
+
|
|
26
|
+
Initial package foundation.
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Ankhorage
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
<!-- markdownlint-disable MD013 MD033 -->
|
|
2
|
+
<!-- This file is generated by Paradox. Do not edit manually. -->
|
|
3
|
+
|
|
4
|
+
# @ankhorage/renovate
|
|
5
|
+
|
|
6
|
+
        
|
|
7
|
+
|
|
8
|
+
Ankhorage dependency update policy and automation powered by Renovate.
|
|
9
|
+
|
|
10
|
+
## Usage
|
|
11
|
+
|
|
12
|
+
Extend the repository-hosted preset from each Ankhorage repository that Renovate manages.
|
|
13
|
+
|
|
14
|
+
### Devtools owner repository configuration
|
|
15
|
+
|
|
16
|
+
Loads the owner-specific policy that enables and groups the root Bun, ESLint, Knip, Prettier,
|
|
17
|
+
TypeScript, and validation/publishing dependencies maintained by @ankhorage/devtools. Major
|
|
18
|
+
upgrades remain reviewable. Do not use this profile in normal consumer repositories.
|
|
19
|
+
|
|
20
|
+
Source: `examples/devtools-renovate.json5`
|
|
21
|
+
|
|
22
|
+
```
|
|
23
|
+
{
|
|
24
|
+
$schema: 'https://docs.renovatebot.com/renovate-schema.json',
|
|
25
|
+
extends: ['github>ankhorage/renovate:devtools-owner'],
|
|
26
|
+
}
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### Repository configuration
|
|
30
|
+
|
|
31
|
+
Loads the normal consumer policy from its default branch. The policy keeps Devtools-owned
|
|
32
|
+
packages and canonical workflows out of independent Renovate updates, and groups compatible
|
|
33
|
+
@ankhorage/ankh and @ankhorage/devtools releases for the trusted automatic synchronization
|
|
34
|
+
workflow. The workflow runs the exact lock-selected Devtools provider with either the consumer's
|
|
35
|
+
lock-selected Ankh CLI or its own exact canonical CLI pin, requires byte stability, and commits
|
|
36
|
+
the complete managed result without a manual repository sync.
|
|
37
|
+
|
|
38
|
+
Source: `examples/renovate.json5`
|
|
39
|
+
|
|
40
|
+
```
|
|
41
|
+
{
|
|
42
|
+
$schema: 'https://docs.renovatebot.com/renovate-schema.json',
|
|
43
|
+
extends: ['github>ankhorage/renovate'],
|
|
44
|
+
}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Generated documentation
|
|
48
|
+
|
|
49
|
+
- [Interactive documentation app](./paradox/index.html)
|
|
50
|
+
- [Public API reference](./paradox/exports.md)
|
|
51
|
+
- [Component registry](./paradox/components.md)
|
|
52
|
+
- [Architecture overview](./paradox/diagrams/architecture-overview.mmd)
|
|
53
|
+
- [Module relationships](./paradox/diagrams/module-relationships.mmd)
|
|
54
|
+
- [Export graph](./paradox/diagrams/export-graph.mmd)
|
package/default.json
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
|
|
3
|
+
"description": ["Canonical dependency update policy for Ankhorage consumer repositories."],
|
|
4
|
+
"extends": ["config:recommended", ":dependencyDashboard"],
|
|
5
|
+
"gitIgnoredAuthors": ["41898282+github-actions[bot]@users.noreply.github.com"],
|
|
6
|
+
"labels": ["dependencies"],
|
|
7
|
+
"packageRules": [
|
|
8
|
+
{
|
|
9
|
+
"description": "Disable dependency updates unless a later Ankhorage rule explicitly enables them.",
|
|
10
|
+
"matchPackageNames": ["*"],
|
|
11
|
+
"enabled": false
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"description": "Group Ankhorage package updates and propagate every release downstream.",
|
|
15
|
+
"matchDatasources": ["npm"],
|
|
16
|
+
"matchPackageNames": ["@ankhorage/**"],
|
|
17
|
+
"enabled": true,
|
|
18
|
+
"groupName": "Ankhorage packages",
|
|
19
|
+
"rangeStrategy": "bump",
|
|
20
|
+
"automerge": true,
|
|
21
|
+
"automergeType": "pr",
|
|
22
|
+
"platformAutomerge": false
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"description": "Update the canonical Ankh CLI and Devtools provider as one toolchain.",
|
|
26
|
+
"matchDatasources": ["npm"],
|
|
27
|
+
"matchPackageNames": ["@ankhorage/ankh", "@ankhorage/devtools"],
|
|
28
|
+
"enabled": true,
|
|
29
|
+
"groupName": "Ankhorage CLI and Devtools toolchain",
|
|
30
|
+
"rangeStrategy": "bump",
|
|
31
|
+
"automerge": true,
|
|
32
|
+
"automergeType": "pr",
|
|
33
|
+
"platformAutomerge": false
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"description": "Require review for major CLI and Devtools toolchain upgrades.",
|
|
37
|
+
"matchDatasources": ["npm"],
|
|
38
|
+
"matchPackageNames": ["@ankhorage/ankh", "@ankhorage/devtools"],
|
|
39
|
+
"matchUpdateTypes": ["major"],
|
|
40
|
+
"automerge": false
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"description": "Keep canonical Devtools workflows under deterministic Devtools sync ownership.",
|
|
44
|
+
"matchManagers": ["github-actions"],
|
|
45
|
+
"matchFileNames": [
|
|
46
|
+
".github/workflows/ci.yml",
|
|
47
|
+
".github/workflows/renovate.yml",
|
|
48
|
+
".github/workflows/release.yml"
|
|
49
|
+
],
|
|
50
|
+
"enabled": false
|
|
51
|
+
}
|
|
52
|
+
]
|
|
53
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
|
|
3
|
+
"description": ["Devtools-owner dependency update policy for ankhorage/devtools."],
|
|
4
|
+
"extends": ["./default"],
|
|
5
|
+
"packageRules": [
|
|
6
|
+
{
|
|
7
|
+
"description": "Group dependencies owned and validated by the Devtools repository.",
|
|
8
|
+
"matchManagers": ["bun"],
|
|
9
|
+
"matchFileNames": ["package.json"],
|
|
10
|
+
"enabled": true,
|
|
11
|
+
"groupName": "Devtools-owned toolchain",
|
|
12
|
+
"rangeStrategy": "bump",
|
|
13
|
+
"automerge": true,
|
|
14
|
+
"automergeType": "pr",
|
|
15
|
+
"platformAutomerge": false
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"description": "Require review for major Devtools-owned toolchain upgrades.",
|
|
19
|
+
"matchManagers": ["bun"],
|
|
20
|
+
"matchFileNames": ["package.json"],
|
|
21
|
+
"matchUpdateTypes": ["major"],
|
|
22
|
+
"automerge": false
|
|
23
|
+
}
|
|
24
|
+
]
|
|
25
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"changeset-workflow.test.d.ts","sourceRoot":"","sources":["../src/changeset-workflow.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { readFileSync } from 'node:fs';
|
|
2
|
+
import { describe, expect, test } from 'bun:test';
|
|
3
|
+
const workflow = readFileSync(new URL('../.github/workflows/changeset.yml', import.meta.url), 'utf8');
|
|
4
|
+
const [prepareJob, commitJob = ''] = workflow.split('\n commit:');
|
|
5
|
+
const surfaceManifest = {
|
|
6
|
+
name: '@ankhorage/surface',
|
|
7
|
+
packageManager: 'bun@1.3.14',
|
|
8
|
+
devDependencies: {
|
|
9
|
+
'@ankhorage/devtools': '^1.7.0',
|
|
10
|
+
},
|
|
11
|
+
};
|
|
12
|
+
const surfaceLock = `
|
|
13
|
+
workspaces: {
|
|
14
|
+
"": {
|
|
15
|
+
devDependencies: {
|
|
16
|
+
"@ankhorage/devtools": "^1.7.0",
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
packages: {
|
|
21
|
+
"@ankhorage/devtools": ["@ankhorage/devtools@1.7.0", "", {}],
|
|
22
|
+
},
|
|
23
|
+
`;
|
|
24
|
+
describe('trusted Renovate integration', () => {
|
|
25
|
+
test('accepts only same-repository Renovate branches', () => {
|
|
26
|
+
expect(workflow).toContain("context.actor !== 'renovate[bot]'");
|
|
27
|
+
expect(workflow).toContain("pull.head.ref.startsWith('renovate/')");
|
|
28
|
+
expect(workflow).toContain("pull.head.repo?.full_name !== owner + '/' + repo");
|
|
29
|
+
expect(workflow).toContain('artifact.headSha !== pull.head.sha');
|
|
30
|
+
});
|
|
31
|
+
test('isolates untrusted branch preparation from write credentials', () => {
|
|
32
|
+
expect(prepareJob).toContain('contents: read');
|
|
33
|
+
expect(prepareJob).toContain('persist-credentials: false');
|
|
34
|
+
expect(prepareJob).toContain('actions/checkout@11d5960a326750d5838078e36cf38b85af677262');
|
|
35
|
+
expect(commitJob).toContain('contents: write');
|
|
36
|
+
expect(commitJob).not.toContain('actions/checkout');
|
|
37
|
+
expect(commitJob).not.toContain('\n run: |');
|
|
38
|
+
});
|
|
39
|
+
test('uses the exact lock-selected provider without package scripts', () => {
|
|
40
|
+
expect(workflow).toContain("resolveVersion('@ankhorage/devtools')");
|
|
41
|
+
expect(workflow).toContain('"@ankhorage/ankh": process.env.ANKH_VERSION');
|
|
42
|
+
expect(workflow).toContain('"@ankhorage/devtools": process.env.DEVTOOLS_VERSION');
|
|
43
|
+
expect(workflow).toContain('package.json and bun.lock must select the same exact root');
|
|
44
|
+
expect(workflow).toContain('--ignore-scripts --lockfile-only');
|
|
45
|
+
expect(workflow).toContain('--registry=https://registry.npmjs.org');
|
|
46
|
+
expect(workflow).not.toContain('@latest');
|
|
47
|
+
});
|
|
48
|
+
test('supports the real Surface shape with a canonical exact CLI fallback', () => {
|
|
49
|
+
expect(resolveFixtureVersion(surfaceManifest, surfaceLock, '@ankhorage/ankh', '0.4.0')).toBe('0.4.0');
|
|
50
|
+
expect(resolveFixtureVersion(surfaceManifest, surfaceLock, '@ankhorage/devtools')).toBe('1.7.0');
|
|
51
|
+
expect(workflow).toContain("CANONICAL_ANKH_VERSION: '0.4.0'");
|
|
52
|
+
expect(workflow).toContain('if (declarations.length === 0 && fallbackVersion)');
|
|
53
|
+
expect(workflow).toContain("resolveVersion('@ankhorage/ankh', process.env.CANONICAL_ANKH_VERSION)");
|
|
54
|
+
});
|
|
55
|
+
test('requires a byte-stable second sync and current status', () => {
|
|
56
|
+
const syncCommand = '"$RUNNER_TEMP/toolchain/node_modules/.bin/ankh" devtools sync .';
|
|
57
|
+
expect(workflow.split(syncCommand)).toHaveLength(3);
|
|
58
|
+
expect(workflow).toContain('test "$first_hash" = "$second_hash"');
|
|
59
|
+
expect(workflow).toContain('"$RUNNER_TEMP/toolchain/node_modules/.bin/ankh" devtools status .');
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
function resolveFixtureVersion(manifest, lock, name, fallbackVersion) {
|
|
63
|
+
const sections = [
|
|
64
|
+
manifest.dependencies,
|
|
65
|
+
manifest.devDependencies,
|
|
66
|
+
manifest.optionalDependencies,
|
|
67
|
+
manifest.peerDependencies,
|
|
68
|
+
];
|
|
69
|
+
const declarations = sections
|
|
70
|
+
.map((section) => Object.entries(section ?? {}).find(([candidate]) => candidate === name)?.[1])
|
|
71
|
+
.filter((value) => typeof value === 'string');
|
|
72
|
+
if (declarations.length === 0 && fallbackVersion) {
|
|
73
|
+
if (!/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/.test(fallbackVersion)) {
|
|
74
|
+
throw new Error('The fixture fallback must be an exact version.');
|
|
75
|
+
}
|
|
76
|
+
return fallbackVersion;
|
|
77
|
+
}
|
|
78
|
+
const escaped = name.replace(/[.*+?^$()|[\]\\]/g, '\\$&');
|
|
79
|
+
const match = new RegExp('^ "' + escaped + '": \\["' + escaped + '@([^"]+)"', 'm').exec(lock);
|
|
80
|
+
const declaration = declarations.length === 1 ? declarations.at(0) : undefined;
|
|
81
|
+
const declared = typeof declaration === 'string'
|
|
82
|
+
? /^[~^]?(\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?)$/.exec(declaration)
|
|
83
|
+
: null;
|
|
84
|
+
const selectedVersion = match?.at(1);
|
|
85
|
+
const declaredVersion = declared?.at(1);
|
|
86
|
+
if (typeof selectedVersion !== 'string' || declaredVersion !== selectedVersion) {
|
|
87
|
+
throw new Error('The fixture does not select one exact root ' + name + ' version.');
|
|
88
|
+
}
|
|
89
|
+
return selectedVersion;
|
|
90
|
+
}
|
|
91
|
+
describe('trusted Renovate write boundary', () => {
|
|
92
|
+
test('limits derived writes to the Devtools-managed inventory', () => {
|
|
93
|
+
for (const path of [
|
|
94
|
+
'.github/workflows/ci.yml',
|
|
95
|
+
'.github/workflows/release.yml',
|
|
96
|
+
'.github/workflows/renovate.yml',
|
|
97
|
+
'.prettierrc.js',
|
|
98
|
+
'.vscode/extensions.json',
|
|
99
|
+
'.vscode/settings.json',
|
|
100
|
+
'bun.lock',
|
|
101
|
+
'eslint.config.mjs',
|
|
102
|
+
'eslint.local.config.mjs',
|
|
103
|
+
'knip.config.ts',
|
|
104
|
+
'package.json',
|
|
105
|
+
'prettier.local.config.js',
|
|
106
|
+
]) {
|
|
107
|
+
expect(workflow).toContain("'" + path + "'");
|
|
108
|
+
}
|
|
109
|
+
expect(workflow).not.toContain("'.github/workflows/studio-acceptance.yml'");
|
|
110
|
+
expect(workflow).toContain('Devtools sync changed an unexpected path:');
|
|
111
|
+
expect(workflow).toContain('Devtools sync created an unexpected path:');
|
|
112
|
+
});
|
|
113
|
+
test('commits through the Git API and revalidates the exact commit', () => {
|
|
114
|
+
expect(workflow).toContain('github.rest.git.createBlob');
|
|
115
|
+
expect(workflow).toContain('github.rest.git.getCommit');
|
|
116
|
+
expect(workflow).toContain('github.rest.git.createTree');
|
|
117
|
+
expect(workflow).toContain('github.rest.git.createCommit');
|
|
118
|
+
expect(workflow).toContain('github.rest.git.updateRef');
|
|
119
|
+
expect(workflow).toContain("workflow_id: 'ci.yml'");
|
|
120
|
+
expect(workflow).toContain('if (currentContent !== content)');
|
|
121
|
+
});
|
|
122
|
+
test('creates release metadata for Devtools-owned dependency updates', () => {
|
|
123
|
+
expect(workflow).toContain("const isDevtoolsOwner = owner + '/' + repo === 'ankhorage/devtools';");
|
|
124
|
+
expect(workflow).toContain('Update Devtools-owned dependencies:');
|
|
125
|
+
expect(workflow).toContain("changed.push({ name: 'bun', section: 'packageManager' })");
|
|
126
|
+
});
|
|
127
|
+
test('pins every third-party action by immutable commit', () => {
|
|
128
|
+
const uses = [...workflow.matchAll(/^\s*uses: ([^\s#]+)/gm)].map((match) => match[1]);
|
|
129
|
+
expect(uses.length).toBeGreaterThan(0);
|
|
130
|
+
for (const action of uses) {
|
|
131
|
+
expect(action).toMatch(/@[0-9a-f]{40}$/);
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
});
|
|
135
|
+
//# sourceMappingURL=changeset-workflow.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"changeset-workflow.test.js","sourceRoot":"","sources":["../src/changeset-workflow.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"default.test.d.ts","sourceRoot":"","sources":["../src/default.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import { readFileSync } from 'node:fs';
|
|
2
|
+
import { describe, expect, test } from 'bun:test';
|
|
3
|
+
const consumerPreset = readPreset('../default.json');
|
|
4
|
+
const devtoolsOwnerPreset = readPreset('../devtools-owner.json');
|
|
5
|
+
describe('consumer preset', () => {
|
|
6
|
+
test('publishes the canonical default-deny policy at the repository root', () => {
|
|
7
|
+
expect(consumerPreset).toMatchObject({
|
|
8
|
+
description: ['Canonical dependency update policy for Ankhorage consumer repositories.'],
|
|
9
|
+
extends: ['config:recommended', ':dependencyDashboard'],
|
|
10
|
+
gitIgnoredAuthors: ['41898282+github-actions[bot]@users.noreply.github.com'],
|
|
11
|
+
labels: ['dependencies'],
|
|
12
|
+
});
|
|
13
|
+
expect(consumerPreset.packageRules[0]).toMatchObject({
|
|
14
|
+
enabled: false,
|
|
15
|
+
matchPackageNames: ['*'],
|
|
16
|
+
});
|
|
17
|
+
});
|
|
18
|
+
test('keeps ordinary Ankhorage packages eligible', () => {
|
|
19
|
+
expect(resolveRules(consumerPreset.packageRules, dependency('@ankhorage/contracts'))).toMatchObject({
|
|
20
|
+
automerge: true,
|
|
21
|
+
enabled: true,
|
|
22
|
+
groupName: 'Ankhorage packages',
|
|
23
|
+
rangeStrategy: 'bump',
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
test('groups the compatible CLI and provider pair', () => {
|
|
27
|
+
for (const packageName of ['@ankhorage/ankh', '@ankhorage/devtools']) {
|
|
28
|
+
expect(resolveRules(consumerPreset.packageRules, dependency(packageName))).toMatchObject({
|
|
29
|
+
automerge: true,
|
|
30
|
+
automergeType: 'pr',
|
|
31
|
+
enabled: true,
|
|
32
|
+
groupName: 'Ankhorage CLI and Devtools toolchain',
|
|
33
|
+
platformAutomerge: false,
|
|
34
|
+
rangeStrategy: 'bump',
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
describe('consumer toolchain safeguards', () => {
|
|
40
|
+
test('requires review for major CLI and provider upgrades', () => {
|
|
41
|
+
expect(resolveRules(consumerPreset.packageRules, dependency('@ankhorage/devtools', { updateType: 'major' }))).toMatchObject({
|
|
42
|
+
automerge: false,
|
|
43
|
+
enabled: true,
|
|
44
|
+
groupName: 'Ankhorage CLI and Devtools toolchain',
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
test('does not independently update consumer-owned Devtools packages', () => {
|
|
48
|
+
expect(resolveRules(consumerPreset.packageRules, dependency('eslint'))).toEqual({
|
|
49
|
+
enabled: false,
|
|
50
|
+
});
|
|
51
|
+
expect(resolveRules(consumerPreset.packageRules, dependency('@types/bun'))).toEqual({
|
|
52
|
+
enabled: false,
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
test('names only the canonical workflow inventory as Devtools-owned', () => {
|
|
56
|
+
const canonicalRule = consumerPreset.packageRules.find((rule) => rule.description.includes('canonical Devtools workflows'));
|
|
57
|
+
expect(canonicalRule).toMatchObject({
|
|
58
|
+
enabled: false,
|
|
59
|
+
matchFileNames: [
|
|
60
|
+
'.github/workflows/ci.yml',
|
|
61
|
+
'.github/workflows/renovate.yml',
|
|
62
|
+
'.github/workflows/release.yml',
|
|
63
|
+
],
|
|
64
|
+
matchManagers: ['github-actions'],
|
|
65
|
+
});
|
|
66
|
+
expect(canonicalRule?.matchFileNames).not.toContain('.github/workflows/studio-acceptance.yml');
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
describe('Devtools-owner preset', () => {
|
|
70
|
+
const effectiveRules = [...consumerPreset.packageRules, ...devtoolsOwnerPreset.packageRules];
|
|
71
|
+
test('composes with the consumer default-deny boundary', () => {
|
|
72
|
+
expect(devtoolsOwnerPreset.extends).toEqual(['./default']);
|
|
73
|
+
});
|
|
74
|
+
test('enables and groups the complete root Bun package toolchain', () => {
|
|
75
|
+
for (const packageName of ['bun', '@types/bun', 'eslint', 'knip', 'prettier', 'typescript']) {
|
|
76
|
+
expect(resolveRules(effectiveRules, dependency(packageName))).toMatchObject({
|
|
77
|
+
automerge: true,
|
|
78
|
+
automergeType: 'pr',
|
|
79
|
+
enabled: true,
|
|
80
|
+
groupName: 'Devtools-owned toolchain',
|
|
81
|
+
platformAutomerge: false,
|
|
82
|
+
rangeStrategy: 'bump',
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
test('requires review for major owner toolchain upgrades', () => {
|
|
87
|
+
expect(resolveRules(effectiveRules, dependency('typescript', { updateType: 'major' }))).toMatchObject({
|
|
88
|
+
automerge: false,
|
|
89
|
+
enabled: true,
|
|
90
|
+
groupName: 'Devtools-owned toolchain',
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
test('does not broaden owner permissions beyond the root package manifest', () => {
|
|
94
|
+
expect(resolveRules(effectiveRules, dependency('eslint', { fileName: 'examples/package.json' }))).toEqual({ enabled: false });
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
function dependency(packageName, overrides = {}) {
|
|
98
|
+
return {
|
|
99
|
+
datasource: 'npm',
|
|
100
|
+
fileName: 'package.json',
|
|
101
|
+
manager: 'bun',
|
|
102
|
+
packageName,
|
|
103
|
+
updateType: 'minor',
|
|
104
|
+
...overrides,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
function matchesRule(rule, candidate) {
|
|
108
|
+
return (matches(rule.matchDatasources, candidate.datasource) &&
|
|
109
|
+
matches(rule.matchFileNames, candidate.fileName) &&
|
|
110
|
+
matches(rule.matchManagers, candidate.manager) &&
|
|
111
|
+
matches(rule.matchPackageNames, candidate.packageName) &&
|
|
112
|
+
matches(rule.matchUpdateTypes, candidate.updateType));
|
|
113
|
+
}
|
|
114
|
+
function matches(patterns, value) {
|
|
115
|
+
if (patterns === undefined)
|
|
116
|
+
return true;
|
|
117
|
+
return patterns.some((pattern) => pattern === '*' ||
|
|
118
|
+
pattern === value ||
|
|
119
|
+
(pattern.endsWith('/**') && value.startsWith(pattern.slice(0, -2))));
|
|
120
|
+
}
|
|
121
|
+
function readPreset(relativePath) {
|
|
122
|
+
return JSON.parse(readFileSync(new URL(relativePath, import.meta.url), 'utf8'));
|
|
123
|
+
}
|
|
124
|
+
function resolveRules(rules, candidate) {
|
|
125
|
+
return rules
|
|
126
|
+
.filter((rule) => matchesRule(rule, candidate))
|
|
127
|
+
.reduce((resolved, rule) => ({
|
|
128
|
+
...resolved,
|
|
129
|
+
...(rule.automerge === undefined ? {} : { automerge: rule.automerge }),
|
|
130
|
+
...(rule.automergeType === undefined ? {} : { automergeType: rule.automergeType }),
|
|
131
|
+
...(rule.enabled === undefined ? {} : { enabled: rule.enabled }),
|
|
132
|
+
...(rule.groupName === undefined ? {} : { groupName: rule.groupName }),
|
|
133
|
+
...(rule.platformAutomerge === undefined
|
|
134
|
+
? {}
|
|
135
|
+
: { platformAutomerge: rule.platformAutomerge }),
|
|
136
|
+
...(rule.rangeStrategy === undefined ? {} : { rangeStrategy: rule.rangeStrategy }),
|
|
137
|
+
}), {});
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=default.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"default.test.js","sourceRoot":"","sources":["../src/default.test.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canonical Renovate policy and future automation provider for Ankhorage repositories.
|
|
3
|
+
*
|
|
4
|
+
* The shared preset is published as `default.json` and consumed from GitHub. The TypeScript
|
|
5
|
+
* public API is intentionally reserved for the future `ankh renovate` provider.
|
|
6
|
+
*/
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canonical Renovate policy and future automation provider for Ankhorage repositories.
|
|
3
|
+
*
|
|
4
|
+
* The shared preset is published as `default.json` and consumed from GitHub. The TypeScript
|
|
5
|
+
* public API is intentionally reserved for the future `ankh renovate` provider.
|
|
6
|
+
*/
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAExC,OAAO,KAAK,UAAU,MAAM,YAAY,CAAC;AAEzC,IAAI,CAAC,wDAAwD,EAAE,GAAG,EAAE;IAClE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AAC9C,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/***
|
|
2
|
+
* Devtools owner repository configuration
|
|
3
|
+
*
|
|
4
|
+
* Loads the owner-specific policy that enables and groups the root Bun, ESLint, Knip, Prettier,
|
|
5
|
+
* TypeScript, and validation/publishing dependencies maintained by @ankhorage/devtools. Major
|
|
6
|
+
* upgrades remain reviewable. Do not use this profile in normal consumer repositories.
|
|
7
|
+
*
|
|
8
|
+
* @usage
|
|
9
|
+
* @readme
|
|
10
|
+
*/
|
|
11
|
+
{
|
|
12
|
+
$schema: 'https://docs.renovatebot.com/renovate-schema.json',
|
|
13
|
+
extends: ['github>ankhorage/renovate:devtools-owner'],
|
|
14
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/***
|
|
2
|
+
* Repository configuration
|
|
3
|
+
*
|
|
4
|
+
* Loads the normal consumer policy from its default branch. The policy keeps Devtools-owned
|
|
5
|
+
* packages and canonical workflows out of independent Renovate updates, and groups compatible
|
|
6
|
+
* @ankhorage/ankh and @ankhorage/devtools releases for the trusted automatic synchronization
|
|
7
|
+
* workflow. The workflow runs the exact lock-selected Devtools provider with either the consumer's
|
|
8
|
+
* lock-selected Ankh CLI or its own exact canonical CLI pin, requires byte stability, and commits
|
|
9
|
+
* the complete managed result without a manual repository sync.
|
|
10
|
+
*
|
|
11
|
+
* @usage
|
|
12
|
+
* @readme
|
|
13
|
+
*/
|
|
14
|
+
{
|
|
15
|
+
$schema: 'https://docs.renovatebot.com/renovate-schema.json',
|
|
16
|
+
extends: ['github>ankhorage/renovate'],
|
|
17
|
+
}
|