@jakubmazanec/carson-templates 7.0.0 → 7.1.0-unstable.f3a920ed
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/build/constants.js +4 -0
- package/build/constants.js.map +2 -2
- package/package.json +2 -1
- package/source/constants.ts +4 -0
- package/templates/workspace/.github/tools/create-dependencies-changeset.ts.ejs +209 -0
- package/templates/workspace/.github/workflows/update-pull-request.yaml.ejs +1 -161
- package/templates/workspace/package.json.ejs +5 -5
- package/templates/workspace/tsconfig.json.ejs +1 -1
- package/templates/workspace/tsconfig.typecheck.json.ejs +1 -1
package/build/constants.js
CHANGED
|
@@ -123,6 +123,7 @@ export const DEPENDENCY_VERSIONS = {
|
|
|
123
123
|
"@testing-library/react": "^16.0.0",
|
|
124
124
|
"@types/lodash": "^4.0.0",
|
|
125
125
|
"@types/react": "^19.0.0",
|
|
126
|
+
"@types/semver": "^7.0.0",
|
|
126
127
|
"@types/react-dom": "^19.0.0",
|
|
127
128
|
"@vitest/coverage-v8": "^3.0.0",
|
|
128
129
|
chromatic: "^13.0.0",
|
|
@@ -131,6 +132,7 @@ export const DEPENDENCY_VERSIONS = {
|
|
|
131
132
|
"del-cli": "^6.0.0",
|
|
132
133
|
esbuild: "^0.24.0",
|
|
133
134
|
eslint: "^9.0.0",
|
|
135
|
+
execa: "^9.0.0",
|
|
134
136
|
"happy-dom": "^18.0.0",
|
|
135
137
|
isbot: "^5.0.0",
|
|
136
138
|
lodash: "^4.0.0",
|
|
@@ -141,9 +143,11 @@ export const DEPENDENCY_VERSIONS = {
|
|
|
141
143
|
react: "^19.0.0",
|
|
142
144
|
"react-dom": "^19.0.0",
|
|
143
145
|
"react-router": "^7.0.0",
|
|
146
|
+
semver: "^7.0.0",
|
|
144
147
|
storybook: "^9.0.0",
|
|
145
148
|
tailwindcss: "^4.0.0",
|
|
146
149
|
"@tailwindcss/vite": "^4.0.0",
|
|
150
|
+
tsx: "^4.0.0",
|
|
147
151
|
turbo: "^2.0.0",
|
|
148
152
|
typedoc: "^0.28.0",
|
|
149
153
|
"typedoc-plugin-markdown": "^4.0.0",
|
package/build/constants.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../source/constants.ts"],
|
|
4
|
-
"sourcesContent": ["import fs from 'node:fs';\nimport {createRequire} from 'node:module';\nimport semver from 'semver';\n\nexport const AUTHOR = 'Jakub Mazanec <jakub@mazanec.dev>';\n\nexport const BUILD_DIRECTORY = 'build';\nexport const STORYBOOK_BUILD_DIRECTORY = 'storybook-static';\nexport const SOURCE_DIRECTORY = 'source';\n\nexport const APP_PORT = 5000;\n\nexport const CARSON_PACKAGE_NAME = '@jakubmazanec/carson';\nexport const TEMPLATE_PACKAGE_NAME = '@jakubmazanec/carson-templates';\nexport const LINTER_CONFIG_PACKAGE_NAME = '@jakubmazanec/eslint-config';\nexport const CHANGELOG_PACKAGE_NAME = '@jakubmazanec/changesets-changelog';\n\nexport const MAIN_BRANCH_NAMES = new Set(['main', 'master']);\nexport const DEVELOPMENT_BRANCH_NAMES = new Set(['dev', 'develop', 'development']);\n\nexport const LINT_IGNORES = [\n '.cache/**',\n '.turbo/**',\n 'bin/**',\n 'coverage/**',\n 'node_modules/**',\n 'public/**',\n '**/*.d.ts',\n '**/*.json',\n '**/*.md',\n '**/*.mdx',\n `${BUILD_DIRECTORY}/**`,\n].sort();\n\nexport const FORMAT_IGNORE_PATTERNS = [\n '.cache/',\n '.turbo/',\n 'coverage/',\n 'node_modules/',\n 'public/',\n 'npm-shrinkwrap.json',\n 'package-lock.json',\n 'CHANGELOG.md',\n 'LICENSE.md',\n `${BUILD_DIRECTORY}/`,\n].sort();\n\nexport const ECMASCRIPT_VERSION = 2024;\n\nexport const TSCONFIG_COMPILER_OPTIONS = {\n allowSyntheticDefaultImports: true,\n composite: true,\n exactOptionalPropertyTypes: true,\n forceConsistentCasingInFileNames: true,\n isolatedModules: true,\n jsx: 'react-jsx',\n lib: ['dom', 'dom.iterable', `es${ECMASCRIPT_VERSION}`],\n module: 'node16',\n moduleResolution: 'node16',\n noEmitOnError: true,\n noImplicitOverride: true,\n noImplicitReturns: true,\n noUncheckedIndexedAccess: true,\n skipLibCheck: true,\n strict: true,\n target: `es${ECMASCRIPT_VERSION}`,\n};\n\nexport const PRETTIER_OPTIONS = {\n arrowParens: 'always',\n bracketSameLine: false,\n bracketSpacing: false,\n embeddedLanguageFormatting: 'auto',\n experimentalTernaries: true,\n htmlWhitespaceSensitivity: 'css',\n jsxSingleQuote: false,\n printWidth: 100,\n proseWrap: 'always',\n quoteProps: 'as-needed',\n requirePragma: false,\n semi: true,\n singleQuote: true,\n trailingComma: 'all',\n // TODO: remove when this is fixed: https://github.com/prettier/prettier/issues/15956\n overrides: [\n {\n files: ['tsconfig.json'],\n options: {\n trailingComma: 'none',\n },\n },\n ],\n};\n\nexport const TYPEDOC_CONFIG = {\n plugin: 'typedoc-plugin-markdown',\n entryPoints: [`./${SOURCE_DIRECTORY}/main.ts`],\n out: 'docs',\n readme: 'none',\n githubPages: false,\n hideBreadcrumbs: true,\n};\n\n// dependencies\nlet require = createRequire(import.meta.url);\nlet carsonPackageVersion =\n semver\n .minVersion(\n (\n JSON.parse(\n fs.readFileSync(require.resolve(`${TEMPLATE_PACKAGE_NAME}/package.json`), {\n encoding: 'utf8',\n }),\n ) as {peerDependencies: Record<string, string>}\n ).peerDependencies[CARSON_PACKAGE_NAME] ?? '^1.0.0',\n )\n ?.format() ?? '1.0.0';\nlet isCarsonPackageVersionPrerelease = !!semver.prerelease(carsonPackageVersion)?.length;\nlet templatesPackageVersion = (\n JSON.parse(\n fs.readFileSync(require.resolve(`${TEMPLATE_PACKAGE_NAME}/package.json`), {\n encoding: 'utf8',\n }),\n ) as {version: string}\n).version;\nlet isTemplatesPackageVersionPrerelease = !!semver.prerelease(templatesPackageVersion)?.length;\n\nexport const DEPENDENCY_VERSIONS: Record<string, string> = {\n [CARSON_PACKAGE_NAME]:\n isCarsonPackageVersionPrerelease ? carsonPackageVersion : `^${carsonPackageVersion}`,\n [TEMPLATE_PACKAGE_NAME]:\n isTemplatesPackageVersionPrerelease ? templatesPackageVersion : `^${templatesPackageVersion}`,\n [CHANGELOG_PACKAGE_NAME]: '^2.0.0',\n [LINTER_CONFIG_PACKAGE_NAME]: '^4.0.0',\n\n '@changesets/cli': '^2.0.0',\n '@chromatic-com/storybook': '^4.0.0',\n '@react-router/dev': '^7.0.0',\n '@react-router/fs-routes': '^7.0.0',\n '@react-router/node': '^7.0.0',\n '@react-router/serve': '^7.0.0',\n '@storybook/addon-links': '^9.0.0',\n '@storybook/addon-docs': '^9.0.0',\n '@storybook/react-vite': '^9.0.0',\n '@testing-library/jest-dom': '^6.0.0',\n '@testing-library/react': '^16.0.0',\n '@types/lodash': '^4.0.0',\n '@types/react': '^19.0.0',\n '@types/react-dom': '^19.0.0',\n '@vitest/coverage-v8': '^3.0.0',\n chromatic: '^13.0.0',\n concurrently: '^9.0.0',\n 'cross-env': '^10.0.0',\n 'del-cli': '^6.0.0',\n esbuild: '^0.24.0',\n eslint: '^9.0.0',\n 'happy-dom': '^18.0.0',\n isbot: '^5.0.0',\n lodash: '^4.0.0',\n 'patch-package': '^8.0.0',\n prettier: '^3.0.0',\n 'prettier-plugin-packagejson': '^2.0.0',\n 'prettier-plugin-tailwindcss': '^0.6.0',\n react: '^19.0.0',\n 'react-dom': '^19.0.0',\n 'react-router': '^7.0.0',\n storybook: '^9.0.0',\n tailwindcss: '^4.0.0',\n '@tailwindcss/vite': '^4.0.0',\n turbo: '^2.0.0',\n typedoc: '^0.28.0',\n 'typedoc-plugin-markdown': '^4.0.0',\n typescript: '^5.0.0',\n vite: '^7.0.0',\n vitest: '^3.0.0',\n\n node: '^24.0.0',\n '@types/node': '^24.0.0',\n npm: '^11.0.0',\n\n gel: '^6.7.0',\n};\n\n// commands\nexport const FORMAT_COMMAND = 'prettier . --write --ignore-unknown';\nexport const TEST_COMMAND = 'vitest run --coverage --passWithNoTests';\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import fs from 'node:fs';\nimport {createRequire} from 'node:module';\nimport semver from 'semver';\n\nexport const AUTHOR = 'Jakub Mazanec <jakub@mazanec.dev>';\n\nexport const BUILD_DIRECTORY = 'build';\nexport const STORYBOOK_BUILD_DIRECTORY = 'storybook-static';\nexport const SOURCE_DIRECTORY = 'source';\n\nexport const APP_PORT = 5000;\n\nexport const CARSON_PACKAGE_NAME = '@jakubmazanec/carson';\nexport const TEMPLATE_PACKAGE_NAME = '@jakubmazanec/carson-templates';\nexport const LINTER_CONFIG_PACKAGE_NAME = '@jakubmazanec/eslint-config';\nexport const CHANGELOG_PACKAGE_NAME = '@jakubmazanec/changesets-changelog';\n\nexport const MAIN_BRANCH_NAMES = new Set(['main', 'master']);\nexport const DEVELOPMENT_BRANCH_NAMES = new Set(['dev', 'develop', 'development']);\n\nexport const LINT_IGNORES = [\n '.cache/**',\n '.turbo/**',\n 'bin/**',\n 'coverage/**',\n 'node_modules/**',\n 'public/**',\n '**/*.d.ts',\n '**/*.json',\n '**/*.md',\n '**/*.mdx',\n `${BUILD_DIRECTORY}/**`,\n].sort();\n\nexport const FORMAT_IGNORE_PATTERNS = [\n '.cache/',\n '.turbo/',\n 'coverage/',\n 'node_modules/',\n 'public/',\n 'npm-shrinkwrap.json',\n 'package-lock.json',\n 'CHANGELOG.md',\n 'LICENSE.md',\n `${BUILD_DIRECTORY}/`,\n].sort();\n\nexport const ECMASCRIPT_VERSION = 2024;\n\nexport const TSCONFIG_COMPILER_OPTIONS = {\n allowSyntheticDefaultImports: true,\n composite: true,\n exactOptionalPropertyTypes: true,\n forceConsistentCasingInFileNames: true,\n isolatedModules: true,\n jsx: 'react-jsx',\n lib: ['dom', 'dom.iterable', `es${ECMASCRIPT_VERSION}`],\n module: 'node16',\n moduleResolution: 'node16',\n noEmitOnError: true,\n noImplicitOverride: true,\n noImplicitReturns: true,\n noUncheckedIndexedAccess: true,\n skipLibCheck: true,\n strict: true,\n target: `es${ECMASCRIPT_VERSION}`,\n};\n\nexport const PRETTIER_OPTIONS = {\n arrowParens: 'always',\n bracketSameLine: false,\n bracketSpacing: false,\n embeddedLanguageFormatting: 'auto',\n experimentalTernaries: true,\n htmlWhitespaceSensitivity: 'css',\n jsxSingleQuote: false,\n printWidth: 100,\n proseWrap: 'always',\n quoteProps: 'as-needed',\n requirePragma: false,\n semi: true,\n singleQuote: true,\n trailingComma: 'all',\n // TODO: remove when this is fixed: https://github.com/prettier/prettier/issues/15956\n overrides: [\n {\n files: ['tsconfig.json'],\n options: {\n trailingComma: 'none',\n },\n },\n ],\n};\n\nexport const TYPEDOC_CONFIG = {\n plugin: 'typedoc-plugin-markdown',\n entryPoints: [`./${SOURCE_DIRECTORY}/main.ts`],\n out: 'docs',\n readme: 'none',\n githubPages: false,\n hideBreadcrumbs: true,\n};\n\n// dependencies\nlet require = createRequire(import.meta.url);\nlet carsonPackageVersion =\n semver\n .minVersion(\n (\n JSON.parse(\n fs.readFileSync(require.resolve(`${TEMPLATE_PACKAGE_NAME}/package.json`), {\n encoding: 'utf8',\n }),\n ) as {peerDependencies: Record<string, string>}\n ).peerDependencies[CARSON_PACKAGE_NAME] ?? '^1.0.0',\n )\n ?.format() ?? '1.0.0';\nlet isCarsonPackageVersionPrerelease = !!semver.prerelease(carsonPackageVersion)?.length;\nlet templatesPackageVersion = (\n JSON.parse(\n fs.readFileSync(require.resolve(`${TEMPLATE_PACKAGE_NAME}/package.json`), {\n encoding: 'utf8',\n }),\n ) as {version: string}\n).version;\nlet isTemplatesPackageVersionPrerelease = !!semver.prerelease(templatesPackageVersion)?.length;\n\nexport const DEPENDENCY_VERSIONS: Record<string, string> = {\n [CARSON_PACKAGE_NAME]:\n isCarsonPackageVersionPrerelease ? carsonPackageVersion : `^${carsonPackageVersion}`,\n [TEMPLATE_PACKAGE_NAME]:\n isTemplatesPackageVersionPrerelease ? templatesPackageVersion : `^${templatesPackageVersion}`,\n [CHANGELOG_PACKAGE_NAME]: '^2.0.0',\n [LINTER_CONFIG_PACKAGE_NAME]: '^4.0.0',\n\n '@changesets/cli': '^2.0.0',\n '@chromatic-com/storybook': '^4.0.0',\n '@react-router/dev': '^7.0.0',\n '@react-router/fs-routes': '^7.0.0',\n '@react-router/node': '^7.0.0',\n '@react-router/serve': '^7.0.0',\n '@storybook/addon-links': '^9.0.0',\n '@storybook/addon-docs': '^9.0.0',\n '@storybook/react-vite': '^9.0.0',\n '@testing-library/jest-dom': '^6.0.0',\n '@testing-library/react': '^16.0.0',\n '@types/lodash': '^4.0.0',\n '@types/react': '^19.0.0',\n '@types/semver': '^7.0.0',\n '@types/react-dom': '^19.0.0',\n '@vitest/coverage-v8': '^3.0.0',\n chromatic: '^13.0.0',\n concurrently: '^9.0.0',\n 'cross-env': '^10.0.0',\n 'del-cli': '^6.0.0',\n esbuild: '^0.24.0',\n eslint: '^9.0.0',\n execa: '^9.0.0',\n 'happy-dom': '^18.0.0',\n isbot: '^5.0.0',\n lodash: '^4.0.0',\n 'patch-package': '^8.0.0',\n prettier: '^3.0.0',\n 'prettier-plugin-packagejson': '^2.0.0',\n 'prettier-plugin-tailwindcss': '^0.6.0',\n react: '^19.0.0',\n 'react-dom': '^19.0.0',\n 'react-router': '^7.0.0',\n semver: '^7.0.0',\n storybook: '^9.0.0',\n tailwindcss: '^4.0.0',\n '@tailwindcss/vite': '^4.0.0',\n tsx: '^4.0.0',\n turbo: '^2.0.0',\n typedoc: '^0.28.0',\n 'typedoc-plugin-markdown': '^4.0.0',\n typescript: '^5.0.0',\n vite: '^7.0.0',\n vitest: '^3.0.0',\n\n node: '^24.0.0',\n '@types/node': '^24.0.0',\n npm: '^11.0.0',\n\n gel: '^6.7.0',\n};\n\n// commands\nexport const FORMAT_COMMAND = 'prettier . --write --ignore-unknown';\nexport const TEST_COMMAND = 'vitest run --coverage --passWithNoTests';\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jakubmazanec/carson-templates",
|
|
3
|
-
"version": "7.0.
|
|
3
|
+
"version": "7.1.0-unstable.f3a920ed",
|
|
4
4
|
"description": "Collection of Carson templates.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -40,6 +40,7 @@
|
|
|
40
40
|
"@types/fs-extra": "^11.0.4",
|
|
41
41
|
"@types/lodash": "^4.17.20",
|
|
42
42
|
"@types/node": "^24.0.4",
|
|
43
|
+
"@types/semver": "^7.7.0",
|
|
43
44
|
"@types/zen-observable": "^0.8.7",
|
|
44
45
|
"@vitest/coverage-v8": "^3.2.4",
|
|
45
46
|
"del-cli": "^6.0.0",
|
package/source/constants.ts
CHANGED
|
@@ -146,6 +146,7 @@ export const DEPENDENCY_VERSIONS: Record<string, string> = {
|
|
|
146
146
|
'@testing-library/react': '^16.0.0',
|
|
147
147
|
'@types/lodash': '^4.0.0',
|
|
148
148
|
'@types/react': '^19.0.0',
|
|
149
|
+
'@types/semver': '^7.0.0',
|
|
149
150
|
'@types/react-dom': '^19.0.0',
|
|
150
151
|
'@vitest/coverage-v8': '^3.0.0',
|
|
151
152
|
chromatic: '^13.0.0',
|
|
@@ -154,6 +155,7 @@ export const DEPENDENCY_VERSIONS: Record<string, string> = {
|
|
|
154
155
|
'del-cli': '^6.0.0',
|
|
155
156
|
esbuild: '^0.24.0',
|
|
156
157
|
eslint: '^9.0.0',
|
|
158
|
+
execa: '^9.0.0',
|
|
157
159
|
'happy-dom': '^18.0.0',
|
|
158
160
|
isbot: '^5.0.0',
|
|
159
161
|
lodash: '^4.0.0',
|
|
@@ -164,9 +166,11 @@ export const DEPENDENCY_VERSIONS: Record<string, string> = {
|
|
|
164
166
|
react: '^19.0.0',
|
|
165
167
|
'react-dom': '^19.0.0',
|
|
166
168
|
'react-router': '^7.0.0',
|
|
169
|
+
semver: '^7.0.0',
|
|
167
170
|
storybook: '^9.0.0',
|
|
168
171
|
tailwindcss: '^4.0.0',
|
|
169
172
|
'@tailwindcss/vite': '^4.0.0',
|
|
173
|
+
tsx: '^4.0.0',
|
|
170
174
|
turbo: '^2.0.0',
|
|
171
175
|
typedoc: '^0.28.0',
|
|
172
176
|
'typedoc-plugin-markdown': '^4.0.0',
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
---
|
|
2
|
+
to: 'tools/scripts/create-dependencies-changeset.mts'
|
|
3
|
+
strategy: overwrite
|
|
4
|
+
---
|
|
5
|
+
/**
|
|
6
|
+
* DO NOT EDIT!
|
|
7
|
+
* This file was autogenerated by Carson.
|
|
8
|
+
* Changes may cause incorrect behavior and will be lost when the file is regenerated.
|
|
9
|
+
*
|
|
10
|
+
* Run `npx carson update workspace` to regenerate.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import {$} from 'execa';
|
|
14
|
+
import _ from 'lodash';
|
|
15
|
+
import {promises as fs} from 'node:fs';
|
|
16
|
+
import path from 'node:path';
|
|
17
|
+
import semver from 'semver';
|
|
18
|
+
|
|
19
|
+
const WORKSPACE_PLACEHOLDER_NAME = '@';
|
|
20
|
+
const WORKSPACE_PACKAGE_JSON_PATH = 'package.json';
|
|
21
|
+
const TEMPLATE_PACKAGE_NAME = '<%- TEMPLATE_PACKAGE_NAME %>';
|
|
22
|
+
|
|
23
|
+
type ProjectDependencyBumps = Map<string, string>;
|
|
24
|
+
type DependencyBumps = Map<string, ProjectDependencyBumps>;
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* A function that returns all proejcts that use Carson.
|
|
28
|
+
*/
|
|
29
|
+
async function getProjectsWithCarson(dir = process.cwd(), result: string[] = []) {
|
|
30
|
+
let entries = await fs.readdir(dir, {withFileTypes: true});
|
|
31
|
+
|
|
32
|
+
for (let entry of entries) {
|
|
33
|
+
let fullPath = path.join(dir, entry.name);
|
|
34
|
+
|
|
35
|
+
if (entry.isDirectory()) {
|
|
36
|
+
if (entry.name === '.carson' && dir !== process.cwd()) {
|
|
37
|
+
let packageJson = JSON.parse(await fs.readFile(path.join(dir, 'package.json'), 'utf8')) as {
|
|
38
|
+
name: string;
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
result.push(packageJson.name);
|
|
42
|
+
} else {
|
|
43
|
+
await getProjectsWithCarson(fullPath, result);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
return result;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* A function that checks if one of the updated dependencies was a major version bump that necessitates manual update of the Carson template package.
|
|
53
|
+
*/
|
|
54
|
+
async function checkCarsonTemplatesPackage(dependencyBumps: DependencyBumps) {
|
|
55
|
+
// eslint-disable-next-line no-constant-condition, @typescript-eslint/no-unnecessary-condition -- this is autogenerated
|
|
56
|
+
if (<%- !workspace.projects.some((project) => project.name === TEMPLATE_PACKAGE_NAME) %>) {
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
let constantsFilePath = '<%- `${workspace.projects.find((project) => project.name === TEMPLATE_PACKAGE_NAME)?.relativePath ?? ''}/source/constants.ts` %>';
|
|
61
|
+
let constantsFile = await fs.readFile(constantsFilePath, 'utf8');
|
|
62
|
+
|
|
63
|
+
for (let [, projectDependencyBumps] of dependencyBumps) {
|
|
64
|
+
if (!projectDependencyBumps.size) {
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
for (let [dependencyName, bump] of projectDependencyBumps) {
|
|
69
|
+
let regexp = new RegExp(
|
|
70
|
+
`(?<=('${_.escapeRegExp(dependencyName)}'|${_.escapeRegExp(dependencyName)}):\\s+')\\^\\d+\\.\\d+\\.\\d+(?='.*$)`,
|
|
71
|
+
'mi',
|
|
72
|
+
);
|
|
73
|
+
let result = regexp.exec(constantsFile);
|
|
74
|
+
|
|
75
|
+
if (result?.[0]) {
|
|
76
|
+
let newMajorVersion = semver.major(semver.minVersion(bump)!);
|
|
77
|
+
let oldMajorVersion = semver.major(semver.minVersion(result[0])!);
|
|
78
|
+
|
|
79
|
+
if (newMajorVersion > oldMajorVersion || dependencyName === 'node') {
|
|
80
|
+
// Node.js is a special case, because it isn't specified in `dependencies` field
|
|
81
|
+
throw new Error(
|
|
82
|
+
`Bumping major version of dependency "${dependencyName}" that is handled by Carson, update of the Carson template package is needed!`,
|
|
83
|
+
);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* A function that creates changesets for projects dependencies update.
|
|
92
|
+
*/
|
|
93
|
+
async function createChangeset(
|
|
94
|
+
getChangesetName: (suffix?: string) => string,
|
|
95
|
+
dependencyBumps: DependencyBumps,
|
|
96
|
+
) {
|
|
97
|
+
for (let [projectName, projectDependencyBumps] of dependencyBumps) {
|
|
98
|
+
if (!projectDependencyBumps.size) {
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
if (projectName !== WORKSPACE_PLACEHOLDER_NAME) {
|
|
103
|
+
console.log('Creating changeset for project:', projectName);
|
|
104
|
+
|
|
105
|
+
let message = '';
|
|
106
|
+
|
|
107
|
+
for (let [dependencyName, dependencyBump] of projectDependencyBumps) {
|
|
108
|
+
message += `Dependency \`${dependencyName}\` updated to version \`${dependencyBump}\`.\n`;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
message = message.replaceAll('\n', ' ');
|
|
112
|
+
|
|
113
|
+
await fs.writeFile(
|
|
114
|
+
getChangesetName(projectName),
|
|
115
|
+
`---\n'${projectName}': patch\n---\n${message.trim()}\n`,
|
|
116
|
+
);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* A function that creates changeset when updating the Carson template package.
|
|
123
|
+
*/
|
|
124
|
+
async function createChangesetForCarsonTemplates(
|
|
125
|
+
getChangesetName: (suffix?: string) => string,
|
|
126
|
+
dependencyBumps: DependencyBumps,
|
|
127
|
+
) {
|
|
128
|
+
console.log('Creating changeset for Carson templates update...');
|
|
129
|
+
|
|
130
|
+
let workspaceDependencyBumps = dependencyBumps.get(WORKSPACE_PLACEHOLDER_NAME);
|
|
131
|
+
|
|
132
|
+
if (workspaceDependencyBumps) {
|
|
133
|
+
let message = `Applies templates from \`${TEMPLATE_PACKAGE_NAME}\` updated to version \`${workspaceDependencyBumps.get(TEMPLATE_PACKAGE_NAME) ?? '?'}\`.\n`;
|
|
134
|
+
|
|
135
|
+
let projects = await getProjectsWithCarson();
|
|
136
|
+
let header = projects.map((projectName) => `'${projectName}': patch`).join('\n');
|
|
137
|
+
|
|
138
|
+
await fs.writeFile(getChangesetName(), `---\n${header}\n---\n${message.trim()}\n`);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* A function that returns workspace and projects and their updated dependencies. based on `git diff`.
|
|
144
|
+
*/
|
|
145
|
+
async function getDependencyBumps(files: string[]): Promise<DependencyBumps> {
|
|
146
|
+
let bumps: DependencyBumps = new Map();
|
|
147
|
+
|
|
148
|
+
for (let file of files) {
|
|
149
|
+
let projectBumps: ProjectDependencyBumps = new Map();
|
|
150
|
+
let {stdout: changes} = await $`git diff HEAD~1 -- ${file}`;
|
|
151
|
+
|
|
152
|
+
for (let change of changes.split('\n')) {
|
|
153
|
+
if (!change.startsWith('+ ')) {
|
|
154
|
+
continue;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
let match = change.match(/"(.*?)"/g);
|
|
158
|
+
|
|
159
|
+
if (match?.[0] && match[1] && semver.validRange(match[1].replaceAll('"', ''))) {
|
|
160
|
+
projectBumps.set(match[0].replaceAll('"', ''), match[1].replaceAll('"', ''));
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
if (file === WORKSPACE_PACKAGE_JSON_PATH && projectBumps.size) {
|
|
165
|
+
bumps.set(WORKSPACE_PLACEHOLDER_NAME, projectBumps);
|
|
166
|
+
} else if (projectBumps.size) {
|
|
167
|
+
let projectName = (JSON.parse(await fs.readFile(file, 'utf8')) as {name: string}).name;
|
|
168
|
+
|
|
169
|
+
bumps.set(projectName, projectBumps);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
return bumps;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
let {stdout: diffOutput} = await $`git diff --name-only HEAD~1`;
|
|
177
|
+
let diffLines = diffOutput.split('\n');
|
|
178
|
+
|
|
179
|
+
if (diffLines.some((diffLine) => diffLine.startsWith('.changeset'))) {
|
|
180
|
+
console.log('Changeset already exists!');
|
|
181
|
+
} else {
|
|
182
|
+
let files = diffLines.filter((file) => file.endsWith('package.json'));
|
|
183
|
+
let {stdout: shortHash} = await $`git rev-parse --short HEAD`;
|
|
184
|
+
let getChangesetName = (suffix?: string) =>
|
|
185
|
+
suffix === undefined ?
|
|
186
|
+
`.changeset/dependencies-update-${shortHash.trim()}.md`
|
|
187
|
+
: `.changeset/dependencies-update-${shortHash.trim()}-${suffix.replaceAll('/', '-')}.md`;
|
|
188
|
+
|
|
189
|
+
let dependencyBumps = await getDependencyBumps(files);
|
|
190
|
+
|
|
191
|
+
console.log('Dependecy bumps:', dependencyBumps);
|
|
192
|
+
|
|
193
|
+
if (dependencyBumps.get(WORKSPACE_PLACEHOLDER_NAME)?.has(TEMPLATE_PACKAGE_NAME)) {
|
|
194
|
+
await createChangesetForCarsonTemplates(getChangesetName, dependencyBumps);
|
|
195
|
+
} else if (
|
|
196
|
+
dependencyBumps.size === 0 ||
|
|
197
|
+
(dependencyBumps.size === 1 && dependencyBumps.has(WORKSPACE_PLACEHOLDER_NAME))
|
|
198
|
+
) {
|
|
199
|
+
console.log('No package.json changes to projects, creating empty changeset...');
|
|
200
|
+
|
|
201
|
+
await fs.writeFile(getChangesetName(), '---\n---\n');
|
|
202
|
+
await checkCarsonTemplatesPackage(dependencyBumps);
|
|
203
|
+
} else {
|
|
204
|
+
await createChangeset(getChangesetName, dependencyBumps);
|
|
205
|
+
await checkCarsonTemplatesPackage(dependencyBumps);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
console.log('Done!');
|
|
@@ -42,167 +42,7 @@ jobs:
|
|
|
42
42
|
run: npm ci
|
|
43
43
|
|
|
44
44
|
- name: Generate changeset
|
|
45
|
-
|
|
46
|
-
with:
|
|
47
|
-
script: |
|
|
48
|
-
let {promises: fs} = require('node:fs');
|
|
49
|
-
let path = require('node:path');
|
|
50
|
-
let semver = require('semver');
|
|
51
|
-
let _ = require('lodash');
|
|
52
|
-
|
|
53
|
-
async function checkCarsonTemplatesPackage(dependencyBumps) {
|
|
54
|
-
if (<%- !workspace.projects.some((project) => project.name === TEMPLATE_PACKAGE_NAME) %>) {
|
|
55
|
-
return false;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
let constantsFilePath = '<%- `${workspace.projects.find((project) => project.name === TEMPLATE_PACKAGE_NAME)?.relativePath ?? ''}/source/constants.ts` %>';
|
|
59
|
-
let constantsFile = await fs.readFile(constantsFilePath, 'utf8');
|
|
60
|
-
|
|
61
|
-
for (let [dependencyName, bump] of dependencyBumps) {
|
|
62
|
-
let regexp = new RegExp(`(?<=('${_.escapeRegExp(dependencyName)}'|${_.escapeRegExp(dependencyName)}):\\s+')\\^\\d+\\.\\d+\\.\\d+(?='.*$)`, 'mi');
|
|
63
|
-
let result = regexp.exec(constantsFile);
|
|
64
|
-
|
|
65
|
-
if (result) {
|
|
66
|
-
let newMajorVersion = semver.major(semver.minVersion(bump));
|
|
67
|
-
let oldMajorVersion = semver.major(semver.minVersion(result[0]));
|
|
68
|
-
|
|
69
|
-
if (newMajorVersion > oldMajorVersion || dependencyName === 'node') { // Node.js is a special case, because it isn't specified in `dependencies` field
|
|
70
|
-
throw new Error(`Bumping major version of dependency "${dependencyName}" that is handled by Carson, update of the Carson template package is needed!`);
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
return;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
async function getProjects(files) {
|
|
79
|
-
let names = [];
|
|
80
|
-
|
|
81
|
-
for (let file of files) {
|
|
82
|
-
let packageJson = JSON.parse(await fs.readFile(file, 'utf8'));
|
|
83
|
-
|
|
84
|
-
names.push(packageJson.name);
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
return names;
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
async function createChangeset(fileName, dependencyBumps, projects) {
|
|
91
|
-
console.log('Creating changeset...');
|
|
92
|
-
|
|
93
|
-
let message = '';
|
|
94
|
-
|
|
95
|
-
for (let [dependencyName, bump] of dependencyBumps) {
|
|
96
|
-
message = message + `Dependency \`${dependencyName}\` updated to version \`${bump}\`.\n`;
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
message = message.replace('\n', ' ');
|
|
100
|
-
|
|
101
|
-
let header = projects.map((projectName) => `'${projectName}': patch`).join('\n');
|
|
102
|
-
|
|
103
|
-
await fs.writeFile(fileName, `---\n${header}\n---\n${message.trim()}\n`);
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
async function createChangesetForCarsonTemplates(fileName, dependencyBumps, projects) {
|
|
107
|
-
console.log('Creating changeset for Carson templates update...');
|
|
108
|
-
|
|
109
|
-
let message = '';
|
|
110
|
-
|
|
111
|
-
for (let [dependencyName, bump] of dependencyBumps) {
|
|
112
|
-
message = message + `Applies templates from \`${dependencyName}\` updated to version \`${bump}\`.\n`;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
message = message.replace('\n', ' ');
|
|
116
|
-
|
|
117
|
-
let header = projects.map((projectName) => `'${projectName}': patch`).join('\n');
|
|
118
|
-
|
|
119
|
-
await fs.writeFile(fileName, `---\n${header}\n---\n${message.trim()}\n`);
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
async function getBumps(files) {
|
|
123
|
-
let bumps = new Map();
|
|
124
|
-
|
|
125
|
-
for (let file of files) {
|
|
126
|
-
let {stdout: changes} = await exec.getExecOutput('git', ['show', file]);
|
|
127
|
-
|
|
128
|
-
for (let change of changes.split('\n')) {
|
|
129
|
-
if (!change.startsWith('+ ')) {
|
|
130
|
-
continue;
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
let match = change.match(/"(.*?)"/g);
|
|
134
|
-
|
|
135
|
-
bumps.set(match[0].replace(/"/g, ''), match[1].replace(/"/g, ''));
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
return bumps;
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
async function getProjectsUsingCarsonTemplates(dir = process.cwd(), result = []) {
|
|
143
|
-
let entries = await fs.readdir(dir, {withFileTypes: true});
|
|
144
|
-
|
|
145
|
-
for (let entry of entries) {
|
|
146
|
-
let fullPath = path.join(dir, entry.name);
|
|
147
|
-
|
|
148
|
-
if (entry.isDirectory()) {
|
|
149
|
-
if (entry.name === '.carson' && dir !== process.cwd()) {
|
|
150
|
-
let packageJson = JSON.parse(await fs.readFile(path.join(dir, 'package.json'), 'utf8'));
|
|
151
|
-
|
|
152
|
-
result.push(packageJson.name);
|
|
153
|
-
} else {
|
|
154
|
-
await getProjectsUsingCarsonTemplates(fullPath, result);
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
return result;
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
let diffOutput = await exec.getExecOutput('git diff --name-only HEAD~1');
|
|
163
|
-
let diffFiles = diffOutput.stdout.split('\n');
|
|
164
|
-
|
|
165
|
-
if (diffFiles.find((diffFile) => diffFile.startsWith('.changeset'))) {
|
|
166
|
-
console.log('Changeset already exists, skipping...');
|
|
167
|
-
|
|
168
|
-
return;
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
let files = diffFiles
|
|
172
|
-
.filter((file) => file !== 'package.json') // skip workspace package.json
|
|
173
|
-
.filter((file) => file.includes('package.json'));
|
|
174
|
-
let filesWithWorkspace = diffFiles
|
|
175
|
-
.filter((file) => file.includes('package.json'));
|
|
176
|
-
let {stdout: shortHash} = await exec.getExecOutput('git rev-parse --short HEAD');
|
|
177
|
-
let changesetName = `.changeset/renovate-${shortHash.trim()}.md`;
|
|
178
|
-
let updatedProjects = await getProjects(files);
|
|
179
|
-
let dependencyBumpsWithWorkspace = await getBumps(filesWithWorkspace);
|
|
180
|
-
|
|
181
|
-
console.log('Changed package.json files:', files);
|
|
182
|
-
console.log('Updated projects:', updatedProjects);
|
|
183
|
-
console.log('Dependecy bumps (including the workspace):', Array.from(dependencyBumpsWithWorkspace));
|
|
184
|
-
|
|
185
|
-
if (dependencyBumpsWithWorkspace.has('<%- TEMPLATE_PACKAGE_NAME %>')) {
|
|
186
|
-
updatedProjects = await getProjectsUsingCarsonTemplates();
|
|
187
|
-
|
|
188
|
-
await createChangesetForCarsonTemplates(changesetName, dependencyBumpsWithWorkspace, updatedProjects);
|
|
189
|
-
|
|
190
|
-
return;
|
|
191
|
-
} else if (!updatedProjects.length) {
|
|
192
|
-
console.log('No package.json changes to published packages, skipping...');
|
|
193
|
-
|
|
194
|
-
await exec.exec('npx', ['changeset', '--empty']);
|
|
195
|
-
|
|
196
|
-
return;
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
let dependencyBumps = await getBumps(files);
|
|
200
|
-
|
|
201
|
-
console.log('Dependecy bumps:', Array.from(dependencyBumps));
|
|
202
|
-
|
|
203
|
-
await createChangeset(changesetName, dependencyBumps, updatedProjects);
|
|
204
|
-
|
|
205
|
-
await checkCarsonTemplatesPackage(dependencyBumpsWithWorkspace);
|
|
45
|
+
run: npx tsx tools/scripts/create-dependencies-changeset.ts
|
|
206
46
|
|
|
207
47
|
- name: Update Carson
|
|
208
48
|
run: |
|
|
@@ -9,10 +9,15 @@ let developmentDependencies = [
|
|
|
9
9
|
TEMPLATE_PACKAGE_NAME,
|
|
10
10
|
'@changesets/cli',
|
|
11
11
|
'@types/node',
|
|
12
|
+
'@types/semver',
|
|
12
13
|
'del-cli',
|
|
14
|
+
'execa',
|
|
15
|
+
'lodash',
|
|
13
16
|
'patch-package',
|
|
14
17
|
'prettier',
|
|
15
18
|
'prettier-plugin-packagejson',
|
|
19
|
+
'semver',
|
|
20
|
+
'tsx',
|
|
16
21
|
'turbo',
|
|
17
22
|
'typescript',
|
|
18
23
|
].filter((dependency) => {
|
|
@@ -55,8 +60,3 @@ if (workspace.projects.find((project) => project.name === TEMPLATE_PACKAGE_NAME)
|
|
|
55
60
|
packageJson.scripts.prepare += ' && carson update workspace';
|
|
56
61
|
-%>
|
|
57
62
|
<%- JSON.stringify(packageJson) %>
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|