113 lines
5.8 KiB
Markdown
113 lines
5.8 KiB
Markdown
# Contributing
|
|
|
|
Thanks for your interest in contributing to WooCommerce Blocks! Below are some developer docs for working with the project.
|
|
|
|
To get started run `npm install` and `composer install` in the plugin directory to install all required dependencies.
|
|
|
|
## Building assets
|
|
|
|
We have a set of scripts in npm to handle repeated developer tasks.
|
|
|
|
### `$ npm run build` & `$ npm start`
|
|
|
|
These scripts compile the code using `webpack`.
|
|
|
|
- Run `$ npm run build` to build all assets for production.
|
|
- Run `$ npm start` to build assets and watch for changes (useful for development).
|
|
|
|
You can also run `$ npx webpack` to run the development build and not keep watching.
|
|
|
|
### `$ npm run lint`
|
|
|
|
This script runs 3 sub-commands: `lint:php`, `lint:css`, `lint:js`. Use these to run linters across the codebase (linters check for valid syntax).
|
|
|
|
- `lint:php` runs phpcs via composer, which uses the [phpcs.xml](https://github.com/woocommerce/woocommerce-gutenberg-products-block/blob/master/phpcs.xml) ruleset.
|
|
- `lint:css` runs stylelint over all the scss code in `assets/css`, using the rules in [.stylelintrc.json.](https://github.com/woocommerce/woocommerce-gutenberg-products-block/blob/master/.stylelintrc.json)
|
|
- `lint:js` runs eslint over all the JavaScript, using the rules in [.eslintrc.js.](https://github.com/woocommerce/woocommerce-gutenberg-products-block/blob/master/.eslintrc.js)
|
|
|
|
### `$ npm run test`
|
|
|
|
The test scripts use [wp-scripts](https://github.com/WordPress/gutenberg/tree/master/packages/scripts) to run jest for component and unit testing.
|
|
|
|
- `test:update` updates the snapshot tests for components, used if you change a component that has tests attached.
|
|
- Use `test:watch` to keep watch of files and automatically re-run tests.
|
|
|
|
### `$ npm run prepack`
|
|
|
|
This script is run automatically when `$ npm pack` or `$ npm publish` is run. It installs packages, runs the linters, runs the tests, and then builds assets from source once more.
|
|
|
|
### `$ npm run package-plugin`
|
|
|
|
This script run `npm install` and `npm run build` and then creates a zip file automatically for you which you can use to install WooCommerce Blocks through the WordPress admin.
|
|
|
|
## Tagging new releases on GitHub
|
|
|
|
If you have commit access, tagging a new version on GitHub can be done by running the following script:
|
|
|
|
```shell
|
|
$ npm run deploy
|
|
```
|
|
|
|
This will trigger a build and then run the release script (found in `/bin/github-deploy.sh`). This tags a new version and creates the GitHub release from your current branch.
|
|
|
|
__Important:__ Before running the deploy script ensure you have committed all changes to GitHub and that you have the correct branch checked out that you wish to release.
|
|
|
|
If you want to add additional details or a binary file to the release after deployment, [you can edit the release here](https://github.com/woocommerce/woocommerce-gutenberg-products-block/releases).
|
|
|
|
## Pushing new releases to WordPress.org
|
|
|
|
If you have SVN commit access to the WordPress.org plugin repository you can run the following script to prepare a new version:
|
|
|
|
```shell
|
|
$ npm run release
|
|
```
|
|
|
|
This will ask for a tagged version number, check it out from GitHub, check out the SVN repository, and prepare all files. It will give you a command when it's finished to do the actual commit; you have a chance to test/check the files before pushing to WordPress.org.
|
|
|
|
__Important:__ Before running the release script ensure you have already pushed a new release to GitHub.
|
|
|
|
## Publishing `@woocommerce/block-library`
|
|
|
|
We publish the blocks to npm at [@woocommerce/block-library,](https://www.npmjs.com/package/@woocommerce/block-library) and then import them into WooCommerce core via [a grunt script.](https://github.com/woocommerce/woocommerce/blob/741bd5ba6d193e21893ef3af3d4f3f030a79c099/Gruntfile.js#L347)
|
|
|
|
To release a new version, there are 3 basic steps. Prepare and test the release, publish the version, then import into WooCommerce core.
|
|
|
|
### 1. Prepare and test the release
|
|
|
|
- Manually change the versions in `package.json` and `woocommerce-gutenberg-products-block.php` (once in the plugin header, and `WGPB_VERSION`). [See an example PR with these changes.](https://github.com/woocommerce/woocommerce-gutenberg-products-block/pull/478/commits/725c43fe0362044c953728cb3391095a43e66bb5)
|
|
- Run `npm pack` to prep a `.tgz` file.
|
|
- Optionally test the package by uploading this onto a test site.
|
|
|
|
### 2. Publish this version
|
|
|
|
- Run `npm publish --access public`, which will push the version up to npm.
|
|
- Check [@woocommerce/block-library](https://www.npmjs.com/package/@woocommerce/block-library) for your update
|
|
|
|
### 3. Pull into WooCommerce core
|
|
|
|
- Manually update the @woocommerce/block-library version in `package.json`
|
|
- In the woocommerce folder, run `npm install` to download the version you just specified
|
|
- Run the copy command, `npx grunt blocks`, to copy the build files from node_modules into their destinations in WC core
|
|
- Check that the changes imported look correct
|
|
- Make a PR on WooCommerce to import the new version
|
|
|
|
## How to test `@woocommerce/block-library` without publishing to npm
|
|
|
|
If you need to test how something works once built into WooCommerce core, you can `pack` a .tgz file and tell WooCommerce to use this local .tgz file instead of the version on npmjs.com.
|
|
|
|
- Run `npm pack` to create the .tgz file
|
|
- Move the file into the `woocommerce` plugin directory, optionally renaming it to something unique
|
|
- Update `/woocommerce/package.json`:
|
|
|
|
```json
|
|
"dependencies": {
|
|
"@woocommerce/block-library": "file://./woocommerce-block-library-2.2.0-dev.tgz"
|
|
},
|
|
```
|
|
|
|
- Now you can run `npm install` in woocommerce to install from this local file
|
|
- Run `npx grunt blocks` to build just the blocks code, or `npx grunt` to run the full build process
|
|
- Test whatever you were testing 🎉
|
|
|
|
If you're testing something multiple times, note that the **.tgz is cached,** so if you're doing this more than once, the tgz name needs to be different to break that cache.
|