chore(turbo): flip turbo caching glob from allow-list to deny-list (#2772)

### What

Flip Turborepo cache glob pattern from an allow-list to deny-list pattern.

### Why

Packages within medusa's monorepo will output their build to a `dist` directory. 

This convention does not apply to plugins since the core plugin loader expects the content of plugin packages `src` directory to be outputted at the root of the package. 

i.e. `packages/foobar-plugin/src/utils/index.ts` -> `packages/foobar-plugin/utils/index.js`

Manually maintaining an allow-list of known plugin output directories is not scalable. When a directory exists in a plugin package but is not know to the allow-list, the directory will not be re-built on subsequent builds. Troubleshooting the issue requires intimate knowledge of Turborepo caching strategies.

### How

By using a deny-list glob pattern, plugin packages can now declare any not-known directory within their `src` folder without facing any potential omission issues during the build process.

We declare `src` and its content as the only directory for turbo cache to ignore.

### Additional scope

* Use `turbo.json` file content in cache hashing algorithm in order to break CI cache when changes are made to the Turborepo config.
* Upgraded turbo minor verion.
* Added missing dependency to medusa package.

### Test
* Delete previously built output in packages. Run `yarn build --force` (replace any existing cache)
  * Expect all src content to be outputted
* Run `yarn build` right after
  * Expect a fast build time since cache will be fresh
* Add a new directory with an index.ts file in a plugin package src folder. Run `yarn build` 
  * Expect a fast build time, except for the modified plugin package.
  * Expect the newly added directory to be outputted.
* Delete the newly outputted directory. Run `yarn build`
  * Expect the outputted directory to reappear. 

### References
* https://github.com/medusajs/medusa/blob/5093b82f3a28323e99b6b133ae87c76fac01a298/packages/medusa/src/loaders/plugins.ts
* https://turbo.build/repo/docs/reference/configuration#outputs
* https://turbo.build/repo/docs/reference/configuration#globaldependencies

Resolves CORE-891
This commit is contained in:
Patrick
2022-12-13 17:59:48 +00:00
committed by GitHub
parent 29135c0519
commit 17c3f34e3d
5 changed files with 51 additions and 129 deletions
+6 -6
View File
@@ -42,7 +42,7 @@
"resolve-cwd": "^3.0.0",
"ts-jest": "^26.5.6",
"ts-node": "^10.9.1",
"turbo": "^1.3.1",
"turbo": "^1.6.3",
"typedoc": "0.23.10",
"typedoc-frontmatter-plugin": "link:docs-util/typedoc-plugins/typedoc-frontmatter-plugin",
"typedoc-monorepo-link-types": "^0.0.2",
@@ -58,14 +58,14 @@
"scripts": {
"hooks:install": "husky install",
"hooks:uninstall": "husky uninstall",
"build": "turbo run build",
"build": "turbo run build --no-daemon",
"lint": "eslint --ignore-path .eslintignore --ext .js,.ts,.tsx .",
"prettier": "prettier",
"jest": "jest",
"test": "turbo run test --filter=!integration-tests-api --filter=!integration-tests-plugins",
"test:integration": "turbo run test --filter=integration-tests-api --filter=integration-tests-plugins",
"test:integration:api": "turbo run test --filter=integration-tests-api",
"test:integration:plugins": "turbo run test --filter=integration-tests-plugins",
"test": "turbo run test --no-daemon --filter=!integration-tests-api --filter=!integration-tests-plugins",
"test:integration": "turbo run test --no-daemon --filter=integration-tests-api --filter=integration-tests-plugins",
"test:integration:api": "turbo run test --no-daemon --filter=integration-tests-api",
"test:integration:plugins": "turbo run test --no-daemon --filter=integration-tests-plugins",
"openapi:generate": "node ./scripts/build-openapi.js",
"generate:services": "typedoc --options typedoc.services.js",
"generate:js-client": "typedoc --options typedoc.js-client.js",