From dfe0ebb9f242eb4bbe2cd288c4f2d2d043aca632 Mon Sep 17 00:00:00 2001 From: Alex Sanders Date: Wed, 22 May 2024 11:40:03 +0100 Subject: [PATCH] Create `@guardian/source-development-kitchen` (#1459) Co-authored-by: Oliver Abrahams --- .changeset/config.json | 2 +- .changeset/shy-timers-bow.md | 5 + Makefile | 32 ++++ README.md | 12 ++ apps/storybooks/.storybook/main.js | 5 + .../source-development-kitchen/.eslintrc.cjs | 45 ++++++ .../.storybook/main.js | 22 +++ .../.storybook/manager.ts | 6 + .../.storybook/preview.ts | 1 + .../source-development-kitchen/README.md | 76 +++++++++ .../source-development-kitchen/jest.config.js | 12 ++ .../jest.dist.setup.js | 7 + .../source-development-kitchen/main.js | 22 +++ .../source-development-kitchen/package.json | 153 ++++++++++++++++++ .../react-components/package.json | 6 + .../rollup.config.js | 7 + .../src/react-components | 1 + .../source-development-kitchen/tsconfig.json | 21 +++ .../tsconfig.spec.json | 21 +++ libs/@guardian/source/README.md | 5 +- pnpm-lock.yaml | 42 +++++ pnpm-workspace.yaml | 1 + 22 files changed, 500 insertions(+), 4 deletions(-) create mode 100644 .changeset/shy-timers-bow.md create mode 100644 libs/@guardian/source-development-kitchen/.eslintrc.cjs create mode 100644 libs/@guardian/source-development-kitchen/.storybook/main.js create mode 100644 libs/@guardian/source-development-kitchen/.storybook/manager.ts create mode 100644 libs/@guardian/source-development-kitchen/.storybook/preview.ts create mode 100644 libs/@guardian/source-development-kitchen/README.md create mode 100644 libs/@guardian/source-development-kitchen/jest.config.js create mode 100644 libs/@guardian/source-development-kitchen/jest.dist.setup.js create mode 100644 libs/@guardian/source-development-kitchen/main.js create mode 100644 libs/@guardian/source-development-kitchen/package.json create mode 100644 libs/@guardian/source-development-kitchen/react-components/package.json create mode 100644 libs/@guardian/source-development-kitchen/rollup.config.js create mode 120000 libs/@guardian/source-development-kitchen/src/react-components create mode 100644 libs/@guardian/source-development-kitchen/tsconfig.json create mode 100644 libs/@guardian/source-development-kitchen/tsconfig.spec.json diff --git a/.changeset/config.json b/.changeset/config.json index 89689cedb..45d7e3b09 100644 --- a/.changeset/config.json +++ b/.changeset/config.json @@ -8,7 +8,7 @@ "baseBranch": "main", "updateInternalDependencies": "patch", "bumpVersionsWithWorkspaceProtocolOnly": true, - "ignore": ["github-pages", "configs"], + "ignore": ["github-pages", "@configs/*"], "___experimentalUnsafeOptions_WILL_CHANGE_IN_PATCH": { "onlyUpdatePeerDependentsWhenOutOfRange": true } diff --git a/.changeset/shy-timers-bow.md b/.changeset/shy-timers-bow.md new file mode 100644 index 000000000..809dd8bee --- /dev/null +++ b/.changeset/shy-timers-bow.md @@ -0,0 +1,5 @@ +--- +'@guardian/source-development-kitchen': minor +--- + +Create `@guardian/source-development-kitchen` diff --git a/Makefile b/Makefile index 7e67628e9..994763b15 100644 --- a/Makefile +++ b/Makefile @@ -445,6 +445,38 @@ install: check-node-version @guardian/source\:verify-dist: env @corepack pnpm --filter @guardian/source verify-dist +.PHONY: @guardian/source-development-kitchen\:build +@guardian/source-development-kitchen\:build: env + @corepack pnpm --filter @guardian/source-development-kitchen build + +.PHONY: @guardian/source-development-kitchen\:build-storybook +@guardian/source-development-kitchen\:build-storybook: env + @corepack pnpm --filter @guardian/source-development-kitchen build-storybook + +.PHONY: @guardian/source-development-kitchen\:dev +@guardian/source-development-kitchen\:dev: env + @corepack pnpm --filter @guardian/source-development-kitchen dev + +.PHONY: @guardian/source-development-kitchen\:fix +@guardian/source-development-kitchen\:fix: env + @corepack pnpm --filter @guardian/source-development-kitchen fix + +.PHONY: @guardian/source-development-kitchen\:lint +@guardian/source-development-kitchen\:lint: env + @corepack pnpm --filter @guardian/source-development-kitchen lint + +.PHONY: @guardian/source-development-kitchen\:storybook +@guardian/source-development-kitchen\:storybook: env + @corepack pnpm --filter @guardian/source-development-kitchen storybook + +.PHONY: @guardian/source-development-kitchen\:test +@guardian/source-development-kitchen\:test: env + @corepack pnpm --filter @guardian/source-development-kitchen test + +.PHONY: @guardian/source-development-kitchen\:verify-dist +@guardian/source-development-kitchen\:verify-dist: env + @corepack pnpm --filter @guardian/source-development-kitchen verify-dist + .PHONY: @guardian/source-foundations\:build @guardian/source-foundations\:build: env @corepack pnpm --filter @guardian/source-foundations build diff --git a/README.md b/README.md index 8fd6bf75f..5485a196f 100644 --- a/README.md +++ b/README.md @@ -28,6 +28,7 @@ The following packages live in `libs/@guardian/*` and are published to NPM: - [@guardian/newsletter-types](libs/@guardian/newsletter-types) - [@guardian/prettier](libs/@guardian/prettier) - [@guardian/source](libs/@guardian/source) +- [@guardian/source-development-kitchen](libs/@guardian/source-development-kitchen) - [@guardian/source-foundations](libs/@guardian/source-foundations) - [@guardian/source-react-components](libs/@guardian/source-react-components) - [@guardian/source-react-components-development-kitchen](libs/@guardian/source-react-components-development-kitchen) @@ -199,6 +200,17 @@ Project-specific tasks are defined as `scripts` in a `package.json` or `targets` - `make @guardian/source:test` - `make @guardian/source:verify-dist` +#### @guardian/source-development-kitchen + +- `make @guardian/source-development-kitchen:build` +- `make @guardian/source-development-kitchen:build-storybook` +- `make @guardian/source-development-kitchen:dev` +- `make @guardian/source-development-kitchen:fix` +- `make @guardian/source-development-kitchen:lint` +- `make @guardian/source-development-kitchen:storybook` +- `make @guardian/source-development-kitchen:test` +- `make @guardian/source-development-kitchen:verify-dist` + #### @guardian/source-foundations - `make @guardian/source-foundations:build` diff --git a/apps/storybooks/.storybook/main.js b/apps/storybooks/.storybook/main.js index 6bcda0113..0f850ead4 100644 --- a/apps/storybooks/.storybook/main.js +++ b/apps/storybooks/.storybook/main.js @@ -39,6 +39,11 @@ module.exports = { // port set in libs/@guardian/source/package.json url: 'http://localhost:4404', }, + 'source-development-kitchen': { + title: 'source-development-kitchen', + // port set in libs/@guardian/source-development-kitchen/package.json + url: 'http://localhost:4405', + }, }; }, }; diff --git a/libs/@guardian/source-development-kitchen/.eslintrc.cjs b/libs/@guardian/source-development-kitchen/.eslintrc.cjs new file mode 100644 index 000000000..df8760ee5 --- /dev/null +++ b/libs/@guardian/source-development-kitchen/.eslintrc.cjs @@ -0,0 +1,45 @@ +module.exports = { + extends: ['../../../.eslintrc.cjs'], + ignorePatterns: [ + '!**/*', + 'node_modules', + 'jest.dist.*', // depends on build output, so don't lint it + 'dist', + 'storybook-static', + '.wireit', + ], + overrides: [ + { + files: ['*.ts', '*.tsx'], + parserOptions: { + tsconfigRootDir: __dirname, + }, + rules: {}, + }, + { + files: ['*.js', '*.jsx'], + rules: {}, + }, + { + files: ['*.test.ts'], + rules: { + '@typescript-eslint/no-unsafe-call': 'off', + '@typescript-eslint/no-unsafe-assignment': 'off', + '@typescript-eslint/restrict-template-expressions': 'off', + '@typescript-eslint/no-unsafe-member-access': 'off', + }, + }, + { + // these are only internal files, so we don't need to check them so + // rigorously they often use things like JSON which are `any`s too, + // we can be more lenient + files: ['scripts/**/*'], + rules: { + '@typescript-eslint/no-unsafe-assignment': 'off', + '@typescript-eslint/no-unsafe-member-access': 'off', + '@typescript-eslint/explicit-module-boundary-types': 'off', + '@typescript-eslint/no-unsafe-return': 'off', + }, + }, + ], +}; diff --git a/libs/@guardian/source-development-kitchen/.storybook/main.js b/libs/@guardian/source-development-kitchen/.storybook/main.js new file mode 100644 index 000000000..650a39ec5 --- /dev/null +++ b/libs/@guardian/source-development-kitchen/.storybook/main.js @@ -0,0 +1,22 @@ +const rootMain = require('../../../../configs/storybook/main'); + +// To customise your Storybook config for this project, update this file + +module.exports = { + ...rootMain, + + core: { ...rootMain.core }, + + stories: ['../src/**/*.mdx', '../src/**/*.stories.@(js|jsx|ts|tsx)'], + addons: [...rootMain.addons], + webpackFinal: async (config, { configType }) => { + // apply any global webpack configs that might have been specified in .storybook/main.js + if (rootMain.webpackFinal) { + config = await rootMain.webpackFinal(config, { configType }); + } + + // add your own webpack tweaks if needed + + return config; + }, +}; diff --git a/libs/@guardian/source-development-kitchen/.storybook/manager.ts b/libs/@guardian/source-development-kitchen/.storybook/manager.ts new file mode 100644 index 000000000..120b6bee5 --- /dev/null +++ b/libs/@guardian/source-development-kitchen/.storybook/manager.ts @@ -0,0 +1,6 @@ +import { addons } from '@storybook/manager-api'; +import { createTheme } from '../../../../configs/storybook/theme'; + +addons.setConfig({ + theme: createTheme('@guardian/source-development-kitchen'), +}); diff --git a/libs/@guardian/source-development-kitchen/.storybook/preview.ts b/libs/@guardian/source-development-kitchen/.storybook/preview.ts new file mode 100644 index 000000000..85d87c17e --- /dev/null +++ b/libs/@guardian/source-development-kitchen/.storybook/preview.ts @@ -0,0 +1 @@ +export { decorators, parameters } from '../../../../configs/storybook/preview'; diff --git a/libs/@guardian/source-development-kitchen/README.md b/libs/@guardian/source-development-kitchen/README.md new file mode 100644 index 000000000..3d62954d1 --- /dev/null +++ b/libs/@guardian/source-development-kitchen/README.md @@ -0,0 +1,76 @@ +# `@guardian/source-development-kitchen` + +[![npm](https://img.shields.io/npm/v/@guardian/source-development-kitchen)](https://www.npmjs.com/package/@guardian/source-development-kitchen) + +The Source Development Kitchen is where new components and patterns can be cooked up, tested and shared. There are minimal acceptance criteria. It’s okay to duplicate and break things. If a Kitchen component proves valuable, it may be promoted to `@guardian/source`. + +This package is part of the [Source design system](/docs/source/README.md). + +## Install + +```sh +$ pnpm add @guardian/source-development-kitchen +``` + +or + +```sh +$ yarn add @guardian/source-development-kitchen +``` + +or + +```sh +$ npm install @guardian/source-development-kitchen +``` + +## Example + +```tsx +import { Lines } from '@guardian/source-development-kitchen/react-components'; + +const Section = () => ( + <> + + + +); +``` + +## Documentation + +Full documentation is available in the [Source Development Kitchen storybook](https://guardian.github.io/storybooks). + +## Ownership + +Kitchen components are unsupported by CSTI. They are owned by the team or teams consuming them. + +Owners are defined in [CODEOWNERS](https://github.com/guardian/csnx/tree/main/.github/CODEOWNERS). + +If you wish to start consuming a Kitchen component, add your team as CODEOWNERS. This ensures you are notified of changes to the component. + +## Evolution + +Changes to Kitchen components are to be expected. Components in the Kitchen should be considered experimental and likely to change in ways that break things. + +Components that prove valuable may be promoted to `@guardian/source`. In order to achieve this, the component must meet Source’s [acceptance criteria](https://theguardian.design/2a1e5182b/p/11c92e-acceptance-criteria). The best way to meet these is for developers to work in close collaboration with design and UX when building and evolving a component. Components should express some pattern, rule or aspect of design that is governed by Source. + +## Motivation + +Source is a library where teams can expect to find high quality shared components. Adding new components to Source requires deep work and collaboration across disciplines – design, UX and engineering. It takes a long time and substantial effort for components to land in Source. + +Potential contributors are put off contributing directly to Source, as they find it hard to balance the time investment against their team's priorities. The cost of this is two-fold: + +- The number of high quality components available in Source is lower than it could be. +- Potentially shareable components are built directly into applications, leading to fragmentation, inconsistency and duplication. + +We believe there is value in moving quickly, experimenting with new ideas and sharing those ideas for wider input. The Source Development Kitchen helps teams achieve this by lowering the barrier to entry. It allows teams to get fast feedback on new components, both from users and from other developers. + +By providing an agile mechanism for iterating and improving, components can be brought up to the level of quality expected of Source, and everyone can benefit from the work put into them. + +## Publishing + +The Source Development Kitchen is published as its own package, independent of the stable components in `@guardian/source`. This: + +- Allows the Kitchen to move fast. +- Allows us to make frequent breaking changes to the Source Development Kitchen whilst preserving semver in Source. The stable library changes at a slower pace, in order to set expectations and preserve developer confidence. diff --git a/libs/@guardian/source-development-kitchen/jest.config.js b/libs/@guardian/source-development-kitchen/jest.config.js new file mode 100644 index 000000000..5cb8e2ee9 --- /dev/null +++ b/libs/@guardian/source-development-kitchen/jest.config.js @@ -0,0 +1,12 @@ +/* eslint-disable import/no-default-export -- that's what jest likes */ + +import { config as baseConfig } from '../../../configs/jest.config.js'; + +/** @typedef {import("jest").Config} Config */ +const config = { + ...baseConfig, + displayName: '@guardian/source-development-kitchen', + testEnvironment: 'node', +}; + +export default config; diff --git a/libs/@guardian/source-development-kitchen/jest.dist.setup.js b/libs/@guardian/source-development-kitchen/jest.dist.setup.js new file mode 100644 index 000000000..2370d2e46 --- /dev/null +++ b/libs/@guardian/source-development-kitchen/jest.dist.setup.js @@ -0,0 +1,7 @@ +// Mock `src/index` with whatever the dist `package.json` points at. +// This means we can run `src/index.test.ts` against `dist` instead. + +// @ts-ignore +import * as dist from '.'; + +jest.mock('./src/index', () => dist); diff --git a/libs/@guardian/source-development-kitchen/main.js b/libs/@guardian/source-development-kitchen/main.js new file mode 100644 index 000000000..650a39ec5 --- /dev/null +++ b/libs/@guardian/source-development-kitchen/main.js @@ -0,0 +1,22 @@ +const rootMain = require('../../../../configs/storybook/main'); + +// To customise your Storybook config for this project, update this file + +module.exports = { + ...rootMain, + + core: { ...rootMain.core }, + + stories: ['../src/**/*.mdx', '../src/**/*.stories.@(js|jsx|ts|tsx)'], + addons: [...rootMain.addons], + webpackFinal: async (config, { configType }) => { + // apply any global webpack configs that might have been specified in .storybook/main.js + if (rootMain.webpackFinal) { + config = await rootMain.webpackFinal(config, { configType }); + } + + // add your own webpack tweaks if needed + + return config; + }, +}; diff --git a/libs/@guardian/source-development-kitchen/package.json b/libs/@guardian/source-development-kitchen/package.json new file mode 100644 index 000000000..4b5d196e0 --- /dev/null +++ b/libs/@guardian/source-development-kitchen/package.json @@ -0,0 +1,153 @@ +{ + "name": "@guardian/source-development-kitchen", + "version": "0.0.1", + "sideEffects": false, + "type": "module", + "exports": { + "./react-components": { + "types": "./dist/react-components.d.ts", + "import": "./dist/react-components.js", + "require": "./dist/react-components.cjs" + } + }, + "files": [ + "dist", + "react-components/package.json" + ], + "scripts": { + "build": "wireit", + "build-storybook": "wireit", + "dev": "jest --watch", + "fix": "wireit", + "lint": "wireit", + "storybook": "storybook dev --port 4405", + "test": "wireit", + "verify-dist": "wireit" + }, + "devDependencies": { + "@babel/core": "7.24.0", + "@emotion/react": "11.11.1", + "@guardian/libs": "16.0.0", + "@guardian/source": "workspace:*", + "@storybook/manager-api": "8.0.5", + "@storybook/react": "8.0.5", + "@types/react": "18.2.11", + "react": "18.2.0", + "rollup": "4.17.2", + "storybook": "8.0.5", + "tslib": "2.6.2", + "typescript": "5.3.3", + "wireit": "0.14.4" + }, + "peerDependencies": { + "@emotion/react": "^11.11.1", + "@guardian/libs": "^16.0.0", + "@guardian/source": "workspace:^", + "@types/react": "^18.2.11", + "react": "^18.2.0", + "tslib": "^2.6.2", + "typescript": "~5.3.3" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@types/react": { + "optional": true + }, + "react": { + "optional": true + }, + "typescript": { + "optional": true + } + }, + "wireit": { + "_deps": { + "dependencies": [ + "../source:build" + ] + }, + "build": { + "command": "rollup -c", + "dependencies": [ + "_deps" + ], + "files": [ + "../../../configs/rollup.config.js", + "./rollup.config.js", + "src/**", + "package.json", + "tsconfig.json" + ], + "output": [ + "dist" + ] + }, + "build-storybook": { + "command": "NODE_ENV=production storybook build --webpack-stats-json", + "dependencies": [ + "_deps" + ], + "files": [ + "**/*.{ts,tsx,js,json,mdx,md}", + "!storybook-static/**", + "!(jest*)" + ], + "output": [ + "storybook-static" + ] + }, + "fix": { + "command": "eslint --cache --color . --fix", + "dependencies": [ + "_deps" + ], + "clean": false, + "files": [ + "!(dist)/**", + "!(.eslintcache)", + "../../../.eslint*" + ], + "output": [ + "." + ] + }, + "lint": { + "command": "eslint --cache --color .", + "dependencies": [ + "_deps" + ], + "files": [ + "!(dist)/**", + "!(.eslintcache)", + "../../../.eslint*" + ], + "output": [] + }, + "test": { + "command": "jest --passWithNoTests", + "dependencies": [ + "_deps" + ], + "files": [ + "!(dist)/**", + "!(.eslintcache)", + "../../../jest.*" + ], + "output": [] + }, + "verify-dist": { + "command": "jest --passWithNoTests --setupFilesAfterEnv ./jest.dist.setup.js", + "dependencies": [ + "build" + ], + "files": [ + "!(dist)/**", + "!(.eslintcache)", + "../../../jest.*" + ], + "output": [] + } + } +} diff --git a/libs/@guardian/source-development-kitchen/react-components/package.json b/libs/@guardian/source-development-kitchen/react-components/package.json new file mode 100644 index 000000000..2d5dfd9b9 --- /dev/null +++ b/libs/@guardian/source-development-kitchen/react-components/package.json @@ -0,0 +1,6 @@ +{ + "//": "sub-package to match the `exports` field in the parent package.json", + "private": true, + "type": "module", + "main": "../dist/react-components.js" +} diff --git a/libs/@guardian/source-development-kitchen/rollup.config.js b/libs/@guardian/source-development-kitchen/rollup.config.js new file mode 100644 index 000000000..d991c7739 --- /dev/null +++ b/libs/@guardian/source-development-kitchen/rollup.config.js @@ -0,0 +1,7 @@ +import config from '../../../configs/rollup/rollup.config.js'; + +export default config({ + input: { + 'react-components': 'src/react-components/index.ts', + }, +}); diff --git a/libs/@guardian/source-development-kitchen/src/react-components b/libs/@guardian/source-development-kitchen/src/react-components new file mode 120000 index 000000000..9e767f2eb --- /dev/null +++ b/libs/@guardian/source-development-kitchen/src/react-components @@ -0,0 +1 @@ +../../source-react-components-development-kitchen/src \ No newline at end of file diff --git a/libs/@guardian/source-development-kitchen/tsconfig.json b/libs/@guardian/source-development-kitchen/tsconfig.json new file mode 100644 index 000000000..27e15b3aa --- /dev/null +++ b/libs/@guardian/source-development-kitchen/tsconfig.json @@ -0,0 +1,21 @@ +{ + "extends": "../../../tsconfig.base.json", + "files": ["../../../@types/window.d.ts"], + "include": [".", ".storybook/*"], + "exclude": ["node_modules", "dist", ".wireit", "storybook-static"], + "compilerOptions": { + "paths": { + "@guardian/source-foundations": [ + "libs/@guardian/source/src/foundations/index.ts" + ], + "@guardian/source-react-components": [ + "libs/@guardian/source/src/react-components/index.ts" + ] + } + }, + "references": [ + { + "path": "./tsconfig.spec.json" + } + ] +} diff --git a/libs/@guardian/source-development-kitchen/tsconfig.spec.json b/libs/@guardian/source-development-kitchen/tsconfig.spec.json new file mode 100644 index 000000000..914db19cb --- /dev/null +++ b/libs/@guardian/source-development-kitchen/tsconfig.spec.json @@ -0,0 +1,21 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "allowJs": true, + "outDir": "../../../dist/out-tsc", + "module": "commonjs", + "types": ["jest", "node"] + }, + "include": [ + "jest.config.js", + "**/*.test.ts", + "**/*.spec.ts", + "**/*.test.tsx", + "**/*.spec.tsx", + "**/*.test.js", + "**/*.spec.js", + "**/*.test.jsx", + "**/*.spec.jsx", + "**/*.d.ts" + ] +} diff --git a/libs/@guardian/source/README.md b/libs/@guardian/source/README.md index a21ace586..adee08f2f 100644 --- a/libs/@guardian/source/README.md +++ b/libs/@guardian/source/README.md @@ -6,7 +6,7 @@ > [Source Design System](https://theguardian.design). [![npm](https://img.shields.io/npm/v/@guardian/source)](https://www.npmjs.com/package/@guardian/source) - + ## Install @@ -31,8 +31,7 @@ $ npm install @guardian/source ## Documentation -Full documentation for components and foundations -is available in the [Source storybook](https://guardian.github.io/storybooks/?path=/docs/source). +Full documentation is available in the [Source storybook](https://guardian.github.io/storybooks). ## Contributing diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index add9603cc..1aa30054b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -702,6 +702,48 @@ importers: specifier: 0.14.4 version: 0.14.4 + libs/@guardian/source-development-kitchen: + devDependencies: + '@babel/core': + specifier: 7.24.0 + version: 7.24.0 + '@emotion/react': + specifier: 11.11.1 + version: 11.11.1(@types/react@18.2.11)(react@18.2.0) + '@guardian/libs': + specifier: 16.0.0 + version: 16.0.0(tslib@2.6.2)(typescript@5.3.3) + '@guardian/source': + specifier: workspace:* + version: link:../source + '@storybook/manager-api': + specifier: 8.0.5 + version: 8.0.5(react-dom@18.2.0)(react@18.2.0) + '@storybook/react': + specifier: 8.0.5 + version: 8.0.5(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3) + '@types/react': + specifier: 18.2.11 + version: 18.2.11 + react: + specifier: 18.2.0 + version: 18.2.0 + rollup: + specifier: 4.17.2 + version: 4.17.2 + storybook: + specifier: 8.0.5 + version: 8.0.5(react-dom@18.2.0)(react@18.2.0) + tslib: + specifier: 2.6.2 + version: 2.6.2 + typescript: + specifier: 5.3.3 + version: 5.3.3 + wireit: + specifier: 0.14.4 + version: 0.14.4 + libs/@guardian/source-foundations: dependencies: mini-svg-data-uri: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 08e37de2b..9e10abdd9 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -2,5 +2,6 @@ packages: - 'apps/**' - 'libs/**' - '!**/libs/@guardian/source/*/**' + - '!**/libs/@guardian/source-development-kitchen/*/**' - 'tools/**' - 'configs/**'