From 8c5354b37548952bcbc1565367f2fea23832d5ea Mon Sep 17 00:00:00 2001 From: Daniel Tschinder <231804+danez@users.noreply.github.com> Date: Sun, 30 Apr 2023 11:56:01 +0200 Subject: [PATCH 01/83] update react-docgen to 6.0.0-rc.9 --- code/frameworks/react-vite/package.json | 3 +- .../docgen-handlers/actualNameHandler.ts | 54 +++-- .../react-vite/src/plugins/react-docgen.ts | 28 ++- code/yarn.lock | 212 ++++++++++++++++-- 4 files changed, 240 insertions(+), 57 deletions(-) diff --git a/code/frameworks/react-vite/package.json b/code/frameworks/react-vite/package.json index bddd43ea47b3..71e92185b882 100644 --- a/code/frameworks/react-vite/package.json +++ b/code/frameworks/react-vite/package.json @@ -52,9 +52,8 @@ "@storybook/builder-vite": "7.1.0-alpha.20", "@storybook/react": "7.1.0-alpha.20", "@vitejs/plugin-react": "^3.0.1", - "ast-types": "^0.14.2", "magic-string": "^0.27.0", - "react-docgen": "6.0.0-alpha.3" + "react-docgen": "6.0.0-rc.9" }, "devDependencies": { "@types/node": "^16.0.0", diff --git a/code/frameworks/react-vite/src/plugins/docgen-handlers/actualNameHandler.ts b/code/frameworks/react-vite/src/plugins/docgen-handlers/actualNameHandler.ts index efa6717b47b2..01889ddf9dcf 100644 --- a/code/frameworks/react-vite/src/plugins/docgen-handlers/actualNameHandler.ts +++ b/code/frameworks/react-vite/src/plugins/docgen-handlers/actualNameHandler.ts @@ -9,40 +9,46 @@ * directly from displayNameHandler, using the same approach as babel-plugin-react-docgen. */ -import { namedTypes as t } from 'ast-types'; -import type { NodePath } from 'ast-types/lib/node-path'; -import { getNameOrValue, isReactForwardRefCall } from 'react-docgen/dist/utils'; -import type { Importer } from 'react-docgen/dist/parse'; -import type Documentation from 'react-docgen/dist/Documentation'; +import type { Handler, NodePath, babelTypes as t } from 'react-docgen'; +import { utils } from 'react-docgen'; -export default function actualNameHandler( - documentation: Documentation, - path: NodePath, - importer: Importer -): void { - if (t.ClassDeclaration.check(path.node) || t.FunctionDeclaration.check(path.node)) { - documentation.set('actualName', getNameOrValue(path.get('id'))); +const { getNameOrValue, isReactForwardRefCall } = utils; + +const actualNameHandler: Handler = function actualNameHandler(documentation, componentDefinition) { + if ( + (componentDefinition.isClassDeclaration() || componentDefinition.isFunctionDeclaration()) && + componentDefinition.has('id') + ) { + documentation.set( + 'actualName', + getNameOrValue(componentDefinition.get('id') as NodePath) + ); } else if ( - t.ArrowFunctionExpression.check(path.node) || - t.FunctionExpression.check(path.node) || - isReactForwardRefCall(path, importer) + componentDefinition.isArrowFunctionExpression() || + componentDefinition.isFunctionExpression() || + isReactForwardRefCall(componentDefinition) ) { - let currentPath = path; - while (currentPath.parent) { - if (t.VariableDeclarator.check(currentPath.parent.node)) { - documentation.set('actualName', getNameOrValue(currentPath.parent.get('id'))); + let currentPath: NodePath = componentDefinition; + + while (currentPath.parentPath) { + if (currentPath.parentPath.isVariableDeclarator()) { + documentation.set('actualName', getNameOrValue(currentPath.parentPath.get('id'))); return; } - if (t.AssignmentExpression.check(currentPath.parent.node)) { - const leftPath = currentPath.parent.get('left'); - if (t.Identifier.check(leftPath.node) || t.Literal.check(leftPath.node)) { + if (currentPath.parentPath.isAssignmentExpression()) { + const leftPath = currentPath.parentPath.get('left'); + + if (leftPath.isIdentifier() || leftPath.isLiteral()) { documentation.set('actualName', getNameOrValue(leftPath)); return; } } - currentPath = currentPath.parent; + + currentPath = currentPath.parentPath; } // Could not find an actual name documentation.set('actualName', ''); } -} +}; + +export default actualNameHandler; diff --git a/code/frameworks/react-vite/src/plugins/react-docgen.ts b/code/frameworks/react-vite/src/plugins/react-docgen.ts index 0561456f8618..40a56c78502e 100644 --- a/code/frameworks/react-vite/src/plugins/react-docgen.ts +++ b/code/frameworks/react-vite/src/plugins/react-docgen.ts @@ -1,22 +1,23 @@ import path from 'path'; import { createFilter } from '@rollup/pluginutils'; +import type { Documentation } from 'react-docgen'; import { + ERROR_CODES, parse, - handlers as docgenHandlers, - resolver as docgenResolver, - importers as docgenImporters, + builtinHandlers as docgenHandlers, + builtinResolvers as docgenResolver, + builtinImporters as docgenImporters, } from 'react-docgen'; -import type { DocumentationObject } from 'react-docgen/dist/Documentation'; import MagicString from 'magic-string'; import type { PluginOption } from 'vite'; import actualNameHandler from './docgen-handlers/actualNameHandler'; -type DocObj = DocumentationObject & { actualName: string }; +type DocObj = Documentation & { actualName: string }; // TODO: None of these are able to be overridden, so `default` is aspirational here. const defaultHandlers = Object.values(docgenHandlers).map((handler) => handler); -const defaultResolver = docgenResolver.findAllExportedComponentDefinitions; -const defaultImporter = docgenImporters.makeFsImporter(); +const defaultResolver = new docgenResolver.FindExportedDefinitionsResolver(); +const defaultImporter = docgenImporters.fsImporter; const handlers = [...defaultHandlers, actualNameHandler]; type Options = { @@ -39,8 +40,9 @@ export function reactDocgen({ if (!filter(relPath)) return; try { - // Since we're using `findAllExportedComponentDefinitions`, this will always be an array. - const docgenResults = parse(src, defaultResolver, handlers, { + const docgenResults = parse(src, { + resolver: defaultResolver, + handlers, importer: defaultImporter, filename: id, }) as DocObj[]; @@ -60,9 +62,11 @@ export function reactDocgen({ map: s.generateMap(), }; } catch (e) { - // Usually this is just an error from react-docgen that it couldn't find a component - // Only uncomment for troubleshooting - // console.error(e); + // Ignore the error when react-docgen cannot find a react component + if (e.code === ERROR_CODES.MISSING_DEFINITION) { + return; + } + throw e; } }, }; diff --git a/code/yarn.lock b/code/yarn.lock index 54d9003fe74e..eac5f0119907 100644 --- a/code/yarn.lock +++ b/code/yarn.lock @@ -407,6 +407,13 @@ __metadata: languageName: node linkType: hard +"@babel/compat-data@npm:^7.21.5": + version: 7.21.7 + resolution: "@babel/compat-data@npm:7.21.7" + checksum: cd6bc85364a569cc74bcf0bfdc27161a1cb423c60c624e06f44b53c9e6fe7708bd0af3e389d376aec8ed9b2795907c43d01e4163dbc2a3a3142a2de55464a51d + languageName: node + linkType: hard + "@babel/core@npm:7.19.3": version: 7.19.3 resolution: "@babel/core@npm:7.19.3" @@ -476,6 +483,29 @@ __metadata: languageName: node linkType: hard +"@babel/core@npm:^7.18.9": + version: 7.21.8 + resolution: "@babel/core@npm:7.21.8" + dependencies: + "@ampproject/remapping": ^2.2.0 + "@babel/code-frame": ^7.21.4 + "@babel/generator": ^7.21.5 + "@babel/helper-compilation-targets": ^7.21.5 + "@babel/helper-module-transforms": ^7.21.5 + "@babel/helpers": ^7.21.5 + "@babel/parser": ^7.21.8 + "@babel/template": ^7.20.7 + "@babel/traverse": ^7.21.5 + "@babel/types": ^7.21.5 + convert-source-map: ^1.7.0 + debug: ^4.1.0 + gensync: ^1.0.0-beta.2 + json5: ^2.2.2 + semver: ^6.3.0 + checksum: bf6bb92bd78fb8b6628bb0612ac0915407b996b179e1404108f92ed32972978340b4457b08f2abf86390a58fb51815cab419edb2dbbc8846efc39eaa61b8cde3 + languageName: node + linkType: hard + "@babel/generator@npm:7.21.4, @babel/generator@npm:^7.12.11, @babel/generator@npm:^7.19.3, @babel/generator@npm:^7.21.4, @babel/generator@npm:^7.7.2, @babel/generator@npm:^7.8.7, @babel/generator@npm:~7.21.1": version: 7.21.4 resolution: "@babel/generator@npm:7.21.4" @@ -488,6 +518,18 @@ __metadata: languageName: node linkType: hard +"@babel/generator@npm:^7.21.5": + version: 7.21.5 + resolution: "@babel/generator@npm:7.21.5" + dependencies: + "@babel/types": ^7.21.5 + "@jridgewell/gen-mapping": ^0.3.2 + "@jridgewell/trace-mapping": ^0.3.17 + jsesc: ^2.5.1 + checksum: e98b51440cbbcee68e66c66684b5334f5929dba512067a6c3c1aecc77131b308bf61eca74a5ae1fb73028089d22a188ca2219c364596117f27695102afc18e95 + languageName: node + linkType: hard + "@babel/helper-annotate-as-pure@npm:7.18.6, @babel/helper-annotate-as-pure@npm:^7.18.6": version: 7.18.6 resolution: "@babel/helper-annotate-as-pure@npm:7.18.6" @@ -522,6 +564,21 @@ __metadata: languageName: node linkType: hard +"@babel/helper-compilation-targets@npm:^7.21.5": + version: 7.21.5 + resolution: "@babel/helper-compilation-targets@npm:7.21.5" + dependencies: + "@babel/compat-data": ^7.21.5 + "@babel/helper-validator-option": ^7.21.0 + browserslist: ^4.21.3 + lru-cache: ^5.1.1 + semver: ^6.3.0 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 36752452eb70d6a6f52f68846344a739089374a97619e5a4857e31e7d067bdad8270efd9dd0dd5dfc483dd2d98bf0c1c6f08e3315fe949e7bfffef67eaf669ad + languageName: node + linkType: hard + "@babel/helper-create-class-features-plugin@npm:^7.18.6, @babel/helper-create-class-features-plugin@npm:^7.21.0": version: 7.21.4 resolution: "@babel/helper-create-class-features-plugin@npm:7.21.4" @@ -575,6 +632,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-environment-visitor@npm:^7.21.5": + version: 7.21.5 + resolution: "@babel/helper-environment-visitor@npm:7.21.5" + checksum: d3f965d9691e3e2e11036d23ba9993a42d18f9be3d4589d3bb3d09d02e9d4d204026965633e36fb43b35fde905c2dfe753fb59b72ae0c3841f5a627fb1738d8a + languageName: node + linkType: hard + "@babel/helper-explode-assignable-expression@npm:^7.18.6": version: 7.18.6 resolution: "@babel/helper-explode-assignable-expression@npm:7.18.6" @@ -637,6 +701,22 @@ __metadata: languageName: node linkType: hard +"@babel/helper-module-transforms@npm:^7.21.5": + version: 7.21.5 + resolution: "@babel/helper-module-transforms@npm:7.21.5" + dependencies: + "@babel/helper-environment-visitor": ^7.21.5 + "@babel/helper-module-imports": ^7.21.4 + "@babel/helper-simple-access": ^7.21.5 + "@babel/helper-split-export-declaration": ^7.18.6 + "@babel/helper-validator-identifier": ^7.19.1 + "@babel/template": ^7.20.7 + "@babel/traverse": ^7.21.5 + "@babel/types": ^7.21.5 + checksum: a3b6ceaa995bf35e7a072066c3c9ba9ee6983cf36605f0c6a0ffcaab94d6dc13eba21b00434a023bf99d66c080fec335cf464619b97f7af39e1a5269cf0d7169 + languageName: node + linkType: hard + "@babel/helper-optimise-call-expression@npm:^7.18.6": version: 7.18.6 resolution: "@babel/helper-optimise-call-expression@npm:7.18.6" @@ -690,6 +770,15 @@ __metadata: languageName: node linkType: hard +"@babel/helper-simple-access@npm:^7.21.5": + version: 7.21.5 + resolution: "@babel/helper-simple-access@npm:7.21.5" + dependencies: + "@babel/types": ^7.21.5 + checksum: 682cd80b47c2424c31afe70bcc8ad3e401c612f6923c432e4b8245c5b6bc5ccddf3e405ea41ba890ccab79c0b5b95da3db125944ac0decc8d31d48469e593a0e + languageName: node + linkType: hard + "@babel/helper-skip-transparent-expression-wrappers@npm:^7.20.0": version: 7.20.0 resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.20.0" @@ -715,6 +804,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-string-parser@npm:^7.21.5": + version: 7.21.5 + resolution: "@babel/helper-string-parser@npm:7.21.5" + checksum: 4d0834c4a67c283e9277f5e565551fede00b7d68007e368c95c776e13d05002e8f9861716e11613880889d6f3463329d2af687ceea5fc5263f8b3d25a53d31da + languageName: node + linkType: hard + "@babel/helper-validator-identifier@npm:^7.18.6, @babel/helper-validator-identifier@npm:^7.19.1": version: 7.19.1 resolution: "@babel/helper-validator-identifier@npm:7.19.1" @@ -752,6 +848,17 @@ __metadata: languageName: node linkType: hard +"@babel/helpers@npm:^7.21.5": + version: 7.21.5 + resolution: "@babel/helpers@npm:7.21.5" + dependencies: + "@babel/template": ^7.20.7 + "@babel/traverse": ^7.21.5 + "@babel/types": ^7.21.5 + checksum: 5e58854afa1d0896185dcb12a1b6feacefb7d913d52bafa84792274651af2d3172923bdc26d1320fd6b04a2e208dc0d6730951043f17d10c08ca87231e5b84ec + languageName: node + linkType: hard + "@babel/highlight@npm:^7.18.6": version: 7.18.6 resolution: "@babel/highlight@npm:7.18.6" @@ -772,6 +879,15 @@ __metadata: languageName: node linkType: hard +"@babel/parser@npm:^7.21.5, @babel/parser@npm:^7.21.8": + version: 7.21.8 + resolution: "@babel/parser@npm:7.21.8" + bin: + parser: ./bin/babel-parser.js + checksum: 58789e972e5acce3abbd9dd4c8d4be7e15e071818d2038d195bc56664722f238abb8842d91da5c8894ab0b8f8c0841eabc675f681925c2fba12675bf3ec5c5fc + languageName: node + linkType: hard + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.18.6": version: 7.18.6 resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.18.6" @@ -1996,6 +2112,24 @@ __metadata: languageName: node linkType: hard +"@babel/traverse@npm:^7.18.9, @babel/traverse@npm:^7.21.5": + version: 7.21.5 + resolution: "@babel/traverse@npm:7.21.5" + dependencies: + "@babel/code-frame": ^7.21.4 + "@babel/generator": ^7.21.5 + "@babel/helper-environment-visitor": ^7.21.5 + "@babel/helper-function-name": ^7.21.0 + "@babel/helper-hoist-variables": ^7.18.6 + "@babel/helper-split-export-declaration": ^7.18.6 + "@babel/parser": ^7.21.5 + "@babel/types": ^7.21.5 + debug: ^4.1.0 + globals: ^11.1.0 + checksum: 1b126b71b98aaff01ec1f0f0389d08beb6eda3d0b71878af4c6cf386686933a076d969240f270c6a01910d8036a1fb9013d53bd5c136b9b24025204a4dc48d03 + languageName: node + linkType: hard + "@babel/types@npm:^7.0.0, @babel/types@npm:^7.11.5, @babel/types@npm:^7.18.6, @babel/types@npm:^7.18.8, @babel/types@npm:^7.18.9, @babel/types@npm:^7.19.3, @babel/types@npm:^7.2.0, @babel/types@npm:^7.20.0, @babel/types@npm:^7.20.2, @babel/types@npm:^7.20.5, @babel/types@npm:^7.20.7, @babel/types@npm:^7.21.0, @babel/types@npm:^7.21.2, @babel/types@npm:^7.21.4, @babel/types@npm:^7.3.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.6.1, @babel/types@npm:^7.7.0, @babel/types@npm:^7.7.2, @babel/types@npm:^7.8.3, @babel/types@npm:^7.8.6, @babel/types@npm:^7.8.7, @babel/types@npm:^7.9.6, @babel/types@npm:~7.21.2": version: 7.21.4 resolution: "@babel/types@npm:7.21.4" @@ -2007,6 +2141,17 @@ __metadata: languageName: node linkType: hard +"@babel/types@npm:^7.21.5": + version: 7.21.5 + resolution: "@babel/types@npm:7.21.5" + dependencies: + "@babel/helper-string-parser": ^7.21.5 + "@babel/helper-validator-identifier": ^7.19.1 + to-fast-properties: ^2.0.0 + checksum: 23c943aa2c0d11b798e9298b55b1993da8b386504aac2f781a49b4bbf2cf2ad5e1003409241578574e421c999ff7a3aab2cf30ad3581d33eb9053d82b9e20408 + languageName: node + linkType: hard + "@base2/pretty-print-object@npm:1.0.1": version: 1.0.1 resolution: "@base2/pretty-print-object@npm:1.0.1" @@ -6744,9 +6889,8 @@ __metadata: "@storybook/react": 7.1.0-alpha.20 "@types/node": ^16.0.0 "@vitejs/plugin-react": ^3.0.1 - ast-types: ^0.14.2 magic-string: ^0.27.0 - react-docgen: 6.0.0-alpha.3 + react-docgen: 6.0.0-rc.9 typescript: ~4.9.3 vite: ^4.0.0 peerDependencies: @@ -7763,7 +7907,7 @@ __metadata: languageName: node linkType: hard -"@types/babel__core@npm:^7, @types/babel__core@npm:^7.0.0, @types/babel__core@npm:^7.1.14, @types/babel__core@npm:^7.1.7": +"@types/babel__core@npm:^7, @types/babel__core@npm:^7.0.0, @types/babel__core@npm:^7.1.14, @types/babel__core@npm:^7.1.7, @types/babel__core@npm:^7.18.0": version: 7.20.0 resolution: "@types/babel__core@npm:7.20.0" dependencies: @@ -7818,6 +7962,15 @@ __metadata: languageName: node linkType: hard +"@types/babel__traverse@npm:^7.18.0": + version: 7.18.5 + resolution: "@types/babel__traverse@npm:7.18.5" + dependencies: + "@babel/types": ^7.3.0 + checksum: e5170da740e720212a514add53f3a66ba6c64056e1c284c16bc549cc972bab962bdf0610c6ee710d63da24d28b75c065e2032575404b01ff768d6a9d3974a085 + languageName: node + linkType: hard + "@types/body-parser@npm:*": version: 1.19.2 resolution: "@types/body-parser@npm:1.19.2" @@ -7922,6 +8075,13 @@ __metadata: languageName: node linkType: hard +"@types/doctrine@npm:^0.0.5": + version: 0.0.5 + resolution: "@types/doctrine@npm:0.0.5" + checksum: 9b38d1b110e94fa34632e21f83b64ed05116f6349b5666c11bc0d4081c793f9b0be25b9d8b34df0ec38d440741836c17d4c84576e22dc00a18fe972f96688bf3 + languageName: node + linkType: hard + "@types/ejs@npm:^3.1.1": version: 3.1.2 resolution: "@types/ejs@npm:3.1.2" @@ -8474,6 +8634,13 @@ __metadata: languageName: node linkType: hard +"@types/resolve@npm:^1.20.2": + version: 1.20.2 + resolution: "@types/resolve@npm:1.20.2" + checksum: c5b7e1770feb5ccfb6802f6ad82a7b0d50874c99331e0c9b259e415e55a38d7a86ad0901c57665d93f75938be2a6a0bc9aa06c9749192cadb2e4512800bbc6e6 + languageName: node + linkType: hard + "@types/retry@npm:0.12.0": version: 0.12.0 resolution: "@types/retry@npm:0.12.0" @@ -21900,7 +22067,7 @@ __metadata: languageName: node linkType: hard -"min-indent@npm:^1.0.0": +"min-indent@npm:^1.0.0, min-indent@npm:^1.0.1": version: 1.0.1 resolution: "min-indent@npm:1.0.1" checksum: 7e207bd5c20401b292de291f02913230cb1163abca162044f7db1d951fa245b174dc00869d40dd9a9f32a885ad6a5f3e767ee104cf278f399cb4e92d3f582d5c @@ -25217,23 +25384,21 @@ __metadata: languageName: node linkType: hard -"react-docgen@npm:6.0.0-alpha.3": - version: 6.0.0-alpha.3 - resolution: "react-docgen@npm:6.0.0-alpha.3" +"react-docgen@npm:6.0.0-rc.9": + version: 6.0.0-rc.9 + resolution: "react-docgen@npm:6.0.0-rc.9" dependencies: - "@babel/core": ^7.7.5 - "@babel/generator": ^7.12.11 - ast-types: ^0.14.2 - commander: ^2.19.0 + "@babel/core": ^7.18.9 + "@babel/traverse": ^7.18.9 + "@babel/types": ^7.18.9 + "@types/babel__core": ^7.18.0 + "@types/babel__traverse": ^7.18.0 + "@types/doctrine": ^0.0.5 + "@types/resolve": ^1.20.2 doctrine: ^3.0.0 - estree-to-babel: ^3.1.0 - neo-async: ^2.6.1 - node-dir: ^0.1.10 - resolve: ^1.17.0 - strip-indent: ^3.0.0 - bin: - react-docgen: bin/react-docgen.js - checksum: 284bba5528d5e9084c3ed36b2d2fec8fc5d55f3fb8ca544ec3a0d1ab98c39001ecb7db6e03a1088b82eb3d750c1343cde2fc9b7729540277eda40e10f38912d8 + resolve: ^1.22.1 + strip-indent: ^4.0.0 + checksum: f75226b13175b7ceb1282f485ffb0c1cec1e179f870f7583ab3939cc28c874bce8dad31acf30915ecb7e8549b3a25d998dc4277d7c9def70578e673aa61ac15a languageName: node linkType: hard @@ -28072,6 +28237,15 @@ __metadata: languageName: node linkType: hard +"strip-indent@npm:^4.0.0": + version: 4.0.0 + resolution: "strip-indent@npm:4.0.0" + dependencies: + min-indent: ^1.0.1 + checksum: 6b1fb4e22056867f5c9e7a6f3f45922d9a2436cac758607d58aeaac0d3b16ec40b1c43317de7900f1b8dd7a4107352fa47fb960f2c23566538c51e8585c8870e + languageName: node + linkType: hard + "strip-json-comments@npm:^2.0.0": version: 2.0.1 resolution: "strip-json-comments@npm:2.0.1" From a26c431ae98abf46ac918b73c9165ece6da11576 Mon Sep 17 00:00:00 2001 From: Norbert de Langen Date: Mon, 22 May 2023 13:53:53 +0200 Subject: [PATCH 02/83] fix type issues --- code/frameworks/react-vite/src/plugins/react-docgen.ts | 2 +- code/frameworks/react-vite/tsconfig.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/code/frameworks/react-vite/src/plugins/react-docgen.ts b/code/frameworks/react-vite/src/plugins/react-docgen.ts index 40a56c78502e..9c35568f45ba 100644 --- a/code/frameworks/react-vite/src/plugins/react-docgen.ts +++ b/code/frameworks/react-vite/src/plugins/react-docgen.ts @@ -61,7 +61,7 @@ export function reactDocgen({ code: s.toString(), map: s.generateMap(), }; - } catch (e) { + } catch (e: any) { // Ignore the error when react-docgen cannot find a react component if (e.code === ERROR_CODES.MISSING_DEFINITION) { return; diff --git a/code/frameworks/react-vite/tsconfig.json b/code/frameworks/react-vite/tsconfig.json index 3bfb79fdded7..4475d9c518e6 100644 --- a/code/frameworks/react-vite/tsconfig.json +++ b/code/frameworks/react-vite/tsconfig.json @@ -4,7 +4,7 @@ "rootDir": "./src", "types": ["node"], "resolveJsonModule": true, - "strict": true + "skipLibCheck": true }, "include": ["src/**/*"] } From f9b9e76d86efee523aff3da5dc059f74e9d2d5e8 Mon Sep 17 00:00:00 2001 From: Daniel Tschinder <231804+danez@users.noreply.github.com> Date: Wed, 21 Jun 2023 13:03:32 +0200 Subject: [PATCH 03/83] fix: update to 6.0 final --- code/frameworks/react-vite/package.json | 2 +- code/yarn.lock | 38 ++++++++++++------------- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/code/frameworks/react-vite/package.json b/code/frameworks/react-vite/package.json index 71e92185b882..5a45fc3ae7ec 100644 --- a/code/frameworks/react-vite/package.json +++ b/code/frameworks/react-vite/package.json @@ -53,7 +53,7 @@ "@storybook/react": "7.1.0-alpha.20", "@vitejs/plugin-react": "^3.0.1", "magic-string": "^0.27.0", - "react-docgen": "6.0.0-rc.9" + "react-docgen": "^6.0.1" }, "devDependencies": { "@types/node": "^16.0.0", diff --git a/code/yarn.lock b/code/yarn.lock index eac5f0119907..4b13b7282c74 100644 --- a/code/yarn.lock +++ b/code/yarn.lock @@ -6890,7 +6890,7 @@ __metadata: "@types/node": ^16.0.0 "@vitejs/plugin-react": ^3.0.1 magic-string: ^0.27.0 - react-docgen: 6.0.0-rc.9 + react-docgen: ^6.0.1 typescript: ~4.9.3 vite: ^4.0.0 peerDependencies: @@ -25384,24 +25384,6 @@ __metadata: languageName: node linkType: hard -"react-docgen@npm:6.0.0-rc.9": - version: 6.0.0-rc.9 - resolution: "react-docgen@npm:6.0.0-rc.9" - dependencies: - "@babel/core": ^7.18.9 - "@babel/traverse": ^7.18.9 - "@babel/types": ^7.18.9 - "@types/babel__core": ^7.18.0 - "@types/babel__traverse": ^7.18.0 - "@types/doctrine": ^0.0.5 - "@types/resolve": ^1.20.2 - doctrine: ^3.0.0 - resolve: ^1.22.1 - strip-indent: ^4.0.0 - checksum: f75226b13175b7ceb1282f485ffb0c1cec1e179f870f7583ab3939cc28c874bce8dad31acf30915ecb7e8549b3a25d998dc4277d7c9def70578e673aa61ac15a - languageName: node - linkType: hard - "react-docgen@npm:^5.0.0": version: 5.4.3 resolution: "react-docgen@npm:5.4.3" @@ -25422,6 +25404,24 @@ __metadata: languageName: node linkType: hard +"react-docgen@npm:^6.0.1": + version: 6.0.1 + resolution: "react-docgen@npm:6.0.1" + dependencies: + "@babel/core": ^7.18.9 + "@babel/traverse": ^7.18.9 + "@babel/types": ^7.18.9 + "@types/babel__core": ^7.18.0 + "@types/babel__traverse": ^7.18.0 + "@types/doctrine": ^0.0.5 + "@types/resolve": ^1.20.2 + doctrine: ^3.0.0 + resolve: ^1.22.1 + strip-indent: ^4.0.0 + checksum: 361d72685d42afbaeb0d214c2e0d4bd9fa29b7a3621586b87bcf2b3f86c5853b591229aa59d67a0ec8055a422e8a7c363fe564f88f21d5fc056cf75a0814fa9c + languageName: node + linkType: hard + "react-dom@npm:^16.8.0": version: 16.14.0 resolution: "react-dom@npm:16.14.0" From d174979a6035394b42c20baef2bd0ae4811e12d3 Mon Sep 17 00:00:00 2001 From: Michael Shilman Date: Sun, 13 Aug 2023 14:49:57 +0800 Subject: [PATCH 04/83] Upgrade to react-docgen 6.0.2 --- code/frameworks/react-vite/package.json | 2 +- code/yarn.lock | 273 ++++++++++++++++++++++-- 2 files changed, 251 insertions(+), 24 deletions(-) diff --git a/code/frameworks/react-vite/package.json b/code/frameworks/react-vite/package.json index 810de99893dd..af7876ed0478 100644 --- a/code/frameworks/react-vite/package.json +++ b/code/frameworks/react-vite/package.json @@ -53,7 +53,7 @@ "@storybook/react": "7.1.0-alpha.37", "@vitejs/plugin-react": "^3.0.1", "magic-string": "^0.30.0", - "react-docgen": "6.0.0-alpha.3" + "react-docgen": "^6.0.2" }, "devDependencies": { "@types/node": "^16.0.0", diff --git a/code/yarn.lock b/code/yarn.lock index 100260faecdd..ac86b3d34443 100644 --- a/code/yarn.lock +++ b/code/yarn.lock @@ -365,6 +365,16 @@ __metadata: languageName: node linkType: hard +"@babel/code-frame@npm:^7.22.10": + version: 7.22.10 + resolution: "@babel/code-frame@npm:7.22.10" + dependencies: + "@babel/highlight": ^7.22.10 + chalk: ^2.4.2 + checksum: fc5fe681eda128f15b928287b6c8e2ccec45776b8662524945cde005fba725642cc47ab0cfef4e7ff9ba5acccb3e907eebc2b3a7f075b8b31b19011229170b27 + languageName: node + linkType: hard + "@babel/compat-data@npm:^7.17.7, @babel/compat-data@npm:^7.20.5, @babel/compat-data@npm:^7.21.4, @babel/compat-data@npm:^7.22.5": version: 7.22.5 resolution: "@babel/compat-data@npm:7.22.5" @@ -379,6 +389,13 @@ __metadata: languageName: node linkType: hard +"@babel/compat-data@npm:^7.22.9": + version: 7.22.9 + resolution: "@babel/compat-data@npm:7.22.9" + checksum: 1334264b041f8ad4e33036326970c9c26754eb5c04b3af6c223fe6da988cbb8a8542b5526f49ec1ac488210d2f710484a0e4bcd30256294ae3f261d0141febad + languageName: node + linkType: hard + "@babel/core@npm:7.21.4": version: 7.21.4 resolution: "@babel/core@npm:7.21.4" @@ -471,6 +488,29 @@ __metadata: languageName: node linkType: hard +"@babel/core@npm:^7.18.9": + version: 7.22.10 + resolution: "@babel/core@npm:7.22.10" + dependencies: + "@ampproject/remapping": ^2.2.0 + "@babel/code-frame": ^7.22.10 + "@babel/generator": ^7.22.10 + "@babel/helper-compilation-targets": ^7.22.10 + "@babel/helper-module-transforms": ^7.22.9 + "@babel/helpers": ^7.22.10 + "@babel/parser": ^7.22.10 + "@babel/template": ^7.22.5 + "@babel/traverse": ^7.22.10 + "@babel/types": ^7.22.10 + convert-source-map: ^1.7.0 + debug: ^4.1.0 + gensync: ^1.0.0-beta.2 + json5: ^2.2.2 + semver: ^6.3.1 + checksum: aebc08abfc4d4370d3023b1c5a22db2edd896ddbe21ed54f11c654660481f598b08fd456f9a5aa90cd2d81e0ea6767cd73f72fc11f7ad04d897f8fb20671cc1c + languageName: node + linkType: hard + "@babel/generator@npm:7.21.4": version: 7.21.4 resolution: "@babel/generator@npm:7.21.4" @@ -507,6 +547,18 @@ __metadata: languageName: node linkType: hard +"@babel/generator@npm:^7.22.10": + version: 7.22.10 + resolution: "@babel/generator@npm:7.22.10" + dependencies: + "@babel/types": ^7.22.10 + "@jridgewell/gen-mapping": ^0.3.2 + "@jridgewell/trace-mapping": ^0.3.17 + jsesc: ^2.5.1 + checksum: 2f26ac64f0b606cd9e7799eb2bc42d371b378ba2cb3c7c92c01a3bfccca271371990bcd2dc67fee5547721ba3e1fa83ca03fe3aab30bdf417c3078b9759d2f10 + languageName: node + linkType: hard + "@babel/helper-annotate-as-pure@npm:7.18.6": version: 7.18.6 resolution: "@babel/helper-annotate-as-pure@npm:7.18.6" @@ -564,6 +616,19 @@ __metadata: languageName: node linkType: hard +"@babel/helper-compilation-targets@npm:^7.22.10": + version: 7.22.10 + resolution: "@babel/helper-compilation-targets@npm:7.22.10" + dependencies: + "@babel/compat-data": ^7.22.9 + "@babel/helper-validator-option": ^7.22.5 + browserslist: ^4.21.9 + lru-cache: ^5.1.1 + semver: ^6.3.1 + checksum: edef207b819f491ded9462ac73858eadb155f4a0afe6cf3951459e47ad23b743ed56d7bd8a1b3f63fd25b39543db42ea58fea7b2193dcb4c98a511d7f1ad547a + languageName: node + linkType: hard + "@babel/helper-create-class-features-plugin@npm:^7.18.6, @babel/helper-create-class-features-plugin@npm:^7.21.0, @babel/helper-create-class-features-plugin@npm:^7.22.5": version: 7.22.5 resolution: "@babel/helper-create-class-features-plugin@npm:7.22.5" @@ -711,6 +776,21 @@ __metadata: languageName: node linkType: hard +"@babel/helper-module-transforms@npm:^7.22.9": + version: 7.22.9 + resolution: "@babel/helper-module-transforms@npm:7.22.9" + dependencies: + "@babel/helper-environment-visitor": ^7.22.5 + "@babel/helper-module-imports": ^7.22.5 + "@babel/helper-simple-access": ^7.22.5 + "@babel/helper-split-export-declaration": ^7.22.6 + "@babel/helper-validator-identifier": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 1844dc2c9049552d13d40385cb196704a754feab60ef8c370a5e1c431a4f64b0ddd7bb1dddaa5c98288cafd5c08cd4d8e6d5aba9a11e1133b8b999ab7c9defd1 + languageName: node + linkType: hard + "@babel/helper-optimise-call-expression@npm:^7.22.5": version: 7.22.5 resolution: "@babel/helper-optimise-call-expression@npm:7.22.5" @@ -800,6 +880,15 @@ __metadata: languageName: node linkType: hard +"@babel/helper-split-export-declaration@npm:^7.22.6": + version: 7.22.6 + resolution: "@babel/helper-split-export-declaration@npm:7.22.6" + dependencies: + "@babel/types": ^7.22.5 + checksum: d83e4b623eaa9622c267d3c83583b72f3aac567dc393dda18e559d79187961cb29ae9c57b2664137fc3d19508370b12ec6a81d28af73a50e0846819cb21c6e44 + languageName: node + linkType: hard + "@babel/helper-string-parser@npm:^7.21.5": version: 7.21.5 resolution: "@babel/helper-string-parser@npm:7.21.5" @@ -869,6 +958,28 @@ __metadata: languageName: node linkType: hard +"@babel/helpers@npm:^7.22.10": + version: 7.22.10 + resolution: "@babel/helpers@npm:7.22.10" + dependencies: + "@babel/template": ^7.22.5 + "@babel/traverse": ^7.22.10 + "@babel/types": ^7.22.10 + checksum: 14c2f4fe0663bf4042b82a09ea6eaa53b0844ed04c70d69be8fff0db504ab25a729c72ff427e84320a328e19853b4a8d9897a3d2379c0e70751053e6e23a7992 + languageName: node + linkType: hard + +"@babel/highlight@npm:^7.22.10": + version: 7.22.10 + resolution: "@babel/highlight@npm:7.22.10" + dependencies: + "@babel/helper-validator-identifier": ^7.22.5 + chalk: ^2.4.2 + js-tokens: ^4.0.0 + checksum: ac321ed90d37f76df74a44addc1692658eff64060375550bfb64919959573b14000ac83744e1ed30cc51b8b2f1291b0f0e98a3398d3c33c9c4548dd326a898fc + languageName: node + linkType: hard + "@babel/highlight@npm:^7.22.5": version: 7.22.5 resolution: "@babel/highlight@npm:7.22.5" @@ -898,6 +1009,15 @@ __metadata: languageName: node linkType: hard +"@babel/parser@npm:^7.22.10": + version: 7.22.10 + resolution: "@babel/parser@npm:7.22.10" + bin: + parser: ./bin/babel-parser.js + checksum: 22de4b5b2e20dd5b44a73963e5fceef44501bacdd14f0b3b96fc16975826553c83c3e424e2ea906b4f2fb8c2129b176bcee33ae99e30de9006ceb28ded5c6ac7 + languageName: node + linkType: hard + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.18.6, @babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.22.5": version: 7.22.5 resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.22.5" @@ -2494,6 +2614,24 @@ __metadata: languageName: node linkType: hard +"@babel/traverse@npm:^7.18.9, @babel/traverse@npm:^7.22.10": + version: 7.22.10 + resolution: "@babel/traverse@npm:7.22.10" + dependencies: + "@babel/code-frame": ^7.22.10 + "@babel/generator": ^7.22.10 + "@babel/helper-environment-visitor": ^7.22.5 + "@babel/helper-function-name": ^7.22.5 + "@babel/helper-hoist-variables": ^7.22.5 + "@babel/helper-split-export-declaration": ^7.22.6 + "@babel/parser": ^7.22.10 + "@babel/types": ^7.22.10 + debug: ^4.1.0 + globals: ^11.1.0 + checksum: 8e8b63b053962908408ed9d954810e93f241122222db115327ed5876d020f420fc115ef2d79623c2a4928447ddc002ec220be2a152b241d19de2480c88e10cfb + languageName: node + linkType: hard + "@babel/traverse@npm:^7.21.5": version: 7.21.5 resolution: "@babel/traverse@npm:7.21.5" @@ -2523,6 +2661,17 @@ __metadata: languageName: node linkType: hard +"@babel/types@npm:^7.18.9, @babel/types@npm:^7.22.10": + version: 7.22.10 + resolution: "@babel/types@npm:7.22.10" + dependencies: + "@babel/helper-string-parser": ^7.22.5 + "@babel/helper-validator-identifier": ^7.22.5 + to-fast-properties: ^2.0.0 + checksum: 34aad930339664a3a5423d6f1d6d2738e30cd73786ff6dfd0a40bfc8f45017e70e24ef397877c86f4e7dee8ada0a53b8fd9f3d86bc0137d09a44e4b3733090f7 + languageName: node + linkType: hard + "@babel/types@npm:^7.21.5": version: 7.21.5 resolution: "@babel/types@npm:7.21.5" @@ -7100,7 +7249,7 @@ __metadata: "@types/node": ^16.0.0 "@vitejs/plugin-react": ^3.0.1 magic-string: ^0.30.0 - react-docgen: 6.0.0-alpha.3 + react-docgen: ^6.0.2 typescript: ~4.9.3 vite: ^4.0.0 peerDependencies: @@ -8140,6 +8289,19 @@ __metadata: languageName: node linkType: hard +"@types/babel__core@npm:^7.18.0": + version: 7.20.1 + resolution: "@types/babel__core@npm:7.20.1" + dependencies: + "@babel/parser": ^7.20.7 + "@babel/types": ^7.20.7 + "@types/babel__generator": "*" + "@types/babel__template": "*" + "@types/babel__traverse": "*" + checksum: c83402fc7ef8abd1f94ffe350b8bde9a35ccb6c3624bc8e39b6a7e1a675d112f6b70ac1b05391a579ca3b126baffe66b0b94f954edef086c4482b97d293c3659 + languageName: node + linkType: hard + "@types/babel__generator@npm:*": version: 7.6.4 resolution: "@types/babel__generator@npm:7.6.4" @@ -8173,7 +8335,7 @@ __metadata: languageName: node linkType: hard -"@types/babel__traverse@npm:*, @types/babel__traverse@npm:^7.0.6": +"@types/babel__traverse@npm:*, @types/babel__traverse@npm:^7.0.6, @types/babel__traverse@npm:^7.18.0": version: 7.20.1 resolution: "@types/babel__traverse@npm:7.20.1" dependencies: @@ -8298,6 +8460,13 @@ __metadata: languageName: node linkType: hard +"@types/doctrine@npm:^0.0.5": + version: 0.0.5 + resolution: "@types/doctrine@npm:0.0.5" + checksum: 9b38d1b110e94fa34632e21f83b64ed05116f6349b5666c11bc0d4081c793f9b0be25b9d8b34df0ec38d440741836c17d4c84576e22dc00a18fe972f96688bf3 + languageName: node + linkType: hard + "@types/ejs@npm:^3.1.1": version: 3.1.2 resolution: "@types/ejs@npm:3.1.2" @@ -8863,6 +9032,13 @@ __metadata: languageName: node linkType: hard +"@types/resolve@npm:^1.20.2": + version: 1.20.2 + resolution: "@types/resolve@npm:1.20.2" + checksum: c5b7e1770feb5ccfb6802f6ad82a7b0d50874c99331e0c9b259e415e55a38d7a86ad0901c57665d93f75938be2a6a0bc9aa06c9749192cadb2e4512800bbc6e6 + languageName: node + linkType: hard + "@types/responselike@npm:^1.0.0": version: 1.0.0 resolution: "@types/responselike@npm:1.0.0" @@ -11735,6 +11911,20 @@ __metadata: languageName: node linkType: hard +"browserslist@npm:^4.21.9": + version: 4.21.10 + resolution: "browserslist@npm:4.21.10" + dependencies: + caniuse-lite: ^1.0.30001517 + electron-to-chromium: ^1.4.477 + node-releases: ^2.0.13 + update-browserslist-db: ^1.0.11 + bin: + browserslist: cli.js + checksum: e8c98496e5f2a5128d0e2f1f186dc0416bfc49c811e568b19c9e07a56cccc1f7f415fa4f532488e6a13dfacbe3332a9b55b152082ff125402696a11a158a0894 + languageName: node + linkType: hard + "bs-logger@npm:0.x, bs-logger@npm:^0.2.6": version: 0.2.6 resolution: "bs-logger@npm:0.2.6" @@ -12070,6 +12260,13 @@ __metadata: languageName: node linkType: hard +"caniuse-lite@npm:^1.0.30001517": + version: 1.0.30001520 + resolution: "caniuse-lite@npm:1.0.30001520" + checksum: 48daf0d55e72e343f09fe17cbd47303a5bf4d65f6ec08ef68cc998c4fed073c9789d710e296496140e8179138dccb4667b786e260ca5451e1663786ef889db3b + languageName: node + linkType: hard + "case-sensitive-paths-webpack-plugin@npm:^2.4.0": version: 2.4.0 resolution: "case-sensitive-paths-webpack-plugin@npm:2.4.0" @@ -14356,6 +14553,13 @@ __metadata: languageName: node linkType: hard +"electron-to-chromium@npm:^1.4.477": + version: 1.4.490 + resolution: "electron-to-chromium@npm:1.4.490" + checksum: d205e3c9f4bf14cbaaa2be5bf3f3d498e161ec0cc6f10da7bfdd2c355e4ae1937244335fabe8b376e970d14ba2b2c415aa2a2d89ea61c000f54e6ed137853bb9 + languageName: node + linkType: hard + "elliptic@npm:^6.5.3": version: 6.5.4 resolution: "elliptic@npm:6.5.4" @@ -22221,7 +22425,7 @@ __metadata: languageName: node linkType: hard -"min-indent@npm:^1.0.0": +"min-indent@npm:^1.0.0, min-indent@npm:^1.0.1": version: 1.0.1 resolution: "min-indent@npm:1.0.1" checksum: 7e207bd5c20401b292de291f02913230cb1163abca162044f7db1d951fa245b174dc00869d40dd9a9f32a885ad6a5f3e767ee104cf278f399cb4e92d3f582d5c @@ -22978,6 +23182,13 @@ __metadata: languageName: node linkType: hard +"node-releases@npm:^2.0.13": + version: 2.0.13 + resolution: "node-releases@npm:2.0.13" + checksum: 2fb44bf70fc949d27f3a48a7fd1a9d1d603ddad4ccd091f26b3fb8b1da976605d919330d7388ccd55ca2ade0dc8b2e12841ba19ef249c8bb29bf82532d401af7 + languageName: node + linkType: hard + "nopt@npm:^6.0.0": version: 6.0.0 resolution: "nopt@npm:6.0.0" @@ -25714,26 +25925,6 @@ __metadata: languageName: node linkType: hard -"react-docgen@npm:6.0.0-alpha.3": - version: 6.0.0-alpha.3 - resolution: "react-docgen@npm:6.0.0-alpha.3" - dependencies: - "@babel/core": ^7.7.5 - "@babel/generator": ^7.12.11 - ast-types: ^0.14.2 - commander: ^2.19.0 - doctrine: ^3.0.0 - estree-to-babel: ^3.1.0 - neo-async: ^2.6.1 - node-dir: ^0.1.10 - resolve: ^1.17.0 - strip-indent: ^3.0.0 - bin: - react-docgen: bin/react-docgen.js - checksum: 284bba5528d5e9084c3ed36b2d2fec8fc5d55f3fb8ca544ec3a0d1ab98c39001ecb7db6e03a1088b82eb3d750c1343cde2fc9b7729540277eda40e10f38912d8 - languageName: node - linkType: hard - "react-docgen@npm:^5.0.0": version: 5.4.3 resolution: "react-docgen@npm:5.4.3" @@ -25754,6 +25945,24 @@ __metadata: languageName: node linkType: hard +"react-docgen@npm:^6.0.2": + version: 6.0.2 + resolution: "react-docgen@npm:6.0.2" + dependencies: + "@babel/core": ^7.18.9 + "@babel/traverse": ^7.18.9 + "@babel/types": ^7.18.9 + "@types/babel__core": ^7.18.0 + "@types/babel__traverse": ^7.18.0 + "@types/doctrine": ^0.0.5 + "@types/resolve": ^1.20.2 + doctrine: ^3.0.0 + resolve: ^1.22.1 + strip-indent: ^4.0.0 + checksum: 040f9b460982d6b4690ed5381b6181c58f6a2cd9cd6d70cfc449663527eaf93908cc6f7f06b018d9bc345b65d0cb87cb3d05541403556f20c1feab28342b0b4c + languageName: node + linkType: hard + "react-dom@npm:^16.8.0": version: 16.14.0 resolution: "react-dom@npm:16.14.0" @@ -27492,6 +27701,15 @@ __metadata: languageName: node linkType: hard +"semver@npm:^6.3.1": + version: 6.3.1 + resolution: "semver@npm:6.3.1" + bin: + semver: bin/semver.js + checksum: e3d79b609071caa78bcb6ce2ad81c7966a46a7431d9d58b8800cfa9cb6a63699b3899a0e4bcce36167a284578212d9ae6942b6929ba4aa5015c079a67751d42d + languageName: node + linkType: hard + "semver@npm:~7.0.0": version: 7.0.0 resolution: "semver@npm:7.0.0" @@ -28577,6 +28795,15 @@ __metadata: languageName: node linkType: hard +"strip-indent@npm:^4.0.0": + version: 4.0.0 + resolution: "strip-indent@npm:4.0.0" + dependencies: + min-indent: ^1.0.1 + checksum: 6b1fb4e22056867f5c9e7a6f3f45922d9a2436cac758607d58aeaac0d3b16ec40b1c43317de7900f1b8dd7a4107352fa47fb960f2c23566538c51e8585c8870e + languageName: node + linkType: hard + "strip-json-comments@npm:^2.0.0": version: 2.0.1 resolution: "strip-json-comments@npm:2.0.1" From c6ab522efec8261e7c1864ab4ee9c2fb19fc030d Mon Sep 17 00:00:00 2001 From: Michael Shilman Date: Sun, 13 Aug 2023 18:34:39 +0800 Subject: [PATCH 05/83] Docs-tools: Fix react-docgen enum handling --- .../src/argTypes/convert/proptypes/convert.ts | 12 ++---------- .../src/argTypes/convert/typescript/convert.ts | 13 +++++++++++++ .../src/argTypes/convert/typescript/types.ts | 2 +- code/lib/docs-tools/src/argTypes/convert/utils.ts | 7 +++++++ 4 files changed, 23 insertions(+), 11 deletions(-) diff --git a/code/lib/docs-tools/src/argTypes/convert/proptypes/convert.ts b/code/lib/docs-tools/src/argTypes/convert/proptypes/convert.ts index 6caa89a5d268..82b85c0333e1 100644 --- a/code/lib/docs-tools/src/argTypes/convert/proptypes/convert.ts +++ b/code/lib/docs-tools/src/argTypes/convert/proptypes/convert.ts @@ -2,7 +2,7 @@ import mapValues from 'lodash/mapValues.js'; import type { SBType } from '@storybook/types'; import type { PTType } from './types'; -import { includesQuotes, trimQuotes } from '../utils'; +import { parseLiteral } from '../utils'; const SIGNATURE_REGEXP = /^\(.*\) => /; @@ -13,15 +13,7 @@ export const convert = (type: PTType): SBType | any => { switch (name) { case 'enum': { - const values = computed - ? value - : value.map((v: PTType) => { - const trimmedValue = trimQuotes(v.value); - - return includesQuotes(v.value) || Number.isNaN(Number(trimmedValue)) - ? trimmedValue - : Number(trimmedValue); - }); + const values = computed ? value : value.map((v: PTType) => parseLiteral(v.value)); return { ...base, name, value: values }; } case 'string': diff --git a/code/lib/docs-tools/src/argTypes/convert/typescript/convert.ts b/code/lib/docs-tools/src/argTypes/convert/typescript/convert.ts index 4683b933f845..ffec5b18db20 100644 --- a/code/lib/docs-tools/src/argTypes/convert/typescript/convert.ts +++ b/code/lib/docs-tools/src/argTypes/convert/typescript/convert.ts @@ -1,6 +1,7 @@ /* eslint-disable no-case-declarations */ import type { SBType } from '@storybook/types'; import type { TSType, TSSigType } from './types'; +import { parseLiteral } from '../utils'; const convertSig = (type: TSSigType) => { switch (type.type) { @@ -37,6 +38,18 @@ export const convert = (type: TSType): SBType | void => { case 'signature': return { ...base, ...convertSig(type) }; case 'union': + let result; + if (type.elements.every((element) => element.name === 'literal')) { + result = { + ...base, + name: 'enum', + // @ts-expect-error fix types + value: type.elements.map((v) => parseLiteral(v.value)), + }; + } else { + result = { ...base, name, value: type.elements.map(convert) }; + } + return result; case 'intersection': return { ...base, name, value: type.elements.map(convert) }; default: diff --git a/code/lib/docs-tools/src/argTypes/convert/typescript/types.ts b/code/lib/docs-tools/src/argTypes/convert/typescript/types.ts index dee016d76734..aed18f3f4160 100644 --- a/code/lib/docs-tools/src/argTypes/convert/typescript/types.ts +++ b/code/lib/docs-tools/src/argTypes/convert/typescript/types.ts @@ -33,7 +33,7 @@ type TSObjectSigType = TSBaseType & { }; type TSScalarType = TSBaseType & { - name: 'any' | 'boolean' | 'number' | 'void' | 'string' | 'symbol'; + name: 'any' | 'boolean' | 'number' | 'void' | 'string' | 'symbol' | 'literal'; }; type TSArrayType = TSBaseType & { diff --git a/code/lib/docs-tools/src/argTypes/convert/utils.ts b/code/lib/docs-tools/src/argTypes/convert/utils.ts index 6523490388a8..8af215e69aec 100644 --- a/code/lib/docs-tools/src/argTypes/convert/utils.ts +++ b/code/lib/docs-tools/src/argTypes/convert/utils.ts @@ -1,3 +1,10 @@ const QUOTE_REGEX = /^['"]|['"]$/g; export const trimQuotes = (str: string) => str.replace(QUOTE_REGEX, ''); export const includesQuotes = (str: string) => QUOTE_REGEX.test(str); +export const parseLiteral = (str: string) => { + const trimmedValue = trimQuotes(str); + + return includesQuotes(str) || Number.isNaN(Number(trimmedValue)) + ? trimmedValue + : Number(trimmedValue); +}; From f5430d37636a711c7dcc368a0bf36dc36829ab7d Mon Sep 17 00:00:00 2001 From: Jeppe Reinhold Date: Mon, 28 Aug 2023 15:37:37 +0200 Subject: [PATCH 06/83] rename release preparement workflows --- ...release.yml => prepare-hotfix-release.yml} | 4 +- ...rerelease.yml => prepare-next-release.yml} | 2 +- CONTRIBUTING/RELEASING.md | 70 ++++++++++--------- scripts/release/generate-pr-description.ts | 6 +- 4 files changed, 44 insertions(+), 38 deletions(-) rename .github/workflows/{prepare-patch-release.yml => prepare-hotfix-release.yml} (99%) rename .github/workflows/{prepare-prerelease.yml => prepare-next-release.yml} (99%) diff --git a/.github/workflows/prepare-patch-release.yml b/.github/workflows/prepare-hotfix-release.yml similarity index 99% rename from .github/workflows/prepare-patch-release.yml rename to .github/workflows/prepare-hotfix-release.yml index c88022c7ea01..6ee8d3091c18 100644 --- a/.github/workflows/prepare-patch-release.yml +++ b/.github/workflows/prepare-hotfix-release.yml @@ -16,8 +16,8 @@ concurrency: cancel-in-progress: true jobs: - prepare-patch-pull-request: - name: Prepare patch pull request + prepare-hotfix-pull-request: + name: Prepare hotfix pull request runs-on: ubuntu-latest environment: release defaults: diff --git a/.github/workflows/prepare-prerelease.yml b/.github/workflows/prepare-next-release.yml similarity index 99% rename from .github/workflows/prepare-prerelease.yml rename to .github/workflows/prepare-next-release.yml index 1250aedcfaa3..42695e823cc6 100644 --- a/.github/workflows/prepare-prerelease.yml +++ b/.github/workflows/prepare-next-release.yml @@ -34,7 +34,7 @@ concurrency: cancel-in-progress: true jobs: - prepare-prerelease-pull-request: + prepare-next-pull-request: name: Prepare prerelease pull request runs-on: ubuntu-latest environment: release diff --git a/CONTRIBUTING/RELEASING.md b/CONTRIBUTING/RELEASING.md index 0997b757b6ea..e81029088f8c 100644 --- a/CONTRIBUTING/RELEASING.md +++ b/CONTRIBUTING/RELEASING.md @@ -8,8 +8,8 @@ - [Introduction](#introduction) - [Branches](#branches) - [Release Pull Requests](#release-pull-requests) - - [Prereleases](#prereleases) - - [Patch Releases](#patch-releases) + - [`next`-releases](#next-releases) + - [Hotfix Releases](#hotfix-releases) - [Publishing](#publishing) - [👉 How to Release](#-how-to-release) - [1. Find the Prepared Pull Request](#1-find-the-prepared-pull-request) @@ -21,6 +21,8 @@ - [7. See the "Publish" Workflow Finish](#7-see-the-publish-workflow-finish) - [Releasing Locally in an Emergency 🚨](#releasing-locally-in-an-emergency-) - [Canary Releases](#canary-releases) + - [With GitHub UI](#with-github-ui) + - [With the CLI](#with-the-cli) - [Versioning Scenarios](#versioning-scenarios) - [Prereleases - `7.1.0-alpha.12` -\> `7.1.0-alpha.13`](#prereleases---710-alpha12---710-alpha13) - [Prerelease promotions - `7.1.0-alpha.13` -\> `7.1.0-beta.0`](#prerelease-promotions---710-alpha13---710-beta0) @@ -31,7 +33,7 @@ - [Prerelease of upcoming patch release - `7.0.20` -\> `7.0.21-alpha.0`](#prerelease-of-upcoming-patch-release---7020---7021-alpha0) - [Merges to `main` without versioning](#merges-to-main-without-versioning) - [FAQ](#faq) - - [When should I use the "patch" label?](#when-should-i-use-the-patch-label) + - [When should I use the "patch:yes" label?](#when-should-i-use-the-patchyes-label) - [How do I make changes to the release tooling/process?](#how-do-i-make-changes-to-the-release-toolingprocess) - [Why do I need to re-trigger workflows to update the changelog?](#why-do-i-need-to-re-trigger-workflows-to-update-the-changelog) - [Which combination of inputs creates the version bump I need?](#which-combination-of-inputs-creates-the-version-bump-i-need) @@ -50,8 +52,8 @@ The release process is based on automatically created "Release Pull Requests", t A designated Releaser -- which may rotate between core team members -- will go through the release process in the current Release PR. This process is implemented with NodeJS scripts in [`scripts/release`](../scripts/release/) and three GitHub Actions workflows: -- [Prepare Prerelease PR](../.github/workflows/prepare-prerelease.yml) -- [Prepare Patch PR](../.github/workflows/prepare-patch-release.yml) +- [Prepare `next` PR](../.github/workflows/prepare-next-release.yml) +- [Prepare hotfix PR](../.github/workflows/prepare-hotfix-release.yml) - [Publish](../.github/workflows/publish.yml) > **Note** @@ -115,18 +117,18 @@ A few key points to note in this flow: - The changelogs are committed during the preparation, but the packages are not version bumped and not published until later. - The release pull requests don't target their working branches (`next` and `main`), but rather `next-release` and `latest-release`. -### Prereleases +### `next`-releases > **Note** -> Workflow: [`prepare-prerelease.yml`](../.github/workflows/prepare-prerelease.yml) +> Workflow: [`prepare-next-release.yml`](../.github/workflows/prepare-next-release.yml) -Prereleases are prepared with all content from the `next` branch. The changelog is generated by examining the git history, and looking up all the commits and pull requests between the current prerelease (on `next-release`) and `HEAD` of `next`. +`next`-releases are prepared with all content from the `next` branch. The changelog is generated by examining the git history, and looking up all the commits and pull requests between the current prerelease (on `next-release`) and `HEAD` of `next`. The default versioning strategy is to increase the current prerelease number, as described in [Prereleases - `7.1.0-alpha.12` -> `7.1.0-alpha.13`](#prereleases---710-alpha12---710-alpha13). If there is no prerelease number (i.e., we just released a new stable minor/major version), it will add one to a patch bump, so it would go from `7.2.0` to `7.2.1-0` by default. Prerelease PRs are only created if there are actual changes to release. Content labeled with "build" or "documentation" is [not considered "releasable"](#which-changes-are-considered-releasable-and-what-does-it-mean) and is not user-facing, so it doesn't make sense to create a release. This is explained in more detail in [Why are no release PRs being prepared?](#why-are-no-release-prs-being-prepared). -The preparation workflow will create a new branch from `next`, called `version-prerelease-from-`, and open a pull request targeting `next-release`. When the Releaser merges it, the [publish workflow](#publishing) will merge `next-release` into `next`. +The preparation workflow will create a new branch from `next`, called `version-next-from-`, and open a pull request targeting `next-release`. When the Releaser merges it, the [publish workflow](#publishing) will merge `next-release` into `next`. Here's an example of a workflow where a feature and a bugfix have been created and then released to a new `7.1.0-alpha.29` version. All the commits highlighted with square dots are the ones that will be considered when generating the changelog. @@ -157,20 +159,20 @@ gitGraph merge next-release ``` -### Patch Releases +### Hotfix Releases > **Note** -> Workflow: [`prepare-patch-release.yml`](../.github/workflows/prepare-patch-release.yml) +> Workflow: [`prepare-hotfix-release.yml`](../.github/workflows/prepare-hotfix-release.yml) -Patch releases are created by [cherry-picking](https://www.atlassian.com/git/tutorials/cherry-pick) any merged, unreleased pull requests that have the "**patch**" label applied to the `next` branch. The merge commit of said pull requests are cherry-picked. +Hotfix releases are created by [cherry-picking](https://www.atlassian.com/git/tutorials/cherry-pick) any merged, unreleased pull requests that have the "**patch:yes**" label applied to the `next` branch. The merge commit of said pull requests are cherry-picked. -Sometimes it is desired to pick pull requests back to `main` even if they are not considered "releasable". Unlike prerelease preparation, patch releases will not be canceled if the content is not releasable. It might not make sense to create a new patch release if the changes are only for documentation and/or internal build systems. However, getting the changes back to `main` is the only way to deploy the documentation to the production docs site. You may also want to cherry-pick changes to internal CI to fix issues. These are valid scenarios where you want to cherry-pick the changes without being blocked on "releasable" content. In these cases, where all cherry picks are non-releasable, the preparation workflow creates a "merging" pull request instead of a "releasing" pull request. This pull request does not bump versions or update changelogs; it just cherry-picks the changes and allows you to merge them into `latest-release` -> `main`. +Sometimes it is desired to pick pull requests back to `main` even if they are not considered "releasable". Unlike `next`-release preparation, hotfix releases will not be canceled if the content is not releasable. It might not make sense to create a new hotfix release if the changes are only for documentation and/or internal build systems. However, getting the changes back to `main` is the only way to deploy the documentation to the production docs site. You may also want to cherry-pick changes to internal CI to fix issues. These are valid scenarios where you want to cherry-pick the changes without being blocked on "releasable" content. In these cases, where all cherry picks are non-releasable, the preparation workflow creates a "merging" pull request instead of a "releasing" pull request. This pull request does not bump versions or update changelogs; it just cherry-picks the changes and allows you to merge them into `latest-release` -> `main`. The preparation workflow sequentially cherry-picks each patch pull request to its branch. If this cherry-picking fails due to conflicts or other reasons, it is ignored and the next pull request is processed. All failing cherry-picks are listed in the release pull request's description, for the Releaser to manually cherry-pick during the release process. This problem occurs more often when `main` and `next` diverge, i.e. the longer it has been since a stable major/minor release. -Similar to the prerelease flow, the preparation workflow for patches will create a new branch from `main` called `version-patch-from-`, and open a pull request that targets `latest-release`. When the pull request is merged by the Releaser, the [publish workflow](#publishing) will eventually merge `latest-release` into `main`. +Similar to the `next`-release flow, the preparation workflow for patches will create a new branch from `main` called `version-hotfix-from-`, and open a pull request that targets `latest-release`. When the pull request is merged by the Releaser, the [publish workflow](#publishing) will eventually merge `latest-release` into `main`. -Here is an example of a workflow where a feature and two bug fixes have been merged to `next`. Only the bug fixes have the "**patch**" label, so only those two go into the new `7.0.19` release. Note that it is the merge commits to `next` that are cherry-picked, not the commits on the bugfix branches. +Here is an example of a workflow where a feature and two bug fixes have been merged to `next`. Only the bug fixes have the "**patch:yes**" label, so only those two go into the new `7.0.19` release. Note that it is the merge commits to `next` that are cherry-picked, not the commits on the bugfix branches. ```mermaid gitGraph @@ -213,16 +215,15 @@ gitGraph > **Note** > Workflow: [`publish.yml`](../.github/workflows/publish.yml) -When either a prerelease or a patch release branch is merged into `main` or `next-release`, the publishing workflow is triggered. This workflow performs the following tasks: +When either a `next`-release or a hotfix release branch is merged into `latest-release` or `next-release`, the publishing workflow is triggered. This workflow performs the following tasks: 1. Bump versions of all packages according to the plan from the prepared PRs 2. Install dependencies and build all packages. 3. Publish packages to npm. -4. (If this is a patch release, add the "**picked**" label to all relevant pull requests.) +4. (If this is a hotfix release, add the "**patch:done**" label to all relevant pull requests.) 5. Create a new GitHub Release, including a version tag in the release branch (`latest-release` or `next-release`). 6. Merge the release branch into the core branch (`main` or `next`). -7. (If this is a patch release, copy the `CHANGELOG.md` changes from `main` to `next`.) -8. (If this is [a promotion from a prerelease to a stable release](#minormajor-releases---710-rc2---710-or-800-rc3---800), force push `next` to `main`.) +7. (If this is a hotfix release, copy the `CHANGELOG.md` changes from `main` to `next`.) The publish workflow runs in the "release" GitHub environment, which has the npm token required to publish packages to the `@storybook` npm organization. For security reasons, this environment can only be accessed from the four "core" branches: `main`, `next`, `latest-release` and `next-release`. @@ -300,10 +301,10 @@ When triggering the workflows, always choose the `next` branch as the base, unle The workflows can be triggered here: -- [Prepare prerelease PR](https://github.com/storybookjs/storybook/actions/workflows/prepare-prerelease.yml) -- [Prepare patch PR](https://github.com/storybookjs/storybook/actions/workflows/prepare-patch-release.yml) +- [Prepare prerelease PR](https://github.com/storybookjs/storybook/actions/workflows/prepare-next-release.yml) +- [Prepare patch PR](https://github.com/storybookjs/storybook/actions/workflows/prepare-hotfix-release.yml) -Crucially for prereleases, this is also where you change the versioning strategy if you need something else than the default as described in [Preparing - Prereleases](#prereleases). When triggering the prerelease workflow manually, you can optionally add inputs: +Crucially for prereleases, this is also where you change the versioning strategy if you need something else than the default as described in [Preparing - `next`-releases](#next-releases). When triggering the prerelease workflow manually, you can optionally add inputs: ![Screenshot of triggering the prerelease workflow in GitHub Actions, with a form that shows a release type selector and a prerelease identifier text field](prerelease-workflow-inputs.png) @@ -434,7 +435,7 @@ There are multiple types of releases that use the same principles, but are done ### Prereleases - `7.1.0-alpha.12` -> `7.1.0-alpha.13` -This is the default strategy for prereleases, there's nothing special needed to trigger this scenario. +This is the default strategy for `next`-releases, there's nothing special needed to trigger this scenario. ### Prerelease promotions - `7.1.0-alpha.13` -> `7.1.0-beta.0` @@ -445,14 +446,14 @@ To promote a prerelease to a new prerelease ID, during the [Re-trigger the Workf ### Minor/major releases - `7.1.0-rc.2` -> `7.1.0` or `8.0.0-rc.3` -> `8.0.0` -To promote a prerelease to a new prerelease ID, during the [Re-trigger the Workflow](#4-re-trigger-the-workflow) step, choose: +To promote a prerelease to a stable reelase, during the [Re-trigger the Workflow](#4-re-trigger-the-workflow) step, choose: - Release type: Patch - Prerelease ID: Leave empty The "Patch" release type ensures the current prerelease version gets promoted to a stable version without any major/minor/patch bumps. -This scenario is special as it turns the `next` branch into a stable branch (until the next prerelease). Therefore, this will also force push `next` to `main`, to ensure that `main` contains the latest stable release. Consequently, the history for `main` is lost. +This scenario is special as it will target `latest-release` instead of `next-release`, and thus merge into `main` when done, and not `next`. So it goes `next` -> `version-from- `latest-release` -> `main`. When this is done, the Releaser will need to trigger a new release on `next` that bumps the version to a new prerelease minor as described [just below](#first-prerelease-of-new-majorminor---710---720-alpha0-or-800-alpha0). ### First prerelease of new major/minor - `7.1.0` -> `7.2.0-alpha.0` or `8.0.0-alpha.0` @@ -463,7 +464,7 @@ This is the first prerelease after a stable major/minor has been released. The d ### Patch releases to stable - subset of `7.1.0-alpha.13` -> `7.0.14` -This is the default patch release scenario, which cherry picks patches to `main`. +This is the default hotfix release scenario, which cherry picks patches to `main`. ### Patch releases to earlier versions - subset of `7.1.0-alpha.13` -> `6.5.14` @@ -477,17 +478,17 @@ No process is defined for this. ### Merges to `main` without versioning -As described in more details in [the Patch Releases section](#patch-releases), there are scenarios where you want to patch [unreleasable](#which-changes-are-considered-releasable-and-what-does-it-mean) content back to `main` without bumping versions or publishing a new release. This happens automatically as long as all the unpicked patch pull requests have unreleasable labels. In that case the prepared patch pull request will change form slighty, to just cherry-picking the patches without bumping the versions. +As described in more details in [the Hotfix Releases section](#hotfix-releases), there are scenarios where you want to patch [unreleasable](#which-changes-are-considered-releasable-and-what-does-it-mean) content back to `main` without bumping versions or publishing a new release. This happens automatically as long as all the unpicked patch pull requests have unreleasable labels. In that case the prepared patch pull request will change form slighty, to just cherry-picking the patches without bumping the versions. ## FAQ -### When should I use the "patch" label? +### When should I use the "patch:yes" label? -Not all pull requests need to be patched back to the stable release, which is why only those with the **"patch"** label gets that treatment. But how do you decide whether or not a give pull requests should have that label? +Not all pull requests need to be patched back to the stable release, which is why only those with the **"patch:yes"** label gets that treatment. But how do you decide whether or not a give pull requests should have that label? -First of all, patches are only for fixes and minor improvements, and not completely new features. A pull request that introduces a new feature shouldn't be patched back to the stable release. +First of all, patches are only for important and time-sensitive fixes, and not minor improvements or completely new features. A pull request that introduces a new feature shouldn't be patched back to the stable release. -Second, any destabilizing changes shouldn't be patched back either. Breaking changes are reserved for major releases, but changes can be destabilizing without being strictly breaking, and those shouldn't be patched back either. An example is moving the settings panel in the manager to a completely different place, but with the same functionality. Many wouldn't consider this breaking because no usage will stop working because of this, but it can be considered a destabilizing change because user behavior have to change as a result of this. +Second, PRs that changes the code in a big architectural way should ideally not be patched back either, because that makes merge conflicts more likely in the future. When in doubt ask the core team for their input. @@ -497,12 +498,15 @@ The whole process is based on [GitHub Action workflows](../.github/workflows/) a The short answer to "how", is to make changes as a regular pull request that is also patched back to `main`. -There's a longer answer too, but it's pretty confusing: +
+ There's a longer answer too, but it's pretty confusing The scripts run from either `main` or `next`, so if you're changing a release script, you must patch it back to `main` for it to have an effect on patch releases. If you need the change to take effect immediately, you must manually cherry pick it to `main`. For workflow file changes, they usually run from `next`, but patching them back is recommended for consistency. The "publish" workflow runs from `latest-release` and `next-release`, so you should always patch changes back for _that_. 🙃 +
+ ### Why do I need to re-trigger workflows to update the changelog? Changes to pull requests' titles, labels or even reverts won't be reflected in the release pull request. This is because the workflow only triggers on pushes to `next`, not when pull request meta data is changed. @@ -536,7 +540,7 @@ If a pull request does not have any of the above labels at the time of release, This is most likely because `next` only contains [unreleasable changes](#which-changes-are-considered-releasable-and-what-does-it-mean), which causes the preparation workflow to cancel itself. That's because it doesn't make sense to prepare a new release if all the changes are unreleasable, as that wouldn't bump the version nor write a new changelog entry, so "releasing" it would just merge it back to `next` without any differences. -You can always see the workflows and if they have been cancelled [here for prereleases](https://github.com/storybookjs/storybook/actions/workflows/prepare-prerelease.yml) and [here for patch releases](https://github.com/storybookjs/storybook/actions/workflows/prepare-patch-release.yml). +You can always see the workflows and if they have been cancelled [here for `next`-releases](https://github.com/storybookjs/storybook/actions/workflows/prepare-next-release.yml) and [here for hotfix releases](https://github.com/storybookjs/storybook/actions/workflows/prepare-hotfix-release.yml). ### Why do we need separate release branches? diff --git a/scripts/release/generate-pr-description.ts b/scripts/release/generate-pr-description.ts index 16a6928e994f..f912c5885225 100644 --- a/scripts/release/generate-pr-description.ts +++ b/scripts/release/generate-pr-description.ts @@ -141,7 +141,9 @@ export const generateReleaseDescription = ({ changelogText: string; manualCherryPicks?: string; }): string => { - const workflow = semver.prerelease(nextVersion) ? 'prepare-prerelease' : 'prepare-patch-release'; + const workflow = semver.prerelease(nextVersion) + ? 'prepare-next-release' + : 'prepare-hotfix-release'; const workflowUrl = `https://github.com/storybookjs/storybook/actions/workflows/${workflow}.yml`; return ( @@ -215,7 +217,7 @@ export const generateNonReleaseDescription = ( ${manualCherryPicks || ''} - If you've made any changes (change PR titles, revert PRs), manually trigger a re-generation of this PR with [this workflow](https://github.com/storybookjs/storybook/actions/workflows/prepare-patch-release.yml) and wait for it to finish. + If you've made any changes (change PR titles, revert PRs), manually trigger a re-generation of this PR with [this workflow](https://github.com/storybookjs/storybook/actions/workflows/prepare-hotfix-release.yml) and wait for it to finish. Feel free to manually commit any changes necessary to this branch **after** you've done the last re-generation, following the [Make Manual Changes](https://github.com/storybookjs/storybook/blob/next/CONTRIBUTING/RELEASING.md#5-make-manual-changes) section in the docs. From 8d582d7e4dd66b0b1c85044afcf8228240eb1f8e Mon Sep 17 00:00:00 2001 From: Jeppe Reinhold Date: Tue, 29 Aug 2023 14:28:23 +0200 Subject: [PATCH 07/83] merge stable to latest-release instead of next-release, resolving merge conflicts --- .github/workflows/prepare-hotfix-release.yml | 4 +-- .github/workflows/prepare-next-release.yml | 27 +++++++++++++++----- CONTRIBUTING/RELEASING.md | 16 ++++++------ scripts/release/generate-pr-description.ts | 1 + scripts/release/is-pr-frozen.ts | 6 ++--- 5 files changed, 35 insertions(+), 19 deletions(-) diff --git a/.github/workflows/prepare-hotfix-release.yml b/.github/workflows/prepare-hotfix-release.yml index 6ee8d3091c18..2a331fb5f3ea 100644 --- a/.github/workflows/prepare-hotfix-release.yml +++ b/.github/workflows/prepare-hotfix-release.yml @@ -56,7 +56,7 @@ jobs: id: check-frozen env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: yarn release:is-pr-frozen --patch + run: yarn release:is-pr-frozen --hotfix - name: Cancel when frozen if: steps.check-frozen.outputs.frozen == 'true' && github.event_name != 'workflow_dispatch' @@ -121,7 +121,7 @@ jobs: git config --global user.email '32066757+storybook-bot@users.noreply.github.com' git checkout -b version-patch-from-${{ steps.versions.outputs.current }} git add . - git commit -m "Write changelog for ${{ steps.versions.outputs.next }}" || true + git commit -m "Write changelog for ${{ steps.versions.outputs.next }} [skip ci]" || true git push --force origin version-patch-from-${{ steps.versions.outputs.current }} - name: Generate PR description diff --git a/.github/workflows/prepare-next-release.yml b/.github/workflows/prepare-next-release.yml index 42695e823cc6..ad79b5f1b3fe 100644 --- a/.github/workflows/prepare-next-release.yml +++ b/.github/workflows/prepare-next-release.yml @@ -112,21 +112,35 @@ jobs: run: | yarn release:version --deferred --release-type ${{ inputs.release-type || 'prerelease' }} ${{ inputs.pre-id && format('{0} {1}', '--pre-id', inputs.pre-id) || '' }} --verbose + - name: Check release vs prerelease + id: is-prerelease + run: yarn release:is-prerelease ${{ steps.bump-version.outputs.next-version }} + - name: Write changelog env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | yarn release:write-changelog ${{ steps.bump-version.outputs.next-version }} --verbose - - name: 'Commit changes to branch: version-prerelease-from-${{ steps.bump-version.outputs.current-version }}' + - name: 'Commit changes to branch: version-next-from-${{ steps.bump-version.outputs.current-version }}' working-directory: . run: | git config --global user.name 'storybook-bot' git config --global user.email '32066757+storybook-bot@users.noreply.github.com' - git checkout -b version-prerelease-from-${{ steps.bump-version.outputs.current-version }} + git checkout -b version-next-from-${{ steps.bump-version.outputs.current-version }} + git add . + git commit -m "Write changelog for ${{ steps.bump-version.outputs.next-version }} [skip ci]" || true + git push --force origin version-next-from-${{ steps.bump-version.outputs.current-version }} + + - name: Resolve merge-conflicts with base branch + if: steps.is-prerelease.outputs.prerelease == 'true' + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + git pull origin latest-release + git checkout --ours . git add . - git commit -m "Write changelog for ${{ steps.bump-version.outputs.next-version }}" || true - git push --force origin version-prerelease-from-${{ steps.bump-version.outputs.current-version }} + git commit -m "Merge latest-release into version-1 with conflicts resolved to ours [skip ci]" - name: Generate PR description id: description @@ -144,14 +158,15 @@ jobs: gh pr edit \ --repo "${{github.repository }}" \ --title "Release: $CAPITALIZED_RELEASE_TYPE ${{ inputs.pre-id && format('{0} ', inputs.pre-id) }}${{ steps.bump-version.outputs.next-version }}" \ + --base ${{ steps.is-prerelease.outputs.prerelease == 'true' && 'next-release' || 'latest-release' }} \ --body "${{ steps.description.outputs.description }}" else gh pr create \ --repo "${{github.repository }}"\ --title "Release: $CAPITALIZED_RELEASE_TYPE ${{ inputs.pre-id && format('{0} ', inputs.pre-id) }}${{ steps.bump-version.outputs.next-version }}" \ --label "release" \ - --base next-release \ - --head version-prerelease-from-${{ steps.bump-version.outputs.current-version }} \ + --base ${{ steps.is-prerelease.outputs.prerelease == 'true' && 'next-release' || 'latest-release' }} \ + --head version-next-from-${{ steps.bump-version.outputs.current-version }} \ --body "${{ steps.description.outputs.description }}" fi diff --git a/CONTRIBUTING/RELEASING.md b/CONTRIBUTING/RELEASING.md index e81029088f8c..ab71e8fe6b4d 100644 --- a/CONTRIBUTING/RELEASING.md +++ b/CONTRIBUTING/RELEASING.md @@ -150,10 +150,10 @@ gitGraph commit checkout next merge some-bugfix type: HIGHLIGHT - branch version-prerelease-from-7.1.0-alpha.28 + branch version-next-from-7.1.0-alpha.28 commit id: "write changelog" checkout next-release - merge version-prerelease-from-7.1.0-alpha.28 + merge version-next-from-7.1.0-alpha.28 commit id: "bump versions" tag: "7.1.0-alpha.29" checkout next merge next-release @@ -562,11 +562,11 @@ gitGraph branch some-simultaneous-bugfix commit checkout next - branch version-prerelease-from-7.1.0-alpha.28 + branch version-next-from-7.1.0-alpha.28 commit id checkout next merge some-simultaneous-bugfix type: HIGHLIGHT id: "whoops!" - merge version-prerelease-from-7.1.0-alpha.28 tag: "v7.1.0-alpha.29" + merge version-next-from-7.1.0-alpha.28 tag: "v7.1.0-alpha.29" ``` When publishing at the last commit with tag `v7.1.0-alpha.29`, it will publish whatever the content is at that point (all the square dots), which includes the "whoops!" commit from merging the bugfix. But the bugfix was never part of the release pull request because it got prepared before the bugfix was merged in. @@ -586,19 +586,19 @@ gitGraph branch some-simultanous-bugfix commit checkout next - branch version-prerelease-from-7.1.0-alpha.28 + branch version-next-from-7.1.0-alpha.28 commit id: "write changelog" checkout next merge some-simultanous-bugfix id: "whoops!" checkout next-release - merge version-prerelease-from-7.1.0-alpha.28 + merge version-next-from-7.1.0-alpha.28 commit id: "bump versions" tag: "v7.1.0-alpha.29" checkout next merge next-release - branch version-prerelease-from-7.1.0-alpha.29 + branch version-next-from-7.1.0-alpha.29 commit id: "write changelog again" checkout next-release - merge version-prerelease-from-7.1.0-alpha.29 + merge version-next-from-7.1.0-alpha.29 commit id: "bump versions again" tag: "v7.1.0-alpha.30" checkout next merge next-release diff --git a/scripts/release/generate-pr-description.ts b/scripts/release/generate-pr-description.ts index f912c5885225..7049a1aa44c8 100644 --- a/scripts/release/generate-pr-description.ts +++ b/scripts/release/generate-pr-description.ts @@ -52,6 +52,7 @@ const CHANGE_TITLES_TO_IGNORE = [ /\[ci skip\]/i, /^Update CHANGELOG\.md for.*/i, /^Release: (Pre)?(Patch|Minor|Major|Release).*\d+$/i, + /^Update \.\/docs\/versions/, ]; export const mapToChangelist = ({ diff --git a/scripts/release/is-pr-frozen.ts b/scripts/release/is-pr-frozen.ts index 70289b5369d8..27d3a37b7653 100644 --- a/scripts/release/is-pr-frozen.ts +++ b/scripts/release/is-pr-frozen.ts @@ -12,7 +12,7 @@ program .description( 'returns true if the versioning pull request associated with the current branch has the "freeze" label' ) - .option('-P, --patch', 'Look for patch PR instead of prerelease PR', false) + .option('-P, --patch', 'Look for hotfix PR instead of next PR', false) .option('-V, --verbose', 'Enable verbose logging', false); const CODE_DIR_PATH = path.join(__dirname, '..', '..', 'code'); @@ -43,10 +43,10 @@ const getRepo = async (verbose?: boolean): Promise => { }; export const run = async (options: unknown) => { - const { verbose, patch } = options as { verbose?: boolean; patch?: boolean }; + const { verbose, hotfix } = options as { verbose?: boolean; hotfix?: boolean }; const version = await getCurrentVersion(); - const branch = `version-${patch ? 'patch' : 'prerelease'}-from-${version}`; + const branch = `version-${hotfix ? 'hotfix' : 'next'}-from-${version}`; console.log(`đŸ’Ŧ Determining if pull request from branch '${chalk.blue(branch)}' is frozen`); From 1161b7ada4b93a0f0bb6a9dda7a34abacbf479dd Mon Sep 17 00:00:00 2001 From: Jeppe Reinhold Date: Tue, 29 Aug 2023 14:42:41 +0200 Subject: [PATCH 08/83] more renaming of new release workflows --- CONTRIBUTING/RELEASING.md | 42 +++++++++++----------- scripts/release/generate-pr-description.ts | 2 +- scripts/release/is-pr-frozen.ts | 2 +- 3 files changed, 22 insertions(+), 24 deletions(-) diff --git a/CONTRIBUTING/RELEASING.md b/CONTRIBUTING/RELEASING.md index ab71e8fe6b4d..05533fccb387 100644 --- a/CONTRIBUTING/RELEASING.md +++ b/CONTRIBUTING/RELEASING.md @@ -45,8 +45,8 @@ This document explains the release process for the Storybook monorepo. There are two types: -1. Prereleases and major/minor releases - releasing any content that is on the `next` branch -2. Patch releases - picking any content from `next` to `main`, that needs to be patched back to the current stable minor release +1. `next`-releases - releasing any content that is on the `next` branch, either prereleases or stable releases +2. Hotfix releases - picking any content from `next` to `main`, that needs to be patched back to the current stable minor release The release process is based on automatically created "Release Pull Requests", that when merged will trigger a new version to be released. @@ -57,7 +57,7 @@ A designated Releaser -- which may rotate between core team members -- will go t - [Publish](../.github/workflows/publish.yml) > **Note** -> This document distinguishes between **patch** releases and **prereleases**. This is a simplification; stable major and minor releases work the same way as prereleases. The distinction reflects the difference between patching an existing minor version on `main` or releasing a new minor/major/prerelease from `next`. +> This document distinguishes between **`next`-releases** and **hotfix** releases. The distinction reflects the difference between patching an existing minor version on `main` or releasing a new minor/major/prerelease from `next`. ### Branches @@ -103,7 +103,7 @@ Two GitHub Actions workflows automatically create release pull requests, one for The high-level flow is: 1. When a PR is merged to `next` (or a commit is pushed), both release pull requests are (re)generated. -2. They create a new branch - `version-(patch|prerelease)-from-`. +2. They create a new branch - `version-(hotfix|next)-from-`. 3. They calculate which version to bump to according to the version strategy. 4. They update `CHANGELOG(.prerelease).md` with all changes detected. 5. They commit everything. @@ -126,7 +126,7 @@ A few key points to note in this flow: The default versioning strategy is to increase the current prerelease number, as described in [Prereleases - `7.1.0-alpha.12` -> `7.1.0-alpha.13`](#prereleases---710-alpha12---710-alpha13). If there is no prerelease number (i.e., we just released a new stable minor/major version), it will add one to a patch bump, so it would go from `7.2.0` to `7.2.1-0` by default. -Prerelease PRs are only created if there are actual changes to release. Content labeled with "build" or "documentation" is [not considered "releasable"](#which-changes-are-considered-releasable-and-what-does-it-mean) and is not user-facing, so it doesn't make sense to create a release. This is explained in more detail in [Why are no release PRs being prepared?](#why-are-no-release-prs-being-prepared). +`next`-PRs are only created if there are actual changes to release. Content labeled with "build" or "documentation" is [not considered "releasable"](#which-changes-are-considered-releasable-and-what-does-it-mean) and is not user-facing, so it doesn't make sense to create a release. This is explained in more detail in [Why are no release PRs being prepared?](#why-are-no-release-prs-being-prepared). The preparation workflow will create a new branch from `next`, called `version-next-from-`, and open a pull request targeting `next-release`. When the Releaser merges it, the [publish workflow](#publishing) will merge `next-release` into `next`. @@ -245,9 +245,9 @@ The high-level workflow for a Releaser is: Look for the release pull request that has been prepared for the type of release you're about to release: -- "Release: Prerelease ``" for prereleases -- "Release: Patch ``" for patch releases -- "Release: Merge patches to `main` (without version bump)" for patches without releases +- "Release: Prerelease|Minor|Major ``" for releases from `next` +- "Release: Hotfix ``" for hotfix releases +- "Release: Merge patches to `main` (without version bump)" for hotfixes without releases For example: https://github.com/storybookjs/storybook/pull/23148 @@ -267,7 +267,7 @@ It is important to verify that the release includes the right content. Key eleme For example, check if it's a breaking change that isn't allowed in a minor prerelease, or if it's a new feature in a patch release. If it's not suitable, revert the pull request and notify the author. -Sometimes when doing a patch release, a pull request can have the "patch" label but you don't want that change to be part of this release. Maybe you're not confident in the change, or you require more input from maintainers before releasing it. In those situations you should remove the "patch" label from the pull request and follow through with the release (make sure to re-trigger the workflow). When the release is done, add the patch label back again, so it will be part of the next release. +Sometimes when doing a patch release, a pull request can have the "patch:yes" label but you don't want that change to be part of this release. Maybe you're not confident in the change, or you require more input from maintainers before releasing it. In those situations you should remove the "patch:yes" label from the pull request and follow through with the release (make sure to re-trigger the workflow). When the release is done, add the "patch:yes" label back again, so it will be part of the next release. 2. Is the pull request title correct? @@ -280,9 +280,9 @@ If a pull request changes multiple places, it can be hard to choose an area - th Some labels have specific meanings when it comes to releases. It's important that each pull request has labels that accurately describe the change, as labels can determine if a pull request is included in the changelog or not. This is explained further in the [Which changes are considered "releasable", and what does it mean?](#which-changes-are-considered-releasable-and-what-does-it-mean) section. -4. Patches: has it already been released in a prerelease? +4. Hotfixes: has it already been released in a prerelease? -If this is a patch release, make sure that all pull requests have already been released in a prerelease. If some haven't, create a new prerelease first. +If this is a hotfix release, make sure that all pull requests have already been released in a prerelease. If some haven't, create a new prerelease first. This is not a technical requirement, but it's a good practice to ensure that a change doesn't break a prerelease before releasing it to stable. @@ -301,12 +301,12 @@ When triggering the workflows, always choose the `next` branch as the base, unle The workflows can be triggered here: -- [Prepare prerelease PR](https://github.com/storybookjs/storybook/actions/workflows/prepare-next-release.yml) -- [Prepare patch PR](https://github.com/storybookjs/storybook/actions/workflows/prepare-hotfix-release.yml) +- [Prepare next PR](https://github.com/storybookjs/storybook/actions/workflows/prepare-next-release.yml) +- [Prepare hotfix PR](https://github.com/storybookjs/storybook/actions/workflows/prepare-hotfix-release.yml) Crucially for prereleases, this is also where you change the versioning strategy if you need something else than the default as described in [Preparing - `next`-releases](#next-releases). When triggering the prerelease workflow manually, you can optionally add inputs: -![Screenshot of triggering the prerelease workflow in GitHub Actions, with a form that shows a release type selector and a prerelease identifier text field](prerelease-workflow-inputs.png) +![Screenshot of triggering the next-release workflow in GitHub Actions, with a form that shows a release type selector and a prerelease identifier text field](prerelease-workflow-inputs.png) See [Versioning Scenarios](#versioning-scenarios) for a description of each version bump scenario, how to activate it and what it does, and [Which combination of inputs creates the version bump I need?](#which-combination-of-inputs-creates-the-version-bump-i-need) for a detailed description of the workflow inputs. @@ -340,11 +340,11 @@ You can inspect the workflows to see what they are running and copy that, but he Before you start you should make sure that your working tree is clean and the repository is in a clean state by running `git clean -xdf`. -1. Create a new branch from either `next` (prereleases) or `main` (patches) +1. Create a new branch from either `next` or `main` (hotfixes) 2. Get all tags: `git fetch --tags origin` 3. Install dependencies: `yarn task --task=install --start-from=install` 4. `cd scripts` -5. (If patch release) Cherry pick: +5. (If hotfix release) Cherry pick: 1. `yarn release:pick-patches` 2. Manually cherry pick any necessary patches based on the previous output 6. Bump versions: @@ -362,21 +362,21 @@ Before you start you should make sure that your working tree is clean and the re 12. (If automatic publishing is still working, it should kick in now and the rest of the steps can be skipped) 13. `cd ..` 14. Publish to the registry: `YARN_NPM_AUTH_TOKEN= yarn release:publish --tag <"next" OR "latest"> --verbose` -15. (If patch release) `yarn release:label-patches` +15. (If hotfix release) `yarn release:label-patches` 16. Manually create a GitHub Release with a tag that is the new version and the target being `latest-release` or `next-release`. 17. Merge to core branch: 1. `git checkout <"next"|"main">` 2. `git pull` 3. `git merge <"next-release"|"latest-release">` 4. `git push origin` -18. (If patch release) Sync `CHANGELOG.md` to `next` with: +18. (If hotfix release) Sync `CHANGELOG.md` to `next` with: 1. `git checkout next` 2. `git pull` 3. `git checkout origin/main ./CHANGELOG.md` 4. `git add ./CHANGELOG.md` 5. `git commit -m "Update CHANGELOG.md for v"` 6. `git push origin` -19. (If prerelease) Sync `versions/next.json` from `next` to `main` +19. (If `next`-release) Sync `versions/next.json` from `next` to `main` 1. `git checkout main` 2. `git pull` 3. `git checkout origin/next ./docs/versions/next.json` @@ -448,11 +448,9 @@ To promote a prerelease to a new prerelease ID, during the [Re-trigger the Workf To promote a prerelease to a stable reelase, during the [Re-trigger the Workflow](#4-re-trigger-the-workflow) step, choose: -- Release type: Patch +- Release type: Patch, Minor or Major - Prerelease ID: Leave empty -The "Patch" release type ensures the current prerelease version gets promoted to a stable version without any major/minor/patch bumps. - This scenario is special as it will target `latest-release` instead of `next-release`, and thus merge into `main` when done, and not `next`. So it goes `next` -> `version-from- `latest-release` -> `main`. When this is done, the Releaser will need to trigger a new release on `next` that bumps the version to a new prerelease minor as described [just below](#first-prerelease-of-new-majorminor---710---720-alpha0-or-800-alpha0). ### First prerelease of new major/minor - `7.1.0` -> `7.2.0-alpha.0` or `8.0.0-alpha.0` diff --git a/scripts/release/generate-pr-description.ts b/scripts/release/generate-pr-description.ts index 7049a1aa44c8..aa7dfe7e53e0 100644 --- a/scripts/release/generate-pr-description.ts +++ b/scripts/release/generate-pr-description.ts @@ -18,7 +18,7 @@ program 'Which version to generate changelog from, eg. "7.0.7". Defaults to the version at code/package.json' ) .option('-N, --next-version ', 'Which version to generate changelog to, eg. "7.0.8"') - .option('-P, --unpicked-patches', 'Set to only consider PRs labeled with "patch" label') + .option('-P, --unpicked-patches', 'Set to only consider PRs labeled with "patch:yes" label') .option( '-M, --manual-cherry-picks ', 'A stringified JSON array of commit hashes, of patch PRs that needs to be cherry-picked manually' diff --git a/scripts/release/is-pr-frozen.ts b/scripts/release/is-pr-frozen.ts index 27d3a37b7653..56f75d0ba33b 100644 --- a/scripts/release/is-pr-frozen.ts +++ b/scripts/release/is-pr-frozen.ts @@ -12,7 +12,7 @@ program .description( 'returns true if the versioning pull request associated with the current branch has the "freeze" label' ) - .option('-P, --patch', 'Look for hotfix PR instead of next PR', false) + .option('-H, --hotfix', 'Look for hotfix PR instead of next PR', false) .option('-V, --verbose', 'Enable verbose logging', false); const CODE_DIR_PATH = path.join(__dirname, '..', '..', 'code'); From d6297bff9975b1e1d2949eab0461fe0ac24338e0 Mon Sep 17 00:00:00 2001 From: Jeppe Reinhold Date: Wed, 30 Aug 2023 09:19:30 +0200 Subject: [PATCH 09/83] only commit changelog changes when there are actual changes --- .github/workflows/publish.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 18e23c174162..e52af0dc1c78 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -160,8 +160,10 @@ jobs: git pull git checkout origin/main ./CHANGELOG.md git add ./CHANGELOG.md - git commit -m "Update CHANGELOG.md for v${{ steps.version.outputs.current-version }} [skip ci]" - git push origin next + if ! git diff-index --quiet HEAD; then + git commit -m "Update CHANGELOG.md for v${{ steps.version.outputs.current-version }} [skip ci]" + git push origin next + fi - name: Sync version JSONs from `next-release` to `main` if: github.ref_name == 'next-release' From 670bc5167af3f3ec70653460c864e5c91dadb633 Mon Sep 17 00:00:00 2001 From: Jeppe Reinhold Date: Wed, 30 Aug 2023 10:01:55 +0200 Subject: [PATCH 10/83] add comments --- .github/workflows/publish.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index e52af0dc1c78..821bbf1d15e6 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -111,6 +111,12 @@ jobs: id: target run: echo "target=${{ github.ref_name == 'next-release' && 'next' || 'main' }}" >> $GITHUB_OUTPUT + # TODO: create a commit on next that does the following: + # bump version accordingly + # update changelog + # update version JSONs + # push to next + # TODO: ensure all of this logic works if a release from next targets latest-release. steps.targets.outputs? - name: Get changelog for ${{ steps.version.outputs.current-version }} if: steps.publish-needed.outputs.published == 'false' id: changelog @@ -160,6 +166,7 @@ jobs: git pull git checkout origin/main ./CHANGELOG.md git add ./CHANGELOG.md + # only commit if there are changes if ! git diff-index --quiet HEAD; then git commit -m "Update CHANGELOG.md for v${{ steps.version.outputs.current-version }} [skip ci]" git push origin next From d5df684fc7c107bceffddfa176d2799c60c9a58e Mon Sep 17 00:00:00 2001 From: Jeppe Reinhold Date: Wed, 30 Aug 2023 10:44:03 +0200 Subject: [PATCH 11/83] simplify --- .github/workflows/publish.yml | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 821bbf1d15e6..47e9798ca46f 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -166,11 +166,8 @@ jobs: git pull git checkout origin/main ./CHANGELOG.md git add ./CHANGELOG.md - # only commit if there are changes - if ! git diff-index --quiet HEAD; then - git commit -m "Update CHANGELOG.md for v${{ steps.version.outputs.current-version }} [skip ci]" - git push origin next - fi + git commit -m "Update CHANGELOG.md for v${{ steps.version.outputs.current-version }} [skip ci]" || true + git push origin next - name: Sync version JSONs from `next-release` to `main` if: github.ref_name == 'next-release' From 431ec639fe559b0911427087a8f1d3c0b53cea53 Mon Sep 17 00:00:00 2001 From: Jeppe Reinhold Date: Thu, 31 Aug 2023 11:14:00 +0200 Subject: [PATCH 12/83] ensure next is always ahead of main during stable releases --- .github/workflows/publish.yml | 38 ++++++++++++++++++++++++++--------- 1 file changed, 28 insertions(+), 10 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 47e9798ca46f..c31ef7c6a0d3 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -63,7 +63,6 @@ jobs: yarn install - name: Apply deferred version bump and commit - id: version-bump working-directory: . run: | CURRENT_VERSION=$(cat ./code/package.json | jq '.version') @@ -111,11 +110,6 @@ jobs: id: target run: echo "target=${{ github.ref_name == 'next-release' && 'next' || 'main' }}" >> $GITHUB_OUTPUT - # TODO: create a commit on next that does the following: - # bump version accordingly - # update changelog - # update version JSONs - # push to next # TODO: ensure all of this logic works if a release from next targets latest-release. steps.targets.outputs? - name: Get changelog for ${{ steps.version.outputs.current-version }} if: steps.publish-needed.outputs.published == 'false' @@ -129,6 +123,7 @@ jobs: # when this is a patch release from main, label any patch PRs included in the release # when this is a stable release from next, label ALL patch PRs found, as they will per definition be "patched" now + # TODO: this won't work anymore for releases from next to latest-release - name: Label patch PRs as picked if: github.ref_name == 'latest-release' || (steps.publish-needed.outputs.published == 'false' && steps.target.outputs.target == 'next' && !steps.is-prerelease.outputs.prerelease) env: @@ -157,6 +152,33 @@ jobs: git merge ${{ github.ref_name }} git push origin ${{ steps.target.outputs.target }} + # This step ensures that next is always one minor ahead of main + # this is needed when releasing a stable from next + # next will be at eg. 7.4.0-alpha.4, and main will be at 7.3.0 + # then we release 7.4.0 by merging next to latest-release to main + # we then ensure here that next is bumped to 7.5.0 - without releasing it + # if this is a hotfix release bumping main to 7.3.1, next will not be touched because it's already ahead + - name: Ensure `next` is a minor version ahead of `main` + if: github.ref_name == 'latest-release' + run: | + git checkout next + git pull + + CODE_PKG_JSON=$(cat ../code/package.json) + VERSION_ON_NEXT=$(echo $CODE_PKG_JSON | jq --raw-output '.version') + VERSION_ON_MAIN="${{ steps.version.outputs.current-version }}" + + # check if next is behind current version + if NEXT_IS_BEHIND=$(npx semver --include-prerelease --range "<$VERSION_ON_MAIN" "$VERSION_ON_NEXT" 2>/dev/null); then + # temporarily set the version on next to be the same as main... + echo "$CODE_PKG_JSON" | jq --arg version "$VERSION_ON_MAIN" '.version = $version' > ../code/package.json + # ... then bump it by one minor + yarn release:version --release-type minor + git add .. + git commit -m "Bump next to be one minor ahead of main [skip ci]" + git push origin next + fi + - name: Sync CHANGELOG.md from `main` to `next` if: github.ref_name == 'latest-release' working-directory: . @@ -182,10 +204,6 @@ jobs: git commit -m "Update $VERSION_FILE for v${{ steps.version.outputs.current-version }}" git push origin main - - name: Overwrite main with next - if: steps.target.outputs.target == 'next' && steps.is-prerelease.outputs.prerelease == 'false' - run: git push --force origin next:main - - name: Report job failure to Discord if: failure() env: From 507516571bdf628c944632e78c136d859c7ee68e Mon Sep 17 00:00:00 2001 From: Jeppe Reinhold Date: Thu, 31 Aug 2023 12:51:27 +0200 Subject: [PATCH 13/83] improve readability of publish script --- .github/workflows/publish.yml | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index c31ef7c6a0d3..4f71006b7633 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -110,7 +110,6 @@ jobs: id: target run: echo "target=${{ github.ref_name == 'next-release' && 'next' || 'main' }}" >> $GITHUB_OUTPUT - # TODO: ensure all of this logic works if a release from next targets latest-release. steps.targets.outputs? - name: Get changelog for ${{ steps.version.outputs.current-version }} if: steps.publish-needed.outputs.published == 'false' id: changelog @@ -122,13 +121,11 @@ jobs: run: git fetch --tags origin # when this is a patch release from main, label any patch PRs included in the release - # when this is a stable release from next, label ALL patch PRs found, as they will per definition be "patched" now - # TODO: this won't work anymore for releases from next to latest-release - name: Label patch PRs as picked - if: github.ref_name == 'latest-release' || (steps.publish-needed.outputs.published == 'false' && steps.target.outputs.target == 'next' && !steps.is-prerelease.outputs.prerelease) + if: github.ref_name == 'latest-release' env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: yarn release:label-patches ${{ steps.target.outputs.target == 'next' && '--all' || '' }} + run: yarn release:label-patches - name: Create GitHub Release if: steps.publish-needed.outputs.published == 'false' @@ -159,7 +156,7 @@ jobs: # we then ensure here that next is bumped to 7.5.0 - without releasing it # if this is a hotfix release bumping main to 7.3.1, next will not be touched because it's already ahead - name: Ensure `next` is a minor version ahead of `main` - if: github.ref_name == 'latest-release' + if: steps.target.outputs.target == 'main' run: | git checkout next git pull @@ -168,19 +165,21 @@ jobs: VERSION_ON_NEXT=$(echo $CODE_PKG_JSON | jq --raw-output '.version') VERSION_ON_MAIN="${{ steps.version.outputs.current-version }}" - # check if next is behind current version - if NEXT_IS_BEHIND=$(npx semver --include-prerelease --range "<$VERSION_ON_MAIN" "$VERSION_ON_NEXT" 2>/dev/null); then - # temporarily set the version on next to be the same as main... - echo "$CODE_PKG_JSON" | jq --arg version "$VERSION_ON_MAIN" '.version = $version' > ../code/package.json - # ... then bump it by one minor - yarn release:version --release-type minor - git add .. - git commit -m "Bump next to be one minor ahead of main [skip ci]" - git push origin next + # skip if next is already ahead of main + if NEXT_IS_AHEAD=$(npx semver --include-prerelease --range ">=$VERSION_ON_MAIN" "$VERSION_ON_NEXT" 2>/dev/null); then + return fi + # temporarily set the version on next to be the same as main... + echo "$CODE_PKG_JSON" | jq --arg version "$VERSION_ON_MAIN" '.version = $version' > ../code/package.json + # ... then bump it by one minor + yarn release:version --release-type minor + git add .. + git commit -m "Bump next to be one minor ahead of main [skip ci]" + git push origin next + - name: Sync CHANGELOG.md from `main` to `next` - if: github.ref_name == 'latest-release' + if: steps.target.outputs.target == 'main' working-directory: . run: | git fetch origin next From 44e988cd10aac138cf5da37a9335618e3b68935e Mon Sep 17 00:00:00 2001 From: Jeppe Reinhold Date: Thu, 31 Aug 2023 12:53:37 +0200 Subject: [PATCH 14/83] pul all release workflows in same concurrency group --- .github/workflows/prepare-hotfix-release.yml | 4 ++-- .github/workflows/prepare-next-release.yml | 4 ++-- .github/workflows/publish.yml | 3 ++- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/.github/workflows/prepare-hotfix-release.yml b/.github/workflows/prepare-hotfix-release.yml index 2a331fb5f3ea..83109bcf52ca 100644 --- a/.github/workflows/prepare-hotfix-release.yml +++ b/.github/workflows/prepare-hotfix-release.yml @@ -12,8 +12,8 @@ env: PUPPETEER_SKIP_CHROMIUM_DOWNLOAD: 1 concurrency: - group: ${{ github.workflow }} - cancel-in-progress: true + group: release-group + cancel-in-progress: false jobs: prepare-hotfix-pull-request: diff --git a/.github/workflows/prepare-next-release.yml b/.github/workflows/prepare-next-release.yml index ad79b5f1b3fe..4add96125d3d 100644 --- a/.github/workflows/prepare-next-release.yml +++ b/.github/workflows/prepare-next-release.yml @@ -30,8 +30,8 @@ env: PUPPETEER_SKIP_CHROMIUM_DOWNLOAD: 1 concurrency: - group: ${{ github.workflow }} - cancel-in-progress: true + group: release-group + cancel-in-progress: false jobs: prepare-next-pull-request: diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 4f71006b7633..f2ee9cbc12a2 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -16,7 +16,8 @@ permissions: pull-requests: write concurrency: - group: ${{ github.workflow }}-${{ github.ref_name }} + group: release-group + cancel-in-progress: false jobs: publish: From bff632d0474999cb07989d1620b8cb782eeb1094 Mon Sep 17 00:00:00 2001 From: Jeppe Reinhold Date: Fri, 1 Sep 2023 11:17:24 +0200 Subject: [PATCH 15/83] add todos --- .github/workflows/publish.yml | 2 +- scripts/release/is-pr-frozen.ts | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index f2ee9cbc12a2..505c9f301a05 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -36,7 +36,7 @@ jobs: run: | gh run cancel ${{ github.run_id }} gh run watch ${{ github.run_id }} - + # TODO: here, cancel any running AND pending runs for the preparation workflows: https://stackoverflow.com/questions/60753453/how-to-cancel-run-for-all-scheduled-github-actions-at-once - name: Checkout ${{ github.ref_name }} uses: actions/checkout@v3 with: diff --git a/scripts/release/is-pr-frozen.ts b/scripts/release/is-pr-frozen.ts index 56f75d0ba33b..d053f3f59734 100644 --- a/scripts/release/is-pr-frozen.ts +++ b/scripts/release/is-pr-frozen.ts @@ -78,6 +78,7 @@ export const run = async (options: unknown) => { console.log(`🔍 Found pull request: ${JSON.stringify(pullRequest, null, 2)}`); + // TODO: check if pull request is still open const isFrozen = pullRequest.labels?.includes('freeze'); if (process.env.GITHUB_ACTIONS === 'true') { setOutput('frozen', isFrozen); From ba8e5feb7208822b175c0cf5f4b154e78a902832 Mon Sep 17 00:00:00 2001 From: Jeppe Reinhold Date: Fri, 8 Sep 2023 14:35:29 +0200 Subject: [PATCH 16/83] cancel any release-preparation runs in progress --- .github/workflows/publish.yml | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 1bca24753abc..272fa1af341d 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -36,7 +36,23 @@ jobs: run: | gh run cancel ${{ github.run_id }} gh run watch ${{ github.run_id }} - # TODO: here, cancel any running AND pending runs for the preparation workflows: https://stackoverflow.com/questions/60753453/how-to-cancel-run-for-all-scheduled-github-actions-at-once + + - name: Cancel all release preparation runs + run: | + # Get a list of all running or pending release preparation runs + # combining both the prepare-hotfix-release.yml and prepare-next-release.yml workflows + RUNNING_RELEASE_PREPARATIONS=$( + { + gh run list --limit 50 --workflow=prepare-hotfix-release.yml --json databaseId,status + gh run list --limit 50 --workflow=prepare-next-release.yml --json databaseId,status + } | jq -rc '.[] | select(.status | contains("in_progress", "pending", "queued", "requested", "waiting")) | .databaseId' + ) + + # Loop through each run and pass it to the "gh run cancel" command + while IFS= read -r databaseId; do + gh run cancel "$databaseId" + done <<< "$RUNNING_RELEASE_PREPARATIONS" + - name: Checkout ${{ github.ref_name }} uses: actions/checkout@v3 with: From a84e270f67944997ca5870a465088a48187915bb Mon Sep 17 00:00:00 2001 From: Jeppe Reinhold Date: Fri, 8 Sep 2023 14:53:55 +0200 Subject: [PATCH 17/83] cleanup --- .github/workflows/prepare-hotfix-release.yml | 4 ++-- .github/workflows/prepare-next-release.yml | 6 +++--- .github/workflows/publish.yml | 3 +-- CONTRIBUTING/RELEASING.md | 2 +- 4 files changed, 7 insertions(+), 8 deletions(-) diff --git a/.github/workflows/prepare-hotfix-release.yml b/.github/workflows/prepare-hotfix-release.yml index f5a44306fe5d..032357306f50 100644 --- a/.github/workflows/prepare-hotfix-release.yml +++ b/.github/workflows/prepare-hotfix-release.yml @@ -12,8 +12,8 @@ env: PUPPETEER_SKIP_CHROMIUM_DOWNLOAD: 1 concurrency: - group: release-group - cancel-in-progress: false + group: ${{ github.workflow }} + cancel-in-progress: true jobs: prepare-hotfix-pull-request: diff --git a/.github/workflows/prepare-next-release.yml b/.github/workflows/prepare-next-release.yml index 4ea2c9b3c080..e1b4b45a016b 100644 --- a/.github/workflows/prepare-next-release.yml +++ b/.github/workflows/prepare-next-release.yml @@ -30,8 +30,8 @@ env: PUPPETEER_SKIP_CHROMIUM_DOWNLOAD: 1 concurrency: - group: release-group - cancel-in-progress: false + group: ${{ github.workflow }} + cancel-in-progress: true jobs: prepare-next-pull-request: @@ -140,7 +140,7 @@ jobs: git pull origin latest-release git checkout --ours . git add . - git commit -m "Merge latest-release into version-1 with conflicts resolved to ours [skip ci]" + git commit -m "Merge latest-release into version-next-from-${{ steps.bump-version.outputs.current-version }} with conflicts resolved to ours [skip ci]" - name: Generate PR description id: description diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 272fa1af341d..f5efac645654 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -16,8 +16,7 @@ permissions: pull-requests: write concurrency: - group: release-group - cancel-in-progress: false + group: ${{ github.workflow }}-${{ github.ref_name }} jobs: publish: diff --git a/CONTRIBUTING/RELEASING.md b/CONTRIBUTING/RELEASING.md index 05533fccb387..c22bf923e07b 100644 --- a/CONTRIBUTING/RELEASING.md +++ b/CONTRIBUTING/RELEASING.md @@ -451,7 +451,7 @@ To promote a prerelease to a stable reelase, during the [Re-trigger the Workflow - Release type: Patch, Minor or Major - Prerelease ID: Leave empty -This scenario is special as it will target `latest-release` instead of `next-release`, and thus merge into `main` when done, and not `next`. So it goes `next` -> `version-from- `latest-release` -> `main`. When this is done, the Releaser will need to trigger a new release on `next` that bumps the version to a new prerelease minor as described [just below](#first-prerelease-of-new-majorminor---710---720-alpha0-or-800-alpha0). +This scenario is special as it will target `latest-release` instead of `next-release`, and thus merge into `main` when done, and not `next`. So it goes `next` -> `version-from- `latest-release` -> `main`. ### First prerelease of new major/minor - `7.1.0` -> `7.2.0-alpha.0` or `8.0.0-alpha.0` From e1a2172dfb662622b6e656692d3c6b84b6bd0256 Mon Sep 17 00:00:00 2001 From: Jeppe Reinhold Date: Fri, 8 Sep 2023 15:15:05 +0200 Subject: [PATCH 18/83] only consider open PRs when looking for frozen state --- scripts/release/is-pr-frozen.ts | 8 ++++++++ scripts/release/utils/get-github-info.ts | 6 ++++++ 2 files changed, 14 insertions(+) diff --git a/scripts/release/is-pr-frozen.ts b/scripts/release/is-pr-frozen.ts index d053f3f59734..27ec56c65c61 100644 --- a/scripts/release/is-pr-frozen.ts +++ b/scripts/release/is-pr-frozen.ts @@ -78,6 +78,14 @@ export const run = async (options: unknown) => { console.log(`🔍 Found pull request: ${JSON.stringify(pullRequest, null, 2)}`); + if (pullRequest.state !== 'OPEN') { + console.log('❌ The pull request is already closed, ignoring it'); + if (process.env.GITHUB_ACTIONS === 'true') { + setOutput('frozen', false); + } + return false; + } + // TODO: check if pull request is still open const isFrozen = pullRequest.labels?.includes('freeze'); if (process.env.GITHUB_ACTIONS === 'true') { diff --git a/scripts/release/utils/get-github-info.ts b/scripts/release/utils/get-github-info.ts index 6bd7126aec04..ce58b7822359 100644 --- a/scripts/release/utils/get-github-info.ts +++ b/scripts/release/utils/get-github-info.ts @@ -40,6 +40,7 @@ function makeQuery(repos: ReposWithCommitsAndPRsToFetch) { number id title + state url mergedAt labels(first: 50) { @@ -63,6 +64,7 @@ function makeQuery(repos: ReposWithCommitsAndPRsToFetch) { : `pr__${data.pull}: pullRequest(number: ${data.pull}) { url title + state author { login url @@ -161,6 +163,7 @@ export type PullRequestInfo = { user: string | null; id: string | null; title: string | null; + state: string | null; commit: string | null; pull: number | null; labels: string[] | null; @@ -197,6 +200,7 @@ export async function getPullInfoFromCommit(request: { pull: null, commit: request.commit, title: null, + state: null, labels: null, links: { commit: request.commit, @@ -245,6 +249,7 @@ export async function getPullInfoFromCommit(request: { pull: associatedPullRequest ? associatedPullRequest.number : null, commit: request.commit, title: associatedPullRequest ? associatedPullRequest.title : null, + state: associatedPullRequest ? associatedPullRequest.state : null, labels: associatedPullRequest ? (associatedPullRequest.labels.nodes || []).map((label: { name: string }) => label.name) : null, @@ -287,6 +292,7 @@ export async function getPullInfoFromPullRequest(request: { pull: request.pull, commit: commit ? commit.oid : null, title: title || null, + state: data?.state || null, labels: data ? (data.labels.nodes || []).map((label: { name: string }) => label.name) : null, links: { commit: commit ? `[\`${commit.oid}\`](${commit.commitUrl})` : null, From 4d569f2f6735a7fe55440a7c450566ddf5f47837 Mon Sep 17 00:00:00 2001 From: Jeppe Reinhold Date: Fri, 8 Sep 2023 15:20:16 +0200 Subject: [PATCH 19/83] update tests --- .../__tests__/generate-pr-description.test.ts | 8 ++++---- scripts/release/__tests__/is-pr-frozen.test.ts | 18 ++++++++++++++---- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/scripts/release/__tests__/generate-pr-description.test.ts b/scripts/release/__tests__/generate-pr-description.test.ts index b0f1bbe89db5..fdd412462ae7 100644 --- a/scripts/release/__tests__/generate-pr-description.test.ts +++ b/scripts/release/__tests__/generate-pr-description.test.ts @@ -213,7 +213,7 @@ For each pull request below, you need to either manually cherry pick it, or disc - [ ] [#42](https://github.com/storybookjs/storybook/pull/42): \\\`git cherry-pick -m1 -x abc123\\\` - If you\\'ve made any changes doing the above QA (change PR titles, revert PRs), manually trigger a re-generation of this PR with [this workflow](https://github.com/storybookjs/storybook/actions/workflows/prepare-prerelease.yml) and wait for it to finish. It will wipe your progress in this to do, which is expected. + If you\\'ve made any changes doing the above QA (change PR titles, revert PRs), manually trigger a re-generation of this PR with [this workflow](https://github.com/storybookjs/storybook/actions/workflows/prepare-next-release.yml) and wait for it to finish. It will wipe your progress in this to do, which is expected. Feel free to manually commit any changes necessary to this branch **after** you\\'ve done the last re-generation, following the [Make Manual Changes](https://github.com/storybookjs/storybook/blob/next/CONTRIBUTING/RELEASING.md#5-make-manual-changes) section in the docs, *especially* if you\\'re making changes to the changelog. @@ -273,7 +273,7 @@ For each pull request below, you need to either manually cherry pick it, or disc - [ ] [#42](https://github.com/storybookjs/storybook/pull/42): \\\`git cherry-pick -m1 -x abc123\\\` - If you\\'ve made any changes (change PR titles, revert PRs), manually trigger a re-generation of this PR with [this workflow](https://github.com/storybookjs/storybook/actions/workflows/prepare-patch-release.yml) and wait for it to finish. + If you\\'ve made any changes (change PR titles, revert PRs), manually trigger a re-generation of this PR with [this workflow](https://github.com/storybookjs/storybook/actions/workflows/prepare-hotfix-release.yml) and wait for it to finish. Feel free to manually commit any changes necessary to this branch **after** you\\'ve done the last re-generation, following the [Make Manual Changes](https://github.com/storybookjs/storybook/blob/next/CONTRIBUTING/RELEASING.md#5-make-manual-changes) section in the docs. @@ -340,7 +340,7 @@ For each pull request below, you need to either manually cherry pick it, or disc - If you\\'ve made any changes doing the above QA (change PR titles, revert PRs), manually trigger a re-generation of this PR with [this workflow](https://github.com/storybookjs/storybook/actions/workflows/prepare-prerelease.yml) and wait for it to finish. It will wipe your progress in this to do, which is expected. + If you\\'ve made any changes doing the above QA (change PR titles, revert PRs), manually trigger a re-generation of this PR with [this workflow](https://github.com/storybookjs/storybook/actions/workflows/prepare-next-release.yml) and wait for it to finish. It will wipe your progress in this to do, which is expected. Feel free to manually commit any changes necessary to this branch **after** you\\'ve done the last re-generation, following the [Make Manual Changes](https://github.com/storybookjs/storybook/blob/next/CONTRIBUTING/RELEASING.md#5-make-manual-changes) section in the docs, *especially* if you\\'re making changes to the changelog. @@ -395,7 +395,7 @@ For each pull request below, you need to either manually cherry pick it, or disc - If you\\'ve made any changes (change PR titles, revert PRs), manually trigger a re-generation of this PR with [this workflow](https://github.com/storybookjs/storybook/actions/workflows/prepare-patch-release.yml) and wait for it to finish. + If you\\'ve made any changes (change PR titles, revert PRs), manually trigger a re-generation of this PR with [this workflow](https://github.com/storybookjs/storybook/actions/workflows/prepare-hotfix-release.yml) and wait for it to finish. Feel free to manually commit any changes necessary to this branch **after** you\\'ve done the last re-generation, following the [Make Manual Changes](https://github.com/storybookjs/storybook/blob/next/CONTRIBUTING/RELEASING.md#5-make-manual-changes) section in the docs. diff --git a/scripts/release/__tests__/is-pr-frozen.test.ts b/scripts/release/__tests__/is-pr-frozen.test.ts index 63747a863ddf..d5d1e8a16b74 100644 --- a/scripts/release/__tests__/is-pr-frozen.test.ts +++ b/scripts/release/__tests__/is-pr-frozen.test.ts @@ -26,6 +26,7 @@ describe('isPrFrozen', () => { it('should return true when PR is frozen', async () => { getPullInfoFromCommit.mockResolvedValue({ labels: ['freeze'], + state: 'OPEN', }); await expect(isPrFrozen({ patch: false })).resolves.toBe(true); }); @@ -33,17 +34,26 @@ describe('isPrFrozen', () => { it('should return false when PR is not frozen', async () => { getPullInfoFromCommit.mockResolvedValue({ labels: [], + state: 'OPEN', }); await expect(isPrFrozen({ patch: false })).resolves.toBe(false); }); - it('should look for patch PRs when patch is true', async () => { + it('should return false when PR is closed', async () => { + getPullInfoFromCommit.mockResolvedValue({ + labels: ['freeze'], + state: 'CLOSED', + }); + await expect(isPrFrozen({ patch: false })).resolves.toBe(false); + }); + + it('should look for patch PRs when hotfix is true', async () => { getPullInfoFromCommit.mockResolvedValue({ labels: [], }); - await isPrFrozen({ patch: true }); + await isPrFrozen({ hotfix: true }); - expect(simpleGit.__fetch).toHaveBeenCalledWith('origin', 'version-patch-from-1.0.0', { + expect(simpleGit.__fetch).toHaveBeenCalledWith('origin', 'version-hotfix-from-1.0.0', { '--depth': 1, }); }); @@ -54,7 +64,7 @@ describe('isPrFrozen', () => { }); await isPrFrozen({ patch: false }); - expect(simpleGit.__fetch).toHaveBeenCalledWith('origin', 'version-prerelease-from-1.0.0', { + expect(simpleGit.__fetch).toHaveBeenCalledWith('origin', 'version-next-from-1.0.0', { '--depth': 1, }); }); From 79bc783d477962a10c97ef077a4c351aca1d0fea Mon Sep 17 00:00:00 2001 From: Michael Shilman Date: Mon, 11 Sep 2023 22:29:56 +0800 Subject: [PATCH 20/83] React-vite: TS strict mode --- code/frameworks/react-vite/tsconfig.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/frameworks/react-vite/tsconfig.json b/code/frameworks/react-vite/tsconfig.json index 4475d9c518e6..3bfb79fdded7 100644 --- a/code/frameworks/react-vite/tsconfig.json +++ b/code/frameworks/react-vite/tsconfig.json @@ -4,7 +4,7 @@ "rootDir": "./src", "types": ["node"], "resolveJsonModule": true, - "skipLibCheck": true + "strict": true }, "include": ["src/**/*"] } From d620a34e5f837b8fabf62a601f1a333a0830d4da Mon Sep 17 00:00:00 2001 From: Michael Shilman Date: Wed, 13 Sep 2023 23:18:23 +0800 Subject: [PATCH 21/83] Update snapshots for improved react-docgen enum handling --- .../src/argTypes/convert/convert.test.ts | 24 +++++-------------- .../9493-ts-display-name/argTypes.snapshot | 24 ++++++++----------- .../9493-ts-display-name/properties.snapshot | 17 ++++--------- 3 files changed, 20 insertions(+), 45 deletions(-) diff --git a/code/lib/docs-tools/src/argTypes/convert/convert.test.ts b/code/lib/docs-tools/src/argTypes/convert/convert.test.ts index 5b7b15ec6c63..d091486370a5 100644 --- a/code/lib/docs-tools/src/argTypes/convert/convert.test.ts +++ b/code/lib/docs-tools/src/argTypes/convert/convert.test.ts @@ -180,30 +180,18 @@ describe('storybook type system', () => { { "kind": { "raw": "'default' | 'action'", - "name": "union", + "name": "enum", "value": [ - { - "name": "other", - "value": "literal" - }, - { - "name": "other", - "value": "literal" - } + "default", + "action" ] }, "inlinedNumericLiteralUnion": { "raw": "0 | 1", - "name": "union", + "name": "enum", "value": [ - { - "name": "other", - "value": "literal" - }, - { - "name": "other", - "value": "literal" - } + 0, + 1 ] }, "enumUnion": { diff --git a/code/renderers/react/template/stories/docgen-components/9493-ts-display-name/argTypes.snapshot b/code/renderers/react/template/stories/docgen-components/9493-ts-display-name/argTypes.snapshot index dde0ac32a22f..560ce954feb2 100644 --- a/code/renderers/react/template/stories/docgen-components/9493-ts-display-name/argTypes.snapshot +++ b/code/renderers/react/template/stories/docgen-components/9493-ts-display-name/argTypes.snapshot @@ -23,10 +23,15 @@ Object { }, "title": Object { "control": Object { - "type": "object", + "type": "radio", }, "description": "A title that brings attention to the alert.", "name": "title", + "options": Array [ + "Code Red", + "Code Yellow", + "Code Green", + ], "table": Object { "defaultValue": Object { "detail": undefined, @@ -39,22 +44,13 @@ Object { }, }, "type": Object { - "name": "union", + "name": "enum", "raw": "'Code Red' | 'Code Yellow' | 'Code Green'", "required": false, "value": Array [ - Object { - "name": "other", - "value": "literal", - }, - Object { - "name": "other", - "value": "literal", - }, - Object { - "name": "other", - "value": "literal", - }, + "Code Red", + "Code Yellow", + "Code Green", ], }, }, diff --git a/code/renderers/react/template/stories/docgen-components/9493-ts-display-name/properties.snapshot b/code/renderers/react/template/stories/docgen-components/9493-ts-display-name/properties.snapshot index f6be2f921ecf..1333ed781146 100644 --- a/code/renderers/react/template/stories/docgen-components/9493-ts-display-name/properties.snapshot +++ b/code/renderers/react/template/stories/docgen-components/9493-ts-display-name/properties.snapshot @@ -12,21 +12,12 @@ Object { "name": "title", "required": false, "sbType": Object { - "name": "union", + "name": "enum", "raw": "'Code Red' | 'Code Yellow' | 'Code Green'", "value": Array [ - Object { - "name": "other", - "value": "literal", - }, - Object { - "name": "other", - "value": "literal", - }, - Object { - "name": "other", - "value": "literal", - }, + "Code Red", + "Code Yellow", + "Code Green", ], }, "type": Object { From 72a8744d8ea8614d6a4ce628be07a472efcdba7a Mon Sep 17 00:00:00 2001 From: Jason McKenzie Date: Fri, 15 Sep 2023 17:04:35 +1000 Subject: [PATCH 22/83] Fix default next image loader when src has params --- .../src/images/next-image-default-loader.tsx | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/code/frameworks/nextjs/src/images/next-image-default-loader.tsx b/code/frameworks/nextjs/src/images/next-image-default-loader.tsx index 6029390979ac..1d137fdf95fb 100644 --- a/code/frameworks/nextjs/src/images/next-image-default-loader.tsx +++ b/code/frameworks/nextjs/src/images/next-image-default-loader.tsx @@ -24,5 +24,17 @@ export const defaultLoader = ({ src, width, quality }: _NextImage.ImageLoaderPro ); } - return `${src}?w=${width}&q=${quality ?? 75}`; + const [baseUrlAndSearch, hash = ''] = src.split('#'); + const [baseUrl, search = ''] = baseUrlAndSearch.split('?'); + + const params = new URLSearchParams(search); + + if (!params.has('w') && !params.has('q')) { + params.set('w', width.toString()); + params.set('q', (quality ?? 75).toString()); + } + + const prefixedHash = hash ? `#${hash}` : ''; + + return `${baseUrl}?${params.toString()}${prefixedHash}`; }; From 984d1566585fea6a859e712d8266d18baa81f22c Mon Sep 17 00:00:00 2001 From: Jason McKenzie Date: Fri, 15 Sep 2023 22:04:37 +1000 Subject: [PATCH 23/83] Use URL to fix next image loader src params --- .../src/images/next-image-default-loader.tsx | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/code/frameworks/nextjs/src/images/next-image-default-loader.tsx b/code/frameworks/nextjs/src/images/next-image-default-loader.tsx index 1d137fdf95fb..8851c279f070 100644 --- a/code/frameworks/nextjs/src/images/next-image-default-loader.tsx +++ b/code/frameworks/nextjs/src/images/next-image-default-loader.tsx @@ -1,6 +1,6 @@ import type * as _NextImage from 'next/image'; -export const defaultLoader = ({ src, width, quality }: _NextImage.ImageLoaderProps) => { +export const defaultLoader = ({ src, width, quality = 75 }: _NextImage.ImageLoaderProps) => { const missingValues = []; if (!src) { missingValues.push('src'); @@ -24,17 +24,16 @@ export const defaultLoader = ({ src, width, quality }: _NextImage.ImageLoaderPro ); } - const [baseUrlAndSearch, hash = ''] = src.split('#'); - const [baseUrl, search = ''] = baseUrlAndSearch.split('?'); + const url = new URL(src, window.location.href); - const params = new URLSearchParams(search); - - if (!params.has('w') && !params.has('q')) { - params.set('w', width.toString()); - params.set('q', (quality ?? 75).toString()); + if (!url.searchParams.has('w') && !url.searchParams.has('q')) { + url.searchParams.set('w', width.toString()); + url.searchParams.set('q', (quality ?? 75).toString()); } - const prefixedHash = hash ? `#${hash}` : ''; + if (!src.startsWith('http://') && !src.startsWith('https://')) { + return url.toString().slice(url.origin.length); + } - return `${baseUrl}?${params.toString()}${prefixedHash}`; + return url.toString(); }; From c4ba76077be80a120b813cbad1de384f3eacca23 Mon Sep 17 00:00:00 2001 From: Jason McKenzie Date: Fri, 15 Sep 2023 22:14:51 +1000 Subject: [PATCH 24/83] Remove double default in next image default loader --- code/frameworks/nextjs/src/images/next-image-default-loader.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/frameworks/nextjs/src/images/next-image-default-loader.tsx b/code/frameworks/nextjs/src/images/next-image-default-loader.tsx index 8851c279f070..c7050914371b 100644 --- a/code/frameworks/nextjs/src/images/next-image-default-loader.tsx +++ b/code/frameworks/nextjs/src/images/next-image-default-loader.tsx @@ -28,7 +28,7 @@ export const defaultLoader = ({ src, width, quality = 75 }: _NextImage.ImageLoad if (!url.searchParams.has('w') && !url.searchParams.has('q')) { url.searchParams.set('w', width.toString()); - url.searchParams.set('q', (quality ?? 75).toString()); + url.searchParams.set('q', quality.toString()); } if (!src.startsWith('http://') && !src.startsWith('https://')) { From 4bf6ba4df6ab08d758b2d7f5bdc0da6aa4f1f61c Mon Sep 17 00:00:00 2001 From: Jeppe Reinhold Date: Sun, 24 Sep 2023 08:53:41 +0200 Subject: [PATCH 25/83] cleanup --- scripts/release/is-pr-frozen.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/scripts/release/is-pr-frozen.ts b/scripts/release/is-pr-frozen.ts index 27ec56c65c61..364d7289cc9e 100644 --- a/scripts/release/is-pr-frozen.ts +++ b/scripts/release/is-pr-frozen.ts @@ -86,7 +86,6 @@ export const run = async (options: unknown) => { return false; } - // TODO: check if pull request is still open const isFrozen = pullRequest.labels?.includes('freeze'); if (process.env.GITHUB_ACTIONS === 'true') { setOutput('frozen', isFrozen); From 25ebf5c4dce553632e62f638422d6b2bbe59e2dc Mon Sep 17 00:00:00 2001 From: Jeppe Reinhold Date: Sun, 24 Sep 2023 09:03:10 +0200 Subject: [PATCH 26/83] fix type errors --- scripts/release/__tests__/generate-pr-description.test.ts | 6 ++++++ scripts/release/__tests__/label-patches.test.ts | 1 + scripts/release/generate-pr-description.ts | 4 ++-- scripts/release/utils/get-changes.ts | 2 +- scripts/release/utils/get-github-info.ts | 7 ++----- 5 files changed, 12 insertions(+), 8 deletions(-) diff --git a/scripts/release/__tests__/generate-pr-description.test.ts b/scripts/release/__tests__/generate-pr-description.test.ts index fdd412462ae7..306ad627ee78 100644 --- a/scripts/release/__tests__/generate-pr-description.test.ts +++ b/scripts/release/__tests__/generate-pr-description.test.ts @@ -15,6 +15,7 @@ describe('Generate PR Description', () => { labels: ['bug', 'build', 'other label', 'patch:yes'], commit: 'abc123', pull: 42, + state: 'MERGED', links: { commit: '[abc123](https://github.com/storybookjs/storybook/commit/abc123)', pull: '[#42](https://github.com/storybookjs/storybook/pull/42)', @@ -26,6 +27,7 @@ describe('Generate PR Description', () => { id: null, user: 'storybook-bot', pull: null, + state: null, commit: '012b58140c3606efeacbe99c0c410624b0a1ed1f', title: 'Bump version on `next`: preminor (alpha) from 7.2.0 to 7.3.0-alpha.0', labels: null, @@ -41,6 +43,7 @@ describe('Generate PR Description', () => { user: 'shilman', title: 'Some title for a "direct commit"', labels: null, + state: null, commit: '22bb11', pull: null, links: { @@ -55,6 +58,7 @@ describe('Generate PR Description', () => { title: 'Another PR `title` for docs', labels: ['another label', 'documentation', 'patch:yes'], commit: 'ddd222', + state: 'MERGED', pull: 11, links: { commit: '[ddd222](https://github.com/storybookjs/storybook/commit/ddd222)', @@ -69,6 +73,7 @@ describe('Generate PR Description', () => { labels: ['feature request', 'other label'], commit: 'wow1337', pull: 48, + state: 'MERGED', links: { commit: '[wow1337](https://github.com/storybookjs/storybook/commit/wow1337)', pull: '[#48](https://github.com/storybookjs/storybook/pull/48)', @@ -81,6 +86,7 @@ describe('Generate PR Description', () => { title: 'Some PR title with a missing label', labels: ['incorrect label', 'other label'], commit: 'bad999', + state: 'MERGED', pull: 77, links: { commit: '[bad999](https://github.com/storybookjs/storybook/commit/bad999)', diff --git a/scripts/release/__tests__/label-patches.test.ts b/scripts/release/__tests__/label-patches.test.ts index d98abc7eb763..d43290a1828c 100644 --- a/scripts/release/__tests__/label-patches.test.ts +++ b/scripts/release/__tests__/label-patches.test.ts @@ -58,6 +58,7 @@ const pullInfoMock = { commit: '930b47f011f750c44a1782267d698ccdd3c04da3', title: 'Legal: Fix license', labels: ['documentation', 'patch:yes', 'patch:done'], + state: 'MERGED', links: { commit: '[`930b47f011f750c44a1782267d698ccdd3c04da3`](https://github.com/storybookjs/storybook/commit/930b47f011f750c44a1782267d698ccdd3c04da3)', diff --git a/scripts/release/generate-pr-description.ts b/scripts/release/generate-pr-description.ts index aa7dfe7e53e0..8a83e20d4f10 100644 --- a/scripts/release/generate-pr-description.ts +++ b/scripts/release/generate-pr-description.ts @@ -66,7 +66,7 @@ export const mapToChangelist = ({ .filter((change) => { // eslint-disable-next-line no-restricted-syntax for (const titleToIgnore of CHANGE_TITLES_TO_IGNORE) { - if (change.title.match(titleToIgnore)) { + if (change.title?.match(titleToIgnore)) { return false; } } @@ -91,7 +91,7 @@ export const mapToChangelist = ({ )[0] || 'unknown') as keyof typeof LABELS_BY_IMPORTANCE; return `- [ ] **${LABELS_BY_IMPORTANCE[label]}**: ${change.title} ${change.links.pull}${ - !unpickedPatches && change.labels.includes('patch:yes') ? ' (will also be patched)' : '' + !unpickedPatches && change.labels?.includes('patch:yes') ? ' (will also be patched)' : '' }`; }) .join('\n'); diff --git a/scripts/release/utils/get-changes.ts b/scripts/release/utils/get-changes.ts index 1ad2a0759198..416ea624fb50 100644 --- a/scripts/release/utils/get-changes.ts +++ b/scripts/release/utils/get-changes.ts @@ -53,7 +53,7 @@ export const getFromCommit = async (from?: string | undefined, verbose?: boolean console.log(`🔍 No 'from' specified, found latest tag: ${chalk.blue(latest)}`); } } - const commit = await getCommitAt(actualFrom, verbose); + const commit = await getCommitAt(actualFrom!, verbose); if (verbose) { console.log(`🔍 Found 'from' commit: ${chalk.blue(commit)}`); } diff --git a/scripts/release/utils/get-github-info.ts b/scripts/release/utils/get-github-info.ts index ce58b7822359..bdfe995a9001 100644 --- a/scripts/release/utils/get-github-info.ts +++ b/scripts/release/utils/get-github-info.ts @@ -168,7 +168,7 @@ export type PullRequestInfo = { pull: number | null; labels: string[] | null; links: { - commit: string; + commit: string | null; pull: string | null; user: string | null; }; @@ -209,10 +209,7 @@ export async function getPullInfoFromCommit(request: { }, }; } - let user = null; - if (data.author && data.author.user) { - user = data.author.user; - } + let user = data?.author?.user || null; const associatedPullRequest = data.associatedPullRequests && From cc55c3d5bf2e0417469e8aeb68b2d302cf66c5fe Mon Sep 17 00:00:00 2001 From: Atreay Kukanur <66585295+ATREAY@users.noreply.github.com> Date: Mon, 25 Sep 2023 03:51:46 +0000 Subject: [PATCH 27/83] added info about emit() function --- docs/essentials/highlight.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/docs/essentials/highlight.md b/docs/essentials/highlight.md index c1f8222a9885..5d59649214ae 100644 --- a/docs/essentials/highlight.md +++ b/docs/essentials/highlight.md @@ -71,3 +71,10 @@ By default, the addon applies a standard style to the highlighted elements you'v /> + + +
+ +📚 In all three provided code snippets, the "emit" function comes from the `useChannel` hook, which is imported from the `@storybook/preview-api` package. This `useChannel` hook is used to create a communication channel for sending and receiving messages within the code. The "emit" function obtained from `useChannel` is then used to send messages with specific event types, such as `HIGHLIGHT` or `RESET_HIGHLIGHT`, to control or customize the behavior in the code. + +
\ No newline at end of file From 9ca7ed4ce4aae1372d40c52e17ea7f9a4bfdfde6 Mon Sep 17 00:00:00 2001 From: Jeppe Reinhold Date: Mon, 25 Sep 2023 06:22:21 -0500 Subject: [PATCH 28/83] cancel when 0 patches to pick --- .github/workflows/prepare-hotfix-release.yml | 9 +++++++++ scripts/release/pick-patches.ts | 1 + 2 files changed, 10 insertions(+) diff --git a/.github/workflows/prepare-hotfix-release.yml b/.github/workflows/prepare-hotfix-release.yml index 032357306f50..43636b8294a9 100644 --- a/.github/workflows/prepare-hotfix-release.yml +++ b/.github/workflows/prepare-hotfix-release.yml @@ -88,6 +88,15 @@ jobs: git config --global user.email '32066757+storybook-bot@users.noreply.github.com' yarn release:pick-patches + - name: Cancel when no hotfixes to pick + if: steps.pick-patches.outputs.pr-count == '0' + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + # From https://stackoverflow.com/a/75809743 + run: | + gh run cancel ${{ github.run_id }} + gh run watch ${{ github.run_id }} + - name: Bump version deferred id: bump-version if: steps.unreleased-changes.outputs.has-changes-to-release == 'true' diff --git a/scripts/release/pick-patches.ts b/scripts/release/pick-patches.ts index eab1743dcc7b..9d3169d78c8a 100644 --- a/scripts/release/pick-patches.ts +++ b/scripts/release/pick-patches.ts @@ -80,6 +80,7 @@ export const run = async (_: unknown) => { } if (process.env.GITHUB_ACTIONS === 'true') { + setOutput('pr-count', JSON.stringify(patchPRs.length)); setOutput('failed-cherry-picks', JSON.stringify(failedCherryPicks)); } }; From 22f12e68f4ebb89c8f39111ee2e709fef0105f6d Mon Sep 17 00:00:00 2001 From: Jeppe Reinhold Date: Mon, 25 Sep 2023 06:23:23 -0500 Subject: [PATCH 29/83] temp rename workflow to test --- .../{prepare-hotfix-release.yml => prepare-patch-release.yml} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .github/workflows/{prepare-hotfix-release.yml => prepare-patch-release.yml} (100%) diff --git a/.github/workflows/prepare-hotfix-release.yml b/.github/workflows/prepare-patch-release.yml similarity index 100% rename from .github/workflows/prepare-hotfix-release.yml rename to .github/workflows/prepare-patch-release.yml From e719c5394499fc1232687c29e7eceed5b61aea0b Mon Sep 17 00:00:00 2001 From: Jeppe Reinhold Date: Mon, 25 Sep 2023 07:15:33 -0500 Subject: [PATCH 30/83] try number when reading pr-count --- .github/workflows/prepare-patch-release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/prepare-patch-release.yml b/.github/workflows/prepare-patch-release.yml index 43636b8294a9..7fd805c34a63 100644 --- a/.github/workflows/prepare-patch-release.yml +++ b/.github/workflows/prepare-patch-release.yml @@ -89,7 +89,7 @@ jobs: yarn release:pick-patches - name: Cancel when no hotfixes to pick - if: steps.pick-patches.outputs.pr-count == '0' + if: steps.pick-patches.outputs.pr-count == 0 env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} # From https://stackoverflow.com/a/75809743 From d7575904db51b5e167ec7167a1be10bf49b4c498 Mon Sep 17 00:00:00 2001 From: Jeppe Reinhold Date: Mon, 25 Sep 2023 07:21:37 -0500 Subject: [PATCH 31/83] compare less than 1 --- .github/workflows/prepare-patch-release.yml | 2 +- scripts/release/pick-patches.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/prepare-patch-release.yml b/.github/workflows/prepare-patch-release.yml index 7fd805c34a63..99460e11cce2 100644 --- a/.github/workflows/prepare-patch-release.yml +++ b/.github/workflows/prepare-patch-release.yml @@ -89,7 +89,7 @@ jobs: yarn release:pick-patches - name: Cancel when no hotfixes to pick - if: steps.pick-patches.outputs.pr-count == 0 + if: steps.pick-patches.outputs.pr-count < 1 env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} # From https://stackoverflow.com/a/75809743 diff --git a/scripts/release/pick-patches.ts b/scripts/release/pick-patches.ts index 9d3169d78c8a..449a31ceaeb0 100644 --- a/scripts/release/pick-patches.ts +++ b/scripts/release/pick-patches.ts @@ -80,7 +80,7 @@ export const run = async (_: unknown) => { } if (process.env.GITHUB_ACTIONS === 'true') { - setOutput('pr-count', JSON.stringify(patchPRs.length)); + setOutput('pr-count', patchPRs.length); setOutput('failed-cherry-picks', JSON.stringify(failedCherryPicks)); } }; From 8466a08300c98079922f59f1820f81f59c8351a4 Mon Sep 17 00:00:00 2001 From: Jeppe Reinhold Date: Mon, 25 Sep 2023 07:33:32 -0500 Subject: [PATCH 32/83] check non-null in pr count --- .github/workflows/prepare-patch-release.yml | 2 +- scripts/release/pick-patches.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/prepare-patch-release.yml b/.github/workflows/prepare-patch-release.yml index 99460e11cce2..bd773a24610b 100644 --- a/.github/workflows/prepare-patch-release.yml +++ b/.github/workflows/prepare-patch-release.yml @@ -89,7 +89,7 @@ jobs: yarn release:pick-patches - name: Cancel when no hotfixes to pick - if: steps.pick-patches.outputs.pr-count < 1 + if: steps.pick-patches.outputs.pr-count == '0' && steps.pick-patches.outputs.pr-count != null env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} # From https://stackoverflow.com/a/75809743 diff --git a/scripts/release/pick-patches.ts b/scripts/release/pick-patches.ts index 449a31ceaeb0..9d3169d78c8a 100644 --- a/scripts/release/pick-patches.ts +++ b/scripts/release/pick-patches.ts @@ -80,7 +80,7 @@ export const run = async (_: unknown) => { } if (process.env.GITHUB_ACTIONS === 'true') { - setOutput('pr-count', patchPRs.length); + setOutput('pr-count', JSON.stringify(patchPRs.length)); setOutput('failed-cherry-picks', JSON.stringify(failedCherryPicks)); } }; From d83d4227898982548a0a9ca4b7da736966115dd0 Mon Sep 17 00:00:00 2001 From: Jeppe Reinhold Date: Mon, 25 Sep 2023 07:41:01 -0500 Subject: [PATCH 33/83] rename patch workflow --- .../{prepare-patch-release.yml => prepare-hotfix-release.yml} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .github/workflows/{prepare-patch-release.yml => prepare-hotfix-release.yml} (100%) diff --git a/.github/workflows/prepare-patch-release.yml b/.github/workflows/prepare-hotfix-release.yml similarity index 100% rename from .github/workflows/prepare-patch-release.yml rename to .github/workflows/prepare-hotfix-release.yml From 2b29cfbce1401c59fc83f093aec123e029ea5972 Mon Sep 17 00:00:00 2001 From: Norbert de Langen Date: Mon, 2 Oct 2023 16:12:16 +0200 Subject: [PATCH 34/83] Add code to let the preview decide which story to view if the URL doesn't specify the full ID. Add e2e test for this behavior. --- code/e2e-tests/navigation.spec.ts | 18 ++++++++++++++++++ code/lib/manager-api/src/modules/stories.ts | 7 +++++-- 2 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 code/e2e-tests/navigation.spec.ts diff --git a/code/e2e-tests/navigation.spec.ts b/code/e2e-tests/navigation.spec.ts new file mode 100644 index 000000000000..a1ec56afedc1 --- /dev/null +++ b/code/e2e-tests/navigation.spec.ts @@ -0,0 +1,18 @@ +import { test, expect } from '@playwright/test'; +import process from 'process'; +import { SbPage } from './util'; + +const storybookUrl = process.env.STORYBOOK_URL || 'http://localhost:8001'; + +test.describe('navigating', () => { + test('a URL with a partial storyId will redirect to the first story', async ({ page }) => { + // this is purposefully not using the SbPage class, and the URL is a partial (it does not contain the full storyId) + await page.goto(`${storybookUrl}?path=/story/example-button`); + + const sbPage = new SbPage(page); + + await sbPage.waitUntilLoaded(); + + await expect(sbPage.page.waitForURL('?path=/docs/example-button--docs')).resolves.toBeTruthy(); + }); +}); diff --git a/code/lib/manager-api/src/modules/stories.ts b/code/lib/manager-api/src/modules/stories.ts index aff85aabcea3..7fa86bdff822 100644 --- a/code/lib/manager-api/src/modules/stories.ts +++ b/code/lib/manager-api/src/modules/stories.ts @@ -637,15 +637,18 @@ export const init: ModuleFn = ({ state.path === '/' || state.viewMode === 'story' || state.viewMode === 'docs'; const stateHasSelection = state.viewMode && state.storyId; const stateSelectionDifferent = state.viewMode !== viewMode || state.storyId !== storyId; + const { type } = state.index[state.storyId]; + const isStory = !(type === 'root' || type === 'component' || type === 'group'); + /** * When storybook starts, we want to navigate to the first story. * But there are a few exceptions: - * - If the current storyId and viewMode are already set/correct. + * - If the current storyId and viewMode are already set/correct AND the url section is a leaf-type. * - If the user has navigated away already. * - If the user started storybook with a specific page-URL like "/settings/about" */ if (isCanvasRoute) { - if (stateHasSelection && stateSelectionDifferent) { + if (stateHasSelection && stateSelectionDifferent && isStory) { // The manager state is correct, the preview state is lagging behind provider.channel.emit(SET_CURRENT_STORY, { storyId: state.storyId, From dee3552b367423f1ba02cf3bef4b52d06b193542 Mon Sep 17 00:00:00 2001 From: Norbert de Langen Date: Mon, 2 Oct 2023 17:09:46 +0200 Subject: [PATCH 35/83] fix unit test --- code/lib/manager-api/src/modules/stories.ts | 2 +- code/lib/manager-api/src/tests/stories.test.ts | 12 ++++++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/code/lib/manager-api/src/modules/stories.ts b/code/lib/manager-api/src/modules/stories.ts index 7fa86bdff822..07d6fb702d30 100644 --- a/code/lib/manager-api/src/modules/stories.ts +++ b/code/lib/manager-api/src/modules/stories.ts @@ -637,7 +637,7 @@ export const init: ModuleFn = ({ state.path === '/' || state.viewMode === 'story' || state.viewMode === 'docs'; const stateHasSelection = state.viewMode && state.storyId; const stateSelectionDifferent = state.viewMode !== viewMode || state.storyId !== storyId; - const { type } = state.index[state.storyId]; + const { type } = state.index[state.storyId] || {}; const isStory = !(type === 'root' || type === 'component' || type === 'group'); /** diff --git a/code/lib/manager-api/src/tests/stories.test.ts b/code/lib/manager-api/src/tests/stories.test.ts index a93cd1df9a99..a6617bce9f41 100644 --- a/code/lib/manager-api/src/tests/stories.test.ts +++ b/code/lib/manager-api/src/tests/stories.test.ts @@ -542,7 +542,7 @@ describe('stories API', () => { describe('STORY_SPECIFIED event', () => { it('navigates to the story', async () => { - const moduleArgs = createMockModuleArgs({ initialState: { path: '/' } }); + const moduleArgs = createMockModuleArgs({ initialState: { path: '/', index: {} } }); initStories(moduleArgs as unknown as ModuleArgs); const { navigate, provider } = moduleArgs; @@ -550,7 +550,7 @@ describe('stories API', () => { expect(navigate).toHaveBeenCalledWith('/story/a--1'); }); it('DOES not navigate if the story was already selected', async () => { - const moduleArgs = createMockModuleArgs({ initialState: { path: '/story/a--1' } }); + const moduleArgs = createMockModuleArgs({ initialState: { path: '/story/a--1', index: {} } }); initStories(moduleArgs as unknown as ModuleArgs); const { navigate, provider } = moduleArgs; @@ -558,7 +558,9 @@ describe('stories API', () => { expect(navigate).not.toHaveBeenCalled(); }); it('DOES not navigate if a settings page was selected', async () => { - const moduleArgs = createMockModuleArgs({ initialState: { path: '/settings/about' } }); + const moduleArgs = createMockModuleArgs({ + initialState: { path: '/settings/about', index: {} }, + }); initStories(moduleArgs as unknown as ModuleArgs); const { navigate, provider } = moduleArgs; @@ -566,7 +568,9 @@ describe('stories API', () => { expect(navigate).not.toHaveBeenCalled(); }); it('DOES not navigate if a custom page was selected', async () => { - const moduleArgs = createMockModuleArgs({ initialState: { path: '/custom/page' } }); + const moduleArgs = createMockModuleArgs({ + initialState: { path: '/custom/page', index: {} }, + }); initStories(moduleArgs as unknown as ModuleArgs); const { navigate, provider } = moduleArgs; From 543871fef138a44966cb7c9523e5b7f29d6c8996 Mon Sep 17 00:00:00 2001 From: Shaun Lloyd Date: Mon, 2 Oct 2023 14:16:06 -0400 Subject: [PATCH 36/83] Update docs to point to addon-styling-webpack --- code/addons/themes/docs/api.md | 14 +++++++------- docs/configure/styling-and-css.md | 6 +++--- docs/snippets/common/main-config-addons.js.mdx | 18 ++++++++++++++++-- docs/snippets/common/main-config-addons.ts.mdx | 18 ++++++++++++++++-- 4 files changed, 42 insertions(+), 14 deletions(-) diff --git a/code/addons/themes/docs/api.md b/code/addons/themes/docs/api.md index 36138394d93b..b499dd945744 100644 --- a/code/addons/themes/docs/api.md +++ b/code/addons/themes/docs/api.md @@ -7,7 +7,7 @@ Takes your provider component, global styles, and theme(s)to wrap your stories in. ```js -import { withThemeFromJSXProvider } from '@storybook/addon-styling'; +import { withThemeFromJSXProvider } from '@storybook/addon-themes'; export const decorators = [ withThemeFromJSXProvider({ @@ -36,7 +36,7 @@ Available options: Takes your theme class names to apply your parent element to enable your theme(s). ```js -import { withThemeByClassName } from '@storybook/addon-styling'; +import { withThemeByClassName } from '@storybook/addon-themes'; export const decorators = [ withThemeByClassName({ @@ -62,7 +62,7 @@ Available options: Takes your theme names and data attribute to apply your parent element to enable your theme(s). ```js -import { withThemeByDataAttribute } from '@storybook/addon-styling'; +import { withThemeByDataAttribute } from '@storybook/addon-themes'; export const decorators = [ withThemeByDataAttribute({ @@ -94,7 +94,7 @@ If none of these decorators work for your library there is still hope. We've pro Pulls the selected theme from storybook's global state. ```js -import { DecoratorHelpers } from '@storybook/addon-styling'; +import { DecoratorHelpers } from '@storybook/addon-themes'; const { pluckThemeFromContext } = DecoratorHelpers; export const myCustomDecorator = @@ -111,7 +111,7 @@ export const myCustomDecorator = Returns the theme parameters for this addon. ```js -import { DecoratorHelpers } from '@storybook/addon-styling'; +import { DecoratorHelpers } from '@storybook/addon-themes'; const { useThemeParameters } = DecoratorHelpers; export const myCustomDecorator = @@ -128,7 +128,7 @@ export const myCustomDecorator = Used to register the themes and defaultTheme with the addon state. ```js -import { DecoratorHelpers } from '@storybook/addon-styling'; +import { DecoratorHelpers } from '@storybook/addon-themes'; const { initializeThemeState } = DecoratorHelpers; export const myCustomDecorator = ({ themes, defaultState, ...rest }) => { @@ -147,7 +147,7 @@ Let's use Vuetify as an example. Vuetify uses it's own global state to know whic ```js // .storybook/withVeutifyTheme.decorator.js -import { DecoratorHelpers } from '@storybook/addon-styling'; +import { DecoratorHelpers } from '@storybook/addon-themes'; import { useTheme } from 'vuetify'; const { initializeThemeState, pluckThemeFromContext, useThemeParameters } = DecoratorHelpers; diff --git a/docs/configure/styling-and-css.md b/docs/configure/styling-and-css.md index b328359af00f..fb3b0bdbfd8a 100644 --- a/docs/configure/styling-and-css.md +++ b/docs/configure/styling-and-css.md @@ -2,7 +2,7 @@ title: 'Styling and CSS' --- -There are many ways to include CSS in a web application, and correspondingly there are many ways to include CSS in Storybook. Usually, it is best to try and replicate what your application does with styling in Storybook’s configuration. To make this easier, we recommend using [`@storybook/addon-styling`](https://github.com/storybookjs/addon-styling). +There are many ways to include CSS in a web application, and correspondingly there are many ways to include CSS in Storybook. Usually, it is best to try and replicate what your application does with styling in Storybook’s configuration. To make this easier, we recommend using [`@storybook/addon-styling-webpack`](https://storybook.js.org/addons/@storybook/addon-styling-webpack/). ## Importing CSS files @@ -25,11 +25,11 @@ If your component files import their CSS files, this will work too. The noticeab If you're using Vite as your builder, you're covered! Vite supports Sass and PostCSS out-of-the-box 🎉 -However, if you're using Webpack and want to use Sass and PostCss, you'll need some extra configuration. We recommend installing [`@storybook/addon-styling`](https://github.com/storybookjs/addon-styling#storybookaddon-styling) to help you configure these tools. Or if you'd prefer, you can customize [Storybook's webpack configuration yourself](../builders/webpack.md#override-the-default-configuration) to include the appropriate loader(s). +However, if you're using Webpack and want to use Sass and PostCss, you'll need some extra configuration. We recommend installing [`@storybook/addon-styling-webpack`](https://storybook.js.org/addons/@storybook/addon-styling-webpack/) to help you configure these tools. Or if you'd prefer, you can customize [Storybook's webpack configuration yourself](../builders/webpack.md#override-the-default-configuration) to include the appropriate loader(s). ## CSS-in-JS -CSS-in-JS libraries are designed to use basic JavaScript, and they often work in Storybook without any extra configuration. Some libraries expect components to render in a specific rendering “context” (for example, to provide themes), which can be accomplished with `@storybook/addon-styling`'s [`withThemeFromJSXProvider` decorator](https://github.com/storybookjs/addon-styling/blob/next/docs/api.md#withthemefromjsxprovider). +CSS-in-JS libraries are designed to use basic JavaScript, and they often work in Storybook without any extra configuration. Some libraries expect components to render in a specific rendering “context” (for example, to provide themes), which can be accomplished with `@storybook/addon-themes`'s [`withThemeFromJSXProvider` decorator](https://github.com/storybookjs/storybook/blob/next/code/addons/themes/docs/api.md#withthemefromjsxprovider). ## Adding webfonts diff --git a/docs/snippets/common/main-config-addons.js.mdx b/docs/snippets/common/main-config-addons.js.mdx index 9658ffd13d43..81db53b1cd83 100644 --- a/docs/snippets/common/main-config-addons.js.mdx +++ b/docs/snippets/common/main-config-addons.js.mdx @@ -8,9 +8,23 @@ export default { addons: [ '@storybook/addon-essentials', { - name: '@storybook/addon-styling', + name: '@storybook/addon-styling-webpack', options: { - postCss: true, + rules: [ + { + test: /\.css$/, + use: [ + 'style-loader', + 'css-loader', + { + loader: 'postcss-loader', + options: { + implementation: require.resolve('postcss'), + }, + }, + ], + }, + ], }, }, ], diff --git a/docs/snippets/common/main-config-addons.ts.mdx b/docs/snippets/common/main-config-addons.ts.mdx index 1038c4a4b41f..29c023182344 100644 --- a/docs/snippets/common/main-config-addons.ts.mdx +++ b/docs/snippets/common/main-config-addons.ts.mdx @@ -10,9 +10,23 @@ const config: StorybookConfig = { addons: [ '@storybook/addon-essentials', { - name: '@storybook/addon-styling', + name: '@storybook/addon-styling-webpack', options: { - postCss: true, + rules: [ + { + test: /\.css$/, + use: [ + 'style-loader', + 'css-loader', + { + loader: 'postcss-loader', + options: { + implementation: require.resolve('postcss'), + }, + }, + ], + }, + ], }, }, ], From bc8a4966794fe0b92ecd41b851134f432efc3567 Mon Sep 17 00:00:00 2001 From: Martin Nabhan <7613182+martinnabhan@users.noreply.github.com> Date: Tue, 3 Oct 2023 11:23:30 +0900 Subject: [PATCH 37/83] Use the same Image Context for ESM and CommonJS --- code/frameworks/nextjs/package.json | 7 +------ code/frameworks/nextjs/template/stories/Image.stories.jsx | 6 ------ 2 files changed, 1 insertion(+), 12 deletions(-) diff --git a/code/frameworks/nextjs/package.json b/code/frameworks/nextjs/package.json index a9142100cf8d..e98e1a071055 100644 --- a/code/frameworks/nextjs/package.json +++ b/code/frameworks/nextjs/package.json @@ -27,14 +27,9 @@ "require": "./dist/index.js", "import": "./dist/index.mjs" }, - "./image-context": { - "types": "./dist/image-context.d.ts", - "require": "./dist/image-context.js", - "import": "./dist/image-context.mjs" - }, "./dist/image-context": { "types": "./dist/image-context.d.ts", - "require": "./dist/image-context.js", + "require": "./dist/image-context.mjs", "import": "./dist/image-context.mjs" }, "./preset": { diff --git a/code/frameworks/nextjs/template/stories/Image.stories.jsx b/code/frameworks/nextjs/template/stories/Image.stories.jsx index 46ef28363830..7a8803a6e992 100644 --- a/code/frameworks/nextjs/template/stories/Image.stories.jsx +++ b/code/frameworks/nextjs/template/stories/Image.stories.jsx @@ -61,10 +61,6 @@ export const Lazy = { width: 50, height: 50, }, - parameters: { - // ignoring in Chromatic to avoid inconsistent snapshots since the image is sometimes not loaded in time - chromatic: { disableSnapshot: true }, - }, decorators: [ (Story) => ( <> @@ -78,8 +74,6 @@ export const Lazy = { export const Eager = { ...Lazy, parameters: { - // ignoring in Chromatic to avoid inconsistent snapshots since the image is sometimes not loaded in time - chromatic: { disableSnapshot: true }, nextjs: { image: { loading: 'eager', From 4c49a5ae380357a8629c64962b3cac52be3e77be Mon Sep 17 00:00:00 2001 From: Norbert de Langen Date: Tue, 3 Oct 2023 09:53:19 +0200 Subject: [PATCH 38/83] change test, to hopefully also pass on CI --- code/e2e-tests/navigation.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/e2e-tests/navigation.spec.ts b/code/e2e-tests/navigation.spec.ts index a1ec56afedc1..a4c68bdaee36 100644 --- a/code/e2e-tests/navigation.spec.ts +++ b/code/e2e-tests/navigation.spec.ts @@ -13,6 +13,6 @@ test.describe('navigating', () => { await sbPage.waitUntilLoaded(); - await expect(sbPage.page.waitForURL('?path=/docs/example-button--docs')).resolves.toBeTruthy(); + await expect(sbPage.page.url()).toContain('/docs/example-button--docs'); }); }); From cea5d6101d8651c89b90c05519775884ab8962f0 Mon Sep 17 00:00:00 2001 From: Yoan Blanc Date: Tue, 3 Oct 2023 10:24:54 +0200 Subject: [PATCH 39/83] Fix zone.js legacy deep import Signed-off-by: Yoan Blanc --- code/frameworks/angular/src/client/globals.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/frameworks/angular/src/client/globals.ts b/code/frameworks/angular/src/client/globals.ts index 87eff5c3387f..c16095858f16 100644 --- a/code/frameworks/angular/src/client/globals.ts +++ b/code/frameworks/angular/src/client/globals.ts @@ -25,7 +25,7 @@ import { global } from '@storybook/global'; /** ************************************************************************************************* * Zone JS is required by Angular itself. */ -import 'zone.js/dist/zone'; // Included with Angular CLI. +import 'zone.js'; // Included with Angular CLI. /** ************************************************************************************************* * APPLICATION IMPORTS From 6f5dcd9386e852184edecb661b672547f5fb1414 Mon Sep 17 00:00:00 2001 From: Shaun Lloyd Date: Tue, 3 Oct 2023 08:34:25 -0400 Subject: [PATCH 40/83] Add note about when to use styling addon --- docs/configure/styling-and-css.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/docs/configure/styling-and-css.md b/docs/configure/styling-and-css.md index fb3b0bdbfd8a..f8e88f6eb8fb 100644 --- a/docs/configure/styling-and-css.md +++ b/docs/configure/styling-and-css.md @@ -2,7 +2,11 @@ title: 'Styling and CSS' --- -There are many ways to include CSS in a web application, and correspondingly there are many ways to include CSS in Storybook. Usually, it is best to try and replicate what your application does with styling in Storybook’s configuration. To make this easier, we recommend using [`@storybook/addon-styling-webpack`](https://storybook.js.org/addons/@storybook/addon-styling-webpack/). +There are many ways to include CSS in a web application, and correspondingly there are many ways to include CSS in Storybook. Usually, it is best to try and replicate what your application does with styling in Storybook’s configuration. + +If you're using Vite to build your Storybook, you're covered! Storybook will use your vite config file which supports most popular styling tools out-of-the-box 🎉. However, if you're using Webpack, you may need some extra configuration. To make this easier, we recommend using [`@storybook/addon-styling-webpack`](https://storybook.js.org/addons/@storybook/addon-styling-webpack/). + +**Note**: If you're using Storybook with Angular or Next.js, you can skip this section. Storybook will automatically use the same styling configuration as your application. ## Importing CSS files @@ -39,7 +43,7 @@ If you need webfonts to be available, you may need to add some code to the [`.st ### Styles aren't being applied with Angular -The latest Angular releases introduced significant changes in configuring and styling projects. If you're working with an Angular version greater than 13 and your styles aren't being applied, you may need to check your `angular.json` ad adjust the `builder` configuration to import your CSS: +The latest Angular releases introduced significant changes in configuring and styling projects. If you're working with an Angular version greater than 13 and your styles aren't being applied, you may need to check your `angular.json` and adjust the `builder` configuration to import your CSS: ```json { From c78890fbf0815f1515be769a313601b70c76e123 Mon Sep 17 00:00:00 2001 From: Michael Shilman Date: Mon, 2 Oct 2023 16:45:55 -0700 Subject: [PATCH 41/83] React: Fix react-docgen handling for arrays, records, functions --- .../src/argTypes/docgen/typeScript/createType.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/code/lib/docs-tools/src/argTypes/docgen/typeScript/createType.ts b/code/lib/docs-tools/src/argTypes/docgen/typeScript/createType.ts index 7b03da0e2411..8aa541f38c6d 100644 --- a/code/lib/docs-tools/src/argTypes/docgen/typeScript/createType.ts +++ b/code/lib/docs-tools/src/argTypes/docgen/typeScript/createType.ts @@ -9,9 +9,12 @@ export function createType({ tsType, required }: DocgenInfo): PropType { return null; } + let typeName = tsType.name; if (!required) { - return createSummaryValue(tsType.name.replace(' | undefined', '')); + typeName = typeName.replace(' | undefined', ''); } - return createSummaryValue(tsType.name); + return createSummaryValue( + ['Array', 'Record', 'signature'].includes(tsType.name) ? tsType.raw : typeName + ); } From 617666db12383dfbcce9c4551a888d0844808bc1 Mon Sep 17 00:00:00 2001 From: Michael Shilman Date: Tue, 3 Oct 2023 10:32:10 -0700 Subject: [PATCH 42/83] Fix types --- .../docs-tools/src/argTypes/docgen/types.ts | 5 +++-- .../template/stories/ts-argtypes.stories.tsx | 18 +++++++++--------- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/code/lib/docs-tools/src/argTypes/docgen/types.ts b/code/lib/docs-tools/src/argTypes/docgen/types.ts index 498daee4ac58..d671a2bae8b7 100644 --- a/code/lib/docs-tools/src/argTypes/docgen/types.ts +++ b/code/lib/docs-tools/src/argTypes/docgen/types.ts @@ -26,8 +26,9 @@ export interface DocgenFlowType extends DocgenType { elements?: any[]; } -// eslint-disable-next-line @typescript-eslint/no-empty-interface -export interface DocgenTypeScriptType extends DocgenType {} +export interface DocgenTypeScriptType extends DocgenType { + raw?: string; +} // export type DocgenType = DocgenPropType | DocgenFlowType | DocgenTypeScriptType; diff --git a/code/renderers/react/template/stories/ts-argtypes.stories.tsx b/code/renderers/react/template/stories/ts-argtypes.stories.tsx index f2b29752c276..f655796434df 100644 --- a/code/renderers/react/template/stories/ts-argtypes.stories.tsx +++ b/code/renderers/react/template/stories/ts-argtypes.stories.tsx @@ -6,7 +6,7 @@ import type { Args, Parameters, StoryContext } from '@storybook/types'; import { inferControls } from '@storybook/preview-api'; import { ThemeProvider, themes, convert } from '@storybook/theming'; -import { within } from '@storybook/testing-library'; +// import { within } from '@storybook/testing-library'; import { component as TsFunctionComponentComponent } from './docgen-components/ts-function-component/input'; import { component as TsFunctionComponentInlineDefaultsComponent } from './docgen-components/ts-function-component-inline-defaults/input'; import { component as TsReactFcGenericsComponent } from './docgen-components/8143-ts-react-fc-generics/input'; @@ -78,14 +78,14 @@ export const TsComponentProps = { parameters: { component: TsComponentPropsCompo export const TsJsdoc = { parameters: { component: TsJsdocComponent } }; -const addChromaticIgnore = async (element: HTMLElement) => { - const row = element.parentElement?.parentElement; - if (row?.nodeName === 'TR') { - row.setAttribute('data-chromatic', 'ignore'); - } else { - throw new Error('the DOM structure changed, please update this test'); - } -}; +// const addChromaticIgnore = async (element: HTMLElement) => { +// const row = element.parentElement?.parentElement; +// if (row?.nodeName === 'TR') { +// row.setAttribute('data-chromatic', 'ignore'); +// } else { +// throw new Error('the DOM structure changed, please update this test'); +// } +// }; export const TsTypes: StoryObj = { parameters: { component: TsTypesComponent }, From 60748de148ce5aa00bac8971d350173b2eabe19e Mon Sep 17 00:00:00 2001 From: Michael Shilman Date: Tue, 3 Oct 2023 10:34:45 -0700 Subject: [PATCH 43/83] Fix snapshots --- .../9721-ts-deprecated-jsdoc/argTypes.snapshot | 2 +- .../9721-ts-deprecated-jsdoc/properties.snapshot | 2 +- .../docgen-components/9827-ts-default-values/argTypes.snapshot | 2 +- .../9827-ts-default-values/properties.snapshot | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/code/renderers/react/template/stories/docgen-components/9721-ts-deprecated-jsdoc/argTypes.snapshot b/code/renderers/react/template/stories/docgen-components/9721-ts-deprecated-jsdoc/argTypes.snapshot index cfe5c6d41a5a..35afb4cfba6f 100644 --- a/code/renderers/react/template/stories/docgen-components/9721-ts-deprecated-jsdoc/argTypes.snapshot +++ b/code/renderers/react/template/stories/docgen-components/9721-ts-deprecated-jsdoc/argTypes.snapshot @@ -13,7 +13,7 @@ Object { "jsDocTags": undefined, "type": Object { "detail": undefined, - "summary": "signature", + "summary": "{ width: number; height: number }", }, }, "type": Object { diff --git a/code/renderers/react/template/stories/docgen-components/9721-ts-deprecated-jsdoc/properties.snapshot b/code/renderers/react/template/stories/docgen-components/9721-ts-deprecated-jsdoc/properties.snapshot index 9a88cea0e370..05ad26d8baee 100644 --- a/code/renderers/react/template/stories/docgen-components/9721-ts-deprecated-jsdoc/properties.snapshot +++ b/code/renderers/react/template/stories/docgen-components/9721-ts-deprecated-jsdoc/properties.snapshot @@ -22,7 +22,7 @@ Object { }, "type": Object { "detail": undefined, - "summary": "signature", + "summary": "{ width: number; height: number }", }, }, ], diff --git a/code/renderers/react/template/stories/docgen-components/9827-ts-default-values/argTypes.snapshot b/code/renderers/react/template/stories/docgen-components/9827-ts-default-values/argTypes.snapshot index d37d679b5b9d..0f05e4e2bdf5 100644 --- a/code/renderers/react/template/stories/docgen-components/9827-ts-default-values/argTypes.snapshot +++ b/code/renderers/react/template/stories/docgen-components/9827-ts-default-values/argTypes.snapshot @@ -13,7 +13,7 @@ Object { "jsDocTags": undefined, "type": Object { "detail": undefined, - "summary": "Array", + "summary": "string[]", }, }, "type": Object { diff --git a/code/renderers/react/template/stories/docgen-components/9827-ts-default-values/properties.snapshot b/code/renderers/react/template/stories/docgen-components/9827-ts-default-values/properties.snapshot index 5d944694e62b..06f92d9ce2e5 100644 --- a/code/renderers/react/template/stories/docgen-components/9827-ts-default-values/properties.snapshot +++ b/code/renderers/react/template/stories/docgen-components/9827-ts-default-values/properties.snapshot @@ -48,7 +48,7 @@ Object { }, "type": Object { "detail": undefined, - "summary": "Array", + "summary": "string[]", }, }, ], From 723481e1130f6321970a989c87c44f300112d7f2 Mon Sep 17 00:00:00 2001 From: storybook-bot <32066757+storybook-bot@users.noreply.github.com> Date: Tue, 3 Oct 2023 20:03:57 +0000 Subject: [PATCH 44/83] Update CHANGELOG.md for v7.4.6 [skip ci] --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 65162adc174c..b4400d25c0c7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +## 7.4.6 + +- CLI: Fix Nextjs project detection - [#24346](https://github.com/storybookjs/storybook/pull/24346), thanks [@yannbf](https://github.com/yannbf)! +- Core: Fix missing favicon during dev - [#24356](https://github.com/storybookjs/storybook/pull/24356), thanks [@ndelangen](https://github.com/ndelangen)! + ## 7.4.5 - UI: Fix infinite hook call causing browsers to freeze - [#24291](https://github.com/storybookjs/storybook/pull/24291), thanks [@yannbf](https://github.com/yannbf)! From ac738ec2242f146d144c4c16b6699400024112d5 Mon Sep 17 00:00:00 2001 From: Michael Shilman Date: Tue, 3 Oct 2023 16:06:24 -0700 Subject: [PATCH 45/83] Restore chromatic ignore --- .../template/stories/ts-argtypes.stories.tsx | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/code/renderers/react/template/stories/ts-argtypes.stories.tsx b/code/renderers/react/template/stories/ts-argtypes.stories.tsx index f655796434df..f2b29752c276 100644 --- a/code/renderers/react/template/stories/ts-argtypes.stories.tsx +++ b/code/renderers/react/template/stories/ts-argtypes.stories.tsx @@ -6,7 +6,7 @@ import type { Args, Parameters, StoryContext } from '@storybook/types'; import { inferControls } from '@storybook/preview-api'; import { ThemeProvider, themes, convert } from '@storybook/theming'; -// import { within } from '@storybook/testing-library'; +import { within } from '@storybook/testing-library'; import { component as TsFunctionComponentComponent } from './docgen-components/ts-function-component/input'; import { component as TsFunctionComponentInlineDefaultsComponent } from './docgen-components/ts-function-component-inline-defaults/input'; import { component as TsReactFcGenericsComponent } from './docgen-components/8143-ts-react-fc-generics/input'; @@ -78,14 +78,14 @@ export const TsComponentProps = { parameters: { component: TsComponentPropsCompo export const TsJsdoc = { parameters: { component: TsJsdocComponent } }; -// const addChromaticIgnore = async (element: HTMLElement) => { -// const row = element.parentElement?.parentElement; -// if (row?.nodeName === 'TR') { -// row.setAttribute('data-chromatic', 'ignore'); -// } else { -// throw new Error('the DOM structure changed, please update this test'); -// } -// }; +const addChromaticIgnore = async (element: HTMLElement) => { + const row = element.parentElement?.parentElement; + if (row?.nodeName === 'TR') { + row.setAttribute('data-chromatic', 'ignore'); + } else { + throw new Error('the DOM structure changed, please update this test'); + } +}; export const TsTypes: StoryObj = { parameters: { component: TsTypesComponent }, From fb3568f28b68e4eab854a3c99a8f21b523c853ce Mon Sep 17 00:00:00 2001 From: Valentin Palkovic Date: Wed, 4 Oct 2023 10:18:44 +0200 Subject: [PATCH 46/83] Revert "disable Angular 15 sandbox in CI" This reverts commit bd3abf2a48dae9e4dcac838770efb0f21cee63e7. --- .circleci/config.yml | 20 ++++++++++---------- code/lib/cli/src/sandbox-templates.ts | 2 +- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index ee9dee76c725..617cdac42c28 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -555,19 +555,19 @@ workflows: requires: - unit-tests - create-sandboxes: - parallelism: 20 + parallelism: 21 requires: - build - build-sandboxes: - parallelism: 20 + parallelism: 21 requires: - create-sandboxes - chromatic-sandboxes: - parallelism: 17 + parallelism: 18 requires: - build-sandboxes - e2e-production: - parallelism: 17 + parallelism: 18 requires: - build-sandboxes - e2e-dev: @@ -575,7 +575,7 @@ workflows: requires: - create-sandboxes - test-runner-production: - parallelism: 17 + parallelism: 18 requires: - build-sandboxes - bench: @@ -609,22 +609,22 @@ workflows: requires: - build - create-sandboxes: - parallelism: 33 + parallelism: 34 requires: - build # - smoke-test-sandboxes: # disabled for now # requires: # - create-sandboxes - build-sandboxes: - parallelism: 33 + parallelism: 34 requires: - create-sandboxes - chromatic-sandboxes: - parallelism: 30 + parallelism: 31 requires: - build-sandboxes - e2e-production: - parallelism: 30 + parallelism: 31 requires: - build-sandboxes - e2e-dev: @@ -632,7 +632,7 @@ workflows: requires: - create-sandboxes - test-runner-production: - parallelism: 30 + parallelism: 31 requires: - build-sandboxes # TODO: reenable once we find out the source of flakyness diff --git a/code/lib/cli/src/sandbox-templates.ts b/code/lib/cli/src/sandbox-templates.ts index 799de8e593ee..69e858f1d14f 100644 --- a/code/lib/cli/src/sandbox-templates.ts +++ b/code/lib/cli/src/sandbox-templates.ts @@ -576,7 +576,7 @@ export const merged: TemplateKey[] = [ ...normal, 'react-webpack/18-ts', 'react-webpack/17-ts', - // 'angular-cli/15-ts', // TODO: re-enable when building the storybook works again + 'angular-cli/15-ts', 'preact-webpack5/default-ts', 'preact-vite/default-ts', 'html-webpack/default', From 14049292366a69af8549d06919129ff7329bb30a Mon Sep 17 00:00:00 2001 From: Valentin Palkovic Date: Wed, 4 Oct 2023 10:52:35 +0200 Subject: [PATCH 47/83] Add debugWebpack option to Angular schema --- .../angular/src/builders/build-storybook/index.ts | 10 +++++++++- .../angular/src/builders/build-storybook/schema.json | 5 +++++ .../angular/src/builders/start-storybook/index.ts | 3 +++ .../angular/src/builders/start-storybook/schema.json | 5 +++++ 4 files changed, 22 insertions(+), 1 deletion(-) diff --git a/code/frameworks/angular/src/builders/build-storybook/index.ts b/code/frameworks/angular/src/builders/build-storybook/index.ts index aef361ac0790..a33b1f4b9776 100644 --- a/code/frameworks/angular/src/builders/build-storybook/index.ts +++ b/code/frameworks/angular/src/builders/build-storybook/index.ts @@ -42,7 +42,13 @@ export type StorybookBuilderOptions = JsonObject & { } & Pick< // makes sure the option exists CLIOptions, - 'outputDir' | 'configDir' | 'loglevel' | 'quiet' | 'webpackStatsJson' | 'disableTelemetry' + | 'outputDir' + | 'configDir' + | 'loglevel' + | 'quiet' + | 'webpackStatsJson' + | 'disableTelemetry' + | 'debugWebpack' >; export type StorybookBuilderOutput = JsonObject & BuilderOutput & { [key: string]: any }; @@ -81,6 +87,7 @@ const commandBuilder: BuilderHandlerFn = ( quiet, enableProdMode = true, webpackStatsJson, + debugWebpack, disableTelemetry, assets, } = options; @@ -103,6 +110,7 @@ const commandBuilder: BuilderHandlerFn = ( }, tsConfig, webpackStatsJson, + debugWebpack, }; return standaloneOptions; diff --git a/code/frameworks/angular/src/builders/build-storybook/schema.json b/code/frameworks/angular/src/builders/build-storybook/schema.json index b0c63c455076..51f24c17a46a 100644 --- a/code/frameworks/angular/src/builders/build-storybook/schema.json +++ b/code/frameworks/angular/src/builders/build-storybook/schema.json @@ -29,6 +29,11 @@ "description": "Controls level of logging during build. Can be one of: [silly, verbose, info (default), warn, error, silent].", "pattern": "(silly|verbose|info|warn|silent)" }, + "debugWebpack": { + "type": "boolean", + "description": "Debug the Webpack configuration", + "default": false + }, "enableProdMode": { "type": "boolean", "description": "Disable Angular's development mode, which turns off assertions and other checks within the framework.", diff --git a/code/frameworks/angular/src/builders/start-storybook/index.ts b/code/frameworks/angular/src/builders/start-storybook/index.ts index fa78f8b45d8e..cff33f886fb6 100644 --- a/code/frameworks/angular/src/builders/start-storybook/index.ts +++ b/code/frameworks/angular/src/builders/start-storybook/index.ts @@ -53,6 +53,7 @@ export type StorybookBuilderOptions = JsonObject & { | 'initialPath' | 'open' | 'docs' + | 'debugWebpack' >; export type StorybookBuilderOutput = JsonObject & BuilderOutput & {}; @@ -103,6 +104,7 @@ const commandBuilder: BuilderHandlerFn = (options, cont assets, initialPath, open, + debugWebpack, } = options; const standaloneOptions: StandaloneOptions = { @@ -130,6 +132,7 @@ const commandBuilder: BuilderHandlerFn = (options, cont tsConfig, initialPath, open, + debugWebpack, }; return standaloneOptions; diff --git a/code/frameworks/angular/src/builders/start-storybook/schema.json b/code/frameworks/angular/src/builders/start-storybook/schema.json index 3bd70064ccb9..78553109681c 100644 --- a/code/frameworks/angular/src/builders/start-storybook/schema.json +++ b/code/frameworks/angular/src/builders/start-storybook/schema.json @@ -10,6 +10,11 @@ "pattern": "^[^:\\s]+:[^:\\s]+(:[^\\s]+)?$", "default": null }, + "debugWebpack": { + "type": "boolean", + "description": "Debug the Webpack configuration", + "default": false + }, "tsConfig": { "type": "string", "description": "The full path for the TypeScript configuration file, relative to the current workspace." From ca7f6f8e7fe8cbd08e9d0f5a98dd9bbdb5543ebe Mon Sep 17 00:00:00 2001 From: Jeppe Reinhold Date: Wed, 4 Oct 2023 11:11:38 +0200 Subject: [PATCH 48/83] hotfix -> patch, next-release -> non-patch-release --- ...ease.yml => prepare-non-patch-release.yml} | 0 ...-release.yml => prepare-patch-release.yml} | 8 +-- .github/workflows/publish.yml | 10 +-- CONTRIBUTING/RELEASING.md | 72 +++++++++---------- .../__tests__/generate-pr-description.test.ts | 8 +-- .../release/__tests__/is-pr-frozen.test.ts | 6 +- scripts/release/generate-pr-description.ts | 6 +- scripts/release/is-pr-frozen.ts | 6 +- 8 files changed, 58 insertions(+), 58 deletions(-) rename .github/workflows/{prepare-next-release.yml => prepare-non-patch-release.yml} (100%) rename .github/workflows/{prepare-hotfix-release.yml => prepare-patch-release.yml} (97%) diff --git a/.github/workflows/prepare-next-release.yml b/.github/workflows/prepare-non-patch-release.yml similarity index 100% rename from .github/workflows/prepare-next-release.yml rename to .github/workflows/prepare-non-patch-release.yml diff --git a/.github/workflows/prepare-hotfix-release.yml b/.github/workflows/prepare-patch-release.yml similarity index 97% rename from .github/workflows/prepare-hotfix-release.yml rename to .github/workflows/prepare-patch-release.yml index bd773a24610b..5cdc1ba44fcf 100644 --- a/.github/workflows/prepare-hotfix-release.yml +++ b/.github/workflows/prepare-patch-release.yml @@ -16,8 +16,8 @@ concurrency: cancel-in-progress: true jobs: - prepare-hotfix-pull-request: - name: Prepare hotfix pull request + prepare-patch-pull-request: + name: Prepare patch pull request runs-on: ubuntu-latest environment: release defaults: @@ -56,7 +56,7 @@ jobs: id: check-frozen env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: yarn release:is-pr-frozen --hotfix + run: yarn release:is-pr-frozen --patch - name: Cancel when frozen if: steps.check-frozen.outputs.frozen == 'true' && github.event_name != 'workflow_dispatch' @@ -88,7 +88,7 @@ jobs: git config --global user.email '32066757+storybook-bot@users.noreply.github.com' yarn release:pick-patches - - name: Cancel when no hotfixes to pick + - name: Cancel when no patches to pick if: steps.pick-patches.outputs.pr-count == '0' && steps.pick-patches.outputs.pr-count != null env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index f5efac645654..acb787424846 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -5,7 +5,7 @@ on: push: branches: - latest-release - - next-release + - non-patch-release env: PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1 @@ -39,11 +39,11 @@ jobs: - name: Cancel all release preparation runs run: | # Get a list of all running or pending release preparation runs - # combining both the prepare-hotfix-release.yml and prepare-next-release.yml workflows + # combining both the prepare-patch-release.yml and prepare-non-patch-release.yml workflows RUNNING_RELEASE_PREPARATIONS=$( { - gh run list --limit 50 --workflow=prepare-hotfix-release.yml --json databaseId,status - gh run list --limit 50 --workflow=prepare-next-release.yml --json databaseId,status + gh run list --limit 50 --workflow=prepare-patch-release.yml --json databaseId,status + gh run list --limit 50 --workflow=prepare-non-patch-release.yml --json databaseId,status } | jq -rc '.[] | select(.status | contains("in_progress", "pending", "queued", "requested", "waiting")) | .databaseId' ) @@ -170,7 +170,7 @@ jobs: # next will be at eg. 7.4.0-alpha.4, and main will be at 7.3.0 # then we release 7.4.0 by merging next to latest-release to main # we then ensure here that next is bumped to 7.5.0 - without releasing it - # if this is a hotfix release bumping main to 7.3.1, next will not be touched because it's already ahead + # if this is a patch release bumping main to 7.3.1, next will not be touched because it's already ahead - name: Ensure `next` is a minor version ahead of `main` if: steps.target.outputs.target == 'main' run: | diff --git a/CONTRIBUTING/RELEASING.md b/CONTRIBUTING/RELEASING.md index c22bf923e07b..8ad3380821ee 100644 --- a/CONTRIBUTING/RELEASING.md +++ b/CONTRIBUTING/RELEASING.md @@ -8,8 +8,8 @@ - [Introduction](#introduction) - [Branches](#branches) - [Release Pull Requests](#release-pull-requests) - - [`next`-releases](#next-releases) - - [Hotfix Releases](#hotfix-releases) + - [Non-patch-releases](#non-patch-releases) + - [Patch Releases](#patch-releases) - [Publishing](#publishing) - [👉 How to Release](#-how-to-release) - [1. Find the Prepared Pull Request](#1-find-the-prepared-pull-request) @@ -45,19 +45,19 @@ This document explains the release process for the Storybook monorepo. There are two types: -1. `next`-releases - releasing any content that is on the `next` branch, either prereleases or stable releases -2. Hotfix releases - picking any content from `next` to `main`, that needs to be patched back to the current stable minor release +1. non-patch-releases - releasing any content that is on the `next` branch, either prereleases or stable releases +2. Patch releases - picking any content from `next` to `main`, that needs to be patched back to the current stable minor release The release process is based on automatically created "Release Pull Requests", that when merged will trigger a new version to be released. A designated Releaser -- which may rotate between core team members -- will go through the release process in the current Release PR. This process is implemented with NodeJS scripts in [`scripts/release`](../scripts/release/) and three GitHub Actions workflows: -- [Prepare `next` PR](../.github/workflows/prepare-next-release.yml) -- [Prepare hotfix PR](../.github/workflows/prepare-hotfix-release.yml) +- [Prepare `next` PR](../.github/workflows/prepare-non-patch-release.yml) +- [Prepare patch PR](../.github/workflows/prepare-patch-release.yml) - [Publish](../.github/workflows/publish.yml) > **Note** -> This document distinguishes between **`next`-releases** and **hotfix** releases. The distinction reflects the difference between patching an existing minor version on `main` or releasing a new minor/major/prerelease from `next`. +> This document distinguishes between **non-patch-releases** and **patch** releases. The distinction reflects the difference between patching an existing minor version on `main` or releasing a new minor/major/prerelease from `next`. ### Branches @@ -103,7 +103,7 @@ Two GitHub Actions workflows automatically create release pull requests, one for The high-level flow is: 1. When a PR is merged to `next` (or a commit is pushed), both release pull requests are (re)generated. -2. They create a new branch - `version-(hotfix|next)-from-`. +2. They create a new branch - `version-(patch|next)-from-`. 3. They calculate which version to bump to according to the version strategy. 4. They update `CHANGELOG(.prerelease).md` with all changes detected. 5. They commit everything. @@ -117,12 +117,12 @@ A few key points to note in this flow: - The changelogs are committed during the preparation, but the packages are not version bumped and not published until later. - The release pull requests don't target their working branches (`next` and `main`), but rather `next-release` and `latest-release`. -### `next`-releases +### Non-patch-releases > **Note** -> Workflow: [`prepare-next-release.yml`](../.github/workflows/prepare-next-release.yml) +> Workflow: [`prepare-non-patch-release.yml`](../.github/workflows/prepare-non-patch-release.yml) -`next`-releases are prepared with all content from the `next` branch. The changelog is generated by examining the git history, and looking up all the commits and pull requests between the current prerelease (on `next-release`) and `HEAD` of `next`. +Non-patch-releases are prepared with all content from the `next` branch. The changelog is generated by examining the git history, and looking up all the commits and pull requests between the current prerelease (on `next-release`) and `HEAD` of `next`. The default versioning strategy is to increase the current prerelease number, as described in [Prereleases - `7.1.0-alpha.12` -> `7.1.0-alpha.13`](#prereleases---710-alpha12---710-alpha13). If there is no prerelease number (i.e., we just released a new stable minor/major version), it will add one to a patch bump, so it would go from `7.2.0` to `7.2.1-0` by default. @@ -159,18 +159,18 @@ gitGraph merge next-release ``` -### Hotfix Releases +### Patch Releases > **Note** -> Workflow: [`prepare-hotfix-release.yml`](../.github/workflows/prepare-hotfix-release.yml) +> Workflow: [`prepare-patch-release.yml`](../.github/workflows/prepare-patch-release.yml) -Hotfix releases are created by [cherry-picking](https://www.atlassian.com/git/tutorials/cherry-pick) any merged, unreleased pull requests that have the "**patch:yes**" label applied to the `next` branch. The merge commit of said pull requests are cherry-picked. +Patch releases are created by [cherry-picking](https://www.atlassian.com/git/tutorials/cherry-pick) any merged, unreleased pull requests that have the "**patch:yes**" label applied to the `next` branch. The merge commit of said pull requests are cherry-picked. -Sometimes it is desired to pick pull requests back to `main` even if they are not considered "releasable". Unlike `next`-release preparation, hotfix releases will not be canceled if the content is not releasable. It might not make sense to create a new hotfix release if the changes are only for documentation and/or internal build systems. However, getting the changes back to `main` is the only way to deploy the documentation to the production docs site. You may also want to cherry-pick changes to internal CI to fix issues. These are valid scenarios where you want to cherry-pick the changes without being blocked on "releasable" content. In these cases, where all cherry picks are non-releasable, the preparation workflow creates a "merging" pull request instead of a "releasing" pull request. This pull request does not bump versions or update changelogs; it just cherry-picks the changes and allows you to merge them into `latest-release` -> `main`. +Sometimes it is desired to pick pull requests back to `main` even if they are not considered "releasable". Unlike non-patch-release preparation, patch releases will not be canceled if the content is not releasable. It might not make sense to create a new patch release if the changes are only for documentation and/or internal build systems. However, getting the changes back to `main` is the only way to deploy the documentation to the production docs site. You may also want to cherry-pick changes to internal CI to fix issues. These are valid scenarios where you want to cherry-pick the changes without being blocked on "releasable" content. In these cases, where all cherry picks are non-releasable, the preparation workflow creates a "merging" pull request instead of a "releasing" pull request. This pull request does not bump versions or update changelogs; it just cherry-picks the changes and allows you to merge them into `latest-release` -> `main`. The preparation workflow sequentially cherry-picks each patch pull request to its branch. If this cherry-picking fails due to conflicts or other reasons, it is ignored and the next pull request is processed. All failing cherry-picks are listed in the release pull request's description, for the Releaser to manually cherry-pick during the release process. This problem occurs more often when `main` and `next` diverge, i.e. the longer it has been since a stable major/minor release. -Similar to the `next`-release flow, the preparation workflow for patches will create a new branch from `main` called `version-hotfix-from-`, and open a pull request that targets `latest-release`. When the pull request is merged by the Releaser, the [publish workflow](#publishing) will eventually merge `latest-release` into `main`. +Similar to the non-patch-release flow, the preparation workflow for patches will create a new branch from `main` called `version-patch-from-`, and open a pull request that targets `latest-release`. When the pull request is merged by the Releaser, the [publish workflow](#publishing) will eventually merge `latest-release` into `main`. Here is an example of a workflow where a feature and two bug fixes have been merged to `next`. Only the bug fixes have the "**patch:yes**" label, so only those two go into the new `7.0.19` release. Note that it is the merge commits to `next` that are cherry-picked, not the commits on the bugfix branches. @@ -215,15 +215,15 @@ gitGraph > **Note** > Workflow: [`publish.yml`](../.github/workflows/publish.yml) -When either a `next`-release or a hotfix release branch is merged into `latest-release` or `next-release`, the publishing workflow is triggered. This workflow performs the following tasks: +When either a non-patch-release or a patch release branch is merged into `latest-release` or `next-release`, the publishing workflow is triggered. This workflow performs the following tasks: 1. Bump versions of all packages according to the plan from the prepared PRs 2. Install dependencies and build all packages. 3. Publish packages to npm. -4. (If this is a hotfix release, add the "**patch:done**" label to all relevant pull requests.) +4. (If this is a patch release, add the "**patch:done**" label to all relevant pull requests.) 5. Create a new GitHub Release, including a version tag in the release branch (`latest-release` or `next-release`). 6. Merge the release branch into the core branch (`main` or `next`). -7. (If this is a hotfix release, copy the `CHANGELOG.md` changes from `main` to `next`.) +7. (If this is a patch release, copy the `CHANGELOG.md` changes from `main` to `next`.) The publish workflow runs in the "release" GitHub environment, which has the npm token required to publish packages to the `@storybook` npm organization. For security reasons, this environment can only be accessed from the four "core" branches: `main`, `next`, `latest-release` and `next-release`. @@ -246,8 +246,8 @@ The high-level workflow for a Releaser is: Look for the release pull request that has been prepared for the type of release you're about to release: - "Release: Prerelease|Minor|Major ``" for releases from `next` -- "Release: Hotfix ``" for hotfix releases -- "Release: Merge patches to `main` (without version bump)" for hotfixes without releases +- "Release: Patch ``" for patch releases +- "Release: Merge patches to `main` (without version bump)" for patches without releases For example: https://github.com/storybookjs/storybook/pull/23148 @@ -280,9 +280,9 @@ If a pull request changes multiple places, it can be hard to choose an area - th Some labels have specific meanings when it comes to releases. It's important that each pull request has labels that accurately describe the change, as labels can determine if a pull request is included in the changelog or not. This is explained further in the [Which changes are considered "releasable", and what does it mean?](#which-changes-are-considered-releasable-and-what-does-it-mean) section. -4. Hotfixes: has it already been released in a prerelease? +4. Patches: has it already been released in a prerelease? -If this is a hotfix release, make sure that all pull requests have already been released in a prerelease. If some haven't, create a new prerelease first. +If this is a patch release, make sure that all pull requests have already been released in a prerelease. If some haven't, create a new prerelease first. This is not a technical requirement, but it's a good practice to ensure that a change doesn't break a prerelease before releasing it to stable. @@ -301,12 +301,12 @@ When triggering the workflows, always choose the `next` branch as the base, unle The workflows can be triggered here: -- [Prepare next PR](https://github.com/storybookjs/storybook/actions/workflows/prepare-next-release.yml) -- [Prepare hotfix PR](https://github.com/storybookjs/storybook/actions/workflows/prepare-hotfix-release.yml) +- [Prepare next PR](https://github.com/storybookjs/storybook/actions/workflows/prepare-non-patch-release.yml) +- [Prepare patch PR](https://github.com/storybookjs/storybook/actions/workflows/prepare-patch-release.yml) -Crucially for prereleases, this is also where you change the versioning strategy if you need something else than the default as described in [Preparing - `next`-releases](#next-releases). When triggering the prerelease workflow manually, you can optionally add inputs: +Crucially for prereleases, this is also where you change the versioning strategy if you need something else than the default as described in [Preparing - non-patch-releases](#non-patch-releases). When triggering the prerelease workflow manually, you can optionally add inputs: -![Screenshot of triggering the next-release workflow in GitHub Actions, with a form that shows a release type selector and a prerelease identifier text field](prerelease-workflow-inputs.png) +![Screenshot of triggering the non-patch-release workflow in GitHub Actions, with a form that shows a release type selector and a prerelease identifier text field](prerelease-workflow-inputs.png) See [Versioning Scenarios](#versioning-scenarios) for a description of each version bump scenario, how to activate it and what it does, and [Which combination of inputs creates the version bump I need?](#which-combination-of-inputs-creates-the-version-bump-i-need) for a detailed description of the workflow inputs. @@ -340,11 +340,11 @@ You can inspect the workflows to see what they are running and copy that, but he Before you start you should make sure that your working tree is clean and the repository is in a clean state by running `git clean -xdf`. -1. Create a new branch from either `next` or `main` (hotfixes) +1. Create a new branch from either `next` or `main` (patches) 2. Get all tags: `git fetch --tags origin` 3. Install dependencies: `yarn task --task=install --start-from=install` 4. `cd scripts` -5. (If hotfix release) Cherry pick: +5. (If patch release) Cherry pick: 1. `yarn release:pick-patches` 2. Manually cherry pick any necessary patches based on the previous output 6. Bump versions: @@ -362,21 +362,21 @@ Before you start you should make sure that your working tree is clean and the re 12. (If automatic publishing is still working, it should kick in now and the rest of the steps can be skipped) 13. `cd ..` 14. Publish to the registry: `YARN_NPM_AUTH_TOKEN= yarn release:publish --tag <"next" OR "latest"> --verbose` -15. (If hotfix release) `yarn release:label-patches` +15. (If patch release) `yarn release:label-patches` 16. Manually create a GitHub Release with a tag that is the new version and the target being `latest-release` or `next-release`. 17. Merge to core branch: 1. `git checkout <"next"|"main">` 2. `git pull` 3. `git merge <"next-release"|"latest-release">` 4. `git push origin` -18. (If hotfix release) Sync `CHANGELOG.md` to `next` with: +18. (If patch release) Sync `CHANGELOG.md` to `next` with: 1. `git checkout next` 2. `git pull` 3. `git checkout origin/main ./CHANGELOG.md` 4. `git add ./CHANGELOG.md` 5. `git commit -m "Update CHANGELOG.md for v"` 6. `git push origin` -19. (If `next`-release) Sync `versions/next.json` from `next` to `main` +19. (If non-patch-release) Sync `versions/next.json` from `next` to `main` 1. `git checkout main` 2. `git pull` 3. `git checkout origin/next ./docs/versions/next.json` @@ -435,7 +435,7 @@ There are multiple types of releases that use the same principles, but are done ### Prereleases - `7.1.0-alpha.12` -> `7.1.0-alpha.13` -This is the default strategy for `next`-releases, there's nothing special needed to trigger this scenario. +This is the default strategy for non-patch-releases, there's nothing special needed to trigger this scenario. ### Prerelease promotions - `7.1.0-alpha.13` -> `7.1.0-beta.0` @@ -462,7 +462,7 @@ This is the first prerelease after a stable major/minor has been released. The d ### Patch releases to stable - subset of `7.1.0-alpha.13` -> `7.0.14` -This is the default hotfix release scenario, which cherry picks patches to `main`. +This is the default patch release scenario, which cherry picks patches to `main`. ### Patch releases to earlier versions - subset of `7.1.0-alpha.13` -> `6.5.14` @@ -476,7 +476,7 @@ No process is defined for this. ### Merges to `main` without versioning -As described in more details in [the Hotfix Releases section](#hotfix-releases), there are scenarios where you want to patch [unreleasable](#which-changes-are-considered-releasable-and-what-does-it-mean) content back to `main` without bumping versions or publishing a new release. This happens automatically as long as all the unpicked patch pull requests have unreleasable labels. In that case the prepared patch pull request will change form slighty, to just cherry-picking the patches without bumping the versions. +As described in more details in [the Patch Releases section](#patch-releases), there are scenarios where you want to patch [unreleasable](#which-changes-are-considered-releasable-and-what-does-it-mean) content back to `main` without bumping versions or publishing a new release. This happens automatically as long as all the unpicked patch pull requests have unreleasable labels. In that case the prepared patch pull request will change form slighty, to just cherry-picking the patches without bumping the versions. ## FAQ @@ -538,7 +538,7 @@ If a pull request does not have any of the above labels at the time of release, This is most likely because `next` only contains [unreleasable changes](#which-changes-are-considered-releasable-and-what-does-it-mean), which causes the preparation workflow to cancel itself. That's because it doesn't make sense to prepare a new release if all the changes are unreleasable, as that wouldn't bump the version nor write a new changelog entry, so "releasing" it would just merge it back to `next` without any differences. -You can always see the workflows and if they have been cancelled [here for `next`-releases](https://github.com/storybookjs/storybook/actions/workflows/prepare-next-release.yml) and [here for hotfix releases](https://github.com/storybookjs/storybook/actions/workflows/prepare-hotfix-release.yml). +You can always see the workflows and if they have been cancelled [here for non-patch-releases](https://github.com/storybookjs/storybook/actions/workflows/prepare-non-patch-release.yml) and [here for patch releases](https://github.com/storybookjs/storybook/actions/workflows/prepare-patch-release.yml). ### Why do we need separate release branches? diff --git a/scripts/release/__tests__/generate-pr-description.test.ts b/scripts/release/__tests__/generate-pr-description.test.ts index 306ad627ee78..50aa5de8e019 100644 --- a/scripts/release/__tests__/generate-pr-description.test.ts +++ b/scripts/release/__tests__/generate-pr-description.test.ts @@ -219,7 +219,7 @@ For each pull request below, you need to either manually cherry pick it, or disc - [ ] [#42](https://github.com/storybookjs/storybook/pull/42): \\\`git cherry-pick -m1 -x abc123\\\` - If you\\'ve made any changes doing the above QA (change PR titles, revert PRs), manually trigger a re-generation of this PR with [this workflow](https://github.com/storybookjs/storybook/actions/workflows/prepare-next-release.yml) and wait for it to finish. It will wipe your progress in this to do, which is expected. + If you\\'ve made any changes doing the above QA (change PR titles, revert PRs), manually trigger a re-generation of this PR with [this workflow](https://github.com/storybookjs/storybook/actions/workflows/prepare-non-patch-release.yml) and wait for it to finish. It will wipe your progress in this to do, which is expected. Feel free to manually commit any changes necessary to this branch **after** you\\'ve done the last re-generation, following the [Make Manual Changes](https://github.com/storybookjs/storybook/blob/next/CONTRIBUTING/RELEASING.md#5-make-manual-changes) section in the docs, *especially* if you\\'re making changes to the changelog. @@ -279,7 +279,7 @@ For each pull request below, you need to either manually cherry pick it, or disc - [ ] [#42](https://github.com/storybookjs/storybook/pull/42): \\\`git cherry-pick -m1 -x abc123\\\` - If you\\'ve made any changes (change PR titles, revert PRs), manually trigger a re-generation of this PR with [this workflow](https://github.com/storybookjs/storybook/actions/workflows/prepare-hotfix-release.yml) and wait for it to finish. + If you\\'ve made any changes (change PR titles, revert PRs), manually trigger a re-generation of this PR with [this workflow](https://github.com/storybookjs/storybook/actions/workflows/prepare-patch-release.yml) and wait for it to finish. Feel free to manually commit any changes necessary to this branch **after** you\\'ve done the last re-generation, following the [Make Manual Changes](https://github.com/storybookjs/storybook/blob/next/CONTRIBUTING/RELEASING.md#5-make-manual-changes) section in the docs. @@ -346,7 +346,7 @@ For each pull request below, you need to either manually cherry pick it, or disc - If you\\'ve made any changes doing the above QA (change PR titles, revert PRs), manually trigger a re-generation of this PR with [this workflow](https://github.com/storybookjs/storybook/actions/workflows/prepare-next-release.yml) and wait for it to finish. It will wipe your progress in this to do, which is expected. + If you\\'ve made any changes doing the above QA (change PR titles, revert PRs), manually trigger a re-generation of this PR with [this workflow](https://github.com/storybookjs/storybook/actions/workflows/prepare-non-patch-release.yml) and wait for it to finish. It will wipe your progress in this to do, which is expected. Feel free to manually commit any changes necessary to this branch **after** you\\'ve done the last re-generation, following the [Make Manual Changes](https://github.com/storybookjs/storybook/blob/next/CONTRIBUTING/RELEASING.md#5-make-manual-changes) section in the docs, *especially* if you\\'re making changes to the changelog. @@ -401,7 +401,7 @@ For each pull request below, you need to either manually cherry pick it, or disc - If you\\'ve made any changes (change PR titles, revert PRs), manually trigger a re-generation of this PR with [this workflow](https://github.com/storybookjs/storybook/actions/workflows/prepare-hotfix-release.yml) and wait for it to finish. + If you\\'ve made any changes (change PR titles, revert PRs), manually trigger a re-generation of this PR with [this workflow](https://github.com/storybookjs/storybook/actions/workflows/prepare-patch-release.yml) and wait for it to finish. Feel free to manually commit any changes necessary to this branch **after** you\\'ve done the last re-generation, following the [Make Manual Changes](https://github.com/storybookjs/storybook/blob/next/CONTRIBUTING/RELEASING.md#5-make-manual-changes) section in the docs. diff --git a/scripts/release/__tests__/is-pr-frozen.test.ts b/scripts/release/__tests__/is-pr-frozen.test.ts index d5d1e8a16b74..ab9a386b19e6 100644 --- a/scripts/release/__tests__/is-pr-frozen.test.ts +++ b/scripts/release/__tests__/is-pr-frozen.test.ts @@ -47,13 +47,13 @@ describe('isPrFrozen', () => { await expect(isPrFrozen({ patch: false })).resolves.toBe(false); }); - it('should look for patch PRs when hotfix is true', async () => { + it('should look for patch PRs when patch is true', async () => { getPullInfoFromCommit.mockResolvedValue({ labels: [], }); - await isPrFrozen({ hotfix: true }); + await isPrFrozen({ patch: true }); - expect(simpleGit.__fetch).toHaveBeenCalledWith('origin', 'version-hotfix-from-1.0.0', { + expect(simpleGit.__fetch).toHaveBeenCalledWith('origin', 'version-patch-from-1.0.0', { '--depth': 1, }); }); diff --git a/scripts/release/generate-pr-description.ts b/scripts/release/generate-pr-description.ts index 8a83e20d4f10..d437e8dc87bc 100644 --- a/scripts/release/generate-pr-description.ts +++ b/scripts/release/generate-pr-description.ts @@ -143,8 +143,8 @@ export const generateReleaseDescription = ({ manualCherryPicks?: string; }): string => { const workflow = semver.prerelease(nextVersion) - ? 'prepare-next-release' - : 'prepare-hotfix-release'; + ? 'prepare-non-patch-release' + : 'prepare-patch-release'; const workflowUrl = `https://github.com/storybookjs/storybook/actions/workflows/${workflow}.yml`; return ( @@ -218,7 +218,7 @@ export const generateNonReleaseDescription = ( ${manualCherryPicks || ''} - If you've made any changes (change PR titles, revert PRs), manually trigger a re-generation of this PR with [this workflow](https://github.com/storybookjs/storybook/actions/workflows/prepare-hotfix-release.yml) and wait for it to finish. + If you've made any changes (change PR titles, revert PRs), manually trigger a re-generation of this PR with [this workflow](https://github.com/storybookjs/storybook/actions/workflows/prepare-patch-release.yml) and wait for it to finish. Feel free to manually commit any changes necessary to this branch **after** you've done the last re-generation, following the [Make Manual Changes](https://github.com/storybookjs/storybook/blob/next/CONTRIBUTING/RELEASING.md#5-make-manual-changes) section in the docs. diff --git a/scripts/release/is-pr-frozen.ts b/scripts/release/is-pr-frozen.ts index 364d7289cc9e..7468b9943303 100644 --- a/scripts/release/is-pr-frozen.ts +++ b/scripts/release/is-pr-frozen.ts @@ -12,7 +12,7 @@ program .description( 'returns true if the versioning pull request associated with the current branch has the "freeze" label' ) - .option('-H, --hotfix', 'Look for hotfix PR instead of next PR', false) + .option('-H, --patch', 'Look for patch PR instead of next PR', false) .option('-V, --verbose', 'Enable verbose logging', false); const CODE_DIR_PATH = path.join(__dirname, '..', '..', 'code'); @@ -43,10 +43,10 @@ const getRepo = async (verbose?: boolean): Promise => { }; export const run = async (options: unknown) => { - const { verbose, hotfix } = options as { verbose?: boolean; hotfix?: boolean }; + const { verbose, patch } = options as { verbose?: boolean; patch?: boolean }; const version = await getCurrentVersion(); - const branch = `version-${hotfix ? 'hotfix' : 'next'}-from-${version}`; + const branch = `version-${patch ? 'patch' : 'next'}-from-${version}`; console.log(`đŸ’Ŧ Determining if pull request from branch '${chalk.blue(branch)}' is frozen`); From 15b59338df7636b1a17e4b3b99376237c51b0147 Mon Sep 17 00:00:00 2001 From: Jeppe Reinhold Date: Wed, 4 Oct 2023 11:23:04 +0200 Subject: [PATCH 49/83] more renaming --- .../workflows/prepare-non-patch-release.yml | 12 +- CONTRIBUTING/RELEASING.md | 112 +++++++++--------- .../release/__tests__/is-pr-frozen.test.ts | 2 +- scripts/release/is-pr-frozen.ts | 2 +- 4 files changed, 64 insertions(+), 64 deletions(-) diff --git a/.github/workflows/prepare-non-patch-release.yml b/.github/workflows/prepare-non-patch-release.yml index e1b4b45a016b..ea72d924d918 100644 --- a/.github/workflows/prepare-non-patch-release.yml +++ b/.github/workflows/prepare-non-patch-release.yml @@ -34,7 +34,7 @@ concurrency: cancel-in-progress: true jobs: - prepare-next-pull-request: + prepare-non-patch-pull-request: name: Prepare prerelease pull request runs-on: ubuntu-latest environment: release @@ -122,15 +122,15 @@ jobs: run: | yarn release:write-changelog ${{ steps.bump-version.outputs.next-version }} --verbose - - name: 'Commit changes to branch: version-next-from-${{ steps.bump-version.outputs.current-version }}' + - name: 'Commit changes to branch: version-non-patch-from-${{ steps.bump-version.outputs.current-version }}' working-directory: . run: | git config --global user.name 'storybook-bot' git config --global user.email '32066757+storybook-bot@users.noreply.github.com' - git checkout -b version-next-from-${{ steps.bump-version.outputs.current-version }} + git checkout -b version-non-patch-from-${{ steps.bump-version.outputs.current-version }} git add . git commit -m "Write changelog for ${{ steps.bump-version.outputs.next-version }} [skip ci]" || true - git push --force origin version-next-from-${{ steps.bump-version.outputs.current-version }} + git push --force origin version-non-patch-from-${{ steps.bump-version.outputs.current-version }} - name: Resolve merge-conflicts with base branch if: steps.is-prerelease.outputs.prerelease == 'true' @@ -140,7 +140,7 @@ jobs: git pull origin latest-release git checkout --ours . git add . - git commit -m "Merge latest-release into version-next-from-${{ steps.bump-version.outputs.current-version }} with conflicts resolved to ours [skip ci]" + git commit -m "Merge latest-release into version-non-patch-from-${{ steps.bump-version.outputs.current-version }} with conflicts resolved to ours [skip ci]" - name: Generate PR description id: description @@ -166,7 +166,7 @@ jobs: --title "Release: $CAPITALIZED_RELEASE_TYPE ${{ inputs.pre-id && format('{0} ', inputs.pre-id) }}${{ steps.bump-version.outputs.next-version }}" \ --label "release" \ --base ${{ steps.is-prerelease.outputs.prerelease == 'true' && 'next-release' || 'latest-release' }} \ - --head version-next-from-${{ steps.bump-version.outputs.current-version }} \ + --head version-non-patch-from-${{ steps.bump-version.outputs.current-version }} \ --body "${{ steps.description.outputs.description }}" fi diff --git a/CONTRIBUTING/RELEASING.md b/CONTRIBUTING/RELEASING.md index 8ad3380821ee..e92fa8fa36a3 100644 --- a/CONTRIBUTING/RELEASING.md +++ b/CONTRIBUTING/RELEASING.md @@ -8,8 +8,8 @@ - [Introduction](#introduction) - [Branches](#branches) - [Release Pull Requests](#release-pull-requests) - - [Non-patch-releases](#non-patch-releases) - [Patch Releases](#patch-releases) + - [Non-patch Releases](#non-patch-releases) - [Publishing](#publishing) - [👉 How to Release](#-how-to-release) - [1. Find the Prepared Pull Request](#1-find-the-prepared-pull-request) @@ -45,7 +45,7 @@ This document explains the release process for the Storybook monorepo. There are two types: -1. non-patch-releases - releasing any content that is on the `next` branch, either prereleases or stable releases +1. Non-patch releases - releasing any content that is on the `next` branch, either prereleases or stable releases 2. Patch releases - picking any content from `next` to `main`, that needs to be patched back to the current stable minor release The release process is based on automatically created "Release Pull Requests", that when merged will trigger a new version to be released. @@ -57,7 +57,7 @@ A designated Releaser -- which may rotate between core team members -- will go t - [Publish](../.github/workflows/publish.yml) > **Note** -> This document distinguishes between **non-patch-releases** and **patch** releases. The distinction reflects the difference between patching an existing minor version on `main` or releasing a new minor/major/prerelease from `next`. +> This document distinguishes between **patch** and **non-patch** releases. The distinction reflects the difference between patching an existing minor version on `main` or releasing a new minor/major/prerelease from `next`. ### Branches @@ -103,7 +103,7 @@ Two GitHub Actions workflows automatically create release pull requests, one for The high-level flow is: 1. When a PR is merged to `next` (or a commit is pushed), both release pull requests are (re)generated. -2. They create a new branch - `version-(patch|next)-from-`. +2. They create a new branch - `version-(patch|non-patch)-from-`. 3. They calculate which version to bump to according to the version strategy. 4. They update `CHANGELOG(.prerelease).md` with all changes detected. 5. They commit everything. @@ -117,48 +117,6 @@ A few key points to note in this flow: - The changelogs are committed during the preparation, but the packages are not version bumped and not published until later. - The release pull requests don't target their working branches (`next` and `main`), but rather `next-release` and `latest-release`. -### Non-patch-releases - -> **Note** -> Workflow: [`prepare-non-patch-release.yml`](../.github/workflows/prepare-non-patch-release.yml) - -Non-patch-releases are prepared with all content from the `next` branch. The changelog is generated by examining the git history, and looking up all the commits and pull requests between the current prerelease (on `next-release`) and `HEAD` of `next`. - -The default versioning strategy is to increase the current prerelease number, as described in [Prereleases - `7.1.0-alpha.12` -> `7.1.0-alpha.13`](#prereleases---710-alpha12---710-alpha13). If there is no prerelease number (i.e., we just released a new stable minor/major version), it will add one to a patch bump, so it would go from `7.2.0` to `7.2.1-0` by default. - -`next`-PRs are only created if there are actual changes to release. Content labeled with "build" or "documentation" is [not considered "releasable"](#which-changes-are-considered-releasable-and-what-does-it-mean) and is not user-facing, so it doesn't make sense to create a release. This is explained in more detail in [Why are no release PRs being prepared?](#why-are-no-release-prs-being-prepared). - -The preparation workflow will create a new branch from `next`, called `version-next-from-`, and open a pull request targeting `next-release`. When the Releaser merges it, the [publish workflow](#publishing) will merge `next-release` into `next`. - -Here's an example of a workflow where a feature and a bugfix have been created and then released to a new `7.1.0-alpha.29` version. All the commits highlighted with square dots are the ones that will be considered when generating the changelog. - -```mermaid -%%{init: { 'gitGraph': { 'mainBranchName': 'next' } } }%% -gitGraph - commit - branch next-release - commit tag: "7.1.0-alpha.28" - checkout next - merge next-release - commit type: HIGHLIGHT id: "direct commit" - branch new-feature - commit - commit - checkout next - merge new-feature type: HIGHLIGHT - branch some-bugfix - commit - checkout next - merge some-bugfix type: HIGHLIGHT - branch version-next-from-7.1.0-alpha.28 - commit id: "write changelog" - checkout next-release - merge version-next-from-7.1.0-alpha.28 - commit id: "bump versions" tag: "7.1.0-alpha.29" - checkout next - merge next-release -``` - ### Patch Releases > **Note** @@ -210,6 +168,48 @@ gitGraph merge latest-release ``` +### Non-patch Releases + +> **Note** +> Workflow: [`prepare-non-patch-release.yml`](../.github/workflows/prepare-non-patch-release.yml) + +Non-patch-releases are prepared with all content from the `next` branch. The changelog is generated by examining the git history, and looking up all the commits and pull requests between the current prerelease (on `next-release`) and `HEAD` of `next`. + +The default versioning strategy is to increase the current prerelease number, as described in [Prereleases - `7.1.0-alpha.12` -> `7.1.0-alpha.13`](#prereleases---710-alpha12---710-alpha13). If there is no prerelease number (i.e., we just released a new stable minor/major version), it will add one to a patch bump, so it would go from `7.2.0` to `7.2.1-0` by default. + +`next`-PRs are only created if there are actual changes to release. Content labeled with "build" or "documentation" is [not considered "releasable"](#which-changes-are-considered-releasable-and-what-does-it-mean) and is not user-facing, so it doesn't make sense to create a release. This is explained in more detail in [Why are no release PRs being prepared?](#why-are-no-release-prs-being-prepared). + +The preparation workflow will create a new branch from `next`, called `version-non-patch-from-`, and open a pull request targeting `next-release`. When the Releaser merges it, the [publish workflow](#publishing) will merge `next-release` into `next`. + +Here's an example of a workflow where a feature and a bugfix have been created and then released to a new `7.1.0-alpha.29` version. All the commits highlighted with square dots are the ones that will be considered when generating the changelog. + +```mermaid +%%{init: { 'gitGraph': { 'mainBranchName': 'next' } } }%% +gitGraph + commit + branch next-release + commit tag: "7.1.0-alpha.28" + checkout next + merge next-release + commit type: HIGHLIGHT id: "direct commit" + branch new-feature + commit + commit + checkout next + merge new-feature type: HIGHLIGHT + branch some-bugfix + commit + checkout next + merge some-bugfix type: HIGHLIGHT + branch version-non-patch-from-7.1.0-alpha.28 + commit id: "write changelog" + checkout next-release + merge version-non-patch-from-7.1.0-alpha.28 + commit id: "bump versions" tag: "7.1.0-alpha.29" + checkout next + merge next-release +``` + ### Publishing > **Note** @@ -304,7 +304,7 @@ The workflows can be triggered here: - [Prepare next PR](https://github.com/storybookjs/storybook/actions/workflows/prepare-non-patch-release.yml) - [Prepare patch PR](https://github.com/storybookjs/storybook/actions/workflows/prepare-patch-release.yml) -Crucially for prereleases, this is also where you change the versioning strategy if you need something else than the default as described in [Preparing - non-patch-releases](#non-patch-releases). When triggering the prerelease workflow manually, you can optionally add inputs: +Crucially for prereleases, this is also where you change the versioning strategy if you need something else than the default as described in [Preparing - Non-patch Releases](#non-patch-releases). When triggering the prerelease workflow manually, you can optionally add inputs: ![Screenshot of triggering the non-patch-release workflow in GitHub Actions, with a form that shows a release type selector and a prerelease identifier text field](prerelease-workflow-inputs.png) @@ -435,7 +435,7 @@ There are multiple types of releases that use the same principles, but are done ### Prereleases - `7.1.0-alpha.12` -> `7.1.0-alpha.13` -This is the default strategy for non-patch-releases, there's nothing special needed to trigger this scenario. +This is the default strategy for Non-patch releases, there's nothing special needed to trigger this scenario. ### Prerelease promotions - `7.1.0-alpha.13` -> `7.1.0-beta.0` @@ -451,7 +451,7 @@ To promote a prerelease to a stable reelase, during the [Re-trigger the Workflow - Release type: Patch, Minor or Major - Prerelease ID: Leave empty -This scenario is special as it will target `latest-release` instead of `next-release`, and thus merge into `main` when done, and not `next`. So it goes `next` -> `version-from- `latest-release` -> `main`. +This scenario is special as it will target `latest-release` instead of `next-release`, and thus merge into `main` when done, and not `next`. So it goes `next` -> `version-non-patch-from-` -> `latest-release` -> `main`. ### First prerelease of new major/minor - `7.1.0` -> `7.2.0-alpha.0` or `8.0.0-alpha.0` @@ -538,7 +538,7 @@ If a pull request does not have any of the above labels at the time of release, This is most likely because `next` only contains [unreleasable changes](#which-changes-are-considered-releasable-and-what-does-it-mean), which causes the preparation workflow to cancel itself. That's because it doesn't make sense to prepare a new release if all the changes are unreleasable, as that wouldn't bump the version nor write a new changelog entry, so "releasing" it would just merge it back to `next` without any differences. -You can always see the workflows and if they have been cancelled [here for non-patch-releases](https://github.com/storybookjs/storybook/actions/workflows/prepare-non-patch-release.yml) and [here for patch releases](https://github.com/storybookjs/storybook/actions/workflows/prepare-patch-release.yml). +You can always see the workflows and if they have been cancelled [here for non-patch releases](https://github.com/storybookjs/storybook/actions/workflows/prepare-non-patch-release.yml) and [here for patch releases](https://github.com/storybookjs/storybook/actions/workflows/prepare-patch-release.yml). ### Why do we need separate release branches? @@ -560,11 +560,11 @@ gitGraph branch some-simultaneous-bugfix commit checkout next - branch version-next-from-7.1.0-alpha.28 + branch version-non-patch-from-7.1.0-alpha.28 commit id checkout next merge some-simultaneous-bugfix type: HIGHLIGHT id: "whoops!" - merge version-next-from-7.1.0-alpha.28 tag: "v7.1.0-alpha.29" + merge version-non-patch-from-7.1.0-alpha.28 tag: "v7.1.0-alpha.29" ``` When publishing at the last commit with tag `v7.1.0-alpha.29`, it will publish whatever the content is at that point (all the square dots), which includes the "whoops!" commit from merging the bugfix. But the bugfix was never part of the release pull request because it got prepared before the bugfix was merged in. @@ -584,19 +584,19 @@ gitGraph branch some-simultanous-bugfix commit checkout next - branch version-next-from-7.1.0-alpha.28 + branch version-non-patch-from-7.1.0-alpha.28 commit id: "write changelog" checkout next merge some-simultanous-bugfix id: "whoops!" checkout next-release - merge version-next-from-7.1.0-alpha.28 + merge version-non-patch-from-7.1.0-alpha.28 commit id: "bump versions" tag: "v7.1.0-alpha.29" checkout next merge next-release - branch version-next-from-7.1.0-alpha.29 + branch version-non-patch-from-7.1.0-alpha.29 commit id: "write changelog again" checkout next-release - merge version-next-from-7.1.0-alpha.29 + merge version-non-patch-from-7.1.0-alpha.29 commit id: "bump versions again" tag: "v7.1.0-alpha.30" checkout next merge next-release diff --git a/scripts/release/__tests__/is-pr-frozen.test.ts b/scripts/release/__tests__/is-pr-frozen.test.ts index ab9a386b19e6..00331e0555cd 100644 --- a/scripts/release/__tests__/is-pr-frozen.test.ts +++ b/scripts/release/__tests__/is-pr-frozen.test.ts @@ -64,7 +64,7 @@ describe('isPrFrozen', () => { }); await isPrFrozen({ patch: false }); - expect(simpleGit.__fetch).toHaveBeenCalledWith('origin', 'version-next-from-1.0.0', { + expect(simpleGit.__fetch).toHaveBeenCalledWith('origin', 'version-non-patch-from-1.0.0', { '--depth': 1, }); }); diff --git a/scripts/release/is-pr-frozen.ts b/scripts/release/is-pr-frozen.ts index 7468b9943303..e81610a451b9 100644 --- a/scripts/release/is-pr-frozen.ts +++ b/scripts/release/is-pr-frozen.ts @@ -46,7 +46,7 @@ export const run = async (options: unknown) => { const { verbose, patch } = options as { verbose?: boolean; patch?: boolean }; const version = await getCurrentVersion(); - const branch = `version-${patch ? 'patch' : 'next'}-from-${version}`; + const branch = `version-${patch ? 'patch' : 'non-patch'}-from-${version}`; console.log(`đŸ’Ŧ Determining if pull request from branch '${chalk.blue(branch)}' is frozen`); From 37d6cd5696b1db2a094dab4e4fa89a0618ceb048 Mon Sep 17 00:00:00 2001 From: Valentin Palkovic Date: Wed, 4 Oct 2023 13:30:16 +0200 Subject: [PATCH 50/83] Downgrade file-system-cache --- code/lib/core-common/package.json | 2 +- code/lib/types/package.json | 2 +- code/yarn.lock | 2274 ++++++++++++++--------------- 3 files changed, 1104 insertions(+), 1174 deletions(-) diff --git a/code/lib/core-common/package.json b/code/lib/core-common/package.json index 050031f4cb70..29c09387e5fd 100644 --- a/code/lib/core-common/package.json +++ b/code/lib/core-common/package.json @@ -54,7 +54,7 @@ "chalk": "^4.1.0", "esbuild": "^0.18.0", "esbuild-register": "^3.5.0", - "file-system-cache": "^2.4.4", + "file-system-cache": "2.3.0", "find-cache-dir": "^3.0.0", "find-up": "^5.0.0", "fs-extra": "^11.1.0", diff --git a/code/lib/types/package.json b/code/lib/types/package.json index bbb6ccd3ea0d..c0a3fda13d64 100644 --- a/code/lib/types/package.json +++ b/code/lib/types/package.json @@ -47,7 +47,7 @@ "@storybook/channels": "workspace:*", "@types/babel__core": "^7.0.0", "@types/express": "^4.7.0", - "file-system-cache": "^2.4.4" + "file-system-cache": "2.3.0" }, "devDependencies": { "@storybook/csf": "^0.1.0", diff --git a/code/yarn.lock b/code/yarn.lock index 3f9dbaca64d1..915d4281a0ba 100644 --- a/code/yarn.lock +++ b/code/yarn.lock @@ -41,13 +41,13 @@ __metadata: languageName: node linkType: hard -"@angular-devkit/architect@npm:0.1602.1": - version: 0.1602.1 - resolution: "@angular-devkit/architect@npm:0.1602.1" +"@angular-devkit/architect@npm:0.1602.4": + version: 0.1602.4 + resolution: "@angular-devkit/architect@npm:0.1602.4" dependencies: - "@angular-devkit/core": 16.2.1 + "@angular-devkit/core": 16.2.4 rxjs: 7.8.1 - checksum: e6b977f804a120cee3a551e6f7bbe2944db7b7b98de45a660fcaab8254bd01a8fb7859d6e43bfd9acffa9a95bec808479dfa6a9444680050ac29c285edcfbbce + checksum: 001004daa67a6c31e20bb1c1711f1b122d744d4003749399e4f72e18e6c5006dc77162bdde7dc8614b0509edec5f25cfff4dec9df6c111e5fa7036c21b207232 languageName: node linkType: hard @@ -62,13 +62,13 @@ __metadata: linkType: hard "@angular-devkit/build-angular@npm:^16.0.0-rc.4": - version: 16.2.1 - resolution: "@angular-devkit/build-angular@npm:16.2.1" + version: 16.2.4 + resolution: "@angular-devkit/build-angular@npm:16.2.4" dependencies: "@ampproject/remapping": 2.2.1 - "@angular-devkit/architect": 0.1602.1 - "@angular-devkit/build-webpack": 0.1602.1 - "@angular-devkit/core": 16.2.1 + "@angular-devkit/architect": 0.1602.4 + "@angular-devkit/build-webpack": 0.1602.4 + "@angular-devkit/core": 16.2.4 "@babel/core": 7.22.9 "@babel/generator": 7.22.9 "@babel/helper-annotate-as-pure": 7.22.5 @@ -80,7 +80,7 @@ __metadata: "@babel/runtime": 7.22.6 "@babel/template": 7.22.5 "@discoveryjs/json-ext": 0.5.7 - "@ngtools/webpack": 16.2.1 + "@ngtools/webpack": 16.2.4 "@vitejs/plugin-basic-ssl": 1.0.1 ansi-colors: 4.1.3 autoprefixer: 10.4.14 @@ -164,20 +164,20 @@ __metadata: optional: true tailwindcss: optional: true - checksum: e789a84b0ea985f5af9a101780f3666bb5885bd76f921951fbaeca87710ee92d039683fa7e841e5818cea9645610b3e36f81b5fb1c79b9d3080a5f61d8aecfb4 + checksum: d0f3ea4ae60b0bb5f90da51fe68ac7be804e583cfec797a61c1b166e7621683e0a2f7b2e05a9ba00a93f31a9d0398f3bbe8f07fa0ff7a8a6c566ce16fce2f09f languageName: node linkType: hard -"@angular-devkit/build-webpack@npm:0.1602.1": - version: 0.1602.1 - resolution: "@angular-devkit/build-webpack@npm:0.1602.1" +"@angular-devkit/build-webpack@npm:0.1602.4": + version: 0.1602.4 + resolution: "@angular-devkit/build-webpack@npm:0.1602.4" dependencies: - "@angular-devkit/architect": 0.1602.1 + "@angular-devkit/architect": 0.1602.4 rxjs: 7.8.1 peerDependencies: webpack: ^5.30.0 webpack-dev-server: ^4.0.0 - checksum: 37146761b200e8842313b77d70f6cb32a67d5cbd8403c0b7dadfcade72147f46f042ebce071b9743aab9d06347a5a37983c012fdf0eb028bec7a337101185e04 + checksum: af362fddde0e8475fbec2798a7e7fb4a646f3aa29e0575245388db5bfd3d923fd0186116710e677d09d0e93a0fbc130022076a93013df8d321a3295fc9b1c2ef languageName: node linkType: hard @@ -199,9 +199,9 @@ __metadata: languageName: node linkType: hard -"@angular-devkit/core@npm:16.2.1, @angular-devkit/core@npm:^16.0.0-rc.4": - version: 16.2.1 - resolution: "@angular-devkit/core@npm:16.2.1" +"@angular-devkit/core@npm:16.2.4, @angular-devkit/core@npm:^16.0.0-rc.4": + version: 16.2.4 + resolution: "@angular-devkit/core@npm:16.2.4" dependencies: ajv: 8.12.0 ajv-formats: 2.1.1 @@ -214,42 +214,42 @@ __metadata: peerDependenciesMeta: chokidar: optional: true - checksum: d9ec6fa48fb7c5aeb0ad14a82ae2fa55e07435838b5d020a8b4900736a7fd13f14bc17457d34f7c7eb1a794f2a602d7dc2f0eb26cae374b1d42d6ce798a18efa + checksum: 9feffa0fce61f9609868eb557163c8963fcd642f26e8c87285a5d250825c0076c1b859683737edf808e9e85e6afbb0e5c8a933fc12b6634cf8e35b7005bc1342 languageName: node linkType: hard -"@angular-devkit/schematics@npm:16.2.1": - version: 16.2.1 - resolution: "@angular-devkit/schematics@npm:16.2.1" +"@angular-devkit/schematics@npm:16.2.4": + version: 16.2.4 + resolution: "@angular-devkit/schematics@npm:16.2.4" dependencies: - "@angular-devkit/core": 16.2.1 + "@angular-devkit/core": 16.2.4 jsonc-parser: 3.2.0 magic-string: 0.30.1 ora: 5.4.1 rxjs: 7.8.1 - checksum: f4a3c652a4598e3502b82234911e65a905a4579038a85e207ac3e8ff1d1f7d59e8adeceff7380bdbd4b2023f89db1e40803923923a33fd347a02d3db184321ae + checksum: 153cd8cc7219a4002413c443688c70912237c98c745e62626273720271f131ec1ae8dd464fb73946e86dedf4cbb4a3651ef0547747fa5ee627ef27c197d675d7 languageName: node linkType: hard "@angular/animations@npm:^16.0.0-rc.4": - version: 16.2.4 - resolution: "@angular/animations@npm:16.2.4" + version: 16.2.7 + resolution: "@angular/animations@npm:16.2.7" dependencies: tslib: ^2.3.0 peerDependencies: - "@angular/core": 16.2.4 - checksum: 439a51026af8f96c915e5b5387b5874a378e6f2e627aa8a05f8319b597284c22d02c8dcd6b08e31f11c8bd715c1976bebf0cb1c6eac50ecad609f591500c4a18 + "@angular/core": 16.2.7 + checksum: 3d3d603a7f9a0d8932b0783ba120623bf5ea94842ff0ed3225262834664ba2ddb3c723b944f3a06862f90c063b73e41b06d8fe0837e29ee1bed1f1eef8773d54 languageName: node linkType: hard "@angular/cli@npm:^16.0.0-rc.4": - version: 16.2.1 - resolution: "@angular/cli@npm:16.2.1" + version: 16.2.4 + resolution: "@angular/cli@npm:16.2.4" dependencies: - "@angular-devkit/architect": 0.1602.1 - "@angular-devkit/core": 16.2.1 - "@angular-devkit/schematics": 16.2.1 - "@schematics/angular": 16.2.1 + "@angular-devkit/architect": 0.1602.4 + "@angular-devkit/core": 16.2.4 + "@angular-devkit/schematics": 16.2.4 + "@schematics/angular": 16.2.4 "@yarnpkg/lockfile": 1.1.0 ansi-colors: 4.1.3 ini: 4.1.1 @@ -266,25 +266,25 @@ __metadata: yargs: 17.7.2 bin: ng: bin/ng.js - checksum: 88501e4883d92df0b0088a7c7537923d6c41bf146be3165c61a756d0153e2e9f614c8f795b46ce16c981d01ac197ed6f278523af2c61e32f9bcdc288dcbbc27d + checksum: 2d919ed87cc03c89163988ab854d121477511782f0c9e115141d257e1af0f2ed8aa7709b04baee56b68e0e9bb75fe24b877214c9e1062f4a7654f3ddc26ae3b4 languageName: node linkType: hard "@angular/common@npm:^16.0.0-rc.4": - version: 16.2.4 - resolution: "@angular/common@npm:16.2.4" + version: 16.2.7 + resolution: "@angular/common@npm:16.2.7" dependencies: tslib: ^2.3.0 peerDependencies: - "@angular/core": 16.2.4 + "@angular/core": 16.2.7 rxjs: ^6.5.3 || ^7.4.0 - checksum: 33e07528a045aa4e049e7aa59fc5a025d84350faeef62ca9ef30c92820ca470d4c4d242bd1fb367a639564201b223b79af5a4164140c63ab12d8daed3a0fdacf + checksum: 6182db26e2c6f8a4cda58ea5573d0884856e2be9d20903e2f495d31e615edc59fc1db135bbe1d1b1b4c534727ee8e307d3f6fc76e190dc90bf19d7cbdde7def5 languageName: node linkType: hard "@angular/compiler-cli@npm:^16.0.0-rc.4": - version: 16.2.4 - resolution: "@angular/compiler-cli@npm:16.2.4" + version: 16.2.7 + resolution: "@angular/compiler-cli@npm:16.2.7" dependencies: "@babel/core": 7.22.5 "@jridgewell/sourcemap-codec": ^1.4.14 @@ -295,83 +295,83 @@ __metadata: tslib: ^2.3.0 yargs: ^17.2.1 peerDependencies: - "@angular/compiler": 16.2.4 + "@angular/compiler": 16.2.7 typescript: ">=4.9.3 <5.2" bin: ng-xi18n: bundles/src/bin/ng_xi18n.js ngc: bundles/src/bin/ngc.js ngcc: bundles/ngcc/index.js - checksum: e791b0979be56fa8a29287c7b020d90e7ed2d64a9d6034c6675ed2bbb110a2dae2308697fc014fe4a547ba31bab5a02cdf644d14ee457da330a922fe2de37fcb + checksum: e3a5460e385ad8b3eeeeca79ca7d334990bb30928f9714fa60a0c8748b49cd04e25a14ae58beadd491ddae20787020cc846c40ce328f5c6625c23523113c33af languageName: node linkType: hard "@angular/compiler@npm:^16.0.0-rc.4": - version: 16.2.4 - resolution: "@angular/compiler@npm:16.2.4" + version: 16.2.7 + resolution: "@angular/compiler@npm:16.2.7" dependencies: tslib: ^2.3.0 peerDependencies: - "@angular/core": 16.2.4 + "@angular/core": 16.2.7 peerDependenciesMeta: "@angular/core": optional: true - checksum: d946be383c18dd42346c45fe20f19e9f519af496b0739a654d84b336ce9eb2fbc74606293d9a31136ab66c31cfee4bd60cf591a3725a5c00fa0280855fe617b4 + checksum: edbd286f289548f8e1539c82f02b4452326552cef39dc7f2ee2df14d382a8f754f4370e7d99a8526728a8a6180d098e23b066d2f96e7c58e20f6aab33ceef8e4 languageName: node linkType: hard "@angular/core@npm:^16.0.0-rc.4": - version: 16.2.4 - resolution: "@angular/core@npm:16.2.4" + version: 16.2.7 + resolution: "@angular/core@npm:16.2.7" dependencies: tslib: ^2.3.0 peerDependencies: rxjs: ^6.5.3 || ^7.4.0 zone.js: ~0.13.0 - checksum: e154307cbbd69806306d201ed069c1b9d8829e428339767ff745286f8a5cdcb6b859e2dc769561f3c5ca98da52f9cbdf786d1f4897781aee3420cb4c4e7db64e + checksum: 5d06adabe8985cd1e91aea9cf95002b5b0784cbdf12ac5ea75c9ce4cc238e0d0640cf81f8b57b08781d02129c1dfaf544419d40e9ee728593c40e42d22c52612 languageName: node linkType: hard "@angular/forms@npm:^16.0.0-rc.4": - version: 16.2.4 - resolution: "@angular/forms@npm:16.2.4" + version: 16.2.7 + resolution: "@angular/forms@npm:16.2.7" dependencies: tslib: ^2.3.0 peerDependencies: - "@angular/common": 16.2.4 - "@angular/core": 16.2.4 - "@angular/platform-browser": 16.2.4 + "@angular/common": 16.2.7 + "@angular/core": 16.2.7 + "@angular/platform-browser": 16.2.7 rxjs: ^6.5.3 || ^7.4.0 - checksum: ddeb49f540fc988d3c10d7a16402072ff002a8c7aebfcfdfa187fc01ca956be9c6821ceb9ace47bac09341606c9426f4fd5ded924bc8bb2e336747f01db06f61 + checksum: d31bf4fbf366c6cbfaf9418dd5588694567ca6282b2efe47c6e2ed7073c8e739865dd0d8c43b3b7344b7e968f958a35bc4f740b793c6e30f7dced12f25d09f7d languageName: node linkType: hard "@angular/platform-browser-dynamic@npm:^16.0.0-rc.4": - version: 16.2.4 - resolution: "@angular/platform-browser-dynamic@npm:16.2.4" + version: 16.2.7 + resolution: "@angular/platform-browser-dynamic@npm:16.2.7" dependencies: tslib: ^2.3.0 peerDependencies: - "@angular/common": 16.2.4 - "@angular/compiler": 16.2.4 - "@angular/core": 16.2.4 - "@angular/platform-browser": 16.2.4 - checksum: 01dd2f438a33112e021b89c5ab2b2008a9314dc04b9881b4a852111945f4150014f33019479d8cd5137d3ae273859027a7fd29fae0f31b7761ffd6c27154526f + "@angular/common": 16.2.7 + "@angular/compiler": 16.2.7 + "@angular/core": 16.2.7 + "@angular/platform-browser": 16.2.7 + checksum: a8be89497ba2823abd46352df2c36ac93ed53540d36ca1953d57458742c27d76afe9a5d93ddd7b79f10154b4d107f2581d5408bc166d6bc208ccfa395b2047ae languageName: node linkType: hard "@angular/platform-browser@npm:^16.0.0-rc.4": - version: 16.2.4 - resolution: "@angular/platform-browser@npm:16.2.4" + version: 16.2.7 + resolution: "@angular/platform-browser@npm:16.2.7" dependencies: tslib: ^2.3.0 peerDependencies: - "@angular/animations": 16.2.4 - "@angular/common": 16.2.4 - "@angular/core": 16.2.4 + "@angular/animations": 16.2.7 + "@angular/common": 16.2.7 + "@angular/core": 16.2.7 peerDependenciesMeta: "@angular/animations": optional: true - checksum: 41be07e9e2f210ec15eef038e267fbef528ac9c93dbbea5aab90dececc9b3f01d9a2d9e1a774bdce139c46aed11c67c77f366a6d81a07594f8964bc53ce582fb + checksum: cfb0aeb969845893353d02ed5be52e13019aac91e2689d81c98064a41a7155e91714fbd031a7fc1e4ebd9b9b0db6813dfbec93529df0f4856df25bb0d9695a8e languageName: node linkType: hard @@ -414,20 +414,10 @@ __metadata: languageName: node linkType: hard -"@babel/code-frame@npm:^7.22.10": - version: 7.22.10 - resolution: "@babel/code-frame@npm:7.22.10" - dependencies: - "@babel/highlight": ^7.22.10 - chalk: ^2.4.2 - checksum: fc5fe681eda128f15b928287b6c8e2ccec45776b8662524945cde005fba725642cc47ab0cfef4e7ff9ba5acccb3e907eebc2b3a7f075b8b31b19011229170b27 - languageName: node - linkType: hard - -"@babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.22.9": - version: 7.22.9 - resolution: "@babel/compat-data@npm:7.22.9" - checksum: 1334264b041f8ad4e33036326970c9c26754eb5c04b3af6c223fe6da988cbb8a8542b5526f49ec1ac488210d2f710484a0e4bcd30256294ae3f261d0141febad +"@babel/compat-data@npm:^7.22.20, @babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.22.9": + version: 7.22.20 + resolution: "@babel/compat-data@npm:7.22.20" + checksum: 73c0f7cf4a1181a0a58bbee6a8b69dc4ba1beec1e764686a586db067e8160044d3a28da0a3542f044f3f31fa662ab22fd061dfe3fc9520dc1cee2252f460db30 languageName: node linkType: hard @@ -500,53 +490,30 @@ __metadata: languageName: node linkType: hard -"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.0, @babel/core@npm:^7.12.3, @babel/core@npm:^7.13.16, @babel/core@npm:^7.19.6, @babel/core@npm:^7.20.12, @babel/core@npm:^7.22.0, @babel/core@npm:^7.22.1, @babel/core@npm:^7.22.9, @babel/core@npm:^7.3.4, @babel/core@npm:^7.7.5": - version: 7.22.17 - resolution: "@babel/core@npm:7.22.17" +"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.0, @babel/core@npm:^7.12.3, @babel/core@npm:^7.13.16, @babel/core@npm:^7.18.9, @babel/core@npm:^7.19.6, @babel/core@npm:^7.20.12, @babel/core@npm:^7.22.0, @babel/core@npm:^7.22.1, @babel/core@npm:^7.22.9, @babel/core@npm:^7.3.4, @babel/core@npm:^7.7.5": + version: 7.23.0 + resolution: "@babel/core@npm:7.23.0" dependencies: "@ampproject/remapping": ^2.2.0 "@babel/code-frame": ^7.22.13 - "@babel/generator": ^7.22.15 + "@babel/generator": ^7.23.0 "@babel/helper-compilation-targets": ^7.22.15 - "@babel/helper-module-transforms": ^7.22.17 - "@babel/helpers": ^7.22.15 - "@babel/parser": ^7.22.16 + "@babel/helper-module-transforms": ^7.23.0 + "@babel/helpers": ^7.23.0 + "@babel/parser": ^7.23.0 "@babel/template": ^7.22.15 - "@babel/traverse": ^7.22.17 - "@babel/types": ^7.22.17 - convert-source-map: ^1.7.0 + "@babel/traverse": ^7.23.0 + "@babel/types": ^7.23.0 + convert-source-map: ^2.0.0 debug: ^4.1.0 gensync: ^1.0.0-beta.2 json5: ^2.2.3 semver: ^6.3.1 - checksum: 9ffd2cb1b860a0651f01927d9e84246860cef2e794bc7181e53770ebf80305e6b5ba5050786d8b44be0dc9832106b4e9c7749c4c05c7f711d7508a5fef9034ce + checksum: ba3604b28de28cdb07d7829f67127b03ad2e826c4e28a0560a037c8bbe16b8dc8cdb8baf344e916ad3c28c63aab88c1a1a38f5e3df6047ab79c910b41bb3a4e8 languageName: node linkType: hard -"@babel/core@npm:^7.18.9": - version: 7.22.10 - resolution: "@babel/core@npm:7.22.10" - dependencies: - "@ampproject/remapping": ^2.2.0 - "@babel/code-frame": ^7.22.10 - "@babel/generator": ^7.22.10 - "@babel/helper-compilation-targets": ^7.22.10 - "@babel/helper-module-transforms": ^7.22.9 - "@babel/helpers": ^7.22.10 - "@babel/parser": ^7.22.10 - "@babel/template": ^7.22.5 - "@babel/traverse": ^7.22.10 - "@babel/types": ^7.22.10 - convert-source-map: ^1.7.0 - debug: ^4.1.0 - gensync: ^1.0.0-beta.2 - json5: ^2.2.2 - semver: ^6.3.1 - checksum: aebc08abfc4d4370d3023b1c5a22db2edd896ddbe21ed54f11c654660481f598b08fd456f9a5aa90cd2d81e0ea6767cd73f72fc11f7ad04d897f8fb20671cc1c - languageName: node - linkType: hard - -"@babel/generator@npm:7.22.9, @babel/generator@npm:^7.12.11, @babel/generator@npm:^7.22.5, @babel/generator@npm:^7.22.9, @babel/generator@npm:^7.7.2, @babel/generator@npm:^7.8.7": +"@babel/generator@npm:7.22.9": version: 7.22.9 resolution: "@babel/generator@npm:7.22.9" dependencies: @@ -558,27 +525,15 @@ __metadata: languageName: node linkType: hard -"@babel/generator@npm:^7.22.10": - version: 7.22.10 - resolution: "@babel/generator@npm:7.22.10" +"@babel/generator@npm:^7.12.11, @babel/generator@npm:^7.22.5, @babel/generator@npm:^7.22.9, @babel/generator@npm:^7.23.0, @babel/generator@npm:^7.7.2, @babel/generator@npm:^7.8.7": + version: 7.23.0 + resolution: "@babel/generator@npm:7.23.0" dependencies: - "@babel/types": ^7.22.10 + "@babel/types": ^7.23.0 "@jridgewell/gen-mapping": ^0.3.2 "@jridgewell/trace-mapping": ^0.3.17 jsesc: ^2.5.1 - checksum: 2f26ac64f0b606cd9e7799eb2bc42d371b378ba2cb3c7c92c01a3bfccca271371990bcd2dc67fee5547721ba3e1fa83ca03fe3aab30bdf417c3078b9759d2f10 - languageName: node - linkType: hard - -"@babel/generator@npm:^7.22.15": - version: 7.22.15 - resolution: "@babel/generator@npm:7.22.15" - dependencies: - "@babel/types": ^7.22.15 - "@jridgewell/gen-mapping": ^0.3.2 - "@jridgewell/trace-mapping": ^0.3.17 - jsesc: ^2.5.1 - checksum: d5e559584fa43490555eb3aef3480d5bb75069aa045ace638fc86111ff2a53df50d303eeaa5ef4c96e8241896807a77699ec2ff8874ed99f7d31b711660658e7 + checksum: b7d8727c574119b5ef06e5d5d0d8d939527d51537db4b08273caebb18f3f2b1d4517b874776085e161fd47d28f26b22c08e7f270b64f43b2afd4a60c5936d6cd languageName: node linkType: hard @@ -613,19 +568,6 @@ __metadata: languageName: node linkType: hard -"@babel/helper-compilation-targets@npm:^7.22.10": - version: 7.22.10 - resolution: "@babel/helper-compilation-targets@npm:7.22.10" - dependencies: - "@babel/compat-data": ^7.22.9 - "@babel/helper-validator-option": ^7.22.5 - browserslist: ^4.21.9 - lru-cache: ^5.1.1 - semver: ^6.3.1 - checksum: edef207b819f491ded9462ac73858eadb155f4a0afe6cf3951459e47ad23b743ed56d7bd8a1b3f63fd25b39543db42ea58fea7b2193dcb4c98a511d7f1ad547a - languageName: node - linkType: hard - "@babel/helper-create-class-features-plugin@npm:^7.18.6, @babel/helper-create-class-features-plugin@npm:^7.21.0, @babel/helper-create-class-features-plugin@npm:^7.22.11, @babel/helper-create-class-features-plugin@npm:^7.22.15, @babel/helper-create-class-features-plugin@npm:^7.22.5": version: 7.22.15 resolution: "@babel/helper-create-class-features-plugin@npm:7.22.15" @@ -673,20 +615,20 @@ __metadata: languageName: node linkType: hard -"@babel/helper-environment-visitor@npm:^7.18.9, @babel/helper-environment-visitor@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/helper-environment-visitor@npm:7.22.5" - checksum: c9377464c1839741a0a77bbad56de94c896f4313eb034c988fc2ab01293e7c4027244c93b4256606c5f4e34c68cf599a7d31a548d537577c7da836bbca40551b +"@babel/helper-environment-visitor@npm:^7.18.9, @babel/helper-environment-visitor@npm:^7.22.20, @babel/helper-environment-visitor@npm:^7.22.5": + version: 7.22.20 + resolution: "@babel/helper-environment-visitor@npm:7.22.20" + checksum: e762c2d8f5d423af89bd7ae9abe35bd4836d2eb401af868a63bbb63220c513c783e25ef001019418560b3fdc6d9a6fb67e6c0b650bcdeb3a2ac44b5c3d2bdd94 languageName: node linkType: hard -"@babel/helper-function-name@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/helper-function-name@npm:7.22.5" +"@babel/helper-function-name@npm:^7.22.5, @babel/helper-function-name@npm:^7.23.0": + version: 7.23.0 + resolution: "@babel/helper-function-name@npm:7.23.0" dependencies: - "@babel/template": ^7.22.5 - "@babel/types": ^7.22.5 - checksum: 3ce2e87967fe54aa463d279150ddda0dae3b5bc3f8c2773b90670b553b61e8fe62da7edcd7b1e1891c5b25af4924a6700dad2e9d8249b910a5bf7caa2eaf4c13 + "@babel/template": ^7.22.15 + "@babel/types": ^7.23.0 + checksum: d771dd1f3222b120518176733c52b7cadac1c256ff49b1889dbbe5e3fed81db855b8cc4e40d949c9d3eae0e795e8229c1c8c24c0e83f27cfa6ee3766696c6428 languageName: node linkType: hard @@ -699,12 +641,12 @@ __metadata: languageName: node linkType: hard -"@babel/helper-member-expression-to-functions@npm:^7.22.15, @babel/helper-member-expression-to-functions@npm:^7.22.5": - version: 7.22.15 - resolution: "@babel/helper-member-expression-to-functions@npm:7.22.15" +"@babel/helper-member-expression-to-functions@npm:^7.22.15": + version: 7.23.0 + resolution: "@babel/helper-member-expression-to-functions@npm:7.23.0" dependencies: - "@babel/types": ^7.22.15 - checksum: 531de203316dd14b0cb64b756f65fedacc8bfb8072e0e9ca92b1df6833d92f821277ef95ab4d148b6f8e0dc368d29e05a8f1cc7a0b87fd7c0cb2f0b25fbacc70 + "@babel/types": ^7.23.0 + checksum: b810daddf093ffd0802f1429052349ed9ea08ef7d0c56da34ffbcdecbdafac86f95bdea2fe30e0e0e629febc7dd41b56cb5eacc10d1a44336d37b755dac31fa4 languageName: node linkType: hard @@ -717,18 +659,18 @@ __metadata: languageName: node linkType: hard -"@babel/helper-module-transforms@npm:^7.22.15, @babel/helper-module-transforms@npm:^7.22.17, @babel/helper-module-transforms@npm:^7.22.5, @babel/helper-module-transforms@npm:^7.22.9": - version: 7.22.17 - resolution: "@babel/helper-module-transforms@npm:7.22.17" +"@babel/helper-module-transforms@npm:^7.22.5, @babel/helper-module-transforms@npm:^7.22.9, @babel/helper-module-transforms@npm:^7.23.0": + version: 7.23.0 + resolution: "@babel/helper-module-transforms@npm:7.23.0" dependencies: - "@babel/helper-environment-visitor": ^7.22.5 + "@babel/helper-environment-visitor": ^7.22.20 "@babel/helper-module-imports": ^7.22.15 "@babel/helper-simple-access": ^7.22.5 "@babel/helper-split-export-declaration": ^7.22.6 - "@babel/helper-validator-identifier": ^7.22.15 + "@babel/helper-validator-identifier": ^7.22.20 peerDependencies: "@babel/core": ^7.0.0 - checksum: 54d14e092bb15e0e95155890e4c2352e5cb97370e9669aa1066a6a066194f6da01d801516f219a66455add7d10c1b6345d7c2ecfce1b8e69213eb2cc4ba94e75 + checksum: 15a52e401bd17fe44ba9be51cca693a3e182dc93264dc28ede732081c43211741df81ce8eb15e82e81c8ad51beb8893301ecc31d5c77add0f7be78dff6815318 languageName: node linkType: hard @@ -749,28 +691,28 @@ __metadata: linkType: hard "@babel/helper-remap-async-to-generator@npm:^7.18.9, @babel/helper-remap-async-to-generator@npm:^7.22.5, @babel/helper-remap-async-to-generator@npm:^7.22.9": - version: 7.22.17 - resolution: "@babel/helper-remap-async-to-generator@npm:7.22.17" + version: 7.22.20 + resolution: "@babel/helper-remap-async-to-generator@npm:7.22.20" dependencies: "@babel/helper-annotate-as-pure": ^7.22.5 - "@babel/helper-environment-visitor": ^7.22.5 - "@babel/helper-wrap-function": ^7.22.17 + "@babel/helper-environment-visitor": ^7.22.20 + "@babel/helper-wrap-function": ^7.22.20 peerDependencies: "@babel/core": ^7.0.0 - checksum: 81c26cc805256f95ce29fa30d2accdb95da21ab5858bfb01141902978a00e7762726ee47895b86ad9c3d0fb18f571e45d07b07f1278cc9a6f1c38a9a812f8964 + checksum: aa93aa74250b636d477e8d863fbe59d4071f8c2654841b7ac608909e480c1cf3ff7d7af5a4038568829ad09d810bb681668cbe497d9c89ba5c352793dc9edf1e languageName: node linkType: hard -"@babel/helper-replace-supers@npm:^7.22.5, @babel/helper-replace-supers@npm:^7.22.9": - version: 7.22.9 - resolution: "@babel/helper-replace-supers@npm:7.22.9" +"@babel/helper-replace-supers@npm:^7.22.20, @babel/helper-replace-supers@npm:^7.22.5, @babel/helper-replace-supers@npm:^7.22.9": + version: 7.22.20 + resolution: "@babel/helper-replace-supers@npm:7.22.20" dependencies: - "@babel/helper-environment-visitor": ^7.22.5 - "@babel/helper-member-expression-to-functions": ^7.22.5 + "@babel/helper-environment-visitor": ^7.22.20 + "@babel/helper-member-expression-to-functions": ^7.22.15 "@babel/helper-optimise-call-expression": ^7.22.5 peerDependencies: "@babel/core": ^7.0.0 - checksum: 9ef42e0d1f81d3377c96449c82666d54daea86db9f352915d2aff7540008cd65f23574bc97a74308b6203f7a8c6bf886d1cc1fa24917337d3d12ea93cb2a53a8 + checksum: 6b0858811ad46873817c90c805015d63300e003c5a85c147a17d9845fa2558a02047c3cc1f07767af59014b2dd0fa75b503e5bc36e917f360e9b67bb6f1e79f4 languageName: node linkType: hard @@ -808,10 +750,10 @@ __metadata: languageName: node linkType: hard -"@babel/helper-validator-identifier@npm:^7.22.15, @babel/helper-validator-identifier@npm:^7.22.5": - version: 7.22.15 - resolution: "@babel/helper-validator-identifier@npm:7.22.15" - checksum: 0473ccfd123cf872206eb916ec506f8963f75db50413560d4d1674aed4cd5d9354826c2514474d6cd40637d3bdc515ba87e8035b4bed683ba62cb607e0081aaf +"@babel/helper-validator-identifier@npm:^7.22.20": + version: 7.22.20 + resolution: "@babel/helper-validator-identifier@npm:7.22.20" + checksum: dcad63db345fb110e032de46c3688384b0008a42a4845180ce7cd62b1a9c0507a1bed727c4d1060ed1a03ae57b4d918570259f81724aaac1a5b776056f37504e languageName: node linkType: hard @@ -822,65 +764,45 @@ __metadata: languageName: node linkType: hard -"@babel/helper-wrap-function@npm:^7.22.17": - version: 7.22.17 - resolution: "@babel/helper-wrap-function@npm:7.22.17" +"@babel/helper-wrap-function@npm:^7.22.20": + version: 7.22.20 + resolution: "@babel/helper-wrap-function@npm:7.22.20" dependencies: "@babel/helper-function-name": ^7.22.5 "@babel/template": ^7.22.15 - "@babel/types": ^7.22.17 - checksum: d4ac72fd518da8f02f8e4b0eb67a171df75f2d7526dbc4c734acb73670065157910bd5063ad9a8972f9abe90f3fde6720b035cd7042740d8b112055811f648c1 + "@babel/types": ^7.22.19 + checksum: 97b5f42ff4d305318ff2f99a5f59d3e97feff478333b2d893c4f85456d3c66372070f71d7bf9141f598c8cf2741c49a15918193633c427a88d170d98eb8c46eb languageName: node linkType: hard -"@babel/helpers@npm:^7.22.10, @babel/helpers@npm:^7.22.15, @babel/helpers@npm:^7.22.5, @babel/helpers@npm:^7.22.6, @babel/helpers@npm:^7.8.4": - version: 7.22.15 - resolution: "@babel/helpers@npm:7.22.15" +"@babel/helpers@npm:^7.22.5, @babel/helpers@npm:^7.22.6, @babel/helpers@npm:^7.23.0, @babel/helpers@npm:^7.8.4": + version: 7.23.1 + resolution: "@babel/helpers@npm:7.23.1" dependencies: "@babel/template": ^7.22.15 - "@babel/traverse": ^7.22.15 - "@babel/types": ^7.22.15 - checksum: 2f4c270b53cdca4999976ddd4f20b1b8c8be04722f35745d4a0a43d35c6496e1a23d8cbecb21e6bf22502c5e4828de2bea1c1f58bed81c84bfecc8fa96b69483 - languageName: node - linkType: hard - -"@babel/highlight@npm:^7.22.10": - version: 7.22.10 - resolution: "@babel/highlight@npm:7.22.10" - dependencies: - "@babel/helper-validator-identifier": ^7.22.5 - chalk: ^2.4.2 - js-tokens: ^4.0.0 - checksum: ac321ed90d37f76df74a44addc1692658eff64060375550bfb64919959573b14000ac83744e1ed30cc51b8b2f1291b0f0e98a3398d3c33c9c4548dd326a898fc + "@babel/traverse": ^7.23.0 + "@babel/types": ^7.23.0 + checksum: ae5a34bb60a0d8bbf9dc4273d90cd5b9499c048f11e2f0df1b033ba3ef3876b96a411374817a20bb24e69619853a04f9a4e7d01b3d1cef5e0c054b9bce9e3128 languageName: node linkType: hard "@babel/highlight@npm:^7.22.13": - version: 7.22.13 - resolution: "@babel/highlight@npm:7.22.13" + version: 7.22.20 + resolution: "@babel/highlight@npm:7.22.20" dependencies: - "@babel/helper-validator-identifier": ^7.22.5 + "@babel/helper-validator-identifier": ^7.22.20 chalk: ^2.4.2 js-tokens: ^4.0.0 - checksum: 65f20132c7ada5d82d343dc23ca61bcd040980f7bd59e480532bcd7f7895aa7abe58470ae8a4f851fd244b71b42a7ad915f7c515fef8f1c2e003777721ebdbe6 + checksum: f3c3a193afad23434297d88e81d1d6c0c2cf02423de2139ada7ce0a7fc62d8559abf4cc996533c1a9beca7fc990010eb8d544097f75e818ac113bf39ed810aa2 languageName: node linkType: hard -"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.11.5, @babel/parser@npm:^7.13.16, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.18.4, @babel/parser@npm:^7.20.15, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.21.3, @babel/parser@npm:^7.21.4, @babel/parser@npm:^7.22.15, @babel/parser@npm:^7.22.16, @babel/parser@npm:^7.22.5, @babel/parser@npm:^7.22.7, @babel/parser@npm:^7.4.5, @babel/parser@npm:^7.6.0, @babel/parser@npm:^7.7.0, @babel/parser@npm:^7.8.6, @babel/parser@npm:^7.8.7, @babel/parser@npm:^7.9.6": - version: 7.22.16 - resolution: "@babel/parser@npm:7.22.16" +"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.11.5, @babel/parser@npm:^7.13.16, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.18.4, @babel/parser@npm:^7.20.15, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.21.3, @babel/parser@npm:^7.21.4, @babel/parser@npm:^7.22.15, @babel/parser@npm:^7.22.5, @babel/parser@npm:^7.22.7, @babel/parser@npm:^7.23.0, @babel/parser@npm:^7.4.5, @babel/parser@npm:^7.6.0, @babel/parser@npm:^7.7.0, @babel/parser@npm:^7.8.6, @babel/parser@npm:^7.8.7, @babel/parser@npm:^7.9.6": + version: 7.23.0 + resolution: "@babel/parser@npm:7.23.0" bin: parser: ./bin/babel-parser.js - checksum: e7b6a7d65e27a08a8be361021c332aa72b989b845c4124e0e2c3ec5810956f8c96baf0f54657d1e1200ee5ec6298b895392d2ff73f9de61418e56c0d2d6f574c - languageName: node - linkType: hard - -"@babel/parser@npm:^7.22.10": - version: 7.22.10 - resolution: "@babel/parser@npm:7.22.10" - bin: - parser: ./bin/babel-parser.js - checksum: 22de4b5b2e20dd5b44a73963e5fceef44501bacdd14f0b3b96fc16975826553c83c3e424e2ea906b4f2fb8c2129b176bcee33ae99e30de9006ceb28ded5c6ac7 + checksum: ab4ea9360ed4ba3c728c5a9bf33035103ebde20a7e943c4ae1d42becb02a313d731d12a93c795c5a19777031e4022e64b92a52262eda902522a1a18649826283 languageName: node linkType: hard @@ -935,17 +857,17 @@ __metadata: linkType: hard "@babel/plugin-proposal-decorators@npm:^7.13.5": - version: 7.22.15 - resolution: "@babel/plugin-proposal-decorators@npm:7.22.15" + version: 7.23.0 + resolution: "@babel/plugin-proposal-decorators@npm:7.23.0" dependencies: "@babel/helper-create-class-features-plugin": ^7.22.15 "@babel/helper-plugin-utils": ^7.22.5 - "@babel/helper-replace-supers": ^7.22.9 + "@babel/helper-replace-supers": ^7.22.20 "@babel/helper-split-export-declaration": ^7.22.6 "@babel/plugin-syntax-decorators": ^7.22.10 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 1af2367ef3bd3d459146b95e066e009a15e55c178cd73368e7a063248f9a079114a1da56d0b3a442a2afd6ba1f0ebb2027fc3813d1548b8319fc45560158baea + checksum: 983e7113f9ca3b2ae632869f71accec48cb652d68840697c3977071d44879657ca6b4427ed02e76e448e385d0feca9bd3d40edfaf1530c6c6c25fe8b97d46689 languageName: node linkType: hard @@ -1325,13 +1247,13 @@ __metadata: linkType: hard "@babel/plugin-transform-block-scoping@npm:^7.22.15, @babel/plugin-transform-block-scoping@npm:^7.22.5, @babel/plugin-transform-block-scoping@npm:^7.8.3": - version: 7.22.15 - resolution: "@babel/plugin-transform-block-scoping@npm:7.22.15" + version: 7.23.0 + resolution: "@babel/plugin-transform-block-scoping@npm:7.23.0" dependencies: "@babel/helper-plugin-utils": ^7.22.5 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 8becbcd251c4d011ef12c6652c22528e352d4b7ca2d62d7ce8f87c23777aeb7bb760a512aed8b400b116324516ffb619501ece04f18747f7ce5618092d6a1c74 + checksum: f5d0822a4e2bb3a0b5172f01f8c107999b880f0e538a9c1bae3c7720e85d8d117a67167f5e8eba909e0ec3db67be3b30e7f5c83211dd4be5c7096222071571be languageName: node linkType: hard @@ -1392,13 +1314,13 @@ __metadata: linkType: hard "@babel/plugin-transform-destructuring@npm:^7.22.15, @babel/plugin-transform-destructuring@npm:^7.22.5": - version: 7.22.15 - resolution: "@babel/plugin-transform-destructuring@npm:7.22.15" + version: 7.23.0 + resolution: "@babel/plugin-transform-destructuring@npm:7.23.0" dependencies: "@babel/helper-plugin-utils": ^7.22.5 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: fbff08ea3fc5e89f3f6f0f305dc336a79e57c86111bfe224b83ed1a30ac8be97522196dc1a7fb1b18f400ac6e252eb4d2135b841f52628afe245c6d8437d2c14 + checksum: 038505eabdde2e1bb3bb904e50292b263d61d35e18660f751e7753b5723e2a5a5903a493290d772c8598da98c2c904b7cf45552ad1c11636fcb78f60754abd53 languageName: node linkType: hard @@ -1544,41 +1466,41 @@ __metadata: linkType: hard "@babel/plugin-transform-modules-amd@npm:^7.13.0, @babel/plugin-transform-modules-amd@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-modules-amd@npm:7.22.5" + version: 7.23.0 + resolution: "@babel/plugin-transform-modules-amd@npm:7.23.0" dependencies: - "@babel/helper-module-transforms": ^7.22.5 + "@babel/helper-module-transforms": ^7.23.0 "@babel/helper-plugin-utils": ^7.22.5 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 157ae3b58a50ca52e361860ecab2b608bc9228ea6c760112a35302990976f8936b8d75a2b21925797eed7b3bab4930a3f447193127afef9a21b7b6463ff0b422 + checksum: dda02864029ff66955e21d19c3d245aad69792b75e748de1391403bc86c8e9720b4f320b0db8413a29c11ba63b168146cf849180b5677bc6a74bfd085d20376d languageName: node linkType: hard -"@babel/plugin-transform-modules-commonjs@npm:^7.13.8, @babel/plugin-transform-modules-commonjs@npm:^7.2.0, @babel/plugin-transform-modules-commonjs@npm:^7.22.15, @babel/plugin-transform-modules-commonjs@npm:^7.22.5": - version: 7.22.15 - resolution: "@babel/plugin-transform-modules-commonjs@npm:7.22.15" +"@babel/plugin-transform-modules-commonjs@npm:^7.13.8, @babel/plugin-transform-modules-commonjs@npm:^7.2.0, @babel/plugin-transform-modules-commonjs@npm:^7.22.15, @babel/plugin-transform-modules-commonjs@npm:^7.22.5, @babel/plugin-transform-modules-commonjs@npm:^7.23.0": + version: 7.23.0 + resolution: "@babel/plugin-transform-modules-commonjs@npm:7.23.0" dependencies: - "@babel/helper-module-transforms": ^7.22.15 + "@babel/helper-module-transforms": ^7.23.0 "@babel/helper-plugin-utils": ^7.22.5 "@babel/helper-simple-access": ^7.22.5 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 1b1a25dfcfb86d7719b3ec94d3e6ce0c8b7e0c98375071fe9149fa6556e57f247c39453c27c06d63490c567ddae424bfbd9517185b6bdf71d3875263c74d13ef + checksum: 1f015764c2e63445d46660e7a2eb9002c20def04daf98fa93c9dadb5bd55adbefefd1ccdc11bcafa5e2f04275939d2414482703bc35bc60d6ca2bf1f67b720e3 languageName: node linkType: hard "@babel/plugin-transform-modules-systemjs@npm:^7.22.11, @babel/plugin-transform-modules-systemjs@npm:^7.22.5": - version: 7.22.11 - resolution: "@babel/plugin-transform-modules-systemjs@npm:7.22.11" + version: 7.23.0 + resolution: "@babel/plugin-transform-modules-systemjs@npm:7.23.0" dependencies: "@babel/helper-hoist-variables": ^7.22.5 - "@babel/helper-module-transforms": ^7.22.9 + "@babel/helper-module-transforms": ^7.23.0 "@babel/helper-plugin-utils": ^7.22.5 - "@babel/helper-validator-identifier": ^7.22.5 + "@babel/helper-validator-identifier": ^7.22.20 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: c484eedf57129a1f0c29b16da73dd77fc241faf14a9f96f4a84853372e9cd69a18555e2a2112ebfdd8f4d6ccd7943525c48cf06a07bc6ec0e473e4049e04fdd8 + checksum: 04c5cef7d6921bb9c9073cea389289099124e78cd1e3b7e020e3c085d486b48efadd9a42c0c0d963a9b1c3d5465c3151229092ea719997e53427f36935c84178 languageName: node linkType: hard @@ -1692,15 +1614,15 @@ __metadata: linkType: hard "@babel/plugin-transform-optional-chaining@npm:^7.22.15, @babel/plugin-transform-optional-chaining@npm:^7.22.6": - version: 7.22.15 - resolution: "@babel/plugin-transform-optional-chaining@npm:7.22.15" + version: 7.23.0 + resolution: "@babel/plugin-transform-optional-chaining@npm:7.23.0" dependencies: "@babel/helper-plugin-utils": ^7.22.5 "@babel/helper-skip-transparent-expression-wrappers": ^7.22.5 "@babel/plugin-syntax-optional-chaining": ^7.8.3 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: d6437864209ef7884c36cd6122c7b3553b6ea48e4e2a7dc070741d20a96f94deac5b23360b0d953d358e6cb6c991c6831e6601fac68f1a206b487266d7a63807 + checksum: 2bf605b908c75f8d7616e8be52e4656983f2b027032260fbf5279f28297a67a1a28ec3ed60cd5760537dbd08a021246b8092ce06fb2418884390230b807142b3 languageName: node linkType: hard @@ -2096,10 +2018,10 @@ __metadata: linkType: hard "@babel/preset-env@npm:^7.16.5, @babel/preset-env@npm:^7.22.9": - version: 7.22.15 - resolution: "@babel/preset-env@npm:7.22.15" + version: 7.22.20 + resolution: "@babel/preset-env@npm:7.22.20" dependencies: - "@babel/compat-data": ^7.22.9 + "@babel/compat-data": ^7.22.20 "@babel/helper-compilation-targets": ^7.22.15 "@babel/helper-plugin-utils": ^7.22.5 "@babel/helper-validator-option": ^7.22.15 @@ -2173,7 +2095,7 @@ __metadata: "@babel/plugin-transform-unicode-regex": ^7.22.5 "@babel/plugin-transform-unicode-sets-regex": ^7.22.5 "@babel/preset-modules": 0.1.6-no-external-plugins - "@babel/types": ^7.22.15 + "@babel/types": ^7.22.19 babel-plugin-polyfill-corejs2: ^0.4.5 babel-plugin-polyfill-corejs3: ^0.8.3 babel-plugin-polyfill-regenerator: ^0.5.2 @@ -2181,7 +2103,7 @@ __metadata: semver: ^6.3.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: d2e952450aeb8d7feea36cfceec47da9e510cdd8f23fbc5c578db7403db7f5d83af7e456bb39af890d7bd40806ac4183377a215349e07f2e80e72259e19a7929 + checksum: 3adf4209a785aec7bfc1a331845ca623acd115e01ff0f9c918b1bc67f69f9e06e6aad4c06940a5001c4c2189617d8c6f8b7fb4720ed7beb9b92d0bdf399692f7 languageName: node linkType: hard @@ -2243,17 +2165,17 @@ __metadata: linkType: hard "@babel/preset-typescript@npm:^7.13.0, @babel/preset-typescript@npm:^7.22.5": - version: 7.22.15 - resolution: "@babel/preset-typescript@npm:7.22.15" + version: 7.23.0 + resolution: "@babel/preset-typescript@npm:7.23.0" dependencies: "@babel/helper-plugin-utils": ^7.22.5 "@babel/helper-validator-option": ^7.22.15 "@babel/plugin-syntax-jsx": ^7.22.5 - "@babel/plugin-transform-modules-commonjs": ^7.22.15 + "@babel/plugin-transform-modules-commonjs": ^7.23.0 "@babel/plugin-transform-typescript": ^7.22.15 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: a9d933b7032263ac9c30e550c7b039c64c4d17c191d1be79012d6dce61f5036601afd8fb4409d9434544b4efb0b2f4d91d797b7f8438d0e1a7dfd7bff279d0d5 + checksum: 97e246bd14eefad1dd93144200e62aedfb8577fac4172c8da4760b1c2272680fe06780ad87fea1ab81b62e32a23fc9f8e9f10c31a1c22cabf879cb3025e2fed8 languageName: node linkType: hard @@ -2280,12 +2202,12 @@ __metadata: linkType: hard "@babel/runtime-corejs3@npm:^7.10.2": - version: 7.22.15 - resolution: "@babel/runtime-corejs3@npm:7.22.15" + version: 7.23.1 + resolution: "@babel/runtime-corejs3@npm:7.23.1" dependencies: core-js-pure: ^3.30.2 regenerator-runtime: ^0.14.0 - checksum: 603ca28f1924ee587fcfccc394c5e4aedc3322193914a2db824e7fe041604282749b023d9edb5076a72af7413050081223c6187f870b9a925a1e9c7a3313f706 + checksum: 6e2c2b11779ff56c88b1f3a8742498640f7271ad4fcf9cfd24052bbb236a5e7c4c7c8d81cda751da3b4effa678736303deb78441c5752e63bfb90d6453fd870f languageName: node linkType: hard @@ -2317,11 +2239,11 @@ __metadata: linkType: hard "@babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.2, @babel/runtime@npm:^7.11.2, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.13.10, @babel/runtime@npm:^7.14.8, @babel/runtime@npm:^7.17.8, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.20.13, @babel/runtime@npm:^7.20.7, @babel/runtime@npm:^7.21.0, @babel/runtime@npm:^7.22.6, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.7.6, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.9.2": - version: 7.22.15 - resolution: "@babel/runtime@npm:7.22.15" + version: 7.23.1 + resolution: "@babel/runtime@npm:7.23.1" dependencies: regenerator-runtime: ^0.14.0 - checksum: 96b74adfd1db812d06ed56d9db12acecfc844d252b93994ce4901433957bd28affba725622a4dc9e7f76384c4cb6cadc3d620d07817c8be9156eaedba5eea059 + checksum: e57ab1436d4845efe67c3f76d578508bb584173690ecfeac105bc4e09d64b2aa6a53c1e03bca3c97cc238e5390a804e5a4ded211e6350243b735905ca45a4822 languageName: node linkType: hard @@ -2367,50 +2289,32 @@ __metadata: languageName: node linkType: hard -"@babel/traverse@npm:^7.1.6, @babel/traverse@npm:^7.22.15, @babel/traverse@npm:^7.22.17, @babel/traverse@npm:^7.22.5, @babel/traverse@npm:^7.22.8, @babel/traverse@npm:^7.4.5, @babel/traverse@npm:^7.7.0, @babel/traverse@npm:^7.8.6": - version: 7.22.17 - resolution: "@babel/traverse@npm:7.22.17" +"@babel/traverse@npm:^7.1.6, @babel/traverse@npm:^7.18.9, @babel/traverse@npm:^7.22.5, @babel/traverse@npm:^7.22.8, @babel/traverse@npm:^7.23.0, @babel/traverse@npm:^7.4.5, @babel/traverse@npm:^7.7.0, @babel/traverse@npm:^7.8.6": + version: 7.23.0 + resolution: "@babel/traverse@npm:7.23.0" dependencies: "@babel/code-frame": ^7.22.13 - "@babel/generator": ^7.22.15 - "@babel/helper-environment-visitor": ^7.22.5 - "@babel/helper-function-name": ^7.22.5 - "@babel/helper-hoist-variables": ^7.22.5 - "@babel/helper-split-export-declaration": ^7.22.6 - "@babel/parser": ^7.22.16 - "@babel/types": ^7.22.17 - debug: ^4.1.0 - globals: ^11.1.0 - checksum: c9bfa6d20caf50e529ac9359db4cd4a5c23f28536bf17e2d493135631ab68be456efda94ba71bf568be34c6d8e762b23cfd9f43fd52b09756cb0397446643d17 - languageName: node - linkType: hard - -"@babel/traverse@npm:^7.18.9, @babel/traverse@npm:^7.22.10": - version: 7.22.10 - resolution: "@babel/traverse@npm:7.22.10" - dependencies: - "@babel/code-frame": ^7.22.10 - "@babel/generator": ^7.22.10 - "@babel/helper-environment-visitor": ^7.22.5 - "@babel/helper-function-name": ^7.22.5 + "@babel/generator": ^7.23.0 + "@babel/helper-environment-visitor": ^7.22.20 + "@babel/helper-function-name": ^7.23.0 "@babel/helper-hoist-variables": ^7.22.5 "@babel/helper-split-export-declaration": ^7.22.6 - "@babel/parser": ^7.22.10 - "@babel/types": ^7.22.10 + "@babel/parser": ^7.23.0 + "@babel/types": ^7.23.0 debug: ^4.1.0 globals: ^11.1.0 - checksum: 8e8b63b053962908408ed9d954810e93f241122222db115327ed5876d020f420fc115ef2d79623c2a4928447ddc002ec220be2a152b241d19de2480c88e10cfb + checksum: 84f93e64179965a0de6109a8b1ce92d66eb52a76e8ba325d27bdec6952cedd8fc98eabf09fe443ef667a051300dc7ed8924e7bf61a87ad456501d1da46657509 languageName: node linkType: hard -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.11.5, @babel/types@npm:^7.18.9, @babel/types@npm:^7.2.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.21.4, @babel/types@npm:^7.22.10, @babel/types@npm:^7.22.15, @babel/types@npm:^7.22.17, @babel/types@npm:^7.22.5, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.6.1, @babel/types@npm:^7.7.0, @babel/types@npm:^7.7.2, @babel/types@npm:^7.8.3, @babel/types@npm:^7.8.6, @babel/types@npm:^7.8.7, @babel/types@npm:^7.9.6": - version: 7.22.17 - resolution: "@babel/types@npm:7.22.17" +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.11.5, @babel/types@npm:^7.18.9, @babel/types@npm:^7.2.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.21.4, @babel/types@npm:^7.22.15, @babel/types@npm:^7.22.19, @babel/types@npm:^7.22.5, @babel/types@npm:^7.23.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.6.1, @babel/types@npm:^7.7.0, @babel/types@npm:^7.7.2, @babel/types@npm:^7.8.3, @babel/types@npm:^7.8.6, @babel/types@npm:^7.8.7, @babel/types@npm:^7.9.6": + version: 7.23.0 + resolution: "@babel/types@npm:7.23.0" dependencies: "@babel/helper-string-parser": ^7.22.5 - "@babel/helper-validator-identifier": ^7.22.15 + "@babel/helper-validator-identifier": ^7.22.20 to-fast-properties: ^2.0.0 - checksum: ca26bd1df1aa2707af058f70fb52898d31b209a8a5372330013870150182697e5ab45d6d661d433259e52b4e25396ad41d0b428158d5b856a030dc111d000359 + checksum: 70e4db41acb6793d0eb8d81a2fa88f19ee661219b84bd5f703dbdb54eb3a4d3c0dfc55e69034c945b479df9f43fd4b1376480aaccfc19797ce5af1c5d2576b36 languageName: node linkType: hard @@ -2544,15 +2448,15 @@ __metadata: linkType: hard "@digitak/esrun@npm:^3.2.2": - version: 3.2.24 - resolution: "@digitak/esrun@npm:3.2.24" + version: 3.2.25 + resolution: "@digitak/esrun@npm:3.2.25" dependencies: "@digitak/grubber": ^3.1.4 chokidar: ^3.5.1 esbuild: ^0.17.4 bin: esrun: bin.js - checksum: cfd46e5be5083d7a7b97881718ff0872ca0a314a294bf7484324d964fa92548db6603e7e5792a2f6d7a820d9e7c55715b70f534fd3cc72ea25e20f56f4490793 + checksum: d2d3291a15fae43e3cba875d12a5bea6453dfe625af90ef7835e9071db31b769219401197fe1d5efde57cf7f1eda204ca68c99022fdc0039eb057052c60d15fc languageName: node linkType: hard @@ -2927,9 +2831,9 @@ __metadata: linkType: hard "@eslint-community/regexpp@npm:^4.4.0, @eslint-community/regexpp@npm:^4.6.1": - version: 4.8.1 - resolution: "@eslint-community/regexpp@npm:4.8.1" - checksum: 3443b17de28e42ff2ff07ca6b3488c5d016a01fbedf89dce6c80f6bd4138ec3cf49754dba667844e071bb3fa0b31432e1e6ac6929b32f0bf17ced57073820ec2 + version: 4.9.1 + resolution: "@eslint-community/regexpp@npm:4.9.1" + checksum: d0e1bd1a37cb2cb6bbac88dfe97b62b412d4b6ea3a4bb1c4e1e503be03125063db5d80999cef9728f57b19b49979aa902ac68182bcf5f80dfce6fa9a9d34eee1 languageName: node linkType: hard @@ -2950,10 +2854,10 @@ __metadata: languageName: node linkType: hard -"@eslint/js@npm:8.49.0": - version: 8.49.0 - resolution: "@eslint/js@npm:8.49.0" - checksum: 40b4255866161e16b09eae1830c8ff7379276659ee7ce039e4708bcf3c5a5fd8b95418d32c355294e6c738f23ab42f3e3a55100dffb389edd5d5233ca47c01b3 +"@eslint/js@npm:8.50.0": + version: 8.50.0 + resolution: "@eslint/js@npm:8.50.0" + checksum: 92cb0a823869e85f287bd172f14a6a20d7d65c3f4db886a0356a9efebfe8fe519e9ead84a5687bd18f45eca417bdcce96e3b83fe3feae8baf0f8f44d14073bae languageName: node linkType: hard @@ -2985,22 +2889,22 @@ __metadata: languageName: node linkType: hard -"@floating-ui/core@npm:^1.4.1": - version: 1.4.1 - resolution: "@floating-ui/core@npm:1.4.1" +"@floating-ui/core@npm:^1.4.2": + version: 1.5.0 + resolution: "@floating-ui/core@npm:1.5.0" dependencies: - "@floating-ui/utils": ^0.1.1 - checksum: 6a738ff3b5bcca2470904a2462a2700e32081f6e681e077fd63c8d0b389439511a2a16187589df156fac6e8f47d56bdc0afea64303b9341fb5886cff82d87758 + "@floating-ui/utils": ^0.1.3 + checksum: bca811cefd09c3f56c4cf58c3e94826c1ce4a0b40124e9030ddca2ef1cc68b4ddc5ba5b4d7cc94c9555aea6876d2428a77a2ae261fe5b39c79df247a9518b053 languageName: node linkType: hard "@floating-ui/dom@npm:^1.5.1": - version: 1.5.2 - resolution: "@floating-ui/dom@npm:1.5.2" + version: 1.5.3 + resolution: "@floating-ui/dom@npm:1.5.3" dependencies: - "@floating-ui/core": ^1.4.1 - "@floating-ui/utils": ^0.1.1 - checksum: ce0e7dca2d36667ef4a72a2200bd7c49bf1b1bb94a5a09efc27e9d225175d92f41f00a037f1ef060f8fe78af242bc0889e4b12dd0be4dcd7a772f4a63804e693 + "@floating-ui/core": ^1.4.2 + "@floating-ui/utils": ^0.1.3 + checksum: e5f30b911f939e40003851077bba441f269ae689bdc43c674bee43aa98fc6b7a5f59be432d27b7be599b1e4ab7b15c752875ea777a89cff01d157e593b78b25b languageName: node linkType: hard @@ -3016,10 +2920,10 @@ __metadata: languageName: node linkType: hard -"@floating-ui/utils@npm:^0.1.1": - version: 0.1.2 - resolution: "@floating-ui/utils@npm:0.1.2" - checksum: a26fa0ca4d143ac925c3a966200abb2fcc43af47abfd42e57fb1aff1c9bdc0001d133c4c6575f1c15d328e8984149efa43a1f5803f02b6af9d9303b69b41c059 +"@floating-ui/utils@npm:^0.1.3": + version: 0.1.6 + resolution: "@floating-ui/utils@npm:0.1.6" + checksum: 0a089db0e0526b89e83cb0a773a903517db5c9067cd473febfd8fa91a3a2ccbc3a835234796c1bb528def21dbb67be50e28d9c473cb58a6d90679d7e549b9c0c languageName: node linkType: hard @@ -3030,39 +2934,41 @@ __metadata: languageName: node linkType: hard -"@gitbeaker/core@npm:^21.7.0": - version: 21.7.0 - resolution: "@gitbeaker/core@npm:21.7.0" +"@gitbeaker/core@npm:^35.8.1": + version: 35.8.1 + resolution: "@gitbeaker/core@npm:35.8.1" dependencies: - "@gitbeaker/requester-utils": ^21.7.0 - form-data: ^3.0.0 + "@gitbeaker/requester-utils": ^35.8.1 + form-data: ^4.0.0 li: ^1.3.0 + mime: ^3.0.0 + query-string: ^7.0.0 xcase: ^2.0.1 - checksum: 907f1dac7f43e288c71f184243712a65601a88ab7c9a8b7ff76629d8d94360c31f995b8142dec324615ad50f7e78e12f646a4302cb595dc990da3cdbd2514dfe + checksum: 5c23536dc83d5b4fa86c4efdae54cb2deba745e2f1f54e175c77f1883b218663e808b8fda253c81659aec791c254eb8b98c1e576f94f9c0f1d8f3c01976ae370 languageName: node linkType: hard -"@gitbeaker/node@npm:^21.3.0": - version: 21.7.0 - resolution: "@gitbeaker/node@npm:21.7.0" +"@gitbeaker/node@npm:^35.8.1": + version: 35.8.1 + resolution: "@gitbeaker/node@npm:35.8.1" dependencies: - "@gitbeaker/core": ^21.7.0 - "@gitbeaker/requester-utils": ^21.7.0 - form-data: ^3.0.0 - got: ^11.1.4 + "@gitbeaker/core": ^35.8.1 + "@gitbeaker/requester-utils": ^35.8.1 + delay: ^5.0.0 + got: ^11.8.3 xcase: ^2.0.1 - checksum: c5be30593dae749271f8529a0e33a1831f173d7e39796c9e30206a71e3007cc6368c802d296f1a8fcca056a8e718c77f50ae61aa17de8e444f0c91bf1a05950c + checksum: 387f5d7e31535454a66e627a2e830ceaa7954ac3de66882cdcc52a19d43f6b4221dc9d847baf39a7d08dda235a8f03c729a71efb32f5b84f246fd14d031b98cb languageName: node linkType: hard -"@gitbeaker/requester-utils@npm:^21.7.0": - version: 21.7.0 - resolution: "@gitbeaker/requester-utils@npm:21.7.0" +"@gitbeaker/requester-utils@npm:^35.8.1": + version: 35.8.1 + resolution: "@gitbeaker/requester-utils@npm:35.8.1" dependencies: - form-data: ^3.0.0 - query-string: ^6.12.1 + form-data: ^4.0.0 + qs: ^6.10.1 xcase: ^2.0.1 - checksum: 1930783d67a8add51bd6056e0524facfc867fb73d78387af4259a166a5e725eaa64a4c22c0fe33538762b0abb496781bf39d95fc8d544825354254dd05e05271 + checksum: 4178f7aa052cccd6caf3b2c4d63c9e04ab082ced8d32a7b07c33df6af42707769f8cabfb09b63f46e68e7e20fa0bc02757053adb8f3f79e6e5547b4cb4f119ca languageName: node linkType: hard @@ -4067,84 +3973,84 @@ __metadata: languageName: node linkType: hard -"@next/env@npm:13.4.19": - version: 13.4.19 - resolution: "@next/env@npm:13.4.19" - checksum: 0d9cb76fedcde6f8116c5f029d999cccaf929c9eb8c55daf1d38ae223a80113abae28834e537b26b81731d84ed14fd5231301b2126cd7d9097a7e175dd79bf59 +"@next/env@npm:13.5.4": + version: 13.5.4 + resolution: "@next/env@npm:13.5.4" + checksum: 69c013047371bde6c4dc6d03ec77140059bd4e3db38c1991a8aa8a9c8ce4d1370b98a141145a6f60e23f32ce97a3040b448bfd0455b0d9e5ba6efda8df33c89f languageName: node linkType: hard -"@next/swc-darwin-arm64@npm:13.4.19": - version: 13.4.19 - resolution: "@next/swc-darwin-arm64@npm:13.4.19" +"@next/swc-darwin-arm64@npm:13.5.4": + version: 13.5.4 + resolution: "@next/swc-darwin-arm64@npm:13.5.4" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@next/swc-darwin-x64@npm:13.4.19": - version: 13.4.19 - resolution: "@next/swc-darwin-x64@npm:13.4.19" +"@next/swc-darwin-x64@npm:13.5.4": + version: 13.5.4 + resolution: "@next/swc-darwin-x64@npm:13.5.4" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@next/swc-linux-arm64-gnu@npm:13.4.19": - version: 13.4.19 - resolution: "@next/swc-linux-arm64-gnu@npm:13.4.19" +"@next/swc-linux-arm64-gnu@npm:13.5.4": + version: 13.5.4 + resolution: "@next/swc-linux-arm64-gnu@npm:13.5.4" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@next/swc-linux-arm64-musl@npm:13.4.19": - version: 13.4.19 - resolution: "@next/swc-linux-arm64-musl@npm:13.4.19" +"@next/swc-linux-arm64-musl@npm:13.5.4": + version: 13.5.4 + resolution: "@next/swc-linux-arm64-musl@npm:13.5.4" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@next/swc-linux-x64-gnu@npm:13.4.19": - version: 13.4.19 - resolution: "@next/swc-linux-x64-gnu@npm:13.4.19" +"@next/swc-linux-x64-gnu@npm:13.5.4": + version: 13.5.4 + resolution: "@next/swc-linux-x64-gnu@npm:13.5.4" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@next/swc-linux-x64-musl@npm:13.4.19": - version: 13.4.19 - resolution: "@next/swc-linux-x64-musl@npm:13.4.19" +"@next/swc-linux-x64-musl@npm:13.5.4": + version: 13.5.4 + resolution: "@next/swc-linux-x64-musl@npm:13.5.4" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@next/swc-win32-arm64-msvc@npm:13.4.19": - version: 13.4.19 - resolution: "@next/swc-win32-arm64-msvc@npm:13.4.19" +"@next/swc-win32-arm64-msvc@npm:13.5.4": + version: 13.5.4 + resolution: "@next/swc-win32-arm64-msvc@npm:13.5.4" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@next/swc-win32-ia32-msvc@npm:13.4.19": - version: 13.4.19 - resolution: "@next/swc-win32-ia32-msvc@npm:13.4.19" +"@next/swc-win32-ia32-msvc@npm:13.5.4": + version: 13.5.4 + resolution: "@next/swc-win32-ia32-msvc@npm:13.5.4" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@next/swc-win32-x64-msvc@npm:13.4.19": - version: 13.4.19 - resolution: "@next/swc-win32-x64-msvc@npm:13.4.19" +"@next/swc-win32-x64-msvc@npm:13.5.4": + version: 13.5.4 + resolution: "@next/swc-win32-x64-msvc@npm:13.5.4" conditions: os=win32 & cpu=x64 languageName: node linkType: hard -"@ngtools/webpack@npm:16.2.1": - version: 16.2.1 - resolution: "@ngtools/webpack@npm:16.2.1" +"@ngtools/webpack@npm:16.2.4": + version: 16.2.4 + resolution: "@ngtools/webpack@npm:16.2.4" peerDependencies: "@angular/compiler-cli": ^16.0.0 typescript: ">=4.9.3 <5.2" webpack: ^5.54.0 - checksum: 340283be62a7567215254e46e0273eefbc245c51d6e5e26549b3d1fcd76aa29cdeabab271bc98abb631cb1b306a330d4cbe3e489e156b329ed2266716ef82cd1 + checksum: 7bbf12e04e922372b9b8d29a8ee3dd3dd5f9bb12aaf82f85156bfd2270284875553fa5dc19566c30f3769960e701051204de646fce573098febabb629415e044 languageName: node linkType: hard @@ -4353,11 +4259,11 @@ __metadata: linkType: hard "@npmcli/query@npm:^3.0.0": - version: 3.0.0 - resolution: "@npmcli/query@npm:3.0.0" + version: 3.0.1 + resolution: "@npmcli/query@npm:3.0.1" dependencies: postcss-selector-parser: ^6.0.10 - checksum: 58cff90a0a0b9d603e43723bb51f28ab7d36db778b9d6ef1acf8735fb0303850695fd87ccdbfe796e6b6891b474ea95900019d74ac92f440fd1cdd20db6d5f7c + checksum: 497f03887121df13dbbc7a008772708746ecb9d8b9dbb1d8a8cdc5eb03ff6dbce0e78cbc48102e7cd3d2f3abc2faf22fd5348bb3c33efd13e2077faf8d71efde languageName: node linkType: hard @@ -4387,12 +4293,12 @@ __metadata: languageName: node linkType: hard -"@nrwl/cli@npm:15.9.6": - version: 15.9.6 - resolution: "@nrwl/cli@npm:15.9.6" +"@nrwl/cli@npm:15.9.7": + version: 15.9.7 + resolution: "@nrwl/cli@npm:15.9.7" dependencies: - nx: 15.9.6 - checksum: 100ad6122998676c97c7c2aeb70e2b644e7999f80b91deb8ff60428b5a40ce8ed269d4c9cb1d8c5d310be268ffd84fbe17ebe09ff0b844c9ecac0155add0a236 + nx: 15.9.7 + checksum: 7fe454ae5a752abcc310edda6bd30ba4c9b7228d3c903231549d3a578825aaca4a49250b4ff73809aa02d8abc5478c6ac80ae1306b519f89a6f8cfedfb71c2cf languageName: node linkType: hard @@ -4406,17 +4312,17 @@ __metadata: linkType: hard "@nrwl/devkit@npm:>=15.5.2 < 16": - version: 15.9.6 - resolution: "@nrwl/devkit@npm:15.9.6" + version: 15.9.7 + resolution: "@nrwl/devkit@npm:15.9.7" dependencies: ejs: ^3.1.7 ignore: ^5.0.4 - semver: 7.3.4 + semver: 7.5.4 tmp: ~0.2.1 tslib: ^2.3.0 peerDependencies: nx: ">= 14.1 <= 16" - checksum: 7773d41b1e0595e50fe9a370f257fd80cfb6ac6102453856d3db295bbf299337d7d77a10f49bae1f69750460fbb7dcec7144d730b6e67adacf88a4df12ff2b48 + checksum: bbf384f2e8ba6608ca17c977f9b2992ccef8f022c9687689b374acaaf94c252ebddd2389ef6e8f978af650e8c85819cc3fef440c5d873c4009e8f4c999d08f73 languageName: node linkType: hard @@ -4429,77 +4335,77 @@ __metadata: languageName: node linkType: hard -"@nrwl/nx-darwin-arm64@npm:15.9.6": - version: 15.9.6 - resolution: "@nrwl/nx-darwin-arm64@npm:15.9.6" +"@nrwl/nx-darwin-arm64@npm:15.9.7": + version: 15.9.7 + resolution: "@nrwl/nx-darwin-arm64@npm:15.9.7" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@nrwl/nx-darwin-x64@npm:15.9.6": - version: 15.9.6 - resolution: "@nrwl/nx-darwin-x64@npm:15.9.6" +"@nrwl/nx-darwin-x64@npm:15.9.7": + version: 15.9.7 + resolution: "@nrwl/nx-darwin-x64@npm:15.9.7" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@nrwl/nx-linux-arm-gnueabihf@npm:15.9.6": - version: 15.9.6 - resolution: "@nrwl/nx-linux-arm-gnueabihf@npm:15.9.6" +"@nrwl/nx-linux-arm-gnueabihf@npm:15.9.7": + version: 15.9.7 + resolution: "@nrwl/nx-linux-arm-gnueabihf@npm:15.9.7" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@nrwl/nx-linux-arm64-gnu@npm:15.9.6": - version: 15.9.6 - resolution: "@nrwl/nx-linux-arm64-gnu@npm:15.9.6" +"@nrwl/nx-linux-arm64-gnu@npm:15.9.7": + version: 15.9.7 + resolution: "@nrwl/nx-linux-arm64-gnu@npm:15.9.7" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@nrwl/nx-linux-arm64-musl@npm:15.9.6": - version: 15.9.6 - resolution: "@nrwl/nx-linux-arm64-musl@npm:15.9.6" +"@nrwl/nx-linux-arm64-musl@npm:15.9.7": + version: 15.9.7 + resolution: "@nrwl/nx-linux-arm64-musl@npm:15.9.7" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@nrwl/nx-linux-x64-gnu@npm:15.9.6": - version: 15.9.6 - resolution: "@nrwl/nx-linux-x64-gnu@npm:15.9.6" +"@nrwl/nx-linux-x64-gnu@npm:15.9.7": + version: 15.9.7 + resolution: "@nrwl/nx-linux-x64-gnu@npm:15.9.7" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@nrwl/nx-linux-x64-musl@npm:15.9.6": - version: 15.9.6 - resolution: "@nrwl/nx-linux-x64-musl@npm:15.9.6" +"@nrwl/nx-linux-x64-musl@npm:15.9.7": + version: 15.9.7 + resolution: "@nrwl/nx-linux-x64-musl@npm:15.9.7" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@nrwl/nx-win32-arm64-msvc@npm:15.9.6": - version: 15.9.6 - resolution: "@nrwl/nx-win32-arm64-msvc@npm:15.9.6" +"@nrwl/nx-win32-arm64-msvc@npm:15.9.7": + version: 15.9.7 + resolution: "@nrwl/nx-win32-arm64-msvc@npm:15.9.7" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@nrwl/nx-win32-x64-msvc@npm:15.9.6": - version: 15.9.6 - resolution: "@nrwl/nx-win32-x64-msvc@npm:15.9.6" +"@nrwl/nx-win32-x64-msvc@npm:15.9.7": + version: 15.9.7 + resolution: "@nrwl/nx-win32-x64-msvc@npm:15.9.7" conditions: os=win32 & cpu=x64 languageName: node linkType: hard -"@nrwl/tao@npm:15.9.6": - version: 15.9.6 - resolution: "@nrwl/tao@npm:15.9.6" +"@nrwl/tao@npm:15.9.7": + version: 15.9.7 + resolution: "@nrwl/tao@npm:15.9.7" dependencies: - nx: 15.9.6 + nx: 15.9.7 bin: tao: index.js - checksum: e37e2919c4855c3b891677662aad8956cc45f1a2f93c8c78472cbdaa45f25c030431826ac4d91bdfa11df0a0af5fed04c4f68cb0d8fcafd7581ea2680a756742 + checksum: 6ef6d77da018ad0ebaddc9bd4608d859211458e65979fc034e3c1e2bdfc77041c4ef43c24ab1dac108c48e8461de3bd266978948e523d4d6214d942895d26253 languageName: node linkType: hard @@ -4749,9 +4655,9 @@ __metadata: linkType: hard "@octokit/openapi-types@npm:^18.0.0": - version: 18.0.0 - resolution: "@octokit/openapi-types@npm:18.0.0" - checksum: d90fab10d962be71e72b85ffab2055cffd9c3196ff1edc3e4106deb78e99e8782965cf7aa6a4c1398f828e4d0c3e0f905915debfe34396d956dfce8e75b21664 + version: 18.1.1 + resolution: "@octokit/openapi-types@npm:18.1.1" + checksum: 856d3bb9f8c666e837dd5e8b8c216ee4342b9ed63ff8da922ca4ce5883ed1dfbec73390eb13d69fbcb4703a4c8b8b6a586df3b0e675ff93bf3d46b5b4fe0968e languageName: node linkType: hard @@ -5065,11 +4971,11 @@ __metadata: linkType: hard "@prefresh/core@npm:^1.5.1": - version: 1.5.1 - resolution: "@prefresh/core@npm:1.5.1" + version: 1.5.2 + resolution: "@prefresh/core@npm:1.5.2" peerDependencies: preact: ^10.0.0 - checksum: 7a1063a65911fbfcd5b02f34911875de5ffedb02ad4dda2bf9c519193ccb38f21b65ac3a2ba0bc4d8526c847b623013e0d2c1e7a58091aee33fc95ac40f4ad14 + checksum: 53d1ce714ed098ccc11f3a8e2826ff6b90237445c24df6281eb162791b534d1d7626a43c0c1c7427139d2ade658e1ba7020963c001135bbdbeeb15073008529b languageName: node linkType: hard @@ -5690,14 +5596,14 @@ __metadata: languageName: node linkType: hard -"@schematics/angular@npm:16.2.1": - version: 16.2.1 - resolution: "@schematics/angular@npm:16.2.1" +"@schematics/angular@npm:16.2.4": + version: 16.2.4 + resolution: "@schematics/angular@npm:16.2.4" dependencies: - "@angular-devkit/core": 16.2.1 - "@angular-devkit/schematics": 16.2.1 + "@angular-devkit/core": 16.2.4 + "@angular-devkit/schematics": 16.2.4 jsonc-parser: 3.2.0 - checksum: 706fb46223804624077128bc41b6f06a3818d98048707b71f17e55dfe7adf4a6096a3cca06bb65ffd1bcc1e456c7a88cfcef03a918f962f150bb21da56f2aa04 + checksum: 8435fe5d85ea45c8bf848d6b4297467b25b9b0cbdc71a7b5ec80dd614f106a9e4a7738d27337507048978754ebaa241548108c94694b5359b36308d47c1f0c21 languageName: node linkType: hard @@ -6778,12 +6684,12 @@ __metadata: languageName: unknown linkType: soft -"@storybook/client-logger@npm:7.4.1": - version: 7.4.1 - resolution: "@storybook/client-logger@npm:7.4.1" +"@storybook/client-logger@npm:7.4.6": + version: 7.4.6 + resolution: "@storybook/client-logger@npm:7.4.6" dependencies: "@storybook/global": ^5.0.0 - checksum: 75e52950d716a0f435eaad86c00e9b7ef52ba4818eb116a3b4d366392b3b868fc97213c9f6c551f0733a73ade635e889aaafa02f4bd651728d4d2a0219337a60 + checksum: 170ad58c17e2608639533fe24aaa96ddd4d77d23b4b28f265b2cb67510fef966fc20b029e070fdc7216ba1cdb724d1210b2f8edc8aa538de32fd6e549f9010cf languageName: node linkType: hard @@ -6893,7 +6799,7 @@ __metadata: chalk: ^4.1.0 esbuild: ^0.18.0 esbuild-register: ^3.5.0 - file-system-cache: ^2.4.4 + file-system-cache: 2.3.0 find-cache-dir: ^3.0.0 find-up: ^5.0.0 fs-extra: ^11.1.0 @@ -7127,11 +7033,11 @@ __metadata: linkType: hard "@storybook/expect@npm:storybook-jest": - version: 27.5.2-0 - resolution: "@storybook/expect@npm:27.5.2-0" + version: 28.1.3-5 + resolution: "@storybook/expect@npm:28.1.3-5" dependencies: - "@types/jest": ">=26.0.0" - checksum: 068d07334d2dc26bdd8ddf2a2d6f98ed06536a64232c3cdf035240c4d70fdff3a4aecc33e9b012dc3d01236834116a078ef17a59d4aea90eabbe67ba60d26307 + "@types/jest": 28.1.3 + checksum: ea912b18e1353cdd3bbdf93667ffebca7f843fa28a01e647429bffa6cb074afd4401d13eb2ecbfc9714e100e128ec1fe2686bded52e9e378ce44774889563558 languageName: node linkType: hard @@ -7194,12 +7100,12 @@ __metadata: linkType: soft "@storybook/icons@npm:^1.1.6": - version: 1.1.6 - resolution: "@storybook/icons@npm:1.1.6" + version: 1.1.7 + resolution: "@storybook/icons@npm:1.1.7" peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: c8c2fb8f91c5c93b1cd6951c06a25f5b8203943cb95d7b6ef40015896596ed7444911fa556726c880902110f04e013f3def3fbae0eb6f7dbfcc96ec93fce9cb9 + checksum: 5bb97f948f2a1cfc067a120f8e17004cdf9cdef0d08558ec51659e4e4d4b1620c76ced6d15a57d84aed888c664a0f9daa7a6e7b4ef22302d95f3228aa627bc83 languageName: node linkType: hard @@ -7217,13 +7123,14 @@ __metadata: linkType: soft "@storybook/jest@npm:next": - version: 0.1.1-next.2 - resolution: "@storybook/jest@npm:0.1.1-next.2" + version: 0.2.2-next.0 + resolution: "@storybook/jest@npm:0.2.2-next.0" dependencies: "@storybook/expect": storybook-jest - "@testing-library/jest-dom": ^5.16.2 + "@testing-library/jest-dom": ^6.1.2 + "@types/jest": 28.1.3 jest-mock: ^27.3.0 - checksum: e19fd99003987930a808ae35930da56299ce9790714c8f5f31fcc258584d6930235ef436e87ae644a8ec2b4c281493e6ed36872554832229edd1feca8c12c451 + checksum: f89149436e0506cfa33fb8678a4d3bcb8fadc16e6a00905c92e9da716772cb5a65e8bdc07f6a7f536e3940af3c676c41857f4093eaed4c3f12c074d45c92e661 languageName: node linkType: hard @@ -8193,28 +8100,28 @@ __metadata: linkType: soft "@storybook/testing-library@npm:next": - version: 0.2.1-next.0 - resolution: "@storybook/testing-library@npm:0.2.1-next.0" + version: 0.2.2-next.0 + resolution: "@storybook/testing-library@npm:0.2.2-next.0" dependencies: "@testing-library/dom": ^9.0.0 - "@testing-library/user-event": ^14.0.0 + "@testing-library/user-event": ^14.4.0 ts-dedent: ^2.2.0 - checksum: c63e90f856505ee737bd7feb7b688c5bb5918f39c8088e85e40c6ee7ffcbb038e31d59904e3bd1a79267282f919a95ae060ab73f7af133c6f08ef0ee47ace80b + checksum: 4350e73776cba8ab5037ee9a8b07b957c73540873f64097648ed96b93f086469eab475ad19b917e5e2eee4faec67891fa443d703b9b4aa28efc9a74243970a4e languageName: node linkType: hard "@storybook/theming@npm:^7.0.2": - version: 7.4.1 - resolution: "@storybook/theming@npm:7.4.1" + version: 7.4.6 + resolution: "@storybook/theming@npm:7.4.6" dependencies: "@emotion/use-insertion-effect-with-fallbacks": ^1.0.0 - "@storybook/client-logger": 7.4.1 + "@storybook/client-logger": 7.4.6 "@storybook/global": ^5.0.0 memoizerific: ^1.11.3 peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 1c832d8391ac3d1fa155e13081bb7dfe67f1579e21fdd5dffd1b57a0e171b4955b891ebbd21acf5fab5fa4665b48226842a959aaf968c0b5c4608024a31b0281 + checksum: 6250a413c346971792623bf5a907811fc009ff4a36b8f292d0f45c677269b2a50c29d84ab1e869ada7df3eb23d49614e1342bd2c88e71d4467702b92ebc42f2d languageName: node linkType: hard @@ -8253,7 +8160,7 @@ __metadata: "@types/express": ^4.7.0 "@types/fs-extra": ^11.0.1 "@types/node": ^16.0.0 - file-system-cache: ^2.4.4 + file-system-cache: 2.3.0 typescript: ~4.9.3 languageName: unknown linkType: soft @@ -8465,7 +8372,7 @@ __metadata: languageName: node linkType: hard -"@sveltejs/vite-plugin-svelte-inspector@npm:^1.0.3": +"@sveltejs/vite-plugin-svelte-inspector@npm:^1.0.4": version: 1.0.4 resolution: "@sveltejs/vite-plugin-svelte-inspector@npm:1.0.4" dependencies: @@ -8479,20 +8386,20 @@ __metadata: linkType: hard "@sveltejs/vite-plugin-svelte@npm:^2.4.2": - version: 2.4.5 - resolution: "@sveltejs/vite-plugin-svelte@npm:2.4.5" + version: 2.4.6 + resolution: "@sveltejs/vite-plugin-svelte@npm:2.4.6" dependencies: - "@sveltejs/vite-plugin-svelte-inspector": ^1.0.3 + "@sveltejs/vite-plugin-svelte-inspector": ^1.0.4 debug: ^4.3.4 deepmerge: ^4.3.1 kleur: ^4.1.5 - magic-string: ^0.30.2 + magic-string: ^0.30.3 svelte-hmr: ^0.15.3 vitefu: ^0.2.4 peerDependencies: svelte: ^3.54.0 || ^4.0.0 vite: ^4.0.0 - checksum: 59ac52fee6748038c34c1f2842e21c04d3585327aadf827bf416b50d4a44c112970b35a29488e467b83cd7691a1f4a373f7a38a93456fe2c179f4ee5a82d044f + checksum: de7d844bf5fc12aa4caf352f5825d58f6747eef68301a492128ea6756c3c193f1d1e1f75975abd4fdfb50f5a4ff45016a94f40c29e1b0121095c63f6bc10e219 languageName: node linkType: hard @@ -8503,9 +8410,9 @@ __metadata: languageName: node linkType: hard -"@swc/core-darwin-arm64@npm:1.3.84": - version: 1.3.84 - resolution: "@swc/core-darwin-arm64@npm:1.3.84" +"@swc/core-darwin-arm64@npm:1.3.91": + version: 1.3.91 + resolution: "@swc/core-darwin-arm64@npm:1.3.91" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard @@ -8517,9 +8424,9 @@ __metadata: languageName: node linkType: hard -"@swc/core-darwin-x64@npm:1.3.84": - version: 1.3.84 - resolution: "@swc/core-darwin-x64@npm:1.3.84" +"@swc/core-darwin-x64@npm:1.3.91": + version: 1.3.91 + resolution: "@swc/core-darwin-x64@npm:1.3.91" conditions: os=darwin & cpu=x64 languageName: node linkType: hard @@ -8531,9 +8438,9 @@ __metadata: languageName: node linkType: hard -"@swc/core-linux-arm-gnueabihf@npm:1.3.84": - version: 1.3.84 - resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.84" +"@swc/core-linux-arm-gnueabihf@npm:1.3.91": + version: 1.3.91 + resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.91" conditions: os=linux & cpu=arm languageName: node linkType: hard @@ -8545,9 +8452,9 @@ __metadata: languageName: node linkType: hard -"@swc/core-linux-arm64-gnu@npm:1.3.84": - version: 1.3.84 - resolution: "@swc/core-linux-arm64-gnu@npm:1.3.84" +"@swc/core-linux-arm64-gnu@npm:1.3.91": + version: 1.3.91 + resolution: "@swc/core-linux-arm64-gnu@npm:1.3.91" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard @@ -8559,9 +8466,9 @@ __metadata: languageName: node linkType: hard -"@swc/core-linux-arm64-musl@npm:1.3.84": - version: 1.3.84 - resolution: "@swc/core-linux-arm64-musl@npm:1.3.84" +"@swc/core-linux-arm64-musl@npm:1.3.91": + version: 1.3.91 + resolution: "@swc/core-linux-arm64-musl@npm:1.3.91" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard @@ -8573,9 +8480,9 @@ __metadata: languageName: node linkType: hard -"@swc/core-linux-x64-gnu@npm:1.3.84": - version: 1.3.84 - resolution: "@swc/core-linux-x64-gnu@npm:1.3.84" +"@swc/core-linux-x64-gnu@npm:1.3.91": + version: 1.3.91 + resolution: "@swc/core-linux-x64-gnu@npm:1.3.91" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard @@ -8587,9 +8494,9 @@ __metadata: languageName: node linkType: hard -"@swc/core-linux-x64-musl@npm:1.3.84": - version: 1.3.84 - resolution: "@swc/core-linux-x64-musl@npm:1.3.84" +"@swc/core-linux-x64-musl@npm:1.3.91": + version: 1.3.91 + resolution: "@swc/core-linux-x64-musl@npm:1.3.91" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard @@ -8601,9 +8508,9 @@ __metadata: languageName: node linkType: hard -"@swc/core-win32-arm64-msvc@npm:1.3.84": - version: 1.3.84 - resolution: "@swc/core-win32-arm64-msvc@npm:1.3.84" +"@swc/core-win32-arm64-msvc@npm:1.3.91": + version: 1.3.91 + resolution: "@swc/core-win32-arm64-msvc@npm:1.3.91" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard @@ -8615,9 +8522,9 @@ __metadata: languageName: node linkType: hard -"@swc/core-win32-ia32-msvc@npm:1.3.84": - version: 1.3.84 - resolution: "@swc/core-win32-ia32-msvc@npm:1.3.84" +"@swc/core-win32-ia32-msvc@npm:1.3.91": + version: 1.3.91 + resolution: "@swc/core-win32-ia32-msvc@npm:1.3.91" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard @@ -8629,9 +8536,9 @@ __metadata: languageName: node linkType: hard -"@swc/core-win32-x64-msvc@npm:1.3.84": - version: 1.3.84 - resolution: "@swc/core-win32-x64-msvc@npm:1.3.84" +"@swc/core-win32-x64-msvc@npm:1.3.91": + version: 1.3.91 + resolution: "@swc/core-win32-x64-msvc@npm:1.3.91" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -8682,20 +8589,21 @@ __metadata: linkType: hard "@swc/core@npm:^1.3.82": - version: 1.3.84 - resolution: "@swc/core@npm:1.3.84" - dependencies: - "@swc/core-darwin-arm64": 1.3.84 - "@swc/core-darwin-x64": 1.3.84 - "@swc/core-linux-arm-gnueabihf": 1.3.84 - "@swc/core-linux-arm64-gnu": 1.3.84 - "@swc/core-linux-arm64-musl": 1.3.84 - "@swc/core-linux-x64-gnu": 1.3.84 - "@swc/core-linux-x64-musl": 1.3.84 - "@swc/core-win32-arm64-msvc": 1.3.84 - "@swc/core-win32-ia32-msvc": 1.3.84 - "@swc/core-win32-x64-msvc": 1.3.84 - "@swc/types": ^0.1.4 + version: 1.3.91 + resolution: "@swc/core@npm:1.3.91" + dependencies: + "@swc/core-darwin-arm64": 1.3.91 + "@swc/core-darwin-x64": 1.3.91 + "@swc/core-linux-arm-gnueabihf": 1.3.91 + "@swc/core-linux-arm64-gnu": 1.3.91 + "@swc/core-linux-arm64-musl": 1.3.91 + "@swc/core-linux-x64-gnu": 1.3.91 + "@swc/core-linux-x64-musl": 1.3.91 + "@swc/core-win32-arm64-msvc": 1.3.91 + "@swc/core-win32-ia32-msvc": 1.3.91 + "@swc/core-win32-x64-msvc": 1.3.91 + "@swc/counter": ^0.1.1 + "@swc/types": ^0.1.5 peerDependencies: "@swc/helpers": ^0.5.0 dependenciesMeta: @@ -8722,16 +8630,23 @@ __metadata: peerDependenciesMeta: "@swc/helpers": optional: true - checksum: 9b321aa779294134685507d61923d29e9248da58bb1af94168c220e25b54767c6ecc809ab815b3a3098bab63be26eea5cc86502bdd02930da1ded3cf35b516a8 + checksum: 1b2b2fd400d476a073d69aa4a7eba754f9388c2d72e123a5fb942291c65e5c6a186302c6daafdb68121be999c604de8f01b8ff58126614e0a4e7ca5af6c9cfc7 languageName: node linkType: hard -"@swc/helpers@npm:0.5.1": - version: 0.5.1 - resolution: "@swc/helpers@npm:0.5.1" +"@swc/counter@npm:^0.1.1": + version: 0.1.2 + resolution: "@swc/counter@npm:0.1.2" + checksum: 18be012107d4ba1f79776c48d83391ca2159103d7d31a59ff52fcc8024db51b71c5f46714a9fb73981739bc8a38dc6f385a046b71cc08f6043f3c47f5c409eab + languageName: node + linkType: hard + +"@swc/helpers@npm:0.5.2": + version: 0.5.2 + resolution: "@swc/helpers@npm:0.5.2" dependencies: tslib: ^2.4.0 - checksum: 2e2272c8278351670e1daf27cc634ace793afb378dcc85be2800d30a7b4d3afad37707371ead2a6d96662fa30294da678d66cdc4dc7f3e698bd8e111235c60fc + checksum: b6fa49bcf6c00571d0eb7837b163f8609960d4d77538160585e27ed167361e9776bd6e5eb9646ffac2fb4d43c58df9ca50dab9d96ab097e6591bc82a75fd1164 languageName: node linkType: hard @@ -8747,10 +8662,10 @@ __metadata: languageName: node linkType: hard -"@swc/types@npm:^0.1.4": - version: 0.1.4 - resolution: "@swc/types@npm:0.1.4" - checksum: f506cb23a08c604c6343c51f47e399d2c59f2e4a7df0689849284915a9f726ca65ce86d5358b5ed88c6ba1fce135a25614b1adda1beedf570a24c230466d6a46 +"@swc/types@npm:^0.1.4, @swc/types@npm:^0.1.5": + version: 0.1.5 + resolution: "@swc/types@npm:0.1.5" + checksum: b35f93fe896a2240f6f10544e408f9648c2bd4bcff9bd8d022d9a6942d31cf859f86119fb0bbb04a12eefa1f6a6745ffc7d18f3a490d76d7b6a074a7c9608144 languageName: node linkType: hard @@ -8780,8 +8695,8 @@ __metadata: linkType: hard "@testing-library/dom@npm:^9.0.0": - version: 9.3.1 - resolution: "@testing-library/dom@npm:9.3.1" + version: 9.3.3 + resolution: "@testing-library/dom@npm:9.3.3" dependencies: "@babel/code-frame": ^7.10.4 "@babel/runtime": ^7.12.5 @@ -8791,7 +8706,7 @@ __metadata: dom-accessibility-api: ^0.5.9 lz-string: ^1.5.0 pretty-format: ^27.0.2 - checksum: 25d1deddba014c107fd9703181fbb7063ed376d3ad42d7918ee752e7e677edfb5abaf672b22afc5257ffe760c9c7e5cc981656297c328bc61578d23c6b65b4dc + checksum: c3bbd67503634fd955233dc172531640656701fe35ecb9a83f85e5965874b786452f5e7c26b4f8b3b4fc4379f3a80193c74425b57843ba191f4845e22b0ac483 languageName: node linkType: hard @@ -8836,12 +8751,12 @@ __metadata: languageName: node linkType: hard -"@testing-library/user-event@npm:^14.0.0": - version: 14.4.3 - resolution: "@testing-library/user-event@npm:14.4.3" +"@testing-library/user-event@npm:^14.4.0": + version: 14.5.1 + resolution: "@testing-library/user-event@npm:14.5.1" peerDependencies: "@testing-library/dom": ">=7.21.4" - checksum: 28e1e4ed2fdaa9486e203c6789386be228e305abd3fa41f38c828af415fd4a4e80f4de88de0e502ff11c4b4926f221b874a2a45bcc8170d30714e12dad2c1bd0 + checksum: 1e00d6ead23377885b906db6e46e259161a0efb4138f7527481d7435f3c8f65cb7e3eab2900e2ac1886fa6dd03416e773a3a60dea87a9a2086a7127dee315f6f languageName: node linkType: hard @@ -8921,96 +8836,83 @@ __metadata: linkType: hard "@types/aria-query@npm:^5.0.1": - version: 5.0.1 - resolution: "@types/aria-query@npm:5.0.1" - checksum: bc9e40ce37bd3a1654948778c7829bd55aea1bc5f2cd06fcf6cd650b07bb388995799e9aab6e2d93a6cf55dcba3b85c155f7ba93adefcc7c2e152fc6057061b5 - languageName: node - linkType: hard - -"@types/babel__core@npm:^7, @types/babel__core@npm:^7.0.0, @types/babel__core@npm:^7.1.14, @types/babel__core@npm:^7.1.7": - version: 7.20.0 - resolution: "@types/babel__core@npm:7.20.0" - dependencies: - "@babel/parser": ^7.20.7 - "@babel/types": ^7.20.7 - "@types/babel__generator": "*" - "@types/babel__template": "*" - "@types/babel__traverse": "*" - checksum: 75dcd39258bc008b6fd4db7de2c8bfeb29b5cd2c726f54407f70243ddea1d8ce9e7082281557614c4a5f9f30d478387ca6ab6cc576fc829cebeb159bfaa8799f + version: 5.0.2 + resolution: "@types/aria-query@npm:5.0.2" + checksum: 74579b9e3f7f5042e8a05ab103dd652e724a556a5700fab778c76c53729635b73da5d242143df1fb9447e607f904cbd81871dd2b876f0974831a794165287b20 languageName: node linkType: hard -"@types/babel__core@npm:^7.18.0": - version: 7.20.1 - resolution: "@types/babel__core@npm:7.20.1" +"@types/babel__core@npm:^7, @types/babel__core@npm:^7.0.0, @types/babel__core@npm:^7.1.14, @types/babel__core@npm:^7.1.7, @types/babel__core@npm:^7.18.0": + version: 7.20.2 + resolution: "@types/babel__core@npm:7.20.2" dependencies: "@babel/parser": ^7.20.7 "@babel/types": ^7.20.7 "@types/babel__generator": "*" "@types/babel__template": "*" "@types/babel__traverse": "*" - checksum: c83402fc7ef8abd1f94ffe350b8bde9a35ccb6c3624bc8e39b6a7e1a675d112f6b70ac1b05391a579ca3b126baffe66b0b94f954edef086c4482b97d293c3659 + checksum: 4bd4bc0803ddd17af37871a8139e5b6c80b182f5f6d716c6484da1286522eba84750ffc527539bc39496876e7193f316b7493b99caa37af2b4e6ef345ee2ff8c languageName: node linkType: hard "@types/babel__generator@npm:*": - version: 7.6.4 - resolution: "@types/babel__generator@npm:7.6.4" + version: 7.6.5 + resolution: "@types/babel__generator@npm:7.6.5" dependencies: "@babel/types": ^7.0.0 - checksum: e0051b450e4ba2df0a7e386f08df902a4e920f6f8d6f185d69ddbe9b0e2e2d3ae434bb51e437bc0fca2a9a0f5dc4ca44d3a1941ef75e74371e8be5bf64416fe4 + checksum: b3e2668950208a681966fb93faa3a9164319caf960ff2ae232469fd09aa9b59a35d3328221027c373bb29d250b709073479f4fa1e404d109515846a65e06f0e2 languageName: node linkType: hard "@types/babel__plugin-transform-runtime@npm:^7": - version: 7.9.2 - resolution: "@types/babel__plugin-transform-runtime@npm:7.9.2" - checksum: cee1ef257ef1ddf1ad983ed3f93826f0b51a563067791293c49713d50b721c15f990fd3760230a320426e1d367aa9f66ca35af8f5847daf8ea03588a4053cd6c + version: 7.9.3 + resolution: "@types/babel__plugin-transform-runtime@npm:7.9.3" + checksum: b78f43265cbe4b9156f5f390847a1c862e0789d4eb0fb78ef6a814ecbfe39ee262039ed16f5c62b45a418123ad09492c03205ed9bd3bf28c8988d1975e68eb1c languageName: node linkType: hard "@types/babel__preset-env@npm:^7": - version: 7.9.2 - resolution: "@types/babel__preset-env@npm:7.9.2" - checksum: 89d389de7fb2b4be8f43b021899b1fd8bdc85e912cc01b1b5a2504b033ada58b034d44131561c56ab6781c31913a21b769d33a05b549549bbc49bb92537e2dfb + version: 7.9.3 + resolution: "@types/babel__preset-env@npm:7.9.3" + checksum: c9675bdf2e0d152e4c579fe172074e8d24509229829cc29d975506137341e4a19a5c12cbb73a80d65fac7858e516ee04cdeac415fced58326afb9a7816cd58d8 languageName: node linkType: hard "@types/babel__template@npm:*": - version: 7.4.1 - resolution: "@types/babel__template@npm:7.4.1" + version: 7.4.2 + resolution: "@types/babel__template@npm:7.4.2" dependencies: "@babel/parser": ^7.1.0 "@babel/types": ^7.0.0 - checksum: 6f180e96c39765487f27e861d43eebed341ec7a2fc06cdf5a52c22872fae67f474ca165d149c708f4fd9d5482beb66c0a92f77411b234bb30262ed2303e50b1a + checksum: 487e1a2fcb382d70a6f6e8136f19979e8db6048cd2eebee153e561b5c529f45e45ee8a5422078aa66375c9c5dfc67bcd2fd3989dc8e3a4ba0149640b7dbd1c13 languageName: node linkType: hard "@types/babel__traverse@npm:*, @types/babel__traverse@npm:^7.0.6, @types/babel__traverse@npm:^7.18.0": - version: 7.20.1 - resolution: "@types/babel__traverse@npm:7.20.1" + version: 7.20.2 + resolution: "@types/babel__traverse@npm:7.20.2" dependencies: "@babel/types": ^7.20.7 - checksum: 5a6a3a26be090573309527184a31f1b82ef55f3d73d811c15f181d323e471305f2390651a04d49d4cd4ca41bbeabb53c9f7862a8e09eab5a0f8910a6aec6e867 + checksum: 4a018298e7da9eef2cb962cf2daa1b87dd32f6b2f800b81d2d8f1c8db6c56a2bcac432c7b7a090c746784ccccd82f2c1dcf7cebe1e72923a27359af87bef854b languageName: node linkType: hard "@types/body-parser@npm:*": - version: 1.19.2 - resolution: "@types/body-parser@npm:1.19.2" + version: 1.19.3 + resolution: "@types/body-parser@npm:1.19.3" dependencies: "@types/connect": "*" "@types/node": "*" - checksum: c2dd533e1d4af958d656bdba7f376df68437d8dfb7e4522c88b6f3e6f827549e4be5bf0be68a5f1878accf5752ea37fba7e8a4b6dda53d0d122d77e27b69c750 + checksum: d35f76406232ee68b02b4b37b4b63cce26329f4302f55c19d5f4fd346f5b7df0994af486331849c4992567d83ded10f5beb3e200280c2142f53e0424f1565082 languageName: node linkType: hard "@types/bonjour@npm:^3.5.9": - version: 3.5.10 - resolution: "@types/bonjour@npm:3.5.10" + version: 3.5.11 + resolution: "@types/bonjour@npm:3.5.11" dependencies: "@types/node": "*" - checksum: 5a3d70695a8dfe79c020579fcbf18d7dbb89b8f061dd388c76b68c4797c0fccd71f3e8a9e2bea00afffdb9b37a49dd0ac0a192829d5b655a5b49c66f313a7be8 + checksum: 963b8260708186981b6fc75fcdbf1ab95bd83ec0472c1b9649c635bdf260d2af94c2930c1a08f97c9d6e370a14737a697e05e10796f29c2a8d81f7f0a80a8ed0 languageName: node linkType: hard @@ -9089,11 +8991,11 @@ __metadata: linkType: hard "@types/debug@npm:^4.0.0": - version: 4.1.8 - resolution: "@types/debug@npm:4.1.8" + version: 4.1.9 + resolution: "@types/debug@npm:4.1.9" dependencies: "@types/ms": "*" - checksum: 913aea60b8c94cd0009bbdd531d8a3594ec3275ca0e8d1cbcf783417884252b3c53113f6665fd2fb0076b8ce628ee12cd083d2af107ed26c0f2e75852d8bc074 + checksum: 8b550c47c70cc1af9a58e5c572f2418f30bface5bf5d5afa0d938923978f40be4c55646f1ab260f6f1492ca6ab065d447de23cb3b30d7b38597c2cbf89f4cb21 languageName: node linkType: hard @@ -9111,24 +9013,24 @@ __metadata: languageName: node linkType: hard -"@types/doctrine@npm:^0.0.5": - version: 0.0.5 - resolution: "@types/doctrine@npm:0.0.5" - checksum: 9b38d1b110e94fa34632e21f83b64ed05116f6349b5666c11bc0d4081c793f9b0be25b9d8b34df0ec38d440741836c17d4c84576e22dc00a18fe972f96688bf3 +"@types/doctrine@npm:^0.0.6": + version: 0.0.6 + resolution: "@types/doctrine@npm:0.0.6" + checksum: eae59a178be3b7989f3dd269cbe30fee9041a95ccb7ac963bbff3fcc82e7985c5002228afe23b7fad985f3eedf5257d36c7011bd8caafb087fcdcc6df1e52cb3 languageName: node linkType: hard "@types/ejs@npm:^3.1.1": - version: 3.1.2 - resolution: "@types/ejs@npm:3.1.2" - checksum: 8e55275011009e7a44043d97348a4a1b5a7583e1f048b6ad8998f1b30667995314f15bc9cc9ed3e0e79722cce9a06845d06d5d023bca179bb00d52016b41ad7d + version: 3.1.3 + resolution: "@types/ejs@npm:3.1.3" + checksum: 8366861c80749a0231f58a258f1fc9ab43992e6b74d157d1fd199f273f2f7d9f016f64d61a6d899a77d86d49c2a4a569215deda899dcf2dbfef85e12d26b9715 languageName: node linkType: hard "@types/emscripten@npm:^1.39.6": - version: 1.39.7 - resolution: "@types/emscripten@npm:1.39.7" - checksum: 552c9558065c1f717d00df3cd740ee88650b0671e37bb7ddaa1889acb1d6ae5aa9618b9fdb0c634dea612fe17689b35885457b6da0420f0cd2d790cad5a6a212 + version: 1.39.8 + resolution: "@types/emscripten@npm:1.39.8" + checksum: a2cc8ddb734b0cbead13c9d4b7733da07655529bdfbcd8a858067bd6b97f2b622935526a6d6ee5c9c5495d50854d608e34ad9a4e09700858d7b9418799e33197 languageName: node linkType: hard @@ -9140,38 +9042,38 @@ __metadata: linkType: hard "@types/eslint-scope@npm:^3.7.3": - version: 3.7.4 - resolution: "@types/eslint-scope@npm:3.7.4" + version: 3.7.5 + resolution: "@types/eslint-scope@npm:3.7.5" dependencies: "@types/eslint": "*" "@types/estree": "*" - checksum: f8a19cddf9d402f079bcc261958fff5ff2616465e4fb4cd423aa966a6a32bf5d3c65ca3ca0fbe824776b48c5cd525efbaf927b98b8eeef093aa68a1a2ba19359 + checksum: 9ade676030067a14d34acb4a48362bcf16632e867d059e734cf082e0523362415ed698e3776f8fad7e346019078d63a5264992b33054182607ce20ad9eaeec80 languageName: node linkType: hard "@types/eslint@npm:*": - version: 8.44.2 - resolution: "@types/eslint@npm:8.44.2" + version: 8.44.3 + resolution: "@types/eslint@npm:8.44.3" dependencies: "@types/estree": "*" "@types/json-schema": "*" - checksum: 3c402215f7f495f9267a51fecd6a6d056eb8b3b031a1c472286b7d23a397257327eb03712befa7da60614dd63d31235d27dbc5c586b6a408798dafb8ee0c5eb2 + checksum: d9d681efe461ec8934800a89773be251a200c9d4528ca2330bb99f4ca3bd6b2d053034d2b5fe645a1567331af2c89e364aed4be8c839f10a1028a3cbe2856b01 languageName: node linkType: hard "@types/estree-jsx@npm:^1.0.0": - version: 1.0.0 - resolution: "@types/estree-jsx@npm:1.0.0" + version: 1.0.1 + resolution: "@types/estree-jsx@npm:1.0.1" dependencies: "@types/estree": "*" - checksum: faca4c8924cbc36095e11ac7677dce1875583cf8ea99b67911affbbcc2a06ef99e585c02fc7160e55406d3c127b447df5a8ba3b23c211e5bbaad45dd278cde97 + checksum: 3aa4d648ba3ddffa73eff63904a4ef7f78fc78c2fc22ad0ef80908e7e5839e4622dc8d8dc46708b07a6e732e72692cf234db63650c3ca608cc5b41c3e81f37a2 languageName: node linkType: hard "@types/estree@npm:*, @types/estree@npm:^1.0.0, @types/estree@npm:^1.0.1": - version: 1.0.1 - resolution: "@types/estree@npm:1.0.1" - checksum: b4022067f834d86766f23074a1a7ac6c460e823b00cd8fe94c997bc491e7794615facd3e1520a934c42bd8c0689dbff81e5c643b01f1dee143fc758cac19669e + version: 1.0.2 + resolution: "@types/estree@npm:1.0.2" + checksum: 4b5c601d435ea8e2205458de15fd1556b5ae6c9a8323bad8a940ea502d6c824664faca94234c0bf76bf9c87cbf6ac41abee550c9e20433256549d589c9b543bd languageName: node linkType: hard @@ -9183,26 +9085,26 @@ __metadata: linkType: hard "@types/express-serve-static-core@npm:*, @types/express-serve-static-core@npm:^4.17.33": - version: 4.17.36 - resolution: "@types/express-serve-static-core@npm:4.17.36" + version: 4.17.37 + resolution: "@types/express-serve-static-core@npm:4.17.37" dependencies: "@types/node": "*" "@types/qs": "*" "@types/range-parser": "*" "@types/send": "*" - checksum: ab0730272ed83528d0c7a040bc53c033720be5836c7059ffa8290ad13e6a57f5903aa14c2556f3235c9fa2ea167c477f00c43ae8e4a8712d05461dd6b9e69cde + checksum: 45487318802d9c44aac4323b9f5b33c24bb37c0258a5984c8ffe2b57f1bfc5b8ebbdc47149d6ce1b9e47e39b6cc4d1ef4468903a339990bfb8eac7995392f19f languageName: node linkType: hard "@types/express@npm:*, @types/express@npm:^4.17.11, @types/express@npm:^4.17.13, @types/express@npm:^4.7.0": - version: 4.17.17 - resolution: "@types/express@npm:4.17.17" + version: 4.17.18 + resolution: "@types/express@npm:4.17.18" dependencies: "@types/body-parser": "*" "@types/express-serve-static-core": ^4.17.33 "@types/qs": "*" "@types/serve-static": "*" - checksum: 5802a0a28f7473744dd6a118479440d8c5c801c973d34fb6f31b5ee645a41fee936193978a8e905d55deefda9b675d19924167bf11a31339874c3161a3fc2922 + checksum: 6babf7bce6abdd45138f7eac058c8705dbd3a2857208c8c78d863fcd8b3b212c6569fba1f748137e5743287f82dfecf9bc4d78d31d290afff2d37700a0cdb6fe languageName: node linkType: hard @@ -9213,13 +9115,13 @@ __metadata: languageName: node linkType: hard -"@types/fs-extra@npm:11.0.1, @types/fs-extra@npm:^11.0.1": - version: 11.0.1 - resolution: "@types/fs-extra@npm:11.0.1" +"@types/fs-extra@npm:^11.0.1": + version: 11.0.2 + resolution: "@types/fs-extra@npm:11.0.2" dependencies: "@types/jsonfile": "*" "@types/node": "*" - checksum: a65f1fae47849fe1a17441dcabc9400390303405972ff3cbb3578746cea8916b23d5e7652bf57a87767f75a9b2f37caac499b78b5230ae08fef0ba58b34c3a85 + checksum: 8ab94988a3376169e3daf0a546b5312039c19a7f1fb9c5a171f7602c9398155a90c0cef81ab95273e4c8c5962ab4ec280f0a1ba8e874bab2f26ca94b282c14a3 languageName: node linkType: hard @@ -9241,7 +9143,17 @@ __metadata: languageName: node linkType: hard -"@types/glob@npm:*, @types/glob@npm:^7.1.1, @types/glob@npm:^7.1.3": +"@types/glob@npm:*": + version: 8.1.0 + resolution: "@types/glob@npm:8.1.0" + dependencies: + "@types/minimatch": ^5.1.2 + "@types/node": "*" + checksum: ded07aa0d7a1caf3c47b85e262be82989ccd7933b4a14712b79c82fd45a239249811d9fc3a135b3e9457afa163e74a297033d7245b0dc63cd3d032f3906b053f + languageName: node + linkType: hard + +"@types/glob@npm:^7.1.1, @types/glob@npm:^7.1.3": version: 7.2.0 resolution: "@types/glob@npm:7.2.0" dependencies: @@ -9252,20 +9164,30 @@ __metadata: linkType: hard "@types/graceful-fs@npm:^4.1.3": - version: 4.1.6 - resolution: "@types/graceful-fs@npm:4.1.6" + version: 4.1.7 + resolution: "@types/graceful-fs@npm:4.1.7" dependencies: "@types/node": "*" - checksum: b1d32c5ae7bd52cf60e29df20407904c4312a39612e7ec2ee23c1e3731c1cfe31d97c6941bf6cb52f5f929d50d86d92dd506436b63fafa833181d439b628885e + checksum: a8c04a250cb40207b15097b33c053f5ecf4352f5107c0a2635f674dae8c9a90b28dc9bd6e28307d5aab0b5d3853e713de42110a149a6e303626915047134e87d languageName: node linkType: hard "@types/hast@npm:^2.0.0": - version: 2.3.5 - resolution: "@types/hast@npm:2.3.5" + version: 2.3.6 + resolution: "@types/hast@npm:2.3.6" dependencies: "@types/unist": ^2 - checksum: 3fc5185e7fb5139a4f60f0d4450179c1f88b7e288a054415b273e4a32f0c4cfe825a4cad075824dcdf3984609b47f13141f8900dedb3aeab482ae5a16275e807 + checksum: e44fa492f9ae8a0e499a738b598fc50c6cfa8131f2758ed98f292fbe67e37f4e85edb1aa53b27450bdafcf4e52c1a9660df0478914199c058193d9cffdc7d93c + languageName: node + linkType: hard + +"@types/hoist-non-react-statics@npm:^3.3.1": + version: 3.3.2 + resolution: "@types/hoist-non-react-statics@npm:3.3.2" + dependencies: + "@types/react": "*" + hoist-non-react-statics: ^3.3.0 + checksum: 2aaff564e7674b0b7389592f30e4681919a0a71986bc5d8c5ef67d9b5b3b46913920f5002a96fd37d8904fe5c0cc1e4cc5c92884c847b2f4a74cb30d841494d4 languageName: node linkType: hard @@ -9277,34 +9199,34 @@ __metadata: linkType: hard "@types/http-cache-semantics@npm:*": - version: 4.0.1 - resolution: "@types/http-cache-semantics@npm:4.0.1" - checksum: 6d6068110a04cac213bdc0fff9c7bac028b5a2da390492204328987d8ddc500adc10d9cf5747a6333dab261712655dcfe120ea1d5527c205d012a39cdccc2a7b + version: 4.0.2 + resolution: "@types/http-cache-semantics@npm:4.0.2" + checksum: 975258beba5a6ce446b67f9bf905385d8d44cecad54d839208e86018b0fe4a517c62ec7a169ec64ed454363628def75446fa09d99755f3797f213b596477fe97 languageName: node linkType: hard "@types/http-errors@npm:*": - version: 2.0.1 - resolution: "@types/http-errors@npm:2.0.1" - checksum: 3bbc8c84fb02b381737e2eec563b434121384b1aef4e070edec4479a1bc74f27373edc09162680cd3ea1035ef8e5ab6d606bd7c99e3855c424045fb74376cb66 + version: 2.0.2 + resolution: "@types/http-errors@npm:2.0.2" + checksum: ecedc65091baf7c83e0e61e7d1992112e0fa09461d69004747f55c80b801b796bdb60161e54efdac8a720b5f78a54720b0cabde3ae7094103a552d5c189222ce languageName: node linkType: hard "@types/http-proxy@npm:^1.17.8": - version: 1.17.11 - resolution: "@types/http-proxy@npm:1.17.11" + version: 1.17.12 + resolution: "@types/http-proxy@npm:1.17.12" dependencies: "@types/node": "*" - checksum: 0af1bed7c1eaace924b8a316a718a702d40882dc541320ca1629c7f4ee852ef4dbef1963d4cb9e523b59dbe4d7f07e37def38b15e8ebb92d5b569b800b1c2bf7 + checksum: 06719371ece6bdf9fd28b90b03bd56e48ffca675dfaadca81ae12ca18db6e77e70a509537ebfa3b2c37810d77dc52e5a3190c09bc490668dde7e384c7b579090 languageName: node linkType: hard "@types/ip@npm:^1.1.0": - version: 1.1.0 - resolution: "@types/ip@npm:1.1.0" + version: 1.1.1 + resolution: "@types/ip@npm:1.1.1" dependencies: "@types/node": "*" - checksum: 4ca17133cf1e1c12f31ac8aac966cfa741917d5015c2a8dc02b9db9a7510ede7db78b6db0535764ed6aa2957008fdd1afbc50a3cf1e81529cc8e2114ce4355c3 + checksum: cabb35bfb4255805e282f8b4b26c0cdca04a0d05016fe5c0a676aabadd1065c461bff5fdf4fca01041c7589cca10202865b1e6b02e505e569928b139353d7dfc languageName: node linkType: hard @@ -9316,44 +9238,54 @@ __metadata: linkType: hard "@types/istanbul-lib-report@npm:*": - version: 3.0.0 - resolution: "@types/istanbul-lib-report@npm:3.0.0" + version: 3.0.1 + resolution: "@types/istanbul-lib-report@npm:3.0.1" dependencies: "@types/istanbul-lib-coverage": "*" - checksum: 7ced458631276a28082ee40645224c3cdd8b861961039ff811d841069171c987ec7e50bc221845ec0d04df0022b2f457a21fb2f816dab2fbe64d59377b32031f + checksum: a2a002ee7ecd9079a2c06235d28d1bc77089c3d834eec7e6dac38986203634936f2a017812624acfbedabec4bddd933942f14ac93eba2dc57f581ad4f35bbf1d languageName: node linkType: hard "@types/istanbul-reports@npm:^3.0.0": - version: 3.0.1 - resolution: "@types/istanbul-reports@npm:3.0.1" + version: 3.0.2 + resolution: "@types/istanbul-reports@npm:3.0.2" dependencies: "@types/istanbul-lib-report": "*" - checksum: e147f0db9346a0cae9a359220bc76f7c78509fb6979a2597feb24d64b6e8328d2d26f9d152abbd59c6bca721e4ea2530af20116d01df50815efafd1e151fd777 + checksum: df6c9e6865006be06bae29f63d5240b96bc7041b18a8c6d66be5b5d92ef5c95675c7a605a603029065f4f8aece7dba7360349e9d0543f512417e64a707a3c4fa languageName: node linkType: hard "@types/jest-image-snapshot@npm:^6.0.0": - version: 6.2.0 - resolution: "@types/jest-image-snapshot@npm:6.2.0" + version: 6.2.1 + resolution: "@types/jest-image-snapshot@npm:6.2.1" dependencies: "@types/jest": "*" "@types/pixelmatch": "*" ssim.js: ^3.1.1 - checksum: 65e7b951eee31521b4f53fa6a49134fad137a5636886594ea10324624afe074d4c88e1f579715934e0eab340951bbc864b81c99c00f51f8cf31230de415078c5 + checksum: d7bb16f2680e9b3f828f86effc9a8fee0e3d118c6138d537dfb3383333606d5dd765a5de3c1f4bd7ae6d2cc0e0528ee8aee055d66ef1d811719afbd6168ff616 languageName: node linkType: hard "@types/jest-specific-snapshot@npm:^0.5.6": - version: 0.5.6 - resolution: "@types/jest-specific-snapshot@npm:0.5.6" + version: 0.5.7 + resolution: "@types/jest-specific-snapshot@npm:0.5.7" dependencies: "@types/jest": "*" - checksum: 5fc9234afdf704eb7fa69bbf7860c2e9f9e76aed750e98aa44824bb47e048d1e57c5386eb3c919534a4225147f205742c6f9dac0e458e092de30efde77cc1ebe + checksum: ad18f3c6e55a533f9d9b04ae99dfdae6e6d0b5c936f348b5280325ced1c35ccf94ce629a71c3116785bb041d0192c22630d38ed30f13849fe9310935e6224fb8 languageName: node linkType: hard "@types/jest@npm:*": + version: 29.5.5 + resolution: "@types/jest@npm:29.5.5" + dependencies: + expect: ^29.0.0 + pretty-format: ^29.0.0 + checksum: 0a3481f119099e6a0a381fec0d410cd33241267a0981576a7a832687fc3f888f79285289dc7c054c3589fd443f7ed1598d25fa7bc9708491b58da17e423b4aff + languageName: node + linkType: hard + +"@types/jest@npm:28.1.3": version: 28.1.3 resolution: "@types/jest@npm:28.1.3" dependencies: @@ -9363,30 +9295,20 @@ __metadata: languageName: node linkType: hard -"@types/jest@npm:>=26.0.0": - version: 29.5.4 - resolution: "@types/jest@npm:29.5.4" - dependencies: - expect: ^29.0.0 - pretty-format: ^29.0.0 - checksum: 49c1f0fa20e45b1dfd69aea8af667a8be30e210f00673c365d504ca285cf9040d8f4861dd89657640af5f4a49eadcadc08907b5cf82eda28afea8ddd3dda8390 - languageName: node - linkType: hard - "@types/js-yaml@npm:^4.0.5": - version: 4.0.5 - resolution: "@types/js-yaml@npm:4.0.5" - checksum: 37eb783b16f1704d26bbf83b35cf5d12f6018c18f2c9232515468ac60a4c5b71b6344a7b872545eeca3dfd66bb17e2bb1e611646cc727d7c6a001165a4ec0a32 + version: 4.0.6 + resolution: "@types/js-yaml@npm:4.0.6" + checksum: e2e3ccdde9979973ea0afc357e753ddcd1a586cfccfeafcf5c17ab1ea3314c73faf7555d0af4da237c0c32c29cd4bc0f6a659a5e5085fe3f1fdc94d20fb19683 languageName: node linkType: hard "@types/jscodeshift@npm:^0.11.6": - version: 0.11.6 - resolution: "@types/jscodeshift@npm:0.11.6" + version: 0.11.7 + resolution: "@types/jscodeshift@npm:0.11.7" dependencies: ast-types: ^0.14.1 recast: ^0.20.3 - checksum: 1d204a4c3d9f52669e315dfbc1e65434ec55ee884574306d35048b89ef83b625c64d510228b6aabbd4248af566e02e0ce9de0aa8ccdfff696c69fbaced7007e7 + checksum: a2c26f8e64950296bae6176c52e832e1f5c5eb3672adad3c1cdc63e23b8bd3de47890ac8eaae7eb0788feea7628ce540513ff5189379f79e882ddcfa1c855cfc languageName: node linkType: hard @@ -9402,9 +9324,9 @@ __metadata: linkType: hard "@types/json-schema@npm:*, @types/json-schema@npm:^7.0.8, @types/json-schema@npm:^7.0.9": - version: 7.0.12 - resolution: "@types/json-schema@npm:7.0.12" - checksum: 2c39946ae321fe42d085c61a85872a81bbee70f9b2054ad344e8811dfc478fdbaf1ebf5f2989bb87c895ba2dfc3b1dcba85db11e467bbcdc023708814207791c + version: 7.0.13 + resolution: "@types/json-schema@npm:7.0.13" + checksum: 446fe6722899333ff647b5853fdcc9f039156d56abe517166154d3578d641841cc869f61e8b7822c24a1daeb7dfbd4fdcea84bf07c0858e2f9cca415e2ca8dd4 languageName: node linkType: hard @@ -9416,11 +9338,11 @@ __metadata: linkType: hard "@types/jsonfile@npm:*": - version: 6.1.1 - resolution: "@types/jsonfile@npm:6.1.1" + version: 6.1.2 + resolution: "@types/jsonfile@npm:6.1.2" dependencies: "@types/node": "*" - checksum: 96dfca37e856978eaf256bf5200c46a01a27a0455b9323a72598e8d59ddd81095934bf15e9c84d6a30125cf63e1464aef6d70ab4a35f34ee2cdfa1fe0db0720b + checksum: c2943f9bfa7867b33fb362b88a932efdc00e9e5f2762b6ef912617cb0a3e3221a98920f8976a4cf817aa576e03d28a25391236e9644e2ebe648081b08df62ef5 languageName: node linkType: hard @@ -9434,50 +9356,50 @@ __metadata: linkType: hard "@types/lodash@npm:^4.14.167": - version: 4.14.198 - resolution: "@types/lodash@npm:4.14.198" - checksum: 9523efda6eb78dc06bcc536c13396892695bc05147fef9f8e60db130d7be693a7a2eb48682b1dd30c0afa58617d5c79333d4bbe527a1c2474e4360282678c9cc + version: 4.14.199 + resolution: "@types/lodash@npm:4.14.199" + checksum: a7168a0a2a7c9e8801aa95f92b02f9d664ee938a5186d73f77a3a8447f475bbadedc1f7f746ffd2530ae34069d232bf25f4f4414077f0d81c71489e34e59173e languageName: node linkType: hard "@types/mdast@npm:^3.0.0": - version: 3.0.12 - resolution: "@types/mdast@npm:3.0.12" + version: 3.0.13 + resolution: "@types/mdast@npm:3.0.13" dependencies: "@types/unist": ^2 - checksum: b5af41e4f19a149eba58cde8ccacc36117640aefe28966637c54c27a8fbcfa3972e88cafd859c7bf39cd5c4e965e4196169001beac4a1980cfee6b08eea896a6 + checksum: b328d1622075a67db1d8eac78dcbd55aefb4adaf63206b58abfce902c0ce5232a2674bd0bf961696c9a3765d5fcf145378ce03075bd1690a25adc617650f1228 languageName: node linkType: hard "@types/mdx@npm:^2.0.0": - version: 2.0.7 - resolution: "@types/mdx@npm:2.0.7" - checksum: 0ed11fa446331af642a2424427e4f06b6dc430eff7e065b730c439f483af88de5d8c16c2740a3726751df9d4cf24ad303b563fd60aaad6197b9460eb7f3d5414 + version: 2.0.8 + resolution: "@types/mdx@npm:2.0.8" + checksum: 6ee0e54d886afcbc2547f1db73ac9de60603ce26592e21f5fff2ba2791f6c58d3eb7b849add8f6b8b9c10f7c8ff3855d29fe7122f532f2f64fce95fe5b8e23ef languageName: node linkType: hard "@types/mime-types@npm:^2.1.0": - version: 2.1.1 - resolution: "@types/mime-types@npm:2.1.1" - checksum: 131b33bfd89481f6a791996db9198c6c5ffccbb310e990d1dd9fab7a2287b5a0fd642bdd959a19281397c86f721498e09956e3892e5db17f93f38e726ca05008 + version: 2.1.2 + resolution: "@types/mime-types@npm:2.1.2" + checksum: aab18eefbcd759908968958eeee6483d8559178d0a3510ca8da692b43f0d98afc8956270623586c6301165a3bd2dcbd9847a8c4d1ea1711de25bb5395686d2a3 languageName: node linkType: hard "@types/mime@npm:*": - version: 3.0.1 - resolution: "@types/mime@npm:3.0.1" - checksum: c4c0fc89042822a3b5ffd6ef0da7006513454ee8376ffa492372d17d2925a4e4b1b194c977b718c711df38b33eb9d06deb5dbf9f851bcfb7e5e65f06b2a87f97 + version: 3.0.2 + resolution: "@types/mime@npm:3.0.2" + checksum: 7eef33033d9990881626611ef87d0dbb06ebff96a7ee09303874389eb482acd0fbf20fe2dc96edb861095e42e6c18d5df8476840131f9c06c57be6f1c1dc77fe languageName: node linkType: hard "@types/mime@npm:^1": - version: 1.3.2 - resolution: "@types/mime@npm:1.3.2" - checksum: 61d144e5170c6cdf6de334ec0ee4bb499b1a0fb0233834a9e8cec6d289b0e3042bedf35cbc1c995d71a247635770dae3f13a9ddae69098bb54b933429bc08d35 + version: 1.3.3 + resolution: "@types/mime@npm:1.3.3" + checksum: 56c9981b637154721753d38888c2cba85f8891a16e0f1cb1286dcbd741b220ff56d99aa2be03bf7fe88b188a27e32bf1d92976dafd6574b8f345bbf0853d462c languageName: node linkType: hard -"@types/minimatch@npm:*": +"@types/minimatch@npm:*, @types/minimatch@npm:^5.1.2": version: 5.1.2 resolution: "@types/minimatch@npm:5.1.2" checksum: 83cf1c11748891b714e129de0585af4c55dd4c2cafb1f1d5233d79246e5e1e19d1b5ad9e8db449667b3ffa2b6c80125c429dbee1054e9efb45758dbc4e118562 @@ -9492,49 +9414,56 @@ __metadata: linkType: hard "@types/minimist@npm:^1.2.0": - version: 1.2.2 - resolution: "@types/minimist@npm:1.2.2" - checksum: f220f57f682bbc3793dab4518f8e2180faa79d8e2589c79614fd777d7182be203ba399020c3a056a115064f5d57a065004a32b522b2737246407621681b24137 + version: 1.2.3 + resolution: "@types/minimist@npm:1.2.3" + checksum: e57d18f3c49b286eb5e63f2f6ec77d9a71beace3d9ef21cc3ee5a8eb4161520918b7eb0dcf20046d05339b955208a972ef474cc568542cd64b7b6365b9ec6650 languageName: node linkType: hard "@types/mock-fs@npm:^4.13.1": - version: 4.13.1 - resolution: "@types/mock-fs@npm:4.13.1" + version: 4.13.2 + resolution: "@types/mock-fs@npm:4.13.2" dependencies: "@types/node": "*" - checksum: 29cbedf7822e6fc2b6024c85dac66b0d103541edafc728b959cf07a6cd9977ee13db25c9bcb932eb7f66eb2270d79691f965c4be4bc8311d523f29bbd2ef742b + checksum: c589d8ba674e9d2279c6321841ee5b4e9ba3138a8790cbe2a61ea1da1e9d254188ef9f1a2f66539b225aaebcd56f746551f4723de24afc0c430d9e7c68344a7b languageName: node linkType: hard "@types/ms@npm:*": - version: 0.7.31 - resolution: "@types/ms@npm:0.7.31" - checksum: 19fae4f587651e8761c76a0c72ba8af1700d37054476878d164b758edcc926f4420ed06037a1a7fdddc1dbea25265895d743c8b2ea44f3f3f7ac06c449b9221e + version: 0.7.32 + resolution: "@types/ms@npm:0.7.32" + checksum: 16f60d0a2485edfa459e9570aec9135d9ef08dd855630754063f3baf1d1df7a5edd0f249ff9b460a33842181250f51b27b35078b83cf6ec1dccabb4485de19d6 languageName: node linkType: hard "@types/node-fetch@npm:^2.5.7, @types/node-fetch@npm:^2.6.4": - version: 2.6.4 - resolution: "@types/node-fetch@npm:2.6.4" + version: 2.6.6 + resolution: "@types/node-fetch@npm:2.6.6" dependencies: "@types/node": "*" - form-data: ^3.0.0 - checksum: e43e4670ed8b7693dbf660ac1450b14fcfcdd8efca1eb0f501b6ad95af2d1fa06f8541db03e9511e82a5fee510a238fe0913330c9a58f8ac6892b985f6dd993e + form-data: ^4.0.0 + checksum: fce52a0b65f4cb9e5059c9b3250682c8f0f0c2ce1d1a18b5bbc61b5fbf5f320b76d42b4dfa5c0567fe0704bdf0c0397527008efcb0749859aaaff8c51b6ed6c1 languageName: node linkType: hard -"@types/node@npm:*, @types/node@npm:>= 8, @types/node@npm:^16.0.0": - version: 16.18.50 - resolution: "@types/node@npm:16.18.50" - checksum: 4fc76918cc4e09d6cf087b385a1e2283580b1a88518f309764365cbdbdc28cdf48a77a5615ac4ce28dccee078b3da79442a032cc8aa312406943754144938cdb +"@types/node@npm:*, @types/node@npm:>= 8": + version: 20.8.2 + resolution: "@types/node@npm:20.8.2" + checksum: e9952db222dd3e1cca1107d1b2aaec4e93b4af8b4fc32b42dd4fac3719f98c14edb8c591829c972d2f6e2b527bbb34af53608f6a7973f4a7dbd1d3bc929bbe8d + languageName: node + linkType: hard + +"@types/node@npm:^16.0.0": + version: 16.18.57 + resolution: "@types/node@npm:16.18.57" + checksum: 191cfb12fde8c882f1d982a07302f7b87cda7b93ec227b0607f908f3b3b11c5ff96bbed613f370818ea60a8a98140962b193324bdadff679bd5ca75d04407e60 languageName: node linkType: hard "@types/normalize-package-data@npm:^2.4.0": - version: 2.4.1 - resolution: "@types/normalize-package-data@npm:2.4.1" - checksum: c90b163741f27a1a4c3b1869d7d5c272adbd355eb50d5f060f9ce122ce4342cf35f5b0005f55ef780596cacfeb69b7eee54cd3c2e02d37f75e664945b6e75fc6 + version: 2.4.2 + resolution: "@types/normalize-package-data@npm:2.4.2" + checksum: e38713ca1befc341701c078d592d1fddc1d13eec73b4d81fbab14638221733029f03cdf410b4486b23d48fd8d3809fa36611de98220e76f71517d42b582b3509 languageName: node linkType: hard @@ -9553,9 +9482,9 @@ __metadata: linkType: hard "@types/picomatch@npm:^2.3.0": - version: 2.3.0 - resolution: "@types/picomatch@npm:2.3.0" - checksum: 529aca7f2397b920559c8b6314c5a543d8bc0e0b423edbba1c356ba4d1783325d712b1871991895eb80355422176e1714a097620afceaa05b160dbcf5890f577 + version: 2.3.1 + resolution: "@types/picomatch@npm:2.3.1" + checksum: 6ab42daf80d315495586bc7f276698395c47e28479cbc79c88ff14c81fd1fb38a76dee9c609dfe591036986b923198f1dab438865ce3583f1d380cac09870b3f languageName: node linkType: hard @@ -9590,33 +9519,33 @@ __metadata: linkType: hard "@types/prismjs@npm:^1.16.6": - version: 1.26.0 - resolution: "@types/prismjs@npm:1.26.0" - checksum: dce1388a626c20b95fa2715917deef5a401eec33e9e181f202840ee3b3c7d8a84d5558c834af4c29b8e007741a6a18639b074db8ecccdd6e7de15280fc4dfdd2 + version: 1.26.1 + resolution: "@types/prismjs@npm:1.26.1" + checksum: 74b624bd0def16ba2fe4492ac74422ed9eaf5588814c14d8825c85dd4ef05b900a3685c5ec00bb13991e9f0cc4bbda196b9de3ba75cf7c00bc8ffd960c125124 languageName: node linkType: hard "@types/prompts@npm:^2.0.9": - version: 2.4.4 - resolution: "@types/prompts@npm:2.4.4" + version: 2.4.5 + resolution: "@types/prompts@npm:2.4.5" dependencies: "@types/node": "*" kleur: ^3.0.3 - checksum: 9d240cdabc8bd5d7a8edaddebbd62c3fb61ddcf83b7240277682c4a73b53bb01b73d627b14befa478847085c664d310867d93f5504ec6d99fdc03cd36c2e5f81 + checksum: a2a3e802508db79e4c6bfcab09ddb37e93279152fd127a7f4a8c1e683ee6f5429ce86f70c58eb94b76b19d98e4b6ca53bbb0b375d47b0b8c4ad4ecf178227258 languageName: node linkType: hard "@types/prop-types@npm:*": - version: 15.7.5 - resolution: "@types/prop-types@npm:15.7.5" - checksum: 648aae41423821c61c83823ae36116c8d0f68258f8b609bdbc257752dcd616438d6343d554262aa9a7edaee5a19aca2e028a74fa2d0f40fffaf2816bc7056857 + version: 15.7.8 + resolution: "@types/prop-types@npm:15.7.8" + checksum: 706b3de6faa5c1a4763fc90069f25ddc54108e8b43e9724e22f510b103c418571bf14b34b241fcacd6875650959c8374af7f4633f80ec6e33e7525cb42ef6a30 languageName: node linkType: hard "@types/pug@npm:^2.0.6": - version: 2.0.6 - resolution: "@types/pug@npm:2.0.6" - checksum: 8e7a3b6c1158d3a87b643c91f6cf2552ae781bc2a8f8b17a61e7b1ddd9ce480fd3483459a9b6e0f205ebe158ed67c11fd9a3206262057a14f655138c2322b0c9 + version: 2.0.7 + resolution: "@types/pug@npm:2.0.7" + checksum: 3d0cf7945f56a2763d0917d63f1ebe9c86eed9bc0b64781d0d5ec842bcdf1779e1065e132300942a1c34fefa87212d877d7fad24a576c4ce52db8fb17c4dcd0e languageName: node linkType: hard @@ -9654,37 +9583,28 @@ __metadata: languageName: node linkType: hard -"@types/ramda@npm:0.29.3": - version: 0.29.3 - resolution: "@types/ramda@npm:0.29.3" - dependencies: - types-ramda: ^0.29.4 - checksum: 9c62a4600f5df5e65a01ffe4a470500c98f7c0d093fde47e0d4257675f1ec50effe4696cb004a6b53227948db67ea26a2345dbc91819ecc868105c0f64cecd1e - languageName: node - linkType: hard - "@types/range-parser@npm:*": - version: 1.2.4 - resolution: "@types/range-parser@npm:1.2.4" - checksum: 8e3c3cda88675efd9145241bcb454449715b7d015a7fb80d018dcb3d441fa1938b302242cc0dfa6b02c5d014dd8bc082ae90091e62b1e816cae3ec36c2a7dbcb + version: 1.2.5 + resolution: "@types/range-parser@npm:1.2.5" + checksum: fe4bbbbfb19f0765ea15e66e2c58e29e04f4e52055c0d348b08dbfb161c2d2a363cc21b8a6071936a0cab3f02d0f5f362a3f752b37b05ff868000dcfe9120581 languageName: node linkType: hard "@types/react-dom@npm:^16.9.14": - version: 16.9.19 - resolution: "@types/react-dom@npm:16.9.19" + version: 16.9.20 + resolution: "@types/react-dom@npm:16.9.20" dependencies: "@types/react": ^16 - checksum: fe74e2166054fd4c6ff86b561be559d2ffd77524818a49f07206892b73c473d0db0fa7d82bd68c81d5ba3dccfbb1dd0478c28879a6f8ac2639fb1e77cef3db0f + checksum: bfcecc8c63f8387ddca0fe277857b462b6cf85b497c5a5df340e695d4100de7b680eb2b269ac4958c65a905ec0d5e3391b1c4ed711ad55c5d1e7232bc190c235 languageName: node linkType: hard "@types/react-modal@npm:^3.12.1": - version: 3.16.0 - resolution: "@types/react-modal@npm:3.16.0" + version: 3.16.1 + resolution: "@types/react-modal@npm:3.16.1" dependencies: "@types/react": "*" - checksum: ee65eb9f47e6c953bed23d716442ee1fcac3c2d586409924317043c8df2e38475c2232ef04e3c57d7d7387d7a319a97732278e92864d7363596e54fc5ebcd0cb + checksum: 4f586bd00e4b15633ec6607cb3266183b81419a2c0931d40e6127427e944a986d3d9a9c8a23c86cb586b15e541a1c6682f6ab0d2561a3b81fcf857772727ff44 languageName: node linkType: hard @@ -9697,30 +9617,41 @@ __metadata: languageName: node linkType: hard -"@types/react@npm:*, @types/react@npm:>=16, @types/react@npm:^16, @types/react@npm:^16.14.34": - version: 16.14.46 - resolution: "@types/react@npm:16.14.46" +"@types/react@npm:*, @types/react@npm:>=16": + version: 18.2.24 + resolution: "@types/react@npm:18.2.24" + dependencies: + "@types/prop-types": "*" + "@types/scheduler": "*" + csstype: ^3.0.2 + checksum: a83c7ae0010b265012ef038e3e00e4708c27c523f0aa0631e44f934e9c5338a51b6db1901f91d8ba10d3dc292a3a200b2cb5e47430cde58fbf988969866fe75a + languageName: node + linkType: hard + +"@types/react@npm:^16, @types/react@npm:^16.14.34": + version: 16.14.48 + resolution: "@types/react@npm:16.14.48" dependencies: "@types/prop-types": "*" "@types/scheduler": "*" csstype: ^3.0.2 - checksum: 815885cbae2c8653dddf8df4e6c2ce43ff8ff1d02c03f8356ce4b13aa7c8e6c72c588f04977c6f49fdd82419d46fdd895535d5e66726f0b0ea13c04065294995 + checksum: 28fbacb933d614366a28c74f398ab2bf34cc95ee6d486b8dc33c9b9d76306f32196b7885c6dc4f4d6f630e8cebfb6caee6ed118e82a1d4a5ff23f29e0d724aa4 languageName: node linkType: hard "@types/resolve@npm:^1.20.2": - version: 1.20.2 - resolution: "@types/resolve@npm:1.20.2" - checksum: c5b7e1770feb5ccfb6802f6ad82a7b0d50874c99331e0c9b259e415e55a38d7a86ad0901c57665d93f75938be2a6a0bc9aa06c9749192cadb2e4512800bbc6e6 + version: 1.20.3 + resolution: "@types/resolve@npm:1.20.3" + checksum: 0f499b6509186bd32faaf4ed640c166be0a6d487567cea1da9cdf3dc85e6b546451479ac80bd912daf4d8546c547d9feaf9e9867b438f7650cdd5a75169c5763 languageName: node linkType: hard "@types/responselike@npm:^1.0.0": - version: 1.0.0 - resolution: "@types/responselike@npm:1.0.0" + version: 1.0.1 + resolution: "@types/responselike@npm:1.0.1" dependencies: "@types/node": "*" - checksum: 474ac2402e6d43c007eee25f50d01eb1f67255ca83dd8e036877292bbe8dd5d2d1e50b54b408e233b50a8c38e681ff3ebeaf22f18b478056eddb65536abb003a + checksum: f49d4765498d64e81fdff91267575caef0b364538994512605323b4ef74297f6ac5c61658713e1e1cc6d3951f6a5bcd436fcdec79c5f9d5e72c6b3f700b6f997 languageName: node linkType: hard @@ -9742,62 +9673,62 @@ __metadata: linkType: hard "@types/scheduler@npm:*": - version: 0.16.3 - resolution: "@types/scheduler@npm:0.16.3" - checksum: c249d4b96fa05165ac22c214f94a045ee0af8beedefdbc54b769febd0044cab3a874e55419841a0dcc76439e379a63e257f3253c87168e3261e7bc783d623302 + version: 0.16.4 + resolution: "@types/scheduler@npm:0.16.4" + checksum: 2355e63251c6c6467806c9e7085f5fad350a1e87f811cf416f1e48a888b7da4ecc4bae2b67b7b10d8f5e518305ef2b5d4a8451227158552942794b87be43c5dd languageName: node linkType: hard "@types/semver@npm:^7.3.12, @types/semver@npm:^7.3.4": - version: 7.5.1 - resolution: "@types/semver@npm:7.5.1" - checksum: 10746bd8c6b5ba4da8c5b8e246e0ce2ccde7df0e782cbb2b376bc8c6c25ae0aca39a3c82b762912c6eab801cd64ffd8582369c4b96f0d4e7898118b68717c93b + version: 7.5.3 + resolution: "@types/semver@npm:7.5.3" + checksum: 1dedcf5f50a5a345e817fdf1273a14d0c57de80eb1d47bf3f17563062be53a2c99b78755a8c88c794a03757f9cd05da61b2849bf109e1b71e30fca895529c2b0 languageName: node linkType: hard "@types/send@npm:*": - version: 0.17.1 - resolution: "@types/send@npm:0.17.1" + version: 0.17.2 + resolution: "@types/send@npm:0.17.2" dependencies: "@types/mime": ^1 "@types/node": "*" - checksum: 1aad6bfafdaa3a3cadad1b441843dfd166821c0e93513daabe979de85b552a1298cfb6f07d40f80b5ecf14a3194dc148deb138605039841f1dadc7132c73e634 + checksum: 3fdd87a1b82fae523b2609f2acef25705b40899fed3c5f4dd40bf0dc91ad6a2c0a2b6c1494d1584525fe6e88bea271fcdb9775b3996ddc7f16d52261eea73432 languageName: node linkType: hard "@types/serve-index@npm:^1.9.1": - version: 1.9.1 - resolution: "@types/serve-index@npm:1.9.1" + version: 1.9.2 + resolution: "@types/serve-index@npm:1.9.2" dependencies: "@types/express": "*" - checksum: ed1ac8407101a787ebf09164a81bc24248ccf9d9789cd4eaa360a9a06163e5d2168c46ab0ddf2007e47b455182ecaa7632a886639919d9d409a27f7aef4e847a + checksum: 9b82300c6930f8a768e742f89414ef84cd7bd8bc242f13a070fd754144890ba281e7ae99d018e40a256963c12be600f4bb5cfd6e3ad72c686bc9482260c168eb languageName: node linkType: hard "@types/serve-static@npm:*, @types/serve-static@npm:^1.13.10, @types/serve-static@npm:^1.13.8": - version: 1.15.2 - resolution: "@types/serve-static@npm:1.15.2" + version: 1.15.3 + resolution: "@types/serve-static@npm:1.15.3" dependencies: "@types/http-errors": "*" "@types/mime": "*" "@types/node": "*" - checksum: 5e7b3e17b376f8910d5c9a0b1def38d7841c8939713940098f1b80a330d5caa9cfe9b632c122252cd70165052439e18fafa46635dc55b1d6058343901eec22eb + checksum: 0aaaf8fc1c0c8f96a4786928d5d79b0fff2f31e8c3b571c84cd2711129456045a9c02fa76054fb6c76f5770e2f6dbbc3b4be008e9af68bd6ce8739cb6d66c89b languageName: node linkType: hard "@types/sockjs@npm:^0.3.33": - version: 0.3.33 - resolution: "@types/sockjs@npm:0.3.33" + version: 0.3.34 + resolution: "@types/sockjs@npm:0.3.34" dependencies: "@types/node": "*" - checksum: 75b9b2839970ebab3e557955b9e2b1091d87cefabee1023e566bccc093411acc4a1402f3da4fde18aca44f5b9c42fe0626afd073a2140002b9b53eb71a084e4d + checksum: e546c306dc7630e88a7be14faa26c6c6115847f4d334dcf7957166616c1f6d35549c93cb0985f0e0bdcc4c362fb66841b2c418c03c8df24b39be385c5496df11 languageName: node linkType: hard "@types/source-list-map@npm:*": - version: 0.1.2 - resolution: "@types/source-list-map@npm:0.1.2" - checksum: 0538ce317294febf40ed3fc3a2e483fa4aee8ba85584a66e5ed9c0af9ea48a348960bc467076643cb56aeafdd7d2252e90c75e68ef664c0477ec87ea0554ffdc + version: 0.1.3 + resolution: "@types/source-list-map@npm:0.1.3" + checksum: b0734c05ebfca29c28c1418237a13561bd16e5a848c48f0b6295bd2405aa070a317e869d9e8ba6907132928d5ea5cd339076e5e205c75137de7d6aedde11e365 languageName: node linkType: hard @@ -9830,9 +9761,9 @@ __metadata: linkType: hard "@types/tapable@npm:^1": - version: 1.0.8 - resolution: "@types/tapable@npm:1.0.8" - checksum: 01f77d47bac8aaeee7ed298e8e74eb012a28f920106c3c359e1f2730512cd810f2c6165cd2cd769422ae1064e2bf1072778b27fb5ec1973e18c35e2cc1ed5c8d + version: 1.0.9 + resolution: "@types/tapable@npm:1.0.9" + checksum: 51e7a55432c3abf71ae5e13907eb01a576efdf66ddfcd4f2a765436e684e182df527885980d4f710250cd61304a61f7fe9d447b33fef8db1fa434a395c85933d languageName: node linkType: hard @@ -9855,23 +9786,23 @@ __metadata: linkType: hard "@types/tmp@npm:^0.2.3": - version: 0.2.3 - resolution: "@types/tmp@npm:0.2.3" - checksum: a9a32d723b483713ef537af31caddfcc2129ba21a0d56f5e4eef39508e07d415b1ec7327486d15b2cd4ac277deaaef0f8368ed1a0f4029e5ef5c393f9c15856b + version: 0.2.4 + resolution: "@types/tmp@npm:0.2.4" + checksum: 26e19913170193420eddbe5bf83e873ef82a1af002d0871659e0bcd2af41fcc29818bba2571784a452c73094e50a7db1f1a89a6399c103bb037a095cfe67e63d languageName: node linkType: hard "@types/tough-cookie@npm:*": - version: 4.0.2 - resolution: "@types/tough-cookie@npm:4.0.2" - checksum: 38d01fc79a9a87166253b8c548bb401599424c57a818bea1b47a68be6dcd37fc3bff381f978354e00221f284937d5066bb92d58bf79952f9d21deb934e8ec9a7 + version: 4.0.3 + resolution: "@types/tough-cookie@npm:4.0.3" + checksum: 148ca3f9874b39279e85d742676cc132b74d121f7ed7d28ec28f6bc9ff9e1a41cfc2025195f33470ab55e58d316aa32aca8ab31380767f5178f13d0a046d2ebf languageName: node linkType: hard "@types/trusted-types@npm:^2.0.2": - version: 2.0.3 - resolution: "@types/trusted-types@npm:2.0.3" - checksum: 25eae736a8a6d24353c3e0108138935250f79d1d239f6fd6f3eb52d88476456ba946f8cb8f3130c6841d40534cafc2dd2326358d86966327c3c4a3d3eecaf585 + version: 2.0.4 + resolution: "@types/trusted-types@npm:2.0.4" + checksum: ad7ca5059168880d8fa04ebf9d5f57d402bef4d7bb8a50df5103db8bf3821a334aaa2dab9937cf5d440beb707bed35b700fa387fcbce0611821d4cea7fa94dc1 languageName: node linkType: hard @@ -9906,53 +9837,53 @@ __metadata: linkType: hard "@types/uuid@npm:^9.0.1": - version: 9.0.3 - resolution: "@types/uuid@npm:9.0.3" - checksum: a2d8a769952f5795c74d594b5fdbdc09972f6fb5e389a52854f5adc27aab85109dea38c09419c2283b14be78271b55eaac7b2300f59d8c058b5ed298a6844768 + version: 9.0.4 + resolution: "@types/uuid@npm:9.0.4" + checksum: 3f713a67a56af20ecdfcbc31f29f7182a8aea51f1120d75daa76bb346973e014ae875c27cdd455bd0812a498330abad4ecbc1b65e1b4c507bb897fcda130f079 languageName: node linkType: hard "@types/webpack-env@npm:^1.16.0, @types/webpack-env@npm:^1.18.0": - version: 1.18.1 - resolution: "@types/webpack-env@npm:1.18.1" - checksum: 7b7cb8d22fe85fb3f87f592cb5ba2fb3b1057d1d5ce8d770b28728095879f5921085fae97f5bc479bdca55f2cb3111bd9148dc36cd641a5694dfbe001c5fc2f7 + version: 1.18.2 + resolution: "@types/webpack-env@npm:1.18.2" + checksum: 62a7d7e98fa462cde425c1bf9e70a84f61c522f0171a8eee493d3c26df8b0e7deff233e430c0be6bc654dded0c33f657f47d000f7e797522182817c8565d5a80 languageName: node linkType: hard "@types/webpack-hot-middleware@npm:^2.25.6": - version: 2.25.6 - resolution: "@types/webpack-hot-middleware@npm:2.25.6" + version: 2.25.7 + resolution: "@types/webpack-hot-middleware@npm:2.25.7" dependencies: "@types/connect": "*" tapable: ^2.2.0 webpack: ^5 - checksum: 4c5835dfd9d858bb8ac35170588a86c88fbef50f7bf89c8b3f50780cbc284c3091f0171ecac96dc22bf02b1a0379436a7495e2d59aeda90246fb0039035740fe + checksum: 5f33f415fe1eb5334aea422b42a85ae45cc1d6fc69078a7b1c58879a0bf757172c232c9c8253d90c554f1378492cbf7f4fa40b390b50892cc13b6f77e733b869 languageName: node linkType: hard "@types/webpack-sources@npm:*": - version: 3.2.0 - resolution: "@types/webpack-sources@npm:3.2.0" + version: 3.2.1 + resolution: "@types/webpack-sources@npm:3.2.1" dependencies: "@types/node": "*" "@types/source-list-map": "*" source-map: ^0.7.3 - checksum: 17716e9f03fa63362f92d510bb9119313bac3a7985321e0fe9326dc30ebe598cb2c85b8c7cdc4f4d34d783c4c45e74e3ec08e209f9c9dab27bf188c3def32706 + checksum: 651fcf880b2ed4f309fce9f47b85b7d1771a63436880792688b8c5e6e4177272dbe80c88cc4d877bc8370446499ab9b6a9ac6348b1fd2b29e56f7657f4562dd7 languageName: node linkType: hard "@types/webpack-virtual-modules@npm:^0.1.1": - version: 0.1.1 - resolution: "@types/webpack-virtual-modules@npm:0.1.1" + version: 0.1.2 + resolution: "@types/webpack-virtual-modules@npm:0.1.2" dependencies: "@types/webpack": ^4 - checksum: 42b9b70d19fc65588456aedf732963d0fa79245a4c72f13c30a5a6965ffaddfb7bd822328cf5ce110e4584a131a565bf0edea489626a298f52a590113f454ce8 + checksum: ad3a17f798aa2bb449140f13e251952f5fe5bf8313ced93d3eae7fb82184d82985eb18a27bfae2bd2385051d8affc675d117079f8402d9645bc4376d2a73d991 languageName: node linkType: hard "@types/webpack@npm:^4": - version: 4.41.33 - resolution: "@types/webpack@npm:4.41.33" + version: 4.41.34 + resolution: "@types/webpack@npm:4.41.34" dependencies: "@types/node": "*" "@types/tapable": ^1 @@ -9960,59 +9891,59 @@ __metadata: "@types/webpack-sources": "*" anymatch: ^3.0.0 source-map: ^0.6.0 - checksum: dc6db66fa84664d8fab7ea79bd2482ea1c4500b09ed6939258e205548501b8d29c06b0fe5e869c4b59f74acf884c61a391875dadb9f7a91c8cd10c3841143729 + checksum: 630ebd822e7ee85b7118d1c095370709ce493831365f7fd750bea88ac4726ef52df33cc25261922526e45b354c9fdb3edfabc7738d5b9ec18416fd502cda3838 languageName: node linkType: hard "@types/ws@npm:^8, @types/ws@npm:^8.5.5": - version: 8.5.5 - resolution: "@types/ws@npm:8.5.5" + version: 8.5.6 + resolution: "@types/ws@npm:8.5.6" dependencies: "@types/node": "*" - checksum: 9fb5aaeb2899f2c5aa55946656a39fdf679e48ec4eff557901215249ac84f435853b1d224214e88a93fcbca4bc9a0b0af01113d76f37db0b5873a882e5e99935 + checksum: 9050eb44c23caba404f106c9ab5210aae0c5cc85b5a7ed0116d0ee1c5b4e499325cffe406b6bc71ee2d4f456e9498037d95a984a06a841a64ef58a6dd79731f4 languageName: node linkType: hard "@types/yargs-parser@npm:*": - version: 21.0.0 - resolution: "@types/yargs-parser@npm:21.0.0" - checksum: cb89f3bb2e8002f1479a65a934e825be4cc18c50b350bbc656405d41cf90b8a299b105e7da497d7eb1aa460472a07d1e5a389f3af0862f1d1252279cfcdd017c + version: 21.0.1 + resolution: "@types/yargs-parser@npm:21.0.1" + checksum: f1d723a4c4383a9c53b975820b7490186ca127237ca58eb2ee8f5eacdcdb195a81aeabd1d75560abdf22fc29f70e8bb103d7ab34c5ec49bc19196195a7bf3189 languageName: node linkType: hard "@types/yargs@npm:^15.0.0": - version: 15.0.15 - resolution: "@types/yargs@npm:15.0.15" + version: 15.0.16 + resolution: "@types/yargs@npm:15.0.16" dependencies: "@types/yargs-parser": "*" - checksum: b52519ba68a8d90996b54143ff74fcd8ac1722a1ef4a50ed8c3dbc1f7a76d14210f0262f8b91eabcdab202ff4babdd92ce7332ab1cdd6af4eae7c9fc81c83797 + checksum: 07f0960062e66226ae602fccd62e351143291d778e1f4dd645c51111e62fbedafe2a976c223dcfa7ae052e989407b62e97a7472fc1d73536110cd05502c204a5 languageName: node linkType: hard "@types/yargs@npm:^16.0.0": - version: 16.0.5 - resolution: "@types/yargs@npm:16.0.5" + version: 16.0.6 + resolution: "@types/yargs@npm:16.0.6" dependencies: "@types/yargs-parser": "*" - checksum: 7b2824c749b6e28f5ee3248d13b244eaf7d3c5bb96089add774997572b5a10f1a0826d29a7bc797d64d29ca504b0b0d6ba2e74931b3fabae78ccbbcf07282f0c + checksum: a2cc5796cea1aac492c856ff35e829a6a230e6d72540a9446273ab16392f6ef04b8fef05ddcff71c8106c047820b5534b22e031245ee55995b1ba0c8caa382b2 languageName: node linkType: hard "@types/yargs@npm:^17.0.8": - version: 17.0.24 - resolution: "@types/yargs@npm:17.0.24" + version: 17.0.26 + resolution: "@types/yargs@npm:17.0.26" dependencies: "@types/yargs-parser": "*" - checksum: fbebf57e1d04199e5e7eb0c67a402566fa27177ee21140664e63da826408793d203d262b48f8f41d4a7665126393d2e952a463e960e761226def247d9bbcdbd0 + checksum: 34ab6eff6dff086b1044c65d53131e1d14e87c0c6dc44cb6851d74d8a4d1ac4503f7d12d1e1ecff25f8aea62ff7a9d6b04b05870a0324d15bbb226ddfc1d6065 languageName: node linkType: hard "@types/yauzl@npm:^2.9.1": - version: 2.10.0 - resolution: "@types/yauzl@npm:2.10.0" + version: 2.10.1 + resolution: "@types/yauzl@npm:2.10.1" dependencies: "@types/node": "*" - checksum: e917cf11c78e9ca7d037d0e6e0d6d5d99443d9d7201f8f1a556f02a2bc57ae457487e9bfec89dfa848d16979b35de6e5b34840d4d0bb9e5f33849d077ac15154 + checksum: d44eb8ab5c7bd024644bdf07e71d1e2618b1d6a9eb10609555a5359264b3f012f91d7add53a49a114df2d3fd6b1787f6204340b03590ea1a6c0e52a71e3bca54 languageName: node linkType: hard @@ -10149,12 +10080,12 @@ __metadata: linkType: hard "@urql/core@npm:^4.1.0": - version: 4.1.2 - resolution: "@urql/core@npm:4.1.2" + version: 4.1.3 + resolution: "@urql/core@npm:4.1.3" dependencies: "@0no-co/graphql.web": ^1.0.1 wonka: ^6.3.2 - checksum: 440d8c7f138638a506521edba337d2710a7ace913d0a5445cec8361db34f8d713e95d142f0fbaa15dd1106df5a338a671b550ddcec954188fa2ee700871d74fa + checksum: 9aa5c8b9df04c79e71f4be6ce0d97cc2301d1ab7aea3ffafa9f53d89564f063dc77a011239c2a51581b50bbedc1e9dab0a3551acc7ee5dda9dd1bece2d5a1644 languageName: node linkType: hard @@ -10200,12 +10131,12 @@ __metadata: linkType: hard "@vitejs/plugin-vue@npm:^4.0.0": - version: 4.3.4 - resolution: "@vitejs/plugin-vue@npm:4.3.4" + version: 4.4.0 + resolution: "@vitejs/plugin-vue@npm:4.4.0" peerDependencies: vite: ^4.0.0 vue: ^3.2.25 - checksum: 55c8760f3826ef80cc277f417fc99e58cc43513a2ff6e796250f9051acca811f30ef15b0a122b805d7063e91e78448795c57ddf659d7e853473fccc1afbeec54 + checksum: a430fbc504e2d14848b94866d52c8d5044ec216b1bf9304f53e3d3f3045da634db9c986e8ed2b0605fcc94e19fe67dc9c7e10971bd5aab444ca4167a71cd197d languageName: node linkType: hard @@ -10376,9 +10307,9 @@ __metadata: languageName: node linkType: hard -"@vue/language-core@npm:1.8.10": - version: 1.8.10 - resolution: "@vue/language-core@npm:1.8.10" +"@vue/language-core@npm:1.8.15": + version: 1.8.15 + resolution: "@vue/language-core@npm:1.8.15" dependencies: "@volar/language-core": ~1.10.0 "@volar/source-map": ~1.10.0 @@ -10393,7 +10324,7 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 0877e160211266e305f2469ac36d20840746cd132122f7765c15532e49f17e99e8500cc569adac24a066630eede380dc3671a6f9f50826927ca27bede3c91107 + checksum: 05ec3d660bd26cf05d17e722d1117324e1309360f0be4998c82ccac22689e31a332660086ece6b3f4f43660dfb94d1905eea0aa329b88b2f5afea944b01153e0 languageName: node linkType: hard @@ -10496,13 +10427,13 @@ __metadata: languageName: node linkType: hard -"@vue/typescript@npm:1.8.10": - version: 1.8.10 - resolution: "@vue/typescript@npm:1.8.10" +"@vue/typescript@npm:1.8.15": + version: 1.8.15 + resolution: "@vue/typescript@npm:1.8.15" dependencies: "@volar/typescript": ~1.10.0 - "@vue/language-core": 1.8.10 - checksum: 51926d65f4ea045e1a627e1ec0c5e9d5f17a2b587a17445d85fb8c70f14ffa847d55539c040a43c9f2787d9bb8f752f87f68812faa6c284ddacbdb21ffe1dafc + "@vue/language-core": 1.8.15 + checksum: c68808d29da93e616cd30bd4dc84aad0bb3d245d45537adc74244cc0fe93cb797e4bbdbdf2a4841b6bce088e6ef1bc70fa279fd2e1aabb794c42d908d8e46087 languageName: node linkType: hard @@ -10757,12 +10688,12 @@ __metadata: linkType: hard "@yarnpkg/parsers@npm:^3.0.0-rc.18": - version: 3.0.0-rc.50 - resolution: "@yarnpkg/parsers@npm:3.0.0-rc.50" + version: 3.0.0-rc.53 + resolution: "@yarnpkg/parsers@npm:3.0.0-rc.53" dependencies: js-yaml: ^3.10.0 tslib: ^2.4.0 - checksum: 76c0bc1afccb75b04439c85e2d86303045dcb9b348932dea77c810cc2c38f5b5fffef7c9baeff81028dd08b93d2f9fbd283ec3bb27cc0e83dc06d9c773d08432 + checksum: e384ecc6539e3c5796d87b2910b03331407c0ad817d85bf58ba0b383afb45dd7e1ee0fc862d9756350049b816b72d052de141274804e6e5fee795483c8bd3f12 languageName: node linkType: hard @@ -11466,7 +11397,7 @@ __metadata: languageName: node linkType: hard -"arraybuffer.prototype.slice@npm:^1.0.1": +"arraybuffer.prototype.slice@npm:^1.0.2": version: 1.0.2 resolution: "arraybuffer.prototype.slice@npm:1.0.2" dependencies: @@ -11697,9 +11628,9 @@ __metadata: linkType: hard "axe-core@npm:^4.2.0, axe-core@npm:^4.6.2, axe-core@npm:^4.7.0": - version: 4.8.1 - resolution: "axe-core@npm:4.8.1" - checksum: 160887aac11d0a249adade104379bb3b05d1bca26386137b50ea82861cc4bbbdcc76091309b3c5f03da1fae0f27ab02d8d4aef3d041a16e67f3a012cb5080c90 + version: 4.8.2 + resolution: "axe-core@npm:4.8.2" + checksum: ad9e1125ba226bbc73d442996d8b9b35fed9af8bcfa995831e29c3d6b8ddb0d16bc7d18c66c5a685211296ee99fe966ae4d59051ca6fbef2a7ee7408322b9dbe languageName: node linkType: hard @@ -11725,13 +11656,13 @@ __metadata: linkType: hard "axios@npm:^1.0.0": - version: 1.5.0 - resolution: "axios@npm:1.5.0" + version: 1.5.1 + resolution: "axios@npm:1.5.1" dependencies: follow-redirects: ^1.15.0 form-data: ^4.0.0 proxy-from-env: ^1.1.0 - checksum: a3e11e53ff10fa02defb17c82672599a5ef31f8a6f2b0ea1564a61271226a924baef3a899a03c6850bddb0e9a614acdf615e07b30f382403b5e1fc7ec2eef464 + checksum: f9d975a17a9dff8e325e204d5e09ef07bdd1b6fa63983f184c3cf33249ee38339f1e5d8f874f89116be8942b46d1f4d5ce9ddb03757be69614f5775c2dd6da25 languageName: node linkType: hard @@ -11927,14 +11858,14 @@ __metadata: linkType: hard "babel-plugin-polyfill-corejs3@npm:^0.8.2, babel-plugin-polyfill-corejs3@npm:^0.8.3": - version: 0.8.3 - resolution: "babel-plugin-polyfill-corejs3@npm:0.8.3" + version: 0.8.4 + resolution: "babel-plugin-polyfill-corejs3@npm:0.8.4" dependencies: "@babel/helper-define-polyfill-provider": ^0.4.2 - core-js-compat: ^3.31.0 + core-js-compat: ^3.32.2 peerDependencies: "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 - checksum: b5cbfad6d3695a1ea65ef62e34de7f9c6f717cd5cc6d64bde726528168ba1d0a81e09a385d9283a489aab9739fbe206f2192fd9f0f60a37a0577de6526553a8d + checksum: d015514433c092d52914319b69cb6b5b9b6e7798d2d3c8c64c2d1dc249361457411dc611b51dabfc6104856029341b37f4e76299c02be7ae47262bf79b7774d5 languageName: node linkType: hard @@ -12629,17 +12560,17 @@ __metadata: languageName: node linkType: hard -"browserslist@npm:^4.14.5, browserslist@npm:^4.21.10, browserslist@npm:^4.21.5, browserslist@npm:^4.21.9": - version: 4.21.10 - resolution: "browserslist@npm:4.21.10" +"browserslist@npm:^4.14.5, browserslist@npm:^4.21.5, browserslist@npm:^4.21.9, browserslist@npm:^4.22.1": + version: 4.22.1 + resolution: "browserslist@npm:4.22.1" dependencies: - caniuse-lite: ^1.0.30001517 - electron-to-chromium: ^1.4.477 + caniuse-lite: ^1.0.30001541 + electron-to-chromium: ^1.4.535 node-releases: ^2.0.13 - update-browserslist-db: ^1.0.11 + update-browserslist-db: ^1.0.13 bin: browserslist: cli.js - checksum: e8c98496e5f2a5128d0e2f1f186dc0416bfc49c811e568b19c9e07a56cccc1f7f415fa4f532488e6a13dfacbe3332a9b55b152082ff125402696a11a158a0894 + checksum: 6810f2d63f171d0b7b8d38cf091708e00cb31525501810a507839607839320d66e657293b0aa3d7f051ecbc025cb07390a90c037682c1d05d12604991e41050b languageName: node linkType: hard @@ -12941,17 +12872,10 @@ __metadata: languageName: node linkType: hard -"caniuse-lite@npm:^1.0.30001406, caniuse-lite@npm:^1.0.30001464": - version: 1.0.30001533 - resolution: "caniuse-lite@npm:1.0.30001533" - checksum: bb07dc0845f4f05ee833eaf25c0eb93af2c6e1c59b0897ea85218cf9ef2e880c8b5e1f20c1b32916d4687cd557d945f8c43c64c8e3200d1a433681b30b42fe54 - languageName: node - linkType: hard - -"caniuse-lite@npm:^1.0.30001517": - version: 1.0.30001520 - resolution: "caniuse-lite@npm:1.0.30001520" - checksum: 48daf0d55e72e343f09fe17cbd47303a5bf4d65f6ec08ef68cc998c4fed073c9789d710e296496140e8179138dccb4667b786e260ca5451e1663786ef889db3b +"caniuse-lite@npm:^1.0.30001406, caniuse-lite@npm:^1.0.30001464, caniuse-lite@npm:^1.0.30001541": + version: 1.0.30001543 + resolution: "caniuse-lite@npm:1.0.30001543" + checksum: 3d80abff0c2c70167f2bbc8f5105370a6eb9f4c2b59c520eaa18b76082d45b27a292c39d2a5dcaeca253679cab5aca8ff89b569502839fadd7be8ae04fb41349 languageName: node linkType: hard @@ -13202,9 +13126,9 @@ __metadata: linkType: hard "ci-info@npm:^3.2.0, ci-info@npm:^3.6.1": - version: 3.8.0 - resolution: "ci-info@npm:3.8.0" - checksum: 0d3052193b58356372b34ab40d2668c3e62f1006d5ca33726d1d3c423853b19a85508eadde7f5908496fb41448f465263bf61c1ee58b7832cb6a924537e3863a + version: 3.9.0 + resolution: "ci-info@npm:3.9.0" + checksum: 6f0109e36e111684291d46123d491bc4e7b7a1934c3a20dea28cba89f1d4a03acd892f5f6a81ed3855c38647e285a150e3c9ba062e38943bef57fee6c1554c3a languageName: node linkType: hard @@ -13293,9 +13217,9 @@ __metadata: linkType: hard "cli-spinners@npm:^2.5.0": - version: 2.9.0 - resolution: "cli-spinners@npm:2.9.0" - checksum: c0d5437acc1ace7361b1c58a4fda3c92c2d8691ff3169ac658ce30faee71280b7aa706c072bcb6d0e380c232f3495f7d5ad4668c1391fe02c4d3a39d37798f44 + version: 2.9.1 + resolution: "cli-spinners@npm:2.9.1" + checksum: c9b1152bd387e5b76823bdee6f19079c4017994d352627216e5d3dab9220a8402514519ad96a0a12120b80752fead98d1e7a7a5f56ce32125f92778ef47bdd8c languageName: node linkType: hard @@ -13997,19 +13921,19 @@ __metadata: languageName: node linkType: hard -"core-js-compat@npm:^3.31.0": - version: 3.32.2 - resolution: "core-js-compat@npm:3.32.2" +"core-js-compat@npm:^3.31.0, core-js-compat@npm:^3.32.2": + version: 3.33.0 + resolution: "core-js-compat@npm:3.33.0" dependencies: - browserslist: ^4.21.10 - checksum: d2bbb95b1f46ff5fa7cb9ea6dc4e4cf99e26e4861bd296edbb3168292f0e3c694cdc6ce2b36313b513cc0eb60e967f5b14796c050e874db1e63f8d84e17d8aa9 + browserslist: ^4.22.1 + checksum: 1db27222420548c65fdb92574192aa1ab434e8e3b80a347fc9c20004e459cc146e719dee8a8c3a3c0773190834e865542d3745ada27a160937fc312a14f66d5c languageName: node linkType: hard "core-js-pure@npm:^3.23.3, core-js-pure@npm:^3.30.2": - version: 3.32.2 - resolution: "core-js-pure@npm:3.32.2" - checksum: 93ca80cd5b0b30f452ebc5ebf1249c37c8cb4cf56ed9802bfb422c002bc96685abe07e39249b0feed851a8884cddf712113ddb4f8e8e0397bfd3332b0e51225b + version: 3.33.0 + resolution: "core-js-pure@npm:3.33.0" + checksum: dbb683bf6c5d3671129e5029e0f8047a388818bb9720352c839f46ac5627b5fed763135b9a1df89452f2afee78e49639def6063e82fc6995c4e98c31f2892db5 languageName: node linkType: hard @@ -14021,9 +13945,9 @@ __metadata: linkType: hard "core-js@npm:^3.8.2": - version: 3.32.2 - resolution: "core-js@npm:3.32.2" - checksum: 22f47e0972c6bff2eecbb02ab15ae012e35c7b3344d8569c7d8be906910867a84290d95e85b06a6e5c27a44d34a426ba96ee57874e542e42337428117df9ccde + version: 3.33.0 + resolution: "core-js@npm:3.33.0" + checksum: f51192f311c2d75b94ebe4eb7210f91df2cb6de101b96da1a65f43cf52b9c5cfe1ce5ebebb86281e452d2ee949730afb72fb7ac826c655c9de3a92f793cf3b80 languageName: node linkType: hard @@ -14068,8 +13992,8 @@ __metadata: linkType: hard "cosmiconfig@npm:^8.2.0": - version: 8.3.5 - resolution: "cosmiconfig@npm:8.3.5" + version: 8.3.6 + resolution: "cosmiconfig@npm:8.3.6" dependencies: import-fresh: ^3.3.0 js-yaml: ^4.1.0 @@ -14080,7 +14004,7 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: ec803b30b49ba686c3a844677ed9d40f7db68e01f75a2e6ad474f2af6ec15ef17561258c9592a0df209f137edc88056c113838b1d54e784de21853920c3a1fa9 + checksum: 0382a9ed13208f8bfc22ca2f62b364855207dffdb73dc26e150ade78c3093f1cf56172df2dd460c8caf2afa91c0ed4ec8a88c62f8f9cd1cf423d26506aa8797a languageName: node linkType: hard @@ -14381,10 +14305,11 @@ __metadata: linkType: hard "danger@npm:^11.2.6": - version: 11.2.8 - resolution: "danger@npm:11.2.8" + version: 11.3.0 + resolution: "danger@npm:11.3.0" dependencies: - "@gitbeaker/node": ^21.3.0 + "@gitbeaker/core": ^35.8.1 + "@gitbeaker/node": ^35.8.1 "@octokit/rest": ^18.12.0 async-retry: 1.2.3 chalk: ^2.3.0 @@ -14431,7 +14356,7 @@ __metadata: danger-process: distribution/commands/danger-process.js danger-reset-status: distribution/commands/danger-reset-status.js danger-runner: distribution/commands/danger-runner.js - checksum: da858724420391a4306597d7e06211a7f7e8f63a357c785563fc4c2493d65d94774a55e87fda24e279b7fed2ab973016c066fb4b0fc6beb610f01e68b9508621 + checksum: 568a6c2bdbef663c9d1fca36651939b39bf7a158867bdf955054bdc0f16533658aaf258ab9bc1c1bf517609b6eabe776e3d24a0364903a5a38bf67d8d690b252 languageName: node linkType: hard @@ -14557,7 +14482,7 @@ __metadata: languageName: node linkType: hard -"decode-uri-component@npm:^0.2.0": +"decode-uri-component@npm:^0.2.0, decode-uri-component@npm:^0.2.2": version: 0.2.2 resolution: "decode-uri-component@npm:0.2.2" checksum: 1f4fa54eb740414a816b3f6c24818fbfcabd74ac478391e9f4e2282c994127db02010ce804f3d08e38255493cfe68608b3f5c8e09fd6efc4ae46c807691f7a31 @@ -14695,6 +14620,17 @@ __metadata: languageName: node linkType: hard +"define-data-property@npm:^1.0.1": + version: 1.1.0 + resolution: "define-data-property@npm:1.1.0" + dependencies: + get-intrinsic: ^1.2.1 + gopd: ^1.0.1 + has-property-descriptors: ^1.0.0 + checksum: 312cab385c681d1fdf4085f02720a487da62c6108faaaedc51668c5f62f3425cb6370ded1d126ac6c13093451864a546074ce5c4acac4caf1d81577c10469b41 + languageName: node + linkType: hard + "define-lazy-prop@npm:^2.0.0": version: 2.0.0 resolution: "define-lazy-prop@npm:2.0.0" @@ -14702,13 +14638,14 @@ __metadata: languageName: node linkType: hard -"define-properties@npm:^1.1.3, define-properties@npm:^1.1.4, define-properties@npm:^1.2.0": - version: 1.2.0 - resolution: "define-properties@npm:1.2.0" +"define-properties@npm:^1.1.3, define-properties@npm:^1.1.4, define-properties@npm:^1.2.0, define-properties@npm:^1.2.1": + version: 1.2.1 + resolution: "define-properties@npm:1.2.1" dependencies: + define-data-property: ^1.0.1 has-property-descriptors: ^1.0.0 object-keys: ^1.1.1 - checksum: 34b58cae4651936a3c8c720310ce393a3227f5123640ab5402e7d6e59bb44f8295b789cb5d74e7513682b2e60ff20586d6f52b726d964d617abffa3da76344e0 + checksum: 88a152319ffe1396ccc6ded510a3896e77efac7a1bfbaa174a7b00414a1747377e0bb525d303794a47cf30e805c2ec84e575758512c6e44a993076d29fd4e6c3 languageName: node linkType: hard @@ -14763,6 +14700,13 @@ __metadata: languageName: node linkType: hard +"delay@npm:^5.0.0": + version: 5.0.0 + resolution: "delay@npm:5.0.0" + checksum: 01cdc4cd0cd35fb622518a3df848e67e09763a38e7cdada2232b6fda9ddda72eddcf74f0e24211200fbe718434f2335f2a2633875a6c96037fefa6de42896ad7 + languageName: node + linkType: hard + "delayed-stream@npm:~1.0.0": version: 1.0.0 resolution: "delayed-stream@npm:1.0.0" @@ -15295,10 +15239,10 @@ __metadata: languageName: node linkType: hard -"electron-to-chromium@npm:^1.4.477": - version: 1.4.490 - resolution: "electron-to-chromium@npm:1.4.490" - checksum: d205e3c9f4bf14cbaaa2be5bf3f3d498e161ec0cc6f10da7bfdd2c355e4ae1937244335fabe8b376e970d14ba2b2c415aa2a2d89ea61c000f54e6ed137853bb9 +"electron-to-chromium@npm:^1.4.535": + version: 1.4.540 + resolution: "electron-to-chromium@npm:1.4.540" + checksum: 8bacd2a06a6a78875b4f4035c97fb8155447f93d854292005f9958a5d1366597fabecc1561c642eae55815583fa3436b164c8bf8f7ca3cfe15741466b3c5e0cf languageName: node linkType: hard @@ -15749,16 +15693,16 @@ __metadata: linkType: hard "es-abstract@npm:^1.22.1": - version: 1.22.1 - resolution: "es-abstract@npm:1.22.1" + version: 1.22.2 + resolution: "es-abstract@npm:1.22.2" dependencies: array-buffer-byte-length: ^1.0.0 - arraybuffer.prototype.slice: ^1.0.1 + arraybuffer.prototype.slice: ^1.0.2 available-typed-arrays: ^1.0.5 call-bind: ^1.0.2 es-set-tostringtag: ^2.0.1 es-to-primitive: ^1.2.1 - function.prototype.name: ^1.1.5 + function.prototype.name: ^1.1.6 get-intrinsic: ^1.2.1 get-symbol-description: ^1.0.0 globalthis: ^1.0.3 @@ -15774,24 +15718,24 @@ __metadata: is-regex: ^1.1.4 is-shared-array-buffer: ^1.0.2 is-string: ^1.0.7 - is-typed-array: ^1.1.10 + is-typed-array: ^1.1.12 is-weakref: ^1.0.2 object-inspect: ^1.12.3 object-keys: ^1.1.1 object.assign: ^4.1.4 - regexp.prototype.flags: ^1.5.0 - safe-array-concat: ^1.0.0 + regexp.prototype.flags: ^1.5.1 + safe-array-concat: ^1.0.1 safe-regex-test: ^1.0.0 - string.prototype.trim: ^1.2.7 - string.prototype.trimend: ^1.0.6 - string.prototype.trimstart: ^1.0.6 + string.prototype.trim: ^1.2.8 + string.prototype.trimend: ^1.0.7 + string.prototype.trimstart: ^1.0.7 typed-array-buffer: ^1.0.0 typed-array-byte-length: ^1.0.0 typed-array-byte-offset: ^1.0.0 typed-array-length: ^1.0.4 unbox-primitive: ^1.0.2 - which-typed-array: ^1.1.10 - checksum: 36abed2b7efa8dd337d938e50d0b97d070c0ef45b2257eec0ae8c3edc5c7e8f3e2906530afda5c0b8a4f44299391d078237fd5ea454ac4e9adb6f8343bf84980 + which-typed-array: ^1.1.11 + checksum: a491c640a01b7c18f3cc626a3d08b5c67f8d3dac70ff8b4268cda6fa0ebed80bb028ff3ee731137512e054d39e98d02575144da904fe28045019fc59e503f1f8 languageName: node linkType: hard @@ -15820,12 +15764,12 @@ __metadata: linkType: hard "es-iterator-helpers@npm:^1.0.12": - version: 1.0.14 - resolution: "es-iterator-helpers@npm:1.0.14" + version: 1.0.15 + resolution: "es-iterator-helpers@npm:1.0.15" dependencies: asynciterator.prototype: ^1.0.0 call-bind: ^1.0.2 - define-properties: ^1.2.0 + define-properties: ^1.2.1 es-abstract: ^1.22.1 es-set-tostringtag: ^2.0.1 function-bind: ^1.1.1 @@ -15835,9 +15779,9 @@ __metadata: has-proto: ^1.0.1 has-symbols: ^1.0.3 internal-slot: ^1.0.5 - iterator.prototype: ^1.1.0 - safe-array-concat: ^1.0.0 - checksum: 47d59ccbcf2fe32d9e5ac4fff65d613210851bbf14ba32726e5eb771194173b66aa233d7e4049b2cb24251545787ac1ea3242f91aa343aaaa7ce699e20d12e1c + iterator.prototype: ^1.1.2 + safe-array-concat: ^1.0.1 + checksum: b4c83f94bfe624260d5238092de3173989f76f1416b1d02c388aea3b2024174e5f5f0e864057311ac99790b57e836ca3545b6e77256b26066dac944519f5e6d6 languageName: node linkType: hard @@ -15935,11 +15879,11 @@ __metadata: linkType: hard "esbuild-wasm@npm:>=0.13.8": - version: 0.19.2 - resolution: "esbuild-wasm@npm:0.19.2" + version: 0.19.4 + resolution: "esbuild-wasm@npm:0.19.4" bin: esbuild: bin/esbuild - checksum: 2f063016adcd15777c65a00b4c6899e22826779ebf4f6bcf940ca043fa730c8ff1e8b289e6d995be068d6ee6b73f0bb475c23ae4b109db99f67dc2eefd33688b + checksum: c2d995a280dbff4d50193dd666d3603afc33f2123c3ce8fc89dbe5915dcf0252e5f4a75429e8e5e5ba8a6df2ff397f08ba314c59868511785164f2380a3ecd18 languageName: node linkType: hard @@ -16145,8 +16089,8 @@ __metadata: linkType: hard "eslint-import-resolver-typescript@npm:^3.5.2": - version: 3.6.0 - resolution: "eslint-import-resolver-typescript@npm:3.6.0" + version: 3.6.1 + resolution: "eslint-import-resolver-typescript@npm:3.6.1" dependencies: debug: ^4.3.4 enhanced-resolve: ^5.12.0 @@ -16158,7 +16102,7 @@ __metadata: peerDependencies: eslint: "*" eslint-plugin-import: "*" - checksum: 4f3b7e629e37c52804da0e4fe3eda5fdd727fd1d945fad5662bcd64a87fafa08b986efe07fb2116c81f2259ba29d6d06b99edafd7d3499cfb78ff71b6e8ca4c1 + checksum: cb1cb4389916fe78bf8c8567aae2f69243dbfe624bfe21078c56ad46fa1ebf0634fa7239dd3b2055ab5c27359e4b4c28b69b11fcb3a5df8a9e6f7add8e034d86 languageName: node linkType: hard @@ -16352,8 +16296,8 @@ __metadata: linkType: hard "eslint-plugin-storybook@npm:^0.6.6": - version: 0.6.13 - resolution: "eslint-plugin-storybook@npm:0.6.13" + version: 0.6.14 + resolution: "eslint-plugin-storybook@npm:0.6.14" dependencies: "@storybook/csf": ^0.0.1 "@typescript-eslint/utils": ^5.45.0 @@ -16361,7 +16305,7 @@ __metadata: ts-dedent: ^2.2.0 peerDependencies: eslint: ">=6" - checksum: 3fa79d8cf765d108f4be697246183d94de448301b56767e292c36ec1a9c12ae4f6b64f32c5e5f84b50e214f5bf2f0385d40f5543908f561319e4c8bb8bcdfb99 + checksum: fa198d9f0328ce0b40af479485d08fe74fc409a5ed4769b9531785e9f8e57553034a63f5bfb9cfa1c901e74c0996566c4bbe312d604e8d3e452f1d2c9d0306b2 languageName: node linkType: hard @@ -16400,13 +16344,13 @@ __metadata: linkType: hard "eslint@npm:^8.28.0": - version: 8.49.0 - resolution: "eslint@npm:8.49.0" + version: 8.50.0 + resolution: "eslint@npm:8.50.0" dependencies: "@eslint-community/eslint-utils": ^4.2.0 "@eslint-community/regexpp": ^4.6.1 "@eslint/eslintrc": ^2.1.2 - "@eslint/js": 8.49.0 + "@eslint/js": 8.50.0 "@humanwhocodes/config-array": ^0.11.11 "@humanwhocodes/module-importer": ^1.0.1 "@nodelib/fs.walk": ^1.2.8 @@ -16442,7 +16386,7 @@ __metadata: text-table: ^0.2.0 bin: eslint: bin/eslint.js - checksum: 8d6985a8d60379ea714ad35d7a3d8762ac8c37b986c615e9a7c245794faddf68f61f997ba6f5f903d440e92065a56a4f7832a45adc2d4fc6e977026782f25835 + checksum: 91629528cb240bc61b25480574d35cd54ed444cb61a70fa76f7d5ab26af2b637b94bf8fba94403c9052c1baa944a169b6ab9cc8070496e925f7eeef730ff9038 languageName: node linkType: hard @@ -17090,15 +17034,13 @@ __metadata: languageName: node linkType: hard -"file-system-cache@npm:^2.4.4": - version: 2.4.4 - resolution: "file-system-cache@npm:2.4.4" +"file-system-cache@npm:2.3.0": + version: 2.3.0 + resolution: "file-system-cache@npm:2.3.0" dependencies: - "@types/fs-extra": 11.0.1 - "@types/ramda": 0.29.3 fs-extra: 11.1.1 ramda: 0.29.0 - checksum: 274bd9c2f8f81d0c3b2cc0d077807c969b48cac4857ae77f87b4b480548252aa42d3a43b3e9d4bb54df567eb70f0c384782514fcea74b78765543e9496e27e2d + checksum: 43de19f0db32e6546bb7abeecb1d6ea83c1eca23b38905c9415a29f6219cc9d6d87b0c1a6aca92c46a0f1bc276241a339f2f68b8aa0ca5c2eb64b6e1e3e4da01 languageName: node linkType: hard @@ -17119,9 +17061,9 @@ __metadata: linkType: hard "filesize@npm:^10.0.12": - version: 10.0.12 - resolution: "filesize@npm:10.0.12" - checksum: bbf73a99de198be75c26cec5f1082cde4e9e25c4a63dd4cb315063da9eb23ba4d3868b6010f6d485594c6b9823435c32d9c8a90470083197e25b093599470897 + version: 10.1.0 + resolution: "filesize@npm:10.1.0" + checksum: 4439d2d81ecd98503367cc6d2083ea94de0859a35953325d94f95c4a18302a333a77b80b5421bc9dc663cf9fb2fc1193f15963da4fd0dab3d49168902588a790 languageName: node linkType: hard @@ -17332,16 +17274,16 @@ __metadata: linkType: hard "flatted@npm:^3.2.7": - version: 3.2.7 - resolution: "flatted@npm:3.2.7" - checksum: 207a87c7abfc1ea6928ea16bac84f9eaa6d44d365620ece419e5c41cf44a5e9902b4c1f59c9605771b10e4565a0cb46e99d78e0464e8aabb42c97de880642257 + version: 3.2.9 + resolution: "flatted@npm:3.2.9" + checksum: 5c91c5a0a21bbc0b07b272231e5b4efe6b822bcb4ad317caf6bb06984be4042a9e9045026307da0fdb4583f1f545e317a67ef1231a59e71f7fced3cc429cfc53 languageName: node linkType: hard "flow-parser@npm:0.*": - version: 0.216.1 - resolution: "flow-parser@npm:0.216.1" - checksum: 7e840be6228aa83bbfcca13471d2806bf90d9e0bb50c484d3b85e380dc42ccd94c39e0504aee51fab9515ef051d1171feb57ef37bea0a5f8b4c2573ecf37c80c + version: 0.217.2 + resolution: "flow-parser@npm:0.217.2" + checksum: d61127283db052fddf8275b070eea76dda5d2926aea3d8659250e168d69478f4ebdbc2bede83aa05c29f464c420ce1d701691278d3041af0492bfc16193277b5 languageName: node linkType: hard @@ -17362,12 +17304,12 @@ __metadata: linkType: hard "follow-redirects@npm:^1.0.0, follow-redirects@npm:^1.14.9, follow-redirects@npm:^1.15.0": - version: 1.15.2 - resolution: "follow-redirects@npm:1.15.2" + version: 1.15.3 + resolution: "follow-redirects@npm:1.15.3" peerDependenciesMeta: debug: optional: true - checksum: da5932b70e63944d38eecaa16954bac4347036f08303c913d166eda74809d8797d38386e3a0eb1d2fe37d2aaff2764cce8e9dbd99459d860cf2cdfa237923b5f + checksum: 915a2cf22e667bdf47b1a43cc6b7dce14d95039e9bbf9a24d0e739abfbdfa00077dd43c86d4a7a19efefcc7a99af144920a175eedc3888d268af5df67c272ee5 languageName: node linkType: hard @@ -17469,9 +17411,10 @@ __metadata: linkType: hard "formik@npm:^2.2.9": - version: 2.4.4 - resolution: "formik@npm:2.4.4" + version: 2.4.5 + resolution: "formik@npm:2.4.5" dependencies: + "@types/hoist-non-react-statics": ^3.3.1 deepmerge: ^2.1.1 hoist-non-react-statics: ^3.3.0 lodash: ^4.17.21 @@ -17481,7 +17424,7 @@ __metadata: tslib: ^2.0.0 peerDependencies: react: ">=16.8.0" - checksum: cda0fe0d11cb323467eecf445bc9218cb267dfd74710ca8d264e7caf7619e4fd8aafd22b6a494f8b41e73d0db21938619f50bd9ea1295e92448745b5be54e836 + checksum: 61f0d9eb092edd122f0d2988ca3d0a01073bde38af977e96ba9818382dc1fefd4cdb016cd61f08443055a748bbbbe2a95347d4528b81cc5c1c6f75865fc84927 languageName: node linkType: hard @@ -17628,9 +17571,9 @@ __metadata: linkType: hard "fs-monkey@npm:^1.0.4": - version: 1.0.4 - resolution: "fs-monkey@npm:1.0.4" - checksum: eeb2457ec50f7202c44273de2a42b50868c8e6b2ab4825d517947143d4e727c028e24f6d0f46e6f3e7a149a1c9e7d8b3ca28243c3b10366d280a08016483e829 + version: 1.0.5 + resolution: "fs-monkey@npm:1.0.5" + checksum: 815025e75549fb1ac6c403413b82fd631eded862ae27694a515c0f666069e95874ab34e79c33d1b3b8c87d1e54350d5e4262090d0aa5bd7130143cbc627537e4 languageName: node linkType: hard @@ -17724,7 +17667,7 @@ __metadata: languageName: node linkType: hard -"function.prototype.name@npm:^1.1.2, function.prototype.name@npm:^1.1.5": +"function.prototype.name@npm:^1.1.2, function.prototype.name@npm:^1.1.5, function.prototype.name@npm:^1.1.6": version: 1.1.6 resolution: "function.prototype.name@npm:1.1.6" dependencies: @@ -17956,11 +17899,11 @@ __metadata: linkType: hard "get-tsconfig@npm:^4.5.0, get-tsconfig@npm:^4.6.2": - version: 4.7.0 - resolution: "get-tsconfig@npm:4.7.0" + version: 4.7.2 + resolution: "get-tsconfig@npm:4.7.2" dependencies: resolve-pkg-maps: ^1.0.0 - checksum: 5844d18a705535808cf535010d9443b47b462c6e91ed00d94500602f220ecb8e518325d5b1f9e0c515c67025819c3df193194144a456e1d8f1cd70b5d48b52aa + checksum: 169b2beababfbb16e8a0ae813ee59d3e14d4960231c816615161ab5be68ec07a394dce59695742ac84295e2efab8d9e89bcf3abaf5e253dfbec3496e01bb9a65 languageName: node linkType: hard @@ -18141,17 +18084,17 @@ __metadata: linkType: hard "glob@npm:^10.0.0, glob@npm:^10.2.2": - version: 10.3.4 - resolution: "glob@npm:10.3.4" + version: 10.3.10 + resolution: "glob@npm:10.3.10" dependencies: foreground-child: ^3.1.0 - jackspeak: ^2.0.3 + jackspeak: ^2.3.5 minimatch: ^9.0.1 minipass: ^5.0.0 || ^6.0.2 || ^7.0.0 path-scurry: ^1.10.1 bin: - glob: dist/cjs/src/bin.js - checksum: fe075f8109749cb0c264fd6eee8bf0cc8bb23a02305619b7a88bf1f79766218cc3ef66a3e8f3cd2e826006f047a3a8833c1694f167e978a6e37c34a8c053e48e + glob: dist/esm/bin.mjs + checksum: 13d8a1feb7eac7945f8c8480e11cd4a44b24d26503d99a8d8ac8d5aefbf3e9802a2b6087318a829fad04cb4e829f25c5f4f1110c68966c498720dd261c7e344d languageName: node linkType: hard @@ -18215,11 +18158,11 @@ __metadata: linkType: hard "globals@npm:^13.19.0": - version: 13.21.0 - resolution: "globals@npm:13.21.0" + version: 13.22.0 + resolution: "globals@npm:13.22.0" dependencies: type-fest: ^0.20.2 - checksum: 90573e825401adbe0ef25db1b52e8f74afe4a1087049edd972f1ace77b391753fc3fe51eba9b6962c62e2282645f0a27ce20251662cdc247631c4861f32d56eb + checksum: e7fda8fe048a3b4fdfb95602b7dcd87d719f4b3797a6ba7f43e50fe148cfe20edfd3abeb16cc301caf679ca0f3e059b561e2d5060f2133f20f52c85bb16ac394 languageName: node linkType: hard @@ -18333,7 +18276,7 @@ __metadata: languageName: node linkType: hard -"got@npm:^11.1.4": +"got@npm:^11.8.3": version: 11.8.6 resolution: "got@npm:11.8.6" dependencies: @@ -18573,11 +18516,9 @@ __metadata: linkType: hard "has@npm:^1.0.3": - version: 1.0.3 - resolution: "has@npm:1.0.3" - dependencies: - function-bind: ^1.1.1 - checksum: e1da0d2bd109f116b632f27782cf23182b42f14972ca9540e4c5aa7e52647407a0a4a76937334fddcb56befe94a3494825ec22b19b51f5e5507c3153fd1a5e1b + version: 1.0.4 + resolution: "has@npm:1.0.4" + checksum: 82c1220573dc1f0a014a5d6189ae52a1f820f99dfdc00323c3a725b5002dcb7f04e44f460fea7af068474b2dd7c88cbe1846925c84017be9e31e1708936d305b languageName: node linkType: hard @@ -20073,7 +20014,7 @@ __metadata: languageName: node linkType: hard -"is-typed-array@npm:^1.1.10, is-typed-array@npm:^1.1.3, is-typed-array@npm:^1.1.9": +"is-typed-array@npm:^1.1.10, is-typed-array@npm:^1.1.12, is-typed-array@npm:^1.1.3, is-typed-array@npm:^1.1.9": version: 1.1.12 resolution: "is-typed-array@npm:1.1.12" dependencies: @@ -20210,15 +20151,15 @@ __metadata: linkType: hard "istanbul-lib-instrument@npm:^6.0.0": - version: 6.0.0 - resolution: "istanbul-lib-instrument@npm:6.0.0" + version: 6.0.1 + resolution: "istanbul-lib-instrument@npm:6.0.1" dependencies: "@babel/core": ^7.12.3 "@babel/parser": ^7.14.7 "@istanbuljs/schema": ^0.1.2 istanbul-lib-coverage: ^3.2.0 semver: ^7.5.4 - checksum: ee86777f3692f95c3ae35c5cbc9aa979b551241da2de1284f75c507a2bdef948cc56ca90214c3bb47b5dc2ebe748610eb4f7c4d39b304f24a933bcd0867a05e8 + checksum: 313d61aca3f82a04ad9377841d05061d603ea3d4a4dd281fdda2479ec4ddbc86dc1792c73651f21c93480570d1ecadc5f63011e2df86f30ee662b62c0c00e3d8 languageName: node linkType: hard @@ -20265,28 +20206,29 @@ __metadata: languageName: node linkType: hard -"iterator.prototype@npm:^1.1.0": - version: 1.1.1 - resolution: "iterator.prototype@npm:1.1.1" +"iterator.prototype@npm:^1.1.2": + version: 1.1.2 + resolution: "iterator.prototype@npm:1.1.2" dependencies: - define-properties: ^1.2.0 + define-properties: ^1.2.1 get-intrinsic: ^1.2.1 has-symbols: ^1.0.3 - reflect.getprototypeof: ^1.0.3 - checksum: c11d53e4b5723c3c77272cb87f730a71e1a9aa0c5b1ac6f325113a988cfe0bb2da414e84044a2fc364968515095330efc8d49694939b01f283faa4541b997d57 + reflect.getprototypeof: ^1.0.4 + set-function-name: ^2.0.1 + checksum: a32151326095e916f306990d909f6bbf23e3221999a18ba686419535dcd1749b10ded505e89334b77dc4c7a58a8508978f0eb16c2c8573e6d412eb7eb894ea79 languageName: node linkType: hard -"jackspeak@npm:^2.0.3": - version: 2.3.3 - resolution: "jackspeak@npm:2.3.3" +"jackspeak@npm:^2.3.5": + version: 2.3.6 + resolution: "jackspeak@npm:2.3.6" dependencies: "@isaacs/cliui": ^8.0.2 "@pkgjs/parseargs": ^0.11.0 dependenciesMeta: "@pkgjs/parseargs": optional: true - checksum: 787b0617dcc534ef793ba685b92347b1b3d634d888b2833a57b140e97eb1f628ec3e460ba1a68fd99bd148004442625db7519be186b38ff51f4951e7c99b52d7 + checksum: f01d8f972d894cd7638bc338e9ef5ddb86f7b208ce177a36d718eac96ec86638a6efa17d0221b10073e64b45edc2ce15340db9380b1f5d5c5d000cbc517dc111 languageName: node linkType: hard @@ -20657,8 +20599,8 @@ __metadata: linkType: hard "jest-preset-angular@npm:^13.0.1": - version: 13.1.1 - resolution: "jest-preset-angular@npm:13.1.1" + version: 13.1.2 + resolution: "jest-preset-angular@npm:13.1.2" dependencies: bs-logger: ^0.2.6 esbuild: ">=0.13.8" @@ -20677,7 +20619,7 @@ __metadata: dependenciesMeta: esbuild: optional: true - checksum: aa2952b32328e5994520eaabd5979ca1fe1ee37ec8c96b1bab5b6f6e56c578637b9af125afe209087c4e1a244cd7022d332df3b0b842014657804474a381b75a + checksum: be7efa5cca7c63d8c6df3d835eef4eff730e6f2f783cb1517e9c0060a9fc9d3d57aa2892d0704dab7226ecc80956717c98af8e6d0b8a2415dee07e88c72e34bf languageName: node linkType: hard @@ -20957,15 +20899,15 @@ __metadata: linkType: hard "joi@npm:^17.7.0": - version: 17.10.1 - resolution: "joi@npm:17.10.1" + version: 17.10.2 + resolution: "joi@npm:17.10.2" dependencies: "@hapi/hoek": ^9.0.0 "@hapi/topo": ^5.0.0 "@sideway/address": ^4.1.3 "@sideway/formula": ^3.0.1 "@sideway/pinpoint": ^2.0.0 - checksum: 1e838808412691de662d64785bf819993e13181e4ae610deef741a4f9a9f5a443ec3c60a7f2bb67972dd27aa75b46da83e3e1e6f8b814a01bd2de4022f6131a7 + checksum: 5999a68f38a24de0b98850e137bbf4134e6dd8de29faa5893d7836f3e3aeb76ed5b2dd4daf836b87d2681aa9dfb6a5531c586d4d361dca9721d9ad0567be6b48 languageName: node linkType: hard @@ -22327,12 +22269,12 @@ __metadata: languageName: node linkType: hard -"magic-string@npm:^0.30.0, magic-string@npm:^0.30.2": - version: 0.30.3 - resolution: "magic-string@npm:0.30.3" +"magic-string@npm:^0.30.0, magic-string@npm:^0.30.3": + version: 0.30.4 + resolution: "magic-string@npm:0.30.4" dependencies: "@jridgewell/sourcemap-codec": ^1.4.15 - checksum: f69f0626192131a8daf0d638a8f31fdd85fd26428dff22401ef251f3913a5c74a710b1edff91ef6203a20d2b1edcc8e55f9320ba84e9b224a3413bdd47f5339e + checksum: 076c0402334a8f7c69d83175b4ff10c83b50fd2c6d884a758a563ad9bea312db3b5c7b16cf717229c11505a1deb52d6225503b3b638e1879101d65d08f03c467 languageName: node linkType: hard @@ -23424,6 +23366,15 @@ __metadata: languageName: node linkType: hard +"mime@npm:^3.0.0": + version: 3.0.0 + resolution: "mime@npm:3.0.0" + bin: + mime: cli.js + checksum: 402e792a8df1b2cc41cb77f0dcc46472b7944b7ec29cb5bbcd398624b6b97096728f1239766d3fdeb20551dd8d94738344c195a6ea10c4f906eb0356323b0531 + languageName: node + linkType: hard + "mimic-fn@npm:^2.1.0": version: 2.1.0 resolution: "mimic-fn@npm:2.1.0" @@ -23656,9 +23607,9 @@ __metadata: linkType: hard "minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.3": - version: 7.0.3 - resolution: "minipass@npm:7.0.3" - checksum: c85426bce6310368218aad1f20b8f242180b6c2058209c78840959d6fff8a4738076a3224c3a6b651080f95684d559be1bdb084939bc40011c653ec4552cf06e + version: 7.0.4 + resolution: "minipass@npm:7.0.4" + checksum: 6c7370a6dfd257bf18222da581ba89a5eaedca10e158781232a8b5542a90547540b4b9b7e7f490e4cda43acfbd12e086f0453728ecf8c19e0ef6921bc5958ac5 languageName: node linkType: hard @@ -23842,7 +23793,7 @@ __metadata: languageName: node linkType: hard -"nanoid@npm:^3.3.4, nanoid@npm:^3.3.6": +"nanoid@npm:^3.3.6": version: 3.3.6 resolution: "nanoid@npm:3.3.6" bin: @@ -23938,26 +23889,25 @@ __metadata: linkType: hard "next@npm:^13.4.8": - version: 13.4.19 - resolution: "next@npm:13.4.19" - dependencies: - "@next/env": 13.4.19 - "@next/swc-darwin-arm64": 13.4.19 - "@next/swc-darwin-x64": 13.4.19 - "@next/swc-linux-arm64-gnu": 13.4.19 - "@next/swc-linux-arm64-musl": 13.4.19 - "@next/swc-linux-x64-gnu": 13.4.19 - "@next/swc-linux-x64-musl": 13.4.19 - "@next/swc-win32-arm64-msvc": 13.4.19 - "@next/swc-win32-ia32-msvc": 13.4.19 - "@next/swc-win32-x64-msvc": 13.4.19 - "@swc/helpers": 0.5.1 + version: 13.5.4 + resolution: "next@npm:13.5.4" + dependencies: + "@next/env": 13.5.4 + "@next/swc-darwin-arm64": 13.5.4 + "@next/swc-darwin-x64": 13.5.4 + "@next/swc-linux-arm64-gnu": 13.5.4 + "@next/swc-linux-arm64-musl": 13.5.4 + "@next/swc-linux-x64-gnu": 13.5.4 + "@next/swc-linux-x64-musl": 13.5.4 + "@next/swc-win32-arm64-msvc": 13.5.4 + "@next/swc-win32-ia32-msvc": 13.5.4 + "@next/swc-win32-x64-msvc": 13.5.4 + "@swc/helpers": 0.5.2 busboy: 1.6.0 caniuse-lite: ^1.0.30001406 - postcss: 8.4.14 + postcss: 8.4.31 styled-jsx: 5.1.1 watchpack: 2.4.0 - zod: 3.21.4 peerDependencies: "@opentelemetry/api": ^1.1.0 react: ^18.2.0 @@ -23989,7 +23939,7 @@ __metadata: optional: true bin: next: dist/bin/next - checksum: 557fd15a52220f003ec88a79f51de41c5bb9cda5294944985f31ce45e75f98dd3caf902896d8419d96cc81596976671e953391b1eb3707757d261e362a242310 + checksum: 0b0bc7fa42844859a0444a79122a48b5e65116c30ce077a3edaaecd7cee1d7925214a659391ae6ecf8dc612869a7a646ab3a1a8aa12d074ff17e3f18c53a2621 languageName: node linkType: hard @@ -24575,21 +24525,21 @@ __metadata: languageName: node linkType: hard -"nx@npm:15.9.6, nx@npm:>=15.5.2 < 16": - version: 15.9.6 - resolution: "nx@npm:15.9.6" +"nx@npm:15.9.7, nx@npm:>=15.5.2 < 16": + version: 15.9.7 + resolution: "nx@npm:15.9.7" dependencies: - "@nrwl/cli": 15.9.6 - "@nrwl/nx-darwin-arm64": 15.9.6 - "@nrwl/nx-darwin-x64": 15.9.6 - "@nrwl/nx-linux-arm-gnueabihf": 15.9.6 - "@nrwl/nx-linux-arm64-gnu": 15.9.6 - "@nrwl/nx-linux-arm64-musl": 15.9.6 - "@nrwl/nx-linux-x64-gnu": 15.9.6 - "@nrwl/nx-linux-x64-musl": 15.9.6 - "@nrwl/nx-win32-arm64-msvc": 15.9.6 - "@nrwl/nx-win32-x64-msvc": 15.9.6 - "@nrwl/tao": 15.9.6 + "@nrwl/cli": 15.9.7 + "@nrwl/nx-darwin-arm64": 15.9.7 + "@nrwl/nx-darwin-x64": 15.9.7 + "@nrwl/nx-linux-arm-gnueabihf": 15.9.7 + "@nrwl/nx-linux-arm64-gnu": 15.9.7 + "@nrwl/nx-linux-arm64-musl": 15.9.7 + "@nrwl/nx-linux-x64-gnu": 15.9.7 + "@nrwl/nx-linux-x64-musl": 15.9.7 + "@nrwl/nx-win32-arm64-msvc": 15.9.7 + "@nrwl/nx-win32-x64-msvc": 15.9.7 + "@nrwl/tao": 15.9.7 "@parcel/watcher": 2.0.4 "@yarnpkg/lockfile": ^1.1.0 "@yarnpkg/parsers": 3.0.0-rc.46 @@ -24613,7 +24563,7 @@ __metadata: minimatch: 3.0.5 npm-run-path: ^4.0.1 open: ^8.4.0 - semver: 7.3.4 + semver: 7.5.4 string-width: ^4.2.3 strong-log-transformer: ^2.1.0 tar-stream: ~2.2.0 @@ -24652,7 +24602,7 @@ __metadata: optional: true bin: nx: bin/nx.js - checksum: 045ea59d32310f356569f001834d8f015e16929df4101fad643e7a68f5dd05a4dc865c4d86a29469ab06c7e62740c8a76189486f03c26d8030b45aa488c2bafe + checksum: 39b3c7e5efef3a10d0249db321a78fc9bb34806ae3d21ee211df29321367259841556989cbb4391b74f77d78f2629f90e65387b9414030fd921a9a03f8ccfbdc languageName: node linkType: hard @@ -25026,19 +24976,19 @@ __metadata: linkType: hard "overlayscrollbars-react@npm:^0.5.0": - version: 0.5.1 - resolution: "overlayscrollbars-react@npm:0.5.1" + version: 0.5.2 + resolution: "overlayscrollbars-react@npm:0.5.2" peerDependencies: overlayscrollbars: ^2.0.0 react: ">=16.8.0" - checksum: 3a8717d19ab54f6762a92c07ffa1f44d1b7ae72a8b60eaf88877efa9289409171eff840b0374d94935ee586f7c92e4f15a134ddb72d4b7a143defb69039fa6ca + checksum: 56e8df609f589cd38c97408d743ebd9112047c60da340c8f121b10418beabd1b5411396f4c1fd27b46dd0e663e7675ae72df1c531feb1e3f6bf1342dbafa21ef languageName: node linkType: hard "overlayscrollbars@npm:^2.2.0": - version: 2.2.1 - resolution: "overlayscrollbars@npm:2.2.1" - checksum: 718dd563ee17a8c92a54f0b67989806edadd5b999e36d2ab322e7813b369d1cf0198d7267ca42ca9e879023f0658825e2b050d2845e751d876285d1d3549cb5e + version: 2.3.2 + resolution: "overlayscrollbars@npm:2.3.2" + checksum: 6ee3c2d8ffafa8ec090b5f650edb783d83880f7f863d8b57791583a7496e9d1a9a4894cb80bfab75514af71d9ee9d0a15b17ba6006b1e5abc026d349f6535041 languageName: node linkType: hard @@ -26114,25 +26064,25 @@ __metadata: languageName: node linkType: hard -"postcss@npm:8.4.14": - version: 8.4.14 - resolution: "postcss@npm:8.4.14" +"postcss@npm:8.4.27": + version: 8.4.27 + resolution: "postcss@npm:8.4.27" dependencies: - nanoid: ^3.3.4 + nanoid: ^3.3.6 picocolors: ^1.0.0 source-map-js: ^1.0.2 - checksum: 2a4cfa28e2f1bfd358313501f7771bd596e494487c7b735c492e2f8b1faf493d24fcb43e2e6ad825863fc65a77abb949ca8f228602ae46a022f02dc812c4ac8b + checksum: 41a0476e05cb97514ff8d75e4ff9fdcf778f22b2e0d25b7028f219cd408e01d3c4f50459d4a1cd9a430d8ef08202c881374a4fa4ea6009f4a135a07315d606e5 languageName: node linkType: hard -"postcss@npm:8.4.27": - version: 8.4.27 - resolution: "postcss@npm:8.4.27" +"postcss@npm:8.4.31, postcss@npm:^8.1.10, postcss@npm:^8.2.14, postcss@npm:^8.4.14, postcss@npm:^8.4.21, postcss@npm:^8.4.23, postcss@npm:^8.4.26, postcss@npm:^8.4.27": + version: 8.4.31 + resolution: "postcss@npm:8.4.31" dependencies: nanoid: ^3.3.6 picocolors: ^1.0.0 source-map-js: ^1.0.2 - checksum: 41a0476e05cb97514ff8d75e4ff9fdcf778f22b2e0d25b7028f219cd408e01d3c4f50459d4a1cd9a430d8ef08202c881374a4fa4ea6009f4a135a07315d606e5 + checksum: 748b82e6e5fc34034dcf2ae88ea3d11fd09f69b6c50ecdd3b4a875cfc7cdca435c958b211e2cb52355422ab6fccb7d8f2f2923161d7a1b281029e4a913d59acf languageName: node linkType: hard @@ -26146,17 +26096,6 @@ __metadata: languageName: node linkType: hard -"postcss@npm:^8.1.10, postcss@npm:^8.2.14, postcss@npm:^8.4.14, postcss@npm:^8.4.21, postcss@npm:^8.4.23, postcss@npm:^8.4.26, postcss@npm:^8.4.27": - version: 8.4.29 - resolution: "postcss@npm:8.4.29" - dependencies: - nanoid: ^3.3.6 - picocolors: ^1.0.0 - source-map-js: ^1.0.2 - checksum: b50b7ad4ac6c9ba029eda4381863570b7aed2672ffae2566ef109e556bae01823a51180409877ff2cce1fe186025751c7191c301eafc07b0d90c630ab5e0365c - languageName: node - linkType: hard - "preact-render-to-string@npm:^5.1.19": version: 5.2.6 resolution: "preact-render-to-string@npm:5.2.6" @@ -26169,9 +26108,9 @@ __metadata: linkType: hard "preact@npm:^10.5.13": - version: 10.17.1 - resolution: "preact@npm:10.17.1" - checksum: 6a264832afacb2e5c6ffd3bdbbb85cfbb1c5f8e33c616885cdbd8d07474819b6740c834dc3a749f6986366a57cdc33feba10680b2a65dc51d5e40a9c68c7b641 + version: 10.18.1 + resolution: "preact@npm:10.18.1" + checksum: b157c46d5dbece48cf0f31b0e24d27c989ea019e77730427b4c7549953da7de015b34f13f93d0034966f033738ec582829da918c28d084bbb31d59f320f56aa0 languageName: node linkType: hard @@ -26753,9 +26692,9 @@ __metadata: linkType: hard "pure-rand@npm:^6.0.0": - version: 6.0.3 - resolution: "pure-rand@npm:6.0.3" - checksum: f8bf59c29ef7fa6302e462cae3aa47932fb364e1bf8f095667b542d77c6fa26e52068eefa5c39b2e715a6c92d41fd8dd321bf81c07077f45e9373fc33f80e0ed + version: 6.0.4 + resolution: "pure-rand@npm:6.0.4" + checksum: 0fe7b12f25b10ea5b804598a6f37e4bcf645d2be6d44fe963741f014bf0095bdb6ff525106d6da6e76addc8142358fd380f1a9b8c62ea4d5516bf26a96a37c95 languageName: node linkType: hard @@ -26775,7 +26714,7 @@ __metadata: languageName: node linkType: hard -"qs@npm:^6.10.0, qs@npm:^6.11.2, qs@npm:^6.4.0": +"qs@npm:^6.10.0, qs@npm:^6.10.1, qs@npm:^6.11.2, qs@npm:^6.4.0": version: 6.11.2 resolution: "qs@npm:6.11.2" dependencies: @@ -26784,15 +26723,15 @@ __metadata: languageName: node linkType: hard -"query-string@npm:^6.12.1": - version: 6.14.1 - resolution: "query-string@npm:6.14.1" +"query-string@npm:^7.0.0": + version: 7.1.3 + resolution: "query-string@npm:7.1.3" dependencies: - decode-uri-component: ^0.2.0 + decode-uri-component: ^0.2.2 filter-obj: ^1.1.0 split-on-first: ^1.0.0 strict-uri-encode: ^2.0.0 - checksum: 900e0fa788000e9dc5f929b6f4141742dcf281f02d3bab9714bc83bea65fab3de75169ea8d61f19cda996bc0dcec72e156efe3c5614c6bce65dcf234ac955b14 + checksum: a896c08e9e0d4f8ffd89a572d11f668c8d0f7df9c27c6f49b92ab31366d3ba0e9c331b9a620ee747893436cd1f2f821a6327e2bc9776bde2402ac6c270b801b2 languageName: node linkType: hard @@ -26969,20 +26908,20 @@ __metadata: linkType: hard "react-docgen@npm:^6.0.2": - version: 6.0.2 - resolution: "react-docgen@npm:6.0.2" + version: 6.0.4 + resolution: "react-docgen@npm:6.0.4" dependencies: "@babel/core": ^7.18.9 "@babel/traverse": ^7.18.9 "@babel/types": ^7.18.9 "@types/babel__core": ^7.18.0 "@types/babel__traverse": ^7.18.0 - "@types/doctrine": ^0.0.5 + "@types/doctrine": ^0.0.6 "@types/resolve": ^1.20.2 doctrine: ^3.0.0 resolve: ^1.22.1 strip-indent: ^4.0.0 - checksum: 040f9b460982d6b4690ed5381b6181c58f6a2cd9cd6d70cfc449663527eaf93908cc6f7f06b018d9bc345b65d0cb87cb3d05541403556f20c1feab28342b0b4c + checksum: 6e372de705b0ce576c8a46c8aedaea3f584441b18d68c02128f14e20657597fe088c80bb67374d5057001f71505924e07d6e366ec8d768e2456d47395bd32066 languageName: node linkType: hard @@ -27001,15 +26940,15 @@ __metadata: linkType: hard "react-draggable@npm:^4.4.3": - version: 4.4.5 - resolution: "react-draggable@npm:4.4.5" + version: 4.4.6 + resolution: "react-draggable@npm:4.4.6" dependencies: clsx: ^1.1.1 prop-types: ^15.8.1 peerDependencies: react: ">= 16.3.0" react-dom: ">= 16.3.0" - checksum: d950e25b41092ffd689e9882c287f7f49dbd8eb7e8a220af6e08c0dc06f1ae778871b0f414e30bd2891a96c6be1f673c3a698c0e642903542ff5ab5b0cbaf805 + checksum: 1e8cf47414a8554caa68447e5f27749bc40e1eabb4806e2dadcb39ab081d263f517d6aaec5231677e6b425603037c7e3386d1549898f9ffcc98a86cabafb2b9a languageName: node linkType: hard @@ -27622,7 +27561,7 @@ __metadata: languageName: node linkType: hard -"reflect.getprototypeof@npm:^1.0.3": +"reflect.getprototypeof@npm:^1.0.4": version: 1.0.4 resolution: "reflect.getprototypeof@npm:1.0.4" dependencies: @@ -27655,11 +27594,11 @@ __metadata: linkType: hard "regenerate-unicode-properties@npm:^10.1.0": - version: 10.1.0 - resolution: "regenerate-unicode-properties@npm:10.1.0" + version: 10.1.1 + resolution: "regenerate-unicode-properties@npm:10.1.1" dependencies: regenerate: ^1.4.2 - checksum: 17818ea6f67c5a4884b9e18842edc4b3838a12f62e24f843e80fbb6d8cb649274b5b86d98bb02075074e02021850e597a92ff6b58bbe5caba4bf5fd8e4e38b56 + checksum: 89adb5ee5ba081380c78f9057c02e156a8181969f6fcca72451efc45612e0c3df767b4333f8d8479c274d9c6fe52ec4854f0d8a22ef95dccbe87da8e5f2ac77d languageName: node linkType: hard @@ -27717,14 +27656,14 @@ __metadata: languageName: node linkType: hard -"regexp.prototype.flags@npm:^1.2.0, regexp.prototype.flags@npm:^1.5.0": - version: 1.5.0 - resolution: "regexp.prototype.flags@npm:1.5.0" +"regexp.prototype.flags@npm:^1.2.0, regexp.prototype.flags@npm:^1.5.0, regexp.prototype.flags@npm:^1.5.1": + version: 1.5.1 + resolution: "regexp.prototype.flags@npm:1.5.1" dependencies: call-bind: ^1.0.2 define-properties: ^1.2.0 - functions-have-names: ^1.2.3 - checksum: 312b7966c5cd2e6837da4073e0e6450191e3c6e8f07276cbed35e170ea5606f91487b435eb3290593f8aed39b1191c44f5340e6e5392650feaf2b34a98378464 + set-function-name: ^2.0.0 + checksum: 1de7d214c0a726c7c874a7023e47b0e27b9f7fdb64175bfe1861189de1704aaeca05c3d26c35aa375432289b99946f3cf86651a92a8f7601b90d8c226a23bcd8 languageName: node linkType: hard @@ -28292,15 +28231,15 @@ __metadata: linkType: hard "resolve@npm:^1.10.0, resolve@npm:^1.12.0, resolve@npm:^1.13.1, resolve@npm:^1.14.2, resolve@npm:^1.15.1, resolve@npm:^1.17.0, resolve@npm:^1.19.0, resolve@npm:^1.20.0, resolve@npm:^1.22.1, resolve@npm:^1.22.4, resolve@npm:^1.3.2, resolve@npm:^1.4.0": - version: 1.22.4 - resolution: "resolve@npm:1.22.4" + version: 1.22.6 + resolution: "resolve@npm:1.22.6" dependencies: is-core-module: ^2.13.0 path-parse: ^1.0.7 supports-preserve-symlinks-flag: ^1.0.0 bin: resolve: bin/resolve - checksum: b1adb7885a05e31fc2be19e85e338b8d48d9e442b568d91e9c925990ed1c3bff66683ccea03b9e9893b857ec25dee0f7951a0d0630be49e4e1f5c1150ddc35dc + checksum: 967f2eb67c77d1be7ff15676a7dbac9334090cfbf8b967305da5f4bd22fc7d12e7045223dc820bcc783031815b60b7f42f2a495165c320ffb4c7bb92eb2eb2d7 languageName: node linkType: hard @@ -28331,15 +28270,15 @@ __metadata: linkType: hard "resolve@patch:resolve@^1.10.0#~builtin, resolve@patch:resolve@^1.12.0#~builtin, resolve@patch:resolve@^1.13.1#~builtin, resolve@patch:resolve@^1.14.2#~builtin, resolve@patch:resolve@^1.15.1#~builtin, resolve@patch:resolve@^1.17.0#~builtin, resolve@patch:resolve@^1.19.0#~builtin, resolve@patch:resolve@^1.20.0#~builtin, resolve@patch:resolve@^1.22.1#~builtin, resolve@patch:resolve@^1.22.4#~builtin, resolve@patch:resolve@^1.3.2#~builtin, resolve@patch:resolve@^1.4.0#~builtin": - version: 1.22.4 - resolution: "resolve@patch:resolve@npm%3A1.22.4#~builtin::version=1.22.4&hash=c3c19d" + version: 1.22.6 + resolution: "resolve@patch:resolve@npm%3A1.22.6#~builtin::version=1.22.6&hash=c3c19d" dependencies: is-core-module: ^2.13.0 path-parse: ^1.0.7 supports-preserve-symlinks-flag: ^1.0.0 bin: resolve: bin/resolve - checksum: 60ca179599acf8b1bb17b850280a7081781b457d235d48197dc893b82d75741f191c5fe2d93e5729292234d0b0d88e9add273df4b9e04755eeed4fd7d23f1c79 + checksum: acedc45a638b3635730669bb65e87bb61f5bf9b4e81982aba9ece0049ff792472a6fbb0c22cc59073cdbf17a0926c1d3d77ba86c88c60e15cc46f929278210cb languageName: node linkType: hard @@ -28485,8 +28424,8 @@ __metadata: linkType: hard "rollup@npm:^3.20.1, rollup@npm:^3.25.2, rollup@npm:^3.27.1": - version: 3.29.1 - resolution: "rollup@npm:3.29.1" + version: 3.29.4 + resolution: "rollup@npm:3.29.4" dependencies: fsevents: ~2.3.2 dependenciesMeta: @@ -28494,7 +28433,7 @@ __metadata: optional: true bin: rollup: dist/bin/rollup - checksum: 9a04803aa55b844d95458b48734ec4b7716e3cefdb2c08a4ccd71f55b83a9afb970e3c667d114fef08ae640e67f8d1928cf668ba8c30fe3df77a810d50e1b077 + checksum: 65eddf84bf389ea8e4d4c1614b1c6a298d08f8ae785c0c087e723a879190c8aaddbab4aa3b8a0524551b9036750c9f8bfea27b377798accfd2ba5084ceff5aaa languageName: node linkType: hard @@ -28572,7 +28511,7 @@ __metadata: languageName: node linkType: hard -"safe-array-concat@npm:^1.0.0": +"safe-array-concat@npm:^1.0.1": version: 1.0.1 resolution: "safe-array-concat@npm:1.0.1" dependencies: @@ -28707,9 +28646,9 @@ __metadata: linkType: hard "sax@npm:^1.2.4": - version: 1.2.4 - resolution: "sax@npm:1.2.4" - checksum: 6e9b05ff443ee5e5096ce92d31c0740a20d33002fad714ebcb8fc7a664d9ee159103ebe8f7aef0a1f7c5ecacdd01f177f510dff95611c589399baf76437d3fe3 + version: 1.3.0 + resolution: "sax@npm:1.3.0" + checksum: 599dbe0ba9d8bd55e92d920239b21d101823a6cedff71e542589303fa0fa8f3ece6cf608baca0c51be846a2e88365fac94a9101a9c341d94b98e30c4deea5bea languageName: node linkType: hard @@ -28926,6 +28865,17 @@ __metadata: languageName: node linkType: hard +"set-function-name@npm:^2.0.0, set-function-name@npm:^2.0.1": + version: 2.0.1 + resolution: "set-function-name@npm:2.0.1" + dependencies: + define-data-property: ^1.0.1 + functions-have-names: ^1.2.3 + has-property-descriptors: ^1.0.0 + checksum: 6be7d3e15be47f4db8a5a563a35c60b5e7c4af91cc900e8972ffad33d3aaa227900faa55f60121cdb04b85866a734bb7fe4cd91f654c632861cc86121a48312a + languageName: node + linkType: hard + "set-value@npm:^2.0.0, set-value@npm:^2.0.1": version: 2.0.1 resolution: "set-value@npm:2.0.1" @@ -29427,9 +29377,9 @@ __metadata: linkType: hard "spdx-license-ids@npm:^3.0.0": - version: 3.0.13 - resolution: "spdx-license-ids@npm:3.0.13" - checksum: a5cb77ea7be86d574c8876970920e34d9b37f2fb6e361e6b732b61267afbc63dd37831160b731f85c1478f5ba95ae00369742555920e3c694f047f7068d33318 + version: 3.0.15 + resolution: "spdx-license-ids@npm:3.0.15" + checksum: 1d44fa43d2024d4533816ceffac983149f9c76214698033496e13f6224d7fe6e61649a2bb9eb6c88b5f7f71bc19cc5f0aed3dba75b430e27c06e0f71cc251959 languageName: node linkType: hard @@ -29729,8 +29679,8 @@ __metadata: linkType: hard "string.prototype.matchall@npm:^4.0.8": - version: 4.0.9 - resolution: "string.prototype.matchall@npm:4.0.9" + version: 4.0.10 + resolution: "string.prototype.matchall@npm:4.0.10" dependencies: call-bind: ^1.0.2 define-properties: ^1.2.0 @@ -29739,12 +29689,13 @@ __metadata: has-symbols: ^1.0.3 internal-slot: ^1.0.5 regexp.prototype.flags: ^1.5.0 + set-function-name: ^2.0.0 side-channel: ^1.0.4 - checksum: bcd2e34f467b9c474df88cebc1a3ed208f02d0b1452ef8907e74d332b2358f9cf03695693ab7620664b21a0df0c2b4917b631b1fe3c26a3b8c1feded80912ff7 + checksum: cd7495fb0de16d43efeee3887b98701941f3817bd5f09351ad1825b023d307720c86394d56d56380563d97767ab25bf5448db239fcecbb85c28e2180f23e324a languageName: node linkType: hard -"string.prototype.trim@npm:^1.2.1, string.prototype.trim@npm:^1.2.7": +"string.prototype.trim@npm:^1.2.1, string.prototype.trim@npm:^1.2.8": version: 1.2.8 resolution: "string.prototype.trim@npm:1.2.8" dependencies: @@ -29755,7 +29706,7 @@ __metadata: languageName: node linkType: hard -"string.prototype.trimend@npm:^1.0.6": +"string.prototype.trimend@npm:^1.0.7": version: 1.0.7 resolution: "string.prototype.trimend@npm:1.0.7" dependencies: @@ -29766,7 +29717,7 @@ __metadata: languageName: node linkType: hard -"string.prototype.trimstart@npm:^1.0.6": +"string.prototype.trimstart@npm:^1.0.7": version: 1.0.7 resolution: "string.prototype.trimstart@npm:1.0.7" dependencies: @@ -30012,8 +29963,8 @@ __metadata: linkType: hard "svelte-check@npm:^3.4.3": - version: 3.5.1 - resolution: "svelte-check@npm:3.5.1" + version: 3.5.2 + resolution: "svelte-check@npm:3.5.2" dependencies: "@jridgewell/trace-mapping": ^0.3.17 chokidar: ^3.4.1 @@ -30027,7 +29978,7 @@ __metadata: svelte: ^3.55.0 || ^4.0.0-next.0 || ^4.0.0 bin: svelte-check: bin/svelte-check - checksum: 9dd4d2c1a68950533120722097c57201834ac09e4d62dac43edca7f5f4dc946b32a570111db49e97cac6e1c060ac5dbe42f373dc453f7a16df3cd5a79647f131 + checksum: a07f0f036918351b60dc991a860c746ab20cbeb4cef71be62918fd80d7f81d562a85d6e783ab3d2a19c31c180a4cf9af68a33ffae80ccce185596381876d405d languageName: node linkType: hard @@ -30116,8 +30067,8 @@ __metadata: linkType: hard "svelte@npm:^4.0.0": - version: 4.2.0 - resolution: "svelte@npm:4.2.0" + version: 4.2.1 + resolution: "svelte@npm:4.2.1" dependencies: "@ampproject/remapping": ^2.2.1 "@jridgewell/sourcemap-codec": ^1.4.15 @@ -30132,7 +30083,7 @@ __metadata: locate-character: ^3.0.0 magic-string: ^0.30.0 periscopic: ^3.1.0 - checksum: f2ea970650e80736a3052a0a24699657f0907a456b2ed0543d7dbf96eccec7f54c4627fe18d8e26bd777f3e1b61434a74558a4f5dc182004cca65c157c965d2e + checksum: 5262dfceb99809a7ed01addc684351ac297dc2967b49dc99563af646c113c33a1535fe6ea5b9af4c6986880b6803ac0ca4fecb15a65bb18b641929c400d5dead languageName: node linkType: hard @@ -30366,8 +30317,8 @@ __metadata: linkType: hard "terser@npm:^5.10.0, terser@npm:^5.16.8": - version: 5.19.4 - resolution: "terser@npm:5.19.4" + version: 5.21.0 + resolution: "terser@npm:5.21.0" dependencies: "@jridgewell/source-map": ^0.3.3 acorn: ^8.8.2 @@ -30375,7 +30326,7 @@ __metadata: source-map-support: ~0.5.20 bin: terser: bin/terser - checksum: 39c6687609f5b9061f2fb82bee02d2f9d7756fcb5bd50c67da1482f52cf5977e03e0c5df5cb4ce17e549428024c8859075137c461ec4a9ae8cf91a505759255a + checksum: f14ee816b668e014a2a37f4d00c2d9038374be56f0a141d4eb386b316c5645f49bb038a6b78f75353e9745d622dc66a1d6368aea5b08d46489b57dbf195f761c languageName: node linkType: hard @@ -30813,13 +30764,6 @@ __metadata: languageName: node linkType: hard -"ts-toolbelt@npm:^9.6.0": - version: 9.6.0 - resolution: "ts-toolbelt@npm:9.6.0" - checksum: 838f9a2f0fe881d5065257a23b402c41315b33ff987b73db3e2b39fcb70640c4c7220e1ef118ed5676763543724fdbf4eda7b0e2c17acb667ed1401336af9f8c - languageName: node - linkType: hard - "tsconfig-paths-webpack-plugin@npm:^4.0.1": version: 4.1.0 resolution: "tsconfig-paths-webpack-plugin@npm:4.1.0" @@ -31017,15 +30961,6 @@ __metadata: languageName: node linkType: hard -"types-ramda@npm:^0.29.4": - version: 0.29.4 - resolution: "types-ramda@npm:0.29.4" - dependencies: - ts-toolbelt: ^9.6.0 - checksum: 7f73719de87ad49ffa48bdece4feb41d9707f945cad649c5bd1c0b1c2f80703d9eb90cc9003411a5af4d4eee3c0c582f8baa86af069be29e9c46f802db203825 - languageName: node - linkType: hard - "typescript@npm:^3 || ^4, typescript@npm:^4.9.3, typescript@npm:~4.9.3": version: 4.9.5 resolution: "typescript@npm:4.9.5" @@ -31488,14 +31423,14 @@ __metadata: linkType: hard "unplugin@npm:^1.3.1": - version: 1.4.0 - resolution: "unplugin@npm:1.4.0" + version: 1.5.0 + resolution: "unplugin@npm:1.5.0" dependencies: - acorn: ^8.9.0 + acorn: ^8.10.0 chokidar: ^3.5.3 webpack-sources: ^3.2.3 webpack-virtual-modules: ^0.5.0 - checksum: d006fe3ddfcd6578e36f2951f6a21419af2ba8812bc16681876a725a0981b339c920e6afb2cd222d74ca5943e0aa41260cff8fb3528dae12e66419369ae616fc + checksum: 2f79a7bf6b428a6aac80bf21852ed83cafead0ae3ed8866db1dca1cd4489f3b50c95874275e9a9b0f10c2e3c4892bfe0431c70d13635775c4c620a6a3f9eae37 languageName: node linkType: hard @@ -31523,9 +31458,9 @@ __metadata: languageName: node linkType: hard -"update-browserslist-db@npm:^1.0.11": - version: 1.0.11 - resolution: "update-browserslist-db@npm:1.0.11" +"update-browserslist-db@npm:^1.0.13": + version: 1.0.13 + resolution: "update-browserslist-db@npm:1.0.13" dependencies: escalade: ^3.1.1 picocolors: ^1.0.0 @@ -31533,7 +31468,7 @@ __metadata: browserslist: ">= 4.21.0" bin: update-browserslist-db: cli.js - checksum: 280d5cf92e302d8de0c12ef840a6af26ec024a5158aa2020975cd01bf0ded09c709793a6f421e6d0f1a47557d6a1a10dc43af80f9c30b8fd0df9691eb98c1c69 + checksum: e52b8b521c78ce1e0c775f356cd16a9c22c70d25f3e01180839c407a5dc787fb05a13f67560cbaf316770d26fa99f78f1acd711b1b54a4f35d4820d4ea7136e6 languageName: node linkType: hard @@ -31571,12 +31506,12 @@ __metadata: linkType: hard "url@npm:^0.11.0": - version: 0.11.2 - resolution: "url@npm:0.11.2" + version: 0.11.3 + resolution: "url@npm:0.11.3" dependencies: punycode: ^1.4.1 qs: ^6.11.2 - checksum: c4a4b783ad30b47e0b4a7a7b9ac908db59898eaaf53e3142af81231c99d065776c2e7f617eb6d8099587a890180cad9726c260a9874d2f6736a67b867fa78e06 + checksum: 7546b878ee7927cfc62ca21dbe2dc395cf70e889c3488b2815bf2c63355cb3c7db555128176a01b0af6cccf265667b6fd0b4806de00cb71c143c53986c08c602 languageName: node linkType: hard @@ -31746,11 +31681,11 @@ __metadata: linkType: hard "uuid@npm:^9.0.0": - version: 9.0.0 - resolution: "uuid@npm:9.0.0" + version: 9.0.1 + resolution: "uuid@npm:9.0.1" bin: uuid: dist/bin/uuid - checksum: 8867e438990d1d33ac61093e2e4e3477a2148b844e4fa9e3c2360fa4399292429c4b6ec64537eb1659c97b2d10db349c673ad58b50e2824a11e0d3630de3c056 + checksum: 1607dd32ac7fc22f2d8f77051e6a64845c9bce5cd3dd8aa0070c074ec73e666a1f63c7b4e0f4bf2bc8b9d59dc85a15e17807446d9d2b17c8485fbc2147b27f9b languageName: node linkType: hard @@ -31783,13 +31718,13 @@ __metadata: linkType: hard "v8-to-istanbul@npm:^9.0.0, v8-to-istanbul@npm:^9.0.1": - version: 9.1.0 - resolution: "v8-to-istanbul@npm:9.1.0" + version: 9.1.2 + resolution: "v8-to-istanbul@npm:9.1.2" dependencies: "@jridgewell/trace-mapping": ^0.3.12 "@types/istanbul-lib-coverage": ^2.0.1 - convert-source-map: ^1.6.0 - checksum: 657ef7c52a514c1a0769663f96dd6f2cd11d2d3f6c8272d1035f4a543dca0b52c84b005beb7f0ca215eb98425c8bc4aa92a62826b1fc76abc1f7228d33ccbc60 + convert-source-map: ^2.0.0 + checksum: ceed817914e1ddbe88cbeaae37aff82effbbf67846810f24c551315dade629e65f65d8cd853ce0982eb30c8865eeeed2e0d3935e3b227cbcefb2c1607de04e82 languageName: node linkType: hard @@ -31964,8 +31899,8 @@ __metadata: linkType: hard "vite@npm:^4.0.0, vite@npm:^4.0.4": - version: 4.4.9 - resolution: "vite@npm:4.4.9" + version: 4.4.10 + resolution: "vite@npm:4.4.10" dependencies: esbuild: ^0.18.10 fsevents: ~2.3.2 @@ -31999,7 +31934,7 @@ __metadata: optional: true bin: vite: bin/vite.js - checksum: 80dbc632fd75b5866567c8fd605115c9d5718654dbf173f509cfd55c53f39dfbee24f62660e57fd5b11eb93f469a65abdbe6bae880ec8392bb70a5d0d7b6e6a9 + checksum: d1359f147eb84aad9922460848184f14295e76f335ab03f90a585886ff070e1a7c74996022b3bb07da0a3130c9829565b5556e6eb1d0db12a8aad26f3694d445 languageName: node linkType: hard @@ -32043,16 +31978,16 @@ __metadata: linkType: hard "vscode-languageserver-textdocument@npm:^1.0.3": - version: 1.0.10 - resolution: "vscode-languageserver-textdocument@npm:1.0.10" - checksum: 0f4e82c262eaea2ed84e004c751453ac900a669763287dee92f9b631804a6ef1dabd62880185fa4d9a063f27d46e65c5251f7f0c8329aee5e3b3db6b6dfa2109 + version: 1.0.11 + resolution: "vscode-languageserver-textdocument@npm:1.0.11" + checksum: 1996a38e24571e05aa21dd4f46e0a6849e22301c9a66996762e77d9c6df3622de0bd31cd5742a0c0c47fb9dfd00b310ad08c44d08241873ea571edacd5238da6 languageName: node linkType: hard "vscode-languageserver-types@npm:^3.16.0": - version: 3.17.3 - resolution: "vscode-languageserver-types@npm:3.17.3" - checksum: a70d4ac0dbc08ba425b97e329e6a5696dabc6a264415bacb861e10d859b224f1b46d1fb41c17b6fdd31b32749d3bdfc819cb1b8a57dbe0d1e70e661ba8cfa397 + version: 3.17.5 + resolution: "vscode-languageserver-types@npm:3.17.5" + checksum: 1e1260de79a2cc8de3e46f2e0182cdc94a7eddab487db5a3bd4ee716f67728e685852707d72c059721ce500447be9a46764a04f0611e94e4321ffa088eef36f8 languageName: node linkType: hard @@ -32080,15 +32015,15 @@ __metadata: linkType: hard "vue-component-type-helpers@npm:latest": - version: 1.8.10 - resolution: "vue-component-type-helpers@npm:1.8.10" - checksum: 6a08058ef19a90bba19b525d15857749b938950f78ad834b629460ef7fca6935a0e1ccb52b4532bd1e1a31078d4315b5b4d9daf0184b6d546f1f16f5ea7ba556 + version: 1.8.15 + resolution: "vue-component-type-helpers@npm:1.8.15" + checksum: 3397faf50844e31d92a29a44616088408cf6eb8b6c88b7deb8841c4bc78e8e258fafbb7052b100e52ebea5d1c4e826b7247b2c48f6f3c330addd53132db141f9 languageName: node linkType: hard "vue-docgen-api@npm:^4.40.0, vue-docgen-api@npm:^4.44.23, vue-docgen-api@npm:^4.46.0": - version: 4.74.1 - resolution: "vue-docgen-api@npm:4.74.1" + version: 4.74.2 + resolution: "vue-docgen-api@npm:4.74.2" dependencies: "@babel/parser": ^7.21.4 "@babel/types": ^7.21.4 @@ -32101,7 +32036,9 @@ __metadata: recast: ^0.23.1 ts-map: ^1.0.3 vue-inbrowser-compiler-independent-utils: ^4.69.0 - checksum: 9d7778204e814fe2bd12199ea69095279efeae8df7d1de7b7777baccaf79cc25fb0c9cb07b4af6aaeb08641ef155b89328769c6d37faf06276c3c5ddc32cfe01 + peerDependencies: + vue: ">=2" + checksum: 9985c3910a40090796cd7f9ca9642134a2001e2afe5dcd6527c559f4e4e912abd45f3559d16801224ba5758551c64b7da61a8300b3a54618f1b8f7da319539cd languageName: node linkType: hard @@ -32235,17 +32172,17 @@ __metadata: linkType: hard "vue-tsc@npm:latest": - version: 1.8.10 - resolution: "vue-tsc@npm:1.8.10" + version: 1.8.15 + resolution: "vue-tsc@npm:1.8.15" dependencies: - "@vue/language-core": 1.8.10 - "@vue/typescript": 1.8.10 + "@vue/language-core": 1.8.15 + "@vue/typescript": 1.8.15 semver: ^7.3.8 peerDependencies: typescript: "*" bin: vue-tsc: bin/vue-tsc.js - checksum: 772c707f9a17c665b2ed8127e0f403d064a6cddd4e8aac1fa02c044acabdf2cd0522d1662bc2809a6e0b87645405baffcb70eb78852c02f178b35ecb2469d9b7 + checksum: 18092627141afcef9515701ea85beae564bc31258358d3b0eb7a3ae5167559ac56d8e218a0490661bae91a4f496d1351f9431074820473206dda9d0c50998216 languageName: node linkType: hard @@ -32785,7 +32722,7 @@ __metadata: languageName: node linkType: hard -"which-typed-array@npm:^1.1.10, which-typed-array@npm:^1.1.11, which-typed-array@npm:^1.1.2, which-typed-array@npm:^1.1.9": +"which-typed-array@npm:^1.1.11, which-typed-array@npm:^1.1.2, which-typed-array@npm:^1.1.9": version: 1.1.11 resolution: "which-typed-array@npm:1.1.11" dependencies: @@ -33054,8 +32991,8 @@ __metadata: linkType: hard "ws@npm:^8.11.0, ws@npm:^8.13.0, ws@npm:^8.2.3": - version: 8.14.1 - resolution: "ws@npm:8.14.1" + version: 8.14.2 + resolution: "ws@npm:8.14.2" peerDependencies: bufferutil: ^4.0.1 utf-8-validate: ">=5.0.2" @@ -33064,7 +33001,7 @@ __metadata: optional: true utf-8-validate: optional: true - checksum: 71b819d1ea00f8a345dd445f72821df64f5892b497d23deb47707cc09e98035902a7cff9b77a911b1af0dcc0a2fbf61f1f50f25ba4ab684e054dc08877e6095d + checksum: 35b4c2da048b8015c797fd14bcb5a5766216ce65c8a5965616a5440ca7b6c3681ee3cbd0ea0c184a59975556e9d58f2002abf8485a14d11d3371770811050a16 languageName: node linkType: hard @@ -33335,19 +33272,12 @@ __metadata: languageName: node linkType: hard -"zod@npm:3.21.4": - version: 3.21.4 - resolution: "zod@npm:3.21.4" - checksum: 161e8cf7aea38a99244d65da4a9477d9d966f6a533e503feaa20ff7968a9691065c38c6f1eab5cbbdc8374142fff4a05c9cacb8479803ab50ab6a6ca80e5d624 - languageName: node - linkType: hard - "zone.js@npm:^0.13.0": - version: 0.13.1 - resolution: "zone.js@npm:0.13.1" + version: 0.13.3 + resolution: "zone.js@npm:0.13.3" dependencies: tslib: ^2.3.0 - checksum: 3f04ded7d2f5496befbce030aa57ba58d1c604795445e555af1a0079fc9938d0a0a9c128fdbff13563423ea2e2956549383629e39c59a7f1d8d3362deacc5e5b + checksum: c2bfa9470c54742b319e81b617a95ddd72bbd4ee03dd5d4d68ae04f153490123fd38c96d2c40d70cf88722e8214b012842836a62cefb23f8f6282d3f7cc1d2b8 languageName: node linkType: hard From fb06301b8481314a860a70f405091b1d8059aa59 Mon Sep 17 00:00:00 2001 From: Valentin Palkovic Date: Wed, 4 Oct 2023 13:30:27 +0200 Subject: [PATCH 51/83] Fix types --- code/addons/docs/src/DocsRenderer.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/addons/docs/src/DocsRenderer.tsx b/code/addons/docs/src/DocsRenderer.tsx index 1940a2a0e25b..42d8d279b749 100644 --- a/code/addons/docs/src/DocsRenderer.tsx +++ b/code/addons/docs/src/DocsRenderer.tsx @@ -28,7 +28,7 @@ class ErrorBoundary extends Component<{ const { hasError } = this.state; const { children } = this.props; - return hasError ? null : children; + return hasError ? null : <>{children}; } } From 97e0c602bbc18a5dc921c60359485a8f25a9049a Mon Sep 17 00:00:00 2001 From: Valentin Palkovic Date: Wed, 4 Oct 2023 14:33:49 +0200 Subject: [PATCH 52/83] Restrict allowed zone.js version range --- code/frameworks/angular/package.json | 2 +- code/yarn.lock | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/code/frameworks/angular/package.json b/code/frameworks/angular/package.json index bdcd21c0ff44..50ecec42445c 100644 --- a/code/frameworks/angular/package.json +++ b/code/frameworks/angular/package.json @@ -106,7 +106,7 @@ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0", "rxjs": "^6.0.0 || ^7.4.0", "typescript": "^4.0.0 || ^5.0.0", - "zone.js": "^0.8.29 || >= 0.9.0 < 1.0.0" + "zone.js": ">= 0.11.1 < 1.0.0" }, "peerDependenciesMeta": { "@angular/cli": { diff --git a/code/yarn.lock b/code/yarn.lock index 915d4281a0ba..f0b314feb3db 100644 --- a/code/yarn.lock +++ b/code/yarn.lock @@ -6372,7 +6372,7 @@ __metadata: react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 rxjs: ^6.0.0 || ^7.4.0 typescript: ^4.0.0 || ^5.0.0 - zone.js: ^0.8.29 || >= 0.9.0 < 1.0.0 + zone.js: ">= 0.11.1 < 1.0.0" peerDependenciesMeta: "@angular/cli": optional: true From ed18a24d6477ddd3de7a41d6a91d31fb7ac22451 Mon Sep 17 00:00:00 2001 From: Jeppe Reinhold Date: Wed, 4 Oct 2023 14:45:08 +0200 Subject: [PATCH 53/83] move ensure-next-ahead from a bash script to a tested node script --- .github/workflows/publish.yml | 19 +--- scripts/package.json | 1 + .../__tests__/ensure-next-ahead.test.ts | 85 +++++++++++++++ scripts/release/ensure-next-ahead.ts | 102 ++++++++++++++++++ 4 files changed, 189 insertions(+), 18 deletions(-) create mode 100644 scripts/release/__tests__/ensure-next-ahead.test.ts create mode 100644 scripts/release/ensure-next-ahead.ts diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index acb787424846..be37b132b1fc 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -165,31 +165,14 @@ jobs: git merge ${{ github.ref_name }} git push origin ${{ steps.target.outputs.target }} - # This step ensures that next is always one minor ahead of main - # this is needed when releasing a stable from next - # next will be at eg. 7.4.0-alpha.4, and main will be at 7.3.0 - # then we release 7.4.0 by merging next to latest-release to main - # we then ensure here that next is bumped to 7.5.0 - without releasing it - # if this is a patch release bumping main to 7.3.1, next will not be touched because it's already ahead - name: Ensure `next` is a minor version ahead of `main` if: steps.target.outputs.target == 'main' run: | git checkout next git pull - CODE_PKG_JSON=$(cat ../code/package.json) - VERSION_ON_NEXT=$(echo $CODE_PKG_JSON | jq --raw-output '.version') - VERSION_ON_MAIN="${{ steps.version.outputs.current-version }}" + yarn release:ensure-next-ahead --main-version "${{ steps.version.outputs.current-version }}" - # skip if next is already ahead of main - if NEXT_IS_AHEAD=$(npx semver --include-prerelease --range ">=$VERSION_ON_MAIN" "$VERSION_ON_NEXT" 2>/dev/null); then - return - fi - - # temporarily set the version on next to be the same as main... - echo "$CODE_PKG_JSON" | jq --arg version "$VERSION_ON_MAIN" '.version = $version' > ../code/package.json - # ... then bump it by one minor - yarn release:version --release-type minor git add .. git commit -m "Bump next to be one minor ahead of main [skip ci]" git push origin next diff --git a/scripts/package.json b/scripts/package.json index 906bb2b95926..4cd557a0736e 100644 --- a/scripts/package.json +++ b/scripts/package.json @@ -13,6 +13,7 @@ "lint:js:cmd": "cross-env NODE_ENV=production eslint --cache --cache-location=../.cache/eslint --ext .js,.jsx,.json,.html,.ts,.tsx,.mjs --report-unused-disable-directives", "lint:package": "sort-package-json", "migrate-docs": "node --require esbuild-register ./ts-to-ts49.ts", + "release:ensure-next-ahead": "ts-node --swc ./release/ensure-next-ahead.ts", "release:generate-pr-description": "ts-node --swc ./release/generate-pr-description.ts", "release:get-changelog-from-file": "ts-node --swc ./release/get-changelog-from-file.ts", "release:get-current-version": "ts-node --swc ./release/get-current-version.ts", diff --git a/scripts/release/__tests__/ensure-next-ahead.test.ts b/scripts/release/__tests__/ensure-next-ahead.test.ts new file mode 100644 index 000000000000..0b192d39b106 --- /dev/null +++ b/scripts/release/__tests__/ensure-next-ahead.test.ts @@ -0,0 +1,85 @@ +/* eslint-disable global-require */ +/* eslint-disable no-underscore-dangle */ +import path from 'path'; +import { run as ensureNextAhead } from '../ensure-next-ahead'; +import * as gitClient_ from '../utils/git-client'; +import * as bumpVersion_ from '../version'; + +jest.mock('../utils/git-client', () => jest.requireActual('jest-mock-extended').mockDeep()); +const gitClient = jest.mocked(gitClient_); + +// eslint-disable-next-line jest/no-mocks-import +jest.mock('fs-extra', () => require('../../../code/__mocks__/fs-extra')); +const fsExtra = require('fs-extra'); + +jest.mock('../version', () => jest.requireActual('jest-mock-extended').mockDeep()); +const bumpVersion = jest.mocked(bumpVersion_); + +jest.spyOn(console, 'log').mockImplementation(() => {}); +jest.spyOn(console, 'warn').mockImplementation(() => {}); +jest.spyOn(console, 'error').mockImplementation(() => {}); + +const CODE_PACKAGE_JSON_PATH = path.join(__dirname, '..', '..', '..', 'code', 'package.json'); + +describe('Ensure next ahead', () => { + beforeEach(() => { + jest.clearAllMocks(); + gitClient.git.status.mockResolvedValue({ current: 'next' } as any); + fsExtra.__setMockFiles({ + [CODE_PACKAGE_JSON_PATH]: JSON.stringify({ version: '2.0.0' }), + }); + }); + + it('should throw when main-version is missing', async () => { + await expect(ensureNextAhead({})).rejects.toThrowErrorMatchingInlineSnapshot(` + "[ + { + "code": "invalid_type", + "expected": "string", + "received": "undefined", + "path": [ + "mainVersion" + ], + "message": "Required" + } + ]" + `); + }); + + it('should throw when main-version is not a semver string', async () => { + await expect(ensureNextAhead({ mainVersion: '200' })).rejects + .toThrowErrorMatchingInlineSnapshot(` + "[ + { + "code": "custom", + "message": "main-version must be a valid semver version string like '7.4.2'.", + "path": [] + } + ]" + `); + }); + + it('should not bump version when next is already ahead of main', async () => { + await expect(ensureNextAhead({ mainVersion: '1.0.0' })).resolves.toBeUndefined(); + expect(bumpVersion.run).not.toHaveBeenCalled(); + }); + + it('should bump version to 3.1.0-alpha.0 when main is 3.0.0 and next is 2.0.0', async () => { + await expect(ensureNextAhead({ mainVersion: '3.0.0' })).resolves.toBeUndefined(); + expect(bumpVersion.run).toHaveBeenCalledWith({ exact: '3.1.0-alpha.0' }); + }); + + it('should bump version to 2.1.0-alpha.0 when main and next are both 2.0.0', async () => { + await expect(ensureNextAhead({ mainVersion: '2.0.0' })).resolves.toBeUndefined(); + expect(bumpVersion.run).toHaveBeenCalledWith({ exact: '2.1.0-alpha.0' }); + }); + + it('should bump version to 2.1.0-alpha.0 when main is 2.0.0 and and next is 2.0.0-rc.10', async () => { + fsExtra.__setMockFiles({ + [CODE_PACKAGE_JSON_PATH]: JSON.stringify({ version: '2.0.0-rc.10' }), + }); + + await expect(ensureNextAhead({ mainVersion: '2.0.0' })).resolves.toBeUndefined(); + expect(bumpVersion.run).toHaveBeenCalledWith({ exact: '2.1.0-alpha.0' }); + }); +}); diff --git a/scripts/release/ensure-next-ahead.ts b/scripts/release/ensure-next-ahead.ts new file mode 100644 index 000000000000..280f5fd00fa9 --- /dev/null +++ b/scripts/release/ensure-next-ahead.ts @@ -0,0 +1,102 @@ +/** + * This script ensures that next is always one minor ahead of main. + * This is needed when releasing a stable from next. + * Next will be at eg. 7.4.0-alpha.4, and main will be at 7.3.0. + * Then we release 7.4.0 by merging next to latest-release to main. + * We then ensure here that next is bumped to 7.5.0-alpha.0 - without releasing it. + * If this is a patch release bumping main to 7.3.1, next will not be touched because it's already ahead. + */ + +/* eslint-disable no-console */ +import chalk from 'chalk'; +import path from 'path'; +import program from 'commander'; +import semver from 'semver'; +import { z } from 'zod'; +import { readJson } from 'fs-extra'; +import dedent from 'ts-dedent'; +import { run as bumpVersion } from './version'; +import { git } from './utils/git-client'; + +program + .name('ensure-next-ahead') + .description('ensure the "next" branch is always a minor version ahead of "main"') + .requiredOption('-M, --main-version ', 'The version currently on the "main" branch'); + +const optionsSchema = z + .object({ + mainVersion: z.string(), + }) + .refine((schema) => semver.valid(schema.mainVersion), { + message: "main-version must be a valid semver version string like '7.4.2'.", + }); + +type Options = { + mainVersion: string; +}; + +const CODE_DIR_PATH = path.join(__dirname, '..', '..', 'code'); +const CODE_PACKAGE_JSON_PATH = path.join(CODE_DIR_PATH, 'package.json'); + +const validateOptions = (options: { [key: string]: any }): options is Options => { + optionsSchema.parse(options); + return true; +}; + +const getCurrentVersion = async () => { + const { version } = await readJson(CODE_PACKAGE_JSON_PATH); + console.log(`📐 Current version of Storybook is ${chalk.green(version)}`); + return version; +}; + +export const run = async (options: unknown) => { + if (!validateOptions(options)) { + return; + } + const { mainVersion } = options; + + const { current: currentGitBranch } = await git.status(); + + if (currentGitBranch !== 'next') { + console.warn( + `🚧 The current branch is not "next" but "${currentGitBranch}", this only really makes sense to run on the "next" branch.` + ); + } + + // Get the current version from code/package.json + const currentNextVersion = await getCurrentVersion(); + if (semver.gt(currentNextVersion, mainVersion)) { + console.log( + `✅ The version on next (${chalk.green( + currentNextVersion + )}) is already ahead of the version on main (${chalk.green(mainVersion)}), no action needed.` + ); + return; + } + + const nextNextVersion = `${semver.inc(mainVersion, 'minor')}-alpha.0`; + + console.log( + `🤜 The version on next (${chalk.green( + currentNextVersion + )}) is behind the version on main (${chalk.green(mainVersion)}), bumping to ${chalk.blue( + nextNextVersion + )}...` + ); + + await bumpVersion({ exact: nextNextVersion }); + + console.log( + `✅ bumped all versions to ${chalk.green( + nextNextVersion + )}, remember to commit and push to next.` + ); +}; + +if (require.main === module) { + const parsed = program.parse(); + run(parsed.opts()).catch((err) => { + console.error(err); + process.exit(1); + }); +} From 19b8468770d8edcf9db515f1c8b0572fec764212 Mon Sep 17 00:00:00 2001 From: Yann Braga Date: Wed, 4 Oct 2023 15:19:33 +0200 Subject: [PATCH 54/83] add error class to error name --- .../core-events/src/errors/storybook-error.test.ts | 2 +- code/lib/core-events/src/errors/storybook-error.ts | 14 ++++++++++---- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/code/lib/core-events/src/errors/storybook-error.test.ts b/code/lib/core-events/src/errors/storybook-error.test.ts index dc26a50f9679..63c9ec904b2d 100644 --- a/code/lib/core-events/src/errors/storybook-error.test.ts +++ b/code/lib/core-events/src/errors/storybook-error.test.ts @@ -13,7 +13,7 @@ describe('StorybookError', () => { it('should generate the correct error name', () => { const error = new TestError(); - expect(error.name).toBe('SB_TEST_CATEGORY_0123'); + expect(error.name).toBe('SB_TEST_CATEGORY_0123 (TestError)'); }); it('should generate the correct message without documentation link', () => { diff --git a/code/lib/core-events/src/errors/storybook-error.ts b/code/lib/core-events/src/errors/storybook-error.ts index 40158190d93a..393b0f424f80 100644 --- a/code/lib/core-events/src/errors/storybook-error.ts +++ b/code/lib/core-events/src/errors/storybook-error.ts @@ -33,12 +33,18 @@ export abstract class StorybookError extends Error { */ readonly fromStorybook: true = true as const; + get fullErrorCode() { + const paddedCode = String(this.code).padStart(4, '0'); + return `SB_${this.category}_${paddedCode}` as `SB_${this['category']}_${string}`; + } + /** * Overrides the default `Error.name` property in the format: SB__. */ get name() { - const paddedCode = String(this.code).padStart(4, '0'); - return `SB_${this.category}_${paddedCode}` as `SB_${this['category']}_${string}`; + const errorName = this.constructor.name; + + return `${this.fullErrorCode} (${errorName})`; } /** @@ -48,13 +54,13 @@ export abstract class StorybookError extends Error { let page: string | undefined; if (this.documentation === true) { - page = `https://storybook.js.org/error/${this.name}`; + page = `https://storybook.js.org/error/${this.fullErrorCode}`; } else if (typeof this.documentation === 'string') { page = this.documentation; } else if (Array.isArray(this.documentation)) { page = `\n${this.documentation.map((doc) => `\t- ${doc}`).join('\n')}`; } - return this.template() + (page != null ? `\n\nMore info: ${page}\n` : ''); + return `${this.template()}${page != null ? `\n\nMore info: ${page}\n` : ''}`; } } From b4424c1cc38d05a5655d8ccbe8b0a391cf018973 Mon Sep 17 00:00:00 2001 From: Valentin Palkovic Date: Wed, 4 Oct 2023 15:46:35 +0200 Subject: [PATCH 55/83] Pin some package versions --- code/frameworks/nextjs/package.json | 2 +- code/renderers/svelte/package.json | 2 +- code/yarn.lock | 153 ++++++++++++++++------------ scripts/yarn.lock | 25 +++-- 4 files changed, 104 insertions(+), 78 deletions(-) diff --git a/code/frameworks/nextjs/package.json b/code/frameworks/nextjs/package.json index a5fae0c402c5..3d92fc262f44 100644 --- a/code/frameworks/nextjs/package.json +++ b/code/frameworks/nextjs/package.json @@ -124,7 +124,7 @@ "@types/babel__core": "^7", "@types/babel__plugin-transform-runtime": "^7", "@types/babel__preset-env": "^7", - "next": "^13.4.8", + "next": "13.4.19", "typescript": "^4.9.3", "webpack": "^5.65.0" }, diff --git a/code/renderers/svelte/package.json b/code/renderers/svelte/package.json index 8aaa390671be..329926365d73 100644 --- a/code/renderers/svelte/package.json +++ b/code/renderers/svelte/package.json @@ -66,7 +66,7 @@ "devDependencies": { "expect-type": "^0.15.0", "svelte": "^4.0.0", - "svelte-check": "^3.4.3", + "svelte-check": "3.4.6", "typescript": "^5.0.4" }, "peerDependencies": { diff --git a/code/yarn.lock b/code/yarn.lock index f0b314feb3db..5f41d6621284 100644 --- a/code/yarn.lock +++ b/code/yarn.lock @@ -3973,72 +3973,72 @@ __metadata: languageName: node linkType: hard -"@next/env@npm:13.5.4": - version: 13.5.4 - resolution: "@next/env@npm:13.5.4" - checksum: 69c013047371bde6c4dc6d03ec77140059bd4e3db38c1991a8aa8a9c8ce4d1370b98a141145a6f60e23f32ce97a3040b448bfd0455b0d9e5ba6efda8df33c89f +"@next/env@npm:13.4.19": + version: 13.4.19 + resolution: "@next/env@npm:13.4.19" + checksum: 0d9cb76fedcde6f8116c5f029d999cccaf929c9eb8c55daf1d38ae223a80113abae28834e537b26b81731d84ed14fd5231301b2126cd7d9097a7e175dd79bf59 languageName: node linkType: hard -"@next/swc-darwin-arm64@npm:13.5.4": - version: 13.5.4 - resolution: "@next/swc-darwin-arm64@npm:13.5.4" +"@next/swc-darwin-arm64@npm:13.4.19": + version: 13.4.19 + resolution: "@next/swc-darwin-arm64@npm:13.4.19" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@next/swc-darwin-x64@npm:13.5.4": - version: 13.5.4 - resolution: "@next/swc-darwin-x64@npm:13.5.4" +"@next/swc-darwin-x64@npm:13.4.19": + version: 13.4.19 + resolution: "@next/swc-darwin-x64@npm:13.4.19" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@next/swc-linux-arm64-gnu@npm:13.5.4": - version: 13.5.4 - resolution: "@next/swc-linux-arm64-gnu@npm:13.5.4" +"@next/swc-linux-arm64-gnu@npm:13.4.19": + version: 13.4.19 + resolution: "@next/swc-linux-arm64-gnu@npm:13.4.19" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@next/swc-linux-arm64-musl@npm:13.5.4": - version: 13.5.4 - resolution: "@next/swc-linux-arm64-musl@npm:13.5.4" +"@next/swc-linux-arm64-musl@npm:13.4.19": + version: 13.4.19 + resolution: "@next/swc-linux-arm64-musl@npm:13.4.19" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@next/swc-linux-x64-gnu@npm:13.5.4": - version: 13.5.4 - resolution: "@next/swc-linux-x64-gnu@npm:13.5.4" +"@next/swc-linux-x64-gnu@npm:13.4.19": + version: 13.4.19 + resolution: "@next/swc-linux-x64-gnu@npm:13.4.19" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@next/swc-linux-x64-musl@npm:13.5.4": - version: 13.5.4 - resolution: "@next/swc-linux-x64-musl@npm:13.5.4" +"@next/swc-linux-x64-musl@npm:13.4.19": + version: 13.4.19 + resolution: "@next/swc-linux-x64-musl@npm:13.4.19" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@next/swc-win32-arm64-msvc@npm:13.5.4": - version: 13.5.4 - resolution: "@next/swc-win32-arm64-msvc@npm:13.5.4" +"@next/swc-win32-arm64-msvc@npm:13.4.19": + version: 13.4.19 + resolution: "@next/swc-win32-arm64-msvc@npm:13.4.19" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@next/swc-win32-ia32-msvc@npm:13.5.4": - version: 13.5.4 - resolution: "@next/swc-win32-ia32-msvc@npm:13.5.4" +"@next/swc-win32-ia32-msvc@npm:13.4.19": + version: 13.4.19 + resolution: "@next/swc-win32-ia32-msvc@npm:13.4.19" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@next/swc-win32-x64-msvc@npm:13.5.4": - version: 13.5.4 - resolution: "@next/swc-win32-x64-msvc@npm:13.5.4" +"@next/swc-win32-x64-msvc@npm:13.4.19": + version: 13.4.19 + resolution: "@next/swc-win32-x64-msvc@npm:13.4.19" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -7275,7 +7275,7 @@ __metadata: fs-extra: ^11.1.0 image-size: ^1.0.0 loader-utils: ^3.2.0 - next: ^13.4.8 + next: 13.4.19 node-polyfill-webpack-plugin: ^2.0.1 pnp-webpack-plugin: ^1.7.0 postcss: ^8.4.21 @@ -8056,7 +8056,7 @@ __metadata: "@storybook/types": "workspace:*" expect-type: ^0.15.0 svelte: ^4.0.0 - svelte-check: ^3.4.3 + svelte-check: 3.4.6 sveltedoc-parser: ^4.2.1 type-fest: ~2.19 typescript: ^5.0.4 @@ -8641,12 +8641,12 @@ __metadata: languageName: node linkType: hard -"@swc/helpers@npm:0.5.2": - version: 0.5.2 - resolution: "@swc/helpers@npm:0.5.2" +"@swc/helpers@npm:0.5.1": + version: 0.5.1 + resolution: "@swc/helpers@npm:0.5.1" dependencies: tslib: ^2.4.0 - checksum: b6fa49bcf6c00571d0eb7837b163f8609960d4d77538160585e27ed167361e9776bd6e5eb9646ffac2fb4d43c58df9ca50dab9d96ab097e6591bc82a75fd1164 + checksum: 2e2272c8278351670e1daf27cc634ace793afb378dcc85be2800d30a7b4d3afad37707371ead2a6d96662fa30294da678d66cdc4dc7f3e698bd8e111235c60fc languageName: node linkType: hard @@ -23793,7 +23793,7 @@ __metadata: languageName: node linkType: hard -"nanoid@npm:^3.3.6": +"nanoid@npm:^3.3.4, nanoid@npm:^3.3.6": version: 3.3.6 resolution: "nanoid@npm:3.3.6" bin: @@ -23888,26 +23888,27 @@ __metadata: languageName: node linkType: hard -"next@npm:^13.4.8": - version: 13.5.4 - resolution: "next@npm:13.5.4" +"next@npm:13.4.19": + version: 13.4.19 + resolution: "next@npm:13.4.19" dependencies: - "@next/env": 13.5.4 - "@next/swc-darwin-arm64": 13.5.4 - "@next/swc-darwin-x64": 13.5.4 - "@next/swc-linux-arm64-gnu": 13.5.4 - "@next/swc-linux-arm64-musl": 13.5.4 - "@next/swc-linux-x64-gnu": 13.5.4 - "@next/swc-linux-x64-musl": 13.5.4 - "@next/swc-win32-arm64-msvc": 13.5.4 - "@next/swc-win32-ia32-msvc": 13.5.4 - "@next/swc-win32-x64-msvc": 13.5.4 - "@swc/helpers": 0.5.2 + "@next/env": 13.4.19 + "@next/swc-darwin-arm64": 13.4.19 + "@next/swc-darwin-x64": 13.4.19 + "@next/swc-linux-arm64-gnu": 13.4.19 + "@next/swc-linux-arm64-musl": 13.4.19 + "@next/swc-linux-x64-gnu": 13.4.19 + "@next/swc-linux-x64-musl": 13.4.19 + "@next/swc-win32-arm64-msvc": 13.4.19 + "@next/swc-win32-ia32-msvc": 13.4.19 + "@next/swc-win32-x64-msvc": 13.4.19 + "@swc/helpers": 0.5.1 busboy: 1.6.0 caniuse-lite: ^1.0.30001406 - postcss: 8.4.31 + postcss: 8.4.14 styled-jsx: 5.1.1 watchpack: 2.4.0 + zod: 3.21.4 peerDependencies: "@opentelemetry/api": ^1.1.0 react: ^18.2.0 @@ -23939,7 +23940,7 @@ __metadata: optional: true bin: next: dist/bin/next - checksum: 0b0bc7fa42844859a0444a79122a48b5e65116c30ce077a3edaaecd7cee1d7925214a659391ae6ecf8dc612869a7a646ab3a1a8aa12d074ff17e3f18c53a2621 + checksum: 557fd15a52220f003ec88a79f51de41c5bb9cda5294944985f31ce45e75f98dd3caf902896d8419d96cc81596976671e953391b1eb3707757d261e362a242310 languageName: node linkType: hard @@ -26064,25 +26065,25 @@ __metadata: languageName: node linkType: hard -"postcss@npm:8.4.27": - version: 8.4.27 - resolution: "postcss@npm:8.4.27" +"postcss@npm:8.4.14": + version: 8.4.14 + resolution: "postcss@npm:8.4.14" dependencies: - nanoid: ^3.3.6 + nanoid: ^3.3.4 picocolors: ^1.0.0 source-map-js: ^1.0.2 - checksum: 41a0476e05cb97514ff8d75e4ff9fdcf778f22b2e0d25b7028f219cd408e01d3c4f50459d4a1cd9a430d8ef08202c881374a4fa4ea6009f4a135a07315d606e5 + checksum: 2a4cfa28e2f1bfd358313501f7771bd596e494487c7b735c492e2f8b1faf493d24fcb43e2e6ad825863fc65a77abb949ca8f228602ae46a022f02dc812c4ac8b languageName: node linkType: hard -"postcss@npm:8.4.31, postcss@npm:^8.1.10, postcss@npm:^8.2.14, postcss@npm:^8.4.14, postcss@npm:^8.4.21, postcss@npm:^8.4.23, postcss@npm:^8.4.26, postcss@npm:^8.4.27": - version: 8.4.31 - resolution: "postcss@npm:8.4.31" +"postcss@npm:8.4.27": + version: 8.4.27 + resolution: "postcss@npm:8.4.27" dependencies: nanoid: ^3.3.6 picocolors: ^1.0.0 source-map-js: ^1.0.2 - checksum: 748b82e6e5fc34034dcf2ae88ea3d11fd09f69b6c50ecdd3b4a875cfc7cdca435c958b211e2cb52355422ab6fccb7d8f2f2923161d7a1b281029e4a913d59acf + checksum: 41a0476e05cb97514ff8d75e4ff9fdcf778f22b2e0d25b7028f219cd408e01d3c4f50459d4a1cd9a430d8ef08202c881374a4fa4ea6009f4a135a07315d606e5 languageName: node linkType: hard @@ -26096,6 +26097,17 @@ __metadata: languageName: node linkType: hard +"postcss@npm:^8.1.10, postcss@npm:^8.2.14, postcss@npm:^8.4.14, postcss@npm:^8.4.21, postcss@npm:^8.4.23, postcss@npm:^8.4.26, postcss@npm:^8.4.27": + version: 8.4.31 + resolution: "postcss@npm:8.4.31" + dependencies: + nanoid: ^3.3.6 + picocolors: ^1.0.0 + source-map-js: ^1.0.2 + checksum: 748b82e6e5fc34034dcf2ae88ea3d11fd09f69b6c50ecdd3b4a875cfc7cdca435c958b211e2cb52355422ab6fccb7d8f2f2923161d7a1b281029e4a913d59acf + languageName: node + linkType: hard + "preact-render-to-string@npm:^5.1.19": version: 5.2.6 resolution: "preact-render-to-string@npm:5.2.6" @@ -29962,9 +29974,9 @@ __metadata: languageName: node linkType: hard -"svelte-check@npm:^3.4.3": - version: 3.5.2 - resolution: "svelte-check@npm:3.5.2" +"svelte-check@npm:3.4.6": + version: 3.4.6 + resolution: "svelte-check@npm:3.4.6" dependencies: "@jridgewell/trace-mapping": ^0.3.17 chokidar: ^3.4.1 @@ -29978,7 +29990,7 @@ __metadata: svelte: ^3.55.0 || ^4.0.0-next.0 || ^4.0.0 bin: svelte-check: bin/svelte-check - checksum: a07f0f036918351b60dc991a860c746ab20cbeb4cef71be62918fd80d7f81d562a85d6e783ab3d2a19c31c180a4cf9af68a33ffae80ccce185596381876d405d + checksum: 7f537831af8f2c47859ca72f4a929d24c58f2946f949f7c9721351be97ff9d0674c57db003e3ad3883fdd85761b7950c5c11513c2a917c91091f155e2d026350 languageName: node linkType: hard @@ -33272,6 +33284,13 @@ __metadata: languageName: node linkType: hard +"zod@npm:3.21.4": + version: 3.21.4 + resolution: "zod@npm:3.21.4" + checksum: 161e8cf7aea38a99244d65da4a9477d9d966f6a533e503feaa20ff7968a9691065c38c6f1eab5cbbdc8374142fff4a05c9cacb8479803ab50ab6a6ca80e5d624 + languageName: node + linkType: hard + "zone.js@npm:^0.13.0": version: 0.13.3 resolution: "zone.js@npm:0.13.3" diff --git a/scripts/yarn.lock b/scripts/yarn.lock index ee865b1b5b66..19568a9f4a70 100644 --- a/scripts/yarn.lock +++ b/scripts/yarn.lock @@ -1712,13 +1712,20 @@ __metadata: languageName: node linkType: hard -"@eslint-community/regexpp@npm:^4.4.0, @eslint-community/regexpp@npm:^4.6.1": +"@eslint-community/regexpp@npm:^4.4.0": version: 4.8.1 resolution: "@eslint-community/regexpp@npm:4.8.1" checksum: 3443b17de28e42ff2ff07ca6b3488c5d016a01fbedf89dce6c80f6bd4138ec3cf49754dba667844e071bb3fa0b31432e1e6ac6929b32f0bf17ced57073820ec2 languageName: node linkType: hard +"@eslint-community/regexpp@npm:^4.6.1": + version: 4.9.1 + resolution: "@eslint-community/regexpp@npm:4.9.1" + checksum: d0e1bd1a37cb2cb6bbac88dfe97b62b412d4b6ea3a4bb1c4e1e503be03125063db5d80999cef9728f57b19b49979aa902ac68182bcf5f80dfce6fa9a9d34eee1 + languageName: node + linkType: hard + "@eslint/eslintrc@npm:^2.1.2": version: 2.1.2 resolution: "@eslint/eslintrc@npm:2.1.2" @@ -1736,10 +1743,10 @@ __metadata: languageName: node linkType: hard -"@eslint/js@npm:8.49.0": - version: 8.49.0 - resolution: "@eslint/js@npm:8.49.0" - checksum: 40b4255866161e16b09eae1830c8ff7379276659ee7ce039e4708bcf3c5a5fd8b95418d32c355294e6c738f23ab42f3e3a55100dffb389edd5d5233ca47c01b3 +"@eslint/js@npm:8.50.0": + version: 8.50.0 + resolution: "@eslint/js@npm:8.50.0" + checksum: 92cb0a823869e85f287bd172f14a6a20d7d65c3f4db886a0356a9efebfe8fe519e9ead84a5687bd18f45eca417bdcce96e3b83fe3feae8baf0f8f44d14073bae languageName: node linkType: hard @@ -7521,13 +7528,13 @@ __metadata: linkType: hard "eslint@npm:^8.28.0": - version: 8.49.0 - resolution: "eslint@npm:8.49.0" + version: 8.50.0 + resolution: "eslint@npm:8.50.0" dependencies: "@eslint-community/eslint-utils": ^4.2.0 "@eslint-community/regexpp": ^4.6.1 "@eslint/eslintrc": ^2.1.2 - "@eslint/js": 8.49.0 + "@eslint/js": 8.50.0 "@humanwhocodes/config-array": ^0.11.11 "@humanwhocodes/module-importer": ^1.0.1 "@nodelib/fs.walk": ^1.2.8 @@ -7563,7 +7570,7 @@ __metadata: text-table: ^0.2.0 bin: eslint: bin/eslint.js - checksum: 8d6985a8d60379ea714ad35d7a3d8762ac8c37b986c615e9a7c245794faddf68f61f997ba6f5f903d440e92065a56a4f7832a45adc2d4fc6e977026782f25835 + checksum: 91629528cb240bc61b25480574d35cd54ed444cb61a70fa76f7d5ab26af2b637b94bf8fba94403c9052c1baa944a169b6ab9cc8070496e925f7eeef730ff9038 languageName: node linkType: hard From 8e83b97b02ae678fe79b0dc0986be557943caff9 Mon Sep 17 00:00:00 2001 From: Valentin Palkovic Date: Wed, 4 Oct 2023 15:47:07 +0200 Subject: [PATCH 56/83] Fix types --- code/frameworks/angular/src/builders/utils/error-handler.ts | 2 +- code/ui/components/src/components/Zoom/ZoomIFrame.tsx | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/code/frameworks/angular/src/builders/utils/error-handler.ts b/code/frameworks/angular/src/builders/utils/error-handler.ts index 2673dbfd0b87..f2ff150495cf 100644 --- a/code/frameworks/angular/src/builders/utils/error-handler.ts +++ b/code/frameworks/angular/src/builders/utils/error-handler.ts @@ -12,7 +12,7 @@ export const printErrorDetails = (error: any): void => { } else if ((error as any).stats && (error as any).stats.compilation.errors) { (error as any).stats.compilation.errors.forEach((e: any) => logger.plain(e)); } else { - logger.error(error); + logger.error(error as any); } } else if (error.compilation?.errors) { error.compilation.errors.forEach((e: any) => logger.plain(e)); diff --git a/code/ui/components/src/components/Zoom/ZoomIFrame.tsx b/code/ui/components/src/components/Zoom/ZoomIFrame.tsx index 3101364bd861..509ef5ce4d85 100644 --- a/code/ui/components/src/components/Zoom/ZoomIFrame.tsx +++ b/code/ui/components/src/components/Zoom/ZoomIFrame.tsx @@ -1,5 +1,5 @@ import type { RefObject, ReactElement } from 'react'; -import { Component } from 'react'; +import React, { Component } from 'react'; export type IZoomIFrameProps = { scale: number; @@ -57,6 +57,6 @@ export class ZoomIFrame extends Component { render() { const { children } = this.props; - return children; + return <>{children}; } } From 556569e5e70b2b20eb8a9d460ad82d1e1a18d610 Mon Sep 17 00:00:00 2001 From: Yann Braga Date: Wed, 4 Oct 2023 17:57:38 +0200 Subject: [PATCH 57/83] update @storybook/jest --- code/yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/yarn.lock b/code/yarn.lock index 5f41d6621284..ddb34e7b1efa 100644 --- a/code/yarn.lock +++ b/code/yarn.lock @@ -7123,14 +7123,14 @@ __metadata: linkType: soft "@storybook/jest@npm:next": - version: 0.2.2-next.0 - resolution: "@storybook/jest@npm:0.2.2-next.0" + version: 0.2.3-next.0 + resolution: "@storybook/jest@npm:0.2.3-next.0" dependencies: "@storybook/expect": storybook-jest "@testing-library/jest-dom": ^6.1.2 "@types/jest": 28.1.3 jest-mock: ^27.3.0 - checksum: f89149436e0506cfa33fb8678a4d3bcb8fadc16e6a00905c92e9da716772cb5a65e8bdc07f6a7f536e3940af3c676c41857f4093eaed4c3f12c074d45c92e661 + checksum: 96e800be9adb18d689ff66efe3b953f06d3c209cb0a08559ea47a6de0cd09678e161bdd531cb2d008d58eecc33cb9cb49228e9014435818f3259e1b9eac46635 languageName: node linkType: hard From c028ce22cd6051846a62f6443589352bbf6e32be Mon Sep 17 00:00:00 2001 From: Yann Braga Date: Wed, 4 Oct 2023 19:05:11 +0200 Subject: [PATCH 58/83] always set --no-link when creating angular sandboxes --- scripts/tasks/sandbox.ts | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/scripts/tasks/sandbox.ts b/scripts/tasks/sandbox.ts index 24b946049631..117d10948b51 100644 --- a/scripts/tasks/sandbox.ts +++ b/scripts/tasks/sandbox.ts @@ -25,12 +25,24 @@ export const sandbox: Task = { return pathExists(sandboxDir); }, async run(details, options) { - if (options.link && details.template.inDevelopment) { - logger.log( - `The ${options.template} has inDevelopment property enabled, therefore the sandbox for that template cannot be linked. Enabling --no-link mode..` - ); - // eslint-disable-next-line no-param-reassign - options.link = false; + if (options.link) { + if (details.template.expected.framework === '@storybook/angular') { + // In Angular, tsc is spawn via Webpack and for some reason it follows the symlinks and doesn’t recognize it as node_modules. Hence, it does type checking on regular files. + // Angular's tsconfig compilerOptions are more strict than the ones in the mono-repo and results in many errors, therefore we use --no-link to circumvent them. + logger.log( + `Detected an Angular sandbox, which cannot be linked. Enabling --no-link mode..` + ); + // eslint-disable-next-line no-param-reassign + options.link = false; + } + + if (details.template.inDevelopment) { + logger.log( + `The ${options.template} has inDevelopment property enabled, therefore the sandbox for that template cannot be linked. Enabling --no-link mode..` + ); + // eslint-disable-next-line no-param-reassign + options.link = false; + } } if (await this.ready(details)) { logger.info('🗑 Removing old sandbox dir'); From 930adf4da6bb7bd7b6065920c60b9471877c4038 Mon Sep 17 00:00:00 2001 From: Jeppe Reinhold Date: Wed, 4 Oct 2023 22:59:17 +0200 Subject: [PATCH 59/83] move bash script to cancel preparation runs to tested node script --- .github/workflows/publish.yml | 17 +-- scripts/package.json | 2 + .../__tests__/cancel-preparation-runs.test.ts | 107 ++++++++++++++++++ scripts/release/cancel-preparation-runs.ts | 107 ++++++++++++++++++ scripts/release/utils/github-client.ts | 9 ++ scripts/yarn.lock | 52 +++++++++ 6 files changed, 280 insertions(+), 14 deletions(-) create mode 100644 scripts/release/__tests__/cancel-preparation-runs.test.ts create mode 100644 scripts/release/cancel-preparation-runs.ts diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index be37b132b1fc..df82ca33c9a5 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -37,20 +37,9 @@ jobs: gh run watch ${{ github.run_id }} - name: Cancel all release preparation runs - run: | - # Get a list of all running or pending release preparation runs - # combining both the prepare-patch-release.yml and prepare-non-patch-release.yml workflows - RUNNING_RELEASE_PREPARATIONS=$( - { - gh run list --limit 50 --workflow=prepare-patch-release.yml --json databaseId,status - gh run list --limit 50 --workflow=prepare-non-patch-release.yml --json databaseId,status - } | jq -rc '.[] | select(.status | contains("in_progress", "pending", "queued", "requested", "waiting")) | .databaseId' - ) - - # Loop through each run and pass it to the "gh run cancel" command - while IFS= read -r databaseId; do - gh run cancel "$databaseId" - done <<< "$RUNNING_RELEASE_PREPARATIONS" + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: yarn release:cancel-preparation-runs - name: Checkout ${{ github.ref_name }} uses: actions/checkout@v3 diff --git a/scripts/package.json b/scripts/package.json index 4cd557a0736e..9514d8fe5865 100644 --- a/scripts/package.json +++ b/scripts/package.json @@ -13,6 +13,7 @@ "lint:js:cmd": "cross-env NODE_ENV=production eslint --cache --cache-location=../.cache/eslint --ext .js,.jsx,.json,.html,.ts,.tsx,.mjs --report-unused-disable-directives", "lint:package": "sort-package-json", "migrate-docs": "node --require esbuild-register ./ts-to-ts49.ts", + "release:cancel-preparation-runs": "ts-node --swc ./release/cancel-preparation-runs.ts", "release:ensure-next-ahead": "ts-node --swc ./release/ensure-next-ahead.ts", "release:generate-pr-description": "ts-node --swc ./release/generate-pr-description.ts", "release:get-changelog-from-file": "ts-node --swc ./release/get-changelog-from-file.ts", @@ -74,6 +75,7 @@ "@jest/globals": "^29.3.1", "@nx/workspace": "16.2.1", "@octokit/graphql": "^5.0.5", + "@octokit/request": "^8.1.2", "@storybook/eslint-config-storybook": "^3.1.2", "@storybook/jest": "next", "@storybook/linter-config": "^3.1.2", diff --git a/scripts/release/__tests__/cancel-preparation-runs.test.ts b/scripts/release/__tests__/cancel-preparation-runs.test.ts new file mode 100644 index 000000000000..aaf8cdbec718 --- /dev/null +++ b/scripts/release/__tests__/cancel-preparation-runs.test.ts @@ -0,0 +1,107 @@ +/* eslint-disable global-require */ +/* eslint-disable no-underscore-dangle */ +import { + PREPARE_NON_PATCH_WORKFLOW_PATH, + PREPARE_PATCH_WORKFLOW_PATH, + run as cancelPreparationWorkflows, +} from '../cancel-preparation-runs'; +import * as github_ from '../utils/github-client'; + +jest.mock('../utils/github-client'); + +const github = jest.mocked(github_); + +jest.spyOn(console, 'log').mockImplementation(() => {}); +jest.spyOn(console, 'warn').mockImplementation(() => {}); +jest.spyOn(console, 'error').mockImplementation(() => {}); + +describe('Cancel preparation runs', () => { + beforeEach(() => { + jest.clearAllMocks(); + github.githubRestClient.mockImplementation(((route: string, options: any) => { + switch (route) { + case 'GET /repos/{owner}/{repo}/actions/workflows': + return { + data: { + workflows: [ + { + id: 1, + path: PREPARE_PATCH_WORKFLOW_PATH, + }, + { + id: 2, + path: PREPARE_NON_PATCH_WORKFLOW_PATH, + }, + ], + }, + }; + case 'GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs': + return { + data: { + workflow_runs: [ + { + id: options.workflow_id === 1 ? 100 : 200, + status: 'in_progress', + }, + { + id: options.workflow_id === 1 ? 150 : 250, + status: 'completed', + }, + ], + }, + }; + case 'POST /repos/{owner}/{repo}/actions/runs/{run_id}/cancel': + return undefined; // success + default: + throw new Error(`Unexpected route: ${route}`); + } + }) as any); + }); + + it('should fail early when no GH_TOKEN is set', async () => { + delete process.env.GH_TOKEN; + await expect(cancelPreparationWorkflows()).rejects.toThrowErrorMatchingInlineSnapshot( + `"GH_TOKEN environment variable must be set, exiting."` + ); + }); + + it('should cancel all running preparation workflows in GitHub', async () => { + process.env.GH_TOKEN = 'MY_SECRET'; + + await expect(cancelPreparationWorkflows()).resolves.toBeUndefined(); + + expect(github.githubRestClient).toHaveBeenCalledTimes(5); + expect(github.githubRestClient).toHaveBeenCalledWith( + 'POST /repos/{owner}/{repo}/actions/runs/{run_id}/cancel', + { + owner: 'storybookjs', + repo: 'storybook', + run_id: 100, + } + ); + expect(github.githubRestClient).toHaveBeenCalledWith( + 'POST /repos/{owner}/{repo}/actions/runs/{run_id}/cancel', + { + owner: 'storybookjs', + repo: 'storybook', + run_id: 200, + } + ); + expect(github.githubRestClient).not.toHaveBeenCalledWith( + 'POST /repos/{owner}/{repo}/actions/runs/{run_id}/cancel', + { + owner: 'storybookjs', + repo: 'storybook', + run_id: 150, + } + ); + expect(github.githubRestClient).not.toHaveBeenCalledWith( + 'POST /repos/{owner}/{repo}/actions/runs/{run_id}/cancel', + { + owner: 'storybookjs', + repo: 'storybook', + run_id: 250, + } + ); + }); +}); diff --git a/scripts/release/cancel-preparation-runs.ts b/scripts/release/cancel-preparation-runs.ts new file mode 100644 index 000000000000..630bfb4847b3 --- /dev/null +++ b/scripts/release/cancel-preparation-runs.ts @@ -0,0 +1,107 @@ +/** + * This script cancels all running preparation workflows in GitHub. + * It will fetch all active runs for the preparation workflows, and cancel them. + */ +/* eslint-disable no-console */ +import chalk from 'chalk'; +import program from 'commander'; +import dedent from 'ts-dedent'; +import { githubRestClient } from './utils/github-client'; + +program + .name('cancel-preparation-workflows') + .description('cancel all running preparation workflows in GitHub'); + +export const PREPARE_PATCH_WORKFLOW_PATH = '.github/workflows/prepare-patch-release.yml'; +export const PREPARE_NON_PATCH_WORKFLOW_PATH = '.github/workflows/prepare-non-patch-release.yml'; + +export const run = async () => { + if (!process.env.GH_TOKEN) { + throw new Error('GH_TOKEN environment variable must be set, exiting.'); + } + + console.log(`🔎 Looking for workflows to cancel...`); + const allWorkflows = await githubRestClient('GET /repos/{owner}/{repo}/actions/workflows', { + owner: 'storybookjs', + repo: 'storybook', + }); + + const preparePatchWorkflowId = allWorkflows.data.workflows.find( + ({ path }) => path === PREPARE_PATCH_WORKFLOW_PATH + )?.id; + const prepareNonPatchWorkflowId = allWorkflows.data.workflows.find( + ({ path }) => path === PREPARE_NON_PATCH_WORKFLOW_PATH + )?.id; + + console.log(`Found workflow IDs for the preparation workflows: + ${chalk.blue(PREPARE_PATCH_WORKFLOW_PATH)}: ${chalk.green(preparePatchWorkflowId)} + ${chalk.blue(PREPARE_NON_PATCH_WORKFLOW_PATH)}: ${chalk.green(prepareNonPatchWorkflowId)}`); + + if (!preparePatchWorkflowId || !prepareNonPatchWorkflowId) { + throw new Error(dedent`🚨 Could not find workflow IDs for the preparation workflows + - Looked for paths: "${chalk.blue(PREPARE_PATCH_WORKFLOW_PATH)}" and "${chalk.blue( + PREPARE_NON_PATCH_WORKFLOW_PATH + )}", are they still correct? + - Found workflows: + ${JSON.stringify(allWorkflows.data.workflows, null, 2)}`); + } + + console.log('🔍 Fetching patch and non-patch runs for preparation workflows...'); + const [patchRuns, nonPatchRuns] = await Promise.all([ + githubRestClient('GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs', { + owner: 'storybookjs', + repo: 'storybook', + workflow_id: preparePatchWorkflowId, + }), + githubRestClient('GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs', { + owner: 'storybookjs', + repo: 'storybook', + workflow_id: prepareNonPatchWorkflowId, + }), + ]); + console.log('✅ Successfully fetched patch and non-patch runs for preparation workflows.'); + + const runsToCancel = patchRuns.data.workflow_runs + .concat(nonPatchRuns.data.workflow_runs) + .filter(({ status }) => + ['in_progress', 'pending', 'queued', 'requested', 'waiting'].includes(status) + ); + + if (runsToCancel.length === 0) { + console.log('👍 No runs to cancel.'); + return; + } + + console.log(`🔍 Found ${runsToCancel.length} runs to cancel. Cancelling them now: + ${runsToCancel + .map((r) => `${chalk.green(r.path)} - ${chalk.green(r.id)}: ${chalk.blue(r.status)}`) + .join('\n ')}`); + + const result = await Promise.allSettled( + runsToCancel.map((r) => + githubRestClient('POST /repos/{owner}/{repo}/actions/runs/{run_id}/cancel', { + owner: 'storybookjs', + repo: 'storybook', + run_id: r.id, + }) + ) + ); + + if (result.some((r) => r.status === 'rejected')) { + console.warn('⚠ī¸ Some runs could not be cancelled:'); + result.forEach((r, index) => { + if (r.status === 'rejected') { + console.warn(`Run ID: ${runsToCancel[index].id} - Reason: ${r.reason}`); + } + }); + } else { + console.log('✅ Successfully cancelled all preparation runs.'); + } +}; + +if (require.main === module) { + run().catch((err) => { + console.error(err); + // this is non-critical work, so we don't want to fail the CI build if this fails + }); +} diff --git a/scripts/release/utils/github-client.ts b/scripts/release/utils/github-client.ts index 646ba1003986..e81991414bf9 100644 --- a/scripts/release/utils/github-client.ts +++ b/scripts/release/utils/github-client.ts @@ -1,6 +1,8 @@ /* eslint-disable no-console */ import type { GraphQlQueryResponseData } from '@octokit/graphql'; import { graphql } from '@octokit/graphql'; +import { request } from '@octokit/request'; +import fetch from 'node-fetch'; export interface PullRequest { number: number; @@ -14,6 +16,13 @@ export const githubGraphQlClient = graphql.defaults({ headers: { authorization: `token ${process.env.GH_TOKEN}` }, }); +export const githubRestClient = request.defaults({ + request: { + fetch, + }, + headers: { authorization: `token ${process.env.GH_TOKEN}`, 'X-GitHub-Api-Version': '2022-11-28' }, +}); + export async function getUnpickedPRs( baseBranch: string, verbose?: boolean diff --git a/scripts/yarn.lock b/scripts/yarn.lock index ee273eaf2d45..690e145e27ea 100644 --- a/scripts/yarn.lock +++ b/scripts/yarn.lock @@ -2536,6 +2536,17 @@ __metadata: languageName: node linkType: hard +"@octokit/endpoint@npm:^9.0.0": + version: 9.0.1 + resolution: "@octokit/endpoint@npm:9.0.1" + dependencies: + "@octokit/types": ^12.0.0 + is-plain-object: ^5.0.0 + universal-user-agent: ^6.0.0 + checksum: 757505b1cd634bcd7b71a18c8fe07dfda47790598ddd0d9d13f47d68713070f49953a672ac40ec39787defc2a7e07d08dca97756def7b907118f8f8d4c653f5c + languageName: node + linkType: hard + "@octokit/graphql@npm:^4.3.1, @octokit/graphql@npm:^4.5.8": version: 4.8.0 resolution: "@octokit/graphql@npm:4.8.0" @@ -2572,6 +2583,13 @@ __metadata: languageName: node linkType: hard +"@octokit/openapi-types@npm:^19.0.0": + version: 19.0.0 + resolution: "@octokit/openapi-types@npm:19.0.0" + checksum: 8270e0a224bbef6d1c82396cda873a3528111cb25a772184b39e1fbada4e6433b41c5f4634ecf204e8a2816a802048197e0132b7615b579fab217f7c1e29545b + languageName: node + linkType: hard + "@octokit/plugin-paginate-rest@npm:^2.16.8, @octokit/plugin-paginate-rest@npm:^2.2.0": version: 2.21.3 resolution: "@octokit/plugin-paginate-rest@npm:2.21.3" @@ -2636,6 +2654,17 @@ __metadata: languageName: node linkType: hard +"@octokit/request-error@npm:^5.0.0": + version: 5.0.1 + resolution: "@octokit/request-error@npm:5.0.1" + dependencies: + "@octokit/types": ^12.0.0 + deprecation: ^2.0.0 + once: ^1.4.0 + checksum: e72a4627120de345b54876a1f007664095e5be9d624fce2e14fccf7668cd8f5e4929d444d8fc085d48e1fb5cd548538453974aab129a669101110d6679dce6c6 + languageName: node + linkType: hard + "@octokit/request@npm:^5.4.0, @octokit/request@npm:^5.6.0, @octokit/request@npm:^5.6.3": version: 5.6.3 resolution: "@octokit/request@npm:5.6.3" @@ -2664,6 +2693,19 @@ __metadata: languageName: node linkType: hard +"@octokit/request@npm:^8.1.2": + version: 8.1.2 + resolution: "@octokit/request@npm:8.1.2" + dependencies: + "@octokit/endpoint": ^9.0.0 + "@octokit/request-error": ^5.0.0 + "@octokit/types": ^12.0.0 + is-plain-object: ^5.0.0 + universal-user-agent: ^6.0.0 + checksum: 49219eb71b856acecc8268f05a7a7d074488f9eaeb59439f5c8872e5b4555a4e6c0cf0ebcadf0983466f88957e74c27765f582e473b0dd89b453274501f0dc37 + languageName: node + linkType: hard + "@octokit/rest@npm:^16.43.0 || ^17.11.0 || ^18.12.0, @octokit/rest@npm:^18.12.0": version: 18.12.0 resolution: "@octokit/rest@npm:18.12.0" @@ -2688,6 +2730,15 @@ __metadata: languageName: node linkType: hard +"@octokit/types@npm:^12.0.0": + version: 12.0.0 + resolution: "@octokit/types@npm:12.0.0" + dependencies: + "@octokit/openapi-types": ^19.0.0 + checksum: 6e5b68f8855775638db53244348d2ca07896d36a15aad41d3cb652fafaa1b307c3b6222319174dd5716accd9076e101da838b82f988a7c380a8e9d188e3aadf1 + languageName: node + linkType: hard + "@octokit/types@npm:^4.1.6": version: 4.1.10 resolution: "@octokit/types@npm:4.1.10" @@ -2906,6 +2957,7 @@ __metadata: "@jest/globals": ^29.3.1 "@nx/workspace": 16.2.1 "@octokit/graphql": ^5.0.5 + "@octokit/request": ^8.1.2 "@storybook/eslint-config-storybook": ^3.1.2 "@storybook/jest": next "@storybook/linter-config": ^3.1.2 From 72837aea51221146082d4676dab7a7fade8a9f87 Mon Sep 17 00:00:00 2001 From: Jeppe Reinhold Date: Wed, 4 Oct 2023 23:11:40 +0200 Subject: [PATCH 60/83] fix tests --- scripts/release/ensure-next-ahead.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/scripts/release/ensure-next-ahead.ts b/scripts/release/ensure-next-ahead.ts index 280f5fd00fa9..1aa32bfd932c 100644 --- a/scripts/release/ensure-next-ahead.ts +++ b/scripts/release/ensure-next-ahead.ts @@ -14,7 +14,6 @@ import program from 'commander'; import semver from 'semver'; import { z } from 'zod'; import { readJson } from 'fs-extra'; -import dedent from 'ts-dedent'; import { run as bumpVersion } from './version'; import { git } from './utils/git-client'; From 08efdbdada28d6ca6dbf32323e29fbf1f4be74d4 Mon Sep 17 00:00:00 2001 From: Valentin Palkovic Date: Thu, 5 Oct 2023 08:52:30 +0200 Subject: [PATCH 61/83] Pin overlayscrollbars to exact version --- code/ui/components/package.json | 2 +- code/yarn.lock | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/code/ui/components/package.json b/code/ui/components/package.json index 85c425ea05bf..0e9cc0dc42a4 100644 --- a/code/ui/components/package.json +++ b/code/ui/components/package.json @@ -77,7 +77,7 @@ "@types/react-syntax-highlighter": "11.0.5", "@types/util-deprecate": "^1.0.0", "css": "^3.0.0", - "overlayscrollbars": "^2.2.0", + "overlayscrollbars": "2.2.1", "overlayscrollbars-react": "^0.5.0", "polished": "^4.2.2", "prettier": "^2.8.0", diff --git a/code/yarn.lock b/code/yarn.lock index ddb34e7b1efa..3ec46c6397a8 100644 --- a/code/yarn.lock +++ b/code/yarn.lock @@ -6756,7 +6756,7 @@ __metadata: "@types/util-deprecate": ^1.0.0 css: ^3.0.0 memoizerific: ^1.11.3 - overlayscrollbars: ^2.2.0 + overlayscrollbars: 2.2.1 overlayscrollbars-react: ^0.5.0 polished: ^4.2.2 prettier: ^2.8.0 @@ -24986,10 +24986,10 @@ __metadata: languageName: node linkType: hard -"overlayscrollbars@npm:^2.2.0": - version: 2.3.2 - resolution: "overlayscrollbars@npm:2.3.2" - checksum: 6ee3c2d8ffafa8ec090b5f650edb783d83880f7f863d8b57791583a7496e9d1a9a4894cb80bfab75514af71d9ee9d0a15b17ba6006b1e5abc026d349f6535041 +"overlayscrollbars@npm:2.2.1": + version: 2.2.1 + resolution: "overlayscrollbars@npm:2.2.1" + checksum: 718dd563ee17a8c92a54f0b67989806edadd5b999e36d2ab322e7813b369d1cf0198d7267ca42ca9e879023f0658825e2b050d2845e751d876285d1d3549cb5e languageName: node linkType: hard From b838b29ac7acc4a586b04838b825a6fe4938a1c7 Mon Sep 17 00:00:00 2001 From: Valentin Palkovic Date: Thu, 5 Oct 2023 08:58:06 +0200 Subject: [PATCH 62/83] Add Resolutions.md file --- RESOLUTIONS.md | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 RESOLUTIONS.md diff --git a/RESOLUTIONS.md b/RESOLUTIONS.md new file mode 100644 index 000000000000..a21b14b5309f --- /dev/null +++ b/RESOLUTIONS.md @@ -0,0 +1,11 @@ +# Resolutions and Exact versions + +This file keeps track of any resolutions or exact versions specified in any `package.json` file. Resolutions are used to specify a specific version of a package to be used, even if a different version is specified as a dependency of another package. + +## code/renderers/svelte/package.json + +svelte-check@3.4.6 (bug: 3.5.x): Type issues + +## code/ui/components/package.json + +overlayscrollbars@2.2.1 (bug: 2.3.x): The Scrollbar doesn't disappear anymore by default. It might has something to do with the `scrollbars.autoHideSuspend` option, which was introduced in 2.3.0. https://github.com/KingSora/OverlayScrollbars/blob/master/packages/overlayscrollbars/CHANGELOG.md#230 From 5e024807d7ff5e3e58ae7fa59424cb6710d88351 Mon Sep 17 00:00:00 2001 From: Yann Braga Date: Thu, 5 Oct 2023 12:13:19 +0200 Subject: [PATCH 63/83] always run registry when generating angular sandboxes --- scripts/tasks/sandbox.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/scripts/tasks/sandbox.ts b/scripts/tasks/sandbox.ts index 117d10948b51..1f63527ca056 100644 --- a/scripts/tasks/sandbox.ts +++ b/scripts/tasks/sandbox.ts @@ -11,11 +11,17 @@ const logger = console; export const sandbox: Task = { description: 'Create the sandbox from a template', dependsOn: ({ template }, { link }) => { + let shouldLink = link; + + if (template.expected.framework === '@storybook/angular') { + shouldLink = false; + } + if ('inDevelopment' in template && template.inDevelopment) { return ['run-registry', 'generate']; } - if (link) { + if (shouldLink) { return ['compile']; } From dac7e2fb35583c5686f9fe7653e2f3a04f062dfa Mon Sep 17 00:00:00 2001 From: Yann Braga Date: Thu, 5 Oct 2023 12:16:10 +0200 Subject: [PATCH 64/83] display webpack errors on build --- code/builders/builder-webpack5/src/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/code/builders/builder-webpack5/src/index.ts b/code/builders/builder-webpack5/src/index.ts index 582c3156c71b..7f87d2e8d642 100644 --- a/code/builders/builder-webpack5/src/index.ts +++ b/code/builders/builder-webpack5/src/index.ts @@ -274,6 +274,7 @@ const builder: BuilderFunction = async function* builderGeneratorFn({ startTime, } if (errors.length > 0) { + errors.forEach((e) => logger.error(e.message)); compiler.close(() => fail(new WebpackCompilationError({ errors }))); return; } From b079ed6caa3ce76282c9e6e05c6d3b326fd14f53 Mon Sep 17 00:00:00 2001 From: Jeppe Reinhold Date: Thu, 5 Oct 2023 13:24:57 +0200 Subject: [PATCH 65/83] Revert "Release tooling: Release stable releases from `latest-release`" --- .github/workflows/prepare-patch-release.yml | 11 +- ...tch-release.yml => prepare-prerelease.yml} | 29 +--- .github/workflows/publish.yml | 33 ++-- CONTRIBUTING/RELEASING.md | 164 +++++++++--------- scripts/package.json | 3 - .../__tests__/cancel-preparation-runs.test.ts | 107 ------------ .../__tests__/ensure-next-ahead.test.ts | 85 --------- .../__tests__/generate-pr-description.test.ts | 10 +- .../release/__tests__/is-pr-frozen.test.ts | 12 +- .../release/__tests__/label-patches.test.ts | 1 - scripts/release/cancel-preparation-runs.ts | 107 ------------ scripts/release/ensure-next-ahead.ts | 101 ----------- scripts/release/generate-pr-description.ts | 11 +- scripts/release/is-pr-frozen.ts | 12 +- scripts/release/pick-patches.ts | 1 - scripts/release/utils/get-changes.ts | 2 +- scripts/release/utils/get-github-info.ts | 13 +- scripts/release/utils/github-client.ts | 9 - scripts/yarn.lock | 52 ------ 19 files changed, 115 insertions(+), 648 deletions(-) rename .github/workflows/{prepare-non-patch-release.yml => prepare-prerelease.yml} (81%) delete mode 100644 scripts/release/__tests__/cancel-preparation-runs.test.ts delete mode 100644 scripts/release/__tests__/ensure-next-ahead.test.ts delete mode 100644 scripts/release/cancel-preparation-runs.ts delete mode 100644 scripts/release/ensure-next-ahead.ts diff --git a/.github/workflows/prepare-patch-release.yml b/.github/workflows/prepare-patch-release.yml index 5cdc1ba44fcf..e4f8e38df502 100644 --- a/.github/workflows/prepare-patch-release.yml +++ b/.github/workflows/prepare-patch-release.yml @@ -88,15 +88,6 @@ jobs: git config --global user.email '32066757+storybook-bot@users.noreply.github.com' yarn release:pick-patches - - name: Cancel when no patches to pick - if: steps.pick-patches.outputs.pr-count == '0' && steps.pick-patches.outputs.pr-count != null - env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - # From https://stackoverflow.com/a/75809743 - run: | - gh run cancel ${{ github.run_id }} - gh run watch ${{ github.run_id }} - - name: Bump version deferred id: bump-version if: steps.unreleased-changes.outputs.has-changes-to-release == 'true' @@ -130,7 +121,7 @@ jobs: git config --global user.email '32066757+storybook-bot@users.noreply.github.com' git checkout -b version-patch-from-${{ steps.versions.outputs.current }} git add . - git commit -m "Write changelog for ${{ steps.versions.outputs.next }} [skip ci]" || true + git commit -m "Write changelog for ${{ steps.versions.outputs.next }}" || true git push --force origin version-patch-from-${{ steps.versions.outputs.current }} - name: Generate PR description diff --git a/.github/workflows/prepare-non-patch-release.yml b/.github/workflows/prepare-prerelease.yml similarity index 81% rename from .github/workflows/prepare-non-patch-release.yml rename to .github/workflows/prepare-prerelease.yml index ea72d924d918..e68a7e1ef63a 100644 --- a/.github/workflows/prepare-non-patch-release.yml +++ b/.github/workflows/prepare-prerelease.yml @@ -34,7 +34,7 @@ concurrency: cancel-in-progress: true jobs: - prepare-non-patch-pull-request: + prepare-prerelease-pull-request: name: Prepare prerelease pull request runs-on: ubuntu-latest environment: release @@ -112,35 +112,21 @@ jobs: run: | yarn release:version --deferred --release-type ${{ inputs.release-type || 'prerelease' }} ${{ inputs.pre-id && format('{0} {1}', '--pre-id', inputs.pre-id) || '' }} --verbose - - name: Check release vs prerelease - id: is-prerelease - run: yarn release:is-prerelease ${{ steps.bump-version.outputs.next-version }} - - name: Write changelog env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | yarn release:write-changelog ${{ steps.bump-version.outputs.next-version }} --verbose - - name: 'Commit changes to branch: version-non-patch-from-${{ steps.bump-version.outputs.current-version }}' + - name: 'Commit changes to branch: version-prerelease-from-${{ steps.bump-version.outputs.current-version }}' working-directory: . run: | git config --global user.name 'storybook-bot' git config --global user.email '32066757+storybook-bot@users.noreply.github.com' - git checkout -b version-non-patch-from-${{ steps.bump-version.outputs.current-version }} - git add . - git commit -m "Write changelog for ${{ steps.bump-version.outputs.next-version }} [skip ci]" || true - git push --force origin version-non-patch-from-${{ steps.bump-version.outputs.current-version }} - - - name: Resolve merge-conflicts with base branch - if: steps.is-prerelease.outputs.prerelease == 'true' - env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: | - git pull origin latest-release - git checkout --ours . + git checkout -b version-prerelease-from-${{ steps.bump-version.outputs.current-version }} git add . - git commit -m "Merge latest-release into version-non-patch-from-${{ steps.bump-version.outputs.current-version }} with conflicts resolved to ours [skip ci]" + git commit -m "Write changelog for ${{ steps.bump-version.outputs.next-version }}" || true + git push --force origin version-prerelease-from-${{ steps.bump-version.outputs.current-version }} - name: Generate PR description id: description @@ -158,15 +144,14 @@ jobs: gh pr edit \ --repo "${{github.repository }}" \ --title "Release: $CAPITALIZED_RELEASE_TYPE ${{ inputs.pre-id && format('{0} ', inputs.pre-id) }}${{ steps.bump-version.outputs.next-version }}" \ - --base ${{ steps.is-prerelease.outputs.prerelease == 'true' && 'next-release' || 'latest-release' }} \ --body "${{ steps.description.outputs.description }}" else gh pr create \ --repo "${{github.repository }}"\ --title "Release: $CAPITALIZED_RELEASE_TYPE ${{ inputs.pre-id && format('{0} ', inputs.pre-id) }}${{ steps.bump-version.outputs.next-version }}" \ --label "release" \ - --base ${{ steps.is-prerelease.outputs.prerelease == 'true' && 'next-release' || 'latest-release' }} \ - --head version-non-patch-from-${{ steps.bump-version.outputs.current-version }} \ + --base next-release \ + --head version-prerelease-from-${{ steps.bump-version.outputs.current-version }} \ --body "${{ steps.description.outputs.description }}" fi diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index df82ca33c9a5..863b4e9ae7e2 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -5,7 +5,7 @@ on: push: branches: - latest-release - - non-patch-release + - next-release env: PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1 @@ -36,11 +36,6 @@ jobs: gh run cancel ${{ github.run_id }} gh run watch ${{ github.run_id }} - - name: Cancel all release preparation runs - env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: yarn release:cancel-preparation-runs - - name: Checkout ${{ github.ref_name }} uses: actions/checkout@v3 with: @@ -68,6 +63,7 @@ jobs: yarn install - name: Apply deferred version bump and commit + id: version-bump working-directory: . run: | CURRENT_VERSION=$(cat ./code/package.json | jq '.version') @@ -126,11 +122,12 @@ jobs: run: git fetch --tags origin # when this is a patch release from main, label any patch PRs included in the release + # when this is a stable release from next, label ALL patch PRs found, as they will per definition be "patched" now - name: Label patch PRs as picked - if: github.ref_name == 'latest-release' + if: github.ref_name == 'latest-release' || (steps.publish-needed.outputs.published == 'false' && steps.target.outputs.target == 'next' && !steps.is-prerelease.outputs.prerelease) env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: yarn release:label-patches + run: yarn release:label-patches ${{ steps.target.outputs.target == 'next' && '--all' || '' }} - name: Create GitHub Release if: steps.publish-needed.outputs.published == 'false' @@ -154,20 +151,8 @@ jobs: git merge ${{ github.ref_name }} git push origin ${{ steps.target.outputs.target }} - - name: Ensure `next` is a minor version ahead of `main` - if: steps.target.outputs.target == 'main' - run: | - git checkout next - git pull - - yarn release:ensure-next-ahead --main-version "${{ steps.version.outputs.current-version }}" - - git add .. - git commit -m "Bump next to be one minor ahead of main [skip ci]" - git push origin next - - name: Sync CHANGELOG.md from `main` to `next` - if: steps.target.outputs.target == 'main' + if: github.ref_name == 'latest-release' working-directory: . run: | git fetch origin next @@ -175,7 +160,7 @@ jobs: git pull git checkout origin/main ./CHANGELOG.md git add ./CHANGELOG.md - git commit -m "Update CHANGELOG.md for v${{ steps.version.outputs.current-version }} [skip ci]" || true + git commit -m "Update CHANGELOG.md for v${{ steps.version.outputs.current-version }} [skip ci]" git push origin next - name: Sync version JSONs from `next-release` to `main` @@ -191,6 +176,10 @@ jobs: git commit -m "Update $VERSION_FILE for v${{ steps.version.outputs.current-version }}" git push origin main + - name: Overwrite main with next + if: steps.target.outputs.target == 'next' && steps.is-prerelease.outputs.prerelease == 'false' + run: git push --force origin next:main + - name: Report job failure to Discord if: failure() env: diff --git a/CONTRIBUTING/RELEASING.md b/CONTRIBUTING/RELEASING.md index e92fa8fa36a3..0997b757b6ea 100644 --- a/CONTRIBUTING/RELEASING.md +++ b/CONTRIBUTING/RELEASING.md @@ -8,8 +8,8 @@ - [Introduction](#introduction) - [Branches](#branches) - [Release Pull Requests](#release-pull-requests) + - [Prereleases](#prereleases) - [Patch Releases](#patch-releases) - - [Non-patch Releases](#non-patch-releases) - [Publishing](#publishing) - [👉 How to Release](#-how-to-release) - [1. Find the Prepared Pull Request](#1-find-the-prepared-pull-request) @@ -21,8 +21,6 @@ - [7. See the "Publish" Workflow Finish](#7-see-the-publish-workflow-finish) - [Releasing Locally in an Emergency 🚨](#releasing-locally-in-an-emergency-) - [Canary Releases](#canary-releases) - - [With GitHub UI](#with-github-ui) - - [With the CLI](#with-the-cli) - [Versioning Scenarios](#versioning-scenarios) - [Prereleases - `7.1.0-alpha.12` -\> `7.1.0-alpha.13`](#prereleases---710-alpha12---710-alpha13) - [Prerelease promotions - `7.1.0-alpha.13` -\> `7.1.0-beta.0`](#prerelease-promotions---710-alpha13---710-beta0) @@ -33,7 +31,7 @@ - [Prerelease of upcoming patch release - `7.0.20` -\> `7.0.21-alpha.0`](#prerelease-of-upcoming-patch-release---7020---7021-alpha0) - [Merges to `main` without versioning](#merges-to-main-without-versioning) - [FAQ](#faq) - - [When should I use the "patch:yes" label?](#when-should-i-use-the-patchyes-label) + - [When should I use the "patch" label?](#when-should-i-use-the-patch-label) - [How do I make changes to the release tooling/process?](#how-do-i-make-changes-to-the-release-toolingprocess) - [Why do I need to re-trigger workflows to update the changelog?](#why-do-i-need-to-re-trigger-workflows-to-update-the-changelog) - [Which combination of inputs creates the version bump I need?](#which-combination-of-inputs-creates-the-version-bump-i-need) @@ -45,19 +43,19 @@ This document explains the release process for the Storybook monorepo. There are two types: -1. Non-patch releases - releasing any content that is on the `next` branch, either prereleases or stable releases +1. Prereleases and major/minor releases - releasing any content that is on the `next` branch 2. Patch releases - picking any content from `next` to `main`, that needs to be patched back to the current stable minor release The release process is based on automatically created "Release Pull Requests", that when merged will trigger a new version to be released. A designated Releaser -- which may rotate between core team members -- will go through the release process in the current Release PR. This process is implemented with NodeJS scripts in [`scripts/release`](../scripts/release/) and three GitHub Actions workflows: -- [Prepare `next` PR](../.github/workflows/prepare-non-patch-release.yml) -- [Prepare patch PR](../.github/workflows/prepare-patch-release.yml) +- [Prepare Prerelease PR](../.github/workflows/prepare-prerelease.yml) +- [Prepare Patch PR](../.github/workflows/prepare-patch-release.yml) - [Publish](../.github/workflows/publish.yml) > **Note** -> This document distinguishes between **patch** and **non-patch** releases. The distinction reflects the difference between patching an existing minor version on `main` or releasing a new minor/major/prerelease from `next`. +> This document distinguishes between **patch** releases and **prereleases**. This is a simplification; stable major and minor releases work the same way as prereleases. The distinction reflects the difference between patching an existing minor version on `main` or releasing a new minor/major/prerelease from `next`. ### Branches @@ -103,7 +101,7 @@ Two GitHub Actions workflows automatically create release pull requests, one for The high-level flow is: 1. When a PR is merged to `next` (or a commit is pushed), both release pull requests are (re)generated. -2. They create a new branch - `version-(patch|non-patch)-from-`. +2. They create a new branch - `version-(patch|prerelease)-from-`. 3. They calculate which version to bump to according to the version strategy. 4. They update `CHANGELOG(.prerelease).md` with all changes detected. 5. They commit everything. @@ -117,20 +115,62 @@ A few key points to note in this flow: - The changelogs are committed during the preparation, but the packages are not version bumped and not published until later. - The release pull requests don't target their working branches (`next` and `main`), but rather `next-release` and `latest-release`. +### Prereleases + +> **Note** +> Workflow: [`prepare-prerelease.yml`](../.github/workflows/prepare-prerelease.yml) + +Prereleases are prepared with all content from the `next` branch. The changelog is generated by examining the git history, and looking up all the commits and pull requests between the current prerelease (on `next-release`) and `HEAD` of `next`. + +The default versioning strategy is to increase the current prerelease number, as described in [Prereleases - `7.1.0-alpha.12` -> `7.1.0-alpha.13`](#prereleases---710-alpha12---710-alpha13). If there is no prerelease number (i.e., we just released a new stable minor/major version), it will add one to a patch bump, so it would go from `7.2.0` to `7.2.1-0` by default. + +Prerelease PRs are only created if there are actual changes to release. Content labeled with "build" or "documentation" is [not considered "releasable"](#which-changes-are-considered-releasable-and-what-does-it-mean) and is not user-facing, so it doesn't make sense to create a release. This is explained in more detail in [Why are no release PRs being prepared?](#why-are-no-release-prs-being-prepared). + +The preparation workflow will create a new branch from `next`, called `version-prerelease-from-`, and open a pull request targeting `next-release`. When the Releaser merges it, the [publish workflow](#publishing) will merge `next-release` into `next`. + +Here's an example of a workflow where a feature and a bugfix have been created and then released to a new `7.1.0-alpha.29` version. All the commits highlighted with square dots are the ones that will be considered when generating the changelog. + +```mermaid +%%{init: { 'gitGraph': { 'mainBranchName': 'next' } } }%% +gitGraph + commit + branch next-release + commit tag: "7.1.0-alpha.28" + checkout next + merge next-release + commit type: HIGHLIGHT id: "direct commit" + branch new-feature + commit + commit + checkout next + merge new-feature type: HIGHLIGHT + branch some-bugfix + commit + checkout next + merge some-bugfix type: HIGHLIGHT + branch version-prerelease-from-7.1.0-alpha.28 + commit id: "write changelog" + checkout next-release + merge version-prerelease-from-7.1.0-alpha.28 + commit id: "bump versions" tag: "7.1.0-alpha.29" + checkout next + merge next-release +``` + ### Patch Releases > **Note** > Workflow: [`prepare-patch-release.yml`](../.github/workflows/prepare-patch-release.yml) -Patch releases are created by [cherry-picking](https://www.atlassian.com/git/tutorials/cherry-pick) any merged, unreleased pull requests that have the "**patch:yes**" label applied to the `next` branch. The merge commit of said pull requests are cherry-picked. +Patch releases are created by [cherry-picking](https://www.atlassian.com/git/tutorials/cherry-pick) any merged, unreleased pull requests that have the "**patch**" label applied to the `next` branch. The merge commit of said pull requests are cherry-picked. -Sometimes it is desired to pick pull requests back to `main` even if they are not considered "releasable". Unlike non-patch-release preparation, patch releases will not be canceled if the content is not releasable. It might not make sense to create a new patch release if the changes are only for documentation and/or internal build systems. However, getting the changes back to `main` is the only way to deploy the documentation to the production docs site. You may also want to cherry-pick changes to internal CI to fix issues. These are valid scenarios where you want to cherry-pick the changes without being blocked on "releasable" content. In these cases, where all cherry picks are non-releasable, the preparation workflow creates a "merging" pull request instead of a "releasing" pull request. This pull request does not bump versions or update changelogs; it just cherry-picks the changes and allows you to merge them into `latest-release` -> `main`. +Sometimes it is desired to pick pull requests back to `main` even if they are not considered "releasable". Unlike prerelease preparation, patch releases will not be canceled if the content is not releasable. It might not make sense to create a new patch release if the changes are only for documentation and/or internal build systems. However, getting the changes back to `main` is the only way to deploy the documentation to the production docs site. You may also want to cherry-pick changes to internal CI to fix issues. These are valid scenarios where you want to cherry-pick the changes without being blocked on "releasable" content. In these cases, where all cherry picks are non-releasable, the preparation workflow creates a "merging" pull request instead of a "releasing" pull request. This pull request does not bump versions or update changelogs; it just cherry-picks the changes and allows you to merge them into `latest-release` -> `main`. The preparation workflow sequentially cherry-picks each patch pull request to its branch. If this cherry-picking fails due to conflicts or other reasons, it is ignored and the next pull request is processed. All failing cherry-picks are listed in the release pull request's description, for the Releaser to manually cherry-pick during the release process. This problem occurs more often when `main` and `next` diverge, i.e. the longer it has been since a stable major/minor release. -Similar to the non-patch-release flow, the preparation workflow for patches will create a new branch from `main` called `version-patch-from-`, and open a pull request that targets `latest-release`. When the pull request is merged by the Releaser, the [publish workflow](#publishing) will eventually merge `latest-release` into `main`. +Similar to the prerelease flow, the preparation workflow for patches will create a new branch from `main` called `version-patch-from-`, and open a pull request that targets `latest-release`. When the pull request is merged by the Releaser, the [publish workflow](#publishing) will eventually merge `latest-release` into `main`. -Here is an example of a workflow where a feature and two bug fixes have been merged to `next`. Only the bug fixes have the "**patch:yes**" label, so only those two go into the new `7.0.19` release. Note that it is the merge commits to `next` that are cherry-picked, not the commits on the bugfix branches. +Here is an example of a workflow where a feature and two bug fixes have been merged to `next`. Only the bug fixes have the "**patch**" label, so only those two go into the new `7.0.19` release. Note that it is the merge commits to `next` that are cherry-picked, not the commits on the bugfix branches. ```mermaid gitGraph @@ -168,62 +208,21 @@ gitGraph merge latest-release ``` -### Non-patch Releases - -> **Note** -> Workflow: [`prepare-non-patch-release.yml`](../.github/workflows/prepare-non-patch-release.yml) - -Non-patch-releases are prepared with all content from the `next` branch. The changelog is generated by examining the git history, and looking up all the commits and pull requests between the current prerelease (on `next-release`) and `HEAD` of `next`. - -The default versioning strategy is to increase the current prerelease number, as described in [Prereleases - `7.1.0-alpha.12` -> `7.1.0-alpha.13`](#prereleases---710-alpha12---710-alpha13). If there is no prerelease number (i.e., we just released a new stable minor/major version), it will add one to a patch bump, so it would go from `7.2.0` to `7.2.1-0` by default. - -`next`-PRs are only created if there are actual changes to release. Content labeled with "build" or "documentation" is [not considered "releasable"](#which-changes-are-considered-releasable-and-what-does-it-mean) and is not user-facing, so it doesn't make sense to create a release. This is explained in more detail in [Why are no release PRs being prepared?](#why-are-no-release-prs-being-prepared). - -The preparation workflow will create a new branch from `next`, called `version-non-patch-from-`, and open a pull request targeting `next-release`. When the Releaser merges it, the [publish workflow](#publishing) will merge `next-release` into `next`. - -Here's an example of a workflow where a feature and a bugfix have been created and then released to a new `7.1.0-alpha.29` version. All the commits highlighted with square dots are the ones that will be considered when generating the changelog. - -```mermaid -%%{init: { 'gitGraph': { 'mainBranchName': 'next' } } }%% -gitGraph - commit - branch next-release - commit tag: "7.1.0-alpha.28" - checkout next - merge next-release - commit type: HIGHLIGHT id: "direct commit" - branch new-feature - commit - commit - checkout next - merge new-feature type: HIGHLIGHT - branch some-bugfix - commit - checkout next - merge some-bugfix type: HIGHLIGHT - branch version-non-patch-from-7.1.0-alpha.28 - commit id: "write changelog" - checkout next-release - merge version-non-patch-from-7.1.0-alpha.28 - commit id: "bump versions" tag: "7.1.0-alpha.29" - checkout next - merge next-release -``` - ### Publishing > **Note** > Workflow: [`publish.yml`](../.github/workflows/publish.yml) -When either a non-patch-release or a patch release branch is merged into `latest-release` or `next-release`, the publishing workflow is triggered. This workflow performs the following tasks: +When either a prerelease or a patch release branch is merged into `main` or `next-release`, the publishing workflow is triggered. This workflow performs the following tasks: 1. Bump versions of all packages according to the plan from the prepared PRs 2. Install dependencies and build all packages. 3. Publish packages to npm. -4. (If this is a patch release, add the "**patch:done**" label to all relevant pull requests.) +4. (If this is a patch release, add the "**picked**" label to all relevant pull requests.) 5. Create a new GitHub Release, including a version tag in the release branch (`latest-release` or `next-release`). 6. Merge the release branch into the core branch (`main` or `next`). 7. (If this is a patch release, copy the `CHANGELOG.md` changes from `main` to `next`.) +8. (If this is [a promotion from a prerelease to a stable release](#minormajor-releases---710-rc2---710-or-800-rc3---800), force push `next` to `main`.) The publish workflow runs in the "release" GitHub environment, which has the npm token required to publish packages to the `@storybook` npm organization. For security reasons, this environment can only be accessed from the four "core" branches: `main`, `next`, `latest-release` and `next-release`. @@ -245,7 +244,7 @@ The high-level workflow for a Releaser is: Look for the release pull request that has been prepared for the type of release you're about to release: -- "Release: Prerelease|Minor|Major ``" for releases from `next` +- "Release: Prerelease ``" for prereleases - "Release: Patch ``" for patch releases - "Release: Merge patches to `main` (without version bump)" for patches without releases @@ -267,7 +266,7 @@ It is important to verify that the release includes the right content. Key eleme For example, check if it's a breaking change that isn't allowed in a minor prerelease, or if it's a new feature in a patch release. If it's not suitable, revert the pull request and notify the author. -Sometimes when doing a patch release, a pull request can have the "patch:yes" label but you don't want that change to be part of this release. Maybe you're not confident in the change, or you require more input from maintainers before releasing it. In those situations you should remove the "patch:yes" label from the pull request and follow through with the release (make sure to re-trigger the workflow). When the release is done, add the "patch:yes" label back again, so it will be part of the next release. +Sometimes when doing a patch release, a pull request can have the "patch" label but you don't want that change to be part of this release. Maybe you're not confident in the change, or you require more input from maintainers before releasing it. In those situations you should remove the "patch" label from the pull request and follow through with the release (make sure to re-trigger the workflow). When the release is done, add the patch label back again, so it will be part of the next release. 2. Is the pull request title correct? @@ -301,12 +300,12 @@ When triggering the workflows, always choose the `next` branch as the base, unle The workflows can be triggered here: -- [Prepare next PR](https://github.com/storybookjs/storybook/actions/workflows/prepare-non-patch-release.yml) +- [Prepare prerelease PR](https://github.com/storybookjs/storybook/actions/workflows/prepare-prerelease.yml) - [Prepare patch PR](https://github.com/storybookjs/storybook/actions/workflows/prepare-patch-release.yml) -Crucially for prereleases, this is also where you change the versioning strategy if you need something else than the default as described in [Preparing - Non-patch Releases](#non-patch-releases). When triggering the prerelease workflow manually, you can optionally add inputs: +Crucially for prereleases, this is also where you change the versioning strategy if you need something else than the default as described in [Preparing - Prereleases](#prereleases). When triggering the prerelease workflow manually, you can optionally add inputs: -![Screenshot of triggering the non-patch-release workflow in GitHub Actions, with a form that shows a release type selector and a prerelease identifier text field](prerelease-workflow-inputs.png) +![Screenshot of triggering the prerelease workflow in GitHub Actions, with a form that shows a release type selector and a prerelease identifier text field](prerelease-workflow-inputs.png) See [Versioning Scenarios](#versioning-scenarios) for a description of each version bump scenario, how to activate it and what it does, and [Which combination of inputs creates the version bump I need?](#which-combination-of-inputs-creates-the-version-bump-i-need) for a detailed description of the workflow inputs. @@ -340,7 +339,7 @@ You can inspect the workflows to see what they are running and copy that, but he Before you start you should make sure that your working tree is clean and the repository is in a clean state by running `git clean -xdf`. -1. Create a new branch from either `next` or `main` (patches) +1. Create a new branch from either `next` (prereleases) or `main` (patches) 2. Get all tags: `git fetch --tags origin` 3. Install dependencies: `yarn task --task=install --start-from=install` 4. `cd scripts` @@ -376,7 +375,7 @@ Before you start you should make sure that your working tree is clean and the re 4. `git add ./CHANGELOG.md` 5. `git commit -m "Update CHANGELOG.md for v"` 6. `git push origin` -19. (If non-patch-release) Sync `versions/next.json` from `next` to `main` +19. (If prerelease) Sync `versions/next.json` from `next` to `main` 1. `git checkout main` 2. `git pull` 3. `git checkout origin/next ./docs/versions/next.json` @@ -435,7 +434,7 @@ There are multiple types of releases that use the same principles, but are done ### Prereleases - `7.1.0-alpha.12` -> `7.1.0-alpha.13` -This is the default strategy for Non-patch releases, there's nothing special needed to trigger this scenario. +This is the default strategy for prereleases, there's nothing special needed to trigger this scenario. ### Prerelease promotions - `7.1.0-alpha.13` -> `7.1.0-beta.0` @@ -446,12 +445,14 @@ To promote a prerelease to a new prerelease ID, during the [Re-trigger the Workf ### Minor/major releases - `7.1.0-rc.2` -> `7.1.0` or `8.0.0-rc.3` -> `8.0.0` -To promote a prerelease to a stable reelase, during the [Re-trigger the Workflow](#4-re-trigger-the-workflow) step, choose: +To promote a prerelease to a new prerelease ID, during the [Re-trigger the Workflow](#4-re-trigger-the-workflow) step, choose: -- Release type: Patch, Minor or Major +- Release type: Patch - Prerelease ID: Leave empty -This scenario is special as it will target `latest-release` instead of `next-release`, and thus merge into `main` when done, and not `next`. So it goes `next` -> `version-non-patch-from-` -> `latest-release` -> `main`. +The "Patch" release type ensures the current prerelease version gets promoted to a stable version without any major/minor/patch bumps. + +This scenario is special as it turns the `next` branch into a stable branch (until the next prerelease). Therefore, this will also force push `next` to `main`, to ensure that `main` contains the latest stable release. Consequently, the history for `main` is lost. ### First prerelease of new major/minor - `7.1.0` -> `7.2.0-alpha.0` or `8.0.0-alpha.0` @@ -480,13 +481,13 @@ As described in more details in [the Patch Releases section](#patch-releases), t ## FAQ -### When should I use the "patch:yes" label? +### When should I use the "patch" label? -Not all pull requests need to be patched back to the stable release, which is why only those with the **"patch:yes"** label gets that treatment. But how do you decide whether or not a give pull requests should have that label? +Not all pull requests need to be patched back to the stable release, which is why only those with the **"patch"** label gets that treatment. But how do you decide whether or not a give pull requests should have that label? -First of all, patches are only for important and time-sensitive fixes, and not minor improvements or completely new features. A pull request that introduces a new feature shouldn't be patched back to the stable release. +First of all, patches are only for fixes and minor improvements, and not completely new features. A pull request that introduces a new feature shouldn't be patched back to the stable release. -Second, PRs that changes the code in a big architectural way should ideally not be patched back either, because that makes merge conflicts more likely in the future. +Second, any destabilizing changes shouldn't be patched back either. Breaking changes are reserved for major releases, but changes can be destabilizing without being strictly breaking, and those shouldn't be patched back either. An example is moving the settings panel in the manager to a completely different place, but with the same functionality. Many wouldn't consider this breaking because no usage will stop working because of this, but it can be considered a destabilizing change because user behavior have to change as a result of this. When in doubt ask the core team for their input. @@ -496,15 +497,12 @@ The whole process is based on [GitHub Action workflows](../.github/workflows/) a The short answer to "how", is to make changes as a regular pull request that is also patched back to `main`. -
- There's a longer answer too, but it's pretty confusing +There's a longer answer too, but it's pretty confusing: The scripts run from either `main` or `next`, so if you're changing a release script, you must patch it back to `main` for it to have an effect on patch releases. If you need the change to take effect immediately, you must manually cherry pick it to `main`. For workflow file changes, they usually run from `next`, but patching them back is recommended for consistency. The "publish" workflow runs from `latest-release` and `next-release`, so you should always patch changes back for _that_. 🙃 -
- ### Why do I need to re-trigger workflows to update the changelog? Changes to pull requests' titles, labels or even reverts won't be reflected in the release pull request. This is because the workflow only triggers on pushes to `next`, not when pull request meta data is changed. @@ -538,7 +536,7 @@ If a pull request does not have any of the above labels at the time of release, This is most likely because `next` only contains [unreleasable changes](#which-changes-are-considered-releasable-and-what-does-it-mean), which causes the preparation workflow to cancel itself. That's because it doesn't make sense to prepare a new release if all the changes are unreleasable, as that wouldn't bump the version nor write a new changelog entry, so "releasing" it would just merge it back to `next` without any differences. -You can always see the workflows and if they have been cancelled [here for non-patch releases](https://github.com/storybookjs/storybook/actions/workflows/prepare-non-patch-release.yml) and [here for patch releases](https://github.com/storybookjs/storybook/actions/workflows/prepare-patch-release.yml). +You can always see the workflows and if they have been cancelled [here for prereleases](https://github.com/storybookjs/storybook/actions/workflows/prepare-prerelease.yml) and [here for patch releases](https://github.com/storybookjs/storybook/actions/workflows/prepare-patch-release.yml). ### Why do we need separate release branches? @@ -560,11 +558,11 @@ gitGraph branch some-simultaneous-bugfix commit checkout next - branch version-non-patch-from-7.1.0-alpha.28 + branch version-prerelease-from-7.1.0-alpha.28 commit id checkout next merge some-simultaneous-bugfix type: HIGHLIGHT id: "whoops!" - merge version-non-patch-from-7.1.0-alpha.28 tag: "v7.1.0-alpha.29" + merge version-prerelease-from-7.1.0-alpha.28 tag: "v7.1.0-alpha.29" ``` When publishing at the last commit with tag `v7.1.0-alpha.29`, it will publish whatever the content is at that point (all the square dots), which includes the "whoops!" commit from merging the bugfix. But the bugfix was never part of the release pull request because it got prepared before the bugfix was merged in. @@ -584,19 +582,19 @@ gitGraph branch some-simultanous-bugfix commit checkout next - branch version-non-patch-from-7.1.0-alpha.28 + branch version-prerelease-from-7.1.0-alpha.28 commit id: "write changelog" checkout next merge some-simultanous-bugfix id: "whoops!" checkout next-release - merge version-non-patch-from-7.1.0-alpha.28 + merge version-prerelease-from-7.1.0-alpha.28 commit id: "bump versions" tag: "v7.1.0-alpha.29" checkout next merge next-release - branch version-non-patch-from-7.1.0-alpha.29 + branch version-prerelease-from-7.1.0-alpha.29 commit id: "write changelog again" checkout next-release - merge version-non-patch-from-7.1.0-alpha.29 + merge version-prerelease-from-7.1.0-alpha.29 commit id: "bump versions again" tag: "v7.1.0-alpha.30" checkout next merge next-release diff --git a/scripts/package.json b/scripts/package.json index f220b8f88742..8a1ace601a4d 100644 --- a/scripts/package.json +++ b/scripts/package.json @@ -13,8 +13,6 @@ "lint:js:cmd": "cross-env NODE_ENV=production eslint --cache --cache-location=../.cache/eslint --ext .js,.jsx,.json,.html,.ts,.tsx,.mjs --report-unused-disable-directives", "lint:package": "sort-package-json", "migrate-docs": "node --require esbuild-register ./ts-to-ts49.ts", - "release:cancel-preparation-runs": "ts-node --swc ./release/cancel-preparation-runs.ts", - "release:ensure-next-ahead": "ts-node --swc ./release/ensure-next-ahead.ts", "release:generate-pr-description": "ts-node --swc ./release/generate-pr-description.ts", "release:get-changelog-from-file": "ts-node --swc ./release/get-changelog-from-file.ts", "release:get-current-version": "ts-node --swc ./release/get-current-version.ts", @@ -75,7 +73,6 @@ "@jest/globals": "^29.3.1", "@nx/workspace": "16.2.1", "@octokit/graphql": "^5.0.5", - "@octokit/request": "^8.1.2", "@storybook/eslint-config-storybook": "^3.1.2", "@storybook/jest": "next", "@storybook/linter-config": "^3.1.2", diff --git a/scripts/release/__tests__/cancel-preparation-runs.test.ts b/scripts/release/__tests__/cancel-preparation-runs.test.ts deleted file mode 100644 index aaf8cdbec718..000000000000 --- a/scripts/release/__tests__/cancel-preparation-runs.test.ts +++ /dev/null @@ -1,107 +0,0 @@ -/* eslint-disable global-require */ -/* eslint-disable no-underscore-dangle */ -import { - PREPARE_NON_PATCH_WORKFLOW_PATH, - PREPARE_PATCH_WORKFLOW_PATH, - run as cancelPreparationWorkflows, -} from '../cancel-preparation-runs'; -import * as github_ from '../utils/github-client'; - -jest.mock('../utils/github-client'); - -const github = jest.mocked(github_); - -jest.spyOn(console, 'log').mockImplementation(() => {}); -jest.spyOn(console, 'warn').mockImplementation(() => {}); -jest.spyOn(console, 'error').mockImplementation(() => {}); - -describe('Cancel preparation runs', () => { - beforeEach(() => { - jest.clearAllMocks(); - github.githubRestClient.mockImplementation(((route: string, options: any) => { - switch (route) { - case 'GET /repos/{owner}/{repo}/actions/workflows': - return { - data: { - workflows: [ - { - id: 1, - path: PREPARE_PATCH_WORKFLOW_PATH, - }, - { - id: 2, - path: PREPARE_NON_PATCH_WORKFLOW_PATH, - }, - ], - }, - }; - case 'GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs': - return { - data: { - workflow_runs: [ - { - id: options.workflow_id === 1 ? 100 : 200, - status: 'in_progress', - }, - { - id: options.workflow_id === 1 ? 150 : 250, - status: 'completed', - }, - ], - }, - }; - case 'POST /repos/{owner}/{repo}/actions/runs/{run_id}/cancel': - return undefined; // success - default: - throw new Error(`Unexpected route: ${route}`); - } - }) as any); - }); - - it('should fail early when no GH_TOKEN is set', async () => { - delete process.env.GH_TOKEN; - await expect(cancelPreparationWorkflows()).rejects.toThrowErrorMatchingInlineSnapshot( - `"GH_TOKEN environment variable must be set, exiting."` - ); - }); - - it('should cancel all running preparation workflows in GitHub', async () => { - process.env.GH_TOKEN = 'MY_SECRET'; - - await expect(cancelPreparationWorkflows()).resolves.toBeUndefined(); - - expect(github.githubRestClient).toHaveBeenCalledTimes(5); - expect(github.githubRestClient).toHaveBeenCalledWith( - 'POST /repos/{owner}/{repo}/actions/runs/{run_id}/cancel', - { - owner: 'storybookjs', - repo: 'storybook', - run_id: 100, - } - ); - expect(github.githubRestClient).toHaveBeenCalledWith( - 'POST /repos/{owner}/{repo}/actions/runs/{run_id}/cancel', - { - owner: 'storybookjs', - repo: 'storybook', - run_id: 200, - } - ); - expect(github.githubRestClient).not.toHaveBeenCalledWith( - 'POST /repos/{owner}/{repo}/actions/runs/{run_id}/cancel', - { - owner: 'storybookjs', - repo: 'storybook', - run_id: 150, - } - ); - expect(github.githubRestClient).not.toHaveBeenCalledWith( - 'POST /repos/{owner}/{repo}/actions/runs/{run_id}/cancel', - { - owner: 'storybookjs', - repo: 'storybook', - run_id: 250, - } - ); - }); -}); diff --git a/scripts/release/__tests__/ensure-next-ahead.test.ts b/scripts/release/__tests__/ensure-next-ahead.test.ts deleted file mode 100644 index 0b192d39b106..000000000000 --- a/scripts/release/__tests__/ensure-next-ahead.test.ts +++ /dev/null @@ -1,85 +0,0 @@ -/* eslint-disable global-require */ -/* eslint-disable no-underscore-dangle */ -import path from 'path'; -import { run as ensureNextAhead } from '../ensure-next-ahead'; -import * as gitClient_ from '../utils/git-client'; -import * as bumpVersion_ from '../version'; - -jest.mock('../utils/git-client', () => jest.requireActual('jest-mock-extended').mockDeep()); -const gitClient = jest.mocked(gitClient_); - -// eslint-disable-next-line jest/no-mocks-import -jest.mock('fs-extra', () => require('../../../code/__mocks__/fs-extra')); -const fsExtra = require('fs-extra'); - -jest.mock('../version', () => jest.requireActual('jest-mock-extended').mockDeep()); -const bumpVersion = jest.mocked(bumpVersion_); - -jest.spyOn(console, 'log').mockImplementation(() => {}); -jest.spyOn(console, 'warn').mockImplementation(() => {}); -jest.spyOn(console, 'error').mockImplementation(() => {}); - -const CODE_PACKAGE_JSON_PATH = path.join(__dirname, '..', '..', '..', 'code', 'package.json'); - -describe('Ensure next ahead', () => { - beforeEach(() => { - jest.clearAllMocks(); - gitClient.git.status.mockResolvedValue({ current: 'next' } as any); - fsExtra.__setMockFiles({ - [CODE_PACKAGE_JSON_PATH]: JSON.stringify({ version: '2.0.0' }), - }); - }); - - it('should throw when main-version is missing', async () => { - await expect(ensureNextAhead({})).rejects.toThrowErrorMatchingInlineSnapshot(` - "[ - { - "code": "invalid_type", - "expected": "string", - "received": "undefined", - "path": [ - "mainVersion" - ], - "message": "Required" - } - ]" - `); - }); - - it('should throw when main-version is not a semver string', async () => { - await expect(ensureNextAhead({ mainVersion: '200' })).rejects - .toThrowErrorMatchingInlineSnapshot(` - "[ - { - "code": "custom", - "message": "main-version must be a valid semver version string like '7.4.2'.", - "path": [] - } - ]" - `); - }); - - it('should not bump version when next is already ahead of main', async () => { - await expect(ensureNextAhead({ mainVersion: '1.0.0' })).resolves.toBeUndefined(); - expect(bumpVersion.run).not.toHaveBeenCalled(); - }); - - it('should bump version to 3.1.0-alpha.0 when main is 3.0.0 and next is 2.0.0', async () => { - await expect(ensureNextAhead({ mainVersion: '3.0.0' })).resolves.toBeUndefined(); - expect(bumpVersion.run).toHaveBeenCalledWith({ exact: '3.1.0-alpha.0' }); - }); - - it('should bump version to 2.1.0-alpha.0 when main and next are both 2.0.0', async () => { - await expect(ensureNextAhead({ mainVersion: '2.0.0' })).resolves.toBeUndefined(); - expect(bumpVersion.run).toHaveBeenCalledWith({ exact: '2.1.0-alpha.0' }); - }); - - it('should bump version to 2.1.0-alpha.0 when main is 2.0.0 and and next is 2.0.0-rc.10', async () => { - fsExtra.__setMockFiles({ - [CODE_PACKAGE_JSON_PATH]: JSON.stringify({ version: '2.0.0-rc.10' }), - }); - - await expect(ensureNextAhead({ mainVersion: '2.0.0' })).resolves.toBeUndefined(); - expect(bumpVersion.run).toHaveBeenCalledWith({ exact: '2.1.0-alpha.0' }); - }); -}); diff --git a/scripts/release/__tests__/generate-pr-description.test.ts b/scripts/release/__tests__/generate-pr-description.test.ts index 50aa5de8e019..b0f1bbe89db5 100644 --- a/scripts/release/__tests__/generate-pr-description.test.ts +++ b/scripts/release/__tests__/generate-pr-description.test.ts @@ -15,7 +15,6 @@ describe('Generate PR Description', () => { labels: ['bug', 'build', 'other label', 'patch:yes'], commit: 'abc123', pull: 42, - state: 'MERGED', links: { commit: '[abc123](https://github.com/storybookjs/storybook/commit/abc123)', pull: '[#42](https://github.com/storybookjs/storybook/pull/42)', @@ -27,7 +26,6 @@ describe('Generate PR Description', () => { id: null, user: 'storybook-bot', pull: null, - state: null, commit: '012b58140c3606efeacbe99c0c410624b0a1ed1f', title: 'Bump version on `next`: preminor (alpha) from 7.2.0 to 7.3.0-alpha.0', labels: null, @@ -43,7 +41,6 @@ describe('Generate PR Description', () => { user: 'shilman', title: 'Some title for a "direct commit"', labels: null, - state: null, commit: '22bb11', pull: null, links: { @@ -58,7 +55,6 @@ describe('Generate PR Description', () => { title: 'Another PR `title` for docs', labels: ['another label', 'documentation', 'patch:yes'], commit: 'ddd222', - state: 'MERGED', pull: 11, links: { commit: '[ddd222](https://github.com/storybookjs/storybook/commit/ddd222)', @@ -73,7 +69,6 @@ describe('Generate PR Description', () => { labels: ['feature request', 'other label'], commit: 'wow1337', pull: 48, - state: 'MERGED', links: { commit: '[wow1337](https://github.com/storybookjs/storybook/commit/wow1337)', pull: '[#48](https://github.com/storybookjs/storybook/pull/48)', @@ -86,7 +81,6 @@ describe('Generate PR Description', () => { title: 'Some PR title with a missing label', labels: ['incorrect label', 'other label'], commit: 'bad999', - state: 'MERGED', pull: 77, links: { commit: '[bad999](https://github.com/storybookjs/storybook/commit/bad999)', @@ -219,7 +213,7 @@ For each pull request below, you need to either manually cherry pick it, or disc - [ ] [#42](https://github.com/storybookjs/storybook/pull/42): \\\`git cherry-pick -m1 -x abc123\\\` - If you\\'ve made any changes doing the above QA (change PR titles, revert PRs), manually trigger a re-generation of this PR with [this workflow](https://github.com/storybookjs/storybook/actions/workflows/prepare-non-patch-release.yml) and wait for it to finish. It will wipe your progress in this to do, which is expected. + If you\\'ve made any changes doing the above QA (change PR titles, revert PRs), manually trigger a re-generation of this PR with [this workflow](https://github.com/storybookjs/storybook/actions/workflows/prepare-prerelease.yml) and wait for it to finish. It will wipe your progress in this to do, which is expected. Feel free to manually commit any changes necessary to this branch **after** you\\'ve done the last re-generation, following the [Make Manual Changes](https://github.com/storybookjs/storybook/blob/next/CONTRIBUTING/RELEASING.md#5-make-manual-changes) section in the docs, *especially* if you\\'re making changes to the changelog. @@ -346,7 +340,7 @@ For each pull request below, you need to either manually cherry pick it, or disc - If you\\'ve made any changes doing the above QA (change PR titles, revert PRs), manually trigger a re-generation of this PR with [this workflow](https://github.com/storybookjs/storybook/actions/workflows/prepare-non-patch-release.yml) and wait for it to finish. It will wipe your progress in this to do, which is expected. + If you\\'ve made any changes doing the above QA (change PR titles, revert PRs), manually trigger a re-generation of this PR with [this workflow](https://github.com/storybookjs/storybook/actions/workflows/prepare-prerelease.yml) and wait for it to finish. It will wipe your progress in this to do, which is expected. Feel free to manually commit any changes necessary to this branch **after** you\\'ve done the last re-generation, following the [Make Manual Changes](https://github.com/storybookjs/storybook/blob/next/CONTRIBUTING/RELEASING.md#5-make-manual-changes) section in the docs, *especially* if you\\'re making changes to the changelog. diff --git a/scripts/release/__tests__/is-pr-frozen.test.ts b/scripts/release/__tests__/is-pr-frozen.test.ts index 00331e0555cd..63747a863ddf 100644 --- a/scripts/release/__tests__/is-pr-frozen.test.ts +++ b/scripts/release/__tests__/is-pr-frozen.test.ts @@ -26,7 +26,6 @@ describe('isPrFrozen', () => { it('should return true when PR is frozen', async () => { getPullInfoFromCommit.mockResolvedValue({ labels: ['freeze'], - state: 'OPEN', }); await expect(isPrFrozen({ patch: false })).resolves.toBe(true); }); @@ -34,15 +33,6 @@ describe('isPrFrozen', () => { it('should return false when PR is not frozen', async () => { getPullInfoFromCommit.mockResolvedValue({ labels: [], - state: 'OPEN', - }); - await expect(isPrFrozen({ patch: false })).resolves.toBe(false); - }); - - it('should return false when PR is closed', async () => { - getPullInfoFromCommit.mockResolvedValue({ - labels: ['freeze'], - state: 'CLOSED', }); await expect(isPrFrozen({ patch: false })).resolves.toBe(false); }); @@ -64,7 +54,7 @@ describe('isPrFrozen', () => { }); await isPrFrozen({ patch: false }); - expect(simpleGit.__fetch).toHaveBeenCalledWith('origin', 'version-non-patch-from-1.0.0', { + expect(simpleGit.__fetch).toHaveBeenCalledWith('origin', 'version-prerelease-from-1.0.0', { '--depth': 1, }); }); diff --git a/scripts/release/__tests__/label-patches.test.ts b/scripts/release/__tests__/label-patches.test.ts index d43290a1828c..d98abc7eb763 100644 --- a/scripts/release/__tests__/label-patches.test.ts +++ b/scripts/release/__tests__/label-patches.test.ts @@ -58,7 +58,6 @@ const pullInfoMock = { commit: '930b47f011f750c44a1782267d698ccdd3c04da3', title: 'Legal: Fix license', labels: ['documentation', 'patch:yes', 'patch:done'], - state: 'MERGED', links: { commit: '[`930b47f011f750c44a1782267d698ccdd3c04da3`](https://github.com/storybookjs/storybook/commit/930b47f011f750c44a1782267d698ccdd3c04da3)', diff --git a/scripts/release/cancel-preparation-runs.ts b/scripts/release/cancel-preparation-runs.ts deleted file mode 100644 index 630bfb4847b3..000000000000 --- a/scripts/release/cancel-preparation-runs.ts +++ /dev/null @@ -1,107 +0,0 @@ -/** - * This script cancels all running preparation workflows in GitHub. - * It will fetch all active runs for the preparation workflows, and cancel them. - */ -/* eslint-disable no-console */ -import chalk from 'chalk'; -import program from 'commander'; -import dedent from 'ts-dedent'; -import { githubRestClient } from './utils/github-client'; - -program - .name('cancel-preparation-workflows') - .description('cancel all running preparation workflows in GitHub'); - -export const PREPARE_PATCH_WORKFLOW_PATH = '.github/workflows/prepare-patch-release.yml'; -export const PREPARE_NON_PATCH_WORKFLOW_PATH = '.github/workflows/prepare-non-patch-release.yml'; - -export const run = async () => { - if (!process.env.GH_TOKEN) { - throw new Error('GH_TOKEN environment variable must be set, exiting.'); - } - - console.log(`🔎 Looking for workflows to cancel...`); - const allWorkflows = await githubRestClient('GET /repos/{owner}/{repo}/actions/workflows', { - owner: 'storybookjs', - repo: 'storybook', - }); - - const preparePatchWorkflowId = allWorkflows.data.workflows.find( - ({ path }) => path === PREPARE_PATCH_WORKFLOW_PATH - )?.id; - const prepareNonPatchWorkflowId = allWorkflows.data.workflows.find( - ({ path }) => path === PREPARE_NON_PATCH_WORKFLOW_PATH - )?.id; - - console.log(`Found workflow IDs for the preparation workflows: - ${chalk.blue(PREPARE_PATCH_WORKFLOW_PATH)}: ${chalk.green(preparePatchWorkflowId)} - ${chalk.blue(PREPARE_NON_PATCH_WORKFLOW_PATH)}: ${chalk.green(prepareNonPatchWorkflowId)}`); - - if (!preparePatchWorkflowId || !prepareNonPatchWorkflowId) { - throw new Error(dedent`🚨 Could not find workflow IDs for the preparation workflows - - Looked for paths: "${chalk.blue(PREPARE_PATCH_WORKFLOW_PATH)}" and "${chalk.blue( - PREPARE_NON_PATCH_WORKFLOW_PATH - )}", are they still correct? - - Found workflows: - ${JSON.stringify(allWorkflows.data.workflows, null, 2)}`); - } - - console.log('🔍 Fetching patch and non-patch runs for preparation workflows...'); - const [patchRuns, nonPatchRuns] = await Promise.all([ - githubRestClient('GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs', { - owner: 'storybookjs', - repo: 'storybook', - workflow_id: preparePatchWorkflowId, - }), - githubRestClient('GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs', { - owner: 'storybookjs', - repo: 'storybook', - workflow_id: prepareNonPatchWorkflowId, - }), - ]); - console.log('✅ Successfully fetched patch and non-patch runs for preparation workflows.'); - - const runsToCancel = patchRuns.data.workflow_runs - .concat(nonPatchRuns.data.workflow_runs) - .filter(({ status }) => - ['in_progress', 'pending', 'queued', 'requested', 'waiting'].includes(status) - ); - - if (runsToCancel.length === 0) { - console.log('👍 No runs to cancel.'); - return; - } - - console.log(`🔍 Found ${runsToCancel.length} runs to cancel. Cancelling them now: - ${runsToCancel - .map((r) => `${chalk.green(r.path)} - ${chalk.green(r.id)}: ${chalk.blue(r.status)}`) - .join('\n ')}`); - - const result = await Promise.allSettled( - runsToCancel.map((r) => - githubRestClient('POST /repos/{owner}/{repo}/actions/runs/{run_id}/cancel', { - owner: 'storybookjs', - repo: 'storybook', - run_id: r.id, - }) - ) - ); - - if (result.some((r) => r.status === 'rejected')) { - console.warn('⚠ī¸ Some runs could not be cancelled:'); - result.forEach((r, index) => { - if (r.status === 'rejected') { - console.warn(`Run ID: ${runsToCancel[index].id} - Reason: ${r.reason}`); - } - }); - } else { - console.log('✅ Successfully cancelled all preparation runs.'); - } -}; - -if (require.main === module) { - run().catch((err) => { - console.error(err); - // this is non-critical work, so we don't want to fail the CI build if this fails - }); -} diff --git a/scripts/release/ensure-next-ahead.ts b/scripts/release/ensure-next-ahead.ts deleted file mode 100644 index 1aa32bfd932c..000000000000 --- a/scripts/release/ensure-next-ahead.ts +++ /dev/null @@ -1,101 +0,0 @@ -/** - * This script ensures that next is always one minor ahead of main. - * This is needed when releasing a stable from next. - * Next will be at eg. 7.4.0-alpha.4, and main will be at 7.3.0. - * Then we release 7.4.0 by merging next to latest-release to main. - * We then ensure here that next is bumped to 7.5.0-alpha.0 - without releasing it. - * If this is a patch release bumping main to 7.3.1, next will not be touched because it's already ahead. - */ - -/* eslint-disable no-console */ -import chalk from 'chalk'; -import path from 'path'; -import program from 'commander'; -import semver from 'semver'; -import { z } from 'zod'; -import { readJson } from 'fs-extra'; -import { run as bumpVersion } from './version'; -import { git } from './utils/git-client'; - -program - .name('ensure-next-ahead') - .description('ensure the "next" branch is always a minor version ahead of "main"') - .requiredOption('-M, --main-version ', 'The version currently on the "main" branch'); - -const optionsSchema = z - .object({ - mainVersion: z.string(), - }) - .refine((schema) => semver.valid(schema.mainVersion), { - message: "main-version must be a valid semver version string like '7.4.2'.", - }); - -type Options = { - mainVersion: string; -}; - -const CODE_DIR_PATH = path.join(__dirname, '..', '..', 'code'); -const CODE_PACKAGE_JSON_PATH = path.join(CODE_DIR_PATH, 'package.json'); - -const validateOptions = (options: { [key: string]: any }): options is Options => { - optionsSchema.parse(options); - return true; -}; - -const getCurrentVersion = async () => { - const { version } = await readJson(CODE_PACKAGE_JSON_PATH); - console.log(`📐 Current version of Storybook is ${chalk.green(version)}`); - return version; -}; - -export const run = async (options: unknown) => { - if (!validateOptions(options)) { - return; - } - const { mainVersion } = options; - - const { current: currentGitBranch } = await git.status(); - - if (currentGitBranch !== 'next') { - console.warn( - `🚧 The current branch is not "next" but "${currentGitBranch}", this only really makes sense to run on the "next" branch.` - ); - } - - // Get the current version from code/package.json - const currentNextVersion = await getCurrentVersion(); - if (semver.gt(currentNextVersion, mainVersion)) { - console.log( - `✅ The version on next (${chalk.green( - currentNextVersion - )}) is already ahead of the version on main (${chalk.green(mainVersion)}), no action needed.` - ); - return; - } - - const nextNextVersion = `${semver.inc(mainVersion, 'minor')}-alpha.0`; - - console.log( - `🤜 The version on next (${chalk.green( - currentNextVersion - )}) is behind the version on main (${chalk.green(mainVersion)}), bumping to ${chalk.blue( - nextNextVersion - )}...` - ); - - await bumpVersion({ exact: nextNextVersion }); - - console.log( - `✅ bumped all versions to ${chalk.green( - nextNextVersion - )}, remember to commit and push to next.` - ); -}; - -if (require.main === module) { - const parsed = program.parse(); - run(parsed.opts()).catch((err) => { - console.error(err); - process.exit(1); - }); -} diff --git a/scripts/release/generate-pr-description.ts b/scripts/release/generate-pr-description.ts index d437e8dc87bc..16a6928e994f 100644 --- a/scripts/release/generate-pr-description.ts +++ b/scripts/release/generate-pr-description.ts @@ -18,7 +18,7 @@ program 'Which version to generate changelog from, eg. "7.0.7". Defaults to the version at code/package.json' ) .option('-N, --next-version ', 'Which version to generate changelog to, eg. "7.0.8"') - .option('-P, --unpicked-patches', 'Set to only consider PRs labeled with "patch:yes" label') + .option('-P, --unpicked-patches', 'Set to only consider PRs labeled with "patch" label') .option( '-M, --manual-cherry-picks ', 'A stringified JSON array of commit hashes, of patch PRs that needs to be cherry-picked manually' @@ -52,7 +52,6 @@ const CHANGE_TITLES_TO_IGNORE = [ /\[ci skip\]/i, /^Update CHANGELOG\.md for.*/i, /^Release: (Pre)?(Patch|Minor|Major|Release).*\d+$/i, - /^Update \.\/docs\/versions/, ]; export const mapToChangelist = ({ @@ -66,7 +65,7 @@ export const mapToChangelist = ({ .filter((change) => { // eslint-disable-next-line no-restricted-syntax for (const titleToIgnore of CHANGE_TITLES_TO_IGNORE) { - if (change.title?.match(titleToIgnore)) { + if (change.title.match(titleToIgnore)) { return false; } } @@ -91,7 +90,7 @@ export const mapToChangelist = ({ )[0] || 'unknown') as keyof typeof LABELS_BY_IMPORTANCE; return `- [ ] **${LABELS_BY_IMPORTANCE[label]}**: ${change.title} ${change.links.pull}${ - !unpickedPatches && change.labels?.includes('patch:yes') ? ' (will also be patched)' : '' + !unpickedPatches && change.labels.includes('patch:yes') ? ' (will also be patched)' : '' }`; }) .join('\n'); @@ -142,9 +141,7 @@ export const generateReleaseDescription = ({ changelogText: string; manualCherryPicks?: string; }): string => { - const workflow = semver.prerelease(nextVersion) - ? 'prepare-non-patch-release' - : 'prepare-patch-release'; + const workflow = semver.prerelease(nextVersion) ? 'prepare-prerelease' : 'prepare-patch-release'; const workflowUrl = `https://github.com/storybookjs/storybook/actions/workflows/${workflow}.yml`; return ( diff --git a/scripts/release/is-pr-frozen.ts b/scripts/release/is-pr-frozen.ts index e81610a451b9..70289b5369d8 100644 --- a/scripts/release/is-pr-frozen.ts +++ b/scripts/release/is-pr-frozen.ts @@ -12,7 +12,7 @@ program .description( 'returns true if the versioning pull request associated with the current branch has the "freeze" label' ) - .option('-H, --patch', 'Look for patch PR instead of next PR', false) + .option('-P, --patch', 'Look for patch PR instead of prerelease PR', false) .option('-V, --verbose', 'Enable verbose logging', false); const CODE_DIR_PATH = path.join(__dirname, '..', '..', 'code'); @@ -46,7 +46,7 @@ export const run = async (options: unknown) => { const { verbose, patch } = options as { verbose?: boolean; patch?: boolean }; const version = await getCurrentVersion(); - const branch = `version-${patch ? 'patch' : 'non-patch'}-from-${version}`; + const branch = `version-${patch ? 'patch' : 'prerelease'}-from-${version}`; console.log(`đŸ’Ŧ Determining if pull request from branch '${chalk.blue(branch)}' is frozen`); @@ -78,14 +78,6 @@ export const run = async (options: unknown) => { console.log(`🔍 Found pull request: ${JSON.stringify(pullRequest, null, 2)}`); - if (pullRequest.state !== 'OPEN') { - console.log('❌ The pull request is already closed, ignoring it'); - if (process.env.GITHUB_ACTIONS === 'true') { - setOutput('frozen', false); - } - return false; - } - const isFrozen = pullRequest.labels?.includes('freeze'); if (process.env.GITHUB_ACTIONS === 'true') { setOutput('frozen', isFrozen); diff --git a/scripts/release/pick-patches.ts b/scripts/release/pick-patches.ts index 9d3169d78c8a..eab1743dcc7b 100644 --- a/scripts/release/pick-patches.ts +++ b/scripts/release/pick-patches.ts @@ -80,7 +80,6 @@ export const run = async (_: unknown) => { } if (process.env.GITHUB_ACTIONS === 'true') { - setOutput('pr-count', JSON.stringify(patchPRs.length)); setOutput('failed-cherry-picks', JSON.stringify(failedCherryPicks)); } }; diff --git a/scripts/release/utils/get-changes.ts b/scripts/release/utils/get-changes.ts index 416ea624fb50..1ad2a0759198 100644 --- a/scripts/release/utils/get-changes.ts +++ b/scripts/release/utils/get-changes.ts @@ -53,7 +53,7 @@ export const getFromCommit = async (from?: string | undefined, verbose?: boolean console.log(`🔍 No 'from' specified, found latest tag: ${chalk.blue(latest)}`); } } - const commit = await getCommitAt(actualFrom!, verbose); + const commit = await getCommitAt(actualFrom, verbose); if (verbose) { console.log(`🔍 Found 'from' commit: ${chalk.blue(commit)}`); } diff --git a/scripts/release/utils/get-github-info.ts b/scripts/release/utils/get-github-info.ts index bdfe995a9001..6bd7126aec04 100644 --- a/scripts/release/utils/get-github-info.ts +++ b/scripts/release/utils/get-github-info.ts @@ -40,7 +40,6 @@ function makeQuery(repos: ReposWithCommitsAndPRsToFetch) { number id title - state url mergedAt labels(first: 50) { @@ -64,7 +63,6 @@ function makeQuery(repos: ReposWithCommitsAndPRsToFetch) { : `pr__${data.pull}: pullRequest(number: ${data.pull}) { url title - state author { login url @@ -163,12 +161,11 @@ export type PullRequestInfo = { user: string | null; id: string | null; title: string | null; - state: string | null; commit: string | null; pull: number | null; labels: string[] | null; links: { - commit: string | null; + commit: string; pull: string | null; user: string | null; }; @@ -200,7 +197,6 @@ export async function getPullInfoFromCommit(request: { pull: null, commit: request.commit, title: null, - state: null, labels: null, links: { commit: request.commit, @@ -209,7 +205,10 @@ export async function getPullInfoFromCommit(request: { }, }; } - let user = data?.author?.user || null; + let user = null; + if (data.author && data.author.user) { + user = data.author.user; + } const associatedPullRequest = data.associatedPullRequests && @@ -246,7 +245,6 @@ export async function getPullInfoFromCommit(request: { pull: associatedPullRequest ? associatedPullRequest.number : null, commit: request.commit, title: associatedPullRequest ? associatedPullRequest.title : null, - state: associatedPullRequest ? associatedPullRequest.state : null, labels: associatedPullRequest ? (associatedPullRequest.labels.nodes || []).map((label: { name: string }) => label.name) : null, @@ -289,7 +287,6 @@ export async function getPullInfoFromPullRequest(request: { pull: request.pull, commit: commit ? commit.oid : null, title: title || null, - state: data?.state || null, labels: data ? (data.labels.nodes || []).map((label: { name: string }) => label.name) : null, links: { commit: commit ? `[\`${commit.oid}\`](${commit.commitUrl})` : null, diff --git a/scripts/release/utils/github-client.ts b/scripts/release/utils/github-client.ts index e81991414bf9..646ba1003986 100644 --- a/scripts/release/utils/github-client.ts +++ b/scripts/release/utils/github-client.ts @@ -1,8 +1,6 @@ /* eslint-disable no-console */ import type { GraphQlQueryResponseData } from '@octokit/graphql'; import { graphql } from '@octokit/graphql'; -import { request } from '@octokit/request'; -import fetch from 'node-fetch'; export interface PullRequest { number: number; @@ -16,13 +14,6 @@ export const githubGraphQlClient = graphql.defaults({ headers: { authorization: `token ${process.env.GH_TOKEN}` }, }); -export const githubRestClient = request.defaults({ - request: { - fetch, - }, - headers: { authorization: `token ${process.env.GH_TOKEN}`, 'X-GitHub-Api-Version': '2022-11-28' }, -}); - export async function getUnpickedPRs( baseBranch: string, verbose?: boolean diff --git a/scripts/yarn.lock b/scripts/yarn.lock index f9d17fe543a8..19568a9f4a70 100644 --- a/scripts/yarn.lock +++ b/scripts/yarn.lock @@ -2531,17 +2531,6 @@ __metadata: languageName: node linkType: hard -"@octokit/endpoint@npm:^9.0.0": - version: 9.0.1 - resolution: "@octokit/endpoint@npm:9.0.1" - dependencies: - "@octokit/types": ^12.0.0 - is-plain-object: ^5.0.0 - universal-user-agent: ^6.0.0 - checksum: 757505b1cd634bcd7b71a18c8fe07dfda47790598ddd0d9d13f47d68713070f49953a672ac40ec39787defc2a7e07d08dca97756def7b907118f8f8d4c653f5c - languageName: node - linkType: hard - "@octokit/graphql@npm:^4.3.1, @octokit/graphql@npm:^4.5.8": version: 4.8.0 resolution: "@octokit/graphql@npm:4.8.0" @@ -2578,13 +2567,6 @@ __metadata: languageName: node linkType: hard -"@octokit/openapi-types@npm:^19.0.0": - version: 19.0.0 - resolution: "@octokit/openapi-types@npm:19.0.0" - checksum: 8270e0a224bbef6d1c82396cda873a3528111cb25a772184b39e1fbada4e6433b41c5f4634ecf204e8a2816a802048197e0132b7615b579fab217f7c1e29545b - languageName: node - linkType: hard - "@octokit/plugin-paginate-rest@npm:^2.16.8, @octokit/plugin-paginate-rest@npm:^2.2.0": version: 2.21.3 resolution: "@octokit/plugin-paginate-rest@npm:2.21.3" @@ -2649,17 +2631,6 @@ __metadata: languageName: node linkType: hard -"@octokit/request-error@npm:^5.0.0": - version: 5.0.1 - resolution: "@octokit/request-error@npm:5.0.1" - dependencies: - "@octokit/types": ^12.0.0 - deprecation: ^2.0.0 - once: ^1.4.0 - checksum: e72a4627120de345b54876a1f007664095e5be9d624fce2e14fccf7668cd8f5e4929d444d8fc085d48e1fb5cd548538453974aab129a669101110d6679dce6c6 - languageName: node - linkType: hard - "@octokit/request@npm:^5.4.0, @octokit/request@npm:^5.6.0, @octokit/request@npm:^5.6.3": version: 5.6.3 resolution: "@octokit/request@npm:5.6.3" @@ -2688,19 +2659,6 @@ __metadata: languageName: node linkType: hard -"@octokit/request@npm:^8.1.2": - version: 8.1.2 - resolution: "@octokit/request@npm:8.1.2" - dependencies: - "@octokit/endpoint": ^9.0.0 - "@octokit/request-error": ^5.0.0 - "@octokit/types": ^12.0.0 - is-plain-object: ^5.0.0 - universal-user-agent: ^6.0.0 - checksum: 49219eb71b856acecc8268f05a7a7d074488f9eaeb59439f5c8872e5b4555a4e6c0cf0ebcadf0983466f88957e74c27765f582e473b0dd89b453274501f0dc37 - languageName: node - linkType: hard - "@octokit/rest@npm:^16.43.0 || ^17.11.0 || ^18.12.0, @octokit/rest@npm:^18.12.0": version: 18.12.0 resolution: "@octokit/rest@npm:18.12.0" @@ -2725,15 +2683,6 @@ __metadata: languageName: node linkType: hard -"@octokit/types@npm:^12.0.0": - version: 12.0.0 - resolution: "@octokit/types@npm:12.0.0" - dependencies: - "@octokit/openapi-types": ^19.0.0 - checksum: 6e5b68f8855775638db53244348d2ca07896d36a15aad41d3cb652fafaa1b307c3b6222319174dd5716accd9076e101da838b82f988a7c380a8e9d188e3aadf1 - languageName: node - linkType: hard - "@octokit/types@npm:^4.1.6": version: 4.1.10 resolution: "@octokit/types@npm:4.1.10" @@ -2952,7 +2901,6 @@ __metadata: "@jest/globals": ^29.3.1 "@nx/workspace": 16.2.1 "@octokit/graphql": ^5.0.5 - "@octokit/request": ^8.1.2 "@storybook/eslint-config-storybook": ^3.1.2 "@storybook/jest": next "@storybook/linter-config": ^3.1.2 From 75e585de951932b1178af510f57c05be9612127a Mon Sep 17 00:00:00 2001 From: Jeppe Reinhold Date: Thu, 5 Oct 2023 14:04:09 +0200 Subject: [PATCH 66/83] Revert "Merge pull request #24379 from storybookjs/revert-24106-release-stable-to-latest" This reverts commit f4e13cd94a80259d7c58ca948e10693462955715, reversing changes made to 33e564e163ecb4018a16f15fd897cb9365eed6f7. --- ...ease.yml => prepare-non-patch-release.yml} | 29 +++- .github/workflows/prepare-patch-release.yml | 11 +- .github/workflows/publish.yml | 33 ++-- CONTRIBUTING/RELEASING.md | 164 +++++++++--------- scripts/package.json | 3 + .../__tests__/cancel-preparation-runs.test.ts | 107 ++++++++++++ .../__tests__/ensure-next-ahead.test.ts | 85 +++++++++ .../__tests__/generate-pr-description.test.ts | 10 +- .../release/__tests__/is-pr-frozen.test.ts | 12 +- .../release/__tests__/label-patches.test.ts | 1 + scripts/release/cancel-preparation-runs.ts | 107 ++++++++++++ scripts/release/ensure-next-ahead.ts | 101 +++++++++++ scripts/release/generate-pr-description.ts | 11 +- scripts/release/is-pr-frozen.ts | 12 +- scripts/release/pick-patches.ts | 1 + scripts/release/utils/get-changes.ts | 2 +- scripts/release/utils/get-github-info.ts | 13 +- scripts/release/utils/github-client.ts | 9 + scripts/yarn.lock | 52 ++++++ 19 files changed, 648 insertions(+), 115 deletions(-) rename .github/workflows/{prepare-prerelease.yml => prepare-non-patch-release.yml} (81%) create mode 100644 scripts/release/__tests__/cancel-preparation-runs.test.ts create mode 100644 scripts/release/__tests__/ensure-next-ahead.test.ts create mode 100644 scripts/release/cancel-preparation-runs.ts create mode 100644 scripts/release/ensure-next-ahead.ts diff --git a/.github/workflows/prepare-prerelease.yml b/.github/workflows/prepare-non-patch-release.yml similarity index 81% rename from .github/workflows/prepare-prerelease.yml rename to .github/workflows/prepare-non-patch-release.yml index e68a7e1ef63a..ea72d924d918 100644 --- a/.github/workflows/prepare-prerelease.yml +++ b/.github/workflows/prepare-non-patch-release.yml @@ -34,7 +34,7 @@ concurrency: cancel-in-progress: true jobs: - prepare-prerelease-pull-request: + prepare-non-patch-pull-request: name: Prepare prerelease pull request runs-on: ubuntu-latest environment: release @@ -112,21 +112,35 @@ jobs: run: | yarn release:version --deferred --release-type ${{ inputs.release-type || 'prerelease' }} ${{ inputs.pre-id && format('{0} {1}', '--pre-id', inputs.pre-id) || '' }} --verbose + - name: Check release vs prerelease + id: is-prerelease + run: yarn release:is-prerelease ${{ steps.bump-version.outputs.next-version }} + - name: Write changelog env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | yarn release:write-changelog ${{ steps.bump-version.outputs.next-version }} --verbose - - name: 'Commit changes to branch: version-prerelease-from-${{ steps.bump-version.outputs.current-version }}' + - name: 'Commit changes to branch: version-non-patch-from-${{ steps.bump-version.outputs.current-version }}' working-directory: . run: | git config --global user.name 'storybook-bot' git config --global user.email '32066757+storybook-bot@users.noreply.github.com' - git checkout -b version-prerelease-from-${{ steps.bump-version.outputs.current-version }} + git checkout -b version-non-patch-from-${{ steps.bump-version.outputs.current-version }} + git add . + git commit -m "Write changelog for ${{ steps.bump-version.outputs.next-version }} [skip ci]" || true + git push --force origin version-non-patch-from-${{ steps.bump-version.outputs.current-version }} + + - name: Resolve merge-conflicts with base branch + if: steps.is-prerelease.outputs.prerelease == 'true' + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + git pull origin latest-release + git checkout --ours . git add . - git commit -m "Write changelog for ${{ steps.bump-version.outputs.next-version }}" || true - git push --force origin version-prerelease-from-${{ steps.bump-version.outputs.current-version }} + git commit -m "Merge latest-release into version-non-patch-from-${{ steps.bump-version.outputs.current-version }} with conflicts resolved to ours [skip ci]" - name: Generate PR description id: description @@ -144,14 +158,15 @@ jobs: gh pr edit \ --repo "${{github.repository }}" \ --title "Release: $CAPITALIZED_RELEASE_TYPE ${{ inputs.pre-id && format('{0} ', inputs.pre-id) }}${{ steps.bump-version.outputs.next-version }}" \ + --base ${{ steps.is-prerelease.outputs.prerelease == 'true' && 'next-release' || 'latest-release' }} \ --body "${{ steps.description.outputs.description }}" else gh pr create \ --repo "${{github.repository }}"\ --title "Release: $CAPITALIZED_RELEASE_TYPE ${{ inputs.pre-id && format('{0} ', inputs.pre-id) }}${{ steps.bump-version.outputs.next-version }}" \ --label "release" \ - --base next-release \ - --head version-prerelease-from-${{ steps.bump-version.outputs.current-version }} \ + --base ${{ steps.is-prerelease.outputs.prerelease == 'true' && 'next-release' || 'latest-release' }} \ + --head version-non-patch-from-${{ steps.bump-version.outputs.current-version }} \ --body "${{ steps.description.outputs.description }}" fi diff --git a/.github/workflows/prepare-patch-release.yml b/.github/workflows/prepare-patch-release.yml index e4f8e38df502..5cdc1ba44fcf 100644 --- a/.github/workflows/prepare-patch-release.yml +++ b/.github/workflows/prepare-patch-release.yml @@ -88,6 +88,15 @@ jobs: git config --global user.email '32066757+storybook-bot@users.noreply.github.com' yarn release:pick-patches + - name: Cancel when no patches to pick + if: steps.pick-patches.outputs.pr-count == '0' && steps.pick-patches.outputs.pr-count != null + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + # From https://stackoverflow.com/a/75809743 + run: | + gh run cancel ${{ github.run_id }} + gh run watch ${{ github.run_id }} + - name: Bump version deferred id: bump-version if: steps.unreleased-changes.outputs.has-changes-to-release == 'true' @@ -121,7 +130,7 @@ jobs: git config --global user.email '32066757+storybook-bot@users.noreply.github.com' git checkout -b version-patch-from-${{ steps.versions.outputs.current }} git add . - git commit -m "Write changelog for ${{ steps.versions.outputs.next }}" || true + git commit -m "Write changelog for ${{ steps.versions.outputs.next }} [skip ci]" || true git push --force origin version-patch-from-${{ steps.versions.outputs.current }} - name: Generate PR description diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 863b4e9ae7e2..df82ca33c9a5 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -5,7 +5,7 @@ on: push: branches: - latest-release - - next-release + - non-patch-release env: PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1 @@ -36,6 +36,11 @@ jobs: gh run cancel ${{ github.run_id }} gh run watch ${{ github.run_id }} + - name: Cancel all release preparation runs + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: yarn release:cancel-preparation-runs + - name: Checkout ${{ github.ref_name }} uses: actions/checkout@v3 with: @@ -63,7 +68,6 @@ jobs: yarn install - name: Apply deferred version bump and commit - id: version-bump working-directory: . run: | CURRENT_VERSION=$(cat ./code/package.json | jq '.version') @@ -122,12 +126,11 @@ jobs: run: git fetch --tags origin # when this is a patch release from main, label any patch PRs included in the release - # when this is a stable release from next, label ALL patch PRs found, as they will per definition be "patched" now - name: Label patch PRs as picked - if: github.ref_name == 'latest-release' || (steps.publish-needed.outputs.published == 'false' && steps.target.outputs.target == 'next' && !steps.is-prerelease.outputs.prerelease) + if: github.ref_name == 'latest-release' env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: yarn release:label-patches ${{ steps.target.outputs.target == 'next' && '--all' || '' }} + run: yarn release:label-patches - name: Create GitHub Release if: steps.publish-needed.outputs.published == 'false' @@ -151,8 +154,20 @@ jobs: git merge ${{ github.ref_name }} git push origin ${{ steps.target.outputs.target }} + - name: Ensure `next` is a minor version ahead of `main` + if: steps.target.outputs.target == 'main' + run: | + git checkout next + git pull + + yarn release:ensure-next-ahead --main-version "${{ steps.version.outputs.current-version }}" + + git add .. + git commit -m "Bump next to be one minor ahead of main [skip ci]" + git push origin next + - name: Sync CHANGELOG.md from `main` to `next` - if: github.ref_name == 'latest-release' + if: steps.target.outputs.target == 'main' working-directory: . run: | git fetch origin next @@ -160,7 +175,7 @@ jobs: git pull git checkout origin/main ./CHANGELOG.md git add ./CHANGELOG.md - git commit -m "Update CHANGELOG.md for v${{ steps.version.outputs.current-version }} [skip ci]" + git commit -m "Update CHANGELOG.md for v${{ steps.version.outputs.current-version }} [skip ci]" || true git push origin next - name: Sync version JSONs from `next-release` to `main` @@ -176,10 +191,6 @@ jobs: git commit -m "Update $VERSION_FILE for v${{ steps.version.outputs.current-version }}" git push origin main - - name: Overwrite main with next - if: steps.target.outputs.target == 'next' && steps.is-prerelease.outputs.prerelease == 'false' - run: git push --force origin next:main - - name: Report job failure to Discord if: failure() env: diff --git a/CONTRIBUTING/RELEASING.md b/CONTRIBUTING/RELEASING.md index 0997b757b6ea..e92fa8fa36a3 100644 --- a/CONTRIBUTING/RELEASING.md +++ b/CONTRIBUTING/RELEASING.md @@ -8,8 +8,8 @@ - [Introduction](#introduction) - [Branches](#branches) - [Release Pull Requests](#release-pull-requests) - - [Prereleases](#prereleases) - [Patch Releases](#patch-releases) + - [Non-patch Releases](#non-patch-releases) - [Publishing](#publishing) - [👉 How to Release](#-how-to-release) - [1. Find the Prepared Pull Request](#1-find-the-prepared-pull-request) @@ -21,6 +21,8 @@ - [7. See the "Publish" Workflow Finish](#7-see-the-publish-workflow-finish) - [Releasing Locally in an Emergency 🚨](#releasing-locally-in-an-emergency-) - [Canary Releases](#canary-releases) + - [With GitHub UI](#with-github-ui) + - [With the CLI](#with-the-cli) - [Versioning Scenarios](#versioning-scenarios) - [Prereleases - `7.1.0-alpha.12` -\> `7.1.0-alpha.13`](#prereleases---710-alpha12---710-alpha13) - [Prerelease promotions - `7.1.0-alpha.13` -\> `7.1.0-beta.0`](#prerelease-promotions---710-alpha13---710-beta0) @@ -31,7 +33,7 @@ - [Prerelease of upcoming patch release - `7.0.20` -\> `7.0.21-alpha.0`](#prerelease-of-upcoming-patch-release---7020---7021-alpha0) - [Merges to `main` without versioning](#merges-to-main-without-versioning) - [FAQ](#faq) - - [When should I use the "patch" label?](#when-should-i-use-the-patch-label) + - [When should I use the "patch:yes" label?](#when-should-i-use-the-patchyes-label) - [How do I make changes to the release tooling/process?](#how-do-i-make-changes-to-the-release-toolingprocess) - [Why do I need to re-trigger workflows to update the changelog?](#why-do-i-need-to-re-trigger-workflows-to-update-the-changelog) - [Which combination of inputs creates the version bump I need?](#which-combination-of-inputs-creates-the-version-bump-i-need) @@ -43,19 +45,19 @@ This document explains the release process for the Storybook monorepo. There are two types: -1. Prereleases and major/minor releases - releasing any content that is on the `next` branch +1. Non-patch releases - releasing any content that is on the `next` branch, either prereleases or stable releases 2. Patch releases - picking any content from `next` to `main`, that needs to be patched back to the current stable minor release The release process is based on automatically created "Release Pull Requests", that when merged will trigger a new version to be released. A designated Releaser -- which may rotate between core team members -- will go through the release process in the current Release PR. This process is implemented with NodeJS scripts in [`scripts/release`](../scripts/release/) and three GitHub Actions workflows: -- [Prepare Prerelease PR](../.github/workflows/prepare-prerelease.yml) -- [Prepare Patch PR](../.github/workflows/prepare-patch-release.yml) +- [Prepare `next` PR](../.github/workflows/prepare-non-patch-release.yml) +- [Prepare patch PR](../.github/workflows/prepare-patch-release.yml) - [Publish](../.github/workflows/publish.yml) > **Note** -> This document distinguishes between **patch** releases and **prereleases**. This is a simplification; stable major and minor releases work the same way as prereleases. The distinction reflects the difference between patching an existing minor version on `main` or releasing a new minor/major/prerelease from `next`. +> This document distinguishes between **patch** and **non-patch** releases. The distinction reflects the difference between patching an existing minor version on `main` or releasing a new minor/major/prerelease from `next`. ### Branches @@ -101,7 +103,7 @@ Two GitHub Actions workflows automatically create release pull requests, one for The high-level flow is: 1. When a PR is merged to `next` (or a commit is pushed), both release pull requests are (re)generated. -2. They create a new branch - `version-(patch|prerelease)-from-`. +2. They create a new branch - `version-(patch|non-patch)-from-`. 3. They calculate which version to bump to according to the version strategy. 4. They update `CHANGELOG(.prerelease).md` with all changes detected. 5. They commit everything. @@ -115,62 +117,20 @@ A few key points to note in this flow: - The changelogs are committed during the preparation, but the packages are not version bumped and not published until later. - The release pull requests don't target their working branches (`next` and `main`), but rather `next-release` and `latest-release`. -### Prereleases - -> **Note** -> Workflow: [`prepare-prerelease.yml`](../.github/workflows/prepare-prerelease.yml) - -Prereleases are prepared with all content from the `next` branch. The changelog is generated by examining the git history, and looking up all the commits and pull requests between the current prerelease (on `next-release`) and `HEAD` of `next`. - -The default versioning strategy is to increase the current prerelease number, as described in [Prereleases - `7.1.0-alpha.12` -> `7.1.0-alpha.13`](#prereleases---710-alpha12---710-alpha13). If there is no prerelease number (i.e., we just released a new stable minor/major version), it will add one to a patch bump, so it would go from `7.2.0` to `7.2.1-0` by default. - -Prerelease PRs are only created if there are actual changes to release. Content labeled with "build" or "documentation" is [not considered "releasable"](#which-changes-are-considered-releasable-and-what-does-it-mean) and is not user-facing, so it doesn't make sense to create a release. This is explained in more detail in [Why are no release PRs being prepared?](#why-are-no-release-prs-being-prepared). - -The preparation workflow will create a new branch from `next`, called `version-prerelease-from-`, and open a pull request targeting `next-release`. When the Releaser merges it, the [publish workflow](#publishing) will merge `next-release` into `next`. - -Here's an example of a workflow where a feature and a bugfix have been created and then released to a new `7.1.0-alpha.29` version. All the commits highlighted with square dots are the ones that will be considered when generating the changelog. - -```mermaid -%%{init: { 'gitGraph': { 'mainBranchName': 'next' } } }%% -gitGraph - commit - branch next-release - commit tag: "7.1.0-alpha.28" - checkout next - merge next-release - commit type: HIGHLIGHT id: "direct commit" - branch new-feature - commit - commit - checkout next - merge new-feature type: HIGHLIGHT - branch some-bugfix - commit - checkout next - merge some-bugfix type: HIGHLIGHT - branch version-prerelease-from-7.1.0-alpha.28 - commit id: "write changelog" - checkout next-release - merge version-prerelease-from-7.1.0-alpha.28 - commit id: "bump versions" tag: "7.1.0-alpha.29" - checkout next - merge next-release -``` - ### Patch Releases > **Note** > Workflow: [`prepare-patch-release.yml`](../.github/workflows/prepare-patch-release.yml) -Patch releases are created by [cherry-picking](https://www.atlassian.com/git/tutorials/cherry-pick) any merged, unreleased pull requests that have the "**patch**" label applied to the `next` branch. The merge commit of said pull requests are cherry-picked. +Patch releases are created by [cherry-picking](https://www.atlassian.com/git/tutorials/cherry-pick) any merged, unreleased pull requests that have the "**patch:yes**" label applied to the `next` branch. The merge commit of said pull requests are cherry-picked. -Sometimes it is desired to pick pull requests back to `main` even if they are not considered "releasable". Unlike prerelease preparation, patch releases will not be canceled if the content is not releasable. It might not make sense to create a new patch release if the changes are only for documentation and/or internal build systems. However, getting the changes back to `main` is the only way to deploy the documentation to the production docs site. You may also want to cherry-pick changes to internal CI to fix issues. These are valid scenarios where you want to cherry-pick the changes without being blocked on "releasable" content. In these cases, where all cherry picks are non-releasable, the preparation workflow creates a "merging" pull request instead of a "releasing" pull request. This pull request does not bump versions or update changelogs; it just cherry-picks the changes and allows you to merge them into `latest-release` -> `main`. +Sometimes it is desired to pick pull requests back to `main` even if they are not considered "releasable". Unlike non-patch-release preparation, patch releases will not be canceled if the content is not releasable. It might not make sense to create a new patch release if the changes are only for documentation and/or internal build systems. However, getting the changes back to `main` is the only way to deploy the documentation to the production docs site. You may also want to cherry-pick changes to internal CI to fix issues. These are valid scenarios where you want to cherry-pick the changes without being blocked on "releasable" content. In these cases, where all cherry picks are non-releasable, the preparation workflow creates a "merging" pull request instead of a "releasing" pull request. This pull request does not bump versions or update changelogs; it just cherry-picks the changes and allows you to merge them into `latest-release` -> `main`. The preparation workflow sequentially cherry-picks each patch pull request to its branch. If this cherry-picking fails due to conflicts or other reasons, it is ignored and the next pull request is processed. All failing cherry-picks are listed in the release pull request's description, for the Releaser to manually cherry-pick during the release process. This problem occurs more often when `main` and `next` diverge, i.e. the longer it has been since a stable major/minor release. -Similar to the prerelease flow, the preparation workflow for patches will create a new branch from `main` called `version-patch-from-`, and open a pull request that targets `latest-release`. When the pull request is merged by the Releaser, the [publish workflow](#publishing) will eventually merge `latest-release` into `main`. +Similar to the non-patch-release flow, the preparation workflow for patches will create a new branch from `main` called `version-patch-from-`, and open a pull request that targets `latest-release`. When the pull request is merged by the Releaser, the [publish workflow](#publishing) will eventually merge `latest-release` into `main`. -Here is an example of a workflow where a feature and two bug fixes have been merged to `next`. Only the bug fixes have the "**patch**" label, so only those two go into the new `7.0.19` release. Note that it is the merge commits to `next` that are cherry-picked, not the commits on the bugfix branches. +Here is an example of a workflow where a feature and two bug fixes have been merged to `next`. Only the bug fixes have the "**patch:yes**" label, so only those two go into the new `7.0.19` release. Note that it is the merge commits to `next` that are cherry-picked, not the commits on the bugfix branches. ```mermaid gitGraph @@ -208,21 +168,62 @@ gitGraph merge latest-release ``` +### Non-patch Releases + +> **Note** +> Workflow: [`prepare-non-patch-release.yml`](../.github/workflows/prepare-non-patch-release.yml) + +Non-patch-releases are prepared with all content from the `next` branch. The changelog is generated by examining the git history, and looking up all the commits and pull requests between the current prerelease (on `next-release`) and `HEAD` of `next`. + +The default versioning strategy is to increase the current prerelease number, as described in [Prereleases - `7.1.0-alpha.12` -> `7.1.0-alpha.13`](#prereleases---710-alpha12---710-alpha13). If there is no prerelease number (i.e., we just released a new stable minor/major version), it will add one to a patch bump, so it would go from `7.2.0` to `7.2.1-0` by default. + +`next`-PRs are only created if there are actual changes to release. Content labeled with "build" or "documentation" is [not considered "releasable"](#which-changes-are-considered-releasable-and-what-does-it-mean) and is not user-facing, so it doesn't make sense to create a release. This is explained in more detail in [Why are no release PRs being prepared?](#why-are-no-release-prs-being-prepared). + +The preparation workflow will create a new branch from `next`, called `version-non-patch-from-`, and open a pull request targeting `next-release`. When the Releaser merges it, the [publish workflow](#publishing) will merge `next-release` into `next`. + +Here's an example of a workflow where a feature and a bugfix have been created and then released to a new `7.1.0-alpha.29` version. All the commits highlighted with square dots are the ones that will be considered when generating the changelog. + +```mermaid +%%{init: { 'gitGraph': { 'mainBranchName': 'next' } } }%% +gitGraph + commit + branch next-release + commit tag: "7.1.0-alpha.28" + checkout next + merge next-release + commit type: HIGHLIGHT id: "direct commit" + branch new-feature + commit + commit + checkout next + merge new-feature type: HIGHLIGHT + branch some-bugfix + commit + checkout next + merge some-bugfix type: HIGHLIGHT + branch version-non-patch-from-7.1.0-alpha.28 + commit id: "write changelog" + checkout next-release + merge version-non-patch-from-7.1.0-alpha.28 + commit id: "bump versions" tag: "7.1.0-alpha.29" + checkout next + merge next-release +``` + ### Publishing > **Note** > Workflow: [`publish.yml`](../.github/workflows/publish.yml) -When either a prerelease or a patch release branch is merged into `main` or `next-release`, the publishing workflow is triggered. This workflow performs the following tasks: +When either a non-patch-release or a patch release branch is merged into `latest-release` or `next-release`, the publishing workflow is triggered. This workflow performs the following tasks: 1. Bump versions of all packages according to the plan from the prepared PRs 2. Install dependencies and build all packages. 3. Publish packages to npm. -4. (If this is a patch release, add the "**picked**" label to all relevant pull requests.) +4. (If this is a patch release, add the "**patch:done**" label to all relevant pull requests.) 5. Create a new GitHub Release, including a version tag in the release branch (`latest-release` or `next-release`). 6. Merge the release branch into the core branch (`main` or `next`). 7. (If this is a patch release, copy the `CHANGELOG.md` changes from `main` to `next`.) -8. (If this is [a promotion from a prerelease to a stable release](#minormajor-releases---710-rc2---710-or-800-rc3---800), force push `next` to `main`.) The publish workflow runs in the "release" GitHub environment, which has the npm token required to publish packages to the `@storybook` npm organization. For security reasons, this environment can only be accessed from the four "core" branches: `main`, `next`, `latest-release` and `next-release`. @@ -244,7 +245,7 @@ The high-level workflow for a Releaser is: Look for the release pull request that has been prepared for the type of release you're about to release: -- "Release: Prerelease ``" for prereleases +- "Release: Prerelease|Minor|Major ``" for releases from `next` - "Release: Patch ``" for patch releases - "Release: Merge patches to `main` (without version bump)" for patches without releases @@ -266,7 +267,7 @@ It is important to verify that the release includes the right content. Key eleme For example, check if it's a breaking change that isn't allowed in a minor prerelease, or if it's a new feature in a patch release. If it's not suitable, revert the pull request and notify the author. -Sometimes when doing a patch release, a pull request can have the "patch" label but you don't want that change to be part of this release. Maybe you're not confident in the change, or you require more input from maintainers before releasing it. In those situations you should remove the "patch" label from the pull request and follow through with the release (make sure to re-trigger the workflow). When the release is done, add the patch label back again, so it will be part of the next release. +Sometimes when doing a patch release, a pull request can have the "patch:yes" label but you don't want that change to be part of this release. Maybe you're not confident in the change, or you require more input from maintainers before releasing it. In those situations you should remove the "patch:yes" label from the pull request and follow through with the release (make sure to re-trigger the workflow). When the release is done, add the "patch:yes" label back again, so it will be part of the next release. 2. Is the pull request title correct? @@ -300,12 +301,12 @@ When triggering the workflows, always choose the `next` branch as the base, unle The workflows can be triggered here: -- [Prepare prerelease PR](https://github.com/storybookjs/storybook/actions/workflows/prepare-prerelease.yml) +- [Prepare next PR](https://github.com/storybookjs/storybook/actions/workflows/prepare-non-patch-release.yml) - [Prepare patch PR](https://github.com/storybookjs/storybook/actions/workflows/prepare-patch-release.yml) -Crucially for prereleases, this is also where you change the versioning strategy if you need something else than the default as described in [Preparing - Prereleases](#prereleases). When triggering the prerelease workflow manually, you can optionally add inputs: +Crucially for prereleases, this is also where you change the versioning strategy if you need something else than the default as described in [Preparing - Non-patch Releases](#non-patch-releases). When triggering the prerelease workflow manually, you can optionally add inputs: -![Screenshot of triggering the prerelease workflow in GitHub Actions, with a form that shows a release type selector and a prerelease identifier text field](prerelease-workflow-inputs.png) +![Screenshot of triggering the non-patch-release workflow in GitHub Actions, with a form that shows a release type selector and a prerelease identifier text field](prerelease-workflow-inputs.png) See [Versioning Scenarios](#versioning-scenarios) for a description of each version bump scenario, how to activate it and what it does, and [Which combination of inputs creates the version bump I need?](#which-combination-of-inputs-creates-the-version-bump-i-need) for a detailed description of the workflow inputs. @@ -339,7 +340,7 @@ You can inspect the workflows to see what they are running and copy that, but he Before you start you should make sure that your working tree is clean and the repository is in a clean state by running `git clean -xdf`. -1. Create a new branch from either `next` (prereleases) or `main` (patches) +1. Create a new branch from either `next` or `main` (patches) 2. Get all tags: `git fetch --tags origin` 3. Install dependencies: `yarn task --task=install --start-from=install` 4. `cd scripts` @@ -375,7 +376,7 @@ Before you start you should make sure that your working tree is clean and the re 4. `git add ./CHANGELOG.md` 5. `git commit -m "Update CHANGELOG.md for v"` 6. `git push origin` -19. (If prerelease) Sync `versions/next.json` from `next` to `main` +19. (If non-patch-release) Sync `versions/next.json` from `next` to `main` 1. `git checkout main` 2. `git pull` 3. `git checkout origin/next ./docs/versions/next.json` @@ -434,7 +435,7 @@ There are multiple types of releases that use the same principles, but are done ### Prereleases - `7.1.0-alpha.12` -> `7.1.0-alpha.13` -This is the default strategy for prereleases, there's nothing special needed to trigger this scenario. +This is the default strategy for Non-patch releases, there's nothing special needed to trigger this scenario. ### Prerelease promotions - `7.1.0-alpha.13` -> `7.1.0-beta.0` @@ -445,14 +446,12 @@ To promote a prerelease to a new prerelease ID, during the [Re-trigger the Workf ### Minor/major releases - `7.1.0-rc.2` -> `7.1.0` or `8.0.0-rc.3` -> `8.0.0` -To promote a prerelease to a new prerelease ID, during the [Re-trigger the Workflow](#4-re-trigger-the-workflow) step, choose: +To promote a prerelease to a stable reelase, during the [Re-trigger the Workflow](#4-re-trigger-the-workflow) step, choose: -- Release type: Patch +- Release type: Patch, Minor or Major - Prerelease ID: Leave empty -The "Patch" release type ensures the current prerelease version gets promoted to a stable version without any major/minor/patch bumps. - -This scenario is special as it turns the `next` branch into a stable branch (until the next prerelease). Therefore, this will also force push `next` to `main`, to ensure that `main` contains the latest stable release. Consequently, the history for `main` is lost. +This scenario is special as it will target `latest-release` instead of `next-release`, and thus merge into `main` when done, and not `next`. So it goes `next` -> `version-non-patch-from-` -> `latest-release` -> `main`. ### First prerelease of new major/minor - `7.1.0` -> `7.2.0-alpha.0` or `8.0.0-alpha.0` @@ -481,13 +480,13 @@ As described in more details in [the Patch Releases section](#patch-releases), t ## FAQ -### When should I use the "patch" label? +### When should I use the "patch:yes" label? -Not all pull requests need to be patched back to the stable release, which is why only those with the **"patch"** label gets that treatment. But how do you decide whether or not a give pull requests should have that label? +Not all pull requests need to be patched back to the stable release, which is why only those with the **"patch:yes"** label gets that treatment. But how do you decide whether or not a give pull requests should have that label? -First of all, patches are only for fixes and minor improvements, and not completely new features. A pull request that introduces a new feature shouldn't be patched back to the stable release. +First of all, patches are only for important and time-sensitive fixes, and not minor improvements or completely new features. A pull request that introduces a new feature shouldn't be patched back to the stable release. -Second, any destabilizing changes shouldn't be patched back either. Breaking changes are reserved for major releases, but changes can be destabilizing without being strictly breaking, and those shouldn't be patched back either. An example is moving the settings panel in the manager to a completely different place, but with the same functionality. Many wouldn't consider this breaking because no usage will stop working because of this, but it can be considered a destabilizing change because user behavior have to change as a result of this. +Second, PRs that changes the code in a big architectural way should ideally not be patched back either, because that makes merge conflicts more likely in the future. When in doubt ask the core team for their input. @@ -497,12 +496,15 @@ The whole process is based on [GitHub Action workflows](../.github/workflows/) a The short answer to "how", is to make changes as a regular pull request that is also patched back to `main`. -There's a longer answer too, but it's pretty confusing: +
+ There's a longer answer too, but it's pretty confusing The scripts run from either `main` or `next`, so if you're changing a release script, you must patch it back to `main` for it to have an effect on patch releases. If you need the change to take effect immediately, you must manually cherry pick it to `main`. For workflow file changes, they usually run from `next`, but patching them back is recommended for consistency. The "publish" workflow runs from `latest-release` and `next-release`, so you should always patch changes back for _that_. 🙃 +
+ ### Why do I need to re-trigger workflows to update the changelog? Changes to pull requests' titles, labels or even reverts won't be reflected in the release pull request. This is because the workflow only triggers on pushes to `next`, not when pull request meta data is changed. @@ -536,7 +538,7 @@ If a pull request does not have any of the above labels at the time of release, This is most likely because `next` only contains [unreleasable changes](#which-changes-are-considered-releasable-and-what-does-it-mean), which causes the preparation workflow to cancel itself. That's because it doesn't make sense to prepare a new release if all the changes are unreleasable, as that wouldn't bump the version nor write a new changelog entry, so "releasing" it would just merge it back to `next` without any differences. -You can always see the workflows and if they have been cancelled [here for prereleases](https://github.com/storybookjs/storybook/actions/workflows/prepare-prerelease.yml) and [here for patch releases](https://github.com/storybookjs/storybook/actions/workflows/prepare-patch-release.yml). +You can always see the workflows and if they have been cancelled [here for non-patch releases](https://github.com/storybookjs/storybook/actions/workflows/prepare-non-patch-release.yml) and [here for patch releases](https://github.com/storybookjs/storybook/actions/workflows/prepare-patch-release.yml). ### Why do we need separate release branches? @@ -558,11 +560,11 @@ gitGraph branch some-simultaneous-bugfix commit checkout next - branch version-prerelease-from-7.1.0-alpha.28 + branch version-non-patch-from-7.1.0-alpha.28 commit id checkout next merge some-simultaneous-bugfix type: HIGHLIGHT id: "whoops!" - merge version-prerelease-from-7.1.0-alpha.28 tag: "v7.1.0-alpha.29" + merge version-non-patch-from-7.1.0-alpha.28 tag: "v7.1.0-alpha.29" ``` When publishing at the last commit with tag `v7.1.0-alpha.29`, it will publish whatever the content is at that point (all the square dots), which includes the "whoops!" commit from merging the bugfix. But the bugfix was never part of the release pull request because it got prepared before the bugfix was merged in. @@ -582,19 +584,19 @@ gitGraph branch some-simultanous-bugfix commit checkout next - branch version-prerelease-from-7.1.0-alpha.28 + branch version-non-patch-from-7.1.0-alpha.28 commit id: "write changelog" checkout next merge some-simultanous-bugfix id: "whoops!" checkout next-release - merge version-prerelease-from-7.1.0-alpha.28 + merge version-non-patch-from-7.1.0-alpha.28 commit id: "bump versions" tag: "v7.1.0-alpha.29" checkout next merge next-release - branch version-prerelease-from-7.1.0-alpha.29 + branch version-non-patch-from-7.1.0-alpha.29 commit id: "write changelog again" checkout next-release - merge version-prerelease-from-7.1.0-alpha.29 + merge version-non-patch-from-7.1.0-alpha.29 commit id: "bump versions again" tag: "v7.1.0-alpha.30" checkout next merge next-release diff --git a/scripts/package.json b/scripts/package.json index 8a1ace601a4d..f220b8f88742 100644 --- a/scripts/package.json +++ b/scripts/package.json @@ -13,6 +13,8 @@ "lint:js:cmd": "cross-env NODE_ENV=production eslint --cache --cache-location=../.cache/eslint --ext .js,.jsx,.json,.html,.ts,.tsx,.mjs --report-unused-disable-directives", "lint:package": "sort-package-json", "migrate-docs": "node --require esbuild-register ./ts-to-ts49.ts", + "release:cancel-preparation-runs": "ts-node --swc ./release/cancel-preparation-runs.ts", + "release:ensure-next-ahead": "ts-node --swc ./release/ensure-next-ahead.ts", "release:generate-pr-description": "ts-node --swc ./release/generate-pr-description.ts", "release:get-changelog-from-file": "ts-node --swc ./release/get-changelog-from-file.ts", "release:get-current-version": "ts-node --swc ./release/get-current-version.ts", @@ -73,6 +75,7 @@ "@jest/globals": "^29.3.1", "@nx/workspace": "16.2.1", "@octokit/graphql": "^5.0.5", + "@octokit/request": "^8.1.2", "@storybook/eslint-config-storybook": "^3.1.2", "@storybook/jest": "next", "@storybook/linter-config": "^3.1.2", diff --git a/scripts/release/__tests__/cancel-preparation-runs.test.ts b/scripts/release/__tests__/cancel-preparation-runs.test.ts new file mode 100644 index 000000000000..aaf8cdbec718 --- /dev/null +++ b/scripts/release/__tests__/cancel-preparation-runs.test.ts @@ -0,0 +1,107 @@ +/* eslint-disable global-require */ +/* eslint-disable no-underscore-dangle */ +import { + PREPARE_NON_PATCH_WORKFLOW_PATH, + PREPARE_PATCH_WORKFLOW_PATH, + run as cancelPreparationWorkflows, +} from '../cancel-preparation-runs'; +import * as github_ from '../utils/github-client'; + +jest.mock('../utils/github-client'); + +const github = jest.mocked(github_); + +jest.spyOn(console, 'log').mockImplementation(() => {}); +jest.spyOn(console, 'warn').mockImplementation(() => {}); +jest.spyOn(console, 'error').mockImplementation(() => {}); + +describe('Cancel preparation runs', () => { + beforeEach(() => { + jest.clearAllMocks(); + github.githubRestClient.mockImplementation(((route: string, options: any) => { + switch (route) { + case 'GET /repos/{owner}/{repo}/actions/workflows': + return { + data: { + workflows: [ + { + id: 1, + path: PREPARE_PATCH_WORKFLOW_PATH, + }, + { + id: 2, + path: PREPARE_NON_PATCH_WORKFLOW_PATH, + }, + ], + }, + }; + case 'GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs': + return { + data: { + workflow_runs: [ + { + id: options.workflow_id === 1 ? 100 : 200, + status: 'in_progress', + }, + { + id: options.workflow_id === 1 ? 150 : 250, + status: 'completed', + }, + ], + }, + }; + case 'POST /repos/{owner}/{repo}/actions/runs/{run_id}/cancel': + return undefined; // success + default: + throw new Error(`Unexpected route: ${route}`); + } + }) as any); + }); + + it('should fail early when no GH_TOKEN is set', async () => { + delete process.env.GH_TOKEN; + await expect(cancelPreparationWorkflows()).rejects.toThrowErrorMatchingInlineSnapshot( + `"GH_TOKEN environment variable must be set, exiting."` + ); + }); + + it('should cancel all running preparation workflows in GitHub', async () => { + process.env.GH_TOKEN = 'MY_SECRET'; + + await expect(cancelPreparationWorkflows()).resolves.toBeUndefined(); + + expect(github.githubRestClient).toHaveBeenCalledTimes(5); + expect(github.githubRestClient).toHaveBeenCalledWith( + 'POST /repos/{owner}/{repo}/actions/runs/{run_id}/cancel', + { + owner: 'storybookjs', + repo: 'storybook', + run_id: 100, + } + ); + expect(github.githubRestClient).toHaveBeenCalledWith( + 'POST /repos/{owner}/{repo}/actions/runs/{run_id}/cancel', + { + owner: 'storybookjs', + repo: 'storybook', + run_id: 200, + } + ); + expect(github.githubRestClient).not.toHaveBeenCalledWith( + 'POST /repos/{owner}/{repo}/actions/runs/{run_id}/cancel', + { + owner: 'storybookjs', + repo: 'storybook', + run_id: 150, + } + ); + expect(github.githubRestClient).not.toHaveBeenCalledWith( + 'POST /repos/{owner}/{repo}/actions/runs/{run_id}/cancel', + { + owner: 'storybookjs', + repo: 'storybook', + run_id: 250, + } + ); + }); +}); diff --git a/scripts/release/__tests__/ensure-next-ahead.test.ts b/scripts/release/__tests__/ensure-next-ahead.test.ts new file mode 100644 index 000000000000..0b192d39b106 --- /dev/null +++ b/scripts/release/__tests__/ensure-next-ahead.test.ts @@ -0,0 +1,85 @@ +/* eslint-disable global-require */ +/* eslint-disable no-underscore-dangle */ +import path from 'path'; +import { run as ensureNextAhead } from '../ensure-next-ahead'; +import * as gitClient_ from '../utils/git-client'; +import * as bumpVersion_ from '../version'; + +jest.mock('../utils/git-client', () => jest.requireActual('jest-mock-extended').mockDeep()); +const gitClient = jest.mocked(gitClient_); + +// eslint-disable-next-line jest/no-mocks-import +jest.mock('fs-extra', () => require('../../../code/__mocks__/fs-extra')); +const fsExtra = require('fs-extra'); + +jest.mock('../version', () => jest.requireActual('jest-mock-extended').mockDeep()); +const bumpVersion = jest.mocked(bumpVersion_); + +jest.spyOn(console, 'log').mockImplementation(() => {}); +jest.spyOn(console, 'warn').mockImplementation(() => {}); +jest.spyOn(console, 'error').mockImplementation(() => {}); + +const CODE_PACKAGE_JSON_PATH = path.join(__dirname, '..', '..', '..', 'code', 'package.json'); + +describe('Ensure next ahead', () => { + beforeEach(() => { + jest.clearAllMocks(); + gitClient.git.status.mockResolvedValue({ current: 'next' } as any); + fsExtra.__setMockFiles({ + [CODE_PACKAGE_JSON_PATH]: JSON.stringify({ version: '2.0.0' }), + }); + }); + + it('should throw when main-version is missing', async () => { + await expect(ensureNextAhead({})).rejects.toThrowErrorMatchingInlineSnapshot(` + "[ + { + "code": "invalid_type", + "expected": "string", + "received": "undefined", + "path": [ + "mainVersion" + ], + "message": "Required" + } + ]" + `); + }); + + it('should throw when main-version is not a semver string', async () => { + await expect(ensureNextAhead({ mainVersion: '200' })).rejects + .toThrowErrorMatchingInlineSnapshot(` + "[ + { + "code": "custom", + "message": "main-version must be a valid semver version string like '7.4.2'.", + "path": [] + } + ]" + `); + }); + + it('should not bump version when next is already ahead of main', async () => { + await expect(ensureNextAhead({ mainVersion: '1.0.0' })).resolves.toBeUndefined(); + expect(bumpVersion.run).not.toHaveBeenCalled(); + }); + + it('should bump version to 3.1.0-alpha.0 when main is 3.0.0 and next is 2.0.0', async () => { + await expect(ensureNextAhead({ mainVersion: '3.0.0' })).resolves.toBeUndefined(); + expect(bumpVersion.run).toHaveBeenCalledWith({ exact: '3.1.0-alpha.0' }); + }); + + it('should bump version to 2.1.0-alpha.0 when main and next are both 2.0.0', async () => { + await expect(ensureNextAhead({ mainVersion: '2.0.0' })).resolves.toBeUndefined(); + expect(bumpVersion.run).toHaveBeenCalledWith({ exact: '2.1.0-alpha.0' }); + }); + + it('should bump version to 2.1.0-alpha.0 when main is 2.0.0 and and next is 2.0.0-rc.10', async () => { + fsExtra.__setMockFiles({ + [CODE_PACKAGE_JSON_PATH]: JSON.stringify({ version: '2.0.0-rc.10' }), + }); + + await expect(ensureNextAhead({ mainVersion: '2.0.0' })).resolves.toBeUndefined(); + expect(bumpVersion.run).toHaveBeenCalledWith({ exact: '2.1.0-alpha.0' }); + }); +}); diff --git a/scripts/release/__tests__/generate-pr-description.test.ts b/scripts/release/__tests__/generate-pr-description.test.ts index b0f1bbe89db5..50aa5de8e019 100644 --- a/scripts/release/__tests__/generate-pr-description.test.ts +++ b/scripts/release/__tests__/generate-pr-description.test.ts @@ -15,6 +15,7 @@ describe('Generate PR Description', () => { labels: ['bug', 'build', 'other label', 'patch:yes'], commit: 'abc123', pull: 42, + state: 'MERGED', links: { commit: '[abc123](https://github.com/storybookjs/storybook/commit/abc123)', pull: '[#42](https://github.com/storybookjs/storybook/pull/42)', @@ -26,6 +27,7 @@ describe('Generate PR Description', () => { id: null, user: 'storybook-bot', pull: null, + state: null, commit: '012b58140c3606efeacbe99c0c410624b0a1ed1f', title: 'Bump version on `next`: preminor (alpha) from 7.2.0 to 7.3.0-alpha.0', labels: null, @@ -41,6 +43,7 @@ describe('Generate PR Description', () => { user: 'shilman', title: 'Some title for a "direct commit"', labels: null, + state: null, commit: '22bb11', pull: null, links: { @@ -55,6 +58,7 @@ describe('Generate PR Description', () => { title: 'Another PR `title` for docs', labels: ['another label', 'documentation', 'patch:yes'], commit: 'ddd222', + state: 'MERGED', pull: 11, links: { commit: '[ddd222](https://github.com/storybookjs/storybook/commit/ddd222)', @@ -69,6 +73,7 @@ describe('Generate PR Description', () => { labels: ['feature request', 'other label'], commit: 'wow1337', pull: 48, + state: 'MERGED', links: { commit: '[wow1337](https://github.com/storybookjs/storybook/commit/wow1337)', pull: '[#48](https://github.com/storybookjs/storybook/pull/48)', @@ -81,6 +86,7 @@ describe('Generate PR Description', () => { title: 'Some PR title with a missing label', labels: ['incorrect label', 'other label'], commit: 'bad999', + state: 'MERGED', pull: 77, links: { commit: '[bad999](https://github.com/storybookjs/storybook/commit/bad999)', @@ -213,7 +219,7 @@ For each pull request below, you need to either manually cherry pick it, or disc - [ ] [#42](https://github.com/storybookjs/storybook/pull/42): \\\`git cherry-pick -m1 -x abc123\\\` - If you\\'ve made any changes doing the above QA (change PR titles, revert PRs), manually trigger a re-generation of this PR with [this workflow](https://github.com/storybookjs/storybook/actions/workflows/prepare-prerelease.yml) and wait for it to finish. It will wipe your progress in this to do, which is expected. + If you\\'ve made any changes doing the above QA (change PR titles, revert PRs), manually trigger a re-generation of this PR with [this workflow](https://github.com/storybookjs/storybook/actions/workflows/prepare-non-patch-release.yml) and wait for it to finish. It will wipe your progress in this to do, which is expected. Feel free to manually commit any changes necessary to this branch **after** you\\'ve done the last re-generation, following the [Make Manual Changes](https://github.com/storybookjs/storybook/blob/next/CONTRIBUTING/RELEASING.md#5-make-manual-changes) section in the docs, *especially* if you\\'re making changes to the changelog. @@ -340,7 +346,7 @@ For each pull request below, you need to either manually cherry pick it, or disc - If you\\'ve made any changes doing the above QA (change PR titles, revert PRs), manually trigger a re-generation of this PR with [this workflow](https://github.com/storybookjs/storybook/actions/workflows/prepare-prerelease.yml) and wait for it to finish. It will wipe your progress in this to do, which is expected. + If you\\'ve made any changes doing the above QA (change PR titles, revert PRs), manually trigger a re-generation of this PR with [this workflow](https://github.com/storybookjs/storybook/actions/workflows/prepare-non-patch-release.yml) and wait for it to finish. It will wipe your progress in this to do, which is expected. Feel free to manually commit any changes necessary to this branch **after** you\\'ve done the last re-generation, following the [Make Manual Changes](https://github.com/storybookjs/storybook/blob/next/CONTRIBUTING/RELEASING.md#5-make-manual-changes) section in the docs, *especially* if you\\'re making changes to the changelog. diff --git a/scripts/release/__tests__/is-pr-frozen.test.ts b/scripts/release/__tests__/is-pr-frozen.test.ts index 63747a863ddf..00331e0555cd 100644 --- a/scripts/release/__tests__/is-pr-frozen.test.ts +++ b/scripts/release/__tests__/is-pr-frozen.test.ts @@ -26,6 +26,7 @@ describe('isPrFrozen', () => { it('should return true when PR is frozen', async () => { getPullInfoFromCommit.mockResolvedValue({ labels: ['freeze'], + state: 'OPEN', }); await expect(isPrFrozen({ patch: false })).resolves.toBe(true); }); @@ -33,6 +34,15 @@ describe('isPrFrozen', () => { it('should return false when PR is not frozen', async () => { getPullInfoFromCommit.mockResolvedValue({ labels: [], + state: 'OPEN', + }); + await expect(isPrFrozen({ patch: false })).resolves.toBe(false); + }); + + it('should return false when PR is closed', async () => { + getPullInfoFromCommit.mockResolvedValue({ + labels: ['freeze'], + state: 'CLOSED', }); await expect(isPrFrozen({ patch: false })).resolves.toBe(false); }); @@ -54,7 +64,7 @@ describe('isPrFrozen', () => { }); await isPrFrozen({ patch: false }); - expect(simpleGit.__fetch).toHaveBeenCalledWith('origin', 'version-prerelease-from-1.0.0', { + expect(simpleGit.__fetch).toHaveBeenCalledWith('origin', 'version-non-patch-from-1.0.0', { '--depth': 1, }); }); diff --git a/scripts/release/__tests__/label-patches.test.ts b/scripts/release/__tests__/label-patches.test.ts index d98abc7eb763..d43290a1828c 100644 --- a/scripts/release/__tests__/label-patches.test.ts +++ b/scripts/release/__tests__/label-patches.test.ts @@ -58,6 +58,7 @@ const pullInfoMock = { commit: '930b47f011f750c44a1782267d698ccdd3c04da3', title: 'Legal: Fix license', labels: ['documentation', 'patch:yes', 'patch:done'], + state: 'MERGED', links: { commit: '[`930b47f011f750c44a1782267d698ccdd3c04da3`](https://github.com/storybookjs/storybook/commit/930b47f011f750c44a1782267d698ccdd3c04da3)', diff --git a/scripts/release/cancel-preparation-runs.ts b/scripts/release/cancel-preparation-runs.ts new file mode 100644 index 000000000000..630bfb4847b3 --- /dev/null +++ b/scripts/release/cancel-preparation-runs.ts @@ -0,0 +1,107 @@ +/** + * This script cancels all running preparation workflows in GitHub. + * It will fetch all active runs for the preparation workflows, and cancel them. + */ +/* eslint-disable no-console */ +import chalk from 'chalk'; +import program from 'commander'; +import dedent from 'ts-dedent'; +import { githubRestClient } from './utils/github-client'; + +program + .name('cancel-preparation-workflows') + .description('cancel all running preparation workflows in GitHub'); + +export const PREPARE_PATCH_WORKFLOW_PATH = '.github/workflows/prepare-patch-release.yml'; +export const PREPARE_NON_PATCH_WORKFLOW_PATH = '.github/workflows/prepare-non-patch-release.yml'; + +export const run = async () => { + if (!process.env.GH_TOKEN) { + throw new Error('GH_TOKEN environment variable must be set, exiting.'); + } + + console.log(`🔎 Looking for workflows to cancel...`); + const allWorkflows = await githubRestClient('GET /repos/{owner}/{repo}/actions/workflows', { + owner: 'storybookjs', + repo: 'storybook', + }); + + const preparePatchWorkflowId = allWorkflows.data.workflows.find( + ({ path }) => path === PREPARE_PATCH_WORKFLOW_PATH + )?.id; + const prepareNonPatchWorkflowId = allWorkflows.data.workflows.find( + ({ path }) => path === PREPARE_NON_PATCH_WORKFLOW_PATH + )?.id; + + console.log(`Found workflow IDs for the preparation workflows: + ${chalk.blue(PREPARE_PATCH_WORKFLOW_PATH)}: ${chalk.green(preparePatchWorkflowId)} + ${chalk.blue(PREPARE_NON_PATCH_WORKFLOW_PATH)}: ${chalk.green(prepareNonPatchWorkflowId)}`); + + if (!preparePatchWorkflowId || !prepareNonPatchWorkflowId) { + throw new Error(dedent`🚨 Could not find workflow IDs for the preparation workflows + - Looked for paths: "${chalk.blue(PREPARE_PATCH_WORKFLOW_PATH)}" and "${chalk.blue( + PREPARE_NON_PATCH_WORKFLOW_PATH + )}", are they still correct? + - Found workflows: + ${JSON.stringify(allWorkflows.data.workflows, null, 2)}`); + } + + console.log('🔍 Fetching patch and non-patch runs for preparation workflows...'); + const [patchRuns, nonPatchRuns] = await Promise.all([ + githubRestClient('GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs', { + owner: 'storybookjs', + repo: 'storybook', + workflow_id: preparePatchWorkflowId, + }), + githubRestClient('GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs', { + owner: 'storybookjs', + repo: 'storybook', + workflow_id: prepareNonPatchWorkflowId, + }), + ]); + console.log('✅ Successfully fetched patch and non-patch runs for preparation workflows.'); + + const runsToCancel = patchRuns.data.workflow_runs + .concat(nonPatchRuns.data.workflow_runs) + .filter(({ status }) => + ['in_progress', 'pending', 'queued', 'requested', 'waiting'].includes(status) + ); + + if (runsToCancel.length === 0) { + console.log('👍 No runs to cancel.'); + return; + } + + console.log(`🔍 Found ${runsToCancel.length} runs to cancel. Cancelling them now: + ${runsToCancel + .map((r) => `${chalk.green(r.path)} - ${chalk.green(r.id)}: ${chalk.blue(r.status)}`) + .join('\n ')}`); + + const result = await Promise.allSettled( + runsToCancel.map((r) => + githubRestClient('POST /repos/{owner}/{repo}/actions/runs/{run_id}/cancel', { + owner: 'storybookjs', + repo: 'storybook', + run_id: r.id, + }) + ) + ); + + if (result.some((r) => r.status === 'rejected')) { + console.warn('⚠ī¸ Some runs could not be cancelled:'); + result.forEach((r, index) => { + if (r.status === 'rejected') { + console.warn(`Run ID: ${runsToCancel[index].id} - Reason: ${r.reason}`); + } + }); + } else { + console.log('✅ Successfully cancelled all preparation runs.'); + } +}; + +if (require.main === module) { + run().catch((err) => { + console.error(err); + // this is non-critical work, so we don't want to fail the CI build if this fails + }); +} diff --git a/scripts/release/ensure-next-ahead.ts b/scripts/release/ensure-next-ahead.ts new file mode 100644 index 000000000000..1aa32bfd932c --- /dev/null +++ b/scripts/release/ensure-next-ahead.ts @@ -0,0 +1,101 @@ +/** + * This script ensures that next is always one minor ahead of main. + * This is needed when releasing a stable from next. + * Next will be at eg. 7.4.0-alpha.4, and main will be at 7.3.0. + * Then we release 7.4.0 by merging next to latest-release to main. + * We then ensure here that next is bumped to 7.5.0-alpha.0 - without releasing it. + * If this is a patch release bumping main to 7.3.1, next will not be touched because it's already ahead. + */ + +/* eslint-disable no-console */ +import chalk from 'chalk'; +import path from 'path'; +import program from 'commander'; +import semver from 'semver'; +import { z } from 'zod'; +import { readJson } from 'fs-extra'; +import { run as bumpVersion } from './version'; +import { git } from './utils/git-client'; + +program + .name('ensure-next-ahead') + .description('ensure the "next" branch is always a minor version ahead of "main"') + .requiredOption('-M, --main-version ', 'The version currently on the "main" branch'); + +const optionsSchema = z + .object({ + mainVersion: z.string(), + }) + .refine((schema) => semver.valid(schema.mainVersion), { + message: "main-version must be a valid semver version string like '7.4.2'.", + }); + +type Options = { + mainVersion: string; +}; + +const CODE_DIR_PATH = path.join(__dirname, '..', '..', 'code'); +const CODE_PACKAGE_JSON_PATH = path.join(CODE_DIR_PATH, 'package.json'); + +const validateOptions = (options: { [key: string]: any }): options is Options => { + optionsSchema.parse(options); + return true; +}; + +const getCurrentVersion = async () => { + const { version } = await readJson(CODE_PACKAGE_JSON_PATH); + console.log(`📐 Current version of Storybook is ${chalk.green(version)}`); + return version; +}; + +export const run = async (options: unknown) => { + if (!validateOptions(options)) { + return; + } + const { mainVersion } = options; + + const { current: currentGitBranch } = await git.status(); + + if (currentGitBranch !== 'next') { + console.warn( + `🚧 The current branch is not "next" but "${currentGitBranch}", this only really makes sense to run on the "next" branch.` + ); + } + + // Get the current version from code/package.json + const currentNextVersion = await getCurrentVersion(); + if (semver.gt(currentNextVersion, mainVersion)) { + console.log( + `✅ The version on next (${chalk.green( + currentNextVersion + )}) is already ahead of the version on main (${chalk.green(mainVersion)}), no action needed.` + ); + return; + } + + const nextNextVersion = `${semver.inc(mainVersion, 'minor')}-alpha.0`; + + console.log( + `🤜 The version on next (${chalk.green( + currentNextVersion + )}) is behind the version on main (${chalk.green(mainVersion)}), bumping to ${chalk.blue( + nextNextVersion + )}...` + ); + + await bumpVersion({ exact: nextNextVersion }); + + console.log( + `✅ bumped all versions to ${chalk.green( + nextNextVersion + )}, remember to commit and push to next.` + ); +}; + +if (require.main === module) { + const parsed = program.parse(); + run(parsed.opts()).catch((err) => { + console.error(err); + process.exit(1); + }); +} diff --git a/scripts/release/generate-pr-description.ts b/scripts/release/generate-pr-description.ts index 16a6928e994f..d437e8dc87bc 100644 --- a/scripts/release/generate-pr-description.ts +++ b/scripts/release/generate-pr-description.ts @@ -18,7 +18,7 @@ program 'Which version to generate changelog from, eg. "7.0.7". Defaults to the version at code/package.json' ) .option('-N, --next-version ', 'Which version to generate changelog to, eg. "7.0.8"') - .option('-P, --unpicked-patches', 'Set to only consider PRs labeled with "patch" label') + .option('-P, --unpicked-patches', 'Set to only consider PRs labeled with "patch:yes" label') .option( '-M, --manual-cherry-picks ', 'A stringified JSON array of commit hashes, of patch PRs that needs to be cherry-picked manually' @@ -52,6 +52,7 @@ const CHANGE_TITLES_TO_IGNORE = [ /\[ci skip\]/i, /^Update CHANGELOG\.md for.*/i, /^Release: (Pre)?(Patch|Minor|Major|Release).*\d+$/i, + /^Update \.\/docs\/versions/, ]; export const mapToChangelist = ({ @@ -65,7 +66,7 @@ export const mapToChangelist = ({ .filter((change) => { // eslint-disable-next-line no-restricted-syntax for (const titleToIgnore of CHANGE_TITLES_TO_IGNORE) { - if (change.title.match(titleToIgnore)) { + if (change.title?.match(titleToIgnore)) { return false; } } @@ -90,7 +91,7 @@ export const mapToChangelist = ({ )[0] || 'unknown') as keyof typeof LABELS_BY_IMPORTANCE; return `- [ ] **${LABELS_BY_IMPORTANCE[label]}**: ${change.title} ${change.links.pull}${ - !unpickedPatches && change.labels.includes('patch:yes') ? ' (will also be patched)' : '' + !unpickedPatches && change.labels?.includes('patch:yes') ? ' (will also be patched)' : '' }`; }) .join('\n'); @@ -141,7 +142,9 @@ export const generateReleaseDescription = ({ changelogText: string; manualCherryPicks?: string; }): string => { - const workflow = semver.prerelease(nextVersion) ? 'prepare-prerelease' : 'prepare-patch-release'; + const workflow = semver.prerelease(nextVersion) + ? 'prepare-non-patch-release' + : 'prepare-patch-release'; const workflowUrl = `https://github.com/storybookjs/storybook/actions/workflows/${workflow}.yml`; return ( diff --git a/scripts/release/is-pr-frozen.ts b/scripts/release/is-pr-frozen.ts index 70289b5369d8..e81610a451b9 100644 --- a/scripts/release/is-pr-frozen.ts +++ b/scripts/release/is-pr-frozen.ts @@ -12,7 +12,7 @@ program .description( 'returns true if the versioning pull request associated with the current branch has the "freeze" label' ) - .option('-P, --patch', 'Look for patch PR instead of prerelease PR', false) + .option('-H, --patch', 'Look for patch PR instead of next PR', false) .option('-V, --verbose', 'Enable verbose logging', false); const CODE_DIR_PATH = path.join(__dirname, '..', '..', 'code'); @@ -46,7 +46,7 @@ export const run = async (options: unknown) => { const { verbose, patch } = options as { verbose?: boolean; patch?: boolean }; const version = await getCurrentVersion(); - const branch = `version-${patch ? 'patch' : 'prerelease'}-from-${version}`; + const branch = `version-${patch ? 'patch' : 'non-patch'}-from-${version}`; console.log(`đŸ’Ŧ Determining if pull request from branch '${chalk.blue(branch)}' is frozen`); @@ -78,6 +78,14 @@ export const run = async (options: unknown) => { console.log(`🔍 Found pull request: ${JSON.stringify(pullRequest, null, 2)}`); + if (pullRequest.state !== 'OPEN') { + console.log('❌ The pull request is already closed, ignoring it'); + if (process.env.GITHUB_ACTIONS === 'true') { + setOutput('frozen', false); + } + return false; + } + const isFrozen = pullRequest.labels?.includes('freeze'); if (process.env.GITHUB_ACTIONS === 'true') { setOutput('frozen', isFrozen); diff --git a/scripts/release/pick-patches.ts b/scripts/release/pick-patches.ts index eab1743dcc7b..9d3169d78c8a 100644 --- a/scripts/release/pick-patches.ts +++ b/scripts/release/pick-patches.ts @@ -80,6 +80,7 @@ export const run = async (_: unknown) => { } if (process.env.GITHUB_ACTIONS === 'true') { + setOutput('pr-count', JSON.stringify(patchPRs.length)); setOutput('failed-cherry-picks', JSON.stringify(failedCherryPicks)); } }; diff --git a/scripts/release/utils/get-changes.ts b/scripts/release/utils/get-changes.ts index 1ad2a0759198..416ea624fb50 100644 --- a/scripts/release/utils/get-changes.ts +++ b/scripts/release/utils/get-changes.ts @@ -53,7 +53,7 @@ export const getFromCommit = async (from?: string | undefined, verbose?: boolean console.log(`🔍 No 'from' specified, found latest tag: ${chalk.blue(latest)}`); } } - const commit = await getCommitAt(actualFrom, verbose); + const commit = await getCommitAt(actualFrom!, verbose); if (verbose) { console.log(`🔍 Found 'from' commit: ${chalk.blue(commit)}`); } diff --git a/scripts/release/utils/get-github-info.ts b/scripts/release/utils/get-github-info.ts index 6bd7126aec04..bdfe995a9001 100644 --- a/scripts/release/utils/get-github-info.ts +++ b/scripts/release/utils/get-github-info.ts @@ -40,6 +40,7 @@ function makeQuery(repos: ReposWithCommitsAndPRsToFetch) { number id title + state url mergedAt labels(first: 50) { @@ -63,6 +64,7 @@ function makeQuery(repos: ReposWithCommitsAndPRsToFetch) { : `pr__${data.pull}: pullRequest(number: ${data.pull}) { url title + state author { login url @@ -161,11 +163,12 @@ export type PullRequestInfo = { user: string | null; id: string | null; title: string | null; + state: string | null; commit: string | null; pull: number | null; labels: string[] | null; links: { - commit: string; + commit: string | null; pull: string | null; user: string | null; }; @@ -197,6 +200,7 @@ export async function getPullInfoFromCommit(request: { pull: null, commit: request.commit, title: null, + state: null, labels: null, links: { commit: request.commit, @@ -205,10 +209,7 @@ export async function getPullInfoFromCommit(request: { }, }; } - let user = null; - if (data.author && data.author.user) { - user = data.author.user; - } + let user = data?.author?.user || null; const associatedPullRequest = data.associatedPullRequests && @@ -245,6 +246,7 @@ export async function getPullInfoFromCommit(request: { pull: associatedPullRequest ? associatedPullRequest.number : null, commit: request.commit, title: associatedPullRequest ? associatedPullRequest.title : null, + state: associatedPullRequest ? associatedPullRequest.state : null, labels: associatedPullRequest ? (associatedPullRequest.labels.nodes || []).map((label: { name: string }) => label.name) : null, @@ -287,6 +289,7 @@ export async function getPullInfoFromPullRequest(request: { pull: request.pull, commit: commit ? commit.oid : null, title: title || null, + state: data?.state || null, labels: data ? (data.labels.nodes || []).map((label: { name: string }) => label.name) : null, links: { commit: commit ? `[\`${commit.oid}\`](${commit.commitUrl})` : null, diff --git a/scripts/release/utils/github-client.ts b/scripts/release/utils/github-client.ts index 646ba1003986..e81991414bf9 100644 --- a/scripts/release/utils/github-client.ts +++ b/scripts/release/utils/github-client.ts @@ -1,6 +1,8 @@ /* eslint-disable no-console */ import type { GraphQlQueryResponseData } from '@octokit/graphql'; import { graphql } from '@octokit/graphql'; +import { request } from '@octokit/request'; +import fetch from 'node-fetch'; export interface PullRequest { number: number; @@ -14,6 +16,13 @@ export const githubGraphQlClient = graphql.defaults({ headers: { authorization: `token ${process.env.GH_TOKEN}` }, }); +export const githubRestClient = request.defaults({ + request: { + fetch, + }, + headers: { authorization: `token ${process.env.GH_TOKEN}`, 'X-GitHub-Api-Version': '2022-11-28' }, +}); + export async function getUnpickedPRs( baseBranch: string, verbose?: boolean diff --git a/scripts/yarn.lock b/scripts/yarn.lock index 19568a9f4a70..f9d17fe543a8 100644 --- a/scripts/yarn.lock +++ b/scripts/yarn.lock @@ -2531,6 +2531,17 @@ __metadata: languageName: node linkType: hard +"@octokit/endpoint@npm:^9.0.0": + version: 9.0.1 + resolution: "@octokit/endpoint@npm:9.0.1" + dependencies: + "@octokit/types": ^12.0.0 + is-plain-object: ^5.0.0 + universal-user-agent: ^6.0.0 + checksum: 757505b1cd634bcd7b71a18c8fe07dfda47790598ddd0d9d13f47d68713070f49953a672ac40ec39787defc2a7e07d08dca97756def7b907118f8f8d4c653f5c + languageName: node + linkType: hard + "@octokit/graphql@npm:^4.3.1, @octokit/graphql@npm:^4.5.8": version: 4.8.0 resolution: "@octokit/graphql@npm:4.8.0" @@ -2567,6 +2578,13 @@ __metadata: languageName: node linkType: hard +"@octokit/openapi-types@npm:^19.0.0": + version: 19.0.0 + resolution: "@octokit/openapi-types@npm:19.0.0" + checksum: 8270e0a224bbef6d1c82396cda873a3528111cb25a772184b39e1fbada4e6433b41c5f4634ecf204e8a2816a802048197e0132b7615b579fab217f7c1e29545b + languageName: node + linkType: hard + "@octokit/plugin-paginate-rest@npm:^2.16.8, @octokit/plugin-paginate-rest@npm:^2.2.0": version: 2.21.3 resolution: "@octokit/plugin-paginate-rest@npm:2.21.3" @@ -2631,6 +2649,17 @@ __metadata: languageName: node linkType: hard +"@octokit/request-error@npm:^5.0.0": + version: 5.0.1 + resolution: "@octokit/request-error@npm:5.0.1" + dependencies: + "@octokit/types": ^12.0.0 + deprecation: ^2.0.0 + once: ^1.4.0 + checksum: e72a4627120de345b54876a1f007664095e5be9d624fce2e14fccf7668cd8f5e4929d444d8fc085d48e1fb5cd548538453974aab129a669101110d6679dce6c6 + languageName: node + linkType: hard + "@octokit/request@npm:^5.4.0, @octokit/request@npm:^5.6.0, @octokit/request@npm:^5.6.3": version: 5.6.3 resolution: "@octokit/request@npm:5.6.3" @@ -2659,6 +2688,19 @@ __metadata: languageName: node linkType: hard +"@octokit/request@npm:^8.1.2": + version: 8.1.2 + resolution: "@octokit/request@npm:8.1.2" + dependencies: + "@octokit/endpoint": ^9.0.0 + "@octokit/request-error": ^5.0.0 + "@octokit/types": ^12.0.0 + is-plain-object: ^5.0.0 + universal-user-agent: ^6.0.0 + checksum: 49219eb71b856acecc8268f05a7a7d074488f9eaeb59439f5c8872e5b4555a4e6c0cf0ebcadf0983466f88957e74c27765f582e473b0dd89b453274501f0dc37 + languageName: node + linkType: hard + "@octokit/rest@npm:^16.43.0 || ^17.11.0 || ^18.12.0, @octokit/rest@npm:^18.12.0": version: 18.12.0 resolution: "@octokit/rest@npm:18.12.0" @@ -2683,6 +2725,15 @@ __metadata: languageName: node linkType: hard +"@octokit/types@npm:^12.0.0": + version: 12.0.0 + resolution: "@octokit/types@npm:12.0.0" + dependencies: + "@octokit/openapi-types": ^19.0.0 + checksum: 6e5b68f8855775638db53244348d2ca07896d36a15aad41d3cb652fafaa1b307c3b6222319174dd5716accd9076e101da838b82f988a7c380a8e9d188e3aadf1 + languageName: node + linkType: hard + "@octokit/types@npm:^4.1.6": version: 4.1.10 resolution: "@octokit/types@npm:4.1.10" @@ -2901,6 +2952,7 @@ __metadata: "@jest/globals": ^29.3.1 "@nx/workspace": 16.2.1 "@octokit/graphql": ^5.0.5 + "@octokit/request": ^8.1.2 "@storybook/eslint-config-storybook": ^3.1.2 "@storybook/jest": next "@storybook/linter-config": ^3.1.2 From ced815b2a65f9c501e6c9f983e3d20689a60e4b1 Mon Sep 17 00:00:00 2001 From: Jeppe Reinhold Date: Thu, 5 Oct 2023 12:04:20 +0200 Subject: [PATCH 67/83] fix prerelease -> non-patch naming --- .github/workflows/prepare-non-patch-release.yml | 6 +++--- CONTRIBUTING/RELEASING.md | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/prepare-non-patch-release.yml b/.github/workflows/prepare-non-patch-release.yml index ea72d924d918..e1a443ff8025 100644 --- a/.github/workflows/prepare-non-patch-release.yml +++ b/.github/workflows/prepare-non-patch-release.yml @@ -1,5 +1,5 @@ -name: Prepare prerelease PR -run-name: Prepare prerelease PR, triggered by ${{ github.triggering_actor }} +name: Prepare non-patch PR +run-name: Prepare non-patch PR, triggered by ${{ github.triggering_actor }} on: push: @@ -35,7 +35,7 @@ concurrency: jobs: prepare-non-patch-pull-request: - name: Prepare prerelease pull request + name: Prepare non-patch pull request runs-on: ubuntu-latest environment: release defaults: diff --git a/CONTRIBUTING/RELEASING.md b/CONTRIBUTING/RELEASING.md index e92fa8fa36a3..7cf29a463c62 100644 --- a/CONTRIBUTING/RELEASING.md +++ b/CONTRIBUTING/RELEASING.md @@ -304,7 +304,7 @@ The workflows can be triggered here: - [Prepare next PR](https://github.com/storybookjs/storybook/actions/workflows/prepare-non-patch-release.yml) - [Prepare patch PR](https://github.com/storybookjs/storybook/actions/workflows/prepare-patch-release.yml) -Crucially for prereleases, this is also where you change the versioning strategy if you need something else than the default as described in [Preparing - Non-patch Releases](#non-patch-releases). When triggering the prerelease workflow manually, you can optionally add inputs: +Crucially for prereleases, this is also where you change the versioning strategy if you need something else than the default as described in [Preparing - Non-patch Releases](#non-patch-releases). When triggering the non-patch workflow manually, you can optionally add inputs: ![Screenshot of triggering the non-patch-release workflow in GitHub Actions, with a form that shows a release type selector and a prerelease identifier text field](prerelease-workflow-inputs.png) From d8b6d673471c964f25f92bf6082ecfa910a7caf4 Mon Sep 17 00:00:00 2001 From: Jeppe Reinhold Date: Thu, 5 Oct 2023 13:38:16 +0200 Subject: [PATCH 68/83] improve merge conflict hnadling between next and latest-release --- .github/workflows/prepare-non-patch-release.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/prepare-non-patch-release.yml b/.github/workflows/prepare-non-patch-release.yml index e1a443ff8025..6e89369c7c7c 100644 --- a/.github/workflows/prepare-non-patch-release.yml +++ b/.github/workflows/prepare-non-patch-release.yml @@ -133,11 +133,13 @@ jobs: git push --force origin version-non-patch-from-${{ steps.bump-version.outputs.current-version }} - name: Resolve merge-conflicts with base branch - if: steps.is-prerelease.outputs.prerelease == 'true' + if: steps.is-prerelease.outputs.prerelease == 'false' + working-directory: . env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | - git pull origin latest-release + git config pull.rebase false + git pull --no-commit --no-ff origin latest-release git checkout --ours . git add . git commit -m "Merge latest-release into version-non-patch-from-${{ steps.bump-version.outputs.current-version }} with conflicts resolved to ours [skip ci]" From cbac1a0f13155114248bc3d560bf29406037e8a2 Mon Sep 17 00:00:00 2001 From: Jeppe Reinhold Date: Thu, 5 Oct 2023 13:44:06 +0200 Subject: [PATCH 69/83] make merge conflict handling more resilient --- .github/workflows/prepare-non-patch-release.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/prepare-non-patch-release.yml b/.github/workflows/prepare-non-patch-release.yml index 6e89369c7c7c..58f2b3e81aa1 100644 --- a/.github/workflows/prepare-non-patch-release.yml +++ b/.github/workflows/prepare-non-patch-release.yml @@ -139,10 +139,10 @@ jobs: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | git config pull.rebase false - git pull --no-commit --no-ff origin latest-release + git pull --no-commit --no-ff origin latest-release || true git checkout --ours . git add . - git commit -m "Merge latest-release into version-non-patch-from-${{ steps.bump-version.outputs.current-version }} with conflicts resolved to ours [skip ci]" + git commit --amend -m "Merge latest-release into version-non-patch-from-${{ steps.bump-version.outputs.current-version }} with conflicts resolved to ours [skip ci]" - name: Generate PR description id: description From af742751be8997eb00c47e952d458dd07ab58ada Mon Sep 17 00:00:00 2001 From: Jeppe Reinhold Date: Thu, 5 Oct 2023 13:47:27 +0200 Subject: [PATCH 70/83] fix merging commit message --- .github/workflows/prepare-non-patch-release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/prepare-non-patch-release.yml b/.github/workflows/prepare-non-patch-release.yml index 58f2b3e81aa1..bc14a9b68e79 100644 --- a/.github/workflows/prepare-non-patch-release.yml +++ b/.github/workflows/prepare-non-patch-release.yml @@ -142,7 +142,7 @@ jobs: git pull --no-commit --no-ff origin latest-release || true git checkout --ours . git add . - git commit --amend -m "Merge latest-release into version-non-patch-from-${{ steps.bump-version.outputs.current-version }} with conflicts resolved to ours [skip ci]" + git commit --no-verify -m "Merge latest-release into version-non-patch-from-${{ steps.bump-version.outputs.current-version }} with conflicts resolved to ours [skip ci]" - name: Generate PR description id: description From bf592f1de4666346c7e5c79fe4a03f1d22a9f9d2 Mon Sep 17 00:00:00 2001 From: Jeppe Reinhold Date: Thu, 5 Oct 2023 14:17:29 +0200 Subject: [PATCH 71/83] test trigger non-patch workflow --- .github/workflows/prepare-non-patch-release.yml | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/.github/workflows/prepare-non-patch-release.yml b/.github/workflows/prepare-non-patch-release.yml index bc14a9b68e79..0cd4775363b8 100644 --- a/.github/workflows/prepare-non-patch-release.yml +++ b/.github/workflows/prepare-non-patch-release.yml @@ -2,6 +2,7 @@ name: Prepare non-patch PR run-name: Prepare non-patch PR, triggered by ${{ github.triggering_actor }} on: + pull_request: # to temporarily test the workflow before merging push: branches: - next @@ -45,7 +46,7 @@ jobs: - name: Checkout next uses: actions/checkout@v3 with: - ref: next + ref: release-to-latest-v2 #to temporarily test the workflow before merging # this needs to be set to a high enough number that it will contain the last version tag # as of May 2023, the whole repo had 55K commits fetch-depth: 10000 @@ -127,10 +128,10 @@ jobs: run: | git config --global user.name 'storybook-bot' git config --global user.email '32066757+storybook-bot@users.noreply.github.com' - git checkout -b version-non-patch-from-${{ steps.bump-version.outputs.current-version }} + git checkout -b TEST-version-non-patch-from-${{ steps.bump-version.outputs.current-version }} git add . git commit -m "Write changelog for ${{ steps.bump-version.outputs.next-version }} [skip ci]" || true - git push --force origin version-non-patch-from-${{ steps.bump-version.outputs.current-version }} + git push --force origin TEST-version-non-patch-from-${{ steps.bump-version.outputs.current-version }} - name: Resolve merge-conflicts with base branch if: steps.is-prerelease.outputs.prerelease == 'false' @@ -159,13 +160,13 @@ jobs: if PR_STATE=$(gh pr view --json state --jq .state 2>/dev/null) && [[ -n "$PR_STATE" && "$PR_STATE" == *"OPEN"* ]]; then gh pr edit \ --repo "${{github.repository }}" \ - --title "Release: $CAPITALIZED_RELEASE_TYPE ${{ inputs.pre-id && format('{0} ', inputs.pre-id) }}${{ steps.bump-version.outputs.next-version }}" \ + --title "TEST Release: $CAPITALIZED_RELEASE_TYPE ${{ inputs.pre-id && format('{0} ', inputs.pre-id) }}${{ steps.bump-version.outputs.next-version }}" \ --base ${{ steps.is-prerelease.outputs.prerelease == 'true' && 'next-release' || 'latest-release' }} \ --body "${{ steps.description.outputs.description }}" else gh pr create \ --repo "${{github.repository }}"\ - --title "Release: $CAPITALIZED_RELEASE_TYPE ${{ inputs.pre-id && format('{0} ', inputs.pre-id) }}${{ steps.bump-version.outputs.next-version }}" \ + --title "TEST Release: $CAPITALIZED_RELEASE_TYPE ${{ inputs.pre-id && format('{0} ', inputs.pre-id) }}${{ steps.bump-version.outputs.next-version }}" \ --label "release" \ --base ${{ steps.is-prerelease.outputs.prerelease == 'true' && 'next-release' || 'latest-release' }} \ --head version-non-patch-from-${{ steps.bump-version.outputs.current-version }} \ From c457e1b33fdeb162c360ba486293d7f1d69cc313 Mon Sep 17 00:00:00 2001 From: Jeppe Reinhold Date: Thu, 5 Oct 2023 14:29:08 +0200 Subject: [PATCH 72/83] test stable preparation workflow --- .github/workflows/prepare-non-patch-release.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/prepare-non-patch-release.yml b/.github/workflows/prepare-non-patch-release.yml index 0cd4775363b8..00741a0495aa 100644 --- a/.github/workflows/prepare-non-patch-release.yml +++ b/.github/workflows/prepare-non-patch-release.yml @@ -115,7 +115,7 @@ jobs: - name: Check release vs prerelease id: is-prerelease - run: yarn release:is-prerelease ${{ steps.bump-version.outputs.next-version }} + run: yarn release:is-prerelease 7.6.0 - name: Write changelog env: @@ -128,10 +128,10 @@ jobs: run: | git config --global user.name 'storybook-bot' git config --global user.email '32066757+storybook-bot@users.noreply.github.com' - git checkout -b TEST-version-non-patch-from-${{ steps.bump-version.outputs.current-version }} + git checkout -b TEST2-version-non-patch-from-${{ steps.bump-version.outputs.current-version }} git add . git commit -m "Write changelog for ${{ steps.bump-version.outputs.next-version }} [skip ci]" || true - git push --force origin TEST-version-non-patch-from-${{ steps.bump-version.outputs.current-version }} + git push --force origin TEST2-version-non-patch-from-${{ steps.bump-version.outputs.current-version }} - name: Resolve merge-conflicts with base branch if: steps.is-prerelease.outputs.prerelease == 'false' @@ -160,13 +160,13 @@ jobs: if PR_STATE=$(gh pr view --json state --jq .state 2>/dev/null) && [[ -n "$PR_STATE" && "$PR_STATE" == *"OPEN"* ]]; then gh pr edit \ --repo "${{github.repository }}" \ - --title "TEST Release: $CAPITALIZED_RELEASE_TYPE ${{ inputs.pre-id && format('{0} ', inputs.pre-id) }}${{ steps.bump-version.outputs.next-version }}" \ + --title "TEST2 Release: $CAPITALIZED_RELEASE_TYPE ${{ inputs.pre-id && format('{0} ', inputs.pre-id) }}${{ steps.bump-version.outputs.next-version }}" \ --base ${{ steps.is-prerelease.outputs.prerelease == 'true' && 'next-release' || 'latest-release' }} \ --body "${{ steps.description.outputs.description }}" else gh pr create \ --repo "${{github.repository }}"\ - --title "TEST Release: $CAPITALIZED_RELEASE_TYPE ${{ inputs.pre-id && format('{0} ', inputs.pre-id) }}${{ steps.bump-version.outputs.next-version }}" \ + --title "TEST2 Release: $CAPITALIZED_RELEASE_TYPE ${{ inputs.pre-id && format('{0} ', inputs.pre-id) }}${{ steps.bump-version.outputs.next-version }}" \ --label "release" \ --base ${{ steps.is-prerelease.outputs.prerelease == 'true' && 'next-release' || 'latest-release' }} \ --head version-non-patch-from-${{ steps.bump-version.outputs.current-version }} \ From b0d68380677b80a7500d980d069a4f0d8166d598 Mon Sep 17 00:00:00 2001 From: Jeppe Reinhold Date: Thu, 5 Oct 2023 14:43:48 +0200 Subject: [PATCH 73/83] test stable workflow --- .github/workflows/prepare-non-patch-release.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/prepare-non-patch-release.yml b/.github/workflows/prepare-non-patch-release.yml index 00741a0495aa..c0e3c8b36eaa 100644 --- a/.github/workflows/prepare-non-patch-release.yml +++ b/.github/workflows/prepare-non-patch-release.yml @@ -115,7 +115,7 @@ jobs: - name: Check release vs prerelease id: is-prerelease - run: yarn release:is-prerelease 7.6.0 + run: yarn release:is-prerelease - name: Write changelog env: @@ -128,13 +128,13 @@ jobs: run: | git config --global user.name 'storybook-bot' git config --global user.email '32066757+storybook-bot@users.noreply.github.com' - git checkout -b TEST2-version-non-patch-from-${{ steps.bump-version.outputs.current-version }} + git checkout -b TEST3-version-non-patch-from-${{ steps.bump-version.outputs.current-version }} git add . git commit -m "Write changelog for ${{ steps.bump-version.outputs.next-version }} [skip ci]" || true - git push --force origin TEST2-version-non-patch-from-${{ steps.bump-version.outputs.current-version }} + git push --force origin TEST3-version-non-patch-from-${{ steps.bump-version.outputs.current-version }} - name: Resolve merge-conflicts with base branch - if: steps.is-prerelease.outputs.prerelease == 'false' + if: steps.is-prerelease.outputs.prerelease != 'false' working-directory: . env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -160,15 +160,15 @@ jobs: if PR_STATE=$(gh pr view --json state --jq .state 2>/dev/null) && [[ -n "$PR_STATE" && "$PR_STATE" == *"OPEN"* ]]; then gh pr edit \ --repo "${{github.repository }}" \ - --title "TEST2 Release: $CAPITALIZED_RELEASE_TYPE ${{ inputs.pre-id && format('{0} ', inputs.pre-id) }}${{ steps.bump-version.outputs.next-version }}" \ - --base ${{ steps.is-prerelease.outputs.prerelease == 'true' && 'next-release' || 'latest-release' }} \ + --title "TEST3 Release: $CAPITALIZED_RELEASE_TYPE ${{ inputs.pre-id && format('{0} ', inputs.pre-id) }}${{ steps.bump-version.outputs.next-version }}" \ + --base ${{ steps.is-prerelease.outputs.prerelease != 'true' && 'next-release' || 'latest-release' }} \ --body "${{ steps.description.outputs.description }}" else gh pr create \ --repo "${{github.repository }}"\ - --title "TEST2 Release: $CAPITALIZED_RELEASE_TYPE ${{ inputs.pre-id && format('{0} ', inputs.pre-id) }}${{ steps.bump-version.outputs.next-version }}" \ + --title "TEST3 Release: $CAPITALIZED_RELEASE_TYPE ${{ inputs.pre-id && format('{0} ', inputs.pre-id) }}${{ steps.bump-version.outputs.next-version }}" \ --label "release" \ - --base ${{ steps.is-prerelease.outputs.prerelease == 'true' && 'next-release' || 'latest-release' }} \ + --base ${{ steps.is-prerelease.outputs.prerelease != 'true' && 'next-release' || 'latest-release' }} \ --head version-non-patch-from-${{ steps.bump-version.outputs.current-version }} \ --body "${{ steps.description.outputs.description }}" fi From 5184a7af6773a2c0e50ee4aa84f3b540d98a1e45 Mon Sep 17 00:00:00 2001 From: Yann Braga Date: Thu, 5 Oct 2023 15:45:01 +0200 Subject: [PATCH 74/83] add more angular options webpackStatsJson previewUrl loglevel --- .../angular/src/builders/build-storybook/index.ts | 3 +++ .../src/builders/build-storybook/schema.json | 4 ++++ .../angular/src/builders/start-storybook/index.ts | 9 +++++++++ .../src/builders/start-storybook/schema.json | 14 ++++++++++++++ 4 files changed, 30 insertions(+) diff --git a/code/frameworks/angular/src/builders/build-storybook/index.ts b/code/frameworks/angular/src/builders/build-storybook/index.ts index a33b1f4b9776..2c72b4d46962 100644 --- a/code/frameworks/angular/src/builders/build-storybook/index.ts +++ b/code/frameworks/angular/src/builders/build-storybook/index.ts @@ -49,6 +49,7 @@ export type StorybookBuilderOptions = JsonObject & { | 'webpackStatsJson' | 'disableTelemetry' | 'debugWebpack' + | 'previewUrl' >; export type StorybookBuilderOutput = JsonObject & BuilderOutput & { [key: string]: any }; @@ -90,6 +91,7 @@ const commandBuilder: BuilderHandlerFn = ( debugWebpack, disableTelemetry, assets, + previewUrl, } = options; const standaloneOptions: StandaloneBuildOptions = { @@ -111,6 +113,7 @@ const commandBuilder: BuilderHandlerFn = ( tsConfig, webpackStatsJson, debugWebpack, + previewUrl, }; return standaloneOptions; diff --git a/code/frameworks/angular/src/builders/build-storybook/schema.json b/code/frameworks/angular/src/builders/build-storybook/schema.json index 51f24c17a46a..958e6ea7cc1f 100644 --- a/code/frameworks/angular/src/builders/build-storybook/schema.json +++ b/code/frameworks/angular/src/builders/build-storybook/schema.json @@ -67,6 +67,10 @@ "description": "Write Webpack Stats JSON to disk", "default": false }, + "previewUrl": { + "type": "string", + "description": "Disables the default storybook preview and lets you use your own" + }, "styles": { "type": "array", "description": "Global styles to be included in the build.", diff --git a/code/frameworks/angular/src/builders/start-storybook/index.ts b/code/frameworks/angular/src/builders/start-storybook/index.ts index cff33f886fb6..b9fabda386f7 100644 --- a/code/frameworks/angular/src/builders/start-storybook/index.ts +++ b/code/frameworks/angular/src/builders/start-storybook/index.ts @@ -54,6 +54,9 @@ export type StorybookBuilderOptions = JsonObject & { | 'open' | 'docs' | 'debugWebpack' + | 'webpackStatsJson' + | 'loglevel' + | 'previewUrl' >; export type StorybookBuilderOutput = JsonObject & BuilderOutput & {}; @@ -105,6 +108,9 @@ const commandBuilder: BuilderHandlerFn = (options, cont initialPath, open, debugWebpack, + loglevel, + webpackStatsJson, + previewUrl, } = options; const standaloneOptions: StandaloneOptions = { @@ -133,6 +139,9 @@ const commandBuilder: BuilderHandlerFn = (options, cont initialPath, open, debugWebpack, + loglevel, + webpackStatsJson, + previewUrl, }; return standaloneOptions; diff --git a/code/frameworks/angular/src/builders/start-storybook/schema.json b/code/frameworks/angular/src/builders/start-storybook/schema.json index 78553109681c..d44d9c9f4f14 100644 --- a/code/frameworks/angular/src/builders/start-storybook/schema.json +++ b/code/frameworks/angular/src/builders/start-storybook/schema.json @@ -128,6 +128,20 @@ "initialPath": { "type": "string", "description": "URL path to be appended when visiting Storybook for the first time" + }, + "webpackStatsJson": { + "type": "string", + "description": "Write Webpack Stats JSON to disk", + "default": false + }, + "previewUrl": { + "type": "string", + "description": "Disables the default storybook preview and lets you use your own" + }, + "loglevel": { + "type": "string", + "description": "Controls level of logging during build. Can be one of: [silly, verbose, info (default), warn, error, silent].", + "pattern": "(silly|verbose|info|warn|silent)" } }, "additionalProperties": false, From a05089d3d3c14a635b76b6ec41a3a9250b738d4c Mon Sep 17 00:00:00 2001 From: Jeppe Reinhold Date: Fri, 6 Oct 2023 11:34:39 +0200 Subject: [PATCH 75/83] revert testing workflow --- .github/workflows/prepare-non-patch-release.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/prepare-non-patch-release.yml b/.github/workflows/prepare-non-patch-release.yml index c0e3c8b36eaa..00a09bc5cc92 100644 --- a/.github/workflows/prepare-non-patch-release.yml +++ b/.github/workflows/prepare-non-patch-release.yml @@ -46,7 +46,7 @@ jobs: - name: Checkout next uses: actions/checkout@v3 with: - ref: release-to-latest-v2 #to temporarily test the workflow before merging + ref: next # this needs to be set to a high enough number that it will contain the last version tag # as of May 2023, the whole repo had 55K commits fetch-depth: 10000 @@ -128,13 +128,13 @@ jobs: run: | git config --global user.name 'storybook-bot' git config --global user.email '32066757+storybook-bot@users.noreply.github.com' - git checkout -b TEST3-version-non-patch-from-${{ steps.bump-version.outputs.current-version }} + git checkout -b version-non-patch-from-${{ steps.bump-version.outputs.current-version }} git add . git commit -m "Write changelog for ${{ steps.bump-version.outputs.next-version }} [skip ci]" || true - git push --force origin TEST3-version-non-patch-from-${{ steps.bump-version.outputs.current-version }} + git push --force origin version-non-patch-from-${{ steps.bump-version.outputs.current-version }} - name: Resolve merge-conflicts with base branch - if: steps.is-prerelease.outputs.prerelease != 'false' + if: steps.is-prerelease.outputs.prerelease == 'false' working-directory: . env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -161,14 +161,14 @@ jobs: gh pr edit \ --repo "${{github.repository }}" \ --title "TEST3 Release: $CAPITALIZED_RELEASE_TYPE ${{ inputs.pre-id && format('{0} ', inputs.pre-id) }}${{ steps.bump-version.outputs.next-version }}" \ - --base ${{ steps.is-prerelease.outputs.prerelease != 'true' && 'next-release' || 'latest-release' }} \ + --base ${{ steps.is-prerelease.outputs.prerelease == 'true' && 'next-release' || 'latest-release' }} \ --body "${{ steps.description.outputs.description }}" else gh pr create \ --repo "${{github.repository }}"\ --title "TEST3 Release: $CAPITALIZED_RELEASE_TYPE ${{ inputs.pre-id && format('{0} ', inputs.pre-id) }}${{ steps.bump-version.outputs.next-version }}" \ --label "release" \ - --base ${{ steps.is-prerelease.outputs.prerelease != 'true' && 'next-release' || 'latest-release' }} \ + --base ${{ steps.is-prerelease.outputs.prerelease == 'true' && 'next-release' || 'latest-release' }} \ --head version-non-patch-from-${{ steps.bump-version.outputs.current-version }} \ --body "${{ steps.description.outputs.description }}" fi From e6519571de8c094dc416d0d07bd4360e7d366233 Mon Sep 17 00:00:00 2001 From: Jeppe Reinhold Date: Fri, 6 Oct 2023 11:34:39 +0200 Subject: [PATCH 76/83] revert testing workflow --- .github/workflows/prepare-non-patch-release.yml | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/.github/workflows/prepare-non-patch-release.yml b/.github/workflows/prepare-non-patch-release.yml index c0e3c8b36eaa..fab22313a3df 100644 --- a/.github/workflows/prepare-non-patch-release.yml +++ b/.github/workflows/prepare-non-patch-release.yml @@ -2,7 +2,6 @@ name: Prepare non-patch PR run-name: Prepare non-patch PR, triggered by ${{ github.triggering_actor }} on: - pull_request: # to temporarily test the workflow before merging push: branches: - next @@ -46,7 +45,7 @@ jobs: - name: Checkout next uses: actions/checkout@v3 with: - ref: release-to-latest-v2 #to temporarily test the workflow before merging + ref: next # this needs to be set to a high enough number that it will contain the last version tag # as of May 2023, the whole repo had 55K commits fetch-depth: 10000 @@ -128,13 +127,13 @@ jobs: run: | git config --global user.name 'storybook-bot' git config --global user.email '32066757+storybook-bot@users.noreply.github.com' - git checkout -b TEST3-version-non-patch-from-${{ steps.bump-version.outputs.current-version }} + git checkout -b version-non-patch-from-${{ steps.bump-version.outputs.current-version }} git add . git commit -m "Write changelog for ${{ steps.bump-version.outputs.next-version }} [skip ci]" || true - git push --force origin TEST3-version-non-patch-from-${{ steps.bump-version.outputs.current-version }} + git push --force origin version-non-patch-from-${{ steps.bump-version.outputs.current-version }} - name: Resolve merge-conflicts with base branch - if: steps.is-prerelease.outputs.prerelease != 'false' + if: steps.is-prerelease.outputs.prerelease == 'false' working-directory: . env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -161,14 +160,14 @@ jobs: gh pr edit \ --repo "${{github.repository }}" \ --title "TEST3 Release: $CAPITALIZED_RELEASE_TYPE ${{ inputs.pre-id && format('{0} ', inputs.pre-id) }}${{ steps.bump-version.outputs.next-version }}" \ - --base ${{ steps.is-prerelease.outputs.prerelease != 'true' && 'next-release' || 'latest-release' }} \ + --base ${{ steps.is-prerelease.outputs.prerelease == 'true' && 'next-release' || 'latest-release' }} \ --body "${{ steps.description.outputs.description }}" else gh pr create \ --repo "${{github.repository }}"\ --title "TEST3 Release: $CAPITALIZED_RELEASE_TYPE ${{ inputs.pre-id && format('{0} ', inputs.pre-id) }}${{ steps.bump-version.outputs.next-version }}" \ --label "release" \ - --base ${{ steps.is-prerelease.outputs.prerelease != 'true' && 'next-release' || 'latest-release' }} \ + --base ${{ steps.is-prerelease.outputs.prerelease == 'true' && 'next-release' || 'latest-release' }} \ --head version-non-patch-from-${{ steps.bump-version.outputs.current-version }} \ --body "${{ steps.description.outputs.description }}" fi From c68bd21a9df3a53c4f76d8f24a3c5c19d23f5b46 Mon Sep 17 00:00:00 2001 From: Jeppe Reinhold Date: Fri, 6 Oct 2023 15:32:42 +0200 Subject: [PATCH 77/83] cleanup --- .github/workflows/prepare-non-patch-release.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/prepare-non-patch-release.yml b/.github/workflows/prepare-non-patch-release.yml index fab22313a3df..8d523a17a7ab 100644 --- a/.github/workflows/prepare-non-patch-release.yml +++ b/.github/workflows/prepare-non-patch-release.yml @@ -159,13 +159,13 @@ jobs: if PR_STATE=$(gh pr view --json state --jq .state 2>/dev/null) && [[ -n "$PR_STATE" && "$PR_STATE" == *"OPEN"* ]]; then gh pr edit \ --repo "${{github.repository }}" \ - --title "TEST3 Release: $CAPITALIZED_RELEASE_TYPE ${{ inputs.pre-id && format('{0} ', inputs.pre-id) }}${{ steps.bump-version.outputs.next-version }}" \ + --title "Release: $CAPITALIZED_RELEASE_TYPE ${{ inputs.pre-id && format('{0} ', inputs.pre-id) }}${{ steps.bump-version.outputs.next-version }}" \ --base ${{ steps.is-prerelease.outputs.prerelease == 'true' && 'next-release' || 'latest-release' }} \ --body "${{ steps.description.outputs.description }}" else gh pr create \ --repo "${{github.repository }}"\ - --title "TEST3 Release: $CAPITALIZED_RELEASE_TYPE ${{ inputs.pre-id && format('{0} ', inputs.pre-id) }}${{ steps.bump-version.outputs.next-version }}" \ + --title "Release: $CAPITALIZED_RELEASE_TYPE ${{ inputs.pre-id && format('{0} ', inputs.pre-id) }}${{ steps.bump-version.outputs.next-version }}" \ --label "release" \ --base ${{ steps.is-prerelease.outputs.prerelease == 'true' && 'next-release' || 'latest-release' }} \ --head version-non-patch-from-${{ steps.bump-version.outputs.current-version }} \ From 0e0d01b3cdfa87ca2fa91e78ed49f27e4645aa65 Mon Sep 17 00:00:00 2001 From: Atreay Kukanur <66585295+ATREAY@users.noreply.github.com> Date: Fri, 6 Oct 2023 14:43:57 +0000 Subject: [PATCH 78/83] updated changes --- docs/essentials/highlight.md | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/docs/essentials/highlight.md b/docs/essentials/highlight.md index 5d59649214ae..6c8da3c6f043 100644 --- a/docs/essentials/highlight.md +++ b/docs/essentials/highlight.md @@ -32,6 +32,12 @@ To highlight DOM elements with the addon, you'll need to emit the `HIGHLIGHT` ev +
+ +ℹī¸ The `emit` function derived from the `useChannel` API hook creates a communication channel in Storybook's UI to listen for events and update the UI accordingly. The Highlight addon uses this channel to listen to custom events and update the highlighted elements (if any) accordingly. + +
+ ### Reset highlighted elements Out of the box, Storybook automatically removes highlighted elements when transitioning between stories. However, if you need to clear them manually, you can emit the `RESET_HIGHLIGHT` event from within a story or an addon. For example: @@ -70,11 +76,4 @@ By default, the addon applies a standard style to the highlighted elements you'v ]} /> - - - -
- -📚 In all three provided code snippets, the "emit" function comes from the `useChannel` hook, which is imported from the `@storybook/preview-api` package. This `useChannel` hook is used to create a communication channel for sending and receiving messages within the code. The "emit" function obtained from `useChannel` is then used to send messages with specific event types, such as `HIGHLIGHT` or `RESET_HIGHLIGHT`, to control or customize the behavior in the code. - -
\ No newline at end of file + \ No newline at end of file From 1d52a86089fcb4606666a5b4e7fff55c78bbf2bc Mon Sep 17 00:00:00 2001 From: Atreay Kukanur <66585295+ATREAY@users.noreply.github.com> Date: Fri, 6 Oct 2023 16:10:09 +0000 Subject: [PATCH 79/83] updated alignment changes --- docs/essentials/highlight.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/essentials/highlight.md b/docs/essentials/highlight.md index 6c8da3c6f043..190cfe1e84f8 100644 --- a/docs/essentials/highlight.md +++ b/docs/essentials/highlight.md @@ -32,12 +32,6 @@ To highlight DOM elements with the addon, you'll need to emit the `HIGHLIGHT` ev -
- -ℹī¸ The `emit` function derived from the `useChannel` API hook creates a communication channel in Storybook's UI to listen for events and update the UI accordingly. The Highlight addon uses this channel to listen to custom events and update the highlighted elements (if any) accordingly. - -
- ### Reset highlighted elements Out of the box, Storybook automatically removes highlighted elements when transitioning between stories. However, if you need to clear them manually, you can emit the `RESET_HIGHLIGHT` event from within a story or an addon. For example: @@ -58,6 +52,12 @@ Out of the box, Storybook automatically removes highlighted elements when transi +
+ +ℹī¸ The `emit` function derived from the `useChannel` API hook creates a communication channel in Storybook's UI to listen for events and update the UI accordingly. The Highlight addon uses this channel to listen to custom events and update the highlighted elements (if any) accordingly. + +
+ ## Customize style By default, the addon applies a standard style to the highlighted elements you've enabled for the story. However, you can enable your custom style by extending the payload object and providing a `color` and/or `style` properties. For example: From a3d6ec87c030dfad58f5abc1f4899a40714b870f Mon Sep 17 00:00:00 2001 From: bkfarnsworth Date: Sat, 7 Oct 2023 18:53:10 -0600 Subject: [PATCH 80/83] Update my-component-story-basic-and-props.js.mdx --- docs/snippets/react/my-component-story-basic-and-props.js.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/snippets/react/my-component-story-basic-and-props.js.mdx b/docs/snippets/react/my-component-story-basic-and-props.js.mdx index c1e3bc64d80f..8d63bbf2ed9f 100644 --- a/docs/snippets/react/my-component-story-basic-and-props.js.mdx +++ b/docs/snippets/react/my-component-story-basic-and-props.js.mdx @@ -1,5 +1,5 @@ ```js -// MyComponent.story.js|jsx +// MyComponent.stories.js|jsx import { MyComponent } from './MyComponent'; From e508783fa62be7712907321b58bc089cb6ce7d86 Mon Sep 17 00:00:00 2001 From: bkfarnsworth Date: Sat, 7 Oct 2023 18:53:39 -0600 Subject: [PATCH 81/83] Update my-component-story-basic-and-props.ts-4-9.mdx --- .../react/my-component-story-basic-and-props.ts-4-9.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/snippets/react/my-component-story-basic-and-props.ts-4-9.mdx b/docs/snippets/react/my-component-story-basic-and-props.ts-4-9.mdx index f693a660cf14..86957338d89e 100644 --- a/docs/snippets/react/my-component-story-basic-and-props.ts-4-9.mdx +++ b/docs/snippets/react/my-component-story-basic-and-props.ts-4-9.mdx @@ -1,5 +1,5 @@ ```tsx -// MyComponent.story.ts|tsx +// MyComponent.stories.ts|tsx import type { Meta, StoryObj } from '@storybook/react'; From ee149dd169bedfc54533aea93fa33d4466c4d2e5 Mon Sep 17 00:00:00 2001 From: bkfarnsworth Date: Sat, 7 Oct 2023 18:53:51 -0600 Subject: [PATCH 82/83] Update my-component-story-basic-and-props.ts.mdx --- docs/snippets/react/my-component-story-basic-and-props.ts.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/snippets/react/my-component-story-basic-and-props.ts.mdx b/docs/snippets/react/my-component-story-basic-and-props.ts.mdx index ee42d9ce9fd2..f93e8cb280f3 100644 --- a/docs/snippets/react/my-component-story-basic-and-props.ts.mdx +++ b/docs/snippets/react/my-component-story-basic-and-props.ts.mdx @@ -1,5 +1,5 @@ ```tsx -// MyComponent.story.ts|tsx +// MyComponent.stories.ts|tsx import type { Meta, StoryObj } from '@storybook/react'; From d36bca3631ea3b94acae34eadf0791f947039d3f Mon Sep 17 00:00:00 2001 From: storybook-bot <32066757+storybook-bot@users.noreply.github.com> Date: Mon, 9 Oct 2023 07:22:55 +0000 Subject: [PATCH 83/83] Write changelog for 7.5.0-alpha.5 [skip ci] --- CHANGELOG.prerelease.md | 11 +++++++++++ code/package.json | 3 ++- docs/versions/next.json | 2 +- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.prerelease.md b/CHANGELOG.prerelease.md index cc8636b9d524..b883c7eaa546 100644 --- a/CHANGELOG.prerelease.md +++ b/CHANGELOG.prerelease.md @@ -1,3 +1,14 @@ +## 7.5.0-alpha.5 + +- Angular: Add CLI options (debugWebpack, webpackStatsJson, and more) - [#24388](https://github.com/storybookjs/storybook/pull/24388), thanks [@yannbf](https://github.com/yannbf)! +- Angular: Fix Angular 15 support and add zone.js v0.14.x support - [#24367](https://github.com/storybookjs/storybook/pull/24367), thanks [@valentinpalkovic](https://github.com/valentinpalkovic)! +- Core: Add class name to Storybook error name - [#24371](https://github.com/storybookjs/storybook/pull/24371), thanks [@yannbf](https://github.com/yannbf)! +- ManagerAPI: Fix bug with story redirection when URL has partial storyId - [#24345](https://github.com/storybookjs/storybook/pull/24345), thanks [@ndelangen](https://github.com/ndelangen)! +- NextJS: Fix Image Context re-use via singleton - [#24146](https://github.com/storybookjs/storybook/pull/24146), thanks [@martinnabhan](https://github.com/martinnabhan)! +- NextJS: Fix default next image loader when src has params - [#24187](https://github.com/storybookjs/storybook/pull/24187), thanks [@json-betsec](https://github.com/json-betsec)! +- React: Upgrade `react-docgen` to 6.0.x and improve argTypes - [#23825](https://github.com/storybookjs/storybook/pull/23825), thanks [@shilman](https://github.com/shilman)! +- Webpack: Display errors on build - [#24377](https://github.com/storybookjs/storybook/pull/24377), thanks [@yannbf](https://github.com/yannbf)! + ## 7.5.0-alpha.4 - CLI: Fix Nextjs project detection - [#24346](https://github.com/storybookjs/storybook/pull/24346), thanks [@yannbf](https://github.com/yannbf)! diff --git a/code/package.json b/code/package.json index 7a14a389b3d7..c66b87af4d93 100644 --- a/code/package.json +++ b/code/package.json @@ -328,5 +328,6 @@ "Dependency Upgrades" ] ] - } + }, + "deferredNextVersion": "7.5.0-alpha.5" } diff --git a/docs/versions/next.json b/docs/versions/next.json index e6e5140c4079..482f0159dc1f 100644 --- a/docs/versions/next.json +++ b/docs/versions/next.json @@ -1 +1 @@ -{"version":"7.5.0-alpha.4","info":{"plain":"- CLI: Fix Nextjs project detection - [#24346](https://github.com/storybookjs/storybook/pull/24346), thanks [@yannbf](https://github.com/yannbf)!\n- Core: Deprecate `storyStoreV6` (including `storiesOf`) and `storyIndexers` - [#23938](https://github.com/storybookjs/storybook/pull/23938), thanks [@JReinhold](https://github.com/JReinhold)!\n- Core: Fix Promise cycle bug in useSharedState - [#24268](https://github.com/storybookjs/storybook/pull/24268), thanks [@ndelangen](https://github.com/ndelangen)!\n- Core: Fix missing favicon during dev - [#24356](https://github.com/storybookjs/storybook/pull/24356), thanks [@ndelangen](https://github.com/ndelangen)!\n- NextJS: Change babel plugins from `proposal-...` to `transform-...` - [#24290](https://github.com/storybookjs/storybook/pull/24290), thanks [@roottool](https://github.com/roottool)!\n- Nextjs: Improve support for Windows-style paths - [#23695](https://github.com/storybookjs/storybook/pull/23695), thanks [@T99](https://github.com/T99)!\n- UI: Fix infinite hook call causing browsers to freeze - [#24291](https://github.com/storybookjs/storybook/pull/24291), thanks [@yannbf](https://github.com/yannbf)!\n- UI: Improve contrast ratio between focus / hover - [#24205](https://github.com/storybookjs/storybook/pull/24205), thanks [@chocoscoding](https://github.com/chocoscoding)!\n- Vite: Move mdx-plugin from @storybook/builder-vite to @storybook/addon-docs - [#24166](https://github.com/storybookjs/storybook/pull/24166), thanks [@bryanjtc](https://github.com/bryanjtc)!"}} +{"version":"7.5.0-alpha.5","info":{"plain":"- Angular: Add CLI options (debugWebpack, webpackStatsJson, and more) - [#24388](https://github.com/storybookjs/storybook/pull/24388), thanks [@yannbf](https://github.com/yannbf)!\n- Angular: Fix Angular 15 support and add zone.js v0.14.x support - [#24367](https://github.com/storybookjs/storybook/pull/24367), thanks [@valentinpalkovic](https://github.com/valentinpalkovic)!\n- Core: Add class name to Storybook error name - [#24371](https://github.com/storybookjs/storybook/pull/24371), thanks [@yannbf](https://github.com/yannbf)!\n- ManagerAPI: Fix bug with story redirection when URL has partial storyId - [#24345](https://github.com/storybookjs/storybook/pull/24345), thanks [@ndelangen](https://github.com/ndelangen)!\n- NextJS: Fix Image Context re-use via singleton - [#24146](https://github.com/storybookjs/storybook/pull/24146), thanks [@martinnabhan](https://github.com/martinnabhan)!\n- NextJS: Fix default next image loader when src has params - [#24187](https://github.com/storybookjs/storybook/pull/24187), thanks [@json-betsec](https://github.com/json-betsec)!\n- React: Upgrade `react-docgen` to 6.0.x and improve argTypes - [#23825](https://github.com/storybookjs/storybook/pull/23825), thanks [@shilman](https://github.com/shilman)!\n- Webpack: Display errors on build - [#24377](https://github.com/storybookjs/storybook/pull/24377), thanks [@yannbf](https://github.com/yannbf)!"}}