From b5659cecb6e8face969baea7e31b1b7e7ea5f59b Mon Sep 17 00:00:00 2001 From: Michael Shilman Date: Thu, 18 May 2017 01:48:11 +1000 Subject: [PATCH 01/17] First draft of release notes --- app/react/CHANGELOG.md => CHANGELOG.md | 16 +++++++++++++++- HISTORY.md | 25 ------------------------- app/react/ROADMAP.md => ROADMAP.md | 5 +---- 3 files changed, 16 insertions(+), 30 deletions(-) rename app/react/CHANGELOG.md => CHANGELOG.md (97%) delete mode 100644 HISTORY.md rename app/react/ROADMAP.md => ROADMAP.md (51%) diff --git a/app/react/CHANGELOG.md b/CHANGELOG.md similarity index 97% rename from app/react/CHANGELOG.md rename to CHANGELOG.md index 8d5bd262fbf..f7fa2e70d6e 100644 --- a/app/react/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,18 @@ -## Changelog +### v3.0.0-alpha0 (18-May-2017) + +Storybook 3.0 is our first fully community-driven release! Notable changes: +- Move from `@kadira` to `@storybooks` org across [github](https://github.com/storybooks/storybook/), [npm](FIXME), [docs](https://storybooks.js.org/) +- Upgrade to Webpack2 [PR637](https://github.com/storybooks/storybook/pull/637) +- Switch to monorepo and overhaul package structure. [PR749](https://github.com/storybooks/storybook/pull/749) +[PR1031](https://github.com/storybooks/storybook/pull/1031) + +
+ +All changes + +- fill list of PRs since 2.5.3 +- ... +
### v2.35.3 diff --git a/HISTORY.md b/HISTORY.md deleted file mode 100644 index e1d68512905..00000000000 --- a/HISTORY.md +++ /dev/null @@ -1,25 +0,0 @@ -## v.Next - -- Deprecated `{ linkTo, action }` as built-in addons: https://github.com/storybooks/storybook/issues/1017. From 3.0 use them as you would [any other addon](https://storybooks.js.org/docs/react-storybook/addons/using-addons/). - -Before: - -```js -// .storybook/addons.js -import '@kadira/storybook/addons' - -// *.stories.js -import { linkTo, action } from '@kadira/storybook' -``` - -After: - -```js -// .storybook/addons.js -import '@storybook/addon-actions/register' -import '@storybook/addon-links/register' - -// *.stories.js -import { action } from '@storybook/addon-actions' -import { linkTo } from '@storybook/addon-links' -``` diff --git a/app/react/ROADMAP.md b/ROADMAP.md similarity index 51% rename from app/react/ROADMAP.md rename to ROADMAP.md index 945b9d8d04d..25310e68c4f 100644 --- a/app/react/ROADMAP.md +++ b/ROADMAP.md @@ -2,13 +2,10 @@ ### Short Term -* Addon API and addons -* A clear guide to hack React Storybook -* React Native Support +* Mobile support ### Long Term * Automatic story generation (and edge case detection) based on propTypes. * Angular Support * Vue Support -* UI addons (Add different panels like Action Logger) From e1a60feb25eb8d8b60b93f09715c1d427842fc29 Mon Sep 17 00:00:00 2001 From: Michael Shilman Date: Thu, 18 May 2017 16:44:27 +1000 Subject: [PATCH 02/17] Add git URL to package.json for changelog generator --- package.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/package.json b/package.json index 277d7bea8bf..12146e8acf6 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,9 @@ { "name": "storybook", + "repository": { + "type": "git", + "url": "git@github.com:storybooks/storybook.git" + }, "devDependencies": { "babel-cli": "^6.24.1", "babel-core": "^6.24.1", From 171988057c1939dc28b346baccd2cf09240a5cb8 Mon Sep 17 00:00:00 2001 From: Michael Shilman Date: Fri, 19 May 2017 00:23:27 +1000 Subject: [PATCH 03/17] Update CHANGELOG according to feedback - use plain links to PRs - group closed PRs by issue type --- CHANGELOG.md | 87 +++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 80 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c1774bf07cb..b54317930fd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,17 +1,90 @@ ### v3.0.0-alpha0 (18-May-2017) Storybook 3.0 is our first fully community-driven release! Notable changes: -- Move from `@kadira` to `@storybooks` org across [github](https://github.com/storybooks/storybook/), [npm](FIXME), [docs](https://storybooks.js.org/) -- Upgrade to Webpack2 [PR637](https://github.com/storybooks/storybook/pull/637) -- Switch to monorepo and overhaul package structure. [PR749](https://github.com/storybooks/storybook/pull/749) -[PR1031](https://github.com/storybooks/storybook/pull/1031) +- Moved from `@kadira` to `@storybooks` org across [github](https://github.com/storybooks/storybook/), [npm](FIXME), [docs](https://storybooks.js.org/) +- Upgraded to Webpack2. https://github.com/storybooks/storybook/pull/637 +- Switched to monorepo and overhaul package structure. https://github.com/storybooks/storybook/pull/749 https://github.com/storybooks/storybook/pull/1031
-All changes +CLOSED issues with PRs -- fill list of PRs since 2.5.3 -- ... + +- #404 Images gets extra height when displayed in storybook #974 +- #674 Deep Linking: put path of component>story in the URL #918 +- #733 Issue triage guidelines #1024 +- #740 Pull request template #741 +- #742 Migrate Storybook to monorepo #907,#749 +- #773 Change npm organisation from kadira to storybook #996 +- #774 Set a standard for unit-testing #771 +- #840 Merge channel-postmsg into this repo #882 +- #892 Add regex to match the story's kind #906 +- #912 Update Docs for monorepo #913 +- #920 Storybook's default webpack config is broken #922 +- #959 [BUG] Style: Title of Panels #961 +- #1016 Restore storybook-addon-links #1021 +- #1017 Deprecate addon-links and addon-actions as "built-in addons" #1038,#1025 +- #1042 Update README #1043 +- #1052 [3.0.0alpha] build-storybook no longer supports relative paths #1058 + +
+
+ +OPEN issues with PRs + + +- #953 Typescript compatibility #989 + +
+
+ +PRs without issues + + +- #1044 MOVE & RENAME and storyshots && CHANGE “React Storybook” > “Storybook” +- #1026 Switch back to non-fork of react-inspector +- #1008 Dependency updates +- #1001 Fixes for types for knobs `number` +- #998 Update jest to the latest version 🚀 +- #992 Update links in PRs section of CONTRIBUTING.md +- #991 Remove text transform uppercase for knob labels +- #988 Updated dead getstorybook.io links to storybooks.js.org +- #982 First pass at update the contribution instructions +- #980 Fix linting in addon-info +- #977 Fix typo in README +- #973 Do not ignore story.js in prepublish +- #972 FIX for test-cra was breaking the build +- #969 Update lerna to the latest version 🚀 +- #965 FIX webpack overriding && CLEANUP && ADD example +- #956 CHANGE to use react-split-view 0.1.63 over the fork +- #929 add description field from __docgenInfo for prop table for info plugin +- #927 Fix Doc Links +- #926 Handle null elements in getData +- #924 Add propTablesExclude option +- #923 PR review policy +- #915 Update lerna to the latest version 🚀 +- #914 addon-info: make the info overlay be fixed +- #904 Use jest for unittesting - standardize unit testing epic +- #903 Switch to the only prepublish script +- #897 Add examples +- #768 Update dependencies to enable Greenkeeper 🌴 +- #753 Add typescript definitions for getStorybook() +- #748 Issue Triage instructions +- #739 Add allowFullScreen attribute to preview iframe +- #736 A first pass at a reproduction recipe +- #735 Allow HTTPS +- #723 extend devMiddlewareOptions with config.devServer +- #721 Update links to point to new organization +- #720 Fixed spelling error. +- #715 Added meta IE=edge +- #712 Replace String.includes with String.indexOf: cross-browsing support +- #702 Fix spelling mistake - "element form the story" to "element from the story" +- #699 Remove broken react-button example +- #680 Make return type of StoryDecorator nullable +- #672 Cleaner error handling for storiesOf +- #671 Typo fix +- #670 Warn if story with a given name already exists +
### v2.35.3 From ce1eb21ba4b55bc4e94ab14c4b15336b078c88c7 Mon Sep 17 00:00:00 2001 From: Michael Shilman Date: Sat, 20 May 2017 23:20:43 +1000 Subject: [PATCH 04/17] Instructions for generating release notes (design only, not yet implemented) --- CONTRIBUTING.md | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 1949590b832..7f298b55495 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -171,3 +171,24 @@ npm link @storybook/react ### Getting Changes After you've done any change, you need to run the `npm run storybook` command every time to see those changes. + +## Release Guide + +This section is for Storybook maintainers who will be creating releases. + +Each release is described by: +- A version +- A list of merged pull requests +- Optionally, a short hand-written description + +Thus current the release sequence is: + +1. Edit `lerna.json` to update the version. +2. For full releases (i.e. not alpha/rc), run `npm changelog` to update `CHANGELOG.md`. +3. Edit PR titles/labels on github until you're happy with the output in `CHANGELOG.md`. +4. Optionally, edit a handwritten description in `CHANGELOG.md`. +5. Run `lerna publish` to publish to `npm` and create a tag. +6. Run `npm release` to push the tag to github and create a release using the contents of `CHANGELOG.md` +7. Update docs as necessary in https://github.com/storybooks/storybooks.github.io + +NOTE: we hope to automate this in CI at some point, so this process is designed with that in mind. From 4709417fe93cd9a1338b9a7cd5d959bee4081a5c Mon Sep 17 00:00:00 2001 From: Michael Shilman Date: Sat, 20 May 2017 23:47:32 +1000 Subject: [PATCH 05/17] Updated release steps --- CONTRIBUTING.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 7f298b55495..29cd10576b8 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -188,7 +188,8 @@ Thus current the release sequence is: 3. Edit PR titles/labels on github until you're happy with the output in `CHANGELOG.md`. 4. Optionally, edit a handwritten description in `CHANGELOG.md`. 5. Run `lerna publish` to publish to `npm` and create a tag. -6. Run `npm release` to push the tag to github and create a release using the contents of `CHANGELOG.md` -7. Update docs as necessary in https://github.com/storybooks/storybooks.github.io +6. Push the tag and `CHANGELOG.md` changes to github. +7. For full releases, run `npm release` to create a release on Github using the contents of `CHANGELOG.md`. +8. Update docs as necessary in https://github.com/storybooks/storybooks.github.io NOTE: we hope to automate this in CI at some point, so this process is designed with that in mind. From c992573fe7314f47ddabbab9b1d7a53ebf858416 Mon Sep 17 00:00:00 2001 From: Michael Shilman Date: Sat, 27 May 2017 17:16:09 +1000 Subject: [PATCH 06/17] Update release notes using latest pr-log --- CHANGELOG.md | 177 +++++++++++++++++++++++++++++------------------- CONTRIBUTING.md | 17 ++--- README.md | 5 +- package.json | 12 ++++ 4 files changed, 133 insertions(+), 78 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 491d2c1225e..efa162a8d7e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,90 +1,131 @@ -### v3.0.0-alpha0 (18-May-2017) +## 3.0.0 (May 27, 2017) Storybook 3.0 is our first fully community-driven release! Notable changes: - Moved from `@kadira` to `@storybooks` org across [github](https://github.com/storybooks/storybook/), [npm](FIXME), [docs](https://storybooks.js.org/) -- Upgraded to Webpack2. https://github.com/storybooks/storybook/pull/637 -- Switched to monorepo and overhaul package structure. https://github.com/storybooks/storybook/pull/749 https://github.com/storybooks/storybook/pull/1031 +- Upgraded to Webpack2! https://github.com/storybooks/storybook/pull/637 +- Switched to monorepo and overhauled package structure. https://github.com/storybooks/storybook/pull/749 https://github.com/storybooks/storybook/pull/1031 +- Added configuration options to storybooks snapshot testing. https://github.com/storybooks/storybook/pull/1090 +- Added `create-react-native-app` support. https://github.com/storybooks/storybook/pull/1117 +- Added HTTPS support. https://github.com/storybooks/storybook/pull/735
-CLOSED issues with PRs +Features -- #404 Images gets extra height when displayed in storybook #974 -- #674 Deep Linking: put path of component>story in the URL #918 -- #733 Issue triage guidelines #1024 -- #740 Pull request template #741 -- #742 Migrate Storybook to monorepo #907,#749 -- #773 Change npm organisation from kadira to storybook #996 -- #774 Set a standard for unit-testing #771 -- #840 Merge channel-postmsg into this repo #882 -- #892 Add regex to match the story's kind #906 -- #912 Update Docs for monorepo #913 -- #920 Storybook's default webpack config is broken #922 -- #959 [BUG] Style: Title of Panels #961 -- #1016 Restore storybook-addon-links #1021 -- #1017 Deprecate addon-links and addon-actions as "built-in addons" #1038,#1025 -- #1042 Update README #1043 -- #1052 [3.0.0alpha] build-storybook no longer supports relative paths #1058 - +* Added CRNA support (#1117) +* [Addon-Knobs] Fixing performance issues. (#1039) +* Allow HTTPS (#735)
-OPEN issues with PRs +Bug Fixes -- #953 Typescript compatibility #989 - +* FIX for test-cra was breaking the build (#972)
-PRs without issues +Maintenance -- #1044 MOVE & RENAME and storyshots && CHANGE “React Storybook” > “Storybook” -- #1026 Switch back to non-fork of react-inspector -- #1008 Dependency updates -- #1001 Fixes for types for knobs `number` -- #998 Update jest to the latest version 🚀 -- #992 Update links in PRs section of CONTRIBUTING.md -- #991 Remove text transform uppercase for knob labels -- #988 Updated dead getstorybook.io links to storybooks.js.org -- #982 First pass at update the contribution instructions -- #980 Fix linting in addon-info -- #977 Fix typo in README -- #973 Do not ignore story.js in prepublish -- #972 FIX for test-cra was breaking the build -- #969 Update lerna to the latest version 🚀 -- #965 FIX webpack overriding && CLEANUP && ADD example -- #956 CHANGE to use react-split-view 0.1.63 over the fork -- #929 add description field from __docgenInfo for prop table for info plugin -- #927 Fix Doc Links -- #926 Handle null elements in getData -- #924 Add propTablesExclude option -- #923 PR review policy -- #915 Update lerna to the latest version 🚀 -- #914 addon-info: make the info overlay be fixed -- #904 Use jest for unittesting - standardize unit testing epic -- #903 Switch to the only prepublish script -- #897 Add examples -- #768 Update dependencies to enable Greenkeeper 🌴 -- #753 Add typescript definitions for getStorybook() -- #748 Issue Triage instructions -- #739 Add allowFullScreen attribute to preview iframe -- #736 A first pass at a reproduction recipe -- #735 Allow HTTPS -- #723 extend devMiddlewareOptions with config.devServer -- #721 Update links to point to new organization -- #720 Fixed spelling error. -- #715 Added meta IE=edge -- #712 Replace String.includes with String.indexOf: cross-browsing support -- #702 Fix spelling mistake - "element form the story" to "element from the story" -- #699 Remove broken react-button example -- #680 Make return type of StoryDecorator nullable -- #672 Cleaner error handling for storiesOf -- #671 Typo fix -- #670 Warn if story with a given name already exists +* FIX linting (#1132) +* Fixed a typo in webpack.config.js (#1089) +* refactor: change NPM organisation from kadira to storybook (#996) +* CHANGE folder structure && CHANGE package-names (#1031) +
+
+ +Dependency Upgrades + +* Update lerna to the latest version 🚀 (#1101) +* update dependencies in cra-storybook (#1080) +* Switch back to non-fork of react-inspector (#1026) +* Dependency updates (#1008) +* Update jest to the latest version 🚀 (#998) +* CHANGE to use react-split-view 0.1.63 over the fork (#956) +* FIX webpack overriding && CLEANUP && ADD example (#965) +* Update lerna to the latest version 🚀 (#915) +* Use jest for unittesting - standardize unit testing epic (#904) +* Update dependencies to enable Greenkeeper 🌴 (#768) +
+
+ +Other + + +* Add travis deploy key (#1135) +* ADD a global to storyshots to make it work for series with info addon (#1129) +* Removed unsafe Storyshots import (#1124) +* Update all package.json with monorepo metadata (#1111) +* Add react-dom to the devDependency list for React Native projects (#1102) +* Added `snapshotWithOptions` to allow configuring rendering options in Storyshots (#1090) +* Upgrade React Native webpack config to webpack 2 (#1097) +* Fix dead link to demo repository (#1091) +* FIX postcss options missing && UPDATE dependencies (#1087) +* fix(knobs): increase font size label (#1086) +* CHANGE to prop-types package for notes & test-cra (#1082) +* Configure snapshot test (#1035) +* Test storyshots (#971) +* IMPROVE cli (#1079) +* Update package.json with repository info (#1078) +* Update storyshots README.md example (#1076) +* Added component description from __docgenInfo, Added the ability to get the PropType from __docgenInfo for prop table, Fixed an issue with PropVal rendering an object (#1030) +* Upgraded webpack PostCSS plugin definition (#1062) +* Update link to Storyshots addon (#1074) +* chore(jest): update to v20's default configuration file (#1063) +* Added error message for missing or invalid storyName (#747) +* Removed `>` typo in Info prop table header (#1064) +* Activating Open Collective (#1065) +* 1052-resolve-output-path (#1058) +* MOVE & RENAME and storyshots && CHANGE “React Storybook” > “Storybook” (#1044) +* Update README (#1043) +* Deprecate builtin addons (#1038) +* Updated issue triage guidelines (#1024) +* Deprecate built-in addons (#1025) +* Add addonlinks repo (#1021) +* Add propTablesExclude option (#924) +* Add typescript definition to addon-notes (#989) +* Fixes for types for knobs `number` (#1001) +* Fix linting in addon-info (#980) +* First pass at update the contribution instructions (#982) +* Remove text transform uppercase for knob labels (#991) +* Update links in PRs section of CONTRIBUTING.md (#992) +* Updated dead getstorybook.io links to storybooks.js.org (#988) +* Do not ignore story.js in prepublish (#973) +* Fix typo in README (#977) +* addon-info: make the info overlay be fixed (#914) +* Fixing link (#974) +* Update lerna to the latest version 🚀 (#969) +* Handle null elements in getData (#926) +* add description field from __docgenInfo for prop table for info plugin (#929) +* #959 add a max-height and center element with alignItems: center (#961) +* Switch to the only prepublish script (#903) +* PR review policy (#923) +* Add typescript definitions for getStorybook() (#753) +* Restore deep link for addon docs (#919) +* Fix default storybook webpack config (#922) +* Render the first story for a kind if no story selected. (#918) +* Update docs for monorepo (#913) +* Monorepo readme and contributing (#907) +* Add story kind regex (#906) +* Add examples (#897) +* Add missing repos (#882) +* Switch to monorepo (#749) +* extend devMiddlewareOptions with config.devServer (#723) +* Added meta IE=edge (#715) +* Replace String.includes with String.indexOf: cross-browsing support (#712) +* Issue Triage instructions (#748) +* Simple pull request template (#741) +* Make return type of StoryDecorator nullable (#680) +* Warn if story with a given name already exists (#670) +* Fix spelling mistake - "element form the story" to "element from the story" (#702) +* Remove broken react-button example (#699) +* Fixed spelling error. (#720) +* Typo fix (#671) +* Cleaner error handling for storiesOf (#672) +* Update links to point to new organization (#721)
### v2.35.3 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index e60b192188c..a59328926ca 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -178,13 +178,14 @@ Each release is described by: Thus current the release sequence is: -1. Edit `lerna.json` to update the version. -2. For full releases (i.e. not alpha/rc), run `npm changelog` to update `CHANGELOG.md`. -3. Edit PR titles/labels on github until you're happy with the output in `CHANGELOG.md`. -4. Optionally, edit a handwritten description in `CHANGELOG.md`. -5. Run `lerna publish` to publish to `npm` and create a tag. -6. Push the tag and `CHANGELOG.md` changes to github. -7. For full releases, run `npm release` to create a release on Github using the contents of `CHANGELOG.md`. -8. Update docs as necessary in https://github.com/storybooks/storybooks.github.io +1. Go to `master` and make sure you current with origin +2. For full releases (i.e. not alpha/beta/rc), run `npm changelog` to update `CHANGELOG.md`. + - Edit PR titles/labels on github until you're happy with the output in `CHANGELOG.md`. + - Optionally, edit a handwritten description in `CHANGELOG.md`. +3. `git clean -fdx && yarn` to clean out any extra files in your local directory (WARNING: destructive if you have extra files lying around!) +4. `npm run bootstrap` to build all the packages +5. `npm run publish -- --concurrency 1` to publish an alpha release + - For a prerelease (alpha/beta/rc), add e.g. `--npm-tag=alpha` to the publish args +6. Push the tag and `CHANGELOG.md` changes to github `git push --tags` NOTE: we hope to automate this in CI at some point, so this process is designed with that in mind. diff --git a/README.md b/README.md index dd4eb38ace7..96aed6c1144 100644 --- a/README.md +++ b/README.md @@ -72,8 +72,9 @@ For full documentation on using Storybook visit: [storybooks.js.org](https://sto ## Contributing -We welcome contributions to Storybook! There are many ways to contribute to -this project. [Get started here](CONTRIBUTING.md) +We welcome contributions to Storybook! +- ⇄ Pull requests and ★ Stars are always welcome. +- Read our [contributing guide](CONTRIBUTING.md) to get started. ### Development scripts diff --git a/package.json b/package.json index d4c30e54702..53a486a907d 100644 --- a/package.json +++ b/package.json @@ -43,6 +43,7 @@ "url": "git://github.com/storybooks/storybook.git" }, "scripts": { + "changelog": "pr-log --sloppy", "publish": "lerna publish", "import-repo": "lerna import", "bootstrap": "lerna bootstrap", @@ -62,5 +63,16 @@ "collective": { "type": "opencollective", "url": "https://opencollective.com/storybook" + }, + "pr-log": { + "validLabels": { + "bug": "Bug Fixes", + "greenkeeper": "Dependency Upgrades", + "documentation": "Documentation", + "feature": "Features", + "maintenance": "Maintenance", + "breaking": "Breaking Changes", + "misc": "Other" + } } } From b975fe25392c9167831aa6e17b79e4562b7c947e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20Vadal=C3=A0?= Date: Sat, 27 May 2017 10:06:37 +0200 Subject: [PATCH 07/17] adds ReactSVGPanZoom to examples list --- docs/pages/examples/_examples.yml | 6 ++++++ .../examples/thumbnails/react-svg-pan-zoom.png | Bin 0 -> 82841 bytes 2 files changed, 6 insertions(+) create mode 100644 docs/pages/examples/thumbnails/react-svg-pan-zoom.png diff --git a/docs/pages/examples/_examples.yml b/docs/pages/examples/_examples.yml index 4f02c09ec24..5ff931fcc82 100644 --- a/docs/pages/examples/_examples.yml +++ b/docs/pages/examples/_examples.yml @@ -82,3 +82,9 @@ todomvc: description: Todo app Storybook with built-in unit tests. source: https://github.com/thorjarhun/react-storybook-todolist demo: https://thorjarhun.github.io/react-storybook-todolist/ +react-svg-pan-zoom: + thumbnail: ./thumbnails/react-svg-pan-zoom.png + title: React SVG Pan Zoom + description: A React component that adds pan and zoom features to SVG + source: https://github.com/chrvadala/react-svg-pan-zoom + demo: https://chrvadala.github.io/react-svg-pan-zoom/ diff --git a/docs/pages/examples/thumbnails/react-svg-pan-zoom.png b/docs/pages/examples/thumbnails/react-svg-pan-zoom.png new file mode 100644 index 0000000000000000000000000000000000000000..976b90bd83ebe1f4cc489ad1dbcf44ae46381bcd GIT binary patch literal 82841 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 Date: Fri, 26 May 2017 23:55:41 +0200 Subject: [PATCH 08/17] UPDATE readme && FIX codemod --- lib/codemod/README.md | 33 +++++++++++--- lib/codemod/package.json | 7 +++ .../transforms/update-organisation-name.js | 43 ++++++++++++++----- 3 files changed, 67 insertions(+), 16 deletions(-) diff --git a/lib/codemod/README.md b/lib/codemod/README.md index 54cff5b5d26..693b2b6b57e 100644 --- a/lib/codemod/README.md +++ b/lib/codemod/README.md @@ -13,28 +13,49 @@ It will help you migrate breaking changes. ## Installation ```sh +npm install jscodeshift npm install @storybook/codemod ``` +- `@storybook/codemod` is out collection of codemod scripts. +- `jscodeshift` is a tool we use to apply our codemods. + +After running the migration commands, you can remove them from your `package.json`, if you added them. + +## How to run a codemod script + +From the directory where you installed both `jscodeshift` and `@storybook/codemod` run: + +Example: +```sh +./node_modules/.bin/jscodeshift -t ../react-storybook/lib/codemod/dist/update-organisation-name.js . --ignore-pattern "node_modules|dist" +``` + +Explanation: +``` + -t --ignore-pattern "" +``` + ## Transforms ### add-organisation-to-package-name -Updates package names in imports to include our organisation name prefix -(`@storybook/`), stripping off the old `@storybook/` prefix. +Updates package names in imports to migrate to the new package names of storybook. ```sh -jscodeshift -t add-organisation-to-package-name path/to/source.js +./node_modules/.bin/jscodeshift -t ../react-storybook/lib/codemod/dist/update-organisation-name.js . --ignore-pattern "node_modules|dist" ``` +There's a mapping of paths we replace but this example explains the gist of it: + Example: - ```js import { storiesOf } from '@kadira/storybook'; +import { storiesOf } from '@kadira/storybook-addon-links'; ``` -becomes - +Becomes ```js import { storiesOf } from '@storybook/react'; +import { storiesOf } from '@storybook/addon-links'; ``` diff --git a/lib/codemod/package.json b/lib/codemod/package.json index 490da844ead..ffea8db6dbc 100644 --- a/lib/codemod/package.json +++ b/lib/codemod/package.json @@ -10,5 +10,12 @@ "main": "src/index.js", "dependencies": { "jscodeshift": "^0.3.30" + }, + "scripts": { + "prepublish": "node ../../scripts/prepublish.js && mv dist/transforms/* dist" + }, + "license": "MIT", + "devDependencies": { + "shelljs": "^0.7.7" } } diff --git a/lib/codemod/src/transforms/update-organisation-name.js b/lib/codemod/src/transforms/update-organisation-name.js index f66f76a90fa..db8ad7acd8d 100644 --- a/lib/codemod/src/transforms/update-organisation-name.js +++ b/lib/codemod/src/transforms/update-organisation-name.js @@ -1,9 +1,9 @@ -// Demo at https://astexplorer.net/#/gist/f2d0b42c37e4556a4f816892be6ca402/latest export default function transformer(file, api) { const j = api.jscodeshift; + const packageNames = { - '@kadira/storybook-addons': '@storybook/addons', '@kadira/react-storybook-decorator-centered': '@storybook/addon-centered', + '@kadira/storybook-addons': '@storybook/addons', '@kadira/storybook-addon-comments': '@storybook/addon-comments', '@kadira/storybook-addon-graphql': '@storybook/addon-graphql', '@kadira/storybook-addon-info': '@storybook/addon-info', @@ -11,27 +11,50 @@ export default function transformer(file, api) { '@kadira/storybook-addon-links': '@storybook/addon-links', '@kadira/storybook-addon-notes': '@storybook/addon-notes', '@kadira/storybook-addon-options': '@storybook/addon-options', - storyshots: '@storybook/addon-storyshots', '@kadira/storybook-channels': '@storybook/channels', '@kadira/storybook-channel-postmsg': '@storybook/channel-postmessage', '@kadira/storybook-channel-websocket': '@storybook/channel-websocket', - '@kadira/getstorybook': '@storybook/cli', - '@kadira/react-storybook': '@storybook/react', - '@kadira/react-native-storybook': '@storybook/react-native', '@kadira/storybook-ui': '@storybook/ui', + '@kadira/react-native-storybook': '@storybook/react-native', + '@kadira/react-storybook': '@storybook/react', + '@kadira/getstorybook': '@storybook/cli', + '@kadira/storybook': '@storybook/react', + storyshots: '@storybook/addon-storyshots', + getstorybook: '@storybook/cli', }; + const packageNamesKeys = Object.keys(packageNames); /** - * Returns the name of the Storybook packages with the organisation name, + * Checks whether the node value matches a Storybook package + * @param {string} the import declaration node + * @returns {string} whether the node value matches a Storybook package + */ + const getMatch = oldpart => packageNamesKeys.find(newpart => oldpart.match(newpart)); + + /** + * Returns the name of the Storybook packages with the organisation name, * replacing the old `@kadira/` prefix. * @param {string} oldPackageName the name of the old package * @return {string} the new package name * @example - * // returns '@storybook/react' - * getNewPackageName('@kadira/react-storybook') + * // returns '@storybook/storybook' + * getNewPackageName('@kadira/storybook') */ const getNewPackageName = oldPackageName => { - const packageNameWithOrganisation = packageNames[oldPackageName]; + console.log('original ', oldPackageName); + + const match = getMatch(oldPackageName); + console.log('replacement ', match); + + if (match) { + const replacement = packageNames[match]; + console.log('replacement ', replacement); + return oldPackageName.replace(match, replacement); + } + return oldPackageName; + + const packageNameWithoutPrefix = oldPackageName.slice(7); + const packageNameWithOrganisation = `@storybook${packageNameWithoutPrefix}`; return packageNameWithOrganisation; }; From a55a776445f0f7f1f8581452ae8137d9e7747f70 Mon Sep 17 00:00:00 2001 From: Norbert de Langen Date: Sat, 27 May 2017 02:14:06 +0200 Subject: [PATCH 09/17] FIX codemod && ADD migration.md && ADD story shots to addon gallery --- MIGRATION.md | 87 +++++++++++++++++++ docs/pages/addons/addon-gallery/index.md | 13 +++ docs/pages/basics/writing-stories/index.md | 1 + .../pages/configurations/cli-options/index.md | 34 ++++---- .../custom-webpack-config/index.md | 2 +- .../serving-static-files/index.md | 1 - lib/codemod/README.md | 12 +-- .../transforms/update-organisation-name.js | 1 + 8 files changed, 125 insertions(+), 26 deletions(-) create mode 100644 MIGRATION.md diff --git a/MIGRATION.md b/MIGRATION.md new file mode 100644 index 00000000000..f97acf10852 --- /dev/null +++ b/MIGRATION.md @@ -0,0 +1,87 @@ +# Migration + +## Table of contents + +- [from version 2.x.x to 3.x.x](#from-version-2xx-to-3xx) + - [Webpack upgrade](#webpack-upgrade) + - [Packages renaming](#packages-renaming) + - [Deprecated embedded addons](#deprecated-embedded-addons) + +## from version 2.x.x to 3.x.x + +This major release is mainly an internal restructuring. +Upgrading requires work on behalf of users, this was unavoidable. +We're sorry if this inconveniences you, we have tried via this document and provided tools to make the process as easy as possible. + +### Webpack upgrade + +Storybook will now use webpack 2 (and only webpack 2). +If you are using a custom `webpack.config.js` you need to change this to be compatible. +You can find the guide to upgrading your webpack config [on webpack.js.org](https://webpack.js.org/guides/migrating/). + +### Packages renaming + +All our packages have been renamed and published to npm as version 3.0.0. + +> We have adopted the same versioning strategy as have been adopted by babel, jest and apollo. +> It's a strategy best suited for ecosystem type tools, which consist of many seperately installable features / packages. +> We think this describes storybook pretty well. + +The new package names are: + +| old | new | +| -------------------------------------------- | -------------------------------- | +| `getstorybook` | `@storybook/cli` | +| `@kadira/getstorybook` | `@storybook/cli` | +| | | +| `@kadira/storybook` | `@storybook/react` | +| `@kadira/react-storybook` | `@storybook/react` | +| `@kadira/react-native-storybook` | `@storybook/react-native` | +| | | +| `storyshots` | `@storybook/addon-storyshots` | +| `@kadira/storyshots` | `@storybook/addon-storyshots` | +| | | +| `@kadira/storybook-ui` | `@storybook/ui` | +| `@kadira/storybook-addons` | `@storybook/addons` | +| `@kadira/storybook-channels` | `@storybook/channels` | +| `@kadira/storybook-channel-postmsg` | `@storybook/channel-postmessage` | +| `@kadira/storybook-channel-websocket` | `@storybook/channel-websocket` | +| | | +| `@kadira/storybook-addon-actions` | `@storybook/addon-actions` | +| `@kadira/storybook-addon-links` | `@storybook/addon-links` | +| `@kadira/storybook-addon-info` | `@storybook/addon-info` | +| `@kadira/storybook-addon-knobs` | `@storybook/addon-knobs` | +| `@kadira/storybook-addon-comments` | `@storybook/addon-comments` | +| `@kadira/storybook-addon-notes` | `@storybook/addon-notes` | +| `@kadira/storybook-addon-options` | `@storybook/addon-options` | +| `@kadira/storybook-addon-graphql` | `@storybook/addon-graphql` | +| `@kadira/react-storybook-decorator-centered` | `@storybook/addon-centered` | + +If your codebase is small, it's probably doable to just replace them by hand. (in your codebase and in `package.json`). + +But if you have a lot of occurances in your codebase, you can use a [codemod we created](./lib/codemod) for you. + +You have to change your `package.json`, prune old and install new dependencies by hand. + +`npm prune` will remove all dependecies from `node_modules` which are no longer referenced in `package.json`. + +### Deprecated embedded addons + +We used to ship 2 addons with every single installation of storybook: `actions` and `links`. But in practice not everyone is using them, so we decided to deprecate this and in the future they will be completely removed. If you use `@storybook/react/addons` you will get a deprecation warning. + +If you **are** using these addons, migrating is simple: + +- add the addons you use to your `package.json`. +- change your code to this: + change `addons.js` like so: + ```js + import '@storybook/addon-actions/register'; + import '@storybook/addon-links/register'; + ``` + change `x.story.js` like so: + ```js + import React from 'react'; + import { storiesOf } from '@storybook/react'; + import { action } from '@storybook/addon-actions'; + import { link } from '@storybook/addon-links'; + ``` diff --git a/docs/pages/addons/addon-gallery/index.md b/docs/pages/addons/addon-gallery/index.md index 2dc72518c70..6aa6e9057ef 100644 --- a/docs/pages/addons/addon-gallery/index.md +++ b/docs/pages/addons/addon-gallery/index.md @@ -36,45 +36,58 @@ If you are using Storybook as a style guide, then this addon will help you to bu The Storybook webapp UI can be customised with this addon. It can be used to change the header, show/hide various UI elements and to enable full-screen mode by default. +### [Storyshots](https://github.com/storybooks/storybook/tree/master/addons/storyshots) + +Storyshots is a way to automaticly jest-snapshot all your stories. [More info here](../testing/structural-testing#). ## Community Addons You need to install these addons directly from NPM in order to use them. ### [README](https://github.com/tuchk4/storybook-readme) + With this addon, you can add docs in markdown format for each story. It very useful because most projects and components already have README.md files. Now it is easy to add them into your Storybook. ### [Story-router](https://github.com/gvaldambrini/storybook-router) + A [decorator](/addons/introduction) that allows you to integrate react-router components in your stories. ### [Host](https://github.com/philcockfield/storybook-host) + A [decorator](/addons/introduction) with powerful display options for hosting, sizing and framing your components. ### [Specs](https://github.com/mthuret/storybook-addon-specifications) + This is a very special addon where it'll allow you to write test specs directly inside your stories. You can even run these tests inside a CI box. ### [Chapters](https://github.com/yangshun/react-storybook-addon-chapters) + With this addon, you can showcase multiple components (or varying component states) within 1 story. Break your stories down into smaller categories (chapters) and subcategories (sections) for more organizational goodness. ### [Props Combinations](https://github.com/evgenykochetkov/react-storybook-addon-props-combinations) + Given possible values for each prop, renders your component with all combinations of prop values. Useful for finding edge cases or just seeing all component states at once. ### [Backgrounds](https://github.com/NewSpring/react-storybook-addon-backgrounds) + With this addon, you can switch between background colors and background images for your preview components. It is really helpful for styleguides. ### [Material-UI](https://github.com/sm-react/storybook-addon-material-ui) + Wraps your story into MuiThemeProvider. It allows you to add your custom themes, switch between them, make changes in the visual editor and download as JSON file ### [i18n tools](https://github.com/joscha/storybook-addon-i18n-tools) + With this addon, you can test your storybooks with a different text-direction. It is very useful if you are working on components that have to work both in LTR as well as in RTL languages. ### [JSX preview](https://github.com/Kilix/storybook-addon-jsx) + This addon shows a preview of the JSX code for each story. It allows you to configure the display and copy the code with a single click. diff --git a/docs/pages/basics/writing-stories/index.md b/docs/pages/basics/writing-stories/index.md index 47daae18cbc..36eaeb115fc 100644 --- a/docs/pages/basics/writing-stories/index.md +++ b/docs/pages/basics/writing-stories/index.md @@ -123,6 +123,7 @@ storiesOf('core.Button', module) Then you can filter stories to display only the stories you want to see. ### [Chapters](https://github.com/yangshun/react-storybook-addon-chapters) + With this addon, you can showcase multiple components (or varying component states) within 1 story. Break your stories down into smaller categories (chapters) and subcategories (sections) for more organizational goodness. diff --git a/docs/pages/configurations/cli-options/index.md b/docs/pages/configurations/cli-options/index.md index f4fcf8bb652..ab002ee0073 100644 --- a/docs/pages/configurations/cli-options/index.md +++ b/docs/pages/configurations/cli-options/index.md @@ -11,29 +11,25 @@ Here are all those options: ## For start-storybook -``` -Usage: start-storybook [options] + Usage: start-storybook [options] -Options: + Options: - -h, --help output usage information - -V, --version output the version number - -p, --port [number] Port to run Storybook (Required) - -h, --host [string] Host to run Storybook - -s, --static-dir Directory where to load static files from - -c, --config-dir [dir-name] Directory where to load Storybook configurations from -``` + -h, --help output usage information + -V, --version output the version number + -p, --port [number] Port to run Storybook (Required) + -h, --host [string] Host to run Storybook + -s, --static-dir Directory where to load static files from + -c, --config-dir [dir-name] Directory where to load Storybook configurations from ## For build-storybook -``` -Usage: build-storybook [options] + Usage: build-storybook [options] -Options: + Options: - -h, --help output usage information - -V, --version output the version number - -s, --static-dir Directory where to load static files from - -o, --output-dir [dir-name] Directory where to store built files - -c, --config-dir [dir-name] Directory where to load Storybook configurations from -``` + -h, --help output usage information + -V, --version output the version number + -s, --static-dir Directory where to load static files from + -o, --output-dir [dir-name] Directory where to store built files + -c, --config-dir [dir-name] Directory where to load Storybook configurations from diff --git a/docs/pages/configurations/custom-webpack-config/index.md b/docs/pages/configurations/custom-webpack-config/index.md index bfa2b6849c9..50e04edf57f 100644 --- a/docs/pages/configurations/custom-webpack-config/index.md +++ b/docs/pages/configurations/custom-webpack-config/index.md @@ -13,7 +13,7 @@ There are a few ways to do it: ## Extend Mode -You'll get *extend-mode* by returning an object. +You'll get _extend-mode_ by returning an object. Let's say you want to add [SASS](http://sass-lang.com/) support to Storybook. This is how to do it. Simply add the following content to a file called `webpack.config.js` in your Storybook config directory (`.storybook` by default ). diff --git a/docs/pages/configurations/serving-static-files/index.md b/docs/pages/configurations/serving-static-files/index.md index fb20ec9e0c1..d73462fdb0a 100644 --- a/docs/pages/configurations/serving-static-files/index.md +++ b/docs/pages/configurations/serving-static-files/index.md @@ -78,7 +78,6 @@ storiesOf('', module) )); ``` - ## Absolute versus relative paths Sometimes, you may want to deploy your storybook into a subpath, like . diff --git a/lib/codemod/README.md b/lib/codemod/README.md index 693b2b6b57e..f1f84352c6e 100644 --- a/lib/codemod/README.md +++ b/lib/codemod/README.md @@ -17,8 +17,8 @@ npm install jscodeshift npm install @storybook/codemod ``` -- `@storybook/codemod` is out collection of codemod scripts. -- `jscodeshift` is a tool we use to apply our codemods. +- `@storybook/codemod` is out collection of codemod scripts. +- `jscodeshift` is a tool we use to apply our codemods. After running the migration commands, you can remove them from your `package.json`, if you added them. @@ -27,14 +27,14 @@ After running the migration commands, you can remove them from your `package.jso From the directory where you installed both `jscodeshift` and `@storybook/codemod` run: Example: + ```sh ./node_modules/.bin/jscodeshift -t ../react-storybook/lib/codemod/dist/update-organisation-name.js . --ignore-pattern "node_modules|dist" ``` Explanation: -``` - -t --ignore-pattern "" -``` + + -t --ignore-pattern "" ## Transforms @@ -49,12 +49,14 @@ Updates package names in imports to migrate to the new package names of storyboo There's a mapping of paths we replace but this example explains the gist of it: Example: + ```js import { storiesOf } from '@kadira/storybook'; import { storiesOf } from '@kadira/storybook-addon-links'; ``` Becomes + ```js import { storiesOf } from '@storybook/react'; import { storiesOf } from '@storybook/addon-links'; diff --git a/lib/codemod/src/transforms/update-organisation-name.js b/lib/codemod/src/transforms/update-organisation-name.js index db8ad7acd8d..cfaf5afecbd 100644 --- a/lib/codemod/src/transforms/update-organisation-name.js +++ b/lib/codemod/src/transforms/update-organisation-name.js @@ -4,6 +4,7 @@ export default function transformer(file, api) { const packageNames = { '@kadira/react-storybook-decorator-centered': '@storybook/addon-centered', '@kadira/storybook-addons': '@storybook/addons', + '@kadira/storybook-addon-actions': '@storybook/addon-actions', '@kadira/storybook-addon-comments': '@storybook/addon-comments', '@kadira/storybook-addon-graphql': '@storybook/addon-graphql', '@kadira/storybook-addon-info': '@storybook/addon-info', From 01641fe6730924f2737b8509ab7c00515ac81247 Mon Sep 17 00:00:00 2001 From: Norbert de Langen Date: Sat, 27 May 2017 11:17:49 +0200 Subject: [PATCH 10/17] FIX documentation --- lib/codemod/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/codemod/README.md b/lib/codemod/README.md index f1f84352c6e..0247661cb5c 100644 --- a/lib/codemod/README.md +++ b/lib/codemod/README.md @@ -29,7 +29,7 @@ From the directory where you installed both `jscodeshift` and `@storybook/codemo Example: ```sh -./node_modules/.bin/jscodeshift -t ../react-storybook/lib/codemod/dist/update-organisation-name.js . --ignore-pattern "node_modules|dist" +./node_modules/.bin/jscodeshift -t ./node_modules/@storybook/codemod/dist/update-organisation-name.js . --ignore-pattern "node_modules|dist" ``` Explanation: @@ -43,7 +43,7 @@ Explanation: Updates package names in imports to migrate to the new package names of storybook. ```sh -./node_modules/.bin/jscodeshift -t ../react-storybook/lib/codemod/dist/update-organisation-name.js . --ignore-pattern "node_modules|dist" +./node_modules/.bin/jscodeshift -t ./node_modules/@storybook/codemod/dist/update-organisation-name.js . --ignore-pattern "node_modules|dist" ``` There's a mapping of paths we replace but this example explains the gist of it: From c6bddacbe2f1f6a1620139f15c75e4f540640ba5 Mon Sep 17 00:00:00 2001 From: Norbert de Langen Date: Sat, 27 May 2017 11:27:30 +0200 Subject: [PATCH 11/17] CLEANUP --- lib/codemod/src/transforms/update-organisation-name.js | 9 --------- 1 file changed, 9 deletions(-) diff --git a/lib/codemod/src/transforms/update-organisation-name.js b/lib/codemod/src/transforms/update-organisation-name.js index cfaf5afecbd..0735bd9b714 100644 --- a/lib/codemod/src/transforms/update-organisation-name.js +++ b/lib/codemod/src/transforms/update-organisation-name.js @@ -42,22 +42,13 @@ export default function transformer(file, api) { * getNewPackageName('@kadira/storybook') */ const getNewPackageName = oldPackageName => { - console.log('original ', oldPackageName); - const match = getMatch(oldPackageName); - console.log('replacement ', match); if (match) { const replacement = packageNames[match]; - console.log('replacement ', replacement); return oldPackageName.replace(match, replacement); } return oldPackageName; - - const packageNameWithoutPrefix = oldPackageName.slice(7); - const packageNameWithOrganisation = `@storybook${packageNameWithoutPrefix}`; - - return packageNameWithOrganisation; }; /** From 4a2bc9333afc04161049159e4399174b8f43f0f1 Mon Sep 17 00:00:00 2001 From: Norbert de Langen Date: Sat, 27 May 2017 13:46:50 +0200 Subject: [PATCH 12/17] v3.0.0-rc.2 --- addons/actions/package.json | 4 ++-- addons/centered/package.json | 2 +- addons/comments/package.json | 4 ++-- addons/graphql/package.json | 9 +++------ addons/info/package.json | 4 ++-- addons/knobs/package.json | 2 +- addons/links/package.json | 4 ++-- addons/notes/package.json | 2 +- addons/options/package.json | 4 ++-- addons/storyshots/package.json | 2 +- app/react-native/package.json | 12 ++++++------ app/react/package.json | 12 ++++++------ lerna.json | 2 +- lib/addons/package.json | 2 +- lib/channel-postmessage/package.json | 4 ++-- lib/channel-websocket/package.json | 4 ++-- lib/channels/package.json | 2 +- lib/cli/package.json | 2 +- lib/codemod/package.json | 3 +-- lib/ui/package.json | 2 +- 20 files changed, 39 insertions(+), 43 deletions(-) diff --git a/addons/actions/package.json b/addons/actions/package.json index 9ed5764d81e..8d6d79d4f9f 100644 --- a/addons/actions/package.json +++ b/addons/actions/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/addon-actions", - "version": "3.0.0-rc.0", + "version": "3.0.0-rc.2", "description": "Action Logger addon for storybook", "main": "dist/index.js", "scripts": { @@ -27,7 +27,7 @@ "shelljs": "^0.7.7" }, "dependencies": { - "@storybook/addons": "^3.0.0-rc.0", + "@storybook/addons": "^3.0.0-rc.2", "deep-equal": "^1.0.1", "json-stringify-safe": "^5.0.1", "prop-types": "^15.5.8", diff --git a/addons/centered/package.json b/addons/centered/package.json index 014432a27df..17c340f84e2 100644 --- a/addons/centered/package.json +++ b/addons/centered/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/addon-centered", - "version": "3.0.0-rc.0", + "version": "3.0.0-rc.2", "description": "Storybook decorator to center components", "main": "dist/index.js", "scripts": { diff --git a/addons/comments/package.json b/addons/comments/package.json index 78290466996..0cbca2d3bf4 100644 --- a/addons/comments/package.json +++ b/addons/comments/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/addon-comments", - "version": "3.0.0-rc.0", + "version": "3.0.0-rc.2", "description": "Comments addon for Storybook", "keywords": [ "storybook" @@ -23,7 +23,7 @@ "storybook-remote": "start-storybook -p 3006" }, "dependencies": { - "@storybook/addons": "^3.0.0-rc.0", + "@storybook/addons": "^3.0.0-rc.2", "babel-runtime": "^6.23.0", "deep-equal": "^1.0.1", "events": "^1.1.1", diff --git a/addons/graphql/package.json b/addons/graphql/package.json index 2fc4835eaf1..f9e3d61a0a8 100644 --- a/addons/graphql/package.json +++ b/addons/graphql/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/addon-graphql", - "version": "3.0.0-rc.0", + "version": "3.0.0-rc.2", "description": "Storybook addon to display the GraphiQL IDE", "main": "dist/index.js", "scripts": { @@ -26,13 +26,10 @@ "shelljs": "^0.7.7" }, "dependencies": { - "@storybook/addons": "*" + "graphiql": "^0.7.8", + "graphql": "^0.7.0" }, "peerDependencies": { "react": "*" - }, - "dependencies": { - "graphiql": "^0.7.8", - "graphql": "^0.7.0" } } diff --git a/addons/info/package.json b/addons/info/package.json index 0e621a38356..a1b4dc01be9 100644 --- a/addons/info/package.json +++ b/addons/info/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/addon-info", - "version": "3.0.0-rc.0", + "version": "3.0.0-rc.2", "description": "A Storybook addon to show additional information for your stories.", "repository": { "type": "git", @@ -23,7 +23,7 @@ "react": "*" }, "dependencies": { - "@storybook/addons": "^3.0.0-rc.0", + "@storybook/addons": "^3.0.0-rc.2", "babel-runtime": "^6.23.0", "markdown-to-react-components": "^0.2.1", "prop-types": "^15.5.8", diff --git a/addons/knobs/package.json b/addons/knobs/package.json index 68a64b27530..6b745ec5d03 100644 --- a/addons/knobs/package.json +++ b/addons/knobs/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/addon-knobs", - "version": "3.0.0-rc.0", + "version": "3.0.0-rc.2", "description": "Storybook Addon Prop Editor Component", "repository": { "type": "git", diff --git a/addons/links/package.json b/addons/links/package.json index d9a803e4728..4094382645f 100644 --- a/addons/links/package.json +++ b/addons/links/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/addon-links", - "version": "3.0.0-rc.0", + "version": "3.0.0-rc.2", "description": "Story Links addon for storybook", "main": "dist/index.js", "scripts": { @@ -26,7 +26,7 @@ "shelljs": "^0.7.7" }, "dependencies": { - "@storybook/addons": "^3.0.0-rc.0" + "@storybook/addons": "^3.0.0-rc.2" }, "peerDependencies": { "react": "*", diff --git a/addons/notes/package.json b/addons/notes/package.json index 2d9a4da37dd..53d5660da56 100644 --- a/addons/notes/package.json +++ b/addons/notes/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/addon-notes", - "version": "3.0.0-rc.0", + "version": "3.0.0-rc.2", "description": "Write notes for your Storybook stories.", "repository": { "type": "git", diff --git a/addons/options/package.json b/addons/options/package.json index 46aa59c19aa..c95483ef428 100644 --- a/addons/options/package.json +++ b/addons/options/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/addon-options", - "version": "3.0.0-rc.0", + "version": "3.0.0-rc.2", "description": "Options addon for storybook", "main": "preview.js", "scripts": { @@ -26,7 +26,7 @@ "shelljs": "^0.7.7" }, "dependencies": { - "@storybook/addons": "^3.0.0-rc.0" + "@storybook/addons": "^3.0.0-rc.2" }, "peerDependencies": { "react": "*", diff --git a/addons/storyshots/package.json b/addons/storyshots/package.json index 03c1e0863d7..08433cede8e 100644 --- a/addons/storyshots/package.json +++ b/addons/storyshots/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/addon-storyshots", - "version": "3.0.0-rc.0", + "version": "3.0.0-rc.2", "description": "StoryShots is a Jest Snapshot Testing Addon for Storybook.", "repository": { "type": "git", diff --git a/app/react-native/package.json b/app/react-native/package.json index b11768580ba..0450fe83e13 100644 --- a/app/react-native/package.json +++ b/app/react-native/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/react-native", - "version": "3.0.0-rc.0", + "version": "3.0.0-rc.2", "description": "A better way to develop React Native Components for your app", "main": "dist/index.js", "bin": { @@ -34,11 +34,11 @@ "react-native": "^0.43.3" }, "dependencies": { - "@storybook/addon-actions": "^3.0.0-rc.0", - "@storybook/addon-links": "^3.0.0-rc.0", - "@storybook/addons": "^3.0.0-rc.0", - "@storybook/channel-websocket": "^3.0.0-rc.0", - "@storybook/ui": "^3.0.0-rc.0", + "@storybook/addon-actions": "^3.0.0-rc.2", + "@storybook/addon-links": "^3.0.0-rc.2", + "@storybook/addons": "^3.0.0-rc.2", + "@storybook/channel-websocket": "^3.0.0-rc.2", + "@storybook/ui": "^3.0.0-rc.2", "autoprefixer": "^7.0.1", "babel-core": "^6.24.1", "babel-loader": "^7.0.0", diff --git a/app/react/package.json b/app/react/package.json index b8b859b7a8d..7de6a4db726 100644 --- a/app/react/package.json +++ b/app/react/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/react", - "version": "3.0.0-rc.0", + "version": "3.0.0-rc.2", "description": "Storybook for React: Develop React Component in isolation with Hot Reloading.", "license": "MIT", "main": "dist/client/index.js", @@ -23,11 +23,11 @@ "prepublish": "node ../../scripts/prepublish.js" }, "dependencies": { - "@storybook/addon-actions": "^3.0.0-rc.0", - "@storybook/addon-links": "^3.0.0-rc.0", - "@storybook/addons": "^3.0.0-rc.0", - "@storybook/channel-postmessage": "^3.0.0-rc.0", - "@storybook/ui": "^3.0.0-rc.0", + "@storybook/addon-actions": "^3.0.0-rc.2", + "@storybook/addon-links": "^3.0.0-rc.2", + "@storybook/addons": "^3.0.0-rc.2", + "@storybook/channel-postmessage": "^3.0.0-rc.2", + "@storybook/ui": "^3.0.0-rc.2", "airbnb-js-shims": "^1.1.1", "autoprefixer": "^7.1.1", "babel-core": "^6.24.1", diff --git a/lerna.json b/lerna.json index d744dfbe662..7cd732ffb65 100644 --- a/lerna.json +++ b/lerna.json @@ -1,6 +1,6 @@ { "lerna": "2.0.0-rc.5", - "version": "3.0.0-rc.1", + "version": "3.0.0-rc.2", "commands": { "bootstrap": { "ignore": [ diff --git a/lib/addons/package.json b/lib/addons/package.json index 408d107cf9a..d55c263375c 100644 --- a/lib/addons/package.json +++ b/lib/addons/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/addons", - "version": "3.0.0-rc.0", + "version": "3.0.0-rc.2", "description": "Storybook addons store", "main": "dist/index.js", "scripts": { diff --git a/lib/channel-postmessage/package.json b/lib/channel-postmessage/package.json index 0bd1650836e..6bcddbbc512 100644 --- a/lib/channel-postmessage/package.json +++ b/lib/channel-postmessage/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/channel-postmessage", - "version": "3.0.0-rc.0", + "version": "3.0.0-rc.2", "description": "", "main": "dist/index.js", "scripts": { @@ -11,7 +11,7 @@ "shelljs": "^0.7.7" }, "dependencies": { - "@storybook/channels": "^3.0.0-rc.0", + "@storybook/channels": "^3.0.0-rc.2", "json-stringify-safe": "^5.0.1" } } diff --git a/lib/channel-websocket/package.json b/lib/channel-websocket/package.json index b6f40c05521..9fbcfc9894f 100644 --- a/lib/channel-websocket/package.json +++ b/lib/channel-websocket/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/channel-websocket", - "version": "3.0.0-rc.0", + "version": "3.0.0-rc.2", "description": "", "main": "dist/index.js", "scripts": { @@ -11,6 +11,6 @@ "shelljs": "^0.7.7" }, "dependencies": { - "@storybook/channels": "^3.0.0-rc.0" + "@storybook/channels": "^3.0.0-rc.2" } } diff --git a/lib/channels/package.json b/lib/channels/package.json index a5af9e56beb..2c50b83d477 100644 --- a/lib/channels/package.json +++ b/lib/channels/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/channels", - "version": "3.0.0-rc.0", + "version": "3.0.0-rc.2", "description": "", "main": "dist/index.js", "scripts": { diff --git a/lib/cli/package.json b/lib/cli/package.json index ec5529f703c..11673ca909f 100644 --- a/lib/cli/package.json +++ b/lib/cli/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/cli", - "version": "3.0.0-rc.1", + "version": "3.0.0-rc.2", "description": "Storybook's CLI - easiest method of adding storybook to your projects", "bin": { "getstorybook": "./bin/generate.js" diff --git a/lib/codemod/package.json b/lib/codemod/package.json index ffea8db6dbc..5fea2dfa71f 100644 --- a/lib/codemod/package.json +++ b/lib/codemod/package.json @@ -1,7 +1,7 @@ { "name": "@storybook/codemod", "description": "A collection of codemod scripts written with JSCodeshift", - "version": "3.0.0-rc.0", + "version": "3.0.0-rc.2", "license": "MIT", "repository": { "type": "git", @@ -14,7 +14,6 @@ "scripts": { "prepublish": "node ../../scripts/prepublish.js && mv dist/transforms/* dist" }, - "license": "MIT", "devDependencies": { "shelljs": "^0.7.7" } diff --git a/lib/ui/package.json b/lib/ui/package.json index 5d99989a474..c6f2e9c6903 100644 --- a/lib/ui/package.json +++ b/lib/ui/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/ui", - "version": "3.0.0-rc.0", + "version": "3.0.0-rc.2", "description": "Core Storybook UI", "repository": { "type": "git", From 4329d585511b985d4c832d26ce9bc76bdd45f6e9 Mon Sep 17 00:00:00 2001 From: Michael Shilman Date: Sat, 27 May 2017 22:18:11 +1000 Subject: [PATCH 13/17] Update CONTRIBUTING notes, CHANGELOG format, skip "cleanup" labels --- CHANGELOG.md | 217 ++++++++++++++++++++++++------------------------ CONTRIBUTING.md | 54 +++++++++--- package.json | 11 +-- 3 files changed, 156 insertions(+), 126 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index efa162a8d7e..56772a89528 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,131 +1,128 @@ -## 3.0.0 (May 27, 2017) +### 3.0.0 (2017-05-27) Storybook 3.0 is our first fully community-driven release! Notable changes: -- Moved from `@kadira` to `@storybooks` org across [github](https://github.com/storybooks/storybook/), [npm](FIXME), [docs](https://storybooks.js.org/) +- Moved from `@kadira` to `@storybooks` org across [github](https://github.com/storybooks/storybook/), [npm](https://www.npmjs.com/package/@storybook/react), [docs](https://storybook.js.org/) - Upgraded to Webpack2! https://github.com/storybooks/storybook/pull/637 - Switched to monorepo and overhauled package structure. https://github.com/storybooks/storybook/pull/749 https://github.com/storybooks/storybook/pull/1031 - Added configuration options to storybooks snapshot testing. https://github.com/storybooks/storybook/pull/1090 - Added `create-react-native-app` support. https://github.com/storybooks/storybook/pull/1117 - Added HTTPS support. https://github.com/storybooks/storybook/pull/735 +This is a major release with breaking changes. See our [migration guide](https://github.com/storybooks/storybook/blob/master/MIGRATION.md) for details. + +#### Features + +- Added CRNA support (#1117) +- [Addon-Knobs] Fixing performance issues. (#1039) +- Allow HTTPS (#735) + +#### Bug Fixes + +- FIX for test-cra was breaking the build (#972) + +#### Documentation + +- adds ReactSVGPanZoom to examples list (#1139) +- docs(custom-webpack-config): rules not loaders (#1137) + +#### Maintenance + +- refactor: change NPM organisation from kadira to storybook (#996) +- CHANGE folder structure && CHANGE package-names (#1031) + +#### Dependency Upgrades +
-Features +10 PRs -* Added CRNA support (#1117) -* [Addon-Knobs] Fixing performance issues. (#1039) -* Allow HTTPS (#735) +- Update lerna to the latest version 🚀 (https://github.com/storybooks/storybook/pulls/1101) +- update dependencies in cra-storybook (https://github.com/storybooks/storybook/pulls/1080) +- Switch back to non-fork of react-inspector (https://github.com/storybooks/storybook/pulls/1026) +- Dependency updates (https://github.com/storybooks/storybook/pulls/1008) +- Update jest to the latest version 🚀 (https://github.com/storybooks/storybook/pulls/998) +- CHANGE to use react-split-view 0.1.63 over the fork (https://github.com/storybooks/storybook/pulls/956) +- FIX webpack overriding && CLEANUP && ADD example (https://github.com/storybooks/storybook/pulls/965) +- Update lerna to the latest version 🚀 (https://github.com/storybooks/storybook/pulls/915) +- Use jest for unittesting - standardize unit testing epic (https://github.com/storybooks/storybook/pulls/904) +- Update dependencies to enable Greenkeeper 🌴 (https://github.com/storybooks/storybook/pulls/768) +
+ +#### Other +
-Bug Fixes +65 PRs -* FIX for test-cra was breaking the build (#972) -
-
- -Maintenance - +- Add travis deploy key (https://github.com/storybooks/storybook/pulls/1135) +- ADD a global to storyshots to make it work for series with info addon (https://github.com/storybooks/storybook/pulls/1129) +- Removed unsafe Storyshots import (https://github.com/storybooks/storybook/pulls/1124) +- Update all package.json with monorepo metadata (https://github.com/storybooks/storybook/pulls/1111) +- Add react-dom to the devDependency list for React Native projects (https://github.com/storybooks/storybook/pulls/1102) +- Added `snapshotWithOptions` to allow configuring rendering options in Storyshots (https://github.com/storybooks/storybook/pulls/1090) +- Upgrade React Native webpack config to webpack 2 (https://github.com/storybooks/storybook/pulls/1097) +- Fix dead link to demo repository (https://github.com/storybooks/storybook/pulls/1091) +- FIX postcss options missing && UPDATE dependencies (https://github.com/storybooks/storybook/pulls/1087) +- fix(knobs): increase font size label (https://github.com/storybooks/storybook/pulls/1086) +- CHANGE to prop-types package for notes & test-cra (https://github.com/storybooks/storybook/pulls/1082) +- Configure snapshot test (https://github.com/storybooks/storybook/pulls/1035) +- Test storyshots (https://github.com/storybooks/storybook/pulls/971) +- IMPROVE cli (https://github.com/storybooks/storybook/pulls/1079) +- Update package.json with repository info (https://github.com/storybooks/storybook/pulls/1078) +- Update storyshots README.md example (https://github.com/storybooks/storybook/pulls/1076) +- Added component description from __docgenInfo, Added the ability to get the PropType from __docgenInfo for prop table, Fixed an issue with PropVal rendering an object (https://github.com/storybooks/storybook/pulls/1030) +- Upgraded webpack PostCSS plugin definition (https://github.com/storybooks/storybook/pulls/1062) +- Update link to Storyshots addon (https://github.com/storybooks/storybook/pulls/1074) +- chore(jest): update to v20's default configuration file (https://github.com/storybooks/storybook/pulls/1063) +- Added error message for missing or invalid storyName (https://github.com/storybooks/storybook/pulls/747) +- Activating Open Collective (https://github.com/storybooks/storybook/pulls/1065) +- 1052-resolve-output-path (https://github.com/storybooks/storybook/pulls/1058) +- MOVE & RENAME and storyshots && CHANGE “React Storybook” > “Storybook” (https://github.com/storybooks/storybook/pulls/1044) +- Deprecate builtin addons (https://github.com/storybooks/storybook/pulls/1038) +- Updated issue triage guidelines (https://github.com/storybooks/storybook/pulls/1024) +- Deprecate built-in addons (https://github.com/storybooks/storybook/pulls/1025) +- Add addonlinks repo (https://github.com/storybooks/storybook/pulls/1021) +- Add propTablesExclude option (https://github.com/storybooks/storybook/pulls/924) +- Add typescript definition to addon-notes (https://github.com/storybooks/storybook/pulls/989) +- Fixes for types for knobs `number` (https://github.com/storybooks/storybook/pulls/1001) +- First pass at update the contribution instructions (https://github.com/storybooks/storybook/pulls/982) +- Remove text transform uppercase for knob labels (https://github.com/storybooks/storybook/pulls/991) +- Update links in PRs section of CONTRIBUTING.md (https://github.com/storybooks/storybook/pulls/992) +- Updated dead getstorybook.io links to storybooks.js.org (https://github.com/storybooks/storybook/pulls/988) +- Do not ignore story.js in prepublish (https://github.com/storybooks/storybook/pulls/973) +- addon-info: make the info overlay be fixed (https://github.com/storybooks/storybook/pulls/914) +- Update lerna to the latest version 🚀 (https://github.com/storybooks/storybook/pulls/969) +- Handle null elements in getData (https://github.com/storybooks/storybook/pulls/926) +- add description field from __docgenInfo for prop table for info plugin (https://github.com/storybooks/storybook/pulls/929) +- #959 add a max-height and center element with alignItems: center (https://github.com/storybooks/storybook/pulls/961) +- Switch to the only prepublish script (https://github.com/storybooks/storybook/pulls/903) +- PR review policy (https://github.com/storybooks/storybook/pulls/923) +- Add typescript definitions for getStorybook() (https://github.com/storybooks/storybook/pulls/753) +- Restore deep link for addon docs (https://github.com/storybooks/storybook/pulls/919) +- Fix default storybook webpack config (https://github.com/storybooks/storybook/pulls/922) +- Render the first story for a kind if no story selected. (https://github.com/storybooks/storybook/pulls/918) +- Update docs for monorepo (https://github.com/storybooks/storybook/pulls/913) +- Monorepo readme and contributing (https://github.com/storybooks/storybook/pulls/907) +- Add story kind regex (https://github.com/storybooks/storybook/pulls/906) +- Add examples (https://github.com/storybooks/storybook/pulls/897) +- Add missing repos (https://github.com/storybooks/storybook/pulls/882) +- Switch to monorepo (https://github.com/storybooks/storybook/pulls/749) +- extend devMiddlewareOptions with config.devServer (https://github.com/storybooks/storybook/pulls/723) +- Added meta IE=edge (https://github.com/storybooks/storybook/pulls/715) +- Replace String.includes with String.indexOf: cross-browsing support (https://github.com/storybooks/storybook/pulls/712) +- Issue Triage instructions (https://github.com/storybooks/storybook/pulls/748) +- Simple pull request template (https://github.com/storybooks/storybook/pulls/741) +- Make return type of StoryDecorator nullable (https://github.com/storybooks/storybook/pulls/680) +- Warn if story with a given name already exists (https://github.com/storybooks/storybook/pulls/670) +- Fix spelling mistake - "element form the story" to "element from the story" (https://github.com/storybooks/storybook/pulls/702) +- Remove broken react-button example (https://github.com/storybooks/storybook/pulls/699) +- Fixed spelling error. (https://github.com/storybooks/storybook/pulls/720) +- Cleaner error handling for storiesOf (https://github.com/storybooks/storybook/pulls/672) +- Update links to point to new organization (https://github.com/storybooks/storybook/pulls/721) -* FIX linting (#1132) -* Fixed a typo in webpack.config.js (#1089) -* refactor: change NPM organisation from kadira to storybook (#996) -* CHANGE folder structure && CHANGE package-names (#1031) -
-
- -Dependency Upgrades - - -* Update lerna to the latest version 🚀 (#1101) -* update dependencies in cra-storybook (#1080) -* Switch back to non-fork of react-inspector (#1026) -* Dependency updates (#1008) -* Update jest to the latest version 🚀 (#998) -* CHANGE to use react-split-view 0.1.63 over the fork (#956) -* FIX webpack overriding && CLEANUP && ADD example (#965) -* Update lerna to the latest version 🚀 (#915) -* Use jest for unittesting - standardize unit testing epic (#904) -* Update dependencies to enable Greenkeeper 🌴 (#768) -
-
- -Other - - -* Add travis deploy key (#1135) -* ADD a global to storyshots to make it work for series with info addon (#1129) -* Removed unsafe Storyshots import (#1124) -* Update all package.json with monorepo metadata (#1111) -* Add react-dom to the devDependency list for React Native projects (#1102) -* Added `snapshotWithOptions` to allow configuring rendering options in Storyshots (#1090) -* Upgrade React Native webpack config to webpack 2 (#1097) -* Fix dead link to demo repository (#1091) -* FIX postcss options missing && UPDATE dependencies (#1087) -* fix(knobs): increase font size label (#1086) -* CHANGE to prop-types package for notes & test-cra (#1082) -* Configure snapshot test (#1035) -* Test storyshots (#971) -* IMPROVE cli (#1079) -* Update package.json with repository info (#1078) -* Update storyshots README.md example (#1076) -* Added component description from __docgenInfo, Added the ability to get the PropType from __docgenInfo for prop table, Fixed an issue with PropVal rendering an object (#1030) -* Upgraded webpack PostCSS plugin definition (#1062) -* Update link to Storyshots addon (#1074) -* chore(jest): update to v20's default configuration file (#1063) -* Added error message for missing or invalid storyName (#747) -* Removed `>` typo in Info prop table header (#1064) -* Activating Open Collective (#1065) -* 1052-resolve-output-path (#1058) -* MOVE & RENAME and storyshots && CHANGE “React Storybook” > “Storybook” (#1044) -* Update README (#1043) -* Deprecate builtin addons (#1038) -* Updated issue triage guidelines (#1024) -* Deprecate built-in addons (#1025) -* Add addonlinks repo (#1021) -* Add propTablesExclude option (#924) -* Add typescript definition to addon-notes (#989) -* Fixes for types for knobs `number` (#1001) -* Fix linting in addon-info (#980) -* First pass at update the contribution instructions (#982) -* Remove text transform uppercase for knob labels (#991) -* Update links in PRs section of CONTRIBUTING.md (#992) -* Updated dead getstorybook.io links to storybooks.js.org (#988) -* Do not ignore story.js in prepublish (#973) -* Fix typo in README (#977) -* addon-info: make the info overlay be fixed (#914) -* Fixing link (#974) -* Update lerna to the latest version 🚀 (#969) -* Handle null elements in getData (#926) -* add description field from __docgenInfo for prop table for info plugin (#929) -* #959 add a max-height and center element with alignItems: center (#961) -* Switch to the only prepublish script (#903) -* PR review policy (#923) -* Add typescript definitions for getStorybook() (#753) -* Restore deep link for addon docs (#919) -* Fix default storybook webpack config (#922) -* Render the first story for a kind if no story selected. (#918) -* Update docs for monorepo (#913) -* Monorepo readme and contributing (#907) -* Add story kind regex (#906) -* Add examples (#897) -* Add missing repos (#882) -* Switch to monorepo (#749) -* extend devMiddlewareOptions with config.devServer (#723) -* Added meta IE=edge (#715) -* Replace String.includes with String.indexOf: cross-browsing support (#712) -* Issue Triage instructions (#748) -* Simple pull request template (#741) -* Make return type of StoryDecorator nullable (#680) -* Warn if story with a given name already exists (#670) -* Fix spelling mistake - "element form the story" to "element from the story" (#702) -* Remove broken react-button example (#699) -* Fixed spelling error. (#720) -* Typo fix (#671) -* Cleaner error handling for storiesOf (#672) -* Update links to point to new organization (#721)
### v2.35.3 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index a59328926ca..0b7c4342760 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -176,16 +176,48 @@ Each release is described by: - A list of merged pull requests - Optionally, a short hand-written description -Thus current the release sequence is: +Thus, the current release sequence is as follows: -1. Go to `master` and make sure you current with origin -2. For full releases (i.e. not alpha/beta/rc), run `npm changelog` to update `CHANGELOG.md`. - - Edit PR titles/labels on github until you're happy with the output in `CHANGELOG.md`. - - Optionally, edit a handwritten description in `CHANGELOG.md`. -3. `git clean -fdx && yarn` to clean out any extra files in your local directory (WARNING: destructive if you have extra files lying around!) -4. `npm run bootstrap` to build all the packages -5. `npm run publish -- --concurrency 1` to publish an alpha release - - For a prerelease (alpha/beta/rc), add e.g. `--npm-tag=alpha` to the publish args -6. Push the tag and `CHANGELOG.md` changes to github `git push --tags` +**NOTE: This is a work in progress. Don't try this unless you know what you're doing. We hope to automate this in CI, so this process is designed with that in mind.** -NOTE: we hope to automate this in CI at some point, so this process is designed with that in mind. +First, build the release: + +```sh +# make sure you current with origin/master. +git checkout master +git status + +# clean out extra files +# WARNING: destructive if you have extra files lying around! +git clean -fdx && yarn + +# build all the packages +npm run bootstrap +``` + +From here there are different procedures for prerelease (e.g. alpha/beta/rc) and proper release. + +#### For prerelease (no CHANGELOG): + +```sh +# publish and tag the release +npm run publish -- --concurrency 1 --npm-tag=alpha + +# push the tags +git push --tags +``` + +#### For full release (with CHANGELOG): + +```sh +# publish but don't commit to git +npm run publish -- --concurrency 1 --skip-git + +# Update `CHANGELOG.md` +# - Edit PR titles/labels on github until output is good +# - Optionally, edit a handwritten description in `CHANGELOG.md` +npm changelog + +# tag the release and push `CHANGELOG.md` and tags +# FIXME!! +``` diff --git a/package.json b/package.json index 53a486a907d..3c74b77c9bb 100644 --- a/package.json +++ b/package.json @@ -65,13 +65,14 @@ "url": "https://opencollective.com/storybook" }, "pr-log": { + "skipLabels": ["cleanup"], "validLabels": { - "bug": "Bug Fixes", - "greenkeeper": "Dependency Upgrades", - "documentation": "Documentation", - "feature": "Features", - "maintenance": "Maintenance", "breaking": "Breaking Changes", + "feature": "Features", + "bug": "Bug Fixes", + "documentation": "Documentation", + "maintenance": "Maintenance", + "greenkeeper": "Dependency Upgrades", "misc": "Other" } } From a9c407a746003a768a1110eaba82702c7d10e1af Mon Sep 17 00:00:00 2001 From: Michael Shilman Date: Sun, 28 May 2017 00:51:18 +1000 Subject: [PATCH 14/17] Updated changelog format to be compatible with github-release-from-changelog --- CHANGELOG.md | 274 ++++++++++++++++++++++++------------------------ CONTRIBUTING.md | 5 +- package.json | 10 +- 3 files changed, 146 insertions(+), 143 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 56772a89528..46185aa7eb3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,6 @@ -### 3.0.0 (2017-05-27) +# 3.0.0 + +2017-05-27 Storybook 3.0 is our first fully community-driven release! Notable changes: - Moved from `@kadira` to `@storybooks` org across [github](https://github.com/storybooks/storybook/), [npm](https://www.npmjs.com/package/@storybook/react), [docs](https://storybook.js.org/) @@ -125,11 +127,11 @@ This is a major release with breaking changes. See our [migration guide](https:/ -### v2.35.3 +# v2.35.3 Allow customConfig to override devtool. [PR668](https://github.com/storybooks/react-storybook/pull/668) -### v2.35.2 +# v2.35.2 03-January-2017 @@ -137,11 +139,11 @@ Fixes issue [#601](https://github.com/storybooks/react-storybook/issues/601) whe This release comes with the updated `babel-plugin-react-docgen`. -### v2.35.1 +# v2.35.1 - Revert [PR653](https://github.com/storybooks/react-storybook/pull/653) where it's causing HMR to not working properly. -### v2.35.0 +# v2.35.0 18-December-2016 @@ -149,90 +151,90 @@ This release comes with the updated `babel-plugin-react-docgen`. - Update css-loader dependency [PR648](https://github.com/storybooks/react-storybook/pull/648) - Check if stories are loaded from Jest [PR644](https://github.com/storybooks/react-storybook/pull/644) -### v2.34.0 +# v2.34.0 05-December-2016 Open the express router for developers (middleware.js file). [PR435](https://github.com/storybooks/react-storybook/pull/435) -### v2.33.1 +# v2.33.1 01-December-2016 Update Typescript definition file for global addDecorator. [PR634](https://github.com/storybooks/react-storybook/pull/634) -### v2.33.0 +# v2.33.0 28-November-2016 Completely avoid re-rendering the preview iframe. [PR631](https://github.com/storybooks/react-storybook/pull/631) -### v2.32.2 +# v2.32.2 28-November-2016 Update postmsg channel module version [PR627](https://github.com/storybooks/react-storybook/pull/627) -### v2.32.1 +# v2.32.1 22-November-2016 Add support for react_perf comes with React 15.4.0. [PR623](https://github.com/storybooks/react-storybook/pull/623) -### v2.32.0 +# v2.32.0 Incorrect publish (error when running `npm publish`) -### v2.31.0 +# v2.31.0 20-November-2016 Add the react-storybook version to the build output. [PR621](https://github.com/storybooks/react-storybook/pull/621) -### v2.30.1 +# v2.30.1 17-November-2016 Update the postmsg channel module to fix issue [#555](https://github.com/storybooks/react-storybook/issues/555) with [PR611](https://github.com/storybooks/react-storybook/pull/611) -### v2.30.0 +# v2.30.0 16-November-2016 Update to the new Storybook UI which doesn't use Redux. -### v2.29.7 +# v2.29.7 11-November-2016 Update @kadira/storybook-ui to the latest. -### v2.29.6 +# v2.29.6 10-November-2016 Fix a typo in the story syntax error messages. [PR610](https://github.com/storybooks/react-storybook/pull/610) -### v2.29.5 +# v2.29.5 09-November-2016 Check if regex and regex.test is available before calling it. [PR608](https://github.com/storybooks/react-storybook/pull/608) -### v2.29.3 +# v2.29.3 08-November-2016 Update webpack-hot-middleware to version 2.13.2 to fix the issue [#543](https://github.com/storybooks/react-storybook/issues/543). -### v2.29.3 +# v2.29.3 03-November-2016 Fix a regression caused by v2.29.2. There was a text called undefined listed always on the top of the preview. -### v2.29.2 +# v2.29.2 03-November-2016 @@ -244,33 +246,33 @@ Add various fixes. - Update postcss-loader to v1.1.0 [PR599](https://github.com/storybooks/react-storybook/pull/599) - fix for `module.hot` is not available in a static build [PR600](https://github.com/storybooks/react-storybook/pull/600) -### v2.29.1 +# v2.29.1 03-November-2016 Update babel-plugin-react-docgen to v1.4.1 to fix HOC [issue](https://github.com/kadirahq/babel-plugin-react-docgen/issues/19) -### v2.29.0 +# v2.29.0 01-November-2016 Update babel-plugin-react-docgen to 1.4.0. This will fix some of the compilation issues such as #580. -### v2.28.1 +# v2.28.1 28-October-2016 Remove preview decorator support. [PR583](https://github.com/storybooks/react-storybook/pull/583). -### v2.28.0 +# v2.28.0 28-October-2016 Add preview decorator support. [PR582](https://github.com/storybooks/react-storybook/pull/582). This will help us bring storybook designer with some great power. -### v2.27.0 +# v2.27.0 27-October-2016 @@ -282,7 +284,7 @@ Add a few usability improvements to Storybook. - Update `babel-preset-react-app` to the latest. [PR576](https://github.com/storybooks/react-storybook/pull/576) - Ship `json-loader` by default. [PR575](https://github.com/storybooks/react-storybook/pull/575) -### v2.26.0 +# v2.26.0 24-October-2016 @@ -292,13 +294,13 @@ Get some new features from CRA. - Allow to use postcss for CSS @imports [PR564](https://github.com/storybooks/react-storybook/pull/564) - Use process.env as a proper object [PR565](https://github.com/storybooks/react-storybook/pull/565) -### v2.25.1 +# v2.25.1 23-October-2016 Add a potential fix to [558](https://github.com/storybooks/react-storybook/issues/558) by updating babel-plugin-react-docgen to the latest(v1.3.2). -### v2.25.0 +# v2.25.0 21-October-2016 @@ -310,25 +312,25 @@ With this: Additionally, added `yarn.lock`. -### v2.24.1 +# v2.24.1 19-October-2016 Do not show git command output. [PR554](https://github.com/storybooks/react-storybook/pull/554) -### v2.24.0 +# v2.24.0 07-October-2016 - Export git repository info to support custom tool integrations [PR536](https://github.com/storybooks/react-storybook/pull/536) -### v2.23.0 +# v2.23.0 06-October-2016 - Remove the experimental database addon from react-storybook [PR535](https://github.com/storybooks/react-storybook/pull/535) -### v2.22.0 +# v2.22.0 05-October-2016 @@ -337,80 +339,80 @@ Add some nice development experiment based on suggestion from Dan Abramov. - Set a color to the Storybook URL in the console. [PR533](https://github.com/storybooks/react-storybook/pull/533) - Add better error message when there's no React element in the story. [PR534](https://github.com/storybooks/react-storybook/pull/534) -### v2.21.0 +# v2.21.0 05-October-2016 - Get the latest features from CRA including NODE_PATH support, public folder support and some other minor changes. [#468](https://github.com/storybooks/react-storybook/issues/468) - Also bumped `@kadira/storybook-channel-postmsg` to `^1.0.3` -### v2.20.1 +# v2.20.1 28-September-2016 - Fix story kind order bug [PR499](https://github.com/storybooks/react-storybook/pull/499) - Prefix config environment variables [PR503](https://github.com/storybooks/react-storybook/pull/503) -### v2.20.0 +# v2.20.0 26-September-2016 - Use postMessage channel [PR498](https://github.com/storybooks/react-storybook/pull/498) - Support dynamic panel titles [PR497](https://github.com/storybooks/react-storybook/pull/497) -### v2.19.0 +# v2.19.0 26-September-2016 - Support layout options [PR494](https://github.com/storybooks/react-storybook/pull/494) - Update Typescript definitions [PR491](https://github.com/storybooks/react-storybook/pull/491) and [PR493](https://github.com/storybooks/react-storybook/pull/493) -### v2.18.1 +# v2.18.1 23-September-2016 - Stop uglifyjs from mangling names [PR483](https://github.com/storybooks/react-storybook/pull/483) -### v2.18.0 +# v2.18.0 23-September-2016 - Remove `STORYBOOK_` prefix from config env [PR481](https://github.com/storybooks/react-storybook/pull/481) -### v2.17.0 +# v2.17.0 22-September-2016 - Add support for StoryShots. [PR479](https://github.com/storybooks/react-storybook/pull/479) - Fix some typos: [PR477](https://github.com/storybooks/react-storybook/pull/477) & [PR478](https://github.com/storybooks/react-storybook/pull/478) -### v2.16.1 +# v2.16.1 21-September-2016 - Fix the 404 error for `addon-db.json` file [PR472](https://github.com/storybooks/react-storybook/pull/472) - Serve/Bundle the storybook favicon [PR473](https://github.com/storybooks/react-storybook/pull/473) -### v2.16.0 +# v2.16.0 21-September-2016 - Move the babel config loading logic into a seperate file. [PR469](https://github.com/storybooks/react-storybook/pull/469) - Update airbnd eslint rules to the latest. -### v2.15.1 +# v2.15.1 19-September-2016 Add a fix to webpack custom resolve.alias not working. [PR465](https://github.com/storybooks/react-storybook/pull/465) -### v2.15.0 +# v2.15.0 19-September-2016 - Use @kadira/storybook-addons as a resolve.alias. So, we can support addons for NPM2 too. [PR462](https://github.com/storybooks/react-storybook/pull/462) -### v2.14.0 +# v2.14.0 14-September-2016 @@ -419,26 +421,26 @@ Add a fix to webpack custom resolve.alias not working. [PR465](https://github.co - Allow to reload if HMR goes crazy. [PR448](https://github.com/storybooks/react-storybook/pull/448) - Add support to get custom env variables. [PR450](https://github.com/storybooks/react-storybook/pull/450) -### v2.13.1 +# v2.13.1 14-September-2016 - Fix 404 error when db file does not exist [PR449](https://github.com/storybooks/react-storybook/pull/449) -### v2.13.0 +# v2.13.0 9-September-2016 - Fix [#443](https://github.com/storybooks/react-storybook/issues/443) where the static version of Storybook doesn't like Safari. - Update postcss-loader to 0.13.0. -### v2.12.1 +# v2.12.1 8-September-2016 - Parse static directory provided by env as a list. [PR436](https://github.com/storybooks/react-storybook/pull/436) -### v2.12.0 +# v2.12.0 8-September-2016 @@ -446,86 +448,86 @@ Add a fix to webpack custom resolve.alias not working. [PR465](https://github.co - Update css-loader to version 0.25.0. [PR427](https://github.com/storybooks/react-storybook/pull/427) - Get the head.html values for every page request. [PR432](https://github.com/storybooks/react-storybook/pull/432) -### v2.11.0 +# v2.11.0 4-September-2016 - Remove babel-polyfill since we don't use it. - Update versions with the help from greenkeeper. [PR421](https://github.com/storybooks/react-storybook/pull/421) -### v2.10.0 +# v2.10.0 3-September-2016 - Adding airbnb-js-shims again. [PR419](https://github.com/storybooks/react-storybook/pull/419) -### v2.9.1 +# v2.9.1 2-September-2016. - Use the config directory to store the addon database file [PR418](https://github.com/storybooks/react-storybook/pull/418). -### v2.9.0 +# v2.9.0 2-September-2016. - Copy the addon-db.json file when building static storybooks [PR417](https://github.com/storybooks/react-storybook/pull/417). -### v2.8.0 +# v2.8.0 2-September-2016. - Update @kadira/storybook to get the clean query params feature. See [storybook-ui-PR37](https://github.com/kadirahq/storybook-ui/pull/37) -### v2.7.0 +# v2.7.0 1-September-2016 - Add addon database feature [PR415](https://github.com/storybooks/react-storybook/pull/415). -### v2.6.1 +# v2.6.1 31-August-2016 - Bring back HMR dev logs. [PR412](https://github.com/storybooks/react-storybook/pull/412). -### v2.6.0 +# v2.6.0 30-August-2016 - Allow start/build params from env variables. [PR413](https://github.com/storybooks/react-storybook/pull/413) -### v2.5.2 +# v2.5.2 29-August-2016 - Remove the use of babel-runtime/core-js modules. [PR410](https://github.com/storybooks/react-storybook/pull/410) -### v2.5.1 +# v2.5.1 24-August-2016 - Update @kadira/storybook-ui to v3.3.2 -### v2.5.0 +# v2.5.0 24-August-2016 - We are no longer shipping extra polyfills anymore. [PR402](https://github.com/storybooks/react-storybook/pull/402) -### v2.4.2 +# v2.4.2 24-August-2016 - Allow file-loader URLs to work on subpaths. [PR401](https://github.com/storybooks/react-storybook/pull/401) -### v2.4.1 +# v2.4.1 24-August-2016 - Bump @kadira/storybook ui to v3.3.1 to fix some UI related issues. -### v2.4.0 +# v2.4.0 23-August-2016 @@ -534,32 +536,32 @@ Add a fix to webpack custom resolve.alias not working. [PR465](https://github.co - Add webpack2 support by changing the use of OccurenceOrderPlugin. [PR397](https://github.com/storybooks/react-storybook/pull/397) - Use @kadira/storybook-ui 2.3.0, which has new APIs to set URL for addons. -### v2.3.0 +# v2.3.0 16-August-2016 - Implement anonymous usage tracking. [PR384](https://github.com/storybooks/react-storybook/pull/384) -### v2.2.3 +# v2.2.3 15-August-2016 - Add a hash to media file's filename. Otherwise, it'll cause issues when there are multiple images with the same filename but in different directories. [PR380](https://github.com/storybooks/react-storybook/pull/380) -### v2.2.2 +# v2.2.2 10-August-2016 - Remove unused extract-text-webpack-plugin. This will add webpack2 support. [PR369](https://github.com/storybooks/react-storybook/pull/369). -### v2.2.1 +# v2.2.1 09-August-2016 - Use @kadira/storybook-channel modules. [#PR359](https://github.com/storybooks/react-storybook/pull/359). - Update @kadira/storybook-ui to the latest. -### v2.2.0 +# v2.2.0 05-August-2016 @@ -570,7 +572,7 @@ This release bring some webpack config related optimizations and the NPM2 suppor - Add NPM2 support. [PR356](https://github.com/storybooks/react-storybook/pull/356) - Add autofixer defaults. [PR357](https://github.com/storybooks/react-storybook/pull/357) -### v2.1.1 +# v2.1.1 03-August-2016 @@ -579,7 +581,7 @@ Remove default webpack config for all config types. [PR348](https://github.com/s Now we only use the Create React App based config if there's no custom webpack config. This will fix issues like [#347](https://github.com/storybooks/react-storybook/issues/347). -### v2.1.0 +# v2.1.0 02-August-2016 @@ -595,7 +597,7 @@ Unfortunately, as of this version, there are no docs for this feature. But, you Have a look at [here](https://github.com/storybooks/react-storybook/blob/master/src/server/config.js#L88) to how to configure addons. -### v2.0.0 +# v2.0.0 01-August-2016 @@ -609,151 +611,151 @@ This is the starting of the next major version of Storybook. This version is alm - Continue support for babel's stage-0 preset and add es2016 preset. - Update @kadira/storybook-ui to v2.6.1 to remove some React warnings. -### v1.41.0 +# v1.41.0 - Fix nodejs require errors [#337](https://github.com/storybooks/react-storybook/pull/337). - Add getStorybook method to client API [#332](https://github.com/storybooks/react-storybook/pull/332). -### v1.40.0 +# v1.40.0 - Fix duplicate decorator bug [#335](https://github.com/storybooks/react-storybook/pull/335). -### v1.39.1 +# v1.39.1 - Update babel packages [#325](https://github.com/storybooks/react-storybook/pull/325). - Hide HMR info logs [#331](https://github.com/storybooks/react-storybook/pull/331). -### v1.39.0 +# v1.39.0 - Update @kadira/storybook-ui to get features from [v2.5.0](https://github.com/kadirahq/storybook-ui/blob/master/CHANGELOG.md#v250) and [v2.6.0](https://github.com/kadirahq/storybook-ui/blob/master/CHANGELOG.md#v260). -### v1.38.3 +# v1.38.3 - Add names for action and linkTo functions [#321](https://github.com/storybooks/react-storybook/pull/321). -### v1.38.2 +# v1.38.2 - Fix error in prepublish script [#319](https://github.com/storybooks/react-storybook/pull/319). -### v1.38.1 +# v1.38.1 - Improve Windows support by writing prepublish script using shelljs [#308](https://github.com/storybooks/react-storybook/pull/308). -### v1.38.0 +# v1.38.0 - v1.37.0 was a nightmare since it contains the npm-shrinkwrap.json. Fixed by removing it. See: [#306](https://github.com/storybooks/react-storybook/issues/306) and [#305](https://github.com/storybooks/react-storybook/pull/305). -### v1.37.0 +# v1.37.0 - Update @kadira/storybook-ui to 2.4.0 -### v1.36.0 +# v1.36.0 - Support watchOptions configuration. See: [PR287](https://github.com/storybooks/react-storybook/pull/287) -### v1.35.2 +# v1.35.2 - Add missing font-face to the ErrorDisplay's heading. -### v1.35.1 +# v1.35.1 - Fix issue related to bad error handling. See issue [#275](https://github.com/storybooks/react-storybook/issues/275): -### v1.35.0 +# v1.35.0 - Add fuzzy search powered search box and Redux DevTools support via [@kadira/storybook-ui@2.3.0](https://github.com/kadirahq/storybook-ui/blob/master/CHANGELOG.md#v230). -### v1.34.1 +# v1.34.1 - Don't always override NODE_ENV in build-storybook. [PR272](https://github.com/storybooks/react-storybook/pull/272) -### v1.34.0 +# v1.34.0 - Use storybook-ui v2.2.0 which puts shortcut state into the URL. -### v1.33.0 +# v1.33.0 - Introduce an [extension API](https://github.com/storybooks/react-storybook/blob/master/docs/extensions.md) for Storybook. See: [PR258](https://github.com/storybooks/react-storybook/pull/258) -### v1.32.1 +# v1.32.1 - Extend @kadira/storybook-ui provider from it's base Provider. -### v1.32.0 +# v1.32.0 - Use @kadira/storybook-ui as the manager UI with the implemented provider for React. See `client/manager` for more info. -### v1.31.0 +# v1.31.0 - Pass a `context` argument to stories [PR250](https://github.com/storybooks/react-storybook/pull/250) -### v1.30.0 +# v1.30.0 - Fuzzy search kinds [PR247](https://github.com/storybooks/react-storybook/pull/247) -### v1.29.5 +# v1.29.5 - Update dependency version to fix filter crash [PR246](https://github.com/storybooks/react-storybook/pull/246) -### v1.29.4 +# v1.29.4 - Protect index.html/iframe.html from being overwritten [PR243](https://github.com/storybooks/react-storybook/pull/243) -### v1.29.3 +# v1.29.3 - Update @kadira/storybook-core version [PR241](https://github.com/storybooks/react-storybook/pull/241) - Add es6-shim by default [PR238](https://github.com/storybooks/react-storybook/pull/238) -### v1.29.2 +# v1.29.2 - Use url.resolve instead of path.join [PR240](https://github.com/storybooks/react-storybook/pull/240) -### v1.29.1 +# v1.29.1 - Copy missed manager.js.map file on static build [PR236](https://github.com/storybooks/react-storybook/pull/236) -### v1.29.0 +# v1.29.0 - Multiple static dirs (comma separated) [PR229](https://github.com/storybooks/react-storybook/pull/229) -### v1.28.5 +# v1.28.5 - Support ECMAScript stage-0 [PR228](https://github.com/storybooks/react-storybook/pull/228) to fix [Issue #227](https://github.com/storybooks/react-storybook/issues/227) -### v1.28.4 +# v1.28.4 - Support custom webpack public path for dev-server and static build started by [PR226](https://github.com/storybooks/react-storybook/pull/226) -### v1.28.3 +# v1.28.3 - Revert [PR226](https://github.com/storybooks/react-storybook/pull/226) -### v1.28.2 +# v1.28.2 - Support custom webpack publicPath [PR226](https://github.com/storybooks/react-storybook/pull/226) -### v1.28.1 +# v1.28.1 - Add charset meta tags to HTML heads [PR216](https://github.com/storybooks/react-storybook/pull/216) -### v1.28.0 +# v1.28.0 - Moved storybook serving code into a middleware to support more advanced use cases. - Refactored dev server to use storybook middleware [PR211](https://github.com/storybooks/react-storybook/pull/211) -### v1.27.0 +# v1.27.0 - Move modules to storybook-core repo. [PR196](https://github.com/storybooks/react-storybook/pull/196) - Add stack-source-map again only for Chrome to get better error stacks. - Add ability to control the hostname. See [PR195](https://github.com/storybooks/react-storybook/pull/195) and [PR198](https://github.com/storybooks/react-storybook/pull/198) -### v1.26.0 +# v1.26.0 12-May-2016 - Ensure asset directory exists in the static-builder. -### v1.25.0 +# v1.25.0 11-May-2016 @@ -765,7 +767,7 @@ This is the starting of the next major version of Storybook. This version is alm - Make left panel scrollable with keeping the filterbox always. See: [PR182](https://github.com/storybooks/react-storybook/pull/182). - Add `qs` as a direct dependency as it's used in preview. -### v1.24.0 +# v1.24.0 10-May-2016 @@ -773,34 +775,34 @@ This is the starting of the next major version of Storybook. This version is alm - Add scrolling support to the left panel. Fixes [#177](https://github.com/storybooks/react-storybook/issues/177). - Remove NODE_ENV=production flag. Fixes [#158](https://github.com/storybooks/react-storybook/issues/158) -### v1.23.0 +# v1.23.0 09-May-2016 - Add shortcuts to jump to previous and next stories. See [PR176](https://github.com/storybooks/react-storybook/pull/176) - Fix loader concatenation bug specially when custom config doesn't have a loaders section. [PR173](https://github.com/storybooks/react-storybook/pull/173) -### v1.22.1 +# v1.22.1 06-May-2016 - Add a potential fix for [#167](https://github.com/storybooks/react-storybook/issues/167) - basically, this moved back babel-packages required by webpack. -### v1.22.0 +# v1.22.0 06-May-2016 - Improve the static builder time. -### v1.21.0 +# v1.21.0 06-May-2016 - Add configType argument to custom config function. See: [PR169](https://github.com/storybooks/react-storybook/pull/169) - Add the unicode version of the Keyboard Shortcut Icon. See: [PR170](https://github.com/storybooks/react-storybook/pull/170) -### v1.20.0 +# v1.20.0 05-May-2016 @@ -810,7 +812,7 @@ This is the starting of the next major version of Storybook. This version is alm - Remove some typo in docs. See: [PR154](https://github.com/storybooks/react-storybook/pull/154) - Move UI testing libraries to devDependencies. See: [PR153](https://github.com/storybooks/react-storybook/pull/153) -### v1.19.0 +# v1.19.0 27-April-2016 @@ -818,38 +820,38 @@ This is the starting of the next major version of Storybook. This version is alm - Remove self-closing div tag, which is invalid HTML. See: [PR148](https://github.com/storybooks/react-storybook/pull/148) - Search for a .babelrc in the storybook config directory first, then the project root. See: [PR149](https://github.com/storybooks/react-storybook/pull/149) -### v1.18.0 +# v1.18.0 26-April-2016 - Link Storybook menu to the repo. See: [PR137](https://github.com/storybooks/react-storybook/pull/137) - Implement keyboard shortcuts and fuzzy search. See: [PR141](https://github.com/storybooks/react-storybook/pull/141) -### v1.17.2 +# v1.17.2 25-April-2016 - Fix an error which only occurs on Firefox. See: [PR144](https://github.com/storybooks/react-storybook/pull/144) -### v1.17.1 +# v1.17.1 21-April-2016 - Fix a regression introduce by `v1.17.0`. See: [PR133](https://github.com/storybooks/react-storybook/pull/133) -### v1.17.0 +# v1.17.0 21-April-2016 - Check all the arguments passed to action for events. See: [PR132](https://github.com/storybooks/react-storybook/pull/132) -### v1.16.1 +# v1.16.1 21-April-2016 - Fix action logs highlighting issue, which comes as a regression of [PR126](https://github.com/storybooks/react-storybook/pull/126). -### v1.16.0 +# v1.16.0 20-April-2016 @@ -857,37 +859,37 @@ This is the starting of the next major version of Storybook. This version is alm - Related issue: [#116](https://github.com/storybooks/react-storybook/issues/116) - Related PR: [PR126](https://github.com/storybooks/react-storybook/pull/126) -### v1.15.0 +# v1.15.0 20-April-2016 - Improve action logger UI and increase max log count to 10. See [PR123](https://github.com/storybooks/react-storybook/pull/123) -### v1.14.0 +# v1.14.0 19-April-2016 - Add syntax highlights to the logger. See: [PR118](https://github.com/storybooks/react-storybook/pull/118) -### v1.13.0 +# v1.13.0 - Add some UI test cases. See [PR103](https://github.com/storybooks/react-storybook/pull/103) - Implement `.addDecorator()` API. See [PR115](https://github.com/storybooks/react-storybook/pull/115) - Add code folding support. See [PR111](https://github.com/storybooks/react-storybook/pull/111) -### v1.12.0 +# v1.12.0 14-April-2016 - Add support for webpack module preLoaders. See: [PR107](https://github.com/storybooks/react-storybook/pull/107) -### v1.11.0 +# v1.11.0 13-April-2016 - Add support for React DevTools. See: [PR104](https://github.com/storybooks/react-storybook/pull/104) -### v1.10.2 +# v1.10.2 12-April-2016 @@ -897,13 +899,13 @@ Fix various issues related to static bundling. - Use relative urls so, static sites can be host with paths (GH Pages) - Identify SyntheticEvent using feature detection. UglifyJS mangal class names, so we can't use classnames to detect a SyntheticEvent in the static build. -### v1.10.1 +# v1.10.1 - Don't serve index.html in static directory as a site index. See [PR100](https://github.com/storybooks/react-storybook/pull/100) - Use cjson for parsing .babelrc files (support comments). See [PR98](https://github.com/storybooks/react-storybook/pull/98) - Remove the dist directory before running babel to avoid older code. See [PR101](https://github.com/storybooks/react-storybook/pull/101) -### v1.10.0 +# v1.10.0 - Add custom head support inside the iframe. See [PR77](https://github.com/storybooks/react-storybook/pull/77) - Unmount components before rendering into DOM node. Fix: [#81](https://github.com/storybooks/react-storybook/issues/81) @@ -911,7 +913,7 @@ Fix various issues related to static bundling. - Fix search box's lineHeight to work with all the browsers. See: [PR94](https://github.com/storybooks/react-storybook/pull/94) - Add the search box. See: [PR91](https://github.com/storybooks/react-storybook/pull/91). -### v1.9.0 +# v1.9.0 Add some minor improvements. @@ -919,48 +921,48 @@ Add some minor improvements. - Fix the React Warning about CSS property. See: [PR84](https://github.com/storybooks/react-storybook/pull/84) - Transition on latest logged action. See: [PR80](https://github.com/storybooks/react-storybook/pull/80) -### v1.8.0 +# v1.8.0 - Add story linking functionality. - [Documentation](https://github.com/storybooks/react-storybook/blob/master/docs/api.md#linking-stories). - Original feature request: [#50](https://github.com/storybooks/react-storybook/issues/50) - Implementation: [PR86](https://github.com/storybooks/react-storybook/pull/86) -### v1.7.0 +# v1.7.0 - Add support to React v15.0.0. -### v1.6.0 +# v1.6.0 - Make scrollable layout. See: [PR](https://github.com/storybooks/react-storybook/pull/70) - Add npm3 requirement to the `package.json`. - Add `react` and `react-dom` to devDependencies. -### v1.5.0 +# v1.5.0 - Add support for most of the custom webpack configuration. See [PR64](https://github.com/storybooks/react-storybook/pull/64) -### v1.4.0 +# v1.4.0 - Add CLI option to specify the config dir. See [PR52](https://github.com/storybooks/react-storybook/pull/52). -### v1.3.0 +# v1.3.0 - Load the `.babelrc` manually. Fixed: [#41](https://github.com/storybooks/react-storybook/issues/41) - Add a better contributing guide. See [CONTRIBUTING.md](https://github.com/storybooks/react-storybook/blob/master/CONTRIBUTING.md) - Add a development utility `npm run dev` which watches "src" directory and run `npm run prepublish`. -### v1.2.0 +# v1.2.0 - Add a button to clear logs in the ActionLogger. This is requested in [PR21](https://github.com/storybooks/react-storybook/issues/21). - Remove navigation list order hijacking. See [commit](https://github.com/storybooks/react-storybook/commit/166365fd38f51f79e69e028a1c11e2620eddcb99). - Fix a typo in .gitignore. See [PR31](https://github.com/storybooks/react-storybook/pull/31). - Add support for JSX. See [PR18](https://github.com/storybooks/react-storybook/pull/18). -### v1.1.0 +# v1.1.0 - v1.0.0 was a mistake and it contains very old code. That's why we had to do a 1.1.0 release. -### v1.0.0 +# v1.0.0 - Yeah! diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 0b7c4342760..ae2f3b531f1 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -216,8 +216,9 @@ npm run publish -- --concurrency 1 --skip-git # Update `CHANGELOG.md` # - Edit PR titles/labels on github until output is good # - Optionally, edit a handwritten description in `CHANGELOG.md` -npm changelog +npm run changelog # tag the release and push `CHANGELOG.md` and tags -# FIXME!! +# FIXME: not end-to-end tested! +npm run github-release ``` diff --git a/package.json b/package.json index 3c74b77c9bb..b7b5ef2da77 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,7 @@ "eslint-plugin-jest": "^20.0.3", "eslint-plugin-prettier": "^2.1.1", "gh-pages": "^1.0.0", + "github-release-from-changelog": "^1.2.1", "jest": "^20.0.4", "jest-enzyme": "^3.2.0", "lerna": "2.0.0-rc.5", @@ -38,12 +39,9 @@ "remark-toc": "^4.0.0", "shelljs": "^0.7.7" }, - "repository": { - "type": "git", - "url": "git://github.com/storybooks/storybook.git" - }, "scripts": { "changelog": "pr-log --sloppy", + "github-release": "github-release-from-changelog", "publish": "lerna publish", "import-repo": "lerna import", "bootstrap": "lerna bootstrap", @@ -65,7 +63,9 @@ "url": "https://opencollective.com/storybook" }, "pr-log": { - "skipLabels": ["cleanup"], + "skipLabels": [ + "cleanup" + ], "validLabels": { "breaking": "Breaking Changes", "feature": "Features", From ef9fec215b6f63e3a472914bb93f4b57459d3bac Mon Sep 17 00:00:00 2001 From: Michael Shilman Date: Sun, 28 May 2017 01:05:52 +1000 Subject: [PATCH 15/17] Update CHANGELOG date format --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 46185aa7eb3..d9b0b681791 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # 3.0.0 -2017-05-27 +2017-May-27 Storybook 3.0 is our first fully community-driven release! Notable changes: - Moved from `@kadira` to `@storybooks` org across [github](https://github.com/storybooks/storybook/), [npm](https://www.npmjs.com/package/@storybook/react), [docs](https://storybook.js.org/) From 507c1c757dfd06985e755b9aae49d538a1468a13 Mon Sep 17 00:00:00 2001 From: Michael Shilman Date: Sun, 28 May 2017 01:30:19 +1000 Subject: [PATCH 16/17] PR "misc" label => "other" for CHANGELOG --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b7b5ef2da77..e324d1887c4 100644 --- a/package.json +++ b/package.json @@ -73,7 +73,7 @@ "documentation": "Documentation", "maintenance": "Maintenance", "greenkeeper": "Dependency Upgrades", - "misc": "Other" + "other": "Other" } } } From f5a503688b0a9fec1cc47a416befc563d74683f1 Mon Sep 17 00:00:00 2001 From: Norbert de Langen Date: Sat, 27 May 2017 20:03:35 +0200 Subject: [PATCH 17/17] FIX linting markdown --- CHANGELOG.md | 179 ++++++++++++++++++++++++------------------------ CONTRIBUTING.md | 7 +- MIGRATION.md | 4 +- README.md | 5 +- ROADMAP.md | 14 ++-- 5 files changed, 107 insertions(+), 102 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d9b0b681791..e6cbf187d9c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,34 +3,35 @@ 2017-May-27 Storybook 3.0 is our first fully community-driven release! Notable changes: -- Moved from `@kadira` to `@storybooks` org across [github](https://github.com/storybooks/storybook/), [npm](https://www.npmjs.com/package/@storybook/react), [docs](https://storybook.js.org/) -- Upgraded to Webpack2! https://github.com/storybooks/storybook/pull/637 -- Switched to monorepo and overhauled package structure. https://github.com/storybooks/storybook/pull/749 https://github.com/storybooks/storybook/pull/1031 -- Added configuration options to storybooks snapshot testing. https://github.com/storybooks/storybook/pull/1090 -- Added `create-react-native-app` support. https://github.com/storybooks/storybook/pull/1117 -- Added HTTPS support. https://github.com/storybooks/storybook/pull/735 + +- Moved from `@kadira` to `@storybooks` org across [github](https://github.com/storybooks/storybook/), [npm](https://www.npmjs.com/package/@storybook/react), [docs](https://storybook.js.org/) +- Upgraded to Webpack2! +- Switched to monorepo and overhauled package structure. +- Added configuration options to storybooks snapshot testing. +- Added `create-react-native-app` support. +- Added HTTPS support. This is a major release with breaking changes. See our [migration guide](https://github.com/storybooks/storybook/blob/master/MIGRATION.md) for details. #### Features -- Added CRNA support (#1117) -- [Addon-Knobs] Fixing performance issues. (#1039) -- Allow HTTPS (#735) +- Added CRNA support (#1117) +- [Addon-Knobs] Fixing performance issues. (#1039) +- Allow HTTPS (#735) #### Bug Fixes -- FIX for test-cra was breaking the build (#972) +- FIX for test-cra was breaking the build (#972) #### Documentation -- adds ReactSVGPanZoom to examples list (#1139) -- docs(custom-webpack-config): rules not loaders (#1137) +- adds ReactSVGPanZoom to examples list (#1139) +- docs(custom-webpack-config): rules not loaders (#1137) #### Maintenance -- refactor: change NPM organisation from kadira to storybook (#996) -- CHANGE folder structure && CHANGE package-names (#1031) +- refactor: change NPM organisation from kadira to storybook (#996) +- CHANGE folder structure && CHANGE package-names (#1031) #### Dependency Upgrades @@ -39,16 +40,16 @@ This is a major release with breaking changes. See our [migration guide](https:/ 10 PRs -- Update lerna to the latest version 🚀 (https://github.com/storybooks/storybook/pulls/1101) -- update dependencies in cra-storybook (https://github.com/storybooks/storybook/pulls/1080) -- Switch back to non-fork of react-inspector (https://github.com/storybooks/storybook/pulls/1026) -- Dependency updates (https://github.com/storybooks/storybook/pulls/1008) -- Update jest to the latest version 🚀 (https://github.com/storybooks/storybook/pulls/998) -- CHANGE to use react-split-view 0.1.63 over the fork (https://github.com/storybooks/storybook/pulls/956) -- FIX webpack overriding && CLEANUP && ADD example (https://github.com/storybooks/storybook/pulls/965) -- Update lerna to the latest version 🚀 (https://github.com/storybooks/storybook/pulls/915) -- Use jest for unittesting - standardize unit testing epic (https://github.com/storybooks/storybook/pulls/904) -- Update dependencies to enable Greenkeeper 🌴 (https://github.com/storybooks/storybook/pulls/768) +- Update lerna to the latest version 🚀 () +- update dependencies in cra-storybook () +- Switch back to non-fork of react-inspector () +- Dependency updates () +- Update jest to the latest version 🚀 () +- CHANGE to use react-split-view 0.1.63 over the fork () +- FIX webpack overriding && CLEANUP && ADD example () +- Update lerna to the latest version 🚀 () +- Use jest for unittesting - standardize unit testing epic () +- Update dependencies to enable Greenkeeper 🌴 () @@ -59,71 +60,71 @@ This is a major release with breaking changes. See our [migration guide](https:/ 65 PRs -- Add travis deploy key (https://github.com/storybooks/storybook/pulls/1135) -- ADD a global to storyshots to make it work for series with info addon (https://github.com/storybooks/storybook/pulls/1129) -- Removed unsafe Storyshots import (https://github.com/storybooks/storybook/pulls/1124) -- Update all package.json with monorepo metadata (https://github.com/storybooks/storybook/pulls/1111) -- Add react-dom to the devDependency list for React Native projects (https://github.com/storybooks/storybook/pulls/1102) -- Added `snapshotWithOptions` to allow configuring rendering options in Storyshots (https://github.com/storybooks/storybook/pulls/1090) -- Upgrade React Native webpack config to webpack 2 (https://github.com/storybooks/storybook/pulls/1097) -- Fix dead link to demo repository (https://github.com/storybooks/storybook/pulls/1091) -- FIX postcss options missing && UPDATE dependencies (https://github.com/storybooks/storybook/pulls/1087) -- fix(knobs): increase font size label (https://github.com/storybooks/storybook/pulls/1086) -- CHANGE to prop-types package for notes & test-cra (https://github.com/storybooks/storybook/pulls/1082) -- Configure snapshot test (https://github.com/storybooks/storybook/pulls/1035) -- Test storyshots (https://github.com/storybooks/storybook/pulls/971) -- IMPROVE cli (https://github.com/storybooks/storybook/pulls/1079) -- Update package.json with repository info (https://github.com/storybooks/storybook/pulls/1078) -- Update storyshots README.md example (https://github.com/storybooks/storybook/pulls/1076) -- Added component description from __docgenInfo, Added the ability to get the PropType from __docgenInfo for prop table, Fixed an issue with PropVal rendering an object (https://github.com/storybooks/storybook/pulls/1030) -- Upgraded webpack PostCSS plugin definition (https://github.com/storybooks/storybook/pulls/1062) -- Update link to Storyshots addon (https://github.com/storybooks/storybook/pulls/1074) -- chore(jest): update to v20's default configuration file (https://github.com/storybooks/storybook/pulls/1063) -- Added error message for missing or invalid storyName (https://github.com/storybooks/storybook/pulls/747) -- Activating Open Collective (https://github.com/storybooks/storybook/pulls/1065) -- 1052-resolve-output-path (https://github.com/storybooks/storybook/pulls/1058) -- MOVE & RENAME and storyshots && CHANGE “React Storybook” > “Storybook” (https://github.com/storybooks/storybook/pulls/1044) -- Deprecate builtin addons (https://github.com/storybooks/storybook/pulls/1038) -- Updated issue triage guidelines (https://github.com/storybooks/storybook/pulls/1024) -- Deprecate built-in addons (https://github.com/storybooks/storybook/pulls/1025) -- Add addonlinks repo (https://github.com/storybooks/storybook/pulls/1021) -- Add propTablesExclude option (https://github.com/storybooks/storybook/pulls/924) -- Add typescript definition to addon-notes (https://github.com/storybooks/storybook/pulls/989) -- Fixes for types for knobs `number` (https://github.com/storybooks/storybook/pulls/1001) -- First pass at update the contribution instructions (https://github.com/storybooks/storybook/pulls/982) -- Remove text transform uppercase for knob labels (https://github.com/storybooks/storybook/pulls/991) -- Update links in PRs section of CONTRIBUTING.md (https://github.com/storybooks/storybook/pulls/992) -- Updated dead getstorybook.io links to storybooks.js.org (https://github.com/storybooks/storybook/pulls/988) -- Do not ignore story.js in prepublish (https://github.com/storybooks/storybook/pulls/973) -- addon-info: make the info overlay be fixed (https://github.com/storybooks/storybook/pulls/914) -- Update lerna to the latest version 🚀 (https://github.com/storybooks/storybook/pulls/969) -- Handle null elements in getData (https://github.com/storybooks/storybook/pulls/926) -- add description field from __docgenInfo for prop table for info plugin (https://github.com/storybooks/storybook/pulls/929) -- #959 add a max-height and center element with alignItems: center (https://github.com/storybooks/storybook/pulls/961) -- Switch to the only prepublish script (https://github.com/storybooks/storybook/pulls/903) -- PR review policy (https://github.com/storybooks/storybook/pulls/923) -- Add typescript definitions for getStorybook() (https://github.com/storybooks/storybook/pulls/753) -- Restore deep link for addon docs (https://github.com/storybooks/storybook/pulls/919) -- Fix default storybook webpack config (https://github.com/storybooks/storybook/pulls/922) -- Render the first story for a kind if no story selected. (https://github.com/storybooks/storybook/pulls/918) -- Update docs for monorepo (https://github.com/storybooks/storybook/pulls/913) -- Monorepo readme and contributing (https://github.com/storybooks/storybook/pulls/907) -- Add story kind regex (https://github.com/storybooks/storybook/pulls/906) -- Add examples (https://github.com/storybooks/storybook/pulls/897) -- Add missing repos (https://github.com/storybooks/storybook/pulls/882) -- Switch to monorepo (https://github.com/storybooks/storybook/pulls/749) -- extend devMiddlewareOptions with config.devServer (https://github.com/storybooks/storybook/pulls/723) -- Added meta IE=edge (https://github.com/storybooks/storybook/pulls/715) -- Replace String.includes with String.indexOf: cross-browsing support (https://github.com/storybooks/storybook/pulls/712) -- Issue Triage instructions (https://github.com/storybooks/storybook/pulls/748) -- Simple pull request template (https://github.com/storybooks/storybook/pulls/741) -- Make return type of StoryDecorator nullable (https://github.com/storybooks/storybook/pulls/680) -- Warn if story with a given name already exists (https://github.com/storybooks/storybook/pulls/670) -- Fix spelling mistake - "element form the story" to "element from the story" (https://github.com/storybooks/storybook/pulls/702) -- Remove broken react-button example (https://github.com/storybooks/storybook/pulls/699) -- Fixed spelling error. (https://github.com/storybooks/storybook/pulls/720) -- Cleaner error handling for storiesOf (https://github.com/storybooks/storybook/pulls/672) -- Update links to point to new organization (https://github.com/storybooks/storybook/pulls/721) +- Add travis deploy key () +- ADD a global to storyshots to make it work for series with info addon () +- Removed unsafe Storyshots import () +- Update all package.json with monorepo metadata () +- Add react-dom to the devDependency list for React Native projects () +- Added `snapshotWithOptions` to allow configuring rendering options in Storyshots () +- Upgrade React Native webpack config to webpack 2 () +- Fix dead link to demo repository () +- FIX postcss options missing && UPDATE dependencies () +- fix(knobs): increase font size label () +- CHANGE to prop-types package for notes & test-cra () +- Configure snapshot test () +- Test storyshots () +- IMPROVE cli () +- Update package.json with repository info () +- Update storyshots README.md example () +- Added component description from **docgenInfo, Added the ability to get the PropType from **docgenInfo for prop table, Fixed an issue with PropVal rendering an object () +- Upgraded webpack PostCSS plugin definition () +- Update link to Storyshots addon () +- chore(jest): update to v20's default configuration file () +- Added error message for missing or invalid storyName () +- Activating Open Collective () +- 1052-resolve-output-path () +- MOVE & RENAME and storyshots && CHANGE “React Storybook” > “Storybook” () +- Deprecate builtin addons () +- Updated issue triage guidelines () +- Deprecate built-in addons () +- Add addonlinks repo () +- Add propTablesExclude option () +- Add typescript definition to addon-notes () +- Fixes for types for knobs `number` () +- First pass at update the contribution instructions () +- Remove text transform uppercase for knob labels () +- Update links in PRs section of CONTRIBUTING.md () +- Updated dead getstorybook.io links to storybooks.js.org () +- Do not ignore story.js in prepublish () +- addon-info: make the info overlay be fixed () +- Update lerna to the latest version 🚀 () +- Handle null elements in getData () +- add description field from \_\_docgenInfo for prop table for info plugin () +- \#959 add a max-height and center element with alignItems: center () +- Switch to the only prepublish script () +- PR review policy () +- Add typescript definitions for getStorybook() () +- Restore deep link for addon docs () +- Fix default storybook webpack config () +- Render the first story for a kind if no story selected. () +- Update docs for monorepo () +- Monorepo readme and contributing () +- Add story kind regex () +- Add examples () +- Add missing repos () +- Switch to monorepo () +- extend devMiddlewareOptions with config.devServer () +- Added meta IE=edge () +- Replace String.includes with String.indexOf: cross-browsing support () +- Issue Triage instructions () +- Simple pull request template () +- Make return type of StoryDecorator nullable () +- Warn if story with a given name already exists () +- Fix spelling mistake - "element form the story" to "element from the story" () +- Remove broken react-button example () +- Fixed spelling error. () +- Cleaner error handling for storiesOf () +- Update links to point to new organization () diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index ae2f3b531f1..fb2139c3aa0 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -172,9 +172,10 @@ After you've done any change, you need to run the `npm run storybook` command ev This section is for Storybook maintainers who will be creating releases. Each release is described by: -- A version -- A list of merged pull requests -- Optionally, a short hand-written description + +- A version +- A list of merged pull requests +- Optionally, a short hand-written description Thus, the current release sequence is as follows: diff --git a/MIGRATION.md b/MIGRATION.md index f97acf10852..3ce7c5405d7 100644 --- a/MIGRATION.md +++ b/MIGRATION.md @@ -61,6 +61,8 @@ If your codebase is small, it's probably doable to just replace them by hand. (i But if you have a lot of occurances in your codebase, you can use a [codemod we created](./lib/codemod) for you. +> A codemod makes automatic changed to your app's code. + You have to change your `package.json`, prune old and install new dependencies by hand. `npm prune` will remove all dependecies from `node_modules` which are no longer referenced in `package.json`. @@ -72,7 +74,7 @@ We used to ship 2 addons with every single installation of storybook: `actions` If you **are** using these addons, migrating is simple: - add the addons you use to your `package.json`. -- change your code to this: +- update your code: change `addons.js` like so: ```js import '@storybook/addon-actions/register'; diff --git a/README.md b/README.md index 96aed6c1144..08abd3400af 100644 --- a/README.md +++ b/README.md @@ -73,8 +73,9 @@ For full documentation on using Storybook visit: [storybooks.js.org](https://sto ## Contributing We welcome contributions to Storybook! -- ⇄ Pull requests and ★ Stars are always welcome. -- Read our [contributing guide](CONTRIBUTING.md) to get started. + +- ⇄ Pull requests and ★ Stars are always welcome. +- Read our [contributing guide](CONTRIBUTING.md) to get started. ### Development scripts diff --git a/ROADMAP.md b/ROADMAP.md index cce6ae32553..585e85301c0 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -2,13 +2,13 @@ ### Short Term -* Mobile support -* Addon API and addons -* A clear guide to hack Storybook -* React Native Support +- Mobile support +- Addon API and addons +- A clear guide to hack Storybook +- React Native Support ### Long Term -* Automatic story generation (and edge case detection) based on propTypes. -* Angular Support -* Vue Support +- Automatic story generation (and edge case detection) based on propTypes. +- Angular Support +- Vue Support