ras-stack 0.6.0 → 0.7.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/README.md +26 -0
- package/dist/policy/cli.d.ts +2 -0
- package/dist/policy/cli.js +21 -0
- package/dist/policy/cli.js.map +1 -0
- package/dist/policy/index.d.ts +13 -0
- package/dist/policy/index.js +102 -0
- package/dist/policy/index.js.map +1 -0
- package/package.json +12 -2
package/README.md
CHANGED
|
@@ -182,6 +182,32 @@ Extend the supplied configuration and override anything specific to the applicat
|
|
|
182
182
|
|
|
183
183
|
TypeScript bases are also available at `ras-stack/config/typescript/browser` and `ras-stack/config/typescript/library`.
|
|
184
184
|
|
|
185
|
+
## Repository policy
|
|
186
|
+
|
|
187
|
+
Policy files which cannot inherit can stay committed while being checked against the shared source. Select only the policies a repository wants in `ras-stack.policy.json`:
|
|
188
|
+
|
|
189
|
+
```json
|
|
190
|
+
{
|
|
191
|
+
"changesets": {
|
|
192
|
+
"overrides": {
|
|
193
|
+
"access": "restricted",
|
|
194
|
+
"privatePackages": { "version": true, "tag": true }
|
|
195
|
+
}
|
|
196
|
+
},
|
|
197
|
+
"dependabot": true,
|
|
198
|
+
"pnpm": {}
|
|
199
|
+
}
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
Then generate or verify the effective files:
|
|
203
|
+
|
|
204
|
+
```sh
|
|
205
|
+
pnpm exec ras-stack-policy sync
|
|
206
|
+
pnpm exec ras-stack-policy check
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
`changesets` and `dependabot` produce deterministic complete files, with optional deep overrides. The pnpm policy changes only `minimumReleaseAge` in the existing `pnpm-workspace.yaml`, preserving local package layout, build approvals, dependency overrides, exclusions, and comments. Its default is seven days; set `"minimumReleaseAge": 0` only as an explicit repository exception. Commit both the selection and generated files so policy changes remain visible in review.
|
|
210
|
+
|
|
185
211
|
## GitHub Actions
|
|
186
212
|
|
|
187
213
|
The JavaScript setup action reads the Node version from `engines.node` and the pnpm version from `packageManager` in the consuming repository:
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { syncRepositoryPolicy } from './index.js';
|
|
3
|
+
const command = process.argv[2];
|
|
4
|
+
if (command !== 'check' && command !== 'sync') {
|
|
5
|
+
console.error('usage: ras-stack-policy <check|sync>');
|
|
6
|
+
process.exitCode = 2;
|
|
7
|
+
}
|
|
8
|
+
else {
|
|
9
|
+
const changed = await syncRepositoryPolicy(process.cwd(), command === 'check' ? 'check' : 'write');
|
|
10
|
+
if (command === 'check' && changed.length > 0) {
|
|
11
|
+
for (const path of changed)
|
|
12
|
+
console.error(`policy drift: ${path}`);
|
|
13
|
+
console.error('run ras-stack-policy sync and commit the result');
|
|
14
|
+
process.exitCode = 1;
|
|
15
|
+
}
|
|
16
|
+
else if (command === 'sync') {
|
|
17
|
+
for (const path of changed)
|
|
18
|
+
console.log(`updated ${path}`);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/policy/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAEjD,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AAC/B,IAAI,OAAO,KAAK,OAAO,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;IAC9C,OAAO,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAA;IACrD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAA;AACtB,CAAC;KAAM,CAAC;IACN,MAAM,OAAO,GAAG,MAAM,oBAAoB,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA;IAClG,IAAI,OAAO,KAAK,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9C,KAAK,MAAM,IAAI,IAAI,OAAO;YAAE,OAAO,CAAC,KAAK,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAA;QAClE,OAAO,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAA;QAChE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAA;IACtB,CAAC;SAAM,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QAC9B,KAAK,MAAM,IAAI,IAAI,OAAO;YAAE,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC,CAAA;IAC5D,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
type PolicySelection = boolean | {
|
|
2
|
+
overrides?: Record<string, unknown>;
|
|
3
|
+
};
|
|
4
|
+
export type RepositoryPolicy = {
|
|
5
|
+
changesets?: PolicySelection;
|
|
6
|
+
dependabot?: PolicySelection;
|
|
7
|
+
pnpm?: false | {
|
|
8
|
+
minimumReleaseAge?: number;
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
export declare function syncRepositoryPolicy(root: string, mode: 'check' | 'write'): Promise<string[]>;
|
|
12
|
+
export declare function renderedPolicyFiles(root: string, config: RepositoryPolicy): Promise<Map<string, string>>;
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { mkdir, readFile, writeFile } from 'node:fs/promises';
|
|
2
|
+
import { dirname, join } from 'node:path';
|
|
3
|
+
import { parseDocument, stringify } from 'yaml';
|
|
4
|
+
const changesetsPolicy = {
|
|
5
|
+
$schema: 'https://unpkg.com/@changesets/config@3.1.2/schema.json',
|
|
6
|
+
changelog: '@changesets/cli/changelog',
|
|
7
|
+
commit: false,
|
|
8
|
+
fixed: [],
|
|
9
|
+
linked: [],
|
|
10
|
+
access: 'public',
|
|
11
|
+
baseBranch: 'main',
|
|
12
|
+
updateInternalDependencies: 'patch',
|
|
13
|
+
ignore: [],
|
|
14
|
+
};
|
|
15
|
+
const dependabotPolicy = {
|
|
16
|
+
version: 2,
|
|
17
|
+
updates: [
|
|
18
|
+
{
|
|
19
|
+
'package-ecosystem': 'npm',
|
|
20
|
+
directory: '/',
|
|
21
|
+
schedule: { interval: 'weekly' },
|
|
22
|
+
cooldown: { 'default-days': 7 },
|
|
23
|
+
groups: { 'javascript-dependencies': { patterns: ['*'] } },
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
'package-ecosystem': 'github-actions',
|
|
27
|
+
directory: '/',
|
|
28
|
+
schedule: { interval: 'weekly' },
|
|
29
|
+
cooldown: { 'default-days': 7 },
|
|
30
|
+
},
|
|
31
|
+
],
|
|
32
|
+
};
|
|
33
|
+
export async function syncRepositoryPolicy(root, mode) {
|
|
34
|
+
const config = repositoryPolicy(await readFile(join(root, 'ras-stack.policy.json'), 'utf8'));
|
|
35
|
+
const files = await renderedPolicyFiles(root, config);
|
|
36
|
+
const compared = await Promise.all([...files].map(async ([path, expected]) => {
|
|
37
|
+
const absolute = join(root, path);
|
|
38
|
+
const actual = await readFile(absolute, 'utf8').catch(() => undefined);
|
|
39
|
+
if (actual === expected)
|
|
40
|
+
return undefined;
|
|
41
|
+
if (mode === 'write') {
|
|
42
|
+
await mkdir(dirname(absolute), { recursive: true });
|
|
43
|
+
await writeFile(absolute, expected);
|
|
44
|
+
}
|
|
45
|
+
return path;
|
|
46
|
+
}));
|
|
47
|
+
return compared.filter((path) => path !== undefined);
|
|
48
|
+
}
|
|
49
|
+
export async function renderedPolicyFiles(root, config) {
|
|
50
|
+
const files = new Map();
|
|
51
|
+
if (config.changesets) {
|
|
52
|
+
files.set('.changeset/config.json', `${JSON.stringify(selectedPolicy(changesetsPolicy, config.changesets), null, 2)}\n`);
|
|
53
|
+
}
|
|
54
|
+
if (config.dependabot) {
|
|
55
|
+
files.set('.github/dependabot.yml', stringify(selectedPolicy(dependabotPolicy, config.dependabot), { lineWidth: 0, singleQuote: true }));
|
|
56
|
+
}
|
|
57
|
+
if (config.pnpm) {
|
|
58
|
+
const path = join(root, 'pnpm-workspace.yaml');
|
|
59
|
+
const document = parseDocument(await readFile(path, 'utf8').catch(() => ''));
|
|
60
|
+
document.set('minimumReleaseAge', config.pnpm.minimumReleaseAge ?? 10_080);
|
|
61
|
+
files.set('pnpm-workspace.yaml', document.toString({ lineWidth: 0 }));
|
|
62
|
+
}
|
|
63
|
+
return files;
|
|
64
|
+
}
|
|
65
|
+
function repositoryPolicy(source) {
|
|
66
|
+
const value = JSON.parse(source);
|
|
67
|
+
if (!plainObject(value))
|
|
68
|
+
throw new Error('ras-stack.policy.json must contain an object');
|
|
69
|
+
for (const name of ['changesets', 'dependabot'])
|
|
70
|
+
validateSelection(name, value[name]);
|
|
71
|
+
const pnpm = value.pnpm;
|
|
72
|
+
if (pnpm !== undefined && pnpm !== false) {
|
|
73
|
+
if (!plainObject(pnpm))
|
|
74
|
+
throw new Error('pnpm policy must be false or an object');
|
|
75
|
+
const age = pnpm.minimumReleaseAge;
|
|
76
|
+
if (age !== undefined && (typeof age !== 'number' || !Number.isInteger(age) || age < 0)) {
|
|
77
|
+
throw new Error('pnpm.minimumReleaseAge must be a non-negative integer');
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return value;
|
|
81
|
+
}
|
|
82
|
+
function validateSelection(name, value) {
|
|
83
|
+
if (value === undefined || typeof value === 'boolean')
|
|
84
|
+
return;
|
|
85
|
+
if (!plainObject(value) || (value.overrides !== undefined && !plainObject(value.overrides))) {
|
|
86
|
+
throw new Error(`${name} policy must be a boolean or an object with overrides`);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
function selectedPolicy(base, selection) {
|
|
90
|
+
return selection === true ? base : deepMerge(base, selection.overrides ?? {});
|
|
91
|
+
}
|
|
92
|
+
function deepMerge(base, overrides) {
|
|
93
|
+
return Object.fromEntries([...new Set([...Object.keys(base), ...Object.keys(overrides)])].map((key) => {
|
|
94
|
+
const left = base[key];
|
|
95
|
+
const right = overrides[key];
|
|
96
|
+
return [key, plainObject(left) && plainObject(right) ? deepMerge(left, right) : right === undefined ? left : right];
|
|
97
|
+
}));
|
|
98
|
+
}
|
|
99
|
+
function plainObject(value) {
|
|
100
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/policy/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ras-stack",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.0",
|
|
4
4
|
"description": "Composable full-stack primitives shared across Richard Solomou's applications.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"authentication",
|
|
@@ -16,6 +16,9 @@
|
|
|
16
16
|
"type": "git",
|
|
17
17
|
"url": "git+https://github.com/richardsolomou/ras-stack.git"
|
|
18
18
|
},
|
|
19
|
+
"bin": {
|
|
20
|
+
"ras-stack-policy": "./dist/policy/cli.js"
|
|
21
|
+
},
|
|
19
22
|
"files": [
|
|
20
23
|
"dist",
|
|
21
24
|
"config"
|
|
@@ -31,6 +34,10 @@
|
|
|
31
34
|
"types": "./dist/email/index.d.ts",
|
|
32
35
|
"default": "./dist/email/index.js"
|
|
33
36
|
},
|
|
37
|
+
"./policy": {
|
|
38
|
+
"types": "./dist/policy/index.d.ts",
|
|
39
|
+
"default": "./dist/policy/index.js"
|
|
40
|
+
},
|
|
34
41
|
"./realtime": {
|
|
35
42
|
"types": "./dist/realtime/index.d.ts",
|
|
36
43
|
"default": "./dist/realtime/index.js"
|
|
@@ -67,9 +74,12 @@
|
|
|
67
74
|
"format": "oxfmt --write .",
|
|
68
75
|
"format:check": "oxfmt --check .",
|
|
69
76
|
"test": "vitest run",
|
|
70
|
-
"check": "pnpm format:check && pnpm lint && pnpm config:check && pnpm typecheck && pnpm test && pnpm build",
|
|
77
|
+
"check": "pnpm format:check && pnpm lint && pnpm config:check && pnpm typecheck && pnpm test && pnpm build && node dist/policy/cli.js check",
|
|
71
78
|
"version-packages": "changeset version"
|
|
72
79
|
},
|
|
80
|
+
"dependencies": {
|
|
81
|
+
"yaml": "^2.8.2"
|
|
82
|
+
},
|
|
73
83
|
"devDependencies": {
|
|
74
84
|
"@changesets/cli": "^2.31.1",
|
|
75
85
|
"@tanstack/react-query": "^5.101.4",
|